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

#include <UniformsVk.h>

Classes

struct  Desc
 

Public Member Functions

 UniformVk ()
 
 UniformVk (long id, long version, VkDeviceSize size)
 
 UniformVk (const UniformVk &)=delete
 
UniformVkoperator= (UniformVk other)=delete
 
 ~UniformVk ()
 
void dealloc ()
 
void setMaterialProperty (Bache *_bach)
 
size_t createSet (DescriptorVk *descVk, std::string_view type="", bool append=false)
 
size_t createSet (DescriptorVk *descVk, std::string_view type, std::vector< VkDescriptorSetLayoutBinding > dslb, bool append=false)
 
bool createUBO (VisibleObjectsVk *vobjVk, VkDeviceSize size=0)
 
bool createICBO (VisibleObjectsVk *vobjVk, long Cnt, VkDeviceSize size=0)
 
bool setUBO (VkBuffer buffer)
 
bool push_back (VkDescriptorSet &set)
 
bool createWriteSets ()
 
bool createWriteSets (std::vector< VkDescriptorBufferInfo > uinfo, long update=1)
 
bool createWriteSets (VkDescriptorSet set, std::vector< VkDescriptorBufferInfo > uinfo, std::vector< VkDescriptorImageInfo > iinfo, long update)
 

Public Attributes

struct UniformVk::Desc desc
 
bool allocBach
 
Bachebach
 
struct {
   long   id
 
   void *   mapped
 
   VkDescriptorBufferInfo   info
 
