Implement 1.30 int/uint variants of min/max/clamp.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 9 Jun 2010 23:14:45 +0000 (16:14 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 9 Jun 2010 23:14:45 +0000 (16:14 -0700)
builtin_function.cpp
builtins/130/clamp [new file with mode: 0644]
builtins/130/max [new file with mode: 0644]
builtins/130/min [new file with mode: 0644]

index 7f221216d8b6153ebc59bd653e9e65f7731f3be3..d248388a1ab39a27c2a8d99d1bcc90617915a990 100644 (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,
diff --git a/builtins/130/clamp b/builtins/130/clamp
new file mode 100644 (file)
index 0000000..3aed22c
--- /dev/null
@@ -0,0 +1,123 @@
+((function clamp
+   (signature int
+     (parameters
+       (declare (in) int arg0)
+       (declare (in) int arg1)
+       (declare (in) int arg2))
+     ((return (expression int max (expression int min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))
+
+   (signature ivec2
+     (parameters
+       (declare (in) ivec2 arg0)
+       (declare (in) ivec2 arg1)
+       (declare (in) ivec2 arg2))
+     ((return (expression ivec2 max (expression ivec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))
+
+   (signature ivec3
+     (parameters
+       (declare (in) ivec3 arg0)
+       (declare (in) ivec3 arg1)
+       (declare (in) ivec3 arg2))
+     ((return (expression ivec3 max (expression ivec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))
+
+   (signature ivec4
+     (parameters
+       (declare (in) ivec4 arg0)
+       (declare (in) ivec4 arg1)
+       (declare (in) ivec4 arg2))
+     ((return (expression ivec4 max (expression ivec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))
+
+   (signature ivec2
+     (parameters
+       (declare (in) ivec2 arg0)
+       (declare (in) int arg1)
+       (declare (in) int arg2))
+     ((declare () ivec2 result)
+      (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)))
+      (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)))
+      (return (var_ref result))))
+
+   (signature ivec3
+     (parameters
+       (declare (in) ivec3 arg0)
+       (declare (in) int arg1)
+       (declare (in) int arg2))
+     ((declare () ivec3 result)
+      (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)))
+      (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)))
+      (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)))
+      (return (var_ref result))))
+
+   (signature ivec4
+     (parameters
+       (declare (in) ivec4 arg0)
+       (declare (in) int arg1)
+       (declare (in) int arg2))
+     ((declare () ivec4 result)
+      (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)))
+      (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)))
+      (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)))
+      (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)))
+      (return (var_ref result))))
+
+   (signature uint
+     (parameters
+       (declare (in) uint arg0)
+       (declare (in) uint arg1)
+       (declare (in) uint arg2))
+     ((return (expression uint max (expression uint min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))
+
+   (signature uvec2
+     (parameters
+       (declare (in) uvec2 arg0)
+       (declare (in) uvec2 arg1)
+       (declare (in) uvec2 arg2))
+     ((return (expression uvec2 max (expression uvec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))
+
+   (signature uvec3
+     (parameters
+       (declare (in) uvec3 arg0)
+       (declare (in) uvec3 arg1)
+       (declare (in) uvec3 arg2))
+     ((return (expression uvec3 max (expression uvec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))
+
+   (signature uvec4
+     (parameters
+       (declare (in) uvec4 arg0)
+       (declare (in) uvec4 arg1)
+       (declare (in) uvec4 arg2))
+     ((return (expression uvec4 max (expression uvec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))
+
+   (signature uvec2
+     (parameters
+       (declare (in) uvec2 arg0)
+       (declare (in) uint arg1)
+       (declare (in) uint arg2))
+     ((declare () uvec2 result)
+      (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)))
+      (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)))
+      (return (var_ref result))))
+
+   (signature uvec3
+     (parameters
+       (declare (in) uvec3 arg0)
+       (declare (in) uint arg1)
+       (declare (in) uint arg2))
+     ((declare () uvec3 result)
+      (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)))
+      (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)))
+      (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)))
+      (return (var_ref result))))
+
+   (signature uvec4
+     (parameters
+       (declare (in) uvec4 arg0)
+       (declare (in) uint arg1)
+       (declare (in) uint arg2))
+     ((declare () uvec4 result)
+      (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)))
+      (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)))
+      (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)))
+      (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)))
+      (return (var_ref result))))
+))
diff --git a/builtins/130/max b/builtins/130/max
new file mode 100644 (file)
index 0000000..45a6089
--- /dev/null
@@ -0,0 +1,127 @@
+((function max
+   (signature int
+     (parameters
+       (declare (in) int arg0)
+       (declare (in) int arg1))
+     ((return (expression int max (var_ref arg0) (var_ref arg1)))))
+
+   (signature ivec2
+     (parameters
+       (declare (in) ivec2 arg0)
+       (declare (in) ivec2 arg1))
+     ((return (expression ivec2 max (var_ref arg0) (var_ref arg1)))))
+
+   (signature ivec3
+     (parameters
+       (declare (in) ivec3 arg0)
+       (declare (in) ivec3 arg1))
+     ((return (expression ivec3 max (var_ref arg0) (var_ref arg1)))))
+
+   (signature ivec4
+     (parameters
+       (declare (in) ivec4 arg0)
+       (declare (in) ivec4 arg1))
+     ((return (expression ivec4 max (var_ref arg0) (var_ref arg1)))))
+
+   (signature ivec2
+     (parameters
+       (declare (in) ivec2  arg0)
+       (declare (in) int arg1))
+     ((declare () ivec2 result)
+      (assign (constant bool (1)) (swiz x (var_ref result))
+              (expression int max (swiz x (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz y (var_ref result))
+              (expression int max (swiz y (var_ref arg0)) (var_ref arg1)))
+      (return (var_ref result))))
+
+   (signature ivec3
+     (parameters
+       (declare (in) ivec3  arg0)
+       (declare (in) int arg1))
+     ((declare () ivec3 result)
+      (assign (constant bool (1)) (swiz x (var_ref result))
+              (expression int max (swiz x (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz y (var_ref result))
+              (expression int max (swiz y (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz z (var_ref result))
+              (expression int max (swiz z (var_ref arg0)) (var_ref arg1)))
+      (return (var_ref result))))
+
+   (signature ivec4
+     (parameters
+       (declare (in) ivec4  arg0)
+       (declare (in) int arg1))
+     ((declare () ivec4 result)
+      (assign (constant bool (1)) (swiz x (var_ref result))
+              (expression int max (swiz x (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz y (var_ref result))
+              (expression int max (swiz y (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz z (var_ref result))
+              (expression int max (swiz z (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz w (var_ref result))
+              (expression int max (swiz w (var_ref arg0)) (var_ref arg1)))
+      (return (var_ref result))))
+
+   (signature uint
+     (parameters
+       (declare (in) uint arg0)
+       (declare (in) uint arg1))
+     ((return (expression uint max (var_ref arg0) (var_ref arg1)))))
+
+   (signature uvec2
+     (parameters
+       (declare (in) uvec2 arg0)
+       (declare (in) uvec2 arg1))
+     ((return (expression uvec2 max (var_ref arg0) (var_ref arg1)))))
+
+   (signature uvec3
+     (parameters
+       (declare (in) uvec3 arg0)
+       (declare (in) uvec3 arg1))
+     ((return (expression uvec3 max (var_ref arg0) (var_ref arg1)))))
+
+   (signature uvec4
+     (parameters
+       (declare (in) uvec4 arg0)
+       (declare (in) uvec4 arg1))
+     ((return (expression uvec4 max (var_ref arg0) (var_ref arg1)))))
+
+   (signature uvec2
+     (parameters
+       (declare (in) uvec2  arg0)
+       (declare (in) uint arg1))
+     ((declare () uvec2 result)
+      (assign (constant bool (1)) (swiz x (var_ref result))
+              (expression uint max (swiz x (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz y (var_ref result))
+              (expression uint max (swiz y (var_ref arg0)) (var_ref arg1)))
+      (return (var_ref result))))
+
+   (signature uvec3
+     (parameters
+       (declare (in) uvec3  arg0)
+       (declare (in) uint arg1))
+     ((declare () uvec3 result)
+      (assign (constant bool (1)) (swiz x (var_ref result))
+              (expression uint max (swiz x (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz y (var_ref result))
+              (expression uint max (swiz y (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz z (var_ref result))
+              (expression uint max (swiz z (var_ref arg0)) (var_ref arg1)))
+      (return (var_ref result))))
+
+   (signature uvec4
+     (parameters
+       (declare (in) uvec4  arg0)
+       (declare (in) uint arg1))
+     ((declare () uvec4 result)
+      (assign (constant bool (1)) (swiz x (var_ref result))
+              (expression uint max (swiz x (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz y (var_ref result))
+              (expression uint max (swiz y (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz z (var_ref result))
+              (expression uint max (swiz z (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz w (var_ref result))
+              (expression uint max (swiz w (var_ref arg0)) (var_ref arg1)))
+      (return (var_ref result))))
+))
diff --git a/builtins/130/min b/builtins/130/min
new file mode 100644 (file)
index 0000000..d98ec1e
--- /dev/null
@@ -0,0 +1,127 @@
+((function min
+   (signature int
+     (parameters
+       (declare (in) int arg0)
+       (declare (in) int arg1))
+     ((return (expression int min (var_ref arg0) (var_ref arg1)))))
+
+   (signature ivec2
+     (parameters
+       (declare (in) ivec2 arg0)
+       (declare (in) ivec2 arg1))
+     ((return (expression ivec2 min (var_ref arg0) (var_ref arg1)))))
+
+   (signature ivec3
+     (parameters
+       (declare (in) ivec3 arg0)
+       (declare (in) ivec3 arg1))
+     ((return (expression ivec3 min (var_ref arg0) (var_ref arg1)))))
+
+   (signature ivec4
+     (parameters
+       (declare (in) ivec4 arg0)
+       (declare (in) ivec4 arg1))
+     ((return (expression ivec4 min (var_ref arg0) (var_ref arg1)))))
+
+   (signature ivec2
+     (parameters
+       (declare (in) ivec2  arg0)
+       (declare (in) int arg1))
+     ((declare () ivec2 result)
+      (assign (constant bool (1)) (swiz x (var_ref result))
+              (expression int min (swiz x (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz y (var_ref result))
+              (expression int min (swiz y (var_ref arg0)) (var_ref arg1)))
+      (return (var_ref result))))
+
+   (signature ivec3
+     (parameters
+       (declare (in) ivec3  arg0)
+       (declare (in) int arg1))
+     ((declare () ivec3 result)
+      (assign (constant bool (1)) (swiz x (var_ref result))
+              (expression int min (swiz x (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz y (var_ref result))
+              (expression int min (swiz y (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz z (var_ref result))
+              (expression int min (swiz z (var_ref arg0)) (var_ref arg1)))
+      (return (var_ref result))))
+
+   (signature ivec4
+     (parameters
+       (declare (in) ivec4  arg0)
+       (declare (in) int arg1))
+     ((declare () ivec4 result)
+      (assign (constant bool (1)) (swiz x (var_ref result))
+              (expression int min (swiz x (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz y (var_ref result))
+              (expression int min (swiz y (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz z (var_ref result))
+              (expression int min (swiz z (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz w (var_ref result))
+              (expression int min (swiz w (var_ref arg0)) (var_ref arg1)))
+      (return (var_ref result))))
+
+   (signature uint
+     (parameters
+       (declare (in) uint arg0)
+       (declare (in) uint arg1))
+     ((return (expression uint min (var_ref arg0) (var_ref arg1)))))
+
+   (signature uvec2
+     (parameters
+       (declare (in) uvec2 arg0)
+       (declare (in) uvec2 arg1))
+     ((return (expression uvec2 min (var_ref arg0) (var_ref arg1)))))
+
+   (signature uvec3
+     (parameters
+       (declare (in) uvec3 arg0)
+       (declare (in) uvec3 arg1))
+     ((return (expression uvec3 min (var_ref arg0) (var_ref arg1)))))
+
+   (signature uvec4
+     (parameters
+       (declare (in) uvec4 arg0)
+       (declare (in) uvec4 arg1))
+     ((return (expression uvec4 min (var_ref arg0) (var_ref arg1)))))
+
+   (signature uvec2
+     (parameters
+       (declare (in) uvec2  arg0)
+       (declare (in) uint arg1))
+     ((declare () uvec2 result)
+      (assign (constant bool (1)) (swiz x (var_ref result))
+              (expression uint min (swiz x (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz y (var_ref result))
+              (expression uint min (swiz y (var_ref arg0)) (var_ref arg1)))
+      (return (var_ref result))))
+
+   (signature uvec3
+     (parameters
+       (declare (in) uvec3  arg0)
+       (declare (in) uint arg1))
+     ((declare () uvec3 result)
+      (assign (constant bool (1)) (swiz x (var_ref result))
+              (expression uint min (swiz x (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz y (var_ref result))
+              (expression uint min (swiz y (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz z (var_ref result))
+              (expression uint min (swiz z (var_ref arg0)) (var_ref arg1)))
+      (return (var_ref result))))
+
+   (signature uvec4
+     (parameters
+       (declare (in) uvec4  arg0)
+       (declare (in) uint arg1))
+     ((declare () uvec4 result)
+      (assign (constant bool (1)) (swiz x (var_ref result))
+              (expression uint min (swiz x (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz y (var_ref result))
+              (expression uint min (swiz y (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz z (var_ref result))
+              (expression uint min (swiz z (var_ref arg0)) (var_ref arg1)))
+      (assign (constant bool (1)) (swiz w (var_ref result))
+              (expression uint min (swiz w (var_ref arg0)) (var_ref arg1)))
+      (return (var_ref result))))
+))