Implement 'faceforward' builtin.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 9 Jun 2010 20:27:16 +0000 (13:27 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 9 Jun 2010 20:27:16 +0000 (13:27 -0700)
builtin_function.cpp
builtins/110/faceforward [new file with mode: 0644]

index bdcf891d85198e0f9b86de8ca7dc0a9161e0cb61..754a721c7e7b7b572d1aeab9b3f696cff630de13 100644 (file)
@@ -689,6 +689,46 @@ static const char *builtins_110_exp2 = {
    "))\n"
 };
 
+static const char *builtins_110_faceforward = {
+   "((function faceforward\n"
+   "   (signature float\n"
+   "     (parameters\n"
+   "       (declare (in) float N)\n"
+   "       (declare (in) float I)\n"
+   "       (declare (in) float Nref))\n"
+   "     ((if (expression bool < (expression float dot (var_ref Nref) (var_ref I)) (constant float (0)))\n"
+   "          ((return (var_ref N)))\n"
+   "     ((return (expression float neg (var_ref N)))))))\n"
+   "\n"
+   "   (signature vec2\n"
+   "     (parameters\n"
+   "       (declare (in) vec2 N)\n"
+   "       (declare (in) vec2 I)\n"
+   "       (declare (in) vec2 Nref))\n"
+   "     ((if (expression bool < (expression float dot (var_ref Nref) (var_ref I)) (constant float (0)))\n"
+   "          ((return (var_ref N)))\n"
+   "     ((return (expression vec2 neg (var_ref N)))))))\n"
+   "\n"
+   "   (signature vec3\n"
+   "     (parameters\n"
+   "       (declare (in) vec3 N)\n"
+   "       (declare (in) vec3 I)\n"
+   "       (declare (in) vec3 Nref))\n"
+   "     ((if (expression bool < (expression float dot (var_ref Nref) (var_ref I)) (constant float (0)))\n"
+   "          ((return (var_ref N)))\n"
+   "     ((return (expression vec3 neg (var_ref N)))))))\n"
+   "\n"
+   "   (signature vec4\n"
+   "     (parameters\n"
+   "       (declare (in) vec4 N)\n"
+   "       (declare (in) vec4 I)\n"
+   "       (declare (in) vec4 Nref))\n"
+   "     ((if (expression bool < (expression float dot (var_ref Nref) (var_ref I)) (constant float (0)))\n"
+   "          ((return (var_ref N)))\n"
+   "     ((return (expression vec4 neg (var_ref N)))))))\n"
+   "))\n"
+};
+
 static const char *builtins_110_floor = {
    "((function floor\n"
    "   (signature float\n"
@@ -2215,6 +2255,7 @@ static const char *functions_for_110 [] = {
    builtins_110_equal,
    builtins_110_exp,
    builtins_110_exp2,
+   builtins_110_faceforward,
    builtins_110_floor,
    builtins_110_fract,
    builtins_110_greaterThan,
diff --git a/builtins/110/faceforward b/builtins/110/faceforward
new file mode 100644 (file)
index 0000000..d170397
--- /dev/null
@@ -0,0 +1,37 @@
+((function faceforward
+   (signature float
+     (parameters
+       (declare (in) float N)
+       (declare (in) float I)
+       (declare (in) float Nref))
+     ((if (expression bool < (expression float dot (var_ref Nref) (var_ref I)) (constant float (0)))
+          ((return (var_ref N)))
+         ((return (expression float neg (var_ref N)))))))
+
+   (signature vec2
+     (parameters
+       (declare (in) vec2 N)
+       (declare (in) vec2 I)
+       (declare (in) vec2 Nref))
+     ((if (expression bool < (expression float dot (var_ref Nref) (var_ref I)) (constant float (0)))
+          ((return (var_ref N)))
+         ((return (expression vec2 neg (var_ref N)))))))
+
+   (signature vec3
+     (parameters
+       (declare (in) vec3 N)
+       (declare (in) vec3 I)
+       (declare (in) vec3 Nref))
+     ((if (expression bool < (expression float dot (var_ref Nref) (var_ref I)) (constant float (0)))
+          ((return (var_ref N)))
+         ((return (expression vec3 neg (var_ref N)))))))
+
+   (signature vec4
+     (parameters
+       (declare (in) vec4 N)
+       (declare (in) vec4 I)
+       (declare (in) vec4 Nref))
+     ((if (expression bool < (expression float dot (var_ref Nref) (var_ref I)) (constant float (0)))
+          ((return (var_ref N)))
+         ((return (expression vec4 neg (var_ref N)))))))
+))