Skip to content

Commit 33a888e

Browse files
committed
adding more test
1 parent 8256850 commit 33a888e

File tree

3 files changed

+70
-1
lines changed

3 files changed

+70
-1
lines changed

tools/clang/unittests/HLSLExec/LongVectorOps.def

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,13 @@ OP(Bitwise, FirstBitLow, 1, "firstbitlow", "", "", "LongVectorOp", Bitwise, Defa
6161

6262
OP_DEFAULT_DEFINES(Unary, Initialize, 1, "TestInitialize", "",
6363
" -DFUNC_INITIALIZE=1")
64-
OP_DEFAULT_DEFINES(Unary, ArrayOperator_SingleAccess, 1, "TestArrayOperatorSingleAccess", "",
64+
65+
OP_DEFAULT_DEFINES(ArrayOperator, ArrayOperator_SingleAccess, 1, "TestArrayOperatorSingleAccess", "",
6566
" -DFUNC_ARRAY_OPERATOR_SINGLE_ACCESS=1")
67+
OP_DEFAULT_DEFINES(ArrayOperator, ArrayOperator_Loop, 2, "TestArrayOperatorLoop", "",
68+
" -DFUNC_ARRAY_OPERATOR=1 -DLOOP_ATTRB=loop")
69+
OP_DEFAULT_DEFINES(ArrayOperator, ArrayOperator_Unroll, 2, "TestArrayOperatorUnroll", "",
70+
" -DFUNC_ARRAY_OPERATOR=1 -DLOOP_ATTRB=unroll")
6671

6772

6873
#define OP_CAST_DEFAULT(GROUP, SYMBOL) \

tools/clang/unittests/HLSLExec/LongVectors.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,42 @@ struct ExpectedBuilder<OpType::ArrayOperator_SingleAccess, T> {
785785
}
786786
};
787787

788+
template <typename T>
789+
static std::vector<T> BuildLoop2(const InputSets<T> &Inputs) {
790+
DXASSERT_NOMSG(Inputs.size() == 2);
791+
const size_t VectorSize = Inputs[0].size();
792+
std::vector<T> Expected;
793+
Expected.resize(VectorSize * 2);
794+
795+
for (size_t i = 0; i < VectorSize; i++)
796+
Expected[i] = Inputs[0][i] + Inputs[1][i];
797+
798+
for (size_t i = 0; i < VectorSize; i++)
799+
Expected[i + VectorSize] = Expected[i];
800+
801+
return Expected;
802+
}
803+
804+
template <typename T>
805+
struct Op<OpType::ArrayOperator_Loop, T, 2> : DefaultValidation<T> {};
806+
807+
template <typename T> struct ExpectedBuilder<OpType::ArrayOperator_Loop, T> {
808+
static std::vector<T> buildExpected(Op<OpType::ArrayOperator_Loop, T, 2>,
809+
const InputSets<T> &Inputs) {
810+
return BuildLoop2(Inputs);
811+
}
812+
};
813+
814+
template <typename T>
815+
struct Op<OpType::ArrayOperator_Unroll, T, 2> : DefaultValidation<T> {};
816+
817+
template <typename T> struct ExpectedBuilder<OpType::ArrayOperator_Unroll, T> {
818+
static std::vector<T> buildExpected(Op<OpType::ArrayOperator_Unroll, T, 2>,
819+
const InputSets<T> &Inputs) {
820+
return BuildLoop2(Inputs);
821+
}
822+
};
823+
788824
//
789825
// Cast
790826
//
@@ -1604,24 +1640,44 @@ class DxilConf_SM69_Vectorized {
16041640

16051641
HLK_TEST(Initialize, HLSLBool_t);
16061642
HLK_TEST(ArrayOperator_SingleAccess, HLSLBool_t);
1643+
HLK_TEST(ArrayOperator_Unroll, HLSLBool_t);
1644+
HLK_TEST(ArrayOperator_Loop, HLSLBool_t);
16071645
HLK_TEST(Initialize, int16_t);
16081646
HLK_TEST(ArrayOperator_SingleAccess, int16_t);
1647+
HLK_TEST(ArrayOperator_Unroll, int16_t);
1648+
HLK_TEST(ArrayOperator_Loop, int16_t);
16091649
HLK_TEST(Initialize, int32_t);
16101650
HLK_TEST(ArrayOperator_SingleAccess, int32_t);
1651+
HLK_TEST(ArrayOperator_Unroll, int32_t);
1652+
HLK_TEST(ArrayOperator_Loop, int32_t);
16111653
HLK_TEST(Initialize, int64_t);
16121654
HLK_TEST(ArrayOperator_SingleAccess, int64_t);
1655+
HLK_TEST(ArrayOperator_Unroll, int64_t);
1656+
HLK_TEST(ArrayOperator_Loop, int64_t);
16131657
HLK_TEST(Initialize, uint16_t);
16141658
HLK_TEST(ArrayOperator_SingleAccess, uint16_t);
1659+
HLK_TEST(ArrayOperator_Unroll, uint16_t);
1660+
HLK_TEST(ArrayOperator_Loop, uint16_t);
16151661
HLK_TEST(Initialize, uint32_t);
16161662
HLK_TEST(ArrayOperator_SingleAccess, uint32_t);
1663+
HLK_TEST(ArrayOperator_Unroll, uint32_t);
1664+
HLK_TEST(ArrayOperator_Loop, uint32_t);
16171665
HLK_TEST(Initialize, uint64_t);
16181666
HLK_TEST(ArrayOperator_SingleAccess, uint64_t);
1667+
HLK_TEST(ArrayOperator_Unroll, uint64_t);
1668+
HLK_TEST(ArrayOperator_Loop, uint64_t);
16191669
HLK_TEST(Initialize, HLSLHalf_t);
16201670
HLK_TEST(ArrayOperator_SingleAccess, HLSLHalf_t);
1671+
HLK_TEST(ArrayOperator_Unroll, HLSLHalf_t);
1672+
HLK_TEST(ArrayOperator_Loop, HLSLHalf_t);
16211673
HLK_TEST(Initialize, float);
16221674
HLK_TEST(ArrayOperator_SingleAccess, float);
1675+
HLK_TEST(ArrayOperator_Unroll, float);
1676+
HLK_TEST(ArrayOperator_Loop, float);
16231677
HLK_TEST(Initialize, double);
16241678
HLK_TEST(ArrayOperator_SingleAccess, double);
1679+
HLK_TEST(ArrayOperator_Unroll, double);
1680+
HLK_TEST(ArrayOperator_Loop, double);
16251681

16261682
HLK_TEST(ShuffleVector, HLSLBool_t);
16271683
HLK_TEST(ShuffleVector, int16_t);

tools/clang/unittests/HLSLExec/ShaderOpArith.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4134,6 +4134,14 @@ void MSMain(uint GID : SV_GroupIndex,
41344134
NUM> >(0);
41354135
OutputVector[0] = Input1[OutNum - 1];
41364136
OutputVector[OutNum - 1] = OutputVector[0];
4137+
#elif FUNC_ARRAY_OPERATOR
4138+
vector<OUT_TYPE, OutNum> OutputVector;
4139+
4140+
[LOOP_ATTRB] for(uint i = 0; i < OutNum; i++)
4141+
OutputVector[i] = Input1[i] + Input2[i];
4142+
4143+
[LOOP_ATTRB] for(uint i = 0; i < OutNum; i++)
4144+
g_OutputVector.Store<OUT_TYPE>(sizeof(OUT_TYPE) * (OutNum + i), OutputVector[i]);
41374145
#elif IS_UNARY_OP
41384146
vector<OUT_TYPE, OutNum> OutputVector = FUNC(Input1);
41394147
#elif IS_BINARY_OP

0 commit comments

Comments
 (0)