Implement 1.30 int/uint variants of min/max/clamp.

This commit is contained in:
Kenneth Graunke
2010-06-09 16:14:45 -07:00
parent c3bf0cbefc
commit af05703826
4 changed files with 766 additions and 0 deletions
+389
View File
@@ -3056,6 +3056,132 @@ static const char *functions_for_120 [] = {
/* 130 builtins */
static const char *builtins_130_clamp = {
"((function clamp\n"
" (signature int\n"
" (parameters\n"
" (declare (in) int arg0)\n"
" (declare (in) int arg1)\n"
" (declare (in) int arg2))\n"
" ((return (expression int max (expression int min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
"\n"
" (signature ivec2\n"
" (parameters\n"
" (declare (in) ivec2 arg0)\n"
" (declare (in) ivec2 arg1)\n"
" (declare (in) ivec2 arg2))\n"
" ((return (expression ivec2 max (expression ivec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
"\n"
" (signature ivec3\n"
" (parameters\n"
" (declare (in) ivec3 arg0)\n"
" (declare (in) ivec3 arg1)\n"
" (declare (in) ivec3 arg2))\n"
" ((return (expression ivec3 max (expression ivec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
"\n"
" (signature ivec4\n"
" (parameters\n"
" (declare (in) ivec4 arg0)\n"
" (declare (in) ivec4 arg1)\n"
" (declare (in) ivec4 arg2))\n"
" ((return (expression ivec4 max (expression ivec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
"\n"
" (signature ivec2\n"
" (parameters\n"
" (declare (in) ivec2 arg0)\n"
" (declare (in) int arg1)\n"
" (declare (in) int arg2))\n"
" ((declare () ivec2 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature ivec3\n"
" (parameters\n"
" (declare (in) ivec3 arg0)\n"
" (declare (in) int arg1)\n"
" (declare (in) int arg2))\n"
" ((declare () ivec3 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz z (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz z (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature ivec4\n"
" (parameters\n"
" (declare (in) ivec4 arg0)\n"
" (declare (in) int arg1)\n"
" (declare (in) int arg2))\n"
" ((declare () ivec4 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz z (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz z (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz w (var_ref result)) (expression ivec4 max (expression ivec4 min (swiz w (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature uint\n"
" (parameters\n"
" (declare (in) uint arg0)\n"
" (declare (in) uint arg1)\n"
" (declare (in) uint arg2))\n"
" ((return (expression uint max (expression uint min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
"\n"
" (signature uvec2\n"
" (parameters\n"
" (declare (in) uvec2 arg0)\n"
" (declare (in) uvec2 arg1)\n"
" (declare (in) uvec2 arg2))\n"
" ((return (expression uvec2 max (expression uvec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
"\n"
" (signature uvec3\n"
" (parameters\n"
" (declare (in) uvec3 arg0)\n"
" (declare (in) uvec3 arg1)\n"
" (declare (in) uvec3 arg2))\n"
" ((return (expression uvec3 max (expression uvec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
"\n"
" (signature uvec4\n"
" (parameters\n"
" (declare (in) uvec4 arg0)\n"
" (declare (in) uvec4 arg1)\n"
" (declare (in) uvec4 arg2))\n"
" ((return (expression uvec4 max (expression uvec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))\n"
"\n"
" (signature uvec2\n"
" (parameters\n"
" (declare (in) uvec2 arg0)\n"
" (declare (in) uint arg1)\n"
" (declare (in) uint arg2))\n"
" ((declare () uvec2 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature uvec3\n"
" (parameters\n"
" (declare (in) uvec3 arg0)\n"
" (declare (in) uint arg1)\n"
" (declare (in) uint arg2))\n"
" ((declare () uvec3 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz z (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz z (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature uvec4\n"
" (parameters\n"
" (declare (in) uvec4 arg0)\n"
" (declare (in) uint arg1)\n"
" (declare (in) uint arg2))\n"
" ((declare () uvec4 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz x (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz y (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz z (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz z (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz w (var_ref result)) (expression uvec4 max (expression uvec4 min (swiz w (var_ref arg0)) (var_ref arg2)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"))\n"
};
static const char *builtins_130_cosh = {
"((function cosh\n"
" (signature float\n"
@@ -3259,6 +3385,266 @@ static const char *builtins_130_lessThanEqual = {
"))\n"
};
static const char *builtins_130_max = {
"((function max\n"
" (signature int\n"
" (parameters\n"
" (declare (in) int arg0)\n"
" (declare (in) int arg1))\n"
" ((return (expression int max (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature ivec2\n"
" (parameters\n"
" (declare (in) ivec2 arg0)\n"
" (declare (in) ivec2 arg1))\n"
" ((return (expression ivec2 max (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature ivec3\n"
" (parameters\n"
" (declare (in) ivec3 arg0)\n"
" (declare (in) ivec3 arg1))\n"
" ((return (expression ivec3 max (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature ivec4\n"
" (parameters\n"
" (declare (in) ivec4 arg0)\n"
" (declare (in) ivec4 arg1))\n"
" ((return (expression ivec4 max (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature ivec2\n"
" (parameters\n"
" (declare (in) ivec2 arg0)\n"
" (declare (in) int arg1))\n"
" ((declare () ivec2 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result))\n"
" (expression int max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result))\n"
" (expression int max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature ivec3\n"
" (parameters\n"
" (declare (in) ivec3 arg0)\n"
" (declare (in) int arg1))\n"
" ((declare () ivec3 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result))\n"
" (expression int max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result))\n"
" (expression int max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz z (var_ref result))\n"
" (expression int max (swiz z (var_ref arg0)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature ivec4\n"
" (parameters\n"
" (declare (in) ivec4 arg0)\n"
" (declare (in) int arg1))\n"
" ((declare () ivec4 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result))\n"
" (expression int max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result))\n"
" (expression int max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz z (var_ref result))\n"
" (expression int max (swiz z (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz w (var_ref result))\n"
" (expression int max (swiz w (var_ref arg0)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature uint\n"
" (parameters\n"
" (declare (in) uint arg0)\n"
" (declare (in) uint arg1))\n"
" ((return (expression uint max (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature uvec2\n"
" (parameters\n"
" (declare (in) uvec2 arg0)\n"
" (declare (in) uvec2 arg1))\n"
" ((return (expression uvec2 max (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature uvec3\n"
" (parameters\n"
" (declare (in) uvec3 arg0)\n"
" (declare (in) uvec3 arg1))\n"
" ((return (expression uvec3 max (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature uvec4\n"
" (parameters\n"
" (declare (in) uvec4 arg0)\n"
" (declare (in) uvec4 arg1))\n"
" ((return (expression uvec4 max (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature uvec2\n"
" (parameters\n"
" (declare (in) uvec2 arg0)\n"
" (declare (in) uint arg1))\n"
" ((declare () uvec2 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result))\n"
" (expression uint max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result))\n"
" (expression uint max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature uvec3\n"
" (parameters\n"
" (declare (in) uvec3 arg0)\n"
" (declare (in) uint arg1))\n"
" ((declare () uvec3 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result))\n"
" (expression uint max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result))\n"
" (expression uint max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz z (var_ref result))\n"
" (expression uint max (swiz z (var_ref arg0)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature uvec4\n"
" (parameters\n"
" (declare (in) uvec4 arg0)\n"
" (declare (in) uint arg1))\n"
" ((declare () uvec4 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result))\n"
" (expression uint max (swiz x (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result))\n"
" (expression uint max (swiz y (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz z (var_ref result))\n"
" (expression uint max (swiz z (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz w (var_ref result))\n"
" (expression uint max (swiz w (var_ref arg0)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"))\n"
};
static const char *builtins_130_min = {
"((function min\n"
" (signature int\n"
" (parameters\n"
" (declare (in) int arg0)\n"
" (declare (in) int arg1))\n"
" ((return (expression int min (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature ivec2\n"
" (parameters\n"
" (declare (in) ivec2 arg0)\n"
" (declare (in) ivec2 arg1))\n"
" ((return (expression ivec2 min (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature ivec3\n"
" (parameters\n"
" (declare (in) ivec3 arg0)\n"
" (declare (in) ivec3 arg1))\n"
" ((return (expression ivec3 min (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature ivec4\n"
" (parameters\n"
" (declare (in) ivec4 arg0)\n"
" (declare (in) ivec4 arg1))\n"
" ((return (expression ivec4 min (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature ivec2\n"
" (parameters\n"
" (declare (in) ivec2 arg0)\n"
" (declare (in) int arg1))\n"
" ((declare () ivec2 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result))\n"
" (expression int min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result))\n"
" (expression int min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature ivec3\n"
" (parameters\n"
" (declare (in) ivec3 arg0)\n"
" (declare (in) int arg1))\n"
" ((declare () ivec3 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result))\n"
" (expression int min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result))\n"
" (expression int min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz z (var_ref result))\n"
" (expression int min (swiz z (var_ref arg0)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature ivec4\n"
" (parameters\n"
" (declare (in) ivec4 arg0)\n"
" (declare (in) int arg1))\n"
" ((declare () ivec4 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result))\n"
" (expression int min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result))\n"
" (expression int min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz z (var_ref result))\n"
" (expression int min (swiz z (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz w (var_ref result))\n"
" (expression int min (swiz w (var_ref arg0)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature uint\n"
" (parameters\n"
" (declare (in) uint arg0)\n"
" (declare (in) uint arg1))\n"
" ((return (expression uint min (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature uvec2\n"
" (parameters\n"
" (declare (in) uvec2 arg0)\n"
" (declare (in) uvec2 arg1))\n"
" ((return (expression uvec2 min (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature uvec3\n"
" (parameters\n"
" (declare (in) uvec3 arg0)\n"
" (declare (in) uvec3 arg1))\n"
" ((return (expression uvec3 min (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature uvec4\n"
" (parameters\n"
" (declare (in) uvec4 arg0)\n"
" (declare (in) uvec4 arg1))\n"
" ((return (expression uvec4 min (var_ref arg0) (var_ref arg1)))))\n"
"\n"
" (signature uvec2\n"
" (parameters\n"
" (declare (in) uvec2 arg0)\n"
" (declare (in) uint arg1))\n"
" ((declare () uvec2 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result))\n"
" (expression uint min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result))\n"
" (expression uint min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature uvec3\n"
" (parameters\n"
" (declare (in) uvec3 arg0)\n"
" (declare (in) uint arg1))\n"
" ((declare () uvec3 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result))\n"
" (expression uint min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result))\n"
" (expression uint min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz z (var_ref result))\n"
" (expression uint min (swiz z (var_ref arg0)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"\n"
" (signature uvec4\n"
" (parameters\n"
" (declare (in) uvec4 arg0)\n"
" (declare (in) uint arg1))\n"
" ((declare () uvec4 result)\n"
" (assign (constant bool (1)) (swiz x (var_ref result))\n"
" (expression uint min (swiz x (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz y (var_ref result))\n"
" (expression uint min (swiz y (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz z (var_ref result))\n"
" (expression uint min (swiz z (var_ref arg0)) (var_ref arg1)))\n"
" (assign (constant bool (1)) (swiz w (var_ref result))\n"
" (expression uint min (swiz w (var_ref arg0)) (var_ref arg1)))\n"
" (return (var_ref result))))\n"
"))\n"
};
static const char *builtins_130_notEqual = {
"((function notEqual\n"
" (signature bvec2\n"
@@ -4243,12 +4629,15 @@ static const char *builtins_130_textureProjLod = {
};
static const char *functions_for_130 [] = {
builtins_130_clamp,
builtins_130_cosh,
builtins_130_equal,
builtins_130_greaterThan,
builtins_130_greaterThanEqual,
builtins_130_lessThan,
builtins_130_lessThanEqual,
builtins_130_max,
builtins_130_min,
builtins_130_notEqual,
builtins_130_sign,
builtins_130_sinh,