Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
VulkanTexture.h
Go to the documentation of this file.
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_VulkanTexture_DEFINED
9#define skgpu_graphite_VulkanTexture_DEFINED
10
16
17#include <utility>
18
19namespace skgpu { class MutableTextureState; }
20
21namespace skgpu::graphite {
22
23class VulkanSharedContext;
24class VulkanCommandBuffer;
25class VulkanResourceProvider;
26
27class VulkanTexture : public Texture {
28public:
34
35 static bool MakeVkImage(const VulkanSharedContext*,
37 const TextureInfo&,
38 CreatedImageInfo* outInfo);
39
43 const TextureInfo&,
45
49 const TextureInfo&,
51 VkImage,
52 const VulkanAlloc&);
53
54 ~VulkanTexture() override {}
55
56 VkImage vkImage() const { return fImage; }
57
59 VkImageLayout newLayout,
60 VkAccessFlags dstAccessMask,
61 VkPipelineStageFlags dstStageMask,
62 bool byRegion) const {
63 this->setImageLayoutAndQueueIndex(buffer, newLayout, dstAccessMask, dstStageMask, byRegion,
65 }
66
68 VkImageLayout newLayout,
69 VkAccessFlags dstAccessMask,
70 VkPipelineStageFlags dstStageMask,
71 bool byRegion,
72 uint32_t newQueueFamilyIndex) const;
73
74 // This simply updates our internal tracking of the image layout and does not actually perform
75 // any gpu work.
77
79 uint32_t currentQueueFamilyIndex() const;
80
82
83 // Helpers to use for setting the layout of the VkImage
86
88 return (this->textureInfo().vulkanTextureSpec().fImageUsageFlags &
90 }
91
92private:
95 const TextureInfo& info,
97 VkImage,
98 const VulkanAlloc&,
102
103 void freeGpuData() override;
104
105 VkImage fImage;
106 VulkanAlloc fMemoryAlloc;
107 sk_sp<VulkanSamplerYcbcrConversion> fSamplerYcbcrConversion;
108
110};
111
112} // namespace skgpu::graphite
113
114#endif // skgpu_graphite_VulkanTexture_DEFINED
115
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition DM.cpp:213
const SharedContext * sharedContext() const
Definition Resource.h:187
SkISize dimensions() const
Definition Texture.h:31
const TextureInfo & textureInfo() const
Definition Texture.h:32
void updateImageLayout(VkImageLayout)
uint32_t currentQueueFamilyIndex() const
void setImageLayout(VulkanCommandBuffer *buffer, VkImageLayout newLayout, VkAccessFlags dstAccessMask, VkPipelineStageFlags dstStageMask, bool byRegion) 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)
bool supportsInputAttachmentUsage() const
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 &)
VkImageLayout currentLayout() const
const VulkanImageView * getImageView(VulkanImageView::Usage) const
static const uint8_t buffer[]
Budgeted
Definition GpuTypes.h:35
VkFlags VkPipelineStageFlags
VkImageLayout
VkFlags VkAccessFlags
@ VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
#define VK_NULL_HANDLE
Definition vulkan_core.h:46
#define VK_QUEUE_FAMILY_IGNORED