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