   VkBuffer   vkBuffer
 
ubo
 
VkDescriptorImageInfo image
 
long swID
 
bool Upd [2]
 
std::vector< VkDescriptorSet > descriptorSets [2]
 
std::vector< VkWriteDescriptorSet > writeDescriptorSets [2]
 

Detailed Description

Definition at line 33 of file UniformsVk.h.

Constructor & Destructor Documentation

◆ UniformVk() [1/3]

UniformVk::UniformVk ( )

Definition at line 6 of file UniformsVk.cpp.

6 {
7 desc = {
8 .hach = {.id = -1,.version = -1,.hash = size_t(-1)},
9 .type = ""
10 };
11 ubo.id = -1;
12 ubo.mapped = nullptr;
13 allocBach = false;
14 bach = nullptr;
15 };
struct UniformVk::@16 ubo
Bache * bach
Definition: UniformsVk.h:42
bool allocBach
Definition: UniformsVk.h:41
struct UniformVk::Desc desc

◆ UniformVk() [2/3]

UniformVk::UniformVk ( long  id,
long  version,
VkDeviceSize  size 
)

Definition at line 17 of file UniformsVk.cpp.

17 :desc({
18 .hach = {.id = -1,.version = -1,.hash = size_t(-1)},
19 .type = ""
20 }) {
21 ubo.id = -1;
22 ubo.mapped = nullptr; allocBach = false;
23 bach = nullptr;
24 Upd[0] = Upd[1] = false;
25 };
bool Upd[2]
Definition: UniformsVk.h:63

◆ UniformVk() [3/3]

UniformVk::UniformVk ( const UniformVk )
delete

◆ ~UniformVk()

UniformVk::~UniformVk ( )

Definition at line 27 of file UniformsVk.cpp.

27{ dealloc(); }
void dealloc()
Definition: UniformsVk.cpp:29

Member Function Documentation

◆ createICBO()

bool UniformVk::createICBO ( VisibleObjectsVk vobjVk,
long  Cnt,
VkDeviceSize  size = 0 
)

Definition at line 104 of file UniformsVk.cpp.

104 {
105
106 if (allocBach) { log_bad("CreateICBO NIL aleady allocated. \n"); };
107 allocBach = true;
108 bach = new Bache;
109
110 bach->buffer.id = -1; bach->buffer.version = 0;
111 bach->align = size;
112 bach->refCnt = Cnt;
113 bach->size = size;
114 vobjVk->$createBuffer$(*bach, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT);
115 MIBmvk _;
116 vobjVk->get(_, &bach->buffer);
117
118
119 ubo.info = std::move(_.info);
120 ubo.mapped = _.mapped;
121 ubo.vkBuffer = _.buffer;
122
123 return true;
124 };
struct Bache Bache
#define log_bad(...)
Definition: log.hpp:37
VkDeviceSize size
Definition: incomplete.h:126
VkDeviceSize align
Definition: incomplete.h:123
long refCnt
Definition: incomplete.h:120
Hache buffer
Definition: incomplete.h:121
long version
VkBuffer buffer
VkDescriptorBufferInfo info
void * mapped
void $createBuffer$(O &obj, VkBufferUsageFlags usage=VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VkMemoryPropertyFlags memTy=VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT|VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Definition: ObjectVk.h:1182
bool get(MIBmvk &ubo, O *obj)
Definition: ObjectVk.h:1073

◆ createSet() [1/2]

size_t UniformVk::createSet ( DescriptorVk descVk,
std::string_view  type,
std::vector< VkDescriptorSetLayoutBinding >  dslb,
bool  append = false 
)

Definition at line 64 of file UniformsVk.cpp.

64 {
65
66 if (swID != 1) swID = 0;
67
68 desc.hach = { .id = -1,.version = -1 };
69 desc._type = type;
71 log_uni("Create puddle %d %s \n", desc.hach.id,desc.type.data());
72
73 descVk->$createPuddle$(desc,dslb);
74 descriptorSets[swID].push_back(descVk->getSet(desc.hach.id));
75
76 if (append)descVk->$createLayout$(desc.type, dslb);
77
78 return descriptorSets[swID].size() - 1;
79
80 };
#define log_uni(...)
Definition: UniformsVk.h:13
bool $createPuddle$(De &desc)
template<Interface_desc Ma>
Definition: ScriptorVk.h:132
bool $createLayout$(LayoutType type)
Definition: ScriptorVk.h:102
VkDescriptorSet & getSet(long id)
Definition: ScriptorVk.h:254
std::string _type
Definition: UniformsVk.h:38
LayoutType type
Definition: UniformsVk.h:37
long swID
Definition: UniformsVk.h:62
std::vector< VkDescriptorSet > descriptorSets[2]
Definition: UniformsVk.h:64

◆ createSet() [2/2]

size_t UniformVk::createSet ( DescriptorVk descVk,
std::string_view  type = "",
bool  append = false 
)

Definition at line 41 of file UniformsVk.cpp.

41 {
42
43 desc.hach = { .id = -1,.version = -1 };
44
45 if (type != "") {
46 desc.type = type;
47 }
48 else {
49 desc.type = bach->type;
50 }
51
52 log_uni("Create puddle %s \n", desc.type.data(), desc.hach.id);
53
54 descVk->$createPuddle$(desc);
55
56 descriptorSets[swID].push_back(descVk->getSet(desc.hach.id));
57
58 if (append)descVk->$createLayout$(desc.type);
59
60 return descriptorSets[swID].size() - 1;
61
62 };
std::string_view type
Definition: incomplete.h:131

◆ createUBO()

bool UniformVk::createUBO ( VisibleObjectsVk vobjVk,
VkDeviceSize  size = 0 
)

Definition at line 82 of file UniformsVk.cpp.

82 {
83
84 if (allocBach) {log_bad("CreateUBO NIL aleady allocated. \n");};
85 allocBach = true;
86 bach = new Bache;
87
88 bach->buffer.id = -1; bach->buffer.version = 0;
89 bach->align = size;
90 bach->refCnt = 1;
91 bach->size = size;
92 vobjVk->$createBuffer$(*bach);
93 MIBmvk _;
94 vobjVk->get(_, &bach->buffer);
95
96
97 ubo.info = std::move(_.info);
98 ubo.mapped = _.mapped;
99 ubo.vkBuffer = _.buffer;
100
101 return true;
102 };

◆ createWriteSets() [1/3]

bool UniformVk::createWriteSets ( )

Definition at line 142 of file UniformsVk.cpp.

142 {
143 createWriteSets({ ubo.info });
144 return true;
145 };
bool createWriteSets()
Definition: UniformsVk.cpp:142

◆ createWriteSets() [2/3]

bool UniformVk::createWriteSets ( std::vector< VkDescriptorBufferInfo >  uinfo,
long  update = 1 
)

if (idx.u == 1) log_bad(" NIL Create UBO over limit. \n");

delete[] writeDescriptorSets;

Definition at line 147 of file UniformsVk.cpp.

147 {
148
149 if (desc.hach.id < 0)log_bad("there is no descriptorSets.\n");
150
151 if ( (update > 0) || (update < 0) ) {
152
153 struct {
154 uint32_t u;
155 uint32_t t;
156 uint32_t s;
157 }idx = { uint32_t(-1),uint32_t(-1),uint32_t(-1) };
158
159
160 size_t size = uinfo.size();
161
162 writeDescriptorSets[swID].resize(size);
163
164 for (int i = 0; i < (int)size; i++) {
165
166 /*
167 if (desc.type[i] == 's') {
168 idx.s++;
169 }
170 else if (desc.type[i] == 'u') {
171 */
172 idx.u++;
175 .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
176 .dstSet = descriptorSets[swID][i],
177 .dstBinding = 0,
178 .descriptorCount = 1,
179 .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
180 .pBufferInfo = &(uinfo[idx.u]),
181 };
182
183 /*
184 }
185 else if (desc.type[i] == 't') {
186 idx.t++;
187 }
188 else {
189 log_bad("Descriptor_CreateIO::ParseError \n");
190 };
191 */
192
193 }
194
195 }
196
197 if (update >= 0) {
198 Upd[swID] = true;
199 vkUpdateDescriptorSets($device, static_cast<uint32_t>(writeDescriptorSets[swID].size()), writeDescriptorSets[swID].data(), 0, nullptr);
200 };
201
203 return true;
204 };
std::vector< VkWriteDescriptorSet > writeDescriptorSets[2]
Definition: UniformsVk.h:65

◆ createWriteSets() [3/3]

bool UniformVk::createWriteSets ( VkDescriptorSet  set,
std::vector< VkDescriptorBufferInfo >  uinfo,
std::vector< VkDescriptorImageInfo >  iinfo,
long  update 
)

if (idx.u == 1) log_bad(" NIL Create UBO over limit. \n");

delete[] writeDescriptorSets;

Definition at line 206 of file UniformsVk.cpp.

206 {
207
208 if (desc.hach.id < 0)log_bad("there is no descriptorSets.\n");
209
210 if ((update > 0) || (update < 0)) {
211
212 struct {
213 uint32_t u;
214 uint32_t t;
215 uint32_t s;
216 }idx = { uint32_t(-1),uint32_t(-1),uint32_t(-1) };
217
218 size_t size = desc.type.size();
219
220 writeDescriptorSets[swID].resize(size);
221
222 log_uni("Descriptor WriteOut Set %x \n", set);
223
224 for (uint32_t i = 0; i < size; i++) {
225
226 if (desc.type[i] == 's') {
227 idx.s++;
228 }
229 else if (desc.type[i] == 'u') {
230 idx.u++;
233 .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
234 .dstSet = set,
235 .dstBinding = i,
236 .descriptorCount = 1,
237 .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
238 .pBufferInfo = &(uinfo[idx.u]),
239 };
240 log_uni("Descriptor WriteOut Buffer %x \n", uinfo[idx.u].buffer);
241 }
242 else if (desc.type[i] == 't') {
243 idx.t++;
245 .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
246 .dstSet = set,
247 .dstBinding = i,
248 .descriptorCount = 1,
249 .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
250 .pImageInfo = &(iinfo[idx.t]),
251 };
252 log_uni("Descriptor WriteOut Image %u %x \n", iinfo[idx.t].imageLayout, iinfo[idx.t].imageView);
253
254 }
255 else {
256 log_bad("Descriptor_CreateIO::ParseError \n");
257 };
258
259 }
260
261 }
262
263 if (update >= 0) {
264 Upd[swID] = true;
265 vkUpdateDescriptorSets($device, static_cast<uint32_t>(writeDescriptorSets[swID].size()), writeDescriptorSets[swID].data(), 0, nullptr);
266
267 log_uni("UPdateDescriptor [%s] %zu %x \n", desc.type.data(),writeDescriptorSets[swID].size(), writeDescriptorSets[swID].data());
268 };
269
271 return true;
272 };

