On Thu, 2015-10-01 at 09:41 +0200, Samuel Iglesias Gonsalvez wrote: > When writing to a column of a row-major matrix, each component of the > vector is stored to non-consecutive memory addresses, so we generate > one instruction per component. > > This patch skips the disabled components in the writemask, saving some > store instructions plus avoid storing wrong data on each disabled > component.
Reviewed-by: Iago Toral Quiroga <ito...@igalia.com> > Signed-off-by: Samuel Iglesias Gonsalvez <sigles...@igalia.com> > --- > src/glsl/lower_ubo_reference.cpp | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/src/glsl/lower_ubo_reference.cpp > b/src/glsl/lower_ubo_reference.cpp > index e581306..247620e 100644 > --- a/src/glsl/lower_ubo_reference.cpp > +++ b/src/glsl/lower_ubo_reference.cpp > @@ -754,6 +754,12 @@ lower_ubo_reference_visitor::emit_access(bool is_write, > add(base_offset, > new(mem_ctx) ir_constant(deref_offset + i * matrix_stride)); > if (is_write) { > + /* If the component is not in the writemask, then don't > + * store any value. > + */ > + if (!((1 << i) & write_mask)) > + continue; > + > base_ir->insert_after(ssbo_store(swizzle(deref, i, 1), > chan_offset, 1)); > } else { > if (!this->is_shader_storage) { _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev