Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(382)

Side by Side Diff: gpu/vulkan/vulkan_descriptor_set.cc

Issue 1989013002: Added Vulkan Descriptor Sets and Samplers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "gpu/vulkan/vulkan_descriptor_set.h"
6
7 #include "base/logging.h"
8 #include "gpu/vulkan/vulkan_descriptor_pool.h"
9 #include "gpu/vulkan/vulkan_device_queue.h"
10
11 namespace gpu {
12
13 VulkanDescriptorSet::~VulkanDescriptorSet() {
14 DCHECK_EQ(static_cast<VkDescriptorSet>(VK_NULL_HANDLE), handle_);
15 DCHECK_EQ(static_cast<VkDescriptorSetLayout>(VK_NULL_HANDLE), layout_);
16 descriptor_pool_->DecrementDescriptorSetCount();
17 }
18
19 bool VulkanDescriptorSet::Initialize(
20 const std::vector<VkDescriptorSetLayoutBinding>& layout) {
21 VkResult result = VK_SUCCESS;
22 VkDevice device = device_queue_->GetVulkanDevice();
23
24 VkDescriptorSetLayoutCreateInfo layout_create_info = {};
25 layout_create_info.sType =
26 VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
27 layout_create_info.bindingCount = static_cast<uint32_t>(layout.size());
28 layout_create_info.pBindings = layout.data();
29
30 result = vkCreateDescriptorSetLayout(device, &layout_create_info, nullptr,
31 &layout_);
piman 2016/05/18 19:02:18 I think we'll want to separate out the DescriptorS
David Yen 2016/05/18 21:08:35 Done.
32 if (VK_SUCCESS != result) {
33 DLOG(ERROR) << "vkCreateDescriptorSetLayout() failed: " << result;
34 return false;
35 }
36
37 VkDescriptorSetAllocateInfo set_allocate_info = {};
38 set_allocate_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
39 set_allocate_info.descriptorPool = descriptor_pool_->handle();
40 set_allocate_info.descriptorSetCount = 1;
41 set_allocate_info.pSetLayouts = &layout_;
42
43 result = vkAllocateDescriptorSets(device, &set_allocate_info, &handle_);
44 if (VK_SUCCESS != result) {
45 DLOG(ERROR) << "vkAllocateDescriptorSets() failed: " << result;
46 return false;
47 }
48
49 return true;
50 }
51
52 void VulkanDescriptorSet::Destroy() {
53 VkDevice device = device_queue_->GetVulkanDevice();
54 if (VK_NULL_HANDLE != handle_) {
55 vkFreeDescriptorSets(device, descriptor_pool_->handle(), 1, &handle_);
56 handle_ = VK_NULL_HANDLE;
57 }
58
59 if (VK_NULL_HANDLE != layout_) {
60 vkDestroyDescriptorSetLayout(device, layout_, nullptr);
61 layout_ = VK_NULL_HANDLE;
62 }
63 }
64
65 void VulkanDescriptorSet::WriteToDescriptorSet(
66 uint32_t dst_binding,
67 uint32_t dst_array_element,
68 uint32_t descriptor_count,
69 VkDescriptorType descriptor_type,
70 const VkDescriptorImageInfo* image_info,
71 const VkDescriptorBufferInfo* buffer_info,
72 const VkBufferView* texel_buffer_view) {
73 VkWriteDescriptorSet write_descriptor_set = {};
74 write_descriptor_set.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
75 write_descriptor_set.dstSet = handle_;
76 write_descriptor_set.dstBinding = dst_binding;
77 write_descriptor_set.dstArrayElement = dst_array_element;
78 write_descriptor_set.descriptorCount = descriptor_count;
79 write_descriptor_set.descriptorType = descriptor_type;
80 write_descriptor_set.pImageInfo = image_info;
81 write_descriptor_set.pBufferInfo = buffer_info;
82 write_descriptor_set.pTexelBufferView = texel_buffer_view;
83
84 vkUpdateDescriptorSets(device_queue_->GetVulkanDevice(), 1,
85 &write_descriptor_set, 0, nullptr);
86 }
87
88 void VulkanDescriptorSet::CopyFromDescriptorSet(
89 const VulkanDescriptorSet* source_set,
90 uint32_t src_binding,
91 uint32_t src_array_element,
92 uint32_t dst_binding,
93 uint32_t dst_array_element,
94 uint32_t descriptor_count) {
95 VkCopyDescriptorSet copy_descriptor_set = {};
96 copy_descriptor_set.sType = VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET;
97 copy_descriptor_set.srcSet = source_set->handle();
98 copy_descriptor_set.srcBinding = src_binding;
99 copy_descriptor_set.srcArrayElement = src_array_element;
100 copy_descriptor_set.dstSet = handle_;
101 copy_descriptor_set.dstBinding = dst_binding;
102 copy_descriptor_set.dstArrayElement = dst_array_element;
103 copy_descriptor_set.descriptorCount = descriptor_count;
104
105 vkUpdateDescriptorSets(device_queue_->GetVulkanDevice(), 0, nullptr, 1,
106 &copy_descriptor_set);
107 }
108
109 VulkanDescriptorSet::VulkanDescriptorSet(VulkanDeviceQueue* device_queue,
110 VulkanDescriptorPool* descriptor_pool)
111 : device_queue_(device_queue), descriptor_pool_(descriptor_pool) {
112 descriptor_pool_->IncrementDescriptorSetCount();
113 }
114
115 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698