Преглед изворни кода

Fix exec tests (#888)

- TAEF is unable to recognize negative values in hex representation in x64 released build. So use decimal values instead
- Add 'Shl', 'LShr', 'And', 'Or', 'Xor' execution tests
- Update Warp Version for test cases known to fail
Young Kim пре 7 година
родитељ
комит
09c7c17dac

+ 4 - 0
tools/clang/unittests/HLSL/ExecutionTest.cpp

@@ -3157,6 +3157,10 @@ static HRESULT ParseTableRow(TableParameter *table, unsigned int size) {
     default:
       DXASSERT_NOMSG("Invalid Parameter Type");
     }
+    if (errno == ERANGE) {
+      LogErrorFmt(L"got out of range value for table %s", table[i].m_name);
+      return E_FAIL;
+    }
   }
   return S_OK;
 }

+ 356 - 122
tools/clang/unittests/HLSL/ShaderOpArithTable.xml

@@ -5,9 +5,9 @@
             <ParameterType Name="ShaderOp.Text">String</ParameterType>
             <ParameterType Name="Validation.Type">String</ParameterType>
             <ParameterType Name="Validation.Tolerance">double</ParameterType>
-            <ParameterType Name="Warp.Version">unsigned int</ParameterType>
             <ParameterType Array="true" Name="Validation.Input1">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Expected1">String</ParameterType>
+            <ParameterType Name="Warp.Version">unsigned int</ParameterType>
         </ParameterTypes>
         <Row Name="Frc">
             <Parameter Name="Validation.Type">Epsilon</Parameter>
@@ -171,6 +171,7 @@
                 <Value>0.761594</Value>
                 <Value>-0.761594</Value>
             </Parameter>
+            <Parameter Name="Warp.Version">16202</Parameter>
         </Row>
         <Row Name="Sqrt">
             <Parameter Name="Validation.Type">ulp</Parameter>
@@ -420,6 +421,7 @@
                 <Value>0.785398163</Value>
                 <Value>-0.785398163</Value>
             </Parameter>
+            <Parameter Name="Warp.Version">16202</Parameter>
         </Row>
         <Row Name="Rsqrt">
             <Parameter Name="Validation.Type">ulp</Parameter>
@@ -928,6 +930,7 @@
                 <Value>1</Value>
                 <Value>1</Value>
             </Parameter>
+            <Parameter Name="Warp.Version">16202</Parameter>
         </Row>
     </Table>
     <Table Id="BinaryFloatOpTable">
@@ -936,7 +939,6 @@
             <ParameterType Name="ShaderOp.Text">String</ParameterType>
             <ParameterType Name="Validation.Type">String</ParameterType>
             <ParameterType Name="Validation.Tolerance">double</ParameterType>
-            <ParameterType Name="Warp.Version">unsigned int</ParameterType>
             <ParameterType Array="true" Name="Validation.Input1">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Input2">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Expected1">String</ParameterType>
@@ -1182,7 +1184,6 @@
             <ParameterType Name="ShaderOp.Text">String</ParameterType>
             <ParameterType Name="Validation.Type">String</ParameterType>
             <ParameterType Name="Validation.Tolerance">double</ParameterType>
-            <ParameterType Name="Warp.Version">unsigned int</ParameterType>
             <ParameterType Array="true" Name="Validation.Input1">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Input2">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Input3">String</ParameterType>
@@ -1269,7 +1270,6 @@
             <ParameterType Name="ShaderOp.Text">String</ParameterType>
             <ParameterType Name="Validation.Type">String</ParameterType>
             <ParameterType Name="Validation.Tolerance">double</ParameterType>
-            <ParameterType Name="Warp.Version">unsigned int</ParameterType>
             <ParameterType Array="true" Name="Validation.Input1">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Expected1">String</ParameterType>
         </ParameterTypes>
@@ -1432,12 +1432,107 @@
             <ParameterType Name="ShaderOp.Text">String</ParameterType>
             <ParameterType Name="Validation.Type">String</ParameterType>
             <ParameterType Name="Validation.Tolerance">double</ParameterType>
-            <ParameterType Name="Warp.Version">unsigned int</ParameterType>
             <ParameterType Array="true" Name="Validation.Input1">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Input2">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Expected1">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Expected2">String</ParameterType>
         </ParameterTypes>
+        <Row Name="Xor">
+            <Parameter Name="Validation.Type">Epsilon</Parameter>
+            <Parameter Name="Validation.Tolerance">0</Parameter>
+            <Parameter Name="ShaderOp.Text"> struct SBinaryUintOp {
+                int input1;
+                int input2;
+                int output1;
+                int output2;
+            };
+            RWStructuredBuffer&lt;SBinaryUintOp&gt; g_buf : register(u0);
+            [numthreads(8,8,1)]
+            void main(uint GI : SV_GroupIndex) {
+                SBinaryUintOp l = g_buf[GI];
+                l.output1 = l.input1 ^ l.input2;
+                g_buf[GI] = l;
+            };</Parameter>
+            <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
+            <Parameter Name="Validation.Input1">
+                <Value>0x1</Value>
+                <Value>0x01</Value>
+                <Value>0x7fff0000</Value>
+                <Value>0x11111111</Value>
+                <Value>0x137f</Value>
+                <Value>0x0</Value>
+                <Value>0x12345678</Value>
+                <Value>0xa341</Value>
+                <Value>-1</Value>
+            </Parameter>
+            <Parameter Name="Validation.Input2">
+                <Value>0x1</Value>
+                <Value>0xf0</Value>
+                <Value>0x0000ffff</Value>
+                <Value>0x22222222</Value>
+                <Value>0xec80</Value>
+                <Value>0x0</Value>
+                <Value>0x00000000</Value>
+                <Value>0x3471</Value>
+                <Value>-1</Value>
+            </Parameter>
+            <Parameter Name="Validation.Expected1">
+                <Value>0x0</Value>
+                <Value>0xf1</Value>
+                <Value>0x7fffffff</Value>
+                <Value>0x33333333</Value>
+                <Value>0xffff</Value>
+                <Value>0x0</Value>
+                <Value>0x12345678</Value>
+                <Value>0x9730</Value>
+                <Value>0x00000000</Value>
+            </Parameter>
+        </Row>
+        <Row Name="LShr">
+            <Parameter Name="Validation.Type">Epsilon</Parameter>
+            <Parameter Name="Validation.Tolerance">0</Parameter>
+            <Parameter Name="ShaderOp.Text"> struct SBinaryUintOp {
+                int input1;
+                int input2;
+                int output1;
+                int output2;
+            };
+            RWStructuredBuffer&lt;SBinaryUintOp&gt; g_buf : register(u0);
+            [numthreads(8,8,1)]
+            void main(uint GI : SV_GroupIndex) {
+                SBinaryUintOp l = g_buf[GI];
+                l.output1 = l.input1 &gt;&gt; l.input2;
+                g_buf[GI] = l;
+            };</Parameter>
+            <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
+            <Parameter Name="Validation.Input1">
+                <Value>1</Value>
+                <Value>1</Value>
+                <Value>0xffff</Value>
+                <Value>0x7fffffff</Value>
+                <Value>0x70001234</Value>
+                <Value>0x12340ab3</Value>
+                <Value>0x7fffffff</Value>
+            </Parameter>
+            <Parameter Name="Validation.Input2">
+                <Value>0</Value>
+                <Value>1</Value>
+                <Value>4</Value>
+                <Value>30</Value>
+                <Value>15</Value>
+                <Value>16</Value>
+                <Value>1</Value>
+            </Parameter>
+            <Parameter Name="Validation.Expected1">
+                <Value>1</Value>
+                <Value>0</Value>
+                <Value>0xfff</Value>
+                <Value>1</Value>
+                <Value>0xe000</Value>
+                <Value>0x1234</Value>
+                <Value>0x3fffffff</Value>
+            </Parameter>
+        </Row>
         <Row Name="IMax">
             <Parameter Name="Validation.Type">Epsilon</Parameter>
             <Parameter Name="Validation.Tolerance">0</Parameter>
@@ -1525,6 +1620,54 @@
                 <Value>-53752</Value>
             </Parameter>
         </Row>
+        <Row Name="And">
+            <Parameter Name="Validation.Type">Epsilon</Parameter>
+            <Parameter Name="Validation.Tolerance">0</Parameter>
+            <Parameter Name="ShaderOp.Text"> struct SBinaryUintOp {
+                int input1;
+                int input2;
+                int output1;
+                int output2;
+            };
+            RWStructuredBuffer&lt;SBinaryUintOp&gt; g_buf : register(u0);
+            [numthreads(8,8,1)]
+            void main(uint GI : SV_GroupIndex) {
+                SBinaryUintOp l = g_buf[GI];
+                l.output1 = l.input1 &amp; l.input2;
+                g_buf[GI] = l;
+            };</Parameter>
+            <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
+            <Parameter Name="Validation.Input1">
+                <Value>0x1</Value>
+                <Value>0x01</Value>
+                <Value>0x7fff0000</Value>
+                <Value>0x33333333</Value>
+                <Value>0x137f</Value>
+                <Value>0x12345678</Value>
+                <Value>0xa341</Value>
+                <Value>-1</Value>
+            </Parameter>
+            <Parameter Name="Validation.Input2">
+                <Value>0x1</Value>
+                <Value>0xf0</Value>
+                <Value>0x0000ffff</Value>
+                <Value>0x22222222</Value>
+                <Value>0xec80</Value>
+                <Value>-1</Value>
+                <Value>0x3471</Value>
+                <Value>-1</Value>
+            </Parameter>
+            <Parameter Name="Validation.Expected1">
+                <Value>0x1</Value>
+                <Value>0x00</Value>
+                <Value>0x0</Value>
+                <Value>0x22222222</Value>
+                <Value>0x0</Value>
+                <Value>0x12345678</Value>
+                <Value>0x2041</Value>
+                <Value>-1</Value>
+            </Parameter>
+        </Row>
         <Row Name="IMul">
             <Parameter Name="Validation.Type">Epsilon</Parameter>
             <Parameter Name="Validation.Tolerance">0</Parameter>
@@ -1576,6 +1719,102 @@
                 <Value>1</Value>
             </Parameter>
         </Row>
+        <Row Name="Shl">
+            <Parameter Name="Validation.Type">Epsilon</Parameter>
+            <Parameter Name="Validation.Tolerance">0</Parameter>
+            <Parameter Name="ShaderOp.Text"> struct SBinaryUintOp {
+                int input1;
+                int input2;
+                int output1;
+                int output2;
+            };
+            RWStructuredBuffer&lt;SBinaryUintOp&gt; g_buf : register(u0);
+            [numthreads(8,8,1)]
+            void main(uint GI : SV_GroupIndex) {
+                SBinaryUintOp l = g_buf[GI];
+                l.output1 = l.input1 &lt;&lt; l.input2;
+                g_buf[GI] = l;
+            };</Parameter>
+            <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
+            <Parameter Name="Validation.Input1">
+                <Value>1</Value>
+                <Value>1</Value>
+                <Value>0x1010</Value>
+                <Value>0xa</Value>
+                <Value>-1</Value>
+                <Value>0x12341234</Value>
+                <Value>-1</Value>
+            </Parameter>
+            <Parameter Name="Validation.Input2">
+                <Value>0</Value>
+                <Value>259</Value>
+                <Value>4</Value>
+                <Value>2</Value>
+                <Value>0</Value>
+                <Value>15</Value>
+                <Value>3</Value>
+            </Parameter>
+            <Parameter Name="Validation.Expected1">
+                <Value>0x1</Value>
+                <Value>0x8</Value>
+                <Value>0x10100</Value>
+                <Value>0x28</Value>
+                <Value>-1</Value>
+                <Value>0x091a0000</Value>
+                <Value>-8</Value>
+            </Parameter>
+        </Row>
+        <Row Name="Or">
+            <Parameter Name="Validation.Type">Epsilon</Parameter>
+            <Parameter Name="Validation.Tolerance">0</Parameter>
+            <Parameter Name="ShaderOp.Text"> struct SBinaryUintOp {
+                int input1;
+                int input2;
+                int output1;
+                int output2;
+            };
+            RWStructuredBuffer&lt;SBinaryUintOp&gt; g_buf : register(u0);
+            [numthreads(8,8,1)]
+            void main(uint GI : SV_GroupIndex) {
+                SBinaryUintOp l = g_buf[GI];
+                l.output1 = l.input1 | l.input2;
+                g_buf[GI] = l;
+            };</Parameter>
+            <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
+            <Parameter Name="Validation.Input1">
+                <Value>0x1</Value>
+                <Value>0x01</Value>
+                <Value>0x7fff0000</Value>
+                <Value>0x11111111</Value>
+                <Value>0x137f</Value>
+                <Value>0x0</Value>
+                <Value>0x12345678</Value>
+                <Value>0xa341</Value>
+                <Value>-1</Value>
+            </Parameter>
+            <Parameter Name="Validation.Input2">
+                <Value>0x1</Value>
+                <Value>0xf0</Value>
+                <Value>0x0000ffff</Value>
+                <Value>0x22222222</Value>
+                <Value>0xec80</Value>
+                <Value>0x0</Value>
+                <Value>0x00000000</Value>
+                <Value>0x3471</Value>
+                <Value>-1</Value>
+            </Parameter>
+            <Parameter Name="Validation.Expected1">
+                <Value>0x1</Value>
+                <Value>0xf1</Value>
+                <Value>0x7fffffff</Value>
+                <Value>0x33333333</Value>
+                <Value>0xffff</Value>
+                <Value>0x0</Value>
+                <Value>0x12345678</Value>
+                <Value>0xb771</Value>
+                <Value>-1</Value>
+            </Parameter>
+        </Row>
         <Row Name="IAdd">
             <Parameter Name="Validation.Type">Epsilon</Parameter>
             <Parameter Name="Validation.Tolerance">0</Parameter>
@@ -1688,32 +1927,32 @@
                 <Value>10000</Value>
                 <Value>2147483647</Value>
                 <Value>2147483647</Value>
-                <Value>0xffffffff</Value>
+                <Value>-1</Value>
             </Parameter>
             <Parameter Name="Validation.Input2">
-                <Value>0</Value>
+                <Value>1</Value>
                 <Value>256</Value>
                 <Value>4</Value>
                 <Value>10001</Value>
-                <Value>0</Value>
+                <Value>2</Value>
                 <Value>2147483647</Value>
                 <Value>1</Value>
             </Parameter>
             <Parameter Name="Validation.Expected1">
-                <Value>0xffffffff</Value>
+                <Value>1</Value>
                 <Value>0</Value>
                 <Value>2</Value>
                 <Value>0</Value>
-                <Value>0xffffffff</Value>
+                <Value>1073741823</Value>
                 <Value>1</Value>
-                <Value>0xffffffff</Value>
+                <Value>-1</Value>
             </Parameter>
             <Parameter Name="Validation.Expected2">
-                <Value>0xffffffff</Value>
+                <Value>0</Value>
                 <Value>1</Value>
                 <Value>2</Value>
                 <Value>10000</Value>
-                <Value>0xffffffff</Value>
+                <Value>1</Value>
                 <Value>0</Value>
                 <Value>0</Value>
             </Parameter>
@@ -1725,7 +1964,6 @@
             <ParameterType Name="ShaderOp.Text">String</ParameterType>
             <ParameterType Name="Validation.Type">String</ParameterType>
             <ParameterType Name="Validation.Tolerance">double</ParameterType>
-            <ParameterType Name="Warp.Version">unsigned int</ParameterType>
             <ParameterType Array="true" Name="Validation.Input1">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Input2">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Input3">String</ParameterType>
@@ -1812,7 +2050,6 @@
             <ParameterType Name="ShaderOp.Text">String</ParameterType>
             <ParameterType Name="Validation.Type">String</ParameterType>
             <ParameterType Name="Validation.Tolerance">double</ParameterType>
-            <ParameterType Name="Warp.Version">unsigned int</ParameterType>
             <ParameterType Array="true" Name="Validation.Input1">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Expected1">String</ParameterType>
         </ParameterTypes>
@@ -1855,12 +2092,50 @@
             <ParameterType Name="ShaderOp.Text">String</ParameterType>
             <ParameterType Name="Validation.Type">String</ParameterType>
             <ParameterType Name="Validation.Tolerance">double</ParameterType>
-            <ParameterType Name="Warp.Version">unsigned int</ParameterType>
             <ParameterType Array="true" Name="Validation.Input1">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Input2">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Expected1">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Expected2">String</ParameterType>
         </ParameterTypes>
+        <Row Name="UMul">
+            <Parameter Name="Validation.Type">Epsilon</Parameter>
+            <Parameter Name="Validation.Tolerance">0</Parameter>
+            <Parameter Name="ShaderOp.Text"> struct SBinaryUintOp {
+                uint input1;
+                uint input2;
+                uint output1;
+                uint output2;
+            };
+            RWStructuredBuffer&lt;SBinaryUintOp&gt; g_buf : register(u0);
+            [numthreads(8,8,1)]
+            void main(uint GI : SV_GroupIndex) {
+                SBinaryUintOp l = g_buf[GI];
+                l.output1 = l.input1 * l.input2;
+                g_buf[GI] = l;
+            };</Parameter>
+            <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
+            <Parameter Name="Validation.Input1">
+                <Value>0</Value>
+                <Value>1</Value>
+                <Value>10</Value>
+                <Value>10000</Value>
+                <Value>2147483647</Value>
+            </Parameter>
+            <Parameter Name="Validation.Input2">
+                <Value>0</Value>
+                <Value>256</Value>
+                <Value>4</Value>
+                <Value>10001</Value>
+                <Value>0</Value>
+            </Parameter>
+            <Parameter Name="Validation.Expected1">
+                <Value>0</Value>
+                <Value>256</Value>
+                <Value>40</Value>
+                <Value>100010000</Value>
+                <Value>0</Value>
+            </Parameter>
+        </Row>
         <Row Name="UMin">
             <Parameter Name="Validation.Type">Epsilon</Parameter>
             <Parameter Name="Validation.Tolerance">0</Parameter>
@@ -1945,6 +2220,61 @@
                 <Value>4294967295</Value>
             </Parameter>
         </Row>
+        <Row Name="UDiv">
+            <Parameter Name="Validation.Type">Epsilon</Parameter>
+            <Parameter Name="Validation.Tolerance">0</Parameter>
+            <Parameter Name="ShaderOp.Text"> struct SBinaryUintOp {
+                uint input1;
+                uint input2;
+                uint output1;
+                uint output2;
+            };
+            RWStructuredBuffer&lt;SBinaryUintOp&gt; g_buf : register(u0);
+            [numthreads(8,8,1)]
+            void main(uint GI : SV_GroupIndex) {
+                SBinaryUintOp l = g_buf[GI];
+                l.output1 = l.input1 / l.input2;
+                l.output2 = l.input1 % l.input2;
+                g_buf[GI] = l;
+            };</Parameter>
+            <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
+            <Parameter Name="Validation.Input1">
+                <Value>1</Value>
+                <Value>1</Value>
+                <Value>10</Value>
+                <Value>10000</Value>
+                <Value>2147483647</Value>
+                <Value>2147483647</Value>
+                <Value>0xffffffff</Value>
+            </Parameter>
+            <Parameter Name="Validation.Input2">
+                <Value>0</Value>
+                <Value>256</Value>
+                <Value>4</Value>
+                <Value>10001</Value>
+                <Value>0</Value>
+                <Value>2147483647</Value>
+                <Value>1</Value>
+            </Parameter>
+            <Parameter Name="Validation.Expected1">
+                <Value>0xffffffff</Value>
+                <Value>0</Value>
+                <Value>2</Value>
+                <Value>0</Value>
+                <Value>0xffffffff</Value>
+                <Value>1</Value>
+                <Value>0xffffffff</Value>
+            </Parameter>
+            <Parameter Name="Validation.Expected2">
+                <Value>0xffffffff</Value>
+                <Value>1</Value>
+                <Value>2</Value>
+                <Value>10000</Value>
+                <Value>0xffffffff</Value>
+                <Value>0</Value>
+                <Value>0</Value>
+            </Parameter>
+        </Row>
         <Row Name="USub">
             <Parameter Name="Validation.Type">Epsilon</Parameter>
             <Parameter Name="Validation.Tolerance">0</Parameter>
@@ -2035,45 +2365,6 @@
                 <Value>54724</Value>
             </Parameter>
         </Row>
