Add a test debugging shaders on D3D12 with banned flags in the root sig

This commit is contained in:
baldurk
2022-04-28 14:19:38 +01:00
parent c1240effe3
commit 04c62f9595
2 changed files with 60 additions and 0 deletions
@@ -980,6 +980,15 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0
dev->CreateUnorderedAccessView(NULL, NULL, &uavdesc, cpu);
}
vsblob = Compile(D3DDefaultVertex, "main", "vs_5_0");
psblob = Compile(D3DDefaultPixel, "main", "ps_5_0");
ID3D12RootSignaturePtr bannedSig =
MakeSig({}, D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT |
D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS |
D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS);
ID3D12PipelineStatePtr bannedPSO =
MakePSO().InputLayout().RootSig(bannedSig).VS(vsblob).PS(psblob);
while(Running())
{
ID3D12GraphicsCommandListPtr cmd = GetCommandBuffer();
@@ -1075,6 +1084,13 @@ float4 main(v2f IN, uint samp : SV_SampleIndex) : SV_Target0
setMarker(cmd, "VertexSample");
cmd->DrawInstanced(4, 1, 0, 0);
setMarker(cmd, "BannedSig");
RSSetViewport(cmd, {60.0f, 60.0f, 10.0f, 10.0f, 0.0f, 1.0f});
RSSetScissorRect(cmd, {60, 60, 70, 70});
cmd->SetGraphicsRootSignature(bannedSig);
cmd->SetPipelineState(bannedPSO);
cmd->DrawInstanced(3, 1, 0, 0);
ResourceBarrier(cmd, fltTex, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE,
D3D12_RESOURCE_STATE_RENDER_TARGET);
@@ -125,6 +125,50 @@ class D3D12_Shader_Debug_Zoo(rdtest.TestCase):
rdtest.log.success("VertexSample PS was debugged correctly")
if failed:
raise rdtest.TestFailureException("Some tests were not as expected")
test_marker: rd.ActionDescription = self.find_action("Banned")
action = test_marker.next
self.controller.SetFrameEvent(action.eventId, False)
pipe: rd.PipeState = self.controller.GetPipelineState()
# Debug the vertex shader
trace: rd.ShaderDebugTrace = self.controller.DebugVertex(0, 0, 0, 0)
cycles, variables = self.process_trace(trace)
output = self.find_output_source_var(trace, rd.ShaderBuiltin.Position, 0)
debugged = self.evaluate_source_var(output, variables)
if not rdtest.value_compare(debugged.value.f32v[0:4], [-0.5, -0.5, 0.0, 1.0]):
failed = True
rdtest.log.error(
"Banned signature vertex shader position did not match expectation ({}). {}".format(
str(debugged.value.f32v[0:4]),
str(ex)))
rdtest.log.success("Banned signature VS was debugged correctly")
# Debug the pixel shader
trace: rd.ShaderDebugTrace = self.controller.DebugPixel(64, 64, 0, rd.ReplayController.NoPreference)
cycles, variables = self.process_trace(trace)
output = self.find_output_source_var(trace, rd.ShaderBuiltin.ColorOutput, 0)
debugged = self.evaluate_source_var(output, variables)
# Validate the debug output result
try:
self.check_pixel_value(pipe.GetOutputTargets()[0].resourceId, 64, 64, debugged.value.f32v[0:4])
except rdtest.TestFailureException as ex:
failed = True
rdtest.log.error("Vertex sample pixel shader output did not match. {}".format(str(ex)))
rdtest.log.success("Banned signature PS was debugged correctly")
if failed:
raise rdtest.TestFailureException("Some tests were not as expected")