Przeglądaj źródła

Add WaveActiveOp execution test (#232)

This change adds execution unit tests for WaveActiveOp intrinsics.

For wave operations, there is no guarantee of how many lanes exist in a given wave. The test therefore has to manually compute the expected output by identifying different waves in shaders and group lanes by the waves they belong to. This can be done by providing different id's for each structured resource and call WaveReadLaneFirst() on each shader, and mimic what wave intrinsics to compute expected results.

Right now the test will not run on a default mode on hcttest because of known issue for WARP driver with handling flow control in compute shader. As soon as this is fixed we should enable this test by setting the priority of the test to 0.

This change also includes other fixes in ExecutionTests including 
1)Have TableParameterHandler to read data driven table parameters and 2) fixing typos
Young Kim 8 lat temu
rodzic
commit
7112d77737

+ 13 - 0
tools/clang/test/HLSL/ShaderOpArith.xml

@@ -374,6 +374,19 @@
     </Shader>
   </ShaderOp>
 
+  <ShaderOp Name="WaveIntrinsicsOp" CS="CS" DispatchX="1" DispatchY="1">
+    <RootSignature>RootFlags(0), UAV(u0)</RootSignature>
+    <Resource Name="SWaveIntrinsicsOp" Dimension="BUFFER" Width="1024" Flags="ALLOW_UNORDERED_ACCESS" InitialResourceState="COPY_DEST" TransitionTo="UNORDERED_ACCESS" Init="ByName" ReadBack="true" />
+    <RootValues>
+      <RootValue Index="0" ResName="SWaveIntrinsicsOp"/>
+    </RootValues>
+    <Shader Name="CS" Target="cs_6_0">
+      <![CDATA[
+      void main(uint GI : SV_GroupIndex) {};
+      ]]>
+    </Shader>
+  </ShaderOp>
+
   <ShaderOp Name="Triangle" PS="PS" VS="VS">
     <RootSignature>RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT)</RootSignature>
 

Plik diff jest za duży
+ 617 - 347
tools/clang/unittests/HLSL/ExecutionTest.cpp


+ 748 - 25
tools/clang/unittests/HLSL/ShaderOpArithTable.xml

@@ -39,7 +39,7 @@
           <Value>-0.0007346401</Value>
           <Value>0.0007346401</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">sin</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -84,7 +84,7 @@
           <Value>0.99999973015</Value>
           <Value>0.99999973015</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">cos</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -128,7 +128,7 @@
           <Value>-0.000735</Value>
           <Value>0.000735</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">tan</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -172,7 +172,7 @@
           <Value>1.543081</Value>
           <Value>1.543081</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">hcos</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -216,7 +216,7 @@
           <Value>1.175201</Value>
           <Value>-1.175201</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">hsin</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -260,7 +260,7 @@
           <Value>0.761594</Value>
           <Value>-0.761594</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">htan</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -308,7 +308,7 @@
           <Value>NaN</Value>
           <Value>NaN</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">acos</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -356,7 +356,7 @@
           <Value>NaN</Value>
           <Value>NaN</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">asin</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -400,7 +400,7 @@
           <Value>0.785398163</Value>
           <Value>-0.785398163</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">atan</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -444,7 +444,7 @@
           <Value>0.367879441</Value>
           <Value>22026.46579</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">exp</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -492,7 +492,7 @@
           <Value>0.599976</Value>
           <Value>0.611</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">frc</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -540,7 +540,7 @@
           <Value>1.99999998</Value>
           <Value>4.6051701</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">log</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -587,7 +587,7 @@
           <Value>4.0</Value>
           <Value>16.0</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">sqrt</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -635,7 +635,7 @@
           <Value>0.0625</Value>
           <Value>0.00390625</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">rsqrt</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -683,7 +683,7 @@
           <Value>0.0625</Value>
           <Value>0.00390625</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">rsqrt</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -741,7 +741,7 @@
           <Value>-10.0</Value>
           <Value>-11.0</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">round_ne</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -797,7 +797,7 @@
           <Value>-11.0</Value>
           <Value>-11.0</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">round_ni</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -853,7 +853,7 @@
           <Value>-10.0</Value>
           <Value>-10.0</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">round_pi</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -909,7 +909,7 @@
           <Value>-10.0</Value>
           <Value>-10.0</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">round_z</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -953,7 +953,7 @@
           <Value>0</Value>
           <Value>0</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">IsNaN</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -999,7 +999,7 @@
           <Value>0</Value>
           <Value>0</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">IsInf</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -1019,7 +1019,7 @@
             }
            ]]></Parameter>
       </Row>
