mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-29 11:40:31 +01:00
ir3: Make sure constlen includes stc/ldc.k/ldg.k instructions
nir_opt_preamble sometimes adds useless expressions, in which case we may have stc instructions and no corresponding use of the constant. Things can go sideways when these aren't included in the constlen, so far only observed when earlypreamble is enabled. Fixes:ccc64b7e00("ir3: Plumb through store_uniform_ir3 intrinsic") Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29903> (cherry picked from commitc42f6597f9)
This commit is contained in:
parent
a7e26d7c84
commit
7da5835003
2 changed files with 18 additions and 1 deletions
|
|
@ -244,7 +244,7 @@
|
|||
"description": "ir3: Make sure constlen includes stc/ldc.k/ldg.k instructions",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "ccc64b7e00b69ce3b0e20df6cf6b6ad68e7c9f79",
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -907,6 +907,12 @@ emit_intrinsic_copy_ubo_to_uniform(struct ir3_context *ctx,
|
|||
|
||||
ir3_instr_set_address(ldc, addr1);
|
||||
|
||||
/* The assembler isn't aware of what value a1.x has, so make sure that
|
||||
* constlen includes the ldc.k here.
|
||||
*/
|
||||
ctx->so->constlen =
|
||||
MAX2(ctx->so->constlen, DIV_ROUND_UP(base + size * 4, 4));
|
||||
|
||||
array_insert(b, b->keeps, ldc);
|
||||
}
|
||||
|
||||
|
|
@ -940,6 +946,12 @@ emit_intrinsic_copy_global_to_uniform(struct ir3_context *ctx,
|
|||
ldg->flags |= IR3_INSTR_A1EN;
|
||||
}
|
||||
|
||||
/* The assembler isn't aware of what value a1.x has, so make sure that
|
||||
* constlen includes the ldg.k here.
|
||||
*/
|
||||
ctx->so->constlen =
|
||||
MAX2(ctx->so->constlen, DIV_ROUND_UP(dst + size * 4, 4));
|
||||
|
||||
array_insert(b, b->keeps, ldg);
|
||||
}
|
||||
|
||||
|
|
@ -2772,6 +2784,11 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
ir3_instr_set_address(stc, a1);
|
||||
stc->flags |= IR3_INSTR_A1EN;
|
||||
}
|
||||
/* The assembler isn't aware of what value a1.x has, so make sure that
|
||||
* constlen includes the stc here.
|
||||
*/
|
||||
ctx->so->constlen =
|
||||
MAX2(ctx->so->constlen, DIV_ROUND_UP(dst + components, 4));
|
||||
array_insert(b, b->keeps, stc);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue