anv: allow NULL batch parameter to anv_queue_submit_simple_batch
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Fri, 23 Aug 2019 17:14:34 +0000 (20:14 +0300)
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>
Mon, 11 Nov 2019 21:46:51 +0000 (21:46 +0000)
We can reuse device->trivial_batch_bo

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/anv_device.c
src/intel/vulkan/anv_queue.c

index cc72b55f53e331d560922d6a433f5f84bb3b9c0f..3e1e6e1c804f2fcbafe437bad9d4ca6a17180e72 100644 (file)
@@ -2959,19 +2959,11 @@ VkResult anv_DeviceWaitIdle(
     VkDevice                                    _device)
 {
    ANV_FROM_HANDLE(anv_device, device, _device);
+
    if (anv_device_is_lost(device))
       return VK_ERROR_DEVICE_LOST;
 
-   struct anv_batch batch;
-
-   uint32_t cmds[8];
-   batch.start = batch.next = cmds;
-   batch.end = (void *) cmds + sizeof(cmds);
-
-   anv_batch_emit(&batch, GEN7_MI_BATCH_BUFFER_END, bbe);
-   anv_batch_emit(&batch, GEN7_MI_NOOP, noop);
-
-   return anv_device_submit_simple_batch(device, &batch);
+   return anv_device_submit_simple_batch(device, NULL);
 }
 
 bool
index 87abbebe8ab86cab53f677a606b7bba4ee3d2d8d..dbe2febaef7ae5c965fa7fb7200a30315ee8fca0 100644 (file)
@@ -123,15 +123,20 @@ anv_device_submit_simple_batch(struct anv_device *device,
    VkResult result = VK_SUCCESS;
    uint32_t size;
 
-   /* Kernel driver requires 8 byte aligned batch length */
-   size = align_u32(batch->next - batch->start, 8);
-   result = anv_bo_pool_alloc(&device->batch_bo_pool, size, &bo);
-   if (result != VK_SUCCESS)
-      return result;
+   if (batch) {
+      /* Kernel driver requires 8 byte aligned batch length */
+      size = align_u32(batch->next - batch->start, 8);
+      result = anv_bo_pool_alloc(&device->batch_bo_pool, size, &bo);
+      if (result != VK_SUCCESS)
+         return result;
 
-   memcpy(bo->map, batch->start, size);
-   if (!device->info.has_llc)
-      gen_flush_range(bo->map, size);
+      memcpy(bo->map, batch->start, size);
+      if (!device->info.has_llc)
+         gen_flush_range(bo->map, size);
+   } else {
+      size = device->trivial_batch_bo->size;
+      bo = device->trivial_batch_bo;
+   }
 
    exec2_objects[0].handle = bo->gem_handle;
    exec2_objects[0].relocation_count = 0;
@@ -168,7 +173,8 @@ anv_device_submit_simple_batch(struct anv_device *device,
    result = anv_device_wait(device, bo, INT64_MAX);
 
  fail:
-   anv_bo_pool_free(&device->batch_bo_pool, bo);
+   if (batch)
+      anv_bo_pool_free(&device->batch_bo_pool, bo);
 
    return result;
 }