From: Jason Ekstrand Date: Thu, 13 Apr 2017 23:30:19 +0000 (-0700) Subject: anv: Set EXEC_OBJECT_ASYNC when available X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=35e626bd0e59e7ce9fd97ccef66b2468c09206a4;p=mesa.git anv: Set EXEC_OBJECT_ASYNC when available Reviewed-by: Chad Versace --- 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);