radv: calculate esgs_itemsize in the shader info pass

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
Samuel Pitoiset
2019-09-03 18:20:07 +02:00
parent 7fa00e178f
commit f31fb33432
2 changed files with 20 additions and 14 deletions

View File

@@ -753,4 +753,24 @@ radv_nir_shader_info_pass(const struct nir_shader *nir,
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 ||
nir->info.stage == MESA_SHADER_TESS_EVAL) &&
options->key.vs_common_out.as_es) {
struct radv_es_output_info *es_info =
nir->info.stage == MESA_SHADER_VERTEX ? &info->vs.es_info : &info->tes.es_info;
uint32_t max_output_written = 0;
uint64_t output_mask = nir->info.outputs_written;
while (output_mask) {
const int i = u_bit_scan64(&output_mask);
unsigned param_index = shader_io_get_unique_index(i);
max_output_written = MAX2(param_index, max_output_written);
}
es_info->esgs_itemsize = (max_output_written + 1) * 16;
}
}