Skip to content

Commit 33cdb85

Browse files
Execution Tests: HLK - Update for two HLK requirements for SM6.9. Core and double. (#8052)
This PR updates the tests to recognize an additional HLK requirement for SM6.9 double support as it remains optional for 6.9. 16-bit types, 64-bit integers, and wave ops are required for SM 6.9 so they are implied via the core requirement. Also removes the priority '2' set on the wave op tests. P2 tests are skipped in our automation. These tests were originally being skipped as WARP did not yet support wave ops with long vectors. Partially implements #7608 . The rest of the implementation will be handled in OS code. --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 9fdd756 commit 33cdb85

1 file changed

Lines changed: 82 additions & 60 deletions

File tree

tools/clang/unittests/HLSLExec/LongVectors.cpp

Lines changed: 82 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -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

27622784
private:
27632785
bool Initialized = false;

0 commit comments

Comments
 (0)