diff --git a/src/amd/vulkan/nir/radv_nir_lower_abi.c b/src/amd/vulkan/nir/radv_nir_lower_abi.c index b833c77144f..dcff622818f 100644 --- a/src/amd/vulkan/nir/radv_nir_lower_abi.c +++ b/src/amd/vulkan/nir/radv_nir_lower_abi.c @@ -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; diff --git a/src/amd/vulkan/radv_aco_shader_info.h b/src/amd/vulkan/radv_aco_shader_info.h index 28635b4f6f0..96e6151c8a7 100644 --- a/src/amd/vulkan/radv_aco_shader_info.h +++ b/src/amd/vulkan/radv_aco_shader_info.h @@ -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 diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 71f17794b5d..e759646083f 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -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. diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 1319a36546a..9ec073aab51 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -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)); diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c index e9036393744..35860206264 100644 --- a/src/amd/vulkan/radv_shader_info.c +++ b/src/amd/vulkan/radv_shader_info.c @@ -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 diff --git a/src/amd/vulkan/radv_shader_info.h b/src/amd/vulkan/radv_shader_info.h index 94b16d7810b..869bbe8c67c 100644 --- a/src/amd/vulkan/radv_shader_info.h +++ b/src/amd/vulkan/radv_shader_info.h @@ -248,8 +248,10 @@ struct radv_shader_info { struct radv_streamout_info so; - struct radv_legacy_gs_info gs_ring_info; - struct gfx10_ngg_info ngg_info; + union { + struct radv_legacy_gs_info legacy_gs_info; + struct gfx10_ngg_info ngg_info; + }; /* Precomputed register values. */ struct {