[Mesa-dev] [PATCH] radv: skip draws with instance_count == 0

Samuel Pitoiset samuel.pitoiset at gmail.com
Mon Jan 7 16:08:01 UTC 2019


On 1/7/19 2:53 PM, Bas Nieuwenhuizen wrote:
> On Mon, Jan 7, 2019 at 2:45 PM Samuel Pitoiset
> <samuel.pitoiset at gmail.com> wrote:
>> Loosely based on RadeonSI.
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>>   src/amd/vulkan/radv_cmd_buffer.c | 14 ++++++++++++++
>>   1 file changed, 14 insertions(+)
>>
>> diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
>> index 1966098e08c..8e3f1a7f5f0 100644
>> --- a/src/amd/vulkan/radv_cmd_buffer.c
>> +++ b/src/amd/vulkan/radv_cmd_buffer.c
>> @@ -3697,6 +3697,20 @@ radv_draw(struct radv_cmd_buffer *cmd_buffer,
>>                  radeon_check_space(cmd_buffer->device->ws,
>>                                     cmd_buffer->cs, 4096);
>>
>> +       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->strmout_buffer)))
> Why the extra condition of (info->indexed || !info->strmout_buffer)?

We need to check info->strmout_buffer, otherwise all 
CmdDrawIndirectByteCountEXT() will be skipped.

Though, that's actually useless to check indexed draws.

>
>> +                       return;
>> +       }
>> +
>>          /* Use optimal packet order based on whether we need to sync the
>>           * pipeline.
>>           */
>> --
>> 2.20.1
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list