v3dv: implement vkBeginCommandBuffer

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>
This commit is contained in:
Iago Toral Quiroga
2019-12-11 10:14:10 +01:00
committed by Marge Bot
parent 9ac3261076
commit 9bb6d6f1ba
2 changed files with 43 additions and 0 deletions
+39
View File
@@ -84,9 +84,22 @@ static void
cmd_buffer_destroy(struct v3dv_cmd_buffer *cmd_buffer)
{
list_del(&cmd_buffer->pool_link);
v3dv_cl_destroy(&cmd_buffer->bcl);
v3dv_cl_destroy(&cmd_buffer->rcl);
v3dv_cl_destroy(&cmd_buffer->indirect);
vk_free(&cmd_buffer->pool->alloc, cmd_buffer);
}
static VkResult
cmd_buffer_reset(struct v3dv_cmd_buffer *cmd_buffer)
{
cmd_buffer->usage_flags = 0;
v3dv_cl_reset(&cmd_buffer->bcl);
v3dv_cl_reset(&cmd_buffer->rcl);
v3dv_cl_reset(&cmd_buffer->indirect);
return VK_SUCCESS;
}
VkResult
v3dv_AllocateCommandBuffers(VkDevice _device,
const VkCommandBufferAllocateInfo *pAllocateInfo,
@@ -152,3 +165,29 @@ v3dv_DestroyCommandPool(VkDevice _device,
vk_free2(&device->alloc, pAllocator, pool);
}
VkResult
v3dv_BeginCommandBuffer(VkCommandBuffer commandBuffer,
const VkCommandBufferBeginInfo *pBeginInfo)
{
V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer);
assert(cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_SECONDARY ||
!(cmd_buffer->usage_flags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT));
/* If this is the first vkBeginCommandBuffer, we must initialize the
* command buffer's state. Otherwise, we must reset its state. In both
* cases we reset it.
*/
VkResult result = cmd_buffer_reset(cmd_buffer);
if (result != VK_SUCCESS)
return result;
cmd_buffer->usage_flags = pBeginInfo->flags;
v3dv_cl_init(cmd_buffer, &cmd_buffer->bcl);
v3dv_cl_init(cmd_buffer, &cmd_buffer->rcl);
v3dv_cl_init(cmd_buffer, &cmd_buffer->indirect);
return VK_SUCCESS;
}
+4
View File
@@ -345,6 +345,10 @@ struct v3dv_cmd_buffer {
VkCommandBufferUsageFlags usage_flags;
VkCommandBufferLevel level;
struct v3dv_cl bcl;
struct v3dv_cl rcl;
struct v3dv_cl indirect;
};
struct v3dv_shader_module {