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