[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