Blender V4.3
vk_resource_pool.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include "vk_resource_pool.hh"
10#include "vk_backend.hh"
11#include "vk_memory.hh"
12
13namespace blender::gpu {
14
16{
17 descriptor_pools.init(device);
18}
19
21{
22 immediate.deinit(device);
23 discard_pool.deinit(device);
24}
25
31
36
38{
39 std::scoped_lock mutex(mutex_);
40 std::scoped_lock mutex_src(src_pool.mutex_);
41 buffers_.extend(src_pool.buffers_);
42 image_views_.extend(src_pool.image_views_);
43 images_.extend(src_pool.images_);
44 shader_modules_.extend(src_pool.shader_modules_);
45 pipeline_layouts_.extend(src_pool.pipeline_layouts_);
46 src_pool.buffers_.clear();
47 src_pool.image_views_.clear();
48 src_pool.images_.clear();
49 src_pool.shader_modules_.clear();
50 src_pool.pipeline_layouts_.clear();
51}
52
53void VKDiscardPool::discard_image(VkImage vk_image, VmaAllocation vma_allocation)
54{
55 std::scoped_lock mutex(mutex_);
56 images_.append(std::pair(vk_image, vma_allocation));
57}
58
59void VKDiscardPool::discard_image_view(VkImageView vk_image_view)
60{
61 std::scoped_lock mutex(mutex_);
62 image_views_.append(vk_image_view);
63}
64
65void VKDiscardPool::discard_buffer(VkBuffer vk_buffer, VmaAllocation vma_allocation)
66{
67 std::scoped_lock mutex(mutex_);
68 buffers_.append(std::pair(vk_buffer, vma_allocation));
69}
70
71void VKDiscardPool::discard_shader_module(VkShaderModule vk_shader_module)
72{
73 std::scoped_lock mutex(mutex_);
74 shader_modules_.append(vk_shader_module);
75}
76void VKDiscardPool::discard_pipeline_layout(VkPipelineLayout vk_pipeline_layout)
77{
78 std::scoped_lock mutex(mutex_);
79 pipeline_layouts_.append(vk_pipeline_layout);
80}
81
83{
84 std::scoped_lock mutex(mutex_);
86
87 while (!image_views_.is_empty()) {
88 VkImageView vk_image_view = image_views_.pop_last();
89 vkDestroyImageView(device.vk_handle(), vk_image_view, vk_allocation_callbacks);
90 }
91
92 while (!images_.is_empty()) {
93 std::pair<VkImage, VmaAllocation> image_allocation = images_.pop_last();
94 device.resources.remove_image(image_allocation.first);
95 vmaDestroyImage(device.mem_allocator_get(), image_allocation.first, image_allocation.second);
96 }
97
98 while (!buffers_.is_empty()) {
99 std::pair<VkBuffer, VmaAllocation> buffer_allocation = buffers_.pop_last();
100 device.resources.remove_buffer(buffer_allocation.first);
101 vmaDestroyBuffer(
102 device.mem_allocator_get(), buffer_allocation.first, buffer_allocation.second);
103 }
104
105 while (!pipeline_layouts_.is_empty()) {
106 VkPipelineLayout vk_pipeline_layout = pipeline_layouts_.pop_last();
107 vkDestroyPipelineLayout(device.vk_handle(), vk_pipeline_layout, vk_allocation_callbacks);
108 }
109
110 while (!shader_modules_.is_empty()) {
111 VkShaderModule vk_shader_module = shader_modules_.pop_last();
112 vkDestroyShaderModule(device.vk_handle(), vk_shader_module, vk_allocation_callbacks);
113 }
114}
115
116} // namespace blender::gpu
ThreadMutex mutex
void append(const T &value)
bool is_empty() const
void extend(Span< T > array)
void init(const VKDevice &vk_device)
render_graph::VKResourceStateTracker resources
Definition vk_device.hh:172
VmaAllocator mem_allocator_get() const
Definition vk_device.hh:243
VkDevice vk_handle() const
Definition vk_device.hh:224
void discard_image_view(VkImageView vk_image_view)
void discard_shader_module(VkShaderModule vk_shader_module)
void discard_image(VkImage vk_image, VmaAllocation vma_allocation)
void discard_buffer(VkBuffer vk_buffer, VmaAllocation vma_allocation)
void deinit(VKDevice &device)
void move_data(VKDiscardPool &src_pool)
void discard_pipeline_layout(VkPipelineLayout vk_pipeline_layout)
void destroy_discarded_resources(VKDevice &device)
void deinit(VKDevice &device)
void init(VKDevice &device)
void deinit(VKDevice &device)
#define VK_ALLOCATION_CALLBACKS
Definition vk_memory.hh:58