From fb3defc9ef4c22bba596c245c1cbc3a5fd3b891d Mon Sep 17 00:00:00 2001 From: Bill Hollings Date: Thu, 23 Sep 2021 14:37:08 -0400 Subject: 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. --- .../shaders-msl/vert/float-math.invariant-float-math.vert | 8 ++++---- reference/opt/shaders-msl/vert/no-contraction.vert | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'reference/opt/shaders-msl') 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 -T spvFMul(T l, T r) +[[clang::optnone]] T spvFMul(T l, T r) { return fma(l, r, T(0)); } template -vec spvFMulVectorMatrix(vec v, matrix m) +[[clang::optnone]] vec spvFMulVectorMatrix(vec v, matrix m) { vec res = vec(0); for (uint i = Rows; i > 0; --i) @@ -91,7 +91,7 @@ vec spvFMulVectorMatrix(vec v, matrix m) } template -vec spvFMulMatrixVector(matrix m, vec v) +[[clang::optnone]] vec spvFMulMatrixVector(matrix m, vec v) { vec res = vec(0); for (uint i = Cols; i > 0; --i) @@ -102,7 +102,7 @@ vec spvFMulMatrixVector(matrix m, vec v) } template -matrix spvFMulMatrixMatrix(matrix l, matrix r) +[[clang::optnone]] matrix spvFMulMatrixMatrix(matrix l, matrix r) { matrix 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 -T spvFMul(T l, T r) +[[clang::optnone]] T spvFMul(T l, T r) { return fma(l, r, T(0)); } template -vec spvFMulVectorMatrix(vec v, matrix m) +[[clang::optnone]] vec spvFMulVectorMatrix(vec v, matrix m) { vec res = vec(0); for (uint i = Rows; i > 0; --i) @@ -40,7 +40,7 @@ vec spvFMulVectorMatrix(vec v, matrix m) } template -vec spvFMulMatrixVector(matrix m, vec v) +[[clang::optnone]] vec spvFMulMatrixVector(matrix m, vec v) { vec res = vec(0); for (uint i = Cols; i > 0; --i) @@ -51,7 +51,7 @@ vec spvFMulMatrixVector(matrix m, vec v) } template -matrix spvFMulMatrixMatrix(matrix l, matrix r) +[[clang::optnone]] matrix spvFMulMatrixMatrix(matrix l, matrix r) { matrix res; for (uint i = 0; i < RCols; i++) @@ -67,13 +67,13 @@ matrix spvFMulMatrixMatrix(matrix l, matrix -T spvFAdd(T l, T r) +[[clang::optnone]] T spvFAdd(T l, T r) { return fma(T(1), l, r); } template -T spvFSub(T l, T r) +[[clang::optnone]] T spvFSub(T l, T r) { return fma(T(-1), r, l); } -- cgit v1.2.3