From 408cb10053446419ffb9ad4e4152e420f51d3658 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 30 Apr 2020 11:45:01 +0100 Subject: [PATCH] Don't create degenerate access chain to load global variable * This seems like it's legal, but let's not do it anyway just in case. --- renderdoc/driver/vulkan/vk_shaderdebug.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_shaderdebug.cpp b/renderdoc/driver/vulkan/vk_shaderdebug.cpp index c513433f6..919d6ca9f 100644 --- a/renderdoc/driver/vulkan/vk_shaderdebug.cpp +++ b/renderdoc/driver/vulkan/vk_shaderdebug.cpp @@ -3009,8 +3009,15 @@ static void CreatePSInputFetcher(rdcarray &fragspv, uint32_t &structSt rdcspv::Id ptrType = editor.DeclareType(rdcspv::Pointer(values[i].valueType, rdcspv::StorageClass::Input)); - rdcspv::Id ptr = - ops.add(rdcspv::OpAccessChain(ptrType, editor.MakeId(), access.ID, accessIndices)); + + // if we have no access chain it's a global pointer of the type we want, so just load + // straight out of it + rdcspv::Id ptr; + if(accessIndices.empty()) + ptr = access.ID; + else + ptr = ops.add(rdcspv::OpAccessChain(ptrType, editor.MakeId(), access.ID, accessIndices)); + rdcspv::Id base = ops.add(rdcspv::OpLoad(values[i].valueType, editor.MakeId(), ptr)); values[i].data[Variant_Base] = base;