ae2f_docs
Slp.auto.h
Go to the documentation of this file.
1#undef __ae2f_MACRO_GENERATED
2#define __ae2f_MACRO_GENERATED 1
3#ifndef ae2fVK_Ann_Slp_c
4
6#include <ae2f/Macro.h>
7#undef __ae2f_MACRO_GENERATED
8#define __ae2f_MACRO_GENERATED 1
9#endif
10
11#include <ae2fVK/Ann/Slp.h>
12#undef __ae2f_MACRO_GENERATED
13#define __ae2f_MACRO_GENERATED 1
14
15#define ae2fVK_Ann_Slp_c
16
18#include <stdlib.h>
19#undef __ae2f_MACRO_GENERATED
20#define __ae2f_MACRO_GENERATED 1
21#include <assert.h>
22#undef __ae2f_MACRO_GENERATED
23#define __ae2f_MACRO_GENERATED 1
24#include <string.h>
25#undef __ae2f_MACRO_GENERATED
26#define __ae2f_MACRO_GENERATED 1
27#define CMDONERR
28#endif
29
30#include <ae2fVK/Ann/SlpSHADER.auto.h>
31#undef __ae2f_MACRO_GENERATED
32#define __ae2f_MACRO_GENERATED 1
33
34
35#define __ae2fVK_AnnSlpMkFndMemProp_imp(
36 /** tparam */
37 CMDONERR,
38
39 /** param */
40 /* , unsigned char */ r_memtypeidx,
41 /* ae2f_err_t */ v_errbit,
42 /* const unsigned char */ memtypeidx_invalid_minus_one,
43 /* const VkMemoryPropertyFlagBits */ vkpropflag_req,
44 /* const VkPhysicalDeviceMemoryProperties */ vkphydevmemprops \
45)\
46{
47
48 assert(VK_MAX_MEMORY_TYPES <= memtypeidx_invalid_minus_one && "Invalid index does not do its thing.");
49 assert((vkphydevmemprops).memoryTypeCount <= VK_MAX_MEMORY_TYPES && "Invalid memory type count.");
50
51 for(
52 (r_memtypeidx) = (vkphydevmemprops).memoryTypeCount;
53 (r_memtypeidx)--
54 && (~((vkphydevmemprops).memoryTypes[(r_memtypeidx)].propertyFlags)
55 & vkpropflag_req)
56 ;
57 );
58
59 if((r_memtypeidx) == (memtypeidx_invalid_minus_one)) {
60 assert(!"Wanted bit has not found is not supported");
61 (v_errbit) |= ae2f_errGlob_IMP_NOT_FOUND;
62 CMDONERR;
63 } \
64}
65
66#define __ae2fVK_AnnSlpMkCreatBuf(
67 /** tparam */
68 CMDONERR,
69
70 /** param */
71 /* , const size_t */ sz,
72 /* VkResult */ r_vkres,
73 /* VkBuffer */ r_vkbuf,
74 /* VkBufferCreateInfo */ v_vkbufcreatinfo,
75 /* ae2f_err_t */ v_reterr,
76 /* const VkBufferUsageFlags */ vkbufuseflags,
77 /* const VkSharingMode */ vksharemode,
78 /* const VkDevice */ vkdev,
79 /* ae2f_opt constVkAllocationCallbacks* */ vkalloccalls \
80)\
81{
82 (v_vkbufcreatinfo).sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
83 (v_vkbufcreatinfo).pNext = 0;
84 (v_vkbufcreatinfo).usage = (vkbufuseflags);
85 (v_vkbufcreatinfo).pQueueFamilyIndices = 0;
86 (v_vkbufcreatinfo).queueFamilyIndexCount = 0;
87 (v_vkbufcreatinfo).sharingMode = vksharemode;
88 (v_vkbufcreatinfo).flags = 0;
89 (v_vkbufcreatinfo).size = (sz);
90
91 if(((r_vkres) = vkCreateBuffer(
92 vkdev
93 , &(v_vkbufcreatinfo)
94 , vkalloccalls
95 , &(r_vkbuf)
96 )) != VK_SUCCESS
97 )
98 {
99 assert(!"Failed vkCreateBuffer");
100 CMDONERR;
101 }
102
103 unless((r_vkbuf)) {
104 assert(!"vkCreateBuffer went null");
105 (v_reterr) |= ae2f_errGlob_ALLOC_FAILED;
106 CMDONERR;
107 } \
108}
109
110#define __ae2fVK_AnnSlpMkAllocVKMem_imp(
111 /** tparam */
112 CMDONERR,
113
114 /** param */
115 /* , const size_t */ sz,
116 /* VkResult */ r_vkres,
117 /* VkBuffer */ r_vkbuf,
118 /* VkDeviceMemory */ r_vkdevmem,
119 /* ae2f_err_t */ v_errbit,
120 /* VkBufferCreateInfo */ v_vkbufcreatinfo,
121 /* VkMemoryAllocateInfo */ v_memallocinfo,
122 /* const VkBufferUsageFlags */ vkbufuseflags,
123 /* const VkSharingMode */ vksharemode,
124 /* const VkDevice */ vkdev,
125 /* VkMemoryRequirements */ v_vkmemreq,
126 /* ae2f_opt constVkAllocationCallbacks* */ vkalloccalls,
127 /* unsigned char */ v_memtypeidx,
128 /* const unsigned char */ memtypeidx_invalid_minus_one,
129 /* const VkMemoryPropertyFlagBits */ vkpropflag_req,
130 /* const VkPhysicalDeviceMemoryProperties */ vkphydevmemprops \
131)\
132{
134 CMDONERR
135 , sz
136 , r_vkres
137 , r_vkbuf
138 , v_vkbufcreatinfo
139 , v_errbit
140 , vkbufuseflags
141 , vksharemode
142 , vkdev
143 , vkalloccalls
144 );
145
147 CMDONERR
148 , v_memtypeidx
149 , v_errbit
150 , memtypeidx_invalid_minus_one
151 , vkpropflag_req
152 , vkphydevmemprops
153 );
154
155 vkGetBufferMemoryRequirements(
156 vkdev
157 , r_vkbuf
158 , &(v_vkmemreq)
159 );
160
161 unless((v_vkmemreq).size >= (v_vkbufcreatinfo).size) {
162 assert(!"Buffer size exceeds memory requirements");
163 (v_errbit) |= ae2f_errGlob_IMP_NOT_FOUND;
164 CMDONERR;
165 }
166
167 unless((v_vkmemreq).size <=
168 (vkphydevmemprops).memoryHeaps[(vkphydevmemprops).memoryTypes[v_memtypeidx].heapIndex].size)
169 {
170 assert(!"Requirement size exceeds memory heap size.");
171 (v_errbit) |= ae2f_errGlob_IMP_NOT_FOUND;
172 CMDONERR;
173 }
174
175 (v_memallocinfo).sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
176 (v_memallocinfo).allocationSize = (v_vkmemreq).size;
177 (v_memallocinfo).memoryTypeIndex = (v_memtypeidx);
178 (v_memallocinfo).pNext = NULL;
179
180 if(((r_vkres) = vkAllocateMemory(
181 vkdev
182 , &(v_memallocinfo)
183 , (vkalloccalls)
184 , &(r_vkdevmem)
185 )) != VK_SUCCESS)
186 {
187 assert(!"vkAllocateMemory has failed.");
188 CMDONERR;
189 }
190
191 unless((r_vkdevmem)) {
192 assert(!"vkAllocateMemory went null.");
193 (v_errbit) |= ae2f_errGlob_ALLOC_FAILED;
194 CMDONERR;
195 }
196
197 if(((r_vkres) = vkBindBufferMemory(
198 vkdev
199 , r_vkbuf
200 , r_vkdevmem
201 , 0
202 )) != VK_SUCCESS)
203 {
204 assert(!"vkBindBufferMemory has failed.");
205 CMDONERR;
206 } \
207}
208
209#define __ae2fVK_AnnSlpMkLoadPipeCreat_imp(
210 /** tparam */
211 CMDONERR,
212
213 /** param */
214 /* , ae2f_err_t */ r_reterr,
215 /* VkComputePipelineCreateInfo* const */ pipecreat,
216 /* VkPipelineLayout* const */ pipelayout,
217 /* const VkShaderModule */ shadermod,
218 /* constchar* const */ entrypoint,
219 /* const ae2fVK_eAnnSlpPipes */ idx_pipe,
220 /* const ae2fVK_eAnnSlpPipeLayouts */ idx_pipelayout \
221)\
222{
223 memset(
224 &(pipecreat)[(idx_pipe)], 0
225 , sizeof((pipecreat)[0])
226 );
227
228 unless((pipelayout)[idx_pipelayout]) {
229 assert(!"Pipelayout went null");
230 (r_reterr) |= ae2f_errGlob_ALLOC_FAILED;
231 CMDONERR;
232 }
233
234 (pipecreat)[idx_pipe].sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
235 (pipecreat)[idx_pipe].layout = ((pipelayout)[idx_pipelayout]);
236 (pipecreat)[idx_pipe].pNext = NULL;
237 (pipecreat)[idx_pipe].basePipelineHandle = NULL;
238 (pipecreat)[idx_pipe].basePipelineIndex = -1;
239 (pipecreat)[idx_pipe].flags = 0;
240 (pipecreat)[idx_pipe].stage.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
241 (pipecreat)[idx_pipe].stage.stage = VK_SHADER_STAGE_COMPUTE_BIT;
242 (pipecreat)[idx_pipe].stage.module = (shadermod);
243 (pipecreat)[idx_pipe].stage.pName = entrypoint;
244 (pipecreat)[idx_pipe].stage.pSpecializationInfo = NULL;
245 (pipecreat)[idx_pipe].stage.flags = 0; \
246}
247
248#define __ae2fVK_AnnSlpMkOnePipeLayoutVerbose_imp(
249 /** tparam */
250 CMDONERR,
251
252 /** param */
253 /* , VkPushConstantRange */ v_vkpushconstrange,
254 /* VkPipelineLayoutCreateInfo */ v_vkpipelayoutcreatinfo,
255 /* ae2f_err_t */ r_reterr,
256 /* ae2fVK_AnnSlp* const */ iv_slpptr,
257 /* const ae2fVK_eAnnSlpPipeLayouts */ idx,
258 /* const uint32_t */ szrequired,
259 /* constVkAllocationCallbacks* const */ vkalloccalls,
260 /* const VkDevice */ vkdev \
261)\
262{
263 (v_vkpushconstrange).size
264 = (szrequired);
265
266 if((szrequired) & 0b11) {
267 (v_vkpushconstrange).size
268 = ((szrequired) + 4)
269 & ae2f_static_cast(uint32_t, ~0b11);
270 }
271
272 if(((iv_slpptr)->m_vkres = vkCreatePipelineLayout(
273 vkdev
274 , &(v_vkpipelayoutcreatinfo)
275 , (vkalloccalls)
276 , &(iv_slpptr)->m_vkpipelayout[idx]
277 )) != VK_SUCCESS)
278 {
279 assert(!"vkCreatePipelineLayout has failed.");
280 CMDONERR;
281 }
282
283 unless((iv_slpptr)->m_vkpipelayout[idx])
284 {
285 assert(!"vkCreatePipelineLayout went null");
286 (r_reterr) |= ae2f_errGlob_ALLOC_FAILED;
287 CMDONERR;
288 } \
289}
290
291
292#define __ae2fVK_AnnSlpCreatDescPool_imp(
293 /** tparam */
294
295
296 /** param */
297 /* , ae2fVK_AnnSlpCreatDescPool_t */ v_descpool,
298 /* ae2fVK_AnnSlp */ iv_slp,
299 /* VkDescriptorPool */ r_vkdescpool,
300 /* ae2f_err_t */ r_reterr,
301 /* const VkDescriptorPoolCreateFlagBits */ i_vkdescpoolcreatflags,
302 /* const VkDescriptorType */ i_vkdesctype,
303 /* const uint32_t */ i_vkdescpoolsz_count,
304 /* const uint32_t */ i_vkmaxdescsets \
305)\
306{
308 (v_descpool).m_U0.m_vkdescpoolcreatinfo
309 , (v_descpool).m_U0.m_vkdescpoolsz
310 , r_vkdescpool
311 , r_reterr
312 , (iv_slp).m_vkres
313 , (iv_slp).m_vkdev
314 , (iv_slp).m_vkalloccalls
315 , i_vkdescpoolcreatflags
316 , i_vkdesctype
317 , i_vkdescpoolsz_count
318 , i_vkmaxdescsets
319 ); \
320}
321
322#define __ae2fVK_AnnSlpCreatDescPoolVerbose_imp(
323 /** tparam */
324
325
326 /** param */
327 /* , VkDescriptorPoolCreateInfo */ v_vkdescpoolcreatinfo,
328 /* VkDescriptorPoolSize */ v_vkdescpoolsz,
329 /* VkDescriptorPool */ r_vkdescpool,
330 /* ae2f_err_t */ r_reterr,
331 /* VkResult */ r_vkres,
332 /* const VkDevice */ i_vkdev,
333 /* constVkAllocationCallbacks* const */ i_vkptrAlloc,
334 /* const VkDescriptorPoolCreateFlagBits */ i_vkdescpoolcreatflags,
335 /* const VkDescriptorType */ i_vkdesctype,
336 /* const uint32_t */ i_vkdescpoolsz_count,
337 /* const uint32_t */ i_vkmaxdescsets \
338)\
339{
340 (v_vkdescpoolsz).type = (i_vkdesctype);
341 (v_vkdescpoolsz).descriptorCount = (i_vkdescpoolsz_count);
342
343 (v_vkdescpoolcreatinfo).sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
344 (v_vkdescpoolcreatinfo).flags = 0;
345 (v_vkdescpoolcreatinfo).pNext = NULL;
346 (v_vkdescpoolcreatinfo).flags = (i_vkdescpoolcreatflags);
347 (v_vkdescpoolcreatinfo).poolSizeCount = 1;
348 (v_vkdescpoolcreatinfo).pPoolSizes = &(v_vkdescpoolsz);
349 (v_vkdescpoolcreatinfo).maxSets = (i_vkmaxdescsets);
350
351 if(((r_vkres) = vkCreateDescriptorPool(
352 (i_vkdev)
353 , &(v_vkdescpoolcreatinfo)
354 , (i_vkptrAlloc)
355 , &(r_vkdescpool)
356 )) != VK_SUCCESS)
357 {
358 assert(!"vkCreateDescriptorPool has failed.");
359 }
360
361 unless((r_vkdescpool)) {
362 assert(!"vkCreateDescriptorPool went null.");
363 (r_reterr) |= ae2f_errGlob_ALLOC_FAILED;
364 } \
365}
366
367/**
368 * @brief
369 * Make slp with OpenCL compute shader.
370 *
371 * @details
372 * The shader itself is incomplete. \n
373 * For using it you will need to define three macros as function. \n
374 * Below is the required snippet.
375 *
376 * #define ACT(const ae2f_float_t) -> ae2f_float_t \n
377 * #define ACT_DERIV(const ae2f_float_t) -> ae2f_float_t \n
378 * #define LOSS_DERIV(
379 * ae2f_float_t* retval
380 * const ae2f_float_t* const out
381 * , const ae2f_float_t* const out_desired
382 * , const size_t index
383 * , const size_t length_out_goal
384 * );
385 *
386 * @param vkcldeclaration
387 * @param vkcldefinition
388 * */
389#define __ae2fVK_AnnSlpMk_imp(
390 /** tparam */
391
392
393 /** param */
394 /* , ae2fVK_AnnSlpMk_t */ v_mk,
395 /* ae2f_float_t* const */ weight_opt,
396 /* ae2f_float_t* const */ bias_opt,
397 /* ae2f_float_t* const */ cache_opt,
398 /* const uint32_t */ inc,
399 /* const uint32_t */ outc,
400 /* ae2f_opt const size_t */ prm_offset,
401 /* ae2f_opt const size_t */ extra,
402 /* ae2f_optae2f_AnnAct_t* const */ act,
403 /* ae2f_optae2f_AnnAct_t* const */ actderiv,
404 /* ae2f_AnnLoss_t* const */ lossderiv,
405 /* ae2f_float_t */ learningrate,
406 /* ae2f_float_t */ learningrate_bias,
407 /* const VkDevice */ vkdev,
408 /* const VkPhysicalDeviceMemoryProperties */ vkmemprops,
409 /* ae2f_optVkAllocationCallbacks* const */ vkalloccalls,
410 /* ae2f_opt constchar* const */ vkcldeclaration,
411 /* ae2f_opt constchar* const */ vkcldefinition \
412)\
413{
414 assert((vkdev) && "Vulkan device null check");
415 assert((lossderiv) && "lossderiv must be specified.");
416
417 (v_mk).m_reterr = ae2f_errGlob_OK;
418
419 do {
421 (v_mk).m_U0.m_base, (weight_opt)
422 , (bias_opt), (cache_opt)
423 , (inc), (outc)
424 , ((prm_offset) + sizeof(ae2fVK_AnnSlp) - sizeof(ae2f_AnnSlp))
425 , (extra)
426 , (act), (actderiv), (lossderiv)
427 , (learningrate), (learningrate_bias)
428 );
429
430 if((v_mk).m_U0.m_base.m_ptr->m_Slp[0].m_inc > UINT32_MAX) {
431 assert(!"Input size is too large");
432 (v_mk).m_reterr |= ae2f_errGlob_WRONG_OPERATION;
433 break;
434 }
435
436 if((v_mk).m_U0.m_base.m_ptr->m_Slp[0].m_outc > UINT32_MAX) {
437 assert(!"Output size is too large");
438 (v_mk).m_reterr |= ae2f_errGlob_WRONG_OPERATION;
439 break;
440 }
441
442 (v_mk).m_U0.m_alter.m_ptr->m_vkdev = vkdev;
443 (v_mk).m_U0.m_alter.m_ptr->m_vkalloccalls = vkalloccalls;
444
445 /** Allocate the global memory */
447 break;
448 , __ae2fVK_AnnSlpGlobSz(inc, outc)
449 , (v_mk).m_U0.m_alter.m_ptr->m_vkres
450 , (v_mk).m_U0.m_alter.m_ptr->m_vkglobbuf
451 , (v_mk).m_U0.m_alter.m_ptr->m_vkglobdevmem
452 , (v_mk).m_reterr
453 , (v_mk).m_U1.m_vkbufcreatinfo
454 , (v_mk).m_U1.m_vkmemallocinfo
455 , VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
456 , VK_SHARING_MODE_EXCLUSIVE
457 , (vkdev)
458 , (v_mk).m_U2.m_vkmemreqs
459 , (vkalloccalls)
460 , (v_mk).m_U0.m_alter.m_i /* v_memtypeidx */
461 , UCHAR_MAX
462 , VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
463 , vkmemprops
464 );
465
466 /** the local memory */
468 break;
469 , sizeof(ae2f_float_t) * ((outc))
470 , (v_mk).m_U0.m_alter.m_ptr->m_vkres
471 , (v_mk).m_U0.m_alter.m_ptr->m_vklocbuf
472 , (v_mk).m_U0.m_alter.m_ptr->m_vklocdevmem
473 , (v_mk).m_reterr
474 , (v_mk).m_U1.m_vkbufcreatinfo
475 , (v_mk).m_U1.m_vkmemallocinfo
476 , VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
477 , VK_SHARING_MODE_EXCLUSIVE
478 , (vkdev)
479 , (v_mk).m_U2.m_vkmemreqs
480 , (vkalloccalls)
481 , (v_mk).m_U0.m_alter.m_i /* v_memtypeidx */
482 , UCHAR_MAX
483 , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
484 , vkmemprops
485 );
486
487 (v_mk).m_U2.m_S0.m_glob.binding = 0;
488
489 (v_mk).m_U2.m_S0.m_glob.descriptorType
490 = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
491
492 (v_mk).m_U2.m_S0.m_glob.descriptorCount = 1;
493
494 (v_mk).m_U2.m_S0.m_glob.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
495 (v_mk).m_U2.m_S0.m_glob.pImmutableSamplers = NULL;
496
497 (v_mk).m_U2.m_S0.m_loc = (v_mk).m_U2.m_S0.m_glob;
498 (v_mk).m_U2.m_S0.m_loc.binding = 1;
499
500
501 (v_mk).m_U1.m_vkdescsetlayoutcreatinfo.pBindings = (v_mk).m_U2.m_vkdescsetlayoutbind;
502 (v_mk).m_U1.m_vkdescsetlayoutcreatinfo.bindingCount = 1;
503 (v_mk).m_U1.m_vkdescsetlayoutcreatinfo.flags = 0;
504 (v_mk).m_U1.m_vkdescsetlayoutcreatinfo.pNext = NULL;
505 (v_mk).m_U1.m_vkdescsetlayoutcreatinfo.sType
506 = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
507
508 if(((v_mk).m_U0.m_alter.m_ptr->m_vkres = vkCreateDescriptorSetLayout(
509 vkdev
510 , &(v_mk).m_U1.m_vkdescsetlayoutcreatinfo
511 , (vkalloccalls)
512 , &(v_mk).m_U0.m_alter.m_ptr->m_vkdescsetlayout
513 [ae2fVK_eAnnSlpDescLayouts_kPredict]
514 )) != VK_SUCCESS) {
515 assert(!"vkCreateDescriptorSetLayout 0 has failed");
516 break;
517 }
518
519 unless((v_mk).m_U0.m_alter.m_ptr->m_vkdescsetlayout[0]) {
520 assert(!"vkCreateDescriptorSetLayout 0 went null");
521 (v_mk).m_reterr |= ae2f_errGlob_ALLOC_FAILED;
522 break;
523 }
524
525 (v_mk).m_U1.m_vkdescsetlayoutcreatinfo.bindingCount = 2;
526
527 if(((v_mk).m_U0.m_alter.m_ptr->m_vkres = vkCreateDescriptorSetLayout(
528 vkdev
529 , &(v_mk).m_U1.m_vkdescsetlayoutcreatinfo
530 , (vkalloccalls)
531 , &(v_mk).m_U0.m_alter.m_ptr->m_vkdescsetlayout
532 [ae2fVK_eAnnSlpDescLayouts_kTrain]
533 )) != VK_SUCCESS) {
534 assert(!"vkCreateDescriptorSetLayout 1 has failed");
535 break;
536 }
537
538 unless((v_mk).m_U0.m_alter.m_ptr->m_vkdescsetlayout[1]) {
539 assert(!"vkCreateDescriptorSetLayout 1 went null");
540 (v_mk).m_reterr |= ae2f_errGlob_ALLOC_FAILED;
541 break;
542 }
543
544 (v_mk).m_U1.m_vkpushconstrange.offset = 0;
545 (v_mk).m_U1.m_vkpushconstrange.stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;
546
547 (v_mk).m_U2.m_vkpipelayoutcreatinfo.sType
548 = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
549 (v_mk).m_U2.m_vkpipelayoutcreatinfo.setLayoutCount = 1;
550 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pushConstantRangeCount = 1;
551 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pPushConstantRanges
552 = &(v_mk).m_U1.m_vkpushconstrange;
553 (v_mk).m_U2.m_vkpipelayoutcreatinfo.pSetLayouts
554 = (v_mk).m_U0.m_alter.m_ptr->m_vkdescsetlayout;
555
557 break,
558 (v_mk).m_U1.m_vkpushconstrange
559 , (v_mk).m_U2.m_vkpipelayoutcreatinfo
560 , (v_mk).m_reterr
561 , (v_mk).m_U0.m_alter.m_ptr
562 , ae2fVK_eAnnSlpPipeLayouts_kPredict
563 , sizeof(size_t)
564 , vkalloccalls
565 , vkdev
566 );
567
568 if ((v_mk).m_U0.m_alter.m_ptr->m_vkres != VK_SUCCESS) {
569 assert(!"__ae2fVK_AnnSlpMkOnePipeLayout_imp 0 has failed.");
570 break;
571 }
572
574 break,
575 (v_mk).m_U1.m_vkpushconstrange
576 , (v_mk).m_U2.m_vkpipelayoutcreatinfo
577 , (v_mk).m_reterr
578 , (v_mk).m_U0.m_alter.m_ptr
579 , ae2fVK_eAnnSlpPipeLayouts_kTrain
580 , sizeof(ae2f_float_t) * 2
581 , vkalloccalls
582 , vkdev
583 );
584
585 if ((v_mk).m_U0.m_alter.m_ptr->m_vkres != VK_SUCCESS) {
586 assert(!"__ae2fVK_AnnSlpMkOnePipeLayout_imp 1 has failed.");
587 break;
588 }
589
590 /*** \
591 * \
592 * FIXME: You need to know if this is truely needed. \
593 __ae2fVK_AnnSlpMkOnePipeLayout_imp( \
594 break; \
595 , v_mk \
596 , ae2fVK_eAnnSlpPipeLayouts_kFit \
597 , sizeof(ae2f_float_t) * 2 \
598 , vkalloccalls, vkdev \
599 ); \
600 \
601 if ((v_mk).m_U0.m_alter.m_ptr->m_vkres != VK_SUCCESS) { \
602 assert(!"__ae2fVK_AnnSlpMkOnePipeLayout_imp 2 has failed."); \
603 break; \
604 } */
605
606 assert((vkcldeclaration) && "vkcldeclaration is null");
607 assert((vkcldefinition) && "vkcldefinition is null");
608
609 {
611 (v_mk).m_U3.m_openclsrc_v
612 , (v_mk).m_reterr
613 , (vkcldeclaration)
615 , (vkcldefinition)
616 );
617
618 if((v_mk).m_reterr) {
619 assert(!"__ae2fVK_AnnSlpMkCLSPV_imp has failed.");
620 break;
621 }
622
623 assert((v_mk).m_U3.m_openclsrc);
624
625 (v_mk).m_U2.m_log = ae2f_static_cast(char*, NULL);
626 (v_mk).m_U1.m_spirv = NULL;
627 (v_mk).m_U0.m_spirv_len = 0;
628
629 assert((v_mk).m_U0.m_alter.m_ptr);
630
631 switch(clspvCompileFromSourcesString(
632 1
633 , ae2f_reinterpret_cast(const size_t*, NULL)
635 const char** restrict
636 , (&(v_mk).m_U3.m_openclsrc)
637 )
638 ,""
639 "-pod-pushconstant "
640 "-cl-fast-relaxed-math "
641 "-cl-single-precision-constant"
642 , &(v_mk).m_U1.m_spirv_c
643 , &(v_mk).m_U0.m_spirv_len
644 , &(v_mk).m_U2.m_log
645 ))
646 {
647 case CLSPV_ERROR:
648 (v_mk).m_reterr |= ae2f_errGlob_NFOUND;
649 assert(!"clspvCompileFromSourcesString has failed.");
650
651 break;
652 case CLSPV_OUT_OF_HOST_MEM:
653 (v_mk).m_reterr |= ae2f_errGlob_ALLOC_FAILED;
654 assert(!"clspvCompileFromSourcesString has failed its allocation.");
655
656 break;
657
658 case CLSPV_INVALID_ARG:
659 (v_mk).m_reterr |= ae2f_errGlob_WRONG_OPERATION;
660 assert(!"clspvCompileFromSourcesString found arguments invalid.");
661
662 break;
663
664 case CLSPV_SUCCESS: break;
665 }
666
667 free((v_mk).m_U3.m_openclsrc);
668 free((v_mk).m_U2.m_log);
669 }
670
671 assert((v_mk).m_U0.m_base.m_ptr && "clspvCompileFromSourcesString has done something weird");
672
673 (v_mk).m_U2.m_vkshadermodcreatinfo.pNext = NULL;
674 (v_mk).m_U2.m_vkshadermodcreatinfo.codeSize
675 = (v_mk).m_U0.m_spirv_len;
676 (v_mk).m_U2.m_vkshadermodcreatinfo.pCode
677 = (v_mk).m_U1.m_spirv_u32;
678 (v_mk).m_U2.m_vkshadermodcreatinfo.flags = 0;
679 (v_mk).m_U2.m_vkshadermodcreatinfo.sType
680 = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
681
682 if(((v_mk).m_U0.m_alter.m_ptr->m_vkres = vkCreateShaderModule(
683 vkdev
684 , &(v_mk).m_U2.m_vkshadermodcreatinfo
685 , (vkalloccalls)
686 , &(v_mk).m_U0.m_alter.m_ptr->m_vkshadermodule
687 )) != VK_SUCCESS)
688 {
689 assert(!"vkCreateShaderModule has failed.");
690 break;
691 }
692
693 unless((v_mk).m_U0.m_alter.m_ptr->m_vkshadermodule)
694 {
695 assert(!"vkCreateShaderModule has produced NULL.");
696 (v_mk).m_reterr |= ae2f_errGlob_ALLOC_FAILED;
697 break;
698 }
699
700 free((v_mk).m_U1.m_spirv);
701
703 break
704 , (v_mk).m_reterr
705 , (v_mk).m_U2.m_vkcomputepipecreatinfo
706 , (v_mk).m_U0.m_alter.m_ptr->m_vkpipelayout
707 , (v_mk).m_U0.m_alter.m_ptr->m_vkshadermodule
708 , "kFollow"
709 , (ae2fVK_eAnnSlpPipes_kFollow)
710 , (ae2fVK_eAnnSlpPipeLayouts_kTrain)
711 );
712
714 break
715 , (v_mk).m_reterr
716 , (v_mk).m_U2.m_vkcomputepipecreatinfo
717 , (v_mk).m_U0.m_alter.m_ptr->m_vkpipelayout
718 , (v_mk).m_U0.m_alter.m_ptr->m_vkshadermodule
719 , "kFit"
720 , (ae2fVK_eAnnSlpPipes_kFit)
721 , (ae2fVK_eAnnSlpPipeLayouts_kTrain)
722 );
723
725 break
726 , (v_mk).m_reterr
727 , (v_mk).m_U2.m_vkcomputepipecreatinfo
728 , (v_mk).m_U0.m_alter.m_ptr->m_vkpipelayout
729 , (v_mk).m_U0.m_alter.m_ptr->m_vkshadermodule
730 , "kPredict"
731 , ae2fVK_eAnnSlpPipes_kPredict
732 , ae2fVK_eAnnSlpPipeLayouts_kPredict
733 );
734
736 break
737 , (v_mk).m_reterr
738 , (v_mk).m_U2.m_vkcomputepipecreatinfo
739 , (v_mk).m_U0.m_alter.m_ptr->m_vkpipelayout
740 , (v_mk).m_U0.m_alter.m_ptr->m_vkshadermodule
741 , "kTrain"
742 , (ae2fVK_eAnnSlpPipes_kTrain)
743 , (ae2fVK_eAnnSlpPipeLayouts_kTrain)
744 );
745
746 if (((v_mk).m_U0.m_alter.m_ptr->m_vkres
747 = vkCreateComputePipelines(
748 (vkdev)
749 , VK_NULL_HANDLE
750 , ae2fVK_eAnnSlpPipes_LEN
751 , (v_mk).m_U2.m_vkcomputepipecreatinfo
752 , (vkalloccalls)
753 , (v_mk).m_U0.m_alter.m_ptr->m_vkpipeline
754 )
755 ) != VK_SUCCESS)
756 {
757 assert(!"vkCreateComputePipelines has failed.");
758 (v_mk).m_reterr |= ae2f_errGlob_NFOUND;
759 break;
761 } while(0);
762
763 assert((v_mk).m_reterr == ae2f_errGlob_OK && "Returned error flag has set up");
764 if((v_mk).m_U0.m_alter.m_ptr->m_vkres) {
765 assert(!"Vulkan result check for validation");
767 } \
768}
769
770/**
771 * @param r_handle must be destroyed by free().
772 * @param i_second_raw must be guaranteed to be a raw stirng.
773 * */
774#define __ae2fVK_AnnSlpMkCLSPVVerbose_imp(
775 /** tparam */
776
777
778 /** param */
779 /* ,void* restrict */ r_handle,
780 /* ae2f_err_t */ ir_err,
781 /* constchar* restrict */ i_first,
782 /* constchar* restrict */ i_second,
783 /* constchar* restrict */ i_third \
784) \
785{
786 if(!((r_handle) = calloc(
787 1
788 , strlen(i_first) + sizeof(
789 i_second
790 ) + strlen(i_third)
791 )))
792 {
793 assert(!"_ae2fVK_AnnSlpMkCLSPV_imp has failed.");
794 (ir_err) |= ae2f_errGlob_ALLOC_FAILED;
795 }
796
797 else {
798 strcpy(ae2f_reinterpret_cast(char*, r_handle), i_first);
799 strcat(ae2f_reinterpret_cast(char*, r_handle), i_second);
800 strcat(ae2f_reinterpret_cast(char*, r_handle), i_third);
801 } \
802}
803
804/** Map's usually for output */
805#define __ae2fVK_AnnSlpMap_imp(
806 /** tparam */
807
808
809 /** param */
810 /* , ae2f_err_t */ r_err,
811 /* ae2fVK_AnnSlp */ slp,
812 /* ae2f_float_t** restrict const */ data \
813)\
814{
815 if((slp).m_vkres != VK_SUCCESS) {
816 assert(!"Result flag is not valid.");
817 }
818
819 assert((slp).m_vkdev);
820 assert((slp).m_vkglobdevmem);
821 assert(r_err == ae2f_errGlob_OK && "Previous status is bad.");
822
823 do {
824 if(((slp).m_vkres = vkMapMemory(
825 (slp).m_vkdev
826 , (slp).m_vkglobdevmem
827 , 0, VK_WHOLE_SIZE
828 , 0
829 , ae2f_reinterpret_cast(void** restrict, data)
830 )) != VK_SUCCESS)
831 {
832 assert(!"vkMapMemory has failed.");
833 break;
835
836 unless(*(data)) {
837 assert(!"vkMapMemory went null.");
838 (r_err) |= ae2f_errGlob_ALLOC_FAILED;
839 break;
840 }
841 } while(0); \
842}
843
845#define T int
846#endif
847
848#define __ae2fVK_AnnSlpMapRangedGeneric_imp(
849 /** tparam */
850 T,
851
852 /** param */
853 /* , VkMappedMemoryRange */ v_vkmapmemrange,
854 /* ae2fVK_AnnSlp */ iv_slp,
855 /* ae2f_err_t */ r_err,
856 /* T* */ r_ptr,
857 /* const VkDeviceSize */ i_off,
858 /* const VkDeviceSize */ i_sz \
859)\
860{
861 assert((iv_slp).m_vkres == VK_SUCCESS);
862 assert((iv_slp).m_vkdev);
863 assert((iv_slp).m_vkglobdevmem);
864 assert((r_err) == ae2f_errGlob_OK && "Previous status is bad.");
865
866 do {
867 if(((iv_slp).m_vkres = vkMapMemory(
868 (iv_slp).m_vkdev
869 , (iv_slp).m_vkglobdevmem
870 , (v_vkmapmemrange).offset = (i_off)
871 , (v_vkmapmemrange).size = (i_sz)
872 ,0
873 , ae2f_reinterpret_cast(void**, &(r_ptr))
874 )
875 ) != VK_SUCCESS)
876 {
877 assert(!"vkMapMemory has failed.");
878 break;
879 }
880
881 unless((r_ptr)) {
882 assert(!"vkMapMemory went null.");
883 (r_err) |= ae2f_errGlob_ALLOC_FAILED;
884 break;
885 }
886
887 (v_vkmapmemrange).memory = (iv_slp).m_vkglobdevmem;
888 (v_vkmapmemrange).pNext = NULL;
889 (v_vkmapmemrange).sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
890
891 if (((iv_slp).m_vkres = vkInvalidateMappedMemoryRanges(
892 (iv_slp).m_vkdev
893 , 1
894 , &(v_vkmapmemrange)
895 )) != VK_SUCCESS)
896 {
897 assert(!"vkInvalidateMappedMemoryRanges has failed.");
898 break;
899 }
900 } while(0);
901
902 unless((iv_slp).m_vkres == VK_SUCCESS) {
903 (r_err) |= ae2f_errGlob_NFOUND;
904 } \
905}
906
907#undef T
908
909#define __ae2fVK_AnnSlpUnMap_imp(
910 /** tparam */
911
912
913 /** param */
914 /* , const ae2fVK_AnnSlp */ slp \
915){
916 assert((slp).m_vkdev);
917 assert((slp).m_vkglobdevmem);
918 vkUnmapMemory((slp).m_vkdev, (slp).m_vkglobdevmem); \
919}
920
921#define __ae2fVK_AnnSlpUnMapRanged_imp(
922 /** tparam */
923
924
925 /** param */
926 /* , ae2fVK_AnnSlpUnMap_t */ v_out,
927 /* ae2fVK_AnnSlp */ vi_slp,
928 /* const VkDeviceSize */ i_off,
929 /* const VkDeviceSize */ i_sz \
930)\
931{
932 assert((vi_slp).m_vkres == VK_SUCCESS);
933
934 (v_out).memory = (vi_slp).m_vkglobdevmem;
935 (v_out).offset = (i_off);
936 (v_out).pNext = NULL;
937 (v_out).size = (i_sz);
938 (v_out).sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
939
940 do {
941 if (((vi_slp).m_vkres = vkFlushMappedMemoryRanges(
942 (vi_slp).m_vkdev
943 , 1
944 , &(v_out)
945 )) != VK_SUCCESS)
946 {
947 assert(!"vkFlushMappedMemoryRanges has failed.");
948 break;
949 }
950
952 } while(0); \
953}
954
955#define __ae2fVK_AnnSlpClean_imp(
956 /** tparam */
957
958
959 /** param */
960 /* , const ae2fVK_AnnSlp */ block \
961)\
962{
963 assert((block).m_vkdev && "Double free is suspected.");
964
965 if((block).m_vkdev) {
966 if((block).m_vkglobbuf) {
967 vkDestroyBuffer(
968 (block).m_vkdev
969 , (block).m_vkglobbuf
970 , (block).m_vkalloccalls
971 );
972 }
973
974 if((block).m_vklocbuf) {
975 vkDestroyBuffer(
976 (block).m_vkdev
977 , (block).m_vklocbuf
978 , (block).m_vkalloccalls
979 );
980 }
981
982 if((block).m_vkglobdevmem) {
983 vkFreeMemory(
984 (block).m_vkdev
985 , (block).m_vkglobdevmem
986 , (block).m_vkalloccalls
987 );
988 }
989
990 if((block).m_vklocdevmem) {
991 vkFreeMemory(
992 (block).m_vkdev
993 , (block).m_vklocdevmem
994 , (block).m_vkalloccalls
995 );
996 }
997
998 if((block).m_vkpipeline[0]) {
999 vkDestroyPipeline(
1000 (block).m_vkdev
1001 , (block).m_vkpipeline[0]
1002 , (block).m_vkalloccalls
1003 );
1004 }
1005
1006 if((block).m_vkpipeline[1]) {
1007 vkDestroyPipeline(
1008 (block).m_vkdev
1009 , (block).m_vkpipeline[1]
1010 , (block).m_vkalloccalls
1011 );
1012 }
1013
1014 if((block).m_vkpipeline[2]) {
1015 vkDestroyPipeline(
1016 (block).m_vkdev
1017 , (block).m_vkpipeline[2]
1018 , (block).m_vkalloccalls
1019 );
1020 }
1021
1022 if((block).m_vkpipeline[3]) {
1023 vkDestroyPipeline(
1024 (block).m_vkdev
1025 , (block).m_vkpipeline[3]
1026 , (block).m_vkalloccalls
1027 );
1028 }
1029
1030 if((block).m_vkdescsetlayout[0]) {
1031 vkDestroyDescriptorSetLayout(
1032 (block).m_vkdev
1033 , (block).m_vkdescsetlayout[0]
1034 , (block).m_vkalloccalls
1035 );
1036 }
1037
1038 if((block).m_vkdescsetlayout[1]) {
1039 vkDestroyDescriptorSetLayout(
1040 (block).m_vkdev
1041 , (block).m_vkdescsetlayout[1]
1042 , (block).m_vkalloccalls
1043 );
1044 }
1045
1046 if((block).m_vkpipelayout[0]) {
1047 vkDestroyPipelineLayout(
1048 (block).m_vkdev
1049 , (block).m_vkpipelayout[0]
1050 , (block).m_vkalloccalls
1051 );
1052 }
1053
1054 if((block).m_vkpipelayout[1]) {
1055 vkDestroyPipelineLayout(
1056 (block).m_vkdev
1057 , (block).m_vkpipelayout[1]
1058 , (block).m_vkalloccalls
1059 );
1060 }
1061
1062 if((block).m_vkpipelayout[2]) {
1063 vkDestroyPipelineLayout(
1064 (block).m_vkdev
1065 , (block).m_vkpipelayout[2]
1066 , (block).m_vkalloccalls
1068 }
1069
1070 if((block).m_vkshadermodule) {
1071 vkDestroyShaderModule(
1072 (block).m_vkdev
1073 , (block).m_vkshadermodule
1074 , (block).m_vkalloccalls
1075 );
1076 }
1077 } \
1078}
1079
1080/** @brief Unmaps Weight and Bias */
1081#define __ae2fVK_AnnSlpWBUnMap_imp(
1082 /** tparam */
1083
1084
1085 /** param */
1086 /* , ae2fVK_AnnSlpUnMap_t */ v_out,
1087 /* ae2fVK_AnnSlp */ vi_slp \
1088)\
1089{
1091 v_out
1092 , vi_slp
1093 , __ae2fVK_AnnSlpWeightOff((vi_slp).m_slp.m_Slp[0].m_inc, (vi_slp).m_slp.m_Slp[0].m_outc)
1094 , (__ae2fVK_AnnSlpWeightSz((vi_slp).m_slp.m_Slp[0].m_inc, (vi_slp).m_slp.m_Slp[0].m_outc)
1095 + __ae2fVK_AnnSlpBiasSz((vi_slp).m_slp.m_Slp[0].m_inc, (vi_slp).m_slp.m_Slp[0].m_outc))
1096
1097 ); \
1098}
1099
1100/** @brief Maps Weight and Bias */
1101#define __ae2fVK_AnnSlpWBMap(
1102 /** tparam */
1103
1104
1105 /** param */
1106 /* ,ae2f_err_t* */ r_err,
1107 /* ae2fVK_AnnSlp* */ slp,
1108 /* ae2f_float_t** restrict const */ ir_ptrweight,
1109 /* ae2f_float_t** restrict const */ ir_ptrbias \
1110)\
1111{
1112 ae2f_err_t v_err = 0;
1113 ae2fVK_AnnSlpMapRangedGeneric_t v_map;
1114
1115 if(slp) {
1116 assert((ir_ptrweight));
1117
1119 ae2f_float_t
1120 , v_map
1121 , (slp)[0]
1122 , *(r_err)
1123 , *(ir_ptrweight)
1124 , __ae2fVK_AnnSlpWeightOff((slp)->m_slp.m_Slp[0].m_inc, (slp)->m_slp.m_Slp[0].m_outc)
1125 , (__ae2fVK_AnnSlpWeightSz((slp)->m_slp.m_Slp[0].m_inc, (slp)->m_slp.m_Slp[0].m_outc)
1126 + __ae2fVK_AnnSlpBiasSz((slp)->m_slp.m_Slp[0].m_inc, (slp)->m_slp.m_Slp[0].m_outc))
1127 );
1128 } else {
1129 assert(!"Got null pointer from slp");
1130 (v_err) |= ae2f_errGlob_PTR_IS_NULL;
1131 }
1132
1133 if(ae2f_errGlob_OK == v_err) {
1134 if(ir_ptrbias) {
1135 *(ir_ptrbias) =
1136 *(ir_ptrweight)
1137 + __ae2fVK_AnnSlpWeightSz((slp)->m_slp.m_Slp[0].m_inc, (slp)->m_slp.m_Slp[0].m_outc);
1138 }
1139 }
1140
1141 if(r_err) {
1142 *(r_err) |= (v_err);
1143 assert(v_err == ae2f_errGlob_OK);
1144 } \
1145}
1146
1147#define __ae2fVK_AnnSlpIOUnMap_imp(
1148 /** tparam */
1149
1150
1151 /** param */
1152 /* , ae2fVK_AnnSlpUnMap_t */ v_out,
1153 /* ae2fVK_AnnSlp */ vi_slp \
1155{
1156
1158 v_out
1159 , vi_slp
1160 , __ae2fVK_AnnSlpInpOff((vi_slp).m_slp.m_Slp[0].m_inc, (vi_slp).m_slp.m_Slp[0].m_outc)
1161 , __ae2fVK_AnnSlpInpSz((vi_slp).m_slp.m_Slp[0].m_inc, (vi_slp).m_slp.m_Slp[0].m_outc)
1162 + __ae2fVK_AnnSlpOutSz((vi_slp).m_slp.m_Slp[0].m_inc, (vi_slp).m_slp.m_Slp[0].m_outc)
1163 ); \
1164}
1165
1166
1167
1168#define __ae2fVK_AnnSlpIOMap(
1169 /** tparam */
1170
1171
1172 /** param */
1173 /* ,ae2f_err_t* */ r_err,
1174 /* ae2fVK_AnnSlp* */ slp,
1175 /* ae2f_optae2f_float_t** restrict const */ ir_ptrinp,
1176 /* ae2f_optae2f_float_t** restrict const */ ir_ptrout \
1177)\
1178{
1179 ae2f_err_t v_err = 0;
1180 ae2fVK_AnnSlpMapRangedGeneric_t v_map;
1181
1182 assert(ir_ptrinp);
1183
1184 if((slp) && (ir_ptrinp)) {
1185
1187 ae2f_float_t
1188 , v_map
1189 , (*(slp))
1190 , v_err
1191 , (*(ir_ptrinp))
1192 , __ae2fVK_AnnSlpInpOff((slp)->m_slp.m_Slp[0].m_inc, (slp)->m_slp.m_Slp[0].m_outc)
1193 , __ae2fVK_AnnSlpInpSz((slp)->m_slp.m_Slp[0].m_inc, (slp)->m_slp.m_Slp[0].m_outc)
1194 + __ae2fVK_AnnSlpOutSz((slp)->m_slp.m_Slp[0].m_inc, (slp)->m_slp.m_Slp[0].m_outc)
1195 );
1196 } else {
1197 assert(!"Got null pointer from slp");
1198 v_err |= ae2f_errGlob_PTR_IS_NULL;
1199 }
1201 if(ae2f_errGlob_OK == v_err) {
1202 if(ir_ptrout) {
1203 *(ir_ptrout) =
1204 (*(ir_ptrinp))
1205 + __ae2fVK_AnnSlpInpSz((slp)->m_slp.m_Slp[0].m_inc, (slp)->m_slp.m_Slp[0].m_outc);
1206 }
1207 }
1208
1209 if(r_err) {
1210 *(r_err) |= (v_err);
1211 } \
1212}
1213
1214#define __ae2fVK_AnnSlpDeltaUnMap_imp(
1215 /** tparam */
1216
1217
1218 /** param */
1219 /* , ae2fVK_AnnSlpUnMap_t */ v_out,
1220 /* ae2fVK_AnnSlp */ vi_slp \
1221)\
1222{
1223
1225 v_out
1226 , vi_slp
1227 , __ae2fVK_AnnSlpDeltaOff((vi_slp).m_slp.m_Slp[0].m_inc, (vi_slp).m_slp.m_Slp[0].m_outc)
1228 , __ae2fVK_AnnSlpDeltaSz((vi_slp).m_slp.m_Slp[0].m_inc, (vi_slp).m_slp.m_Slp[0].m_outc)
1229 ); \
1230}
1231
1232#define __ae2fVK_AnnSlpDeltaMap(
1233 /** tparam */
1234
1235
1236 /** param */
1237 /* ,ae2f_err_t* */ r_err,
1238 /* ae2fVK_AnnSlp* */ slp,
1239 /* ae2f_optae2f_float_t** restrict const */ ir_ptrdelta \
1240)\
1241{
1242 ae2f_err_t v_err = 0;
1243 ae2fVK_AnnSlpMapRangedGeneric_t v_map;
1244
1245 if((slp) && (ir_ptrdelta)) {
1247 ae2f_float_t
1248 , v_map
1249 , *(slp)
1250 , *(r_err)
1251 , *(ir_ptrdelta)
1252 , __ae2fVK_AnnSlpDeltaOff((slp)->m_slp.m_Slp[0].m_inc, (slp)->m_slp.m_Slp[0].m_outc)
1253 , __ae2fVK_AnnSlpDeltaSz((slp)->m_slp.m_Slp[0].m_inc, (slp)->m_slp.m_Slp[0].m_outc)
1254 );
1255 } else {
1256 assert(!"Got null pointer from slp");
1257 v_err |= ae2f_errGlob_PTR_IS_NULL;
1258 }
1259
1260 if((v_err)) {
1261 assert(!"__ae2fVK_AnnSlpMapRangedGeneric_imp has failed.");
1262 (r_err) && (*(r_err) |= (v_err));
1263 } \
1264}
1265
1266#define __ae2fVK_AnnSlpGoalUnMap_imp(
1267 /** tparam */
1268
1270 /** param */
1271 /* , ae2fVK_AnnSlpUnMap_t */ v_out,
1272 /* ae2fVK_AnnSlp */ vi_slp \
1273)\
1274{
1276 v_out
1277 , vi_slp
1278 , __ae2fVK_AnnSlpGoalOff((vi_slp).m_slp.m_Slp[0].m_inc, (vi_slp).m_slp.m_Slp[0].m_outc)
1279 , __ae2fVK_AnnSlpGoalSz((vi_slp).m_slp.m_Slp[0].m_inc, (vi_slp).m_slp.m_Slp[0].m_outc)
1280 ); \
1281}
1282
1283#define __ae2fVK_AnnSlpGoalMap(
1284 /** tparam */
1285
1286
1287 /** param */
1288 /* ,ae2f_err_t* */ r_err,
1289 /* ae2fVK_AnnSlp* */ slp,
1290 /* ae2f_optae2f_float_t** restrict const */ ir_ptrgoal \
1291)\
1292{
1293 ae2f_err_t v_err = 0;
1294 ae2fVK_AnnSlpMapRangedGeneric_t v_map;
1295
1296 if((slp) && (ir_ptrgoal)) {
1298 ae2f_float_t
1299 , v_map
1300 , *(slp)
1301 , *(r_err)
1302 , (*ir_ptrgoal)
1303 , __ae2fVK_AnnSlpGoalOff((slp)->m_slp.m_Slp[0].m_inc, (slp)->m_slp.m_Slp[0].m_outc)
1304 , __ae2fVK_AnnSlpGoalSz((slp)->m_slp.m_Slp[0].m_inc, (slp)->m_slp.m_Slp[0].m_outc)
1305 );
1306 } else {
1307 assert(!"Got null pointer from slp");
1308 v_err |= ae2f_errGlob_PTR_IS_NULL;
1309 }
1310
1311 if(v_err) {
1312 assert(!"__ae2fVK_AnnSlpMapRangedGeneric_imp has failed.");
1313 (r_err) && (*(r_err) |= (v_err));
1314 } \
1315}
1316
1317#endif
1318
1319#undef __ae2f_MACRO_GENERATED
1320
1321#define __ae2f_MACRO_GENERATED 0
void ae2f_AnnAct_t(ae2f_float_t *ret, ae2f_float_t x)
Customisable activasion function type.
Definition Act.h:19
void ae2f_AnnLoss_t(ae2f_float_t *ret, const ae2f_float_t *out, const ae2f_float_t *goal, size_t index, size_t count)
Specify the way of calculating loss.
Definition Act.h:29
#define ae2f_enumdef(name,...)
Definition Cast.h:111
#define ae2f_structdef(key, name)
Definition Cast.h:110
#define ae2f_const_cast(t, v)
Definition Cast.h:57
#define ae2f_static_cast(t, v)
Definition Cast.h:42
#define ae2f_reinterpret_cast(t, v)
Definition Cast.h:52
#define unless(...)
Invokes when condition is false.
Definition Cast.h:103
ae2f_float ae2f_float_t
Definition Float.h:38
#define ae2f_opt
Definition Guide.h:26
#define __ae2fVK_AnnMlpBiasOff(i_depth, i_outc)
Definition Mlp.core.h:142
#define __ae2fVK_AnnMlpUnMapRanged_imp
Definition Mlp.core.h:168
ae2fVK_AnnSlpUnMap_t ae2fVK_AnnMlpUnMap_t
Definition Mlp.core.h:117
#define __ae2fVK_AnnMlpDeltaStreamSz(i_depth, i_outc)
Definition Mlp.core.h:145
#define __ae2fVK_AnnMlpMapRangedGeneric_imp
Definition Mlp.core.h:167
#define __ae2fVK_AnnMlpGoalSz(i_depth, i_outc)
Definition Mlp.core.h:151
VkMappedMemoryRange ae2fVK_AnnMlpMapRangedGeneric_t
Definition Mlp.core.h:118
#define __ae2fVK_AnnMlpMdlOff(...)
Definition Mlp.core.h:125
#define __ae2fVK_AnnMlpOutStreamSz(i_depth, i_outc)
Definition Mlp.core.h:127
#define __ae2fVK_AnnMlpWeightOff(i_depth, i_outc)
Definition Mlp.core.h:136
#define __ae2fVK_AnnMlpMdlSz(i_depth,...)
Definition Mlp.core.h:122
#define __ae2fVK_AnnMlpGoalOff(i_depth, i_outc)
Definition Mlp.core.h:154
ae2fVK_AnnSlpDescPoolCmdMk_t ae2fVK_AnnMlpDescPoolCmdMk_t
Definition Mlp.core.h:119
#define __ae2fVK_AnnMlpOutStreamOff(i_depth, i_outc)
Definition Mlp.core.h:130
#define __ae2fVK_AnnMlpWeightSz(i_depth, i_outc)
Definition Mlp.core.h:133
#define __ae2fVK_AnnMlpBiasSz(i_depth, i_outc)
Definition Mlp.core.h:139
#define __ae2fVK_AnnMlpGlobMemSz(i_depth, i_outc)
Definition Mlp.core.h:157
#define __ae2fVK_AnnMlpDeltaStreamOff(i_depth, i_outc)
Definition Mlp.core.h:148
#define __ae2fVK_AnnSlpGoalSz(i_inp, i_out)
Definition Slp.core.h:172
ae2fVK_eAnnSlpDescLayouts
Definition Slp.core.h:47
@ ae2fVK_eAnnSlpDescLayouts_kPredict
Definition Slp.core.h:48
@ ae2fVK_eAnnSlpDescLayouts_LEN
Definition Slp.core.h:50
@ ae2fVK_eAnnSlpDescLayouts_kTrain
Definition Slp.core.h:49
#define __ae2fVK_AnnSlpBiasOff(i_inp, i_out)
Definition Slp.core.h:175
#define __ae2fVK_AnnSlpGoalOff(i_inp, i_out)
Definition Slp.core.h:179
#define __ae2fVK_AnnSlpOutOff(i_inp, i_out)
Definition Slp.core.h:177
#define __ae2fVK_AnnSlpInpSz(i_inp,...)
Definition Slp.core.h:169
VkMappedMemoryRange ae2fVK_AnnSlpMapRangedGeneric_t
Definition Slp.core.h:152
#define __ae2fVK_AnnSlpBiasSz(i_inp, i_out)
Definition Slp.core.h:168
#define __ae2fVK_AnnSlpWeightSz(i_inp, i_out)
Definition Slp.core.h:167
#define __ae2fVK_AnnSlpInpOff(i_inp, i_out)
Definition Slp.core.h:176
ae2fVK_eAnnSlpPipeLayouts
Definition Slp.core.h:40
@ ae2fVK_eAnnSlpPipeLayouts_LEN
Definition Slp.core.h:44
@ ae2fVK_eAnnSlpPipeLayouts_kTrain
Definition Slp.core.h:42
@ ae2fVK_eAnnSlpPipeLayouts_kPredict
Definition Slp.core.h:41
@ ae2fVK_eAnnSlpPipeLayouts_kFit
Definition Slp.core.h:43
#define __ae2fVK_AnnSlpDeltaSz(i_inp, i_out)
Definition Slp.core.h:171
#define __ae2fVK_AnnSlpWeightOff(i_inp, i_out)
Definition Slp.core.h:174
ae2fVK_eAnnSlpDescPools
Definition Slp.core.h:34
@ ae2fVK_eAnnSlpDescPools_kPredict
Definition Slp.core.h:35
@ ae2fVK_eAnnSlpDescPools_kTrain
Definition Slp.core.h:36
@ ae2fVK_eAnnSlpDescPools_LEN
Definition Slp.core.h:37
#define __ae2fVK_AnnSlpGlobSz(i_inp, i_out)
Definition Slp.core.h:181
#define __ae2fVK_AnnSlpOutSz(i_inp, i_out)
Definition Slp.core.h:170
VkMappedMemoryRange ae2fVK_AnnSlpUnMap_t
Definition Slp.core.h:152
char STATIC_ASSERT_ae2fVK_AnnSlpMkU2_vkdescsetlayoutbind_sz[sizeof(ae2fVK_AnnSlpMkU2S0_t)==sizeof(VkDescriptorSetLayoutBinding) *2 ? 1 :-1]
Definition Slp.core.h:117
ae2fVK_eAnnSlpPipes
Definition Slp.core.h:24
@ ae2fVK_eAnnSlpPipes_kFit
Definition Slp.core.h:28
@ ae2fVK_eAnnSlpPipes_kTrain
Definition Slp.core.h:27
@ ae2fVK_eAnnSlpPipes_kPredict
Definition Slp.core.h:25
@ ae2fVK_eAnnSlpPipes_LEN
This is the end of the value, which typically means the count of actual kernel used.
Definition Slp.core.h:31
@ ae2fVK_eAnnSlpPipes_kFollow
Definition Slp.core.h:26
#define __ae2fVK_AnnSlpDeltaOff(i_inp, i_out)
Definition Slp.core.h:178
#define ae2f_MAC_BUILD
Definition Util.h:4
#define ae2fVK_AnnMlpSHADER
#define __ae2fVK_AnnSlpDescPoolMk_imp(v_descpool, r_pool, r_reterr, iv_slp, i_vkdescpoolcreatflags, i_vkmaxdescsets)
#define __ae2fVK_AnnSlpDescPoolCmdClean_imp(iv_slp, i_pool, i_cmd)
#define __ae2fVK_AnnSlpDescPoolCmdMk_imp(COMMANDONRECORDING, v_cmdmk, r_cmd, iv_slp, i_pool, iv_err, i_desccount, i_offglob, i_szglob, i_offloc, i_szloc, i_desclayout, i_pipe, i_pipelayout, i_vkcmdbuf)
#define __ae2fVK_AnnSlpDescPoolClean_imp(i_slp, i_pool)
#define ae2fVK_AnnSlpSHADER
#define ae2f_errGlob_OK
The Operation you've wanted went successful.
Definition errGlob.h:23
#define ae2f_errGlob_ALLOC_FAILED
stdlib allocating functions (malloc, calloc, realloc) has been failed.
Definition errGlob.h:40
#define ae2f_errGlob_NFOUND
Found some errors, but not by parameters. The operation has failed.
Definition errGlob.h:50
#define ae2f_errGlob_WRONG_OPERATION
Found that parameter sent by programmer is invalid. The operation may have been ceased while the midd...
Definition errGlob.h:45
uint8_t ae2f_err_t
Informs that this number represents the error.
Definition errGlob.h:19
#define ae2f_errGlob_PTR_IS_NULL
Failed to refer the pointer either l-value inside the function.
Definition errGlob.h:32
#define ae2f_errGlob_IMP_NOT_FOUND
Failed to find the function on preprocessor which is callable for some reason No operation has beed d...
Definition errGlob.h:28
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnMlpDescPoolCmd
Definition Mlp.h:28
ae2fVK_AnnSlpCreatDescPool_t ae2fVK_AnnMlpCreatDescPool_t
Definition Mlp.h:30
ae2fVK_AnnSlpDescPool ae2fVK_AnnMlpDescPool
Definition Mlp.h:27
#define __ae2fVK_AnnSlpMkCLSPVVerbose_imp(r_handle, ir_err, i_first, i_second, i_third)
Definition Slp.auto.h:760
#define __ae2fVK_AnnSlpMapRangedGeneric_imp(T, v_vkmapmemrange, iv_slp, r_err, r_ptr, i_off, i_sz)
Definition Slp.auto.h:834
#define __ae2fVK_AnnSlpMkFndMemProp_imp(CMDONERR, r_memtypeidx, v_errbit, memtypeidx_invalid_minus_one, vkpropflag_req, vkphydevmemprops)
Definition Slp.auto.h:35
#define __ae2fVK_AnnSlpMkCreatBuf(CMDONERR, sz, r_vkres, r_vkbuf, v_vkbufcreatinfo, v_reterr, vkbufuseflags, vksharemode, vkdev, vkalloccalls)
Definition Slp.auto.h:66
#define __ae2fVK_AnnSlpMkLoadPipeCreat_imp(CMDONERR, r_reterr, pipecreat, pipelayout, shadermod, entrypoint, idx_pipe, idx_pipelayout)
Definition Slp.auto.h:209
#define __ae2fVK_AnnSlpCreatDescPoolVerbose_imp(v_vkdescpoolcreatinfo, v_vkdescpoolsz, r_vkdescpool, r_reterr, r_vkres, i_vkdev, i_vkptrAlloc, i_vkdescpoolcreatflags, i_vkdesctype, i_vkdescpoolsz_count, i_vkmaxdescsets)
Definition Slp.auto.h:322
#define __ae2fVK_AnnSlpMkOnePipeLayoutVerbose_imp(CMDONERR, v_vkpushconstrange, v_vkpipelayoutcreatinfo, r_reterr, iv_slpptr, idx, szrequired, vkalloccalls, vkdev)
Definition Slp.auto.h:248
#define __ae2fVK_AnnSlpUnMap_imp(slp)
Definition Slp.auto.h:895
#define __ae2fVK_AnnSlpUnMapRanged_imp(v_out, vi_slp, i_off, i_sz)
Definition Slp.auto.h:907
#define __ae2fVK_AnnSlpMkAllocVKMem_imp(CMDONERR, sz, r_vkres, r_vkbuf, r_vkdevmem, v_errbit, v_vkbufcreatinfo, v_memallocinfo, vkbufuseflags, vksharemode, vkdev, v_vkmemreq, vkalloccalls, v_memtypeidx, memtypeidx_invalid_minus_one, vkpropflag_req, vkphydevmemprops)
Definition Slp.auto.h:110
#define __ae2f_MACRO_GENERATED
Definition Mlp.auto.h:2
#define __ae2f_AnnMlpMk_imp(...)
Definition Mlp.auto.h:315
#define __ae2f_AnnSlpMk_imp(...)
Definition Slp.auto.h:232
#define ae2f_MAC()
delta to delta
Definition mac.h:4
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const iv_bias_opt
Definition Mlp.def.cc:49
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t ae2f_float_t const VkDevice const VkPhysicalDeviceMemoryProperties ae2f_opt VkAllocationCallbacks *const iv_vkalloccalls
Definition Mlp.def.cc:71
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t ae2f_float_t const VkDevice const VkPhysicalDeviceMemoryProperties i_vkmemprops
Definition Mlp.def.cc:69
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t i_extra
Definition Mlp.def.cc:58
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t i_learningrate
Definition Mlp.def.cc:65
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const iv_outstream_opt
Definition Mlp.def.cc:50
ae2fVK_AnnMlp ae2f_err_t ae2f_float_t ae2f_float_t * r_ptrbias
Definition Mlp.def.cc:652
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const iv_deltastream_opt
Definition Mlp.def.cc:51
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t i_len_count
Definition Mlp.def.cc:53
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const i_actderiv
Definition Mlp.def.cc:61
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t ae2f_float_t i_learningrate_bias
Definition Mlp.def.cc:66
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t ae2f_float_t const VkDevice const VkPhysicalDeviceMemoryProperties ae2f_opt VkAllocationCallbacks *const ae2f_opt const char *const ae2f_opt const char *const i_vkcldefinition
Definition Mlp.def.cc:76
ae2f_opt ae2f_float_t *const iv_weight_opt
Definition Mlp.def.cc:48
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t ae2f_float_t const VkDevice i_vkdev
Definition Mlp.def.cc:68
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t i_prm_offset
Definition Mlp.def.cc:57
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const i_act
Definition Mlp.def.cc:60
ae2fVK_AnnMlp iv_mlp
Definition Mlp.def.cc:585
ae2fVK_AnnMlp ae2f_err_t ae2f_float_t * r_ptr
Definition Mlp.def.cc:589
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const ae2f_float_t ae2f_float_t const VkDevice const VkPhysicalDeviceMemoryProperties ae2f_opt VkAllocationCallbacks *const ae2f_opt const char *const i_vkcldeclaration
Definition Mlp.def.cc:73
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const i_len_swap
Definition Mlp.def.cc:55
ae2fVK_AnnMlp ae2f_err_t r_err
Definition Mlp.def.cc:586
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const i_len
Definition Mlp.def.cc:54
ae2fVK_AnnMlp ae2f_err_t ae2f_float_t * r_ptrweight
Definition Mlp.def.cc:649
ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const ae2f_opt ae2f_float_t *const const uint32_t const size_t *const ae2f_opt size_t *const ae2f_opt const size_t ae2f_opt const size_t ae2f_opt ae2f_AnnAct_t **const ae2f_opt ae2f_AnnAct_t **const ae2f_AnnLoss_t *const i_lossderiv
Definition Mlp.def.cc:63