tu: Split loading immediates for a program from the program config.

This moves the immediates load down a bit, so we can continue the CRB
conversion of program config.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38762>
This commit is contained in:
Emma Anholt 2025-12-08 11:01:17 -08:00 committed by Marge Bot
parent 5f091af897
commit 780de476e7
3 changed files with 23 additions and 0 deletions

View file

@ -883,6 +883,9 @@ r3d_common(struct tu_cmd_buffer *cmd, struct tu_cs *cs, enum r3d_type type,
tu6_emit_xs(cs, MESA_SHADER_VERTEX, vs, &pvtmem, vs_iova);
tu6_emit_xs(cs, MESA_SHADER_FRAGMENT, fs, &pvtmem, fs_iova);
tu6_emit_xs_constants(cs, MESA_SHADER_VERTEX, vs, vs_iova);
tu6_emit_xs_constants(cs, MESA_SHADER_FRAGMENT, fs, fs_iova);
tu_cs_emit_regs(cs, PC_CNTL(CHIP));
if (CHIP == A7XX) {
tu_cs_emit_regs(cs, VPC_PC_CNTL(CHIP));

View file

@ -1662,6 +1662,17 @@ tu6_emit_xs(struct tu_cs *cs,
tu_cs_emit_pkt4(cs, cfg->reg_sp_xs_vgpr_config, 1);
tu_cs_emit(cs, 0);
}
}
void
tu6_emit_xs_constants(
struct tu_cs *cs,
mesa_shader_stage stage, /* xs->type, but xs may be NULL */
const struct ir3_shader_variant *xs,
uint64_t binary_iova)
{
if (!xs)
return;
if (cs->device->physical_device->info->chip == A6XX) {
uint32_t shader_preload_size =
@ -1778,6 +1789,7 @@ tu6_emit_cs_config(struct tu_cs *cs,
tu6_emit_xs_config<CHIP>(crb, MESA_SHADER_COMPUTE, v);
}
tu6_emit_xs(cs, MESA_SHADER_COMPUTE, v, pvtmem, binary_iova);
tu6_emit_xs_constants(cs, MESA_SHADER_COMPUTE, v, binary_iova);
tu_crb crb = cs->crb(0);
@ -2409,6 +2421,8 @@ tu6_emit_variant(struct tu_cs *cs,
default:
UNREACHABLE("unknown shader stage");
}
tu6_emit_xs_constants(cs, stage, xs, binary_iova);
}
static VkResult

View file

@ -158,6 +158,12 @@ tu6_emit_xs(struct tu_cs *cs,
const struct tu_pvtmem_config *pvtmem,
uint64_t binary_iova);
void
tu6_emit_xs_constants(struct tu_cs *cs,
mesa_shader_stage stage,
const struct ir3_shader_variant *xs,
uint64_t binary_iova);
template <chip CHIP>
void
tu6_emit_vs(struct tu_cs *cs, const struct ir3_shader_variant *vs,