mirror of
https://github.com/KhronosGroup/SPIRV-Cross.git
synced 2024-11-15 00:11:06 +00:00
Don't use scalar dot().
This commit is contained in:
parent
041f103d44
commit
4056d0b74e
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1758,14 +1758,16 @@ void CompilerHLSL::emit_resources()
|
||||
// FP16/FP64? No templates in HLSL.
|
||||
statement("float SPIRV_Cross_Refract(float i, float n, float eta)");
|
||||
begin_scope();
|
||||
statement("float k = 1.0 - eta * eta * (1.0 - dot(n, i) * dot(n, i));");
|
||||
statement("float NoI = n * i;");
|
||||
statement("float NoI2 = NoI * NoI;");
|
||||
statement("float k = 1.0 - eta * eta * (1.0 - NoI2);");
|
||||
statement("if (k < 0.0)");
|
||||
begin_scope();
|
||||
statement("return 0.0;");
|
||||
end_scope();
|
||||
statement("else");
|
||||
begin_scope();
|
||||
statement("return eta * i - (eta * dot(n, i) + sqrt(k)) * n;");
|
||||
statement("return eta * i - (eta * NoI + sqrt(k)) * n;");
|
||||
end_scope();
|
||||
end_scope();
|
||||
statement("");
|
||||
|
@ -3194,7 +3194,7 @@ void CompilerMSL::emit_custom_functions()
|
||||
statement("template<typename T>");
|
||||
statement("inline T spvReflect(T i, T n)");
|
||||
begin_scope();
|
||||
statement("return i - T(2) * dot(n, i) * n;");
|
||||
statement("return i - T(2) * i * n * n;");
|
||||
end_scope();
|
||||
statement("");
|
||||
break;
|
||||
@ -3204,14 +3204,16 @@ void CompilerMSL::emit_custom_functions()
|
||||
statement("template<typename T>");
|
||||
statement("inline T spvRefract(T i, T n, T eta)");
|
||||
begin_scope();
|
||||
statement("T k = T(1) - eta * eta * (T(1) - dot(n, i) * dot(n, i));");
|
||||
statement("T NoI = n * i;");
|
||||
statement("T NoI2 = NoI * NoI;");
|
||||
statement("T k = T(1) - eta * eta * (T(1) - NoI2);");
|
||||
statement("if (k < T(0))");
|
||||
begin_scope();
|
||||
statement("return T(0);");
|
||||
end_scope();
|
||||
statement("else");
|
||||
begin_scope();
|
||||
statement("return eta * i - (eta * dot(n, i) + sqrt(k)) * n;");
|
||||
statement("return eta * i - (eta * NoI + sqrt(k)) * n;");
|
||||
end_scope();
|
||||
end_scope();
|
||||
statement("");
|
||||
|
Loading…
Reference in New Issue
Block a user