Browse Source

Implement "sign" builtin via a new expression operator.

tags/mesa-7.9-rc1
Kenneth Graunke 16 years ago
parent
commit
a4b7b5a654
4 changed files with 71 additions and 0 deletions
  1. 34
    0
      builtins/110/sign
  2. 34
    0
      builtins/130/sign
  3. 2
    0
      ir.cpp
  4. 1
    0
      ir.h

+ 34
- 0
builtins/110/sign View File

@@ -0,0 +1,34 @@
((function sign
(signature float
(parameters
(declare (in) float x))
((return (expression float sign (var_ref x)))))

(signature vec2
(parameters
(declare (in) vec2 x))
((declare () vec2 t)
(assign (constant bool (1)) (swiz x (var_ref t)) (expression float sign (swiz x (var_ref x))))
(assign (constant bool (1)) (swiz y (var_ref t)) (expression float sign (swiz y (var_ref x))))
(return (var_ref t))))

(signature vec3
(parameters
(declare (in) vec3 x))
((declare () vec3 t)
(assign (constant bool (1)) (swiz x (var_ref t)) (expression float sign (swiz x (var_ref x))))
(assign (constant bool (1)) (swiz y (var_ref t)) (expression float sign (swiz y (var_ref x))))
(assign (constant bool (1)) (swiz z (var_ref t)) (expression float sign (swiz z (var_ref x))))
(return (var_ref t))))

(signature vec4
(parameters
(declare (in) vec4 x))
((declare () vec4 t)
(assign (constant bool (1)) (swiz x (var_ref t)) (expression float sign (swiz x (var_ref x))))
(assign (constant bool (1)) (swiz y (var_ref t)) (expression float sign (swiz y (var_ref x))))
(assign (constant bool (1)) (swiz z (var_ref t)) (expression float sign (swiz z (var_ref x))))
(assign (constant bool (1)) (swiz w (var_ref t)) (expression float sign (swiz w (var_ref x))))
(return (var_ref t))))
))


+ 34
- 0
builtins/130/sign View File

@@ -0,0 +1,34 @@
((function sign
(signature int
(parameters
(declare (in) int x))
((return (expression int / (var_ref x) (expression int abs (var_ref x))))))

(signature ivec2
(parameters
(declare (in) ivec2 x))
((declare () ivec2 t)
(assign (constant bool (1)) (swiz x (var_ref t)) (expression int sign (swiz x (var_ref x))))
(assign (constant bool (1)) (swiz y (var_ref t)) (expression int sign (swiz y (var_ref x))))
(return (var_ref t))))

(signature ivec3
(parameters
(declare (in) ivec3 x))
((declare () ivec3 t)
(assign (constant bool (1)) (swiz x (var_ref t)) (expression int sign (swiz x (var_ref x))))
(assign (constant bool (1)) (swiz y (var_ref t)) (expression int sign (swiz y (var_ref x))))
(assign (constant bool (1)) (swiz z (var_ref t)) (expression int sign (swiz z (var_ref x))))
(return (var_ref t))))

(signature ivec4
(parameters
(declare (in) ivec4 x))
((declare () ivec4 t)
(assign (constant bool (1)) (swiz x (var_ref t)) (expression int sign (swiz x (var_ref x))))
(assign (constant bool (1)) (swiz y (var_ref t)) (expression int sign (swiz y (var_ref x))))
(assign (constant bool (1)) (swiz z (var_ref t)) (expression int sign (swiz z (var_ref x))))
(assign (constant bool (1)) (swiz w (var_ref t)) (expression int sign (swiz w (var_ref x))))
(return (var_ref t))))
))


+ 2
- 0
ir.cpp View File

@@ -53,6 +53,7 @@ ir_expression::get_num_operands(ir_expression_operation op)
1, /* ir_unop_logic_not */
1, /* ir_unop_neg */
1, /* ir_unop_abs */
1, /* ir_unop_sign */
1, /* ir_unop_rcp */
1, /* ir_unop_rsq */
1, /* ir_unop_sqrt */
@@ -112,6 +113,7 @@ static const char *const operator_strs[] = {
"!",
"neg",
"abs",
"sign",
"rcp",
"rsq",
"sqrt",

+ 1
- 0
ir.h View File

@@ -424,6 +424,7 @@ enum ir_expression_operation {
ir_unop_logic_not,
ir_unop_neg,
ir_unop_abs,
ir_unop_sign,
ir_unop_rcp,
ir_unop_rsq,
ir_unop_sqrt,

Loading…
Cancel
Save