Skip to content

Commit fa9bc12

Browse files
committed
Add early return test case to D3D12_Shader_DebugData
Change python to search backwards through the instruction info to find the value for a source variable
1 parent 061ef29 commit fa9bc12

File tree

3 files changed

+46
-6
lines changed

3 files changed

+46
-6
lines changed

util/test/demos/d3d12/d3d12_shader_debugdata_zoo.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,13 @@ struct TestStruct
150150
testResult.x = testStruct.anon.a.x;
151151
testResult.y = testStruct.anon.b.x;
152152
}
153+
else if(testIndex == 4)
154+
{
155+
testResult.x = intVal * 7;
156+
testResult.y = intVal * 5;
157+
SET_DATA(testIndex, testResult);
158+
EARLY_RETURN;
159+
}
153160
else
154161
{
155162
testResult = 0.4f;
@@ -161,6 +168,8 @@ struct TestStruct
161168

162169
std::string pixel = R"EOSHADER(
163170
171+
#define SET_DATA(INDEX, DATA)
172+
#define EARLY_RETURN return testResult
164173
#define TEST_INDEX IN.tri
165174
)EOSHADER" + testDefines +
166175
R"EOSHADER(
@@ -178,20 +187,27 @@ float4 main(v2f IN) : SV_Target0
178187

179188
std::string compute = R"EOSHADER(
180189
190+
RWStructuredBuffer<float4> bufOut : register(u0);
191+
192+
void SetOutput(uint index, float4 data)
193+
{
194+
bufOut[index] = data;
195+
}
196+
197+
#define SET_DATA(INDEX, DATA) SetOutput(INDEX, DATA)
198+
#define EARLY_RETURN return
181199
#define TEST_INDEX inTestIndex
182200
)EOSHADER" + testDefines +
183201
R"EOSHADER(
184202
185-
RWStructuredBuffer<float4> bufOut : register(u0);
186-
187203
[numthreads(1,1,1)]
188204
void main(int inTestIndex: SV_GroupID)
189205
{
190206
int __ONE = floor(inTestIndex/(inTestIndex+1.0e-6f)) + 1;
191207
)EOSHADER" + testsBody +
192208
R"EOSHADER(
193209
194-
bufOut[testIndex] = testResult;
210+
SetOutput(testIndex, testResult);
195211
}
196212
197213
)EOSHADER";

util/test/rdtest/testcase.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ def get_debug_var(self, debugVars, path: str):
706706

707707
raise KeyError("Couldn't find {} in debug vars".format(path))
708708

709-
raise KeyError("Couldn't parse path {}".format(path))
709+
raise KeyError(f"Couldn't find '{path}' in debug vars or parse it")
710710

711711

712712
def evaluate_source_var(self, sourceVar: rd.SourceVariableMapping, debugVars) -> rd.ShaderVariable:

util/test/tests/D3D12/D3D12_Shader_DebugData_Zoo.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,19 @@ def check_capture(self):
125125
shaderSrcRaw = debugInfo.files[0].contents
126126
varsToCheck = self.parse_shader_source(shaderSrcRaw, realTestResult, test)
127127
for name, varType, expectedValue in varsToCheck:
128-
debuggedValue = self.get_source_shader_var_value(trace.instInfo[-1].sourceVars, name, varType, variables)
128+
debuggedValue = None
129+
countInst = len(trace.instInfo)
130+
for inst in range(countInst):
131+
sourceVars = trace.instInfo[countInst-1-inst].sourceVars
132+
try:
133+
debuggedValue = self.get_source_shader_var_value(sourceVars, name, varType, variables)
134+
except KeyError as ex:
135+
continue
136+
except rdtest.TestFailureException as ex:
137+
continue
138+
break
139+
if debuggedValue is None:
140+
raise rdtest.TestFailureException(f"Couldn't find source variable {name} {varType}")
129141
if not rdtest.value_compare(expectedValue, debuggedValue):
130142
raise rdtest.TestFailureException(f"'{name}' {varType} debugger {debuggedValue} doesn't match expected {expectedValue}")
131143
rdtest.log.success(f"{len(varsToCheck)} source variables matched as expected")
@@ -184,7 +196,19 @@ def check_capture(self):
184196
varsToCheck = self.parse_shader_source(shaderSrcRaw, realTestResult, test)
185197
try:
186198
for name, varType, expectedValue in varsToCheck:
187-
debuggedValue = self.get_source_shader_var_value(trace.instInfo[-1].sourceVars, name, varType, variables)
199+
debuggedValue = None
200+
countInst = len(trace.instInfo)
201+
for inst in range(countInst):
202+
sourceVars = trace.instInfo[countInst-1-inst].sourceVars
203+
try:
204+
debuggedValue = self.get_source_shader_var_value(sourceVars, name, varType, variables)
205+
except KeyError as ex:
206+
continue
207+
except rdtest.TestFailureException as ex:
208+
continue
209+
break
210+
if debuggedValue is None:
211+
raise rdtest.TestFailureException(f"Couldn't find source variable {name} {varType}")
188212
if not rdtest.value_compare(expectedValue, debuggedValue):
189213
raise rdtest.TestFailureException(f"'{name}' {varType} debugger {debuggedValue} doesn't match expected {expectedValue}")
190214
rdtest.log.success(f"{len(varsToCheck)} source variables matched as expected")

0 commit comments

Comments
 (0)