| /* |
| * Copyright 2024 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| #include "include/core/SkString.h" |
| #include "include/gpu/graphite/vk/VulkanGraphiteTypes.h" |
| #include "include/gpu/vk/VulkanMutableTextureState.h" |
| #include "src/gpu/graphite/TextureInfoPriv.h" |
| #include "src/gpu/graphite/vk/VulkanGraphiteUtils.h" |
| #include "src/gpu/vk/VulkanUtilsPriv.h" |
| |
| #include <cstdint> |
| |
| namespace skgpu::graphite { |
| |
| SkString VulkanTextureInfo::toBackendString() const { |
| return SkStringPrintf( |
| "flags=0x%08X,imageTiling=%d,imageUsageFlags=0x%08X,sharingMode=%d," |
| "aspectMask=%u", |
| fFlags, |
| fImageTiling, |
| fImageUsageFlags, |
| fSharingMode, |
| fAspectMask); |
| } |
| |
| TextureFormat VulkanTextureInfo::viewFormat() const { |
| if (fYcbcrConversionInfo.isValid()) { |
| return fYcbcrConversionInfo.format() == VK_FORMAT_UNDEFINED |
| ? TextureFormat::kExternal |
| : VkFormatToTextureFormat(fYcbcrConversionInfo.format()); |
| } |
| |
| return VkFormatToTextureFormat(fFormat); |
| } |
| |
| bool VulkanTextureInfo::isCompatible(const TextureInfo& that, bool requireExact) const { |
| const auto& vt = TextureInfoPriv::Get<VulkanTextureInfo>(that); |
| |
| // The usages may match or the usage passed in may be a superset of the usage stored within. |
| const auto usageMask = requireExact ? vt.fImageUsageFlags : fImageUsageFlags; |
| return fFlags == vt.fFlags && |
| fFormat == vt.fFormat && |
| fImageTiling == vt.fImageTiling && |
| fSharingMode == vt.fSharingMode && |
| fAspectMask == vt.fAspectMask && |
| (usageMask & vt.fImageUsageFlags) == fImageUsageFlags && |
| fYcbcrConversionInfo == vt.fYcbcrConversionInfo; |
| } |
| |
| namespace TextureInfos { |
| |
| TextureInfo MakeVulkan(const VulkanTextureInfo& vkInfo) { |
| return TextureInfoPriv::Make(vkInfo); |
| } |
| |
| bool GetVulkanTextureInfo(const TextureInfo& info, VulkanTextureInfo* out) { |
| return TextureInfoPriv::Copy(info, out); |
| } |
| |
| } // namespace TextureInfos |
| |
| } // namespace skgpu::graphite |