Use context helpers for thread debugging

This commit is contained in:
baldurk
2026-09-11 21:17:17 +01:00
parent e6948a8c7e
commit 3452ba8ffd
8 changed files with 236 additions and 255 deletions
+23 -25
View File
@@ -8,34 +8,34 @@ class Groupshared(rdtest.TestCase):
demos_test_name = None
def check_compute_thread_result(self, test: int, action: rd.ActionDescription, x: int, y: int, z: int, expected: rdtest.VectorValue):
workgroup = (0, 0, 0)
trace = self.controller.DebugThread(workgroup, (x, y, z))
try:
_, variables = self.process_trace(trace)
with self.debug_thread((0, 0, 0), (x, y, z)) as debug:
_, variables = self.process_trace(debug.trace)
# Find the source variable 'outval' at the highest instruction index
name = 'outval'
debugged = None
countInst = len(trace.instInfo)
for inst in range(countInst):
sourceVars = trace.instInfo[countInst-1-inst].sourceVars
try:
dataVars = [v for v in sourceVars if v.name == name]
if len(dataVars) == 0:
# Find the source variable 'outval' at the highest instruction index
name = 'outval'
debugged = None
countInst = len(debug.trace.instInfo)
for inst in range(countInst):
sourceVars = debug.trace.instInfo[countInst-1-inst].sourceVars
try:
dataVars = [v for v in sourceVars if v.name == name]
if len(dataVars) == 0:
continue
debugged = self.evaluate_source_var(dataVars[0], variables)
except KeyError as ex:
continue
debugged = self.evaluate_source_var(dataVars[0], variables)
except KeyError as ex:
continue
except rdtest.TestFailureException as ex:
continue
break
if debugged is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} at {x},{y},{z}")
except rdtest.TestFailureException as ex:
continue
break
if debugged is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} at {x},{y},{z}")
debuggedValue = list(debugged.value.f32v[0:4])
debuggedValue = list(debugged.value.f32v[0:4])
if not rdtest.value_compare(expected, debuggedValue, eps=5.0E-06):
raise rdtest.TestFailureException(f"EID:{action.eventId} TID:{x},{y},{z} debugged thread value {debuggedValue} does not match output {expected}")
if not rdtest.value_compare(expected, debuggedValue, eps=5.0E-06):
raise rdtest.TestFailureException(f"EID:{action.eventId} TID:{x},{y},{z} debugged thread value {debuggedValue} does not match output {expected}")
except rdtest.TestFailureException as ex:
rdtest.log.error(f"Test {test} failed {ex}")
@@ -43,8 +43,6 @@ class Groupshared(rdtest.TestCase):
except Exception as ex:
rdtest.log.error(f"Test {test} exception {ex}")
return False
finally:
self.controller.FreeTrace(trace)
return True
+22 -24
View File
@@ -19,39 +19,37 @@ class Subgroup_Zoo(rdtest.TestCase):
rdtest.log.error(f"Exception Test {test} failed {ex}")
return False
trace = self.controller.DebugThread(self.workgroup, (x, y, z))
try:
_, variables = self.process_trace(trace)
with self.debug_thread(self.workgroup, (x, y, z)) as debug:
_, variables = self.process_trace(debug.trace)
# Find the source variable 'testResult' at the highest instruction index
name = 'testResult'
debugged = None
countInst = len(trace.instInfo)
for inst in range(countInst):
sourceVars = trace.instInfo[countInst-1-inst].sourceVars
try:
dataVars = [v for v in sourceVars if v.name == name]
if len(dataVars) == 0:
# Find the source variable 'testResult' at the highest instruction index
name = 'testResult'
debugged = None
countInst = len(debug.trace.instInfo)
for inst in range(countInst):
sourceVars = debug.trace.instInfo[countInst-1-inst].sourceVars
try:
dataVars = [v for v in sourceVars if v.name == name]
if len(dataVars) == 0:
continue
debugged = self.evaluate_source_var(dataVars[0], variables)
except KeyError as ex:
continue
debugged = self.evaluate_source_var(dataVars[0], variables)
except KeyError as ex:
continue
except rdtest.TestFailureException as ex:
continue
break
if debugged is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} at {x},{y},{z}")
except rdtest.TestFailureException as ex:
continue
break
if debugged is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} at {x},{y},{z}")
debuggedValue = list(debugged.value.f32v[0:4])
debuggedValue = list(debugged.value.f32v[0:4])
if not rdtest.value_compare(real, debuggedValue, eps=5.0E-06):
raise rdtest.TestFailureException(f"EID:{action.eventId} TID:{x},{y},{z} debugged thread value {debuggedValue} does not match output {real}")
if not rdtest.value_compare(real, debuggedValue, eps=5.0E-06):
raise rdtest.TestFailureException(f"EID:{action.eventId} TID:{x},{y},{z} debugged thread value {debuggedValue} does not match output {real}")
except rdtest.TestFailureException as ex:
rdtest.log.error(f"Test {test} failed {ex}")
return False
finally:
self.controller.FreeTrace(trace)
return True
@@ -82,11 +82,10 @@ class D3D11_AMD_Shader_Extensions(rdtest.TestCase):
self.set_event(self.find_action("Dispatch").eventId, False)
trace = self.controller.DebugThread((0, 0, 0), (0, 0, 0))
with self.debug_thread((0, 0, 0), (0, 0, 0)) as debug:
cycles, variables = self.process_trace(debug.trace)
cycles, variables = self.process_trace(trace)
if cycles < 3:
raise rdtest.TestFailureException(f"Compute shader has too few cycles {cycles}")
if cycles < 3:
raise rdtest.TestFailureException(f"Compute shader has too few cycles {cycles}")
rdtest.log.success("compute shader debugged successfully")
@@ -105,17 +105,16 @@ class D3D12_AMD_Shader_Extensions(rdtest.TestCase):
if "amd_u64_atomic" not in disasm:
raise rdtest.TestFailureException(
f"Didn't find expected AMD opcode in disassembly: {disasm}")
f"Didn't find expected AMD opcode in disasse1mbly: {disasm}")
rdtest.log.success("compute shader disassembly is as expected")
self.set_event(self.find_action("Dispatch").eventId, False)
trace = self.controller.DebugThread((0, 0, 0), (0, 0, 0))
with self.debug_thread((0, 0, 0), (0, 0, 0)) as debug:
cycles, variables = self.process_trace(debug.trace)
cycles, variables = self.process_trace(trace)
if cycles < 3:
raise rdtest.TestFailureException(f"Compute shader has too few cycles {cycles}")
if cycles < 3:
raise rdtest.TestFailureException(f"Compute shader has too few cycles {cycles}")
rdtest.log.success("compute shader debugged successfully")
@@ -140,86 +140,85 @@ class D3D12_Shader_DebugData_Zoo(rdtest.TestCase):
# Loop over every test
for test in range(action.numInstances):
# Debug the shader
trace = self.controller.DebugPixel(4 * test, 0, rd.DebugPixelInputs())
cycles, variables = self.process_trace(trace)
output = self.find_output_source_var(trace, rd.ShaderBuiltin.ColorOutput, 0)
with self.debug_pixel(4 * test, 0, rd.DebugPixelInputs()) as debug:
trace = debug.trace
cycles, variables = self.process_trace(debug.trace)
output = self.find_output_source_var(debug.trace, rd.ShaderBuiltin.ColorOutput, 0)
debugged = self.evaluate_source_var(output, variables)
debugged = self.evaluate_source_var(output, variables)
try:
tex = pipe.GetOutputTargets()[0].resource
x = 4 * test
y = 0
self.check_pixel_value(tex, x, y, debugged.value.f32v[0:4])
picked = rd.PixelValue = self.controller.PickPixel(tex, x, y, rd.Subresource(0,0,0), rd.CompType.Typeless)
realTestResult = picked.floatValue
debugInfo = pipe.GetShaderReflection(rd.ShaderStage.Pixel).debugInfo
shaderSrcRaw = debugInfo.files[0].contents
varsToCheck = self.parse_shader_source(shaderSrcRaw, realTestResult, test)
for name, varType, expectedValue in varsToCheck:
debuggedValue = None
countInst = len(trace.instInfo)
for inst in range(countInst):
sourceVars = trace.instInfo[countInst-1-inst].sourceVars
try:
debuggedValue = self.get_source_shader_var_value(sourceVars, name, varType, variables)
except KeyError as ex:
continue
except rdtest.TestFailureException as ex:
continue
break
if debuggedValue is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} type:{varType}")
if not rdtest.value_compare(expectedValue, debuggedValue):
raise rdtest.TestFailureException(f"'{name}' {varType} debugger {debuggedValue} doesn't match expected {expectedValue}")
rdtest.log.success(f"{len(varsToCheck)} source variables matched as expected")
# Look for _IN.MAT0 variable in the trace input variables
name = "_IN"
inVar = [v for v in trace.inputs if v.name == name]
if len(inVar) != 1:
raise rdtest.TestFailureException(f"Couldn't find source input variable {name}")
name = "MAT0"
inVar = [v for v in inVar[0].members if v.name == name]
if len(inVar) != 1:
raise rdtest.TestFailureException(f"Couldn't find source input member {name}")
matched = True
varsToCheck = []
varsToCheck.append((f"[0]", "float4", [1.0, 2.0, 3.0, 4.0]))
varsToCheck.append((f"[1]", "float4", [5.0, 6.0, 7.0, 8.0]))
varsToCheck.append((f"[2]", "float4", [9.0, 10.0, 11.0, 12.0]))
for name, varType, expectedValue in varsToCheck:
assert isinstance(expectedValue, list)
debuggedValue = None
for v in inVar[0].members:
if v.name == name:
try:
tex = pipe.GetOutputTargets()[0].resource
x = 4 * test
y = 0
self.check_pixel_value(tex, x, y, debugged.value.f32v[0:4])
picked = rd.PixelValue = self.controller.PickPixel(tex, x, y, rd.Subresource(0,0,0), rd.CompType.Typeless)
realTestResult = picked.floatValue
debugInfo = pipe.GetShaderReflection(rd.ShaderStage.Pixel).debugInfo
shaderSrcRaw = debugInfo.files[0].contents
varsToCheck = self.parse_shader_source(shaderSrcRaw, realTestResult, test)
for name, varType, expectedValue in varsToCheck:
debuggedValue = None
countInst = len(debug.trace.instInfo)
for inst in range(countInst):
sourceVars = debug.trace.instInfo[countInst-1-inst].sourceVars
try:
debuggedValue = v.value.f32v[0:len(expectedValue)]
debuggedValue = self.get_source_shader_var_value(sourceVars, name, varType, variables)
except KeyError as ex:
continue
except rdtest.TestFailureException as ex:
matched = False
failed = True
continue
break
if debuggedValue is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} type:{varType}")
if not rdtest.value_compare(expectedValue, debuggedValue):
raise rdtest.TestFailureException(f"'{name}' {varType} debugger {debuggedValue} doesn't match expected {expectedValue}")
if debuggedValue is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} type:{varType}")
if not rdtest.value_compare(expectedValue, debuggedValue):
matched = False
failed = True
rdtest.log.error(f"'{name}' {varType} debugger {debuggedValue} doesn't match expected {expectedValue}")
rdtest.log.success(f"{len(varsToCheck)} source variables matched as expected")
if matched:
rdtest.log.success("PS MAT0 input source variable matched as expected")
# Look for _IN.MAT0 variable in the trace input variables
name = "_IN"
inVar = [v for v in debug.trace.inputs if v.name == name]
if len(inVar) != 1:
raise rdtest.TestFailureException(f"Couldn't find source input variable {name}")
name = "MAT0"
inVar = [v for v in inVar[0].members if v.name == name]
if len(inVar) != 1:
raise rdtest.TestFailureException(f"Couldn't find source input member {name}")
except rdtest.TestFailureException as ex:
rdtest.log.error(f"Test {test} failed {ex}")
failed = True
continue
finally:
self.controller.FreeTrace(trace)
matched = True
varsToCheck = []
varsToCheck.append((f"[0]", "float4", [1.0, 2.0, 3.0, 4.0]))
varsToCheck.append((f"[1]", "float4", [5.0, 6.0, 7.0, 8.0]))
varsToCheck.append((f"[2]", "float4", [9.0, 10.0, 11.0, 12.0]))
for name, varType, expectedValue in varsToCheck:
assert isinstance(expectedValue, list)
debuggedValue = None
for v in inVar[0].members:
if v.name == name:
try:
debuggedValue = v.value.f32v[0:len(expectedValue)]
except rdtest.TestFailureException as ex:
matched = False
failed = True
break
if debuggedValue is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} type:{varType}")
if not rdtest.value_compare(expectedValue, debuggedValue):
matched = False
failed = True
rdtest.log.error(f"'{name}' {varType} debugger {debuggedValue} doesn't match expected {expectedValue}")
rdtest.log.success(f"Test {test} matched as expected")
if matched:
rdtest.log.success("PS MAT0 input source variable matched as expected")
except rdtest.TestFailureException as ex:
rdtest.log.error(f"Test {test} failed {ex}")
failed = True
continue
rdtest.log.success(f"Test {test} matched as expected")
rdtest.log.end_section(shaderModels[sm] + " tests")
@@ -244,43 +243,41 @@ class D3D12_Shader_DebugData_Zoo(rdtest.TestCase):
# Debug the shader
groupid = (test,0,0)
threadid = (0,0,0)
trace = self.controller.DebugThread(groupid, threadid)
cycles, variables = self.process_trace(trace)
with self.debug_thread(groupid, threadid) as debug:
cycles, variables = self.process_trace(debug.trace)
# Result is stored in RWStructuredBuffer<float4> bufOut : register(u0);
bufOut = pipe.GetReadWriteResources(rd.ShaderStage.Compute)[0].descriptor.resource
bufdata = self.controller.GetBufferData(bufOut, test*16, 16)
realTestResult = struct.unpack_from("4f", bufdata, 0)
debugInfo = pipe.GetShaderReflection(rd.ShaderStage.Compute).debugInfo
shaderSrcRaw = debugInfo.files[0].contents
varsToCheck = self.parse_shader_source(shaderSrcRaw, realTestResult, test)
try:
for name, varType, expectedValue in varsToCheck:
debuggedValue = None
countInst = len(trace.instInfo)
for inst in range(countInst):
sourceVars = trace.instInfo[countInst-1-inst].sourceVars
try:
debuggedValue = self.get_source_shader_var_value(sourceVars, name, varType, variables)
except KeyError as ex:
continue
except rdtest.TestFailureException as ex:
continue
break
if debuggedValue is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} type:{varType}")
if not rdtest.value_compare(expectedValue, debuggedValue):
raise rdtest.TestFailureException(f"'{name}' {varType} debugger {debuggedValue} doesn't match expected {expectedValue}")
rdtest.log.success(f"{len(varsToCheck)} source variables matched as expected")
# Result is stored in RWStructuredBuffer<float4> bufOut : register(u0);
bufOut = pipe.GetReadWriteResources(rd.ShaderStage.Compute)[0].descriptor.resource
bufdata = self.controller.GetBufferData(bufOut, test*16, 16)
realTestResult = struct.unpack_from("4f", bufdata, 0)
debugInfo = pipe.GetShaderReflection(rd.ShaderStage.Compute).debugInfo
shaderSrcRaw = debugInfo.files[0].contents
varsToCheck = self.parse_shader_source(shaderSrcRaw, realTestResult, test)
try:
for name, varType, expectedValue in varsToCheck:
debuggedValue = None
countInst = len(debug.trace.instInfo)
for inst in range(countInst):
sourceVars = debug.trace.instInfo[countInst-1-inst].sourceVars
try:
debuggedValue = self.get_source_shader_var_value(sourceVars, name, varType, variables)
except KeyError as ex:
continue
except rdtest.TestFailureException as ex:
continue
break
if debuggedValue is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} type:{varType}")
if not rdtest.value_compare(expectedValue, debuggedValue):
raise rdtest.TestFailureException(f"'{name}' {varType} debugger {debuggedValue} doesn't match expected {expectedValue}")
rdtest.log.success(f"{len(varsToCheck)} source variables matched as expected")
except rdtest.TestFailureException as ex:
rdtest.log.error(f"Test {test} failed {ex}")
failed = True
continue
finally:
self.controller.FreeTrace(trace)
except rdtest.TestFailureException as ex:
rdtest.log.error(f"Test {test} failed {ex}")
failed = True
continue
rdtest.log.success(f"Test {test} matched as expected")
rdtest.log.success(f"Test {test} matched as expected")
rdtest.log.end_section(section)
+43 -47
View File
@@ -57,37 +57,35 @@ class D3D12_Shader_Debug_Zoo(rdtest.TestCase):
continue
# Debug the shader
trace = self.controller.DebugThread(groupid, tid)
cycles, variables = self.process_trace(trace)
with self.debug_thread(groupid, tid) as debug:
cycles, variables = self.process_trace(debug.trace)
# Find the source variable 'testResult' at the highest instruction index
name = 'testResult'
debugged = None
countInst = len(trace.instInfo)
for inst in range(countInst):
sourceVars = trace.instInfo[countInst-1-inst].sourceVars
try:
dataVars = [v for v in sourceVars if v.name == name]
if len(dataVars) == 0:
# Find the source variable 'testResult' at the highest instruction index
name = 'testResult'
debugged = None
countInst = len(debug.trace.instInfo)
for inst in range(countInst):
sourceVars = debug.trace.instInfo[countInst-1-inst].sourceVars
try:
dataVars = [v for v in sourceVars if v.name == name]
if len(dataVars) == 0:
continue
debugged = self.evaluate_source_var(dataVars[0], variables)
except KeyError as ex:
continue
debugged = self.evaluate_source_var(dataVars[0], variables)
except KeyError as ex:
continue
except rdtest.TestFailureException as ex:
continue
break
if debugged is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} at {test}")
debuggedValue = list(debugged.value.f32v[0:4])
except rdtest.TestFailureException as ex:
continue
break
if debugged is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} at {test}")
debuggedValue = list(debugged.value.f32v[0:4])
if not rdtest.value_compare(expectedValue, debuggedValue, eps=5.0E-06):
rdtest.log.error(f"Test {test} Group:{groupid} Thread:{tid} EID:{action.eventId} failed {name} debugger {debuggedValue} doesn't match expected {expectedValue}")
self.controller.FreeTrace(trace)
failed = True
continue
if not rdtest.value_compare(expectedValue, debuggedValue, eps=5.0E-06):
rdtest.log.error(f"Test {test} Group:{groupid} Thread:{tid} EID:{action.eventId} failed {name} debugger {debuggedValue} doesn't match expected {expectedValue}")
failed = True
continue
self.controller.FreeTrace(trace)
rdtest.log.success(f"Test {test} Group:{groupid} Thread:{tid} as expected")
rdtest.log.success(f"Test {test} Group:{groupid} Thread:{tid} as expected")
rdtest.log.end_section(section)
return failed
@@ -300,29 +298,27 @@ class D3D12_Shader_Debug_Zoo(rdtest.TestCase):
groupid = (groupX, 1, 0)
threadid = (0, 0, 0)
testIndex = groupX
trace = self.controller.DebugThread(groupid, threadid)
cycles, variables = self.process_trace(trace)
with self.debug_thread(groupid, threadid) as debug:
cycles, variables = self.process_trace(debug.trace)
# Result is stored in RWStructuredBuffer<uint4> bufOut : register(u1);
bufOut = pipe.GetReadWriteResources(rd.ShaderStage.Compute)[1].descriptor.resource
bufdata = self.controller.GetBufferData(bufOut, testIndex*16, 16)
expectedValue = struct.unpack_from("4i", bufdata, 0)
# Test result is in variable called "int4 testResult"
name = 'testResult'
varType = 'int4'
try:
debuggedValue = self.get_source_shader_var_value(trace.instInfo[-1].sourceVars, name, varType, variables)
if not rdtest.value_compare(expectedValue, debuggedValue):
raise rdtest.TestFailureException(f"'{name}' debugger {debuggedValue} doesn't match expected {expectedValue}")
# Result is stored in RWStructuredBuffer<uint4> bufOut : register(u1);
bufOut = pipe.GetReadWriteResources(rd.ShaderStage.Compute)[1].descriptor.resource
bufdata = self.controller.GetBufferData(bufOut, testIndex*16, 16)
expectedValue = struct.unpack_from("4i", bufdata, 0)
# Test result is in variable called "int4 testResult"
name = 'testResult'
varType = 'int4'
try:
debuggedValue = self.get_source_shader_var_value(debug.trace.instInfo[-1].sourceVars, name, varType, variables)
if not rdtest.value_compare(expectedValue, debuggedValue):
raise rdtest.TestFailureException(f"'{name}' debugger {debuggedValue} doesn't match expected {expectedValue}")
except rdtest.TestFailureException as ex:
rdtest.log.error(f"Test {test} Group:{groupid} Thread:{threadid} Index:{testIndex} failed {ex}")
failed = True
continue
finally:
self.controller.FreeTrace(trace)
except rdtest.TestFailureException as ex:
rdtest.log.error(f"Test {test} Group:{groupid} Thread:{threadid} Index:{testIndex} failed {ex}")
failed = True
continue
rdtest.log.success(f"Test {test} Group:{groupid} Thread:{threadid} as expected")
rdtest.log.success(f"Test {test} Group:{groupid} Thread:{threadid} as expected")
rdtest.log.end_section(section)
if self.check_compute_derivative_tests():
+7 -10
View File
@@ -85,17 +85,14 @@ class Iter_Test(rdtest.TestCase):
threadid = (threadid[0], threadid[1], threadid[2])
rdtest.log.print(f"Debug Thread Workgroup:{wgSize} groupid:{groupid} threadid:{threadid}")
trace = self.controller.DebugThread(groupid, threadid)
with self.debug_thread(groupid, threadid) as debug:
try:
cycles, variables = self.process_trace(debug.trace)
except rdtest.TestFailureException as err:
rdtest.log.error(f"Error debugging: {err.message}")
return
try:
cycles, variables = self.process_trace(trace)
except rdtest.TestFailureException as err:
rdtest.log.error(f"Error debugging: {err.message}")
return
rdtest.log.success(f'Successfully debugged compute shader in {cycles} cycles {len(refl.outputSignature)}')
self.controller.FreeTrace(trace)
rdtest.log.success(f'Successfully debugged compute shader in {cycles} cycles {len(refl.outputSignature)}')
def vert_debug(self, action: rd.ActionDescription):
assert self.controller is not None
+30 -33
View File
@@ -121,43 +121,40 @@ class VK_Shader_Debug_Zoo(rdtest.TestCase):
continue
# Debug the shader
trace = self.controller.DebugThread(groupid, threadid)
cycles, variables = self.process_trace(trace)
# Check for non-zero cycles
if cycles == 0:
rdtest.log.success(f"Test {test} Group:{groupid} Thread:{threadid} : Shader debug cycle count was zero")
self.controller.FreeTrace(trace)
failed = True
continue
with self.debug_thread(groupid, threadid) as debug:
cycles, variables = self.process_trace(debug.trace)
# Check for non-zero cycles
if cycles == 0:
rdtest.log.success(f"Test {test} Group:{groupid} Thread:{threadid} : Shader debug cycle count was zero")
failed = True
continue
# Find the source variable 'testResult' at the highest instruction index
name = 'testResult'
debugged = None
countInst = len(trace.instInfo)
for inst in range(countInst):
sourceVars = trace.instInfo[countInst-1-inst].sourceVars
try:
dataVars = [v for v in sourceVars if v.name == name]
if len(dataVars) == 0:
# Find the source variable 'testResult' at the highest instruction index
name = 'testResult'
debugged = None
countInst = len(debug.trace.instInfo)
for inst in range(countInst):
sourceVars = debug.trace.instInfo[countInst-1-inst].sourceVars
try:
dataVars = [v for v in sourceVars if v.name == name]
if len(dataVars) == 0:
continue
debugged = self.evaluate_source_var(dataVars[0], variables)
except KeyError as ex:
continue
debugged = self.evaluate_source_var(dataVars[0], variables)
except KeyError as ex:
continue
except rdtest.TestFailureException as ex:
continue
break
if debugged is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} at {test}")
debuggedValue = list(debugged.value.f32v[0:4])
except rdtest.TestFailureException as ex:
continue
break
if debugged is None:
raise rdtest.TestFailureException(f"Couldn't find source variable {name} at {test}")
debuggedValue = list(debugged.value.f32v[0:4])
if not rdtest.value_compare(expectedValue, debuggedValue, eps=5.0E-06):
rdtest.log.error(f"Test {test} Group:{groupid} Thread:{threadid} EID:{action.eventId} failed {name} debugger {debuggedValue} doesn't match expected {expectedValue}")
self.controller.FreeTrace(trace)
failed = True
continue
if not rdtest.value_compare(expectedValue, debuggedValue, eps=5.0E-06):
rdtest.log.error(f"Test {test} Group:{groupid} Thread:{threadid} EID:{action.eventId} failed {name} debugger {debuggedValue} doesn't match expected {expectedValue}")
failed = True
continue
self.controller.FreeTrace(trace)
rdtest.log.success(f"Test {test} Group:{groupid} Thread:{threadid} as expected")
rdtest.log.success(f"Test {test} Group:{groupid} Thread:{threadid} as expected")
rdtest.log.end_section(section)