radv: compute the ESGS itemsize outside of radv_nir_shader_info_pass()
radv_nir_shader_info_pass() should run on individual shaders only, and "linked" shader info should be done separately for better design. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18210>
This commit is contained in:

committed by
Marge Bot

parent
dbf175f255
commit
38ae5b6da6
@@ -3538,6 +3538,29 @@ radv_fill_shader_info(struct radv_pipeline *pipeline,
|
||||
}
|
||||
}
|
||||
|
||||
/* Compute the ESGS item size for VS or TES as ES. */
|
||||
if ((stages[MESA_SHADER_VERTEX].nir && stages[MESA_SHADER_VERTEX].info.vs.as_es) ||
|
||||
(stages[MESA_SHADER_TESS_EVAL].nir && stages[MESA_SHADER_TESS_EVAL].info.tes.as_es)) {
|
||||
uint32_t num_outputs_written;
|
||||
gl_shader_stage es_stage;
|
||||
|
||||
if (stages[MESA_SHADER_TESS_EVAL].nir) {
|
||||
es_stage = MESA_SHADER_TESS_EVAL;
|
||||
num_outputs_written = stages[MESA_SHADER_TESS_EVAL].info.tes.num_linked_outputs;
|
||||
} else {
|
||||
es_stage = MESA_SHADER_VERTEX;
|
||||
num_outputs_written = stages[MESA_SHADER_VERTEX].info.vs.num_linked_outputs;
|
||||
}
|
||||
|
||||
stages[es_stage].info.esgs_itemsize = num_outputs_written * 16;
|
||||
|
||||
/* Copy data to merged stage. */
|
||||
if (device->physical_device->rad_info.gfx_level >= GFX9 &&
|
||||
stages[MESA_SHADER_GEOMETRY].nir) {
|
||||
stages[MESA_SHADER_GEOMETRY].info.esgs_itemsize = stages[es_stage].info.esgs_itemsize;
|
||||
}
|
||||
}
|
||||
|
||||
/* PS always operates without workgroups. */
|
||||
if (stages[MESA_SHADER_FRAGMENT].nir)
|
||||
stages[MESA_SHADER_FRAGMENT].info.workgroup_size = stages[MESA_SHADER_FRAGMENT].info.wave_size;
|
||||
|
@@ -693,15 +693,6 @@ radv_nir_shader_info_pass(struct radv_device *device, const struct nir_shader *n
|
||||
info->gs.max_gsvs_emit_size = info->gs.gsvs_vertex_size * nir->info.gs.vertices_out;
|
||||
}
|
||||
|
||||
/* Compute the ESGS item size for VS or TES as ES. */
|
||||
if ((nir->info.stage == MESA_SHADER_VERTEX && info->vs.as_es) ||
|
||||
(nir->info.stage == MESA_SHADER_TESS_EVAL && info->tes.as_es)) {
|
||||
uint32_t num_outputs_written = nir->info.stage == MESA_SHADER_VERTEX
|
||||
? info->vs.num_linked_outputs
|
||||
: info->tes.num_linked_outputs;
|
||||
info->esgs_itemsize = num_outputs_written * 16;
|
||||
}
|
||||
|
||||
if (nir->info.stage == MESA_SHADER_FRAGMENT) {
|
||||
bool uses_persp_or_linear_interp = info->ps.reads_persp_center ||
|
||||
info->ps.reads_persp_centroid ||
|
||||
|
Reference in New Issue
Block a user