mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-24 06:36:08 +00:00
Update D3D12 cbuffer test to check DXIL
This commit is contained in:
@@ -327,8 +327,11 @@ float4 main() : SV_Target0
|
||||
if(!Init())
|
||||
return 3;
|
||||
|
||||
ID3DBlobPtr vsblob = Compile(D3DDefaultVertex, "main", "vs_5_0");
|
||||
ID3DBlobPtr psblob = Compile(pixel, "main", "ps_5_1");
|
||||
ID3DBlobPtr vs5blob = Compile(D3DDefaultVertex, "main", "vs_5_0");
|
||||
ID3DBlobPtr ps5blob = Compile(pixel, "main", "ps_5_1");
|
||||
|
||||
ID3DBlobPtr vs6blob = m_DXILSupport ? Compile(D3DDefaultVertex, "main", "vs_6_0") : NULL;
|
||||
ID3DBlobPtr ps6blob = m_DXILSupport ? Compile(pixel, "main", "ps_6_0") : NULL;
|
||||
|
||||
const size_t bindOffset = 16;
|
||||
|
||||
@@ -370,8 +373,15 @@ float4 main() : SV_Target0
|
||||
cbvParam(D3D12_SHADER_VISIBILITY_PIXEL, 999999999, 0),
|
||||
});
|
||||
|
||||
ID3D12PipelineStatePtr pso = MakePSO().RootSig(sig).InputLayout().VS(vsblob).PS(psblob).RTVs(
|
||||
{DXGI_FORMAT_R32G32B32A32_FLOAT});
|
||||
ID3D12PipelineStatePtr dxbcpso =
|
||||
MakePSO().RootSig(sig).InputLayout().VS(vs5blob).PS(ps5blob).RTVs(
|
||||
{DXGI_FORMAT_R32G32B32A32_FLOAT});
|
||||
|
||||
ID3D12PipelineStatePtr dxilpso = NULL;
|
||||
|
||||
if(vs6blob && ps6blob)
|
||||
dxilpso = MakePSO().RootSig(sig).InputLayout().VS(vs6blob).PS(ps6blob).RTVs(
|
||||
{DXGI_FORMAT_R32G32B32A32_FLOAT});
|
||||
|
||||
ResourceBarrier(vb, D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER);
|
||||
ResourceBarrier(cb, D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER);
|
||||
@@ -400,7 +410,7 @@ float4 main() : SV_Target0
|
||||
cmd->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
|
||||
IASetVertexBuffer(cmd, vb, sizeof(DefaultA2V), 0);
|
||||
cmd->SetPipelineState(pso);
|
||||
cmd->SetPipelineState(dxbcpso);
|
||||
cmd->SetGraphicsRootSignature(sig);
|
||||
cmd->SetGraphicsRootConstantBufferView(
|
||||
0, cb->GetGPUVirtualAddress() + bindOffset * sizeof(Vec4f));
|
||||
@@ -413,8 +423,17 @@ float4 main() : SV_Target0
|
||||
|
||||
OMSetRenderTargets(cmd, {offrtv}, {});
|
||||
|
||||
setMarker(cmd, "DXBC Draw");
|
||||
cmd->DrawInstanced(3, 1, 0, 0);
|
||||
|
||||
if(dxilpso)
|
||||
{
|
||||
cmd->SetPipelineState(dxilpso);
|
||||
|
||||
setMarker(cmd, "DXIL Draw");
|
||||
cmd->DrawInstanced(3, 1, 0, 0);
|
||||
}
|
||||
|
||||
ResourceBarrier(cmd, rtvtex, D3D12_RESOURCE_STATE_RENDER_TARGET,
|
||||
D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
|
||||
|
||||
|
||||
@@ -121,6 +121,9 @@ class ConstantBufferChecker:
|
||||
raise TestFailureException("Too many variables checked, {} has no matching data".format(name))
|
||||
return ShaderVariableCheck(self._variables.pop(0), name)
|
||||
|
||||
def next_var(self):
|
||||
return self._variables[0]
|
||||
|
||||
def done(self):
|
||||
if len(self._variables) != 0:
|
||||
raise TestFailureException("Not all variables checked, {} still remain".format(len(self._variables)))
|
||||
|
||||
@@ -5,16 +5,51 @@ class D3D12_CBuffer_Zoo(rdtest.TestCase):
|
||||
demos_test_name = 'D3D12_CBuffer_Zoo'
|
||||
|
||||
def check_capture(self):
|
||||
draw = self.find_draw("Draw")
|
||||
draw = self.find_draw("DXBC Draw")
|
||||
|
||||
self.check(draw is not None)
|
||||
|
||||
self.controller.SetFrameEvent(draw.eventId, False)
|
||||
self.controller.SetFrameEvent(draw.next.eventId, False)
|
||||
|
||||
pipe: rd.PipeState = self.controller.GetPipelineState()
|
||||
|
||||
stage = rd.ShaderStage.Pixel
|
||||
|
||||
# Verify that the DXBC draw is first
|
||||
disasm = self.controller.DisassembleShader(pipe.GetGraphicsPipelineObject(), pipe.GetShaderReflection(stage),
|
||||
'')
|
||||
|
||||
self.check('ps_5_1' in disasm)
|
||||
|
||||
self.check_event()
|
||||
|
||||
rdtest.log.success("DXBC draw is as expected")
|
||||
|
||||
# Move to the DXIL draw
|
||||
draw = self.find_draw("DXIL Draw")
|
||||
|
||||
if draw is None:
|
||||
rdtest.log.print("No DXIL draw to test")
|
||||
return
|
||||
|
||||
self.controller.SetFrameEvent(draw.next.eventId, False)
|
||||
|
||||
pipe: rd.PipeState = self.controller.GetPipelineState()
|
||||
|
||||
disasm = self.controller.DisassembleShader(pipe.GetGraphicsPipelineObject(), pipe.GetShaderReflection(stage),
|
||||
'')
|
||||
|
||||
self.check('ps_6_0' in disasm)
|
||||
|
||||
self.check_event()
|
||||
|
||||
rdtest.log.success("DXIL draw is as expected")
|
||||
|
||||
def check_event(self):
|
||||
pipe: rd.PipeState = self.controller.GetPipelineState()
|
||||
|
||||
stage = rd.ShaderStage.Pixel
|
||||
|
||||
refl: rd.ShaderReflection = pipe.GetShaderReflection(stage)
|
||||
mapping: rd.ShaderBindpointMapping = pipe.GetBindpointMapping(stage)
|
||||
|
||||
@@ -457,7 +492,9 @@ class D3D12_CBuffer_Zoo(rdtest.TestCase):
|
||||
# float4 gldummy4;
|
||||
var_check.check('gldummy4')
|
||||
|
||||
# empty_struct empty; - completely omitted
|
||||
# empty_struct empty; - completely omitted on DXBC but present on DXIL
|
||||
if var_check.next_var().name == 'empty':
|
||||
var_check.check('empty')
|
||||
|
||||
# nested_with_empty nested_empty;
|
||||
var_check.check('nested_empty').rows(0).cols(0).members({
|
||||
|
||||
Reference in New Issue
Block a user