mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 07:08:04 +02:00
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:
parent
db59b4d2c4
commit
0ea139523f
1 changed files with 18 additions and 0 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue