Check for failed ShaderDebugTrace centrally

* We don't expect the debug to fail entirely and if it does we can throw a test
  failure
This commit is contained in:
baldurk
2026-09-11 21:17:16 +01:00
parent 031212e916
commit 04af66d71f
17 changed files with 29 additions and 114 deletions
+25 -29
View File
@@ -129,35 +129,31 @@ class Buffer_Truncation(rdtest.TestCase):
rd.DebugPixelInputs(),
)
if trace.debugger is None:
self.controller.FreeTrace(trace)
raise rdtest.TestFailureException("Shader did not debug at all")
cycles, variables = self.process_trace(trace)
cbuf_sourceVars = [s for s in trace.sourceVars if s.variables[0].type == rd.DebugVariableType.Constant and s.rows > 0]
# Vulkan style, one source var for the cbuffer
if len(cbuf_sourceVars) == 1:
debugged_cb = trace.constantBlocks[0]
assert debugged_cb.members[0].name == 'padding'
assert debugged_cb.members[1].name == 'outcol'
if not rdtest.value_compare(debugged_cb.members[1].value.f32v[0:4], [0.0, 0.0, 0.0, 0.0]):
raise rdtest.TestFailureException(f"expected outcol to be 0s, but got {debugged_cb.members[1].value.f32v[0:4]}")
# D3D style, one source var for each member mapping to a register
elif len(cbuf_sourceVars) == 17:
debugged_cb = trace.constantBlocks[0].members[16]
assert all(['consts.padding[' in c.name for c in cbuf_sourceVars[0:16]])
assert cbuf_sourceVars[16].name == 'consts.outcol'
assert cbuf_sourceVars[16].variables[0].name == 'cb0[16]' or cbuf_sourceVars[16].variables[0].name == 'consts[16]'
if not rdtest.value_compare(debugged_cb.value.f32v[0:4], [0.0, 0.0, 0.0, 0.0]):
raise rdtest.TestFailureException(f"expected outcol to be 0s, but got {debugged_cb.members[1].value.f32v[0:4]}")
else:
cycles, variables = self.process_trace(trace)
cbuf_sourceVars = [s for s in trace.sourceVars if s.variables[0].type == rd.DebugVariableType.Constant and s.rows > 0]
# Vulkan style, one source var for the cbuffer
if len(cbuf_sourceVars) == 1:
debugged_cb = trace.constantBlocks[0]
assert debugged_cb.members[0].name == 'padding'
assert debugged_cb.members[1].name == 'outcol'
if not rdtest.value_compare(debugged_cb.members[1].value.f32v[0:4], [0.0, 0.0, 0.0, 0.0]):
raise rdtest.TestFailureException(f"expected outcol to be 0s, but got {debugged_cb.members[1].value.f32v[0:4]}")
# D3D style, one source var for each member mapping to a register
elif len(cbuf_sourceVars) == 17:
debugged_cb = trace.constantBlocks[0].members[16]
assert all(['consts.padding[' in c.name for c in cbuf_sourceVars[0:16]])
assert cbuf_sourceVars[16].name == 'consts.outcol'
assert cbuf_sourceVars[16].variables[0].name == 'cb0[16]' or cbuf_sourceVars[16].variables[0].name == 'consts[16]'
if not rdtest.value_compare(debugged_cb.value.f32v[0:4], [0.0, 0.0, 0.0, 0.0]):
raise rdtest.TestFailureException(f"expected outcol to be 0s, but got {debugged_cb.members[1].value.f32v[0:4]}")
else:
raise rdtest.TestFailureException(f"Unexpected number of constant buffer source vars {len(cbuf_sourceVars)}")
raise rdtest.TestFailureException(f"Unexpected number of constant buffer source vars {len(cbuf_sourceVars)}")
rdtest.log.success("CBuffer value was truncated as expected")
-3
View File
@@ -13,9 +13,6 @@ class Groupshared(rdtest.TestCase):
try:
_, variables = self.process_trace(trace)
if trace.debugger is None:
raise rdtest.TestFailureException(f"Test {test} at {action.eventId} got no debug result at {x},{y},{z}")
# Find the source variable 'outval' at the highest instruction index
name = 'outval'
debugged = None
-10
View File
@@ -23,9 +23,6 @@ class Subgroup_Zoo(rdtest.TestCase):
try:
_, variables = self.process_trace(trace)
if trace.debugger is None:
raise rdtest.TestFailureException(f"Test {test} at {action.eventId} got no debug result at {x},{y},{z}")
# Find the source variable 'testResult' at the highest instruction index
name = 'testResult'
debugged = None
@@ -186,13 +183,6 @@ class Subgroup_Zoo(rdtest.TestCase):
inputs.view = view
trace = self.controller.DebugPixel(x, y, inputs)
if trace.debugger is None:
self.controller.FreeTrace(trace)
rdtest.log.error(
f"Test {idx} at {action.eventId} got no debug result at {x},{y}")
failed = True
continue
_, variables = self.process_trace(trace)
output_sourcevar = self.find_output_source_var(
+4 -8
View File
@@ -652,9 +652,6 @@ class TestCase:
if view >= 0:
ctx += f" view {view}"
if debug.trace.debugger is None:
raise TestFailureException(f"Couldn't debug {ctx}")
cycles, variables = self.process_trace(debug.trace)
postvs_vtx = vtx
@@ -918,7 +915,8 @@ class TestCase:
return ret
def generate_full_trace(self, trace: rd.ShaderDebugTrace) -> List[rd.ShaderDebugState]:
assert trace.debugger is not None
if trace.debugger is None:
raise TestFailureException("Couldn't debug shader at all")
allStates: List[rd.ShaderDebugState] = []
allChanges: List[List[rd.ShaderVariableChange]] = []
@@ -933,7 +931,8 @@ class TestCase:
return allStates
def process_trace(self, trace: rd.ShaderDebugTrace, validate: bool = True):
assert trace.debugger is not None
if trace.debugger is None:
raise TestFailureException("Couldn't debug shader at all")
variables: Dict[str, rd.ShaderVariable] = {}
cycles = 0
@@ -1165,9 +1164,6 @@ class TestCase:
# Debug the shader
trace = self.controller.DebugPixel(x, y, rd.DebugPixelInputs())
if trace.debugger is None:
self.controller.FreeTrace(trace)
raise TestFailureException(f"Pixel shader could not be debugged at {x},{y}.")
_, variables = self.process_trace(trace)
output = self.find_output_source_var(trace, rd.ShaderBuiltin.ColorOutput, 0)
@@ -85,11 +85,6 @@ class D3D11_AMD_Shader_Extensions(rdtest.TestCase):
trace = self.controller.DebugThread((0, 0, 0), (0, 0, 0))
if trace.debugger is None:
self.controller.FreeTrace(trace)
raise rdtest.TestFailureException("Couldn't debug compute shader")
cycles, variables = self.process_trace(trace)
if cycles < 3:
@@ -27,11 +27,6 @@ class D3D11_Shader_Debug_Zoo(rdtest.TestCase):
# Debug the shader
trace = self.controller.DebugPixel(4 * test, 4 * idx, rd.DebugPixelInputs())
if trace.debugger is None:
rdtest.log.error(f"Test {test} failed to debug.")
self.controller.FreeTrace(trace)
continue
cycles, variables = self.process_trace(trace)
output = self.find_output_source_var(trace, rd.ShaderBuiltin.ColorOutput, 0)
@@ -19,10 +19,6 @@ class D3D11_Shader_Linkage_Zoo(rdtest.TestCase):
# Debug the shader
trace = self.controller.DebugPixel(200, 150, rd.DebugPixelInputs())
if trace.debugger is None:
failed = True
rdtest.log.error(f"Test {event_name} could not be debugged.")
continue
cycles, variables = self.process_trace(trace)
@@ -114,11 +114,6 @@ class D3D12_AMD_Shader_Extensions(rdtest.TestCase):
trace = self.controller.DebugThread((0, 0, 0), (0, 0, 0))
if trace.debugger is None:
self.controller.FreeTrace(trace)
raise rdtest.TestFailureException("Couldn't debug compute shader")
cycles, variables = self.process_trace(trace)
if cycles < 3:
@@ -27,10 +27,6 @@ class D3D12_Shader_Linkage_Zoo(rdtest.TestCase):
# Debug the shader
trace = self.controller.DebugPixel(200, 150, rd.DebugPixelInputs())
if trace.debugger is None:
failed = True
rdtest.log.error(f"Test {event_name} could not be debugged.")
continue
cycles, variables = self.process_trace(trace)
@@ -51,9 +51,6 @@ class D3D12_Vertex_UAV(rdtest.TestCase):
# Debug the shader
trace = self.controller.DebugPixel(50, 50, rd.DebugPixelInputs())
if trace.debugger is None:
raise rdtest.TestFailureException(f"Pixel shader at {name} could not be debugged.")
self.controller.FreeTrace(trace)
cycles, variables = self.process_trace(trace)
@@ -52,12 +52,6 @@ class GL_Shader_Debug_Zoo(rdtest.TestCase):
rdtest.log.print(f"debugging {x},{y}")
if trace.debugger is None:
failed = True
rdtest.log.error(f"Test {test} in sub-section {child} did not debug pixel")
self.controller.FreeTrace(trace)
continue
_, variables = self.process_trace(trace)
output = self.find_output_source_var(trace, rd.ShaderBuiltin.ColorOutput, 0)
-11
View File
@@ -83,11 +83,6 @@ class Iter_Test(rdtest.TestCase):
rdtest.log.print(f"Debug Thread Workgroup:{wgSize} groupid:{groupid} threadid:{threadid}")
trace = self.controller.DebugThread(groupid, threadid)
if trace.debugger is None:
self.controller.FreeTrace(trace)
rdtest.log.print("No debug result")
return
try:
cycles, variables = self.process_trace(trace)
except rdtest.TestFailureException as err:
@@ -269,12 +264,6 @@ class Iter_Test(rdtest.TestCase):
inputs.primitive = lastmod.primitiveID;
trace = self.controller.DebugPixel(x, y, inputs)
if trace.debugger is None:
self.controller.FreeTrace(trace)
rdtest.log.print("No debug result")
return
try:
cycles, variables = self.process_trace(trace)
except rdtest.TestFailureException as err:
@@ -99,9 +99,6 @@ class VK_Graphics_Pipeline(rdtest.TestCase):
inputs.primitive = 0
trace = self.controller.DebugPixel(200, 150, inputs)
if trace.debugger is None:
raise rdtest.TestFailureException("No pixel debug result")
cycles, variables = self.process_trace(trace)
output_sourcevar = self.find_output_source_var(trace, rd.ShaderBuiltin.ColorOutput, 0)
@@ -25,9 +25,6 @@ class VK_KHR_Buffer_Address(rdtest.TestCase):
# Debug the pixel shader
trace = self.controller.DebugPixel(x, y, rd.DebugPixelInputs())
if trace.debugger is None:
self.controller.FreeTrace(trace)
raise rdtest.TestFailureException(f"Test {test_name} did not debug at all")
cycles, variables = self.process_trace(trace)
output = self.find_output_source_var(trace, rd.ShaderBuiltin.ColorOutput, 0)
-3
View File
@@ -63,9 +63,6 @@ class VK_Multi_Entry(rdtest.TestCase):
assert len(refl.readOnlyResources) == 1
if trace.debugger is None:
raise rdtest.TestFailureException("No pixel debug result")
cycles, variables = self.process_trace(trace)
output_sourcevar = self.find_output_source_var(trace, rd.ShaderBuiltin.ColorOutput, 0)
-6
View File
@@ -30,9 +30,6 @@ class VK_Multi_View(rdtest.TestCase):
inputs = rd.DebugPixelInputs()
inputs.view = view
trace = self.controller.DebugPixel(x, y, inputs)
if trace.debugger is None:
self.controller.FreeTrace(trace)
raise rdtest.TestFailureException(f"Test {test_name} view {view} did not debug at all")
cycles, variables = self.process_trace(trace)
output = self.find_output_source_var(trace, rd.ShaderBuiltin.ColorOutput, 0)
@@ -73,9 +70,6 @@ class VK_Multi_View(rdtest.TestCase):
inputs = rd.DebugPixelInputs()
inputs.view = view
trace = self.controller.DebugPixel(x, y, inputs)
if trace.debugger is None:
self.controller.FreeTrace(trace)
raise rdtest.TestFailureException(f"Test {test_name} view {view} did not debug at all")
cycles, variables = self.process_trace(trace)
output = self.find_output_source_var(trace, rd.ShaderBuiltin.ColorOutput, 0)
@@ -34,12 +34,6 @@ class VK_Shader_Debug_Zoo(rdtest.TestCase):
# Debug the shader
trace = self.controller.DebugPixel(x, y, rd.DebugPixelInputs())
if trace.debugger is None:
failed = True
rdtest.log.error(f"Test {test} in sub-section {child} did not debug at all")
self.controller.FreeTrace(trace)
continue
_, variables = self.process_trace(trace)
output = self.find_output_source_var(trace, rd.ShaderBuiltin.ColorOutput, 0)