• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/vk/VulkanGraphiteTypes.h"
13 #include "include/private/gpu/vk/SkiaVulkan.h"
14 
15 namespace skgpu::graphite {
16 
17 struct VulkanTextureSpec {
VulkanTextureSpecVulkanTextureSpec18     VulkanTextureSpec()
19             : fFlags(0)
20             , fFormat(VK_FORMAT_UNDEFINED)
21             , fImageTiling(VK_IMAGE_TILING_OPTIMAL)
22             , fImageUsageFlags(0)
23             , fSharingMode(VK_SHARING_MODE_EXCLUSIVE)
24             , fAspectMask(VK_IMAGE_ASPECT_COLOR_BIT)
25             , fYcbcrConversionInfo({}) {}
VulkanTextureSpecVulkanTextureSpec26     VulkanTextureSpec(const VulkanTextureInfo& info)
27             : fFlags(info.fFlags)
28             , fFormat(info.fFormat)
29             , fImageTiling(info.fImageTiling)
30             , fImageUsageFlags(info.fImageUsageFlags)
31             , fSharingMode(info.fSharingMode)
32             , fAspectMask(info.fAspectMask)
33             , fYcbcrConversionInfo(info.fYcbcrConversionInfo) {}
34 
35     bool operator==(const VulkanTextureSpec& that) const {
36         return fFlags == that.fFlags &&
37                fFormat == that.fFormat &&
38                fImageTiling == that.fImageTiling &&
39                fImageUsageFlags == that.fImageUsageFlags &&
40                fSharingMode == that.fSharingMode &&
41                fAspectMask == that.fAspectMask &&
42                fYcbcrConversionInfo == that.fYcbcrConversionInfo;
43     }
44 
isCompatibleVulkanTextureSpec45     bool isCompatible(const VulkanTextureSpec& that) const {
46         // The usages may match or the usage passed in may be a superset of the usage stored within.
47         return fFlags == that.fFlags &&
48                fFormat == that.fFormat &&
49                fImageTiling == that.fImageTiling &&
50                fSharingMode == that.fSharingMode &&
51                fAspectMask == that.fAspectMask &&
52                (fImageUsageFlags & that.fImageUsageFlags) == fImageUsageFlags &&
53                fYcbcrConversionInfo == that.fYcbcrConversionInfo;
54     }
55 
toStringVulkanTextureSpec56     SkString toString() const {
57         return SkStringPrintf(
58                 "flags=0x%08X,format=%d,imageTiling=%d,imageUsageFlags=0x%08X,sharingMode=%d,"
59                 "aspectMask=%u",
60                 fFlags,
61                 fFormat,
62                 fImageTiling,
63                 fImageUsageFlags,
64                 fSharingMode,
65                 fAspectMask);
66     }
67 
68     VkImageCreateFlags         fFlags;
69     VkFormat                   fFormat;
70     VkImageTiling              fImageTiling;
71     VkImageUsageFlags          fImageUsageFlags;
72     VkSharingMode              fSharingMode;
73     VkImageAspectFlags         fAspectMask;
74     VulkanYcbcrConversionInfo  fYcbcrConversionInfo;
75 };
76 
77 VulkanTextureInfo VulkanTextureSpecToTextureInfo(const VulkanTextureSpec& vkSpec,
78                                                  uint32_t sampleCount,
79                                                  Mipmapped mipmapped);
80 
81 } // namespace skgpu::graphite
82 
83 #endif // skgpu_graphite_VulkanGraphiteTypesPriv_DEFINED
84