Explicitly set array layer selection value to 0 in D3D shader debugging

* This value should be ignored, so may contain something else from the register
  that we need to remove.
This commit is contained in:
baldurk
2023-01-11 16:19:22 +00:00
parent 6e85d40ead
commit 56b519ea06
2 changed files with 22 additions and 0 deletions
@@ -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));
@@ -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));