Handle D3D12 tier 1 VRS devices better when testing

This commit is contained in:
baldurk
2022-09-19 16:44:12 +01:00
parent aa412ddf89
commit a04321fdb6
+5 -30
View File
@@ -125,6 +125,9 @@ OUT main(float3 pos : POSITION, float4 col : COLOR0)
ResourceBarrier(vb, D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER);
if(opts6.ShadingRateImageTileSize == 0)
opts6.ShadingRateImageTileSize = 1;
ID3D12ResourcePtr shadImage =
MakeTexture(DXGI_FORMAT_R8_UINT, screenWidth / opts6.ShadingRateImageTileSize,
screenHeight / opts6.ShadingRateImageTileSize)
@@ -206,7 +209,7 @@ OUT main(float3 pos : POSITION, float4 col : COLOR0)
cmd5->RSSetShadingRate(D3D12_SHADING_RATE_1X1, combiners);
}
if(vertpso)
if(opts6.VariableShadingRateTier == D3D12_VARIABLE_SHADING_RATE_TIER_2)
{
setMarker(cmd, "Vertex");
@@ -216,10 +219,6 @@ OUT main(float3 pos : POSITION, float4 col : COLOR0)
cmd->DrawInstanced(6, 1, 0, 0);
cmd->SetPipelineState(pso);
}
if(opts6.VariableShadingRateTier == D3D12_VARIABLE_SHADING_RATE_TIER_2)
{
setMarker(cmd, "Image");
cmd5->RSSetShadingRateImage(shadImage);
@@ -228,10 +227,7 @@ OUT main(float3 pos : POSITION, float4 col : COLOR0)
cmd->DrawInstanced(6, 1, 0, 0);
cmd5->RSSetShadingRateImage(NULL);
}
if(vertpso)
{
setMarker(cmd, "Base + Vertex");
cmd5->RSSetShadingRate(D3D12_SHADING_RATE_2X2, combiners);
@@ -242,10 +238,7 @@ OUT main(float3 pos : POSITION, float4 col : COLOR0)
cmd->SetPipelineState(pso);
cmd5->RSSetShadingRate(D3D12_SHADING_RATE_1X1, combiners);
}
if(opts6.VariableShadingRateTier == D3D12_VARIABLE_SHADING_RATE_TIER_2)
{
setMarker(cmd, "Base + Image");
cmd5->RSSetShadingRate(D3D12_SHADING_RATE_2X2, combiners);
@@ -256,10 +249,7 @@ OUT main(float3 pos : POSITION, float4 col : COLOR0)
cmd5->RSSetShadingRateImage(NULL);
cmd5->RSSetShadingRate(D3D12_SHADING_RATE_1X1, combiners);
}
if(vertpso && opts6.VariableShadingRateTier == D3D12_VARIABLE_SHADING_RATE_TIER_2)
{
setMarker(cmd, "Vertex + Image");
cmd5->RSSetShadingRateImage(shadImage);
@@ -270,10 +260,7 @@ OUT main(float3 pos : POSITION, float4 col : COLOR0)
cmd->SetPipelineState(pso);
cmd5->RSSetShadingRateImage(NULL);
}
if(opts6.VariableShadingRateTier == D3D12_VARIABLE_SHADING_RATE_TIER_2)
{
ResourceBarrier(cmd, shadImage, D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS);
}
@@ -312,40 +299,28 @@ OUT main(float3 pos : POSITION, float4 col : COLOR0)
cmdB->DrawInstanced(0, 0, 0, 0);
}
if(vertpso)
if(opts6.VariableShadingRateTier == D3D12_VARIABLE_SHADING_RATE_TIER_2)
{
setMarker(cmdB, "Vertex");
RSSetViewport(cmdB, {x * 2.0f, 0.0f, x, y, 0.0f, 1.0f});
cmdB->DrawInstanced(0, 0, 0, 0);
}
if(opts6.VariableShadingRateTier == D3D12_VARIABLE_SHADING_RATE_TIER_2)
{
setMarker(cmdB, "Image");
RSSetViewport(cmdB, {x * 3.0f, 0.0f, x, y, 0.0f, 1.0f});
cmdB->DrawInstanced(0, 0, 0, 0);
}
if(vertpso)
{
setMarker(cmdB, "Base + Vertex");
RSSetViewport(cmdB, {x * 0.0f, y, x, y, 0.0f, 1.0f});
cmdB->DrawInstanced(0, 0, 0, 0);
}
if(opts6.VariableShadingRateTier == D3D12_VARIABLE_SHADING_RATE_TIER_2)
{
setMarker(cmdB, "Base + Image");
RSSetViewport(cmdB, {x * 3.0f, y, x, y, 0.0f, 1.0f});
cmdB->DrawInstanced(0, 0, 0, 0);
}
if(vertpso && opts6.VariableShadingRateTier == D3D12_VARIABLE_SHADING_RATE_TIER_2)
{
setMarker(cmdB, "Vertex + Image");
RSSetViewport(cmdB, {x * 3.0f, y * 2.0f, x, y, 0.0f, 1.0f});