From 1f23e28893671dca79d7dae019f9315a2cf457cd Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 15 Apr 2020 18:10:10 +0100 Subject: [PATCH] Enable gather operations for all texture dimensions --- renderdoc/driver/vulkan/vk_shaderdebug.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_shaderdebug.cpp b/renderdoc/driver/vulkan/vk_shaderdebug.cpp index bc99219f6..a1f7f5d27 100644 --- a/renderdoc/driver/vulkan/vk_shaderdebug.cpp +++ b/renderdoc/driver/vulkan/vk_shaderdebug.cpp @@ -1359,9 +1359,9 @@ private: rdcspv::Id(), editor.DeclareType(rdcspv::Image(base, rdcspv::Dim::_1D, 0, 1, 0, 1, unk)), editor.DeclareType(rdcspv::Image(base, rdcspv::Dim::_2D, 0, 1, 0, 1, unk)), - editor.DeclareType(rdcspv::Image(base, rdcspv::Dim::_3D, 0, 1, 0, 1, unk)), + editor.DeclareType(rdcspv::Image(base, rdcspv::Dim::_3D, 0, 0, 0, 1, unk)), editor.DeclareType(rdcspv::Image(base, rdcspv::Dim::_2D, 0, 1, 1, 1, unk)), - editor.DeclareType(rdcspv::Image(base, rdcspv::Dim::Buffer, 0, 1, 0, 1, unk)), + editor.DeclareType(rdcspv::Image(base, rdcspv::Dim::Buffer, 0, 0, 0, 1, unk)), editor.DeclareType(rdcspv::Sampler()), }; rdcspv::Id texSampVars[(uint32_t)ShaderDebugBind::Count]; @@ -1476,9 +1476,11 @@ private: uint32_t sampIdx = (uint32_t)ShaderDebugBind::Sampler; - // for(uint32_t i = (uint32_t)ShaderDebugBind::First; i < (uint32_t)ShaderDebugBind::Count; i++) - uint32_t i = (uint32_t)ShaderDebugBind::Tex2D; + for(uint32_t i = (uint32_t)ShaderDebugBind::First; i < (uint32_t)ShaderDebugBind::Count; i++) { + if(i == sampIdx) + continue; + { rdcspv::Op op = rdcspv::Op::ImageFetch; @@ -1487,7 +1489,7 @@ private: rdcspv::ImageOperandsAndParamDatas imageOperands; - if(i != (uint32_t)ShaderDebugBind::Buffer) + if(i != (uint32_t)ShaderDebugBind::Buffer && i != (uint32_t)ShaderDebugBind::Tex2DMS) imageOperands.setLod(texel_lod); cases.add(rdcspv::OpLabel(label)); @@ -1499,6 +1501,11 @@ private: cases.add(rdcspv::OpBranch(breakLabel)); } + // buffers and multisampled images don't support sampling, so skip the other operations at + // this point + if(i == (uint32_t)ShaderDebugBind::Buffer || i == (uint32_t)ShaderDebugBind::Tex2DMS) + continue; + for(rdcspv::Op op : {rdcspv::Op::ImageSampleExplicitLod, rdcspv::Op::ImageSampleImplicitLod}) { rdcspv::Id label = editor.MakeId();