vn_cs_encoder_reset(&cmd->cs);
cmd->state = VN_COMMAND_BUFFER_STATE_INITIAL;
+ cmd->draw_cmd_batched = 0;
vn_async_vkResetCommandBuffer(cmd->device->instance, commandBuffer, flags);
size_t cmd_size;
vn_cs_encoder_reset(&cmd->cs);
+ cmd->draw_cmd_batched = 0;
/* TODO: add support for VK_KHR_dynamic_rendering */
VkCommandBufferBeginInfo local_begin_info;
}
vn_cs_encoder_reset(&cmd->cs);
+ cmd->draw_cmd_batched = 0;
+}
+
+static inline void
+vn_cmd_count_draw_and_submit_on_batch_limit(struct vn_command_buffer *cmd)
+{
+ if (++cmd->draw_cmd_batched >= vn_env.draw_cmd_batch_limit)
+ vn_cmd_submit(cmd);
}
VkResult
{
VN_CMD_ENQUEUE(vkCmdDraw, commandBuffer, vertexCount, instanceCount,
firstVertex, firstInstance);
+
+ vn_cmd_count_draw_and_submit_on_batch_limit(
+ vn_command_buffer_from_handle(commandBuffer));
}
void
{
VN_CMD_ENQUEUE(vkCmdDrawIndexed, commandBuffer, indexCount, instanceCount,
firstIndex, vertexOffset, firstInstance);
+
+ vn_cmd_count_draw_and_submit_on_batch_limit(
+ vn_command_buffer_from_handle(commandBuffer));
}
void
{
VN_CMD_ENQUEUE(vkCmdDrawIndirect, commandBuffer, buffer, offset, drawCount,
stride);
+
+ vn_cmd_count_draw_and_submit_on_batch_limit(
+ vn_command_buffer_from_handle(commandBuffer));
}
void
{
VN_CMD_ENQUEUE(vkCmdDrawIndexedIndirect, commandBuffer, buffer, offset,
drawCount, stride);
+
+ vn_cmd_count_draw_and_submit_on_batch_limit(
+ vn_command_buffer_from_handle(commandBuffer));
}
void
{
VN_CMD_ENQUEUE(vkCmdDrawIndirectCount, commandBuffer, buffer, offset,
countBuffer, countBufferOffset, maxDrawCount, stride);
+
+ vn_cmd_count_draw_and_submit_on_batch_limit(
+ vn_command_buffer_from_handle(commandBuffer));
}
void
VN_CMD_ENQUEUE(vkCmdDrawIndexedIndirectCount, commandBuffer, buffer,
offset, countBuffer, countBufferOffset, maxDrawCount,
stride);
+
+ vn_cmd_count_draw_and_submit_on_batch_limit(
+ vn_command_buffer_from_handle(commandBuffer));
}
void
VN_CMD_ENQUEUE(vkCmdDrawIndirectByteCountEXT, commandBuffer, instanceCount,
firstInstance, counterBuffer, counterBufferOffset,
counterOffset, vertexStride);
+
+ vn_cmd_count_draw_and_submit_on_batch_limit(
+ vn_command_buffer_from_handle(commandBuffer));
}
void
#include "util/debug.h"
#include "util/log.h"
#include "util/os_misc.h"
+#include "util/u_debug.h"
#include "venus-protocol/vn_protocol_driver_info.h"
#include "vk_enum_to_str.h"
parse_debug_string(os_get_option("VN_DEBUG"), vn_debug_options);
vn_env.perf =
parse_debug_string(os_get_option("VN_PERF"), vn_perf_options);
+ vn_env.draw_cmd_batch_limit =
+ debug_get_num_option("VN_DRAW_CMD_BATCH_LIMIT", UINT32_MAX);
+ if (!vn_env.draw_cmd_batch_limit)
+ vn_env.draw_cmd_batch_limit = UINT32_MAX;
}
void