mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
glsl: emit row_major matrix's SSBO stores only for components in writemask
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. Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com> Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
This commit is contained in:
parent
a552b77dcc
commit
f42466322a
1 changed files with 6 additions and 0 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue