xref: /aosp_15_r20/external/skia/src/gpu/graphite/vk/VulkanGraphiteTypesPriv.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2022 Google LLC.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef skgpu_graphite_VulkanGraphiteTypesPriv_DEFINED
9 #define skgpu_graphite_VulkanGraphiteTypesPriv_DEFINED
10 
11 #include "include/core/SkString.h"
12 #include "include/gpu/graphite/BackendTexture.h"
13 #include "include/gpu/graphite/vk/VulkanGraphiteTypes.h"
14 #include "include/private/gpu/vk/SkiaVulkan.h"
15 
16 namespace skgpu::graphite {
17 
18 struct VulkanTextureSpec {
VulkanTextureSpecVulkanTextureSpec19     VulkanTextureSpec()
20             : fFlags(0)
21             , fFormat(VK_FORMAT_UNDEFINED)
22             , fImageTiling(VK_IMAGE_TILING_OPTIMAL)
23             , fImageUsageFlags(0)
24             , fSharingMode(VK_SHARING_MODE_EXCLUSIVE)
25             , fAspectMask(VK_IMAGE_ASPECT_COLOR_BIT)
26             , fYcbcrConversionInfo({}) {}
VulkanTextureSpecVulkanTextureSpec27     VulkanTextureSpec(const VulkanTextureInfo& info)
28             : fFlags(info.fFlags)
29             , fFormat(info.fFormat)
30             , fImageTiling(info.fImageTiling)
31             , fImageUsageFlags(info.fImageUsageFlags)
32             , fSharingMode(info.fSharingMode)
33             , fAspectMask(info.fAspectMask)
34             , fYcbcrConversionInfo(info.fYcbcrConversionInfo) {}
35 
36     bool operator==(const VulkanTextureSpec& that) const {
37         return fFlags == that.fFlags &&
38                fFormat == that.fFormat &&
39                fImageTiling == that.fImageTiling &&
40                fImageUsageFlags == that.fImageUsageFlags &&
41                fSharingMode == that.fSharingMode &&
42                fAspectMask == that.fAspectMask &&
43                fYcbcrConversionInfo == that.fYcbcrConversionInfo;
44     }
45 
isCompatibleVulkanTextureSpec46     bool isCompatible(const VulkanTextureSpec& that) const {
47         // The usages may match or the usage passed in may be a superset of the usage stored within.
48         return fFlags == that.fFlags &&
49                fFormat == that.fFormat &&
50                fImageTiling == that.fImageTiling &&
51                fSharingMode == that.fSharingMode &&
52                fAspectMask == that.fAspectMask &&
53                (fImageUsageFlags & that.fImageUsageFlags) == fImageUsageFlags &&
54                fYcbcrConversionInfo == that.fYcbcrConversionInfo;
55     }
56 
toStringVulkanTextureSpec57     SkString toString() const {
58         return SkStringPrintf(
59                 "flags=0x%08X,format=%d,imageTiling=%d,imageUsageFlags=0x%08X,sharingMode=%d,"
60                 "aspectMask=%u",
61                 fFlags,
62                 fFormat,
63                 fImageTiling,
64                 fImageUsageFlags,
65                 fSharingMode,
66                 fAspectMask);
67     }
68 
69     VkImageCreateFlags         fFlags;
70     VkFormat                   fFormat;
71     VkImageTiling              fImageTiling;
72     VkImageUsageFlags          fImageUsageFlags;
73     VkSharingMode              fSharingMode;
74     VkImageAspectFlags         fAspectMask;
75     VulkanYcbcrConversionInfo  fYcbcrConversionInfo;
76 };
77 
78 VulkanTextureInfo VulkanTextureSpecToTextureInfo(const VulkanTextureSpec& vkSpec,
79                                                  uint32_t sampleCount,
80                                                  Mipmapped mipmapped);
81 
82 namespace TextureInfos {
83 VulkanTextureSpec GetVulkanTextureSpec(const TextureInfo&);
84 VkFormat GetVkFormat(const TextureInfo&);
85 VkImageUsageFlags GetVkUsageFlags(const TextureInfo&);
86 VulkanYcbcrConversionInfo GetVulkanYcbcrConversionInfo(const TextureInfo&);
87 }  // namespace TextureInfos
88 
89 namespace BackendTextures {
90 VkImage GetVkImage(const BackendTexture&);
91 VkImageLayout GetVkImageLayout(const BackendTexture&);
92 uint32_t GetVkQueueFamilyIndex(const BackendTexture&);
93 VulkanAlloc GetMemoryAlloc(const BackendTexture&);
94 
95 void SetMutableState(BackendTexture*, const skgpu::MutableTextureState&);
96 sk_sp<skgpu::MutableTextureState> GetMutableState(const BackendTexture&);
97 }  // namespace BackendTextures
98 
99 }  // namespace skgpu::graphite
100 
101 #endif  // skgpu_graphite_VulkanGraphiteTypesPriv_DEFINED
102