From 7a557380aa36e3b4e95e2d89f06be11763b4ee63 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 25 Feb 2016 22:29:19 +0100 Subject: [PATCH] Fix detection of separate samplers and textures to work properly --- .../shaders/spirv/spirv_disassemble.cpp | 51 ++++++++++++------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index ea8ca7b20..7697bac30 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -3441,32 +3441,45 @@ void SPVModule::MakeReflection(const string &entryPoint, ShaderReflection *refle else if(type->texdim == spv::DimBuffer) res.resType = eResType_Buffer; - res.IsSampler = type->type == SPVTypeData::eSampledImage; - res.IsTexture = res.resType != eResType_Buffer; + res.IsSampler = type->type == SPVTypeData::eSampledImage || type->type == SPVTypeData::eSampler; + res.IsTexture = res.resType != eResType_Buffer && type->type != SPVTypeData::eSampler; + + if(type->type == SPVTypeData::eSampler) + { + res.resType = eResType_None; + res.IsSRV = false; + } bool isrw = false; SPVTypeData *sampledType = type->baseType; - if(sampledType->type == SPVTypeData::eImage) + if(type->type == SPVTypeData::eSampler) { - isrw = (sampledType->sampled == 2); - sampledType = sampledType->baseType; + res.resType = eResType_None; } - if(type->type == SPVTypeData::eImage) - { - isrw = true; - } - - res.IsSRV = !isrw; - - if(sampledType->type == SPVTypeData::eFloat) - res.variableType.descriptor.type = eVar_Float; - else if(sampledType->type == SPVTypeData::eUInt) - res.variableType.descriptor.type = eVar_UInt; - else if(sampledType->type == SPVTypeData::eSInt) - res.variableType.descriptor.type = eVar_Int; else - RDCERR("Unexpected base type of resource %u", sampledType->type); + { + if(sampledType->type == SPVTypeData::eImage) + { + isrw = (sampledType->sampled == 2); + sampledType = sampledType->baseType; + } + if(type->type == SPVTypeData::eImage) + { + isrw = (type->sampled == 2); + } + + res.IsSRV = !isrw; + + if(sampledType->type == SPVTypeData::eFloat) + res.variableType.descriptor.type = eVar_Float; + else if(sampledType->type == SPVTypeData::eUInt) + res.variableType.descriptor.type = eVar_UInt; + else if(sampledType->type == SPVTypeData::eSInt) + res.variableType.descriptor.type = eVar_Int; + else + RDCERR("Unexpected base type of resource %u", sampledType->type); + } res.variableType.descriptor.rows = 1; res.variableType.descriptor.cols = 1;