Fix a case where existing root parameters could overlap with added one

This commit is contained in:
baldurk
2019-01-14 16:29:29 +00:00
parent 5ca0e50939
commit 2afcd9868a
+7 -3
View File
@@ -86,17 +86,21 @@ struct D3D12QuadOverdrawCallback : public D3D12DrawcallCallback
// Instead move them into an unused space.
for(size_t i = 0; i < modsig.params.size(); i++)
{
if(modsig.params[i].ShaderVisibility == D3D12_SHADER_VISIBILITY_PIXEL)
if(modsig.params[i].ShaderVisibility == D3D12_SHADER_VISIBILITY_PIXEL ||
modsig.params[i].ShaderVisibility == D3D12_SHADER_VISIBILITY_ALL)
{
// use different register spaces for each just in case
UINT regSpace = modsig.maxSpaceIndex + modsig.params[i].ShaderVisibility;
if(modsig.params[i].ParameterType == D3D12_ROOT_PARAMETER_TYPE_UAV)
{
modsig.params[i].Descriptor.RegisterSpace = modsig.maxSpaceIndex;
modsig.params[i].Descriptor.RegisterSpace = regSpace;
}
else if(modsig.params[i].ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE)
{
for(size_t r = 0; r < modsig.params[i].ranges.size(); r++)
{
modsig.params[i].ranges[r].RegisterSpace = modsig.maxSpaceIndex;
modsig.params[i].ranges[r].RegisterSpace = regSpace;
}
}
}