xref: /aosp_15_r20/external/mesa3d/src/virtio/vulkan/vn_image.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2019 Google LLC
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  *
5*61046927SAndroid Build Coastguard Worker  * based in part on anv and radv which are:
6*61046927SAndroid Build Coastguard Worker  * Copyright © 2015 Intel Corporation
7*61046927SAndroid Build Coastguard Worker  * Copyright © 2016 Red Hat.
8*61046927SAndroid Build Coastguard Worker  * Copyright © 2016 Bas Nieuwenhuizen
9*61046927SAndroid Build Coastguard Worker  */
10*61046927SAndroid Build Coastguard Worker 
11*61046927SAndroid Build Coastguard Worker #ifndef VN_IMAGE_H
12*61046927SAndroid Build Coastguard Worker #define VN_IMAGE_H
13*61046927SAndroid Build Coastguard Worker 
14*61046927SAndroid Build Coastguard Worker #include "vn_common.h"
15*61046927SAndroid Build Coastguard Worker 
16*61046927SAndroid Build Coastguard Worker /* changing this to VK_IMAGE_LAYOUT_PRESENT_SRC_KHR disables ownership
17*61046927SAndroid Build Coastguard Worker  * transfers and can be useful for debugging
18*61046927SAndroid Build Coastguard Worker  */
19*61046927SAndroid Build Coastguard Worker #define VN_PRESENT_SRC_INTERNAL_LAYOUT VK_IMAGE_LAYOUT_GENERAL
20*61046927SAndroid Build Coastguard Worker 
21*61046927SAndroid Build Coastguard Worker struct vn_image_memory_requirements {
22*61046927SAndroid Build Coastguard Worker    VkMemoryRequirements2 memory;
23*61046927SAndroid Build Coastguard Worker    VkMemoryDedicatedRequirements dedicated;
24*61046927SAndroid Build Coastguard Worker };
25*61046927SAndroid Build Coastguard Worker 
26*61046927SAndroid Build Coastguard Worker struct vn_image_reqs_cache_entry {
27*61046927SAndroid Build Coastguard Worker    struct vn_image_memory_requirements requirements[4];
28*61046927SAndroid Build Coastguard Worker    uint8_t plane_count;
29*61046927SAndroid Build Coastguard Worker    uint8_t key[SHA1_DIGEST_LENGTH];
30*61046927SAndroid Build Coastguard Worker    struct list_head head;
31*61046927SAndroid Build Coastguard Worker };
32*61046927SAndroid Build Coastguard Worker 
33*61046927SAndroid Build Coastguard Worker struct vn_image_reqs_cache {
34*61046927SAndroid Build Coastguard Worker    struct hash_table *ht;
35*61046927SAndroid Build Coastguard Worker    struct list_head lru;
36*61046927SAndroid Build Coastguard Worker    simple_mtx_t mutex;
37*61046927SAndroid Build Coastguard Worker 
38*61046927SAndroid Build Coastguard Worker    struct {
39*61046927SAndroid Build Coastguard Worker       uint32_t cache_hit_count;
40*61046927SAndroid Build Coastguard Worker       uint32_t cache_miss_count;
41*61046927SAndroid Build Coastguard Worker       uint32_t cache_skip_count;
42*61046927SAndroid Build Coastguard Worker    } debug;
43*61046927SAndroid Build Coastguard Worker };
44*61046927SAndroid Build Coastguard Worker 
45*61046927SAndroid Build Coastguard Worker struct vn_image_create_deferred_info {
46*61046927SAndroid Build Coastguard Worker    VkImageCreateInfo create;
47*61046927SAndroid Build Coastguard Worker    VkImageFormatListCreateInfo list;
48*61046927SAndroid Build Coastguard Worker    VkImageStencilUsageCreateInfo stencil;
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker    /* True if VkImageCreateInfo::format is translated from a non-zero
51*61046927SAndroid Build Coastguard Worker     * VkExternalFormatANDROID::externalFormat for the AHB image.
52*61046927SAndroid Build Coastguard Worker     */
53*61046927SAndroid Build Coastguard Worker    bool from_external_format;
54*61046927SAndroid Build Coastguard Worker    /* track whether vn_image_init_deferred succeeds */
55*61046927SAndroid Build Coastguard Worker    bool initialized;
56*61046927SAndroid Build Coastguard Worker };
57*61046927SAndroid Build Coastguard Worker 
58*61046927SAndroid Build Coastguard Worker struct vn_image {
59*61046927SAndroid Build Coastguard Worker    struct vn_image_base base;
60*61046927SAndroid Build Coastguard Worker 
61*61046927SAndroid Build Coastguard Worker    VkSharingMode sharing_mode;
62*61046927SAndroid Build Coastguard Worker 
63*61046927SAndroid Build Coastguard Worker    struct vn_image_memory_requirements requirements[4];
64*61046927SAndroid Build Coastguard Worker 
65*61046927SAndroid Build Coastguard Worker    /* For VK_ANDROID_external_memory_android_hardware_buffer, real image
66*61046927SAndroid Build Coastguard Worker     * creation is deferred until bind image memory.
67*61046927SAndroid Build Coastguard Worker     */
68*61046927SAndroid Build Coastguard Worker    struct vn_image_create_deferred_info *deferred_info;
69*61046927SAndroid Build Coastguard Worker 
70*61046927SAndroid Build Coastguard Worker    struct {
71*61046927SAndroid Build Coastguard Worker       /* True if this is a swapchain image and VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
72*61046927SAndroid Build Coastguard Worker        * is a valid layout.  A swapchain image can be created internally
73*61046927SAndroid Build Coastguard Worker        * (wsi_image_create_info) or externally (VkNativeBufferANDROID and
74*61046927SAndroid Build Coastguard Worker        * VkImageSwapchainCreateInfoKHR).
75*61046927SAndroid Build Coastguard Worker        */
76*61046927SAndroid Build Coastguard Worker       bool is_wsi;
77*61046927SAndroid Build Coastguard Worker       bool is_prime_blit_src;
78*61046927SAndroid Build Coastguard Worker       VkImageTiling tiling_override;
79*61046927SAndroid Build Coastguard Worker       /* valid when tiling is VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT */
80*61046927SAndroid Build Coastguard Worker       uint64_t drm_format_modifier;
81*61046927SAndroid Build Coastguard Worker 
82*61046927SAndroid Build Coastguard Worker       struct vn_device_memory *memory;
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker       /* For VK_ANDROID_native_buffer, the WSI image owns the memory. */
85*61046927SAndroid Build Coastguard Worker       bool memory_owned;
86*61046927SAndroid Build Coastguard Worker    } wsi;
87*61046927SAndroid Build Coastguard Worker };
88*61046927SAndroid Build Coastguard Worker VK_DEFINE_NONDISP_HANDLE_CASTS(vn_image,
89*61046927SAndroid Build Coastguard Worker                                base.base.base,
90*61046927SAndroid Build Coastguard Worker                                VkImage,
91*61046927SAndroid Build Coastguard Worker                                VK_OBJECT_TYPE_IMAGE)
92*61046927SAndroid Build Coastguard Worker 
93*61046927SAndroid Build Coastguard Worker struct vn_image_view {
94*61046927SAndroid Build Coastguard Worker    struct vn_object_base base;
95*61046927SAndroid Build Coastguard Worker 
96*61046927SAndroid Build Coastguard Worker    const struct vn_image *image;
97*61046927SAndroid Build Coastguard Worker };
98*61046927SAndroid Build Coastguard Worker VK_DEFINE_NONDISP_HANDLE_CASTS(vn_image_view,
99*61046927SAndroid Build Coastguard Worker                                base.base,
100*61046927SAndroid Build Coastguard Worker                                VkImageView,
101*61046927SAndroid Build Coastguard Worker                                VK_OBJECT_TYPE_IMAGE_VIEW)
102*61046927SAndroid Build Coastguard Worker 
103*61046927SAndroid Build Coastguard Worker struct vn_sampler {
104*61046927SAndroid Build Coastguard Worker    struct vn_object_base base;
105*61046927SAndroid Build Coastguard Worker };
106*61046927SAndroid Build Coastguard Worker VK_DEFINE_NONDISP_HANDLE_CASTS(vn_sampler,
107*61046927SAndroid Build Coastguard Worker                                base.base,
108*61046927SAndroid Build Coastguard Worker                                VkSampler,
109*61046927SAndroid Build Coastguard Worker                                VK_OBJECT_TYPE_SAMPLER)
110*61046927SAndroid Build Coastguard Worker 
111*61046927SAndroid Build Coastguard Worker struct vn_sampler_ycbcr_conversion {
112*61046927SAndroid Build Coastguard Worker    struct vn_object_base base;
113*61046927SAndroid Build Coastguard Worker };
114*61046927SAndroid Build Coastguard Worker VK_DEFINE_NONDISP_HANDLE_CASTS(vn_sampler_ycbcr_conversion,
115*61046927SAndroid Build Coastguard Worker                                base.base,
116*61046927SAndroid Build Coastguard Worker                                VkSamplerYcbcrConversion,
117*61046927SAndroid Build Coastguard Worker                                VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION)
118*61046927SAndroid Build Coastguard Worker 
119*61046927SAndroid Build Coastguard Worker VkResult
120*61046927SAndroid Build Coastguard Worker vn_image_create(struct vn_device *dev,
121*61046927SAndroid Build Coastguard Worker                 const VkImageCreateInfo *create_info,
122*61046927SAndroid Build Coastguard Worker                 const VkAllocationCallbacks *alloc,
123*61046927SAndroid Build Coastguard Worker                 struct vn_image **out_img);
124*61046927SAndroid Build Coastguard Worker 
125*61046927SAndroid Build Coastguard Worker VkResult
126*61046927SAndroid Build Coastguard Worker vn_image_init_deferred(struct vn_device *dev,
127*61046927SAndroid Build Coastguard Worker                        const VkImageCreateInfo *create_info,
128*61046927SAndroid Build Coastguard Worker                        struct vn_image *img);
129*61046927SAndroid Build Coastguard Worker 
130*61046927SAndroid Build Coastguard Worker void
131*61046927SAndroid Build Coastguard Worker vn_image_reqs_cache_init(struct vn_device *dev);
132*61046927SAndroid Build Coastguard Worker 
133*61046927SAndroid Build Coastguard Worker void
134*61046927SAndroid Build Coastguard Worker vn_image_reqs_cache_fini(struct vn_device *dev);
135*61046927SAndroid Build Coastguard Worker 
136*61046927SAndroid Build Coastguard Worker #endif /* VN_IMAGE_H */
137