Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Static Public Attributes | Private Member Functions | Friends | List of all members
skgpu::graphite::VulkanResourceProvider Class Referencefinal

#include <VulkanResourceProvider.h>

Inheritance diagram for skgpu::graphite::VulkanResourceProvider:
skgpu::graphite::ResourceProvider

Public Member Functions

 VulkanResourceProvider (SharedContext *sharedContext, SingleOwner *, uint32_t recorderID, size_t resourceBudget, sk_sp< Buffer > intrinsicConstantUniformBuffer, sk_sp< Buffer > loadMSAAVertexBuffer)
 
 ~VulkanResourceProvider () override
 
sk_sp< TexturecreateWrappedTexture (const BackendTexture &) override
 
sk_sp< BufferrefIntrinsicConstantBuffer () const
 
const BufferloadMSAAVertexBuffer () const
 
sk_sp< VulkanSamplerYcbcrConversionfindOrCreateCompatibleSamplerYcbcrConversion (const VulkanYcbcrConversionInfo &ycbcrInfo) const
 
- Public Member Functions inherited from skgpu::graphite::ResourceProvider
virtual ~ResourceProvider ()
 
sk_sp< GraphicsPipelinefindOrCreateGraphicsPipeline (const RuntimeEffectDictionary *, const GraphicsPipelineDesc &, const RenderPassDesc &)
 
sk_sp< ComputePipelinefindOrCreateComputePipeline (const ComputePipelineDesc &)
 
sk_sp< TexturefindOrCreateScratchTexture (SkISize, const TextureInfo &, skgpu::Budgeted)
 
sk_sp< TexturefindOrCreateDepthStencilAttachment (SkISize dimensions, const TextureInfo &)
 
sk_sp< TexturefindOrCreateDiscardableMSAAAttachment (SkISize dimensions, const TextureInfo &)
 
sk_sp< BufferfindOrCreateBuffer (size_t size, BufferType type, AccessPattern, std::string_view label)
 
sk_sp< SamplerfindOrCreateCompatibleSampler (const SamplerDesc &)
 
BackendTexture createBackendTexture (SkISize dimensions, const TextureInfo &)
 
void deleteBackendTexture (const BackendTexture &)
 
ProxyCacheproxyCache ()
 
size_t getResourceCacheLimit () const
 
size_t getResourceCacheCurrentBudgetedBytes () const
 
void dumpMemoryStatistics (SkTraceMemoryDump *traceMemoryDump) const
 
void freeGpuResources ()
 
void purgeResourcesNotUsedSince (StdSteadyClock::time_point purgeTime)
 

Static Public Attributes

static constexpr size_t kIntrinsicConstantSize = sizeof(float) * 4
 
static constexpr size_t kLoadMSAAVertexBufferSize = sizeof(float) * 8
 

Private Member Functions

sk_sp< GraphicsPipelinecreateGraphicsPipeline (const RuntimeEffectDictionary *, const GraphicsPipelineDesc &, const RenderPassDesc &) override
 
sk_sp< ComputePipelinecreateComputePipeline (const ComputePipelineDesc &) override
 
sk_sp< TexturecreateTexture (SkISize, const TextureInfo &, skgpu::Budgeted) override
 
sk_sp< BuffercreateBuffer (size_t size, BufferType type, AccessPattern, std::string_view label) override
 
sk_sp< SamplercreateSampler (const SamplerDesc &) override
 
BackendTexture onCreateBackendTexture (SkISize dimensions, const TextureInfo &) override
 
void onDeleteBackendTexture (const BackendTexture &) override
 

Friends

class VulkanCommandBuffer
 

Additional Inherited Members

- Protected Member Functions inherited from skgpu::graphite::ResourceProvider
 ResourceProvider (SharedContext *sharedContext, SingleOwner *singleOwner, uint32_t recorderID, size_t resourceBudget)
 
- Protected Attributes inherited from skgpu::graphite::ResourceProvider
SharedContextfSharedContext
 
sk_sp< ResourceCachefResourceCache
 

Detailed Description

Definition at line 32 of file VulkanResourceProvider.h.

Constructor & Destructor Documentation

◆ VulkanResourceProvider()

skgpu::graphite::VulkanResourceProvider::VulkanResourceProvider ( SharedContext sharedContext,
SingleOwner singleOwner,
uint32_t  recorderID,
size_t  resourceBudget,
sk_sp< Buffer intrinsicConstantUniformBuffer,
sk_sp< Buffer loadMSAAVertexBuffer 
)

Definition at line 42 of file VulkanResourceProvider.cpp.

48 : ResourceProvider(sharedContext, singleOwner, recorderID, resourceBudget)
49 , fIntrinsicUniformBuffer(std::move(intrinsicConstantUniformBuffer))
50 , fLoadMSAAVertexBuffer(std::move(loadMSAAVertexBuffer)) {
51}

◆ ~VulkanResourceProvider()

skgpu::graphite::VulkanResourceProvider::~VulkanResourceProvider ( )
override

Definition at line 53 of file VulkanResourceProvider.cpp.

53 {
54 if (fPipelineCache != VK_NULL_HANDLE) {
55 VULKAN_CALL(this->vulkanSharedContext()->interface(),
56 DestroyPipelineCache(this->vulkanSharedContext()->device(),
57 fPipelineCache,
58 nullptr));
59 }
60 if (fMSAALoadVertShaderModule != VK_NULL_HANDLE) {
61 VULKAN_CALL(this->vulkanSharedContext()->interface(),
62 DestroyShaderModule(this->vulkanSharedContext()->device(),
63 fMSAALoadVertShaderModule,
64 nullptr));
65 }
66 if (fMSAALoadFragShaderModule != VK_NULL_HANDLE) {
67 VULKAN_CALL(this->vulkanSharedContext()->interface(),
68 DestroyShaderModule(this->vulkanSharedContext()->device(),
69 fMSAALoadFragShaderModule,
70 nullptr));
71 }
72 if (fMSAALoadPipelineLayout != VK_NULL_HANDLE) {
73 VULKAN_CALL(this->vulkanSharedContext()->interface(),
74 DestroyPipelineLayout(this->vulkanSharedContext()->device(),
75 fMSAALoadPipelineLayout,
76 nullptr));
77 }
78}
#define VULKAN_CALL(IFACE, X)
VkDevice device
Definition main.cc:53
#define VK_NULL_HANDLE
Definition vulkan_core.h:46

Member Function Documentation

◆ createBuffer()

sk_sp< Buffer > skgpu::graphite::VulkanResourceProvider::createBuffer ( size_t  size,
BufferType  type,
AccessPattern  accessPattern,
std::string_view  label 
)
overrideprivatevirtual

Implements skgpu::graphite::ResourceProvider.

Definition at line 125 of file VulkanResourceProvider.cpp.

128 {
129 return VulkanBuffer::Make(this->vulkanSharedContext(),
130 size,
131 type,
132 accessPattern,
133 std::move(label));
134}
static sk_sp< Buffer > Make(const VulkanSharedContext *, size_t, BufferType, AccessPattern, std::string_view label)

◆ createComputePipeline()

sk_sp< ComputePipeline > skgpu::graphite::VulkanResourceProvider::createComputePipeline ( const ComputePipelineDesc )
overrideprivatevirtual

Implements skgpu::graphite::ResourceProvider.

Definition at line 116 of file VulkanResourceProvider.cpp.

116 {
117 return nullptr;
118}

◆ createGraphicsPipeline()

sk_sp< GraphicsPipeline > skgpu::graphite::VulkanResourceProvider::createGraphicsPipeline ( const RuntimeEffectDictionary runtimeDict,
const GraphicsPipelineDesc pipelineDesc,
const RenderPassDesc renderPassDesc 
)
overrideprivatevirtual

Implements skgpu::graphite::ResourceProvider.

Definition at line 102 of file VulkanResourceProvider.cpp.

105 {
106 auto compatibleRenderPass =
107 this->findOrCreateRenderPass(renderPassDesc, /*compatibleOnly=*/true);
108 return VulkanGraphicsPipeline::Make(this->vulkanSharedContext(),
109 runtimeDict,
110 pipelineDesc,
111 renderPassDesc,
112 compatibleRenderPass,
113 this->pipelineCache());
114}
static sk_sp< VulkanGraphicsPipeline > Make(const VulkanSharedContext *, const RuntimeEffectDictionary *, const GraphicsPipelineDesc &, const RenderPassDesc &, const sk_sp< VulkanRenderPass > &compatibleRenderPass, VkPipelineCache)

◆ createSampler()

sk_sp< Sampler > skgpu::graphite::VulkanResourceProvider::createSampler ( const SamplerDesc samplerDesc)
overrideprivatevirtual

Implements skgpu::graphite::ResourceProvider.

Definition at line 136 of file VulkanResourceProvider.cpp.

136 {
137 return VulkanSampler::Make(this->vulkanSharedContext(),
138 samplerDesc.samplingOptions(),
139 samplerDesc.tileModeX(),
140 samplerDesc.tileModeY());
141}
static sk_sp< VulkanSampler > Make(const VulkanSharedContext *, const SkSamplingOptions &samplingOptions, SkTileMode xTileMode, SkTileMode yTileMode)

◆ createTexture()

sk_sp< Texture > skgpu::graphite::VulkanResourceProvider::createTexture ( SkISize  size,
const TextureInfo info,
skgpu::Budgeted  budgeted 
)
overrideprivatevirtual

Implements skgpu::graphite::ResourceProvider.

Definition at line 120 of file VulkanResourceProvider.cpp.

121 {
122 return VulkanTexture::Make(this->vulkanSharedContext(), this, size, info, budgeted);
123}
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition DM.cpp:213
static sk_sp< Texture > Make(const VulkanSharedContext *, const VulkanResourceProvider *, SkISize dimensions, const TextureInfo &, skgpu::Budgeted)

◆ createWrappedTexture()

sk_sp< Texture > skgpu::graphite::VulkanResourceProvider::createWrappedTexture ( const BackendTexture texture)
overridevirtual

Implements skgpu::graphite::ResourceProvider.

Definition at line 84 of file VulkanResourceProvider.cpp.

84 {
85 return VulkanTexture::MakeWrapped(this->vulkanSharedContext(),
86 this,
87 texture.dimensions(),
88 texture.info(),
89 texture.getMutableState(),
90 texture.getVkImage(),
91 /*alloc=*/{}); // Skia does not own wrapped texture memory
92}
static sk_sp< Texture > MakeWrapped(const VulkanSharedContext *, const VulkanResourceProvider *, SkISize dimensions, const TextureInfo &, sk_sp< MutableTextureState >, VkImage, const VulkanAlloc &)
FlTexture * texture

◆ findOrCreateCompatibleSamplerYcbcrConversion()

sk_sp< VulkanSamplerYcbcrConversion > skgpu::graphite::VulkanResourceProvider::findOrCreateCompatibleSamplerYcbcrConversion ( const VulkanYcbcrConversionInfo ycbcrInfo) const

Definition at line 355 of file VulkanResourceProvider.cpp.

356 {
357 if (!ycbcrInfo.isValid()) {
358 return nullptr;
359 }
361 this->vulkanSharedContext(), ycbcrInfo);
362
363 if (Resource* resource = fResourceCache->findAndRefResource(ycbcrConversionKey,
366 static_cast<VulkanSamplerYcbcrConversion*>(resource));
367 }
368
369 auto ycbcrConversion = VulkanSamplerYcbcrConversion::Make(this->vulkanSharedContext(),
370 ycbcrInfo);
371 if (!ycbcrConversion) {
372 return nullptr;
373 }
374
375 ycbcrConversion->setKey(ycbcrConversionKey);
376 fResourceCache->insertResource(ycbcrConversion.get());
377
378 return ycbcrConversion;
379}
sk_sp< ResourceCache > fResourceCache
static GraphiteResourceKey MakeYcbcrConversionKey(const VulkanSharedContext *, const VulkanYcbcrConversionInfo &)
static sk_sp< VulkanSamplerYcbcrConversion > Make(const VulkanSharedContext *, const VulkanYcbcrConversionInfo &)

◆ loadMSAAVertexBuffer()

const Buffer * skgpu::graphite::VulkanResourceProvider::loadMSAAVertexBuffer ( ) const

Definition at line 98 of file VulkanResourceProvider.cpp.

98 {
99 return fLoadMSAAVertexBuffer.get();
100}

◆ onCreateBackendTexture()

