1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Mesa 3-D graphics library
3*61046927SAndroid Build Coastguard Worker *
4*61046927SAndroid Build Coastguard Worker * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
5*61046927SAndroid Build Coastguard Worker * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
6*61046927SAndroid Build Coastguard Worker *
7*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
8*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
9*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
10*61046927SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11*61046927SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
12*61046927SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
13*61046927SAndroid Build Coastguard Worker *
14*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included
15*61046927SAndroid Build Coastguard Worker * in all copies or substantial portions of the Software.
16*61046927SAndroid Build Coastguard Worker *
17*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18*61046927SAndroid Build Coastguard Worker * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21*61046927SAndroid Build Coastguard Worker * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22*61046927SAndroid Build Coastguard Worker * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23*61046927SAndroid Build Coastguard Worker * OTHER DEALINGS IN THE SOFTWARE.
24*61046927SAndroid Build Coastguard Worker */
25*61046927SAndroid Build Coastguard Worker
26*61046927SAndroid Build Coastguard Worker #ifndef SHADER_ENUMS_H
27*61046927SAndroid Build Coastguard Worker #define SHADER_ENUMS_H
28*61046927SAndroid Build Coastguard Worker
29*61046927SAndroid Build Coastguard Worker #ifndef __OPENCL_VERSION__
30*61046927SAndroid Build Coastguard Worker #include <stdbool.h>
31*61046927SAndroid Build Coastguard Worker #include "util/macros.h"
32*61046927SAndroid Build Coastguard Worker #include "util/u_debug.h"
33*61046927SAndroid Build Coastguard Worker #else
34*61046927SAndroid Build Coastguard Worker #define ENUM_PACKED
35*61046927SAndroid Build Coastguard Worker #define BITFIELD_BIT(b) (1u << (b))
36*61046927SAndroid Build Coastguard Worker #define debug_printf(x, ...)
37*61046927SAndroid Build Coastguard Worker #endif
38*61046927SAndroid Build Coastguard Worker
39*61046927SAndroid Build Coastguard Worker /* Project-wide (GL and Vulkan) maximum. */
40*61046927SAndroid Build Coastguard Worker #define MAX_DRAW_BUFFERS 8
41*61046927SAndroid Build Coastguard Worker
42*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
43*61046927SAndroid Build Coastguard Worker extern "C" {
44*61046927SAndroid Build Coastguard Worker #endif
45*61046927SAndroid Build Coastguard Worker
46*61046927SAndroid Build Coastguard Worker /**
47*61046927SAndroid Build Coastguard Worker * Shader stages.
48*61046927SAndroid Build Coastguard Worker *
49*61046927SAndroid Build Coastguard Worker * The order must match how shaders are ordered in the pipeline.
50*61046927SAndroid Build Coastguard Worker * The GLSL linker assumes that if i<j, then the j-th shader is
51*61046927SAndroid Build Coastguard Worker * executed later than the i-th shader.
52*61046927SAndroid Build Coastguard Worker */
53*61046927SAndroid Build Coastguard Worker typedef enum pipe_shader_type
54*61046927SAndroid Build Coastguard Worker {
55*61046927SAndroid Build Coastguard Worker MESA_SHADER_NONE = -1,
56*61046927SAndroid Build Coastguard Worker MESA_SHADER_VERTEX = 0,
57*61046927SAndroid Build Coastguard Worker PIPE_SHADER_VERTEX = MESA_SHADER_VERTEX,
58*61046927SAndroid Build Coastguard Worker MESA_SHADER_TESS_CTRL = 1,
59*61046927SAndroid Build Coastguard Worker PIPE_SHADER_TESS_CTRL = MESA_SHADER_TESS_CTRL,
60*61046927SAndroid Build Coastguard Worker MESA_SHADER_TESS_EVAL = 2,
61*61046927SAndroid Build Coastguard Worker PIPE_SHADER_TESS_EVAL = MESA_SHADER_TESS_EVAL,
62*61046927SAndroid Build Coastguard Worker MESA_SHADER_GEOMETRY = 3,
63*61046927SAndroid Build Coastguard Worker PIPE_SHADER_GEOMETRY = MESA_SHADER_GEOMETRY,
64*61046927SAndroid Build Coastguard Worker MESA_SHADER_FRAGMENT = 4,
65*61046927SAndroid Build Coastguard Worker PIPE_SHADER_FRAGMENT = MESA_SHADER_FRAGMENT,
66*61046927SAndroid Build Coastguard Worker MESA_SHADER_COMPUTE = 5,
67*61046927SAndroid Build Coastguard Worker PIPE_SHADER_COMPUTE = MESA_SHADER_COMPUTE,
68*61046927SAndroid Build Coastguard Worker
69*61046927SAndroid Build Coastguard Worker PIPE_SHADER_TYPES = (PIPE_SHADER_COMPUTE + 1),
70*61046927SAndroid Build Coastguard Worker /* Vulkan-only stages. */
71*61046927SAndroid Build Coastguard Worker MESA_SHADER_TASK = 6,
72*61046927SAndroid Build Coastguard Worker PIPE_SHADER_TASK = MESA_SHADER_TASK,
73*61046927SAndroid Build Coastguard Worker MESA_SHADER_MESH = 7,
74*61046927SAndroid Build Coastguard Worker PIPE_SHADER_MESH = MESA_SHADER_MESH,
75*61046927SAndroid Build Coastguard Worker PIPE_SHADER_MESH_TYPES = (PIPE_SHADER_MESH + 1),
76*61046927SAndroid Build Coastguard Worker
77*61046927SAndroid Build Coastguard Worker MESA_SHADER_RAYGEN = 8,
78*61046927SAndroid Build Coastguard Worker MESA_SHADER_ANY_HIT = 9,
79*61046927SAndroid Build Coastguard Worker MESA_SHADER_CLOSEST_HIT = 10,
80*61046927SAndroid Build Coastguard Worker MESA_SHADER_MISS = 11,
81*61046927SAndroid Build Coastguard Worker MESA_SHADER_INTERSECTION = 12,
82*61046927SAndroid Build Coastguard Worker MESA_SHADER_CALLABLE = 13,
83*61046927SAndroid Build Coastguard Worker
84*61046927SAndroid Build Coastguard Worker /* must be last so it doesn't affect the GL pipeline */
85*61046927SAndroid Build Coastguard Worker MESA_SHADER_KERNEL = 14,
86*61046927SAndroid Build Coastguard Worker } gl_shader_stage;
87*61046927SAndroid Build Coastguard Worker
88*61046927SAndroid Build Coastguard Worker static inline bool
gl_shader_stage_is_compute(gl_shader_stage stage)89*61046927SAndroid Build Coastguard Worker gl_shader_stage_is_compute(gl_shader_stage stage)
90*61046927SAndroid Build Coastguard Worker {
91*61046927SAndroid Build Coastguard Worker return stage == MESA_SHADER_COMPUTE || stage == MESA_SHADER_KERNEL;
92*61046927SAndroid Build Coastguard Worker }
93*61046927SAndroid Build Coastguard Worker
94*61046927SAndroid Build Coastguard Worker static inline bool
gl_shader_stage_is_mesh(gl_shader_stage stage)95*61046927SAndroid Build Coastguard Worker gl_shader_stage_is_mesh(gl_shader_stage stage)
96*61046927SAndroid Build Coastguard Worker {
97*61046927SAndroid Build Coastguard Worker return stage == MESA_SHADER_TASK ||
98*61046927SAndroid Build Coastguard Worker stage == MESA_SHADER_MESH;
99*61046927SAndroid Build Coastguard Worker }
100*61046927SAndroid Build Coastguard Worker
101*61046927SAndroid Build Coastguard Worker static inline bool
gl_shader_stage_uses_workgroup(gl_shader_stage stage)102*61046927SAndroid Build Coastguard Worker gl_shader_stage_uses_workgroup(gl_shader_stage stage)
103*61046927SAndroid Build Coastguard Worker {
104*61046927SAndroid Build Coastguard Worker return stage == MESA_SHADER_COMPUTE ||
105*61046927SAndroid Build Coastguard Worker stage == MESA_SHADER_KERNEL ||
106*61046927SAndroid Build Coastguard Worker stage == MESA_SHADER_TASK ||
107*61046927SAndroid Build Coastguard Worker stage == MESA_SHADER_MESH;
108*61046927SAndroid Build Coastguard Worker }
109*61046927SAndroid Build Coastguard Worker
110*61046927SAndroid Build Coastguard Worker static inline bool
gl_shader_stage_is_callable(gl_shader_stage stage)111*61046927SAndroid Build Coastguard Worker gl_shader_stage_is_callable(gl_shader_stage stage)
112*61046927SAndroid Build Coastguard Worker {
113*61046927SAndroid Build Coastguard Worker return stage == MESA_SHADER_ANY_HIT ||
114*61046927SAndroid Build Coastguard Worker stage == MESA_SHADER_CLOSEST_HIT ||
115*61046927SAndroid Build Coastguard Worker stage == MESA_SHADER_MISS ||
116*61046927SAndroid Build Coastguard Worker stage == MESA_SHADER_INTERSECTION ||
117*61046927SAndroid Build Coastguard Worker stage == MESA_SHADER_CALLABLE;
118*61046927SAndroid Build Coastguard Worker }
119*61046927SAndroid Build Coastguard Worker
120*61046927SAndroid Build Coastguard Worker static inline bool
gl_shader_stage_is_rt(gl_shader_stage stage)121*61046927SAndroid Build Coastguard Worker gl_shader_stage_is_rt(gl_shader_stage stage)
122*61046927SAndroid Build Coastguard Worker {
123*61046927SAndroid Build Coastguard Worker return stage == MESA_SHADER_RAYGEN || gl_shader_stage_is_callable(stage);
124*61046927SAndroid Build Coastguard Worker }
125*61046927SAndroid Build Coastguard Worker
126*61046927SAndroid Build Coastguard Worker static inline bool
gl_shader_stage_can_set_fragment_shading_rate(gl_shader_stage stage)127*61046927SAndroid Build Coastguard Worker gl_shader_stage_can_set_fragment_shading_rate(gl_shader_stage stage)
128*61046927SAndroid Build Coastguard Worker {
129*61046927SAndroid Build Coastguard Worker /* According to EXT_fragment_shading_rate :
130*61046927SAndroid Build Coastguard Worker *
131*61046927SAndroid Build Coastguard Worker * "This extension adds support for setting the fragment shading rate
132*61046927SAndroid Build Coastguard Worker * for a primitive in vertex, geometry, and mesh shading stages"
133*61046927SAndroid Build Coastguard Worker */
134*61046927SAndroid Build Coastguard Worker return stage == MESA_SHADER_VERTEX ||
135*61046927SAndroid Build Coastguard Worker stage == MESA_SHADER_GEOMETRY ||
136*61046927SAndroid Build Coastguard Worker stage == MESA_SHADER_MESH;
137*61046927SAndroid Build Coastguard Worker }
138*61046927SAndroid Build Coastguard Worker
139*61046927SAndroid Build Coastguard Worker /**
140*61046927SAndroid Build Coastguard Worker * Number of STATE_* values we need to address any GL state.
141*61046927SAndroid Build Coastguard Worker * Used to dimension arrays.
142*61046927SAndroid Build Coastguard Worker */
143*61046927SAndroid Build Coastguard Worker #define STATE_LENGTH 4
144*61046927SAndroid Build Coastguard Worker
145*61046927SAndroid Build Coastguard Worker typedef short gl_state_index16; /* see enum gl_state_index */
146*61046927SAndroid Build Coastguard Worker
147*61046927SAndroid Build Coastguard Worker const char *gl_shader_stage_name(gl_shader_stage stage);
148*61046927SAndroid Build Coastguard Worker
149*61046927SAndroid Build Coastguard Worker /**
150*61046927SAndroid Build Coastguard Worker * Translate a gl_shader_stage to a short shader stage name for debug
151*61046927SAndroid Build Coastguard Worker * printouts and error messages.
152*61046927SAndroid Build Coastguard Worker */
153*61046927SAndroid Build Coastguard Worker const char *_mesa_shader_stage_to_string(unsigned stage);
154*61046927SAndroid Build Coastguard Worker
155*61046927SAndroid Build Coastguard Worker /**
156*61046927SAndroid Build Coastguard Worker * Translate a gl_shader_stage to a shader stage abbreviation (VS, GS, FS)
157*61046927SAndroid Build Coastguard Worker * for debug printouts and error messages.
158*61046927SAndroid Build Coastguard Worker */
159*61046927SAndroid Build Coastguard Worker const char *_mesa_shader_stage_to_abbrev(unsigned stage);
160*61046927SAndroid Build Coastguard Worker
161*61046927SAndroid Build Coastguard Worker /**
162*61046927SAndroid Build Coastguard Worker * GL related stages (not including CL)
163*61046927SAndroid Build Coastguard Worker */
164*61046927SAndroid Build Coastguard Worker #define MESA_SHADER_STAGES (MESA_SHADER_COMPUTE + 1)
165*61046927SAndroid Build Coastguard Worker
166*61046927SAndroid Build Coastguard Worker /**
167*61046927SAndroid Build Coastguard Worker * Vulkan stages (not including CL)
168*61046927SAndroid Build Coastguard Worker */
169*61046927SAndroid Build Coastguard Worker #define MESA_VULKAN_SHADER_STAGES (MESA_SHADER_CALLABLE + 1)
170*61046927SAndroid Build Coastguard Worker
171*61046927SAndroid Build Coastguard Worker /**
172*61046927SAndroid Build Coastguard Worker * All stages
173*61046927SAndroid Build Coastguard Worker */
174*61046927SAndroid Build Coastguard Worker #define MESA_ALL_SHADER_STAGES (MESA_SHADER_KERNEL + 1)
175*61046927SAndroid Build Coastguard Worker
176*61046927SAndroid Build Coastguard Worker
177*61046927SAndroid Build Coastguard Worker /**
178*61046927SAndroid Build Coastguard Worker * Indexes for vertex program attributes.
179*61046927SAndroid Build Coastguard Worker * GL_NV_vertex_program aliases generic attributes over the conventional
180*61046927SAndroid Build Coastguard Worker * attributes. In GL_ARB_vertex_program shader the aliasing is optional.
181*61046927SAndroid Build Coastguard Worker * In GL_ARB_vertex_shader / OpenGL 2.0 the aliasing is disallowed (the
182*61046927SAndroid Build Coastguard Worker * generic attributes are distinct/separate).
183*61046927SAndroid Build Coastguard Worker */
184*61046927SAndroid Build Coastguard Worker typedef enum
185*61046927SAndroid Build Coastguard Worker {
186*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_POS,
187*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_NORMAL,
188*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_COLOR0,
189*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_COLOR1,
190*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_FOG,
191*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_COLOR_INDEX,
192*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_TEX0,
193*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_TEX1,
194*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_TEX2,
195*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_TEX3,
196*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_TEX4,
197*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_TEX5,
198*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_TEX6,
199*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_TEX7,
200*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_POINT_SIZE,
201*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC0,
202*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC1,
203*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC2,
204*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC3,
205*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC4,
206*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC5,
207*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC6,
208*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC7,
209*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC8,
210*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC9,
211*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC10,
212*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC11,
213*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC12,
214*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC13,
215*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC14,
216*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC15,
217*61046927SAndroid Build Coastguard Worker /* This must be last to keep VS inputs and vertex attributes in the same
218*61046927SAndroid Build Coastguard Worker * order in st/mesa, and st/mesa always adds edgeflags as the last input.
219*61046927SAndroid Build Coastguard Worker */
220*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_EDGEFLAG,
221*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_MAX
222*61046927SAndroid Build Coastguard Worker } gl_vert_attrib;
223*61046927SAndroid Build Coastguard Worker
224*61046927SAndroid Build Coastguard Worker const char *gl_vert_attrib_name(gl_vert_attrib attrib);
225*61046927SAndroid Build Coastguard Worker
226*61046927SAndroid Build Coastguard Worker /**
227*61046927SAndroid Build Coastguard Worker * Max number of texture coordinate units. This mainly just applies to
228*61046927SAndroid Build Coastguard Worker * the fixed-function vertex code. This will be difficult to raise above
229*61046927SAndroid Build Coastguard Worker * eight because of various vertex attribute bitvectors.
230*61046927SAndroid Build Coastguard Worker */
231*61046927SAndroid Build Coastguard Worker #define MAX_TEXTURE_COORD_UNITS 8
232*61046927SAndroid Build Coastguard Worker #define MAX_VERTEX_GENERIC_ATTRIBS 16
233*61046927SAndroid Build Coastguard Worker
234*61046927SAndroid Build Coastguard Worker /**
235*61046927SAndroid Build Coastguard Worker * Symbolic constats to help iterating over
236*61046927SAndroid Build Coastguard Worker * specific blocks of vertex attributes.
237*61046927SAndroid Build Coastguard Worker *
238*61046927SAndroid Build Coastguard Worker * VERT_ATTRIB_TEX
239*61046927SAndroid Build Coastguard Worker * include the classic texture coordinate attributes.
240*61046927SAndroid Build Coastguard Worker * VERT_ATTRIB_GENERIC
241*61046927SAndroid Build Coastguard Worker * include the OpenGL 2.0+ GLSL generic shader attributes.
242*61046927SAndroid Build Coastguard Worker * These alias the generic GL_ARB_vertex_shader attributes.
243*61046927SAndroid Build Coastguard Worker * VERT_ATTRIB_MAT
244*61046927SAndroid Build Coastguard Worker * include the generic shader attributes used to alias
245*61046927SAndroid Build Coastguard Worker * varying material values for the TNL shader programs.
246*61046927SAndroid Build Coastguard Worker * They are located at the end of the generic attribute
247*61046927SAndroid Build Coastguard Worker * block not to overlap with the generic 0 attribute.
248*61046927SAndroid Build Coastguard Worker */
249*61046927SAndroid Build Coastguard Worker #define VERT_ATTRIB_TEX(i) (VERT_ATTRIB_TEX0 + (i))
250*61046927SAndroid Build Coastguard Worker #define VERT_ATTRIB_TEX_MAX MAX_TEXTURE_COORD_UNITS
251*61046927SAndroid Build Coastguard Worker
252*61046927SAndroid Build Coastguard Worker #define VERT_ATTRIB_GENERIC(i) (VERT_ATTRIB_GENERIC0 + (i))
253*61046927SAndroid Build Coastguard Worker #define VERT_ATTRIB_GENERIC_MAX MAX_VERTEX_GENERIC_ATTRIBS
254*61046927SAndroid Build Coastguard Worker
255*61046927SAndroid Build Coastguard Worker #define VERT_ATTRIB_MAT0 \
256*61046927SAndroid Build Coastguard Worker (VERT_ATTRIB_GENERIC_MAX - VERT_ATTRIB_MAT_MAX)
257*61046927SAndroid Build Coastguard Worker #define VERT_ATTRIB_MAT(i) \
258*61046927SAndroid Build Coastguard Worker VERT_ATTRIB_GENERIC((i) + VERT_ATTRIB_MAT0)
259*61046927SAndroid Build Coastguard Worker #define VERT_ATTRIB_MAT_MAX MAT_ATTRIB_MAX
260*61046927SAndroid Build Coastguard Worker
261*61046927SAndroid Build Coastguard Worker /**
262*61046927SAndroid Build Coastguard Worker * Bitflags for vertex attributes.
263*61046927SAndroid Build Coastguard Worker * These are used in bitfields in many places.
264*61046927SAndroid Build Coastguard Worker */
265*61046927SAndroid Build Coastguard Worker /*@{*/
266*61046927SAndroid Build Coastguard Worker #define VERT_BIT_POS BITFIELD_BIT(VERT_ATTRIB_POS)
267*61046927SAndroid Build Coastguard Worker #define VERT_BIT_NORMAL BITFIELD_BIT(VERT_ATTRIB_NORMAL)
268*61046927SAndroid Build Coastguard Worker #define VERT_BIT_COLOR0 BITFIELD_BIT(VERT_ATTRIB_COLOR0)
269*61046927SAndroid Build Coastguard Worker #define VERT_BIT_COLOR1 BITFIELD_BIT(VERT_ATTRIB_COLOR1)
270*61046927SAndroid Build Coastguard Worker #define VERT_BIT_FOG BITFIELD_BIT(VERT_ATTRIB_FOG)
271*61046927SAndroid Build Coastguard Worker #define VERT_BIT_COLOR_INDEX BITFIELD_BIT(VERT_ATTRIB_COLOR_INDEX)
272*61046927SAndroid Build Coastguard Worker #define VERT_BIT_TEX0 BITFIELD_BIT(VERT_ATTRIB_TEX0)
273*61046927SAndroid Build Coastguard Worker #define VERT_BIT_TEX1 BITFIELD_BIT(VERT_ATTRIB_TEX1)
274*61046927SAndroid Build Coastguard Worker #define VERT_BIT_TEX2 BITFIELD_BIT(VERT_ATTRIB_TEX2)
275*61046927SAndroid Build Coastguard Worker #define VERT_BIT_TEX3 BITFIELD_BIT(VERT_ATTRIB_TEX3)
276*61046927SAndroid Build Coastguard Worker #define VERT_BIT_TEX4 BITFIELD_BIT(VERT_ATTRIB_TEX4)
277*61046927SAndroid Build Coastguard Worker #define VERT_BIT_TEX5 BITFIELD_BIT(VERT_ATTRIB_TEX5)
278*61046927SAndroid Build Coastguard Worker #define VERT_BIT_TEX6 BITFIELD_BIT(VERT_ATTRIB_TEX6)
279*61046927SAndroid Build Coastguard Worker #define VERT_BIT_TEX7 BITFIELD_BIT(VERT_ATTRIB_TEX7)
280*61046927SAndroid Build Coastguard Worker #define VERT_BIT_POINT_SIZE BITFIELD_BIT(VERT_ATTRIB_POINT_SIZE)
281*61046927SAndroid Build Coastguard Worker #define VERT_BIT_GENERIC0 BITFIELD_BIT(VERT_ATTRIB_GENERIC0)
282*61046927SAndroid Build Coastguard Worker #define VERT_BIT_EDGEFLAG BITFIELD_BIT(VERT_ATTRIB_EDGEFLAG)
283*61046927SAndroid Build Coastguard Worker
284*61046927SAndroid Build Coastguard Worker #define VERT_BIT(i) BITFIELD_BIT(i)
285*61046927SAndroid Build Coastguard Worker #define VERT_BIT_ALL BITFIELD_RANGE(0, VERT_ATTRIB_MAX)
286*61046927SAndroid Build Coastguard Worker
287*61046927SAndroid Build Coastguard Worker #define VERT_BIT_FF_ALL (BITFIELD_RANGE(0, VERT_ATTRIB_GENERIC0) | \
288*61046927SAndroid Build Coastguard Worker VERT_BIT_EDGEFLAG)
289*61046927SAndroid Build Coastguard Worker #define VERT_BIT_TEX(i) VERT_BIT(VERT_ATTRIB_TEX(i))
290*61046927SAndroid Build Coastguard Worker #define VERT_BIT_TEX_ALL \
291*61046927SAndroid Build Coastguard Worker BITFIELD_RANGE(VERT_ATTRIB_TEX(0), VERT_ATTRIB_TEX_MAX)
292*61046927SAndroid Build Coastguard Worker
293*61046927SAndroid Build Coastguard Worker #define VERT_BIT_GENERIC(i) VERT_BIT(VERT_ATTRIB_GENERIC(i))
294*61046927SAndroid Build Coastguard Worker #define VERT_BIT_GENERIC_ALL \
295*61046927SAndroid Build Coastguard Worker BITFIELD_RANGE(VERT_ATTRIB_GENERIC(0), VERT_ATTRIB_GENERIC_MAX)
296*61046927SAndroid Build Coastguard Worker
297*61046927SAndroid Build Coastguard Worker #define VERT_BIT_MAT(i) VERT_BIT(VERT_ATTRIB_MAT(i))
298*61046927SAndroid Build Coastguard Worker #define VERT_BIT_MAT_ALL \
299*61046927SAndroid Build Coastguard Worker BITFIELD_RANGE(VERT_ATTRIB_MAT(0), VERT_ATTRIB_MAT_MAX)
300*61046927SAndroid Build Coastguard Worker
301*61046927SAndroid Build Coastguard Worker #define VERT_ATTRIB_SELECT_RESULT_OFFSET VERT_ATTRIB_GENERIC(3)
302*61046927SAndroid Build Coastguard Worker #define VERT_BIT_SELECT_RESULT_OFFSET VERT_BIT_GENERIC(3)
303*61046927SAndroid Build Coastguard Worker /*@}*/
304*61046927SAndroid Build Coastguard Worker
305*61046927SAndroid Build Coastguard Worker #define MAX_VARYING 32 /**< number of float[4] vectors */
306*61046927SAndroid Build Coastguard Worker
307*61046927SAndroid Build Coastguard Worker /**
308*61046927SAndroid Build Coastguard Worker * Indexes for vertex shader outputs, geometry shader inputs/outputs, and
309*61046927SAndroid Build Coastguard Worker * fragment shader inputs.
310*61046927SAndroid Build Coastguard Worker *
311*61046927SAndroid Build Coastguard Worker * Note that some of these values are not available to all pipeline stages.
312*61046927SAndroid Build Coastguard Worker *
313*61046927SAndroid Build Coastguard Worker * When this enum is updated, the following code must be updated too:
314*61046927SAndroid Build Coastguard Worker * - vertResults (in prog_print.c's arb_output_attrib_string())
315*61046927SAndroid Build Coastguard Worker * - fragAttribs (in prog_print.c's arb_input_attrib_string())
316*61046927SAndroid Build Coastguard Worker * - _mesa_varying_slot_in_fs()
317*61046927SAndroid Build Coastguard Worker * - gl_varying_slot_name_for_stage()
318*61046927SAndroid Build Coastguard Worker */
319*61046927SAndroid Build Coastguard Worker typedef enum
320*61046927SAndroid Build Coastguard Worker {
321*61046927SAndroid Build Coastguard Worker VARYING_SLOT_POS,
322*61046927SAndroid Build Coastguard Worker VARYING_SLOT_COL0, /* COL0 and COL1 must be contiguous */
323*61046927SAndroid Build Coastguard Worker VARYING_SLOT_COL1,
324*61046927SAndroid Build Coastguard Worker VARYING_SLOT_FOGC,
325*61046927SAndroid Build Coastguard Worker VARYING_SLOT_TEX0, /* TEX0-TEX7 must be contiguous */
326*61046927SAndroid Build Coastguard Worker VARYING_SLOT_TEX1,
327*61046927SAndroid Build Coastguard Worker VARYING_SLOT_TEX2,
328*61046927SAndroid Build Coastguard Worker VARYING_SLOT_TEX3,
329*61046927SAndroid Build Coastguard Worker VARYING_SLOT_TEX4,
330*61046927SAndroid Build Coastguard Worker VARYING_SLOT_TEX5,
331*61046927SAndroid Build Coastguard Worker VARYING_SLOT_TEX6,
332*61046927SAndroid Build Coastguard Worker VARYING_SLOT_TEX7,
333*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PSIZ, /* Does not appear in FS */
334*61046927SAndroid Build Coastguard Worker VARYING_SLOT_BFC0, /* Does not appear in FS */
335*61046927SAndroid Build Coastguard Worker VARYING_SLOT_BFC1, /* Does not appear in FS */
336*61046927SAndroid Build Coastguard Worker VARYING_SLOT_EDGE, /* Does not appear in FS */
337*61046927SAndroid Build Coastguard Worker VARYING_SLOT_CLIP_VERTEX, /* Does not appear in FS */
338*61046927SAndroid Build Coastguard Worker VARYING_SLOT_CLIP_DIST0,
339*61046927SAndroid Build Coastguard Worker VARYING_SLOT_CLIP_DIST1,
340*61046927SAndroid Build Coastguard Worker VARYING_SLOT_CULL_DIST0,
341*61046927SAndroid Build Coastguard Worker VARYING_SLOT_CULL_DIST1,
342*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PRIMITIVE_ID, /* Does not appear in VS */
343*61046927SAndroid Build Coastguard Worker VARYING_SLOT_LAYER, /* Appears as VS or GS output */
344*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VIEWPORT, /* Appears as VS or GS output */
345*61046927SAndroid Build Coastguard Worker VARYING_SLOT_FACE, /* FS only */
346*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PNTC, /* FS only */
347*61046927SAndroid Build Coastguard Worker VARYING_SLOT_TESS_LEVEL_OUTER, /* Only appears as TCS output. */
348*61046927SAndroid Build Coastguard Worker VARYING_SLOT_TESS_LEVEL_INNER, /* Only appears as TCS output. */
349*61046927SAndroid Build Coastguard Worker VARYING_SLOT_BOUNDING_BOX0, /* Only appears as TCS output. */
350*61046927SAndroid Build Coastguard Worker VARYING_SLOT_BOUNDING_BOX1, /* Only appears as TCS output. */
351*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VIEW_INDEX,
352*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VIEWPORT_MASK, /* Does not appear in FS */
353*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PRIMITIVE_SHADING_RATE = VARYING_SLOT_FACE, /* Does not appear in FS. */
354*61046927SAndroid Build Coastguard Worker
355*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PRIMITIVE_COUNT = VARYING_SLOT_TESS_LEVEL_OUTER, /* Only appears in MESH. */
356*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PRIMITIVE_INDICES = VARYING_SLOT_TESS_LEVEL_INNER, /* Only appears in MESH. */
357*61046927SAndroid Build Coastguard Worker VARYING_SLOT_TASK_COUNT = VARYING_SLOT_BOUNDING_BOX0, /* Only appears in TASK. */
358*61046927SAndroid Build Coastguard Worker VARYING_SLOT_CULL_PRIMITIVE = VARYING_SLOT_BOUNDING_BOX0, /* Only appears in MESH. */
359*61046927SAndroid Build Coastguard Worker
360*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR0 = 32, /* First generic varying slot */
361*61046927SAndroid Build Coastguard Worker /* the remaining are simply for the benefit of gl_varying_slot_name()
362*61046927SAndroid Build Coastguard Worker * and not to be construed as an upper bound:
363*61046927SAndroid Build Coastguard Worker */
364*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR1,
365*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR2,
366*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR3,
367*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR4,
368*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR5,
369*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR6,
370*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR7,
371*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR8,
372*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR9,
373*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR10,
374*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR11,
375*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR12,
376*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR13,
377*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR14,
378*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR15,
379*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR16,
380*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR17,
381*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR18,
382*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR19,
383*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR20,
384*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR21,
385*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR22,
386*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR23,
387*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR24,
388*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR25,
389*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR26,
390*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR27,
391*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR28,
392*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR29,
393*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR30,
394*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR31,
395*61046927SAndroid Build Coastguard Worker /* Per-patch varyings for tessellation. */
396*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH0,
397*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH1,
398*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH2,
399*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH3,
400*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH4,
401*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH5,
402*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH6,
403*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH7,
404*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH8,
405*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH9,
406*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH10,
407*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH11,
408*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH12,
409*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH13,
410*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH14,
411*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH15,
412*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH16,
413*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH17,
414*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH18,
415*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH19,
416*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH20,
417*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH21,
418*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH22,
419*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH23,
420*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH24,
421*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH25,
422*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH26,
423*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH27,
424*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH28,
425*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH29,
426*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH30,
427*61046927SAndroid Build Coastguard Worker VARYING_SLOT_PATCH31,
428*61046927SAndroid Build Coastguard Worker /* 32 16-bit vec4 slots packed in 16 32-bit vec4 slots for GLES/mediump.
429*61046927SAndroid Build Coastguard Worker * They are really just additional generic slots used for 16-bit data to
430*61046927SAndroid Build Coastguard Worker * prevent conflicts between neighboring mediump and non-mediump varyings
431*61046927SAndroid Build Coastguard Worker * that can't be packed without breaking one or the other, which is
432*61046927SAndroid Build Coastguard Worker * a limitation of separate shaders. This allows linking shaders in 32 bits
433*61046927SAndroid Build Coastguard Worker * and then get an optimally packed 16-bit varyings by remapping the IO
434*61046927SAndroid Build Coastguard Worker * locations to these slots. The remapping can also be undone trivially.
435*61046927SAndroid Build Coastguard Worker *
436*61046927SAndroid Build Coastguard Worker * nir_io_semantics::high_16bit determines which half of the slot is
437*61046927SAndroid Build Coastguard Worker * accessed. The low and high halves share the same IO "base" number.
438*61046927SAndroid Build Coastguard Worker * Drivers can treat these as 32-bit slots everywhere except for FP16
439*61046927SAndroid Build Coastguard Worker * interpolation.
440*61046927SAndroid Build Coastguard Worker */
441*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR0_16BIT,
442*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR1_16BIT,
443*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR2_16BIT,
444*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR3_16BIT,
445*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR4_16BIT,
446*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR5_16BIT,
447*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR6_16BIT,
448*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR7_16BIT,
449*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR8_16BIT,
450*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR9_16BIT,
451*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR10_16BIT,
452*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR11_16BIT,
453*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR12_16BIT,
454*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR13_16BIT,
455*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR14_16BIT,
456*61046927SAndroid Build Coastguard Worker VARYING_SLOT_VAR15_16BIT,
457*61046927SAndroid Build Coastguard Worker
458*61046927SAndroid Build Coastguard Worker NUM_TOTAL_VARYING_SLOTS,
459*61046927SAndroid Build Coastguard Worker } gl_varying_slot;
460*61046927SAndroid Build Coastguard Worker
461*61046927SAndroid Build Coastguard Worker
462*61046927SAndroid Build Coastguard Worker #define VARYING_SLOT_MAX (VARYING_SLOT_VAR0 + MAX_VARYING)
463*61046927SAndroid Build Coastguard Worker #define VARYING_SLOT_TESS_MAX (VARYING_SLOT_PATCH0 + MAX_VARYING)
464*61046927SAndroid Build Coastguard Worker #define MAX_VARYINGS_INCL_PATCH (VARYING_SLOT_TESS_MAX - VARYING_SLOT_VAR0)
465*61046927SAndroid Build Coastguard Worker
466*61046927SAndroid Build Coastguard Worker const char *gl_varying_slot_name_for_stage(gl_varying_slot slot,
467*61046927SAndroid Build Coastguard Worker gl_shader_stage stage);
468*61046927SAndroid Build Coastguard Worker
469*61046927SAndroid Build Coastguard Worker /**
470*61046927SAndroid Build Coastguard Worker * Determine if the given gl_varying_slot appears in the fragment shader.
471*61046927SAndroid Build Coastguard Worker */
472*61046927SAndroid Build Coastguard Worker static inline bool
_mesa_varying_slot_in_fs(gl_varying_slot slot)473*61046927SAndroid Build Coastguard Worker _mesa_varying_slot_in_fs(gl_varying_slot slot)
474*61046927SAndroid Build Coastguard Worker {
475*61046927SAndroid Build Coastguard Worker switch (slot) {
476*61046927SAndroid Build Coastguard Worker case VARYING_SLOT_PSIZ:
477*61046927SAndroid Build Coastguard Worker case VARYING_SLOT_BFC0:
478*61046927SAndroid Build Coastguard Worker case VARYING_SLOT_BFC1:
479*61046927SAndroid Build Coastguard Worker case VARYING_SLOT_EDGE:
480*61046927SAndroid Build Coastguard Worker case VARYING_SLOT_CLIP_VERTEX:
481*61046927SAndroid Build Coastguard Worker case VARYING_SLOT_LAYER:
482*61046927SAndroid Build Coastguard Worker case VARYING_SLOT_TESS_LEVEL_OUTER:
483*61046927SAndroid Build Coastguard Worker case VARYING_SLOT_TESS_LEVEL_INNER:
484*61046927SAndroid Build Coastguard Worker case VARYING_SLOT_BOUNDING_BOX0:
485*61046927SAndroid Build Coastguard Worker case VARYING_SLOT_BOUNDING_BOX1:
486*61046927SAndroid Build Coastguard Worker case VARYING_SLOT_VIEWPORT_MASK:
487*61046927SAndroid Build Coastguard Worker return false;
488*61046927SAndroid Build Coastguard Worker default:
489*61046927SAndroid Build Coastguard Worker return true;
490*61046927SAndroid Build Coastguard Worker }
491*61046927SAndroid Build Coastguard Worker }
492*61046927SAndroid Build Coastguard Worker
493*61046927SAndroid Build Coastguard Worker /**
494*61046927SAndroid Build Coastguard Worker * Bitflags for varying slots.
495*61046927SAndroid Build Coastguard Worker */
496*61046927SAndroid Build Coastguard Worker /*@{*/
497*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_POS BITFIELD64_BIT(VARYING_SLOT_POS)
498*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_COL0 BITFIELD64_BIT(VARYING_SLOT_COL0)
499*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_COL1 BITFIELD64_BIT(VARYING_SLOT_COL1)
500*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_FOGC BITFIELD64_BIT(VARYING_SLOT_FOGC)
501*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_TEX0 BITFIELD64_BIT(VARYING_SLOT_TEX0)
502*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_TEX1 BITFIELD64_BIT(VARYING_SLOT_TEX1)
503*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_TEX2 BITFIELD64_BIT(VARYING_SLOT_TEX2)
504*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_TEX3 BITFIELD64_BIT(VARYING_SLOT_TEX3)
505*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_TEX4 BITFIELD64_BIT(VARYING_SLOT_TEX4)
506*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_TEX5 BITFIELD64_BIT(VARYING_SLOT_TEX5)
507*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_TEX6 BITFIELD64_BIT(VARYING_SLOT_TEX6)
508*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_TEX7 BITFIELD64_BIT(VARYING_SLOT_TEX7)
509*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_TEX(U) BITFIELD64_BIT(VARYING_SLOT_TEX0 + (U))
510*61046927SAndroid Build Coastguard Worker #define VARYING_BITS_TEX_ANY BITFIELD64_RANGE(VARYING_SLOT_TEX0, \
511*61046927SAndroid Build Coastguard Worker MAX_TEXTURE_COORD_UNITS)
512*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_PSIZ BITFIELD64_BIT(VARYING_SLOT_PSIZ)
513*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_BFC0 BITFIELD64_BIT(VARYING_SLOT_BFC0)
514*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_BFC1 BITFIELD64_BIT(VARYING_SLOT_BFC1)
515*61046927SAndroid Build Coastguard Worker #define VARYING_BITS_COLOR (VARYING_BIT_COL0 | \
516*61046927SAndroid Build Coastguard Worker VARYING_BIT_COL1 | \
517*61046927SAndroid Build Coastguard Worker VARYING_BIT_BFC0 | \
518*61046927SAndroid Build Coastguard Worker VARYING_BIT_BFC1)
519*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_EDGE BITFIELD64_BIT(VARYING_SLOT_EDGE)
520*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_CLIP_VERTEX BITFIELD64_BIT(VARYING_SLOT_CLIP_VERTEX)
521*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_CLIP_DIST0 BITFIELD64_BIT(VARYING_SLOT_CLIP_DIST0)
522*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_CLIP_DIST1 BITFIELD64_BIT(VARYING_SLOT_CLIP_DIST1)
523*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_CULL_DIST0 BITFIELD64_BIT(VARYING_SLOT_CULL_DIST0)
524*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_CULL_DIST1 BITFIELD64_BIT(VARYING_SLOT_CULL_DIST1)
525*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_PRIMITIVE_ID BITFIELD64_BIT(VARYING_SLOT_PRIMITIVE_ID)
526*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_LAYER BITFIELD64_BIT(VARYING_SLOT_LAYER)
527*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_VIEWPORT BITFIELD64_BIT(VARYING_SLOT_VIEWPORT)
528*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_FACE BITFIELD64_BIT(VARYING_SLOT_FACE)
529*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_PRIMITIVE_SHADING_RATE BITFIELD64_BIT(VARYING_SLOT_PRIMITIVE_SHADING_RATE)
530*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_PNTC BITFIELD64_BIT(VARYING_SLOT_PNTC)
531*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_TESS_LEVEL_OUTER BITFIELD64_BIT(VARYING_SLOT_TESS_LEVEL_OUTER)
532*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_TESS_LEVEL_INNER BITFIELD64_BIT(VARYING_SLOT_TESS_LEVEL_INNER)
533*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_BOUNDING_BOX0 BITFIELD64_BIT(VARYING_SLOT_BOUNDING_BOX0)
534*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_BOUNDING_BOX1 BITFIELD64_BIT(VARYING_SLOT_BOUNDING_BOX1)
535*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_VIEWPORT_MASK BITFIELD64_BIT(VARYING_SLOT_VIEWPORT_MASK)
536*61046927SAndroid Build Coastguard Worker #define VARYING_BIT_VAR(V) BITFIELD64_BIT(VARYING_SLOT_VAR0 + (V))
537*61046927SAndroid Build Coastguard Worker /*@}*/
538*61046927SAndroid Build Coastguard Worker
539*61046927SAndroid Build Coastguard Worker /**
540*61046927SAndroid Build Coastguard Worker * Writemask values, 1 bit per component.
541*61046927SAndroid Build Coastguard Worker */
542*61046927SAndroid Build Coastguard Worker /*@{*/
543*61046927SAndroid Build Coastguard Worker #define WRITEMASK_X 0x1
544*61046927SAndroid Build Coastguard Worker #define WRITEMASK_Y 0x2
545*61046927SAndroid Build Coastguard Worker #define WRITEMASK_XY 0x3
546*61046927SAndroid Build Coastguard Worker #define WRITEMASK_Z 0x4
547*61046927SAndroid Build Coastguard Worker #define WRITEMASK_XZ 0x5
548*61046927SAndroid Build Coastguard Worker #define WRITEMASK_YZ 0x6
549*61046927SAndroid Build Coastguard Worker #define WRITEMASK_XYZ 0x7
550*61046927SAndroid Build Coastguard Worker #define WRITEMASK_W 0x8
551*61046927SAndroid Build Coastguard Worker #define WRITEMASK_XW 0x9
552*61046927SAndroid Build Coastguard Worker #define WRITEMASK_YW 0xa
553*61046927SAndroid Build Coastguard Worker #define WRITEMASK_XYW 0xb
554*61046927SAndroid Build Coastguard Worker #define WRITEMASK_ZW 0xc
555*61046927SAndroid Build Coastguard Worker #define WRITEMASK_XZW 0xd
556*61046927SAndroid Build Coastguard Worker #define WRITEMASK_YZW 0xe
557*61046927SAndroid Build Coastguard Worker #define WRITEMASK_XYZW 0xf
558*61046927SAndroid Build Coastguard Worker /*@}*/
559*61046927SAndroid Build Coastguard Worker
560*61046927SAndroid Build Coastguard Worker /**
561*61046927SAndroid Build Coastguard Worker * If the gl_register_file is PROGRAM_SYSTEM_VALUE, the register index will be
562*61046927SAndroid Build Coastguard Worker * one of these values. If a NIR variable's mode is nir_var_system_value, it
563*61046927SAndroid Build Coastguard Worker * will be one of these values.
564*61046927SAndroid Build Coastguard Worker */
565*61046927SAndroid Build Coastguard Worker typedef enum
566*61046927SAndroid Build Coastguard Worker {
567*61046927SAndroid Build Coastguard Worker /**
568*61046927SAndroid Build Coastguard Worker * \name System values applicable to all shaders
569*61046927SAndroid Build Coastguard Worker */
570*61046927SAndroid Build Coastguard Worker /*@{*/
571*61046927SAndroid Build Coastguard Worker
572*61046927SAndroid Build Coastguard Worker /**
573*61046927SAndroid Build Coastguard Worker * Builtin variables added by GL_ARB_shader_ballot.
574*61046927SAndroid Build Coastguard Worker */
575*61046927SAndroid Build Coastguard Worker /*@{*/
576*61046927SAndroid Build Coastguard Worker
577*61046927SAndroid Build Coastguard Worker /**
578*61046927SAndroid Build Coastguard Worker * From the GL_ARB_shader-ballot spec:
579*61046927SAndroid Build Coastguard Worker *
580*61046927SAndroid Build Coastguard Worker * "A sub-group is a collection of invocations which execute in lockstep.
581*61046927SAndroid Build Coastguard Worker * The variable <gl_SubGroupSizeARB> is the maximum number of
582*61046927SAndroid Build Coastguard Worker * invocations in a sub-group. The maximum <gl_SubGroupSizeARB>
583*61046927SAndroid Build Coastguard Worker * supported in this extension is 64."
584*61046927SAndroid Build Coastguard Worker *
585*61046927SAndroid Build Coastguard Worker * The spec defines this as a uniform. However, it's highly unlikely that
586*61046927SAndroid Build Coastguard Worker * implementations actually treat it as a uniform (which is loaded from a
587*61046927SAndroid Build Coastguard Worker * constant buffer). Most likely, this is an implementation-wide constant,
588*61046927SAndroid Build Coastguard Worker * or perhaps something that depends on the shader stage.
589*61046927SAndroid Build Coastguard Worker */
590*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SUBGROUP_SIZE,
591*61046927SAndroid Build Coastguard Worker
592*61046927SAndroid Build Coastguard Worker /**
593*61046927SAndroid Build Coastguard Worker * From the GL_ARB_shader_ballot spec:
594*61046927SAndroid Build Coastguard Worker *
595*61046927SAndroid Build Coastguard Worker * "The variable <gl_SubGroupInvocationARB> holds the index of the
596*61046927SAndroid Build Coastguard Worker * invocation within sub-group. This variable is in the range 0 to
597*61046927SAndroid Build Coastguard Worker * <gl_SubGroupSizeARB>-1, where <gl_SubGroupSizeARB> is the total
598*61046927SAndroid Build Coastguard Worker * number of invocations in a sub-group."
599*61046927SAndroid Build Coastguard Worker */
600*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SUBGROUP_INVOCATION,
601*61046927SAndroid Build Coastguard Worker
602*61046927SAndroid Build Coastguard Worker /**
603*61046927SAndroid Build Coastguard Worker * From the GL_ARB_shader_ballot spec:
604*61046927SAndroid Build Coastguard Worker *
605*61046927SAndroid Build Coastguard Worker * "The <gl_SubGroup??MaskARB> variables provide a bitmask for all
606*61046927SAndroid Build Coastguard Worker * invocations, with one bit per invocation starting with the least
607*61046927SAndroid Build Coastguard Worker * significant bit, according to the following table,
608*61046927SAndroid Build Coastguard Worker *
609*61046927SAndroid Build Coastguard Worker * variable equation for bit values
610*61046927SAndroid Build Coastguard Worker * -------------------- ------------------------------------
611*61046927SAndroid Build Coastguard Worker * gl_SubGroupEqMaskARB bit index == gl_SubGroupInvocationARB
612*61046927SAndroid Build Coastguard Worker * gl_SubGroupGeMaskARB bit index >= gl_SubGroupInvocationARB
613*61046927SAndroid Build Coastguard Worker * gl_SubGroupGtMaskARB bit index > gl_SubGroupInvocationARB
614*61046927SAndroid Build Coastguard Worker * gl_SubGroupLeMaskARB bit index <= gl_SubGroupInvocationARB
615*61046927SAndroid Build Coastguard Worker * gl_SubGroupLtMaskARB bit index < gl_SubGroupInvocationARB
616*61046927SAndroid Build Coastguard Worker */
617*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SUBGROUP_EQ_MASK,
618*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SUBGROUP_GE_MASK,
619*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SUBGROUP_GT_MASK,
620*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SUBGROUP_LE_MASK,
621*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SUBGROUP_LT_MASK,
622*61046927SAndroid Build Coastguard Worker /*@}*/
623*61046927SAndroid Build Coastguard Worker
624*61046927SAndroid Build Coastguard Worker /**
625*61046927SAndroid Build Coastguard Worker * Builtin variables added by VK_KHR_subgroups
626*61046927SAndroid Build Coastguard Worker */
627*61046927SAndroid Build Coastguard Worker /*@{*/
628*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_NUM_SUBGROUPS,
629*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SUBGROUP_ID,
630*61046927SAndroid Build Coastguard Worker /*@}*/
631*61046927SAndroid Build Coastguard Worker
632*61046927SAndroid Build Coastguard Worker /*@}*/
633*61046927SAndroid Build Coastguard Worker
634*61046927SAndroid Build Coastguard Worker /**
635*61046927SAndroid Build Coastguard Worker * \name Vertex shader system values
636*61046927SAndroid Build Coastguard Worker */
637*61046927SAndroid Build Coastguard Worker /*@{*/
638*61046927SAndroid Build Coastguard Worker /**
639*61046927SAndroid Build Coastguard Worker * OpenGL-style vertex ID.
640*61046927SAndroid Build Coastguard Worker *
641*61046927SAndroid Build Coastguard Worker * Section 2.11.7 (Shader Execution), subsection Shader Inputs, of the
642*61046927SAndroid Build Coastguard Worker * OpenGL 3.3 core profile spec says:
643*61046927SAndroid Build Coastguard Worker *
644*61046927SAndroid Build Coastguard Worker * "gl_VertexID holds the integer index i implicitly passed by
645*61046927SAndroid Build Coastguard Worker * DrawArrays or one of the other drawing commands defined in section
646*61046927SAndroid Build Coastguard Worker * 2.8.3."
647*61046927SAndroid Build Coastguard Worker *
648*61046927SAndroid Build Coastguard Worker * Section 2.8.3 (Drawing Commands) of the same spec says:
649*61046927SAndroid Build Coastguard Worker *
650*61046927SAndroid Build Coastguard Worker * "The commands....are equivalent to the commands with the same base
651*61046927SAndroid Build Coastguard Worker * name (without the BaseVertex suffix), except that the ith element
652*61046927SAndroid Build Coastguard Worker * transferred by the corresponding draw call will be taken from
653*61046927SAndroid Build Coastguard Worker * element indices[i] + basevertex of each enabled array."
654*61046927SAndroid Build Coastguard Worker *
655*61046927SAndroid Build Coastguard Worker * Additionally, the overview in the GL_ARB_shader_draw_parameters spec
656*61046927SAndroid Build Coastguard Worker * says:
657*61046927SAndroid Build Coastguard Worker *
658*61046927SAndroid Build Coastguard Worker * "In unextended GL, vertex shaders have inputs named gl_VertexID and
659*61046927SAndroid Build Coastguard Worker * gl_InstanceID, which contain, respectively the index of the vertex
660*61046927SAndroid Build Coastguard Worker * and instance. The value of gl_VertexID is the implicitly passed
661*61046927SAndroid Build Coastguard Worker * index of the vertex being processed, which includes the value of
662*61046927SAndroid Build Coastguard Worker * baseVertex, for those commands that accept it."
663*61046927SAndroid Build Coastguard Worker *
664*61046927SAndroid Build Coastguard Worker * gl_VertexID gets basevertex added in. This differs from DirectX where
665*61046927SAndroid Build Coastguard Worker * SV_VertexID does \b not get basevertex added in.
666*61046927SAndroid Build Coastguard Worker *
667*61046927SAndroid Build Coastguard Worker * \note
668*61046927SAndroid Build Coastguard Worker * If all system values are available, \c SYSTEM_VALUE_VERTEX_ID will be
669*61046927SAndroid Build Coastguard Worker * equal to \c SYSTEM_VALUE_VERTEX_ID_ZERO_BASE plus
670*61046927SAndroid Build Coastguard Worker * \c SYSTEM_VALUE_BASE_VERTEX.
671*61046927SAndroid Build Coastguard Worker *
672*61046927SAndroid Build Coastguard Worker * \sa SYSTEM_VALUE_VERTEX_ID_ZERO_BASE, SYSTEM_VALUE_BASE_VERTEX
673*61046927SAndroid Build Coastguard Worker */
674*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_VERTEX_ID,
675*61046927SAndroid Build Coastguard Worker
676*61046927SAndroid Build Coastguard Worker /**
677*61046927SAndroid Build Coastguard Worker * Instanced ID as supplied to gl_InstanceID
678*61046927SAndroid Build Coastguard Worker *
679*61046927SAndroid Build Coastguard Worker * Values assigned to gl_InstanceID always begin with zero, regardless of
680*61046927SAndroid Build Coastguard Worker * the value of baseinstance.
681*61046927SAndroid Build Coastguard Worker *
682*61046927SAndroid Build Coastguard Worker * Section 11.1.3.9 (Shader Inputs) of the OpenGL 4.4 core profile spec
683*61046927SAndroid Build Coastguard Worker * says:
684*61046927SAndroid Build Coastguard Worker *
685*61046927SAndroid Build Coastguard Worker * "gl_InstanceID holds the integer instance number of the current
686*61046927SAndroid Build Coastguard Worker * primitive in an instanced draw call (see section 10.5)."
687*61046927SAndroid Build Coastguard Worker *
688*61046927SAndroid Build Coastguard Worker * Through a big chain of pseudocode, section 10.5 describes that
689*61046927SAndroid Build Coastguard Worker * baseinstance is not counted by gl_InstanceID. In that section, notice
690*61046927SAndroid Build Coastguard Worker *
691*61046927SAndroid Build Coastguard Worker * "If an enabled vertex attribute array is instanced (it has a
692*61046927SAndroid Build Coastguard Worker * non-zero divisor as specified by VertexAttribDivisor), the element
693*61046927SAndroid Build Coastguard Worker * index that is transferred to the GL, for all vertices, is given by
694*61046927SAndroid Build Coastguard Worker *
695*61046927SAndroid Build Coastguard Worker * floor(instance/divisor) + baseinstance
696*61046927SAndroid Build Coastguard Worker *
697*61046927SAndroid Build Coastguard Worker * If an array corresponding to an attribute required by a vertex
698*61046927SAndroid Build Coastguard Worker * shader is not enabled, then the corresponding element is taken from
699*61046927SAndroid Build Coastguard Worker * the current attribute state (see section 10.2)."
700*61046927SAndroid Build Coastguard Worker *
701*61046927SAndroid Build Coastguard Worker * Note that baseinstance is \b not included in the value of instance.
702*61046927SAndroid Build Coastguard Worker */
703*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_INSTANCE_ID,
704*61046927SAndroid Build Coastguard Worker
705*61046927SAndroid Build Coastguard Worker /**
706*61046927SAndroid Build Coastguard Worker * Vulkan InstanceIndex.
707*61046927SAndroid Build Coastguard Worker *
708*61046927SAndroid Build Coastguard Worker * InstanceIndex = gl_InstanceID + gl_BaseInstance
709*61046927SAndroid Build Coastguard Worker */
710*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_INSTANCE_INDEX,
711*61046927SAndroid Build Coastguard Worker
712*61046927SAndroid Build Coastguard Worker /**
713*61046927SAndroid Build Coastguard Worker * DirectX-style vertex ID.
714*61046927SAndroid Build Coastguard Worker *
715*61046927SAndroid Build Coastguard Worker * Unlike \c SYSTEM_VALUE_VERTEX_ID, this system value does \b not include
716*61046927SAndroid Build Coastguard Worker * the value of basevertex.
717*61046927SAndroid Build Coastguard Worker *
718*61046927SAndroid Build Coastguard Worker * \sa SYSTEM_VALUE_VERTEX_ID, SYSTEM_VALUE_BASE_VERTEX
719*61046927SAndroid Build Coastguard Worker */
720*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_VERTEX_ID_ZERO_BASE,
721*61046927SAndroid Build Coastguard Worker
722*61046927SAndroid Build Coastguard Worker /**
723*61046927SAndroid Build Coastguard Worker * Value of \c basevertex passed to \c glDrawElementsBaseVertex and similar
724*61046927SAndroid Build Coastguard Worker * functions.
725*61046927SAndroid Build Coastguard Worker *
726*61046927SAndroid Build Coastguard Worker * \sa SYSTEM_VALUE_VERTEX_ID, SYSTEM_VALUE_VERTEX_ID_ZERO_BASE
727*61046927SAndroid Build Coastguard Worker */
728*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BASE_VERTEX,
729*61046927SAndroid Build Coastguard Worker
730*61046927SAndroid Build Coastguard Worker /**
731*61046927SAndroid Build Coastguard Worker * Depending on the type of the draw call (indexed or non-indexed),
732*61046927SAndroid Build Coastguard Worker * is the value of \c basevertex passed to \c glDrawElementsBaseVertex and
733*61046927SAndroid Build Coastguard Worker * similar, or is the value of \c first passed to \c glDrawArrays and
734*61046927SAndroid Build Coastguard Worker * similar.
735*61046927SAndroid Build Coastguard Worker *
736*61046927SAndroid Build Coastguard Worker * \note
737*61046927SAndroid Build Coastguard Worker * It can be used to calculate the \c SYSTEM_VALUE_VERTEX_ID as
738*61046927SAndroid Build Coastguard Worker * \c SYSTEM_VALUE_VERTEX_ID_ZERO_BASE plus \c SYSTEM_VALUE_FIRST_VERTEX.
739*61046927SAndroid Build Coastguard Worker *
740*61046927SAndroid Build Coastguard Worker * \sa SYSTEM_VALUE_VERTEX_ID_ZERO_BASE, SYSTEM_VALUE_VERTEX_ID
741*61046927SAndroid Build Coastguard Worker */
742*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_FIRST_VERTEX,
743*61046927SAndroid Build Coastguard Worker
744*61046927SAndroid Build Coastguard Worker /**
745*61046927SAndroid Build Coastguard Worker * If the Draw command used to start the rendering was an indexed draw
746*61046927SAndroid Build Coastguard Worker * or not (~0/0). Useful to calculate \c SYSTEM_VALUE_BASE_VERTEX as
747*61046927SAndroid Build Coastguard Worker * \c SYSTEM_VALUE_IS_INDEXED_DRAW & \c SYSTEM_VALUE_FIRST_VERTEX.
748*61046927SAndroid Build Coastguard Worker */
749*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_IS_INDEXED_DRAW,
750*61046927SAndroid Build Coastguard Worker
751*61046927SAndroid Build Coastguard Worker /**
752*61046927SAndroid Build Coastguard Worker * Value of \c baseinstance passed to instanced draw entry points
753*61046927SAndroid Build Coastguard Worker *
754*61046927SAndroid Build Coastguard Worker * \sa SYSTEM_VALUE_INSTANCE_ID
755*61046927SAndroid Build Coastguard Worker */
756*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BASE_INSTANCE,
757*61046927SAndroid Build Coastguard Worker
758*61046927SAndroid Build Coastguard Worker /**
759*61046927SAndroid Build Coastguard Worker * From _ARB_shader_draw_parameters:
760*61046927SAndroid Build Coastguard Worker *
761*61046927SAndroid Build Coastguard Worker * "Additionally, this extension adds a further built-in variable,
762*61046927SAndroid Build Coastguard Worker * gl_DrawID to the shading language. This variable contains the index
763*61046927SAndroid Build Coastguard Worker * of the draw currently being processed by a Multi* variant of a
764*61046927SAndroid Build Coastguard Worker * drawing command (such as MultiDrawElements or
765*61046927SAndroid Build Coastguard Worker * MultiDrawArraysIndirect)."
766*61046927SAndroid Build Coastguard Worker *
767*61046927SAndroid Build Coastguard Worker * If GL_ARB_multi_draw_indirect is not supported, this is always 0.
768*61046927SAndroid Build Coastguard Worker */
769*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_DRAW_ID,
770*61046927SAndroid Build Coastguard Worker /*@}*/
771*61046927SAndroid Build Coastguard Worker
772*61046927SAndroid Build Coastguard Worker /**
773*61046927SAndroid Build Coastguard Worker * \name Geometry shader system values
774*61046927SAndroid Build Coastguard Worker */
775*61046927SAndroid Build Coastguard Worker /*@{*/
776*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_INVOCATION_ID, /**< (Also in Tessellation Control shader) */
777*61046927SAndroid Build Coastguard Worker /*@}*/
778*61046927SAndroid Build Coastguard Worker
779*61046927SAndroid Build Coastguard Worker /**
780*61046927SAndroid Build Coastguard Worker * \name Fragment shader system values
781*61046927SAndroid Build Coastguard Worker */
782*61046927SAndroid Build Coastguard Worker /*@{*/
783*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_FRAG_COORD,
784*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_POINT_COORD,
785*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_LINE_COORD, /**< Coord along axis perpendicular to line */
786*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_FRONT_FACE,
787*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SAMPLE_ID,
788*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SAMPLE_POS,
789*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SAMPLE_POS_OR_CENTER,
790*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SAMPLE_MASK_IN,
791*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_LAYER_ID,
792*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_HELPER_INVOCATION,
793*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_COLOR0,
794*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_COLOR1,
795*61046927SAndroid Build Coastguard Worker /*@}*/
796*61046927SAndroid Build Coastguard Worker
797*61046927SAndroid Build Coastguard Worker /**
798*61046927SAndroid Build Coastguard Worker * \name Tessellation Evaluation shader system values
799*61046927SAndroid Build Coastguard Worker */
800*61046927SAndroid Build Coastguard Worker /*@{*/
801*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_TESS_COORD,
802*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_VERTICES_IN, /**< Tessellation vertices in input patch */
803*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_PRIMITIVE_ID,
804*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_TESS_LEVEL_OUTER, /**< TES input */
805*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_TESS_LEVEL_INNER, /**< TES input */
806*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_TESS_LEVEL_OUTER_DEFAULT, /**< TCS input for passthru TCS */
807*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_TESS_LEVEL_INNER_DEFAULT, /**< TCS input for passthru TCS */
808*61046927SAndroid Build Coastguard Worker /*@}*/
809*61046927SAndroid Build Coastguard Worker
810*61046927SAndroid Build Coastguard Worker /**
811*61046927SAndroid Build Coastguard Worker * \name Compute shader system values
812*61046927SAndroid Build Coastguard Worker */
813*61046927SAndroid Build Coastguard Worker /*@{*/
814*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_LOCAL_INVOCATION_ID,
815*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_LOCAL_INVOCATION_INDEX,
816*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_GLOBAL_INVOCATION_ID,
817*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BASE_GLOBAL_INVOCATION_ID,
818*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_GLOBAL_INVOCATION_INDEX,
819*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_WORKGROUP_ID,
820*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BASE_WORKGROUP_ID,
821*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_WORKGROUP_INDEX,
822*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_NUM_WORKGROUPS,
823*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_WORKGROUP_SIZE,
824*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_GLOBAL_GROUP_SIZE,
825*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_WORK_DIM,
826*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_USER_DATA_AMD,
827*61046927SAndroid Build Coastguard Worker /*@}*/
828*61046927SAndroid Build Coastguard Worker
829*61046927SAndroid Build Coastguard Worker /** Required for VK_KHR_device_group */
830*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_DEVICE_INDEX,
831*61046927SAndroid Build Coastguard Worker
832*61046927SAndroid Build Coastguard Worker /** Required for VK_KHX_multiview */
833*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_VIEW_INDEX,
834*61046927SAndroid Build Coastguard Worker
835*61046927SAndroid Build Coastguard Worker /**
836*61046927SAndroid Build Coastguard Worker * Driver internal vertex-count, used (for example) for drivers to
837*61046927SAndroid Build Coastguard Worker * calculate stride for stream-out outputs. Not externally visible.
838*61046927SAndroid Build Coastguard Worker */
839*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_VERTEX_CNT,
840*61046927SAndroid Build Coastguard Worker
841*61046927SAndroid Build Coastguard Worker /**
842*61046927SAndroid Build Coastguard Worker * Required for AMD_shader_explicit_vertex_parameter and also used for
843*61046927SAndroid Build Coastguard Worker * varying-fetch instructions.
844*61046927SAndroid Build Coastguard Worker *
845*61046927SAndroid Build Coastguard Worker * The _SIZE value is "primitive size", used to scale i/j in primitive
846*61046927SAndroid Build Coastguard Worker * space to pixel space.
847*61046927SAndroid Build Coastguard Worker */
848*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL,
849*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BARYCENTRIC_PERSP_SAMPLE,
850*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTROID,
851*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTER_RHW,
852*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BARYCENTRIC_LINEAR_PIXEL,
853*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BARYCENTRIC_LINEAR_CENTROID,
854*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BARYCENTRIC_LINEAR_SAMPLE,
855*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BARYCENTRIC_PULL_MODEL,
856*61046927SAndroid Build Coastguard Worker
857*61046927SAndroid Build Coastguard Worker /**
858*61046927SAndroid Build Coastguard Worker * \name VK_KHR_fragment_shader_barycentric
859*61046927SAndroid Build Coastguard Worker */
860*61046927SAndroid Build Coastguard Worker /*@{*/
861*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BARYCENTRIC_PERSP_COORD,
862*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_BARYCENTRIC_LINEAR_COORD,
863*61046927SAndroid Build Coastguard Worker /*@}*/
864*61046927SAndroid Build Coastguard Worker
865*61046927SAndroid Build Coastguard Worker /**
866*61046927SAndroid Build Coastguard Worker * \name Ray tracing shader system values
867*61046927SAndroid Build Coastguard Worker */
868*61046927SAndroid Build Coastguard Worker /*@{*/
869*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_LAUNCH_ID,
870*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_LAUNCH_SIZE,
871*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_WORLD_ORIGIN,
872*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_WORLD_DIRECTION,
873*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_OBJECT_ORIGIN,
874*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_OBJECT_DIRECTION,
875*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_T_MIN,
876*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_T_MAX,
877*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_OBJECT_TO_WORLD,
878*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_WORLD_TO_OBJECT,
879*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_HIT_KIND,
880*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_FLAGS,
881*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_GEOMETRY_INDEX,
882*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_INSTANCE_CUSTOM_INDEX,
883*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_CULL_MASK,
884*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_RAY_TRIANGLE_VERTEX_POSITIONS,
885*61046927SAndroid Build Coastguard Worker /*@}*/
886*61046927SAndroid Build Coastguard Worker
887*61046927SAndroid Build Coastguard Worker /**
888*61046927SAndroid Build Coastguard Worker * \name Task/Mesh shader system values
889*61046927SAndroid Build Coastguard Worker */
890*61046927SAndroid Build Coastguard Worker /*@{*/
891*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_MESH_VIEW_COUNT,
892*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_MESH_VIEW_INDICES,
893*61046927SAndroid Build Coastguard Worker /*@}*/
894*61046927SAndroid Build Coastguard Worker
895*61046927SAndroid Build Coastguard Worker /**
896*61046927SAndroid Build Coastguard Worker * IR3 specific geometry shader and tesselation control shader system
897*61046927SAndroid Build Coastguard Worker * values that packs invocation id, thread id and vertex id. Having this
898*61046927SAndroid Build Coastguard Worker * as a nir level system value lets us do the unpacking in nir.
899*61046927SAndroid Build Coastguard Worker */
900*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_GS_HEADER_IR3,
901*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_TCS_HEADER_IR3,
902*61046927SAndroid Build Coastguard Worker
903*61046927SAndroid Build Coastguard Worker /* IR3 specific system value that contains the patch id for the current
904*61046927SAndroid Build Coastguard Worker * subdraw.
905*61046927SAndroid Build Coastguard Worker */
906*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_REL_PATCH_ID_IR3,
907*61046927SAndroid Build Coastguard Worker
908*61046927SAndroid Build Coastguard Worker /**
909*61046927SAndroid Build Coastguard Worker * Fragment shading rate used for KHR_fragment_shading_rate (Vulkan).
910*61046927SAndroid Build Coastguard Worker */
911*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_FRAG_SHADING_RATE,
912*61046927SAndroid Build Coastguard Worker
913*61046927SAndroid Build Coastguard Worker /*
914*61046927SAndroid Build Coastguard Worker * Rasterized fragment is fully covered by the generating primitive
915*61046927SAndroid Build Coastguard Worker * (SPV_EXT_fragment_fully_covered).
916*61046927SAndroid Build Coastguard Worker */
917*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_FULLY_COVERED,
918*61046927SAndroid Build Coastguard Worker
919*61046927SAndroid Build Coastguard Worker /*
920*61046927SAndroid Build Coastguard Worker * Fragment size and invocation count used for
921*61046927SAndroid Build Coastguard Worker * EXT_fragment_invocation_density (Vulkan).
922*61046927SAndroid Build Coastguard Worker */
923*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_FRAG_SIZE,
924*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_FRAG_INVOCATION_COUNT,
925*61046927SAndroid Build Coastguard Worker
926*61046927SAndroid Build Coastguard Worker /* SPV_AMDX_shader_enqueue */
927*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SHADER_INDEX,
928*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_COALESCED_INPUT_COUNT,
929*61046927SAndroid Build Coastguard Worker
930*61046927SAndroid Build Coastguard Worker /* SPV_NV_shader_sm_builtins */
931*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_WARPS_PER_SM_NV,
932*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SM_COUNT_NV,
933*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_WARP_ID_NV,
934*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_SM_ID_NV,
935*61046927SAndroid Build Coastguard Worker
936*61046927SAndroid Build Coastguard Worker SYSTEM_VALUE_MAX /**< Number of values */
937*61046927SAndroid Build Coastguard Worker } gl_system_value;
938*61046927SAndroid Build Coastguard Worker
939*61046927SAndroid Build Coastguard Worker const char *gl_system_value_name(gl_system_value sysval);
940*61046927SAndroid Build Coastguard Worker
941*61046927SAndroid Build Coastguard Worker /**
942*61046927SAndroid Build Coastguard Worker * The possible interpolation qualifiers that can be applied to a fragment
943*61046927SAndroid Build Coastguard Worker * shader input in GLSL.
944*61046927SAndroid Build Coastguard Worker *
945*61046927SAndroid Build Coastguard Worker * Note: INTERP_MODE_NONE must be 0 so that memsetting the
946*61046927SAndroid Build Coastguard Worker * ir_variable data structure to 0 causes the default behavior.
947*61046927SAndroid Build Coastguard Worker */
948*61046927SAndroid Build Coastguard Worker enum glsl_interp_mode
949*61046927SAndroid Build Coastguard Worker {
950*61046927SAndroid Build Coastguard Worker INTERP_MODE_NONE = 0,
951*61046927SAndroid Build Coastguard Worker INTERP_MODE_SMOOTH,
952*61046927SAndroid Build Coastguard Worker INTERP_MODE_FLAT,
953*61046927SAndroid Build Coastguard Worker INTERP_MODE_NOPERSPECTIVE,
954*61046927SAndroid Build Coastguard Worker INTERP_MODE_EXPLICIT,
955*61046927SAndroid Build Coastguard Worker INTERP_MODE_COUNT /**< Number of interpolation qualifiers */
956*61046927SAndroid Build Coastguard Worker };
957*61046927SAndroid Build Coastguard Worker
958*61046927SAndroid Build Coastguard Worker enum glsl_interface_packing {
959*61046927SAndroid Build Coastguard Worker GLSL_INTERFACE_PACKING_STD140,
960*61046927SAndroid Build Coastguard Worker GLSL_INTERFACE_PACKING_SHARED,
961*61046927SAndroid Build Coastguard Worker GLSL_INTERFACE_PACKING_PACKED,
962*61046927SAndroid Build Coastguard Worker GLSL_INTERFACE_PACKING_STD430
963*61046927SAndroid Build Coastguard Worker };
964*61046927SAndroid Build Coastguard Worker
965*61046927SAndroid Build Coastguard Worker const char *glsl_interp_mode_name(enum glsl_interp_mode qual);
966*61046927SAndroid Build Coastguard Worker
967*61046927SAndroid Build Coastguard Worker /**
968*61046927SAndroid Build Coastguard Worker * Fragment program results
969*61046927SAndroid Build Coastguard Worker */
970*61046927SAndroid Build Coastguard Worker typedef enum
971*61046927SAndroid Build Coastguard Worker {
972*61046927SAndroid Build Coastguard Worker FRAG_RESULT_DEPTH = 0,
973*61046927SAndroid Build Coastguard Worker FRAG_RESULT_STENCIL = 1,
974*61046927SAndroid Build Coastguard Worker /* If a single color should be written to all render targets, this
975*61046927SAndroid Build Coastguard Worker * register is written. No FRAG_RESULT_DATAn will be written.
976*61046927SAndroid Build Coastguard Worker */
977*61046927SAndroid Build Coastguard Worker FRAG_RESULT_COLOR = 2,
978*61046927SAndroid Build Coastguard Worker FRAG_RESULT_SAMPLE_MASK = 3,
979*61046927SAndroid Build Coastguard Worker
980*61046927SAndroid Build Coastguard Worker /* FRAG_RESULT_DATAn are the per-render-target (GLSL gl_FragData[n]
981*61046927SAndroid Build Coastguard Worker * or ARB_fragment_program fragment.color[n]) color results. If
982*61046927SAndroid Build Coastguard Worker * any are written, FRAG_RESULT_COLOR will not be written.
983*61046927SAndroid Build Coastguard Worker * FRAG_RESULT_DATA1 and up are simply for the benefit of
984*61046927SAndroid Build Coastguard Worker * gl_frag_result_name() and not to be construed as an upper bound
985*61046927SAndroid Build Coastguard Worker */
986*61046927SAndroid Build Coastguard Worker FRAG_RESULT_DATA0 = 4,
987*61046927SAndroid Build Coastguard Worker FRAG_RESULT_DATA1,
988*61046927SAndroid Build Coastguard Worker FRAG_RESULT_DATA2,
989*61046927SAndroid Build Coastguard Worker FRAG_RESULT_DATA3,
990*61046927SAndroid Build Coastguard Worker FRAG_RESULT_DATA4,
991*61046927SAndroid Build Coastguard Worker FRAG_RESULT_DATA5,
992*61046927SAndroid Build Coastguard Worker FRAG_RESULT_DATA6,
993*61046927SAndroid Build Coastguard Worker FRAG_RESULT_DATA7,
994*61046927SAndroid Build Coastguard Worker } gl_frag_result;
995*61046927SAndroid Build Coastguard Worker
996*61046927SAndroid Build Coastguard Worker const char *gl_frag_result_name(gl_frag_result result);
997*61046927SAndroid Build Coastguard Worker
998*61046927SAndroid Build Coastguard Worker #define FRAG_RESULT_MAX (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS)
999*61046927SAndroid Build Coastguard Worker
1000*61046927SAndroid Build Coastguard Worker /**
1001*61046927SAndroid Build Coastguard Worker * \brief Layout qualifiers for gl_FragDepth.
1002*61046927SAndroid Build Coastguard Worker *
1003*61046927SAndroid Build Coastguard Worker * Extension AMD_conservative_depth allows gl_FragDepth to be redeclared with
1004*61046927SAndroid Build Coastguard Worker * a layout qualifier.
1005*61046927SAndroid Build Coastguard Worker *
1006*61046927SAndroid Build Coastguard Worker * \see enum ir_depth_layout
1007*61046927SAndroid Build Coastguard Worker */
1008*61046927SAndroid Build Coastguard Worker enum gl_frag_depth_layout
1009*61046927SAndroid Build Coastguard Worker {
1010*61046927SAndroid Build Coastguard Worker FRAG_DEPTH_LAYOUT_NONE, /**< No layout is specified. */
1011*61046927SAndroid Build Coastguard Worker FRAG_DEPTH_LAYOUT_ANY,
1012*61046927SAndroid Build Coastguard Worker FRAG_DEPTH_LAYOUT_GREATER,
1013*61046927SAndroid Build Coastguard Worker FRAG_DEPTH_LAYOUT_LESS,
1014*61046927SAndroid Build Coastguard Worker FRAG_DEPTH_LAYOUT_UNCHANGED
1015*61046927SAndroid Build Coastguard Worker };
1016*61046927SAndroid Build Coastguard Worker
1017*61046927SAndroid Build Coastguard Worker /**
1018*61046927SAndroid Build Coastguard Worker * \brief Layout qualifiers for AMD_shader_early_and_late_fragment_tests.
1019*61046927SAndroid Build Coastguard Worker */
1020*61046927SAndroid Build Coastguard Worker enum gl_frag_stencil_layout
1021*61046927SAndroid Build Coastguard Worker {
1022*61046927SAndroid Build Coastguard Worker FRAG_STENCIL_LAYOUT_NONE, /**< No layout is specified. */
1023*61046927SAndroid Build Coastguard Worker FRAG_STENCIL_LAYOUT_ANY,
1024*61046927SAndroid Build Coastguard Worker FRAG_STENCIL_LAYOUT_GREATER,
1025*61046927SAndroid Build Coastguard Worker FRAG_STENCIL_LAYOUT_LESS,
1026*61046927SAndroid Build Coastguard Worker FRAG_STENCIL_LAYOUT_UNCHANGED
1027*61046927SAndroid Build Coastguard Worker };
1028*61046927SAndroid Build Coastguard Worker
1029*61046927SAndroid Build Coastguard Worker /**
1030*61046927SAndroid Build Coastguard Worker * \brief Memory access qualifiers
1031*61046927SAndroid Build Coastguard Worker */
1032*61046927SAndroid Build Coastguard Worker enum gl_access_qualifier
1033*61046927SAndroid Build Coastguard Worker {
1034*61046927SAndroid Build Coastguard Worker /**
1035*61046927SAndroid Build Coastguard Worker * This means that the memory scope is the current device. It indicates
1036*61046927SAndroid Build Coastguard Worker * that reads and writes are coherent with reads and writes from other
1037*61046927SAndroid Build Coastguard Worker * shader invocations and other workgroups.
1038*61046927SAndroid Build Coastguard Worker */
1039*61046927SAndroid Build Coastguard Worker ACCESS_COHERENT = (1 << 0),
1040*61046927SAndroid Build Coastguard Worker
1041*61046927SAndroid Build Coastguard Worker /**
1042*61046927SAndroid Build Coastguard Worker * This means non-aliased. It indicates that the accessed address is not
1043*61046927SAndroid Build Coastguard Worker * accessible through any other memory resource in the shader.
1044*61046927SAndroid Build Coastguard Worker */
1045*61046927SAndroid Build Coastguard Worker ACCESS_RESTRICT = (1 << 1),
1046*61046927SAndroid Build Coastguard Worker
1047*61046927SAndroid Build Coastguard Worker /**
1048*61046927SAndroid Build Coastguard Worker * The access cannot be eliminated, duplicated, or combined with other
1049*61046927SAndroid Build Coastguard Worker * accesses.
1050*61046927SAndroid Build Coastguard Worker */
1051*61046927SAndroid Build Coastguard Worker ACCESS_VOLATILE = (1 << 2),
1052*61046927SAndroid Build Coastguard Worker
1053*61046927SAndroid Build Coastguard Worker /* The memory used by the access/variable is not read. */
1054*61046927SAndroid Build Coastguard Worker ACCESS_NON_READABLE = (1 << 3),
1055*61046927SAndroid Build Coastguard Worker
1056*61046927SAndroid Build Coastguard Worker /* The memory used by the access/variable is not written. */
1057*61046927SAndroid Build Coastguard Worker ACCESS_NON_WRITEABLE = (1 << 4),
1058*61046927SAndroid Build Coastguard Worker
1059*61046927SAndroid Build Coastguard Worker /**
1060*61046927SAndroid Build Coastguard Worker * The access may use a non-uniform buffer or image index.
1061*61046927SAndroid Build Coastguard Worker *
1062*61046927SAndroid Build Coastguard Worker * This is not allowed in either OpenGL or OpenGL ES, or Vulkan unless
1063*61046927SAndroid Build Coastguard Worker * VK_EXT_descriptor_indexing is supported and the appropriate capability is
1064*61046927SAndroid Build Coastguard Worker * enabled.
1065*61046927SAndroid Build Coastguard Worker *
1066*61046927SAndroid Build Coastguard Worker * Some GL spec archaeology justifying this:
1067*61046927SAndroid Build Coastguard Worker *
1068*61046927SAndroid Build Coastguard Worker * Up through at least GLSL ES 3.20 and GLSL 4.50, "Opaque Types" says "When
1069*61046927SAndroid Build Coastguard Worker * aggregated into arrays within a shader, opaque types can only be indexed
1070*61046927SAndroid Build Coastguard Worker * with a dynamically uniform integral expression (see section 3.9.3) unless
1071*61046927SAndroid Build Coastguard Worker * otherwise noted; otherwise, results are undefined."
1072*61046927SAndroid Build Coastguard Worker *
1073*61046927SAndroid Build Coastguard Worker * The original GL_AB_shader_image_load_store specification for desktop GL
1074*61046927SAndroid Build Coastguard Worker * didn't have this restriction ("Images may be aggregated into arrays within
1075*61046927SAndroid Build Coastguard Worker * a shader (using square brackets [ ]) and can be indexed with general
1076*61046927SAndroid Build Coastguard Worker * integer expressions.") At the same time,
1077*61046927SAndroid Build Coastguard Worker * GL_ARB_shader_storage_buffer_objects *did* have the uniform restriction
1078*61046927SAndroid Build Coastguard Worker * ("A uniform or shader storage block array can only be indexed with a
1079*61046927SAndroid Build Coastguard Worker * dynamically uniform integral expression, otherwise results are
1080*61046927SAndroid Build Coastguard Worker * undefined"), just like ARB_gpu_shader5 did when it first introduced a
1081*61046927SAndroid Build Coastguard Worker * non-constant indexing of an opaque type with samplers. So, we assume that
1082*61046927SAndroid Build Coastguard Worker * this was an oversight in the original image_load_store spec, and was
1083*61046927SAndroid Build Coastguard Worker * considered a correction in the merge to core.
1084*61046927SAndroid Build Coastguard Worker */
1085*61046927SAndroid Build Coastguard Worker ACCESS_NON_UNIFORM = (1 << 5),
1086*61046927SAndroid Build Coastguard Worker
1087*61046927SAndroid Build Coastguard Worker /* This has the same semantics as NIR_INTRINSIC_CAN_REORDER, only to be
1088*61046927SAndroid Build Coastguard Worker * used with loads. In other words, it means that the load can be
1089*61046927SAndroid Build Coastguard Worker * arbitrarily reordered, or combined with other loads to the same address.
1090*61046927SAndroid Build Coastguard Worker * It is implied by ACCESS_NON_WRITEABLE and a lack of ACCESS_VOLATILE.
1091*61046927SAndroid Build Coastguard Worker */
1092*61046927SAndroid Build Coastguard Worker ACCESS_CAN_REORDER = (1 << 6),
1093*61046927SAndroid Build Coastguard Worker
1094*61046927SAndroid Build Coastguard Worker /**
1095*61046927SAndroid Build Coastguard Worker * Hints that the accessed address is not likely to be accessed again
1096*61046927SAndroid Build Coastguard Worker * in the near future. This reduces data retention in caches.
1097*61046927SAndroid Build Coastguard Worker */
1098*61046927SAndroid Build Coastguard Worker ACCESS_NON_TEMPORAL = (1 << 7),
1099*61046927SAndroid Build Coastguard Worker
1100*61046927SAndroid Build Coastguard Worker /** Execute instruction also in helpers. */
1101*61046927SAndroid Build Coastguard Worker ACCESS_INCLUDE_HELPERS = (1 << 8),
1102*61046927SAndroid Build Coastguard Worker
1103*61046927SAndroid Build Coastguard Worker /**
1104*61046927SAndroid Build Coastguard Worker * Whether the address bits are swizzled by the hw. This practically means
1105*61046927SAndroid Build Coastguard Worker * that loads can't be vectorized and must be exactly 32 bits on some chips.
1106*61046927SAndroid Build Coastguard Worker * The swizzle amount is determined by the descriptor.
1107*61046927SAndroid Build Coastguard Worker */
1108*61046927SAndroid Build Coastguard Worker ACCESS_IS_SWIZZLED_AMD = (1 << 9),
1109*61046927SAndroid Build Coastguard Worker
1110*61046927SAndroid Build Coastguard Worker /**
1111*61046927SAndroid Build Coastguard Worker * Whether an AMD-specific buffer intrinsic uses a format conversion.
1112*61046927SAndroid Build Coastguard Worker *
1113*61046927SAndroid Build Coastguard Worker * If unset, the intrinsic will access raw memory without any conversion.
1114*61046927SAndroid Build Coastguard Worker *
1115*61046927SAndroid Build Coastguard Worker * If set, the memory opcode performs a format conversion according to
1116*61046927SAndroid Build Coastguard Worker * the format determined by the descriptor (in a manner identical to image
1117*61046927SAndroid Build Coastguard Worker * buffers and sampler buffers).
1118*61046927SAndroid Build Coastguard Worker */
1119*61046927SAndroid Build Coastguard Worker ACCESS_USES_FORMAT_AMD = (1 << 10),
1120*61046927SAndroid Build Coastguard Worker
1121*61046927SAndroid Build Coastguard Worker /**
1122*61046927SAndroid Build Coastguard Worker * Whether a multi sample image load intrinsic uses sample index extracted
1123*61046927SAndroid Build Coastguard Worker * from fragment mask buffer.
1124*61046927SAndroid Build Coastguard Worker */
1125*61046927SAndroid Build Coastguard Worker ACCESS_FMASK_LOWERED_AMD = (1 << 11),
1126*61046927SAndroid Build Coastguard Worker
1127*61046927SAndroid Build Coastguard Worker /**
1128*61046927SAndroid Build Coastguard Worker * Whether it is safe to speculatively execute this load. This allows
1129*61046927SAndroid Build Coastguard Worker * hoisting loads out of conditional control flow (including out of software
1130*61046927SAndroid Build Coastguard Worker * bounds checks). Setting this optimally depends on knowledge of the
1131*61046927SAndroid Build Coastguard Worker * hardware. Speculation is safe if out-of-bounds access does not trigger
1132*61046927SAndroid Build Coastguard Worker * undefined behaviour (even though the returned value of the speculated load
1133*61046927SAndroid Build Coastguard Worker * is bogus). This is the case if there is hardware-level bounds checking, or
1134*61046927SAndroid Build Coastguard Worker * if MMU faults are suppressed for the load.
1135*61046927SAndroid Build Coastguard Worker */
1136*61046927SAndroid Build Coastguard Worker ACCESS_CAN_SPECULATE = (1 << 12),
1137*61046927SAndroid Build Coastguard Worker
1138*61046927SAndroid Build Coastguard Worker /**
1139*61046927SAndroid Build Coastguard Worker * Whether coherency with CP (command processor) or GE (geometry engine)
1140*61046927SAndroid Build Coastguard Worker * is required.
1141*61046927SAndroid Build Coastguard Worker */
1142*61046927SAndroid Build Coastguard Worker ACCESS_CP_GE_COHERENT_AMD = (1 << 13),
1143*61046927SAndroid Build Coastguard Worker
1144*61046927SAndroid Build Coastguard Worker /* Guarantee that an image_load is in bounds so we can skip robustness code
1145*61046927SAndroid Build Coastguard Worker * on AGX, used for some internal shaders.
1146*61046927SAndroid Build Coastguard Worker */
1147*61046927SAndroid Build Coastguard Worker ACCESS_IN_BOUNDS_AGX = (1 << 14),
1148*61046927SAndroid Build Coastguard Worker
1149*61046927SAndroid Build Coastguard Worker /**
1150*61046927SAndroid Build Coastguard Worker * Disallow vectorization.
1151*61046927SAndroid Build Coastguard Worker *
1152*61046927SAndroid Build Coastguard Worker * On some hw (AMD), sparse buffer loads return 0 for all components if
1153*61046927SAndroid Build Coastguard Worker * a sparse load starts on a non-resident page, crosses the page boundary,
1154*61046927SAndroid Build Coastguard Worker * and ends on a resident page. Sometimes we want it to return 0 only for
1155*61046927SAndroid Build Coastguard Worker * the portion of the load that's non-resident, and load values for
1156*61046927SAndroid Build Coastguard Worker * the portion that's resident. The workaround is to scalarize such loads
1157*61046927SAndroid Build Coastguard Worker * and disallow vectorization. This is used by an internal copy_buffer
1158*61046927SAndroid Build Coastguard Worker * shader where the API wants to copy all bytes that are resident.
1159*61046927SAndroid Build Coastguard Worker */
1160*61046927SAndroid Build Coastguard Worker ACCESS_KEEP_SCALAR = (1 << 15),
1161*61046927SAndroid Build Coastguard Worker };
1162*61046927SAndroid Build Coastguard Worker
1163*61046927SAndroid Build Coastguard Worker /**
1164*61046927SAndroid Build Coastguard Worker * \brief Blend support qualifiers
1165*61046927SAndroid Build Coastguard Worker */
1166*61046927SAndroid Build Coastguard Worker enum gl_advanced_blend_mode
1167*61046927SAndroid Build Coastguard Worker {
1168*61046927SAndroid Build Coastguard Worker BLEND_NONE = 0,
1169*61046927SAndroid Build Coastguard Worker BLEND_MULTIPLY,
1170*61046927SAndroid Build Coastguard Worker BLEND_SCREEN,
1171*61046927SAndroid Build Coastguard Worker BLEND_OVERLAY,
1172*61046927SAndroid Build Coastguard Worker BLEND_DARKEN,
1173*61046927SAndroid Build Coastguard Worker BLEND_LIGHTEN,
1174*61046927SAndroid Build Coastguard Worker BLEND_COLORDODGE,
1175*61046927SAndroid Build Coastguard Worker BLEND_COLORBURN,
1176*61046927SAndroid Build Coastguard Worker BLEND_HARDLIGHT,
1177*61046927SAndroid Build Coastguard Worker BLEND_SOFTLIGHT,
1178*61046927SAndroid Build Coastguard Worker BLEND_DIFFERENCE,
1179*61046927SAndroid Build Coastguard Worker BLEND_EXCLUSION,
1180*61046927SAndroid Build Coastguard Worker BLEND_HSL_HUE,
1181*61046927SAndroid Build Coastguard Worker BLEND_HSL_SATURATION,
1182*61046927SAndroid Build Coastguard Worker BLEND_HSL_COLOR,
1183*61046927SAndroid Build Coastguard Worker BLEND_HSL_LUMINOSITY,
1184*61046927SAndroid Build Coastguard Worker };
1185*61046927SAndroid Build Coastguard Worker
1186*61046927SAndroid Build Coastguard Worker enum gl_tess_spacing
1187*61046927SAndroid Build Coastguard Worker {
1188*61046927SAndroid Build Coastguard Worker TESS_SPACING_UNSPECIFIED,
1189*61046927SAndroid Build Coastguard Worker TESS_SPACING_EQUAL,
1190*61046927SAndroid Build Coastguard Worker TESS_SPACING_FRACTIONAL_ODD,
1191*61046927SAndroid Build Coastguard Worker TESS_SPACING_FRACTIONAL_EVEN,
1192*61046927SAndroid Build Coastguard Worker };
1193*61046927SAndroid Build Coastguard Worker
1194*61046927SAndroid Build Coastguard Worker enum tess_primitive_mode
1195*61046927SAndroid Build Coastguard Worker {
1196*61046927SAndroid Build Coastguard Worker TESS_PRIMITIVE_UNSPECIFIED,
1197*61046927SAndroid Build Coastguard Worker TESS_PRIMITIVE_TRIANGLES,
1198*61046927SAndroid Build Coastguard Worker TESS_PRIMITIVE_QUADS,
1199*61046927SAndroid Build Coastguard Worker TESS_PRIMITIVE_ISOLINES,
1200*61046927SAndroid Build Coastguard Worker };
1201*61046927SAndroid Build Coastguard Worker
1202*61046927SAndroid Build Coastguard Worker static inline void
mesa_count_tess_level_components(const enum tess_primitive_mode mode,unsigned * outer,unsigned * inner)1203*61046927SAndroid Build Coastguard Worker mesa_count_tess_level_components(const enum tess_primitive_mode mode,
1204*61046927SAndroid Build Coastguard Worker unsigned *outer, unsigned *inner)
1205*61046927SAndroid Build Coastguard Worker {
1206*61046927SAndroid Build Coastguard Worker switch (mode) {
1207*61046927SAndroid Build Coastguard Worker case TESS_PRIMITIVE_ISOLINES:
1208*61046927SAndroid Build Coastguard Worker *outer = 2;
1209*61046927SAndroid Build Coastguard Worker *inner = 0;
1210*61046927SAndroid Build Coastguard Worker break;
1211*61046927SAndroid Build Coastguard Worker case TESS_PRIMITIVE_TRIANGLES:
1212*61046927SAndroid Build Coastguard Worker *outer = 3;
1213*61046927SAndroid Build Coastguard Worker *inner = 1;
1214*61046927SAndroid Build Coastguard Worker break;
1215*61046927SAndroid Build Coastguard Worker case TESS_PRIMITIVE_QUADS:
1216*61046927SAndroid Build Coastguard Worker default:
1217*61046927SAndroid Build Coastguard Worker *outer = 4;
1218*61046927SAndroid Build Coastguard Worker *inner = 2;
1219*61046927SAndroid Build Coastguard Worker break;
1220*61046927SAndroid Build Coastguard Worker }
1221*61046927SAndroid Build Coastguard Worker }
1222*61046927SAndroid Build Coastguard Worker
1223*61046927SAndroid Build Coastguard Worker /**
1224*61046927SAndroid Build Coastguard Worker * Mesa primitive types for both GL and Vulkan:
1225*61046927SAndroid Build Coastguard Worker */
1226*61046927SAndroid Build Coastguard Worker enum ENUM_PACKED mesa_prim
1227*61046927SAndroid Build Coastguard Worker {
1228*61046927SAndroid Build Coastguard Worker MESA_PRIM_POINTS,
1229*61046927SAndroid Build Coastguard Worker MESA_PRIM_LINES,
1230*61046927SAndroid Build Coastguard Worker MESA_PRIM_LINE_LOOP,
1231*61046927SAndroid Build Coastguard Worker MESA_PRIM_LINE_STRIP,
1232*61046927SAndroid Build Coastguard Worker MESA_PRIM_TRIANGLES,
1233*61046927SAndroid Build Coastguard Worker MESA_PRIM_TRIANGLE_STRIP,
1234*61046927SAndroid Build Coastguard Worker MESA_PRIM_TRIANGLE_FAN,
1235*61046927SAndroid Build Coastguard Worker MESA_PRIM_QUADS,
1236*61046927SAndroid Build Coastguard Worker MESA_PRIM_QUAD_STRIP,
1237*61046927SAndroid Build Coastguard Worker MESA_PRIM_POLYGON,
1238*61046927SAndroid Build Coastguard Worker MESA_PRIM_LINES_ADJACENCY,
1239*61046927SAndroid Build Coastguard Worker MESA_PRIM_LINE_STRIP_ADJACENCY,
1240*61046927SAndroid Build Coastguard Worker MESA_PRIM_TRIANGLES_ADJACENCY,
1241*61046927SAndroid Build Coastguard Worker MESA_PRIM_TRIANGLE_STRIP_ADJACENCY,
1242*61046927SAndroid Build Coastguard Worker MESA_PRIM_PATCHES,
1243*61046927SAndroid Build Coastguard Worker MESA_PRIM_MAX = MESA_PRIM_PATCHES,
1244*61046927SAndroid Build Coastguard Worker MESA_PRIM_COUNT = MESA_PRIM_MAX +1,
1245*61046927SAndroid Build Coastguard Worker MESA_PRIM_UNKNOWN = (MESA_PRIM_MAX * 2),
1246*61046927SAndroid Build Coastguard Worker };
1247*61046927SAndroid Build Coastguard Worker
1248*61046927SAndroid Build Coastguard Worker /**
1249*61046927SAndroid Build Coastguard Worker * Number of vertices per primitive as seen by a geometry or mesh shader.
1250*61046927SAndroid Build Coastguard Worker */
1251*61046927SAndroid Build Coastguard Worker static inline unsigned
mesa_vertices_per_prim(enum mesa_prim prim)1252*61046927SAndroid Build Coastguard Worker mesa_vertices_per_prim(enum mesa_prim prim)
1253*61046927SAndroid Build Coastguard Worker {
1254*61046927SAndroid Build Coastguard Worker switch(prim) {
1255*61046927SAndroid Build Coastguard Worker case MESA_PRIM_POINTS:
1256*61046927SAndroid Build Coastguard Worker return 1;
1257*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINES:
1258*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINE_LOOP:
1259*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINE_STRIP:
1260*61046927SAndroid Build Coastguard Worker return 2;
1261*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLES:
1262*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLE_STRIP:
1263*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLE_FAN:
1264*61046927SAndroid Build Coastguard Worker return 3;
1265*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINES_ADJACENCY:
1266*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINE_STRIP_ADJACENCY:
1267*61046927SAndroid Build Coastguard Worker return 4;
1268*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLES_ADJACENCY:
1269*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLE_STRIP_ADJACENCY:
1270*61046927SAndroid Build Coastguard Worker return 6;
1271*61046927SAndroid Build Coastguard Worker
1272*61046927SAndroid Build Coastguard Worker case MESA_PRIM_QUADS:
1273*61046927SAndroid Build Coastguard Worker case MESA_PRIM_QUAD_STRIP:
1274*61046927SAndroid Build Coastguard Worker /* These won't be seen from geometry shaders but prim assembly might for
1275*61046927SAndroid Build Coastguard Worker * prim id.
1276*61046927SAndroid Build Coastguard Worker */
1277*61046927SAndroid Build Coastguard Worker return 4;
1278*61046927SAndroid Build Coastguard Worker
1279*61046927SAndroid Build Coastguard Worker /* The following primitives should never be used with geometry or mesh
1280*61046927SAndroid Build Coastguard Worker * shaders and their size is undefined.
1281*61046927SAndroid Build Coastguard Worker */
1282*61046927SAndroid Build Coastguard Worker case MESA_PRIM_POLYGON:
1283*61046927SAndroid Build Coastguard Worker default:
1284*61046927SAndroid Build Coastguard Worker debug_printf("Unrecognized geometry or mesh shader primitive");
1285*61046927SAndroid Build Coastguard Worker return 3;
1286*61046927SAndroid Build Coastguard Worker }
1287*61046927SAndroid Build Coastguard Worker }
1288*61046927SAndroid Build Coastguard Worker
1289*61046927SAndroid Build Coastguard Worker /**
1290*61046927SAndroid Build Coastguard Worker * Returns the number of decomposed primitives for the given
1291*61046927SAndroid Build Coastguard Worker * vertex count.
1292*61046927SAndroid Build Coastguard Worker * Parts of the pipline are invoked once for each triangle in
1293*61046927SAndroid Build Coastguard Worker * triangle strip, triangle fans and triangles and once
1294*61046927SAndroid Build Coastguard Worker * for each line in line strip, line loop, lines. Also
1295*61046927SAndroid Build Coastguard Worker * statistics depend on knowing the exact number of decomposed
1296*61046927SAndroid Build Coastguard Worker * primitives for a set of vertices.
1297*61046927SAndroid Build Coastguard Worker */
1298*61046927SAndroid Build Coastguard Worker static inline unsigned
u_decomposed_prims_for_vertices(enum mesa_prim primitive,int vertices)1299*61046927SAndroid Build Coastguard Worker u_decomposed_prims_for_vertices(enum mesa_prim primitive, int vertices)
1300*61046927SAndroid Build Coastguard Worker {
1301*61046927SAndroid Build Coastguard Worker switch (primitive) {
1302*61046927SAndroid Build Coastguard Worker case MESA_PRIM_POINTS:
1303*61046927SAndroid Build Coastguard Worker return vertices;
1304*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINES:
1305*61046927SAndroid Build Coastguard Worker return vertices / 2;
1306*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINE_LOOP:
1307*61046927SAndroid Build Coastguard Worker return (vertices >= 2) ? vertices : 0;
1308*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINE_STRIP:
1309*61046927SAndroid Build Coastguard Worker return (vertices >= 2) ? vertices - 1 : 0;
1310*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLES:
1311*61046927SAndroid Build Coastguard Worker return vertices / 3;
1312*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLE_STRIP:
1313*61046927SAndroid Build Coastguard Worker return (vertices >= 3) ? vertices - 2 : 0;
1314*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLE_FAN:
1315*61046927SAndroid Build Coastguard Worker return (vertices >= 3) ? vertices - 2 : 0;
1316*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINES_ADJACENCY:
1317*61046927SAndroid Build Coastguard Worker return vertices / 4;
1318*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINE_STRIP_ADJACENCY:
1319*61046927SAndroid Build Coastguard Worker return (vertices >= 4) ? vertices - 3 : 0;
1320*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLES_ADJACENCY:
1321*61046927SAndroid Build Coastguard Worker return vertices / 6;
1322*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLE_STRIP_ADJACENCY:
1323*61046927SAndroid Build Coastguard Worker return (vertices >= 6) ? 1 + (vertices - 6) / 2 : 0;
1324*61046927SAndroid Build Coastguard Worker case MESA_PRIM_QUADS:
1325*61046927SAndroid Build Coastguard Worker return vertices / 4;
1326*61046927SAndroid Build Coastguard Worker case MESA_PRIM_QUAD_STRIP:
1327*61046927SAndroid Build Coastguard Worker return (vertices >= 4) ? (vertices - 2) / 2 : 0;
1328*61046927SAndroid Build Coastguard Worker /* Polygons can't be decomposed
1329*61046927SAndroid Build Coastguard Worker * because the number of their vertices isn't known so
1330*61046927SAndroid Build Coastguard Worker * for them and whatever else we don't recognize just
1331*61046927SAndroid Build Coastguard Worker * return 1 if the number of vertices is greater than
1332*61046927SAndroid Build Coastguard Worker * or equal to 3 and zero otherwise */
1333*61046927SAndroid Build Coastguard Worker case MESA_PRIM_POLYGON:
1334*61046927SAndroid Build Coastguard Worker default:
1335*61046927SAndroid Build Coastguard Worker debug_printf("Invalid decomposition primitive!\n");
1336*61046927SAndroid Build Coastguard Worker return (vertices >= 3) ? 1 : 0;
1337*61046927SAndroid Build Coastguard Worker }
1338*61046927SAndroid Build Coastguard Worker }
1339*61046927SAndroid Build Coastguard Worker
1340*61046927SAndroid Build Coastguard Worker /**
1341*61046927SAndroid Build Coastguard Worker * Decompose a primitive that is a loop, a strip, or a fan. Return the
1342*61046927SAndroid Build Coastguard Worker * original primitive if it is already decomposed.
1343*61046927SAndroid Build Coastguard Worker */
1344*61046927SAndroid Build Coastguard Worker static inline enum mesa_prim
u_decomposed_prim(enum mesa_prim prim)1345*61046927SAndroid Build Coastguard Worker u_decomposed_prim(enum mesa_prim prim)
1346*61046927SAndroid Build Coastguard Worker {
1347*61046927SAndroid Build Coastguard Worker switch (prim) {
1348*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINE_LOOP:
1349*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINE_STRIP:
1350*61046927SAndroid Build Coastguard Worker return MESA_PRIM_LINES;
1351*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLE_STRIP:
1352*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLE_FAN:
1353*61046927SAndroid Build Coastguard Worker return MESA_PRIM_TRIANGLES;
1354*61046927SAndroid Build Coastguard Worker case MESA_PRIM_QUAD_STRIP:
1355*61046927SAndroid Build Coastguard Worker return MESA_PRIM_QUADS;
1356*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINE_STRIP_ADJACENCY:
1357*61046927SAndroid Build Coastguard Worker return MESA_PRIM_LINES_ADJACENCY;
1358*61046927SAndroid Build Coastguard Worker case MESA_PRIM_TRIANGLE_STRIP_ADJACENCY:
1359*61046927SAndroid Build Coastguard Worker return MESA_PRIM_TRIANGLES_ADJACENCY;
1360*61046927SAndroid Build Coastguard Worker default:
1361*61046927SAndroid Build Coastguard Worker return prim;
1362*61046927SAndroid Build Coastguard Worker }
1363*61046927SAndroid Build Coastguard Worker }
1364*61046927SAndroid Build Coastguard Worker
1365*61046927SAndroid Build Coastguard Worker /**
1366*61046927SAndroid Build Coastguard Worker * Reduce a primitive to one of MESA_PRIM_POINTS, MESA_PRIM_LINES, and
1367*61046927SAndroid Build Coastguard Worker * MESA_PRIM_TRIANGLES.
1368*61046927SAndroid Build Coastguard Worker */
1369*61046927SAndroid Build Coastguard Worker static inline enum mesa_prim
u_reduced_prim(enum mesa_prim prim)1370*61046927SAndroid Build Coastguard Worker u_reduced_prim(enum mesa_prim prim)
1371*61046927SAndroid Build Coastguard Worker {
1372*61046927SAndroid Build Coastguard Worker switch (prim) {
1373*61046927SAndroid Build Coastguard Worker case MESA_PRIM_POINTS:
1374*61046927SAndroid Build Coastguard Worker return MESA_PRIM_POINTS;
1375*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINES:
1376*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINE_LOOP:
1377*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINE_STRIP:
1378*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINES_ADJACENCY:
1379*61046927SAndroid Build Coastguard Worker case MESA_PRIM_LINE_STRIP_ADJACENCY:
1380*61046927SAndroid Build Coastguard Worker return MESA_PRIM_LINES;
1381*61046927SAndroid Build Coastguard Worker default:
1382*61046927SAndroid Build Coastguard Worker return MESA_PRIM_TRIANGLES;
1383*61046927SAndroid Build Coastguard Worker }
1384*61046927SAndroid Build Coastguard Worker }
1385*61046927SAndroid Build Coastguard Worker
1386*61046927SAndroid Build Coastguard Worker /**
1387*61046927SAndroid Build Coastguard Worker * A compare function enum for use in compiler lowering passes. This is in
1388*61046927SAndroid Build Coastguard Worker * the same order as GL's compare functions (shifted down by GL_NEVER), and is
1389*61046927SAndroid Build Coastguard Worker * exactly the same as gallium's PIPE_FUNC_*.
1390*61046927SAndroid Build Coastguard Worker */
1391*61046927SAndroid Build Coastguard Worker enum compare_func
1392*61046927SAndroid Build Coastguard Worker {
1393*61046927SAndroid Build Coastguard Worker COMPARE_FUNC_NEVER,
1394*61046927SAndroid Build Coastguard Worker COMPARE_FUNC_LESS,
1395*61046927SAndroid Build Coastguard Worker COMPARE_FUNC_EQUAL,
1396*61046927SAndroid Build Coastguard Worker COMPARE_FUNC_LEQUAL,
1397*61046927SAndroid Build Coastguard Worker COMPARE_FUNC_GREATER,
1398*61046927SAndroid Build Coastguard Worker COMPARE_FUNC_NOTEQUAL,
1399*61046927SAndroid Build Coastguard Worker COMPARE_FUNC_GEQUAL,
1400*61046927SAndroid Build Coastguard Worker COMPARE_FUNC_ALWAYS,
1401*61046927SAndroid Build Coastguard Worker };
1402*61046927SAndroid Build Coastguard Worker
1403*61046927SAndroid Build Coastguard Worker /**
1404*61046927SAndroid Build Coastguard Worker * Arrangements for grouping invocations from NV_compute_shader_derivatives.
1405*61046927SAndroid Build Coastguard Worker *
1406*61046927SAndroid Build Coastguard Worker * The extension provides new layout qualifiers that support two different
1407*61046927SAndroid Build Coastguard Worker * arrangements of compute shader invocations for the purpose of derivative
1408*61046927SAndroid Build Coastguard Worker * computation. When specifying
1409*61046927SAndroid Build Coastguard Worker *
1410*61046927SAndroid Build Coastguard Worker * layout(derivative_group_quadsNV) in;
1411*61046927SAndroid Build Coastguard Worker *
1412*61046927SAndroid Build Coastguard Worker * compute shader invocations are grouped into 2x2x1 arrays whose four local
1413*61046927SAndroid Build Coastguard Worker * invocation ID values follow the pattern:
1414*61046927SAndroid Build Coastguard Worker *
1415*61046927SAndroid Build Coastguard Worker * +-----------------+------------------+
1416*61046927SAndroid Build Coastguard Worker * | (2x+0, 2y+0, z) | (2x+1, 2y+0, z) |
1417*61046927SAndroid Build Coastguard Worker * +-----------------+------------------+
1418*61046927SAndroid Build Coastguard Worker * | (2x+0, 2y+1, z) | (2x+1, 2y+1, z) |
1419*61046927SAndroid Build Coastguard Worker * +-----------------+------------------+
1420*61046927SAndroid Build Coastguard Worker *
1421*61046927SAndroid Build Coastguard Worker * where Y increases from bottom to top. When specifying
1422*61046927SAndroid Build Coastguard Worker *
1423*61046927SAndroid Build Coastguard Worker * layout(derivative_group_linearNV) in;
1424*61046927SAndroid Build Coastguard Worker *
1425*61046927SAndroid Build Coastguard Worker * compute shader invocations are grouped into 2x2x1 arrays whose four local
1426*61046927SAndroid Build Coastguard Worker * invocation index values follow the pattern:
1427*61046927SAndroid Build Coastguard Worker *
1428*61046927SAndroid Build Coastguard Worker * +------+------+
1429*61046927SAndroid Build Coastguard Worker * | 4n+0 | 4n+1 |
1430*61046927SAndroid Build Coastguard Worker * +------+------+
1431*61046927SAndroid Build Coastguard Worker * | 4n+2 | 4n+3 |
1432*61046927SAndroid Build Coastguard Worker * +------+------+
1433*61046927SAndroid Build Coastguard Worker *
1434*61046927SAndroid Build Coastguard Worker * If neither layout qualifier is specified, derivatives in compute shaders
1435*61046927SAndroid Build Coastguard Worker * return zero, which is consistent with the handling of built-in texture
1436*61046927SAndroid Build Coastguard Worker * functions like texture() in GLSL 4.50 compute shaders.
1437*61046927SAndroid Build Coastguard Worker */
1438*61046927SAndroid Build Coastguard Worker enum gl_derivative_group {
1439*61046927SAndroid Build Coastguard Worker DERIVATIVE_GROUP_NONE = 0,
1440*61046927SAndroid Build Coastguard Worker DERIVATIVE_GROUP_QUADS,
1441*61046927SAndroid Build Coastguard Worker DERIVATIVE_GROUP_LINEAR,
1442*61046927SAndroid Build Coastguard Worker };
1443*61046927SAndroid Build Coastguard Worker
1444*61046927SAndroid Build Coastguard Worker enum float_controls
1445*61046927SAndroid Build Coastguard Worker {
1446*61046927SAndroid Build Coastguard Worker /* The order of these matters. For float_controls2, only the first 9 bits
1447*61046927SAndroid Build Coastguard Worker * are used and stored per-instruction in nir_alu_instr::fp_fast_math.
1448*61046927SAndroid Build Coastguard Worker * Any changes in this enum need to be synchronized with that.
1449*61046927SAndroid Build Coastguard Worker */
1450*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_DEFAULT_FLOAT_CONTROL_MODE = 0,
1451*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE_FP16 = BITFIELD_BIT(0),
1452*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE_FP32 = BITFIELD_BIT(1),
1453*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE_FP64 = BITFIELD_BIT(2),
1454*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_INF_PRESERVE_FP16 = BITFIELD_BIT(3),
1455*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_INF_PRESERVE_FP32 = BITFIELD_BIT(4),
1456*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_INF_PRESERVE_FP64 = BITFIELD_BIT(5),
1457*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_NAN_PRESERVE_FP16 = BITFIELD_BIT(6),
1458*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_NAN_PRESERVE_FP32 = BITFIELD_BIT(7),
1459*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_NAN_PRESERVE_FP64 = BITFIELD_BIT(8),
1460*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_DENORM_PRESERVE_FP16 = BITFIELD_BIT(9),
1461*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_DENORM_PRESERVE_FP32 = BITFIELD_BIT(10),
1462*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_DENORM_PRESERVE_FP64 = BITFIELD_BIT(11),
1463*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP16 = BITFIELD_BIT(12),
1464*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP32 = BITFIELD_BIT(13),
1465*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP64 = BITFIELD_BIT(14),
1466*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP16 = BITFIELD_BIT(15),
1467*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP32 = BITFIELD_BIT(16),
1468*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP64 = BITFIELD_BIT(17),
1469*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP16 = BITFIELD_BIT(18),
1470*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP32 = BITFIELD_BIT(19),
1471*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP64 = BITFIELD_BIT(20),
1472*61046927SAndroid Build Coastguard Worker
1473*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP16 =
1474*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE_FP16 |
1475*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_INF_PRESERVE_FP16 |
1476*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_NAN_PRESERVE_FP16,
1477*61046927SAndroid Build Coastguard Worker
1478*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP32 =
1479*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE_FP32 |
1480*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_INF_PRESERVE_FP32 |
1481*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_NAN_PRESERVE_FP32,
1482*61046927SAndroid Build Coastguard Worker
1483*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP64 =
1484*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE_FP64 |
1485*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_INF_PRESERVE_FP64 |
1486*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_NAN_PRESERVE_FP64,
1487*61046927SAndroid Build Coastguard Worker
1488*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE =
1489*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE_FP16 |
1490*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE_FP32 |
1491*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE_FP64,
1492*61046927SAndroid Build Coastguard Worker
1493*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_INF_PRESERVE =
1494*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_INF_PRESERVE_FP16 |
1495*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_INF_PRESERVE_FP32 |
1496*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_INF_PRESERVE_FP64,
1497*61046927SAndroid Build Coastguard Worker
1498*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_NAN_PRESERVE =
1499*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_NAN_PRESERVE_FP16 |
1500*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_NAN_PRESERVE_FP32 |
1501*61046927SAndroid Build Coastguard Worker FLOAT_CONTROLS_NAN_PRESERVE_FP64,
1502*61046927SAndroid Build Coastguard Worker };
1503*61046927SAndroid Build Coastguard Worker
1504*61046927SAndroid Build Coastguard Worker /**
1505*61046927SAndroid Build Coastguard Worker * Enums to describe sampler properties used by OpenCL's inline constant samplers.
1506*61046927SAndroid Build Coastguard Worker * These values match the meanings described in the SPIR-V spec.
1507*61046927SAndroid Build Coastguard Worker */
1508*61046927SAndroid Build Coastguard Worker enum cl_sampler_addressing_mode {
1509*61046927SAndroid Build Coastguard Worker SAMPLER_ADDRESSING_MODE_NONE = 0,
1510*61046927SAndroid Build Coastguard Worker SAMPLER_ADDRESSING_MODE_CLAMP_TO_EDGE = 1,
1511*61046927SAndroid Build Coastguard Worker SAMPLER_ADDRESSING_MODE_CLAMP = 2,
1512*61046927SAndroid Build Coastguard Worker SAMPLER_ADDRESSING_MODE_REPEAT = 3,
1513*61046927SAndroid Build Coastguard Worker SAMPLER_ADDRESSING_MODE_REPEAT_MIRRORED = 4,
1514*61046927SAndroid Build Coastguard Worker };
1515*61046927SAndroid Build Coastguard Worker
1516*61046927SAndroid Build Coastguard Worker enum cl_sampler_filter_mode {
1517*61046927SAndroid Build Coastguard Worker SAMPLER_FILTER_MODE_NEAREST = 0,
1518*61046927SAndroid Build Coastguard Worker SAMPLER_FILTER_MODE_LINEAR = 1,
1519*61046927SAndroid Build Coastguard Worker };
1520*61046927SAndroid Build Coastguard Worker
1521*61046927SAndroid Build Coastguard Worker /**
1522*61046927SAndroid Build Coastguard Worker * \name Bit flags used for updating material values.
1523*61046927SAndroid Build Coastguard Worker */
1524*61046927SAndroid Build Coastguard Worker /*@{*/
1525*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_FRONT_AMBIENT 0
1526*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_BACK_AMBIENT 1
1527*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_FRONT_DIFFUSE 2
1528*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_BACK_DIFFUSE 3
1529*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_FRONT_SPECULAR 4
1530*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_BACK_SPECULAR 5
1531*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_FRONT_EMISSION 6
1532*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_BACK_EMISSION 7
1533*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_FRONT_SHININESS 8
1534*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_BACK_SHININESS 9
1535*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_FRONT_INDEXES 10
1536*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_BACK_INDEXES 11
1537*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_MAX 12
1538*61046927SAndroid Build Coastguard Worker
1539*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_AMBIENT(f) (MAT_ATTRIB_FRONT_AMBIENT+(f))
1540*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_DIFFUSE(f) (MAT_ATTRIB_FRONT_DIFFUSE+(f))
1541*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_SPECULAR(f) (MAT_ATTRIB_FRONT_SPECULAR+(f))
1542*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_EMISSION(f) (MAT_ATTRIB_FRONT_EMISSION+(f))
1543*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_SHININESS(f)(MAT_ATTRIB_FRONT_SHININESS+(f))
1544*61046927SAndroid Build Coastguard Worker #define MAT_ATTRIB_INDEXES(f) (MAT_ATTRIB_FRONT_INDEXES+(f))
1545*61046927SAndroid Build Coastguard Worker
1546*61046927SAndroid Build Coastguard Worker #define MAT_BIT_FRONT_AMBIENT (1<<MAT_ATTRIB_FRONT_AMBIENT)
1547*61046927SAndroid Build Coastguard Worker #define MAT_BIT_BACK_AMBIENT (1<<MAT_ATTRIB_BACK_AMBIENT)
1548*61046927SAndroid Build Coastguard Worker #define MAT_BIT_FRONT_DIFFUSE (1<<MAT_ATTRIB_FRONT_DIFFUSE)
1549*61046927SAndroid Build Coastguard Worker #define MAT_BIT_BACK_DIFFUSE (1<<MAT_ATTRIB_BACK_DIFFUSE)
1550*61046927SAndroid Build Coastguard Worker #define MAT_BIT_FRONT_SPECULAR (1<<MAT_ATTRIB_FRONT_SPECULAR)
1551*61046927SAndroid Build Coastguard Worker #define MAT_BIT_BACK_SPECULAR (1<<MAT_ATTRIB_BACK_SPECULAR)
1552*61046927SAndroid Build Coastguard Worker #define MAT_BIT_FRONT_EMISSION (1<<MAT_ATTRIB_FRONT_EMISSION)
1553*61046927SAndroid Build Coastguard Worker #define MAT_BIT_BACK_EMISSION (1<<MAT_ATTRIB_BACK_EMISSION)
1554*61046927SAndroid Build Coastguard Worker #define MAT_BIT_FRONT_SHININESS (1<<MAT_ATTRIB_FRONT_SHININESS)
1555*61046927SAndroid Build Coastguard Worker #define MAT_BIT_BACK_SHININESS (1<<MAT_ATTRIB_BACK_SHININESS)
1556*61046927SAndroid Build Coastguard Worker #define MAT_BIT_FRONT_INDEXES (1<<MAT_ATTRIB_FRONT_INDEXES)
1557*61046927SAndroid Build Coastguard Worker #define MAT_BIT_BACK_INDEXES (1<<MAT_ATTRIB_BACK_INDEXES)
1558*61046927SAndroid Build Coastguard Worker
1559*61046927SAndroid Build Coastguard Worker /** An enum representing what kind of input gl_SubgroupSize is. */
1560*61046927SAndroid Build Coastguard Worker enum ENUM_PACKED gl_subgroup_size
1561*61046927SAndroid Build Coastguard Worker {
1562*61046927SAndroid Build Coastguard Worker /** Actual subgroup size, whatever that happens to be */
1563*61046927SAndroid Build Coastguard Worker SUBGROUP_SIZE_VARYING = 0,
1564*61046927SAndroid Build Coastguard Worker
1565*61046927SAndroid Build Coastguard Worker /** Subgroup size must appear to be draw or dispatch-uniform
1566*61046927SAndroid Build Coastguard Worker *
1567*61046927SAndroid Build Coastguard Worker * This is the OpenGL behavior
1568*61046927SAndroid Build Coastguard Worker */
1569*61046927SAndroid Build Coastguard Worker SUBGROUP_SIZE_UNIFORM,
1570*61046927SAndroid Build Coastguard Worker
1571*61046927SAndroid Build Coastguard Worker /** Subgroup size must appear to be the API advertised constant
1572*61046927SAndroid Build Coastguard Worker *
1573*61046927SAndroid Build Coastguard Worker * This is the default Vulkan 1.1 behavior
1574*61046927SAndroid Build Coastguard Worker */
1575*61046927SAndroid Build Coastguard Worker SUBGROUP_SIZE_API_CONSTANT,
1576*61046927SAndroid Build Coastguard Worker
1577*61046927SAndroid Build Coastguard Worker /** Subgroup size must actually be the API advertised constant
1578*61046927SAndroid Build Coastguard Worker *
1579*61046927SAndroid Build Coastguard Worker * Not only must the subgroup size match the API advertised constant as
1580*61046927SAndroid Build Coastguard Worker * with SUBGROUP_SIZE_API_CONSTANT but it must also be dispatched such that
1581*61046927SAndroid Build Coastguard Worker * all the subgroups are full if there are enough invocations.
1582*61046927SAndroid Build Coastguard Worker */
1583*61046927SAndroid Build Coastguard Worker SUBGROUP_SIZE_FULL_SUBGROUPS,
1584*61046927SAndroid Build Coastguard Worker
1585*61046927SAndroid Build Coastguard Worker /* These enums are specifically chosen so that the value of the enum is
1586*61046927SAndroid Build Coastguard Worker * also the subgroup size. If any new values are added, they must respect
1587*61046927SAndroid Build Coastguard Worker * this invariant.
1588*61046927SAndroid Build Coastguard Worker */
1589*61046927SAndroid Build Coastguard Worker SUBGROUP_SIZE_REQUIRE_4 = 4, /**< VK_EXT_subgroup_size_control */
1590*61046927SAndroid Build Coastguard Worker SUBGROUP_SIZE_REQUIRE_8 = 8, /**< VK_EXT_subgroup_size_control */
1591*61046927SAndroid Build Coastguard Worker SUBGROUP_SIZE_REQUIRE_16 = 16, /**< VK_EXT_subgroup_size_control */
1592*61046927SAndroid Build Coastguard Worker SUBGROUP_SIZE_REQUIRE_32 = 32, /**< VK_EXT_subgroup_size_control */
1593*61046927SAndroid Build Coastguard Worker SUBGROUP_SIZE_REQUIRE_64 = 64, /**< VK_EXT_subgroup_size_control */
1594*61046927SAndroid Build Coastguard Worker SUBGROUP_SIZE_REQUIRE_128 = 128, /**< VK_EXT_subgroup_size_control */
1595*61046927SAndroid Build Coastguard Worker };
1596*61046927SAndroid Build Coastguard Worker
1597*61046927SAndroid Build Coastguard Worker /* Ordered from narrower to wider scope. */
1598*61046927SAndroid Build Coastguard Worker typedef enum {
1599*61046927SAndroid Build Coastguard Worker SCOPE_NONE,
1600*61046927SAndroid Build Coastguard Worker SCOPE_INVOCATION,
1601*61046927SAndroid Build Coastguard Worker SCOPE_SUBGROUP,
1602*61046927SAndroid Build Coastguard Worker SCOPE_SHADER_CALL,
1603*61046927SAndroid Build Coastguard Worker SCOPE_WORKGROUP,
1604*61046927SAndroid Build Coastguard Worker SCOPE_QUEUE_FAMILY,
1605*61046927SAndroid Build Coastguard Worker SCOPE_DEVICE,
1606*61046927SAndroid Build Coastguard Worker } mesa_scope;
1607*61046927SAndroid Build Coastguard Worker
1608*61046927SAndroid Build Coastguard Worker const char *mesa_scope_name(mesa_scope scope);
1609*61046927SAndroid Build Coastguard Worker
1610*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
1611*61046927SAndroid Build Coastguard Worker } /* extern "C" */
1612*61046927SAndroid Build Coastguard Worker #endif
1613*61046927SAndroid Build Coastguard Worker
1614*61046927SAndroid Build Coastguard Worker #endif /* SHADER_ENUMS_H */
1615