radeonsi: don't emit redundant PKT3_NUM_INSTANCES packets

Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
This commit is contained in:
Marek Olšák 2018-11-12 20:38:46 -05:00
parent 7d6babf995
commit d28e208213
2 changed files with 10 additions and 2 deletions

View file

@ -47,6 +47,7 @@
* the number shouldn't be a commonly-used one. */
#define SI_BASE_VERTEX_UNKNOWN INT_MIN
#define SI_RESTART_INDEX_UNKNOWN INT_MIN
#define SI_INSTANCE_COUNT_UNKNOWN INT_MIN
#define SI_NUM_SMOOTH_AA_SAMPLES 8
#define SI_MAX_POINT_SIZE 2048
#define SI_GS_PER_ES 128
@ -925,6 +926,7 @@ struct si_context {
int last_index_size;
int last_base_vertex;
int last_start_instance;
int last_instance_count;
int last_drawid;
int last_sh_base_reg;
int last_primitive_restart_en;
@ -1374,6 +1376,7 @@ static inline void
si_invalidate_draw_sh_constants(struct si_context *sctx)
{
sctx->last_base_vertex = SI_BASE_VERTEX_UNKNOWN;
sctx->last_instance_count = SI_INSTANCE_COUNT_UNKNOWN;
}
static inline unsigned

View file

@ -813,10 +813,15 @@ static void si_emit_draw_packets(struct si_context *sctx,
radeon_emit(cs, di_src_sel);
}
} else {
unsigned instance_count = info->instance_count;
int base_vertex;
radeon_emit(cs, PKT3(PKT3_NUM_INSTANCES, 0, 0));
radeon_emit(cs, info->instance_count);
if (sctx->last_instance_count == SI_INSTANCE_COUNT_UNKNOWN ||
sctx->last_instance_count != instance_count) {
radeon_emit(cs, PKT3(PKT3_NUM_INSTANCES, 0, 0));
radeon_emit(cs, instance_count);
sctx->last_instance_count = instance_count;
}
/* Base vertex and start instance. */
base_vertex = index_size ? info->index_bias : info->start;