blob: f3572df898fdd3da02280c711c16dcb64abebff5 [file] [log] [blame]
/*
* 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