blob: 71f3c163c7f54a8e370eb5589cb218f98e31680a [file] [log] [blame]
/*
* Copyright 2022 Google LLC.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef skgpu_graphite_VulkanGraphiteTypesPriv_DEFINED
#define skgpu_graphite_VulkanGraphiteTypesPriv_DEFINED
#include "include/core/SkString.h"
#include "include/gpu/graphite/BackendTexture.h"
#include "include/gpu/graphite/vk/VulkanGraphiteTypes.h"
#include "include/private/gpu/vk/SkiaVulkan.h"
namespace skgpu::graphite {
struct VulkanTextureSpec {
VulkanTextureSpec()
: fFlags(0)
, fFormat(VK_FORMAT_UNDEFINED)
, fImageTiling(VK_IMAGE_TILING_OPTIMAL)
, fImageUsageFlags(0)
, fSharingMode(VK_SHARING_MODE_EXCLUSIVE)
, fAspectMask(VK_IMAGE_ASPECT_COLOR_BIT)
, fYcbcrConversionInfo({}) {}
VulkanTextureSpec(const VulkanTextureInfo& info)
: fFlags(info.fFlags)
, fFormat(info.fFormat)
, fImageTiling(info.fImageTiling)
, fImageUsageFlags(info.fImageUsageFlags)
, fSharingMode(info.fSharingMode)
, fAspectMask(info.fAspectMask)
, fYcbcrConversionInfo(info.fYcbcrConversionInfo) {}
bool operator==(const VulkanTextureSpec& that) const {
return fFlags == that.fFlags &&
fFormat == that.fFormat &&
fImageTiling == that.fImageTiling &&
fImageUsageFlags == that.fImageUsageFlags &&
fSharingMode == that.fSharingMode &&
fAspectMask == that.fAspectMask &&
fYcbcrConversionInfo == that.fYcbcrConversionInfo;
}
bool isCompatible(const VulkanTextureSpec& that) const {
// The usages may match or the usage passed in may be a superset of the usage stored within.
return fFlags == that.fFlags &&
fFormat == that.fFormat &&
fImageTiling == that.fImageTiling &&
fSharingMode == that.fSharingMode &&
fAspectMask == that.fAspectMask &&
(fImageUsageFlags & that.fImageUsageFlags) == fImageUsageFlags &&
fYcbcrConversionInfo == that.fYcbcrConversionInfo;
}
SkString toString() const {
return SkStringPrintf(
"flags=0x%08X,format=%d,imageTiling=%d,imageUsageFlags=0x%08X,sharingMode=%d,"
"aspectMask=%u",
fFlags,
fFormat,
fImageTiling,
fImageUsageFlags,
fSharingMode,
fAspectMask);
}
VkImageCreateFlags fFlags;
VkFormat fFormat;
VkImageTiling fImageTiling;
VkImageUsageFlags fImageUsageFlags;
VkSharingMode fSharingMode;
VkImageAspectFlags fAspectMask;
VulkanYcbcrConversionInfo fYcbcrConversionInfo;
};
VulkanTextureInfo VulkanTextureSpecToTextureInfo(const VulkanTextureSpec& vkSpec,
uint32_t sampleCount,
Mipmapped mipmapped);
namespace TextureInfos {
VulkanTextureSpec GetVulkanTextureSpec(const TextureInfo&);
VkFormat GetVkFormat(const TextureInfo&);
VkImageUsageFlags GetVkUsageFlags(const TextureInfo&);
VulkanYcbcrConversionInfo GetVulkanYcbcrConversionInfo(const TextureInfo&);
} // namespace TextureInfos
namespace BackendTextures {
VkImage GetVkImage(const BackendTexture&);
VkImageLayout GetVkImageLayout(const BackendTexture&);
uint32_t GetVkQueueFamilyIndex(const BackendTexture&);
VulkanAlloc GetMemoryAlloc(const BackendTexture&);
void SetMutableState(BackendTexture*, const skgpu::MutableTextureState&);
sk_sp<skgpu::MutableTextureState> GetMutableState(const BackendTexture&);
} // namespace BackendTextures
} // namespace skgpu::graphite
#endif // skgpu_graphite_VulkanGraphiteTypesPriv_DEFINED