[Mesa-dev] [PATCH] radv: handle queue submission with no cs but semaphores
Bas Nieuwenhuizen
bas at basnieuwenhuizen.nl
Thu Feb 9 08:35:15 UTC 2017
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
I'll adjust the sparse binding patches.
On Thu, Feb 9, 2017, at 04:25, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> It's legal to submit just semaphores with no command streams,
> this patch fixes this case by emitting the empty cs, it also
> handles the fence emission for this case better.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> src/amd/vulkan/radv_device.c | 22 ++++++++++++++++++++--
> 1 file changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
> index 65ba119..91c0506 100644
> --- a/src/amd/vulkan/radv_device.c
> +++ b/src/amd/vulkan/radv_device.c
> @@ -1400,6 +1400,7 @@ VkResult radv_QueueSubmit(
> uint32_t esgs_ring_size = 0, gsvs_ring_size = 0;
> struct radeon_winsys_cs *preamble_cs = NULL;
> VkResult result;
> + bool fence_emitted = false;
>
> /* Do this first so failing to allocate scratch buffers can't result in
> * partially executed submissions. */
> @@ -1425,8 +1426,24 @@ VkResult radv_QueueSubmit(
> bool can_patch = true;
> uint32_t advance;
>
> - if (!pSubmits[i].commandBufferCount)
> + if (!pSubmits[i].commandBufferCount) {
> + if (pSubmits[i].waitSemaphoreCount ||
> pSubmits[i].signalSemaphoreCount) {
> + ret = queue->device->ws->cs_submit(ctx,
> queue->queue_idx,
> +
> &queue->device->empty_cs[queue->queue_family_index],
> + 1,
> NULL,
> +
> (struct radeon_winsys_sem **)pSubmits[i].pWaitSemaphores,
> +
> pSubmits[i].waitSemaphoreCount,
> +
> (struct radeon_winsys_sem **)pSubmits[i].pSignalSemaphores,
> +
> pSubmits[i].signalSemaphoreCount,
> + false,
> base_fence);
> + if (ret) {
> + radv_loge("failed to submit CS
> %d\n", i);
> + abort();
> + }
> + fence_emitted = true;
> + }
> continue;
> + }
>
> cs_array = malloc(sizeof(struct radeon_winsys_cs *) *
> pSubmits[i].commandBufferCount);
> @@ -1465,6 +1482,7 @@ VkResult radv_QueueSubmit(
> radv_loge("failed to submit CS %d\n", i);
> abort();
> }
> + fence_emitted = true;
> if (queue->device->trace_bo) {
> bool success = queue->device->ws->ctx_wait_idle(
> queue->hw_ctx,
> @@ -1482,7 +1500,7 @@ VkResult radv_QueueSubmit(
> }
>
> if (fence) {
> - if (!submitCount)
> + if (!fence_emitted)
> ret = queue->device->ws->cs_submit(ctx, queue->queue_idx,
> &queue->device->empty_cs[queue->queue_family_index],
> 1, NULL, NULL, 0, NULL, 0,
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list