mesa: reorder gl_light_attrib
[mesa.git] / src / mesa / main / mtypes.h
1 /*
2 * Mesa 3-D graphics library
3 *
4 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
5 * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */
25
26 /**
27 * \file mtypes.h
28 * Main Mesa data structures.
29 *
30 * Please try to mark derived values with a leading underscore ('_').
31 */
32
33 #ifndef MTYPES_H
34 #define MTYPES_H
35
36
37 #include <stdint.h> /* uint32_t */
38 #include <stdbool.h>
39 #include "c11/threads.h"
40
41 #include "main/glheader.h"
42 #include "main/config.h"
43 #include "glapi/glapi.h"
44 #include "math/m_matrix.h" /* GLmatrix */
45 #include "util/simple_list.h" /* struct simple_node */
46 #include "main/formats.h" /* MESA_FORMAT_COUNT */
47
48
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52
53
54 /**
55 * \name 64-bit extension of GLbitfield.
56 */
57 /*@{*/
58 typedef GLuint64 GLbitfield64;
59
60 /** Set a single bit */
61 #define BITFIELD64_BIT(b) ((GLbitfield64)1 << (b))
62 /** Set all bits up to excluding bit b */
63 #define BITFIELD64_MASK(b) \
64 ((b) == 64 ? (~(GLbitfield64)0) : BITFIELD64_BIT(b) - 1)
65 /** Set count bits starting from bit b */
66 #define BITFIELD64_RANGE(b, count) \
67 (BITFIELD64_MASK((b) + (count)) & ~BITFIELD64_MASK(b))
68
69
70 /**
71 * \name Some forward type declarations
72 */
73 /*@{*/
74 struct _mesa_HashTable;
75 struct gl_attrib_node;
76 struct gl_list_extensions;
77 struct gl_meta_state;
78 struct gl_program_cache;
79 struct gl_texture_object;
80 struct gl_debug_state;
81 struct gl_context;
82 struct st_context;
83 struct gl_uniform_storage;
84 struct prog_instruction;
85 struct gl_program_parameter_list;
86 struct set;
87 struct set_entry;
88 struct vbo_context;
89 /*@}*/
90
91
92 /** Extra draw modes beyond GL_POINTS, GL_TRIANGLE_FAN, etc */
93 #define PRIM_MAX GL_TRIANGLE_STRIP_ADJACENCY
94 #define PRIM_OUTSIDE_BEGIN_END (PRIM_MAX + 1)
95 #define PRIM_UNKNOWN (PRIM_MAX + 2)
96
97
98
99 /**
100 * Indexes for vertex program attributes.
101 * GL_NV_vertex_program aliases generic attributes over the conventional
102 * attributes. In GL_ARB_vertex_program shader the aliasing is optional.
103 * In GL_ARB_vertex_shader / OpenGL 2.0 the aliasing is disallowed (the
104 * generic attributes are distinct/separate).
105 */
106 typedef enum
107 {
108 VERT_ATTRIB_POS = 0,
109 VERT_ATTRIB_WEIGHT = 1,
110 VERT_ATTRIB_NORMAL = 2,
111 VERT_ATTRIB_COLOR0 = 3,
112 VERT_ATTRIB_COLOR1 = 4,
113 VERT_ATTRIB_FOG = 5,
114 VERT_ATTRIB_COLOR_INDEX = 6,
115 VERT_ATTRIB_EDGEFLAG = 7,
116 VERT_ATTRIB_TEX0 = 8,
117 VERT_ATTRIB_TEX1 = 9,
118 VERT_ATTRIB_TEX2 = 10,
119 VERT_ATTRIB_TEX3 = 11,
120 VERT_ATTRIB_TEX4 = 12,
121 VERT_ATTRIB_TEX5 = 13,
122 VERT_ATTRIB_TEX6 = 14,
123 VERT_ATTRIB_TEX7 = 15,
124 VERT_ATTRIB_POINT_SIZE = 16,
125 VERT_ATTRIB_GENERIC0 = 17,
126 VERT_ATTRIB_GENERIC1 = 18,
127 VERT_ATTRIB_GENERIC2 = 19,
128 VERT_ATTRIB_GENERIC3 = 20,
129 VERT_ATTRIB_GENERIC4 = 21,
130 VERT_ATTRIB_GENERIC5 = 22,
131 VERT_ATTRIB_GENERIC6 = 23,
132 VERT_ATTRIB_GENERIC7 = 24,
133 VERT_ATTRIB_GENERIC8 = 25,
134 VERT_ATTRIB_GENERIC9 = 26,
135 VERT_ATTRIB_GENERIC10 = 27,
136 VERT_ATTRIB_GENERIC11 = 28,
137 VERT_ATTRIB_GENERIC12 = 29,
138 VERT_ATTRIB_GENERIC13 = 30,
139 VERT_ATTRIB_GENERIC14 = 31,
140 VERT_ATTRIB_GENERIC15 = 32,
141 VERT_ATTRIB_MAX = 33
142 } gl_vert_attrib;
143
144 /**
145 * Symbolic constats to help iterating over
146 * specific blocks of vertex attributes.
147 *
148 * VERT_ATTRIB_FF
149 * includes all fixed function attributes as well as
150 * the aliased GL_NV_vertex_program shader attributes.
151 * VERT_ATTRIB_TEX
152 * include the classic texture coordinate attributes.
153 * Is a subset of VERT_ATTRIB_FF.
154 * VERT_ATTRIB_GENERIC
155 * include the OpenGL 2.0+ GLSL generic shader attributes.
156 * These alias the generic GL_ARB_vertex_shader attributes.
157 */
158 #define VERT_ATTRIB_FF(i) (VERT_ATTRIB_POS + (i))
159 #define VERT_ATTRIB_FF_MAX VERT_ATTRIB_GENERIC0
160
161 #define VERT_ATTRIB_TEX(i) (VERT_ATTRIB_TEX0 + (i))
162 #define VERT_ATTRIB_TEX_MAX MAX_TEXTURE_COORD_UNITS
163
164 #define VERT_ATTRIB_GENERIC(i) (VERT_ATTRIB_GENERIC0 + (i))
165 #define VERT_ATTRIB_GENERIC_MAX MAX_VERTEX_GENERIC_ATTRIBS
166
167 /**
168 * Bitflags for vertex attributes.
169 * These are used in bitfields in many places.
170 */
171 /*@{*/
172 #define VERT_BIT_POS BITFIELD64_BIT(VERT_ATTRIB_POS)
173 #define VERT_BIT_WEIGHT BITFIELD64_BIT(VERT_ATTRIB_WEIGHT)
174 #define VERT_BIT_NORMAL BITFIELD64_BIT(VERT_ATTRIB_NORMAL)
175 #define VERT_BIT_COLOR0 BITFIELD64_BIT(VERT_ATTRIB_COLOR0)
176 #define VERT_BIT_COLOR1 BITFIELD64_BIT(VERT_ATTRIB_COLOR1)
177 #define VERT_BIT_FOG BITFIELD64_BIT(VERT_ATTRIB_FOG)
178 #define VERT_BIT_COLOR_INDEX BITFIELD64_BIT(VERT_ATTRIB_COLOR_INDEX)
179 #define VERT_BIT_EDGEFLAG BITFIELD64_BIT(VERT_ATTRIB_EDGEFLAG)
180 #define VERT_BIT_TEX0 BITFIELD64_BIT(VERT_ATTRIB_TEX0)
181 #define VERT_BIT_TEX1 BITFIELD64_BIT(VERT_ATTRIB_TEX1)
182 #define VERT_BIT_TEX2 BITFIELD64_BIT(VERT_ATTRIB_TEX2)
183 #define VERT_BIT_TEX3 BITFIELD64_BIT(VERT_ATTRIB_TEX3)
184 #define VERT_BIT_TEX4 BITFIELD64_BIT(VERT_ATTRIB_TEX4)
185 #define VERT_BIT_TEX5 BITFIELD64_BIT(VERT_ATTRIB_TEX5)
186 #define VERT_BIT_TEX6 BITFIELD64_BIT(VERT_ATTRIB_TEX6)
187 #define VERT_BIT_TEX7 BITFIELD64_BIT(VERT_ATTRIB_TEX7)
188 #define VERT_BIT_POINT_SIZE BITFIELD64_BIT(VERT_ATTRIB_POINT_SIZE)
189 #define VERT_BIT_GENERIC0 BITFIELD64_BIT(VERT_ATTRIB_GENERIC0)
190
191 #define VERT_BIT(i) BITFIELD64_BIT(i)
192 #define VERT_BIT_ALL BITFIELD64_RANGE(0, VERT_ATTRIB_MAX)
193
194 #define VERT_BIT_FF(i) VERT_BIT(i)
195 #define VERT_BIT_FF_ALL BITFIELD64_RANGE(0, VERT_ATTRIB_FF_MAX)
196 #define VERT_BIT_TEX(i) VERT_BIT(VERT_ATTRIB_TEX(i))
197 #define VERT_BIT_TEX_ALL \
198 BITFIELD64_RANGE(VERT_ATTRIB_TEX(0), VERT_ATTRIB_TEX_MAX)
199
200 #define VERT_BIT_GENERIC(i) VERT_BIT(VERT_ATTRIB_GENERIC(i))
201 #define VERT_BIT_GENERIC_ALL \
202 BITFIELD64_RANGE(VERT_ATTRIB_GENERIC(0), VERT_ATTRIB_GENERIC_MAX)
203 /*@}*/
204
205
206 /**
207 * Indexes for vertex shader outputs, geometry shader inputs/outputs, and
208 * fragment shader inputs.
209 *
210 * Note that some of these values are not available to all pipeline stages.
211 *
212 * When this enum is updated, the following code must be updated too:
213 * - vertResults (in prog_print.c's arb_output_attrib_string())
214 * - fragAttribs (in prog_print.c's arb_input_attrib_string())
215 * - _mesa_varying_slot_in_fs()
216 */
217 typedef enum
218 {
219 VARYING_SLOT_POS,
220 VARYING_SLOT_COL0, /* COL0 and COL1 must be contiguous */
221 VARYING_SLOT_COL1,
222 VARYING_SLOT_FOGC,
223 VARYING_SLOT_TEX0, /* TEX0-TEX7 must be contiguous */
224 VARYING_SLOT_TEX1,
225 VARYING_SLOT_TEX2,
226 VARYING_SLOT_TEX3,
227 VARYING_SLOT_TEX4,
228 VARYING_SLOT_TEX5,
229 VARYING_SLOT_TEX6,
230 VARYING_SLOT_TEX7,
231 VARYING_SLOT_PSIZ, /* Does not appear in FS */
232 VARYING_SLOT_BFC0, /* Does not appear in FS */
233 VARYING_SLOT_BFC1, /* Does not appear in FS */
234 VARYING_SLOT_EDGE, /* Does not appear in FS */
235 VARYING_SLOT_CLIP_VERTEX, /* Does not appear in FS */
236 VARYING_SLOT_CLIP_DIST0,
237 VARYING_SLOT_CLIP_DIST1,
238 VARYING_SLOT_PRIMITIVE_ID, /* Does not appear in VS */
239 VARYING_SLOT_LAYER, /* Appears as VS or GS output */
240 VARYING_SLOT_VIEWPORT, /* Appears as VS or GS output */
241 VARYING_SLOT_FACE, /* FS only */
242 VARYING_SLOT_PNTC, /* FS only */
243 VARYING_SLOT_VAR0, /* First generic varying slot */
244 VARYING_SLOT_MAX = VARYING_SLOT_VAR0 + MAX_VARYING
245 } gl_varying_slot;
246
247
248 /**
249 * Bitflags for varying slots.
250 */
251 /*@{*/
252 #define VARYING_BIT_POS BITFIELD64_BIT(VARYING_SLOT_POS)
253 #define VARYING_BIT_COL0 BITFIELD64_BIT(VARYING_SLOT_COL0)
254 #define VARYING_BIT_COL1 BITFIELD64_BIT(VARYING_SLOT_COL1)
255 #define VARYING_BIT_FOGC BITFIELD64_BIT(VARYING_SLOT_FOGC)
256 #define VARYING_BIT_TEX0 BITFIELD64_BIT(VARYING_SLOT_TEX0)
257 #define VARYING_BIT_TEX1 BITFIELD64_BIT(VARYING_SLOT_TEX1)
258 #define VARYING_BIT_TEX2 BITFIELD64_BIT(VARYING_SLOT_TEX2)
259 #define VARYING_BIT_TEX3 BITFIELD64_BIT(VARYING_SLOT_TEX3)
260 #define VARYING_BIT_TEX4 BITFIELD64_BIT(VARYING_SLOT_TEX4)
261 #define VARYING_BIT_TEX5 BITFIELD64_BIT(VARYING_SLOT_TEX5)
262 #define VARYING_BIT_TEX6 BITFIELD64_BIT(VARYING_SLOT_TEX6)
263 #define VARYING_BIT_TEX7 BITFIELD64_BIT(VARYING_SLOT_TEX7)
264 #define VARYING_BIT_TEX(U) BITFIELD64_BIT(VARYING_SLOT_TEX0 + (U))
265 #define VARYING_BITS_TEX_ANY BITFIELD64_RANGE(VARYING_SLOT_TEX0, \
266 MAX_TEXTURE_COORD_UNITS)
267 #define VARYING_BIT_PSIZ BITFIELD64_BIT(VARYING_SLOT_PSIZ)
268 #define VARYING_BIT_BFC0 BITFIELD64_BIT(VARYING_SLOT_BFC0)
269 #define VARYING_BIT_BFC1 BITFIELD64_BIT(VARYING_SLOT_BFC1)
270 #define VARYING_BIT_EDGE BITFIELD64_BIT(VARYING_SLOT_EDGE)
271 #define VARYING_BIT_CLIP_VERTEX BITFIELD64_BIT(VARYING_SLOT_CLIP_VERTEX)
272 #define VARYING_BIT_CLIP_DIST0 BITFIELD64_BIT(VARYING_SLOT_CLIP_DIST0)
273 #define VARYING_BIT_CLIP_DIST1 BITFIELD64_BIT(VARYING_SLOT_CLIP_DIST1)
274 #define VARYING_BIT_PRIMITIVE_ID BITFIELD64_BIT(VARYING_SLOT_PRIMITIVE_ID)
275 #define VARYING_BIT_LAYER BITFIELD64_BIT(VARYING_SLOT_LAYER)
276 #define VARYING_BIT_VIEWPORT BITFIELD64_BIT(VARYING_SLOT_VIEWPORT)
277 #define VARYING_BIT_FACE BITFIELD64_BIT(VARYING_SLOT_FACE)
278 #define VARYING_BIT_PNTC BITFIELD64_BIT(VARYING_SLOT_PNTC)
279 #define VARYING_BIT_VAR(V) BITFIELD64_BIT(VARYING_SLOT_VAR0 + (V))
280 /*@}*/
281
282 /**
283 * Bitflags for system values.
284 */
285 #define SYSTEM_BIT_SAMPLE_ID BITFIELD64_BIT(SYSTEM_VALUE_SAMPLE_ID)
286 #define SYSTEM_BIT_SAMPLE_POS BITFIELD64_BIT(SYSTEM_VALUE_SAMPLE_POS)
287 #define SYSTEM_BIT_SAMPLE_MASK_IN BITFIELD64_BIT(SYSTEM_VALUE_SAMPLE_MASK_IN)
288
289 /**
290 * Determine if the given gl_varying_slot appears in the fragment shader.
291 */
292 static inline GLboolean
293 _mesa_varying_slot_in_fs(gl_varying_slot slot)
294 {
295 switch (slot) {
296 case VARYING_SLOT_PSIZ:
297 case VARYING_SLOT_BFC0:
298 case VARYING_SLOT_BFC1:
299 case VARYING_SLOT_EDGE:
300 case VARYING_SLOT_CLIP_VERTEX:
301 case VARYING_SLOT_LAYER:
302 return GL_FALSE;
303 default:
304 return GL_TRUE;
305 }
306 }
307
308
309 /**
310 * Fragment program results
311 */
312 typedef enum
313 {
314 FRAG_RESULT_DEPTH = 0,
315 FRAG_RESULT_STENCIL = 1,
316 /* If a single color should be written to all render targets, this
317 * register is written. No FRAG_RESULT_DATAn will be written.
318 */
319 FRAG_RESULT_COLOR = 2,
320 FRAG_RESULT_SAMPLE_MASK = 3,
321
322 /* FRAG_RESULT_DATAn are the per-render-target (GLSL gl_FragData[n]
323 * or ARB_fragment_program fragment.color[n]) color results. If
324 * any are written, FRAG_RESULT_COLOR will not be written.
325 */
326 FRAG_RESULT_DATA0 = 4,
327 FRAG_RESULT_MAX = (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS)
328 } gl_frag_result;
329
330
331 /**
332 * Indexes for all renderbuffers
333 */
334 typedef enum
335 {
336 /* the four standard color buffers */
337 BUFFER_FRONT_LEFT,
338 BUFFER_BACK_LEFT,
339 BUFFER_FRONT_RIGHT,
340 BUFFER_BACK_RIGHT,
341 BUFFER_DEPTH,
342 BUFFER_STENCIL,
343 BUFFER_ACCUM,
344 /* optional aux buffer */
345 BUFFER_AUX0,
346 /* generic renderbuffers */
347 BUFFER_COLOR0,
348 BUFFER_COLOR1,
349 BUFFER_COLOR2,
350 BUFFER_COLOR3,
351 BUFFER_COLOR4,
352 BUFFER_COLOR5,
353 BUFFER_COLOR6,
354 BUFFER_COLOR7,
355 BUFFER_COUNT
356 } gl_buffer_index;
357
358 /**
359 * Bit flags for all renderbuffers
360 */
361 #define BUFFER_BIT_FRONT_LEFT (1 << BUFFER_FRONT_LEFT)
362 #define BUFFER_BIT_BACK_LEFT (1 << BUFFER_BACK_LEFT)
363 #define BUFFER_BIT_FRONT_RIGHT (1 << BUFFER_FRONT_RIGHT)
364 #define BUFFER_BIT_BACK_RIGHT (1 << BUFFER_BACK_RIGHT)
365 #define BUFFER_BIT_AUX0 (1 << BUFFER_AUX0)
366 #define BUFFER_BIT_AUX1 (1 << BUFFER_AUX1)
367 #define BUFFER_BIT_AUX2 (1 << BUFFER_AUX2)
368 #define BUFFER_BIT_AUX3 (1 << BUFFER_AUX3)
369 #define BUFFER_BIT_DEPTH (1 << BUFFER_DEPTH)
370 #define BUFFER_BIT_STENCIL (1 << BUFFER_STENCIL)
371 #define BUFFER_BIT_ACCUM (1 << BUFFER_ACCUM)
372 #define BUFFER_BIT_COLOR0 (1 << BUFFER_COLOR0)
373 #define BUFFER_BIT_COLOR1 (1 << BUFFER_COLOR1)
374 #define BUFFER_BIT_COLOR2 (1 << BUFFER_COLOR2)
375 #define BUFFER_BIT_COLOR3 (1 << BUFFER_COLOR3)
376 #define BUFFER_BIT_COLOR4 (1 << BUFFER_COLOR4)
377 #define BUFFER_BIT_COLOR5 (1 << BUFFER_COLOR5)
378 #define BUFFER_BIT_COLOR6 (1 << BUFFER_COLOR6)
379 #define BUFFER_BIT_COLOR7 (1 << BUFFER_COLOR7)
380
381 /**
382 * Mask of all the color buffer bits (but not accum).
383 */
384 #define BUFFER_BITS_COLOR (BUFFER_BIT_FRONT_LEFT | \
385 BUFFER_BIT_BACK_LEFT | \
386 BUFFER_BIT_FRONT_RIGHT | \
387 BUFFER_BIT_BACK_RIGHT | \
388 BUFFER_BIT_AUX0 | \
389 BUFFER_BIT_COLOR0 | \
390 BUFFER_BIT_COLOR1 | \
391 BUFFER_BIT_COLOR2 | \
392 BUFFER_BIT_COLOR3 | \
393 BUFFER_BIT_COLOR4 | \
394 BUFFER_BIT_COLOR5 | \
395 BUFFER_BIT_COLOR6 | \
396 BUFFER_BIT_COLOR7)
397
398
399 /**
400 * Shader stages. Note that these will become 5 with tessellation.
401 *
402 * The order must match how shaders are ordered in the pipeline.
403 * The GLSL linker assumes that if i<j, then the j-th shader is
404 * executed later than the i-th shader.
405 */
406 typedef enum
407 {
408 MESA_SHADER_VERTEX = 0,
409 MESA_SHADER_GEOMETRY = 1,
410 MESA_SHADER_FRAGMENT = 2,
411 MESA_SHADER_COMPUTE = 3,
412 } gl_shader_stage;
413
414 #define MESA_SHADER_STAGES (MESA_SHADER_COMPUTE + 1)
415
416
417 /**
418 * Framebuffer configuration (aka visual / pixelformat)
419 * Note: some of these fields should be boolean, but it appears that
420 * code in drivers/dri/common/util.c requires int-sized fields.
421 */
422 struct gl_config
423 {
424 GLboolean rgbMode;
425 GLboolean floatMode;
426 GLboolean colorIndexMode; /* XXX is this used anywhere? */
427 GLuint doubleBufferMode;
428 GLuint stereoMode;
429
430 GLboolean haveAccumBuffer;
431 GLboolean haveDepthBuffer;
432 GLboolean haveStencilBuffer;
433
434 GLint redBits, greenBits, blueBits, alphaBits; /* bits per comp */
435 GLuint redMask, greenMask, blueMask, alphaMask;
436 GLint rgbBits; /* total bits for rgb */
437 GLint indexBits; /* total bits for colorindex */
438
439 GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits;
440 GLint depthBits;
441 GLint stencilBits;
442
443 GLint numAuxBuffers;
444
445 GLint level;
446
447 /* EXT_visual_rating / GLX 1.2 */
448 GLint visualRating;
449
450 /* EXT_visual_info / GLX 1.2 */
451 GLint transparentPixel;
452 /* colors are floats scaled to ints */
453 GLint transparentRed, transparentGreen, transparentBlue, transparentAlpha;
454 GLint transparentIndex;
455
456 /* ARB_multisample / SGIS_multisample */
457 GLint sampleBuffers;
458 GLint samples;
459
460 /* SGIX_pbuffer / GLX 1.3 */
461 GLint maxPbufferWidth;
462 GLint maxPbufferHeight;
463 GLint maxPbufferPixels;
464 GLint optimalPbufferWidth; /* Only for SGIX_pbuffer. */
465 GLint optimalPbufferHeight; /* Only for SGIX_pbuffer. */
466
467 /* OML_swap_method */
468 GLint swapMethod;
469
470 /* EXT_texture_from_pixmap */
471 GLint bindToTextureRgb;
472 GLint bindToTextureRgba;
473 GLint bindToMipmapTexture;
474 GLint bindToTextureTargets;
475 GLint yInverted;
476
477 /* EXT_framebuffer_sRGB */
478 GLint sRGBCapable;
479 };
480
481
482 /**
483 * \name Bit flags used for updating material values.
484 */
485 /*@{*/
486 #define MAT_ATTRIB_FRONT_AMBIENT 0
487 #define MAT_ATTRIB_BACK_AMBIENT 1
488 #define MAT_ATTRIB_FRONT_DIFFUSE 2
489 #define MAT_ATTRIB_BACK_DIFFUSE 3
490 #define MAT_ATTRIB_FRONT_SPECULAR 4
491 #define MAT_ATTRIB_BACK_SPECULAR 5
492 #define MAT_ATTRIB_FRONT_EMISSION 6
493 #define MAT_ATTRIB_BACK_EMISSION 7
494 #define MAT_ATTRIB_FRONT_SHININESS 8
495 #define MAT_ATTRIB_BACK_SHININESS 9
496 #define MAT_ATTRIB_FRONT_INDEXES 10
497 #define MAT_ATTRIB_BACK_INDEXES 11
498 #define MAT_ATTRIB_MAX 12
499
500 #define MAT_ATTRIB_AMBIENT(f) (MAT_ATTRIB_FRONT_AMBIENT+(f))
501 #define MAT_ATTRIB_DIFFUSE(f) (MAT_ATTRIB_FRONT_DIFFUSE+(f))
502 #define MAT_ATTRIB_SPECULAR(f) (MAT_ATTRIB_FRONT_SPECULAR+(f))
503 #define MAT_ATTRIB_EMISSION(f) (MAT_ATTRIB_FRONT_EMISSION+(f))
504 #define MAT_ATTRIB_SHININESS(f)(MAT_ATTRIB_FRONT_SHININESS+(f))
505 #define MAT_ATTRIB_INDEXES(f) (MAT_ATTRIB_FRONT_INDEXES+(f))
506
507 #define MAT_INDEX_AMBIENT 0
508 #define MAT_INDEX_DIFFUSE 1
509 #define MAT_INDEX_SPECULAR 2
510
511 #define MAT_BIT_FRONT_AMBIENT (1<<MAT_ATTRIB_FRONT_AMBIENT)
512 #define MAT_BIT_BACK_AMBIENT (1<<MAT_ATTRIB_BACK_AMBIENT)
513 #define MAT_BIT_FRONT_DIFFUSE (1<<MAT_ATTRIB_FRONT_DIFFUSE)
514 #define MAT_BIT_BACK_DIFFUSE (1<<MAT_ATTRIB_BACK_DIFFUSE)
515 #define MAT_BIT_FRONT_SPECULAR (1<<MAT_ATTRIB_FRONT_SPECULAR)
516 #define MAT_BIT_BACK_SPECULAR (1<<MAT_ATTRIB_BACK_SPECULAR)
517 #define MAT_BIT_FRONT_EMISSION (1<<MAT_ATTRIB_FRONT_EMISSION)
518 #define MAT_BIT_BACK_EMISSION (1<<MAT_ATTRIB_BACK_EMISSION)
519 #define MAT_BIT_FRONT_SHININESS (1<<MAT_ATTRIB_FRONT_SHININESS)
520 #define MAT_BIT_BACK_SHININESS (1<<MAT_ATTRIB_BACK_SHININESS)
521 #define MAT_BIT_FRONT_INDEXES (1<<MAT_ATTRIB_FRONT_INDEXES)
522 #define MAT_BIT_BACK_INDEXES (1<<MAT_ATTRIB_BACK_INDEXES)
523
524
525 #define FRONT_MATERIAL_BITS (MAT_BIT_FRONT_EMISSION | \
526 MAT_BIT_FRONT_AMBIENT | \
527 MAT_BIT_FRONT_DIFFUSE | \
528 MAT_BIT_FRONT_SPECULAR | \
529 MAT_BIT_FRONT_SHININESS | \
530 MAT_BIT_FRONT_INDEXES)
531
532 #define BACK_MATERIAL_BITS (MAT_BIT_BACK_EMISSION | \
533 MAT_BIT_BACK_AMBIENT | \
534 MAT_BIT_BACK_DIFFUSE | \
535 MAT_BIT_BACK_SPECULAR | \
536 MAT_BIT_BACK_SHININESS | \
537 MAT_BIT_BACK_INDEXES)
538
539 #define ALL_MATERIAL_BITS (FRONT_MATERIAL_BITS | BACK_MATERIAL_BITS)
540 /*@}*/
541
542
543 /**
544 * Material state.
545 */
546 struct gl_material
547 {
548 GLfloat Attrib[MAT_ATTRIB_MAX][4];
549 };
550
551
552 /**
553 * Light state flags.
554 */
555 /*@{*/
556 #define LIGHT_SPOT 0x1
557 #define LIGHT_LOCAL_VIEWER 0x2
558 #define LIGHT_POSITIONAL 0x4
559 #define LIGHT_NEED_VERTICES (LIGHT_POSITIONAL|LIGHT_LOCAL_VIEWER)
560 /*@}*/
561
562
563 /**
564 * Light source state.
565 */
566 struct gl_light
567 {
568 struct gl_light *next; /**< double linked list with sentinel */
569 struct gl_light *prev;
570
571 GLfloat Ambient[4]; /**< ambient color */
572 GLfloat Diffuse[4]; /**< diffuse color */
573 GLfloat Specular[4]; /**< specular color */
574 GLfloat EyePosition[4]; /**< position in eye coordinates */
575 GLfloat SpotDirection[4]; /**< spotlight direction in eye coordinates */
576 GLfloat SpotExponent;
577 GLfloat SpotCutoff; /**< in degrees */
578 GLfloat _CosCutoff; /**< = MAX(0, cos(SpotCutoff)) */
579 GLfloat ConstantAttenuation;
580 GLfloat LinearAttenuation;
581 GLfloat QuadraticAttenuation;
582 GLboolean Enabled; /**< On/off flag */
583
584 /**
585 * \name Derived fields
586 */
587 /*@{*/
588 GLbitfield _Flags; /**< Mask of LIGHT_x bits defined above */
589
590 GLfloat _Position[4]; /**< position in eye/obj coordinates */
591 GLfloat _VP_inf_norm[3]; /**< Norm direction to infinite light */
592 GLfloat _h_inf_norm[3]; /**< Norm( _VP_inf_norm + <0,0,1> ) */
593 GLfloat _NormSpotDirection[4]; /**< normalized spotlight direction */
594 GLfloat _VP_inf_spot_attenuation;
595
596 GLfloat _MatAmbient[2][3]; /**< material ambient * light ambient */
597 GLfloat _MatDiffuse[2][3]; /**< material diffuse * light diffuse */
598 GLfloat _MatSpecular[2][3]; /**< material spec * light specular */
599 /*@}*/
600 };
601
602
603 /**
604 * Light model state.
605 */
606 struct gl_lightmodel
607 {
608 GLfloat Ambient[4]; /**< ambient color */
609 GLboolean LocalViewer; /**< Local (or infinite) view point? */
610 GLboolean TwoSide; /**< Two (or one) sided lighting? */
611 GLenum ColorControl; /**< either GL_SINGLE_COLOR
612 * or GL_SEPARATE_SPECULAR_COLOR */
613 };
614
615
616 /**
617 * Accumulation buffer attribute group (GL_ACCUM_BUFFER_BIT)
618 */
619 struct gl_accum_attrib
620 {
621 GLfloat ClearColor[4]; /**< Accumulation buffer clear color */
622 };
623
624
625 /**
626 * Used for storing clear color, texture border color, etc.
627 * The float values are typically unclamped.
628 */
629 union gl_color_union
630 {
631 GLfloat f[4];
632 GLint i[4];
633 GLuint ui[4];
634 };
635
636
637 /**
638 * Color buffer attribute group (GL_COLOR_BUFFER_BIT).
639 */
640 struct gl_colorbuffer_attrib
641 {
642 GLuint ClearIndex; /**< Index for glClear */
643 union gl_color_union ClearColor; /**< Color for glClear, unclamped */
644 GLuint IndexMask; /**< Color index write mask */
645 GLubyte ColorMask[MAX_DRAW_BUFFERS][4]; /**< Each flag is 0xff or 0x0 */
646
647 GLenum DrawBuffer[MAX_DRAW_BUFFERS]; /**< Which buffer to draw into */
648
649 /**
650 * \name alpha testing
651 */
652 /*@{*/
653 GLboolean AlphaEnabled; /**< Alpha test enabled flag */
654 GLenum AlphaFunc; /**< Alpha test function */
655 GLfloat AlphaRefUnclamped;
656 GLclampf AlphaRef; /**< Alpha reference value */
657 /*@}*/
658
659 /**
660 * \name Blending
661 */
662 /*@{*/
663 GLbitfield BlendEnabled; /**< Per-buffer blend enable flags */
664
665 /* NOTE: this does _not_ depend on fragment clamping or any other clamping
666 * control, only on the fixed-pointness of the render target.
667 * The query does however depend on fragment color clamping.
668 */
669 GLfloat BlendColorUnclamped[4]; /**< Blending color */
670 GLfloat BlendColor[4]; /**< Blending color */
671
672 struct
673 {
674 GLenum SrcRGB; /**< RGB blend source term */
675 GLenum DstRGB; /**< RGB blend dest term */
676 GLenum SrcA; /**< Alpha blend source term */
677 GLenum DstA; /**< Alpha blend dest term */
678 GLenum EquationRGB; /**< GL_ADD, GL_SUBTRACT, etc. */
679 GLenum EquationA; /**< GL_ADD, GL_SUBTRACT, etc. */
680 /**
681 * Set if any blend factor uses SRC1. Computed at the time blend factors
682 * get set.
683 */
684 GLboolean _UsesDualSrc;
685 } Blend[MAX_DRAW_BUFFERS];
686 /** Are the blend func terms currently different for each buffer/target? */
687 GLboolean _BlendFuncPerBuffer;
688 /** Are the blend equations currently different for each buffer/target? */
689 GLboolean _BlendEquationPerBuffer;
690 /*@}*/
691
692 /**
693 * \name Logic op
694 */
695 /*@{*/
696 GLboolean IndexLogicOpEnabled; /**< Color index logic op enabled flag */
697 GLboolean ColorLogicOpEnabled; /**< RGBA logic op enabled flag */
698 GLenum LogicOp; /**< Logic operator */
699
700 /*@}*/
701
702 GLboolean DitherFlag; /**< Dither enable flag */
703
704 GLboolean _ClampFragmentColor; /** < with GL_FIXED_ONLY_ARB resolved */
705 GLenum ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */
706 GLenum ClampReadColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */
707
708 GLboolean sRGBEnabled; /**< Framebuffer sRGB blending/updating requested */
709 };
710
711
712 /**
713 * Current attribute group (GL_CURRENT_BIT).
714 */
715 struct gl_current_attrib
716 {
717 /**
718 * \name Current vertex attributes.
719 * \note Values are valid only after FLUSH_VERTICES has been called.
720 * \note Index and Edgeflag current values are stored as floats in the
721 * SIX and SEVEN attribute slots.
722 */
723 GLfloat Attrib[VERT_ATTRIB_MAX][4]; /**< Position, color, texcoords, etc */
724
725 /**
726 * \name Current raster position attributes (always valid).
727 * \note This set of attributes is very similar to the SWvertex struct.
728 */
729 /*@{*/
730 GLfloat RasterPos[4];
731 GLfloat RasterDistance;
732 GLfloat RasterColor[4];
733 GLfloat RasterSecondaryColor[4];
734 GLfloat RasterTexCoords[MAX_TEXTURE_COORD_UNITS][4];
735 GLboolean RasterPosValid;
736 /*@}*/
737 };
738
739
740 /**
741 * Depth buffer attribute group (GL_DEPTH_BUFFER_BIT).
742 */
743 struct gl_depthbuffer_attrib
744 {
745 GLenum Func; /**< Function for depth buffer compare */
746 GLclampd Clear; /**< Value to clear depth buffer to */
747 GLboolean Test; /**< Depth buffering enabled flag */
748 GLboolean Mask; /**< Depth buffer writable? */
749 GLboolean BoundsTest; /**< GL_EXT_depth_bounds_test */
750 GLfloat BoundsMin, BoundsMax;/**< GL_EXT_depth_bounds_test */
751 };
752
753
754 /**
755 * Evaluator attribute group (GL_EVAL_BIT).
756 */
757 struct gl_eval_attrib
758 {
759 /**
760 * \name Enable bits
761 */
762 /*@{*/
763 GLboolean Map1Color4;
764 GLboolean Map1Index;
765 GLboolean Map1Normal;
766 GLboolean Map1TextureCoord1;
767 GLboolean Map1TextureCoord2;
768 GLboolean Map1TextureCoord3;
769 GLboolean Map1TextureCoord4;
770 GLboolean Map1Vertex3;
771 GLboolean Map1Vertex4;
772 GLboolean Map2Color4;
773 GLboolean Map2Index;
774 GLboolean Map2Normal;
775 GLboolean Map2TextureCoord1;
776 GLboolean Map2TextureCoord2;
777 GLboolean Map2TextureCoord3;
778 GLboolean Map2TextureCoord4;
779 GLboolean Map2Vertex3;
780 GLboolean Map2Vertex4;
781 GLboolean AutoNormal;
782 /*@}*/
783
784 /**
785 * \name Map Grid endpoints and divisions and calculated du values
786 */
787 /*@{*/
788 GLint MapGrid1un;
789 GLfloat MapGrid1u1, MapGrid1u2, MapGrid1du;
790 GLint MapGrid2un, MapGrid2vn;
791 GLfloat MapGrid2u1, MapGrid2u2, MapGrid2du;
792 GLfloat MapGrid2v1, MapGrid2v2, MapGrid2dv;
793 /*@}*/
794 };
795
796
797 /**
798 * Fog attribute group (GL_FOG_BIT).
799 */
800 struct gl_fog_attrib
801 {
802 GLboolean Enabled; /**< Fog enabled flag */
803 GLboolean ColorSumEnabled;
804 GLfloat ColorUnclamped[4]; /**< Fog color */
805 GLfloat Color[4]; /**< Fog color */
806 GLfloat Density; /**< Density >= 0.0 */
807 GLfloat Start; /**< Start distance in eye coords */
808 GLfloat End; /**< End distance in eye coords */
809 GLfloat Index; /**< Fog index */
810 GLenum Mode; /**< Fog mode */
811 GLenum FogCoordinateSource; /**< GL_EXT_fog_coord */
812 GLfloat _Scale; /**< (End == Start) ? 1.0 : 1.0 / (End - Start) */
813 GLenum FogDistanceMode; /**< GL_NV_fog_distance */
814 };
815
816
817 /**
818 * Hint attribute group (GL_HINT_BIT).
819 *
820 * Values are always one of GL_FASTEST, GL_NICEST, or GL_DONT_CARE.
821 */
822 struct gl_hint_attrib
823 {
824 GLenum PerspectiveCorrection;
825 GLenum PointSmooth;
826 GLenum LineSmooth;
827 GLenum PolygonSmooth;
828 GLenum Fog;
829 GLenum TextureCompression; /**< GL_ARB_texture_compression */
830 GLenum GenerateMipmap; /**< GL_SGIS_generate_mipmap */
831 GLenum FragmentShaderDerivative; /**< GL_ARB_fragment_shader */
832 };
833
834
835 /**
836 * Lighting attribute group (GL_LIGHT_BIT).
837 */
838 struct gl_light_attrib
839 {
840 struct gl_light Light[MAX_LIGHTS]; /**< Array of light sources */
841 struct gl_lightmodel Model; /**< Lighting model */
842
843 /**
844 * Front and back material values.
845 * Note: must call FLUSH_VERTICES() before using.
846 */
847 struct gl_material Material;
848
849 GLboolean Enabled; /**< Lighting enabled flag */
850 GLboolean ColorMaterialEnabled;
851
852 GLenum ShadeModel; /**< GL_FLAT or GL_SMOOTH */
853 GLenum ProvokingVertex; /**< GL_EXT_provoking_vertex */
854 GLenum ColorMaterialFace; /**< GL_FRONT, BACK or FRONT_AND_BACK */
855 GLenum ColorMaterialMode; /**< GL_AMBIENT, GL_DIFFUSE, etc */
856 GLbitfield _ColorMaterialBitmask; /**< bitmask formed from Face and Mode */
857
858
859 GLboolean _ClampVertexColor;
860 GLenum ClampVertexColor; /**< GL_TRUE, GL_FALSE, GL_FIXED_ONLY */
861
862 /**
863 * Derived state for optimizations:
864 */
865 /*@{*/
866 GLboolean _NeedEyeCoords;
867 GLboolean _NeedVertices; /**< Use fast shader? */
868 struct gl_light EnabledList; /**< List sentinel */
869
870 GLfloat _BaseColor[2][3];
871 /*@}*/
872 };
873
874
875 /**
876 * Line attribute group (GL_LINE_BIT).
877 */
878 struct gl_line_attrib
879 {
880 GLboolean SmoothFlag; /**< GL_LINE_SMOOTH enabled? */
881 GLboolean StippleFlag; /**< GL_LINE_STIPPLE enabled? */
882 GLushort StipplePattern; /**< Stipple pattern */
883 GLint StippleFactor; /**< Stipple repeat factor */
884 GLfloat Width; /**< Line width */
885 };
886
887
888 /**
889 * Display list attribute group (GL_LIST_BIT).
890 */
891 struct gl_list_attrib
892 {
893 GLuint ListBase;
894 };
895
896
897 /**
898 * Multisample attribute group (GL_MULTISAMPLE_BIT).
899 */
900 struct gl_multisample_attrib
901 {
902 GLboolean Enabled;
903 GLboolean _Enabled; /**< true if Enabled and multisample buffer */
904 GLboolean SampleAlphaToCoverage;
905 GLboolean SampleAlphaToOne;
906 GLboolean SampleCoverage;
907 GLboolean SampleCoverageInvert;
908 GLboolean SampleShading;
909
910 /* ARB_texture_multisample / GL3.2 additions */
911 GLboolean SampleMask;
912
913 GLfloat SampleCoverageValue;
914 GLfloat MinSampleShadingValue;
915
916 /** The GL spec defines this as an array but >32x MSAA is madness */
917 GLbitfield SampleMaskValue;
918 };
919
920
921 /**
922 * A pixelmap (see glPixelMap)
923 */
924 struct gl_pixelmap
925 {
926 GLint Size;
927 GLfloat Map[MAX_PIXEL_MAP_TABLE];
928 };
929
930
931 /**
932 * Collection of all pixelmaps
933 */
934 struct gl_pixelmaps
935 {
936 struct gl_pixelmap RtoR; /**< i.e. GL_PIXEL_MAP_R_TO_R */
937 struct gl_pixelmap GtoG;
938 struct gl_pixelmap BtoB;
939 struct gl_pixelmap AtoA;
940 struct gl_pixelmap ItoR;
941 struct gl_pixelmap ItoG;
942 struct gl_pixelmap ItoB;
943 struct gl_pixelmap ItoA;
944 struct gl_pixelmap ItoI;
945 struct gl_pixelmap StoS;
946 };
947
948
949 /**
950 * Pixel attribute group (GL_PIXEL_MODE_BIT).
951 */
952 struct gl_pixel_attrib
953 {
954 GLenum ReadBuffer; /**< source buffer for glRead/CopyPixels() */
955
956 /*--- Begin Pixel Transfer State ---*/
957 /* Fields are in the order in which they're applied... */
958
959 /** Scale & Bias (index shift, offset) */
960 /*@{*/
961 GLfloat RedBias, RedScale;
962 GLfloat GreenBias, GreenScale;
963 GLfloat BlueBias, BlueScale;
964 GLfloat AlphaBias, AlphaScale;
965 GLfloat DepthBias, DepthScale;
966 GLint IndexShift, IndexOffset;
967 /*@}*/
968
969 /* Pixel Maps */
970 /* Note: actual pixel maps are not part of this attrib group */
971 GLboolean MapColorFlag;
972 GLboolean MapStencilFlag;
973
974 /*--- End Pixel Transfer State ---*/
975
976 /** glPixelZoom */
977 GLfloat ZoomX, ZoomY;
978 };
979
980
981 /**
982 * Point attribute group (GL_POINT_BIT).
983 */
984 struct gl_point_attrib
985 {
986 GLfloat Size; /**< User-specified point size */
987 GLfloat Params[3]; /**< GL_EXT_point_parameters */
988 GLfloat MinSize, MaxSize; /**< GL_EXT_point_parameters */
989 GLfloat Threshold; /**< GL_EXT_point_parameters */
990 GLboolean SmoothFlag; /**< True if GL_POINT_SMOOTH is enabled */
991 GLboolean _Attenuated; /**< True if Params != [1, 0, 0] */
992 GLboolean PointSprite; /**< GL_NV/ARB_point_sprite */
993 GLboolean CoordReplace[MAX_TEXTURE_COORD_UNITS]; /**< GL_ARB_point_sprite*/
994 GLenum SpriteRMode; /**< GL_NV_point_sprite (only!) */
995 GLenum SpriteOrigin; /**< GL_ARB_point_sprite */
996 };
997
998
999 /**
1000 * Polygon attribute group (GL_POLYGON_BIT).
1001 */
1002 struct gl_polygon_attrib
1003 {
1004 GLenum FrontFace; /**< Either GL_CW or GL_CCW */
1005 GLenum FrontMode; /**< Either GL_POINT, GL_LINE or GL_FILL */
1006 GLenum BackMode; /**< Either GL_POINT, GL_LINE or GL_FILL */
1007 GLboolean _FrontBit; /**< 0=GL_CCW, 1=GL_CW */
1008 GLboolean CullFlag; /**< Culling on/off flag */
1009 GLboolean SmoothFlag; /**< True if GL_POLYGON_SMOOTH is enabled */
1010 GLboolean StippleFlag; /**< True if GL_POLYGON_STIPPLE is enabled */
1011 GLenum CullFaceMode; /**< Culling mode GL_FRONT or GL_BACK */
1012 GLfloat OffsetFactor; /**< Polygon offset factor, from user */
1013 GLfloat OffsetUnits; /**< Polygon offset units, from user */
1014 GLfloat OffsetClamp; /**< Polygon offset clamp, from user */
1015 GLboolean OffsetPoint; /**< Offset in GL_POINT mode */
1016 GLboolean OffsetLine; /**< Offset in GL_LINE mode */
1017 GLboolean OffsetFill; /**< Offset in GL_FILL mode */
1018 };
1019
1020
1021 /**
1022 * Scissor attributes (GL_SCISSOR_BIT).
1023 */
1024 struct gl_scissor_rect
1025 {
1026 GLint X, Y; /**< Lower left corner of box */
1027 GLsizei Width, Height; /**< Size of box */
1028 };
1029 struct gl_scissor_attrib
1030 {
1031 GLbitfield EnableFlags; /**< Scissor test enabled? */
1032 struct gl_scissor_rect ScissorArray[MAX_VIEWPORTS];
1033 };
1034
1035
1036 /**
1037 * Stencil attribute group (GL_STENCIL_BUFFER_BIT).
1038 *
1039 * Three sets of stencil data are tracked so that OpenGL 2.0,
1040 * GL_EXT_stencil_two_side, and GL_ATI_separate_stencil can all be supported
1041 * simultaneously. In each of the stencil state arrays, element 0 corresponds
1042 * to GL_FRONT. Element 1 corresponds to the OpenGL 2.0 /
1043 * GL_ATI_separate_stencil GL_BACK state. Element 2 corresponds to the
1044 * GL_EXT_stencil_two_side GL_BACK state.
1045 *
1046 * The derived value \c _BackFace is either 1 or 2 depending on whether or
1047 * not GL_STENCIL_TEST_TWO_SIDE_EXT is enabled.
1048 *
1049 * The derived value \c _TestTwoSide is set when the front-face and back-face
1050 * stencil state are different.
1051 */
1052 struct gl_stencil_attrib
1053 {
1054 GLboolean Enabled; /**< Enabled flag */
1055 GLboolean TestTwoSide; /**< GL_EXT_stencil_two_side */
1056 GLubyte ActiveFace; /**< GL_EXT_stencil_two_side (0 or 2) */
1057 GLboolean _Enabled; /**< Enabled and stencil buffer present */
1058 GLboolean _WriteEnabled; /**< _Enabled and non-zero writemasks */
1059 GLboolean _TestTwoSide;
1060 GLubyte _BackFace; /**< Current back stencil state (1 or 2) */
1061 GLenum Function[3]; /**< Stencil function */
1062 GLenum FailFunc[3]; /**< Fail function */
1063 GLenum ZPassFunc[3]; /**< Depth buffer pass function */
1064 GLenum ZFailFunc[3]; /**< Depth buffer fail function */
1065 GLint Ref[3]; /**< Reference value */
1066 GLuint ValueMask[3]; /**< Value mask */
1067 GLuint WriteMask[3]; /**< Write mask */
1068 GLuint Clear; /**< Clear value */
1069 };
1070
1071
1072 /**
1073 * An index for each type of texture object. These correspond to the GL
1074 * texture target enums, such as GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP, etc.
1075 * Note: the order is from highest priority to lowest priority.
1076 */
1077 typedef enum
1078 {
1079 TEXTURE_2D_MULTISAMPLE_INDEX,
1080 TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX,
1081 TEXTURE_CUBE_ARRAY_INDEX,
1082 TEXTURE_BUFFER_INDEX,
1083 TEXTURE_2D_ARRAY_INDEX,
1084 TEXTURE_1D_ARRAY_INDEX,
1085 TEXTURE_EXTERNAL_INDEX,
1086 TEXTURE_CUBE_INDEX,
1087 TEXTURE_3D_INDEX,
1088 TEXTURE_RECT_INDEX,
1089 TEXTURE_2D_INDEX,
1090 TEXTURE_1D_INDEX,
1091 NUM_TEXTURE_TARGETS
1092 } gl_texture_index;
1093
1094
1095 /**
1096 * Bit flags for each type of texture object
1097 */
1098 /*@{*/
1099 #define TEXTURE_2D_MULTISAMPLE_BIT (1 << TEXTURE_2D_MULTISAMPLE_INDEX)
1100 #define TEXTURE_2D_MULTISAMPLE_ARRAY_BIT (1 << TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX)
1101 #define TEXTURE_CUBE_ARRAY_BIT (1 << TEXTURE_CUBE_ARRAY_INDEX)
1102 #define TEXTURE_BUFFER_BIT (1 << TEXTURE_BUFFER_INDEX)
1103 #define TEXTURE_2D_ARRAY_BIT (1 << TEXTURE_2D_ARRAY_INDEX)
1104 #define TEXTURE_1D_ARRAY_BIT (1 << TEXTURE_1D_ARRAY_INDEX)
1105 #define TEXTURE_EXTERNAL_BIT (1 << TEXTURE_EXTERNAL_INDEX)
1106 #define TEXTURE_CUBE_BIT (1 << TEXTURE_CUBE_INDEX)
1107 #define TEXTURE_3D_BIT (1 << TEXTURE_3D_INDEX)
1108 #define TEXTURE_RECT_BIT (1 << TEXTURE_RECT_INDEX)
1109 #define TEXTURE_2D_BIT (1 << TEXTURE_2D_INDEX)
1110 #define TEXTURE_1D_BIT (1 << TEXTURE_1D_INDEX)
1111 /*@}*/
1112
1113
1114 /**
1115 * Texture image state. Drivers will typically create a subclass of this
1116 * with extra fields for memory buffers, etc.
1117 */
1118 struct gl_texture_image
1119 {
1120 GLint InternalFormat; /**< Internal format as given by the user */
1121 GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_ALPHA,
1122 * GL_LUMINANCE, GL_LUMINANCE_ALPHA,
1123 * GL_INTENSITY, GL_DEPTH_COMPONENT or
1124 * GL_DEPTH_STENCIL_EXT only. Used for
1125 * choosing TexEnv arithmetic.
1126 */
1127 mesa_format TexFormat; /**< The actual texture memory format */
1128
1129 GLuint Border; /**< 0 or 1 */
1130 GLuint Width; /**< = 2^WidthLog2 + 2*Border */
1131 GLuint Height; /**< = 2^HeightLog2 + 2*Border */
1132 GLuint Depth; /**< = 2^DepthLog2 + 2*Border */
1133 GLuint Width2; /**< = Width - 2*Border */
1134 GLuint Height2; /**< = Height - 2*Border */
1135 GLuint Depth2; /**< = Depth - 2*Border */
1136 GLuint WidthLog2; /**< = log2(Width2) */
1137 GLuint HeightLog2; /**< = log2(Height2) */
1138 GLuint DepthLog2; /**< = log2(Depth2) */
1139 GLuint MaxNumLevels; /**< = maximum possible number of mipmap
1140 levels, computed from the dimensions */
1141
1142 struct gl_texture_object *TexObject; /**< Pointer back to parent object */
1143 GLuint Level; /**< Which mipmap level am I? */
1144 /** Cube map face: index into gl_texture_object::Image[] array */
1145 GLuint Face;
1146
1147 /** GL_ARB_texture_multisample */
1148 GLuint NumSamples; /**< Sample count, or 0 for non-multisample */
1149 GLboolean FixedSampleLocations; /**< Same sample locations for all pixels? */
1150 };
1151
1152
1153 /**
1154 * Indexes for cube map faces.
1155 */
1156 typedef enum
1157 {
1158 FACE_POS_X = 0,
1159 FACE_NEG_X = 1,
1160 FACE_POS_Y = 2,
1161 FACE_NEG_Y = 3,
1162 FACE_POS_Z = 4,
1163 FACE_NEG_Z = 5,
1164 MAX_FACES = 6
1165 } gl_face_index;
1166
1167
1168 /**
1169 * Sampler object state. These objects are new with GL_ARB_sampler_objects
1170 * and OpenGL 3.3. Legacy texture objects also contain a sampler object.
1171 */
1172 struct gl_sampler_object
1173 {
1174 GLuint Name;
1175 GLint RefCount;
1176 GLchar *Label; /**< GL_KHR_debug */
1177
1178 GLenum WrapS; /**< S-axis texture image wrap mode */
1179 GLenum WrapT; /**< T-axis texture image wrap mode */
1180 GLenum WrapR; /**< R-axis texture image wrap mode */
1181 GLenum MinFilter; /**< minification filter */
1182 GLenum MagFilter; /**< magnification filter */
1183 union gl_color_union BorderColor; /**< Interpreted according to texture format */
1184 GLfloat MinLod; /**< min lambda, OpenGL 1.2 */
1185 GLfloat MaxLod; /**< max lambda, OpenGL 1.2 */
1186 GLfloat LodBias; /**< OpenGL 1.4 */
1187 GLfloat MaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */
1188 GLenum CompareMode; /**< GL_ARB_shadow */
1189 GLenum CompareFunc; /**< GL_ARB_shadow */
1190 GLenum sRGBDecode; /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */
1191 GLboolean CubeMapSeamless; /**< GL_AMD_seamless_cubemap_per_texture */
1192 };
1193
1194
1195 /**
1196 * Texture object state. Contains the array of mipmap images, border color,
1197 * wrap modes, filter modes, and shadow/texcompare state.
1198 */
1199 struct gl_texture_object
1200 {
1201 mtx_t Mutex; /**< for thread safety */
1202 GLint RefCount; /**< reference count */
1203 GLuint Name; /**< the user-visible texture object ID */
1204 GLchar *Label; /**< GL_KHR_debug */
1205 GLenum Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */
1206 gl_texture_index TargetIndex; /**< The gl_texture_unit::CurrentTex index.
1207 Only valid when Target is valid. */
1208
1209 struct gl_sampler_object Sampler;
1210
1211 GLenum DepthMode; /**< GL_ARB_depth_texture */
1212 bool StencilSampling; /**< Should we sample stencil instead of depth? */
1213
1214 GLfloat Priority; /**< in [0,1] */
1215 GLint BaseLevel; /**< min mipmap level, OpenGL 1.2 */
1216 GLint MaxLevel; /**< max mipmap level, OpenGL 1.2 */
1217 GLint ImmutableLevels; /**< ES 3.0 / ARB_texture_view */
1218 GLint _MaxLevel; /**< actual max mipmap level (q in the spec) */
1219 GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - p in spec) */
1220 GLint CropRect[4]; /**< GL_OES_draw_texture */
1221 GLenum Swizzle[4]; /**< GL_EXT_texture_swizzle */
1222 GLuint _Swizzle; /**< same as Swizzle, but SWIZZLE_* format */
1223 GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */
1224 GLboolean _BaseComplete; /**< Is the base texture level valid? */
1225 GLboolean _MipmapComplete; /**< Is the whole mipmap valid? */
1226 GLboolean _IsIntegerFormat; /**< Does the texture store integer values? */
1227 GLboolean _RenderToTexture; /**< Any rendering to this texture? */
1228 GLboolean Purgeable; /**< Is the buffer purgeable under memory
1229 pressure? */
1230 GLboolean Immutable; /**< GL_ARB_texture_storage */
1231 GLboolean _IsFloat; /**< GL_OES_float_texture */
1232 GLboolean _IsHalfFloat; /**< GL_OES_half_float_texture */
1233
1234 GLuint MinLevel; /**< GL_ARB_texture_view */
1235 GLuint MinLayer; /**< GL_ARB_texture_view */
1236 GLuint NumLevels; /**< GL_ARB_texture_view */
1237 GLuint NumLayers; /**< GL_ARB_texture_view */
1238
1239 /** Actual texture images, indexed by [cube face] and [mipmap level] */
1240 struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS];
1241
1242 /** GL_ARB_texture_buffer_object */
1243 struct gl_buffer_object *BufferObject;
1244 GLenum BufferObjectFormat;
1245 /** Equivalent Mesa format for BufferObjectFormat. */
1246 mesa_format _BufferObjectFormat;
1247 /** GL_ARB_texture_buffer_range */
1248 GLintptr BufferOffset;
1249 GLsizeiptr BufferSize; /**< if this is -1, use BufferObject->Size instead */
1250
1251 /** GL_OES_EGL_image_external */
1252 GLint RequiredTextureImageUnits;
1253
1254 /** GL_ARB_shader_image_load_store */
1255 GLenum ImageFormatCompatibilityType;
1256 };
1257
1258
1259 /** Up to four combiner sources are possible with GL_NV_texture_env_combine4 */
1260 #define MAX_COMBINER_TERMS 4
1261
1262
1263 /**
1264 * Texture combine environment state.
1265 */
1266 struct gl_tex_env_combine_state
1267 {
1268 GLenum ModeRGB; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */
1269 GLenum ModeA; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */
1270 /** Source terms: GL_PRIMARY_COLOR, GL_TEXTURE, etc */
1271 GLenum SourceRGB[MAX_COMBINER_TERMS];
1272 GLenum SourceA[MAX_COMBINER_TERMS];
1273 /** Source operands: GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, etc */
1274 GLenum OperandRGB[MAX_COMBINER_TERMS];
1275 GLenum OperandA[MAX_COMBINER_TERMS];
1276 GLuint ScaleShiftRGB; /**< 0, 1 or 2 */
1277 GLuint ScaleShiftA; /**< 0, 1 or 2 */
1278 GLuint _NumArgsRGB; /**< Number of inputs used for the RGB combiner */
1279 GLuint _NumArgsA; /**< Number of inputs used for the A combiner */
1280 };
1281
1282
1283 /**
1284 * TexGenEnabled flags.
1285 */
1286 /*@{*/
1287 #define S_BIT 1
1288 #define T_BIT 2
1289 #define R_BIT 4
1290 #define Q_BIT 8
1291 #define STR_BITS (S_BIT | T_BIT | R_BIT)
1292 /*@}*/
1293
1294
1295 /**
1296 * Bit flag versions of the corresponding GL_ constants.
1297 */
1298 /*@{*/
1299 #define TEXGEN_SPHERE_MAP 0x1
1300 #define TEXGEN_OBJ_LINEAR 0x2
1301 #define TEXGEN_EYE_LINEAR 0x4
1302 #define TEXGEN_REFLECTION_MAP_NV 0x8
1303 #define TEXGEN_NORMAL_MAP_NV 0x10
1304
1305 #define TEXGEN_NEED_NORMALS (TEXGEN_SPHERE_MAP | \
1306 TEXGEN_REFLECTION_MAP_NV | \
1307 TEXGEN_NORMAL_MAP_NV)
1308 #define TEXGEN_NEED_EYE_COORD (TEXGEN_SPHERE_MAP | \
1309 TEXGEN_REFLECTION_MAP_NV | \
1310 TEXGEN_NORMAL_MAP_NV | \
1311 TEXGEN_EYE_LINEAR)
1312 /*@}*/
1313
1314
1315
1316 /** Tex-gen enabled for texture unit? */
1317 #define ENABLE_TEXGEN(unit) (1 << (unit))
1318
1319 /** Non-identity texture matrix for texture unit? */
1320 #define ENABLE_TEXMAT(unit) (1 << (unit))
1321
1322
1323 /**
1324 * Texture coord generation state.
1325 */
1326 struct gl_texgen
1327 {
1328 GLenum Mode; /**< GL_EYE_LINEAR, GL_SPHERE_MAP, etc */
1329 GLbitfield _ModeBit; /**< TEXGEN_x bit corresponding to Mode */
1330 GLfloat ObjectPlane[4];
1331 GLfloat EyePlane[4];
1332 };
1333
1334
1335 /**
1336 * Texture unit state. Contains enable flags, texture environment/function/
1337 * combiners, texgen state, and pointers to current texture objects.
1338 */
1339 struct gl_texture_unit
1340 {
1341 GLbitfield Enabled; /**< bitmask of TEXTURE_*_BIT flags */
1342
1343 GLenum EnvMode; /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */
1344 GLclampf EnvColor[4];
1345 GLfloat EnvColorUnclamped[4];
1346
1347 struct gl_texgen GenS;
1348 struct gl_texgen GenT;
1349 struct gl_texgen GenR;
1350 struct gl_texgen GenQ;
1351 GLbitfield TexGenEnabled; /**< Bitwise-OR of [STRQ]_BIT values */
1352 GLbitfield _GenFlags; /**< Bitwise-OR of Gen[STRQ]._ModeBit */
1353
1354 GLfloat LodBias; /**< for biasing mipmap levels */
1355
1356 /** Texture targets that have a non-default texture bound */
1357 GLbitfield _BoundTextures;
1358
1359 /** Current sampler object (GL_ARB_sampler_objects) */
1360 struct gl_sampler_object *Sampler;
1361
1362 /**
1363 * \name GL_EXT_texture_env_combine
1364 */
1365 struct gl_tex_env_combine_state Combine;
1366
1367 /**
1368 * Derived state based on \c EnvMode and the \c BaseFormat of the
1369 * currently enabled texture.
1370 */
1371 struct gl_tex_env_combine_state _EnvMode;
1372
1373 /**
1374 * Currently enabled combiner state. This will point to either
1375 * \c Combine or \c _EnvMode.
1376 */
1377 struct gl_tex_env_combine_state *_CurrentCombine;
1378
1379 /** Current texture object pointers */
1380 struct gl_texture_object *CurrentTex[NUM_TEXTURE_TARGETS];
1381
1382 /** Points to highest priority, complete and enabled texture object */
1383 struct gl_texture_object *_Current;
1384
1385 };
1386
1387
1388 /**
1389 * Texture attribute group (GL_TEXTURE_BIT).
1390 */
1391 struct gl_texture_attrib
1392 {
1393 GLuint CurrentUnit; /**< GL_ACTIVE_TEXTURE */
1394
1395 /** GL_ARB_seamless_cubemap */
1396 GLboolean CubeMapSeamless;
1397
1398 struct gl_texture_object *ProxyTex[NUM_TEXTURE_TARGETS];
1399
1400 /** GL_ARB_texture_buffer_object */
1401 struct gl_buffer_object *BufferObject;
1402
1403 /** Texture coord units/sets used for fragment texturing */
1404 GLbitfield _EnabledCoordUnits;
1405
1406 /** Texture coord units that have texgen enabled */
1407 GLbitfield _TexGenEnabled;
1408
1409 /** Texture coord units that have non-identity matrices */
1410 GLbitfield _TexMatEnabled;
1411
1412 /** Bitwise-OR of all Texture.Unit[i]._GenFlags */
1413 GLbitfield _GenFlags;
1414
1415 /** Largest index of a texture unit with _Current != NULL. */
1416 GLint _MaxEnabledTexImageUnit;
1417
1418 /** Largest index + 1 of texture units that have had any CurrentTex set. */
1419 GLint NumCurrentTexUsed;
1420
1421 struct gl_texture_unit Unit[MAX_COMBINED_TEXTURE_IMAGE_UNITS];
1422 };
1423
1424
1425 /**
1426 * Data structure representing a single clip plane (e.g. one of the elements
1427 * of the ctx->Transform.EyeUserPlane or ctx->Transform._ClipUserPlane array).
1428 */
1429 typedef GLfloat gl_clip_plane[4];
1430
1431
1432 /**
1433 * Transformation attribute group (GL_TRANSFORM_BIT).
1434 */
1435 struct gl_transform_attrib
1436 {
1437 GLenum MatrixMode; /**< Matrix mode */
1438 gl_clip_plane EyeUserPlane[MAX_CLIP_PLANES]; /**< User clip planes */
1439 gl_clip_plane _ClipUserPlane[MAX_CLIP_PLANES]; /**< derived */
1440 GLbitfield ClipPlanesEnabled; /**< on/off bitmask */
1441 GLboolean Normalize; /**< Normalize all normals? */
1442 GLboolean RescaleNormals; /**< GL_EXT_rescale_normal */
1443 GLboolean RasterPositionUnclipped; /**< GL_IBM_rasterpos_clip */
1444 GLboolean DepthClamp; /**< GL_ARB_depth_clamp */
1445 /** GL_ARB_clip_control */
1446 GLenum ClipOrigin; /**< GL_LOWER_LEFT or GL_UPPER_LEFT */
1447 GLenum ClipDepthMode; /**< GL_NEGATIVE_ONE_TO_ONE or GL_ZERO_TO_ONE */
1448 };
1449
1450
1451 /**
1452 * Viewport attribute group (GL_VIEWPORT_BIT).
1453 */
1454 struct gl_viewport_attrib
1455 {
1456 GLfloat X, Y; /**< position */
1457 GLfloat Width, Height; /**< size */
1458 GLdouble Near, Far; /**< Depth buffer range */
1459 GLmatrix _WindowMap; /**< Mapping transformation as a matrix. */
1460 };
1461
1462
1463 typedef enum {
1464 MAP_USER,
1465 MAP_INTERNAL,
1466
1467 MAP_COUNT
1468 } gl_map_buffer_index;
1469
1470
1471 /**
1472 * Fields describing a mapped buffer range.
1473 */
1474 struct gl_buffer_mapping {
1475 GLbitfield AccessFlags; /**< Mask of GL_MAP_x_BIT flags */
1476 GLvoid *Pointer; /**< User-space address of mapping */
1477 GLintptr Offset; /**< Mapped offset */
1478 GLsizeiptr Length; /**< Mapped length */
1479 };
1480
1481
1482 /**
1483 * Usages we've seen for a buffer object.
1484 */
1485 typedef enum {
1486 USAGE_UNIFORM_BUFFER = 0x1,
1487 USAGE_TEXTURE_BUFFER = 0x2,
1488 USAGE_ATOMIC_COUNTER_BUFFER = 0x4,
1489 } gl_buffer_usage;
1490
1491
1492 /**
1493 * GL_ARB_vertex/pixel_buffer_object buffer object
1494 */
1495 struct gl_buffer_object
1496 {
1497 mtx_t Mutex;
1498 GLint RefCount;
1499 GLuint Name;
1500 GLchar *Label; /**< GL_KHR_debug */
1501 GLenum Usage; /**< GL_STREAM_DRAW_ARB, GL_STREAM_READ_ARB, etc. */
1502 GLbitfield StorageFlags; /**< GL_MAP_PERSISTENT_BIT, etc. */
1503 GLsizeiptrARB Size; /**< Size of buffer storage in bytes */
1504 GLubyte *Data; /**< Location of storage either in RAM or VRAM. */
1505 GLboolean DeletePending; /**< true if buffer object is removed from the hash */
1506 GLboolean Written; /**< Ever written to? (for debugging) */
1507 GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */
1508 GLboolean Immutable; /**< GL_ARB_buffer_storage */
1509 gl_buffer_usage UsageHistory; /**< How has this buffer been used so far? */
1510
1511 struct gl_buffer_mapping Mappings[MAP_COUNT];
1512 };
1513
1514
1515 /**
1516 * Client pixel packing/unpacking attributes
1517 */
1518 struct gl_pixelstore_attrib
1519 {
1520 GLint Alignment;
1521 GLint RowLength;
1522 GLint SkipPixels;
1523 GLint SkipRows;
1524 GLint ImageHeight;
1525 GLint SkipImages;
1526 GLboolean SwapBytes;
1527 GLboolean LsbFirst;
1528 GLboolean Invert; /**< GL_MESA_pack_invert */
1529 GLint CompressedBlockWidth; /**< GL_ARB_compressed_texture_pixel_storage */
1530 GLint CompressedBlockHeight;
1531 GLint CompressedBlockDepth;
1532 GLint CompressedBlockSize;
1533 struct gl_buffer_object *BufferObj; /**< GL_ARB_pixel_buffer_object */
1534 };
1535
1536
1537 /**
1538 * Client vertex array attributes
1539 */
1540 struct gl_client_array
1541 {
1542 GLint Size; /**< components per element (1,2,3,4) */
1543 GLenum Type; /**< datatype: GL_FLOAT, GL_INT, etc */
1544 GLenum Format; /**< default: GL_RGBA, but may be GL_BGRA */
1545 GLsizei Stride; /**< user-specified stride */
1546 GLsizei StrideB; /**< actual stride in bytes */
1547 GLuint _ElementSize; /**< size of each element in bytes */
1548 const GLubyte *Ptr; /**< Points to array data */
1549 GLboolean Enabled; /**< Enabled flag is a boolean */
1550 GLboolean Normalized; /**< GL_ARB_vertex_program */
1551 GLboolean Integer; /**< Integer-valued? */
1552 GLuint InstanceDivisor; /**< GL_ARB_instanced_arrays */
1553
1554 struct gl_buffer_object *BufferObj;/**< GL_ARB_vertex_buffer_object */
1555 };
1556
1557
1558 /**
1559 * Vertex attribute array as seen by the client.
1560 *
1561 * Contains the size, type, format and normalization flag,
1562 * along with the index of a vertex buffer binding point.
1563 *
1564 * Note that the Stride field corresponds to VERTEX_ATTRIB_ARRAY_STRIDE
1565 * and is only present for backwards compatibility reasons.
1566 * Rendering always uses VERTEX_BINDING_STRIDE.
1567 * The gl*Pointer() functions will set VERTEX_ATTRIB_ARRAY_STRIDE
1568 * and VERTEX_BINDING_STRIDE to the same value, while
1569 * glBindVertexBuffer() will only set VERTEX_BINDING_STRIDE.
1570 */
1571 struct gl_vertex_attrib_array
1572 {
1573 GLint Size; /**< Components per element (1,2,3,4) */
1574 GLenum Type; /**< Datatype: GL_FLOAT, GL_INT, etc */
1575 GLenum Format; /**< Default: GL_RGBA, but may be GL_BGRA */
1576 GLsizei Stride; /**< Stride as specified with gl*Pointer() */
1577 const GLubyte *Ptr; /**< Points to client array data. Not used when a VBO is bound */
1578 GLintptr RelativeOffset; /**< Offset of the first element relative to the binding offset */
1579 GLboolean Enabled; /**< Whether the array is enabled */
1580 GLboolean Normalized; /**< Fixed-point values are normalized when converted to floats */
1581 GLboolean Integer; /**< Fixed-point values are not converted to floats */
1582 GLuint _ElementSize; /**< Size of each element in bytes */
1583 GLuint VertexBinding; /**< Vertex buffer binding */
1584 };
1585
1586
1587 /**
1588 * This describes the buffer object used for a vertex array (or
1589 * multiple vertex arrays). If BufferObj points to the default/null
1590 * buffer object, then the vertex array lives in user memory and not a VBO.
1591 */
1592 struct gl_vertex_buffer_binding
1593 {
1594 GLintptr Offset; /**< User-specified offset */
1595 GLsizei Stride; /**< User-specified stride */
1596 GLuint InstanceDivisor; /**< GL_ARB_instanced_arrays */
1597 struct gl_buffer_object *BufferObj; /**< GL_ARB_vertex_buffer_object */
1598 GLbitfield64 _BoundArrays; /**< Arrays bound to this binding point */
1599 };
1600
1601
1602 /**
1603 * A representation of "Vertex Array Objects" (VAOs) from OpenGL 3.1+,
1604 * GL_ARB_vertex_array_object, or the original GL_APPLE_vertex_array_object
1605 * extension.
1606 */
1607 struct gl_vertex_array_object
1608 {
1609 /** Name of the VAO as received from glGenVertexArray. */
1610 GLuint Name;
1611
1612 GLint RefCount;
1613
1614 GLchar *Label; /**< GL_KHR_debug */
1615
1616 mtx_t Mutex;
1617
1618 /**
1619 * Does the VAO use ARB semantics or Apple semantics?
1620 *
1621 * There are several ways in which ARB_vertex_array_object and
1622 * APPLE_vertex_array_object VAOs have differing semantics. At the very
1623 * least,
1624 *
1625 * - ARB VAOs require that all array data be sourced from vertex buffer
1626 * objects, but Apple VAOs do not.
1627 *
1628 * - ARB VAOs require that names come from GenVertexArrays.
1629 *
1630 * This flag notes which behavior governs this VAO.
1631 */
1632 GLboolean ARBsemantics;
1633
1634 /**
1635 * Has this array object been bound?
1636 */
1637 GLboolean EverBound;
1638
1639 /**
1640 * Derived vertex attribute arrays
1641 *
1642 * This is a legacy data structure created from gl_vertex_attrib_array and
1643 * gl_vertex_buffer_binding, for compatibility with existing driver code.
1644 */
1645 struct gl_client_array _VertexAttrib[VERT_ATTRIB_MAX];
1646
1647 /** Vertex attribute arrays */
1648 struct gl_vertex_attrib_array VertexAttrib[VERT_ATTRIB_MAX];
1649
1650 /** Vertex buffer bindings */
1651 struct gl_vertex_buffer_binding VertexBinding[VERT_ATTRIB_MAX];
1652
1653 /** Mask of VERT_BIT_* values indicating which arrays are enabled */
1654 GLbitfield64 _Enabled;
1655
1656 /** Mask of VERT_BIT_* values indicating changed/dirty arrays */
1657 GLbitfield64 NewArrays;
1658
1659 /** The index buffer (also known as the element array buffer in OpenGL). */
1660 struct gl_buffer_object *IndexBufferObj;
1661 };
1662
1663
1664 /** Used to signal when transitioning from one kind of drawing method
1665 * to another.
1666 */
1667 typedef enum {
1668 DRAW_NONE, /**< Initial value only */
1669 DRAW_BEGIN_END,
1670 DRAW_DISPLAY_LIST,
1671 DRAW_ARRAYS
1672 } gl_draw_method;
1673
1674 /**
1675 * Enum for the OpenGL APIs we know about and may support.
1676 *
1677 * NOTE: This must match the api_enum table in
1678 * src/mesa/main/get_hash_generator.py
1679 */
1680 typedef enum
1681 {
1682 API_OPENGL_COMPAT, /* legacy / compatibility contexts */
1683 API_OPENGLES,
1684 API_OPENGLES2,
1685 API_OPENGL_CORE,
1686 API_OPENGL_LAST = API_OPENGL_CORE
1687 } gl_api;
1688
1689 /**
1690 * Vertex array state
1691 */
1692 struct gl_array_attrib
1693 {
1694 /** Currently bound array object. See _mesa_BindVertexArrayAPPLE() */
1695 struct gl_vertex_array_object *VAO;
1696
1697 /** The default vertex array object */
1698 struct gl_vertex_array_object *DefaultVAO;
1699
1700 /** Array objects (GL_ARB/APPLE_vertex_array_object) */
1701 struct _mesa_HashTable *Objects;
1702
1703 GLint ActiveTexture; /**< Client Active Texture */
1704 GLuint LockFirst; /**< GL_EXT_compiled_vertex_array */
1705 GLuint LockCount; /**< GL_EXT_compiled_vertex_array */
1706
1707 /**
1708 * \name Primitive restart controls
1709 *
1710 * Primitive restart is enabled if either \c PrimitiveRestart or
1711 * \c PrimitiveRestartFixedIndex is set.
1712 */
1713 /*@{*/
1714 GLboolean PrimitiveRestart;
1715 GLboolean PrimitiveRestartFixedIndex;
1716 GLboolean _PrimitiveRestart;
1717 GLuint RestartIndex;
1718 /*@}*/
1719
1720 /** One of the DRAW_xxx flags, not consumed by drivers */
1721 gl_draw_method DrawMethod;
1722
1723 /* GL_ARB_vertex_buffer_object */
1724 struct gl_buffer_object *ArrayBufferObj;
1725
1726 /**
1727 * Vertex arrays as consumed by a driver.
1728 * The array pointer is set up only by the VBO module.
1729 */
1730 const struct gl_client_array **_DrawArrays; /**< 0..VERT_ATTRIB_MAX-1 */
1731
1732 /** Legal array datatypes and the API for which they have been computed */
1733 GLbitfield LegalTypesMask;
1734 gl_api LegalTypesMaskAPI;
1735 };
1736
1737
1738 /**
1739 * Feedback buffer state
1740 */
1741 struct gl_feedback
1742 {
1743 GLenum Type;
1744 GLbitfield _Mask; /**< FB_* bits */
1745 GLfloat *Buffer;
1746 GLuint BufferSize;
1747 GLuint Count;
1748 };
1749
1750
1751 /**
1752 * Selection buffer state
1753 */
1754 struct gl_selection
1755 {
1756 GLuint *Buffer; /**< selection buffer */
1757 GLuint BufferSize; /**< size of the selection buffer */
1758 GLuint BufferCount; /**< number of values in the selection buffer */
1759 GLuint Hits; /**< number of records in the selection buffer */
1760 GLuint NameStackDepth; /**< name stack depth */
1761 GLuint NameStack[MAX_NAME_STACK_DEPTH]; /**< name stack */
1762 GLboolean HitFlag; /**< hit flag */
1763 GLfloat HitMinZ; /**< minimum hit depth */
1764 GLfloat HitMaxZ; /**< maximum hit depth */
1765 };
1766
1767
1768 /**
1769 * 1-D Evaluator control points
1770 */
1771 struct gl_1d_map
1772 {
1773 GLuint Order; /**< Number of control points */
1774 GLfloat u1, u2, du; /**< u1, u2, 1.0/(u2-u1) */
1775 GLfloat *Points; /**< Points to contiguous control points */
1776 };
1777
1778
1779 /**
1780 * 2-D Evaluator control points
1781 */
1782 struct gl_2d_map
1783 {
1784 GLuint Uorder; /**< Number of control points in U dimension */
1785 GLuint Vorder; /**< Number of control points in V dimension */
1786 GLfloat u1, u2, du;
1787 GLfloat v1, v2, dv;
1788 GLfloat *Points; /**< Points to contiguous control points */
1789 };
1790
1791
1792 /**
1793 * All evaluator control point state
1794 */
1795 struct gl_evaluators
1796 {
1797 /**
1798 * \name 1-D maps
1799 */
1800 /*@{*/
1801 struct gl_1d_map Map1Vertex3;
1802 struct gl_1d_map Map1Vertex4;
1803 struct gl_1d_map Map1Index;
1804 struct gl_1d_map Map1Color4;
1805 struct gl_1d_map Map1Normal;
1806 struct gl_1d_map Map1Texture1;
1807 struct gl_1d_map Map1Texture2;
1808 struct gl_1d_map Map1Texture3;
1809 struct gl_1d_map Map1Texture4;
1810 /*@}*/
1811
1812 /**
1813 * \name 2-D maps
1814 */
1815 /*@{*/
1816 struct gl_2d_map Map2Vertex3;
1817 struct gl_2d_map Map2Vertex4;
1818 struct gl_2d_map Map2Index;
1819 struct gl_2d_map Map2Color4;
1820 struct gl_2d_map Map2Normal;
1821 struct gl_2d_map Map2Texture1;
1822 struct gl_2d_map Map2Texture2;
1823 struct gl_2d_map Map2Texture3;
1824 struct gl_2d_map Map2Texture4;
1825 /*@}*/
1826 };
1827
1828
1829 struct gl_transform_feedback_varying_info
1830 {
1831 char *Name;
1832 GLenum Type;
1833 GLint Size;
1834 };
1835
1836
1837 /**
1838 * Per-output info vertex shaders for transform feedback.
1839 */
1840 struct gl_transform_feedback_output
1841 {
1842 unsigned OutputRegister;
1843 unsigned OutputBuffer;
1844 unsigned NumComponents;
1845 unsigned StreamId;
1846
1847 /** offset (in DWORDs) of this output within the interleaved structure */
1848 unsigned DstOffset;
1849
1850 /**
1851 * Offset into the output register of the data to output. For example,
1852 * if NumComponents is 2 and ComponentOffset is 1, then the data to
1853 * offset is in the y and z components of the output register.
1854 */
1855 unsigned ComponentOffset;
1856 };
1857
1858
1859 /** Post-link transform feedback info. */
1860 struct gl_transform_feedback_info
1861 {
1862 unsigned NumOutputs;
1863
1864 /**
1865 * Number of transform feedback buffers in use by this program.
1866 */
1867 unsigned NumBuffers;
1868
1869 struct gl_transform_feedback_output *Outputs;
1870
1871 /** Transform feedback varyings used for the linking of this shader program.
1872 *
1873 * Use for glGetTransformFeedbackVarying().
1874 */
1875 struct gl_transform_feedback_varying_info *Varyings;
1876 GLint NumVarying;
1877
1878 /**
1879 * Total number of components stored in each buffer. This may be used by
1880 * hardware back-ends to determine the correct stride when interleaving
1881 * multiple transform feedback outputs in the same buffer.
1882 */
1883 unsigned BufferStride[MAX_FEEDBACK_BUFFERS];
1884 };
1885
1886
1887 /**
1888 * Transform feedback object state
1889 */
1890 struct gl_transform_feedback_object
1891 {
1892 GLuint Name; /**< AKA the object ID */
1893 GLint RefCount;
1894 GLchar *Label; /**< GL_KHR_debug */
1895 GLboolean Active; /**< Is transform feedback enabled? */
1896 GLboolean Paused; /**< Is transform feedback paused? */
1897 GLboolean EndedAnytime; /**< Has EndTransformFeedback been called
1898 at least once? */
1899 GLboolean EverBound; /**< Has this object been bound? */
1900
1901 /**
1902 * GLES: if Active is true, remaining number of primitives which can be
1903 * rendered without overflow. This is necessary to track because GLES
1904 * requires us to generate INVALID_OPERATION if a call to glDrawArrays or
1905 * glDrawArraysInstanced would overflow transform feedback buffers.
1906 * Undefined if Active is false.
1907 *
1908 * Not tracked for desktop GL since it's unnecessary.
1909 */
1910 unsigned GlesRemainingPrims;
1911
1912 /**
1913 * The shader program active when BeginTransformFeedback() was called.
1914 * When active and unpaused, this equals ctx->Shader.CurrentProgram[stage],
1915 * where stage is the pipeline stage that is the source of data for
1916 * transform feedback.
1917 */
1918 struct gl_shader_program *shader_program;
1919
1920 /** The feedback buffers */
1921 GLuint BufferNames[MAX_FEEDBACK_BUFFERS];
1922 struct gl_buffer_object *Buffers[MAX_FEEDBACK_BUFFERS];
1923
1924 /** Start of feedback data in dest buffer */
1925 GLintptr Offset[MAX_FEEDBACK_BUFFERS];
1926
1927 /**
1928 * Max data to put into dest buffer (in bytes). Computed based on
1929 * RequestedSize and the actual size of the buffer.
1930 */
1931 GLsizeiptr Size[MAX_FEEDBACK_BUFFERS];
1932
1933 /**
1934 * Size that was specified when the buffer was bound. If the buffer was
1935 * bound with glBindBufferBase() or glBindBufferOffsetEXT(), this value is
1936 * zero.
1937 */
1938 GLsizeiptr RequestedSize[MAX_FEEDBACK_BUFFERS];
1939 };
1940
1941
1942 /**
1943 * Context state for transform feedback.
1944 */
1945 struct gl_transform_feedback_state
1946 {
1947 GLenum Mode; /**< GL_POINTS, GL_LINES or GL_TRIANGLES */
1948
1949 /** The general binding point (GL_TRANSFORM_FEEDBACK_BUFFER) */
1950 struct gl_buffer_object *CurrentBuffer;
1951
1952 /** The table of all transform feedback objects */
1953 struct _mesa_HashTable *Objects;
1954
1955 /** The current xform-fb object (GL_TRANSFORM_FEEDBACK_BINDING) */
1956 struct gl_transform_feedback_object *CurrentObject;
1957
1958 /** The default xform-fb object (Name==0) */
1959 struct gl_transform_feedback_object *DefaultObject;
1960 };
1961
1962
1963 /**
1964 * A "performance monitor" as described in AMD_performance_monitor.
1965 */
1966 struct gl_perf_monitor_object
1967 {
1968 GLuint Name;
1969
1970 /** True if the monitor is currently active (Begin called but not End). */
1971 GLboolean Active;
1972
1973 /**
1974 * True if the monitor has ended.
1975 *
1976 * This is distinct from !Active because it may never have began.
1977 */
1978 GLboolean Ended;
1979
1980 /**
1981 * A list of groups with currently active counters.
1982 *
1983 * ActiveGroups[g] == n if there are n counters active from group 'g'.
1984 */
1985 unsigned *ActiveGroups;
1986
1987 /**
1988 * An array of bitsets, subscripted by group ID, then indexed by counter ID.
1989 *
1990 * Checking whether counter 'c' in group 'g' is active can be done via:
1991 *
1992 * BITSET_TEST(ActiveCounters[g], c)
1993 */
1994 GLuint **ActiveCounters;
1995 };
1996
1997
1998 union gl_perf_monitor_counter_value
1999 {
2000 float f;
2001 uint64_t u64;
2002 uint32_t u32;
2003 };
2004
2005
2006 struct gl_perf_monitor_counter
2007 {
2008 /** Human readable name for the counter. */
2009 const char *Name;
2010
2011 /**
2012 * Data type of the counter. Valid values are FLOAT, UNSIGNED_INT,
2013 * UNSIGNED_INT64_AMD, and PERCENTAGE_AMD.
2014 */
2015 GLenum Type;
2016
2017 /** Minimum counter value. */
2018 union gl_perf_monitor_counter_value Minimum;
2019
2020 /** Maximum counter value. */
2021 union gl_perf_monitor_counter_value Maximum;
2022 };
2023
2024
2025 struct gl_perf_monitor_group
2026 {
2027 /** Human readable name for the group. */
2028 const char *Name;
2029
2030 /**
2031 * Maximum number of counters in this group which can be active at the
2032 * same time.
2033 */
2034 GLuint MaxActiveCounters;
2035
2036 /** Array of counters within this group. */
2037 const struct gl_perf_monitor_counter *Counters;
2038 GLuint NumCounters;
2039 };
2040
2041
2042 /**
2043 * Context state for AMD_performance_monitor.
2044 */
2045 struct gl_perf_monitor_state
2046 {
2047 /** Array of performance monitor groups (indexed by group ID) */
2048 const struct gl_perf_monitor_group *Groups;
2049 GLuint NumGroups;
2050
2051 /** The table of all performance monitors. */
2052 struct _mesa_HashTable *Monitors;
2053 };
2054
2055
2056 /**
2057 * Names of the various vertex/fragment program register files, etc.
2058 *
2059 * NOTE: first four tokens must fit into 2 bits (see t_vb_arbprogram.c)
2060 * All values should fit in a 4-bit field.
2061 *
2062 * NOTE: PROGRAM_STATE_VAR, PROGRAM_CONSTANT, and PROGRAM_UNIFORM can all be
2063 * considered to be "uniform" variables since they can only be set outside
2064 * glBegin/End. They're also all stored in the same Parameters array.
2065 */
2066 typedef enum
2067 {
2068 PROGRAM_TEMPORARY, /**< machine->Temporary[] */
2069 PROGRAM_ARRAY, /**< Arrays & Matrixes */
2070 PROGRAM_INPUT, /**< machine->Inputs[] */
2071 PROGRAM_OUTPUT, /**< machine->Outputs[] */
2072 PROGRAM_STATE_VAR, /**< gl_program->Parameters[] */
2073 PROGRAM_CONSTANT, /**< gl_program->Parameters[] */
2074 PROGRAM_UNIFORM, /**< gl_program->Parameters[] */
2075 PROGRAM_WRITE_ONLY, /**< A dummy, write-only register */
2076 PROGRAM_ADDRESS, /**< machine->AddressReg */
2077 PROGRAM_SAMPLER, /**< for shader samplers, compile-time only */
2078 PROGRAM_SYSTEM_VALUE,/**< InstanceId, PrimitiveID, etc. */
2079 PROGRAM_UNDEFINED, /**< Invalid/TBD value */
2080 PROGRAM_FILE_MAX
2081 } gl_register_file;
2082
2083
2084 /**
2085 * If the register file is PROGRAM_SYSTEM_VALUE, the register index will be
2086 * one of these values.
2087 */
2088 typedef enum
2089 {
2090 /**
2091 * \name Vertex shader system values
2092 */
2093 /*@{*/
2094 /**
2095 * OpenGL-style vertex ID.
2096 *
2097 * Section 2.11.7 (Shader Execution), subsection Shader Inputs, of the
2098 * OpenGL 3.3 core profile spec says:
2099 *
2100 * "gl_VertexID holds the integer index i implicitly passed by
2101 * DrawArrays or one of the other drawing commands defined in section
2102 * 2.8.3."
2103 *
2104 * Section 2.8.3 (Drawing Commands) of the same spec says:
2105 *
2106 * "The commands....are equivalent to the commands with the same base
2107 * name (without the BaseVertex suffix), except that the ith element
2108 * transferred by the corresponding draw call will be taken from
2109 * element indices[i] + basevertex of each enabled array."
2110 *
2111 * Additionally, the overview in the GL_ARB_shader_draw_parameters spec
2112 * says:
2113 *
2114 * "In unextended GL, vertex shaders have inputs named gl_VertexID and
2115 * gl_InstanceID, which contain, respectively the index of the vertex
2116 * and instance. The value of gl_VertexID is the implicitly passed
2117 * index of the vertex being processed, which includes the value of
2118 * baseVertex, for those commands that accept it."
2119 *
2120 * gl_VertexID gets basevertex added in. This differs from DirectX where
2121 * SV_VertexID does \b not get basevertex added in.
2122 *
2123 * \note
2124 * If all system values are available, \c SYSTEM_VALUE_VERTEX_ID will be
2125 * equal to \c SYSTEM_VALUE_VERTEX_ID_ZERO_BASE plus
2126 * \c SYSTEM_VALUE_BASE_VERTEX.
2127 *
2128 * \sa SYSTEM_VALUE_VERTEX_ID_ZERO_BASE, SYSTEM_VALUE_BASE_VERTEX
2129 */
2130 SYSTEM_VALUE_VERTEX_ID,
2131
2132 /**
2133 * Instanced ID as supplied to gl_InstanceID
2134 *
2135 * Values assigned to gl_InstanceID always begin with zero, regardless of
2136 * the value of baseinstance.
2137 *
2138 * Section 11.1.3.9 (Shader Inputs) of the OpenGL 4.4 core profile spec
2139 * says:
2140 *
2141 * "gl_InstanceID holds the integer instance number of the current
2142 * primitive in an instanced draw call (see section 10.5)."
2143 *
2144 * Through a big chain of pseudocode, section 10.5 describes that
2145 * baseinstance is not counted by gl_InstanceID. In that section, notice
2146 *
2147 * "If an enabled vertex attribute array is instanced (it has a
2148 * non-zero divisor as specified by VertexAttribDivisor), the element
2149 * index that is transferred to the GL, for all vertices, is given by
2150 *
2151 * floor(instance/divisor) + baseinstance
2152 *
2153 * If an array corresponding to an attribute required by a vertex
2154 * shader is not enabled, then the corresponding element is taken from
2155 * the current attribute state (see section 10.2)."
2156 *
2157 * Note that baseinstance is \b not included in the value of instance.
2158 */
2159 SYSTEM_VALUE_INSTANCE_ID,
2160
2161 /**
2162 * DirectX-style vertex ID.
2163 *
2164 * Unlike \c SYSTEM_VALUE_VERTEX_ID, this system value does \b not include
2165 * the value of basevertex.
2166 *
2167 * \sa SYSTEM_VALUE_VERTEX_ID, SYSTEM_VALUE_BASE_VERTEX
2168 */
2169 SYSTEM_VALUE_VERTEX_ID_ZERO_BASE,
2170
2171 /**
2172 * Value of \c basevertex passed to \c glDrawElementsBaseVertex and similar
2173 * functions.
2174 *
2175 * \sa SYSTEM_VALUE_VERTEX_ID, SYSTEM_VALUE_VERTEX_ID_ZERO_BASE
2176 */
2177 SYSTEM_VALUE_BASE_VERTEX,
2178 /*@}*/
2179
2180 /**
2181 * \name Geometry shader system values
2182 */
2183 /*@{*/
2184 SYSTEM_VALUE_INVOCATION_ID,
2185 /*@}*/
2186
2187 /**
2188 * \name Fragment shader system values
2189 */
2190 /*@{*/
2191 SYSTEM_VALUE_FRONT_FACE, /**< (not done yet) */
2192 SYSTEM_VALUE_SAMPLE_ID,
2193 SYSTEM_VALUE_SAMPLE_POS,
2194 SYSTEM_VALUE_SAMPLE_MASK_IN,
2195 /*@}*/
2196
2197 SYSTEM_VALUE_MAX /**< Number of values */
2198 } gl_system_value;
2199
2200
2201 /**
2202 * The possible interpolation qualifiers that can be applied to a fragment
2203 * shader input in GLSL.
2204 *
2205 * Note: INTERP_QUALIFIER_NONE must be 0 so that memsetting the
2206 * gl_fragment_program data structure to 0 causes the default behavior.
2207 */
2208 enum glsl_interp_qualifier
2209 {
2210 INTERP_QUALIFIER_NONE = 0,
2211 INTERP_QUALIFIER_SMOOTH,
2212 INTERP_QUALIFIER_FLAT,
2213 INTERP_QUALIFIER_NOPERSPECTIVE,
2214 INTERP_QUALIFIER_COUNT /**< Number of interpolation qualifiers */
2215 };
2216
2217
2218 /**
2219 * \brief Layout qualifiers for gl_FragDepth.
2220 *
2221 * Extension AMD_conservative_depth allows gl_FragDepth to be redeclared with
2222 * a layout qualifier.
2223 *
2224 * \see enum ir_depth_layout
2225 */
2226 enum gl_frag_depth_layout
2227 {
2228 FRAG_DEPTH_LAYOUT_NONE, /**< No layout is specified. */
2229 FRAG_DEPTH_LAYOUT_ANY,
2230 FRAG_DEPTH_LAYOUT_GREATER,
2231 FRAG_DEPTH_LAYOUT_LESS,
2232 FRAG_DEPTH_LAYOUT_UNCHANGED
2233 };
2234
2235
2236 /**
2237 * Base class for any kind of program object
2238 */
2239 struct gl_program
2240 {
2241 GLuint Id;
2242 GLint RefCount;
2243 GLubyte *String; /**< Null-terminated program text */
2244
2245 GLenum Target; /**< GL_VERTEX/FRAGMENT_PROGRAM_ARB, GL_GEOMETRY_PROGRAM_NV */
2246 GLenum Format; /**< String encoding format */
2247
2248 struct prog_instruction *Instructions;
2249
2250 GLbitfield64 InputsRead; /**< Bitmask of which input regs are read */
2251 GLbitfield64 OutputsWritten; /**< Bitmask of which output regs are written */
2252 GLbitfield SystemValuesRead; /**< Bitmask of SYSTEM_VALUE_x inputs used */
2253 GLbitfield InputFlags[MAX_PROGRAM_INPUTS]; /**< PROG_PARAM_BIT_x flags */
2254 GLbitfield OutputFlags[MAX_PROGRAM_OUTPUTS]; /**< PROG_PARAM_BIT_x flags */
2255 GLbitfield TexturesUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; /**< TEXTURE_x_BIT bitmask */
2256 GLbitfield SamplersUsed; /**< Bitfield of which samplers are used */
2257 GLbitfield ShadowSamplers; /**< Texture units used for shadow sampling. */
2258
2259 GLboolean UsesGather; /**< Does this program use gather4 at all? */
2260
2261 /**
2262 * For vertex and geometry shaders, true if the program uses the
2263 * gl_ClipDistance output. Ignored for fragment shaders.
2264 */
2265 GLboolean UsesClipDistanceOut;
2266
2267
2268 /** Named parameters, constants, etc. from program text */
2269 struct gl_program_parameter_list *Parameters;
2270
2271 /**
2272 * Local parameters used by the program.
2273 *
2274 * It's dynamically allocated because it is rarely used (just
2275 * assembly-style programs), and MAX_PROGRAM_LOCAL_PARAMS entries once it's
2276 * allocated.
2277 */
2278 GLfloat (*LocalParams)[4];
2279
2280 /** Map from sampler unit to texture unit (set by glUniform1i()) */
2281 GLubyte SamplerUnits[MAX_SAMPLERS];
2282
2283 /** Bitmask of which register files are read/written with indirect
2284 * addressing. Mask of (1 << PROGRAM_x) bits.
2285 */
2286 GLbitfield IndirectRegisterFiles;
2287
2288 /** Logical counts */
2289 /*@{*/
2290 GLuint NumInstructions;
2291 GLuint NumTemporaries;
2292 GLuint NumParameters;
2293 GLuint NumAttributes;
2294 GLuint NumAddressRegs;
2295 GLuint NumAluInstructions;
2296 GLuint NumTexInstructions;
2297 GLuint NumTexIndirections;
2298 /*@}*/
2299 /** Native, actual h/w counts */
2300 /*@{*/
2301 GLuint NumNativeInstructions;
2302 GLuint NumNativeTemporaries;
2303 GLuint NumNativeParameters;
2304 GLuint NumNativeAttributes;
2305 GLuint NumNativeAddressRegs;
2306 GLuint NumNativeAluInstructions;
2307 GLuint NumNativeTexInstructions;
2308 GLuint NumNativeTexIndirections;
2309 /*@}*/
2310 };
2311
2312
2313 /** Vertex program object */
2314 struct gl_vertex_program
2315 {
2316 struct gl_program Base; /**< base class */
2317 GLboolean IsPositionInvariant;
2318 };
2319
2320
2321 /** Geometry program object */
2322 struct gl_geometry_program
2323 {
2324 struct gl_program Base; /**< base class */
2325
2326 GLint VerticesIn;
2327 GLint VerticesOut;
2328 GLint Invocations;
2329 GLenum InputType; /**< GL_POINTS, GL_LINES, GL_LINES_ADJACENCY_ARB,
2330 GL_TRIANGLES, or GL_TRIANGLES_ADJACENCY_ARB */
2331 GLenum OutputType; /**< GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP */
2332 bool UsesEndPrimitive;
2333 bool UsesStreams;
2334 };
2335
2336
2337 /** Fragment program object */
2338 struct gl_fragment_program
2339 {
2340 struct gl_program Base; /**< base class */
2341 GLboolean UsesKill; /**< shader uses KIL instruction */
2342 GLboolean UsesDFdy; /**< shader uses DDY instruction */
2343 GLboolean OriginUpperLeft;
2344 GLboolean PixelCenterInteger;
2345 enum gl_frag_depth_layout FragDepthLayout;
2346
2347 /**
2348 * GLSL interpolation qualifier associated with each fragment shader input.
2349 * For inputs that do not have an interpolation qualifier specified in
2350 * GLSL, the value is INTERP_QUALIFIER_NONE.
2351 */
2352 enum glsl_interp_qualifier InterpQualifier[VARYING_SLOT_MAX];
2353
2354 /**
2355 * Bitfield indicating, for each fragment shader input, 1 if that input
2356 * uses centroid interpolation, 0 otherwise. Unused inputs are 0.
2357 */
2358 GLbitfield64 IsCentroid;
2359
2360 /**
2361 * Bitfield indicating, for each fragment shader input, 1 if that input
2362 * uses sample interpolation, 0 otherwise. Unused inputs are 0.
2363 */
2364 GLbitfield64 IsSample;
2365 };
2366
2367
2368 /** Compute program object */
2369 struct gl_compute_program
2370 {
2371 struct gl_program Base; /**< base class */
2372
2373 /**
2374 * Size specified using local_size_{x,y,z}.
2375 */
2376 unsigned LocalSize[3];
2377 };
2378
2379
2380 /**
2381 * State common to vertex and fragment programs.
2382 */
2383 struct gl_program_state
2384 {
2385 GLint ErrorPos; /* GL_PROGRAM_ERROR_POSITION_ARB/NV */
2386 const char *ErrorString; /* GL_PROGRAM_ERROR_STRING_ARB/NV */
2387 };
2388
2389
2390 /**
2391 * Context state for vertex programs.
2392 */
2393 struct gl_vertex_program_state
2394 {
2395 GLboolean Enabled; /**< User-set GL_VERTEX_PROGRAM_ARB/NV flag */
2396 GLboolean _Enabled; /**< Enabled and _valid_ user program? */
2397 GLboolean PointSizeEnabled; /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */
2398 GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */
2399 /** Computed two sided lighting for fixed function/programs. */
2400 GLboolean _TwoSideEnabled;
2401 struct gl_vertex_program *Current; /**< User-bound vertex program */
2402
2403 /** Currently enabled and valid vertex program (including internal
2404 * programs, user-defined vertex programs and GLSL vertex shaders).
2405 * This is the program we must use when rendering.
2406 */
2407 struct gl_vertex_program *_Current;
2408
2409 GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */
2410
2411 /** Should fixed-function T&L be implemented with a vertex prog? */
2412 GLboolean _MaintainTnlProgram;
2413
2414 /** Program to emulate fixed-function T&L (see above) */
2415 struct gl_vertex_program *_TnlProgram;
2416
2417 /** Cache of fixed-function programs */
2418 struct gl_program_cache *Cache;
2419
2420 GLboolean _Overriden;
2421 };
2422
2423
2424 /**
2425 * Context state for geometry programs.
2426 */
2427 struct gl_geometry_program_state
2428 {
2429 GLboolean Enabled; /**< GL_ARB_GEOMETRY_SHADER4 */
2430 GLboolean _Enabled; /**< Enabled and valid program? */
2431 struct gl_geometry_program *Current; /**< user-bound geometry program */
2432
2433 /** Currently enabled and valid program (including internal programs
2434 * and compiled shader programs).
2435 */
2436 struct gl_geometry_program *_Current;
2437
2438 GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */
2439 };
2440
2441 /**
2442 * Context state for fragment programs.
2443 */
2444 struct gl_fragment_program_state
2445 {
2446 GLboolean Enabled; /**< User-set fragment program enable flag */
2447 GLboolean _Enabled; /**< Enabled and _valid_ user program? */
2448 struct gl_fragment_program *Current; /**< User-bound fragment program */
2449
2450 /** Currently enabled and valid fragment program (including internal
2451 * programs, user-defined fragment programs and GLSL fragment shaders).
2452 * This is the program we must use when rendering.
2453 */
2454 struct gl_fragment_program *_Current;
2455
2456 GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */
2457
2458 /** Should fixed-function texturing be implemented with a fragment prog? */
2459 GLboolean _MaintainTexEnvProgram;
2460
2461 /** Program to emulate fixed-function texture env/combine (see above) */
2462 struct gl_fragment_program *_TexEnvProgram;
2463
2464 /** Cache of fixed-function programs */
2465 struct gl_program_cache *Cache;
2466 };
2467
2468
2469 /**
2470 * Context state for compute programs.
2471 */
2472 struct gl_compute_program_state
2473 {
2474 struct gl_compute_program *Current; /**< user-bound compute program */
2475
2476 /** Currently enabled and valid program (including internal programs
2477 * and compiled shader programs).
2478 */
2479 struct gl_compute_program *_Current;
2480 };
2481
2482
2483 /**
2484 * ATI_fragment_shader runtime state
2485 */
2486 #define ATI_FS_INPUT_PRIMARY 0
2487 #define ATI_FS_INPUT_SECONDARY 1
2488
2489 struct atifs_instruction;
2490 struct atifs_setupinst;
2491
2492 /**
2493 * ATI fragment shader
2494 */
2495 struct ati_fragment_shader
2496 {
2497 GLuint Id;
2498 GLint RefCount;
2499 struct atifs_instruction *Instructions[2];
2500 struct atifs_setupinst *SetupInst[2];
2501 GLfloat Constants[8][4];
2502 GLbitfield LocalConstDef; /**< Indicates which constants have been set */
2503 GLubyte numArithInstr[2];
2504 GLubyte regsAssigned[2];
2505 GLubyte NumPasses; /**< 1 or 2 */
2506 GLubyte cur_pass;
2507 GLubyte last_optype;
2508 GLboolean interpinp1;
2509 GLboolean isValid;
2510 GLuint swizzlerq;
2511 };
2512
2513 /**
2514 * Context state for GL_ATI_fragment_shader
2515 */
2516 struct gl_ati_fragment_shader_state
2517 {
2518 GLboolean Enabled;
2519 GLboolean _Enabled; /**< enabled and valid shader? */
2520 GLboolean Compiling;
2521 GLfloat GlobalConstants[8][4];
2522 struct ati_fragment_shader *Current;
2523 };
2524
2525
2526 /** Set by #pragma directives */
2527 struct gl_sl_pragmas
2528 {
2529 GLboolean IgnoreOptimize; /**< ignore #pragma optimize(on/off) ? */
2530 GLboolean IgnoreDebug; /**< ignore #pragma debug(on/off) ? */
2531 GLboolean Optimize; /**< defaults on */
2532 GLboolean Debug; /**< defaults off */
2533 };
2534
2535
2536 /**
2537 * A GLSL vertex or fragment shader object.
2538 */
2539 struct gl_shader
2540 {
2541 /** GL_FRAGMENT_SHADER || GL_VERTEX_SHADER || GL_GEOMETRY_SHADER_ARB.
2542 * Must be the first field.
2543 */
2544 GLenum Type;
2545 gl_shader_stage Stage;
2546 GLuint Name; /**< AKA the handle */
2547 GLint RefCount; /**< Reference count */
2548 GLchar *Label; /**< GL_KHR_debug */
2549 GLboolean DeletePending;
2550 GLboolean CompileStatus;
2551 GLboolean IsES; /**< True if this shader uses GLSL ES */
2552
2553 GLuint SourceChecksum; /**< for debug/logging purposes */
2554 const GLchar *Source; /**< Source code string */
2555
2556 struct gl_program *Program; /**< Post-compile assembly code */
2557 GLchar *InfoLog;
2558 struct gl_sl_pragmas Pragmas;
2559
2560 unsigned Version; /**< GLSL version used for linking */
2561
2562 /**
2563 * \name Sampler tracking
2564 *
2565 * \note Each of these fields is only set post-linking.
2566 */
2567 /*@{*/
2568 unsigned num_samplers; /**< Number of samplers used by this shader. */
2569 GLbitfield active_samplers; /**< Bitfield of which samplers are used */
2570 GLbitfield shadow_samplers; /**< Samplers used for shadow sampling. */
2571 /*@}*/
2572
2573 /**
2574 * Map from sampler unit to texture unit (set by glUniform1i())
2575 *
2576 * A sampler unit is associated with each sampler uniform by the linker.
2577 * The sampler unit associated with each uniform is stored in the
2578 * \c gl_uniform_storage::sampler field.
2579 */
2580 GLubyte SamplerUnits[MAX_SAMPLERS];
2581 /** Which texture target is being sampled (TEXTURE_1D/2D/3D/etc_INDEX) */
2582 gl_texture_index SamplerTargets[MAX_SAMPLERS];
2583
2584 /**
2585 * Number of default uniform block components used by this shader.
2586 *
2587 * This field is only set post-linking.
2588 */
2589 unsigned num_uniform_components;
2590
2591 /**
2592 * Number of combined uniform components used by this shader.
2593 *
2594 * This field is only set post-linking. It is the sum of the uniform block
2595 * sizes divided by sizeof(float), and num_uniform_compoennts.
2596 */
2597 unsigned num_combined_uniform_components;
2598
2599 /**
2600 * This shader's uniform block information.
2601 *
2602 * These fields are only set post-linking.
2603 */
2604 unsigned NumUniformBlocks;
2605 struct gl_uniform_block *UniformBlocks;
2606
2607 struct exec_list *ir;
2608 struct glsl_symbol_table *symbols;
2609
2610 bool uses_builtin_functions;
2611 bool uses_gl_fragcoord;
2612 bool redeclares_gl_fragcoord;
2613 bool ARB_fragment_coord_conventions_enable;
2614
2615 /**
2616 * Fragment shader state from GLSL 1.50 layout qualifiers.
2617 */
2618 bool origin_upper_left;
2619 bool pixel_center_integer;
2620
2621 /**
2622 * Geometry shader state from GLSL 1.50 layout qualifiers.
2623 */
2624 struct {
2625 GLint VerticesOut;
2626 /**
2627 * 0 - Invocations count not declared in shader, or
2628 * 1 .. MAX_GEOMETRY_SHADER_INVOCATIONS
2629 */
2630 GLint Invocations;
2631 /**
2632 * GL_POINTS, GL_LINES, GL_LINES_ADJACENCY, GL_TRIANGLES, or
2633 * GL_TRIANGLES_ADJACENCY, or PRIM_UNKNOWN if it's not set in this
2634 * shader.
2635 */
2636 GLenum InputType;
2637 /**
2638 * GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP, or PRIM_UNKNOWN if
2639 * it's not set in this shader.
2640 */
2641 GLenum OutputType;
2642 } Geom;
2643
2644 /**
2645 * Map from image uniform index to image unit (set by glUniform1i())
2646 *
2647 * An image uniform index is associated with each image uniform by
2648 * the linker. The image index associated with each uniform is
2649 * stored in the \c gl_uniform_storage::image field.
2650 */
2651 GLubyte ImageUnits[MAX_IMAGE_UNIFORMS];
2652
2653 /**
2654 * Access qualifier specified in the shader for each image uniform
2655 * index. Either \c GL_READ_ONLY, \c GL_WRITE_ONLY or \c
2656 * GL_READ_WRITE.
2657 *
2658 * It may be different, though only more strict than the value of
2659 * \c gl_image_unit::Access for the corresponding image unit.
2660 */
2661 GLenum ImageAccess[MAX_IMAGE_UNIFORMS];
2662
2663 /**
2664 * Number of image uniforms defined in the shader. It specifies
2665 * the number of valid elements in the \c ImageUnits and \c
2666 * ImageAccess arrays above.
2667 */
2668 GLuint NumImages;
2669
2670 /**
2671 * Compute shader state from ARB_compute_shader layout qualifiers.
2672 */
2673 struct {
2674 /**
2675 * Size specified using local_size_{x,y,z}, or all 0's to indicate that
2676 * it's not set in this shader.
2677 */
2678 unsigned LocalSize[3];
2679 } Comp;
2680 };
2681
2682
2683 struct gl_uniform_buffer_variable
2684 {
2685 char *Name;
2686
2687 /**
2688 * Name of the uniform as seen by glGetUniformIndices.
2689 *
2690 * glGetUniformIndices requires that the block instance index \b not be
2691 * present in the name of queried uniforms.
2692 *
2693 * \note
2694 * \c gl_uniform_buffer_variable::IndexName and
2695 * \c gl_uniform_buffer_variable::Name may point to identical storage.
2696 */
2697 char *IndexName;
2698
2699 const struct glsl_type *Type;
2700 unsigned int Offset;
2701 GLboolean RowMajor;
2702 };
2703
2704
2705 enum gl_uniform_block_packing
2706 {
2707 ubo_packing_std140,
2708 ubo_packing_shared,
2709 ubo_packing_packed
2710 };
2711
2712
2713 struct gl_uniform_block
2714 {
2715 /** Declared name of the uniform block */
2716 char *Name;
2717
2718 /** Array of supplemental information about UBO ir_variables. */
2719 struct gl_uniform_buffer_variable *Uniforms;
2720 GLuint NumUniforms;
2721
2722 /**
2723 * Index (GL_UNIFORM_BLOCK_BINDING) into ctx->UniformBufferBindings[] to use
2724 * with glBindBufferBase to bind a buffer object to this uniform block. When
2725 * updated in the program, _NEW_BUFFER_OBJECT will be set.
2726 */
2727 GLuint Binding;
2728
2729 /**
2730 * Minimum size (in bytes) of a buffer object to back this uniform buffer
2731 * (GL_UNIFORM_BLOCK_DATA_SIZE).
2732 */
2733 GLuint UniformBufferSize;
2734
2735 /**
2736 * Layout specified in the shader
2737 *
2738 * This isn't accessible through the API, but it is used while
2739 * cross-validating uniform blocks.
2740 */
2741 enum gl_uniform_block_packing _Packing;
2742 };
2743
2744 /**
2745 * Structure that represents a reference to an atomic buffer from some
2746 * shader program.
2747 */
2748 struct gl_active_atomic_buffer
2749 {
2750 /** Uniform indices of the atomic counters declared within it. */
2751 GLuint *Uniforms;
2752 GLuint NumUniforms;
2753
2754 /** Binding point index associated with it. */
2755 GLuint Binding;
2756
2757 /** Minimum reasonable size it is expected to have. */
2758 GLuint MinimumSize;
2759
2760 /** Shader stages making use of it. */
2761 GLboolean StageReferences[MESA_SHADER_STAGES];
2762 };
2763
2764 /**
2765 * A GLSL program object.
2766 * Basically a linked collection of vertex and fragment shaders.
2767 */
2768 struct gl_shader_program
2769 {
2770 GLenum Type; /**< Always GL_SHADER_PROGRAM (internal token) */
2771 GLuint Name; /**< aka handle or ID */
2772 GLchar *Label; /**< GL_KHR_debug */
2773 GLint RefCount; /**< Reference count */
2774 GLboolean DeletePending;
2775
2776 /**
2777 * Is the application intending to glGetProgramBinary this program?
2778 */
2779 GLboolean BinaryRetreivableHint;
2780
2781 /**
2782 * Indicates whether program can be bound for individual pipeline stages
2783 * using UseProgramStages after it is next linked.
2784 */
2785 GLboolean SeparateShader;
2786
2787 GLuint NumShaders; /**< number of attached shaders */
2788 struct gl_shader **Shaders; /**< List of attached the shaders */
2789
2790 /**
2791 * User-defined attribute bindings
2792 *
2793 * These are set via \c glBindAttribLocation and are used to direct the
2794 * GLSL linker. These are \b not the values used in the compiled shader,
2795 * and they are \b not the values returned by \c glGetAttribLocation.
2796 */
2797 struct string_to_uint_map *AttributeBindings;
2798
2799 /**
2800 * User-defined fragment data bindings
2801 *
2802 * These are set via \c glBindFragDataLocation and are used to direct the
2803 * GLSL linker. These are \b not the values used in the compiled shader,
2804 * and they are \b not the values returned by \c glGetFragDataLocation.
2805 */
2806 struct string_to_uint_map *FragDataBindings;
2807 struct string_to_uint_map *FragDataIndexBindings;
2808
2809 /**
2810 * Transform feedback varyings last specified by
2811 * glTransformFeedbackVaryings().
2812 *
2813 * For the current set of transform feedback varyings used for transform
2814 * feedback output, see LinkedTransformFeedback.
2815 */
2816 struct {
2817 GLenum BufferMode;
2818 GLuint NumVarying;
2819 GLchar **VaryingNames; /**< Array [NumVarying] of char * */
2820 } TransformFeedback;
2821
2822 /** Post-link transform feedback info. */
2823 struct gl_transform_feedback_info LinkedTransformFeedback;
2824
2825 /** Post-link gl_FragDepth layout for ARB_conservative_depth. */
2826 enum gl_frag_depth_layout FragDepthLayout;
2827
2828 /**
2829 * Geometry shader state - copied into gl_geometry_program by
2830 * _mesa_copy_linked_program_data().
2831 */
2832 struct {
2833 GLint VerticesIn;
2834 GLint VerticesOut;
2835 /**
2836 * 1 .. MAX_GEOMETRY_SHADER_INVOCATIONS
2837 */
2838 GLint Invocations;
2839 GLenum InputType; /**< GL_POINTS, GL_LINES, GL_LINES_ADJACENCY_ARB,
2840 GL_TRIANGLES, or GL_TRIANGLES_ADJACENCY_ARB */
2841 GLenum OutputType; /**< GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP */
2842 /**
2843 * True if gl_ClipDistance is written to. Copied into
2844 * gl_geometry_program by _mesa_copy_linked_program_data().
2845 */
2846 GLboolean UsesClipDistance;
2847 GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or
2848 0 if not present. */
2849 bool UsesEndPrimitive;
2850 bool UsesStreams;
2851 } Geom;
2852
2853 /** Vertex shader state */
2854 struct {
2855 /**
2856 * True if gl_ClipDistance is written to. Copied into gl_vertex_program
2857 * by _mesa_copy_linked_program_data().
2858 */
2859 GLboolean UsesClipDistance;
2860 GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or
2861 0 if not present. */
2862 } Vert;
2863
2864 /**
2865 * Compute shader state - copied into gl_compute_program by
2866 * _mesa_copy_linked_program_data().
2867 */
2868 struct {
2869 /**
2870 * If this shader contains a compute stage, size specified using
2871 * local_size_{x,y,z}. Otherwise undefined.
2872 */
2873 unsigned LocalSize[3];
2874 } Comp;
2875
2876 /* post-link info: */
2877 unsigned NumUserUniformStorage;
2878 unsigned NumHiddenUniforms;
2879 struct gl_uniform_storage *UniformStorage;
2880
2881 /**
2882 * Mapping from GL uniform locations returned by \c glUniformLocation to
2883 * UniformStorage entries. Arrays will have multiple contiguous slots
2884 * in the UniformRemapTable, all pointing to the same UniformStorage entry.
2885 */
2886 unsigned NumUniformRemapTable;
2887 struct gl_uniform_storage **UniformRemapTable;
2888
2889 /**
2890 * Size of the gl_ClipDistance array that is output from the last pipeline
2891 * stage before the fragment shader.
2892 */
2893 unsigned LastClipDistanceArraySize;
2894
2895 unsigned NumUniformBlocks;
2896 struct gl_uniform_block *UniformBlocks;
2897
2898 /**
2899 * Indices into the _LinkedShaders's UniformBlocks[] array for each stage
2900 * they're used in, or -1.
2901 *
2902 * This is used to maintain the Binding values of the stage's UniformBlocks[]
2903 * and to answer the GL_UNIFORM_BLOCK_REFERENCED_BY_*_SHADER queries.
2904 */
2905 int *UniformBlockStageIndex[MESA_SHADER_STAGES];
2906
2907 /**
2908 * Map of active uniform names to locations
2909 *
2910 * Maps any active uniform that is not an array element to a location.
2911 * Each active uniform, including individual structure members will appear
2912 * in this map. This roughly corresponds to the set of names that would be
2913 * enumerated by \c glGetActiveUniform.
2914 */
2915 struct string_to_uint_map *UniformHash;
2916
2917 struct gl_active_atomic_buffer *AtomicBuffers;
2918 unsigned NumAtomicBuffers;
2919
2920 GLboolean LinkStatus; /**< GL_LINK_STATUS */
2921 GLboolean Validated;
2922 GLboolean _Used; /**< Ever used for drawing? */
2923 GLboolean SamplersValidated; /**< Samplers validated against texture units? */
2924 GLchar *InfoLog;
2925
2926 unsigned Version; /**< GLSL version used for linking */
2927 GLboolean IsES; /**< True if this program uses GLSL ES */
2928
2929 /**
2930 * Per-stage shaders resulting from the first stage of linking.
2931 *
2932 * Set of linked shaders for this program. The array is accessed using the
2933 * \c MESA_SHADER_* defines. Entries for non-existent stages will be
2934 * \c NULL.
2935 */
2936 struct gl_shader *_LinkedShaders[MESA_SHADER_STAGES];
2937
2938 /* True if any of the fragment shaders attached to this program use:
2939 * #extension ARB_fragment_coord_conventions: enable
2940 */
2941 GLboolean ARB_fragment_coord_conventions_enable;
2942 };
2943
2944
2945 #define GLSL_DUMP 0x1 /**< Dump shaders to stdout */
2946 #define GLSL_LOG 0x2 /**< Write shaders to files */
2947 #define GLSL_OPT 0x4 /**< Force optimizations (override pragmas) */
2948 #define GLSL_NO_OPT 0x8 /**< Force no optimizations (override pragmas) */
2949 #define GLSL_UNIFORMS 0x10 /**< Print glUniform calls */
2950 #define GLSL_NOP_VERT 0x20 /**< Force no-op vertex shaders */
2951 #define GLSL_NOP_FRAG 0x40 /**< Force no-op fragment shaders */
2952 #define GLSL_USE_PROG 0x80 /**< Log glUseProgram calls */
2953 #define GLSL_REPORT_ERRORS 0x100 /**< Print compilation errors */
2954 #define GLSL_DUMP_ON_ERROR 0x200 /**< Dump shaders to stderr on compile error */
2955
2956
2957 /**
2958 * Context state for GLSL vertex/fragment shaders.
2959 * Extended to support pipeline object
2960 */
2961 struct gl_pipeline_object
2962 {
2963 /** Name of the pipeline object as received from glGenProgramPipelines.
2964 * It would be 0 for shaders without separate shader objects.
2965 */
2966 GLuint Name;
2967
2968 GLint RefCount;
2969
2970 mtx_t Mutex;
2971
2972 /**
2973 * Programs used for rendering
2974 *
2975 * There is a separate program set for each shader stage.
2976 */
2977 struct gl_shader_program *CurrentProgram[MESA_SHADER_STAGES];
2978
2979 struct gl_shader_program *_CurrentFragmentProgram;
2980
2981 /**
2982 * Program used by glUniform calls.
2983 *
2984 * Explicitly set by \c glUseProgram and \c glActiveProgramEXT.
2985 */
2986 struct gl_shader_program *ActiveProgram;
2987
2988 GLbitfield Flags; /**< Mask of GLSL_x flags */
2989
2990 GLboolean EverBound; /**< Has the pipeline object been created */
2991
2992 GLboolean Validated; /**< Pipeline Validation status */
2993
2994 GLchar *InfoLog;
2995 };
2996
2997 /**
2998 * Context state for GLSL pipeline shaders.
2999 */
3000 struct gl_pipeline_shader_state
3001 {
3002 /** Currently bound pipeline object. See _mesa_BindProgramPipeline() */
3003 struct gl_pipeline_object *Current;
3004
3005 /* Default Object to ensure that _Shader is never NULL */
3006 struct gl_pipeline_object *Default;
3007
3008 /** Pipeline objects */
3009 struct _mesa_HashTable *Objects;
3010 };
3011
3012 /**
3013 * Compiler options for a single GLSL shaders type
3014 */
3015 struct gl_shader_compiler_options
3016 {
3017 /** Driver-selectable options: */
3018 GLboolean EmitCondCodes; /**< Use condition codes? */
3019 GLboolean EmitNoLoops;
3020 GLboolean EmitNoFunctions;
3021 GLboolean EmitNoCont; /**< Emit CONT opcode? */
3022 GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */
3023 GLboolean EmitNoNoise; /**< Emit NOISE opcodes? */
3024 GLboolean EmitNoPow; /**< Emit POW opcodes? */
3025 GLboolean EmitNoSat; /**< Emit SAT opcodes? */
3026 GLboolean LowerClipDistance; /**< Lower gl_ClipDistance from float[8] to vec4[2]? */
3027
3028 /**
3029 * \name Forms of indirect addressing the driver cannot do.
3030 */
3031 /*@{*/
3032 GLboolean EmitNoIndirectInput; /**< No indirect addressing of inputs */
3033 GLboolean EmitNoIndirectOutput; /**< No indirect addressing of outputs */
3034 GLboolean EmitNoIndirectTemp; /**< No indirect addressing of temps */
3035 GLboolean EmitNoIndirectUniform; /**< No indirect addressing of constants */
3036 /*@}*/
3037
3038 GLuint MaxIfDepth; /**< Maximum nested IF blocks */
3039 GLuint MaxUnrollIterations;
3040
3041 /**
3042 * Optimize code for array of structures backends.
3043 *
3044 * This is a proxy for:
3045 * - preferring DP4 instructions (rather than MUL/MAD) for
3046 * matrix * vector operations, such as position transformation.
3047 */
3048 GLboolean OptimizeForAOS;
3049
3050 struct gl_sl_pragmas DefaultPragmas; /**< Default #pragma settings */
3051
3052 const struct nir_shader_compiler_options *NirOptions;
3053 };
3054
3055
3056 /**
3057 * Occlusion/timer query object.
3058 */
3059 struct gl_query_object
3060 {
3061 GLenum Target; /**< The query target, when active */
3062 GLuint Id; /**< hash table ID/name */
3063 GLchar *Label; /**< GL_KHR_debug */
3064 GLuint64EXT Result; /**< the counter */
3065 GLboolean Active; /**< inside Begin/EndQuery */
3066 GLboolean Ready; /**< result is ready? */
3067 GLboolean EverBound;/**< has query object ever been bound */
3068 GLuint Stream; /**< The stream */
3069 };
3070
3071
3072 /**
3073 * Context state for query objects.
3074 */
3075 struct gl_query_state
3076 {
3077 struct _mesa_HashTable *QueryObjects;
3078 struct gl_query_object *CurrentOcclusionObject; /* GL_ARB_occlusion_query */
3079 struct gl_query_object *CurrentTimerObject; /* GL_EXT_timer_query */
3080
3081 /** GL_NV_conditional_render */
3082 struct gl_query_object *CondRenderQuery;
3083
3084 /** GL_EXT_transform_feedback */
3085 struct gl_query_object *PrimitivesGenerated[MAX_VERTEX_STREAMS];
3086 struct gl_query_object *PrimitivesWritten[MAX_VERTEX_STREAMS];
3087
3088 /** GL_ARB_timer_query */
3089 struct gl_query_object *TimeElapsed;
3090
3091 /** GL_ARB_pipeline_statistics_query */
3092 struct gl_query_object *pipeline_stats[MAX_PIPELINE_STATISTICS];
3093
3094 GLenum CondRenderMode;
3095 };
3096
3097
3098 /** Sync object state */
3099 struct gl_sync_object
3100 {
3101 GLenum Type; /**< GL_SYNC_FENCE */
3102 GLuint Name; /**< Fence name */
3103 GLchar *Label; /**< GL_KHR_debug */
3104 GLint RefCount; /**< Reference count */
3105 GLboolean DeletePending; /**< Object was deleted while there were still
3106 * live references (e.g., sync not yet finished)
3107 */
3108 GLenum SyncCondition;
3109 GLbitfield Flags; /**< Flags passed to glFenceSync */
3110 GLuint StatusFlag:1; /**< Has the sync object been signaled? */
3111 };
3112
3113
3114 /**
3115 * State which can be shared by multiple contexts:
3116 */
3117 struct gl_shared_state
3118 {
3119 mtx_t Mutex; /**< for thread safety */
3120 GLint RefCount; /**< Reference count */
3121 struct _mesa_HashTable *DisplayList; /**< Display lists hash table */
3122 struct _mesa_HashTable *TexObjects; /**< Texture objects hash table */
3123
3124 /** Default texture objects (shared by all texture units) */
3125 struct gl_texture_object *DefaultTex[NUM_TEXTURE_TARGETS];
3126
3127 /** Fallback texture used when a bound texture is incomplete */
3128 struct gl_texture_object *FallbackTex[NUM_TEXTURE_TARGETS];
3129
3130 /**
3131 * \name Thread safety and statechange notification for texture
3132 * objects.
3133 *
3134 * \todo Improve the granularity of locking.
3135 */
3136 /*@{*/
3137 mtx_t TexMutex; /**< texobj thread safety */
3138 GLuint TextureStateStamp; /**< state notification for shared tex */
3139 /*@}*/
3140
3141 /** Default buffer object for vertex arrays that aren't in VBOs */
3142 struct gl_buffer_object *NullBufferObj;
3143
3144 /**
3145 * \name Vertex/geometry/fragment programs
3146 */
3147 /*@{*/
3148 struct _mesa_HashTable *Programs; /**< All vertex/fragment programs */
3149 struct gl_vertex_program *DefaultVertexProgram;
3150 struct gl_fragment_program *DefaultFragmentProgram;
3151 struct gl_geometry_program *DefaultGeometryProgram;
3152 /*@}*/
3153
3154 /* GL_ATI_fragment_shader */
3155 struct _mesa_HashTable *ATIShaders;
3156 struct ati_fragment_shader *DefaultFragmentShader;
3157
3158 struct _mesa_HashTable *BufferObjects;
3159
3160 /** Table of both gl_shader and gl_shader_program objects */
3161 struct _mesa_HashTable *ShaderObjects;
3162
3163 /* GL_EXT_framebuffer_object */
3164 struct _mesa_HashTable *RenderBuffers;
3165 struct _mesa_HashTable *FrameBuffers;
3166
3167 /* GL_ARB_sync */
3168 struct set *SyncObjects;
3169
3170 /** GL_ARB_sampler_objects */
3171 struct _mesa_HashTable *SamplerObjects;
3172
3173 /**
3174 * Some context in this share group was affected by a GPU reset
3175 *
3176 * On the next call to \c glGetGraphicsResetStatus, contexts that have not
3177 * been affected by a GPU reset must also return
3178 * \c GL_INNOCENT_CONTEXT_RESET_ARB.
3179 *
3180 * Once this field becomes true, it is never reset to false.
3181 */
3182 bool ShareGroupReset;
3183 };
3184
3185
3186
3187 /**
3188 * Renderbuffers represent drawing surfaces such as color, depth and/or
3189 * stencil. A framebuffer object has a set of renderbuffers.
3190 * Drivers will typically derive subclasses of this type.
3191 */
3192 struct gl_renderbuffer
3193 {
3194 mtx_t Mutex; /**< for thread safety */
3195 GLuint ClassID; /**< Useful for drivers */
3196 GLuint Name;
3197 GLchar *Label; /**< GL_KHR_debug */
3198 GLint RefCount;
3199 GLuint Width, Height;
3200 GLuint Depth;
3201 GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */
3202 GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */
3203 /**
3204 * True for renderbuffers that wrap textures, giving the driver a chance to
3205 * flush render caches through the FinishRenderTexture hook.
3206 *
3207 * Drivers may also set this on renderbuffers other than those generated by
3208 * glFramebufferTexture(), though it means FinishRenderTexture() would be
3209 * called without a rb->TexImage.
3210 */
3211 GLboolean NeedsFinishRenderTexture;
3212 GLubyte NumSamples;
3213 GLenum InternalFormat; /**< The user-specified format */
3214 GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or
3215 GL_STENCIL_INDEX. */
3216 mesa_format Format; /**< The actual renderbuffer memory format */
3217 /**
3218 * Pointer to the texture image if this renderbuffer wraps a texture,
3219 * otherwise NULL.
3220 *
3221 * Note that the reference on the gl_texture_object containing this
3222 * TexImage is held by the gl_renderbuffer_attachment.
3223 */
3224 struct gl_texture_image *TexImage;
3225
3226 /** Delete this renderbuffer */
3227 void (*Delete)(struct gl_context *ctx, struct gl_renderbuffer *rb);
3228
3229 /** Allocate new storage for this renderbuffer */
3230 GLboolean (*AllocStorage)(struct gl_context *ctx,
3231 struct gl_renderbuffer *rb,
3232 GLenum internalFormat,
3233 GLuint width, GLuint height);
3234 };
3235
3236
3237 /**
3238 * A renderbuffer attachment points to either a texture object (and specifies
3239 * a mipmap level, cube face or 3D texture slice) or points to a renderbuffer.
3240 */
3241 struct gl_renderbuffer_attachment
3242 {
3243 GLenum Type; /**< \c GL_NONE or \c GL_TEXTURE or \c GL_RENDERBUFFER_EXT */
3244 GLboolean Complete;
3245
3246 /**
3247 * If \c Type is \c GL_RENDERBUFFER_EXT, this stores a pointer to the
3248 * application supplied renderbuffer object.
3249 */
3250 struct gl_renderbuffer *Renderbuffer;
3251
3252 /**
3253 * If \c Type is \c GL_TEXTURE, this stores a pointer to the application
3254 * supplied texture object.
3255 */
3256 struct gl_texture_object *Texture;
3257 GLuint TextureLevel; /**< Attached mipmap level. */
3258 GLuint CubeMapFace; /**< 0 .. 5, for cube map textures. */
3259 GLuint Zoffset; /**< Slice for 3D textures, or layer for both 1D
3260 * and 2D array textures */
3261 GLboolean Layered;
3262 };
3263
3264
3265 /**
3266 * A framebuffer is a collection of renderbuffers (color, depth, stencil, etc).
3267 * In C++ terms, think of this as a base class from which device drivers
3268 * will make derived classes.
3269 */
3270 struct gl_framebuffer
3271 {
3272 mtx_t Mutex; /**< for thread safety */
3273 /**
3274 * If zero, this is a window system framebuffer. If non-zero, this
3275 * is a FBO framebuffer; note that for some devices (i.e. those with
3276 * a natural pixel coordinate system for FBOs that differs from the
3277 * OpenGL/Mesa coordinate system), this means that the viewport,
3278 * polygon face orientation, and polygon stipple will have to be inverted.
3279 */
3280 GLuint Name;
3281 GLint RefCount;
3282
3283 GLchar *Label; /**< GL_KHR_debug */
3284
3285 GLboolean DeletePending;
3286
3287 /**
3288 * The framebuffer's visual. Immutable if this is a window system buffer.
3289 * Computed from attachments if user-made FBO.
3290 */
3291 struct gl_config Visual;
3292
3293 GLuint Width, Height; /**< size of frame buffer in pixels */
3294
3295 /** \name Drawing bounds (Intersection of buffer size and scissor box) */
3296 /*@{*/
3297 GLint _Xmin, _Xmax; /**< inclusive */
3298 GLint _Ymin, _Ymax; /**< exclusive */
3299 /*@}*/
3300
3301 /** \name Derived Z buffer stuff */
3302 /*@{*/
3303 GLuint _DepthMax; /**< Max depth buffer value */
3304 GLfloat _DepthMaxF; /**< Float max depth buffer value */
3305 GLfloat _MRD; /**< minimum resolvable difference in Z values */
3306 /*@}*/
3307
3308 /** One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */
3309 GLenum _Status;
3310
3311 /** Integer color values */
3312 GLboolean _IntegerColor;
3313
3314 /* ARB_color_buffer_float */
3315 GLboolean _AllColorBuffersFixedPoint; /* no integer, no float */
3316 GLboolean _HasSNormOrFloatColorBuffer;
3317
3318 /**
3319 * The maximum number of layers in the framebuffer, or 0 if the framebuffer
3320 * is not layered. For cube maps and cube map arrays, each cube face
3321 * counts as a layer.
3322 */
3323 GLuint MaxNumLayers;
3324
3325 /** Array of all renderbuffer attachments, indexed by BUFFER_* tokens. */
3326 struct gl_renderbuffer_attachment Attachment[BUFFER_COUNT];
3327
3328 /* In unextended OpenGL these vars are part of the GL_COLOR_BUFFER
3329 * attribute group and GL_PIXEL attribute group, respectively.
3330 */
3331 GLenum ColorDrawBuffer[MAX_DRAW_BUFFERS];
3332 GLenum ColorReadBuffer;
3333
3334 /** Computed from ColorDraw/ReadBuffer above */
3335 GLuint _NumColorDrawBuffers;
3336 GLint _ColorDrawBufferIndexes[MAX_DRAW_BUFFERS]; /**< BUFFER_x or -1 */
3337 GLint _ColorReadBufferIndex; /* -1 = None */
3338 struct gl_renderbuffer *_ColorDrawBuffers[MAX_DRAW_BUFFERS];
3339 struct gl_renderbuffer *_ColorReadBuffer;
3340
3341 /** Delete this framebuffer */
3342 void (*Delete)(struct gl_framebuffer *fb);
3343 };
3344
3345
3346 /**
3347 * Precision info for shader datatypes. See glGetShaderPrecisionFormat().
3348 */
3349 struct gl_precision
3350 {
3351 GLushort RangeMin; /**< min value exponent */
3352 GLushort RangeMax; /**< max value exponent */
3353 GLushort Precision; /**< number of mantissa bits */
3354 };
3355
3356
3357 /**
3358 * Limits for vertex, geometry and fragment programs/shaders.
3359 */
3360 struct gl_program_constants
3361 {
3362 /* logical limits */
3363 GLuint MaxInstructions;
3364 GLuint MaxAluInstructions;
3365 GLuint MaxTexInstructions;
3366 GLuint MaxTexIndirections;
3367 GLuint MaxAttribs;
3368 GLuint MaxTemps;
3369 GLuint MaxAddressRegs;
3370 GLuint MaxAddressOffset; /**< [-MaxAddressOffset, MaxAddressOffset-1] */
3371 GLuint MaxParameters;
3372 GLuint MaxLocalParams;
3373 GLuint MaxEnvParams;
3374 /* native/hardware limits */
3375 GLuint MaxNativeInstructions;
3376 GLuint MaxNativeAluInstructions;
3377 GLuint MaxNativeTexInstructions;
3378 GLuint MaxNativeTexIndirections;
3379 GLuint MaxNativeAttribs;
3380 GLuint MaxNativeTemps;
3381 GLuint MaxNativeAddressRegs;
3382 GLuint MaxNativeParameters;
3383 /* For shaders */
3384 GLuint MaxUniformComponents; /**< Usually == MaxParameters * 4 */
3385
3386 /**
3387 * \name Per-stage input / output limits
3388 *
3389 * Previous to OpenGL 3.2, the intrastage data limits were advertised with
3390 * a single value: GL_MAX_VARYING_COMPONENTS (GL_MAX_VARYING_VECTORS in
3391 * ES). This is stored as \c gl_constants::MaxVarying.
3392 *
3393 * Starting with OpenGL 3.2, the limits are advertised with per-stage
3394 * variables. Each stage as a certain number of outputs that it can feed
3395 * to the next stage and a certain number inputs that it can consume from
3396 * the previous stage.
3397 *
3398 * Vertex shader inputs do not participate this in this accounting.
3399 * These are tracked exclusively by \c gl_program_constants::MaxAttribs.
3400 *
3401 * Fragment shader outputs do not participate this in this accounting.
3402 * These are tracked exclusively by \c gl_constants::MaxDrawBuffers.
3403 */
3404 /*@{*/
3405 GLuint MaxInputComponents;
3406 GLuint MaxOutputComponents;
3407 /*@}*/
3408
3409 /* ES 2.0 and GL_ARB_ES2_compatibility */
3410 struct gl_precision LowFloat, MediumFloat, HighFloat;
3411 struct gl_precision LowInt, MediumInt, HighInt;
3412 /* GL_ARB_uniform_buffer_object */
3413 GLuint MaxUniformBlocks;
3414 GLuint MaxCombinedUniformComponents;
3415 GLuint MaxTextureImageUnits;
3416
3417 /* GL_ARB_shader_atomic_counters */
3418 GLuint MaxAtomicBuffers;
3419 GLuint MaxAtomicCounters;
3420
3421 /* GL_ARB_shader_image_load_store */
3422 GLuint MaxImageUniforms;
3423 };
3424
3425
3426 /**
3427 * Constants which may be overridden by device driver during context creation
3428 * but are never changed after that.
3429 */
3430 struct gl_constants
3431 {
3432 GLuint MaxTextureMbytes; /**< Max memory per image, in MB */
3433 GLuint MaxTextureLevels; /**< Max mipmap levels. */
3434 GLuint Max3DTextureLevels; /**< Max mipmap levels for 3D textures */
3435 GLuint MaxCubeTextureLevels; /**< Max mipmap levels for cube textures */
3436 GLuint MaxArrayTextureLayers; /**< Max layers in array textures */
3437 GLuint MaxTextureRectSize; /**< Max rectangle texture size, in pixes */
3438 GLuint MaxTextureCoordUnits;
3439 GLuint MaxCombinedTextureImageUnits;
3440 GLuint MaxTextureUnits; /**< = MIN(CoordUnits, FragmentProgram.ImageUnits) */
3441 GLfloat MaxTextureMaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */
3442 GLfloat MaxTextureLodBias; /**< GL_EXT_texture_lod_bias */
3443 GLuint MaxTextureBufferSize; /**< GL_ARB_texture_buffer_object */
3444
3445 GLuint TextureBufferOffsetAlignment; /**< GL_ARB_texture_buffer_range */
3446
3447 GLuint MaxArrayLockSize;
3448
3449 GLint SubPixelBits;
3450
3451 GLfloat MinPointSize, MaxPointSize; /**< aliased */
3452 GLfloat MinPointSizeAA, MaxPointSizeAA; /**< antialiased */
3453 GLfloat PointSizeGranularity;
3454 GLfloat MinLineWidth, MaxLineWidth; /**< aliased */
3455 GLfloat MinLineWidthAA, MaxLineWidthAA; /**< antialiased */
3456 GLfloat LineWidthGranularity;
3457
3458 GLuint MaxClipPlanes;
3459 GLuint MaxLights;
3460 GLfloat MaxShininess; /**< GL_NV_light_max_exponent */
3461 GLfloat MaxSpotExponent; /**< GL_NV_light_max_exponent */
3462
3463 GLuint MaxViewportWidth, MaxViewportHeight;
3464 GLuint MaxViewports; /**< GL_ARB_viewport_array */
3465 GLuint ViewportSubpixelBits; /**< GL_ARB_viewport_array */
3466 struct {
3467 GLfloat Min;
3468 GLfloat Max;
3469 } ViewportBounds; /**< GL_ARB_viewport_array */
3470
3471 struct gl_program_constants Program[MESA_SHADER_STAGES];
3472 GLuint MaxProgramMatrices;
3473 GLuint MaxProgramMatrixStackDepth;
3474
3475 struct {
3476 GLuint SamplesPassed;
3477 GLuint TimeElapsed;
3478 GLuint Timestamp;
3479 GLuint PrimitivesGenerated;
3480 GLuint PrimitivesWritten;
3481 GLuint VerticesSubmitted;
3482 GLuint PrimitivesSubmitted;
3483 GLuint VsInvocations;
3484 GLuint TessPatches;
3485 GLuint TessInvocations;
3486 GLuint GsInvocations;
3487 GLuint GsPrimitives;
3488 GLuint FsInvocations;
3489 GLuint ComputeInvocations;
3490 GLuint ClInPrimitives;
3491 GLuint ClOutPrimitives;
3492 } QueryCounterBits;
3493
3494 GLuint MaxDrawBuffers; /**< GL_ARB_draw_buffers */
3495
3496 GLuint MaxColorAttachments; /**< GL_EXT_framebuffer_object */
3497 GLuint MaxRenderbufferSize; /**< GL_EXT_framebuffer_object */
3498 GLuint MaxSamples; /**< GL_ARB_framebuffer_object */
3499
3500 /** Number of varying vectors between any two shader stages. */
3501 GLuint MaxVarying;
3502
3503 /** @{
3504 * GL_ARB_uniform_buffer_object
3505 */
3506 GLuint MaxCombinedUniformBlocks;
3507 GLuint MaxUniformBufferBindings;
3508 GLuint MaxUniformBlockSize;
3509 GLuint UniformBufferOffsetAlignment;
3510 /** @} */
3511
3512 /**
3513 * GL_ARB_explicit_uniform_location
3514 */
3515 GLuint MaxUserAssignableUniformLocations;
3516
3517 /** GL_ARB_geometry_shader4 */
3518 GLuint MaxGeometryOutputVertices;
3519 GLuint MaxGeometryTotalOutputComponents;
3520
3521 GLuint GLSLVersion; /**< Desktop GLSL version supported (ex: 120 = 1.20) */
3522
3523 /**
3524 * Changes default GLSL extension behavior from "error" to "warn". It's out
3525 * of spec, but it can make some apps work that otherwise wouldn't.
3526 */
3527 GLboolean ForceGLSLExtensionsWarn;
3528
3529 /**
3530 * If non-zero, forces GLSL shaders without the #version directive to behave
3531 * as if they began with "#version ForceGLSLVersion".
3532 */
3533 GLuint ForceGLSLVersion;
3534
3535 /**
3536 * Allow GLSL #extension directives in the middle of shaders.
3537 */
3538 GLboolean AllowGLSLExtensionDirectiveMidShader;
3539
3540 /**
3541 * Does the driver support real 32-bit integers? (Otherwise, integers are
3542 * simulated via floats.)
3543 */
3544 GLboolean NativeIntegers;
3545
3546 /**
3547 * Does VertexID count from zero or from base vertex?
3548 *
3549 * \note
3550 * If desktop GLSL 1.30 or GLSL ES 3.00 are not supported, this field is
3551 * ignored and need not be set.
3552 */
3553 bool VertexID_is_zero_based;
3554
3555 /**
3556 * If the driver supports real 32-bit integers, what integer value should be
3557 * used for boolean true in uniform uploads? (Usually 1 or ~0.)
3558 */
3559 GLuint UniformBooleanTrue;
3560
3561 /**
3562 * Maximum amount of time, measured in nanseconds, that the server can wait.
3563 */
3564 GLuint64 MaxServerWaitTimeout;
3565
3566 /** GL_EXT_provoking_vertex */
3567 GLboolean QuadsFollowProvokingVertexConvention;
3568
3569 /** OpenGL version 3.0 */
3570 GLbitfield ContextFlags; /**< Ex: GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */
3571
3572 /** OpenGL version 3.2 */
3573 GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */
3574
3575 /** OpenGL version 4.4 */
3576 GLuint MaxVertexAttribStride;
3577
3578 /** GL_EXT_transform_feedback */
3579 GLuint MaxTransformFeedbackBuffers;
3580 GLuint MaxTransformFeedbackSeparateComponents;
3581 GLuint MaxTransformFeedbackInterleavedComponents;
3582 GLuint MaxVertexStreams;
3583
3584 /** GL_EXT_gpu_shader4 */
3585 GLint MinProgramTexelOffset, MaxProgramTexelOffset;
3586
3587 /** GL_ARB_texture_gather */
3588 GLuint MinProgramTextureGatherOffset;
3589 GLuint MaxProgramTextureGatherOffset;
3590 GLuint MaxProgramTextureGatherComponents;
3591
3592 /* GL_ARB_robustness */
3593 GLenum ResetStrategy;
3594
3595 /* GL_ARB_blend_func_extended */
3596 GLuint MaxDualSourceDrawBuffers;
3597
3598 /**
3599 * Whether the implementation strips out and ignores texture borders.
3600 *
3601 * Many GPU hardware implementations don't support rendering with texture
3602 * borders and mipmapped textures. (Note: not static border color, but the
3603 * old 1-pixel border around each edge). Implementations then have to do
3604 * slow fallbacks to be correct, or just ignore the border and be fast but
3605 * wrong. Setting the flag strips the border off of TexImage calls,
3606 * providing "fast but wrong" at significantly reduced driver complexity.
3607 *
3608 * Texture borders are deprecated in GL 3.0.
3609 **/
3610 GLboolean StripTextureBorder;
3611
3612 /**
3613 * For drivers which can do a better job at eliminating unused uniforms
3614 * than the GLSL compiler.
3615 *
3616 * XXX Remove these as soon as a better solution is available.
3617 */
3618 GLboolean GLSLSkipStrictMaxUniformLimitCheck;
3619
3620 /**
3621 * Always use the GetTransformFeedbackVertexCount() driver hook, rather
3622 * than passing the transform feedback object to the drawing function.
3623 */
3624 GLboolean AlwaysUseGetTransformFeedbackVertexCount;
3625
3626 /** GL_ARB_map_buffer_alignment */
3627 GLuint MinMapBufferAlignment;
3628
3629 /**
3630 * Disable varying packing. This is out of spec, but potentially useful
3631 * for older platforms that supports a limited number of texture
3632 * indirections--on these platforms, unpacking the varyings in the fragment
3633 * shader increases the number of texture indirections by 1, which might
3634 * make some shaders not executable at all.
3635 *
3636 * Drivers that support transform feedback must set this value to GL_FALSE.
3637 */
3638 GLboolean DisableVaryingPacking;
3639
3640 /**
3641 * Should meaningful names be generated for compiler temporary variables?
3642 *
3643 * Generally, it is not useful to have the compiler generate "meaningful"
3644 * names for temporary variables that it creates. This can, however, be a
3645 * useful debugging aid. In Mesa debug builds or release builds when
3646 * MESA_GLSL is set at run-time, meaningful names will be generated.
3647 * Drivers can also force names to be generated by setting this field.
3648 * For example, the i965 driver may set it when INTEL_DEBUG=vs (to dump
3649 * vertex shader assembly) is set at run-time.
3650 */
3651 bool GenerateTemporaryNames;
3652
3653 /*
3654 * Maximum value supported for an index in DrawElements and friends.
3655 *
3656 * This must be at least (1ull<<24)-1. The default value is
3657 * (1ull<<32)-1.
3658 *
3659 * \since ES 3.0 or GL_ARB_ES3_compatibility
3660 * \sa _mesa_init_constants
3661 */
3662 GLuint64 MaxElementIndex;
3663
3664 /**
3665 * Disable interpretation of line continuations (lines ending with a
3666 * backslash character ('\') in GLSL source.
3667 */
3668 GLboolean DisableGLSLLineContinuations;
3669
3670 /** GL_ARB_texture_multisample */
3671 GLint MaxColorTextureSamples;
3672 GLint MaxDepthTextureSamples;
3673 GLint MaxIntegerSamples;
3674
3675 /**
3676 * GL_EXT_texture_multisample_blit_scaled implementation assumes that
3677 * samples are laid out in a rectangular grid roughly corresponding to
3678 * sample locations within a pixel. Below SampleMap{2,4,8}x variables
3679 * are used to map indices of rectangular grid to sample numbers within
3680 * a pixel. This mapping of indices to sample numbers must be initialized
3681 * by the driver for the target hardware. For example, if we have the 8X
3682 * MSAA sample number layout (sample positions) for XYZ hardware:
3683 *
3684 * sample indices layout sample number layout
3685 * --------- ---------
3686 * | 0 | 1 | | a | b |
3687 * --------- ---------
3688 * | 2 | 3 | | c | d |
3689 * --------- ---------
3690 * | 4 | 5 | | e | f |
3691 * --------- ---------
3692 * | 6 | 7 | | g | h |
3693 * --------- ---------
3694 *
3695 * Where a,b,c,d,e,f,g,h are integers between [0-7].
3696 *
3697 * Then, initialize the SampleMap8x variable for XYZ hardware as shown
3698 * below:
3699 * SampleMap8x = {a, b, c, d, e, f, g, h};
3700 *
3701 * Follow the logic for other sample counts.
3702 */
3703 uint8_t SampleMap2x[2];
3704 uint8_t SampleMap4x[4];
3705 uint8_t SampleMap8x[8];
3706
3707 /** GL_ARB_shader_atomic_counters */
3708 GLuint MaxAtomicBufferBindings;
3709 GLuint MaxAtomicBufferSize;
3710 GLuint MaxCombinedAtomicBuffers;
3711 GLuint MaxCombinedAtomicCounters;
3712
3713 /** GL_ARB_vertex_attrib_binding */
3714 GLint MaxVertexAttribRelativeOffset;
3715 GLint MaxVertexAttribBindings;
3716
3717 /* GL_ARB_shader_image_load_store */
3718 GLuint MaxImageUnits;
3719 GLuint MaxCombinedImageUnitsAndFragmentOutputs;
3720 GLuint MaxImageSamples;
3721 GLuint MaxCombinedImageUniforms;
3722
3723 /** GL_ARB_compute_shader */
3724 GLuint MaxComputeWorkGroupCount[3]; /* Array of x, y, z dimensions */
3725 GLuint MaxComputeWorkGroupSize[3]; /* Array of x, y, z dimensions */
3726 GLuint MaxComputeWorkGroupInvocations;
3727
3728 /** GL_ARB_gpu_shader5 */
3729 GLfloat MinFragmentInterpolationOffset;
3730 GLfloat MaxFragmentInterpolationOffset;
3731
3732 GLboolean FakeSWMSAA;
3733
3734 /** GL_KHR_context_flush_control */
3735 GLenum ContextReleaseBehavior;
3736
3737 struct gl_shader_compiler_options ShaderCompilerOptions[MESA_SHADER_STAGES];
3738 };
3739
3740
3741 /**
3742 * Enable flag for each OpenGL extension. Different device drivers will
3743 * enable different extensions at runtime.
3744 */
3745 struct gl_extensions
3746 {
3747 GLboolean dummy; /* don't remove this! */
3748 GLboolean dummy_true; /* Set true by _mesa_init_extensions(). */
3749 GLboolean dummy_false; /* Set false by _mesa_init_extensions(). */
3750 GLboolean ANGLE_texture_compression_dxt;
3751 GLboolean ARB_ES2_compatibility;
3752 GLboolean ARB_ES3_compatibility;
3753 GLboolean ARB_arrays_of_arrays;
3754 GLboolean ARB_base_instance;
3755 GLboolean ARB_blend_func_extended;
3756 GLboolean ARB_buffer_storage;
3757 GLboolean ARB_clear_texture;
3758 GLboolean ARB_clip_control;
3759 GLboolean ARB_color_buffer_float;
3760 GLboolean ARB_compute_shader;
3761 GLboolean ARB_conditional_render_inverted;
3762 GLboolean ARB_conservative_depth;
3763 GLboolean ARB_copy_image;
3764 GLboolean ARB_depth_buffer_float;
3765 GLboolean ARB_depth_clamp;
3766 GLboolean ARB_depth_texture;
3767 GLboolean ARB_derivative_control;
3768 GLboolean ARB_draw_buffers_blend;
3769 GLboolean ARB_draw_elements_base_vertex;
3770 GLboolean ARB_draw_indirect;
3771 GLboolean ARB_draw_instanced;
3772 GLboolean ARB_fragment_coord_conventions;
3773 GLboolean ARB_fragment_layer_viewport;
3774 GLboolean ARB_fragment_program;
3775 GLboolean ARB_fragment_program_shadow;
3776 GLboolean ARB_fragment_shader;
3777 GLboolean ARB_framebuffer_object;
3778 GLboolean ARB_explicit_attrib_location;
3779 GLboolean ARB_explicit_uniform_location;
3780 GLboolean ARB_geometry_shader4;
3781 GLboolean ARB_gpu_shader5;
3782 GLboolean ARB_gpu_shader_fp64;
3783 GLboolean ARB_half_float_vertex;
3784 GLboolean ARB_instanced_arrays;
3785 GLboolean ARB_internalformat_query;
3786 GLboolean ARB_map_buffer_range;
3787 GLboolean ARB_occlusion_query;
3788 GLboolean ARB_occlusion_query2;
3789 GLboolean ARB_pipeline_statistics_query;
3790 GLboolean ARB_point_sprite;
3791 GLboolean ARB_sample_shading;
3792 GLboolean ARB_seamless_cube_map;
3793 GLboolean ARB_shader_atomic_counters;
3794 GLboolean ARB_shader_bit_encoding;
3795 GLboolean ARB_shader_image_load_store;
3796 GLboolean ARB_shader_precision;
3797 GLboolean ARB_shader_stencil_export;
3798 GLboolean ARB_shader_texture_lod;
3799 GLboolean ARB_shading_language_packing;
3800 GLboolean ARB_shading_language_420pack;
3801 GLboolean ARB_shadow;
3802 GLboolean ARB_stencil_texturing;
3803 GLboolean ARB_sync;
3804 GLboolean ARB_tessellation_shader;
3805 GLboolean ARB_texture_border_clamp;
3806 GLboolean ARB_texture_buffer_object;
3807 GLboolean ARB_texture_buffer_object_rgb32;
3808 GLboolean ARB_texture_buffer_range;
3809 GLboolean ARB_texture_compression_bptc;
3810 GLboolean ARB_texture_compression_rgtc;
3811 GLboolean ARB_texture_cube_map;
3812 GLboolean ARB_texture_cube_map_array;
3813 GLboolean ARB_texture_env_combine;
3814 GLboolean ARB_texture_env_crossbar;
3815 GLboolean ARB_texture_env_dot3;
3816 GLboolean ARB_texture_float;
3817 GLboolean ARB_texture_gather;
3818 GLboolean ARB_texture_mirror_clamp_to_edge;
3819 GLboolean ARB_texture_multisample;
3820 GLboolean ARB_texture_non_power_of_two;
3821 GLboolean ARB_texture_stencil8;
3822 GLboolean ARB_texture_query_levels;
3823 GLboolean ARB_texture_query_lod;
3824 GLboolean ARB_texture_rg;
3825 GLboolean ARB_texture_rgb10_a2ui;
3826 GLboolean ARB_texture_view;
3827 GLboolean ARB_timer_query;
3828 GLboolean ARB_transform_feedback2;
3829 GLboolean ARB_transform_feedback3;
3830 GLboolean ARB_transform_feedback_instanced;
3831 GLboolean ARB_uniform_buffer_object;
3832 GLboolean ARB_vertex_program;
3833 GLboolean ARB_vertex_shader;
3834 GLboolean ARB_vertex_type_10f_11f_11f_rev;
3835 GLboolean ARB_vertex_type_2_10_10_10_rev;
3836 GLboolean ARB_viewport_array;
3837 GLboolean EXT_blend_color;
3838 GLboolean EXT_blend_equation_separate;
3839 GLboolean EXT_blend_func_separate;
3840 GLboolean EXT_blend_minmax;
3841 GLboolean EXT_depth_bounds_test;
3842 GLboolean EXT_draw_buffers2;
3843 GLboolean EXT_framebuffer_multisample;
3844 GLboolean EXT_framebuffer_multisample_blit_scaled;
3845 GLboolean EXT_framebuffer_sRGB;
3846 GLboolean EXT_gpu_program_parameters;
3847 GLboolean EXT_gpu_shader4;
3848 GLboolean EXT_packed_float;
3849 GLboolean EXT_pixel_buffer_object;
3850 GLboolean EXT_point_parameters;
3851 GLboolean EXT_polygon_offset_clamp;
3852 GLboolean EXT_provoking_vertex;
3853 GLboolean EXT_shader_integer_mix;
3854 GLboolean EXT_stencil_two_side;
3855 GLboolean EXT_texture3D;
3856 GLboolean EXT_texture_array;
3857 GLboolean EXT_texture_compression_latc;
3858 GLboolean EXT_texture_compression_s3tc;
3859 GLboolean EXT_texture_env_dot3;
3860 GLboolean EXT_texture_filter_anisotropic;
3861 GLboolean EXT_texture_integer;
3862 GLboolean EXT_texture_mirror_clamp;
3863 GLboolean EXT_texture_shared_exponent;
3864 GLboolean EXT_texture_snorm;
3865 GLboolean EXT_texture_sRGB;
3866 GLboolean EXT_texture_sRGB_decode;
3867 GLboolean EXT_texture_swizzle;
3868 GLboolean EXT_transform_feedback;
3869 GLboolean EXT_timer_query;
3870 GLboolean EXT_vertex_array_bgra;
3871 GLboolean OES_standard_derivatives;
3872 /* vendor extensions */
3873 GLboolean AMD_performance_monitor;
3874 GLboolean AMD_pinned_memory;
3875 GLboolean AMD_seamless_cubemap_per_texture;
3876 GLboolean AMD_vertex_shader_layer;
3877 GLboolean AMD_vertex_shader_viewport_index;
3878 GLboolean APPLE_object_purgeable;
3879 GLboolean ATI_texture_compression_3dc;
3880 GLboolean ATI_texture_mirror_once;
3881 GLboolean ATI_texture_env_combine3;
3882 GLboolean ATI_fragment_shader;
3883 GLboolean ATI_separate_stencil;
3884 GLboolean INTEL_performance_query;
3885 GLboolean MESA_pack_invert;
3886 GLboolean MESA_ycbcr_texture;
3887 GLboolean NV_conditional_render;
3888 GLboolean NV_fog_distance;
3889 GLboolean NV_fragment_program_option;
3890 GLboolean NV_point_sprite;
3891 GLboolean NV_primitive_restart;
3892 GLboolean NV_texture_barrier;
3893 GLboolean NV_texture_env_combine4;
3894 GLboolean NV_texture_rectangle;
3895 GLboolean NV_vdpau_interop;
3896 GLboolean TDFX_texture_compression_FXT1;
3897 GLboolean OES_EGL_image;
3898 GLboolean OES_draw_texture;
3899 GLboolean OES_depth_texture_cube_map;
3900 GLboolean OES_EGL_image_external;
3901 GLboolean OES_texture_float;
3902 GLboolean OES_texture_float_linear;
3903 GLboolean OES_texture_half_float;
3904 GLboolean OES_texture_half_float_linear;
3905 GLboolean OES_compressed_ETC1_RGB8_texture;
3906 GLboolean extension_sentinel;
3907 /** The extension string */
3908 const GLubyte *String;
3909 /** Number of supported extensions */
3910 GLuint Count;
3911 };
3912
3913
3914 /**
3915 * A stack of matrices (projection, modelview, color, texture, etc).
3916 */
3917 struct gl_matrix_stack
3918 {
3919 GLmatrix *Top; /**< points into Stack */
3920 GLmatrix *Stack; /**< array [MaxDepth] of GLmatrix */
3921 GLuint Depth; /**< 0 <= Depth < MaxDepth */
3922 GLuint MaxDepth; /**< size of Stack[] array */
3923 GLuint DirtyFlag; /**< _NEW_MODELVIEW or _NEW_PROJECTION, for example */
3924 };
3925
3926
3927 /**
3928 * \name Bits for image transfer operations
3929 * \sa __struct gl_contextRec::ImageTransferState.
3930 */
3931 /*@{*/
3932 #define IMAGE_SCALE_BIAS_BIT 0x1
3933 #define IMAGE_SHIFT_OFFSET_BIT 0x2
3934 #define IMAGE_MAP_COLOR_BIT 0x4
3935 #define IMAGE_CLAMP_BIT 0x800
3936
3937
3938 /** Pixel Transfer ops */
3939 #define IMAGE_BITS (IMAGE_SCALE_BIAS_BIT | \
3940 IMAGE_SHIFT_OFFSET_BIT | \
3941 IMAGE_MAP_COLOR_BIT)
3942
3943 /**
3944 * \name Bits to indicate what state has changed.
3945 */
3946 /*@{*/
3947 #define _NEW_MODELVIEW (1 << 0) /**< gl_context::ModelView */
3948 #define _NEW_PROJECTION (1 << 1) /**< gl_context::Projection */
3949 #define _NEW_TEXTURE_MATRIX (1 << 2) /**< gl_context::TextureMatrix */
3950 #define _NEW_COLOR (1 << 3) /**< gl_context::Color */
3951 #define _NEW_DEPTH (1 << 4) /**< gl_context::Depth */
3952 #define _NEW_EVAL (1 << 5) /**< gl_context::Eval, EvalMap */
3953 #define _NEW_FOG (1 << 6) /**< gl_context::Fog */
3954 #define _NEW_HINT (1 << 7) /**< gl_context::Hint */
3955 #define _NEW_LIGHT (1 << 8) /**< gl_context::Light */
3956 #define _NEW_LINE (1 << 9) /**< gl_context::Line */
3957 #define _NEW_PIXEL (1 << 10) /**< gl_context::Pixel */
3958 #define _NEW_POINT (1 << 11) /**< gl_context::Point */
3959 #define _NEW_POLYGON (1 << 12) /**< gl_context::Polygon */
3960 #define _NEW_POLYGONSTIPPLE (1 << 13) /**< gl_context::PolygonStipple */
3961 #define _NEW_SCISSOR (1 << 14) /**< gl_context::Scissor */
3962 #define _NEW_STENCIL (1 << 15) /**< gl_context::Stencil */
3963 #define _NEW_TEXTURE (1 << 16) /**< gl_context::Texture */
3964 #define _NEW_TRANSFORM (1 << 17) /**< gl_context::Transform */
3965 #define _NEW_VIEWPORT (1 << 18) /**< gl_context::Viewport */
3966 /* gap, re-use for core Mesa state only; use ctx->DriverFlags otherwise */
3967 #define _NEW_ARRAY (1 << 20) /**< gl_context::Array */
3968 #define _NEW_RENDERMODE (1 << 21) /**< gl_context::RenderMode, etc */
3969 #define _NEW_BUFFERS (1 << 22) /**< gl_context::Visual, DrawBuffer, */
3970 #define _NEW_CURRENT_ATTRIB (1 << 23) /**< gl_context::Current */
3971 #define _NEW_MULTISAMPLE (1 << 24) /**< gl_context::Multisample */
3972 #define _NEW_TRACK_MATRIX (1 << 25) /**< gl_context::VertexProgram */
3973 #define _NEW_PROGRAM (1 << 26) /**< New program/shader state */
3974 #define _NEW_PROGRAM_CONSTANTS (1 << 27)
3975 #define _NEW_BUFFER_OBJECT (1 << 28)
3976 #define _NEW_FRAG_CLAMP (1 << 29)
3977 /* gap, re-use for core Mesa state only; use ctx->DriverFlags otherwise */
3978 #define _NEW_VARYING_VP_INPUTS (1 << 31) /**< gl_context::varying_vp_inputs */
3979 #define _NEW_ALL ~0
3980 /*@}*/
3981
3982
3983 /**
3984 * Composite state flags
3985 */
3986 /*@{*/
3987 #define _MESA_NEW_NEED_EYE_COORDS (_NEW_LIGHT | \
3988 _NEW_TEXTURE | \
3989 _NEW_POINT | \
3990 _NEW_PROGRAM | \
3991 _NEW_MODELVIEW)
3992
3993 #define _MESA_NEW_SEPARATE_SPECULAR (_NEW_LIGHT | \
3994 _NEW_FOG | \
3995 _NEW_PROGRAM)
3996
3997
3998 /*@}*/
3999
4000
4001
4002
4003 /* This has to be included here. */
4004 #include "dd.h"
4005
4006
4007 /**
4008 * Display list flags.
4009 * Strictly this is a tnl-private concept, but it doesn't seem
4010 * worthwhile adding a tnl private structure just to hold this one bit
4011 * of information:
4012 */
4013 #define DLIST_DANGLING_REFS 0x1
4014
4015
4016 /** Opaque declaration of display list payload data type */
4017 union gl_dlist_node;
4018
4019
4020 /**
4021 * Provide a location where information about a display list can be
4022 * collected. Could be extended with driverPrivate structures,
4023 * etc. in the future.
4024 */
4025 struct gl_display_list
4026 {
4027 GLuint Name;
4028 GLchar *Label; /**< GL_KHR_debug */
4029 GLbitfield Flags; /**< DLIST_x flags */
4030 /** The dlist commands are in a linked list of nodes */
4031 union gl_dlist_node *Head;
4032 };
4033
4034
4035 /**
4036 * State used during display list compilation and execution.
4037 */
4038 struct gl_dlist_state
4039 {
4040 GLuint CallDepth; /**< Current recursion calling depth */
4041
4042 struct gl_display_list *CurrentList; /**< List currently being compiled */
4043 union gl_dlist_node *CurrentBlock; /**< Pointer to current block of nodes */
4044 GLuint CurrentPos; /**< Index into current block of nodes */
4045
4046 GLvertexformat ListVtxfmt;
4047
4048 GLubyte ActiveAttribSize[VERT_ATTRIB_MAX];
4049 GLfloat CurrentAttrib[VERT_ATTRIB_MAX][4];
4050
4051 GLubyte ActiveMaterialSize[MAT_ATTRIB_MAX];
4052 GLfloat CurrentMaterial[MAT_ATTRIB_MAX][4];
4053
4054 struct {
4055 /* State known to have been set by the currently-compiling display
4056 * list. Used to eliminate some redundant state changes.
4057 */
4058 GLenum ShadeModel;
4059 } Current;
4060 };
4061
4062 /** @{
4063 *
4064 * These are a mapping of the GL_ARB_debug_output/GL_KHR_debug enums
4065 * to small enums suitable for use as an array index.
4066 */
4067
4068 enum mesa_debug_source {
4069 MESA_DEBUG_SOURCE_API,
4070 MESA_DEBUG_SOURCE_WINDOW_SYSTEM,
4071 MESA_DEBUG_SOURCE_SHADER_COMPILER,
4072 MESA_DEBUG_SOURCE_THIRD_PARTY,
4073 MESA_DEBUG_SOURCE_APPLICATION,
4074 MESA_DEBUG_SOURCE_OTHER,
4075 MESA_DEBUG_SOURCE_COUNT
4076 };
4077
4078 enum mesa_debug_type {
4079 MESA_DEBUG_TYPE_ERROR,
4080 MESA_DEBUG_TYPE_DEPRECATED,
4081 MESA_DEBUG_TYPE_UNDEFINED,
4082 MESA_DEBUG_TYPE_PORTABILITY,
4083 MESA_DEBUG_TYPE_PERFORMANCE,
4084 MESA_DEBUG_TYPE_OTHER,
4085 MESA_DEBUG_TYPE_MARKER,
4086 MESA_DEBUG_TYPE_PUSH_GROUP,
4087 MESA_DEBUG_TYPE_POP_GROUP,
4088 MESA_DEBUG_TYPE_COUNT
4089 };
4090
4091 enum mesa_debug_severity {
4092 MESA_DEBUG_SEVERITY_LOW,
4093 MESA_DEBUG_SEVERITY_MEDIUM,
4094 MESA_DEBUG_SEVERITY_HIGH,
4095 MESA_DEBUG_SEVERITY_NOTIFICATION,
4096 MESA_DEBUG_SEVERITY_COUNT
4097 };
4098
4099 /** @} */
4100
4101 /**
4102 * Driver-specific state flags.
4103 *
4104 * These are or'd with gl_context::NewDriverState to notify a driver about
4105 * a state change. The driver sets the flags at context creation and
4106 * the meaning of the bits set is opaque to core Mesa.
4107 */
4108 struct gl_driver_flags
4109 {
4110 /** gl_context::Array::_DrawArrays (vertex array state) */
4111 uint64_t NewArray;
4112
4113 /** gl_context::TransformFeedback::CurrentObject */
4114 uint64_t NewTransformFeedback;
4115
4116 /** gl_context::TransformFeedback::CurrentObject::shader_program */
4117 uint64_t NewTransformFeedbackProg;
4118
4119 /** gl_context::RasterDiscard */
4120 uint64_t NewRasterizerDiscard;
4121
4122 /**
4123 * gl_context::UniformBufferBindings
4124 * gl_shader_program::UniformBlocks
4125 */
4126 uint64_t NewUniformBuffer;
4127
4128 uint64_t NewTextureBuffer;
4129
4130 /**
4131 * gl_context::AtomicBufferBindings
4132 */
4133 uint64_t NewAtomicBuffer;
4134
4135 /**
4136 * gl_context::ImageUnits
4137 */
4138 uint64_t NewImageUnits;
4139 };
4140
4141 struct gl_uniform_buffer_binding
4142 {
4143 struct gl_buffer_object *BufferObject;
4144 /** Start of uniform block data in the buffer */
4145 GLintptr Offset;
4146 /** Size of data allowed to be referenced from the buffer (in bytes) */
4147 GLsizeiptr Size;
4148 /**
4149 * glBindBufferBase() indicates that the Size should be ignored and only
4150 * limited by the current size of the BufferObject.
4151 */
4152 GLboolean AutomaticSize;
4153 };
4154
4155 /**
4156 * ARB_shader_image_load_store image unit.
4157 */
4158 struct gl_image_unit
4159 {
4160 /**
4161 * Texture object bound to this unit.
4162 */
4163 struct gl_texture_object *TexObj;
4164
4165 /**
4166 * Level of the texture object bound to this unit.
4167 */
4168 GLuint Level;
4169
4170 /**
4171 * \c GL_TRUE if the whole level is bound as an array of layers, \c
4172 * GL_FALSE if only some specific layer of the texture is bound.
4173 * \sa Layer
4174 */
4175 GLboolean Layered;
4176
4177 /**
4178 * GL_TRUE if the state of this image unit is valid and access from
4179 * the shader is allowed. Otherwise loads from this unit should
4180 * return zero and stores should have no effect.
4181 */
4182 GLboolean _Valid;
4183
4184 /**
4185 * Layer of the texture object bound to this unit, or zero if the
4186 * whole level is bound.
4187 */
4188 GLuint Layer;
4189
4190 /**
4191 * Access allowed to this texture image. Either \c GL_READ_ONLY,
4192 * \c GL_WRITE_ONLY or \c GL_READ_WRITE.
4193 */
4194 GLenum Access;
4195
4196 /**
4197 * GL internal format that determines the interpretation of the
4198 * image memory when shader image operations are performed through
4199 * this unit.
4200 */
4201 GLenum Format;
4202
4203 /**
4204 * Mesa format corresponding to \c Format.
4205 */
4206 mesa_format _ActualFormat;
4207
4208 };
4209
4210 /**
4211 * Binding point for an atomic counter buffer object.
4212 */
4213 struct gl_atomic_buffer_binding
4214 {
4215 struct gl_buffer_object *BufferObject;
4216 GLintptr Offset;
4217 GLsizeiptr Size;
4218 };
4219
4220 /**
4221 * Mesa rendering context.
4222 *
4223 * This is the central context data structure for Mesa. Almost all
4224 * OpenGL state is contained in this structure.
4225 * Think of this as a base class from which device drivers will derive
4226 * sub classes.
4227 */
4228 struct gl_context
4229 {
4230 /** State possibly shared with other contexts in the address space */
4231 struct gl_shared_state *Shared;
4232
4233 /** \name API function pointer tables */
4234 /*@{*/
4235 gl_api API;
4236 /**
4237 * The current dispatch table for non-displaylist-saving execution, either
4238 * BeginEnd or OutsideBeginEnd
4239 */
4240 struct _glapi_table *Exec;
4241 /**
4242 * The normal dispatch table for non-displaylist-saving, non-begin/end
4243 */
4244 struct _glapi_table *OutsideBeginEnd;
4245 /** The dispatch table used between glNewList() and glEndList() */
4246 struct _glapi_table *Save;
4247 /**
4248 * The dispatch table used between glBegin() and glEnd() (outside of a
4249 * display list). Only valid functions between those two are set, which is
4250 * mostly just the set in a GLvertexformat struct.
4251 */
4252 struct _glapi_table *BeginEnd;
4253 /**
4254 * Tracks the current dispatch table out of the 3 above, so that it can be
4255 * re-set on glXMakeCurrent().
4256 */
4257 struct _glapi_table *CurrentDispatch;
4258 /*@}*/
4259
4260 struct gl_config Visual;
4261 struct gl_framebuffer *DrawBuffer; /**< buffer for writing */
4262 struct gl_framebuffer *ReadBuffer; /**< buffer for reading */
4263 struct gl_framebuffer *WinSysDrawBuffer; /**< set with MakeCurrent */
4264 struct gl_framebuffer *WinSysReadBuffer; /**< set with MakeCurrent */
4265
4266 /**
4267 * Device driver function pointer table
4268 */
4269 struct dd_function_table Driver;
4270
4271 /** Core/Driver constants */
4272 struct gl_constants Const;
4273
4274 /** \name The various 4x4 matrix stacks */
4275 /*@{*/
4276 struct gl_matrix_stack ModelviewMatrixStack;
4277 struct gl_matrix_stack ProjectionMatrixStack;
4278 struct gl_matrix_stack TextureMatrixStack[MAX_TEXTURE_UNITS];
4279 struct gl_matrix_stack ProgramMatrixStack[MAX_PROGRAM_MATRICES];
4280 struct gl_matrix_stack *CurrentStack; /**< Points to one of the above stacks */
4281 /*@}*/
4282
4283 /** Combined modelview and projection matrix */
4284 GLmatrix _ModelProjectMatrix;
4285
4286 /** \name Display lists */
4287 struct gl_dlist_state ListState;
4288
4289 GLboolean ExecuteFlag; /**< Execute GL commands? */
4290 GLboolean CompileFlag; /**< Compile GL commands into display list? */
4291
4292 /** Extension information */
4293 struct gl_extensions Extensions;
4294
4295 /** GL version integer, for example 31 for GL 3.1, or 20 for GLES 2.0. */
4296 GLuint Version;
4297 char *VersionString;
4298
4299 /** \name State attribute stack (for glPush/PopAttrib) */
4300 /*@{*/
4301 GLuint AttribStackDepth;
4302 struct gl_attrib_node *AttribStack[MAX_ATTRIB_STACK_DEPTH];
4303 /*@}*/
4304
4305 /** \name Renderer attribute groups
4306 *
4307 * We define a struct for each attribute group to make pushing and popping
4308 * attributes easy. Also it's a good organization.
4309 */
4310 /*@{*/
4311 struct gl_accum_attrib Accum; /**< Accum buffer attributes */
4312 struct gl_colorbuffer_attrib Color; /**< Color buffer attributes */
4313 struct gl_current_attrib Current; /**< Current attributes */
4314 struct gl_depthbuffer_attrib Depth; /**< Depth buffer attributes */
4315 struct gl_eval_attrib Eval; /**< Eval attributes */
4316 struct gl_fog_attrib Fog; /**< Fog attributes */
4317 struct gl_hint_attrib Hint; /**< Hint attributes */
4318 struct gl_light_attrib Light; /**< Light attributes */
4319 struct gl_line_attrib Line; /**< Line attributes */
4320 struct gl_list_attrib List; /**< List attributes */
4321 struct gl_multisample_attrib Multisample;
4322 struct gl_pixel_attrib Pixel; /**< Pixel attributes */
4323 struct gl_point_attrib Point; /**< Point attributes */
4324 struct gl_polygon_attrib Polygon; /**< Polygon attributes */
4325 GLuint PolygonStipple[32]; /**< Polygon stipple */
4326 struct gl_scissor_attrib Scissor; /**< Scissor attributes */
4327 struct gl_stencil_attrib Stencil; /**< Stencil buffer attributes */
4328 struct gl_texture_attrib Texture; /**< Texture attributes */
4329 struct gl_transform_attrib Transform; /**< Transformation attributes */
4330 struct gl_viewport_attrib ViewportArray[MAX_VIEWPORTS]; /**< Viewport attributes */
4331 /*@}*/
4332
4333 /** \name Client attribute stack */
4334 /*@{*/
4335 GLuint ClientAttribStackDepth;
4336 struct gl_attrib_node *ClientAttribStack[MAX_CLIENT_ATTRIB_STACK_DEPTH];
4337 /*@}*/
4338
4339 /** \name Client attribute groups */
4340 /*@{*/
4341 struct gl_array_attrib Array; /**< Vertex arrays */
4342 struct gl_pixelstore_attrib Pack; /**< Pixel packing */
4343 struct gl_pixelstore_attrib Unpack; /**< Pixel unpacking */
4344 struct gl_pixelstore_attrib DefaultPacking; /**< Default params */
4345 /*@}*/
4346
4347 /** \name Other assorted state (not pushed/popped on attribute stack) */
4348 /*@{*/
4349 struct gl_pixelmaps PixelMaps;
4350
4351 struct gl_evaluators EvalMap; /**< All evaluators */
4352 struct gl_feedback Feedback; /**< Feedback */
4353 struct gl_selection Select; /**< Selection */
4354
4355 struct gl_program_state Program; /**< general program state */
4356 struct gl_vertex_program_state VertexProgram;
4357 struct gl_fragment_program_state FragmentProgram;
4358 struct gl_geometry_program_state GeometryProgram;
4359 struct gl_compute_program_state ComputeProgram;
4360 struct gl_ati_fragment_shader_state ATIFragmentShader;
4361
4362 struct gl_pipeline_shader_state Pipeline; /**< GLSL pipeline shader object state */
4363 struct gl_pipeline_object Shader; /**< GLSL shader object state */
4364
4365 /**
4366 * Current active shader pipeline state
4367 *
4368 * Almost all internal users want ::_Shader instead of ::Shader. The
4369 * exceptions are bits of legacy GLSL API that do not know about separate
4370 * shader objects.
4371 *
4372 * If a program is active via \c glUseProgram, this will point to
4373 * \c ::Shader.
4374 *
4375 * If a program pipeline is active via \c glBindProgramPipeline, this will
4376 * point to \c ::Pipeline.Current.
4377 *
4378 * If neither a program nor a program pipeline is active, this will point to
4379 * \c ::Pipeline.Default. This ensures that \c ::_Shader will never be
4380 * \c NULL.
4381 */
4382 struct gl_pipeline_object *_Shader;
4383
4384 struct gl_query_state Query; /**< occlusion, timer queries */
4385
4386 struct gl_transform_feedback_state TransformFeedback;
4387
4388 struct gl_perf_monitor_state PerfMonitor;
4389
4390 struct gl_buffer_object *DrawIndirectBuffer; /** < GL_ARB_draw_indirect */
4391
4392 struct gl_buffer_object *CopyReadBuffer; /**< GL_ARB_copy_buffer */
4393 struct gl_buffer_object *CopyWriteBuffer; /**< GL_ARB_copy_buffer */
4394
4395 /**
4396 * Current GL_ARB_uniform_buffer_object binding referenced by
4397 * GL_UNIFORM_BUFFER target for glBufferData, glMapBuffer, etc.
4398 */
4399 struct gl_buffer_object *UniformBuffer;
4400
4401 /**
4402 * Array of uniform buffers for GL_ARB_uniform_buffer_object and GL 3.1.
4403 * This is set up using glBindBufferRange() or glBindBufferBase(). They are
4404 * associated with uniform blocks by glUniformBlockBinding()'s state in the
4405 * shader program.
4406 */
4407 struct gl_uniform_buffer_binding
4408 UniformBufferBindings[MAX_COMBINED_UNIFORM_BUFFERS];
4409
4410 /**
4411 * Object currently associated with the GL_ATOMIC_COUNTER_BUFFER
4412 * target.
4413 */
4414 struct gl_buffer_object *AtomicBuffer;
4415
4416 /**
4417 * Object currently associated w/ the GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD
4418 * target.
4419 */
4420 struct gl_buffer_object *ExternalVirtualMemoryBuffer;
4421
4422 /**
4423 * Array of atomic counter buffer binding points.
4424 */
4425 struct gl_atomic_buffer_binding
4426 AtomicBufferBindings[MAX_COMBINED_ATOMIC_BUFFERS];
4427
4428 /**
4429 * Array of image units for ARB_shader_image_load_store.
4430 */
4431 struct gl_image_unit ImageUnits[MAX_IMAGE_UNITS];
4432
4433 /*@}*/
4434
4435 struct gl_meta_state *Meta; /**< for "meta" operations */
4436
4437 /* GL_EXT_framebuffer_object */
4438 struct gl_renderbuffer *CurrentRenderbuffer;
4439
4440 GLenum ErrorValue; /**< Last error code */
4441
4442 /**
4443 * Recognize and silence repeated error debug messages in buggy apps.
4444 */
4445 const char *ErrorDebugFmtString;
4446 GLuint ErrorDebugCount;
4447
4448 /* GL_ARB_debug_output/GL_KHR_debug */
4449 mtx_t DebugMutex;
4450 struct gl_debug_state *Debug;
4451
4452 GLenum RenderMode; /**< either GL_RENDER, GL_SELECT, GL_FEEDBACK */
4453 GLbitfield NewState; /**< bitwise-or of _NEW_* flags */
4454 uint64_t NewDriverState; /**< bitwise-or of flags from DriverFlags */
4455
4456 struct gl_driver_flags DriverFlags;
4457
4458 GLboolean ViewportInitialized; /**< has viewport size been initialized? */
4459
4460 GLbitfield64 varying_vp_inputs; /**< mask of VERT_BIT_* flags */
4461
4462 /** \name Derived state */
4463 GLbitfield _ImageTransferState;/**< bitwise-or of IMAGE_*_BIT flags */
4464 GLfloat _EyeZDir[3];
4465 GLfloat _ModelViewInvScale;
4466 GLboolean _NeedEyeCoords;
4467 GLboolean _ForceEyeCoords;
4468
4469 GLuint TextureStateTimestamp; /**< detect changes to shared state */
4470
4471 struct gl_list_extensions *ListExt; /**< driver dlist extensions */
4472
4473 /** \name For debugging/development only */
4474 /*@{*/
4475 GLboolean FirstTimeCurrent;
4476 /*@}*/
4477
4478 /**
4479 * False if this context was created without a config. This is needed
4480 * because the initial state of glDrawBuffers depends on this
4481 */
4482 GLboolean HasConfig;
4483
4484 /** software compression/decompression supported or not */
4485 GLboolean Mesa_DXTn;
4486
4487 GLboolean TextureFormatSupported[MESA_FORMAT_COUNT];
4488
4489 GLboolean RasterDiscard; /**< GL_RASTERIZER_DISCARD */
4490
4491 /**
4492 * \name Hooks for module contexts.
4493 *
4494 * These will eventually live in the driver or elsewhere.
4495 */
4496 /*@{*/
4497 void *swrast_context;
4498 void *swsetup_context;
4499 void *swtnl_context;
4500 struct vbo_context *vbo_context;
4501 struct st_context *st;
4502 void *aelt_context;
4503 /*@}*/
4504
4505 /**
4506 * \name NV_vdpau_interop
4507 */
4508 /*@{*/
4509 const void *vdpDevice;
4510 const void *vdpGetProcAddress;
4511 struct set *vdpSurfaces;
4512 /*@}*/
4513
4514 /**
4515 * Has this context observed a GPU reset in any context in the share group?
4516 *
4517 * Once this field becomes true, it is never reset to false.
4518 */
4519 GLboolean ShareGroupReset;
4520 };
4521
4522
4523 #ifdef DEBUG
4524 extern int MESA_VERBOSE;
4525 extern int MESA_DEBUG_FLAGS;
4526 # define MESA_FUNCTION __FUNCTION__
4527 #else
4528 # define MESA_VERBOSE 0
4529 # define MESA_DEBUG_FLAGS 0
4530 # define MESA_FUNCTION "a function"
4531 #endif
4532
4533
4534 /** The MESA_VERBOSE var is a bitmask of these flags */
4535 enum _verbose
4536 {
4537 VERBOSE_VARRAY = 0x0001,
4538 VERBOSE_TEXTURE = 0x0002,
4539 VERBOSE_MATERIAL = 0x0004,
4540 VERBOSE_PIPELINE = 0x0008,
4541 VERBOSE_DRIVER = 0x0010,
4542 VERBOSE_STATE = 0x0020,
4543 VERBOSE_API = 0x0040,
4544 VERBOSE_DISPLAY_LIST = 0x0100,
4545 VERBOSE_LIGHTING = 0x0200,
4546 VERBOSE_PRIMS = 0x0400,
4547 VERBOSE_VERTS = 0x0800,
4548 VERBOSE_DISASSEM = 0x1000,
4549 VERBOSE_DRAW = 0x2000,
4550 VERBOSE_SWAPBUFFERS = 0x4000
4551 };
4552
4553
4554 /** The MESA_DEBUG_FLAGS var is a bitmask of these flags */
4555 enum _debug
4556 {
4557 DEBUG_SILENT = (1 << 0),
4558 DEBUG_ALWAYS_FLUSH = (1 << 1),
4559 DEBUG_INCOMPLETE_TEXTURE = (1 << 2),
4560 DEBUG_INCOMPLETE_FBO = (1 << 3)
4561 };
4562
4563
4564
4565 #ifdef __cplusplus
4566 }
4567 #endif
4568
4569 #endif /* MTYPES_H */