Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl> I'll adjust the sparse binding patches.
On Thu, Feb 9, 2017, at 04:25, Dave Airlie wrote: > From: Dave Airlie <airl...@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 <airl...@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@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev