4#include <glslang/Include/glslang_c_interface.h>
5#include <glslang/Include/glslang_c_shader_types.h>
6#include <glslang/Public/resource_limits_c.h>
10#include <ae2f/errGlob.h>
12#include <ae2f/Macro.h>
15ae2f_structdef(
struct, ae2fVK_Spvc) {
16 glslang_shader_t*
restrict m_shader;
17 glslang_program_t*
restrict m_programme;
18 unsigned int*
restrict m_spirv_words;
24ae2f_extern ae2f_SHAREDCALL
void ae2fVK_SpvcMk(
26 , ae2f_FREE(ae2fVK_SpvcDel, __ae2fVK_SpvcDel)
27 ae2fVK_Spvc*
restrict const ret
28 ,
const glslang_input_t*
const restrict inp
31ae2f_extern ae2f_SHAREDCALL
void ae2fVK_SpvcDel(
32 ae2fVK_Spvc*
restrict const block
37#define ae2fVK_SpvcMk __ae2fVK_SpvcMk_C
38#define ae2fVK_SpvcDel __ae2fVK_SpvcDel_C
50#include <ae2fVK/Spvc.h>
51#include <ae2f/Macro.h>
60 ,
const glslang_input_t*
const restrict inp
66 (v_ret).m_shader = glslang_shader_create(inp);
67 (v_ret).m_programme = glslang_program_create();
69 assert(((v_ret).m_shader && (v_ret).m_programme) &&
"initiating has failed.");
70 if(!(v_ret).m_shader) {
74 (v_ret_isgood) = glslang_shader_preprocess((v_ret).m_shader, inp);
75 assert((v_ret_isgood) &&
"GLSL preprocessing failed.");
80 (v_ret_isgood) = glslang_shader_parse((v_ret).m_shader, inp);
81 assert((v_ret_isgood) &&
"GLSL parsing failed.");
86 glslang_program_add_shader(
91 (v_ret_isgood) = glslang_program_link(
96 (v_ret_isgood) = glslang_shader_parse((v_ret).m_shader, inp);
97 assert((v_ret_isgood) &&
"GLSL linking failed.");
102 glslang_program_SPIRV_generate((v_ret).m_programme, (inp)->stage);
103 (v_ret).m_spirv_words = glslang_program_SPIRV_get_ptr((v_ret).m_programme);
104 (v_ret).m_spirv_sz = glslang_program_SPIRV_get_size((v_ret).m_programme);
106 assert((v_ret).m_spirv_words);
107 assert((v_ret).m_spirv_sz);
111#define __ae2fVK_SpvcMk_imp(v_ret_isgood, v_ret, inp)
112 __ae2fVK_SpvcMkWithMsg_imp(v_ret_isgood, v_ret, inp, GLSLANG_MSG_VULKAN_RULES_BIT | GLSLANG_MSG_SPV_RULES_BIT)
117 , ae2fVK_Spvc*
restrict const ret
118 ,
const glslang_input_t*
const restrict inp
122 if((reterr) && *(reterr))
130 v_isgood || (*(reterr) |= ae2f_errGlob_ALLOC_FAILED);
134#define __ae2fVK_SpvcMk_C __ae2fVK_SpvcMk
136ae2f_MAC() _ae2fVK_SpvcDel_imp(ae2fVK_Spvc v_block) {
137 if((v_block).m_programme)
138 glslang_program_delete((v_block).m_programme);
139 if((v_block).m_shader)
140 glslang_shader_delete((v_block).m_shader);
144ae2f_MAC() _ae2fVK_SpvcDel(ae2fVK_Spvc*
restrict const block)
146 __ae2fVK_SpvcDel_imp(*(block));
147 (block)->m_programme = 0;
148 (block)->m_shader = 0;
149 (block)->m_spirv_words = 0;
150 (block)->m_spirv_sz = 0;
153#define __ae2fVK_SpvcDel_C __ae2fVK_SpvcDel
#define __ae2f_MACRO_GENERATED
#define ae2f_MAC(a)
A hint for creating a macro from void-returning function.
#define __ae2fVK_SpvcMk_imp(v_ret_isgood, v_ret, inp)
@ ae2f_errGlob_PTR_IS_NULL
Null Pointer Exception.
uint_least8_t ae2f_err_t
Least integer type to store the error value.