summaryrefslogtreecommitdiff
path: root/src/mesa/shader/slang/library
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>2008-08-11 17:10:24 -0600
committerBrian Paul <brian.paul@tungstengraphics.com>2008-08-11 17:10:24 -0600
commit1c30e56cd228726225af5ff7916da8dede43e34f (patch)
tree9e074aef022e06ffdd6b1253287728df55b1bd52 /src/mesa/shader/slang/library
parent2023f7f91d8c40bca54db972f836c969c82ffbca (diff)
mesa: glsl: change refract() functions to allow inlining
Diffstat (limited to 'src/mesa/shader/slang/library')
-rw-r--r--src/mesa/shader/slang/library/slang_common_builtin.gc28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/mesa/shader/slang/library/slang_common_builtin.gc b/src/mesa/shader/slang/library/slang_common_builtin.gc
index 45504f4089..18b38af758 100644
--- a/src/mesa/shader/slang/library/slang_common_builtin.gc
+++ b/src/mesa/shader/slang/library/slang_common_builtin.gc
@@ -1279,36 +1279,48 @@ float refract(const float I, const float N, const float eta)
{
float n_dot_i = dot(N, I);
float k = 1.0 - eta * eta * (1.0 - n_dot_i * n_dot_i);
+ float retval;
if (k < 0.0)
- return 0.0;
- return eta * I - (eta * n_dot_i + sqrt(k)) * N;
+ retval = 0.0;
+ else
+ retval = eta * I - (eta * n_dot_i + sqrt(k)) * N;
+ return retval;
}
vec2 refract(const vec2 I, const vec2 N, const float eta)
{
float n_dot_i = dot(N, I);
float k = 1.0 - eta * eta * (1.0 - n_dot_i * n_dot_i);
+ vec2 retval;
if (k < 0.0)
- return vec2(0.0);
- return eta * I - (eta * n_dot_i + sqrt(k)) * N;
+ retval = vec2(0.0);
+ else
+ retval = eta * I - (eta * n_dot_i + sqrt(k)) * N;
+ return retval;
}
vec3 refract(const vec3 I, const vec3 N, const float eta)
{
float n_dot_i = dot(N, I);
float k = 1.0 - eta * eta * (1.0 - n_dot_i * n_dot_i);
+ vec3 retval;
if (k < 0.0)
- return vec3(0.0);
- return eta * I - (eta * n_dot_i + sqrt(k)) * N;
+ retval = vec3(0.0);
+ else
+ retval = eta * I - (eta * n_dot_i + sqrt(k)) * N;
+ return retval;
}
vec4 refract(const vec4 I, const vec4 N, const float eta)
{
float n_dot_i = dot(N, I);
float k = 1.0 - eta * eta * (1.0 - n_dot_i * n_dot_i);
+ vec4 retval;
if (k < 0.0)
- return vec4(0.0);
- return eta * I - (eta * n_dot_i + sqrt(k)) * N;
+ retval = vec4(0.0);
+ else
+ retval = eta * I - (eta * n_dot_i + sqrt(k)) * N;
+ return retval;
}