• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/VulkanGraphiteUtils.h"
12 #include "src/gpu/graphite/vk/VulkanSharedContext.h"
13 
14 namespace skgpu::graphite {
15 
Make(const VulkanSharedContext * ctxt,const sk_sp<VulkanDescriptorPool> & pool)16 sk_sp<VulkanDescriptorSet> VulkanDescriptorSet::Make(const VulkanSharedContext* ctxt,
17                                                      const sk_sp<VulkanDescriptorPool>& pool) {
18     VkDescriptorSet descSet;
19     VkDescriptorSetAllocateInfo dsAllocateInfo;
20     memset(&dsAllocateInfo, 0, sizeof(VkDescriptorSetAllocateInfo));
21     dsAllocateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
22     dsAllocateInfo.pNext = nullptr;
23     dsAllocateInfo.descriptorPool = pool->descPool();
24     dsAllocateInfo.descriptorSetCount = 1;
25     dsAllocateInfo.pSetLayouts = pool->descSetLayout();
26 
27     VkResult result;
28     VULKAN_CALL_RESULT(
29             ctxt, result, AllocateDescriptorSets(ctxt->device(), &dsAllocateInfo, &descSet));
30     if (result != VK_SUCCESS) {
31         return nullptr;
32     }
33     return sk_sp<VulkanDescriptorSet>(new VulkanDescriptorSet(ctxt, descSet, pool));
34 }
35 
VulkanDescriptorSet(const VulkanSharedContext * ctxt,VkDescriptorSet set,sk_sp<VulkanDescriptorPool> pool)36 VulkanDescriptorSet::VulkanDescriptorSet(const VulkanSharedContext* ctxt,
37                                          VkDescriptorSet set,
38                                          sk_sp<VulkanDescriptorPool> pool)
39         : Resource(ctxt,
40                    Ownership::kOwned,
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