mesa: glsl: change refract() functions to allow inlining
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 11 Aug 2008 23:10:24 +0000 (17:10 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 11 Aug 2008 23:10:24 +0000 (17:10 -0600)
src/mesa/shader/slang/library/slang_common_builtin.gc

index 45504f408941cc5580ede860035c96c184ed8432..18b38af7586d3dc13b9a74f5b34949fcadf3a1eb 100644 (file)
@@ -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;
 }