nvk: Early return in draw commands when no draw will be performed

Follows what other drivers do, if we do not need to emit a draw, just
bail out early.

Signed-off-by: Mary Guillemard <mary@mary.zone>
Reviewed-by: Mel Henning <mhenning@darkrefraction.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39783>
This commit is contained in:
Mary Guillemard 2026-02-09 12:55:28 +01:00 committed by Marge Bot
parent db59b4d2c4
commit 0ea139523f

View file

@ -4417,6 +4417,9 @@ nvk_CmdDraw(VkCommandBuffer commandBuffer,
{
VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer);
if (unlikely(!vertexCount || !instanceCount))
return;
nvk_cmd_flush_gfx_state(cmd);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 6);
@ -4438,6 +4441,9 @@ nvk_CmdDrawMultiEXT(VkCommandBuffer commandBuffer,
{
VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer);
if (unlikely(!drawCount || !pVertexInfo->vertexCount || !instanceCount))
return;
nvk_cmd_flush_gfx_state(cmd);
for (uint32_t draw_index = 0; draw_index < drawCount; draw_index++) {
@ -4580,6 +4586,9 @@ nvk_CmdDrawIndexed(VkCommandBuffer commandBuffer,
{
VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer);
if (unlikely(!indexCount || !instanceCount))
return;
nvk_cmd_flush_gfx_state(cmd);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 7);
@ -4603,6 +4612,9 @@ nvk_CmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer,
{
VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer);
if (unlikely(!drawCount || !pIndexInfo->indexCount || !instanceCount))
return;
nvk_cmd_flush_gfx_state(cmd);
for (uint32_t draw_index = 0; draw_index < drawCount; draw_index++) {
@ -4671,6 +4683,9 @@ nvk_CmdDrawIndirect(VkCommandBuffer commandBuffer,
VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer);
VK_FROM_HANDLE(nvk_buffer, buffer, _buffer);
if (unlikely(!drawCount))
return;
/* From the Vulkan 1.3.238 spec:
*
* VUID-vkCmdDrawIndirect-drawCount-00476
@ -5036,6 +5051,9 @@ nvk_CmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer,
VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer);
VK_FROM_HANDLE(nvk_buffer, counter_buffer, counterBuffer);
if (unlikely(!instanceCount))
return;
nvk_cmd_flush_gfx_state(cmd);
uint64_t counter_addr = vk_buffer_address(&counter_buffer->vk,