diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2019-07-03 15:32:06 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2019-07-03 15:32:06 +0300 |
commit | 4056d0b74e1a444d3e56f92d45ef7ea4f598c31e (patch) | |
tree | 902a476660ec8195766d2f1e5608daecd7230181 /reference | |
parent | 041f103d44b27512b41b7643b8cfe0276570294e (diff) |
Don't use scalar dot().
Diffstat (limited to 'reference')
4 files changed, 18 insertions, 10 deletions
diff --git a/reference/opt/shaders-hlsl/frag/scalar-refract-reflect.frag b/reference/opt/shaders-hlsl/frag/scalar-refract-reflect.frag index ac2ee794..0fb694c5 100644 --- a/reference/opt/shaders-hlsl/frag/scalar-refract-reflect.frag +++ b/reference/opt/shaders-hlsl/frag/scalar-refract-reflect.frag @@ -18,14 +18,16 @@ float SPIRV_Cross_Reflect(float i, float n) float SPIRV_Cross_Refract(float i, float n, float eta) { - float k = 1.0 - eta * eta * (1.0 - dot(n, i) * dot(n, i)); + float NoI = n * i; + float NoI2 = NoI * NoI; + float k = 1.0 - eta * eta * (1.0 - NoI2); if (k < 0.0) { return 0.0; } else { - return eta * i - (eta * dot(n, i) + sqrt(k)) * n; + return eta * i - (eta * NoI + sqrt(k)) * n; } } diff --git a/reference/opt/shaders-msl/frag/scalar-refract-reflect.frag b/reference/opt/shaders-msl/frag/scalar-refract-reflect.frag index ca6d0c46..592d4458 100644 --- a/reference/opt/shaders-msl/frag/scalar-refract-reflect.frag +++ b/reference/opt/shaders-msl/frag/scalar-refract-reflect.frag @@ -18,20 +18,22 @@ struct main0_in template<typename T> inline T spvReflect(T i, T n) { - return i - T(2) * dot(n, i) * n; + return i - T(2) * i * n * n; } template<typename T> inline T spvRefract(T i, T n, T eta) { - T k = T(1) - eta * eta * (T(1) - dot(n, i) * dot(n, i)); + T NoI = n * i; + T NoI2 = NoI * NoI; + T k = T(1) - eta * eta * (T(1) - NoI2); if (k < T(0)) { return T(0); } else { - return eta * i - (eta * dot(n, i) + sqrt(k)) * n; + return eta * i - (eta * NoI + sqrt(k)) * n; } } diff --git a/reference/shaders-hlsl/frag/scalar-refract-reflect.frag b/reference/shaders-hlsl/frag/scalar-refract-reflect.frag index ac2ee794..0fb694c5 100644 --- a/reference/shaders-hlsl/frag/scalar-refract-reflect.frag +++ b/reference/shaders-hlsl/frag/scalar-refract-reflect.frag @@ -18,14 +18,16 @@ float SPIRV_Cross_Reflect(float i, float n) float SPIRV_Cross_Refract(float i, float n, float eta) { - float k = 1.0 - eta * eta * (1.0 - dot(n, i) * dot(n, i)); + float NoI = n * i; + float NoI2 = NoI * NoI; + float k = 1.0 - eta * eta * (1.0 - NoI2); if (k < 0.0) { return 0.0; } else { - return eta * i - (eta * dot(n, i) + sqrt(k)) * n; + return eta * i - (eta * NoI + sqrt(k)) * n; } } diff --git a/reference/shaders-msl/frag/scalar-refract-reflect.frag b/reference/shaders-msl/frag/scalar-refract-reflect.frag index ca6d0c46..592d4458 100644 --- a/reference/shaders-msl/frag/scalar-refract-reflect.frag +++ b/reference/shaders-msl/frag/scalar-refract-reflect.frag @@ -18,20 +18,22 @@ struct main0_in template<typename T> inline T spvReflect(T i, T n) { - return i - T(2) * dot(n, i) * n; + return i - T(2) * i * n * n; } template<typename T> inline T spvRefract(T i, T n, T eta) { - T k = T(1) - eta * eta * (T(1) - dot(n, i) * dot(n, i)); + T NoI = n * i; + T NoI2 = NoI * NoI; + T k = T(1) - eta * eta * (T(1) - NoI2); if (k < T(0)) { return T(0); } else { - return eta * i - (eta * dot(n, i) + sqrt(k)) * n; + return eta * i - (eta * NoI + sqrt(k)) * n; } } |