X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fglsl%2Fgl_nir_link_uniform_initializers.c;h=1c4529c9307088bd3604145ffb732200c44fdc60;hb=9950523368026f900fe901eb5921fd2283e5280c;hp=59ebdbd12e898d275cf466d04dc8f9924f7f42ea;hpb=b019fe8a5b6cba6c6cefe62718b682da451e699e;p=mesa.git diff --git a/src/compiler/glsl/gl_nir_link_uniform_initializers.c b/src/compiler/glsl/gl_nir_link_uniform_initializers.c index 59ebdbd12e8..1c4529c9307 100644 --- a/src/compiler/glsl/gl_nir_link_uniform_initializers.c +++ b/src/compiler/glsl/gl_nir_link_uniform_initializers.c @@ -121,29 +121,34 @@ copy_constant_to_storage(union gl_constant_value *storage, unsigned dmul = glsl_base_type_is_64bit(base_type) ? 2 : 1; int i = 0; - for (unsigned int column = 0; column < n_columns; column++) { + if (n_columns > 1) { + const struct glsl_type *column_type = glsl_get_column_type(type); + for (unsigned int column = 0; column < n_columns; column++) { + copy_constant_to_storage(&storage[i], val->elements[column], + column_type, boolean_true); + i += n_rows * dmul; + } + } else { for (unsigned int row = 0; row < n_rows; row++) { switch (base_type) { case GLSL_TYPE_UINT: - storage[i].u = val->values[column][row].u32; + storage[i].u = val->values[row].u32; break; case GLSL_TYPE_INT: case GLSL_TYPE_SAMPLER: - storage[i].i = val->values[column][row].i32; + storage[i].i = val->values[row].i32; break; case GLSL_TYPE_FLOAT: - storage[i].f = val->values[column][row].f32; + storage[i].f = val->values[row].f32; break; case GLSL_TYPE_DOUBLE: case GLSL_TYPE_UINT64: case GLSL_TYPE_INT64: /* XXX need to check on big-endian */ - memcpy(&storage[i * 2].u, - &val->values[column][row].f64, - sizeof(double)); + memcpy(&storage[i].u, &val->values[row].f64, sizeof(double)); break; case GLSL_TYPE_BOOL: - storage[i].b = val->values[column][row].u32 ? boolean_true : 0; + storage[i].b = val->values[row].u32 ? boolean_true : 0; break; case GLSL_TYPE_ARRAY: case GLSL_TYPE_STRUCT: @@ -290,4 +295,7 @@ gl_nir_set_uniform_initializers(struct gl_context *ctx, } } } + memcpy(prog->data->UniformDataDefaults, prog->data->UniformDataSlots, + sizeof(union gl_constant_value) * prog->data->NumUniformDataSlots); + }