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