[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