summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2017-04-13 16:30:19 -0700
committerJason Ekstrand <[email protected]>2017-04-27 20:08:46 -0700
commit35e626bd0e59e7ce9fd97ccef66b2468c09206a4 (patch)
treef0ae99f348c71a1d9cbaedb946463b79079f1c80
parentbd3a9813b92bd2e116b58f0932bc7f1f722a9f63 (diff)
anv: Set EXEC_OBJECT_ASYNC when available
Reviewed-by: Chad Versace <[email protected]>
-rw-r--r--src/intel/vulkan/anv_allocator.c3
-rw-r--r--src/intel/vulkan/anv_device.c5
-rw-r--r--src/intel/vulkan/anv_private.h1
-rw-r--r--src/intel/vulkan/anv_wsi.c1
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);