On 21/09/15 09:41, Tapani Pälli wrote: > Seems like a nice fix, takes ES3 CTS failures from 116 to 64 on Haswell > (most failing tests are with ubos). > > Tested-by: Tapani Pälli <tapani.pa...@intel.com> >
OK thanks! > This is individual patch not related to just SSBOs, maybe this could be > pushed separately from the rest? > Yes, this patch can be pushed separately from the rest of patches of the series: we just need an R-b, as usual. We are going to discuss the proper solution with Timothy [0], as he found that we are not covering one case. Sam [0] https://bugs.freedesktop.org/show_bug.cgi?id=83508 > // Tapani > > On 09/10/2015 04:36 PM, Iago Toral Quiroga wrote: >> From: Antia Puentes <apuen...@igalia.com> >> >> Commit 1ca25ab (glsl: Do not eliminate 'shared' or 'std140' blocks >> or block members) considered as active 'shared' and 'std140' uniform >> blocks and uniform block arrays, but did not include the block array >> elements. Because of that, it was possible to have an active uniform >> block array without any elements marked as used, making the assertion >> ((b->num_array_elements > 0) == b->type->is_array()) >> in link_uniform_blocks() fail. >> >> Fixes the following 5 dEQP tests: >> >> * dEQP-GLES3.functional.ubo.random.nested_structs_instance_arrays.18 >> * dEQP-GLES3.functional.ubo.random.nested_structs_instance_arrays.24 >> * >> dEQP-GLES3.functional.ubo.random.nested_structs_arrays_instance_arrays.19 >> * dEQP-GLES3.functional.ubo.random.all_per_block_buffers.49 >> * dEQP-GLES3.functional.ubo.random.all_shared_buffer.36 >> >> Fixes bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=83508 >> --- >> src/glsl/link_uniform_block_active_visitor.cpp | 23 >> +++++++++++++++++++++++ >> 1 file changed, 23 insertions(+) >> >> diff --git a/src/glsl/link_uniform_block_active_visitor.cpp >> b/src/glsl/link_uniform_block_active_visitor.cpp >> index 5102947..fbe79de 100644 >> --- a/src/glsl/link_uniform_block_active_visitor.cpp >> +++ b/src/glsl/link_uniform_block_active_visitor.cpp >> @@ -106,6 +106,22 @@ >> link_uniform_block_active_visitor::visit(ir_variable *var) >> assert(b->num_array_elements == 0); >> assert(b->array_elements == NULL); >> assert(b->type != NULL); >> + assert(!b->type->is_array() || b->has_instance_name); >> + >> + /* For uniform block arrays declared with a shared or std140 layout >> + * qualifier, mark all its instances as used. >> + */ >> + if (b->type->is_array() && b->type->length > 0) { >> + b->num_array_elements = b->type->length; >> + b->array_elements = reralloc(this->mem_ctx, >> + b->array_elements, >> + unsigned, >> + b->num_array_elements); >> + >> + for (unsigned i = 0; i < b->num_array_elements; i++) { >> + b->array_elements[i] = i; >> + } >> + } >> >> return visit_continue; >> } >> @@ -147,6 +163,13 @@ >> link_uniform_block_active_visitor::visit_enter(ir_dereference_array *ir) >> assert((b->num_array_elements == 0) == (b->array_elements == NULL)); >> assert(b->type != NULL); >> >> + /* If the block array was declared with a shared or >> + * std140 layout qualifier, all its instances have been already >> marked >> + * as used in link_uniform_block_active_visitor::visit(ir_variable >> *). >> + */ >> + if (var->type->interface_packing != GLSL_INTERFACE_PACKING_PACKED) >> + return visit_continue_with_parent; >> + >> ir_constant *c = ir->array_index->as_constant(); >> >> if (c) { >> > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev