mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 17:40:39 +00:00
Add test of root signature ranges larger than the descriptor heap
This commit is contained in:
@@ -32,9 +32,11 @@ RD_TEST(D3D12_Parameter_Zoo, D3D12GraphicsTest)
|
||||
|
||||
std::string pixel = R"EOSHADER(
|
||||
|
||||
Texture2D<float> empty : register(t50);
|
||||
|
||||
float4 main() : SV_Target0
|
||||
{
|
||||
return float4(0, 1, 0, 1);
|
||||
return float4(0, 1, 0, 1) + empty.Load(int3(0,0,0));
|
||||
}
|
||||
|
||||
)EOSHADER";
|
||||
@@ -53,7 +55,10 @@ float4 main() : SV_Target0
|
||||
ID3D12ResourcePtr vb = MakeBuffer().Data(DefaultTri);
|
||||
ID3D12ResourcePtr ib = MakeBuffer().Data(indices);
|
||||
|
||||
ID3D12RootSignaturePtr sig = MakeSig({});
|
||||
ID3D12RootSignaturePtr sig = MakeSig({
|
||||
// table that's larger than the descriptor heap we'll bind
|
||||
tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 50, 999, 0),
|
||||
});
|
||||
|
||||
ResourceBarrier(vb, D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER);
|
||||
|
||||
@@ -70,6 +75,27 @@ float4 main() : SV_Target0
|
||||
},
|
||||
D3D12_ROOT_SIGNATURE_FLAG_NONE);
|
||||
|
||||
ID3D12DescriptorHeapPtr descHeap;
|
||||
|
||||
{
|
||||
D3D12_DESCRIPTOR_HEAP_DESC desc;
|
||||
desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
|
||||
desc.NodeMask = 1;
|
||||
desc.NumDescriptors = 4;
|
||||
desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
|
||||
CHECK_HR(dev->CreateDescriptorHeap(&desc, __uuidof(ID3D12DescriptorHeap), (void **)&descHeap));
|
||||
}
|
||||
|
||||
D3D12_GPU_DESCRIPTOR_HANDLE descGPUHandle = descHeap->GetGPUDescriptorHandleForHeapStart();
|
||||
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};
|
||||
srvDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc.Texture2D.MipLevels = 1;
|
||||
|
||||
dev->CreateShaderResourceView(NULL, &srvDesc, descHeap->GetCPUDescriptorHandleForHeapStart());
|
||||
|
||||
ID3D12PipelineStatePtr pso = psoCreator;
|
||||
|
||||
// if D3D12.4 (??) is available, use different interfaces
|
||||
@@ -144,6 +170,8 @@ float4 main() : SV_Target0
|
||||
|
||||
cmd->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
|
||||
cmd->SetDescriptorHeaps(1, &descHeap.GetInterfacePtr());
|
||||
|
||||
IASetVertexBuffer(cmd, vb, sizeof(DefaultA2V), 0);
|
||||
D3D12_INDEX_BUFFER_VIEW view;
|
||||
view.BufferLocation = ib->GetGPUVirtualAddress();
|
||||
@@ -152,6 +180,7 @@ float4 main() : SV_Target0
|
||||
cmd->IASetIndexBuffer(&view);
|
||||
cmd->SetPipelineState(pso);
|
||||
cmd->SetGraphicsRootSignature(sig);
|
||||
cmd->SetGraphicsRootDescriptorTable(0, descGPUHandle);
|
||||
|
||||
RSSetViewport(cmd, {0.0f, 0.0f, (float)screenWidth, (float)screenHeight, 0.0f, 1.0f});
|
||||
RSSetScissorRect(cmd, {0, 0, screenWidth, screenHeight});
|
||||
@@ -161,7 +190,7 @@ float4 main() : SV_Target0
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE rtv4 = MakeRTV(rtvtex).CreateCPU(4);
|
||||
|
||||
// write the proper RTV to slot 3
|
||||
MakeRTV(bb).CreateCPU(3);
|
||||
MakeRTV(bb).Format(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB).CreateCPU(3);
|
||||
|
||||
// copy to slot 4
|
||||
dev->CopyDescriptorsSimple(1, rtv4, rtv3, D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
|
||||
|
||||
@@ -20,4 +20,56 @@ class D3D12_Parameter_Zoo(rdtest.TestCase):
|
||||
|
||||
self.check_pixel_value(pipe.GetOutputTargets()[0].resourceId, 0.5, 0.5, [0.0, 1.0, 0.0, 1.0])
|
||||
|
||||
rdtest.log.success("Captured loaded with color as expected")
|
||||
rdtest.log.success("Captured loaded with color as expected")
|
||||
|
||||
postvs_data = self.get_postvs(draw, rd.MeshDataStage.VSOut, 0, draw.numIndices)
|
||||
|
||||
postvs_ref = {
|
||||
0: {
|
||||
'vtx': 0,
|
||||
'idx': 0,
|
||||
'SV_POSITION': [-0.5, -0.5, 0.0, 1.0],
|
||||
'COLOR': [0.0, 1.0, 0.0, 1.0],
|
||||
'TEXCOORD': [0.0, 0.0],
|
||||
},
|
||||
1: {
|
||||
'vtx': 1,
|
||||
'idx': 1,
|
||||
'SV_POSITION': [0.0, 0.5, 0.0, 1.0],
|
||||
'COLOR': [0.0, 1.0, 0.0, 1.0],
|
||||
'TEXCOORD': [0.0, 1.0],
|
||||
},
|
||||
2: {
|
||||
'vtx': 2,
|
||||
'idx': 2,
|
||||
'SV_POSITION': [0.5, -0.5, 0.0, 1.0],
|
||||
'COLOR': [0.0, 1.0, 0.0, 1.0],
|
||||
'TEXCOORD': [1.0, 0.0],
|
||||
},
|
||||
}
|
||||
|
||||
self.check_mesh_data(postvs_ref, postvs_data)
|
||||
|
||||
rdtest.log.success("Mesh data is correct")
|
||||
|
||||
tex = rd.TextureDisplay()
|
||||
tex.overlay = rd.DebugOverlay.Drawcall
|
||||
tex.resourceId = pipe.GetOutputTargets()[0].resourceId
|
||||
|
||||
out: rd.ReplayOutput = self.controller.CreateOutput(rd.CreateHeadlessWindowingData(100, 100),
|
||||
rd.ReplayOutputType.Texture)
|
||||
|
||||
out.SetTextureDisplay(tex)
|
||||
|
||||
out.Display()
|
||||
|
||||
overlay_id = out.GetDebugOverlayTexID()
|
||||
|
||||
v = pipe.GetViewport(0)
|
||||
|
||||
self.check_pixel_value(overlay_id, int(0.5 * v.width), int(0.5 * v.height), [0.8, 0.1, 0.8, 1.0],
|
||||
eps=1.0 / 256.0)
|
||||
|
||||
out.Shutdown()
|
||||
|
||||
rdtest.log.success("Overlay color is as expected")
|
||||
Reference in New Issue
Block a user