mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-12 13:00:32 +00:00
Extend D3D12_Draw_Zoo to SM6 & SM6.6
To test the DXIL debugger
This commit is contained in:
@@ -87,6 +87,14 @@ float4 main(v2f IN) : SV_Target0
|
||||
ID3DBlobPtr vsblob = Compile(common + vertex, "main", "vs_5_0");
|
||||
ID3DBlobPtr psblob = Compile(common + pixel, "main", "ps_5_0");
|
||||
|
||||
bool supportSM60 = (m_HighestShaderModel >= D3D_SHADER_MODEL_6_0) && m_DXILSupport;
|
||||
bool supportSM66 = (m_HighestShaderModel >= D3D_SHADER_MODEL_6_6) && m_DXILSupport;
|
||||
|
||||
ID3DBlobPtr vs_6_0_blob = supportSM60 ? Compile(common + vertex, "main", "vs_6_0") : NULL;
|
||||
ID3DBlobPtr ps_6_0_blob = supportSM60 ? Compile(common + pixel, "main", "ps_6_0") : NULL;
|
||||
ID3DBlobPtr vs_6_6_blob = supportSM66 ? Compile(common + vertex, "main", "vs_6_6") : NULL;
|
||||
ID3DBlobPtr ps_6_6_blob = supportSM66 ? Compile(common + pixel, "main", "ps_6_6") : NULL;
|
||||
|
||||
D3D12_INPUT_CLASSIFICATION perVertex = D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA;
|
||||
|
||||
std::vector<D3D12_INPUT_ELEMENT_DESC> layoutdesc = {
|
||||
@@ -97,25 +105,65 @@ float4 main(v2f IN) : SV_Target0
|
||||
|
||||
ID3D12RootSignaturePtr sig = MakeSig({});
|
||||
|
||||
ID3D12PipelineStatePtr pso = MakePSO()
|
||||
.RootSig(sig)
|
||||
.InputLayout(layoutdesc)
|
||||
.StripRestart(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF)
|
||||
.VS(vsblob)
|
||||
.PS(psblob)
|
||||
.RTVs({DXGI_FORMAT_R32G32B32A32_FLOAT});
|
||||
ID3D12PipelineStatePtr psos[3];
|
||||
size_t countPSOs = 0;
|
||||
psos[countPSOs++] = MakePSO()
|
||||
.RootSig(sig)
|
||||
.InputLayout(layoutdesc)
|
||||
.StripRestart(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF)
|
||||
.VS(vsblob)
|
||||
.PS(psblob)
|
||||
.RTVs({DXGI_FORMAT_R32G32B32A32_FLOAT});
|
||||
|
||||
if(vs_6_0_blob && ps_6_0_blob)
|
||||
psos[countPSOs++] = MakePSO()
|
||||
.RootSig(sig)
|
||||
.InputLayout()
|
||||
.StripRestart(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF)
|
||||
.VS(vs_6_0_blob)
|
||||
.PS(ps_6_0_blob)
|
||||
.RTVs({DXGI_FORMAT_R32G32B32A32_FLOAT});
|
||||
|
||||
if(vs_6_6_blob && ps_6_6_blob)
|
||||
psos[countPSOs++] = MakePSO()
|
||||
.RootSig(sig)
|
||||
.InputLayout()
|
||||
.StripRestart(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF)
|
||||
.VS(vs_6_6_blob)
|
||||
.PS(ps_6_6_blob)
|
||||
.RTVs({DXGI_FORMAT_R32G32B32A32_FLOAT});
|
||||
|
||||
layoutdesc[1].AlignedByteOffset = 0;
|
||||
layoutdesc[1].InputSlot = 1;
|
||||
layoutdesc[1].InputSlotClass = D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA;
|
||||
layoutdesc[1].InstanceDataStepRate = 1;
|
||||
|
||||
ID3D12PipelineStatePtr instpso = MakePSO()
|
||||
.RootSig(sig)
|
||||
.InputLayout(layoutdesc)
|
||||
.VS(vsblob)
|
||||
.PS(psblob)
|
||||
.RTVs({DXGI_FORMAT_R32G32B32A32_FLOAT});
|
||||
size_t countInstPSOs = 0;
|
||||
ID3D12PipelineStatePtr instpsos[3];
|
||||
instpsos[countInstPSOs++] = MakePSO()
|
||||
.RootSig(sig)
|
||||
.InputLayout(layoutdesc)
|
||||
.VS(vsblob)
|
||||
.PS(psblob)
|
||||
.RTVs({DXGI_FORMAT_R32G32B32A32_FLOAT});
|
||||
|
||||
if(vs_6_0_blob && ps_6_0_blob)
|
||||
instpsos[countInstPSOs++] = MakePSO()
|
||||
.RootSig(sig)
|
||||
.InputLayout(layoutdesc)
|
||||
.VS(vs_6_0_blob)
|
||||
.PS(ps_6_0_blob)
|
||||
.RTVs({DXGI_FORMAT_R32G32B32A32_FLOAT});
|
||||
|
||||
if(vs_6_6_blob && ps_6_6_blob)
|
||||
instpsos[countInstPSOs++] = MakePSO()
|
||||
.RootSig(sig)
|
||||
.InputLayout(layoutdesc)
|
||||
.VS(vs_6_6_blob)
|
||||
.PS(ps_6_6_blob)
|
||||
.RTVs({DXGI_FORMAT_R32G32B32A32_FLOAT});
|
||||
|
||||
TEST_ASSERT(countPSOs == countInstPSOs, "Mismatched number of PSOs");
|
||||
|
||||
DefaultA2V triangle[] = {
|
||||
// 0
|
||||
@@ -238,7 +286,7 @@ float4 main(v2f IN) : SV_Target0
|
||||
instData[14] = Vec4f(0.5f, 0.9f, 0.1f, 0.5f);
|
||||
}
|
||||
|
||||
ID3D12ResourcePtr instvb = MakeBuffer().Data(instData).Size(4096);
|
||||
ID3D12ResourcePtr instvb = MakeBuffer().Data(instData).Size(8192);
|
||||
|
||||
std::vector<uint16_t> idxData;
|
||||
idxData.resize(2048);
|
||||
@@ -319,194 +367,198 @@ float4 main(v2f IN) : SV_Target0
|
||||
|
||||
ClearRenderTargetView(cmd, bbrtv, {0.2f, 0.2f, 0.2f, 1.0f});
|
||||
|
||||
ClearRenderTargetView(cmd, offrtv, {0.2f, 0.2f, 0.2f, 1.0f});
|
||||
const char *markers[] = {"SM5.0", "SM6.0", "SM6.6"};
|
||||
for(size_t i = 0; i < countPSOs; ++i)
|
||||
{
|
||||
ClearRenderTargetView(cmd, offrtv, {0.2f, 0.2f, 0.2f, 1.0f});
|
||||
|
||||
cmd->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
cmd->SetGraphicsRootSignature(sig);
|
||||
cmd->SetGraphicsRootSignature(sig);
|
||||
|
||||
D3D12_VIEWPORT view = {0.0f, 0.0f, 48.0f, 48.0f, 0.0f, 1.0f};
|
||||
D3D12_VIEWPORT view = {0.0f, 0.0f, 48.0f, 48.0f, 0.0f, 1.0f};
|
||||
RSSetViewport(cmd, view);
|
||||
RSSetScissorRect(cmd, {0, 0, screenWidth, screenHeight});
|
||||
|
||||
RSSetViewport(cmd, view);
|
||||
RSSetScissorRect(cmd, {0, 0, screenWidth, screenHeight});
|
||||
setMarker(cmd, markers[i]);
|
||||
|
||||
D3D12_VERTEX_BUFFER_VIEW vbs[2] = {};
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress();
|
||||
vbs[0].SizeInBytes = 4096;
|
||||
vbs[0].StrideInBytes = sizeof(DefaultA2V);
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress();
|
||||
vbs[1].StrideInBytes = sizeof(Vec4f);
|
||||
vbs[1].SizeInBytes = 4096;
|
||||
cmd->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
|
||||
D3D12_INDEX_BUFFER_VIEW ibv = {};
|
||||
ibv.BufferLocation = ib->GetGPUVirtualAddress();
|
||||
ibv.Format = DXGI_FORMAT_R16_UINT;
|
||||
ibv.SizeInBytes = 1024;
|
||||
D3D12_VERTEX_BUFFER_VIEW vbs[2] = {};
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress();
|
||||
vbs[0].SizeInBytes = 4096;
|
||||
vbs[0].StrideInBytes = sizeof(DefaultA2V);
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress();
|
||||
vbs[1].StrideInBytes = sizeof(Vec4f);
|
||||
vbs[1].SizeInBytes = 4096;
|
||||
|
||||
cmd->SetPipelineState(pso);
|
||||
D3D12_INDEX_BUFFER_VIEW ibv = {};
|
||||
ibv.BufferLocation = ib->GetGPUVirtualAddress();
|
||||
ibv.Format = DXGI_FORMAT_R16_UINT;
|
||||
ibv.SizeInBytes = 1024;
|
||||
|
||||
setMarker(cmd, "Test Begin");
|
||||
cmd->SetPipelineState(psos[i]);
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// non-indexed, non-instanced
|
||||
///////////////////////////////////////////////////
|
||||
// non-indexed, non-instanced
|
||||
|
||||
// basic test
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->DrawInstanced(3, 1, 0, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
// basic test
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->DrawInstanced(3, 1, 0, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// test with vertex offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->DrawInstanced(3, 1, 5, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
// test with vertex offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->DrawInstanced(3, 1, 5, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// test with vertex offset and vbuffer offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 5 * sizeof(DefaultA2V);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->DrawInstanced(3, 1, 8, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
// test with vertex offset and vbuffer offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 5 * sizeof(DefaultA2V);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->DrawInstanced(3, 1, 8, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// adjust to next row
|
||||
view.TopLeftX = 0.0f;
|
||||
view.TopLeftY += view.Height;
|
||||
// adjust to next row
|
||||
view.TopLeftX = 0.0f;
|
||||
view.TopLeftY += view.Height;
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// indexed, non-instanced
|
||||
///////////////////////////////////////////////////
|
||||
// indexed, non-instanced
|
||||
|
||||
ibv.BufferLocation = ib->GetGPUVirtualAddress();
|
||||
ibv.BufferLocation = ib->GetGPUVirtualAddress();
|
||||
|
||||
// basic test
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 1, 0, 0, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
// basic test
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 1, 0, 0, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// test with first index
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 1, 5, 0, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
// test with first index
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 1, 5, 0, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// test with first index and vertex offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 1, 13, -50, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
// test with first index and vertex offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 1, 13, -50, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// test with first index and vertex offset and vbuffer offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 10 * sizeof(DefaultA2V);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 1, 23, -100, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
// test with first index and vertex offset and vbuffer offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 10 * sizeof(DefaultA2V);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 1, 23, -100, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// test with first index and vertex offset and vbuffer offset and ibuffer offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 19 * sizeof(DefaultA2V);
|
||||
ibv.BufferLocation = ib->GetGPUVirtualAddress() + 14 * sizeof(uint16_t);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 1, 23, -100, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
// test with first index and vertex offset and vbuffer offset and ibuffer offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 19 * sizeof(DefaultA2V);
|
||||
ibv.BufferLocation = ib->GetGPUVirtualAddress() + 14 * sizeof(uint16_t);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 1, 23, -100, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
cmd->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
cmd->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
|
||||
|
||||
// indexed strip with primitive restart
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress();
|
||||
ibv.BufferLocation = ib->GetGPUVirtualAddress();
|
||||
RSSetViewport(cmd, view);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(12, 1, 42, 0, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
// indexed strip with primitive restart
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress();
|
||||
ibv.BufferLocation = ib->GetGPUVirtualAddress();
|
||||
RSSetViewport(cmd, view);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(12, 1, 42, 0, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// indexed strip with primitive restart and vertex offset
|
||||
RSSetViewport(cmd, view);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(12, 1, 54, -100, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
// indexed strip with primitive restart and vertex offset
|
||||
RSSetViewport(cmd, view);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(12, 1, 54, -100, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// adjust to next row
|
||||
view.TopLeftX = 0.0f;
|
||||
view.TopLeftY += view.Height;
|
||||
// adjust to next row
|
||||
view.TopLeftX = 0.0f;
|
||||
view.TopLeftY += view.Height;
|
||||
|
||||
cmd->SetPipelineState(instpso);
|
||||
cmd->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
cmd->SetPipelineState(instpsos[i]);
|
||||
cmd->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// non-indexed, instanced
|
||||
///////////////////////////////////////////////////
|
||||
// non-indexed, instanced
|
||||
|
||||
// basic test
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->DrawInstanced(3, 2, 0, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
// basic test
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->DrawInstanced(3, 2, 0, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// basic test with first instance
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 5 * sizeof(DefaultA2V);
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->DrawInstanced(3, 2, 0, 5);
|
||||
view.TopLeftX += view.Width;
|
||||
// basic test with first instance
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 5 * sizeof(DefaultA2V);
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->DrawInstanced(3, 2, 0, 5);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// basic test with first instance and instance buffer offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 13 * sizeof(DefaultA2V);
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress() + 8 * sizeof(Vec4f);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->DrawInstanced(3, 2, 0, 5);
|
||||
view.TopLeftX += view.Width;
|
||||
// basic test with first instance and instance buffer offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 13 * sizeof(DefaultA2V);
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress() + 8 * sizeof(Vec4f);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->DrawInstanced(3, 2, 0, 5);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// adjust to next row
|
||||
view.TopLeftX = 0.0f;
|
||||
view.TopLeftY += view.Height;
|
||||
// adjust to next row
|
||||
view.TopLeftX = 0.0f;
|
||||
view.TopLeftY += view.Height;
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// indexed, instanced
|
||||
///////////////////////////////////////////////////
|
||||
// indexed, instanced
|
||||
|
||||
ibv.BufferLocation = ib->GetGPUVirtualAddress();
|
||||
ibv.BufferLocation = ib->GetGPUVirtualAddress();
|
||||
|
||||
// basic test
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 2, 5, 0, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
// basic test
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 2, 5, 0, 0);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// basic test with first instance
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 2, 13, -50, 5);
|
||||
view.TopLeftX += view.Width;
|
||||
// basic test with first instance
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress() + 0;
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 2, 13, -50, 5);
|
||||
view.TopLeftX += view.Width;
|
||||
|
||||
// basic test with first instance and instance buffer offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress() + 8 * sizeof(Vec4f);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 2, 23, -80, 5);
|
||||
view.TopLeftX += view.Width;
|
||||
// basic test with first instance and instance buffer offset
|
||||
RSSetViewport(cmd, view);
|
||||
vbs[0].BufferLocation = vb->GetGPUVirtualAddress() + 0;
|
||||
vbs[1].BufferLocation = instvb->GetGPUVirtualAddress() + 8 * sizeof(Vec4f);
|
||||
cmd->IASetVertexBuffers(0, 2, vbs);
|
||||
cmd->IASetIndexBuffer(&ibv);
|
||||
cmd->DrawIndexedInstanced(3, 2, 23, -80, 5);
|
||||
view.TopLeftX += view.Width;
|
||||
}
|
||||
|
||||
ResourceBarrier(cmd, rtvtex, D3D12_RESOURCE_STATE_RENDER_TARGET,
|
||||
D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
|
||||
|
||||
@@ -172,11 +172,13 @@ class Draw_Zoo(rdtest.TestCase):
|
||||
.format(vtx, inst))
|
||||
|
||||
def check_capture(self):
|
||||
test_marker: rd.ActionDescription = self.find_action("Test")
|
||||
self.check_capture_action(test_marker)
|
||||
|
||||
def check_capture_action(self, marker: rd.ActionDescription):
|
||||
self.props: rd.APIProperties = self.controller.GetAPIProperties()
|
||||
|
||||
test_marker: rd.ActionDescription = self.find_action("Test")
|
||||
|
||||
action: rd.ActionDescription = test_marker.next
|
||||
action: rd.ActionDescription = marker.next
|
||||
|
||||
rdtest.log.begin_section("Non-indexed, non-instanced cases")
|
||||
|
||||
|
||||
@@ -4,4 +4,26 @@ import renderdoc as rd
|
||||
|
||||
class D3D12_Draw_Zoo(rdtest.Draw_Zoo):
|
||||
demos_test_name = 'D3D12_Draw_Zoo'
|
||||
internal = False
|
||||
internal = False
|
||||
|
||||
def check_capture(self):
|
||||
rdtest.log.begin_section("SM5.0")
|
||||
marker: rd.ActionDescription = self.find_action("SM5.0")
|
||||
self.check_capture_action(marker)
|
||||
rdtest.log.end_section("SM5.0")
|
||||
|
||||
rdtest.log.begin_section("SM6.0")
|
||||
marker: rd.ActionDescription = self.find_action("SM6.0")
|
||||
if marker is None:
|
||||
rdtest.log.print("No SM6.0 action to test")
|
||||
return
|
||||
self.check_capture_action(marker)
|
||||
rdtest.log.end_section("SM6.0")
|
||||
|
||||
rdtest.log.begin_section("SM6.6")
|
||||
marker: rd.ActionDescription = self.find_action("SM6.6")
|
||||
if marker is None:
|
||||
rdtest.log.print("No SM6.6 action to test")
|
||||
return
|
||||
self.check_capture_action(marker)
|
||||
rdtest.log.end_section("SM6.6")
|
||||
Reference in New Issue
Block a user