From: Iago Toral Quiroga Date: Tue, 17 Dec 2019 08:48:54 +0000 (+0100) Subject: v3dv: implement vkEndCommandBuffer X-Git-Tag: upstream/21.0.0~4245 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6e4471c14c5b563b61698ecf0d5906ef733bdc6e;p=platform%2Fupstream%2Fmesa.git v3dv: implement vkEndCommandBuffer Part-of: --- diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c index efffc63..c444b22 100644 --- a/src/broadcom/vulkan/v3dv_cmd_buffer.c +++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c @@ -804,5 +804,21 @@ v3dv_CmdEndRenderPass(VkCommandBuffer commandBuffer) VkResult v3dv_EndCommandBuffer(VkCommandBuffer commandBuffer) { + V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); + + if (v3dv_cl_offset(&cmd_buffer->bcl) == 0) + return VK_SUCCESS; /* FIXME? */ + + v3dv_cl_ensure_space_with_branch(&cmd_buffer->bcl, cl_packet_length(FLUSH)); + + /* We just FLUSH here to tell the HW to cap the bin CLs with a + * return. Any remaining state changes won't be flushed to + * the bins first -- you would need FLUSH_ALL for that, but + * the HW for it hasn't been validated. + */ + cl_emit(&cmd_buffer->bcl, FLUSH, flush); + + cmd_buffer->status = V3DV_CMD_BUFFER_STATUS_EXECUTABLE; + return VK_SUCCESS; } diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index 4484a34..fcd9c5c 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -355,7 +355,8 @@ struct v3dv_cmd_pool { enum v3dv_cmd_buffer_status { V3DV_CMD_BUFFER_STATUS_NEW = 0, V3DV_CMD_BUFFER_STATUS_INITIALIZED = 1, - V3DV_CMD_BUFFER_STATUS_RECORDING = 2 + V3DV_CMD_BUFFER_STATUS_RECORDING = 2, + V3DV_CMD_BUFFER_STATUS_EXECUTABLE = 3 }; union v3dv_clear_value {