diff --git a/renderdoc/driver/vulkan/vk_debug.cpp b/renderdoc/driver/vulkan/vk_debug.cpp index 47f0b4f0c..03074c65d 100644 --- a/renderdoc/driver/vulkan/vk_debug.cpp +++ b/renderdoc/driver/vulkan/vk_debug.cpp @@ -875,7 +875,7 @@ VulkanDebugManager::VulkanDebugManager(WrappedVulkan *driver, VkDevice dev) RGBA8RP, 0, // sub pass VK_NULL_HANDLE, // base pipeline handle - 0, // base pipeline index + -1, // base pipeline index }; stages[0].module = Unwrap(module[BLITVS]); diff --git a/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp index 1aa06e5d7..fffb32539 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp @@ -401,9 +401,21 @@ VkResult WrappedVulkan::vkCreateGraphicsPipelines( { CACHE_THREAD_SERIALISER(); + + VkGraphicsPipelineCreateInfo modifiedCreateInfo; + const VkGraphicsPipelineCreateInfo *createInfo = &pCreateInfos[i]; + + // since we serialise one by one, we need to fixup basePipelineIndex + if(createInfo->basePipelineIndex != -1 && createInfo->basePipelineIndex < (int)i) + { + modifiedCreateInfo = *createInfo; + modifiedCreateInfo.basePipelineHandle = pPipelines[modifiedCreateInfo.basePipelineIndex]; + modifiedCreateInfo.basePipelineIndex = -1; + createInfo = &modifiedCreateInfo; + } SCOPED_SERIALISE_CONTEXT(CREATE_GRAPHICS_PIPE); - Serialise_vkCreateGraphicsPipelines(localSerialiser, device, pipelineCache, 1, &pCreateInfos[i], NULL, &pPipelines[i]); + Serialise_vkCreateGraphicsPipelines(localSerialiser, device, pipelineCache, 1, createInfo, NULL, &pPipelines[i]); chunk = scope.Get(); }