@@ -1792,10 +1792,32 @@ using namespace LongVector;
17921792#define HLK_TEST (Op, DataType ) \
17931793 TEST_METHOD (Op##_##DataType) { runTest<DataType, OpType::Op>(); }
17941794
1795+ #define HLK_TEST_DOUBLE (Op, DataType ) \
1796+ TEST_METHOD (Op##_##DataType) { \
1797+ BEGIN_TEST_METHOD_PROPERTIES () \
1798+ TEST_METHOD_PROPERTY ( \
1799+ " Kits.Specification" , \
1800+ " Device.Graphics.D3D12.DXILCore.ShaderModel69.DoublePrecision" ) \
1801+ END_TEST_METHOD_PROPERTIES () \
1802+ runTest<DataType, OpType::Op>(); \
1803+ }
1804+
17951805#define HLK_WAVEOP_TEST (Op, DataType ) \
17961806 TEST_METHOD (Op##_##DataType) { \
17971807 BEGIN_TEST_METHOD_PROPERTIES () \
1798- TEST_METHOD_PROPERTY (L" Priority" , L" 2" ) \
1808+ TEST_METHOD_PROPERTY ( \
1809+ " Kits.Specification" , \
1810+ " Device.Graphics.D3D12.DXILCore.ShaderModel69.CoreRequirement" ) \
1811+ END_TEST_METHOD_PROPERTIES () \
1812+ runWaveOpTest<DataType, OpType::Op>(); \
1813+ }
1814+
1815+ #define HLK_WAVEOP_TEST_DOUBLE (Op, DataType ) \
1816+ TEST_METHOD (Op##_##DataType) { \
1817+ BEGIN_TEST_METHOD_PROPERTIES () \
1818+ TEST_METHOD_PROPERTY ( \
1819+ " Kits.Specification" , \
1820+ " Device.Graphics.D3D12.DXILCore.ShaderModel69.DoublePrecision" ) \
17991821 END_TEST_METHOD_PROPERTIES () \
18001822 runWaveOpTest<DataType, OpType::Op>(); \
18011823 }
@@ -1940,8 +1962,8 @@ class DxilConf_SM69_Vectorized {
19401962 HLK_TEST (Mad, int64_t );
19411963 HLK_TEST (Mad, HLSLHalf_t);
19421964 HLK_TEST (Mad, float );
1943- HLK_TEST (Fma, double );
1944- HLK_TEST (Mad, double );
1965+ HLK_TEST_DOUBLE (Fma, double );
1966+ HLK_TEST_DOUBLE (Mad, double );
19451967
19461968 // BinaryMath
19471969
@@ -2005,12 +2027,12 @@ class DxilConf_SM69_Vectorized {
20052027 HLK_TEST (Min, float );
20062028 HLK_TEST (Max, float );
20072029 HLK_TEST (Ldexp, float );
2008- HLK_TEST (Add, double );
2009- HLK_TEST (Subtract, double );
2010- HLK_TEST (Multiply, double );
2011- HLK_TEST (Divide, double );
2012- HLK_TEST (Min, double );
2013- HLK_TEST (Max, double );
2030+ HLK_TEST_DOUBLE (Add, double );
2031+ HLK_TEST_DOUBLE (Subtract, double );
2032+ HLK_TEST_DOUBLE (Multiply, double );
2033+ HLK_TEST_DOUBLE (Divide, double );
2034+ HLK_TEST_DOUBLE (Min, double );
2035+ HLK_TEST_DOUBLE (Max, double );
20142036
20152037 // Bitwise
20162038
@@ -2070,7 +2092,7 @@ class DxilConf_SM69_Vectorized {
20702092 HLK_TEST (FirstBitLow, int64_t );
20712093 HLK_TEST (Saturate, HLSLHalf_t);
20722094 HLK_TEST (Saturate, float );
2073- HLK_TEST (Saturate, double );
2095+ HLK_TEST_DOUBLE (Saturate, double );
20742096
20752097 // Unary
20762098
@@ -2101,9 +2123,9 @@ class DxilConf_SM69_Vectorized {
21012123 HLK_TEST (Initialize, float );
21022124 HLK_TEST (ArrayOperator_StaticAccess, float );
21032125 HLK_TEST (ArrayOperator_DynamicAccess, float );
2104- HLK_TEST (Initialize, double );
2105- HLK_TEST (ArrayOperator_StaticAccess, double );
2106- HLK_TEST (ArrayOperator_DynamicAccess, double );
2126+ HLK_TEST_DOUBLE (Initialize, double );
2127+ HLK_TEST_DOUBLE (ArrayOperator_StaticAccess, double );
2128+ HLK_TEST_DOUBLE (ArrayOperator_DynamicAccess, double );
21072129
21082130 HLK_TEST (ShuffleVector, HLSLBool_t);
21092131 HLK_TEST (ShuffleVector, int16_t );
@@ -2114,7 +2136,7 @@ class DxilConf_SM69_Vectorized {
21142136 HLK_TEST (ShuffleVector, uint64_t );
21152137 HLK_TEST (ShuffleVector, HLSLHalf_t);
21162138 HLK_TEST (ShuffleVector, float );
2117- HLK_TEST (ShuffleVector, double );
2139+ HLK_TEST_DOUBLE (ShuffleVector, double );
21182140
21192141 // Explicit Cast
21202142
@@ -2148,15 +2170,15 @@ class DxilConf_SM69_Vectorized {
21482170 HLK_TEST (CastToFloat16, float );
21492171 HLK_TEST (CastToFloat64, float );
21502172
2151- HLK_TEST (CastToBool, double );
2152- HLK_TEST (CastToInt16, double );
2153- HLK_TEST (CastToInt32, double );
2154- HLK_TEST (CastToInt64, double );
2155- HLK_TEST (CastToUint16_FromFP, double );
2156- HLK_TEST (CastToUint32_FromFP, double );
2157- HLK_TEST (CastToUint64_FromFP, double );
2158- HLK_TEST (CastToFloat16, double );
2159- HLK_TEST (CastToFloat32, double );
2173+ HLK_TEST_DOUBLE (CastToBool, double );
2174+ HLK_TEST_DOUBLE (CastToInt16, double );
2175+ HLK_TEST_DOUBLE (CastToInt32, double );
2176+ HLK_TEST_DOUBLE (CastToInt64, double );
2177+ HLK_TEST_DOUBLE (CastToUint16_FromFP, double );
2178+ HLK_TEST_DOUBLE (CastToUint32_FromFP, double );
2179+ HLK_TEST_DOUBLE (CastToUint64_FromFP, double );
2180+ HLK_TEST_DOUBLE (CastToFloat16, double );
2181+ HLK_TEST_DOUBLE (CastToFloat32, double );
21602182
21612183 HLK_TEST (CastToBool, uint16_t );
21622184 HLK_TEST (CastToInt16, uint16_t );
@@ -2304,8 +2326,8 @@ class DxilConf_SM69_Vectorized {
23042326 HLK_TEST (Log10, float );
23052327 HLK_TEST (Log2, float );
23062328 HLK_TEST (Frexp, float );
2307- HLK_TEST (Abs, double );
2308- HLK_TEST (Sign, double );
2329+ HLK_TEST_DOUBLE (Abs, double );
2330+ HLK_TEST_DOUBLE (Sign, double );
23092331
23102332 // Float Special
23112333
@@ -2369,12 +2391,12 @@ class DxilConf_SM69_Vectorized {
23692391 HLK_TEST (GreaterEqual, float );
23702392 HLK_TEST (Equal, float );
23712393 HLK_TEST (NotEqual, float );
2372- HLK_TEST (LessThan, double );
2373- HLK_TEST (LessEqual, double );
2374- HLK_TEST (GreaterThan, double );
2375- HLK_TEST (GreaterEqual, double );
2376- HLK_TEST (Equal, double );
2377- HLK_TEST (NotEqual, double );
2394+ HLK_TEST_DOUBLE (LessThan, double );
2395+ HLK_TEST_DOUBLE (LessEqual, double );
2396+ HLK_TEST_DOUBLE (GreaterThan, double );
2397+ HLK_TEST_DOUBLE (GreaterEqual, double );
2398+ HLK_TEST_DOUBLE (Equal, double );
2399+ HLK_TEST_DOUBLE (NotEqual, double );
23782400
23792401 // Binary Logical
23802402
@@ -2391,7 +2413,7 @@ class DxilConf_SM69_Vectorized {
23912413 HLK_TEST (Select, uint64_t );
23922414 HLK_TEST (Select, HLSLHalf_t);
23932415 HLK_TEST (Select, float );
2394- HLK_TEST (Select, double );
2416+ HLK_TEST_DOUBLE (Select, double );
23952417
23962418 // Reduction
23972419 HLK_TEST (Any_Mixed, HLSLBool_t);
@@ -2550,18 +2572,18 @@ class DxilConf_SM69_Vectorized {
25502572 HLK_TEST (LoadAndStore_RD_SB_UAV, float );
25512573 HLK_TEST (LoadAndStore_RD_SB_SRV, float );
25522574
2553- HLK_TEST (LoadAndStore_RDH_BAB_SRV, double );
2554- HLK_TEST (LoadAndStore_RDH_BAB_UAV, double );
2555- HLK_TEST (LoadAndStore_DT_BAB_SRV, double );
2556- HLK_TEST (LoadAndStore_DT_BAB_UAV, double );
2557- HLK_TEST (LoadAndStore_RD_BAB_SRV, double );
2558- HLK_TEST (LoadAndStore_RD_BAB_UAV, double );
2559- HLK_TEST (LoadAndStore_RDH_SB_SRV, double );
2560- HLK_TEST (LoadAndStore_RDH_SB_UAV, double );
2561- HLK_TEST (LoadAndStore_DT_SB_SRV, double );
2562- HLK_TEST (LoadAndStore_DT_SB_UAV, double );
2563- HLK_TEST (LoadAndStore_RD_SB_SRV, double );
2564- HLK_TEST (LoadAndStore_RD_SB_UAV, double );
2575+ HLK_TEST_DOUBLE (LoadAndStore_RDH_BAB_SRV, double );
2576+ HLK_TEST_DOUBLE (LoadAndStore_RDH_BAB_UAV, double );
2577+ HLK_TEST_DOUBLE (LoadAndStore_DT_BAB_SRV, double );
2578+ HLK_TEST_DOUBLE (LoadAndStore_DT_BAB_UAV, double );
2579+ HLK_TEST_DOUBLE (LoadAndStore_RD_BAB_SRV, double );
2580+ HLK_TEST_DOUBLE (LoadAndStore_RD_BAB_UAV, double );
2581+ HLK_TEST_DOUBLE (LoadAndStore_RDH_SB_SRV, double );
2582+ HLK_TEST_DOUBLE (LoadAndStore_RDH_SB_UAV, double );
2583+ HLK_TEST_DOUBLE (LoadAndStore_DT_SB_SRV, double );
2584+ HLK_TEST_DOUBLE (LoadAndStore_DT_SB_UAV, double );
2585+ HLK_TEST_DOUBLE (LoadAndStore_RD_SB_SRV, double );
2586+ HLK_TEST_DOUBLE (LoadAndStore_RD_SB_UAV, double );
25652587
25662588 // Derivative
25672589 HLK_TEST (DerivativeDdx, HLSLHalf_t);
@@ -2610,10 +2632,10 @@ class DxilConf_SM69_Vectorized {
26102632 HLK_TEST (QuadReadAcrossX, float );
26112633 HLK_TEST (QuadReadAcrossY, float );
26122634 HLK_TEST (QuadReadAcrossDiagonal, float );
2613- HLK_TEST (QuadReadLaneAt, double );
2614- HLK_TEST (QuadReadAcrossX, double );
2615- HLK_TEST (QuadReadAcrossY, double );
2616- HLK_TEST (QuadReadAcrossDiagonal, double );
2635+ HLK_TEST_DOUBLE (QuadReadLaneAt, double );
2636+ HLK_TEST_DOUBLE (QuadReadAcrossX, double );
2637+ HLK_TEST_DOUBLE (QuadReadAcrossY, double );
2638+ HLK_TEST_DOUBLE (QuadReadAcrossDiagonal, double );
26172639
26182640 // Wave
26192641
@@ -2746,18 +2768,18 @@ class DxilConf_SM69_Vectorized {
27462768 HLK_WAVEOP_TEST (WaveMultiPrefixSum, float );
27472769 HLK_WAVEOP_TEST (WaveMultiPrefixProduct, float );
27482770 HLK_WAVEOP_TEST (WaveMatch, float );
2749- HLK_WAVEOP_TEST (WaveActiveSum, double );
2750- HLK_WAVEOP_TEST (WaveActiveMin, double );
2751- HLK_WAVEOP_TEST (WaveActiveMax, double );
2752- HLK_WAVEOP_TEST (WaveActiveProduct, double );
2753- HLK_WAVEOP_TEST (WaveActiveAllEqual, double );
2754- HLK_WAVEOP_TEST (WaveReadLaneAt, double );
2755- HLK_WAVEOP_TEST (WaveReadLaneFirst, double );
2756- HLK_WAVEOP_TEST (WavePrefixSum, double );
2757- HLK_WAVEOP_TEST (WavePrefixProduct, double );
2758- HLK_WAVEOP_TEST (WaveMultiPrefixSum, double );
2759- HLK_WAVEOP_TEST (WaveMultiPrefixProduct, double );
2760- HLK_WAVEOP_TEST (WaveMatch, double );
2771+ HLK_WAVEOP_TEST_DOUBLE (WaveActiveSum, double );
2772+ HLK_WAVEOP_TEST_DOUBLE (WaveActiveMin, double );
2773+ HLK_WAVEOP_TEST_DOUBLE (WaveActiveMax, double );
2774+ HLK_WAVEOP_TEST_DOUBLE (WaveActiveProduct, double );
2775+ HLK_WAVEOP_TEST_DOUBLE (WaveActiveAllEqual, double );
2776+ HLK_WAVEOP_TEST_DOUBLE (WaveReadLaneAt, double );
2777+ HLK_WAVEOP_TEST_DOUBLE (WaveReadLaneFirst, double );
2778+ HLK_WAVEOP_TEST_DOUBLE (WavePrefixSum, double );
2779+ HLK_WAVEOP_TEST_DOUBLE (WavePrefixProduct, double );
2780+ HLK_WAVEOP_TEST_DOUBLE (WaveMultiPrefixSum, double );
2781+ HLK_WAVEOP_TEST_DOUBLE (WaveMultiPrefixProduct, double );
2782+ HLK_WAVEOP_TEST_DOUBLE (WaveMatch, double );
27612783
27622784private:
27632785 bool Initialized = false ;
0 commit comments