Mesa (master): anv: Set EXEC_OBJECT_ASYNC when available

Jason Ekstrand jekstrand at kemper.freedesktop.org
Fri Apr 28 03:53:03 UTC 2017


Module: Mesa
Branch: master
Commit: 35e626bd0e59e7ce9fd97ccef66b2468c09206a4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=35e626bd0e59e7ce9fd97ccef66b2468c09206a4

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Thu Apr 13 16:30:19 2017 -0700

anv: Set EXEC_OBJECT_ASYNC when available

Reviewed-by: Chad Versace <chadversary at chromium.org>

---

 src/intel/vulkan/anv_allocator.c | 3 +++
 src/intel/vulkan/anv_device.c    | 5 +++++
 src/intel/vulkan/anv_private.h   | 1 +
 src/intel/vulkan/anv_wsi.c       | 1 +
 4 files changed, 10 insertions(+)

diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c
index 5f5577f278..7e4db1aeb6 100644
--- a/src/intel/vulkan/anv_allocator.c
+++ b/src/intel/vulkan/anv_allocator.c
@@ -504,6 +504,9 @@ anv_block_pool_grow(struct anv_block_pool *pool, struct anv_block_state *state)
    anv_bo_init(&pool->bo, gem_handle, size);
    pool->bo.map = map;
 
+   if (pool->device->instance->physicalDevice.has_exec_async)
+      pool->bo.flags |= EXEC_OBJECT_ASYNC;
+
 done:
    pthread_mutex_unlock(&pool->device->mutex);
 
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 8f4625ba00..b3dad65dd4 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -202,6 +202,8 @@ anv_physical_device_init(struct anv_physical_device *device,
    if (result != VK_SUCCESS)
       goto fail;
 
+   device->has_exec_async = anv_gem_get_param(fd, I915_PARAM_HAS_EXEC_ASYNC);
+
    if (!anv_device_get_cache_uuid(device->uuid, device->chipset_id)) {
       result = vk_errorf(VK_ERROR_INITIALIZATION_FAILED,
                          "cannot generate UUID");
@@ -1527,6 +1529,9 @@ anv_bo_init_new(struct anv_bo *bo, struct anv_device *device, uint64_t size)
    if (device->instance->physicalDevice.supports_48bit_addresses)
       bo->flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
 
+   if (device->instance->physicalDevice.has_exec_async)
+      bo->flags |= EXEC_OBJECT_ASYNC;
+
    return VK_SUCCESS;
 }
 
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index dbe1e0475e..061bd1a5df 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -625,6 +625,7 @@ struct anv_physical_device {
     struct brw_compiler *                       compiler;
     struct isl_device                           isl_dev;
     int                                         cmd_parser_version;
+    bool                                        has_exec_async;
 
     uint32_t                                    eu_total;
     uint32_t                                    subslice_total;
diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c
index ba66ea6d46..a024561c94 100644
--- a/src/intel/vulkan/anv_wsi.c
+++ b/src/intel/vulkan/anv_wsi.c
@@ -208,6 +208,7 @@ x11_anv_wsi_image_create(VkDevice device_h,
     * know we're writing to them and synchronize uses on other rings (eg if
     * the display server uses the blitter ring).
     */
+   memory->bo.flags &= ~EXEC_OBJECT_ASYNC;
    memory->bo.flags |= EXEC_OBJECT_WRITE;
 
    anv_BindImageMemory(device_h, image_h, memory_h, 0);




More information about the mesa-commit mailing list