xref: /aosp_15_r20/external/skia/src/gpu/graphite/vk/VulkanDescriptorSet.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2 * Copyright 2023 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 #include "src/gpu/graphite/vk/VulkanDescriptorSet.h"
9 
10 #include "src/gpu/graphite/vk/VulkanDescriptorPool.h"
11 #include "src/gpu/graphite/vk/VulkanSharedContext.h"
12 
13 namespace skgpu::graphite {
14 
Make(const VulkanSharedContext * ctxt,const sk_sp<VulkanDescriptorPool> & pool)15 sk_sp<VulkanDescriptorSet> VulkanDescriptorSet::Make(const VulkanSharedContext* ctxt,
16                                                      const sk_sp<VulkanDescriptorPool>& pool) {
17     VkDescriptorSet descSet;
18     VkDescriptorSetAllocateInfo dsAllocateInfo;
19     memset(&dsAllocateInfo, 0, sizeof(VkDescriptorSetAllocateInfo));
20     dsAllocateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
21     dsAllocateInfo.pNext = nullptr;
22     dsAllocateInfo.descriptorPool = pool->descPool();
23     dsAllocateInfo.descriptorSetCount = 1;
24     dsAllocateInfo.pSetLayouts = pool->descSetLayout();
25 
26     VkResult result;
27     VULKAN_CALL_RESULT(
28             ctxt, result, AllocateDescriptorSets(ctxt->device(), &dsAllocateInfo, &descSet));
29     if (result != VK_SUCCESS) {
30         return nullptr;
31     }
32     return sk_sp<VulkanDescriptorSet>(new VulkanDescriptorSet(ctxt, descSet, pool));
33 }
34 
VulkanDescriptorSet(const VulkanSharedContext * ctxt,VkDescriptorSet set,sk_sp<VulkanDescriptorPool> pool)35 VulkanDescriptorSet::VulkanDescriptorSet(const VulkanSharedContext* ctxt,
36                                          VkDescriptorSet set,
37                                          sk_sp<VulkanDescriptorPool> pool)
38         : Resource(ctxt,
39                    Ownership::kOwned,
40                    skgpu::Budgeted::kYes,
41                    /*gpuMemorySize=*/0)
42         , fDescSet(set)
43         , fPool(pool) {
44     fPool->ref();
45 }
46 
freeGpuData()47 void VulkanDescriptorSet::freeGpuData() {
48     fPool->unref();
49 }
50 
51 } // namespace skgpu::graphite
52