diff --git a/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp b/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp index d9ff18bb2..8d84d4aaa 100644 --- a/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp +++ b/renderdoc/driver/d3d11/d3d11_shaderdebug.cpp @@ -1050,6 +1050,8 @@ bool D3D11DebugAPIWrapper::CalculateSampleGather( "Opcode enum doesn't match shader define"); RDCCOMPILE_ASSERT((int)DXBCBytecode::OPCODE_SAMPLE_C == DEBUG_SAMPLE_TEX_SAMPLE_C, "Opcode enum doesn't match shader define"); + RDCCOMPILE_ASSERT((int)DXBCBytecode::OPCODE_SAMPLE_D == DEBUG_SAMPLE_TEX_SAMPLE_D, + "Opcode enum doesn't match shader define"); RDCCOMPILE_ASSERT((int)DXBCBytecode::OPCODE_SAMPLE_C_LZ == DEBUG_SAMPLE_TEX_SAMPLE_C_LZ, "Opcode enum doesn't match shader define"); RDCCOMPILE_ASSERT((int)DXBCBytecode::OPCODE_GATHER4 == DEBUG_SAMPLE_TEX_GATHER4, @@ -1110,6 +1112,15 @@ bool D3D11DebugAPIWrapper::CalculateSampleGather( } } + // set array slice selection to 0 if the resource is declared non-arrayed + + if(resourceData.dim == RESOURCE_DIMENSION_TEXTURE1D) + uv.value.f32v[1] = 0.0f; + else if(resourceData.dim == RESOURCE_DIMENSION_TEXTURE2D || + resourceData.dim == RESOURCE_DIMENSION_TEXTURE2DMS || + resourceData.dim == RESOURCE_DIMENSION_TEXTURECUBE) + uv.value.f32v[2] = 0.0f; + DebugSampleOperation cbufferData = {}; memcpy(&cbufferData.debugSampleUV, uv.value.u32v.data(), sizeof(Vec4f)); diff --git a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp index bbf98970b..66b82576c 100644 --- a/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp +++ b/renderdoc/driver/d3d12/d3d12_shaderdebug.cpp @@ -1117,6 +1117,8 @@ bool D3D12DebugAPIWrapper::CalculateSampleGather( "Opcode enum doesn't match shader define"); RDCCOMPILE_ASSERT((int)DXBCBytecode::OPCODE_SAMPLE_C == DEBUG_SAMPLE_TEX_SAMPLE_C, "Opcode enum doesn't match shader define"); + RDCCOMPILE_ASSERT((int)DXBCBytecode::OPCODE_SAMPLE_D == DEBUG_SAMPLE_TEX_SAMPLE_D, + "Opcode enum doesn't match shader define"); RDCCOMPILE_ASSERT((int)DXBCBytecode::OPCODE_SAMPLE_C_LZ == DEBUG_SAMPLE_TEX_SAMPLE_C_LZ, "Opcode enum doesn't match shader define"); RDCCOMPILE_ASSERT((int)DXBCBytecode::OPCODE_GATHER4 == DEBUG_SAMPLE_TEX_GATHER4, @@ -1177,6 +1179,15 @@ bool D3D12DebugAPIWrapper::CalculateSampleGather( } } + // set array slice selection to 0 if the resource is declared non-arrayed + + if(resourceData.dim == RESOURCE_DIMENSION_TEXTURE1D) + uv.value.f32v[1] = 0.0f; + else if(resourceData.dim == RESOURCE_DIMENSION_TEXTURE2D || + resourceData.dim == RESOURCE_DIMENSION_TEXTURE2DMS || + resourceData.dim == RESOURCE_DIMENSION_TEXTURECUBE) + uv.value.f32v[2] = 0.0f; + DebugSampleOperation cbufferData = {}; memcpy(&cbufferData.debugSampleUV, uv.value.u32v.data(), sizeof(Vec4f));