D3D12 EI test for setting a single 32-bit root constant

This commit is contained in:
Jake Turner
2025-12-03 09:24:42 +13:00
parent 8530da8274
commit abbe6d128a
@@ -53,6 +53,11 @@ cbuffer rootConsts : register(b1)
float4 rootConsts;
}
cbuffer rootConst : register(b1, space1)
{
float rootConst;
}
StructuredBuffer<float4> srvtest : register(t0);
RWStructuredBuffer<float4> uavtest : register(u0);
@@ -288,10 +293,12 @@ void main(uint3 gid : SV_GroupID)
srvParam(D3D12_SHADER_VISIBILITY_VERTEX, 0, 0),
uavParam(D3D12_SHADER_VISIBILITY_VERTEX, 0, 0),
constParam(D3D12_SHADER_VISIBILITY_VERTEX, 0, 1, 4),
constParam(D3D12_SHADER_VISIBILITY_VERTEX, 1, 1, 1),
tableParam(D3D12_SHADER_VISIBILITY_ALL, D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1, 2, 0)});
ID3D12CommandSignaturePtr patchArgSig = MakeCommandSig(
patchsig, {vbArg(0), cbvArg(0), srvArg(1), uavArg(2), constArg(3, 0, 1), drawArg()});
ID3D12CommandSignaturePtr patchArgSig =
MakeCommandSig(patchsig, {vbArg(0), cbvArg(0), srvArg(1), uavArg(2), constArg(3, 0, 1),
constArg(4, 0, 1), drawArg()});
struct PatchArgs
{
@@ -300,6 +307,7 @@ void main(uint3 gid : SV_GroupID)
D3D12_GPU_VIRTUAL_ADDRESS srv;
D3D12_GPU_VIRTUAL_ADDRESS uav;
float constData;
float constData2;
D3D12_DRAW_ARGUMENTS draw;
} patchargs;
@@ -314,6 +322,7 @@ void main(uint3 gid : SV_GroupID)
patchargs.draw.StartInstanceLocation = 0;
patchargs.draw.StartVertexLocation = 0;
patchargs.constData = 123.0f;
patchargs.constData2 = -123.0f;
std::vector<char> patchArgsData;
patchArgsData.resize(sizeof(PatchArgs));
@@ -329,6 +338,8 @@ void main(uint3 gid : SV_GroupID)
ptr += sizeof(D3D12_GPU_VIRTUAL_ADDRESS);
memcpy(ptr, &patchargs.constData, sizeof(float));
ptr += sizeof(float);
memcpy(ptr, &patchargs.constData2, sizeof(float));
ptr += sizeof(float);
memcpy(ptr, &patchargs.draw, sizeof(D3D12_DRAW_ARGUMENTS));
ptr += sizeof(D3D12_DRAW_ARGUMENTS);
@@ -463,7 +474,7 @@ void main(uint3 gid : SV_GroupID)
cmd->SetPipelineState(patchpso);
cmd->SetGraphicsRootSignature(patchsig);
cmd->SetDescriptorHeaps(1, &m_CBVUAVSRV.GetInterfacePtr());
cmd->SetGraphicsRootDescriptorTable(4, m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart());
cmd->SetGraphicsRootDescriptorTable(5, m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart());
RSSetViewport(cmd, {0.0f, 0.0f, (float)screenWidth, (float)screenHeight, 0.0f, 1.0f});
RSSetScissorRect(cmd, {0, 0, screenWidth, screenHeight});
@@ -490,7 +501,7 @@ void main(uint3 gid : SV_GroupID)
cmd->SetPipelineState(patchpso2);
cmd->SetGraphicsRootSignature(patchsig);
cmd->SetDescriptorHeaps(1, &m_CBVUAVSRV.GetInterfacePtr());
cmd->SetGraphicsRootDescriptorTable(4, m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart());
cmd->SetGraphicsRootDescriptorTable(5, m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart());
cmd->SetGraphicsRootConstantBufferView(0, cbv->GetGPUVirtualAddress() + 256);
cmd->SetGraphicsRootShaderResourceView(1, srv->GetGPUVirtualAddress() + 256);
cmd->SetGraphicsRootUnorderedAccessView(2, uav->GetGPUVirtualAddress() + 256);
@@ -609,7 +620,7 @@ void main(uint3 gid : SV_GroupID)
cmd->SetPipelineState(patchpso);
cmd->SetGraphicsRootSignature(patchsig);
cmd->SetDescriptorHeaps(1, &m_CBVUAVSRV.GetInterfacePtr());
cmd->SetGraphicsRootDescriptorTable(4, m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart());
cmd->SetGraphicsRootDescriptorTable(5, m_CBVUAVSRV->GetGPUDescriptorHandleForHeapStart());
RSSetViewport(cmd, {0.0f, 0.0f, (float)screenWidth, (float)screenHeight, 0.0f, 1.0f});
RSSetScissorRect(cmd, {0, 0, screenWidth, screenHeight});