mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 22:30:12 +01:00
radv/shader_info: rename gs_ring_info -> legacy_gs_info and use union with ngg_info
Reduces the size of radv_shader_info from 784 bytes to 760 bytes. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37931>
This commit is contained in:
parent
9b34da3da8
commit
e1bcbbf3dd
6 changed files with 23 additions and 16 deletions
|
|
@ -243,7 +243,7 @@ lower_abi_instr(nir_builder *b, nir_intrinsic_instr *intrin, void *state)
|
|||
replacement = ac_nir_load_arg(b, &s->args->ac, s->args->vgt_esgs_ring_itemsize);
|
||||
} else {
|
||||
const unsigned stride =
|
||||
s->info->is_ngg ? s->info->ngg_info.vgt_esgs_ring_itemsize : s->info->gs_ring_info.esgs_itemsize;
|
||||
s->info->is_ngg ? s->info->ngg_info.vgt_esgs_ring_itemsize : s->info->legacy_gs_info.esgs_itemsize;
|
||||
replacement = nir_imm_int(b, stride);
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ radv_calculate_lds_size(const struct radv_shader_info *radv, const enum amd_gfx_
|
|||
if (radv->is_ngg)
|
||||
lds_size = radv->nir_shared_size;
|
||||
else if (gfx_level >= GFX9 && radv->stage == MESA_SHADER_GEOMETRY)
|
||||
lds_size = radv->gs_ring_info.lds_size;
|
||||
lds_size = radv->legacy_gs_info.lds_size;
|
||||
else if (radv->stage == MESA_SHADER_TESS_CTRL)
|
||||
lds_size = radv->tcs.lds_size; /* only used by stats */
|
||||
else
|
||||
|
|
|
|||
|
|
@ -3313,7 +3313,7 @@ radv_emit_hw_gs(struct radv_cmd_buffer *cmd_buffer, const struct radv_shader *gs
|
|||
{
|
||||
const struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
|
||||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
const struct radv_legacy_gs_info *gs_state = &gs->info.gs_ring_info;
|
||||
const struct radv_legacy_gs_info *gs_state = &gs->info.legacy_gs_info;
|
||||
struct radv_cmd_stream *cs = cmd_buffer->cs;
|
||||
const uint64_t va = radv_shader_get_va(gs);
|
||||
|
||||
|
|
@ -7005,7 +7005,8 @@ gfx10_emit_ge_cntl(struct radv_cmd_buffer *cmd_buffer)
|
|||
break_wave_at_eoi = true;
|
||||
}
|
||||
} else if (radv_cmdbuf_has_stage(cmd_buffer, MESA_SHADER_GEOMETRY)) {
|
||||
const struct radv_legacy_gs_info *gs_state = &cmd_buffer->state.shaders[MESA_SHADER_GEOMETRY]->info.gs_ring_info;
|
||||
const struct radv_legacy_gs_info *gs_state =
|
||||
&cmd_buffer->state.shaders[MESA_SHADER_GEOMETRY]->info.legacy_gs_info;
|
||||
primgroup_size = gs_state->gs_prims_per_subgroup;
|
||||
} else {
|
||||
primgroup_size = 128; /* recommended without a GS and tess */
|
||||
|
|
@ -8364,8 +8365,12 @@ radv_bind_geometry_shader(struct radv_cmd_buffer *cmd_buffer, const struct radv_
|
|||
{
|
||||
radv_bind_pre_rast_shader(cmd_buffer, gs);
|
||||
|
||||
cmd_buffer->esgs_ring_size_needed = MAX2(cmd_buffer->esgs_ring_size_needed, gs->info.gs_ring_info.esgs_ring_size);
|
||||
cmd_buffer->gsvs_ring_size_needed = MAX2(cmd_buffer->gsvs_ring_size_needed, gs->info.gs_ring_info.gsvs_ring_size);
|
||||
if (!gs->info.is_ngg) {
|
||||
cmd_buffer->esgs_ring_size_needed =
|
||||
MAX2(cmd_buffer->esgs_ring_size_needed, gs->info.legacy_gs_info.esgs_ring_size);
|
||||
cmd_buffer->gsvs_ring_size_needed =
|
||||
MAX2(cmd_buffer->gsvs_ring_size_needed, gs->info.legacy_gs_info.gsvs_ring_size);
|
||||
}
|
||||
|
||||
/* Re-emit the VS prolog when the geometry shader is compiled separately because shader configs
|
||||
* are combined and need to be updated.
|
||||
|
|
|
|||
|
|
@ -1627,14 +1627,14 @@ radv_precompute_registers_hw_gs(struct radv_device *device, struct radv_shader_b
|
|||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
struct radv_shader_info *info = &binary->info;
|
||||
|
||||
info->regs.gs.vgt_esgs_ring_itemsize = info->gs_ring_info.esgs_itemsize;
|
||||
info->regs.gs.vgt_esgs_ring_itemsize = info->legacy_gs_info.esgs_itemsize;
|
||||
|
||||
info->regs.gs.vgt_gs_max_prims_per_subgroup =
|
||||
S_028A94_MAX_PRIMS_PER_SUBGROUP(info->gs_ring_info.gs_inst_prims_in_subgroup);
|
||||
S_028A94_MAX_PRIMS_PER_SUBGROUP(info->legacy_gs_info.gs_inst_prims_in_subgroup);
|
||||
|
||||
info->regs.vgt_gs_onchip_cntl = S_028A44_ES_VERTS_PER_SUBGRP(info->gs_ring_info.es_verts_per_subgroup) |
|
||||
S_028A44_GS_PRIMS_PER_SUBGRP(info->gs_ring_info.gs_prims_per_subgroup) |
|
||||
S_028A44_GS_INST_PRIMS_IN_SUBGRP(info->gs_ring_info.gs_inst_prims_in_subgroup);
|
||||
info->regs.vgt_gs_onchip_cntl = S_028A44_ES_VERTS_PER_SUBGRP(info->legacy_gs_info.es_verts_per_subgroup) |
|
||||
S_028A44_GS_PRIMS_PER_SUBGRP(info->legacy_gs_info.gs_prims_per_subgroup) |
|
||||
S_028A44_GS_INST_PRIMS_IN_SUBGRP(info->legacy_gs_info.gs_inst_prims_in_subgroup);
|
||||
|
||||
const uint32_t gs_max_out_vertices = info->gs.vertices_out;
|
||||
const uint8_t max_stream = info->gs.num_components_per_stream[3] ? 3
|
||||
|
|
@ -2454,7 +2454,7 @@ radv_shader_combine_cfg_vs_gs(const struct radv_device *device, const struct rad
|
|||
if (gs->info.is_ngg) {
|
||||
lds_size = gs->info.ngg_info.lds_size;
|
||||
} else {
|
||||
lds_size = gs->info.gs_ring_info.lds_size;
|
||||
lds_size = gs->info.legacy_gs_info.lds_size;
|
||||
}
|
||||
|
||||
rsrc2 |= S_00B22C_LDS_SIZE(ac_shader_encode_lds_size(lds_size, pdev->info.gfx_level, MESA_SHADER_VERTEX));
|
||||
|
|
|
|||
|
|
@ -643,7 +643,7 @@ void
|
|||
radv_get_legacy_gs_info(const struct radv_device *device, struct radv_shader_info *gs_info)
|
||||
{
|
||||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
struct radv_legacy_gs_info *out = &gs_info->gs_ring_info;
|
||||
struct radv_legacy_gs_info *out = &gs_info->legacy_gs_info;
|
||||
const unsigned esgs_vertex_stride = out->esgs_itemsize * 4;
|
||||
ac_legacy_gs_subgroup_info info;
|
||||
|
||||
|
|
@ -706,7 +706,7 @@ gather_shader_info_gs(struct radv_device *device, const nir_shader *nir, struct
|
|||
if (info->is_ngg)
|
||||
gather_shader_info_ngg_query(device, info);
|
||||
else
|
||||
info->gs_ring_info.esgs_itemsize = radv_compute_esgs_itemsize(device, info->gs.num_linked_inputs) / 4;
|
||||
info->legacy_gs_info.esgs_itemsize = radv_compute_esgs_itemsize(device, info->gs.num_linked_inputs) / 4;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -248,8 +248,10 @@ struct radv_shader_info {
|
|||
|
||||
struct radv_streamout_info so;
|
||||
|
||||
struct radv_legacy_gs_info gs_ring_info;
|
||||
union {
|
||||
struct radv_legacy_gs_info legacy_gs_info;
|
||||
struct gfx10_ngg_info ngg_info;
|
||||
};
|
||||
|
||||
/* Precomputed register values. */
|
||||
struct {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue