mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 03:28:09 +02:00
pan/midgard: Analyze load/store for swizzle propagation
If there's a nontrivial swizzle fed into an extra (shortened) argument, we bail on copyprop. No glmark changes (since it doesn't use fancy texturing/loads). Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
parent
9ae4d3653e
commit
24c91bb54b
1 changed files with 21 additions and 3 deletions
|
|
@ -52,13 +52,31 @@ midgard_opt_copy_prop(compiler_context *ctx, midgard_block *block)
|
|||
if (mir_nontrivial_source2_mod_simple(ins)) continue;
|
||||
if (mir_nontrivial_outmod(ins)) continue;
|
||||
|
||||
/* Texture ops have some weirdness around bias */
|
||||
/* Shortened arguments (bias for textures, extra load/store
|
||||
* arguments, etc.) do not get a swizzlw, only a start
|
||||
* component and even that is restricted. */
|
||||
|
||||
bool skip = false;
|
||||
|
||||
mir_foreach_instr_global(ctx, q) {
|
||||
if (q->ssa_args.src[1] != to) continue;
|
||||
if (q->type == TAG_TEXTURE_4) skip = true;
|
||||
bool is_tex = q->type == TAG_TEXTURE_4;
|
||||
bool is_ldst = q->type == TAG_LOAD_STORE_4;
|
||||
|
||||
if (!(is_tex || is_ldst)) continue;
|
||||
|
||||
/* For textures, we get one real swizzle. For stores,
|
||||
* we also get one. For loads, we get none. */
|
||||
|
||||
unsigned start =
|
||||
is_tex ? 1 :
|
||||
OP_IS_STORE(q->load_store.op) ? 1 : 0;
|
||||
|
||||
mir_foreach_src(q, s) {
|
||||
if ((s >= start) && q->ssa_args.src[s] == to) {
|
||||
skip = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (skip)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue