[Mesa-dev] [PATCH] glsl: emit row_major matrix's SSBO stores only for components in writemask

Iago Toral itoral at igalia.com
Thu Oct 1 04:42:25 PDT 2015


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 <itoral at igalia.com>

> Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at 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) {




More information about the mesa-dev mailing list