-        <Row Name="UMul">
-            <Parameter Name="Validation.Type">Epsilon</Parameter>
-            <Parameter Name="Validation.Tolerance">0</Parameter>
-            <Parameter Name="ShaderOp.Text"> struct SBinaryUintOp {
-                uint input1;
-                uint input2;
-                uint output1;
-                uint output2;
-            };
-            RWStructuredBuffer&lt;SBinaryUintOp&gt; g_buf : register(u0);
-            [numthreads(8,8,1)]
-            void main(uint GI : SV_GroupIndex) {
-                SBinaryUintOp l = g_buf[GI];
-                l.output1 = l.input1 * l.input2;
-                g_buf[GI] = l;
-            };</Parameter>
-            <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
-            <Parameter Name="Validation.Input1">
-                <Value>0</Value>
-                <Value>1</Value>
-                <Value>10</Value>
-                <Value>10000</Value>
-                <Value>2147483647</Value>
-            </Parameter>
-            <Parameter Name="Validation.Input2">
-                <Value>0</Value>
-                <Value>256</Value>
-                <Value>4</Value>
-                <Value>10001</Value>
-                <Value>0</Value>
-            </Parameter>
-            <Parameter Name="Validation.Expected1">
-                <Value>0</Value>
-                <Value>256</Value>
-                <Value>40</Value>
-                <Value>100010000</Value>
-                <Value>0</Value>
-            </Parameter>
-        </Row>
         <Row Name="UAddc">
             <Parameter Name="Validation.Type">Epsilon</Parameter>
             <Parameter Name="Validation.Tolerance">0</Parameter>
@@ -2127,61 +2418,6 @@
                 <Value>0xffffffff</Value>
             </Parameter>
         </Row>
-        <Row Name="UDiv">
-            <Parameter Name="Validation.Type">Epsilon</Parameter>
-            <Parameter Name="Validation.Tolerance">0</Parameter>
-            <Parameter Name="ShaderOp.Text"> struct SBinaryUintOp {
-                uint input1;
-                uint input2;
-                uint output1;
-                uint output2;
-            };
-            RWStructuredBuffer&lt;SBinaryUintOp&gt; g_buf : register(u0);
-            [numthreads(8,8,1)]
-            void main(uint GI : SV_GroupIndex) {
-                SBinaryUintOp l = g_buf[GI];
-                l.output1 = l.input1 / l.input2;
-                l.output2 = l.input1 % l.input2;
-                g_buf[GI] = l;
-            };</Parameter>
-            <Parameter Name="ShaderOp.Target">cs_6_0</Parameter>
-            <Parameter Name="Validation.Input1">
-                <Value>1</Value>
-                <Value>1</Value>
-                <Value>10</Value>
-                <Value>10000</Value>
-                <Value>2147483647</Value>
-                <Value>2147483647</Value>
-                <Value>0xffffffff</Value>
-            </Parameter>
-            <Parameter Name="Validation.Input2">
-                <Value>0</Value>
-                <Value>256</Value>
-                <Value>4</Value>
-                <Value>10001</Value>
-                <Value>0</Value>
-                <Value>2147483647</Value>
-                <Value>1</Value>
-            </Parameter>
-            <Parameter Name="Validation.Expected1">
-                <Value>0xffffffff</Value>
-                <Value>0</Value>
-                <Value>2</Value>
-                <Value>0</Value>
-                <Value>0xffffffff</Value>
-                <Value>1</Value>
-                <Value>0xffffffff</Value>
-            </Parameter>
-            <Parameter Name="Validation.Expected2">
-                <Value>0xffffffff</Value>
-                <Value>1</Value>
-                <Value>2</Value>
-                <Value>10000</Value>
-                <Value>0xffffffff</Value>
-                <Value>0</Value>
-                <Value>0</Value>
-            </Parameter>
-        </Row>
     </Table>
     <Table Id="TertiaryUintOpTable">
         <ParameterTypes>
@@ -2189,7 +2425,6 @@
             <ParameterType Name="ShaderOp.Text">String</ParameterType>
             <ParameterType Name="Validation.Type">String</ParameterType>
             <ParameterType Name="Validation.Tolerance">double</ParameterType>
-            <ParameterType Name="Warp.Version">unsigned int</ParameterType>
             <ParameterType Array="true" Name="Validation.Input1">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Input2">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Input3">String</ParameterType>
@@ -2256,7 +2491,6 @@
             <ParameterType Name="ShaderOp.Text">String</ParameterType>
             <ParameterType Name="Validation.Type">String</ParameterType>
             <ParameterType Name="Validation.Tolerance">double</ParameterType>
-            <ParameterType Name="Warp.Version">unsigned int</ParameterType>
             <ParameterType Array="true" Name="Validation.Input1">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Input2">String</ParameterType>
             <ParameterType Array="true" Name="Validation.Expected1">String</ParameterType>
@@ -2407,8 +2641,8 @@
             <ParameterType Array="true" Name="Validation.InputSet3">String</ParameterType>
             <ParameterType Array="true" Name="Validation.InputSet4">String</ParameterType>
         </ParameterTypes>
