Skip to content

Execution Tests: Long Vector UnaryMathOps and some minor cleanup #7685

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
196 changes: 196 additions & 0 deletions tools/clang/unittests/HLSLExec/LongVectorOpTable.xml
Original file line number Diff line number Diff line change
Expand Up @@ -779,4 +779,200 @@
<Parameter Name="InputValueSetName1">SplitDoubleInputValueSet</Parameter>
</Row>
</Table>
<Table Id="UnaryMathOpTable">
<ParameterTypes>
<!-- InputValueSetName1 is optional. If no value is provided use the
default value set for the data type. This string is meant to be a key
value for the the array of std::pairs defined in LongVectorTestData.h
for the applicable DataType-->
<ParameterType Name="InputValueSetName1">String</ParameterType>
<ParameterType Name="DataType">String</ParameterType>
<ParameterType Name="OpTypeEnum">String</ParameterType>
</ParameterTypes>
<!--UnaryMathOpTable int16-->
<Row Name="Abs_int16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
<Parameter Name="DataType">int16</Parameter>
</Row>
<Row Name="Sign_int16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
<Parameter Name="DataType">int16</Parameter>
</Row>
<!--UnaryMathOpTable int32-->
<Row Name="Abs_int32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
<Parameter Name="DataType">int32</Parameter>
</Row>
<Row Name="Sign_int32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
<Parameter Name="DataType">int32</Parameter>
</Row>
<!--UnaryMathOpTable int64-->
<Row Name="Abs_int64">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
<Parameter Name="DataType">int64</Parameter>
</Row>
<Row Name="Sign_int64">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
<Parameter Name="DataType">int64</Parameter>
</Row>
<!--UnaryMathOpTable uint16-->
<Row Name="Abs_uint16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
<Parameter Name="DataType">uint16</Parameter>
</Row>
<Row Name="Sign_uint16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
<Parameter Name="DataType">uint16</Parameter>
</Row>
<!--UnaryMathOpTable uint32-->
<Row Name="Abs_uint32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
<Parameter Name="DataType">uint32</Parameter>
</Row>
<Row Name="Sign_uint32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
<Parameter Name="DataType">uint32</Parameter>
</Row>
<!--UnaryMathOpTable uint64-->
<Row Name="Abs_uint64">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
<Parameter Name="DataType">uint64</Parameter>
</Row>
<Row Name="Sign_uint64">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
<Parameter Name="DataType">uint64</Parameter>
</Row>
<!--UnaryMathOpTable float16-->
<Row Name="Abs_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Ceil_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Ceil</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Exp_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Exp</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Floor_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Floor</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Frac_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Frac</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Log_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Log</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Rcp_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Rcp</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Round_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Round</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Rsqrt_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Rsqrt</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Sign_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Sqrt_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sqrt</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Trunc_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Trunc</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Exp2_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Exp2</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Log10_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Log10</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<Row Name="Log2_float16">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Log2</Parameter>
<Parameter Name="DataType">float16</Parameter>
</Row>
<!--UnaryMathOpTable float32-->
<Row Name="Abs_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Ceil_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Ceil</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Exp_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Exp</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Floor_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Floor</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Frac_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Frac</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Log_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Log</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Rcp_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Rcp</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Round_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Round</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Rsqrt_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Rsqrt</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Sign_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Sqrt_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sqrt</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Trunc_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Trunc</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Exp2_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Exp2</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Log10_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Log10</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<Row Name="Log2_float32">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Log2</Parameter>
<Parameter Name="DataType">float32</Parameter>
</Row>
<!--UnaryMathOpTable float64-->
<Row Name="Abs_float64">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Abs</Parameter>
<Parameter Name="DataType">float64</Parameter>
</Row>
<Row Name="Sign_float64">
<Parameter Name="OpTypeEnum">UnaryMathOpType_Sign</Parameter>
<Parameter Name="DataType">float64</Parameter>
</Row>
</Table>
</Data>
26 changes: 15 additions & 11 deletions tools/clang/unittests/HLSLExec/LongVectorTestData.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
#include <string>
#include <vector>

