diff --git a/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp b/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp index 46f7e8101..0348700aa 100644 --- a/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp +++ b/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp @@ -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); diff --git a/util/test/tests/D3D12/D3D12_Shader_Debug_Zoo.py b/util/test/tests/D3D12/D3D12_Shader_Debug_Zoo.py index f016d82e5..bd8b07082 100644 --- a/util/test/tests/D3D12/D3D12_Shader_Debug_Zoo.py +++ b/util/test/tests/D3D12/D3D12_Shader_Debug_Zoo.py @@ -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")