ae2f_docs
SlpPool.def.cc
Go to the documentation of this file.
1#ifndef ae2fVK_AnnSlpPool_h
2
3#if __ae2f_MACRO_GENERATED
4#define ae2fVK_AnnSlpPool_h
5#endif
6
7#if !ae2f_MAC_BUILD || !__ae2f_MACRO_GENERATED
8#include <ae2f/Macro.h>
9#include <assert.h>
10#endif
11
12#include <ae2fVK/Ann/Slp.h>
13#include <ae2fVK/Ann/SlpPool.auto.h>
14
15/**
16 * @param
17 * i_vkmaxdescsets Note that would be the max possible amount for
18 * making ae2fVK_AnnSlpDescPoolCmd.
19 *
20 * */
21ae2f_MAC() _ae2fVK_AnnSlpDescPoolMkGeneric_imp(
22 ae2fVK_AnnSlpCreatDescPool_t v_descpool,
23 ae2fVK_AnnSlpDescPool r_pool,
25
26 ae2fVK_AnnSlp iv_slp,
27
28 const VkDescriptorPoolCreateFlagBits i_vkdescpoolcreatflags,
29 const VkDescriptorType i_vkdesctype,
30 const uint32_t i_vkdescpoolsz_count,
31 const uint32_t i_vkmaxdescsets
32 )
33{
34 (r_pool).m_vkdescpool = 0;
36
38 (v_descpool).m_U0.m_vkdescpoolcreatinfo
39 , (v_descpool).m_U0.m_vkdescpoolsz
40 , (r_pool).m_vkdescpool
41 , r_reterr
42 , (iv_slp).m_vkres
43 , (iv_slp).m_vkdev
44 , (iv_slp).m_vkalloccalls
49 );
50
51 if((iv_slp).m_vkres != VK_SUCCESS) {
53 assert(!"__ae2fVK_AnnSlpCreatDescPoolVerbose_imp has failed (Vulkan)");
54 }
55
57 assert(!"__ae2fVK_AnnSlpCreatDescPoolVerbose_imp has failed.");
58
59 unless((r_pool).m_vkdescpool) {
60 assert(!"__ae2fVK_AnnSlpCreatDescPoolVerbose_imp went null.");
62 }
63}
64
65ae2f_MAC() _ae2fVK_AnnSlpDescPoolMk_imp(
66 ae2fVK_AnnSlpCreatDescPool_t v_descpool,
67 ae2fVK_AnnSlpDescPool r_pool,
68 ae2f_err_t r_reterr,
69
70 ae2fVK_AnnSlp iv_slp,
71
72 const VkDescriptorPoolCreateFlagBits i_vkdescpoolcreatflags,
73 const uint32_t i_vkmaxdescsets
74 )
75{
77 v_descpool
78 , r_pool
79 , r_reterr
80 , iv_slp
81 , i_vkdescpoolcreatflags
82 , VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
83 , 2, i_vkmaxdescsets
84 );
85}
86
87
88ae2f_MAC() _ae2fVK_AnnSlpDescPoolClean_imp(
89 const ae2fVK_AnnSlp i_slp,
90 const ae2fVK_AnnSlpDescPool i_pool
91 )
92{
93 vkDestroyDescriptorPool(
94 (i_slp).m_vkdev
95 , (i_pool).m_vkdescpool
96 , (i_slp).m_vkalloccalls
97 );
98}
99
101#define COMMANDONRECORDING
102#endif
103
104/**
105 * @param i_desccount Descriptor Count or Kernel parameter(argument) count.
106 * */
107ae2f_MAC(COMMANDONRECORDING,) _ae2fVK_AnnSlpDescPoolCmdMk_imp(
108 ae2fVK_AnnSlpDescPoolCmdMk_t v_cmdmk,
109
110 ae2fVK_AnnSlpDescPoolCmd r_cmd,
111
112 ae2fVK_AnnSlp iv_slp,
113 const ae2fVK_AnnSlpDescPool i_pool,
114
116
117 const uint32_t i_desccount,
118
119 const VkDeviceSize i_offglob,
120 const VkDeviceSize i_szglob,
121
122 const VkDeviceSize i_offloc,
123 const VkDeviceSize i_szloc,
124 const ae2fVK_eAnnSlpDescLayouts i_desclayout,
125 const ae2fVK_eAnnSlpPipes i_pipe,
126 const ae2fVK_eAnnSlpPipeLayouts i_pipelayout,
127
128
129 const VkCommandBuffer i_vkcmdbuf
130 )
131{
132 assert((iv_slp).m_vkres == VK_SUCCESS && "(iv_slp)'s state is bad.");
133 assert((iv_err) == ae2f_errGlob_OK && "r_err's state is bad.");
134
135
136 (v_cmdmk).m_u0.m_vkdescsetallocinfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
137
138 (v_cmdmk).m_u0.m_vkdescsetallocinfo.descriptorPool
139 = (i_pool).m_vkdescpool;
140
141 (v_cmdmk).m_u0.m_vkdescsetallocinfo.descriptorSetCount
142 = 1;
143
144 (v_cmdmk).m_u0.m_vkdescsetallocinfo.pSetLayouts
145 = &(iv_slp).m_vkdescsetlayout[i_desclayout];
146
147 (v_cmdmk).m_u0.m_vkdescsetallocinfo.pNext = NULL;
148
149 assert((iv_slp).m_vkdev);
150 assert((v_cmdmk).m_u0.m_vkdescsetallocinfo.pSetLayouts);
151 assert((v_cmdmk).m_u0.m_vkdescsetallocinfo.pSetLayouts[i_desclayout]);
152 assert((v_cmdmk).m_u0.m_vkdescsetallocinfo.descriptorPool);
153
154 do {
155 if (((iv_slp).m_vkres = vkAllocateDescriptorSets(
156 (iv_slp).m_vkdev
157 , &(v_cmdmk).m_u0.m_vkdescsetallocinfo
158 , &(r_cmd).m_vkdescset
159 )) != VK_SUCCESS)
160 {
161 assert((r_cmd).m_vkdescset);
162 assert(!"vkAllocateDescriptorSets has failed.");
163 break;
164 }
165
166 unless((r_cmd).m_vkdescset) {
167 assert(!"vkAllocateDescriptorSets went NULL.");
169 break;
170 }
171
172 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_buf[0]
173 .buffer = (iv_slp).m_vkglobbuf;
174
175 /** Offset: is not required. */
176 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_buf[0]
177 .offset = i_offglob;
178
179 /** Range: Input Output Weight Bias */
180 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_buf[0]
181 .range = i_szglob;
182
183 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_buf[1]
184 .buffer = (iv_slp).m_vklocbuf;
185
186 /** Offset: is not required. */
187 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_buf[1]
188 .offset = i_offloc;
189
190 /** Range: Input Output Weight Bias */
191 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_buf[1]
192 .range = i_szloc;
193
194
195 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_wrset
196 .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
197
198 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_wrset
199 .dstSet = (r_cmd).m_vkdescset;
200
201 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_wrset
202 .dstBinding = 0;
203 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_wrset
204 .dstArrayElement = 0;
205
206 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_wrset
207 .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
208
209 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_wrset
210 .descriptorCount = (i_desccount);
211
212 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_wrset
213 .pBufferInfo = (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_buf;
214
215 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_wrset.pNext = NULL;
216 (v_cmdmk).m_u0.m_vkdescwrdescinfo.m_wrset.pImageInfo = NULL;
217
218 vkUpdateDescriptorSets(
219 iv_slp.m_vkdev
220 , 1
221 , &(v_cmdmk).m_u0.m_vkdescwrdescinfo.m_wrset
222 , 0
223 , NULL
224 );
225
226 (v_cmdmk).m_u0.m_vkcmdbufbeginfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
227 (v_cmdmk).m_u0.m_vkcmdbufbeginfo.pInheritanceInfo = NULL;
228 (v_cmdmk).m_u0.m_vkcmdbufbeginfo.flags = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
229 (v_cmdmk).m_u0.m_vkcmdbufbeginfo.pNext = NULL;
230
231 if(((iv_slp).m_vkres = vkBeginCommandBuffer(
233 , &(v_cmdmk).m_u0.m_vkcmdbufbeginfo
234 )) != VK_SUCCESS)
235 {
236 assert(!"vkBeginCommandBuffer has failed.");
237 break;
238 }
239
240 vkCmdBindPipeline(
242 , VK_PIPELINE_BIND_POINT_COMPUTE
243 , (iv_slp).m_vkpipeline[i_pipe]
244 );
245
246 vkCmdBindDescriptorSets(
248 , VK_PIPELINE_BIND_POINT_COMPUTE
249 , (iv_slp).m_vkpipelayout[i_pipelayout]
250 , 0
251 , 1
252 , &(r_cmd).m_vkdescset
253 , 0
254 , NULL
255 );
256
258
259 if(((iv_slp).m_vkres = vkEndCommandBuffer(i_vkcmdbuf)) != VK_SUCCESS) {
260 assert(!"vkEndCommandBuffer has failed.");
261 break;
262 }
263 } while(0);
264
265 if(((iv_slp).m_vkres != VK_SUCCESS))
267}
268ae2f_MAC() _ae2fVK_AnnSlpDescPoolCmdClean_imp(
269 ae2fVK_AnnSlp iv_slp,
270 const ae2fVK_AnnSlpDescPool i_pool,
271 const ae2fVK_AnnSlpDescPoolCmd i_cmd
272 )
273{
274 if(((iv_slp).m_vkres = vkFreeDescriptorSets(
275 (iv_slp).m_vkdev
276 , (i_pool).m_vkdescpool
277 , 1
278 , &(i_cmd).m_vkdescset
279 )) != VK_SUCCESS)
280 assert(!"vkFreeDescriptorSets has failed.");
281}
282
283ae2f_MAC() _ae2fVK_AnnSlpDescPoolCmdMkPredict_imp(
284 ae2fVK_AnnSlpDescPoolCmdMk_t v_cmdmk,
285
286 ae2fVK_AnnSlp iv_slp,
287 ae2f_err_t iv_err,
288 const ae2fVK_AnnSlpDescPool i_pool,
289
290 ae2fVK_AnnSlpDescPoolCmd r_cmd,
291
292 const VkCommandBuffer i_vkcmdbuf
293 )
294{
297 {
298 vkCmdPushConstants(
299 i_vkcmdbuf
300 , (iv_slp).m_vkpipelayout[ae2fVK_eAnnSlpPipeLayouts_kPredict]
301 , VK_SHADER_STAGE_COMPUTE_BIT
302 , 0
303 , sizeof(uint32_t)
304 , &(iv_slp).m_slp.m_Slp[0].m_inc
305 );
306
307 vkCmdDispatch(
308 (i_vkcmdbuf)
309 , (iv_slp).m_slp.m_Slp[0].m_outc
310 , (iv_slp).m_slp.m_Slp[0].m_inc
311 , 1
312 );
313 }
314 )
315 , v_cmdmk
316 , r_cmd
317 , iv_slp
318 , i_pool
319 , iv_err
320 , 1
321 , 0
322 , __ae2fVK_AnnSlpOutOff((iv_slp).m_slp.m_Slp[0].m_inc, (iv_slp).m_slp.m_Slp[0].m_outc)
323 + __ae2fVK_AnnSlpOutSz((iv_slp).m_slp.m_Slp[0].m_inc, (iv_slp).m_slp.m_Slp[0].m_outc)
324
325 , 0
326 , 0
327
328 , ae2fVK_eAnnSlpDescLayouts_kPredict /** i_desclayout */
329 , ae2fVK_eAnnSlpPipes_kPredict /** i_pipe */
330 , ae2fVK_eAnnSlpPipeLayouts_kPredict /** i_pipelayout */
331
332 , i_vkcmdbuf
333 );
334}
335
336ae2f_MAC() _ae2fVK_AnnSlpDescPoolCmdMkTrain_imp(
337 ae2fVK_AnnSlpDescPoolCmdMk_t v_cmdmk,
338
339 ae2fVK_AnnSlp iv_slp,
340 ae2f_err_t iv_err,
341 const ae2fVK_AnnSlpDescPool i_pool,
342
343 ae2fVK_AnnSlpDescPoolCmd r_cmd,
344
345 const VkCommandBuffer i_vkcmdbuf
346 )
347{
350 {
351 vkCmdPushConstants(
352 i_vkcmdbuf
353 , (iv_slp).m_vkpipelayout[ae2fVK_eAnnSlpPipeLayouts_kTrain]
354 , VK_SHADER_STAGE_COMPUTE_BIT
355 , 0
356 , sizeof(ae2f_float_t)
357 , &(iv_slp).m_slp.m_learningrate
358 );
359
360 vkCmdPushConstants(
361 i_vkcmdbuf
362 , (iv_slp).m_vkpipelayout[ae2fVK_eAnnSlpPipeLayouts_kTrain]
363 , VK_SHADER_STAGE_COMPUTE_BIT
364 , sizeof(ae2f_float_t)
365 , sizeof(ae2f_float_t)
366 , &(iv_slp).m_slp.m_learningrate_bias
367 );
368
369 vkCmdDispatch(
370 (i_vkcmdbuf)
371 , (iv_slp).m_slp.m_Slp[0].m_outc
372 , (iv_slp).m_slp.m_Slp[0].m_inc
373 , 1
374 );
375 }
376 )
377 , v_cmdmk
378 , r_cmd
379 , iv_slp
380 , i_pool
381 , iv_err
382 , 1
383 , 0
384 , __ae2fVK_AnnSlpGlobSz((iv_slp).m_slp.m_Slp[0].m_inc, (iv_slp).m_slp.m_Slp[0].m_outc)
385
386 , 0
387 , sizeof(ae2f_float_t) * ((iv_slp).m_slp.m_Slp[0].m_outc)
388
389 , ae2fVK_eAnnSlpDescLayouts_kTrain /** i_desclayout */
390 , ae2fVK_eAnnSlpPipes_kTrain /** i_pipe */
391 , ae2fVK_eAnnSlpPipeLayouts_kTrain /** i_pipelayout */
392
393 , i_vkcmdbuf
394 );
395}
396
397#endif
#define ae2f_CastMerge(...)
simply merge all text inside the round bracket, counting them as a single text block.
Definition Cast.h:25
#define unless(...)
Invokes when condition is false.
Definition Cast.h:103
ae2f_float ae2f_float_t
Definition Float.h:38
@ ae2fVK_eAnnSlpDescLayouts_kPredict
Definition Slp.core.h:48
@ ae2fVK_eAnnSlpDescLayouts_kTrain
Definition Slp.core.h:49
#define __ae2fVK_AnnSlpOutOff(i_inp, i_out)
Definition Slp.core.h:177
@ ae2fVK_eAnnSlpPipeLayouts_kTrain
Definition Slp.core.h:42
@ ae2fVK_eAnnSlpPipeLayouts_kPredict
Definition Slp.core.h:41
#define __ae2fVK_AnnSlpGlobSz(i_inp, i_out)
Definition Slp.core.h:181
#define __ae2fVK_AnnSlpOutSz(i_inp, i_out)
Definition Slp.core.h:170
@ ae2fVK_eAnnSlpPipes_kTrain
Definition Slp.core.h:27
@ ae2fVK_eAnnSlpPipes_kPredict
Definition Slp.core.h:25
#define __ae2fVK_AnnSlpDescPoolMkGeneric_imp(v_descpool, r_pool, r_reterr, iv_slp, i_vkdescpoolcreatflags, i_vkdesctype, i_vkdescpoolsz_count, i_vkmaxdescsets)
#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)
ae2fVK_AnnSlpDescPoolCmd r_cmd
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnSlp const ae2fVK_AnnSlpDescPool ae2f_err_t iv_err
ae2fVK_AnnSlpDescPool ae2f_err_t ae2fVK_AnnSlp const VkDescriptorPoolCreateFlagBits const VkDescriptorType i_vkdesctype
ae2fVK_AnnSlpDescPool ae2f_err_t ae2fVK_AnnSlp const VkDescriptorPoolCreateFlagBits const VkDescriptorType const uint32_t i_vkdescpoolsz_count
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnSlp const ae2fVK_AnnSlpDescPool ae2f_err_t const uint32_t const VkDeviceSize const VkDeviceSize const VkDeviceSize const VkDeviceSize const ae2fVK_eAnnSlpDescLayouts i_desclayout
const ae2fVK_AnnSlpDescPool i_pool
const ae2fVK_AnnSlpDescPool const ae2fVK_AnnSlpDescPoolCmd i_cmd
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnSlp const ae2fVK_AnnSlpDescPool ae2f_err_t const uint32_t const VkDeviceSize const VkDeviceSize const VkDeviceSize const VkDeviceSize const ae2fVK_eAnnSlpDescLayouts const ae2fVK_eAnnSlpPipes i_pipe
ae2fVK_AnnSlpDescPool ae2f_err_t ae2fVK_AnnSlp const VkDescriptorPoolCreateFlagBits i_vkdescpoolcreatflags
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnSlp const ae2fVK_AnnSlpDescPool ae2f_err_t const uint32_t const VkDeviceSize const VkDeviceSize i_szglob
ae2fVK_AnnSlpDescPool ae2f_err_t ae2fVK_AnnSlp iv_slp
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnSlp const ae2fVK_AnnSlpDescPool ae2f_err_t const uint32_t const VkDeviceSize const VkDeviceSize const VkDeviceSize const VkDeviceSize const ae2fVK_eAnnSlpDescLayouts const ae2fVK_eAnnSlpPipes const ae2fVK_eAnnSlpPipeLayouts i_pipelayout
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnSlp const ae2fVK_AnnSlpDescPool ae2f_err_t const uint32_t const VkDeviceSize const VkDeviceSize const VkDeviceSize const VkDeviceSize i_szloc
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnSlp const ae2fVK_AnnSlpDescPool ae2f_err_t const uint32_t const VkDeviceSize i_offglob
ae2fVK_AnnSlpDescPool r_pool
ae2fVK_AnnSlpDescPool ae2f_err_t r_reterr
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnSlp const ae2fVK_AnnSlpDescPool ae2f_err_t const uint32_t const VkDeviceSize const VkDeviceSize const VkDeviceSize const VkDeviceSize const ae2fVK_eAnnSlpDescLayouts const ae2fVK_eAnnSlpPipes const ae2fVK_eAnnSlpPipeLayouts const VkCommandBuffer i_vkcmdbuf
ae2fVK_AnnSlpDescPool ae2f_err_t ae2fVK_AnnSlp const VkDescriptorPoolCreateFlagBits const VkDescriptorType const uint32_t const uint32_t i_vkmaxdescsets
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnSlp const ae2fVK_AnnSlpDescPool ae2f_err_t const uint32_t i_desccount
ae2fVK_AnnSlpDescPoolCmd ae2fVK_AnnSlp const ae2fVK_AnnSlpDescPool ae2f_err_t const uint32_t const VkDeviceSize const VkDeviceSize const VkDeviceSize i_offloc
#define COMMANDONRECORDING
#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
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 __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 __ae2f_MACRO_GENERATED
Definition Mlp.auto.h:2
#define ae2f_MAC()
delta to delta
Definition mac.h:4