glsl: Reimplement the "cross" built-in without ir_binop_cross.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 17 Nov 2010 21:20:30 +0000 (13:20 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 17 Nov 2010 21:20:30 +0000 (13:20 -0800)
We are not aware of any GPU that actually implements the cross product
as a single instruction.  Hence, there's no need for it to be an opcode.
Future commits will remove it entirely.

src/glsl/builtins/ir/cross

index 24717a2..02991fe 100644 (file)
@@ -1,7 +1,9 @@
 ((function cross
    (signature vec3
      (parameters
-       (declare (in) vec3 arg0)
-       (declare (in) vec3 arg1))
-     ((return (expression vec3 cross (var_ref arg0) (var_ref arg1)))))
+       (declare (in) vec3 a)
+       (declare (in) vec3 b))
+     ((return (expression vec3 -
+        (expression vec3 * (swiz yzx (var_ref a)) (swiz zxy (var_ref b)))
+        (expression vec3 * (swiz zxy (var_ref a)) (swiz yzx (var_ref b)))))))
 ))