v3d: adds an extra MOV for any sig.ld*
authorAlejandro Piñeiro <apinheiro@igalia.com>
Tue, 19 Nov 2019 10:13:15 +0000 (11:13 +0100)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Wed, 20 Nov 2019 10:21:16 +0000 (11:21 +0100)
commitb4bc59e37ec0969d70e87d233e4e82431ec2e092
tree34a258f757a27473065116fda723c150a0bc1529
parentd983055184320a843d0f056b4c0f7af53cff47ab
v3d: adds an extra MOV for any sig.ld*

Specifically when we are in non-uniform control flow, as we would need
to set the condition for the last instruction. If (for example) a
image atomic load stores directly their value on a NIR register,
last_inst would be a nop, and would fail when set the condition.

Fixes piglit test:
spec/glsl-es-3.10/execution/cs-ssbo-atomic-if-else-2.shader_test

Fixes: 6281f26f064ada ("v3d: Add support for shader_image_load_store.")
v2: (Changes suggested by Eric Anholt)
   * Cover all sig.ld* signals, not just ldunif and ldtmu, as all of
     them have the same restriction.
   * Update comment explaining why we add a MOV in that case
   * Tweak commit message.

v3:
   * Drop extra set of parens (Eric)
   * Add missing ld signal to is_ld_signal to fix shader-db regression.

Reviewed-by: Eric Anholt <eric@anholt.net>
src/broadcom/compiler/nir_to_vir.c