-        <Row Name="WaveActiveAnyTrue">
-            <Parameter Name="ShaderOp.Name">WaveActiveAnyTrue</Parameter>
+        <Row Name="WaveActiveAllTrue">
+            <Parameter Name="ShaderOp.Name">WaveActiveAllTrue</Parameter>
             <Parameter Name="ShaderOp.Text"> struct PerThreadData {
                         uint firstLaneId;
                         uint laneIndex;
@@ -2423,10 +2657,10 @@
                         pts.firstLaneId = WaveReadLaneFirst(GI);
                         pts.laneIndex = WaveGetLaneIndex();
                         if (pts.mask != 0) {
-                            pts.output = WaveActiveAnyTrue(pts.input);
+                            pts.output = WaveActiveAllTrue(pts.input);
                         }
                         else {
-                            pts.output = WaveActiveAnyTrue(pts.input);
+                            pts.output = WaveActiveAllTrue(pts.input);
                         }
                         g_sb[GI] = pts;
                     };</Parameter>
@@ -2442,11 +2676,11 @@
                 <Value>1</Value>
             </Parameter>
             <Parameter Name="Validation.InputSet3">
-                <Value>0</Value>
+                <Value>1</Value>
             </Parameter>
         </Row>
-        <Row Name="WaveActiveAllTrue">
-            <Parameter Name="ShaderOp.Name">WaveActiveAllTrue</Parameter>
+        <Row Name="WaveActiveAnyTrue">
+            <Parameter Name="ShaderOp.Name">WaveActiveAnyTrue</Parameter>
             <Parameter Name="ShaderOp.Text"> struct PerThreadData {
                         uint firstLaneId;
                         uint laneIndex;
@@ -2461,10 +2695,10 @@
                         pts.firstLaneId = WaveReadLaneFirst(GI);
                         pts.laneIndex = WaveGetLaneIndex();
                         if (pts.mask != 0) {
-                            pts.output = WaveActiveAllTrue(pts.input);
+                            pts.output = WaveActiveAnyTrue(pts.input);
                         }
                         else {
-                            pts.output = WaveActiveAllTrue(pts.input);
+                            pts.output = WaveActiveAnyTrue(pts.input);
                         }
                         g_sb[GI] = pts;
                     };</Parameter>
@@ -2480,7 +2714,7 @@
                 <Value>1</Value>
             </Parameter>
             <Parameter Name="Validation.InputSet3">
-                <Value>1</Value>
+                <Value>0</Value>
             </Parameter>
         </Row>
         <Row Name="WaveActiveMin">

+ 2 - 2
utils/hct/hctdb.py

@@ -226,13 +226,13 @@ class db_dxil(object):
             self.name_idx[i].category = "Unary uint"
         for i in "FMax,FMin".split(","):
             self.name_idx[i].category = "Binary float"
-        for i in "IMax,IMin,Add,Sub,Mul,SDiv,SRem".split(","):
+        for i in "IMax,IMin,Add,Sub,Mul,SDiv,SRem,And,Or,Xor,AShr,LShr,Shl".split(","):
             self.name_idx[i].category = "Binary int"
         for i in "UMax,UMin,UMul,UDiv,URem".split(","):
             self.name_idx[i].category = "Binary uint"
         for i in "IMul".split(","):
             self.name_idx[i].category = "Binary int with two outputs"
-        for i in "UMul,UDiv".split(","):
+        for i in "UMul,UDiv".split(","): # Rename this UDiv OpCode to UDivMod
             self.name_idx[i].category = "Binary uint with two outputs"
         for i in "UAddc,USubb".split(","):
             self.name_idx[i].category = "Binary uint with carry or borrow"

+ 113 - 19
utils/hct/hctdb_test.py

@@ -8,7 +8,7 @@ import xml.etree.ElementTree as ET
 import argparse
 
 parser = argparse.ArgumentParser(description="contains information about dxil op test cases.")
-parser.add_argument('mode', help='mode')
+parser.add_argument('mode', help="'gen-xml' or 'info'")
 
 g_db_dxil = None
 
@@ -39,7 +39,7 @@ shader_text: hlsl file that is used for testing dxil op
 
 class test_case(object):
     def __init__(self, test_name, insts, validation_type, validation_tolerance,
-                 input_lists, output_lists, shader_target, shader_text):
+                 input_lists, output_lists, shader_target, shader_text, **kwargs):
         self.test_name = test_name
         self.validation_type = validation_type
         self.validation_tolerance = validation_tolerance
@@ -48,6 +48,9 @@ class test_case(object):
         self.shader_target = shader_target
         self.shader_text = shader_text
         self.insts = insts # list of instructions each test case cover
+        self.warp_version = -1 # known warp version that works
+        for k,v in kwargs.items():
+            setattr(self, k, v)
 
 # Wrapper for each DXIL instruction
 class inst_node(object):
@@ -56,14 +59,14 @@ class inst_node(object):
         self.test_cases = []  # list of test_case
 
 def add_test_case(test_name, inst_names, validation_type, validation_tolerance,
-                  input_lists, output_lists, shader_target, shader_text, ):
+                  input_lists, output_lists, shader_target, shader_text, **kwargs):
     insts = []
     for inst_name in inst_names:
         assert (inst_name in g_instruction_nodes)
         insts += [g_instruction_nodes[inst_name].inst]
     case = test_case(test_name, insts, validation_type,
                     validation_tolerance, input_lists, output_lists,
-                    shader_target, shader_text)
+                    shader_target, shader_text, **kwargs)
     g_test_cases[test_name] = case
     # update instruction nodes
     for inst_name in inst_names:
@@ -71,6 +74,9 @@ def add_test_case(test_name, inst_names, validation_type, validation_tolerance,
 
 
 # This is a collection of test case for driver tests per instruction
+# Warning: For test cases, when you want to pass in signed integer,
+# make sure to pass in negative numbers with decimal values instead of hexadecimal representation.
+# For some reason, TAEF is not handling them properly.
 def add_test_cases():
     nan = float('nan')
     p_inf = float('inf')
@@ -174,7 +180,7 @@ def add_test_cases():
                 SUnaryFPOp l = g_buf[GI];
                 l.output = tanh(l.input);
                 g_buf[GI] = l;
-            };''')
+            };''', warp_version=16202)
     add_test_case('Acos', ['Acos'], 'Epsilon', 0.0008, [[
         'NaN', '-Inf', '-denorm', '-0', '0', 'denorm', 'Inf', '1', '-1', '1.5',
         '-1.5'
@@ -223,7 +229,7 @@ def add_test_cases():
                 SUnaryFPOp l = g_buf[GI];
                 l.output = atan(l.input);
                 g_buf[GI] = l;
-            };''')
+            };''', warp_version=16202)
     add_test_case('Exp', ['Exp'], 'Relative', 21,
         [['NaN', '-Inf', '-denorm', '-0', '0', 'denorm', 'Inf', '-1', '10']],
         [['NaN', '0', '1', '1', '1', '1', 'Inf', '0.367879441', '22026.46579']
@@ -441,7 +447,7 @@ def add_test_cases():
                 else
                     l.output = 0;
                 g_buf[GI] = l;
-            };''')
+            };''', warp_version=16202)
     add_test_case('FAbs', ['FAbs'], 'Epsilon', 0,
         [['NaN', '-Inf', '-denorm', '-0', '0', 'denorm', 'Inf', '1.0', '-1.0']
          ], [['NaN', 'Inf', 'denorm', '0', '0', 'denorm', 'Inf', '1', '1']],
@@ -732,10 +738,10 @@ def add_test_cases():
                 g_buf[GI] = l;
             };''')
     add_test_case('IDiv', ['SDiv', 'SRem'], 'Epsilon', 0,
-        [['1', '1', '10', '10000', '2147483647', '2147483647', '0xffffffff'],
-         ['0', '256', '4', '10001', '0', '2147483647', '1']],
-        [['0xffffffff', '0', '2', '0', '0xffffffff', '1', '0xffffffff'],
-         ['0xffffffff', '1', '2', '10000', '0xffffffff', '0', '0']], 'cs_6_0',
+        [['1', '1', '10', '10000', '2147483647', '2147483647', '-1'],
+         ['1', '256', '4', '10001', '2', '2147483647', '1']],
+        [['1', '0', '2', '0', '1073741823', '1', '-1'],
+         ['0', '1', '2', '10000', '1', '0', '0']], 'cs_6_0',
         ''' struct SBinaryUintOp {
                 int input1;
                 int input2;
@@ -750,6 +756,96 @@ def add_test_cases():
                 l.output2 = l.input1 % l.input2;
                 g_buf[GI] = l;
             };''')
+    add_test_case('Shl', ['Shl'], 'Epsilon', 0,
+        [['1', '1', '0x1010', '0xa', '-1', '0x12341234', '-1'],
+         ['0', '259', '4', '2', '0', '15', '3']],
+        [['0x1', '0x8', '0x10100', '0x28', '-1','0x091a0000', '-8']], 'cs_6_0',
+        ''' struct SBinaryUintOp {
+                int input1;
+                int input2;
+                int output1;
+                int output2;
+            };
+            RWStructuredBuffer<SBinaryUintOp> g_buf : register(u0);
+            [numthreads(8,8,1)]
+            void main(uint GI : SV_GroupIndex) {
+                SBinaryUintOp l = g_buf[GI];
+                l.output1 = l.input1 << l.input2;
+                g_buf[GI] = l;
+            };''')
+    add_test_case("LShr", ['LShr'], 'Epsilon', 0,
+        [['1', '1', '0xffff', '0x7fffffff', '0x70001234', '0x12340ab3', '0x7fffffff'],
+        ['0', '1', '4', '30', '15', '16', '1']],
+        [['1', '0', '0xfff', '1', '0xe000', '0x1234', '0x3fffffff']], 'cs_6_0',
+        ''' struct SBinaryUintOp {
+                int input1;
+                int input2;
+                int output1;
+                int output2;
+            };
+            RWStructuredBuffer<SBinaryUintOp> g_buf : register(u0);
+            [numthreads(8,8,1)]
+            void main(uint GI : SV_GroupIndex) {
+                SBinaryUintOp l = g_buf[GI];
+                l.output1 = l.input1 >> l.input2;
+                g_buf[GI] = l;
+            };'''
+    )
+    add_test_case("And", ['And'], 'Epsilon', 0,
+        [['0x1', '0x01', '0x7fff0000', '0x33333333', '0x137f', '0x12345678', '0xa341', '-1'],
+         ['0x1', '0xf0', '0x0000ffff', '0x22222222', '0xec80', '-1', '0x3471', '-1']],
+        [['0x1', '0x00', '0x0', '0x22222222', '0x0', '0x12345678', '0x2041', '-1']], 'cs_6_0',
+        ''' struct SBinaryUintOp {
+                int input1;
+                int input2;
+                int output1;
+                int output2;
+            };
+            RWStructuredBuffer<SBinaryUintOp> g_buf : register(u0);
+            [numthreads(8,8,1)]
+            void main(uint GI : SV_GroupIndex) {
+                SBinaryUintOp l = g_buf[GI];
+                l.output1 = l.input1 & l.input2;
+                g_buf[GI] = l;
+            };'''
+    )
+    add_test_case("Or", ['Or'], 'Epsilon', 0,
+        [['0x1', '0x01', '0x7fff0000', '0x11111111', '0x137f', '0x0', '0x12345678', '0xa341', '-1'],
+         ['0x1', '0xf0', '0x0000ffff', '0x22222222', '0xec80', '0x0', '0x00000000', '0x3471', '-1']],
+        [['0x1', '0xf1', '0x7fffffff', '0x33333333', '0xffff', '0x0', '0x12345678', '0xb771', '-1']], 'cs_6_0',
+        ''' struct SBinaryUintOp {
+                int input1;
+                int input2;
+                int output1;
+                int output2;
+            };
+            RWStructuredBuffer<SBinaryUintOp> g_buf : register(u0);
+            [numthreads(8,8,1)]
+            void main(uint GI : SV_GroupIndex) {
+                SBinaryUintOp l = g_buf[GI];
+                l.output1 = l.input1 | l.input2;
+                g_buf[GI] = l;
+            };'''
+    )
+    add_test_case("Xor", ['Xor'], 'Epsilon', 0,
+        [['0x1', '0x01', '0x7fff0000', '0x11111111', '0x137f', '0x0', '0x12345678', '0xa341', '-1'],
+         ['0x1', '0xf0', '0x0000ffff', '0x22222222', '0xec80', '0x0', '0x00000000', '0x3471', '-1']],
+        [['0x0', '0xf1', '0x7fffffff', '0x33333333', '0xffff', '0x0', '0x12345678', '0x9730', '0x00000000']], 'cs_6_0',
+        ''' struct SBinaryUintOp {
+                int input1;
+                int input2;
+                int output1;
+                int output2;
+            };
+            RWStructuredBuffer<SBinaryUintOp> g_buf : register(u0);
+            [numthreads(8,8,1)]
+            void main(uint GI : SV_GroupIndex) {
+                SBinaryUintOp l = g_buf[GI];
+                l.output1 = l.input1 ^ l.input2;
+                g_buf[GI] = l;
+            };'''
+    )
+
     # Binary Uint
     add_test_case('UAdd', ['Add'], 'Epsilon', 0,
                   [['2147483648', '4294967285', '0', '0', '10', '2147483647', '486'],
@@ -1456,7 +1552,7 @@ def add_test_cases():
 # TODO: ElementTree is not generating formatted XML. Currently xml file is checked in after VS Code formatter.
 # Implement xml formatter or import formatter library and use that instead.
 
-def generate_parameter_types(table, num_inputs, num_outputs):
+def generate_parameter_types(table, num_inputs, num_outputs, has_known_warp_issue=False):
     param_types = ET.SubElement(table, "ParameterTypes")
     ET.SubElement(
         param_types, "ParameterType", attrib={
@@ -1474,10 +1570,6 @@ def generate_parameter_types(table, num_inputs, num_outputs):
         param_types, "ParameterType", attrib={
             "Name": "Validation.Tolerance"
         }).text = "double"
-    ET.SubElement(
-        param_types, "ParameterType", attrib={
-            "Name": "Warp.Version"
-        }).text = "unsigned int"  # warp version that is known to pass
     for i in range(0, num_inputs):
         ET.SubElement(
             param_types,
@@ -1494,7 +1586,8 @@ def generate_parameter_types(table, num_inputs, num_outputs):
                 "Name": 'Validation.Expected{}'.format(i + 1),
                 'Array': 'true'
             }).text = "String"
-
+    if has_known_warp_issue:
+        ET.SubElement(param_types, "ParameterType", attrib={"Name":"Warp.Version"}).text = "unsigned int"
 
 def generate_parameter_types_wave(table):
     param_types = ET.SubElement(table, "ParameterTypes")
@@ -1608,7 +1701,8 @@ def generate_row(table, case):
         })
         for val in case.output_lists[i]:
             ET.SubElement(outputs, "Value").text = str(val)
-
+    if case.warp_version > 0:
+        ET.SubElement(row, "Parameter", {"Name":"Warp.Version"}).text = str(case.warp_version)
 
 def generate_row_wave(table, case):
     row = ET.SubElement(table, "Row", {"Name": case.test_name})
@@ -1638,7 +1732,7 @@ def generate_table_for_taef():
         generate_parameter_types(
             ET.SubElement(root, "Table", attrib={
                 "Id": "UnaryFloatOpTable"
-            }), 1, 1)
+            }), 1, 1, True)
         generate_parameter_types(
             ET.SubElement(root, "Table", attrib={
                 "Id": "BinaryFloatOpTable"