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