BackendTexture skgpu::graphite::VulkanResourceProvider::onCreateBackendTexture ( SkISize  dimensions,
const TextureInfo info 
)
overrideprivatevirtual

Implements skgpu::graphite::ResourceProvider.

Definition at line 143 of file VulkanResourceProvider.cpp.

144 {
145 VulkanTextureInfo vkTexInfo;
146 if (!info.getVulkanTextureInfo(&vkTexInfo)) {
147 return {};
148 }
149 VulkanTexture::CreatedImageInfo createdTextureInfo;
150 if (!VulkanTexture::MakeVkImage(this->vulkanSharedContext(), dimensions, info,
151 &createdTextureInfo)) {
152 return {};
153 }
154 return {dimensions,
155 vkTexInfo,
156 skgpu::MutableTextureStates::GetVkImageLayout(createdTextureInfo.fMutableState.get()),
157 skgpu::MutableTextureStates::GetVkQueueFamilyIndex(createdTextureInfo.fMutableState.get()),
158 createdTextureInfo.fImage,
159 createdTextureInfo.fMemoryAlloc};
160}
static bool MakeVkImage(const VulkanSharedContext *, SkISize dimensions, const TextureInfo &, CreatedImageInfo *outInfo)
SK_API uint32_t GetVkQueueFamilyIndex(const MutableTextureState &state)
SK_API VkImageLayout GetVkImageLayout(const MutableTextureState &state)

◆ onDeleteBackendTexture()

void skgpu::graphite::VulkanResourceProvider::onDeleteBackendTexture ( const BackendTexture texture)
overrideprivatevirtual

Implements skgpu::graphite::ResourceProvider.

Definition at line 328 of file VulkanResourceProvider.cpp.

328 {
329 SkASSERT(texture.isValid());
331
332 VULKAN_CALL(this->vulkanSharedContext()->interface(),
333 DestroyImage(this->vulkanSharedContext()->device(), texture.getVkImage(),
334 /*VkAllocationCallbacks=*/nullptr));
335
336 // Free the image memory used for the BackendTexture's VkImage.
337 //
338 // How we do this is dependent upon on how the image was allocated (via the memory allocator or
339 // with a direct call to the Vulkan driver) . If the VulkanAlloc's fBackendMemory is != 0, then
340 // that means the allocator was used. Otherwise, a direct driver call was used and we should
341 // free the VkDeviceMemory (fMemory).
342 if (texture.getMemoryAlloc()->fBackendMemory) {
343 skgpu::VulkanMemory::FreeImageMemory(this->vulkanSharedContext()->memoryAllocator(),
344 *(texture.getMemoryAlloc()));
345 } else {
346 SkASSERT(texture.getMemoryAlloc()->fMemory != VK_NULL_HANDLE);
347 VULKAN_CALL(this->vulkanSharedContext()->interface(),
348 FreeMemory(this->vulkanSharedContext()->device(),
349 texture.getMemoryAlloc()->fMemory,
350 nullptr));
351 }
352}
#define SkASSERT(cond)
Definition SkAssert.h:116
void FreeImageMemory(VulkanMemoryAllocator *, const VulkanAlloc &alloc)

◆ refIntrinsicConstantBuffer()

sk_sp< Buffer > skgpu::graphite::VulkanResourceProvider::refIntrinsicConstantBuffer ( ) const

Definition at line 94 of file VulkanResourceProvider.cpp.

94 {
95 return fIntrinsicUniformBuffer;
96}

Friends And Related Symbol Documentation

◆ VulkanCommandBuffer

friend class VulkanCommandBuffer
friend

Definition at line 101 of file VulkanResourceProvider.h.

Member Data Documentation

◆ kIntrinsicConstantSize

constexpr size_t skgpu::graphite::VulkanResourceProvider::kIntrinsicConstantSize = sizeof(float) * 4
staticconstexpr

Definition at line 34 of file VulkanResourceProvider.h.

◆ kLoadMSAAVertexBufferSize

constexpr size_t skgpu::graphite::VulkanResourceProvider::kLoadMSAAVertexBufferSize = sizeof(float) * 8
staticconstexpr

Definition at line 35 of file VulkanResourceProvider.h.


The documentation for this class was generated from the following files: