[Mesa-dev] [PATCH 3/6] glsl: Generalize compute_packing_order for varying structs.

Ian Romanick idr at freedesktop.org
Wed Jan 23 07:38:33 PST 2013


On 01/21/2013 05:16 PM, Paul Berry wrote:
> This patch paves the way for allowing varying structs by generalizing
> varying_matches::compute_packing_order to handle any type of varying.
> Previously, we packed in the order (vec4, vec2, float, vec3), with
> matrices being packed according to the size of their columns.  Now, we
> pack everything according to its number of components mod 4, in the
> order (0, 2, 1, 3).
>
> There is no behavioural change for vectors.  Matrices are now packed
> slightly more sensibly (e.g. a mat2 is now packed with vec4's, which
> guarantees that it will occupy a single varying slot, whereas it
> previously was packed with vec2's, which meant that it might get split
> across two adjacent slots).
> ---
>   src/glsl/link_varyings.cpp | 5 ++---
>   1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/src/glsl/link_varyings.cpp b/src/glsl/link_varyings.cpp
> index 5a3240b..d8f501c 100644
> --- a/src/glsl/link_varyings.cpp
> +++ b/src/glsl/link_varyings.cpp
> @@ -804,16 +804,15 @@ varying_matches::compute_packing_order(ir_variable *var)
>   {
>      const glsl_type *element_type = var->type;
>
> -   /* FINISHME: Support for "varying" records in GLSL 1.50. */
>      while (element_type->base_type == GLSL_TYPE_ARRAY) {
>         element_type = element_type->fields.array;
>      }
>
> -   switch (element_type->vector_elements) {
> +   switch (element_type->component_slots() % 4) {

Will this produce the same result for all matrix types as well?  I think 
a mat2x3 would be 3 in the old scheme, but 2 in the new scheme.  Right?

>      case 1: return PACKING_ORDER_SCALAR;
>      case 2: return PACKING_ORDER_VEC2;
>      case 3: return PACKING_ORDER_VEC3;
> -   case 4: return PACKING_ORDER_VEC4;
> +   case 0: return PACKING_ORDER_VEC4;
>      default:
>         assert(!"Unexpected value of vector_elements");
>         return PACKING_ORDER_VEC4;
>



More information about the mesa-dev mailing list