mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-10-20 07:55:49 +00:00
Use render pass creation data for render pass hash. (#3636)
This commit is contained in:
committed by
GitHub
parent
4e6b6f0264
commit
f26d3b1342
@@ -3358,7 +3358,7 @@ VK_IMPORT_DEVICE
|
||||
}
|
||||
}
|
||||
|
||||
VkResult getRenderPass(uint8_t _num, const VkFormat* _formats, const VkImageAspectFlags* _aspects, const bool* _resolve, VkSampleCountFlagBits _samples, ::VkRenderPass* _renderPass, uint16_t _clearFlags)
|
||||
VkResult getRenderPass(uint8_t _num, const VkFormat* _formats, const VkImageAspectFlags* _aspects, const bool* _resolve, VkSampleCountFlagBits _samples, uint16_t _clearFlags, ::VkRenderPass* _outRenderPass, uint32_t* _outHashKey)
|
||||
{
|
||||
VkResult result = VK_SUCCESS;
|
||||
|
||||
@@ -3378,11 +3378,16 @@ VK_IMPORT_DEVICE
|
||||
}
|
||||
uint32_t hashKey = hash.end();
|
||||
|
||||
if (NULL != _outHashKey)
|
||||
{
|
||||
*_outHashKey = hashKey;
|
||||
}
|
||||
|
||||
VkRenderPass renderPass = m_renderPassCache.find(hashKey);
|
||||
|
||||
if (VK_NULL_HANDLE != renderPass)
|
||||
{
|
||||
*_renderPass = renderPass;
|
||||
*_outRenderPass = renderPass;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -3527,12 +3532,12 @@ VK_IMPORT_DEVICE
|
||||
|
||||
m_renderPassCache.add(hashKey, renderPass);
|
||||
|
||||
*_renderPass = renderPass;
|
||||
*_outRenderPass = renderPass;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
VkResult getRenderPass(uint8_t _num, const Attachment* _attachments, ::VkRenderPass* _renderPass, uint16_t _clearFlags)
|
||||
VkResult getRenderPass(uint8_t _num, const Attachment* _attachments, uint16_t _clearFlags, ::VkRenderPass* _outRenderPass, uint32_t* _outHashKey = NULL)
|
||||
{
|
||||
VkFormat formats[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
|
||||
VkImageAspectFlags aspects[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
|
||||
@@ -3546,10 +3551,10 @@ VK_IMPORT_DEVICE
|
||||
samples = texture.m_sampler.Sample;
|
||||
}
|
||||
|
||||
return getRenderPass(_num, formats, aspects, NULL, samples, _renderPass, _clearFlags);
|
||||
return getRenderPass(_num, formats, aspects, NULL, samples, _clearFlags, _outRenderPass, _outHashKey);
|
||||
}
|
||||
|
||||
VkResult getRenderPass(const SwapChainVK& swapChain, ::VkRenderPass* _renderPass, uint16_t _clearFlags)
|
||||
VkResult getRenderPass(const SwapChainVK& swapChain, uint16_t _clearFlags, ::VkRenderPass* _outRenderPass, uint32_t* _outHashKey = NULL)
|
||||
{
|
||||
const VkFormat formats[2] =
|
||||
{
|
||||
@@ -3576,7 +3581,7 @@ VK_IMPORT_DEVICE
|
||||
: 1
|
||||
;
|
||||
|
||||
return getRenderPass(num, formats, aspects, resolve, samples, _renderPass, _clearFlags);
|
||||
return getRenderPass(num, formats, aspects, resolve, samples, _clearFlags, _outRenderPass, _outHashKey);
|
||||
}
|
||||
|
||||
VkSampler getSampler(uint32_t _flags, VkFormat _format, const float _palette[][4])
|
||||
@@ -3819,7 +3824,7 @@ VK_IMPORT_DEVICE
|
||||
|
||||
murmur.add(layout.m_attributes, sizeof(layout.m_attributes) );
|
||||
murmur.add(_numInstanceData);
|
||||
murmur.add(frameBuffer.m_renderPass);
|
||||
murmur.add(frameBuffer.m_renderPassHashKey);
|
||||
const uint32_t hash = murmur.end();
|
||||
|
||||
VkPipeline pipeline = m_pipelineStateCache.find(hash);
|
||||
@@ -8032,7 +8037,7 @@ retry:
|
||||
const VkAllocationCallbacks* allocatorCb = s_renderVK->m_allocatorCb;
|
||||
|
||||
VkRenderPass renderPass;
|
||||
result = s_renderVK->getRenderPass(*this, &renderPass, 0);
|
||||
result = s_renderVK->getRenderPass(*this, 0, &renderPass);
|
||||
|
||||
if (VK_SUCCESS != result)
|
||||
{
|
||||
@@ -8339,7 +8344,7 @@ retry:
|
||||
return result;
|
||||
}
|
||||
|
||||
result = s_renderVK->getRenderPass(m_swapChain, &m_renderPass, 0);
|
||||
result = s_renderVK->getRenderPass(m_swapChain, 0, &m_renderPass, &m_renderPassHashKey);
|
||||
|
||||
if (VK_SUCCESS != result)
|
||||
{
|
||||
@@ -8361,11 +8366,11 @@ retry:
|
||||
|
||||
if (m_numTh > 0)
|
||||
{
|
||||
VK_CHECK(s_renderVK->getRenderPass(m_numTh, m_attachment, &renderPass, _clearFlags) );
|
||||
VK_CHECK(s_renderVK->getRenderPass(m_numTh, m_attachment, _clearFlags, &renderPass) );
|
||||
}
|
||||
else
|
||||
{
|
||||
VK_CHECK(s_renderVK->getRenderPass(m_swapChain, &renderPass, _clearFlags) );
|
||||
VK_CHECK(s_renderVK->getRenderPass(m_swapChain, _clearFlags, &renderPass) );
|
||||
}
|
||||
|
||||
return renderPass;
|
||||
@@ -8395,7 +8400,7 @@ retry:
|
||||
const VkDevice device = s_renderVK->m_device;
|
||||
const VkAllocationCallbacks* allocatorCb = s_renderVK->m_allocatorCb;
|
||||
|
||||
VK_CHECK(s_renderVK->getRenderPass(m_numTh, m_attachment, &m_renderPass, 0) );
|
||||
VK_CHECK(s_renderVK->getRenderPass(m_numTh, m_attachment, 0, &m_renderPass, &m_renderPassHashKey) );
|
||||
|
||||
m_depth = BGFX_INVALID_HANDLE;
|
||||
m_num = 0;
|
||||
@@ -8453,7 +8458,7 @@ retry:
|
||||
BGFX_PROFILER_SCOPE("FrameBufferVK::update", kColorResource);
|
||||
|
||||
m_swapChain.update(_commandBuffer, m_nwh, _resolution);
|
||||
VK_CHECK(s_renderVK->getRenderPass(m_swapChain, &m_renderPass, 0) );
|
||||
VK_CHECK(s_renderVK->getRenderPass(m_swapChain, 0, &m_renderPass, &m_renderPassHashKey) );
|
||||
// Don't believe the passed Resolution, as the Vulkan driver might have
|
||||
// specified another resolution, which we had to obey.
|
||||
m_width = m_swapChain.m_sci.imageExtent.width;
|
||||
|
||||
@@ -916,18 +916,19 @@ VK_DESTROY_FUNC(DescriptorSet);
|
||||
uint32_t m_width;
|
||||
uint32_t m_height;
|
||||
uint16_t m_denseIdx;
|
||||
uint8_t m_num;
|
||||
uint8_t m_numTh;
|
||||
uint8_t m_num;
|
||||
uint8_t m_numTh;
|
||||
Attachment m_attachment[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
|
||||
|
||||
SwapChainVK m_swapChain;
|
||||
void* m_nwh;
|
||||
bool m_needPresent;
|
||||
bool m_needResolve;
|
||||
bool m_needPresent;
|
||||
bool m_needResolve;
|
||||
|
||||
VkImageView m_textureImageViews[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
|
||||
VkImageView m_textureImageViews[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
|
||||
VkFramebuffer m_framebuffer;
|
||||
VkRenderPass m_renderPass;
|
||||
VkRenderPass m_renderPass;
|
||||
uint32_t m_renderPassHashKey;
|
||||
MsaaSamplerVK m_sampler;
|
||||
|
||||
VkFramebuffer m_currentFramebuffer;
|
||||
@@ -953,7 +954,7 @@ VK_DESTROY_FUNC(DescriptorSet);
|
||||
void removeExternal(TextureHandle _handle);
|
||||
|
||||
uint32_t m_queueFamily;
|
||||
VkQueue m_queue;
|
||||
VkQueue m_queue;
|
||||
|
||||
uint32_t m_currentFrameInFlight;
|
||||
uint32_t m_consumeIndex;
|
||||
|
||||
Reference in New Issue
Block a user