Skip to content

Commit 717e014

Browse files
authored
[bug] Execution Tests: Long Vector fix tolerances on trig functions (microsoft#7762)
This PR sets the proper tolerance for float16 trigonometric ops. It was set to the wrong value by accident.
1 parent 548446c commit 717e014

1 file changed

Lines changed: 58 additions & 36 deletions

File tree

tools/clang/unittests/HLSLExec/LongVectors.cpp

Lines changed: 58 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
774746
void 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

Comments
 (0)