32 SKGPU_LOG_E(
"Tried to create VkImage with empty dimensions.");
37 SKGPU_LOG_E(
"Tried to create VkImage with too large a size.");
42 SKGPU_LOG_E(
"Tried to create %s VkImage in %s Context.",
43 info.isProtected() == Protected::kYes ?
"protected" :
"unprotected",
57 SKGPU_LOG_E(
"Failed creating VkImage because we could not covert the number of samples: "
58 "%u to a VkSampleCountFlagBits.",
info.numSamples());
69 uint32_t numMipLevels = 1;
70 if (
info.mipmapped() == Mipmapped::kYes) {
108 bool useLazyAllocation =
117 forceDedicatedMemory,
125 if (useLazyAllocation &&
127 SKGPU_LOG_E(
"Failed allocate lazy vulkan memory when requested");
159 info.vulkanTextureSpec().fYcbcrConversionInfo);
169 std::move(ycbcrConversion)));
180 info.vulkanTextureSpec().fYcbcrConversionInfo);
190 std::move(ycbcrConversion)));
211 uint32_t newQueueFamilyIndex)
const {
220 this->
textureInfo().getVulkanTextureInfo(&textureInfo);
230 SkDebugf(
"Lazy Image. This: %p, image: %d, size: %d\n",
this, fImage, size);
271 if (newLayout ==
currentLayout && currentQueueIndex == newQueueFamilyIndex &&
282 uint32_t numMipLevels = 1;
284 if (this->
mipmapped() == Mipmapped::kYes) {
297 { aspectFlags, 0, numMipLevels, 0, 1 }
301 &imageMemoryBarrier);
316 :
Texture(sharedContext, dimensions,
info,
std::move(mutableState), ownership, budgeted)
318 , fMemoryAlloc(alloc)
319 , fSamplerYcbcrConversion(
std::move(ycbcrConversion)) {}
402 for (
int i = 0; i < fImageViews.size(); ++i) {
404 return fImageViews[i].get();
410 this->
textureInfo().getVulkanTextureInfo(&vkTexInfo);
420 fSamplerYcbcrConversion);
421 return fImageViews.push_back(std::move(imageView)).get();
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
#define SKGPU_LOG_E(fmt,...)
void SK_SPI SkDebugf(const char format[],...) SK_PRINTF_LIKE(1
static constexpr bool SkToBool(const T &x)
#define VULKAN_CALL(IFACE, X)
#define VULKAN_CALL_RESULT(SHARED_CONTEXT, RESULT, X)
static int ComputeLevelCount(int baseWidth, int baseHeight)
bool protectedSupport() const
int maxTextureSize() const
skgpu::Budgeted budgeted() const
const SharedContext * sharedContext() const
Ownership ownership() const
Mipmapped mipmapped() const
Mipmapped mipmapped() const
SkISize dimensions() const
MutableTextureState * mutableState() const
const TextureInfo & textureInfo() const
bool shouldAlwaysUseDedicatedImageMemory() const
void addImageMemoryBarrier(const Resource *, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, bool byRegion, VkImageMemoryBarrier *barrier)
static std::unique_ptr< const VulkanImageView > Make(const VulkanSharedContext *sharedContext, VkImage image, VkFormat format, Usage usage, uint32_t miplevels, sk_sp< VulkanSamplerYcbcrConversion >)
sk_sp< VulkanSamplerYcbcrConversion > findOrCreateCompatibleSamplerYcbcrConversion(const VulkanYcbcrConversionInfo &ycbcrInfo) const
void updateImageLayout(VkImageLayout)
uint32_t currentQueueFamilyIndex() const
void setImageLayoutAndQueueIndex(VulkanCommandBuffer *, VkImageLayout newLayout, VkAccessFlags dstAccessMask, VkPipelineStageFlags dstStageMask, bool byRegion, uint32_t newQueueFamilyIndex) const
static sk_sp< Texture > Make(const VulkanSharedContext *, const VulkanResourceProvider *, SkISize dimensions, const TextureInfo &, skgpu::Budgeted)
static VkAccessFlags LayoutToSrcAccessMask(const VkImageLayout layout)
static bool MakeVkImage(const VulkanSharedContext *, SkISize dimensions, const TextureInfo &, CreatedImageInfo *outInfo)
static VkPipelineStageFlags LayoutToPipelineSrcStageFlags(const VkImageLayout layout)
static sk_sp< Texture > MakeWrapped(const VulkanSharedContext *, const VulkanResourceProvider *, SkISize dimensions, const TextureInfo &, sk_sp< MutableTextureState >, VkImage, const VulkanAlloc &)
void freeGpuData() override
VkImageLayout currentLayout() const
const VulkanImageView * getImageView(VulkanImageView::Usage) const
FlutterSemanticsFlag flags
uint32_t uint32_t * format
void SetVkImageLayout(MutableTextureState *state, VkImageLayout layout)
SK_API uint32_t GetVkQueueFamilyIndex(const MutableTextureState &state)
SK_API MutableTextureState MakeVulkan(VkImageLayout layout, uint32_t queueFamilyIndex)
void SetVkQueueFamilyIndex(MutableTextureState *state, uint32_t queueFamilyIndex)
SK_API VkImageLayout GetVkImageLayout(const MutableTextureState &state)
void FreeImageMemory(VulkanMemoryAllocator *, const VulkanAlloc &alloc)
bool AllocImageMemory(VulkanMemoryAllocator *, VkImage image, skgpu::Protected isProtected, bool forceDedicatedMemory, bool useLazyAllocation, const std::function< CheckResult > &, VulkanAlloc *alloc)
VkImageAspectFlags vk_format_to_aspect_flags(VkFormat format)
static constexpr bool SampleCountToVkSampleCount(uint32_t samples, VkSampleCountFlagBits *vkSamples)
static void usage(char *argv0)
constexpr int32_t width() const
constexpr int32_t height() const
VkAccessFlags srcAccessMask
VkSharingMode fSharingMode
VkImageUsageFlags fImageUsageFlags
VkImageTiling fImageTiling
sk_sp< MutableTextureState > fMutableState
VkFlags VkPipelineStageFlags
@ VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
@ VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
@ VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
@ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
@ VK_IMAGE_LAYOUT_PREINITIALIZED
@ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
@ VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
@ VK_IMAGE_LAYOUT_UNDEFINED
@ VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
@ VK_IMAGE_LAYOUT_GENERAL
@ VK_SHARING_MODE_CONCURRENT
@ VK_SHARING_MODE_EXCLUSIVE
VkFlags VkImageAspectFlags
@ VK_IMAGE_CREATE_PROTECTED_BIT
@ VK_IMAGE_ASPECT_COLOR_BIT
@ VK_IMAGE_ASPECT_STENCIL_BIT
@ VK_IMAGE_ASPECT_DEPTH_BIT
@ VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
#define VK_QUEUE_FAMILY_FOREIGN_EXT
VkFlags VkImageCreateFlags
@ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
@ VK_ACCESS_TRANSFER_WRITE_BIT
@ VK_ACCESS_HOST_WRITE_BIT
@ VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT
#define VK_QUEUE_FAMILY_EXTERNAL
@ VK_FORMAT_D24_UNORM_S8_UINT
@ VK_FORMAT_D32_SFLOAT_S8_UINT
@ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
@ VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT
@ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
@ VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
@ VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
@ VK_PIPELINE_STAGE_HOST_BIT
@ VK_PIPELINE_STAGE_TRANSFER_BIT
#define VK_QUEUE_FAMILY_IGNORED
@ VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
@ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER