VkCommandBuffer commandBuffer)
{
LVP_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, commandBuffer);
+ VkResult result = vk_command_buffer_get_record_result(&cmd_buffer->vk);
- cmd_buffer->status =
- cmd_buffer->vk.cmd_queue.error == VK_SUCCESS ?
+ cmd_buffer->status = result == VK_SUCCESS ?
LVP_CMD_BUFFER_STATUS_EXECUTABLE :
LVP_CMD_BUFFER_STATUS_INVALID;
- return cmd_buffer->vk.cmd_queue.error;
+ return result;
}
VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateCommandPool(
VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer);
VkResult ret =
cmdbuf->vk.level == VK_COMMAND_BUFFER_LEVEL_SECONDARY ?
- cmdbuf->vk.cmd_queue.error : cmdbuf->record_result;
+ vk_command_buffer_get_record_result(&cmdbuf->vk) :
+ cmdbuf->record_result;
panvk_per_arch(cmd_close_batch)(cmdbuf);
cmdbuf->status = ret == VK_SUCCESS ?
struct vk_cmd_queue {
const VkAllocationCallbacks *alloc;
struct list_head cmds;
- VkResult error;
};
enum vk_cmd_type {
% if c.guard is not None:
#ifdef ${c.guard}
% endif
- void vk_enqueue_${to_underscore(c.name)}(struct vk_cmd_queue *queue
+ VkResult vk_enqueue_${to_underscore(c.name)}(struct vk_cmd_queue *queue
% for p in c.params[1:]:
, ${p.decl}
% endfor
{
queue->alloc = alloc;
list_inithead(&queue->cmds);
- queue->error = VK_SUCCESS;
}
static inline void
{
vk_free_queue(queue);
list_inithead(&queue->cmds);
- queue->error = VK_SUCCESS;
}
static inline void
}
% if c.name not in manual_commands and c.name not in no_enqueue_commands:
-void vk_enqueue_${to_underscore(c.name)}(struct vk_cmd_queue *queue
+VkResult vk_enqueue_${to_underscore(c.name)}(struct vk_cmd_queue *queue
% for p in c.params[1:]:
, ${p.decl}
% endfor
)
{
- if (queue->error)
- return;
-
struct vk_cmd_queue_entry *cmd = vk_zalloc(queue->alloc,
sizeof(*cmd), 8,
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
- if (!cmd) { queue->error = VK_ERROR_OUT_OF_HOST_MEMORY; return; }
+ if (!cmd) return VK_ERROR_OUT_OF_HOST_MEMORY;
cmd->type = ${to_enum_name(c.name)};
\
% endfor
list_addtail(&cmd->cmd_link, &queue->cmds);
- return;
+ return VK_SUCCESS;
% if need_error_handling:
err:
- queue->error = VK_ERROR_OUT_OF_HOST_MEMORY;
if (cmd)
vk_free_${to_underscore(c.name)}(queue, cmd);
+ return VK_ERROR_OUT_OF_HOST_MEMORY;
% endif
}
% endif
{
VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
+ if (vk_command_buffer_has_error(cmd_buffer))
+ return;
% if len(c.params) == 1:
- vk_enqueue_${to_underscore(c.name)}(&cmd_buffer->cmd_queue);
+ VkResult result = vk_enqueue_${to_underscore(c.name)}(&cmd_buffer->cmd_queue);
% else:
- vk_enqueue_${to_underscore(c.name)}(&cmd_buffer->cmd_queue,
+ VkResult result = vk_enqueue_${to_underscore(c.name)}(&cmd_buffer->cmd_queue,
${c.call_params(1)});
% endif
+ if (unlikely(result != VK_SUCCESS))
+ vk_command_buffer_set_error(cmd_buffer, result);
}
% endif