From 127c61fc8e194288e07037149141c735a1c15909 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 18 Oct 2018 17:13:10 +0100 Subject: [PATCH] Handle miscompiled SPIR-V * Someone encountered miscompiled SPIR-V such that 1.1, 2.2 etc were compiled to 1.0, 2.0. I couldn't reproduce it and I don't know how glslang would miscompile, but this workaround is at least safe to apply. --- renderdoc/driver/vulkan/vk_overlay.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_overlay.cpp b/renderdoc/driver/vulkan/vk_overlay.cpp index 9b355d06a..8fa960540 100644 --- a/renderdoc/driver/vulkan/vk_overlay.cpp +++ b/renderdoc/driver/vulkan/vk_overlay.cpp @@ -288,6 +288,8 @@ void VulkanDebugManager::PatchFixedColShader(VkShaderModule &mod, float col[4]) alias.spirv = &spv[0]; size_t spirvLength = spv.size(); + int patched = 0; + size_t it = 5; while(it < spirvLength) { @@ -296,13 +298,13 @@ void VulkanDebugManager::PatchFixedColShader(VkShaderModule &mod, float col[4]) if(opcode == spv::OpConstant) { - if(alias.data[it + 3] == 1.1f) + if(alias.data[it + 3] >= 1.0f && alias.data[it + 3] <= 1.5f) alias.data[it + 3] = col[0]; - else if(alias.data[it + 3] == 2.2f) + else if(alias.data[it + 3] >= 2.0f && alias.data[it + 3] <= 2.5f) alias.data[it + 3] = col[1]; - else if(alias.data[it + 3] == 3.3f) + else if(alias.data[it + 3] >= 3.0f && alias.data[it + 3] <= 3.5f) alias.data[it + 3] = col[2]; - else if(alias.data[it + 3] == 4.4f) + else if(alias.data[it + 3] >= 4.0f && alias.data[it + 3] <= 4.5f) alias.data[it + 3] = col[3]; else RDCERR("Unexpected constant value"); @@ -311,6 +313,9 @@ void VulkanDebugManager::PatchFixedColShader(VkShaderModule &mod, float col[4]) it += WordCount; } + if(patched != 4) + RDCERR("Didn't patch all constants"); + VkShaderModuleCreateInfo modinfo = { VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, NULL,