◆ dealloc()

void UniformVk::dealloc ( )

Definition at line 29 of file UniformsVk.cpp.

29 {
30 if (allocBach) {
31 __Delete__(bach);
32 allocBach = false;
33 }
34
35 for (auto& v : descriptorSets) v.clear();
36 for (auto& v : writeDescriptorSets)v.clear();
37
38
39 };

◆ operator=()

UniformVk & UniformVk::operator= ( UniformVk  other)
delete

◆ push_back()

bool UniformVk::push_back ( VkDescriptorSet &  set)

Definition at line 137 of file UniformsVk.cpp.

137 {
138 descriptorSets[swID].push_back(set);
139 return true;
140 };

◆ setMaterialProperty()

void UniformVk::setMaterialProperty ( Bache _bach)
inline

Definition at line 67 of file UniformsVk.h.

67 {
68 bach = _bach;
69 desc.type = bach->type;
70 ubo.info.range = bach->align;
71 };

◆ setUBO()

bool UniformVk::setUBO ( VkBuffer  buffer)

Definition at line 126 of file UniformsVk.cpp.

126 {
127
128 ubo.info.buffer = buffer;
129 ubo.info.offset = ubo.id * bach->align;
130 ubo.info.range = bach->align;
131 char* begin = (char*)(bach->mapped);
132 ubo.mapped = (void*)(begin + ubo.info.offset);
133
134 return true;
135 };
void * mapped
Definition: incomplete.h:135

Member Data Documentation

◆ allocBach

bool UniformVk::allocBach

Definition at line 41 of file UniformsVk.h.

◆ bach

Bache* UniformVk::bach

Definition at line 42 of file UniformsVk.h.

◆ desc

struct UniformVk::Desc UniformVk::desc

◆ descriptorSets

std::vector<VkDescriptorSet> UniformVk::descriptorSets[2]

Definition at line 64 of file UniformsVk.h.

◆ id

long UniformVk::id

Definition at line 45 of file UniformsVk.h.

◆ image

VkDescriptorImageInfo UniformVk::image

Definition at line 51 of file UniformsVk.h.

◆ info

VkDescriptorBufferInfo UniformVk::info

Definition at line 47 of file UniformsVk.h.

◆ mapped

void* UniformVk::mapped

Definition at line 46 of file UniformsVk.h.

◆ swID

long UniformVk::swID

Definition at line 62 of file UniformsVk.h.

◆ 

struct { ... } UniformVk::ubo

◆ Upd

bool UniformVk::Upd[2]

Definition at line 63 of file UniformsVk.h.

◆ vkBuffer

VkBuffer UniformVk::vkBuffer

Definition at line 48 of file UniformsVk.h.

◆ writeDescriptorSets

std::vector<VkWriteDescriptorSet> UniformVk::writeDescriptorSets[2]

Definition at line 65 of file UniformsVk.h.


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