[Mesa-dev] [PATCH 7/7] glsl: Add support for constant expression evaluation on round(), roundEven().

Kenneth Graunke kenneth at whitecape.org
Wed Sep 28 01:06:14 PDT 2011


On 09/27/2011 03:08 PM, Eric Anholt wrote:
> They're both implemented the same in GLSL IR (since round() has
> undefined behavior for N.5).
> 
> Fixes glsl-1.30/compiler/built-in-functions/round*
> ---
>  src/glsl/ir_constant_expression.cpp |   10 ++++++++++
>  1 files changed, 10 insertions(+), 0 deletions(-)
> 
> diff --git a/src/glsl/ir_constant_expression.cpp b/src/glsl/ir_constant_expression.cpp
> index b3fe6cf..59a7e67 100644
> --- a/src/glsl/ir_constant_expression.cpp
> +++ b/src/glsl/ir_constant_expression.cpp
> @@ -196,6 +196,13 @@ ir_expression::constant_expression_value()
>        }
>        break;
>  
> +   case ir_unop_round_even:
> +      assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
> +      for (unsigned c = 0; c < op[0]->type->components(); c++) {
> +	 data.f[c] = rint(op[0]->value.f[c]);

It's not obvious to me that rint() rounds correctly.



More information about the mesa-dev mailing list