-      <Row Name="Isfinite">
+      <Row Name="IsFinite">
         <Parameter Name="Validation.Type">Epsilon</Parameter>
         <Parameter Name="Validation.Tolerance">0</Parameter>
         <Parameter Name="Validation.NumInput">9</Parameter>
@@ -1045,7 +1045,7 @@
           <Value>1</Value>
           <Value>1</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">IsFinite</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -1092,7 +1092,7 @@
           <Value>1</Value>
           <Value>1</Value>
         </Parameter>
-        <Parameter Name="ShaderOp.Name">CS</Parameter>
+        <Parameter Name="ShaderOp.Name">FAbs</Parameter>
         <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
         <Parameter Name="ShaderOp.EntryPoint">main</Parameter>
         <Parameter Name="ShaderOp.Text"><![CDATA[
@@ -2388,4 +2388,727 @@
             </Parameter>
         </Row>
        </Table>
-</Data>
+
+       <Table Id="WaveIntrinsicsActiveIntTable">
+        <ParameterTypes>
+            <ParameterType Name="ShaderOp.Name">String</ParameterType>
+            <ParameterType Name="ShaderOp.Text">String</ParameterType>
+            <ParameterType Name="Validation.NumInputSet">unsigned int</ParameterType>
+            <ParameterType Name="Validation.InputSet1" Array="true">int</ParameterType>
+            <ParameterType Name="Validation.InputSet2" Array="true">int</ParameterType>
+            <ParameterType Name="Validation.InputSet3" Array="true">int</ParameterType>
+            <ParameterType Name="Validation.InputSet4" Array="true">int</ParameterType>
+        </ParameterTypes>
+
+        <Row Name="WaveActiveSum">
+            <Parameter Name="ShaderOp.Name">WaveActiveSum</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        int input;
+                        int output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveSum(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveSum(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">3</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>3</Value>
+                <Value>4</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>0</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>2</Value>
+                <Value>4</Value>
+                <Value>8</Value>
+                <Value>-64</Value>
+            </Parameter>
+        </Row>
+
+         <Row Name="WaveActiveProduct">
+            <Parameter Name="ShaderOp.Name">WaveActiveProduct</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        int input;
+                        int output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveProduct(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveProduct(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">3</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>3</Value>
+                <Value>4</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>0</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>4</Value>
+                <Value>-64</Value>
+            </Parameter>
+        </Row>
+
+        <Row Name="WaveActiveCountBits">
+            <Parameter Name="ShaderOp.Name">WaveActiveCountBits</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        int input;
+                        int output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveCountBits(pts.input > 3);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">4</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>3</Value>
+                <Value>4</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>0</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>1</Value>
+                <Value>10</Value>
+                <Value>-4</Value>
+                <Value>-64</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet4">
+                <Value>-100</Value>
+                <Value>-1000</Value>
+                <Value>300</Value>
+            </Parameter>
+        </Row>
+
+        <Row Name="WaveActiveMax">
+            <Parameter Name="ShaderOp.Name">WaveActiveMax</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        int input;
+                        int output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveMax(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveMax(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">4</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>3</Value>
+                <Value>4</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>0</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>1</Value>
+                <Value>10</Value>
+                <Value>-4</Value>
+                <Value>-64</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet4">
+                <Value>-100</Value>
+                <Value>-1000</Value>
+                <Value>300</Value>
+            </Parameter>
+        </Row>
+
+        <Row Name="WaveActiveMin">
+            <Parameter Name="ShaderOp.Name">WaveActiveMin</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        int input;
+                        int output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveMin(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveMin(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">4</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>3</Value>
+                <Value>4</Value>
+                <Value>5</Value>
+                <Value>6</Value>
+                <Value>7</Value>
+                <Value>8</Value>
+                <Value>9</Value>
+                <Value>10</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>0</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>1</Value>
+                <Value>10</Value>
+                <Value>-4</Value>
+                <Value>-64</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet4">
+                <Value>-100</Value>
+                <Value>-1000</Value>
+                <Value>300</Value>
+            </Parameter>
+        </Row>
+
+        <Row Name="WaveActiveAllEqual">
+            <Parameter Name="ShaderOp.Name">WaveActiveAllEqual</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        int input;
+                        int output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveAllEqual(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveAllEqual(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">3</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>3</Value>
+                <Value>4</Value>
+                <Value>1</Value>
+                <Value>1</Value>
+                <Value>1</Value>
+                <Value>1</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>3</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>-10</Value>
+            </Parameter>
+        </Row>
+
+        <Row Name="WaveActiveAnyTrue">
+            <Parameter Name="ShaderOp.Name">WaveActiveAnyTrue</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        bool input;
+                        bool output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveAnyTrue(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveAnyTrue(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">3</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>1</Value>
+                <Value>0</Value>
+                <Value>1</Value>
+                <Value>0</Value>
+                <Value>1</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>1</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>0</Value>
+            </Parameter>
+        </Row>
+
+        <Row Name="WaveActiveAllTrue">
+            <Parameter Name="ShaderOp.Name">WaveActiveAllTrue</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        bool input;
+                        bool output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveAllTrue(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveAllTrue(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">3</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>1</Value>
+                <Value>0</Value>
+                <Value>1</Value>
+                <Value>0</Value>
+                <Value>1</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>1</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>1</Value>
+            </Parameter>
+        </Row>
+      </Table>
+
+      <Table Id="WaveIntrinsicsActiveUintTable">
+        <ParameterTypes>
+            <ParameterType Name="ShaderOp.Name">String</ParameterType>
+            <ParameterType Name="ShaderOp.Text">String</ParameterType>
+            <ParameterType Name="Validation.NumInputSet">unsigned int</ParameterType>
+            <ParameterType Name="Validation.InputSet1" Array="true">unsigned int</ParameterType>
+            <ParameterType Name="Validation.InputSet2" Array="true">unsigned int</ParameterType>
+            <ParameterType Name="Validation.InputSet3" Array="true">unsigned int</ParameterType>
+            <ParameterType Name="Validation.InputSet4" Array="true">unsigned int</ParameterType>
+        </ParameterTypes>
+
+       <Row Name="WaveActiveUSum">
+            <Parameter Name="ShaderOp.Name">WaveActiveUSum</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        uint input;
+                        uint output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveSum(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveSum(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">3</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>3</Value>
+                <Value>4</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>0</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>2</Value>
+                <Value>4</Value>
+                <Value>8</Value>
+                <Value>64</Value>
+            </Parameter>
+        </Row>
+
+         <Row Name="WaveActiveUProduct">
+            <Parameter Name="ShaderOp.Name">WaveActiveUProduct</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        uint input;
+                        uint output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveProduct(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveProduct(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">3</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>3</Value>
+                <Value>4</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>0</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>4</Value>
+                <Value>64</Value>
+            </Parameter>
+        </Row>
+
+        <Row Name="WaveActiveUMax">
+            <Parameter Name="ShaderOp.Name">WaveActiveUMax</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        uint input;
+                        uint output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveMax(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveMax(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">3</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>3</Value>
+                <Value>4</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>0</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>1</Value>
+                <Value>10</Value>
+                <Value>4</Value>
+                <Value>64</Value>
+            </Parameter>
+        </Row>
+
+        <Row Name="WaveActiveUMin">
+            <Parameter Name="ShaderOp.Name">WaveActiveUMin</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        uint input;
+                        uint output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveMin(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveMin(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">3</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>3</Value>
+                <Value>4</Value>
+                <Value>5</Value>
+                <Value>6</Value>
+                <Value>7</Value>
+                <Value>8</Value>
+                <Value>9</Value>
+                <Value>10</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>0</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>1</Value>
+                <Value>10</Value>
+                <Value>4</Value>
+                <Value>64</Value>
+            </Parameter>
+        </Row>
+
+        <Row Name="WaveActiveBitOr">
+            <Parameter Name="ShaderOp.Name">WaveActiveBitOr</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        uint input;
+                        uint output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveBitOr(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveBitOr(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">4</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>0xe0000000</Value>
+                <Value>0x0d000000</Value>
+                <Value>0x00b00000</Value>
+                <Value>0x00070000</Value>
+                <Value>0x0000e000</Value>
+                <Value>0x00000d00</Value>
+                <Value>0x000000b0</Value>
+                <Value>0x00000007</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>0xedb7edb7</Value>
+                <Value>0xdb7edb7e</Value>
+                <Value>0xb7edb7ed</Value>
+                <Value>0x7edb7edb</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>0x12481248</Value>
+                <Value>0x24812481</Value>
+                <Value>0x48124812</Value>
+                <Value>0x81248124</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet4">
+                <Value>0x00000000</Value>
+                <Value>0xffffffff</Value>
+            </Parameter>
+        </Row>
+
+        <Row Name="WaveActiveBitAnd">
+            <Parameter Name="ShaderOp.Name">WaveActiveBitAnd</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        uint input;
+                        uint output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveBitAnd(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveBitAnd(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">4</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>0xefffffff</Value>
+                <Value>0xfdffffff</Value>
+                <Value>0xffbfffff</Value>
+                <Value>0xfff7ffff</Value>
+                <Value>0xffffefff</Value>
+                <Value>0xfffffdff</Value>
+                <Value>0xffffffbf</Value>
+                <Value>0xfffffff7</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>0xedb7edb7</Value>
+                <Value>0xdb7edb7e</Value>
+                <Value>0xb7edb7ed</Value>
+                <Value>0x7edb7edb</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>0x12481248</Value>
+                <Value>0x24812481</Value>
+                <Value>0x48124812</Value>
+                <Value>0x81248124</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet4">
+                <Value>0x00000000</Value>
+                <Value>0xffffffff</Value>
+            </Parameter>
+        </Row>
+
+        <Row Name="WaveActiveBitXor">
+            <Parameter Name="ShaderOp.Name">WaveActiveBitXor</Parameter>
+            <Parameter Name="ShaderOp.Text">
+                <![CDATA[
+                    struct PerThreadData {
+                        int firstLaneId;
+                        int mask;
+                        uint input;
+                        uint output;
+                    };
+                    RWStructuredBuffer<PerThreadData> g_sb : register(u0);
+                    [numthreads(8,12,1)]
+                    void main(uint GI : SV_GroupIndex) {
+                        PerThreadData pts = g_sb[GI];
+                        pts.firstLaneId = WaveReadLaneFirst(GI);
+                        if (pts.mask != 0) {
+                            pts.output = WaveActiveBitXor(pts.input);
+                        }
+                        else {
+                            pts.output = WaveActiveBitXor(pts.input);
+                        }
+                        g_sb[GI] = pts;
+                    }
+                ]]>
+            </Parameter>
+            <Parameter Name="Validation.NumInputSet">3</Parameter>
+            <Parameter Name="Validation.InputSet1">
+                <Value>0xe0000000</Value>
+                <Value>0x0d000000</Value>
+                <Value>0x00b00000</Value>
+                <Value>0x00070000</Value>
+                <Value>0x0000e000</Value>
+                <Value>0x00000d00</Value>
+                <Value>0x000000b0</Value>
+                <Value>0x00000007</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet2">
+                <Value>0xedb7edb7</Value>
+                <Value>0xdb7edb7e</Value>
+                <Value>0xb7edb7ed</Value>
+                <Value>0x7edb7edb</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet3">
+                <Value>0x12481248</Value>
+                <Value>0x24812481</Value>
+                <Value>0x48124812</Value>
+                <Value>0x81248124</Value>
+            </Parameter>
+            <Parameter Name="Validation.InputSet4">
+                <Value>0x00000000</Value>
+                <Value>0xffffffff</Value>
+            </Parameter>
+        </Row>
+    </Table>
+</Data>

+ 1 - 1
utils/hct/hcttest.cmd

@@ -195,7 +195,7 @@ if "%TEST_EXEC%"=="1" (
 )
 
 if "%TEST_EXEC%"=="1" (
-  call :runte clang-hlsl-tests.dll /p:"HlslDataDir=%HLSL_SRC_DIR%\tools\clang\test\HLSL" /name:%TEST_EXEC_FILTER% /runIgnoredTests /p:"ExperimentalShaders=*" %TEST_ADAPTER% %ADDITIONAL_OPTS%
+  call :runte clang-hlsl-tests.dll /p:"HlslDataDir=%HLSL_SRC_DIR%\tools\clang\test\HLSL" /select:"@Name='%TEST_EXEC_FILTER%' AND @Priority<2" /runIgnoredTests /p:"ExperimentalShaders=*" %TEST_ADAPTER% %ADDITIONAL_OPTS%
   set RES_EXEC=!ERRORLEVEL!
 )
 

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików