Basilisk CFD
Adaptive Cartesian mesh PDE framework
Loading...
Searching...
No Matches
gpu.h
Go to the documentation of this file.
1/** @file gpu.h
2 */
3#include <grid/gpu/glad.h>
4#include <GLFW/glfw3.h>
5#if DEBUG_OPENGL
6#include <grid/gpu/debug.h>
7#endif
8
9#pragma autolink -L$BASILISK/grid/gpu -lglfw -lgpu -ldl
10
11static struct {
12 ///// GPU /////
18} GPUContext = {
19 .current_shader = -1,
20};
21
22static void gpu_check_error (const char * stmt, const char * fname, int line)
23{
25 if (err != GL_NO_ERROR) {
26 fprintf (stderr, "%s:%d: error: OpenGl %08x for '%s;'\n",
27 fname, line, err, stmt);
28 abort();
29 }
30}
31
32#ifdef NDEBUG
33// helper macro that checks for GL errors.
34#define GL_C(stmt) do { stmt; } while (0)
35#else
36// helper macro that checks for GL errors.
37#define GL_C(stmt) do { \
38 stmt; \
39 gpu_check_error (#stmt, __FILE__, LINENO); \
40 } while (0)
41#endif
42
43void gpu_free_solver (void)
44{
45 GL_C (glFinish());
48 free (GPUContext.ssbo);
50 GPUContext.window = NULL;
51}
52
54{
55 char * infoLog = NULL;
56 GLint len;
58 if (len > 0) {
60 infoLog = malloc (len);
62 }
63 return infoLog;
64}
65
67{
68 char * infoLog = NULL;
69 GLint len;
71 if (len > 0) {
73 infoLog = malloc (len);
75 }
76 return infoLog;
77}
78
79char * gpu_errors (const char * errors, const char * source, char * fout);
80
82 const GLenum shaderType)
83{
85
89
92 if (compileStatus != GL_TRUE) {
93 char * info = getShaderLogInfo (shader);
94#if PRINTSHADERERROR
96 fputs (info, stderr);
97#endif
100 sysfree (error);
101 free (info);
103 return 0;
104 }
105
106 return shader;
107}
108
109static GLuint loadNormalShader (const char * vsSource, const char * fsShader)
110{
111 GLuint vs = 0;
112 if (vsSource) {
114 if (!vs)
115 return 0;
116 }
118 if (!fs)
119 return 0;
120
122 if (vs)
126
129
130 if (Result == GL_FALSE) {
131 char * info = getProgramLogInfo (shader);
132 fprintf (stderr, "GLSL: could not link shader \n\n%s\n%s\n%s\n",
134 free (info);
136 shader = 0;
137 }
138
139 if (shader) {
140 if (vs)
143 }
144
145 if (vs)
148
149 return shader;
150}
151
152typedef struct {
153 char * s;
154 int index;
155} GLString;
156
158 {"GL_MAX_DRAW_BUFFERS", GL_MAX_DRAW_BUFFERS},
159 {"GL_MAX_VERTEX_UNIFORM_COMPONENTS", GL_MAX_VERTEX_UNIFORM_COMPONENTS},
160 {"GL_MAX_VERTEX_UNIFORM_BLOCKS", GL_MAX_VERTEX_UNIFORM_BLOCKS},
161 {"GL_MAX_VERTEX_OUTPUT_COMPONENTS", GL_MAX_VERTEX_OUTPUT_COMPONENTS},
162 {"GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS", GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS},
163 {"GL_MAX_VERTEX_OUTPUT_COMPONENTS", GL_MAX_VERTEX_OUTPUT_COMPONENTS},
164#if 1
165 {"GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS", GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS},
166 {"GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS", GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS},
167 {"GL_MAX_TESS_CONTROL_INPUT_COMPONENTS", GL_MAX_TESS_CONTROL_INPUT_COMPONENTS},
168 {"GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS", GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS},
169 {"GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS", GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS},
170 {"GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS", GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS},
171 {"GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS", GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS},
172 {"GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS", GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS},
173 {"GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS", GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS},
174 {"GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS", GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS},
175 {"GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS", GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS},
176 {"GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS", GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS},
177#endif
178#if 1
179 {"GL_MAX_COMPUTE_UNIFORM_COMPONENTS", GL_MAX_COMPUTE_UNIFORM_COMPONENTS},
180 {"GL_MAX_COMPUTE_UNIFORM_BLOCKS", GL_MAX_COMPUTE_UNIFORM_BLOCKS},
181 {"GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS", GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS},
182 {"GL_MAX_SHADER_STORAGE_BLOCK_SIZE", GL_MAX_SHADER_STORAGE_BLOCK_SIZE},
183 {"GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS", GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS},
184 {"GL_MAX_TEXTURE_BUFFER_SIZE", GL_MAX_TEXTURE_BUFFER_SIZE},
185#endif
186 {"GL_MAX_GEOMETRY_UNIFORM_COMPONENTS", GL_MAX_GEOMETRY_UNIFORM_COMPONENTS},
187 {"GL_MAX_GEOMETRY_UNIFORM_BLOCKS", GL_MAX_GEOMETRY_UNIFORM_BLOCKS},
188 {"GL_MAX_GEOMETRY_INPUT_COMPONENTS", GL_MAX_GEOMETRY_INPUT_COMPONENTS},
189 {"GL_MAX_GEOMETRY_OUTPUT_COMPONENTS", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS},
190 {"GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS", GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS},
191 {"GL_MAX_GEOMETRY_OUTPUT_COMPONENTS", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS},
192 {"GL_MAX_FRAGMENT_UNIFORM_COMPONENTS", GL_MAX_FRAGMENT_UNIFORM_COMPONENTS},
193 {"GL_MAX_FRAGMENT_UNIFORM_BLOCKS", GL_MAX_FRAGMENT_UNIFORM_BLOCKS},
194 {"GL_MAX_FRAGMENT_INPUT_COMPONENTS", GL_MAX_FRAGMENT_INPUT_COMPONENTS},
195 {"GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS", GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS},
196 {"GL_MAX_FRAGMENT_IMAGE_UNIFORMS", GL_MAX_FRAGMENT_IMAGE_UNIFORMS},
197 {"GL_MAX_IMAGE_UNITS", GL_MAX_IMAGE_UNITS},
198 {NULL}
199};
200
221
222#if TRACE == 3
223# define tracing_foreach(name, file, line) tracing(name, file, line)
224# define end_tracing_foreach(name, file, line) end_tracing(name, file, line)
225#else
226# define tracing_foreach(name, file, line)
227# define end_tracing_foreach(name, file, line)
228#endif
229
231{
232 if (_gpu_done_)
233 _gpu_done_ = false;
234 else {
235 tracing_foreach ("foreach", S__FILE__, S_LINENO);
236 {...}
238 }
239}
240
241typedef struct {
242 coord p, * box, n; // region
243 int level; // level
245
247 External * externals, const char * kernel);
248
250 int _parallel, External * _externals, const char * _kernel)
251{
252 tracing_foreach ("foreach", S__FILE__, S_LINENO);
253 static ForeachData _loop = { .fname = S__FILE__, .line = S_LINENO, .first = 1 };
254 _loop.parallel = _parallel;
255 if (baseblock)
256 for (scalar s = baseblock[0], * i = baseblock; s.i >= 0; i++, s = *i) {
257 _attribute[s.i].stencil.io = 0;
258 _attribute[s.i].stencil.width = 0;
259 }
260 int ig = 0, jg = 0, kg = 0; NOT_UNUSED(ig); NOT_UNUSED(jg); NOT_UNUSED(kg);
261 Point point = {0}; NOT_UNUSED (point);
263
264 {...}
265
266#if PRINTIO
267 if (baseblock) {
268 fprintf (stderr, "%s:%d:", _loop.fname, _loop.line);
269 for (scalar s = baseblock[0], * i = baseblock; s.i >= 0; i++, s = *i)
270 if ((_attribute[s.i].stencil.io & s_input) || (_attribute[s.i].stencil.io & s_output))
271 fprintf (stderr, " %s:%d:%c:%d", _attribute[s.i].name, s.i,
272 (_attribute[s.i].stencil.io & s_input) &&
273 (_attribute[s.i].stencil.io & s_output) ? 'a' :
274 (_attribute[s.i].stencil.io & s_input) ? 'r' : 'w',
275 _attribute[s.i].stencil.width);
276 fprintf (stderr, "\n");
277 }
278#endif // PRINTIO
279 bool _first = _loop.first;
280 _loop.first = 0; // to avoid warnings in check_stencil
282 _loop.first = _first;
284 _loop.first = 0;
286}
287
294
303
304macro2 foreach_point_stencil (double _xp, double _yp, double _zp,
305 char flags, Reduce reductions,
306 int _parallel, External * _externals, const char * _kernel)
307{
309 _region.p = (coord){ _xp, _yp, _zp };
310 _region.n = (coord){ 1, 1 };
311 {...}
312 }
313}
314
324
327 const char * _kernel)
328{
330 _loop.vertex = true;
331 {...}
332 }
333}
334
342
350
358
361 if (glFinish) glFinish();
363 } while(0) @
365 if (glFinish) glFinish();
367 } while(0) @
368@endif
369
370void realloc_ssbo()
371{
372 if (!datasize)
373 return;
374
377#if 1
378 GPUContext.max_ssbo_size = 128*(max_ssbo_size/128);
379#else // for testing multi SSBOs
380 GPUContext.max_ssbo_size = 128*(5*field_size()/2*sizeof(float)/128);
381#endif
382
383 size_t totalsize = field_size()*datasize;
384 int nssbo = totalsize/GPUContext.max_ssbo_size;
385 if (nssbo*GPUContext.max_ssbo_size < totalsize)
386 nssbo++;
387
390 if (nssbo > max_ssbo_blocks) {
392 "%s:%d: error: cannot allocate %ld bytes\n"
393 "%s:%d: error: maximum allowed is %d x %ld bytes\n",
395 max_ssbo_blocks, GPUContext.max_ssbo_size);
396 exit (1);
397 }
398
399#if DEBUGALLOC
400 fprintf (stderr, "resizing from %ld to %ld nssbo %d pnssbo %d max_ssbo %ld\n",
401 GPUContext.current_size, totalsize, nssbo, GPUContext.nssbo, GPUContext.max_ssbo_size);
402#endif
403 assert (totalsize > GPUContext.current_size);
404 size_t size = max(GPUContext.nssbo - 1, 0)*GPUContext.max_ssbo_size;
405 size_t current_size = GPUContext.current_size - size;
406 assert (current_size >= 0 && current_size <= GPUContext.max_ssbo_size);
407 GPUContext.current_size = totalsize;
408 totalsize -= size;
409 assert (totalsize >= 0);
410
411 if (current_size > 0) {
412 size_t size = min (totalsize, GPUContext.max_ssbo_size);
413 totalsize -= size;
414 if (current_size < GPUContext.max_ssbo_size) {
415 GLuint ssbo;
416 GL_C (glGenBuffers (1, &ssbo));
422 GL_C (glDeleteBuffers (1, &GPUContext.ssbo[GPUContext.nssbo - 1]));
423 GPUContext.ssbo[GPUContext.nssbo - 1] = ssbo;
424 }
425#if DEBUGALLOC
426 else
427 fprintf (stderr, " skipping fully allocated %ld\n", current_size);
428#endif
429 }
430
431#if DEBUGALLOC
432 fprintf (stderr, " need to allocate %ld\n", totalsize);
433#endif
434 if (nssbo > GPUContext.nssbo) {
435 assert (totalsize > 0);
436 GPUContext.ssbo = realloc (GPUContext.ssbo, nssbo*sizeof(GLuint));
437#if DEBUGALLOC
438 fprintf (stderr, " allocating %d buffers\n", nssbo - GPUContext.nssbo);
439#endif
440 GL_C (glGenBuffers (nssbo - GPUContext.nssbo, GPUContext.ssbo + GPUContext.nssbo));
441 while (GPUContext.nssbo < nssbo) {
443 size_t size = min (totalsize, GPUContext.max_ssbo_size);
444#if DEBUGALLOC
445 fprintf (stderr, " allocating buffer %d size %ld\n", GPUContext.nssbo, size);
446#endif
448 totalsize -= size;
449 GPUContext.nssbo++;
450 }
451 }
453#if DEBUGALLOC
454 fprintf (stderr, "done resizing %d %ld %ld\n", GPUContext.nssbo, GPUContext.current_size, totalsize);
455#endif
456 assert (totalsize == 0);
457}
458
459static void gpu_cpu_sync_scalar (scalar s, char * sep, GLenum mode);
460
462{
464 realloc_ssbo();
465}
466
468{
469 scalar * list1 = NULL;
470 for (int _s = 0; _s < 1; _s++) /* scalar in list */
471 if (s.gpu.stored > 0)
473 if (list1) {
474 void cartesian_boundary_level (scalar * list, int l);
476 free (list1);
477 }
478}
479
480#define realloc_scalar(size) realloc_scalar_gpu (size)
int min
Definition balance.h:192
define double double char flags
void cartesian_boundary_level(scalar *list, int l)
define l
define double double char Reduce reductions
free(list1)
define VT _attribute[s.i] v y scalar * list
Definition cartesian.h:276
scalar * list_prepend(scalar *list, scalar s)
Definition common.h:197
int x
Definition common.h:76
static _Attributes * _attribute
Definition common.h:165
scalar * baseblock
Definition common.h:343
size_t datasize
Definition common.h:132
#define p
Definition tree.h:320
define sysmalloc malloc define syscalloc calloc define sysrealloc realloc define sysfree free define systrdup strdup define func
Definition config.h:120
#define assert(a)
Definition config.h:107
#define LINENO
Definition config.h:105
define sysmalloc malloc define syscalloc calloc define sysrealloc realloc define sysfree free define systrdup strdup define line line realloc(p, s) @ define pfree(p
Point point
Definition conserving.h:86
else return n
Definition curvature.h:101
char * error
Definition display.h:101
scalar s
Definition embed-tree.h:56
vector fs[]
Definition embed.h:22
scalar int i
Definition embed.h:74
static int line
Definition errors.c:754
static char * fname
Definition errors.c:753
#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
Definition glad.h:1327
#define GL_TRUE
Definition glad.h:142
#define glGetIntegeri_v
Definition glad.h:3567
#define glGetError
Definition glad.h:1984
#define glAttachShader
Definition glad.h:3271
#define GL_MAX_GEOMETRY_INPUT_COMPONENTS
Definition glad.h:1326
#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS
Definition glad.h:1450
#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS
Definition glad.h:1443
#define GL_MAX_COMPUTE_UNIFORM_BLOCKS
Definition glad.h:1628
#define GL_MAX_COMPUTE_WORK_GROUP_COUNT
Definition glad.h:1637
#define GL_FRAGMENT_SHADER
Definition glad.h:936
#define glGenBuffers
Definition glad.h:3225
#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS
Definition glad.h:1452
#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS
Definition glad.h:1632
#define GL_COPY_WRITE_BUFFER
Definition glad.h:1274
#define glGetShaderInfoLog
Definition glad.h:3322
#define glShaderSource
Definition glad.h:3358
#define GL_MAX_FRAGMENT_INPUT_COMPONENTS
Definition glad.h:1328
#define glBindBuffer
Definition glad.h:3219
#define GL_DYNAMIC_READ
Definition glad.h:877
#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
Definition glad.h:1315
#define glCreateShader
Definition glad.h:3283
#define GL_MAX_VERTEX_OUTPUT_COMPONENTS
Definition glad.h:1325
#define glGetProgramiv
Definition glad.h:3313
#define glDeleteBuffers
Definition glad.h:3222
int GLint
Definition glad.h:100
#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS
Definition glad.h:1444
#define GL_MAX_VERTEX_UNIFORM_BLOCKS
Definition glad.h:1279
#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE
Definition glad.h:1849
#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS
Definition glad.h:1449
#define GL_SHADER_STORAGE_BUFFER
Definition glad.h:1837
#define glFinish
Definition glad.h:1945
#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
Definition glad.h:938
#define glGetIntegerv
Definition glad.h:1990
#define GL_COMPUTE_SHADER
Definition glad.h:1627
#define GL_MAX_COMPUTE_WORK_GROUP_SIZE
Definition glad.h:1638
#define glBindFramebuffer
Definition glad.h:3756
unsigned int GLenum
Definition glad.h:92
#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS
Definition glad.h:1445
#define GL_MAX_TEXTURE_BUFFER_SIZE
Definition glad.h:1255
#define GL_NO_ERROR
Definition glad.h:180
#define GL_COMPILE_STATUS
Definition glad.h:964
#define GL_MAX_DRAW_BUFFERS
Definition glad.h:915
int GLsizei
Definition glad.h:103
#define glBufferData
Definition glad.h:3231
#define glDeleteProgram
Definition glad.h:3286
#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
Definition glad.h:942
#define GL_MAX_IMAGE_UNITS
Definition glad.h:1556
#define GL_FRAMEBUFFER
Definition glad.h:1189
#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS
Definition glad.h:1280
unsigned int GLuint
Definition glad.h:101
#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
Definition glad.h:941
#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
Definition glad.h:1322
#define GL_FALSE
Definition glad.h:141
#define glDeleteShader
Definition glad.h:3289
#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS
Definition glad.h:1636
#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS
Definition glad.h:1442
#define GL_VERTEX_SHADER
Definition glad.h:937
#define glCompileShader
Definition glad.h:3277
#define glCreateProgram
Definition glad.h:3280
#define glGetProgramInfoLog
Definition glad.h:3316
#define glLinkProgram
Definition glad.h:3355
#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS
Definition glad.h:1605
#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS
Definition glad.h:1629
#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS
Definition glad.h:1453
#define GL_MAX_VERTEX_UNIFORM_COMPONENTS
Definition glad.h:939
#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS
Definition glad.h:1846
#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS
Definition glad.h:1446
#define GL_LINK_STATUS
Definition glad.h:965
#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS
Definition glad.h:1451
#define glGetShaderiv
Definition glad.h:3319
#define GL_INFO_LOG_LENGTH
Definition glad.h:967
#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS
Definition glad.h:1281
#define glCopyBufferSubData
Definition glad.h:3829
#define glDetachShader
Definition glad.h:3292
#define GL_COPY_READ_BUFFER
Definition glad.h:1273
#define field_size()
Definition cartesian.h:11
static bool _gpu_done_
Definition cartesian.h:20
#define GL_C(stmt)
Definition gpu.h:37
macro2 foreach_coarse_level_stencil(int _level, char flags, Reduce reductions, int _parallel, External *_externals, const char *_kernel)
Definition gpu.h:343
static char * getShaderLogInfo(GLuint shader)
Definition gpu.h:53
static struct @7 GPUContext
GLString gpu_limits_list[]
Definition gpu.h:157
void printWorkGroupsCapabilities()
Definition gpu.h:201
bool gpu_end_stencil(ForeachData *loop, const RegionParameters *region, External *externals, const char *kernel)
Definition grid.h:2045
char * gpu_errors(const char *errors, const char *source, char *fout)
Definition errors.c:2230
macro2 BEGIN_FOREACH()
Definition gpu.h:230
file
Definition gpu.h:364
#define end_tracing_foreach(name, file, line)
Definition gpu.h:227
macro2 foreach_level_stencil(int _level, char flags, Reduce reductions, int _parallel, External *_externals, const char *_kernel)
Definition gpu.h:295
end_tracing(func, file, line)
void gpu_free_solver(void)
Definition gpu.h:43
void realloc_scalar_gpu(int size)
Definition gpu.h:461
#define realloc_scalar(size)
Definition gpu.h:480
int nssbo
Definition gpu.h:16
GLFWwindow * window
Definition gpu.h:13
macro2 foreach_point_stencil(double _xp, double _yp, double _zp, char flags, Reduce reductions, int _parallel, External *_externals, const char *_kernel)
Definition gpu.h:304
#define tracing_foreach(name, file, line)
Definition gpu.h:226
size_t current_size
Definition gpu.h:17
static char * getProgramLogInfo(GLuint program)
Definition gpu.h:66
macro2 foreach_level_or_leaf_stencil(int _level, char flags, Reduce reductions, int _parallel, External *_externals, const char *_kernel)
Definition gpu.h:351
static void gpu_check_error(const char *stmt, const char *fname, int line)
Definition gpu.h:22
static GLuint createShaderFromString(const char *shaderSource, const GLenum shaderType)
Definition gpu.h:81
macro2 foreach_stencil_generic(char flags, Reduce reductions, int _parallel, External *_externals, const char *_kernel)
Definition gpu.h:249
size_t max_ssbo_size
Definition gpu.h:17
macro2 foreach_stencil(char flags, Reduce reductions, int _parallel, External *_externals, const char *_kernel)
Definition gpu.h:288
ifndef tracing def tracing(func, file, line) do
Definition gpu.h:360
macro2 foreach_region_stencil(coord _p, coord _box[2], coord _n, char flags, Reduce reductions, int _parallel, External *_externals, const char *_kernel)
Definition gpu.h:315
bool fragment_shader
Definition gpu.h:15
macro2 foreach_face_stencil(char flags, Reduce reductions, const char *_order, int _parallel, External *_externals, const char *_kernel)
Definition gpu.h:335
GLuint * ssbo
Definition gpu.h:14
static void gpu_cpu_sync_scalar(scalar s, char *sep, GLenum mode)
void gpu_boundary_level(scalar *list, int l)
Definition gpu.h:467
int current_shader
Definition gpu.h:16
static GLuint loadNormalShader(const char *vsSource, const char *fsShader)
Definition gpu.h:109
macro2 foreach_vertex_stencil(char flags, Reduce reductions, int _parallel, External *_externals, const char *_kernel)
Definition gpu.h:325
size_t max
Definition mtrace.h:8
size_t size
int source
Definition qcc.c:67
before each foreach loop
Definition stencils.h:11
def S_LINENO
Definition stencils.h:405
def S__FILE__
Definition stencils.h:405
@ s_input
Definition stencils.h:23
@ s_output
Definition stencils.h:24
void check_stencil(ForeachData *loop)
This function is called after the stencil access detection, just before the (real) foreach loop is ex...
Definition stencils.h:112
const char * fname
Definition stencils.h:56
char * s
Definition gpu.h:153
int index
Definition gpu.h:154
Definition linear.h:21
coord * box
Definition gpu.h:242
char * name
Definition common.h:156
Definition common.h:78
int i
Definition common.h:44