From a8e7ea6abce1913ac64143f5a83f82c35b2975d6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 6 Sep 2016 00:09:17 +0200 Subject: [PATCH] radeonsi: skip draws with instance_count == 0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit loosely ported from Vulkan Reviewed-by: Nicolai Hähnle --- src/gallium/drivers/radeonsi/si_state_draw.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c index 0a91291e4ea..9469bb4f115 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.c +++ b/src/gallium/drivers/radeonsi/si_state_draw.c @@ -882,9 +882,19 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info) struct pipe_index_buffer ib = {}; unsigned mask, dirty_fb_counter, dirty_tex_counter, rast_prim; - if (!info->count && !info->indirect && - (info->indexed || !info->count_from_stream_output)) - return; + if (likely(!info->indirect)) { + /* SI-CI treat instance_count==0 as instance_count==1. There is + * no workaround for indirect draws, but we can at least skip + * direct draws. + */ + if (unlikely(!info->instance_count)) + return; + + /* Handle count == 0. */ + if (unlikely(!info->count && + (info->indexed || !info->count_from_stream_output))) + return; + } if (!sctx->vs_shader.cso) { assert(0); -- 2.30.2