mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 14:50:10 +01:00
freedreno/ir3: fix for array/reg store vs meta instructions
fishgl.com has a shader which does roughly:
foo = texture(...);
if (bar)
foo = texture(...);
after lowering phi webs to regs we end up w/ a vec4 reg (array). But
since it was not an indirect access, we try to skip the extra mov. This
results that the per-component fanout (split) meta instructions store
directly to the reg (array). Which doesn't work out in RA.
Signed-off-by: Rob Clark <robdclark@chromium.org>
This commit is contained in:
parent
f7b6a8d12f
commit
73cc2dc084
1 changed files with 4 additions and 1 deletions
|
|
@ -530,8 +530,11 @@ ir3_create_array_store(struct ir3_context *ctx, struct ir3_array *arr, int n,
|
|||
|
||||
/* if not relative store, don't create an extra mov, since that
|
||||
* ends up being difficult for cp to remove.
|
||||
*
|
||||
* Also, don't skip the mov if the src is meta (like fanout/split),
|
||||
* since that creates a situation that RA can't really handle properly.
|
||||
*/
|
||||
if (!address) {
|
||||
if (!address && !is_meta(src)) {
|
||||
dst = src->regs[0];
|
||||
|
||||
src->barrier_class |= IR3_BARRIER_ARRAY_W;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue