@@ -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 );
0 commit comments