On 02/06/2015 06:56 AM, Ilia Mirkin wrote:
> From: Dave Airlie <airl...@gmail.com>
> 
> Signed-off-by: Dave Airlie <airl...@redhat.com>
> ---
>  src/glsl/link_uniforms.cpp | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
> index de2f6c9..0a4dac2 100644
> --- a/src/glsl/link_uniforms.cpp
> +++ b/src/glsl/link_uniforms.cpp
> @@ -51,6 +51,9 @@ values_for_type(const glsl_type *type)
>        return 1;
>     } else if (type->is_array() && type->fields.array->is_sampler()) {
>        return type->array_size();
> +   } else if ((type->is_array() && type->fields.array->is_double()) ||
> +              type->is_double()) {
> +      return 2 * type->component_slots();
>     } else {
>        return type->component_slots();
>     }
> @@ -608,7 +611,9 @@ private:
>        }
>  
>        if (type->without_array()->is_matrix()) {
> -         this->uniforms[id].matrix_stride = 16;
> +            unsigned N = type->base_type == GLSL_TYPE_DOUBLE ? 8 : 4;
> +            unsigned items = row_major ? type->matrix_columns : 
> type->vector_elements;
> +            this->uniforms[id].matrix_stride = glsl_align(items * N, 16);

Could we add an assert that matrix_stride is either 16 or 32?  The
value is always 16 if GLSL_TYPE_FLOAT or items <= 2, and it's 32
otherwise.  I'm on the fence whether it's better to just do that
explicitly:

    const unsigned items = row_major ? type->matrix_columns : 
type->vector_elements;
    this->uniforms[id].matrix_stride = (type->base_type == GLSL_TYPE_FLOAT || 
items <= 2) ? 16 : 32;

Thoughts?

>           this->uniforms[id].row_major = row_major;
>        } else {
>           this->uniforms[id].matrix_stride = 0;
> 

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to