Blender
V4.5
source
blender
gpu
vulkan
vk_descriptor_set_layouts.hh
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2024 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
18
#pragma once
19
20
#include "
BLI_map.hh
"
21
#include "
BLI_mutex.hh
"
22
#include "
BLI_utility_mixins.hh
"
23
#include "
BLI_vector.hh
"
24
25
#include "
vk_common.hh
"
26
27
namespace
blender::gpu
{
28
29
class
VKDevice;
30
36
struct
VKDescriptorSetLayoutInfo
{
37
using
Bindings
=
Vector<VkDescriptorType>
;
38
39
Bindings
bindings
;
40
VkShaderStageFlags
vk_shader_stage_flags
;
41
42
bool
operator==
(
const
VKDescriptorSetLayoutInfo
&other)
const
43
{
44
return
vk_shader_stage_flags
== other.
vk_shader_stage_flags
&&
bindings
== other.
bindings
;
45
};
46
};
47
48
};
// namespace blender::gpu
49
50
namespace
blender
{
56
template
<>
struct
DefaultHash
<gpu::VKDescriptorSetLayoutInfo> {
57
uint64_t
operator()
(
const
gpu::VKDescriptorSetLayoutInfo
&
key
)
const
58
{
59
uint64_t
hash
=
uint64_t
(
key
.vk_shader_stage_flags);
60
for
(VkDescriptorType vk_descriptor_type :
key
.bindings) {
61
hash
=
hash
* 33 ^
uint64_t
(vk_descriptor_type);
62
}
63
return
hash
;
64
}
65
};
66
}
// namespace blender
67
68
namespace
blender::gpu
{
69
70
struct
VKDescriptorBufferLayout
{
77
VkDeviceSize
size
;
78
85
Vector<VkDeviceSize>
binding_offsets
;
86
};
87
91
class
VKDescriptorSetLayouts
:
NonCopyable
{
92
friend
class
VKDevice
;
93
94
private
:
98
Map<VKDescriptorSetLayoutInfo, VkDescriptorSetLayout>
vk_descriptor_set_layouts_;
99
Map<VkDescriptorSetLayout, VKDescriptorBufferLayout>
descriptor_buffer_layouts_;
100
104
VkDescriptorSetLayoutCreateInfo vk_descriptor_set_layout_create_info_;
105
Vector<VkDescriptorSetLayoutBinding>
vk_descriptor_set_layout_bindings_;
106
Mutex
mutex_;
107
108
public
:
109
VKDescriptorSetLayouts
();
110
virtual
~VKDescriptorSetLayouts
();
111
118
VkDescriptorSetLayout
get_or_create
(
const
VKDescriptorSetLayoutInfo
&
info
,
119
bool
&r_created,
120
bool
&r_needed);
121
132
VKDescriptorBufferLayout
descriptor_buffer_layout_get
(
133
VkDescriptorSetLayout vk_descriptor_set_layout)
134
{
135
std::scoped_lock
lock
(mutex_);
136
return
descriptor_buffer_layouts_.
lookup
(vk_descriptor_set_layout);
137
}
138
144
void
deinit
();
145
149
int64_t
size
()
const
150
{
151
return
vk_descriptor_set_layouts_.
size
();
152
}
153
154
private
:
155
void
update_layout_bindings(
const
VKDescriptorSetLayoutInfo
&
info
);
156
VKDescriptorBufferLayout
create_descriptor_buffer_layout(
157
const
VKDevice
&device,
158
const
VKDescriptorSetLayoutInfo
&
info
,
159
VkDescriptorSetLayout vk_descriptor_set_layout)
const
;
160
};
161
162
}
// namespace blender::gpu
BLI_map.hh
BLI_mutex.hh
key
int key
Definition
BLI_set_test.cc:631
BLI_utility_mixins.hh
BLI_vector.hh
lock
volatile int lock
Definition
atomic_ops_unix.h:0
blender::Map
Definition
BLI_map.hh:129
blender::Map::lookup
const Value & lookup(const Key &key) const
Definition
BLI_map.hh:545
blender::Map::size
int64_t size() const
Definition
BLI_map.hh:976
blender::NonCopyable
Definition
BLI_utility_mixins.hh:16
blender::Vector< VkDescriptorType >
blender::gpu::VKDescriptorSetLayouts
Definition
vk_descriptor_set_layouts.hh:91
blender::gpu::VKDescriptorSetLayouts::~VKDescriptorSetLayouts
virtual ~VKDescriptorSetLayouts()
Definition
vk_descriptor_set_layouts.cc:20
blender::gpu::VKDescriptorSetLayouts::VKDescriptorSetLayouts
VKDescriptorSetLayouts()
Definition
vk_descriptor_set_layouts.cc:13
blender::gpu::VKDescriptorSetLayouts::descriptor_buffer_layout_get
VKDescriptorBufferLayout descriptor_buffer_layout_get(VkDescriptorSetLayout vk_descriptor_set_layout)
Definition
vk_descriptor_set_layouts.hh:132
blender::gpu::VKDescriptorSetLayouts::deinit
void deinit()
Definition
vk_descriptor_set_layouts.cc:94
blender::gpu::VKDescriptorSetLayouts::size
int64_t size() const
Definition
vk_descriptor_set_layouts.hh:149
blender::gpu::VKDescriptorSetLayouts::get_or_create
VkDescriptorSetLayout get_or_create(const VKDescriptorSetLayoutInfo &info, bool &r_created, bool &r_needed)
Definition
vk_descriptor_set_layouts.cc:25
blender::gpu::VKDevice
Definition
vk_device.hh:164
info
SearchInfo info
Definition
geometry_nodes_caller_ui.cc:66
blender::gpu
Definition
blf_internal_types.hh:31
blender
Definition
ANIM_action.hh:36
blender::Mutex
std::mutex Mutex
Definition
BLI_mutex.hh:47
hash
#define hash
Definition
noise_c.cc:154
int64_t
__int64 int64_t
Definition
stdint.h:89
uint64_t
unsigned __int64 uint64_t
Definition
stdint.h:90
blender::DefaultHash< gpu::VKDescriptorSetLayoutInfo >::operator()
uint64_t operator()(const gpu::VKDescriptorSetLayoutInfo &key) const
Definition
vk_descriptor_set_layouts.hh:57
blender::DefaultHash
Definition
BLI_session_uid.h:45
blender::gpu::VKDescriptorBufferLayout
Definition
vk_descriptor_set_layouts.hh:70
blender::gpu::VKDescriptorBufferLayout::binding_offsets
Vector< VkDeviceSize > binding_offsets
Definition
vk_descriptor_set_layouts.hh:85
blender::gpu::VKDescriptorBufferLayout::size
VkDeviceSize size
Definition
vk_descriptor_set_layouts.hh:77
blender::gpu::VKDescriptorSetLayoutInfo
Definition
vk_descriptor_set_layouts.hh:36
blender::gpu::VKDescriptorSetLayoutInfo::bindings
Bindings bindings
Definition
vk_descriptor_set_layouts.hh:39
blender::gpu::VKDescriptorSetLayoutInfo::operator==
bool operator==(const VKDescriptorSetLayoutInfo &other) const
Definition
vk_descriptor_set_layouts.hh:42
blender::gpu::VKDescriptorSetLayoutInfo::vk_shader_stage_flags
VkShaderStageFlags vk_shader_stage_flags
Definition
vk_descriptor_set_layouts.hh:40
vk_common.hh
Generated on Fri Apr 3 2026 06:33:18 for Blender by
doxygen
1.11.0