[Mesa-dev] [PATCH] glsl: support unsigned increment in ir_loop controls

Ian Romanick idr at freedesktop.org
Wed Aug 6 07:46:45 PDT 2014


On 07/30/2014 04:11 AM, Tapani Pälli wrote:
> Current version can create ir_expression where operands have
> different base type, patch adds support for unsigned type.
> 
> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> https://bugs.freedesktop.org/show_bug.cgi?id=80880
> ---
>  src/glsl/loop_controls.cpp | 18 +++++++++++++++---
>  1 file changed, 15 insertions(+), 3 deletions(-)
> 
> diff --git a/src/glsl/loop_controls.cpp b/src/glsl/loop_controls.cpp
> index 36b49eb..419f9c1 100644
> --- a/src/glsl/loop_controls.cpp
> +++ b/src/glsl/loop_controls.cpp
> @@ -123,9 +123,21 @@ calculate_iterations(ir_rvalue *from, ir_rvalue *to, ir_rvalue *increment,
>     bool valid_loop = false;
>  
>     for (unsigned i = 0; i < Elements(bias); i++) {
> -      iter = (increment->type->is_integer())
> -	 ? new(mem_ctx) ir_constant(iter_value + bias[i])
> -	 : new(mem_ctx) ir_constant(float(iter_value + bias[i]));
> +
> +      /* Increment may be of type int, uint or float. */
> +      switch (increment->type->base_type) {
> +      case GLSL_TYPE_INT:
> +         iter = new(mem_ctx) ir_constant(iter_value + bias[i]);
> +         break;
> +      case GLSL_TYPE_UINT:
> +         iter = new(mem_ctx) ir_constant(unsigned(iter_value + bias[i]));
> +         break;
> +      case GLSL_TYPE_FLOAT:
> +         iter = new(mem_ctx) ir_constant(float(iter_value + bias[i]));
> +         break;
> +      default:
> +	 assert(!"Unsupported type for loop iterator.");

Right... because this code was written when we only had int and
float types.

Two things:

  - Use spaces instead of tabs.  It looks like the surrounding code
    uses tabs, and that's my fault.  We're trying to fix that in new
    code.

  - Change the assert to unreachable("Unsupported type for loop iterator.")

With those fixed, this patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> +      }
>  
>        ir_expression *const mul =
>  	 new(mem_ctx) ir_expression(ir_binop_mul, increment->type, iter,
> 



More information about the mesa-dev mailing list