glsl: Add support for GLSL 1.30's modf built-in.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 19 Oct 2010 18:56:47 +0000 (11:56 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Oct 2010 07:14:37 +0000 (00:14 -0700)
src/glsl/builtins/ir/modf [new file with mode: 0644]
src/glsl/builtins/profiles/130.frag
src/glsl/builtins/profiles/130.vert

diff --git a/src/glsl/builtins/ir/modf b/src/glsl/builtins/ir/modf
new file mode 100644 (file)
index 0000000..2b935a9
--- /dev/null
@@ -0,0 +1,41 @@
+((function modf
+   (signature float
+     (parameters
+       (declare (in)  float x)
+       (declare (out) float i))
+     ((declare () float t)
+      (assign (constant bool (1)) (x) (var_ref t)
+                                      (expression float trunc (var_ref x)))
+      (assign (constant bool (1)) (x) (var_ref i) (var_ref t))
+      (return (expression float - (var_ref x) (var_ref t)))))
+
+   (signature vec2
+     (parameters
+       (declare (in)  vec2 x)
+       (declare (out) vec2 i))
+     ((declare () vec2 t)
+      (assign (constant bool (1)) (xy) (var_ref t)
+                                       (expression vec2 trunc (var_ref x)))
+      (assign (constant bool (1)) (xy) (var_ref i) (var_ref t))
+      (return (expression vec2 - (var_ref x) (var_ref t)))))
+
+   (signature vec3
+     (parameters
+       (declare (in)  vec3 x)
+       (declare (out) vec3 i))
+     ((declare () vec3 t)
+      (assign (constant bool (1)) (xyz) (var_ref t)
+                                        (expression vec3 trunc (var_ref x)))
+      (assign (constant bool (1)) (xyz) (var_ref i) (var_ref t))
+      (return (expression vec3 - (var_ref x) (var_ref t)))))
+
+   (signature vec4
+     (parameters
+       (declare (in)  vec4 x)
+       (declare (out) vec4 i))
+     ((declare () vec4 t)
+      (assign (constant bool (1)) (xyzw) (var_ref t)
+                                         (expression vec4 trunc (var_ref x)))
+      (assign (constant bool (1)) (xyzw) (var_ref i) (var_ref t))
+      (return (expression vec4 - (var_ref x) (var_ref t)))))
+))
index 96440703bd3755e3efd45f5875c6e542d6ba9d10..0d860eb9ed43519c99c4eeb286da1baf43bfc4e9 100644 (file)
@@ -177,6 +177,11 @@ vec2  mod(vec2  x, vec2  y);
 vec3  mod(vec3  x, vec3  y);
 vec4  mod(vec4  x, vec4  y);
 
+float modf(float x, out float i);
+vec2  modf(vec2  x, out vec2  i);
+vec3  modf(vec3  x, out vec3  i);
+vec4  modf(vec4  x, out vec4  i);
+
 float min(float x, float y);
 vec2  min(vec2  x, vec2  y);
 vec3  min(vec3  x, vec3  y);
index eb765186fc87618f88876950b9b1c0e67fbe6122..2fd44dce8c7e6e46c8304a0a7bea4eb8e27a48a2 100644 (file)
@@ -177,6 +177,11 @@ vec2  mod(vec2  x, vec2  y);
 vec3  mod(vec3  x, vec3  y);
 vec4  mod(vec4  x, vec4  y);
 
+float modf(float x, out float i);
+vec2  modf(vec2  x, out vec2  i);
+vec3  modf(vec3  x, out vec3  i);
+vec4  modf(vec4  x, out vec4  i);
+
 float min(float x, float y);
 vec2  min(vec2  x, vec2  y);
 vec3  min(vec3  x, vec3  y);