diff --git a/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp b/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp index 9218e90ad..f1cdc8d7a 100644 --- a/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp +++ b/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp @@ -170,7 +170,8 @@ RWTexture2D unbounduav2 : register(u5); RWBuffer narrowtypeduav : register(u6); -RWTexture2D textrwtest : register(u7); +RWTexture2D floattexrwtest : register(u7); +RWTexture2D inttexrwtest : register(u8); Buffer narrowtypedsrv : register(t102); @@ -184,7 +185,7 @@ Texture2D dimtex_edge : register(t41); #if (SM_6_2 || SM_6_6) && HAS_16BIT_SHADER_OPS StructuredBuffer int16srv : register(t42); #else -StructuredBuffer int16srv : register(t42); +Buffer int16srv : register(t42); #endif float4 main(v2f IN) : SV_Target0 @@ -765,13 +766,106 @@ float4 main(v2f IN) : SV_Target0 { float4 value = float4(posone, posone/3, posone/4, posone/5); int2 uv = int2(31,37); - textrwtest[uv] = value; - return textrwtest[uv]; + floattexrwtest[uv] = value; + return floattexrwtest[uv]; } -#if SM_6_2 || SM_6_6 if(IN.tri == 84) + { return float4(int16srv[0].x, int16srv[1].x, int16srv[2].x, int16srv[3].x); -#endif + } +// Only test Atomic operations on SM6_0 and above +#if SM_6_0 || SM_6_2 || SM_6_6 + if(IN.tri == 85) + { + int value = IN.tri; + int original; + int u = 3 * (IN.tri - 85) + 17; + int2 uv = int2(u,37); + inttexrwtest[uv] = 100; + InterlockedAdd(inttexrwtest[uv], value, original); + InterlockedAdd(inttexrwtest[uv], -value, original); + return inttexrwtest[uv]; + } + if(IN.tri == 86) + { + int value = IN.tri; + int original; + int u = 3 * (IN.tri - 85) + 17; + int2 uv = int2(u,37); + inttexrwtest[uv] = 100; + InterlockedAnd(inttexrwtest[uv], value, original); + return inttexrwtest[uv]; + } + if(IN.tri == 87) + { + int value = IN.tri; + int original; + int u = 3 * (IN.tri - 85) + 17; + int2 uv = int2(u,37); + inttexrwtest[uv] = 100; + InterlockedOr(inttexrwtest[uv], value, original); + return inttexrwtest[uv]; + } + if(IN.tri == 88) + { + int value = IN.tri; + int original; + int u = 3 * (IN.tri - 85) + 17; + int2 uv = int2(u,37); + inttexrwtest[uv] = 100; + InterlockedXor(inttexrwtest[uv], value, original); + return inttexrwtest[uv]; + } + if(IN.tri == 89) + { + int value = IN.tri; + int original; + int u = 3 * (IN.tri - 85) + 17; + int2 uv = int2(u,37); + inttexrwtest[uv] = 100; + InterlockedMin(inttexrwtest[uv], value, original); + return inttexrwtest[uv]; + } + if(IN.tri == 90) + { + int value = IN.tri; + int original; + int u = 3 * (IN.tri - 85) + 17; + int2 uv = int2(u,37); + inttexrwtest[uv] = 100; + InterlockedMax(inttexrwtest[uv], value, original); + return inttexrwtest[uv]; + } + if(IN.tri == 91) + { + int value = IN.tri; + int original; + int u = 3 * (IN.tri - 85) + 17; + int2 uv = int2(u,37); + inttexrwtest[uv] = 100; + InterlockedExchange(inttexrwtest[uv], value, original); + return inttexrwtest[uv]; + } + if(IN.tri == 92) + { + int value = IN.tri; + int original; + int u = 3 * (IN.tri - 85) + 17; + int2 uv = int2(u,37); + inttexrwtest[uv] = 100; + InterlockedCompareExchange(inttexrwtest[uv], value, value+1, original); + return inttexrwtest[uv]; + } + if(IN.tri == 93) + { + int value = IN.tri; + int u = 3 * (IN.tri - 85) + 17; + int2 uv = int2(u,37); + inttexrwtest[uv] = 100; + InterlockedCompareStore(inttexrwtest[uv], value, value+1); + return inttexrwtest[uv]; + } +#endif // #if SM_6_0 || SM_6_2 || SM_6_6 return float4(0.4f, 0.4f, 0.4f, 0.4f); } @@ -962,7 +1056,7 @@ void main() tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 0, 8, 0), tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 1, 2, 10), tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 0, 100, 5, 20), - tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 4, 4, 30), + tableParam(D3D12_SHADER_VISIBILITY_PIXEL, D3D12_DESCRIPTOR_RANGE_TYPE_UAV, 0, 4, 5, 30), multiRangeParam, uavParam(D3D12_SHADER_VISIBILITY_PIXEL, 0, 21), srvParam(D3D12_SHADER_VISIBILITY_PIXEL, 0, 20), @@ -1193,6 +1287,7 @@ void main() MakeUAV(narrowtypedbuf).Format(DXGI_FORMAT_R16_FLOAT).CreateGPU(32); MakeUAV(smiley).Format(DXGI_FORMAT_R8G8B8A8_UNORM).CreateGPU(33); + MakeUAV(smiley).Format(DXGI_FORMAT_R32_SINT).CreateGPU(34); float structdata[220]; for(int i = 0; i < 220; i++)