X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fintel%2Fvulkan%2Fanv_intel.c;h=146fc41d8a839398f98c4669a460a43393409028;hb=c9bebae2877e55cdcd94f9f9f3f6805238caeb28;hp=82373f0c91d07387904bcd56d0de1d99ef6d5081;hpb=c5124fbc74dca573fead4149d4287103a84ebae2;p=mesa.git diff --git a/src/intel/vulkan/anv_intel.c b/src/intel/vulkan/anv_intel.c index 82373f0c91d..146fc41d8a8 100644 --- a/src/intel/vulkan/anv_intel.c +++ b/src/intel/vulkan/anv_intel.c @@ -53,30 +53,33 @@ VkResult anv_CreateDmaBufImageINTEL( &(struct anv_image_create_info) { .isl_tiling_flags = ISL_TILING_X_BIT, .stride = pCreateInfo->strideInBytes, - .vk_info = - &(VkImageCreateInfo) { - .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, - .imageType = VK_IMAGE_TYPE_2D, - .format = pCreateInfo->format, - .extent = pCreateInfo->extent, - .mipLevels = 1, - .arrayLayers = 1, - .samples = 1, - /* FIXME: Need a way to use X tiling to allow scanout */ - .tiling = VK_IMAGE_TILING_OPTIMAL, - .usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - .flags = 0, - }}, - pAllocator, &image_h); + .vk_info = &(VkImageCreateInfo) { + .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, + .imageType = VK_IMAGE_TYPE_2D, + .format = pCreateInfo->format, + .extent = pCreateInfo->extent, + .mipLevels = 1, + .arrayLayers = 1, + .samples = 1, + /* FIXME: Need a way to use X tiling to allow scanout */ + .tiling = VK_IMAGE_TILING_OPTIMAL, + .usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, + .flags = 0, + } + }, pAllocator, &image_h); if (result != VK_SUCCESS) goto fail; - close(pCreateInfo->fd); - image = anv_image_from_handle(image_h); + uint64_t bo_flags = ANV_BO_EXTERNAL; + if (device->instance->physicalDevice.supports_48bit_addresses) + bo_flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS; + if (device->instance->physicalDevice.use_softpin) + bo_flags |= EXEC_OBJECT_PINNED; + result = anv_bo_cache_import(device, &device->bo_cache, - pCreateInfo->fd, &mem->bo); + pCreateInfo->fd, bo_flags, &mem->bo); if (result != VK_SUCCESS) goto fail_import; @@ -84,19 +87,18 @@ VkResult anv_CreateDmaBufImageINTEL( if (mem->bo->size < aligned_image_size) { result = vk_errorf(device->instance, device, - VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR, + VK_ERROR_INVALID_EXTERNAL_HANDLE, "dma-buf too small for image in " - "vkCreateDmaBufImageINTEL: %"PRIu64"B < "PRIu64"B", + "vkCreateDmaBufImageINTEL: %"PRIu64"B < %"PRIu64"B", mem->bo->size, aligned_image_size); anv_bo_cache_release(device, &device->bo_cache, mem->bo); goto fail_import; } - if (device->instance->physicalDevice.supports_48bit_addresses) - mem->bo->flags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS; - - image->planes[0].bo = mem->bo; - image->planes[0].bo_offset = 0; + image->planes[0].address = (struct anv_address) { + .bo = mem->bo, + .offset = 0, + }; assert(image->extent.width > 0); assert(image->extent.height > 0); @@ -105,6 +107,8 @@ VkResult anv_CreateDmaBufImageINTEL( *pMem = anv_device_memory_to_handle(mem); *pImage = anv_image_to_handle(image); + close(pCreateInfo->fd); + return VK_SUCCESS; fail_import: