[Mesa-dev] GLSL builtins constant constructor

Ian Romanick idr at freedesktop.org
Mon Sep 5 14:43:47 PDT 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 09/04/2011 03:03 PM, Paul Berry wrote:
> On 4 September 2011 14:49, Ian Romanick <idr at freedesktop.org
> <mailto:idr at freedesktop.org>> wrote:
> 
>     -----BEGIN PGP SIGNED MESSAGE-----
>     Hash: SHA1
> 
>     On 09/04/2011 08:35 AM, Paul Berry wrote:
>     > On 4 September 2011 06:20, Christoph Bumiller
>     > <e0425955 at student.tuwien.ac.at
>     <mailto:e0425955 at student.tuwien.ac.at>
>     <mailto:e0425955 at student.tuwien.ac.at
>     <mailto:e0425955 at student.tuwien.ac.at>>>
>     > wrote:
>     >
>     >     I encountered some failures in piglit's tests of builtins
>     because a
>     >     vector constructor that is given only 1 single argument does not
>     >     replicate the argument into the yzw components, for example:
>     >
>     >     diff --git a/src/glsl/builtins/ir/cosh b/src/glsl/builtins/ir/cosh
>     >     index 45e0ae4..8bf3ad2 100644
>     >     --- a/src/glsl/builtins/ir/cosh
>     >     +++ b/src/glsl/builtins/ir/cosh
>     >     @@ -9,21 +9,21 @@
>     >        (signature vec2
>     >          (parameters
>     >            (declare (in) vec2 x))
>     >     -     ((return (expression vec2 * (constant vec2 (0.5))
>     >     +     ((return (expression vec2 * (constant vec2 (0.5, 0.5))
>     >                     (expression vec2 +
>     >                      (expression vec2 exp (var_ref x))
>     >                      (expression vec2 exp (expression vec2 neg
>     (var_ref
>     >     x))))))))
>     >        (signature vec3
>     >          (parameters
>     >            (declare (in) vec3 x))
>     >
>     >     Should the constructors or should all the builtin files be fixed ?
>     >
>     >
>     > Thanks for noticing this, Christoph.  I wrote the tests for hyperbolic
>     > trig functions a few weeks ago, and I've been waiting for some i965
>     > churn to settle down before looping back to fix the bugs.
>     >
>     > Personally, I'd prefer to fix this bug by making the constant a
>     scalar,
>     > like this:
> 
>     I don't recall for sure, but, while that is valid GLSL, I don't think
>     that's valid in the IR.  Did you try it?  I think you may have to wrap
>     it in a swizzle, at which point it's probably better to use the correct
>     vec# constructor.
> 
> 
> Yes, I did try it, and it worked just fine.  Furthermore, the code in
> ir_validate.cpp seems to indicate that multiplying a scalar by a vector
> is allowed in GLSL IR:

Call me convinced.  Using float constants is preferable to vector
constants with replicated components.

>    case ir_binop_add:
>    case ir_binop_sub:
>    case ir_binop_mul:
>    case ir_binop_div:
>    case ir_binop_mod:
>    case ir_binop_min:
>    case ir_binop_max:
>    case ir_binop_pow:
>       if (ir->operands[0]->type->is_scalar())
>      assert(ir->operands[1]->type == ir->type);
>       else if (ir->operands[1]->type->is_scalar())
>      assert(ir->operands[0]->type == ir->type);
>       else if (ir->operands[0]->type->is_vector() &&
>            ir->operands[1]->type->is_vector()) {
>      assert(ir->operands[0]->type == ir->operands[1]->type);
>      assert(ir->operands[0]->type == ir->type);
>       }
>       break;
> 
> Also, as I noted in my previous email, this is what we do in several
> other built-in functions, such as asin:
> 
>    (signature vec2
>      (parameters
>        (declare (in) vec2 x))
>      ((return (expression vec2 *
>            (expression vec2 sign (var_ref x))
>            (expression vec2 -
>         (constant float (1.5707964))
>         (expression vec2 *
>          (expression vec2 sqrt
>           (expression vec2 -
>            (constant float (1.0))
>            (expression vec2 abs (var_ref x))))
>          (expression vec2 +
>           (constant float (1.5707964))
>           (expression vec2 *
>            (expression vec2 abs (var_ref x))
>            (expression vec2 +
>             (constant float (-0.21460183))
>             (expression vec2 *
>              (expression vec2 abs (var_ref x))
>                      (expression vec2 +
>                       (constant float (0.086566724))
>                       (expression vec2 *
>                        (expression vec2 abs (var_ref x))
>                        (constant float (-0.03102955))
>              ))))))))))))
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/

iEYEARECAAYFAk5lQpMACgkQX1gOwKyEAw+aTwCfcYdLH6ASpmq2raZcZe+ysBZr
1dAAniYEsG+CSKK89cQdq5o0z9PZw2Lt
=L6gM
-----END PGP SIGNATURE-----


More information about the mesa-dev mailing list