From 143f2bf054817ec1985412d2b6cc2ee44e10ff60 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 16 Apr 2020 16:55:55 +0100 Subject: [PATCH] Fix access to texel buffers --- renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp | 11 ++++++++--- renderdoc/driver/vulkan/vk_shaderdebug.cpp | 4 ++-- util/test/demos/vk/vk_shader_debug_zoo.cpp | 7 ++++++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp index 39338900a..5901c23b6 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug_setup.cpp @@ -585,12 +585,17 @@ ShaderDebugTrace *Debugger::BeginDebug(DebugAPIWrapper *apiWrapper, const Shader // sampler, so accessing the original type might be non-trivial at point of access uint32_t texType = DebugAPIWrapper::Float_Texture; - if(imageTypes[type.InnerType()].dim == Dim::Buffer) + Id imgid = type.InnerType(); + + if(innertype.type == DataType::SampledImageType) + imgid = sampledImageTypes[imgid].baseId; + + if(imageTypes[imgid].dim == Dim::Buffer) texType |= DebugAPIWrapper::Buffer_Texture; - if(imageTypes[type.InnerType()].retType.type == Op::TypeInt) + if(imageTypes[imgid].retType.type == Op::TypeInt) { - if(imageTypes[type.InnerType()].retType.signedness) + if(imageTypes[imgid].retType.signedness) texType |= DebugAPIWrapper::SInt_Texture; else texType |= DebugAPIWrapper::UInt_Texture; diff --git a/renderdoc/driver/vulkan/vk_shaderdebug.cpp b/renderdoc/driver/vulkan/vk_shaderdebug.cpp index 7acffd5ab..13f0da5f5 100644 --- a/renderdoc/driver/vulkan/vk_shaderdebug.cpp +++ b/renderdoc/driver/vulkan/vk_shaderdebug.cpp @@ -485,7 +485,7 @@ public: // create our own view (if we haven't already for this view) so we can promote to array VkImageView sampleView = m_SampleViews[GetResID(view)]; - if(sampleView == VK_NULL_HANDLE) + if(sampleView == VK_NULL_HANDLE && view != VK_NULL_HANDLE) { VkImageViewCreateInfo viewInfo = {VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; viewInfo.image = m_pDriver->GetResourceManager()->GetCurrentHandle(viewProps.image); @@ -708,7 +708,7 @@ public: if(buffer) { - writeSets[0].pTexelBufferView = &bufferView; + writeSets[0].pTexelBufferView = UnwrapPtr(bufferView); writeSets[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER; } diff --git a/util/test/demos/vk/vk_shader_debug_zoo.cpp b/util/test/demos/vk/vk_shader_debug_zoo.cpp index 2f8725019..171f3385c 100644 --- a/util/test/demos/vk/vk_shader_debug_zoo.cpp +++ b/util/test/demos/vk/vk_shader_debug_zoo.cpp @@ -131,7 +131,7 @@ layout(set = 0, binding = 5, std430) buffer storebuftype //layout(set = 0, binding = 6, rgba32f) uniform coherent image2D storeImage; -//layout(set = 0, binding = 7, rgba32f) uniform coherent samplerBuffer texBuffer; +layout(set = 0, binding = 7) uniform samplerBuffer texBuffer; //layout(set = 0, binding = 8, rgba32f) uniform coherent imageBuffer storeTexBuffer; layout(set = 0, binding = 20) uniform sampler2DArray queryTest; @@ -909,6 +909,11 @@ void main() Color = vec4(vec3(textureSize(queryTestMS)), 1.0f); break; } + case 111: + { + Color = texelFetch(texBuffer, int(zeroi+2)); + break; + } default: break; } }