summaryrefslogtreecommitdiffstats
path: root/src/intel/vulkan
diff options
context:
space:
mode:
authorTapani Pälli <[email protected]>2018-10-09 09:53:55 +0300
committerTapani Pälli <[email protected]>2018-12-19 09:38:41 +0200
commit5c65c60d6c9120b2704e8767f3381faef97c4052 (patch)
tree407ab04f2cc1ab166811e6c6546aac5ef540475e /src/intel/vulkan
parent884fc90fdebaad93986c80752df3723b7f8f1392 (diff)
anv: refactor, remove else block in AllocateMemory
This makes it cleaner to introduce more cases where we import memory from different types of external memory buffers. Signed-off-by: Tapani Pälli <[email protected]> Reviewed-by: Lionel Landwerlin <[email protected]>
Diffstat (limited to 'src/intel/vulkan')
-rw-r--r--src/intel/vulkan/anv_device.c64
1 files changed, 34 insertions, 30 deletions
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index bc4dba888fb..fb824d3ca43 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -2340,42 +2340,46 @@ VkResult anv_AllocateMemory(
* If the import fails, we leave the file descriptor open.
*/
close(fd_info->fd);
- } else {
- const VkExportMemoryAllocateInfoKHR *fd_info =
- vk_find_struct_const(pAllocateInfo->pNext, EXPORT_MEMORY_ALLOCATE_INFO_KHR);
- if (fd_info && fd_info->handleTypes)
- bo_flags |= ANV_BO_EXTERNAL;
-
- result = anv_bo_cache_alloc(device, &device->bo_cache,
- pAllocateInfo->allocationSize, bo_flags,
- &mem->bo);
- if (result != VK_SUCCESS)
- goto fail;
+ goto success;
+ }
- const VkMemoryDedicatedAllocateInfoKHR *dedicated_info =
- vk_find_struct_const(pAllocateInfo->pNext, MEMORY_DEDICATED_ALLOCATE_INFO_KHR);
- if (dedicated_info && dedicated_info->image != VK_NULL_HANDLE) {
- ANV_FROM_HANDLE(anv_image, image, dedicated_info->image);
+ /* Regular allocate (not importing memory). */
- /* Some legacy (non-modifiers) consumers need the tiling to be set on
- * the BO. In this case, we have a dedicated allocation.
- */
- if (image->needs_set_tiling) {
- const uint32_t i915_tiling =
- isl_tiling_to_i915_tiling(image->planes[0].surface.isl.tiling);
- int ret = anv_gem_set_tiling(device, mem->bo->gem_handle,
- image->planes[0].surface.isl.row_pitch_B,
- i915_tiling);
- if (ret) {
- anv_bo_cache_release(device, &device->bo_cache, mem->bo);
- return vk_errorf(device->instance, NULL,
- VK_ERROR_OUT_OF_DEVICE_MEMORY,
- "failed to set BO tiling: %m");
- }
+ const VkExportMemoryAllocateInfoKHR *export_info =
+ vk_find_struct_const(pAllocateInfo->pNext, EXPORT_MEMORY_ALLOCATE_INFO_KHR);
+ if (export_info && export_info->handleTypes)
+ bo_flags |= ANV_BO_EXTERNAL;
+
+ result = anv_bo_cache_alloc(device, &device->bo_cache,
+ pAllocateInfo->allocationSize, bo_flags,
+ &mem->bo);
+ if (result != VK_SUCCESS)
+ goto fail;
+
+ const VkMemoryDedicatedAllocateInfoKHR *dedicated_info =
+ vk_find_struct_const(pAllocateInfo->pNext, MEMORY_DEDICATED_ALLOCATE_INFO_KHR);
+ if (dedicated_info && dedicated_info->image != VK_NULL_HANDLE) {
+ ANV_FROM_HANDLE(anv_image, image, dedicated_info->image);
+
+ /* Some legacy (non-modifiers) consumers need the tiling to be set on
+ * the BO. In this case, we have a dedicated allocation.
+ */
+ if (image->needs_set_tiling) {
+ const uint32_t i915_tiling =
+ isl_tiling_to_i915_tiling(image->planes[0].surface.isl.tiling);
+ int ret = anv_gem_set_tiling(device, mem->bo->gem_handle,
+ image->planes[0].surface.isl.row_pitch_B,
+ i915_tiling);
+ if (ret) {
+ anv_bo_cache_release(device, &device->bo_cache, mem->bo);
+ return vk_errorf(device->instance, NULL,
+ VK_ERROR_OUT_OF_DEVICE_MEMORY,
+ "failed to set BO tiling: %m");
}
}
}
+ success:
*pMem = anv_device_memory_to_handle(mem);
return VK_SUCCESS;