summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro PiƱeiro <apinheiro@igalia.com>2021-03-25 01:45:39 +0100
committerMarge Bot <eric+marge@anholt.net>2021-03-25 09:38:04 +0000
commitbdf93f4e3b3e7eca828b7ab52f6084a7649c0530 (patch)
treed6a8cb74318ba61a17200cb1a209603f25332589
parentbb201733acc3a1c0bd4d08d9361867c6bffcf8a6 (diff)
v3dv/cmd_buffer: return early for draw commands if there is nothing to draw
So for example, on v3dv_CmdDrawIndexed we can return early if instanceCount is 0. This fixes failures when using the simulator with tests with the following pattern: dEQP-VK.draw.instanced.draw_indexed_vk_primitive_topology* Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9820>
-rw-r--r--src/broadcom/vulkan/v3dv_cmd_buffer.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c
index 871f79fbd32..e7effa229ba 100644
--- a/src/broadcom/vulkan/v3dv_cmd_buffer.c
+++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c
@@ -4398,6 +4398,9 @@ v3dv_CmdDraw(VkCommandBuffer commandBuffer,
uint32_t firstVertex,
uint32_t firstInstance)
{
+ if (vertexCount == 0 || instanceCount == 0)
+ return;
+
V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer);
struct v3dv_draw_info info = {};
info.vertex_count = vertexCount;
@@ -4416,6 +4419,9 @@ v3dv_CmdDrawIndexed(VkCommandBuffer commandBuffer,
int32_t vertexOffset,
uint32_t firstInstance)
{
+ if (indexCount == 0 || instanceCount == 0)
+ return;
+
V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer);
cmd_buffer_emit_pre_draw(cmd_buffer);
@@ -4474,6 +4480,9 @@ v3dv_CmdDrawIndirect(VkCommandBuffer commandBuffer,
uint32_t drawCount,
uint32_t stride)
{
+ if (drawCount == 0)
+ return;
+
V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer);
V3DV_FROM_HANDLE(v3dv_buffer, buffer, _buffer);
@@ -4509,6 +4518,9 @@ v3dv_CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer,
uint32_t drawCount,
uint32_t stride)
{
+ if (drawCount == 0)
+ return;
+
V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer);
V3DV_FROM_HANDLE(v3dv_buffer, buffer, _buffer);