On Mon, Jul 21, 2014 at 3:28 PM, Matt Turner <matts...@gmail.com> wrote: > On Mon, Jul 21, 2014 at 2:04 PM, Ian Romanick <i...@freedesktop.org> wrote: >> From: Ian Romanick <ian.d.roman...@intel.com> >> >> Previously if a field of an block with an instance name was marked >> row-major (but block itself was not), we would think the field (and it's >> sub-fields) were column-major. >> >> Fixes gles3conform failures in: >> >> ES3-CTS.shaders.uniform_block.random.basic_types.7 >> ES3-CTS.shaders.uniform_block.random.basic_types.9 >> ES3-CTS.shaders.uniform_block.random.basic_instance_arrays.1 >> ES3-CTS.shaders.uniform_block.random.basic_instance_arrays.3 >> ES3-CTS.shaders.uniform_block.random.nested_structs.3 >> ES3-CTS.shaders.uniform_block.random.nested_structs.5 >> ES3-CTS.shaders.uniform_block.random.nested_structs.8 >> ES3-CTS.shaders.uniform_block.random.nested_structs_arrays.3 >> ES3-CTS.shaders.uniform_block.random.nested_structs_arrays.6 >> ES3-CTS.shaders.uniform_block.random.nested_structs_arrays.7 >> ES3-CTS.shaders.uniform_block.random.nested_structs_arrays.8 >> ES3-CTS.shaders.uniform_block.random.nested_structs_arrays.9 >> ES3-CTS.shaders.uniform_block.random.nested_structs_instance_arrays.0 >> ES3-CTS.shaders.uniform_block.random.nested_structs_instance_arrays.1 >> ES3-CTS.shaders.uniform_block.random.nested_structs_instance_arrays.2 >> ES3-CTS.shaders.uniform_block.random.nested_structs_instance_arrays.3 >> ES3-CTS.shaders.uniform_block.random.nested_structs_instance_arrays.4 >> ES3-CTS.shaders.uniform_block.random.nested_structs_instance_arrays.6 >> ES3-CTS.shaders.uniform_block.random.nested_structs_arrays_instance_arrays.0 >> ES3-CTS.shaders.uniform_block.random.nested_structs_arrays_instance_arrays.1 >> ES3-CTS.shaders.uniform_block.random.nested_structs_arrays_instance_arrays.5 >> ES3-CTS.shaders.uniform_block.random.all_per_block_buffers.0 >> ES3-CTS.shaders.uniform_block.random.all_per_block_buffers.4 >> ES3-CTS.shaders.uniform_block.random.all_per_block_buffers.7 >> ES3-CTS.shaders.uniform_block.random.all_per_block_buffers.8 >> ES3-CTS.shaders.uniform_block.random.all_per_block_buffers.12 >> ES3-CTS.shaders.uniform_block.random.all_per_block_buffers.14 >> ES3-CTS.shaders.uniform_block.random.all_per_block_buffers.15 >> ES3-CTS.shaders.uniform_block.random.all_per_block_buffers.16 >> ES3-CTS.shaders.uniform_block.random.all_shared_buffer.1 >> ES3-CTS.shaders.uniform_block.random.all_shared_buffer.8 >> ES3-CTS.shaders.uniform_block.random.all_shared_buffer.9 >> ES3-CTS.shaders.uniform_block.random.all_shared_buffer.10 >> ES3-CTS.shaders.uniform_block.random.all_shared_buffer.11 >> ES3-CTS.shaders.uniform_block.random.all_shared_buffer.13 >> ES3-CTS.shaders.uniform_block.random.all_shared_buffer.14 >> ES3-CTS.shaders.uniform_block.random.all_shared_buffer.15 >> ES3-CTS.shaders.uniform_block.random.all_shared_buffer.16 >> ES3-CTS.shaders.uniform_block.random.all_shared_buffer.17 >> >> Fixes gles3conform failures (caused by previous commits) in: >> >> ES3-CTS.shaders.uniform_block.random.basic_types.8 >> ES3-CTS.shaders.uniform_block.random.basic_arrays.3 >> ES3-CTS.shaders.uniform_block.random.basic_instance_arrays.0 >> ES3-CTS.shaders.uniform_block.random.basic_instance_arrays.2 >> ES3-CTS.shaders.uniform_block.random.all_per_block_buffers.9 >> ES3-CTS.shaders.uniform_block.random.all_per_block_buffers.13 >> ES3-CTS.shaders.uniform_block.random.all_per_block_buffers.18 >> ES3-CTS.shaders.uniform_block.random.all_shared_buffer.4 >> >> Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> >> --- >> src/glsl/lower_ubo_reference.cpp | 137 >> ++++++++++++++++++++++++++++++++++----- >> 1 file changed, 122 insertions(+), 15 deletions(-) >> >> diff --git a/src/glsl/lower_ubo_reference.cpp >> b/src/glsl/lower_ubo_reference.cpp >> index 99bfe97..0ee4e8a 100644 >> --- a/src/glsl/lower_ubo_reference.cpp >> +++ b/src/glsl/lower_ubo_reference.cpp >> @@ -40,6 +40,98 @@ >> >> using namespace ir_builder; >> >> +/** >> + * Determine if a thing being dereferenced is row-major >> + * >> + * There is some trickery here. >> + * >> + * If the thing being dereferenced is a member of uniform block \b without >> an >> + * instance name, then the name of the \c ir_variable is the field name of >> an >> + * interface type. If this field is row-major, then the thing referenced is >> + * row-major. >> + * >> + * If the thing being dereferenced is a member of uniform block \b with an >> + * instance name, then the last dereference in the tree will be an >> + * \c ir_dereference_record. If that record field is row-major, then the >> + * thing referenced is row-major. >> + */ >> +static bool >> +is_dereferenced_thing_row_major(const ir_dereference *deref) >> +{ >> + bool matrix = false; >> + const ir_rvalue *ir = deref; >> + >> + while (true) { >> + if (ir->type->is_matrix() >> + || (ir->type->is_array() && ir->type->fields.array->is_matrix())) > > Use your new function here.
Oh, you did, just in the next commit. Move that hunk to here, and you can drop the initializer of bool matrix. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev