Correctly update image layout to the final one after a render pass.

This commit is contained in:
Henrik Rydgård 2020-08-27 11:48:43 +02:00
parent 611161b872
commit b58f5e46ae
2 changed files with 7 additions and 7 deletions

View file

@ -1132,8 +1132,8 @@ void VulkanQueueRunner::PerformRenderPass(const VKRStep &step, VkCommandBuffer c
} }
} }
// This is supposed to bind a vulkan render pass to the command buffer. // This reads the layout of the color and depth images, and chooses a render pass using them that
// This reads the layout of the color and depth images, and chooses a render pass using them. // will transition to the desired final layout.
PerformBindFramebufferAsRenderTarget(step, cmd); PerformBindFramebufferAsRenderTarget(step, cmd);
int curWidth = step.render.framebuffer ? step.render.framebuffer->width : vulkan_->GetBackbufferWidth(); int curWidth = step.render.framebuffer ? step.render.framebuffer->width : vulkan_->GetBackbufferWidth();
@ -1329,9 +1329,9 @@ void VulkanQueueRunner::PerformBindFramebufferAsRenderTarget(const VKRStep &step
step.render.finalColorLayout, step.render.finalColorLayout,
step.render.finalDepthStencilLayout); step.render.finalDepthStencilLayout);
// We now do any layout transitions of the framebuffer as part of the render pass. // We now do any layout pretransitions as part of the render pass.
fb->color.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; fb->color.layout = step.render.finalColorLayout;
fb->depth.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; fb->depth.layout = step.render.finalDepthStencilLayout;
if (step.render.color == VKRRenderPassAction::CLEAR) { if (step.render.color == VKRRenderPassAction::CLEAR) {
Uint8x4ToFloat4(clearVal[0].color.float32, step.render.clearColor); Uint8x4ToFloat4(clearVal[0].color.float32, step.render.clearColor);

View file

@ -218,8 +218,8 @@ public:
// Only call this from the render thread! Also ok during initialization (LoadCache). // Only call this from the render thread! Also ok during initialization (LoadCache).
VkRenderPass GetRenderPass( VkRenderPass GetRenderPass(
VKRRenderPassAction colorLoadAction, VKRRenderPassAction depthLoadAction, VKRRenderPassAction stencilLoadAction, VKRRenderPassAction colorLoadAction, VKRRenderPassAction depthLoadAction, VKRRenderPassAction stencilLoadAction,
VkImageLayout prevColorLayout, VkImageLayout prevDepthLayout, VkImageLayout finalColorLayout, VkImageLayout finalDepthStencilLayout) { VkImageLayout prevColorLayout, VkImageLayout prevDepthStencilLayout, VkImageLayout finalColorLayout, VkImageLayout finalDepthStencilLayout) {
RPKey key{ colorLoadAction, depthLoadAction, stencilLoadAction, prevColorLayout, prevDepthLayout, finalColorLayout, finalDepthStencilLayout }; RPKey key{ colorLoadAction, depthLoadAction, stencilLoadAction, prevColorLayout, prevDepthStencilLayout, finalColorLayout, finalDepthStencilLayout };
return GetRenderPass(key); return GetRenderPass(key);
} }