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

Reply via email to