namespace LongVector {

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

template <typename T> struct LongVectorTestData {
template <typename T> struct TestData {
static const std::map<std::wstring, std::vector<T>> Data;
};

template <> struct LongVectorTestData<HLSLBool_t> {
template <> struct TestData<HLSLBool_t> {
inline static const std::map<std::wstring, std::vector<HLSLBool_t>> Data = {
{L"DefaultInputValueSet1",
{false, true, false, false, false, false, true, true, true, true}},
Expand All @@ -205,49 +207,49 @@ template <> struct LongVectorTestData<HLSLBool_t> {
};
};

template <> struct LongVectorTestData<int16_t> {
template <> struct TestData<int16_t> {
inline static const std::map<std::wstring, std::vector<int16_t>> Data = {
{L"DefaultInputValueSet1", {-6, 1, 7, 3, 8, 4, -3, 8, 8, -2}},
{L"DefaultInputValueSet2", {5, -6, -3, -2, 9, 3, 1, -3, -7, 2}},
};
};

template <> struct LongVectorTestData<int32_t> {
template <> struct TestData<int32_t> {
inline static const std::map<std::wstring, std::vector<int32_t>> Data = {
{L"DefaultInputValueSet1", {-6, 1, 7, 3, 8, 4, -3, 8, 8, -2}},
{L"DefaultInputValueSet2", {5, -6, -3, -2, 9, 3, 1, -3, -7, 2}},
};
};

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

template <> struct LongVectorTestData<uint16_t> {
template <> struct TestData<uint16_t> {
inline static const std::map<std::wstring, std::vector<uint16_t>> Data = {
{L"DefaultInputValueSet1", {1, 699, 3, 1023, 5, 6, 0, 8, 9, 10}},
{L"DefaultInputValueSet2", {2, 111, 3, 4, 5, 9, 21, 8, 9, 10}},
};
};

template <> struct LongVectorTestData<uint32_t> {
template <> struct TestData<uint32_t> {
inline static const std::map<std::wstring, std::vector<uint32_t>> Data = {
{L"DefaultInputValueSet1", {1, 2, 3, 4, 5, 0, 7, 8, 9, 10}},
{L"DefaultInputValueSet2", {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}},
};
};

template <> struct LongVectorTestData<uint64_t> {
template <> struct TestData<uint64_t> {
inline static const std::map<std::wstring, std::vector<uint64_t>> Data = {
{L"DefaultInputValueSet1", {1, 2, 3, 4, 5, 0, 7, 1000, 9, 10}},
{L"DefaultInputValueSet2", {1, 2, 1337, 4, 5, 6, 7, 8, 9, 10}},
};
};

template <> struct LongVectorTestData<HLSLHalf_t> {
template <> struct TestData<HLSLHalf_t> {
inline static const std::map<std::wstring, std::vector<HLSLHalf_t>> Data = {
{L"DefaultInputValueSet1",
{-1.0, -1.0, 1.0, -0.01, 1.0, -0.01, 1.0, -0.01, 1.0, -0.01}},
Expand All @@ -264,7 +266,7 @@ template <> struct LongVectorTestData<HLSLHalf_t> {
};
};

template <> struct LongVectorTestData<float> {
template <> struct TestData<float> {
inline static const std::map<std::wstring, std::vector<float>> Data = {
{L"DefaultInputValueSet1",
{1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0}},
Expand All @@ -280,7 +282,7 @@ template <> struct LongVectorTestData<float> {
};
};

template <> struct LongVectorTestData<double> {
template <> struct TestData<double> {
inline static const std::map<std::wstring, std::vector<double>> Data = {
{L"DefaultInputValueSet1",
{1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0}},
Expand All @@ -298,4 +300,6 @@ template <> struct LongVectorTestData<double> {
};
};

}; // namespace LongVector

#endif // LONGVECTORTESTDATA_H
Loading