diff --git a/renderdoc/driver/vulkan/vk_info.cpp b/renderdoc/driver/vulkan/vk_info.cpp index fa29a9591..f1e217507 100644 --- a/renderdoc/driver/vulkan/vk_info.cpp +++ b/renderdoc/driver/vulkan/vk_info.cpp @@ -1097,7 +1097,7 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan, if(graphicsLibraryCreate) availStages = graphicsLibraryCreate->flags; - vertLayout = fragLayout = GetResID(pCreateInfo->layout); + ownLayout = vertLayout = fragLayout = GetResID(pCreateInfo->layout); renderpass = GetResID(pCreateInfo->renderPass); subpass = pCreateInfo->subpass; diff --git a/renderdoc/driver/vulkan/vk_info.h b/renderdoc/driver/vulkan/vk_info.h index 4f53bcf22..f90dab8f4 100644 --- a/renderdoc/driver/vulkan/vk_info.h +++ b/renderdoc/driver/vulkan/vk_info.h @@ -269,6 +269,10 @@ struct VulkanCreationInfo ResourceId compLayout; + // the pipeline's own specified layout, independent of vertLayout/fragLayout below when linking + // graphics pipeline libraries + ResourceId ownLayout; + // these will be the same in some cases, but can be different if the application is using // INDEPENDENT_SETS_BIT_KHR ResourceId vertLayout; diff --git a/renderdoc/driver/vulkan/vk_shader_cache.cpp b/renderdoc/driver/vulkan/vk_shader_cache.cpp index 3a0f43274..d89f1e115 100644 --- a/renderdoc/driver/vulkan/vk_shader_cache.cpp +++ b/renderdoc/driver/vulkan/vk_shader_cache.cpp @@ -977,7 +977,9 @@ void VulkanShaderCache::MakeGraphicsPipelineInfo(VkGraphicsPipelineCreateInfo &p // don't have to handle separate vert/frag layouts as push constant ranges must be identical const VulkanCreationInfo::PipelineLayout &pipeLayoutInfo = - m_pDriver->m_CreationInfo.m_PipelineLayout[pipeInfo.vertLayout]; + m_pDriver->m_CreationInfo + .m_PipelineLayout[pipeInfo.ownLayout != ResourceId() ? pipeInfo.ownLayout + : pipeInfo.vertLayout]; const rdcarray &push = pipeLayoutInfo.pushRanges; VkPipelineLayoutCreateInfo pipeLayoutCreateInfo = {