From 69a0272e11f2fca745163827d927ff0fdfddaff7 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Mon, 16 Dec 2024 07:40:57 +0000 Subject: [PATCH] D3D12 Shader Debug Zoo : enable UAV Interlocked tests for DXBC Switch to use RWBuffer instead of RWTexture2D --- .../demos/d3d12/d3d12_shader_debug_zoo.cpp | 74 ++++++++----------- 1 file changed, 32 insertions(+), 42 deletions(-) diff --git a/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp b/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp index cc6647f1b..b94097ade 100644 --- a/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp +++ b/util/test/demos/d3d12/d3d12_shader_debug_zoo.cpp @@ -171,7 +171,7 @@ RWTexture2D unbounduav2 : register(u5); RWBuffer narrowtypeduav : register(u6); RWTexture2D floattexrwtest : register(u7); -RWTexture2D inttexrwtest : register(u8); +RWBuffer intbufrwtest : register(u8); Buffer narrowtypedsrv : register(t102); @@ -773,99 +773,88 @@ float4 main(v2f IN) : SV_Target0 { return float4(int16srv[0].x, int16srv[1].x, int16srv[2].x, int16srv[3].x); } -// 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 = mad(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]; + intbufrwtest[u] = 10; + InterlockedAdd(intbufrwtest[u], value, original); + InterlockedAdd(intbufrwtest[u], -value, original); + return intbufrwtest[u]; } if(IN.tri == 86) { int value = IN.tri; int original; int u = mad(3, (IN.tri - 85), 17); - int2 uv = int2(u,37); - inttexrwtest[uv] = 100; - InterlockedAnd(inttexrwtest[uv], value, original); - return inttexrwtest[uv]; + intbufrwtest[u] = 20; + InterlockedAnd(intbufrwtest[u], value, original); + return intbufrwtest[u]; } if(IN.tri == 87) { int value = IN.tri; int original; int u = mad(3, (IN.tri - 85), 17); - int2 uv = int2(u,37); - inttexrwtest[uv] = 100; - InterlockedOr(inttexrwtest[uv], value, original); - return inttexrwtest[uv]; + intbufrwtest[u] = 30; + InterlockedOr(intbufrwtest[u], value, original); + return intbufrwtest[u]; } if(IN.tri == 88) { int value = IN.tri; int original; int u = mad(3, (IN.tri - 85), 17); - int2 uv = int2(u,37); - inttexrwtest[uv] = 100; - InterlockedXor(inttexrwtest[uv], value, original); - return inttexrwtest[uv]; + intbufrwtest[u] = 40; + InterlockedXor(intbufrwtest[u], value, original); + InterlockedXor(intbufrwtest[u], value, original); + return intbufrwtest[u]; } if(IN.tri == 89) { int value = IN.tri; int original; int u = mad(3, (IN.tri - 85), 17); - int2 uv = int2(u,37); - inttexrwtest[uv] = 100; - InterlockedMin(inttexrwtest[uv], value, original); - return inttexrwtest[uv]; + intbufrwtest[u] = 50; + InterlockedMin(intbufrwtest[u], value, original); + return intbufrwtest[u]; } if(IN.tri == 90) { int value = IN.tri; int original; int u = mad(3, (IN.tri - 85), 17); - int2 uv = int2(u,37); - inttexrwtest[uv] = 100; - InterlockedMax(inttexrwtest[uv], value, original); - return inttexrwtest[uv]; + intbufrwtest[u] = 60; + InterlockedMax(intbufrwtest[u], value, original); + return intbufrwtest[u]; } if(IN.tri == 91) { int value = IN.tri; int original; int u = mad(3, (IN.tri - 85), 17); - int2 uv = int2(u,37); - inttexrwtest[uv] = 100; - InterlockedExchange(inttexrwtest[uv], value, original); - return inttexrwtest[uv]; + intbufrwtest[u] = 70; + InterlockedExchange(intbufrwtest[u], value, original); + return intbufrwtest[u]; } if(IN.tri == 92) { int value = IN.tri; int original; int u = mad(3, (IN.tri - 85), 17); - int2 uv = int2(u,37); - inttexrwtest[uv] = 100; - InterlockedCompareExchange(inttexrwtest[uv], value, value+1, original); - return inttexrwtest[uv]; + intbufrwtest[u] = 80; + InterlockedCompareExchange(intbufrwtest[u], value, value+1, original); + return intbufrwtest[u]; } if(IN.tri == 93) { int value = IN.tri; int u = mad(3, (IN.tri - 85), 17); - int2 uv = int2(u,37); - inttexrwtest[uv] = 100; - InterlockedCompareStore(inttexrwtest[uv], value, value+1); - return inttexrwtest[uv]; + intbufrwtest[u] = 90; + InterlockedCompareStore(intbufrwtest[u], value, value+1); + return intbufrwtest[u]; } -#endif // #if SM_6_0 || SM_6_2 || SM_6_6 #if SM_6_6 if(IN.tri == 94) { @@ -1328,7 +1317,8 @@ 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); + ID3D12ResourcePtr atomicBuffer = MakeBuffer().Size(1024).UAV(); + MakeUAV(atomicBuffer).Format(DXGI_FORMAT_R32_UINT).CreateGPU(34); float structdata[220]; for(int i = 0; i < 220; i++)