| /* |
| * Copyright 2019 Google LLC |
| * SPDX-License-Identifier: MIT |
| * |
| * based in part on anv and radv which are: |
| * Copyright © 2015 Intel Corporation |
| * Copyright © 2016 Red Hat. |
| * Copyright © 2016 Bas Nieuwenhuizen |
| */ |
| |
| #ifndef VN_IMAGE_H |
| #define VN_IMAGE_H |
| |
| #include "vn_common.h" |
| |
| /* changing this to VK_IMAGE_LAYOUT_PRESENT_SRC_KHR disables ownership |
| * transfers and can be useful for debugging |
| */ |
| #define VN_PRESENT_SRC_INTERNAL_LAYOUT VK_IMAGE_LAYOUT_GENERAL |
| |
| struct vn_image_memory_requirements { |
| VkMemoryRequirements2 memory; |
| VkMemoryDedicatedRequirements dedicated; |
| }; |
| |
| struct vn_image_create_deferred_info { |
| VkImageCreateInfo create; |
| VkImageFormatListCreateInfo list; |
| VkImageStencilUsageCreateInfo stencil; |
| |
| /* True if VkImageCreateInfo::format is translated from a non-zero |
| * VkExternalFormatANDROID::externalFormat for the AHB image. |
| */ |
| bool from_external_format; |
| /* track whether vn_image_init_deferred succeeds */ |
| bool initialized; |
| }; |
| |
| struct vn_image { |
| struct vn_object_base base; |
| |
| VkSharingMode sharing_mode; |
| |
| struct vn_image_memory_requirements requirements[4]; |
| |
| /* For VK_ANDROID_external_memory_android_hardware_buffer, real image |
| * creation is deferred until bind image memory. |
| */ |
| struct vn_image_create_deferred_info *deferred_info; |
| |
| struct { |
| /* True if this is a swapchain image and VK_IMAGE_LAYOUT_PRESENT_SRC_KHR |
| * is a valid layout. A swapchain image can be created internally |
| * (wsi_image_create_info) or externally (VkNativeBufferANDROID and |
| * VkImageSwapchainCreateInfoKHR). |
| */ |
| bool is_wsi; |
| bool is_prime_blit_src; |
| VkImageTiling tiling_override; |
| /* valid when tiling is VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT */ |
| uint64_t drm_format_modifier; |
| |
| struct vn_device_memory *memory; |
| |
| /* For VK_ANDROID_native_buffer, the WSI image owns the memory. */ |
| bool memory_owned; |
| } wsi; |
| }; |
| VK_DEFINE_NONDISP_HANDLE_CASTS(vn_image, |
| base.base, |
| VkImage, |
| VK_OBJECT_TYPE_IMAGE) |
| |
| struct vn_image_view { |
| struct vn_object_base base; |
| |
| const struct vn_image *image; |
| }; |
| VK_DEFINE_NONDISP_HANDLE_CASTS(vn_image_view, |
| base.base, |
| VkImageView, |
| VK_OBJECT_TYPE_IMAGE_VIEW) |
| |
| struct vn_sampler { |
| struct vn_object_base base; |
| }; |
| VK_DEFINE_NONDISP_HANDLE_CASTS(vn_sampler, |
| base.base, |
| VkSampler, |
| VK_OBJECT_TYPE_SAMPLER) |
| |
| struct vn_sampler_ycbcr_conversion { |
| struct vn_object_base base; |
| }; |
| VK_DEFINE_NONDISP_HANDLE_CASTS(vn_sampler_ycbcr_conversion, |
| base.base, |
| VkSamplerYcbcrConversion, |
| VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION) |
| |
| VkResult |
| vn_image_create(struct vn_device *dev, |
| const VkImageCreateInfo *create_info, |
| const VkAllocationCallbacks *alloc, |
| struct vn_image **out_img); |
| |
| VkResult |
| vn_image_init_deferred(struct vn_device *dev, |
| const VkImageCreateInfo *create_info, |
| struct vn_image *img); |
| |
| VkResult |
| vn_image_create_deferred(struct vn_device *dev, |
| const VkImageCreateInfo *create_info, |
| const VkAllocationCallbacks *alloc, |
| struct vn_image **out_img); |
| |
| #endif /* VN_IMAGE_H */ |