v3dv: submit a no-op job if a command buffer doesn't have any jobs.

This is similar to the scenario where we have a submit without
any command buffers, even if we don't have any actual GPU work to do
we still might need to signal fences/semaphored and possibly wait on
previous jobs to finish, so we need to submit something to the kernel
to get all that done right.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>
This commit is contained in:
Iago Toral Quiroga 2020-04-16 10:31:17 +02:00 committed by Marge Bot
parent 53657b0cb1
commit 7ea4601a28

View file

@ -302,22 +302,6 @@ queue_submit_job(struct v3dv_queue *queue,
return VK_SUCCESS;
}
static VkResult
queue_submit_cmd_buffer(struct v3dv_queue *queue,
struct v3dv_cmd_buffer *cmd_buffer,
const VkSubmitInfo *pSubmit)
{
list_for_each_entry_safe(struct v3dv_job, job,
&cmd_buffer->submit_jobs, list_link) {
VkResult result = queue_submit_job(queue, job,
pSubmit->waitSemaphoreCount > 0);
if (result != VK_SUCCESS)
return result;
}
return VK_SUCCESS;
}
static void
emit_noop_bin(struct v3dv_job *job)
{
@ -508,6 +492,27 @@ fail_job:
return result;
}
static VkResult
queue_submit_cmd_buffer(struct v3dv_queue *queue,
struct v3dv_cmd_buffer *cmd_buffer,
const VkSubmitInfo *pSubmit)
{
assert(cmd_buffer);
if (list_is_empty(&cmd_buffer->submit_jobs))
return queue_submit_noop_job(queue, pSubmit);
list_for_each_entry_safe(struct v3dv_job, job,
&cmd_buffer->submit_jobs, list_link) {
VkResult result = queue_submit_job(queue, job,
pSubmit->waitSemaphoreCount > 0);
if (result != VK_SUCCESS)
return result;
}
return VK_SUCCESS;
}
static VkResult
queue_submit_cmd_buffer_batch(struct v3dv_queue *queue,
const VkSubmitInfo *pSubmit,