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