From cc32e24d815c1f836f38fdac25a2e6e5c0e31222 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Mon, 7 Apr 2025 14:22:58 +0100 Subject: [PATCH] Add D3D12_Workgroup_Zoo unit tests for Wave Reduction ops WaveActiveMax() WaveActiveMin() WaveActiveProduct() WaveActiveSum() WaveActiveAllEqual() WaveActiveBitAnd() WaveActiveBitOr() WaveActiveBitXor() WaveActiveCountBits() --- util/test/demos/d3d12/d3d12_subgroup_zoo.cpp | 38 ++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/util/test/demos/d3d12/d3d12_subgroup_zoo.cpp b/util/test/demos/d3d12/d3d12_subgroup_zoo.cpp index 202695c20..bf8e60769 100644 --- a/util/test/demos/d3d12/d3d12_subgroup_zoo.cpp +++ b/util/test/demos/d3d12/d3d12_subgroup_zoo.cpp @@ -319,6 +319,44 @@ void main(uint3 inTid : SV_DispatchThreadID) data.w = WavePrefixProduct(1 + data.y); } } + else if(IsTest(13)) + { + // Reduction functions : unit tests + if (id >= 2 && id <= 20) + { + data.x = float(WaveActiveMax(id)); + data.y = float(WaveActiveMin(id)); + data.z = float(WaveActiveProduct(id)); + data.w = float(WaveActiveSum(id)); + } + } + else if(IsTest(14)) + { + // Reduction functions : unit tests + if (id >= 2 && id <= 20) + { + data.x = float(WaveActiveCountBits(id > 23)); + data.y = float(WaveActiveBitAnd(id)); + data.z = float(WaveActiveBitOr(id)); + data.w = float(WaveActiveBitXor(id)); + } + } + else if(IsTest(15)) + { + // Reduction functions : unit tests + if (id > 13) + { + bool test1 = (id > 15).x; + bool2 test2 = bool2(test1, (id < 23)); + bool3 test3 = bool3(test1, (id < 23), (id >= 25)); + bool4 test4 = bool4(test1, (id < 23), (id >= 25), (id >= 28)); + + data.x = float(WaveActiveAllEqual(test1).x); + data.y = float(WaveActiveAllEqual(test2).y); + data.z = float(WaveActiveAllEqual(test3).z); + data.w = float(WaveActiveAllEqual(test4).w); + } + } SetOuput(data); }