mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 16:48:07 +02:00
aco: skip scratch init when no scratch arg provide
epilog does not use scratch so has no scratch arg. Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Signed-off-by: Qiang Yu <yuq825@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24442>
This commit is contained in:
parent
d3333609e6
commit
facbd13df1
1 changed files with 21 additions and 17 deletions
|
|
@ -10981,26 +10981,30 @@ add_startpgm(struct isel_context* ctx)
|
|||
}
|
||||
}
|
||||
|
||||
if (ctx->program->gfx_level < GFX9) {
|
||||
/* Stash these in the program so that they can be accessed later when
|
||||
* handling spilling.
|
||||
*/
|
||||
if (ctx->args->ring_offsets.used)
|
||||
ctx->program->private_segment_buffer = get_arg(ctx, ctx->args->ring_offsets);
|
||||
/* epilog has no scratch */
|
||||
if (ctx->args->scratch_offset.used) {
|
||||
if (ctx->program->gfx_level < GFX9) {
|
||||
/* Stash these in the program so that they can be accessed later when
|
||||
* handling spilling.
|
||||
*/
|
||||
if (ctx->args->ring_offsets.used)
|
||||
ctx->program->private_segment_buffer = get_arg(ctx, ctx->args->ring_offsets);
|
||||
|
||||
ctx->program->scratch_offset = get_arg(ctx, ctx->args->scratch_offset);
|
||||
} else if (ctx->program->gfx_level <= GFX10_3 && ctx->program->stage != raytracing_cs) {
|
||||
/* Manually initialize scratch. For RT stages scratch initialization is done in the prolog. */
|
||||
Operand scratch_offset = Operand(get_arg(ctx, ctx->args->scratch_offset));
|
||||
scratch_offset.setLateKill(true);
|
||||
ctx->program->scratch_offset = get_arg(ctx, ctx->args->scratch_offset);
|
||||
} else if (ctx->program->gfx_level <= GFX10_3 && ctx->program->stage != raytracing_cs) {
|
||||
/* Manually initialize scratch. For RT stages scratch initialization is done in the prolog.
|
||||
*/
|
||||
Operand scratch_offset = Operand(get_arg(ctx, ctx->args->scratch_offset));
|
||||
scratch_offset.setLateKill(true);
|
||||
|
||||
Operand scratch_addr = ctx->args->ring_offsets.used
|
||||
? Operand(get_arg(ctx, ctx->args->ring_offsets))
|
||||
: Operand(s2);
|
||||
Operand scratch_addr = ctx->args->ring_offsets.used
|
||||
? Operand(get_arg(ctx, ctx->args->ring_offsets))
|
||||
: Operand(s2);
|
||||
|
||||
Builder bld(ctx->program, ctx->block);
|
||||
bld.pseudo(aco_opcode::p_init_scratch, bld.def(s2), bld.def(s1, scc), scratch_addr,
|
||||
scratch_offset);
|
||||
Builder bld(ctx->program, ctx->block);
|
||||
bld.pseudo(aco_opcode::p_init_scratch, bld.def(s2), bld.def(s1, scc), scratch_addr,
|
||||
scratch_offset);
|
||||
}
|
||||
}
|
||||
|
||||
return startpgm;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue