v3dv: use vk_error() for all queue/submit errors
authorIago Toral Quiroga <itoral@igalia.com>
Fri, 13 Mar 2020 11:01:38 +0000 (12:01 +0100)
committerMarge Bot <eric+marge@anholt.net>
Tue, 13 Oct 2020 21:21:28 +0000 (21:21 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6766>

src/broadcom/vulkan/v3dv_queue.c

index d59d674..cc45de1 100644 (file)
@@ -86,7 +86,7 @@ process_semaphores_to_signal(struct v3dv_device *device,
    int fd;
    drmSyncobjExportSyncFile(device->render_fd, device->last_job_sync, &fd);
    if (fd == -1)
-      return VK_ERROR_OUT_OF_HOST_MEMORY;
+      return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
 
    for (uint32_t i = 0; i < count; i++) {
       struct v3dv_semaphore *sem = v3dv_semaphore_from_handle(sems[i]);
@@ -97,7 +97,7 @@ process_semaphores_to_signal(struct v3dv_device *device,
 
       int ret = drmSyncobjImportSyncFile(device->render_fd, sem->sync, fd);
       if (ret)
-         return VK_ERROR_OUT_OF_HOST_MEMORY;
+         return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
 
       sem->fd = fd;
    }
@@ -120,11 +120,11 @@ process_fence_to_signal(struct v3dv_device *device, VkFence _fence)
    int fd;
    drmSyncobjExportSyncFile(device->render_fd, device->last_job_sync, &fd);
    if (fd == -1)
-      return VK_ERROR_OUT_OF_HOST_MEMORY;
+      return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
 
    int ret = drmSyncobjImportSyncFile(device->render_fd, fence->sync, fd);
    if (ret)
-      return VK_ERROR_OUT_OF_HOST_MEMORY;
+      return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
 
    fence->fd = fd;
 
@@ -136,6 +136,8 @@ queue_submit_job(struct v3dv_queue *queue, struct v3dv_job *job, bool do_wait)
 {
    assert(job);
 
+   struct v3dv_device *device = queue->device;
+
    struct drm_v3d_submit_cl submit;
 
    /* RCL jobs don't start until the previous RCL job has finished so we don't
@@ -150,10 +152,10 @@ queue_submit_job(struct v3dv_queue *queue, struct v3dv_job *job, bool do_wait)
     * we have more than one semaphore to wait on.
     */
    submit.in_sync_bcl = 0;
-   submit.in_sync_rcl = do_wait ? queue->device->last_job_sync : 0;
+   submit.in_sync_rcl = do_wait ? device->last_job_sync : 0;
 
    /* Update the sync object for the last rendering by this device. */
-   submit.out_sync = queue->device->last_job_sync;
+   submit.out_sync = device->last_job_sync;
 
    submit.bcl_start = job->bcl.bo->offset;
    submit.bcl_end = job->bcl.bo->offset + v3dv_cl_offset(&job->bcl);
@@ -182,10 +184,9 @@ queue_submit_job(struct v3dv_queue *queue, struct v3dv_job *job, bool do_wait)
    assert(bo_idx == submit.bo_handle_count);
    submit.bo_handles = (uintptr_t)(void *)bo_handles;
 
-   v3dv_clif_dump(queue->device, job, &submit);
+   v3dv_clif_dump(device, job, &submit);
 
-   int ret = v3dv_ioctl(queue->device->render_fd,
-                        DRM_IOCTL_V3D_SUBMIT_CL, &submit);
+   int ret = v3dv_ioctl(device->render_fd, DRM_IOCTL_V3D_SUBMIT_CL, &submit);
    static bool warned = false;
    if (ret && !warned) {
       fprintf(stderr, "Draw call returned %s. Expect corruption.\n",
@@ -196,7 +197,7 @@ queue_submit_job(struct v3dv_queue *queue, struct v3dv_job *job, bool do_wait)
    free(bo_handles);
 
    if (ret)
-      return VK_ERROR_DEVICE_LOST;
+      return vk_error(device->instance, VK_ERROR_DEVICE_LOST);
 
    return VK_SUCCESS;
 }
@@ -305,11 +306,12 @@ emit_noop_render(struct v3dv_job *job)
 static VkResult
 queue_create_noop_job(struct v3dv_queue *queue, struct v3dv_job **job)
 {
-   *job = vk_zalloc(&queue->device->alloc, sizeof(struct v3dv_job), 8,
+   struct v3dv_device *device = queue->device;
+   *job = vk_zalloc(&device->alloc, sizeof(struct v3dv_job), 8,
                      VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
    if (!*job)
-      return VK_ERROR_OUT_OF_HOST_MEMORY;
-   v3dv_job_init(*job, queue->device, NULL, -1);
+      return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
+   v3dv_job_init(*job, device, NULL, -1);
 
    emit_noop_bin(*job);
    emit_noop_render(*job);
@@ -385,7 +387,7 @@ queue_submit_noop_job(struct v3dv_queue *queue, const VkSubmitInfo *pSubmit)
       if (!ret)
          can_destroy_job = true;
       else
-         result = VK_ERROR_DEVICE_LOST;
+         result = vk_error(device->instance, VK_ERROR_DEVICE_LOST);
 
       goto fail_signal_fence;
    }
@@ -600,7 +602,9 @@ v3dv_ResetFences(VkDevice _device, uint32_t fenceCount, const VkFence *pFences)
 
    vk_free(&device->alloc, syncobjs);
 
-   return ret ? VK_ERROR_OUT_OF_HOST_MEMORY : VK_SUCCESS;
+   if (ret)
+      return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
+   return VK_SUCCESS;
 }
 
 VkResult