diff options
author | Jason Ekstrand <[email protected]> | 2017-04-13 16:30:19 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2017-04-27 20:08:46 -0700 |
commit | 35e626bd0e59e7ce9fd97ccef66b2468c09206a4 (patch) | |
tree | f0ae99f348c71a1d9cbaedb946463b79079f1c80 | |
parent | bd3a9813b92bd2e116b58f0932bc7f1f722a9f63 (diff) |
anv: Set EXEC_OBJECT_ASYNC when available
Reviewed-by: Chad Versace <[email protected]>
-rw-r--r-- | src/intel/vulkan/anv_allocator.c | 3 | ||||
-rw-r--r-- | src/intel/vulkan/anv_device.c | 5 | ||||
-rw-r--r-- | src/intel/vulkan/anv_private.h | 1 | ||||
-rw-r--r-- | src/intel/vulkan/anv_wsi.c | 1 |
4 files changed, 10 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c index 5f5577f2781..7e4db1aeb65 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 8f4625ba005..b3dad65dd46 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 dbe1e0475e1..061bd1a5dfd 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 ba66ea6d461..a024561c942 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); |