Skip to content

Commit 6bb1469

Browse files
authored
Execution Tests: Long Vector UnaryMathOps and some minor cleanup (#7685)
This PR implements tests cases for unary math ops with long vectors. It also includes a few other minor updates: - Fix a couple format characters in printed strings. - Some naming updates. Get rid of 'LongVector' where it's not needed. - Update logic around accessing the VariantVector type to now use std::visit with lambdas. Resolves #7614
1 parent 7a1b1df commit 6bb1469

File tree

4 files changed

+582
-238
lines changed

4 files changed

+582
-238
lines changed

tools/clang/unittests/HLSLExec/LongVectorOpTable.xml

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,4 +779,200 @@
779779
<Parameter Name="InputValueSetName1">SplitDoubleInputValueSet</Parameter>
780780
</Row>
781781
</Table>
782+
<Table Id="UnaryMathOpTable">
783+
<ParameterTypes>
784+
<!-- InputValueSetName1 is optional. If no value is provided use the
785+
default value set for the data type. This string is meant to be a key
786+
value for the the array of std::pairs defined in LongVectorTestData.h
787+
for the applicable DataType-->
788+
<ParameterType Name="InputValueSetName1">String</ParameterType>
789+
<ParameterType Name="DataType">String</ParameterType>
790+
<ParameterType Name="OpTypeEnum">String</ParameterType>
791+
</ParameterTypes>
792+
<!--UnaryMathOpTable int16-->
793+
<Row Name="Abs_int16">
794+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
795+
<Parameter Name="DataType">int16</Parameter>
796+
</Row>
797+
<Row Name="Sign_int16">
798+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
799+
<Parameter Name="DataType">int16</Parameter>
800+
</Row>
801+
<!--UnaryMathOpTable int32-->
802+
<Row Name="Abs_int32">
803+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
804+
<Parameter Name="DataType">int32</Parameter>
805+
</Row>
806+
<Row Name="Sign_int32">
807+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
808+
<Parameter Name="DataType">int32</Parameter>
809+
</Row>
810+
<!--UnaryMathOpTable int64-->
811+
<Row Name="Abs_int64">
812+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
813+
<Parameter Name="DataType">int64</Parameter>
814+
</Row>
815+
<Row Name="Sign_int64">
816+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
817+
<Parameter Name="DataType">int64</Parameter>
818+
</Row>
819+
<!--UnaryMathOpTable uint16-->
820+
<Row Name="Abs_uint16">
821+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
822+
<Parameter Name="DataType">uint16</Parameter>
823+
</Row>
824+
<Row Name="Sign_uint16">
825+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
826+
<Parameter Name="DataType">uint16</Parameter>
827+
</Row>
828+
<!--UnaryMathOpTable uint32-->
829+
<Row Name="Abs_uint32">
830+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
831+
<Parameter Name="DataType">uint32</Parameter>
832+
</Row>
833+
<Row Name="Sign_uint32">
834+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
835+
<Parameter Name="DataType">uint32</Parameter>
836+
</Row>
837+
<!--UnaryMathOpTable uint64-->
838+
<Row Name="Abs_uint64">
839+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
840+
<Parameter Name="DataType">uint64</Parameter>
841+
</Row>
842+
<Row Name="Sign_uint64">
843+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
844+
<Parameter Name="DataType">uint64</Parameter>
845+
</Row>
846+
<!--UnaryMathOpTable float16-->
847+
<Row Name="Abs_float16">
848+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
849+
<Parameter Name="DataType">float16</Parameter>
850+
</Row>
851+
<Row Name="Ceil_float16">
852+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Ceil</Parameter>
853+
<Parameter Name="DataType">float16</Parameter>
854+
</Row>
855+
<Row Name="Exp_float16">
856+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Exp</Parameter>
857+
<Parameter Name="DataType">float16</Parameter>
858+
</Row>
859+
<Row Name="Floor_float16">
860+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Floor</Parameter>
861+
<Parameter Name="DataType">float16</Parameter>
862+
</Row>
863+
<Row Name="Frac_float16">
864+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Frac</Parameter>
865+
<Parameter Name="DataType">float16</Parameter>
866+
</Row>
867+
<Row Name="Log_float16">
868+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Log</Parameter>
869+
<Parameter Name="DataType">float16</Parameter>
870+
</Row>
871+
<Row Name="Rcp_float16">
872+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Rcp</Parameter>
873+
<Parameter Name="DataType">float16</Parameter>
874+
</Row>
875+
<Row Name="Round_float16">
876+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Round</Parameter>
877+
<Parameter Name="DataType">float16</Parameter>
878+
</Row>
879+
<Row Name="Rsqrt_float16">
880+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Rsqrt</Parameter>
881+
<Parameter Name="DataType">float16</Parameter>
882+
</Row>
883+
<Row Name="Sign_float16">
884+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
885+
<Parameter Name="DataType">float16</Parameter>
886+
</Row>
887+
<Row Name="Sqrt_float16">
888+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sqrt</Parameter>
889+
<Parameter Name="DataType">float16</Parameter>
890+
</Row>
891+
<Row Name="Trunc_float16">
892+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Trunc</Parameter>
893+
<Parameter Name="DataType">float16</Parameter>
894+
</Row>
895+
<Row Name="Exp2_float16">
896+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Exp2</Parameter>
897+
<Parameter Name="DataType">float16</Parameter>
898+
</Row>
899+
<Row Name="Log10_float16">
900+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Log10</Parameter>
901+
<Parameter Name="DataType">float16</Parameter>
902+
</Row>
903+
<Row Name="Log2_float16">
904+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Log2</Parameter>
905+
<Parameter Name="DataType">float16</Parameter>
906+
</Row>
907+
<!--UnaryMathOpTable float32-->
908+
<Row Name="Abs_float32">
909+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
910+
<Parameter Name="DataType">float32</Parameter>
911+
</Row>
912+
<Row Name="Ceil_float32">
913+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Ceil</Parameter>
914+
<Parameter Name="DataType">float32</Parameter>
915+
</Row>
916+
<Row Name="Exp_float32">
917+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Exp</Parameter>
918+
<Parameter Name="DataType">float32</Parameter>
919+
</Row>
920+
<Row Name="Floor_float32">
921+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Floor</Parameter>
922+
<Parameter Name="DataType">float32</Parameter>
923+
</Row>
924+
<Row Name="Frac_float32">
925+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Frac</Parameter>
926+
<Parameter Name="DataType">float32</Parameter>
927+
</Row>
928+
<Row Name="Log_float32">
929+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Log</Parameter>
930+
<Parameter Name="DataType">float32</Parameter>
931+
</Row>
932+
<Row Name="Rcp_float32">
933+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Rcp</Parameter>
934+
<Parameter Name="DataType">float32</Parameter>
935+
</Row>
936+
<Row Name="Round_float32">
937+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Round</Parameter>
938+
<Parameter Name="DataType">float32</Parameter>
939+
</Row>
940+
<Row Name="Rsqrt_float32">
941+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Rsqrt</Parameter>
942+
<Parameter Name="DataType">float32</Parameter>
943+
</Row>
944+
<Row Name="Sign_float32">
945+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
946+
<Parameter Name="DataType">float32</Parameter>
947+
</Row>
948+
<Row Name="Sqrt_float32">
949+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sqrt</Parameter>
950+
<Parameter Name="DataType">float32</Parameter>
951+
</Row>
952+
<Row Name="Trunc_float32">
953+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Trunc</Parameter>
954+
<Parameter Name="DataType">float32</Parameter>
955+
</Row>
956+
<Row Name="Exp2_float32">
957+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Exp2</Parameter>
958+
<Parameter Name="DataType">float32</Parameter>
959+
</Row>
960+
<Row Name="Log10_float32">
961+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Log10</Parameter>
962+
<Parameter Name="DataType">float32</Parameter>
963+
</Row>
964+
<Row Name="Log2_float32">
965+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Log2</Parameter>
966+
<Parameter Name="DataType">float32</Parameter>
967+
</Row>
968+
<!--UnaryMathOpTable float64-->
969+
<Row Name="Abs_float64">
970+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
971+
<Parameter Name="DataType">float64</Parameter>
972+
</Row>
973+
<Row Name="Sign_float64">
974+
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
975+
<Parameter Name="DataType">float64</Parameter>
976+
</Row>
977+
</Table>
782978
</Data>

tools/clang/unittests/HLSLExec/LongVectorTestData.h

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include <string>
88
#include <vector>
99

10+
namespace LongVector {
11+
1012
// A helper struct because C++ bools are 1 byte and HLSL bools are 4 bytes.
1113
// Take int32_t as a constuctor argument and convert it to bool when needed.
1214
// Comparisons cast to a bool because we only care if the bool representation is
@@ -192,11 +194,11 @@ struct HLSLHalf_t {
192194
DirectX::PackedVector::HALF Val = 0;
193195
};
194196

195-
template <typename T> struct LongVectorTestData {
197+
template <typename T> struct TestData {
196198
static const std::map<std::wstring, std::vector<T>> Data;
197199
};
198200

199-
template <> struct LongVectorTestData<HLSLBool_t> {
201+
template <> struct TestData<HLSLBool_t> {
200202
inline static const std::map<std::wstring, std::vector<HLSLBool_t>> Data = {
201203
{L"DefaultInputValueSet1",
202204
{false, true, false, false, false, false, true, true, true, true}},
@@ -205,49 +207,49 @@ template <> struct LongVectorTestData<HLSLBool_t> {
205207
};
206208
};
207209

208-
template <> struct LongVectorTestData<int16_t> {
210+
template <> struct TestData<int16_t> {
209211
inline static const std::map<std::wstring, std::vector<int16_t>> Data = {
210212
{L"DefaultInputValueSet1", {-6, 1, 7, 3, 8, 4, -3, 8, 8, -2}},
211213
{L"DefaultInputValueSet2", {5, -6, -3, -2, 9, 3, 1, -3, -7, 2}},
212214
};
213215
};
214216

215-
template <> struct LongVectorTestData<int32_t> {
217+
template <> struct TestData<int32_t> {
216218
inline static const std::map<std::wstring, std::vector<int32_t>> Data = {
217219
{L"DefaultInputValueSet1", {-6, 1, 7, 3, 8, 4, -3, 8, 8, -2}},
218220
{L"DefaultInputValueSet2", {5, -6, -3, -2, 9, 3, 1, -3, -7, 2}},
219221
};
220222
};
221223

222-
template <> struct LongVectorTestData<int64_t> {
224+
template <> struct TestData<int64_t> {
223225
inline static const std::map<std::wstring, std::vector<int64_t>> Data = {
224226
{L"DefaultInputValueSet1", {-6, 11, 7, 3, 8, 4, -3, 8, 8, -2}},
225227
{L"DefaultInputValueSet2", {5, -1337, -3, -2, 9, 3, 1, -3, 501, 2}},
226228
};
227229
};
228230

229-
template <> struct LongVectorTestData<uint16_t> {
231+
template <> struct TestData<uint16_t> {
230232
inline static const std::map<std::wstring, std::vector<uint16_t>> Data = {
231233
{L"DefaultInputValueSet1", {1, 699, 3, 1023, 5, 6, 0, 8, 9, 10}},
232234
{L"DefaultInputValueSet2", {2, 111, 3, 4, 5, 9, 21, 8, 9, 10}},
233235
};
234236
};
235237

236-
template <> struct LongVectorTestData<uint32_t> {
238+
template <> struct TestData<uint32_t> {
237239
inline static const std::map<std::wstring, std::vector<uint32_t>> Data = {
238240
{L"DefaultInputValueSet1", {1, 2, 3, 4, 5, 0, 7, 8, 9, 10}},
239241
{L"DefaultInputValueSet2", {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}},
240242
};
241243
};
242244

243-
template <> struct LongVectorTestData<uint64_t> {
245+
template <> struct TestData<uint64_t> {
244246
inline static const std::map<std::wstring, std::vector<uint64_t>> Data = {
245247
{L"DefaultInputValueSet1", {1, 2, 3, 4, 5, 0, 7, 1000, 9, 10}},
246248
{L"DefaultInputValueSet2", {1, 2, 1337, 4, 5, 6, 7, 8, 9, 10}},
247249
};
248250
};
249251

250-
template <> struct LongVectorTestData<HLSLHalf_t> {
252+
template <> struct TestData<HLSLHalf_t> {
251253
inline static const std::map<std::wstring, std::vector<HLSLHalf_t>> Data = {
252254
{L"DefaultInputValueSet1",
253255
{-1.0, -1.0, 1.0, -0.01, 1.0, -0.01, 1.0, -0.01, 1.0, -0.01}},
@@ -264,7 +266,7 @@ template <> struct LongVectorTestData<HLSLHalf_t> {
264266
};
265267
};
266268

267-
template <> struct LongVectorTestData<float> {
269+
template <> struct TestData<float> {
268270
inline static const std::map<std::wstring, std::vector<float>> Data = {
269271
{L"DefaultInputValueSet1",
270272
{1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0}},
@@ -280,7 +282,7 @@ template <> struct LongVectorTestData<float> {
280282
};
281283
};
282284

283-
template <> struct LongVectorTestData<double> {
285+
template <> struct TestData<double> {
284286
inline static const std::map<std::wstring, std::vector<double>> Data = {
285287
{L"DefaultInputValueSet1",
286288
{1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0}},
@@ -298,4 +300,6 @@ template <> struct LongVectorTestData<double> {
298300
};
299301
};
300302

303+
}; // namespace LongVector
304+
301305
#endif // LONGVECTORTESTDATA_H

0 commit comments

Comments
 (0)