VulkanRaytracingCycles 0.0.0
Cycles Render Engine With VulkanRaytracingShaderModules. ( Experiment , in progress)
vkDSLMem Struct Reference

#include <ScriptorVk.h>

Public Member Functions

 vkDSLMem ()
 
void destroy ()
 
bool get (VkDescriptorSetLayout &layout, LayoutType Lty)
 
bool $set$ (LayoutType type, std::vector< VkDescriptorSetLayoutBinding > &)
 

Public Attributes

std::unordered_map< std::string, VkDescriptorSetLayout > Layout
 
SRWLOCK SlimLock
 

Detailed Description

Definition at line 37 of file ScriptorVk.h.

Constructor & Destructor Documentation

◆ vkDSLMem()

vkDSLMem::vkDSLMem ( )
inline

Definition at line 44 of file ScriptorVk.h.

44{ InitializeSRWLock(&SlimLock); }
SRWLOCK SlimLock
Definition: ScriptorVk.h:43

Member Function Documentation

◆ $set$()

bool vkDSLMem::$set$ ( LayoutType  type,
std::vector< VkDescriptorSetLayoutBinding > &  DSLB 
)

uint32_t ID = createIO(type, pSize, setLayoutBindings);

Layout[num].type = type;

Definition at line 61 of file ScriptorVk.cpp.

61 {
62
63 /*
64 size_t num = -1;
65 if (!types::LayoutNum(type, num)) {
66 log_bad("got incorrect arguments. %s \n", type.data());
67 return false;
68 }
69 if (Layout[num].type == type) return true;
70 */
71
72 AcquireSRWLockExclusive(&SlimLock);
73
74
75 if (Layout.count(type.data()) > 0) {
76 ReleaseSRWLockExclusive(&SlimLock);
77 return true;
78 }
79
80 bool Default = false;
81 size_t size = DSLB.size();
82 if (size == 0) {
83 size = type.size();
84 Default = true;
85 };
86
87
88
89 VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo{
90 .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
91 .pNext = NULL,
92 .flags = 0,
93 .bindingCount = (uint32_t)size
94 };
95
96 if (Default) {
97 VkDescriptorSetLayoutBinding* setLayoutBindings = nullptr;
98 setLayoutBindings = new VkDescriptorSetLayoutBinding[size];
99 _PoolSize pSize = { (uint32_t)size,0,0,0 };
100 for (int i = 0; i < size; i++) {
101 if (type[i] == 's') {
102
103 setLayoutBindings[i].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
104 setLayoutBindings[i].stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT | VK_SHADER_STAGE_VERTEX_BIT;
105 setLayoutBindings[i].binding = (uint32_t)i;
106 setLayoutBindings[i].descriptorCount = 1;
107 pSize.ssbo++;
108
109 }
110 else if (type[i] == 'u') {
111
112 setLayoutBindings[i].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
113 setLayoutBindings[i].stageFlags = VK_SHADER_STAGE_VERTEX_BIT;
114 setLayoutBindings[i].binding = (uint32_t)i;
115 setLayoutBindings[i].descriptorCount = 1;
116 pSize.ubo++;
117
118 }
119 else if (type[i] == 't') {
120
121 setLayoutBindings[i].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
122 setLayoutBindings[i].stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
123 setLayoutBindings[i].binding = (uint32_t)i;
124 setLayoutBindings[i].descriptorCount = 1;
125 setLayoutBindings[i].pImmutableSamplers = NULL;
126 pSize.tex++;
127
128 }
129 else {
130 log_bad("Descriptor_CreateIO::ParseError \n");
131 };
132 }
133 descriptorSetLayoutCreateInfo.pBindings = &(setLayoutBindings[0]);
134 }
135 else {
136 descriptorSetLayoutCreateInfo.pBindings = DSLB.data();
137 };
139
140 VkDescriptorSetLayout _io;
141 VK_CHECK_RESULT(vkCreateDescriptorSetLayout($device, &descriptorSetLayoutCreateInfo, NULL, &_io));
142
143
144
145 Layout[type.data()] = _io;
147
148 if (Default)delete[] descriptorSetLayoutCreateInfo.pBindings;
149
150 ReleaseSRWLockExclusive(&SlimLock);
151
152 log_desc("Create DSL %s %p \n", type.data(), Layout[type.data()]);
153 return true;
154
155 };
#define log_desc(...)
#define LOG_NO_desc
Definition: ScriptorVk.cpp:9
#define log_bad(...)
Definition: log.hpp:37
uint32_t ssbo
Definition: ScriptorVk.h:19
uint32_t ubo
Definition: ScriptorVk.h:20
uint32_t tex
Definition: ScriptorVk.h:21
std::unordered_map< std::string, VkDescriptorSetLayout > Layout
Definition: ScriptorVk.h:41

◆ destroy()

void vkDSLMem::destroy ( )

Definition at line 25 of file ScriptorVk.cpp.

25 {
26 AcquireSRWLockExclusive(&SlimLock);
27 for(auto &[k,v] : Layout ){
28 vkDestroyDescriptorSetLayout($device, v, nullptr);
29 };
30 Layout.clear();
31 ReleaseSRWLockExclusive(&SlimLock);
32};

◆ get()

bool vkDSLMem::get ( VkDescriptorSetLayout &  layout,
LayoutType  Lty 
)

Definition at line 51 of file ScriptorVk.cpp.

51 {
52
53 if( Layout.count(Lty.data()) > 0) {
54 layout = Layout[Lty.data()];
55 return true;
56 };
57
58 return false;
59 };

Member Data Documentation

◆ Layout

std::unordered_map<std::string, VkDescriptorSetLayout> vkDSLMem::Layout

vkDSL Layout[types::SIZE_LAYOUT]; std::unordered_map<const char*, VkDescriptorSetLayout> Layout;

Definition at line 41 of file ScriptorVk.h.

◆ SlimLock

SRWLOCK vkDSLMem::SlimLock

Definition at line 43 of file ScriptorVk.h.


The documentation for this struct was generated from the following files: