Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2019-07-03 15:32:06 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2019-07-03 15:32:06 +0300
commit4056d0b74e1a444d3e56f92d45ef7ea4f598c31e (patch)
tree902a476660ec8195766d2f1e5608daecd7230181 /reference
parent041f103d44b27512b41b7643b8cfe0276570294e (diff)
Don't use scalar dot().
Diffstat (limited to 'reference')
-rw-r--r--reference/opt/shaders-hlsl/frag/scalar-refract-reflect.frag6
-rw-r--r--reference/opt/shaders-msl/frag/scalar-refract-reflect.frag8
-rw-r--r--reference/shaders-hlsl/frag/scalar-refract-reflect.frag6
-rw-r--r--reference/shaders-msl/frag/scalar-refract-reflect.frag8
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;
}
}