Implement 1.20 'outerProduct' builtin.

This commit is contained in:
Kenneth Graunke
2010-06-09 15:47:09 -07:00
parent 0c8ffadc8c
commit 43ff6fc4ae
3 changed files with 211 additions and 0 deletions
+96
View File
@@ -2811,8 +2811,104 @@ static const char *builtins_120_matrixCompMult = {
"))\n"
};
static const char *builtins_120_outerProduct = {
"((function outerProduct\n"
" (signature mat2\n"
" (parameters\n"
" (declare (in) vec2 u)\n"
" (declare (in) vec2 v))\n"
" ((declare () mat2 m)\n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0))) (expression vec2 * (var_ref v) (swiz x (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1))) (expression vec2 * (var_ref v) (swiz y (var_ref u)))) \n"
"(return (var_ref m))))\n"
"\n"
" (signature mat2x3\n"
" (parameters\n"
" (declare (in) vec2 u)\n"
" (declare (in) vec3 v))\n"
" ((declare () mat2x3 m)\n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0))) (expression vec3 * (var_ref v) (swiz x (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1))) (expression vec3 * (var_ref v) (swiz y (var_ref u)))) \n"
"(return (var_ref m))))\n"
"\n"
" (signature mat2x4\n"
" (parameters\n"
" (declare (in) vec2 u)\n"
" (declare (in) vec4 v))\n"
" ((declare () mat2x4 m)\n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0))) (expression vec4 * (var_ref v) (swiz x (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1))) (expression vec4 * (var_ref v) (swiz y (var_ref u)))) \n"
"(return (var_ref m))))\n"
"\n"
" (signature mat3x2\n"
" (parameters\n"
" (declare (in) vec3 u)\n"
" (declare (in) vec2 v))\n"
" ((declare () mat3x2 m)\n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0))) (expression vec2 * (var_ref v) (swiz x (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1))) (expression vec2 * (var_ref v) (swiz y (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (2))) (expression vec2 * (var_ref v) (swiz z (var_ref u)))) \n"
"(return (var_ref m))))\n"
"\n"
" (signature mat3\n"
" (parameters\n"
" (declare (in) vec3 u)\n"
" (declare (in) vec3 v))\n"
" ((declare () mat3 m)\n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0))) (expression vec3 * (var_ref v) (swiz x (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1))) (expression vec3 * (var_ref v) (swiz y (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (2))) (expression vec3 * (var_ref v) (swiz z (var_ref u)))) \n"
"(return (var_ref m))))\n"
"\n"
" (signature mat3x4\n"
" (parameters\n"
" (declare (in) vec3 u)\n"
" (declare (in) vec4 v))\n"
" ((declare () mat3x4 m)\n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0))) (expression vec4 * (var_ref v) (swiz x (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1))) (expression vec4 * (var_ref v) (swiz y (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (2))) (expression vec4 * (var_ref v) (swiz z (var_ref u)))) \n"
"(return (var_ref m))))\n"
"\n"
" (signature mat4x2\n"
" (parameters\n"
" (declare (in) vec4 u)\n"
" (declare (in) vec2 v))\n"
" ((declare () mat4x2 m)\n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0))) (expression vec2 * (var_ref v) (swiz x (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1))) (expression vec2 * (var_ref v) (swiz y (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (2))) (expression vec2 * (var_ref v) (swiz z (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (3))) (expression vec2 * (var_ref v) (swiz w (var_ref u)))) \n"
"(return (var_ref m))))\n"
"\n"
" (signature mat4x3\n"
" (parameters\n"
" (declare (in) vec4 u)\n"
" (declare (in) vec3 v))\n"
" ((declare () mat4x3 m)\n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0))) (expression vec3 * (var_ref v) (swiz x (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1))) (expression vec3 * (var_ref v) (swiz y (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (2))) (expression vec3 * (var_ref v) (swiz z (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (3))) (expression vec3 * (var_ref v) (swiz w (var_ref u)))) \n"
"(return (var_ref m))))\n"
"\n"
" (signature mat4\n"
" (parameters\n"
" (declare (in) vec4 u)\n"
" (declare (in) vec4 v))\n"
" ((declare () mat4 m)\n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (0))) (expression vec4 * (var_ref v) (swiz x (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (1))) (expression vec4 * (var_ref v) (swiz y (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (2))) (expression vec4 * (var_ref v) (swiz z (var_ref u)))) \n"
" (assign (constant bool (1)) (array_ref (var_ref m) (constant int (3))) (expression vec4 * (var_ref v) (swiz w (var_ref u)))) \n"
"(return (var_ref m))))\n"
"))\n"
"\n"
};
static const char *functions_for_120 [] = {
builtins_120_matrixCompMult,
builtins_120_outerProduct,
};
/* 130 builtins */