@@ -743,34 +743,6 @@ template <typename T> struct TrigonometricOperation {
743743 static T tanh (T Val) { return std::tanh (Val); }
744744};
745745
746- template <typename T>
747- void dispatchTrigonometricTest (const TestConfig &Config,
748- ValidationConfig ValidationConfig,
749- TrigonometricOpType OpType, size_t VectorSize) {
750- #define DISPATCH (OP, NAME ) \
751- case OP: \
752- return dispatchUnaryTest<T>(Config, ValidationConfig, OP, VectorSize, \
753- TrigonometricOperation<T>::NAME, " " )
754-
755- switch (OpType) {
756- DISPATCH (TrigonometricOpType::Acos, acos);
757- DISPATCH (TrigonometricOpType::Asin, asin);
758- DISPATCH (TrigonometricOpType::Atan, atan);
759- DISPATCH (TrigonometricOpType::Cos, cos);
760- DISPATCH (TrigonometricOpType::Cosh, cosh);
761- DISPATCH (TrigonometricOpType::Sin, sin);
762- DISPATCH (TrigonometricOpType::Sinh, sinh);
763- DISPATCH (TrigonometricOpType::Tan, tan);
764- DISPATCH (TrigonometricOpType::Tanh, tanh);
765- case TrigonometricOpType::EnumValueCount:
766- break ;
767- }
768-
769- #undef DISPATCH
770-
771- LOG_ERROR_FMT_THROW (L" Unexpected TrigonometricOpType: %d." , OpType);
772- }
773-
774746void dispatchTestByOpTypeAndVectorSize (const TestConfig &Config,
775747 TrigonometricOpType OpType,
776748 size_t VectorSize) {
@@ -780,18 +752,68 @@ void dispatchTestByOpTypeAndVectorSize(const TestConfig &Config,
780752 // as per the D3D functional specs. An example with this spec for sin and
781753 // cos is available here:
782754 // https://microsoft.github.io/DirectX-Specs/d3d/archive/D3D11_3_FunctionalSpec.htm#22.10.20
755+ const ValidationConfig ValidationConfig = ValidationConfig::Epsilon (0 .0008f );
756+
757+ #define DISPATCH (TYPE, FUNC ) \
758+ if (Config.DataType == getDataTypeName<TYPE>()) \
759+ return dispatchUnaryTest (Config, ValidationConfig, OpType, VectorSize, \
760+ TrigonometricOperation<TYPE>::FUNC, " " );
761+
762+ switch (OpType) {
763+ case TrigonometricOpType::Acos:
764+ DISPATCH (HLSLHalf_t, acos);
765+ DISPATCH (float , acos);
766+ break ;
767+
768+ case TrigonometricOpType::Asin:
769+ DISPATCH (HLSLHalf_t, asin);
770+ DISPATCH (float , asin);
771+ break ;
783772
784- if (Config.DataType == getDataTypeName<HLSLHalf_t>())
785- return dispatchTrigonometricTest<HLSLHalf_t>(
786- Config, ValidationConfig::Epsilon (0 .0010f ), OpType, VectorSize);
773+ case TrigonometricOpType::Atan:
774+ DISPATCH (HLSLHalf_t, atan);
775+ DISPATCH (float , atan);
776+ break ;
777+
778+ case TrigonometricOpType::Cos:
779+ DISPATCH (HLSLHalf_t, cos);
780+ DISPATCH (float , cos);
781+ break ;
782+
783+ case TrigonometricOpType::Cosh:
784+ DISPATCH (HLSLHalf_t, cosh);
785+ DISPATCH (float , cosh);
786+ break ;
787787
788- if (Config.DataType == getDataTypeName<float >())
789- return dispatchTrigonometricTest<float >(
790- Config, ValidationConfig::Epsilon (0 .0008f ), OpType, VectorSize);
788+ case TrigonometricOpType::Sin:
789+ DISPATCH (HLSLHalf_t, sin);
790+ DISPATCH (float , sin);
791+ break ;
792+
793+ case TrigonometricOpType::Sinh:
794+ DISPATCH (HLSLHalf_t, sinh);
795+ DISPATCH (float , sinh);
796+ break ;
797+
798+ case TrigonometricOpType::Tan:
799+ DISPATCH (HLSLHalf_t, tan);
800+ DISPATCH (float , tan);
801+ break ;
802+
803+ case TrigonometricOpType::Tanh:
804+ DISPATCH (HLSLHalf_t, tanh);
805+ DISPATCH (float , tanh);
806+ break ;
807+
808+ case TrigonometricOpType::EnumValueCount:
809+ break ;
810+ }
811+
812+ #undef DISPATCH
791813
792814 LOG_ERROR_FMT_THROW (
793- L" DataType '%s' not supported for trigonometric operations. " ,
794- (const wchar_t *)Config.DataType );
815+ L" DataType '%s' not supported for TrigonometricOpType'%s' " ,
816+ (const wchar_t *)Config.DataType , ( const wchar_t *)Config. OpTypeEnum );
795817}
796818
797819//
0 commit comments