i965: fixup uniform setup for doubles
authorConnor Abbott <cwabbott0@gmail.com>
Mon, 2 Nov 2015 05:02:54 +0000 (00:02 -0500)
committerSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Tue, 10 May 2016 09:25:04 +0000 (11:25 +0200)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_nir_uniforms.cpp

index 636340add35f5d9e8a1ff36ecf98d6153ff7f9e8..15d99fa27386eb8da3d958b5fad64d7db2f43689 100644 (file)
@@ -104,6 +104,11 @@ brw_nir_setup_glsl_uniform(gl_shader_stage stage, nir_variable *var,
          unsigned vector_count = (MAX2(storage->array_elements, 1) *
                                   storage->type->matrix_columns);
          unsigned vector_size = storage->type->vector_elements;
+         unsigned max_vector_size = 4;
+         if (storage->type->base_type == GLSL_TYPE_DOUBLE) {
+            vector_size *= 2;
+            max_vector_size *= 2;
+         }
 
          for (unsigned s = 0; s < vector_count; s++) {
             unsigned i;
@@ -113,7 +118,7 @@ brw_nir_setup_glsl_uniform(gl_shader_stage stage, nir_variable *var,
 
             if (!is_scalar) {
                /* Pad out with zeros if needed (only needed for vec4) */
-               for (; i < 4; i++) {
+               for (; i < max_vector_size; i++) {
                   static const gl_constant_value zero = { 0.0 };
                   stage_prog_data->param[uniform_index++] = &zero;
                }