radv: set prim_id for geometry shaders

Noticed in passing.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Dave Airlie 2017-06-20 14:03:10 +10:00
parent 4042892cee
commit a563f611c3
3 changed files with 9 additions and 2 deletions

View file

@ -3867,9 +3867,10 @@ static void visit_intrinsic(struct nir_to_llvm_context *ctx,
result = ctx->gs_invocation_id;
break;
case nir_intrinsic_load_primitive_id:
if (ctx->stage == MESA_SHADER_GEOMETRY)
if (ctx->stage == MESA_SHADER_GEOMETRY) {
ctx->shader_info->gs.uses_prim_id = true;
result = ctx->gs_prim_id;
else if (ctx->stage == MESA_SHADER_TESS_CTRL) {
} else if (ctx->stage == MESA_SHADER_TESS_CTRL) {
ctx->shader_info->tcs.uses_prim_id = true;
result = ctx->tcs_patch_id;
} else if (ctx->stage == MESA_SHADER_TESS_EVAL) {

View file

@ -178,6 +178,7 @@ struct ac_shader_variant_info {
unsigned invocations;
unsigned gsvs_vertex_size;
unsigned max_gsvs_emit_size;
bool uses_prim_id;
} gs;
struct {
bool uses_prim_id;

View file

@ -789,6 +789,11 @@ si_get_ia_multi_vgt_param(struct radv_cmd_buffer *cmd_buffer,
partial_es_wave = true;
if (radv_pipeline_has_gs(cmd_buffer->state.pipeline)) {
if (radv_pipeline_has_gs(cmd_buffer->state.pipeline) &&
cmd_buffer->state.pipeline->shaders[MESA_SHADER_GEOMETRY]->info.gs.uses_prim_id)
ia_switch_on_eoi = true;
/* GS requirement. */
if (SI_GS_PER_ES / primgroup_size >= cmd_buffer->device->gs_table_depth - 3)
partial_es_wave = true;