diff options
author | Bill Hollings <bill.hollings@brenwill.com> | 2021-09-23 21:37:08 +0300 |
---|---|---|
committer | Bill Hollings <bill.hollings@brenwill.com> | 2021-09-23 21:37:08 +0300 |
commit | fb3defc9ef4c22bba596c245c1cbc3a5fd3b891d (patch) | |
tree | ae92474a900ff2258ab594f0589ed7612ef208fc /reference/opt/shaders-msl | |
parent | fe1af2ae72d8de17954757a91bc4dfdf79209c30 (diff) |
MSL: Honor DecorationNoContraction when compiling using fast-math.
Add [[clang::optnone]] attribute to spvF*() functions used for handling
floating point operations decorated with DecorationNoContraction.
Just using precise::fma() did not work.
Adjust SPIRV-Cross unit test reference shaders to accommodate these changes.
Diffstat (limited to 'reference/opt/shaders-msl')
-rw-r--r-- | reference/opt/shaders-msl/vert/float-math.invariant-float-math.vert | 8 | ||||
-rw-r--r-- | reference/opt/shaders-msl/vert/no-contraction.vert | 12 |
2 files changed, 10 insertions, 10 deletions
diff --git a/reference/opt/shaders-msl/vert/float-math.invariant-float-math.vert b/reference/opt/shaders-msl/vert/float-math.invariant-float-math.vert index 05e09e2d..d8f44bec 100644 --- a/reference/opt/shaders-msl/vert/float-math.invariant-float-math.vert +++ b/reference/opt/shaders-msl/vert/float-math.invariant-float-math.vert @@ -69,13 +69,13 @@ struct main0_in }; template<typename T> -T spvFMul(T l, T r) +[[clang::optnone]] T spvFMul(T l, T r) { return fma(l, r, T(0)); } template<typename T, int Cols, int Rows> -vec<T, Cols> spvFMulVectorMatrix(vec<T, Rows> v, matrix<T, Cols, Rows> m) +[[clang::optnone]] vec<T, Cols> spvFMulVectorMatrix(vec<T, Rows> v, matrix<T, Cols, Rows> m) { vec<T, Cols> res = vec<T, Cols>(0); for (uint i = Rows; i > 0; --i) @@ -91,7 +91,7 @@ vec<T, Cols> spvFMulVectorMatrix(vec<T, Rows> v, matrix<T, Cols, Rows> m) } template<typename T, int Cols, int Rows> -vec<T, Rows> spvFMulMatrixVector(matrix<T, Cols, Rows> m, vec<T, Cols> v) +[[clang::optnone]] vec<T, Rows> spvFMulMatrixVector(matrix<T, Cols, Rows> m, vec<T, Cols> v) { vec<T, Rows> res = vec<T, Rows>(0); for (uint i = Cols; i > 0; --i) @@ -102,7 +102,7 @@ vec<T, Rows> spvFMulMatrixVector(matrix<T, Cols, Rows> m, vec<T, Cols> v) } template<typename T, int LCols, int LRows, int RCols, int RRows> -matrix<T, RCols, LRows> spvFMulMatrixMatrix(matrix<T, LCols, LRows> l, matrix<T, RCols, RRows> r) +[[clang::optnone]] matrix<T, RCols, LRows> spvFMulMatrixMatrix(matrix<T, LCols, LRows> l, matrix<T, RCols, RRows> r) { matrix<T, RCols, LRows> res; for (uint i = 0; i < RCols; i++) diff --git a/reference/opt/shaders-msl/vert/no-contraction.vert b/reference/opt/shaders-msl/vert/no-contraction.vert index a48731ed..0b75dbcb 100644 --- a/reference/opt/shaders-msl/vert/no-contraction.vert +++ b/reference/opt/shaders-msl/vert/no-contraction.vert @@ -18,13 +18,13 @@ struct main0_in }; template<typename T> -T spvFMul(T l, T r) +[[clang::optnone]] T spvFMul(T l, T r) { return fma(l, r, T(0)); } template<typename T, int Cols, int Rows> -vec<T, Cols> spvFMulVectorMatrix(vec<T, Rows> v, matrix<T, Cols, Rows> m) +[[clang::optnone]] vec<T, Cols> spvFMulVectorMatrix(vec<T, Rows> v, matrix<T, Cols, Rows> m) { vec<T, Cols> res = vec<T, Cols>(0); for (uint i = Rows; i > 0; --i) @@ -40,7 +40,7 @@ vec<T, Cols> spvFMulVectorMatrix(vec<T, Rows> v, matrix<T, Cols, Rows> m) } template<typename T, int Cols, int Rows> -vec<T, Rows> spvFMulMatrixVector(matrix<T, Cols, Rows> m, vec<T, Cols> v) +[[clang::optnone]] vec<T, Rows> spvFMulMatrixVector(matrix<T, Cols, Rows> m, vec<T, Cols> v) { vec<T, Rows> res = vec<T, Rows>(0); for (uint i = Cols; i > 0; --i) @@ -51,7 +51,7 @@ vec<T, Rows> spvFMulMatrixVector(matrix<T, Cols, Rows> m, vec<T, Cols> v) } template<typename T, int LCols, int LRows, int RCols, int RRows> -matrix<T, RCols, LRows> spvFMulMatrixMatrix(matrix<T, LCols, LRows> l, matrix<T, RCols, RRows> r) +[[clang::optnone]] matrix<T, RCols, LRows> spvFMulMatrixMatrix(matrix<T, LCols, LRows> l, matrix<T, RCols, RRows> r) { matrix<T, RCols, LRows> res; for (uint i = 0; i < RCols; i++) @@ -67,13 +67,13 @@ matrix<T, RCols, LRows> spvFMulMatrixMatrix(matrix<T, LCols, LRows> l, matrix<T, } template<typename T> -T spvFAdd(T l, T r) +[[clang::optnone]] T spvFAdd(T l, T r) { return fma(T(1), l, r); } template<typename T> -T spvFSub(T l, T r) +[[clang::optnone]] T spvFSub(T l, T r) { return fma(T(-1), r, l); } |