X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fvulkan%2Fpipelinecache.cpp;h=1568e6431c9716bff03569417548db7849130c86;hb=5ced451549e2238bb1195d03419437a395b9afec;hp=425be40ab776478ecab88df4ed636c9f09fef960;hpb=1f00d807ddd7ccfeb70619a8e225db50ccd822d3;p=libs%2Fgl.git diff --git a/source/backends/vulkan/pipelinecache.cpp b/source/backends/vulkan/pipelinecache.cpp index 425be40a..1568e643 100644 --- a/source/backends/vulkan/pipelinecache.cpp +++ b/source/backends/vulkan/pipelinecache.cpp @@ -76,7 +76,7 @@ VkRenderPass PipelineCache::get_render_pass(const FrameFormat &format, bool clea attachments[i].storeOp = VK_ATTACHMENT_STORE_OP_STORE; attachments[i].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD; attachments[i].stencilStoreOp = VK_ATTACHMENT_STORE_OP_STORE; - attachments[i].initialLayout = (clear ? VK_IMAGE_LAYOUT_UNDEFINED : external_layout); + attachments[i].initialLayout = ((clear && discard) ? VK_IMAGE_LAYOUT_UNDEFINED : external_layout); attachments[i].finalLayout = external_layout; if(subpass_layout==VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) @@ -100,6 +100,7 @@ VkRenderPass PipelineCache::get_render_pass(const FrameFormat &format, bool clea subpass.pColorAttachments = color_refs; subpass.pDepthStencilAttachment = &depth_stencil_ref; + VkSubpassDependency dependency = { }; VkRenderPassCreateInfo render_pass_info = { }; render_pass_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO; render_pass_info.attachmentCount = format.size(); @@ -107,6 +108,19 @@ VkRenderPass PipelineCache::get_render_pass(const FrameFormat &format, bool clea render_pass_info.subpassCount = 1; render_pass_info.pSubpasses = &subpass; + if(to_present) + { + dependency.srcSubpass = 0; + dependency.dstSubpass = VK_SUBPASS_EXTERNAL; + dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; + dependency.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT; + dependency.dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; + dependency.dstAccessMask = 0; + + render_pass_info.dependencyCount = 1; + render_pass_info.pDependencies = &dependency; + } + VkRenderPass render_pass; vk.CreateRenderPass(render_pass_info, render_pass);