xref: /aosp_15_r20/external/mesa3d/src/compiler/glsl/builtin_functions.cpp (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2013 Intel Corporation
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker  *
11*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker  * Software.
14*61046927SAndroid Build Coastguard Worker  *
15*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*61046927SAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21*61046927SAndroid Build Coastguard Worker  * DEALINGS IN THE SOFTWARE.
22*61046927SAndroid Build Coastguard Worker  */
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker /**
25*61046927SAndroid Build Coastguard Worker  * \file builtin_functions.cpp
26*61046927SAndroid Build Coastguard Worker  *
27*61046927SAndroid Build Coastguard Worker  * Support for GLSL built-in functions.
28*61046927SAndroid Build Coastguard Worker  *
29*61046927SAndroid Build Coastguard Worker  * This file is split into several main components:
30*61046927SAndroid Build Coastguard Worker  *
31*61046927SAndroid Build Coastguard Worker  * 1. Availability predicates
32*61046927SAndroid Build Coastguard Worker  *
33*61046927SAndroid Build Coastguard Worker  *    A series of small functions that check whether the current shader
34*61046927SAndroid Build Coastguard Worker  *    supports the version/extensions required to expose a built-in.
35*61046927SAndroid Build Coastguard Worker  *
36*61046927SAndroid Build Coastguard Worker  * 2. Core builtin_builder class functionality
37*61046927SAndroid Build Coastguard Worker  *
38*61046927SAndroid Build Coastguard Worker  * 3. Lists of built-in functions
39*61046927SAndroid Build Coastguard Worker  *
40*61046927SAndroid Build Coastguard Worker  *    The builtin_builder::create_builtins() function contains lists of all
41*61046927SAndroid Build Coastguard Worker  *    built-in function signatures, where they're available, what types they
42*61046927SAndroid Build Coastguard Worker  *    take, and so on.
43*61046927SAndroid Build Coastguard Worker  *
44*61046927SAndroid Build Coastguard Worker  * 4. Implementations of built-in function signatures
45*61046927SAndroid Build Coastguard Worker  *
46*61046927SAndroid Build Coastguard Worker  *    A series of functions which create ir_function_signatures and emit IR
47*61046927SAndroid Build Coastguard Worker  *    via ir_builder to implement them.
48*61046927SAndroid Build Coastguard Worker  *
49*61046927SAndroid Build Coastguard Worker  * 5. External API
50*61046927SAndroid Build Coastguard Worker  *
51*61046927SAndroid Build Coastguard Worker  *    A few functions the rest of the compiler can use to interact with the
52*61046927SAndroid Build Coastguard Worker  *    built-in function module.  For example, searching for a built-in by
53*61046927SAndroid Build Coastguard Worker  *    name and parameters.
54*61046927SAndroid Build Coastguard Worker  */
55*61046927SAndroid Build Coastguard Worker 
56*61046927SAndroid Build Coastguard Worker 
57*61046927SAndroid Build Coastguard Worker /**
58*61046927SAndroid Build Coastguard Worker  * Unfortunately, some versions of MinGW produce bad code if this file
59*61046927SAndroid Build Coastguard Worker  * is compiled with -O2 or -O3.  The resulting driver will crash in random
60*61046927SAndroid Build Coastguard Worker  * places if the app uses GLSL.
61*61046927SAndroid Build Coastguard Worker  * The work-around is to disable optimizations for just this file.  Luckily,
62*61046927SAndroid Build Coastguard Worker  * this code is basically just executed once.
63*61046927SAndroid Build Coastguard Worker  *
64*61046927SAndroid Build Coastguard Worker  * MinGW 4.6.3 (in Ubuntu 13.10) does not have this bug.
65*61046927SAndroid Build Coastguard Worker  * MinGW 5.3.1 (in Ubuntu 16.04) definitely has this bug.
66*61046927SAndroid Build Coastguard Worker  * MinGW 6.2.0 (in Ubuntu 16.10) definitely has this bug.
67*61046927SAndroid Build Coastguard Worker  * MinGW 7.3.0 (in Ubuntu 18.04) does not have this bug.  Assume versions before 7.3.x are buggy
68*61046927SAndroid Build Coastguard Worker  */
69*61046927SAndroid Build Coastguard Worker 
70*61046927SAndroid Build Coastguard Worker #include "util/detect_cc.h"
71*61046927SAndroid Build Coastguard Worker 
72*61046927SAndroid Build Coastguard Worker #if defined(__MINGW32__) && (DETECT_CC_GCC_VERSION < 703)
73*61046927SAndroid Build Coastguard Worker #warning "disabling optimizations for this file to work around compiler bug"
74*61046927SAndroid Build Coastguard Worker #pragma GCC optimize("O1")
75*61046927SAndroid Build Coastguard Worker #endif
76*61046927SAndroid Build Coastguard Worker 
77*61046927SAndroid Build Coastguard Worker 
78*61046927SAndroid Build Coastguard Worker #include <stdarg.h>
79*61046927SAndroid Build Coastguard Worker #include <stdio.h>
80*61046927SAndroid Build Coastguard Worker #include "util/simple_mtx.h"
81*61046927SAndroid Build Coastguard Worker #include "main/consts_exts.h"
82*61046927SAndroid Build Coastguard Worker #include "main/shader_types.h"
83*61046927SAndroid Build Coastguard Worker #include "main/shaderobj.h"
84*61046927SAndroid Build Coastguard Worker #include "ir_builder.h"
85*61046927SAndroid Build Coastguard Worker #include "glsl_parser_extras.h"
86*61046927SAndroid Build Coastguard Worker #include "program/prog_instruction.h"
87*61046927SAndroid Build Coastguard Worker #include <math.h>
88*61046927SAndroid Build Coastguard Worker #include "builtin_functions.h"
89*61046927SAndroid Build Coastguard Worker #include "util/hash_table.h"
90*61046927SAndroid Build Coastguard Worker 
91*61046927SAndroid Build Coastguard Worker #ifndef M_PIf
92*61046927SAndroid Build Coastguard Worker #define M_PIf   ((float) M_PI)
93*61046927SAndroid Build Coastguard Worker #endif
94*61046927SAndroid Build Coastguard Worker #ifndef M_PI_2f
95*61046927SAndroid Build Coastguard Worker #define M_PI_2f ((float) M_PI_2)
96*61046927SAndroid Build Coastguard Worker #endif
97*61046927SAndroid Build Coastguard Worker #ifndef M_PI_4f
98*61046927SAndroid Build Coastguard Worker #define M_PI_4f ((float) M_PI_4)
99*61046927SAndroid Build Coastguard Worker #endif
100*61046927SAndroid Build Coastguard Worker 
101*61046927SAndroid Build Coastguard Worker using namespace ir_builder;
102*61046927SAndroid Build Coastguard Worker 
103*61046927SAndroid Build Coastguard Worker static simple_mtx_t builtins_lock = SIMPLE_MTX_INITIALIZER;
104*61046927SAndroid Build Coastguard Worker 
105*61046927SAndroid Build Coastguard Worker /**
106*61046927SAndroid Build Coastguard Worker  * Availability predicates:
107*61046927SAndroid Build Coastguard Worker  *  @{
108*61046927SAndroid Build Coastguard Worker  */
109*61046927SAndroid Build Coastguard Worker static bool
always_available(const _mesa_glsl_parse_state *)110*61046927SAndroid Build Coastguard Worker always_available(const _mesa_glsl_parse_state *)
111*61046927SAndroid Build Coastguard Worker {
112*61046927SAndroid Build Coastguard Worker    return true;
113*61046927SAndroid Build Coastguard Worker }
114*61046927SAndroid Build Coastguard Worker 
115*61046927SAndroid Build Coastguard Worker static bool
compatibility_vs_only(const _mesa_glsl_parse_state * state)116*61046927SAndroid Build Coastguard Worker compatibility_vs_only(const _mesa_glsl_parse_state *state)
117*61046927SAndroid Build Coastguard Worker {
118*61046927SAndroid Build Coastguard Worker    return state->stage == MESA_SHADER_VERTEX &&
119*61046927SAndroid Build Coastguard Worker           (state->compat_shader || state->ARB_compatibility_enable) &&
120*61046927SAndroid Build Coastguard Worker           !state->es_shader;
121*61046927SAndroid Build Coastguard Worker }
122*61046927SAndroid Build Coastguard Worker 
123*61046927SAndroid Build Coastguard Worker static bool
derivatives_only(const _mesa_glsl_parse_state * state)124*61046927SAndroid Build Coastguard Worker derivatives_only(const _mesa_glsl_parse_state *state)
125*61046927SAndroid Build Coastguard Worker {
126*61046927SAndroid Build Coastguard Worker    return state->stage == MESA_SHADER_FRAGMENT ||
127*61046927SAndroid Build Coastguard Worker           (state->stage == MESA_SHADER_COMPUTE &&
128*61046927SAndroid Build Coastguard Worker            state->NV_compute_shader_derivatives_enable);
129*61046927SAndroid Build Coastguard Worker }
130*61046927SAndroid Build Coastguard Worker 
131*61046927SAndroid Build Coastguard Worker static bool
gs_only(const _mesa_glsl_parse_state * state)132*61046927SAndroid Build Coastguard Worker gs_only(const _mesa_glsl_parse_state *state)
133*61046927SAndroid Build Coastguard Worker {
134*61046927SAndroid Build Coastguard Worker    return state->stage == MESA_SHADER_GEOMETRY;
135*61046927SAndroid Build Coastguard Worker }
136*61046927SAndroid Build Coastguard Worker 
137*61046927SAndroid Build Coastguard Worker /* For texture functions moved to compat profile in GLSL 4.20 */
138*61046927SAndroid Build Coastguard Worker static bool
deprecated_texture(const _mesa_glsl_parse_state * state)139*61046927SAndroid Build Coastguard Worker deprecated_texture(const _mesa_glsl_parse_state *state)
140*61046927SAndroid Build Coastguard Worker {
141*61046927SAndroid Build Coastguard Worker    return state->compat_shader || !state->is_version(420, 0);
142*61046927SAndroid Build Coastguard Worker }
143*61046927SAndroid Build Coastguard Worker 
144*61046927SAndroid Build Coastguard Worker static bool
deprecated_texture_derivatives_only(const _mesa_glsl_parse_state * state)145*61046927SAndroid Build Coastguard Worker deprecated_texture_derivatives_only(const _mesa_glsl_parse_state *state)
146*61046927SAndroid Build Coastguard Worker {
147*61046927SAndroid Build Coastguard Worker    return (deprecated_texture(state) && derivatives_only(state)) || state->allow_vertex_texture_bias;
148*61046927SAndroid Build Coastguard Worker }
149*61046927SAndroid Build Coastguard Worker 
150*61046927SAndroid Build Coastguard Worker static bool
v110(const _mesa_glsl_parse_state * state)151*61046927SAndroid Build Coastguard Worker v110(const _mesa_glsl_parse_state *state)
152*61046927SAndroid Build Coastguard Worker {
153*61046927SAndroid Build Coastguard Worker    return !state->es_shader;
154*61046927SAndroid Build Coastguard Worker }
155*61046927SAndroid Build Coastguard Worker 
156*61046927SAndroid Build Coastguard Worker static bool
v110_deprecated_texture(const _mesa_glsl_parse_state * state)157*61046927SAndroid Build Coastguard Worker v110_deprecated_texture(const _mesa_glsl_parse_state *state)
158*61046927SAndroid Build Coastguard Worker {
159*61046927SAndroid Build Coastguard Worker    return !state->es_shader && deprecated_texture(state);
160*61046927SAndroid Build Coastguard Worker }
161*61046927SAndroid Build Coastguard Worker 
162*61046927SAndroid Build Coastguard Worker static bool
v110_derivatives_only_deprecated_texture(const _mesa_glsl_parse_state * state)163*61046927SAndroid Build Coastguard Worker v110_derivatives_only_deprecated_texture(const _mesa_glsl_parse_state *state)
164*61046927SAndroid Build Coastguard Worker {
165*61046927SAndroid Build Coastguard Worker    return v110_deprecated_texture(state) &&
166*61046927SAndroid Build Coastguard Worker           derivatives_only(state);
167*61046927SAndroid Build Coastguard Worker }
168*61046927SAndroid Build Coastguard Worker 
169*61046927SAndroid Build Coastguard Worker static bool
v120(const _mesa_glsl_parse_state * state)170*61046927SAndroid Build Coastguard Worker v120(const _mesa_glsl_parse_state *state)
171*61046927SAndroid Build Coastguard Worker {
172*61046927SAndroid Build Coastguard Worker    return state->is_version(120, 300);
173*61046927SAndroid Build Coastguard Worker }
174*61046927SAndroid Build Coastguard Worker 
175*61046927SAndroid Build Coastguard Worker static bool
v130(const _mesa_glsl_parse_state * state)176*61046927SAndroid Build Coastguard Worker v130(const _mesa_glsl_parse_state *state)
177*61046927SAndroid Build Coastguard Worker {
178*61046927SAndroid Build Coastguard Worker    return state->is_version(130, 300);
179*61046927SAndroid Build Coastguard Worker }
180*61046927SAndroid Build Coastguard Worker 
181*61046927SAndroid Build Coastguard Worker static bool
v130_desktop(const _mesa_glsl_parse_state * state)182*61046927SAndroid Build Coastguard Worker v130_desktop(const _mesa_glsl_parse_state *state)
183*61046927SAndroid Build Coastguard Worker {
184*61046927SAndroid Build Coastguard Worker    return state->is_version(130, 0);
185*61046927SAndroid Build Coastguard Worker }
186*61046927SAndroid Build Coastguard Worker 
187*61046927SAndroid Build Coastguard Worker static bool
v460_desktop(const _mesa_glsl_parse_state * state)188*61046927SAndroid Build Coastguard Worker v460_desktop(const _mesa_glsl_parse_state *state)
189*61046927SAndroid Build Coastguard Worker {
190*61046927SAndroid Build Coastguard Worker    return state->is_version(460, 0);
191*61046927SAndroid Build Coastguard Worker }
192*61046927SAndroid Build Coastguard Worker 
193*61046927SAndroid Build Coastguard Worker static bool
v130_derivatives_only(const _mesa_glsl_parse_state * state)194*61046927SAndroid Build Coastguard Worker v130_derivatives_only(const _mesa_glsl_parse_state *state)
195*61046927SAndroid Build Coastguard Worker {
196*61046927SAndroid Build Coastguard Worker    return state->is_version(130, 300) &&
197*61046927SAndroid Build Coastguard Worker           derivatives_only(state);
198*61046927SAndroid Build Coastguard Worker }
199*61046927SAndroid Build Coastguard Worker 
200*61046927SAndroid Build Coastguard Worker static bool
v140_or_es3(const _mesa_glsl_parse_state * state)201*61046927SAndroid Build Coastguard Worker v140_or_es3(const _mesa_glsl_parse_state *state)
202*61046927SAndroid Build Coastguard Worker {
203*61046927SAndroid Build Coastguard Worker    return state->is_version(140, 300);
204*61046927SAndroid Build Coastguard Worker }
205*61046927SAndroid Build Coastguard Worker 
206*61046927SAndroid Build Coastguard Worker static bool
v400_derivatives_only(const _mesa_glsl_parse_state * state)207*61046927SAndroid Build Coastguard Worker v400_derivatives_only(const _mesa_glsl_parse_state *state)
208*61046927SAndroid Build Coastguard Worker {
209*61046927SAndroid Build Coastguard Worker    return state->is_version(400, 0) &&
210*61046927SAndroid Build Coastguard Worker           derivatives_only(state);
211*61046927SAndroid Build Coastguard Worker }
212*61046927SAndroid Build Coastguard Worker 
213*61046927SAndroid Build Coastguard Worker static bool
texture_rectangle(const _mesa_glsl_parse_state * state)214*61046927SAndroid Build Coastguard Worker texture_rectangle(const _mesa_glsl_parse_state *state)
215*61046927SAndroid Build Coastguard Worker {
216*61046927SAndroid Build Coastguard Worker    return state->ARB_texture_rectangle_enable;
217*61046927SAndroid Build Coastguard Worker }
218*61046927SAndroid Build Coastguard Worker 
219*61046927SAndroid Build Coastguard Worker static bool
texture_external(const _mesa_glsl_parse_state * state)220*61046927SAndroid Build Coastguard Worker texture_external(const _mesa_glsl_parse_state *state)
221*61046927SAndroid Build Coastguard Worker {
222*61046927SAndroid Build Coastguard Worker    return state->OES_EGL_image_external_enable;
223*61046927SAndroid Build Coastguard Worker }
224*61046927SAndroid Build Coastguard Worker 
225*61046927SAndroid Build Coastguard Worker static bool
texture_external_es3(const _mesa_glsl_parse_state * state)226*61046927SAndroid Build Coastguard Worker texture_external_es3(const _mesa_glsl_parse_state *state)
227*61046927SAndroid Build Coastguard Worker {
228*61046927SAndroid Build Coastguard Worker    return state->OES_EGL_image_external_essl3_enable &&
229*61046927SAndroid Build Coastguard Worker       state->es_shader &&
230*61046927SAndroid Build Coastguard Worker       state->is_version(0, 300);
231*61046927SAndroid Build Coastguard Worker }
232*61046927SAndroid Build Coastguard Worker 
233*61046927SAndroid Build Coastguard Worker static bool
texture_shadow2Dext(const _mesa_glsl_parse_state * state)234*61046927SAndroid Build Coastguard Worker texture_shadow2Dext(const _mesa_glsl_parse_state *state)
235*61046927SAndroid Build Coastguard Worker {
236*61046927SAndroid Build Coastguard Worker    return state->es_shader &&
237*61046927SAndroid Build Coastguard Worker       state->EXT_shadow_samplers_enable;
238*61046927SAndroid Build Coastguard Worker }
239*61046927SAndroid Build Coastguard Worker 
240*61046927SAndroid Build Coastguard Worker /** True if texturing functions with explicit LOD are allowed. */
241*61046927SAndroid Build Coastguard Worker static bool
lod_exists_in_stage(const _mesa_glsl_parse_state * state)242*61046927SAndroid Build Coastguard Worker lod_exists_in_stage(const _mesa_glsl_parse_state *state)
243*61046927SAndroid Build Coastguard Worker {
244*61046927SAndroid Build Coastguard Worker    /* Texturing functions with "Lod" in their name exist:
245*61046927SAndroid Build Coastguard Worker     * - In the vertex shader stage (for all languages)
246*61046927SAndroid Build Coastguard Worker     * - In any stage for GLSL 1.30+ or GLSL ES 3.00
247*61046927SAndroid Build Coastguard Worker     * - In any stage for desktop GLSL with ARB_shader_texture_lod enabled.
248*61046927SAndroid Build Coastguard Worker     *
249*61046927SAndroid Build Coastguard Worker     * Since ARB_shader_texture_lod can only be enabled on desktop GLSL, we
250*61046927SAndroid Build Coastguard Worker     * don't need to explicitly check state->es_shader.
251*61046927SAndroid Build Coastguard Worker     */
252*61046927SAndroid Build Coastguard Worker    return state->stage == MESA_SHADER_VERTEX ||
253*61046927SAndroid Build Coastguard Worker           state->is_version(130, 300) ||
254*61046927SAndroid Build Coastguard Worker           state->ARB_shader_texture_lod_enable ||
255*61046927SAndroid Build Coastguard Worker           state->EXT_gpu_shader4_enable;
256*61046927SAndroid Build Coastguard Worker }
257*61046927SAndroid Build Coastguard Worker 
258*61046927SAndroid Build Coastguard Worker static bool
lod_deprecated_texture(const _mesa_glsl_parse_state * state)259*61046927SAndroid Build Coastguard Worker lod_deprecated_texture(const _mesa_glsl_parse_state *state)
260*61046927SAndroid Build Coastguard Worker {
261*61046927SAndroid Build Coastguard Worker    return deprecated_texture(state) && lod_exists_in_stage(state);
262*61046927SAndroid Build Coastguard Worker }
263*61046927SAndroid Build Coastguard Worker 
264*61046927SAndroid Build Coastguard Worker static bool
v110_lod_deprecated_texture(const _mesa_glsl_parse_state * state)265*61046927SAndroid Build Coastguard Worker v110_lod_deprecated_texture(const _mesa_glsl_parse_state *state)
266*61046927SAndroid Build Coastguard Worker {
267*61046927SAndroid Build Coastguard Worker    return !state->es_shader && lod_deprecated_texture(state);
268*61046927SAndroid Build Coastguard Worker }
269*61046927SAndroid Build Coastguard Worker 
270*61046927SAndroid Build Coastguard Worker static bool
texture_buffer(const _mesa_glsl_parse_state * state)271*61046927SAndroid Build Coastguard Worker texture_buffer(const _mesa_glsl_parse_state *state)
272*61046927SAndroid Build Coastguard Worker {
273*61046927SAndroid Build Coastguard Worker    return state->is_version(140, 320) ||
274*61046927SAndroid Build Coastguard Worker       state->EXT_texture_buffer_enable ||
275*61046927SAndroid Build Coastguard Worker       state->OES_texture_buffer_enable;
276*61046927SAndroid Build Coastguard Worker }
277*61046927SAndroid Build Coastguard Worker 
278*61046927SAndroid Build Coastguard Worker static bool
shader_texture_lod(const _mesa_glsl_parse_state * state)279*61046927SAndroid Build Coastguard Worker shader_texture_lod(const _mesa_glsl_parse_state *state)
280*61046927SAndroid Build Coastguard Worker {
281*61046927SAndroid Build Coastguard Worker    return state->ARB_shader_texture_lod_enable;
282*61046927SAndroid Build Coastguard Worker }
283*61046927SAndroid Build Coastguard Worker 
284*61046927SAndroid Build Coastguard Worker static bool
shader_texture_lod_and_rect(const _mesa_glsl_parse_state * state)285*61046927SAndroid Build Coastguard Worker shader_texture_lod_and_rect(const _mesa_glsl_parse_state *state)
286*61046927SAndroid Build Coastguard Worker {
287*61046927SAndroid Build Coastguard Worker    return state->ARB_shader_texture_lod_enable &&
288*61046927SAndroid Build Coastguard Worker           state->ARB_texture_rectangle_enable;
289*61046927SAndroid Build Coastguard Worker }
290*61046927SAndroid Build Coastguard Worker 
291*61046927SAndroid Build Coastguard Worker static bool
shader_bit_encoding(const _mesa_glsl_parse_state * state)292*61046927SAndroid Build Coastguard Worker shader_bit_encoding(const _mesa_glsl_parse_state *state)
293*61046927SAndroid Build Coastguard Worker {
294*61046927SAndroid Build Coastguard Worker    return state->is_version(330, 300) ||
295*61046927SAndroid Build Coastguard Worker           state->ARB_shader_bit_encoding_enable ||
296*61046927SAndroid Build Coastguard Worker           state->ARB_gpu_shader5_enable;
297*61046927SAndroid Build Coastguard Worker }
298*61046927SAndroid Build Coastguard Worker 
299*61046927SAndroid Build Coastguard Worker static bool
shader_integer_mix(const _mesa_glsl_parse_state * state)300*61046927SAndroid Build Coastguard Worker shader_integer_mix(const _mesa_glsl_parse_state *state)
301*61046927SAndroid Build Coastguard Worker {
302*61046927SAndroid Build Coastguard Worker    return state->is_version(450, 310) ||
303*61046927SAndroid Build Coastguard Worker           state->ARB_ES3_1_compatibility_enable ||
304*61046927SAndroid Build Coastguard Worker           (v130(state) && state->EXT_shader_integer_mix_enable);
305*61046927SAndroid Build Coastguard Worker }
306*61046927SAndroid Build Coastguard Worker 
307*61046927SAndroid Build Coastguard Worker static bool
shader_packing_or_es3(const _mesa_glsl_parse_state * state)308*61046927SAndroid Build Coastguard Worker shader_packing_or_es3(const _mesa_glsl_parse_state *state)
309*61046927SAndroid Build Coastguard Worker {
310*61046927SAndroid Build Coastguard Worker    return state->ARB_shading_language_packing_enable ||
311*61046927SAndroid Build Coastguard Worker           state->is_version(420, 300);
312*61046927SAndroid Build Coastguard Worker }
313*61046927SAndroid Build Coastguard Worker 
314*61046927SAndroid Build Coastguard Worker static bool
shader_packing_or_es3_or_gpu_shader5(const _mesa_glsl_parse_state * state)315*61046927SAndroid Build Coastguard Worker shader_packing_or_es3_or_gpu_shader5(const _mesa_glsl_parse_state *state)
316*61046927SAndroid Build Coastguard Worker {
317*61046927SAndroid Build Coastguard Worker    return state->ARB_shading_language_packing_enable ||
318*61046927SAndroid Build Coastguard Worker           state->ARB_gpu_shader5_enable ||
319*61046927SAndroid Build Coastguard Worker           state->is_version(400, 300);
320*61046927SAndroid Build Coastguard Worker }
321*61046927SAndroid Build Coastguard Worker 
322*61046927SAndroid Build Coastguard Worker static bool
gpu_shader4(const _mesa_glsl_parse_state * state)323*61046927SAndroid Build Coastguard Worker gpu_shader4(const _mesa_glsl_parse_state *state)
324*61046927SAndroid Build Coastguard Worker {
325*61046927SAndroid Build Coastguard Worker    return state->EXT_gpu_shader4_enable;
326*61046927SAndroid Build Coastguard Worker }
327*61046927SAndroid Build Coastguard Worker 
328*61046927SAndroid Build Coastguard Worker static bool
gpu_shader4_integer(const _mesa_glsl_parse_state * state)329*61046927SAndroid Build Coastguard Worker gpu_shader4_integer(const _mesa_glsl_parse_state *state)
330*61046927SAndroid Build Coastguard Worker {
331*61046927SAndroid Build Coastguard Worker    return state->EXT_gpu_shader4_enable &&
332*61046927SAndroid Build Coastguard Worker           state->exts->EXT_texture_integer;
333*61046927SAndroid Build Coastguard Worker }
334*61046927SAndroid Build Coastguard Worker 
335*61046927SAndroid Build Coastguard Worker static bool
gpu_shader4_array(const _mesa_glsl_parse_state * state)336*61046927SAndroid Build Coastguard Worker gpu_shader4_array(const _mesa_glsl_parse_state *state)
337*61046927SAndroid Build Coastguard Worker {
338*61046927SAndroid Build Coastguard Worker    return state->EXT_gpu_shader4_enable &&
339*61046927SAndroid Build Coastguard Worker           state->exts->EXT_texture_array;
340*61046927SAndroid Build Coastguard Worker }
341*61046927SAndroid Build Coastguard Worker 
342*61046927SAndroid Build Coastguard Worker static bool
gpu_shader4_array_integer(const _mesa_glsl_parse_state * state)343*61046927SAndroid Build Coastguard Worker gpu_shader4_array_integer(const _mesa_glsl_parse_state *state)
344*61046927SAndroid Build Coastguard Worker {
345*61046927SAndroid Build Coastguard Worker    return gpu_shader4_array(state) &&
346*61046927SAndroid Build Coastguard Worker           state->exts->EXT_texture_integer;
347*61046927SAndroid Build Coastguard Worker }
348*61046927SAndroid Build Coastguard Worker 
349*61046927SAndroid Build Coastguard Worker static bool
gpu_shader4_rect(const _mesa_glsl_parse_state * state)350*61046927SAndroid Build Coastguard Worker gpu_shader4_rect(const _mesa_glsl_parse_state *state)
351*61046927SAndroid Build Coastguard Worker {
352*61046927SAndroid Build Coastguard Worker    return state->EXT_gpu_shader4_enable &&
353*61046927SAndroid Build Coastguard Worker           state->exts->NV_texture_rectangle;
354*61046927SAndroid Build Coastguard Worker }
355*61046927SAndroid Build Coastguard Worker 
356*61046927SAndroid Build Coastguard Worker static bool
gpu_shader4_rect_integer(const _mesa_glsl_parse_state * state)357*61046927SAndroid Build Coastguard Worker gpu_shader4_rect_integer(const _mesa_glsl_parse_state *state)
358*61046927SAndroid Build Coastguard Worker {
359*61046927SAndroid Build Coastguard Worker    return gpu_shader4_rect(state) &&
360*61046927SAndroid Build Coastguard Worker           state->exts->EXT_texture_integer;
361*61046927SAndroid Build Coastguard Worker }
362*61046927SAndroid Build Coastguard Worker 
363*61046927SAndroid Build Coastguard Worker static bool
gpu_shader4_tbo(const _mesa_glsl_parse_state * state)364*61046927SAndroid Build Coastguard Worker gpu_shader4_tbo(const _mesa_glsl_parse_state *state)
365*61046927SAndroid Build Coastguard Worker {
366*61046927SAndroid Build Coastguard Worker    return state->EXT_gpu_shader4_enable &&
367*61046927SAndroid Build Coastguard Worker           state->exts->EXT_texture_buffer_object;
368*61046927SAndroid Build Coastguard Worker }
369*61046927SAndroid Build Coastguard Worker 
370*61046927SAndroid Build Coastguard Worker static bool
gpu_shader4_tbo_integer(const _mesa_glsl_parse_state * state)371*61046927SAndroid Build Coastguard Worker gpu_shader4_tbo_integer(const _mesa_glsl_parse_state *state)
372*61046927SAndroid Build Coastguard Worker {
373*61046927SAndroid Build Coastguard Worker    return gpu_shader4_tbo(state) &&
374*61046927SAndroid Build Coastguard Worker           state->exts->EXT_texture_integer;
375*61046927SAndroid Build Coastguard Worker }
376*61046927SAndroid Build Coastguard Worker 
377*61046927SAndroid Build Coastguard Worker static bool
gpu_shader4_derivs_only(const _mesa_glsl_parse_state * state)378*61046927SAndroid Build Coastguard Worker gpu_shader4_derivs_only(const _mesa_glsl_parse_state *state)
379*61046927SAndroid Build Coastguard Worker {
380*61046927SAndroid Build Coastguard Worker    return state->EXT_gpu_shader4_enable &&
381*61046927SAndroid Build Coastguard Worker           derivatives_only(state);
382*61046927SAndroid Build Coastguard Worker }
383*61046927SAndroid Build Coastguard Worker 
384*61046927SAndroid Build Coastguard Worker static bool
gpu_shader4_integer_derivs_only(const _mesa_glsl_parse_state * state)385*61046927SAndroid Build Coastguard Worker gpu_shader4_integer_derivs_only(const _mesa_glsl_parse_state *state)
386*61046927SAndroid Build Coastguard Worker {
387*61046927SAndroid Build Coastguard Worker    return gpu_shader4_derivs_only(state) &&
388*61046927SAndroid Build Coastguard Worker           state->exts->EXT_texture_integer;
389*61046927SAndroid Build Coastguard Worker }
390*61046927SAndroid Build Coastguard Worker 
391*61046927SAndroid Build Coastguard Worker static bool
gpu_shader4_array_derivs_only(const _mesa_glsl_parse_state * state)392*61046927SAndroid Build Coastguard Worker gpu_shader4_array_derivs_only(const _mesa_glsl_parse_state *state)
393*61046927SAndroid Build Coastguard Worker {
394*61046927SAndroid Build Coastguard Worker    return gpu_shader4_derivs_only(state) &&
395*61046927SAndroid Build Coastguard Worker           state->exts->EXT_texture_array;
396*61046927SAndroid Build Coastguard Worker }
397*61046927SAndroid Build Coastguard Worker 
398*61046927SAndroid Build Coastguard Worker static bool
gpu_shader4_array_integer_derivs_only(const _mesa_glsl_parse_state * state)399*61046927SAndroid Build Coastguard Worker gpu_shader4_array_integer_derivs_only(const _mesa_glsl_parse_state *state)
400*61046927SAndroid Build Coastguard Worker {
401*61046927SAndroid Build Coastguard Worker    return gpu_shader4_array_derivs_only(state) &&
402*61046927SAndroid Build Coastguard Worker           state->exts->EXT_texture_integer;
403*61046927SAndroid Build Coastguard Worker }
404*61046927SAndroid Build Coastguard Worker 
405*61046927SAndroid Build Coastguard Worker static bool
v130_or_gpu_shader4(const _mesa_glsl_parse_state * state)406*61046927SAndroid Build Coastguard Worker v130_or_gpu_shader4(const _mesa_glsl_parse_state *state)
407*61046927SAndroid Build Coastguard Worker {
408*61046927SAndroid Build Coastguard Worker    return state->is_version(130, 300) || state->EXT_gpu_shader4_enable;
409*61046927SAndroid Build Coastguard Worker }
410*61046927SAndroid Build Coastguard Worker 
411*61046927SAndroid Build Coastguard Worker static bool
v130_or_gpu_shader4_and_tex_shadow_lod(const _mesa_glsl_parse_state * state)412*61046927SAndroid Build Coastguard Worker v130_or_gpu_shader4_and_tex_shadow_lod(const _mesa_glsl_parse_state *state)
413*61046927SAndroid Build Coastguard Worker {
414*61046927SAndroid Build Coastguard Worker    return v130_or_gpu_shader4(state) &&
415*61046927SAndroid Build Coastguard Worker           state->EXT_texture_shadow_lod_enable;
416*61046927SAndroid Build Coastguard Worker }
417*61046927SAndroid Build Coastguard Worker 
418*61046927SAndroid Build Coastguard Worker static bool
gpu_shader5(const _mesa_glsl_parse_state * state)419*61046927SAndroid Build Coastguard Worker gpu_shader5(const _mesa_glsl_parse_state *state)
420*61046927SAndroid Build Coastguard Worker {
421*61046927SAndroid Build Coastguard Worker    return state->is_version(400, 0) || state->ARB_gpu_shader5_enable;
422*61046927SAndroid Build Coastguard Worker }
423*61046927SAndroid Build Coastguard Worker 
424*61046927SAndroid Build Coastguard Worker static bool
gpu_shader5_es(const _mesa_glsl_parse_state * state)425*61046927SAndroid Build Coastguard Worker gpu_shader5_es(const _mesa_glsl_parse_state *state)
426*61046927SAndroid Build Coastguard Worker {
427*61046927SAndroid Build Coastguard Worker    return state->is_version(400, 320) ||
428*61046927SAndroid Build Coastguard Worker           state->ARB_gpu_shader5_enable ||
429*61046927SAndroid Build Coastguard Worker           state->EXT_gpu_shader5_enable ||
430*61046927SAndroid Build Coastguard Worker           state->OES_gpu_shader5_enable;
431*61046927SAndroid Build Coastguard Worker }
432*61046927SAndroid Build Coastguard Worker 
433*61046927SAndroid Build Coastguard Worker static bool
gpu_shader5_or_OES_texture_cube_map_array(const _mesa_glsl_parse_state * state)434*61046927SAndroid Build Coastguard Worker gpu_shader5_or_OES_texture_cube_map_array(const _mesa_glsl_parse_state *state)
435*61046927SAndroid Build Coastguard Worker {
436*61046927SAndroid Build Coastguard Worker    return state->is_version(400, 320) ||
437*61046927SAndroid Build Coastguard Worker           state->ARB_gpu_shader5_enable ||
438*61046927SAndroid Build Coastguard Worker           state->EXT_texture_cube_map_array_enable ||
439*61046927SAndroid Build Coastguard Worker           state->OES_texture_cube_map_array_enable;
440*61046927SAndroid Build Coastguard Worker }
441*61046927SAndroid Build Coastguard Worker 
442*61046927SAndroid Build Coastguard Worker static bool
es31_not_gs5(const _mesa_glsl_parse_state * state)443*61046927SAndroid Build Coastguard Worker es31_not_gs5(const _mesa_glsl_parse_state *state)
444*61046927SAndroid Build Coastguard Worker {
445*61046927SAndroid Build Coastguard Worker    return state->is_version(0, 310) && !gpu_shader5_es(state);
446*61046927SAndroid Build Coastguard Worker }
447*61046927SAndroid Build Coastguard Worker 
448*61046927SAndroid Build Coastguard Worker static bool
gpu_shader5_or_es31(const _mesa_glsl_parse_state * state)449*61046927SAndroid Build Coastguard Worker gpu_shader5_or_es31(const _mesa_glsl_parse_state *state)
450*61046927SAndroid Build Coastguard Worker {
451*61046927SAndroid Build Coastguard Worker    return state->is_version(400, 310) || state->ARB_gpu_shader5_enable;
452*61046927SAndroid Build Coastguard Worker }
453*61046927SAndroid Build Coastguard Worker 
454*61046927SAndroid Build Coastguard Worker static bool
shader_packing_or_es31_or_gpu_shader5(const _mesa_glsl_parse_state * state)455*61046927SAndroid Build Coastguard Worker shader_packing_or_es31_or_gpu_shader5(const _mesa_glsl_parse_state *state)
456*61046927SAndroid Build Coastguard Worker {
457*61046927SAndroid Build Coastguard Worker    return state->ARB_shading_language_packing_enable ||
458*61046927SAndroid Build Coastguard Worker           state->ARB_gpu_shader5_enable ||
459*61046927SAndroid Build Coastguard Worker           state->is_version(400, 310);
460*61046927SAndroid Build Coastguard Worker }
461*61046927SAndroid Build Coastguard Worker 
462*61046927SAndroid Build Coastguard Worker static bool
gpu_shader5_or_es31_or_integer_functions(const _mesa_glsl_parse_state * state)463*61046927SAndroid Build Coastguard Worker gpu_shader5_or_es31_or_integer_functions(const _mesa_glsl_parse_state *state)
464*61046927SAndroid Build Coastguard Worker {
465*61046927SAndroid Build Coastguard Worker    return gpu_shader5_or_es31(state) ||
466*61046927SAndroid Build Coastguard Worker           state->MESA_shader_integer_functions_enable;
467*61046927SAndroid Build Coastguard Worker }
468*61046927SAndroid Build Coastguard Worker 
469*61046927SAndroid Build Coastguard Worker static bool
gpu_shader_half_float(const _mesa_glsl_parse_state * state)470*61046927SAndroid Build Coastguard Worker gpu_shader_half_float(const _mesa_glsl_parse_state *state)
471*61046927SAndroid Build Coastguard Worker {
472*61046927SAndroid Build Coastguard Worker    return state->AMD_gpu_shader_half_float_enable;
473*61046927SAndroid Build Coastguard Worker }
474*61046927SAndroid Build Coastguard Worker 
475*61046927SAndroid Build Coastguard Worker static bool
fs_interpolate_at(const _mesa_glsl_parse_state * state)476*61046927SAndroid Build Coastguard Worker fs_interpolate_at(const _mesa_glsl_parse_state *state)
477*61046927SAndroid Build Coastguard Worker {
478*61046927SAndroid Build Coastguard Worker    return state->stage == MESA_SHADER_FRAGMENT &&
479*61046927SAndroid Build Coastguard Worker           (state->is_version(400, 320) ||
480*61046927SAndroid Build Coastguard Worker            state->ARB_gpu_shader5_enable ||
481*61046927SAndroid Build Coastguard Worker            state->OES_shader_multisample_interpolation_enable);
482*61046927SAndroid Build Coastguard Worker }
483*61046927SAndroid Build Coastguard Worker 
484*61046927SAndroid Build Coastguard Worker static bool
fs_half_float_interpolate_at(const _mesa_glsl_parse_state * state)485*61046927SAndroid Build Coastguard Worker fs_half_float_interpolate_at(const _mesa_glsl_parse_state *state)
486*61046927SAndroid Build Coastguard Worker {
487*61046927SAndroid Build Coastguard Worker    return fs_interpolate_at(state) && gpu_shader_half_float(state);
488*61046927SAndroid Build Coastguard Worker }
489*61046927SAndroid Build Coastguard Worker 
490*61046927SAndroid Build Coastguard Worker static bool
texture_array_lod(const _mesa_glsl_parse_state * state)491*61046927SAndroid Build Coastguard Worker texture_array_lod(const _mesa_glsl_parse_state *state)
492*61046927SAndroid Build Coastguard Worker {
493*61046927SAndroid Build Coastguard Worker    return lod_exists_in_stage(state) &&
494*61046927SAndroid Build Coastguard Worker           (state->EXT_texture_array_enable ||
495*61046927SAndroid Build Coastguard Worker            (state->EXT_gpu_shader4_enable &&
496*61046927SAndroid Build Coastguard Worker             state->exts->EXT_texture_array));
497*61046927SAndroid Build Coastguard Worker }
498*61046927SAndroid Build Coastguard Worker 
499*61046927SAndroid Build Coastguard Worker static bool
texture_array(const _mesa_glsl_parse_state * state)500*61046927SAndroid Build Coastguard Worker texture_array(const _mesa_glsl_parse_state *state)
501*61046927SAndroid Build Coastguard Worker {
502*61046927SAndroid Build Coastguard Worker    return state->EXT_texture_array_enable ||
503*61046927SAndroid Build Coastguard Worker           (state->EXT_gpu_shader4_enable &&
504*61046927SAndroid Build Coastguard Worker            state->exts->EXT_texture_array);
505*61046927SAndroid Build Coastguard Worker }
506*61046927SAndroid Build Coastguard Worker 
507*61046927SAndroid Build Coastguard Worker static bool
texture_array_derivs_only(const _mesa_glsl_parse_state * state)508*61046927SAndroid Build Coastguard Worker texture_array_derivs_only(const _mesa_glsl_parse_state *state)
509*61046927SAndroid Build Coastguard Worker {
510*61046927SAndroid Build Coastguard Worker    return derivatives_only(state) &&
511*61046927SAndroid Build Coastguard Worker           texture_array(state);
512*61046927SAndroid Build Coastguard Worker }
513*61046927SAndroid Build Coastguard Worker 
514*61046927SAndroid Build Coastguard Worker static bool
texture_multisample(const _mesa_glsl_parse_state * state)515*61046927SAndroid Build Coastguard Worker texture_multisample(const _mesa_glsl_parse_state *state)
516*61046927SAndroid Build Coastguard Worker {
517*61046927SAndroid Build Coastguard Worker    return state->is_version(150, 310) ||
518*61046927SAndroid Build Coastguard Worker           state->ARB_texture_multisample_enable;
519*61046927SAndroid Build Coastguard Worker }
520*61046927SAndroid Build Coastguard Worker 
521*61046927SAndroid Build Coastguard Worker static bool
texture_multisample_array(const _mesa_glsl_parse_state * state)522*61046927SAndroid Build Coastguard Worker texture_multisample_array(const _mesa_glsl_parse_state *state)
523*61046927SAndroid Build Coastguard Worker {
524*61046927SAndroid Build Coastguard Worker    return state->is_version(150, 320) ||
525*61046927SAndroid Build Coastguard Worker           state->ARB_texture_multisample_enable ||
526*61046927SAndroid Build Coastguard Worker           state->OES_texture_storage_multisample_2d_array_enable;
527*61046927SAndroid Build Coastguard Worker }
528*61046927SAndroid Build Coastguard Worker 
529*61046927SAndroid Build Coastguard Worker static bool
texture_samples_identical(const _mesa_glsl_parse_state * state)530*61046927SAndroid Build Coastguard Worker texture_samples_identical(const _mesa_glsl_parse_state *state)
531*61046927SAndroid Build Coastguard Worker {
532*61046927SAndroid Build Coastguard Worker    return texture_multisample(state) &&
533*61046927SAndroid Build Coastguard Worker           state->EXT_shader_samples_identical_enable;
534*61046927SAndroid Build Coastguard Worker }
535*61046927SAndroid Build Coastguard Worker 
536*61046927SAndroid Build Coastguard Worker static bool
texture_samples_identical_array(const _mesa_glsl_parse_state * state)537*61046927SAndroid Build Coastguard Worker texture_samples_identical_array(const _mesa_glsl_parse_state *state)
538*61046927SAndroid Build Coastguard Worker {
539*61046927SAndroid Build Coastguard Worker    return texture_multisample_array(state) &&
540*61046927SAndroid Build Coastguard Worker           state->EXT_shader_samples_identical_enable;
541*61046927SAndroid Build Coastguard Worker }
542*61046927SAndroid Build Coastguard Worker 
543*61046927SAndroid Build Coastguard Worker static bool
derivatives_texture_cube_map_array(const _mesa_glsl_parse_state * state)544*61046927SAndroid Build Coastguard Worker derivatives_texture_cube_map_array(const _mesa_glsl_parse_state *state)
545*61046927SAndroid Build Coastguard Worker {
546*61046927SAndroid Build Coastguard Worker    return state->has_texture_cube_map_array() &&
547*61046927SAndroid Build Coastguard Worker           derivatives_only(state);
548*61046927SAndroid Build Coastguard Worker }
549*61046927SAndroid Build Coastguard Worker 
550*61046927SAndroid Build Coastguard Worker static bool
texture_cube_map_array(const _mesa_glsl_parse_state * state)551*61046927SAndroid Build Coastguard Worker texture_cube_map_array(const _mesa_glsl_parse_state *state)
552*61046927SAndroid Build Coastguard Worker {
553*61046927SAndroid Build Coastguard Worker    return state->has_texture_cube_map_array();
554*61046927SAndroid Build Coastguard Worker }
555*61046927SAndroid Build Coastguard Worker 
556*61046927SAndroid Build Coastguard Worker static bool
v130_or_gpu_shader4_and_tex_cube_map_array(const _mesa_glsl_parse_state * state)557*61046927SAndroid Build Coastguard Worker v130_or_gpu_shader4_and_tex_cube_map_array(const _mesa_glsl_parse_state *state)
558*61046927SAndroid Build Coastguard Worker {
559*61046927SAndroid Build Coastguard Worker    return texture_cube_map_array(state) &&
560*61046927SAndroid Build Coastguard Worker           v130_or_gpu_shader4(state) &&
561*61046927SAndroid Build Coastguard Worker           state->EXT_texture_shadow_lod_enable;
562*61046927SAndroid Build Coastguard Worker }
563*61046927SAndroid Build Coastguard Worker 
564*61046927SAndroid Build Coastguard Worker static bool
texture_query_levels(const _mesa_glsl_parse_state * state)565*61046927SAndroid Build Coastguard Worker texture_query_levels(const _mesa_glsl_parse_state *state)
566*61046927SAndroid Build Coastguard Worker {
567*61046927SAndroid Build Coastguard Worker    return state->is_version(430, 0) ||
568*61046927SAndroid Build Coastguard Worker           state->ARB_texture_query_levels_enable;
569*61046927SAndroid Build Coastguard Worker }
570*61046927SAndroid Build Coastguard Worker 
571*61046927SAndroid Build Coastguard Worker static bool
texture_query_lod(const _mesa_glsl_parse_state * state)572*61046927SAndroid Build Coastguard Worker texture_query_lod(const _mesa_glsl_parse_state *state)
573*61046927SAndroid Build Coastguard Worker {
574*61046927SAndroid Build Coastguard Worker    return derivatives_only(state) &&
575*61046927SAndroid Build Coastguard Worker           (state->ARB_texture_query_lod_enable ||
576*61046927SAndroid Build Coastguard Worker            state->EXT_texture_query_lod_enable);
577*61046927SAndroid Build Coastguard Worker }
578*61046927SAndroid Build Coastguard Worker 
579*61046927SAndroid Build Coastguard Worker static bool
texture_gather_cube_map_array(const _mesa_glsl_parse_state * state)580*61046927SAndroid Build Coastguard Worker texture_gather_cube_map_array(const _mesa_glsl_parse_state *state)
581*61046927SAndroid Build Coastguard Worker {
582*61046927SAndroid Build Coastguard Worker    return state->is_version(400, 320) ||
583*61046927SAndroid Build Coastguard Worker           state->ARB_texture_gather_enable ||
584*61046927SAndroid Build Coastguard Worker           state->ARB_gpu_shader5_enable ||
585*61046927SAndroid Build Coastguard Worker           state->EXT_texture_cube_map_array_enable ||
586*61046927SAndroid Build Coastguard Worker           state->OES_texture_cube_map_array_enable;
587*61046927SAndroid Build Coastguard Worker }
588*61046927SAndroid Build Coastguard Worker 
589*61046927SAndroid Build Coastguard Worker static bool
texture_texture4(const _mesa_glsl_parse_state * state)590*61046927SAndroid Build Coastguard Worker texture_texture4(const _mesa_glsl_parse_state *state)
591*61046927SAndroid Build Coastguard Worker {
592*61046927SAndroid Build Coastguard Worker    return state->AMD_texture_texture4_enable;
593*61046927SAndroid Build Coastguard Worker }
594*61046927SAndroid Build Coastguard Worker 
595*61046927SAndroid Build Coastguard Worker static bool
texture_gather_or_es31(const _mesa_glsl_parse_state * state)596*61046927SAndroid Build Coastguard Worker texture_gather_or_es31(const _mesa_glsl_parse_state *state)
597*61046927SAndroid Build Coastguard Worker {
598*61046927SAndroid Build Coastguard Worker    return state->is_version(400, 310) ||
599*61046927SAndroid Build Coastguard Worker           state->ARB_texture_gather_enable ||
600*61046927SAndroid Build Coastguard Worker           state->ARB_gpu_shader5_enable;
601*61046927SAndroid Build Coastguard Worker }
602*61046927SAndroid Build Coastguard Worker 
603*61046927SAndroid Build Coastguard Worker /* Only ARB_texture_gather but not GLSL 4.0 or ARB_gpu_shader5.
604*61046927SAndroid Build Coastguard Worker  * used for relaxation of const offset requirements.
605*61046927SAndroid Build Coastguard Worker  */
606*61046927SAndroid Build Coastguard Worker static bool
texture_gather_only_or_es31(const _mesa_glsl_parse_state * state)607*61046927SAndroid Build Coastguard Worker texture_gather_only_or_es31(const _mesa_glsl_parse_state *state)
608*61046927SAndroid Build Coastguard Worker {
609*61046927SAndroid Build Coastguard Worker    return !state->is_version(400, 320) &&
610*61046927SAndroid Build Coastguard Worker           !state->ARB_gpu_shader5_enable &&
611*61046927SAndroid Build Coastguard Worker           !state->EXT_gpu_shader5_enable &&
612*61046927SAndroid Build Coastguard Worker           !state->OES_gpu_shader5_enable &&
613*61046927SAndroid Build Coastguard Worker           (state->ARB_texture_gather_enable ||
614*61046927SAndroid Build Coastguard Worker            state->is_version(0, 310));
615*61046927SAndroid Build Coastguard Worker }
616*61046927SAndroid Build Coastguard Worker 
617*61046927SAndroid Build Coastguard Worker /* Desktop GL or OES_standard_derivatives */
618*61046927SAndroid Build Coastguard Worker static bool
derivatives(const _mesa_glsl_parse_state * state)619*61046927SAndroid Build Coastguard Worker derivatives(const _mesa_glsl_parse_state *state)
620*61046927SAndroid Build Coastguard Worker {
621*61046927SAndroid Build Coastguard Worker    return derivatives_only(state) &&
622*61046927SAndroid Build Coastguard Worker           (state->is_version(110, 300) ||
623*61046927SAndroid Build Coastguard Worker            state->OES_standard_derivatives_enable ||
624*61046927SAndroid Build Coastguard Worker            state->consts->AllowGLSLRelaxedES);
625*61046927SAndroid Build Coastguard Worker }
626*61046927SAndroid Build Coastguard Worker 
627*61046927SAndroid Build Coastguard Worker static bool
derivative_control(const _mesa_glsl_parse_state * state)628*61046927SAndroid Build Coastguard Worker derivative_control(const _mesa_glsl_parse_state *state)
629*61046927SAndroid Build Coastguard Worker {
630*61046927SAndroid Build Coastguard Worker    return derivatives_only(state) &&
631*61046927SAndroid Build Coastguard Worker           (state->is_version(450, 0) ||
632*61046927SAndroid Build Coastguard Worker            state->ARB_derivative_control_enable);
633*61046927SAndroid Build Coastguard Worker }
634*61046927SAndroid Build Coastguard Worker 
635*61046927SAndroid Build Coastguard Worker static bool
half_float_derivatives(const _mesa_glsl_parse_state * state)636*61046927SAndroid Build Coastguard Worker half_float_derivatives(const _mesa_glsl_parse_state *state)
637*61046927SAndroid Build Coastguard Worker {
638*61046927SAndroid Build Coastguard Worker    return derivatives(state) && gpu_shader_half_float(state);
639*61046927SAndroid Build Coastguard Worker }
640*61046927SAndroid Build Coastguard Worker 
641*61046927SAndroid Build Coastguard Worker static bool
half_float_derivative_control(const _mesa_glsl_parse_state * state)642*61046927SAndroid Build Coastguard Worker half_float_derivative_control(const _mesa_glsl_parse_state *state)
643*61046927SAndroid Build Coastguard Worker {
644*61046927SAndroid Build Coastguard Worker    return derivative_control(state) && gpu_shader_half_float(state);
645*61046927SAndroid Build Coastguard Worker }
646*61046927SAndroid Build Coastguard Worker 
647*61046927SAndroid Build Coastguard Worker /** True if sampler3D exists */
648*61046927SAndroid Build Coastguard Worker static bool
tex3d(const _mesa_glsl_parse_state * state)649*61046927SAndroid Build Coastguard Worker tex3d(const _mesa_glsl_parse_state *state)
650*61046927SAndroid Build Coastguard Worker {
651*61046927SAndroid Build Coastguard Worker    /* sampler3D exists in all desktop GLSL versions, GLSL ES 1.00 with the
652*61046927SAndroid Build Coastguard Worker     * OES_texture_3D extension, and in GLSL ES 3.00.
653*61046927SAndroid Build Coastguard Worker     */
654*61046927SAndroid Build Coastguard Worker    return (!state->es_shader ||
655*61046927SAndroid Build Coastguard Worker            state->OES_texture_3D_enable ||
656*61046927SAndroid Build Coastguard Worker            state->language_version >= 300) && deprecated_texture(state);
657*61046927SAndroid Build Coastguard Worker }
658*61046927SAndroid Build Coastguard Worker 
659*61046927SAndroid Build Coastguard Worker static bool
derivatives_tex3d(const _mesa_glsl_parse_state * state)660*61046927SAndroid Build Coastguard Worker derivatives_tex3d(const _mesa_glsl_parse_state *state)
661*61046927SAndroid Build Coastguard Worker {
662*61046927SAndroid Build Coastguard Worker    return (!state->es_shader || state->OES_texture_3D_enable) &&
663*61046927SAndroid Build Coastguard Worker           derivatives_only(state) && deprecated_texture(state);
664*61046927SAndroid Build Coastguard Worker }
665*61046927SAndroid Build Coastguard Worker 
666*61046927SAndroid Build Coastguard Worker static bool
tex3d_lod(const _mesa_glsl_parse_state * state)667*61046927SAndroid Build Coastguard Worker tex3d_lod(const _mesa_glsl_parse_state *state)
668*61046927SAndroid Build Coastguard Worker {
669*61046927SAndroid Build Coastguard Worker    return tex3d(state) && lod_exists_in_stage(state);
670*61046927SAndroid Build Coastguard Worker }
671*61046927SAndroid Build Coastguard Worker 
672*61046927SAndroid Build Coastguard Worker static bool
shader_atomic_counters(const _mesa_glsl_parse_state * state)673*61046927SAndroid Build Coastguard Worker shader_atomic_counters(const _mesa_glsl_parse_state *state)
674*61046927SAndroid Build Coastguard Worker {
675*61046927SAndroid Build Coastguard Worker    return state->has_atomic_counters();
676*61046927SAndroid Build Coastguard Worker }
677*61046927SAndroid Build Coastguard Worker 
678*61046927SAndroid Build Coastguard Worker static bool
shader_atomic_counter_ops(const _mesa_glsl_parse_state * state)679*61046927SAndroid Build Coastguard Worker shader_atomic_counter_ops(const _mesa_glsl_parse_state *state)
680*61046927SAndroid Build Coastguard Worker {
681*61046927SAndroid Build Coastguard Worker    return state->ARB_shader_atomic_counter_ops_enable;
682*61046927SAndroid Build Coastguard Worker }
683*61046927SAndroid Build Coastguard Worker 
684*61046927SAndroid Build Coastguard Worker static bool
shader_atomic_counter_ops_or_v460_desktop(const _mesa_glsl_parse_state * state)685*61046927SAndroid Build Coastguard Worker shader_atomic_counter_ops_or_v460_desktop(const _mesa_glsl_parse_state *state)
686*61046927SAndroid Build Coastguard Worker {
687*61046927SAndroid Build Coastguard Worker    return state->ARB_shader_atomic_counter_ops_enable || v460_desktop(state);
688*61046927SAndroid Build Coastguard Worker }
689*61046927SAndroid Build Coastguard Worker 
690*61046927SAndroid Build Coastguard Worker static bool
shader_ballot(const _mesa_glsl_parse_state * state)691*61046927SAndroid Build Coastguard Worker shader_ballot(const _mesa_glsl_parse_state *state)
692*61046927SAndroid Build Coastguard Worker {
693*61046927SAndroid Build Coastguard Worker    return state->ARB_shader_ballot_enable || state->KHR_shader_subgroup_ballot_enable;
694*61046927SAndroid Build Coastguard Worker }
695*61046927SAndroid Build Coastguard Worker 
696*61046927SAndroid Build Coastguard Worker static bool
ballot_arb(const _mesa_glsl_parse_state * state)697*61046927SAndroid Build Coastguard Worker ballot_arb(const _mesa_glsl_parse_state *state)
698*61046927SAndroid Build Coastguard Worker {
699*61046927SAndroid Build Coastguard Worker    return state->ARB_shader_ballot_enable;
700*61046927SAndroid Build Coastguard Worker }
701*61046927SAndroid Build Coastguard Worker 
702*61046927SAndroid Build Coastguard Worker static bool
ballot_khr(const _mesa_glsl_parse_state * state)703*61046927SAndroid Build Coastguard Worker ballot_khr(const _mesa_glsl_parse_state *state)
704*61046927SAndroid Build Coastguard Worker {
705*61046927SAndroid Build Coastguard Worker    return state->KHR_shader_subgroup_ballot_enable;
706*61046927SAndroid Build Coastguard Worker }
707*61046927SAndroid Build Coastguard Worker 
708*61046927SAndroid Build Coastguard Worker static bool
supports_arb_fragment_shader_interlock(const _mesa_glsl_parse_state * state)709*61046927SAndroid Build Coastguard Worker supports_arb_fragment_shader_interlock(const _mesa_glsl_parse_state *state)
710*61046927SAndroid Build Coastguard Worker {
711*61046927SAndroid Build Coastguard Worker    return state->ARB_fragment_shader_interlock_enable;
712*61046927SAndroid Build Coastguard Worker }
713*61046927SAndroid Build Coastguard Worker 
714*61046927SAndroid Build Coastguard Worker static bool
supports_nv_fragment_shader_interlock(const _mesa_glsl_parse_state * state)715*61046927SAndroid Build Coastguard Worker supports_nv_fragment_shader_interlock(const _mesa_glsl_parse_state *state)
716*61046927SAndroid Build Coastguard Worker {
717*61046927SAndroid Build Coastguard Worker    return state->NV_fragment_shader_interlock_enable;
718*61046927SAndroid Build Coastguard Worker }
719*61046927SAndroid Build Coastguard Worker 
720*61046927SAndroid Build Coastguard Worker static bool
shader_clock(const _mesa_glsl_parse_state * state)721*61046927SAndroid Build Coastguard Worker shader_clock(const _mesa_glsl_parse_state *state)
722*61046927SAndroid Build Coastguard Worker {
723*61046927SAndroid Build Coastguard Worker    return state->ARB_shader_clock_enable;
724*61046927SAndroid Build Coastguard Worker }
725*61046927SAndroid Build Coastguard Worker 
726*61046927SAndroid Build Coastguard Worker static bool
shader_clock_int64(const _mesa_glsl_parse_state * state)727*61046927SAndroid Build Coastguard Worker shader_clock_int64(const _mesa_glsl_parse_state *state)
728*61046927SAndroid Build Coastguard Worker {
729*61046927SAndroid Build Coastguard Worker    return state->ARB_shader_clock_enable &&
730*61046927SAndroid Build Coastguard Worker           (state->ARB_gpu_shader_int64_enable ||
731*61046927SAndroid Build Coastguard Worker            state->AMD_gpu_shader_int64_enable);
732*61046927SAndroid Build Coastguard Worker }
733*61046927SAndroid Build Coastguard Worker 
734*61046927SAndroid Build Coastguard Worker static bool
shader_storage_buffer_object(const _mesa_glsl_parse_state * state)735*61046927SAndroid Build Coastguard Worker shader_storage_buffer_object(const _mesa_glsl_parse_state *state)
736*61046927SAndroid Build Coastguard Worker {
737*61046927SAndroid Build Coastguard Worker    return state->has_shader_storage_buffer_objects();
738*61046927SAndroid Build Coastguard Worker }
739*61046927SAndroid Build Coastguard Worker 
740*61046927SAndroid Build Coastguard Worker static bool
shader_trinary_minmax(const _mesa_glsl_parse_state * state)741*61046927SAndroid Build Coastguard Worker shader_trinary_minmax(const _mesa_glsl_parse_state *state)
742*61046927SAndroid Build Coastguard Worker {
743*61046927SAndroid Build Coastguard Worker    return state->AMD_shader_trinary_minmax_enable;
744*61046927SAndroid Build Coastguard Worker }
745*61046927SAndroid Build Coastguard Worker 
746*61046927SAndroid Build Coastguard Worker static bool
shader_trinary_minmax_half_float(const _mesa_glsl_parse_state * state)747*61046927SAndroid Build Coastguard Worker shader_trinary_minmax_half_float(const _mesa_glsl_parse_state *state)
748*61046927SAndroid Build Coastguard Worker {
749*61046927SAndroid Build Coastguard Worker    return shader_trinary_minmax(state) && gpu_shader_half_float(state);
750*61046927SAndroid Build Coastguard Worker }
751*61046927SAndroid Build Coastguard Worker 
752*61046927SAndroid Build Coastguard Worker static bool
shader_image_load_store(const _mesa_glsl_parse_state * state)753*61046927SAndroid Build Coastguard Worker shader_image_load_store(const _mesa_glsl_parse_state *state)
754*61046927SAndroid Build Coastguard Worker {
755*61046927SAndroid Build Coastguard Worker    return (state->is_version(420, 310) ||
756*61046927SAndroid Build Coastguard Worker            state->ARB_shader_image_load_store_enable ||
757*61046927SAndroid Build Coastguard Worker            state->EXT_shader_image_load_store_enable);
758*61046927SAndroid Build Coastguard Worker }
759*61046927SAndroid Build Coastguard Worker 
760*61046927SAndroid Build Coastguard Worker static bool
shader_image_load_store_ext(const _mesa_glsl_parse_state * state)761*61046927SAndroid Build Coastguard Worker shader_image_load_store_ext(const _mesa_glsl_parse_state *state)
762*61046927SAndroid Build Coastguard Worker {
763*61046927SAndroid Build Coastguard Worker    return state->EXT_shader_image_load_store_enable;
764*61046927SAndroid Build Coastguard Worker }
765*61046927SAndroid Build Coastguard Worker 
766*61046927SAndroid Build Coastguard Worker static bool
shader_image_atomic(const _mesa_glsl_parse_state * state)767*61046927SAndroid Build Coastguard Worker shader_image_atomic(const _mesa_glsl_parse_state *state)
768*61046927SAndroid Build Coastguard Worker {
769*61046927SAndroid Build Coastguard Worker    return (state->is_version(420, 320) ||
770*61046927SAndroid Build Coastguard Worker            state->ARB_shader_image_load_store_enable ||
771*61046927SAndroid Build Coastguard Worker            state->EXT_shader_image_load_store_enable ||
772*61046927SAndroid Build Coastguard Worker            state->OES_shader_image_atomic_enable);
773*61046927SAndroid Build Coastguard Worker }
774*61046927SAndroid Build Coastguard Worker 
775*61046927SAndroid Build Coastguard Worker static bool
shader_image_atomic_exchange_float(const _mesa_glsl_parse_state * state)776*61046927SAndroid Build Coastguard Worker shader_image_atomic_exchange_float(const _mesa_glsl_parse_state *state)
777*61046927SAndroid Build Coastguard Worker {
778*61046927SAndroid Build Coastguard Worker    return (state->is_version(450, 320) ||
779*61046927SAndroid Build Coastguard Worker            state->ARB_ES3_1_compatibility_enable ||
780*61046927SAndroid Build Coastguard Worker            state->OES_shader_image_atomic_enable ||
781*61046927SAndroid Build Coastguard Worker            state->NV_shader_atomic_float_enable);
782*61046927SAndroid Build Coastguard Worker }
783*61046927SAndroid Build Coastguard Worker 
784*61046927SAndroid Build Coastguard Worker static bool
shader_image_atomic_add_float(const _mesa_glsl_parse_state * state)785*61046927SAndroid Build Coastguard Worker shader_image_atomic_add_float(const _mesa_glsl_parse_state *state)
786*61046927SAndroid Build Coastguard Worker {
787*61046927SAndroid Build Coastguard Worker    return state->NV_shader_atomic_float_enable;
788*61046927SAndroid Build Coastguard Worker }
789*61046927SAndroid Build Coastguard Worker 
790*61046927SAndroid Build Coastguard Worker static bool
shader_image_size(const _mesa_glsl_parse_state * state)791*61046927SAndroid Build Coastguard Worker shader_image_size(const _mesa_glsl_parse_state *state)
792*61046927SAndroid Build Coastguard Worker {
793*61046927SAndroid Build Coastguard Worker    return state->is_version(430, 310) ||
794*61046927SAndroid Build Coastguard Worker            state->ARB_shader_image_size_enable;
795*61046927SAndroid Build Coastguard Worker }
796*61046927SAndroid Build Coastguard Worker 
797*61046927SAndroid Build Coastguard Worker static bool
shader_samples(const _mesa_glsl_parse_state * state)798*61046927SAndroid Build Coastguard Worker shader_samples(const _mesa_glsl_parse_state *state)
799*61046927SAndroid Build Coastguard Worker {
800*61046927SAndroid Build Coastguard Worker    return state->is_version(450, 0) ||
801*61046927SAndroid Build Coastguard Worker           state->ARB_shader_texture_image_samples_enable;
802*61046927SAndroid Build Coastguard Worker }
803*61046927SAndroid Build Coastguard Worker 
804*61046927SAndroid Build Coastguard Worker static bool
gs_streams(const _mesa_glsl_parse_state * state)805*61046927SAndroid Build Coastguard Worker gs_streams(const _mesa_glsl_parse_state *state)
806*61046927SAndroid Build Coastguard Worker {
807*61046927SAndroid Build Coastguard Worker    return gpu_shader5(state) && gs_only(state);
808*61046927SAndroid Build Coastguard Worker }
809*61046927SAndroid Build Coastguard Worker 
810*61046927SAndroid Build Coastguard Worker static bool
fp64(const _mesa_glsl_parse_state * state)811*61046927SAndroid Build Coastguard Worker fp64(const _mesa_glsl_parse_state *state)
812*61046927SAndroid Build Coastguard Worker {
813*61046927SAndroid Build Coastguard Worker    return state->has_double();
814*61046927SAndroid Build Coastguard Worker }
815*61046927SAndroid Build Coastguard Worker 
816*61046927SAndroid Build Coastguard Worker static bool
int64_avail(const _mesa_glsl_parse_state * state)817*61046927SAndroid Build Coastguard Worker int64_avail(const _mesa_glsl_parse_state *state)
818*61046927SAndroid Build Coastguard Worker {
819*61046927SAndroid Build Coastguard Worker    return state->has_int64();
820*61046927SAndroid Build Coastguard Worker }
821*61046927SAndroid Build Coastguard Worker 
822*61046927SAndroid Build Coastguard Worker static bool
int64_fp64(const _mesa_glsl_parse_state * state)823*61046927SAndroid Build Coastguard Worker int64_fp64(const _mesa_glsl_parse_state *state)
824*61046927SAndroid Build Coastguard Worker {
825*61046927SAndroid Build Coastguard Worker    return state->has_int64() && state->has_double();
826*61046927SAndroid Build Coastguard Worker }
827*61046927SAndroid Build Coastguard Worker 
828*61046927SAndroid Build Coastguard Worker static bool
shader_ballot_and_fp64(const _mesa_glsl_parse_state * state)829*61046927SAndroid Build Coastguard Worker shader_ballot_and_fp64(const _mesa_glsl_parse_state *state)
830*61046927SAndroid Build Coastguard Worker {
831*61046927SAndroid Build Coastguard Worker    return shader_ballot(state) && fp64(state);
832*61046927SAndroid Build Coastguard Worker }
833*61046927SAndroid Build Coastguard Worker 
834*61046927SAndroid Build Coastguard Worker static bool
ballot_khr_and_fp64(const _mesa_glsl_parse_state * state)835*61046927SAndroid Build Coastguard Worker ballot_khr_and_fp64(const _mesa_glsl_parse_state *state)
836*61046927SAndroid Build Coastguard Worker {
837*61046927SAndroid Build Coastguard Worker    return ballot_khr(state) && fp64(state);
838*61046927SAndroid Build Coastguard Worker }
839*61046927SAndroid Build Coastguard Worker 
840*61046927SAndroid Build Coastguard Worker static bool
compute_shader(const _mesa_glsl_parse_state * state)841*61046927SAndroid Build Coastguard Worker compute_shader(const _mesa_glsl_parse_state *state)
842*61046927SAndroid Build Coastguard Worker {
843*61046927SAndroid Build Coastguard Worker    return state->stage == MESA_SHADER_COMPUTE;
844*61046927SAndroid Build Coastguard Worker }
845*61046927SAndroid Build Coastguard Worker 
846*61046927SAndroid Build Coastguard Worker static bool
compute_shader_supported(const _mesa_glsl_parse_state * state)847*61046927SAndroid Build Coastguard Worker compute_shader_supported(const _mesa_glsl_parse_state *state)
848*61046927SAndroid Build Coastguard Worker {
849*61046927SAndroid Build Coastguard Worker    return state->has_compute_shader();
850*61046927SAndroid Build Coastguard Worker }
851*61046927SAndroid Build Coastguard Worker 
852*61046927SAndroid Build Coastguard Worker static bool
buffer_atomics_supported(const _mesa_glsl_parse_state * state)853*61046927SAndroid Build Coastguard Worker buffer_atomics_supported(const _mesa_glsl_parse_state *state)
854*61046927SAndroid Build Coastguard Worker {
855*61046927SAndroid Build Coastguard Worker    return compute_shader(state) || shader_storage_buffer_object(state);
856*61046927SAndroid Build Coastguard Worker }
857*61046927SAndroid Build Coastguard Worker 
858*61046927SAndroid Build Coastguard Worker static bool
buffer_int64_atomics_supported(const _mesa_glsl_parse_state * state)859*61046927SAndroid Build Coastguard Worker buffer_int64_atomics_supported(const _mesa_glsl_parse_state *state)
860*61046927SAndroid Build Coastguard Worker {
861*61046927SAndroid Build Coastguard Worker    return state->NV_shader_atomic_int64_enable &&
862*61046927SAndroid Build Coastguard Worker       buffer_atomics_supported(state);
863*61046927SAndroid Build Coastguard Worker }
864*61046927SAndroid Build Coastguard Worker 
865*61046927SAndroid Build Coastguard Worker static bool
barrier_supported(const _mesa_glsl_parse_state * state)866*61046927SAndroid Build Coastguard Worker barrier_supported(const _mesa_glsl_parse_state *state)
867*61046927SAndroid Build Coastguard Worker {
868*61046927SAndroid Build Coastguard Worker    return compute_shader(state) ||
869*61046927SAndroid Build Coastguard Worker           state->stage == MESA_SHADER_TESS_CTRL;
870*61046927SAndroid Build Coastguard Worker }
871*61046927SAndroid Build Coastguard Worker 
872*61046927SAndroid Build Coastguard Worker static bool
vote(const _mesa_glsl_parse_state * state)873*61046927SAndroid Build Coastguard Worker vote(const _mesa_glsl_parse_state *state)
874*61046927SAndroid Build Coastguard Worker {
875*61046927SAndroid Build Coastguard Worker    return state->ARB_shader_group_vote_enable;
876*61046927SAndroid Build Coastguard Worker }
877*61046927SAndroid Build Coastguard Worker 
878*61046927SAndroid Build Coastguard Worker static bool
vote_ext(const _mesa_glsl_parse_state * state)879*61046927SAndroid Build Coastguard Worker vote_ext(const _mesa_glsl_parse_state *state)
880*61046927SAndroid Build Coastguard Worker {
881*61046927SAndroid Build Coastguard Worker    return state->EXT_shader_group_vote_enable;
882*61046927SAndroid Build Coastguard Worker }
883*61046927SAndroid Build Coastguard Worker 
884*61046927SAndroid Build Coastguard Worker static bool
vote_khr(const _mesa_glsl_parse_state * state)885*61046927SAndroid Build Coastguard Worker vote_khr(const _mesa_glsl_parse_state *state)
886*61046927SAndroid Build Coastguard Worker {
887*61046927SAndroid Build Coastguard Worker    return state->KHR_shader_subgroup_vote_enable;
888*61046927SAndroid Build Coastguard Worker }
889*61046927SAndroid Build Coastguard Worker 
890*61046927SAndroid Build Coastguard Worker static bool
vote_khr_and_fp64(const _mesa_glsl_parse_state * state)891*61046927SAndroid Build Coastguard Worker vote_khr_and_fp64(const _mesa_glsl_parse_state *state)
892*61046927SAndroid Build Coastguard Worker {
893*61046927SAndroid Build Coastguard Worker    return vote_khr(state) && fp64(state);
894*61046927SAndroid Build Coastguard Worker }
895*61046927SAndroid Build Coastguard Worker 
896*61046927SAndroid Build Coastguard Worker static bool
vote_or_v460_desktop(const _mesa_glsl_parse_state * state)897*61046927SAndroid Build Coastguard Worker vote_or_v460_desktop(const _mesa_glsl_parse_state *state)
898*61046927SAndroid Build Coastguard Worker {
899*61046927SAndroid Build Coastguard Worker    return state->KHR_shader_subgroup_vote_enable ||
900*61046927SAndroid Build Coastguard Worker           state->EXT_shader_group_vote_enable ||
901*61046927SAndroid Build Coastguard Worker           state->ARB_shader_group_vote_enable ||
902*61046927SAndroid Build Coastguard Worker           v460_desktop(state);
903*61046927SAndroid Build Coastguard Worker }
904*61046927SAndroid Build Coastguard Worker 
905*61046927SAndroid Build Coastguard Worker static bool
vote_or_v460_desktop_and_fp64(const _mesa_glsl_parse_state * state)906*61046927SAndroid Build Coastguard Worker vote_or_v460_desktop_and_fp64(const _mesa_glsl_parse_state *state)
907*61046927SAndroid Build Coastguard Worker {
908*61046927SAndroid Build Coastguard Worker    return vote_or_v460_desktop(state) && fp64(state);
909*61046927SAndroid Build Coastguard Worker }
910*61046927SAndroid Build Coastguard Worker 
911*61046927SAndroid Build Coastguard Worker static bool
NV_shader_atomic_float_supported(const _mesa_glsl_parse_state * state)912*61046927SAndroid Build Coastguard Worker NV_shader_atomic_float_supported(const _mesa_glsl_parse_state *state)
913*61046927SAndroid Build Coastguard Worker {
914*61046927SAndroid Build Coastguard Worker    return state->extensions->NV_shader_atomic_float;
915*61046927SAndroid Build Coastguard Worker }
916*61046927SAndroid Build Coastguard Worker 
917*61046927SAndroid Build Coastguard Worker static bool
shader_atomic_float_add(const _mesa_glsl_parse_state * state)918*61046927SAndroid Build Coastguard Worker shader_atomic_float_add(const _mesa_glsl_parse_state *state)
919*61046927SAndroid Build Coastguard Worker {
920*61046927SAndroid Build Coastguard Worker    return state->NV_shader_atomic_float_enable;
921*61046927SAndroid Build Coastguard Worker }
922*61046927SAndroid Build Coastguard Worker 
923*61046927SAndroid Build Coastguard Worker static bool
shader_atomic_float_exchange(const _mesa_glsl_parse_state * state)924*61046927SAndroid Build Coastguard Worker shader_atomic_float_exchange(const _mesa_glsl_parse_state *state)
925*61046927SAndroid Build Coastguard Worker {
926*61046927SAndroid Build Coastguard Worker    return state->NV_shader_atomic_float_enable ||
927*61046927SAndroid Build Coastguard Worker           state->INTEL_shader_atomic_float_minmax_enable;
928*61046927SAndroid Build Coastguard Worker }
929*61046927SAndroid Build Coastguard Worker 
930*61046927SAndroid Build Coastguard Worker static bool
INTEL_shader_atomic_float_minmax_supported(const _mesa_glsl_parse_state * state)931*61046927SAndroid Build Coastguard Worker INTEL_shader_atomic_float_minmax_supported(const _mesa_glsl_parse_state *state)
932*61046927SAndroid Build Coastguard Worker {
933*61046927SAndroid Build Coastguard Worker    return state->extensions->INTEL_shader_atomic_float_minmax;
934*61046927SAndroid Build Coastguard Worker }
935*61046927SAndroid Build Coastguard Worker 
936*61046927SAndroid Build Coastguard Worker static bool
shader_atomic_float_minmax(const _mesa_glsl_parse_state * state)937*61046927SAndroid Build Coastguard Worker shader_atomic_float_minmax(const _mesa_glsl_parse_state *state)
938*61046927SAndroid Build Coastguard Worker {
939*61046927SAndroid Build Coastguard Worker    return state->INTEL_shader_atomic_float_minmax_enable;
940*61046927SAndroid Build Coastguard Worker }
941*61046927SAndroid Build Coastguard Worker 
942*61046927SAndroid Build Coastguard Worker static bool
demote_to_helper_invocation(const _mesa_glsl_parse_state * state)943*61046927SAndroid Build Coastguard Worker demote_to_helper_invocation(const _mesa_glsl_parse_state *state)
944*61046927SAndroid Build Coastguard Worker {
945*61046927SAndroid Build Coastguard Worker    return state->EXT_demote_to_helper_invocation_enable;
946*61046927SAndroid Build Coastguard Worker }
947*61046927SAndroid Build Coastguard Worker 
948*61046927SAndroid Build Coastguard Worker static bool
shader_integer_functions2(const _mesa_glsl_parse_state * state)949*61046927SAndroid Build Coastguard Worker shader_integer_functions2(const _mesa_glsl_parse_state *state)
950*61046927SAndroid Build Coastguard Worker {
951*61046927SAndroid Build Coastguard Worker    return state->INTEL_shader_integer_functions2_enable;
952*61046927SAndroid Build Coastguard Worker }
953*61046927SAndroid Build Coastguard Worker 
954*61046927SAndroid Build Coastguard Worker static bool
shader_integer_functions2_int64(const _mesa_glsl_parse_state * state)955*61046927SAndroid Build Coastguard Worker shader_integer_functions2_int64(const _mesa_glsl_parse_state *state)
956*61046927SAndroid Build Coastguard Worker {
957*61046927SAndroid Build Coastguard Worker    return state->INTEL_shader_integer_functions2_enable && state->has_int64();
958*61046927SAndroid Build Coastguard Worker }
959*61046927SAndroid Build Coastguard Worker 
960*61046927SAndroid Build Coastguard Worker static bool
sparse_enabled(const _mesa_glsl_parse_state * state)961*61046927SAndroid Build Coastguard Worker sparse_enabled(const _mesa_glsl_parse_state *state)
962*61046927SAndroid Build Coastguard Worker {
963*61046927SAndroid Build Coastguard Worker    return state->ARB_sparse_texture2_enable;
964*61046927SAndroid Build Coastguard Worker }
965*61046927SAndroid Build Coastguard Worker 
966*61046927SAndroid Build Coastguard Worker static bool
v130_desktop_and_sparse(const _mesa_glsl_parse_state * state)967*61046927SAndroid Build Coastguard Worker v130_desktop_and_sparse(const _mesa_glsl_parse_state *state)
968*61046927SAndroid Build Coastguard Worker {
969*61046927SAndroid Build Coastguard Worker    return v130_desktop(state) && state->ARB_sparse_texture2_enable;
970*61046927SAndroid Build Coastguard Worker }
971*61046927SAndroid Build Coastguard Worker 
972*61046927SAndroid Build Coastguard Worker static bool
texture_cube_map_array_and_sparse(const _mesa_glsl_parse_state * state)973*61046927SAndroid Build Coastguard Worker texture_cube_map_array_and_sparse(const _mesa_glsl_parse_state *state)
974*61046927SAndroid Build Coastguard Worker {
975*61046927SAndroid Build Coastguard Worker    return texture_cube_map_array(state) && state->ARB_sparse_texture2_enable;
976*61046927SAndroid Build Coastguard Worker }
977*61046927SAndroid Build Coastguard Worker 
978*61046927SAndroid Build Coastguard Worker static bool
v130_derivatives_only_and_sparse(const _mesa_glsl_parse_state * state)979*61046927SAndroid Build Coastguard Worker v130_derivatives_only_and_sparse(const _mesa_glsl_parse_state *state)
980*61046927SAndroid Build Coastguard Worker {
981*61046927SAndroid Build Coastguard Worker    return v130_derivatives_only(state) && state->ARB_sparse_texture2_enable;
982*61046927SAndroid Build Coastguard Worker }
983*61046927SAndroid Build Coastguard Worker 
984*61046927SAndroid Build Coastguard Worker static bool
derivatives_texture_cube_map_array_and_sparse(const _mesa_glsl_parse_state * state)985*61046927SAndroid Build Coastguard Worker derivatives_texture_cube_map_array_and_sparse(const _mesa_glsl_parse_state *state)
986*61046927SAndroid Build Coastguard Worker {
987*61046927SAndroid Build Coastguard Worker    return derivatives_texture_cube_map_array(state) && state->ARB_sparse_texture2_enable;
988*61046927SAndroid Build Coastguard Worker }
989*61046927SAndroid Build Coastguard Worker 
990*61046927SAndroid Build Coastguard Worker static bool
texture_gather_and_sparse(const _mesa_glsl_parse_state * state)991*61046927SAndroid Build Coastguard Worker texture_gather_and_sparse(const _mesa_glsl_parse_state *state)
992*61046927SAndroid Build Coastguard Worker {
993*61046927SAndroid Build Coastguard Worker    return (gpu_shader5(state) || state->ARB_texture_gather_enable) &&
994*61046927SAndroid Build Coastguard Worker       state->ARB_sparse_texture2_enable;
995*61046927SAndroid Build Coastguard Worker }
996*61046927SAndroid Build Coastguard Worker 
997*61046927SAndroid Build Coastguard Worker static bool
gpu_shader5_and_sparse(const _mesa_glsl_parse_state * state)998*61046927SAndroid Build Coastguard Worker gpu_shader5_and_sparse(const _mesa_glsl_parse_state *state)
999*61046927SAndroid Build Coastguard Worker {
1000*61046927SAndroid Build Coastguard Worker    return gpu_shader5(state) && state->ARB_sparse_texture2_enable;
1001*61046927SAndroid Build Coastguard Worker }
1002*61046927SAndroid Build Coastguard Worker 
1003*61046927SAndroid Build Coastguard Worker static bool
texture_multisample_and_sparse(const _mesa_glsl_parse_state * state)1004*61046927SAndroid Build Coastguard Worker texture_multisample_and_sparse(const _mesa_glsl_parse_state *state)
1005*61046927SAndroid Build Coastguard Worker {
1006*61046927SAndroid Build Coastguard Worker    return texture_multisample(state) &&
1007*61046927SAndroid Build Coastguard Worker       state->ARB_sparse_texture2_enable;
1008*61046927SAndroid Build Coastguard Worker }
1009*61046927SAndroid Build Coastguard Worker 
1010*61046927SAndroid Build Coastguard Worker static bool
texture_multisample_array_and_sparse(const _mesa_glsl_parse_state * state)1011*61046927SAndroid Build Coastguard Worker texture_multisample_array_and_sparse(const _mesa_glsl_parse_state *state)
1012*61046927SAndroid Build Coastguard Worker {
1013*61046927SAndroid Build Coastguard Worker    return texture_multisample_array(state) &&
1014*61046927SAndroid Build Coastguard Worker       state->ARB_sparse_texture2_enable;
1015*61046927SAndroid Build Coastguard Worker }
1016*61046927SAndroid Build Coastguard Worker 
1017*61046927SAndroid Build Coastguard Worker static bool
shader_image_load_store_and_sparse(const _mesa_glsl_parse_state * state)1018*61046927SAndroid Build Coastguard Worker shader_image_load_store_and_sparse(const _mesa_glsl_parse_state *state)
1019*61046927SAndroid Build Coastguard Worker {
1020*61046927SAndroid Build Coastguard Worker    return shader_image_load_store(state) &&
1021*61046927SAndroid Build Coastguard Worker       state->ARB_sparse_texture2_enable;
1022*61046927SAndroid Build Coastguard Worker }
1023*61046927SAndroid Build Coastguard Worker 
1024*61046927SAndroid Build Coastguard Worker static bool
v130_desktop_and_clamp(const _mesa_glsl_parse_state * state)1025*61046927SAndroid Build Coastguard Worker v130_desktop_and_clamp(const _mesa_glsl_parse_state *state)
1026*61046927SAndroid Build Coastguard Worker {
1027*61046927SAndroid Build Coastguard Worker    return v130_desktop(state) && state->ARB_sparse_texture_clamp_enable;
1028*61046927SAndroid Build Coastguard Worker }
1029*61046927SAndroid Build Coastguard Worker 
1030*61046927SAndroid Build Coastguard Worker static bool
texture_cube_map_array_and_clamp(const _mesa_glsl_parse_state * state)1031*61046927SAndroid Build Coastguard Worker texture_cube_map_array_and_clamp(const _mesa_glsl_parse_state *state)
1032*61046927SAndroid Build Coastguard Worker {
1033*61046927SAndroid Build Coastguard Worker    return texture_cube_map_array(state) && state->ARB_sparse_texture_clamp_enable;
1034*61046927SAndroid Build Coastguard Worker }
1035*61046927SAndroid Build Coastguard Worker 
1036*61046927SAndroid Build Coastguard Worker static bool
v130_derivatives_only_and_clamp(const _mesa_glsl_parse_state * state)1037*61046927SAndroid Build Coastguard Worker v130_derivatives_only_and_clamp(const _mesa_glsl_parse_state *state)
1038*61046927SAndroid Build Coastguard Worker {
1039*61046927SAndroid Build Coastguard Worker    return v130_derivatives_only(state) && state->ARB_sparse_texture_clamp_enable;
1040*61046927SAndroid Build Coastguard Worker }
1041*61046927SAndroid Build Coastguard Worker 
1042*61046927SAndroid Build Coastguard Worker static bool
derivatives_texture_cube_map_array_and_clamp(const _mesa_glsl_parse_state * state)1043*61046927SAndroid Build Coastguard Worker derivatives_texture_cube_map_array_and_clamp(const _mesa_glsl_parse_state *state)
1044*61046927SAndroid Build Coastguard Worker {
1045*61046927SAndroid Build Coastguard Worker    return derivatives_texture_cube_map_array(state) && state->ARB_sparse_texture_clamp_enable;
1046*61046927SAndroid Build Coastguard Worker }
1047*61046927SAndroid Build Coastguard Worker 
1048*61046927SAndroid Build Coastguard Worker static bool
subgroup_basic(const _mesa_glsl_parse_state * state)1049*61046927SAndroid Build Coastguard Worker subgroup_basic(const _mesa_glsl_parse_state *state)
1050*61046927SAndroid Build Coastguard Worker {
1051*61046927SAndroid Build Coastguard Worker    return state->KHR_shader_subgroup_basic_enable;
1052*61046927SAndroid Build Coastguard Worker }
1053*61046927SAndroid Build Coastguard Worker 
1054*61046927SAndroid Build Coastguard Worker static bool
compute_shader_and_subgroup_basic(const _mesa_glsl_parse_state * state)1055*61046927SAndroid Build Coastguard Worker compute_shader_and_subgroup_basic(const _mesa_glsl_parse_state *state)
1056*61046927SAndroid Build Coastguard Worker {
1057*61046927SAndroid Build Coastguard Worker    return state->stage == MESA_SHADER_COMPUTE && state->KHR_shader_subgroup_basic_enable;
1058*61046927SAndroid Build Coastguard Worker }
1059*61046927SAndroid Build Coastguard Worker 
1060*61046927SAndroid Build Coastguard Worker static bool
subgroup_shuffle(const _mesa_glsl_parse_state * state)1061*61046927SAndroid Build Coastguard Worker subgroup_shuffle(const _mesa_glsl_parse_state *state)
1062*61046927SAndroid Build Coastguard Worker {
1063*61046927SAndroid Build Coastguard Worker    return state->KHR_shader_subgroup_shuffle_enable;
1064*61046927SAndroid Build Coastguard Worker }
1065*61046927SAndroid Build Coastguard Worker 
1066*61046927SAndroid Build Coastguard Worker static bool
subgroup_shuffle_and_fp64(const _mesa_glsl_parse_state * state)1067*61046927SAndroid Build Coastguard Worker subgroup_shuffle_and_fp64(const _mesa_glsl_parse_state *state)
1068*61046927SAndroid Build Coastguard Worker {
1069*61046927SAndroid Build Coastguard Worker    return subgroup_shuffle(state) && fp64(state);
1070*61046927SAndroid Build Coastguard Worker }
1071*61046927SAndroid Build Coastguard Worker 
1072*61046927SAndroid Build Coastguard Worker static bool
subgroup_shuffle_relative(const _mesa_glsl_parse_state * state)1073*61046927SAndroid Build Coastguard Worker subgroup_shuffle_relative(const _mesa_glsl_parse_state *state)
1074*61046927SAndroid Build Coastguard Worker {
1075*61046927SAndroid Build Coastguard Worker    return state->KHR_shader_subgroup_shuffle_relative_enable;
1076*61046927SAndroid Build Coastguard Worker }
1077*61046927SAndroid Build Coastguard Worker 
1078*61046927SAndroid Build Coastguard Worker static bool
subgroup_shuffle_relative_and_fp64(const _mesa_glsl_parse_state * state)1079*61046927SAndroid Build Coastguard Worker subgroup_shuffle_relative_and_fp64(const _mesa_glsl_parse_state *state)
1080*61046927SAndroid Build Coastguard Worker {
1081*61046927SAndroid Build Coastguard Worker    return subgroup_shuffle_relative(state) && fp64(state);
1082*61046927SAndroid Build Coastguard Worker }
1083*61046927SAndroid Build Coastguard Worker 
1084*61046927SAndroid Build Coastguard Worker static bool
subgroup_arithmetic(const _mesa_glsl_parse_state * state)1085*61046927SAndroid Build Coastguard Worker subgroup_arithmetic(const _mesa_glsl_parse_state *state)
1086*61046927SAndroid Build Coastguard Worker {
1087*61046927SAndroid Build Coastguard Worker    return state->KHR_shader_subgroup_arithmetic_enable;
1088*61046927SAndroid Build Coastguard Worker }
1089*61046927SAndroid Build Coastguard Worker 
1090*61046927SAndroid Build Coastguard Worker static bool
subgroup_arithmetic_and_fp64(const _mesa_glsl_parse_state * state)1091*61046927SAndroid Build Coastguard Worker subgroup_arithmetic_and_fp64(const _mesa_glsl_parse_state *state)
1092*61046927SAndroid Build Coastguard Worker {
1093*61046927SAndroid Build Coastguard Worker    return subgroup_arithmetic(state) && fp64(state);
1094*61046927SAndroid Build Coastguard Worker }
1095*61046927SAndroid Build Coastguard Worker 
1096*61046927SAndroid Build Coastguard Worker static bool
subgroup_clustered(const _mesa_glsl_parse_state * state)1097*61046927SAndroid Build Coastguard Worker subgroup_clustered(const _mesa_glsl_parse_state *state)
1098*61046927SAndroid Build Coastguard Worker {
1099*61046927SAndroid Build Coastguard Worker    return state->KHR_shader_subgroup_clustered_enable;
1100*61046927SAndroid Build Coastguard Worker }
1101*61046927SAndroid Build Coastguard Worker 
1102*61046927SAndroid Build Coastguard Worker static bool
subgroup_clustered_and_fp64(const _mesa_glsl_parse_state * state)1103*61046927SAndroid Build Coastguard Worker subgroup_clustered_and_fp64(const _mesa_glsl_parse_state *state)
1104*61046927SAndroid Build Coastguard Worker {
1105*61046927SAndroid Build Coastguard Worker    return subgroup_clustered(state) && fp64(state);
1106*61046927SAndroid Build Coastguard Worker }
1107*61046927SAndroid Build Coastguard Worker 
1108*61046927SAndroid Build Coastguard Worker static bool
subgroup_quad(const _mesa_glsl_parse_state * state)1109*61046927SAndroid Build Coastguard Worker subgroup_quad(const _mesa_glsl_parse_state *state)
1110*61046927SAndroid Build Coastguard Worker {
1111*61046927SAndroid Build Coastguard Worker    return state->KHR_shader_subgroup_quad_enable;
1112*61046927SAndroid Build Coastguard Worker }
1113*61046927SAndroid Build Coastguard Worker 
1114*61046927SAndroid Build Coastguard Worker static bool
subgroup_quad_and_fp64(const _mesa_glsl_parse_state * state)1115*61046927SAndroid Build Coastguard Worker subgroup_quad_and_fp64(const _mesa_glsl_parse_state *state)
1116*61046927SAndroid Build Coastguard Worker {
1117*61046927SAndroid Build Coastguard Worker    return subgroup_quad(state) && fp64(state);
1118*61046927SAndroid Build Coastguard Worker }
1119*61046927SAndroid Build Coastguard Worker 
1120*61046927SAndroid Build Coastguard Worker /** @} */
1121*61046927SAndroid Build Coastguard Worker 
1122*61046927SAndroid Build Coastguard Worker /******************************************************************************/
1123*61046927SAndroid Build Coastguard Worker 
1124*61046927SAndroid Build Coastguard Worker namespace {
1125*61046927SAndroid Build Coastguard Worker 
1126*61046927SAndroid Build Coastguard Worker /**
1127*61046927SAndroid Build Coastguard Worker  * builtin_builder: A singleton object representing the core of the built-in
1128*61046927SAndroid Build Coastguard Worker  * function module.
1129*61046927SAndroid Build Coastguard Worker  *
1130*61046927SAndroid Build Coastguard Worker  * It generates IR for every built-in function signature, and organizes them
1131*61046927SAndroid Build Coastguard Worker  * into functions.
1132*61046927SAndroid Build Coastguard Worker  */
1133*61046927SAndroid Build Coastguard Worker class builtin_builder {
1134*61046927SAndroid Build Coastguard Worker public:
1135*61046927SAndroid Build Coastguard Worker    builtin_builder();
1136*61046927SAndroid Build Coastguard Worker    builtin_builder(const builtin_builder &) = delete;
1137*61046927SAndroid Build Coastguard Worker    ~builtin_builder();
1138*61046927SAndroid Build Coastguard Worker    builtin_builder & operator=(const builtin_builder &) = delete;
1139*61046927SAndroid Build Coastguard Worker 
1140*61046927SAndroid Build Coastguard Worker    void initialize();
1141*61046927SAndroid Build Coastguard Worker    void release();
1142*61046927SAndroid Build Coastguard Worker    ir_function_signature *find(_mesa_glsl_parse_state *state,
1143*61046927SAndroid Build Coastguard Worker                                const char *name, exec_list *actual_parameters);
1144*61046927SAndroid Build Coastguard Worker 
1145*61046927SAndroid Build Coastguard Worker    /**
1146*61046927SAndroid Build Coastguard Worker     * A shader to hold all the built-in signatures; created by this module.
1147*61046927SAndroid Build Coastguard Worker     *
1148*61046927SAndroid Build Coastguard Worker     * This includes signatures for every built-in, regardless of version or
1149*61046927SAndroid Build Coastguard Worker     * enabled extensions.  The availability predicate associated with each
1150*61046927SAndroid Build Coastguard Worker     * signature allows matching_signature() to filter out the irrelevant ones.
1151*61046927SAndroid Build Coastguard Worker     */
1152*61046927SAndroid Build Coastguard Worker    gl_shader *shader;
1153*61046927SAndroid Build Coastguard Worker 
1154*61046927SAndroid Build Coastguard Worker private:
1155*61046927SAndroid Build Coastguard Worker    void *mem_ctx;
1156*61046927SAndroid Build Coastguard Worker 
1157*61046927SAndroid Build Coastguard Worker    void create_shader();
1158*61046927SAndroid Build Coastguard Worker    void create_intrinsics();
1159*61046927SAndroid Build Coastguard Worker    void create_builtins();
1160*61046927SAndroid Build Coastguard Worker 
1161*61046927SAndroid Build Coastguard Worker    /**
1162*61046927SAndroid Build Coastguard Worker     * IR builder helpers:
1163*61046927SAndroid Build Coastguard Worker     *
1164*61046927SAndroid Build Coastguard Worker     * These convenience functions assist in emitting IR, but don't necessarily
1165*61046927SAndroid Build Coastguard Worker     * fit in ir_builder itself.  Many of them rely on having a mem_ctx class
1166*61046927SAndroid Build Coastguard Worker     * member available.
1167*61046927SAndroid Build Coastguard Worker     */
1168*61046927SAndroid Build Coastguard Worker    ir_variable *in_var(const glsl_type *type, const char *name);
1169*61046927SAndroid Build Coastguard Worker    ir_variable *in_mediump_var(const glsl_type *type, const char *name);
1170*61046927SAndroid Build Coastguard Worker    ir_variable *in_highp_var(const glsl_type *type, const char *name);
1171*61046927SAndroid Build Coastguard Worker    ir_variable *out_var(const glsl_type *type, const char *name);
1172*61046927SAndroid Build Coastguard Worker    ir_variable *out_lowp_var(const glsl_type *type, const char *name);
1173*61046927SAndroid Build Coastguard Worker    ir_variable *out_highp_var(const glsl_type *type, const char *name);
1174*61046927SAndroid Build Coastguard Worker    ir_variable *as_highp(ir_factory &body, ir_variable *var);
1175*61046927SAndroid Build Coastguard Worker    ir_constant *imm(float16_t f16, unsigned vector_elements=1);
1176*61046927SAndroid Build Coastguard Worker    ir_constant *imm(float f, unsigned vector_elements=1);
1177*61046927SAndroid Build Coastguard Worker    ir_constant *imm(bool b, unsigned vector_elements=1);
1178*61046927SAndroid Build Coastguard Worker    ir_constant *imm(int i, unsigned vector_elements=1);
1179*61046927SAndroid Build Coastguard Worker    ir_constant *imm(unsigned u, unsigned vector_elements=1);
1180*61046927SAndroid Build Coastguard Worker    ir_constant *imm(double d, unsigned vector_elements=1);
1181*61046927SAndroid Build Coastguard Worker    ir_constant *imm(const glsl_type *type, const ir_constant_data &);
1182*61046927SAndroid Build Coastguard Worker    ir_dereference_variable *var_ref(ir_variable *var);
1183*61046927SAndroid Build Coastguard Worker    ir_dereference_array *array_ref(ir_variable *var, int i);
1184*61046927SAndroid Build Coastguard Worker    ir_swizzle *matrix_elt(ir_variable *var, int col, int row);
1185*61046927SAndroid Build Coastguard Worker    ir_dereference_record *record_ref(ir_variable *var, const char *field);
1186*61046927SAndroid Build Coastguard Worker 
1187*61046927SAndroid Build Coastguard Worker    ir_expression *asin_expr(ir_variable *x, float p0, float p1);
1188*61046927SAndroid Build Coastguard Worker 
1189*61046927SAndroid Build Coastguard Worker    /**
1190*61046927SAndroid Build Coastguard Worker     * Call function \param f with parameters specified as the linked
1191*61046927SAndroid Build Coastguard Worker     * list \param params of \c ir_variable objects.  \param ret should
1192*61046927SAndroid Build Coastguard Worker     * point to the ir_variable that will hold the function return
1193*61046927SAndroid Build Coastguard Worker     * value, or be \c NULL if the function has void return type.
1194*61046927SAndroid Build Coastguard Worker     */
1195*61046927SAndroid Build Coastguard Worker    ir_call *call(ir_function *f, ir_variable *ret, exec_list params);
1196*61046927SAndroid Build Coastguard Worker 
1197*61046927SAndroid Build Coastguard Worker    /** Create a new function and add the given signatures. */
1198*61046927SAndroid Build Coastguard Worker    void add_function(const char *name, ...);
1199*61046927SAndroid Build Coastguard Worker 
1200*61046927SAndroid Build Coastguard Worker    typedef ir_function_signature *(builtin_builder::*image_prototype_ctr)(const glsl_type *image_type,
1201*61046927SAndroid Build Coastguard Worker                                                                           unsigned num_arguments,
1202*61046927SAndroid Build Coastguard Worker                                                                           unsigned flags);
1203*61046927SAndroid Build Coastguard Worker 
1204*61046927SAndroid Build Coastguard Worker    /**
1205*61046927SAndroid Build Coastguard Worker     * Create a new image built-in function for all known image types.
1206*61046927SAndroid Build Coastguard Worker     * \p flags is a bitfield of \c image_function_flags flags.
1207*61046927SAndroid Build Coastguard Worker     */
1208*61046927SAndroid Build Coastguard Worker    void add_image_function(const char *name,
1209*61046927SAndroid Build Coastguard Worker                            const char *intrinsic_name,
1210*61046927SAndroid Build Coastguard Worker                            image_prototype_ctr prototype,
1211*61046927SAndroid Build Coastguard Worker                            unsigned num_arguments,
1212*61046927SAndroid Build Coastguard Worker                            unsigned flags,
1213*61046927SAndroid Build Coastguard Worker                            enum ir_intrinsic_id id);
1214*61046927SAndroid Build Coastguard Worker 
1215*61046927SAndroid Build Coastguard Worker    /**
1216*61046927SAndroid Build Coastguard Worker     * Create new functions for all known image built-ins and types.
1217*61046927SAndroid Build Coastguard Worker     * If \p glsl is \c true, use the GLSL built-in names and emit code
1218*61046927SAndroid Build Coastguard Worker     * to call into the actual compiler intrinsic.  If \p glsl is
1219*61046927SAndroid Build Coastguard Worker     * false, emit a function prototype with no body for each image
1220*61046927SAndroid Build Coastguard Worker     * intrinsic name.
1221*61046927SAndroid Build Coastguard Worker     */
1222*61046927SAndroid Build Coastguard Worker    void add_image_functions(bool glsl);
1223*61046927SAndroid Build Coastguard Worker 
1224*61046927SAndroid Build Coastguard Worker    ir_function_signature *new_sig(const glsl_type *return_type,
1225*61046927SAndroid Build Coastguard Worker                                   builtin_available_predicate avail,
1226*61046927SAndroid Build Coastguard Worker                                   int num_params, ...);
1227*61046927SAndroid Build Coastguard Worker 
1228*61046927SAndroid Build Coastguard Worker    /**
1229*61046927SAndroid Build Coastguard Worker     * Function signature generators:
1230*61046927SAndroid Build Coastguard Worker     *  @{
1231*61046927SAndroid Build Coastguard Worker     */
1232*61046927SAndroid Build Coastguard Worker    ir_function_signature *unop(builtin_available_predicate avail,
1233*61046927SAndroid Build Coastguard Worker                                ir_expression_operation opcode,
1234*61046927SAndroid Build Coastguard Worker                                const glsl_type *return_type,
1235*61046927SAndroid Build Coastguard Worker                                const glsl_type *param_type);
1236*61046927SAndroid Build Coastguard Worker    ir_function_signature *unop_precision(builtin_available_predicate avail,
1237*61046927SAndroid Build Coastguard Worker                                          ir_expression_operation opcode,
1238*61046927SAndroid Build Coastguard Worker                                          const glsl_type *return_type,
1239*61046927SAndroid Build Coastguard Worker                                          const glsl_type *param_type, uint32_t precision);
1240*61046927SAndroid Build Coastguard Worker    ir_function_signature *binop(builtin_available_predicate avail,
1241*61046927SAndroid Build Coastguard Worker                                 ir_expression_operation opcode,
1242*61046927SAndroid Build Coastguard Worker                                 const glsl_type *return_type,
1243*61046927SAndroid Build Coastguard Worker                                 const glsl_type *param0_type,
1244*61046927SAndroid Build Coastguard Worker                                 const glsl_type *param1_type,
1245*61046927SAndroid Build Coastguard Worker                                 bool swap_operands = false);
1246*61046927SAndroid Build Coastguard Worker 
1247*61046927SAndroid Build Coastguard Worker #define B0(X) ir_function_signature *_##X();
1248*61046927SAndroid Build Coastguard Worker #define B1(X) ir_function_signature *_##X(const glsl_type *);
1249*61046927SAndroid Build Coastguard Worker #define B2(X) ir_function_signature *_##X(const glsl_type *, const glsl_type *);
1250*61046927SAndroid Build Coastguard Worker #define B3(X) ir_function_signature *_##X(const glsl_type *, const glsl_type *, const glsl_type *);
1251*61046927SAndroid Build Coastguard Worker #define BA1(X) ir_function_signature *_##X(builtin_available_predicate, const glsl_type *);
1252*61046927SAndroid Build Coastguard Worker #define BA2(X) ir_function_signature *_##X(builtin_available_predicate, const glsl_type *, const glsl_type *);
1253*61046927SAndroid Build Coastguard Worker    BA1(radians)
1254*61046927SAndroid Build Coastguard Worker    BA1(degrees)
1255*61046927SAndroid Build Coastguard Worker    BA1(sin)
1256*61046927SAndroid Build Coastguard Worker    BA1(cos)
1257*61046927SAndroid Build Coastguard Worker    BA1(tan)
1258*61046927SAndroid Build Coastguard Worker    BA1(asin)
1259*61046927SAndroid Build Coastguard Worker    BA1(acos)
1260*61046927SAndroid Build Coastguard Worker    BA1(atan2)
1261*61046927SAndroid Build Coastguard Worker    BA1(atan)
1262*61046927SAndroid Build Coastguard Worker    BA1(sinh)
1263*61046927SAndroid Build Coastguard Worker    BA1(cosh)
1264*61046927SAndroid Build Coastguard Worker    BA1(tanh)
1265*61046927SAndroid Build Coastguard Worker    BA1(asinh)
1266*61046927SAndroid Build Coastguard Worker    BA1(acosh)
1267*61046927SAndroid Build Coastguard Worker    BA1(atanh)
1268*61046927SAndroid Build Coastguard Worker    BA1(pow)
1269*61046927SAndroid Build Coastguard Worker    BA1(exp)
1270*61046927SAndroid Build Coastguard Worker    BA1(log)
1271*61046927SAndroid Build Coastguard Worker    BA1(exp2)
1272*61046927SAndroid Build Coastguard Worker    BA1(log2)
1273*61046927SAndroid Build Coastguard Worker    BA1(sqrt)
1274*61046927SAndroid Build Coastguard Worker    BA1(inversesqrt)
1275*61046927SAndroid Build Coastguard Worker    BA1(abs)
1276*61046927SAndroid Build Coastguard Worker    BA1(sign)
1277*61046927SAndroid Build Coastguard Worker    BA1(floor)
1278*61046927SAndroid Build Coastguard Worker    BA1(truncate)
1279*61046927SAndroid Build Coastguard Worker    BA1(trunc)
1280*61046927SAndroid Build Coastguard Worker    BA1(round)
1281*61046927SAndroid Build Coastguard Worker    BA1(roundEven)
1282*61046927SAndroid Build Coastguard Worker    BA1(ceil)
1283*61046927SAndroid Build Coastguard Worker    BA1(fract)
1284*61046927SAndroid Build Coastguard Worker    BA2(mod)
1285*61046927SAndroid Build Coastguard Worker    BA1(modf)
1286*61046927SAndroid Build Coastguard Worker    BA2(min)
1287*61046927SAndroid Build Coastguard Worker    BA2(max)
1288*61046927SAndroid Build Coastguard Worker    BA2(clamp)
1289*61046927SAndroid Build Coastguard Worker    BA2(mix_lrp)
1290*61046927SAndroid Build Coastguard Worker    ir_function_signature *_mix_sel(builtin_available_predicate avail,
1291*61046927SAndroid Build Coastguard Worker                                    const glsl_type *val_type,
1292*61046927SAndroid Build Coastguard Worker                                    const glsl_type *blend_type);
1293*61046927SAndroid Build Coastguard Worker    BA2(step)
1294*61046927SAndroid Build Coastguard Worker    BA2(smoothstep)
1295*61046927SAndroid Build Coastguard Worker    BA1(isnan)
1296*61046927SAndroid Build Coastguard Worker    BA1(isinf)
1297*61046927SAndroid Build Coastguard Worker    B1(floatBitsToInt)
1298*61046927SAndroid Build Coastguard Worker    B1(floatBitsToUint)
1299*61046927SAndroid Build Coastguard Worker    B1(intBitsToFloat)
1300*61046927SAndroid Build Coastguard Worker    B1(uintBitsToFloat)
1301*61046927SAndroid Build Coastguard Worker 
1302*61046927SAndroid Build Coastguard Worker    BA1(doubleBitsToInt64)
1303*61046927SAndroid Build Coastguard Worker    BA1(doubleBitsToUint64)
1304*61046927SAndroid Build Coastguard Worker    BA1(int64BitsToDouble)
1305*61046927SAndroid Build Coastguard Worker    BA1(uint64BitsToDouble)
1306*61046927SAndroid Build Coastguard Worker 
1307*61046927SAndroid Build Coastguard Worker    ir_function_signature *_packUnorm2x16(builtin_available_predicate avail);
1308*61046927SAndroid Build Coastguard Worker    ir_function_signature *_packSnorm2x16(builtin_available_predicate avail);
1309*61046927SAndroid Build Coastguard Worker    ir_function_signature *_packUnorm4x8(builtin_available_predicate avail);
1310*61046927SAndroid Build Coastguard Worker    ir_function_signature *_packSnorm4x8(builtin_available_predicate avail);
1311*61046927SAndroid Build Coastguard Worker    ir_function_signature *_unpackUnorm2x16(builtin_available_predicate avail);
1312*61046927SAndroid Build Coastguard Worker    ir_function_signature *_unpackSnorm2x16(builtin_available_predicate avail);
1313*61046927SAndroid Build Coastguard Worker    ir_function_signature *_unpackUnorm4x8(builtin_available_predicate avail);
1314*61046927SAndroid Build Coastguard Worker    ir_function_signature *_unpackSnorm4x8(builtin_available_predicate avail);
1315*61046927SAndroid Build Coastguard Worker    ir_function_signature *_packHalf2x16(builtin_available_predicate avail);
1316*61046927SAndroid Build Coastguard Worker    ir_function_signature *_unpackHalf2x16(builtin_available_predicate avail);
1317*61046927SAndroid Build Coastguard Worker    ir_function_signature *_packFloat2x16(builtin_available_predicate avail);
1318*61046927SAndroid Build Coastguard Worker    ir_function_signature *_unpackFloat2x16(builtin_available_predicate avail);
1319*61046927SAndroid Build Coastguard Worker    ir_function_signature *_packDouble2x32(builtin_available_predicate avail);
1320*61046927SAndroid Build Coastguard Worker    ir_function_signature *_unpackDouble2x32(builtin_available_predicate avail);
1321*61046927SAndroid Build Coastguard Worker    ir_function_signature *_packInt2x32(builtin_available_predicate avail);
1322*61046927SAndroid Build Coastguard Worker    ir_function_signature *_unpackInt2x32(builtin_available_predicate avail);
1323*61046927SAndroid Build Coastguard Worker    ir_function_signature *_packUint2x32(builtin_available_predicate avail);
1324*61046927SAndroid Build Coastguard Worker    ir_function_signature *_unpackUint2x32(builtin_available_predicate avail);
1325*61046927SAndroid Build Coastguard Worker 
1326*61046927SAndroid Build Coastguard Worker    BA1(length)
1327*61046927SAndroid Build Coastguard Worker    BA1(distance);
1328*61046927SAndroid Build Coastguard Worker    BA1(dot);
1329*61046927SAndroid Build Coastguard Worker    BA1(cross);
1330*61046927SAndroid Build Coastguard Worker    BA1(normalize);
1331*61046927SAndroid Build Coastguard Worker    B0(ftransform);
1332*61046927SAndroid Build Coastguard Worker    BA1(faceforward);
1333*61046927SAndroid Build Coastguard Worker    BA1(reflect);
1334*61046927SAndroid Build Coastguard Worker    BA1(refract);
1335*61046927SAndroid Build Coastguard Worker    BA1(matrixCompMult);
1336*61046927SAndroid Build Coastguard Worker    BA1(outerProduct);
1337*61046927SAndroid Build Coastguard Worker    BA1(determinant_mat2);
1338*61046927SAndroid Build Coastguard Worker    BA1(determinant_mat3);
1339*61046927SAndroid Build Coastguard Worker    BA1(determinant_mat4);
1340*61046927SAndroid Build Coastguard Worker    BA1(inverse_mat2);
1341*61046927SAndroid Build Coastguard Worker    BA1(inverse_mat3);
1342*61046927SAndroid Build Coastguard Worker    BA1(inverse_mat4);
1343*61046927SAndroid Build Coastguard Worker    BA1(transpose);
1344*61046927SAndroid Build Coastguard Worker    BA1(lessThan);
1345*61046927SAndroid Build Coastguard Worker    BA1(lessThanEqual);
1346*61046927SAndroid Build Coastguard Worker    BA1(greaterThan);
1347*61046927SAndroid Build Coastguard Worker    BA1(greaterThanEqual);
1348*61046927SAndroid Build Coastguard Worker    BA1(equal);
1349*61046927SAndroid Build Coastguard Worker    BA1(notEqual);
1350*61046927SAndroid Build Coastguard Worker    B1(any);
1351*61046927SAndroid Build Coastguard Worker    B1(all);
1352*61046927SAndroid Build Coastguard Worker    B1(not);
1353*61046927SAndroid Build Coastguard Worker    BA2(textureSize);
1354*61046927SAndroid Build Coastguard Worker    BA1(textureSamples);
1355*61046927SAndroid Build Coastguard Worker 
1356*61046927SAndroid Build Coastguard Worker    B0(is_sparse_texels_resident);
1357*61046927SAndroid Build Coastguard Worker    B0(is_sparse_texels_resident_intrinsic);
1358*61046927SAndroid Build Coastguard Worker 
1359*61046927SAndroid Build Coastguard Worker /** Flags to _texture() */
1360*61046927SAndroid Build Coastguard Worker #define TEX_PROJECT 1
1361*61046927SAndroid Build Coastguard Worker #define TEX_OFFSET  2
1362*61046927SAndroid Build Coastguard Worker #define TEX_COMPONENT 4
1363*61046927SAndroid Build Coastguard Worker #define TEX_OFFSET_NONCONST 8
1364*61046927SAndroid Build Coastguard Worker #define TEX_OFFSET_ARRAY 16
1365*61046927SAndroid Build Coastguard Worker #define TEX_SPARSE 32
1366*61046927SAndroid Build Coastguard Worker #define TEX_CLAMP 64
1367*61046927SAndroid Build Coastguard Worker 
1368*61046927SAndroid Build Coastguard Worker    ir_function_signature *_texture(ir_texture_opcode opcode,
1369*61046927SAndroid Build Coastguard Worker                                    builtin_available_predicate avail,
1370*61046927SAndroid Build Coastguard Worker                                    const glsl_type *return_type,
1371*61046927SAndroid Build Coastguard Worker                                    const glsl_type *sampler_type,
1372*61046927SAndroid Build Coastguard Worker                                    const glsl_type *coord_type,
1373*61046927SAndroid Build Coastguard Worker                                    int flags = 0);
1374*61046927SAndroid Build Coastguard Worker    ir_function_signature *_textureCubeArrayShadow(ir_texture_opcode opcode,
1375*61046927SAndroid Build Coastguard Worker                                                   builtin_available_predicate avail,
1376*61046927SAndroid Build Coastguard Worker                                                   const glsl_type *x,
1377*61046927SAndroid Build Coastguard Worker                                                   int flags = 0);
1378*61046927SAndroid Build Coastguard Worker    ir_function_signature *_texelFetch(builtin_available_predicate avail,
1379*61046927SAndroid Build Coastguard Worker                                       const glsl_type *return_type,
1380*61046927SAndroid Build Coastguard Worker                                       const glsl_type *sampler_type,
1381*61046927SAndroid Build Coastguard Worker                                       const glsl_type *coord_type,
1382*61046927SAndroid Build Coastguard Worker                                       const glsl_type *offset_type = NULL,
1383*61046927SAndroid Build Coastguard Worker                                       bool sparse = false);
1384*61046927SAndroid Build Coastguard Worker 
1385*61046927SAndroid Build Coastguard Worker    B0(EmitVertex)
1386*61046927SAndroid Build Coastguard Worker    B0(EndPrimitive)
1387*61046927SAndroid Build Coastguard Worker    ir_function_signature *_EmitStreamVertex(builtin_available_predicate avail,
1388*61046927SAndroid Build Coastguard Worker                                             const glsl_type *stream_type);
1389*61046927SAndroid Build Coastguard Worker    ir_function_signature *_EndStreamPrimitive(builtin_available_predicate avail,
1390*61046927SAndroid Build Coastguard Worker                                               const glsl_type *stream_type);
1391*61046927SAndroid Build Coastguard Worker    B0(barrier)
1392*61046927SAndroid Build Coastguard Worker 
1393*61046927SAndroid Build Coastguard Worker    BA2(textureQueryLod);
1394*61046927SAndroid Build Coastguard Worker    BA1(textureQueryLevels);
1395*61046927SAndroid Build Coastguard Worker    BA2(textureSamplesIdentical);
1396*61046927SAndroid Build Coastguard Worker    BA1(dFdx);
1397*61046927SAndroid Build Coastguard Worker    BA1(dFdy);
1398*61046927SAndroid Build Coastguard Worker    BA1(fwidth);
1399*61046927SAndroid Build Coastguard Worker    BA1(dFdxCoarse);
1400*61046927SAndroid Build Coastguard Worker    BA1(dFdyCoarse);
1401*61046927SAndroid Build Coastguard Worker    BA1(fwidthCoarse);
1402*61046927SAndroid Build Coastguard Worker    BA1(dFdxFine);
1403*61046927SAndroid Build Coastguard Worker    BA1(dFdyFine);
1404*61046927SAndroid Build Coastguard Worker    BA1(fwidthFine);
1405*61046927SAndroid Build Coastguard Worker    B1(noise1);
1406*61046927SAndroid Build Coastguard Worker    B1(noise2);
1407*61046927SAndroid Build Coastguard Worker    B1(noise3);
1408*61046927SAndroid Build Coastguard Worker    B1(noise4);
1409*61046927SAndroid Build Coastguard Worker 
1410*61046927SAndroid Build Coastguard Worker    B1(bitfieldExtract)
1411*61046927SAndroid Build Coastguard Worker    B1(bitfieldInsert)
1412*61046927SAndroid Build Coastguard Worker    B1(bitfieldReverse)
1413*61046927SAndroid Build Coastguard Worker    B1(bitCount)
1414*61046927SAndroid Build Coastguard Worker    B1(findLSB)
1415*61046927SAndroid Build Coastguard Worker    B1(findMSB)
1416*61046927SAndroid Build Coastguard Worker    BA1(countLeadingZeros)
1417*61046927SAndroid Build Coastguard Worker    BA1(countTrailingZeros)
1418*61046927SAndroid Build Coastguard Worker    BA1(fma)
1419*61046927SAndroid Build Coastguard Worker    B2(ldexp)
1420*61046927SAndroid Build Coastguard Worker    B2(frexp)
1421*61046927SAndroid Build Coastguard Worker    B2(dfrexp)
1422*61046927SAndroid Build Coastguard Worker    B1(uaddCarry)
1423*61046927SAndroid Build Coastguard Worker    B1(usubBorrow)
1424*61046927SAndroid Build Coastguard Worker    BA1(addSaturate)
1425*61046927SAndroid Build Coastguard Worker    BA1(subtractSaturate)
1426*61046927SAndroid Build Coastguard Worker    BA1(absoluteDifference)
1427*61046927SAndroid Build Coastguard Worker    BA1(average)
1428*61046927SAndroid Build Coastguard Worker    BA1(averageRounded)
1429*61046927SAndroid Build Coastguard Worker    B1(mulExtended)
1430*61046927SAndroid Build Coastguard Worker    BA1(multiply32x16)
1431*61046927SAndroid Build Coastguard Worker    BA1(interpolateAtCentroid)
1432*61046927SAndroid Build Coastguard Worker    BA1(interpolateAtOffset)
1433*61046927SAndroid Build Coastguard Worker    BA1(interpolateAtSample)
1434*61046927SAndroid Build Coastguard Worker 
1435*61046927SAndroid Build Coastguard Worker    ir_function_signature *_atomic_counter_intrinsic(builtin_available_predicate avail,
1436*61046927SAndroid Build Coastguard Worker                                                     enum ir_intrinsic_id id);
1437*61046927SAndroid Build Coastguard Worker    ir_function_signature *_atomic_counter_intrinsic1(builtin_available_predicate avail,
1438*61046927SAndroid Build Coastguard Worker                                                      enum ir_intrinsic_id id);
1439*61046927SAndroid Build Coastguard Worker    ir_function_signature *_atomic_counter_intrinsic2(builtin_available_predicate avail,
1440*61046927SAndroid Build Coastguard Worker                                                      enum ir_intrinsic_id id);
1441*61046927SAndroid Build Coastguard Worker    ir_function_signature *_atomic_counter_op(const char *intrinsic,
1442*61046927SAndroid Build Coastguard Worker                                              builtin_available_predicate avail);
1443*61046927SAndroid Build Coastguard Worker    ir_function_signature *_atomic_counter_op1(const char *intrinsic,
1444*61046927SAndroid Build Coastguard Worker                                               builtin_available_predicate avail);
1445*61046927SAndroid Build Coastguard Worker    ir_function_signature *_atomic_counter_op2(const char *intrinsic,
1446*61046927SAndroid Build Coastguard Worker                                               builtin_available_predicate avail);
1447*61046927SAndroid Build Coastguard Worker 
1448*61046927SAndroid Build Coastguard Worker    ir_function_signature *_atomic_intrinsic2(builtin_available_predicate avail,
1449*61046927SAndroid Build Coastguard Worker                                              const glsl_type *type,
1450*61046927SAndroid Build Coastguard Worker                                              enum ir_intrinsic_id id);
1451*61046927SAndroid Build Coastguard Worker    ir_function_signature *_atomic_op2(const char *intrinsic,
1452*61046927SAndroid Build Coastguard Worker                                       builtin_available_predicate avail,
1453*61046927SAndroid Build Coastguard Worker                                       const glsl_type *type);
1454*61046927SAndroid Build Coastguard Worker    ir_function_signature *_atomic_intrinsic3(builtin_available_predicate avail,
1455*61046927SAndroid Build Coastguard Worker                                              const glsl_type *type,
1456*61046927SAndroid Build Coastguard Worker                                              enum ir_intrinsic_id id);
1457*61046927SAndroid Build Coastguard Worker    ir_function_signature *_atomic_op3(const char *intrinsic,
1458*61046927SAndroid Build Coastguard Worker                                       builtin_available_predicate avail,
1459*61046927SAndroid Build Coastguard Worker                                       const glsl_type *type);
1460*61046927SAndroid Build Coastguard Worker 
1461*61046927SAndroid Build Coastguard Worker    BA1(min3)
1462*61046927SAndroid Build Coastguard Worker    BA1(max3)
1463*61046927SAndroid Build Coastguard Worker    BA1(mid3)
1464*61046927SAndroid Build Coastguard Worker 
1465*61046927SAndroid Build Coastguard Worker    ir_function_signature *_image_prototype(const glsl_type *image_type,
1466*61046927SAndroid Build Coastguard Worker                                            unsigned num_arguments,
1467*61046927SAndroid Build Coastguard Worker                                            unsigned flags);
1468*61046927SAndroid Build Coastguard Worker    ir_function_signature *_image_size_prototype(const glsl_type *image_type,
1469*61046927SAndroid Build Coastguard Worker                                                 unsigned num_arguments,
1470*61046927SAndroid Build Coastguard Worker                                                 unsigned flags);
1471*61046927SAndroid Build Coastguard Worker    ir_function_signature *_image_samples_prototype(const glsl_type *image_type,
1472*61046927SAndroid Build Coastguard Worker                                                    unsigned num_arguments,
1473*61046927SAndroid Build Coastguard Worker                                                    unsigned flags);
1474*61046927SAndroid Build Coastguard Worker    ir_function_signature *_image(image_prototype_ctr prototype,
1475*61046927SAndroid Build Coastguard Worker                                  const glsl_type *image_type,
1476*61046927SAndroid Build Coastguard Worker                                  const char *intrinsic_name,
1477*61046927SAndroid Build Coastguard Worker                                  unsigned num_arguments,
1478*61046927SAndroid Build Coastguard Worker                                  unsigned flags,
1479*61046927SAndroid Build Coastguard Worker                                  enum ir_intrinsic_id id);
1480*61046927SAndroid Build Coastguard Worker 
1481*61046927SAndroid Build Coastguard Worker    ir_function_signature *_memory_barrier_intrinsic(
1482*61046927SAndroid Build Coastguard Worker       builtin_available_predicate avail,
1483*61046927SAndroid Build Coastguard Worker       enum ir_intrinsic_id id);
1484*61046927SAndroid Build Coastguard Worker    ir_function_signature *_memory_barrier(const char *intrinsic_name,
1485*61046927SAndroid Build Coastguard Worker                                           builtin_available_predicate avail);
1486*61046927SAndroid Build Coastguard Worker 
1487*61046927SAndroid Build Coastguard Worker    ir_function_signature *_ballot_intrinsic(const glsl_type *type);
1488*61046927SAndroid Build Coastguard Worker    ir_function_signature *_ballot(const glsl_type *type, builtin_available_predicate avail);
1489*61046927SAndroid Build Coastguard Worker 
1490*61046927SAndroid Build Coastguard Worker    ir_function_signature *_inverse_ballot_intrinsic();
1491*61046927SAndroid Build Coastguard Worker    ir_function_signature *_inverse_ballot();
1492*61046927SAndroid Build Coastguard Worker 
1493*61046927SAndroid Build Coastguard Worker    ir_function_signature *_ballot_bit_extract_intrinsic();
1494*61046927SAndroid Build Coastguard Worker    ir_function_signature *_ballot_bit_extract();
1495*61046927SAndroid Build Coastguard Worker 
1496*61046927SAndroid Build Coastguard Worker    ir_function_signature *_ballot_bit_intrinsic(enum ir_intrinsic_id id);
1497*61046927SAndroid Build Coastguard Worker    ir_function_signature *_ballot_bit(const char *intrinsic_name);
1498*61046927SAndroid Build Coastguard Worker 
1499*61046927SAndroid Build Coastguard Worker    ir_function_signature *_read_first_invocation_intrinsic(const glsl_type *type);
1500*61046927SAndroid Build Coastguard Worker    ir_function_signature *_read_first_invocation(const glsl_type *type,
1501*61046927SAndroid Build Coastguard Worker                                                  builtin_available_predicate avail);
1502*61046927SAndroid Build Coastguard Worker 
1503*61046927SAndroid Build Coastguard Worker    ir_function_signature *_read_invocation_intrinsic(const glsl_type *type);
1504*61046927SAndroid Build Coastguard Worker    ir_function_signature *_read_invocation(const glsl_type *type,
1505*61046927SAndroid Build Coastguard Worker                                            builtin_available_predicate avail);
1506*61046927SAndroid Build Coastguard Worker 
1507*61046927SAndroid Build Coastguard Worker 
1508*61046927SAndroid Build Coastguard Worker    ir_function_signature *_invocation_interlock_intrinsic(
1509*61046927SAndroid Build Coastguard Worker       builtin_available_predicate avail,
1510*61046927SAndroid Build Coastguard Worker       enum ir_intrinsic_id id);
1511*61046927SAndroid Build Coastguard Worker    ir_function_signature *_invocation_interlock(
1512*61046927SAndroid Build Coastguard Worker       const char *intrinsic_name,
1513*61046927SAndroid Build Coastguard Worker       builtin_available_predicate avail);
1514*61046927SAndroid Build Coastguard Worker 
1515*61046927SAndroid Build Coastguard Worker    ir_function_signature *_shader_clock_intrinsic(builtin_available_predicate avail,
1516*61046927SAndroid Build Coastguard Worker                                                   const glsl_type *type);
1517*61046927SAndroid Build Coastguard Worker    ir_function_signature *_shader_clock(builtin_available_predicate avail,
1518*61046927SAndroid Build Coastguard Worker                                         const glsl_type *type);
1519*61046927SAndroid Build Coastguard Worker 
1520*61046927SAndroid Build Coastguard Worker    ir_function_signature *_vote_intrinsic(const glsl_type *type,
1521*61046927SAndroid Build Coastguard Worker                                           builtin_available_predicate avail,
1522*61046927SAndroid Build Coastguard Worker                                           enum ir_intrinsic_id id);
1523*61046927SAndroid Build Coastguard Worker    ir_function_signature *_vote(const glsl_type *type,
1524*61046927SAndroid Build Coastguard Worker                                 builtin_available_predicate avail,
1525*61046927SAndroid Build Coastguard Worker                                 const char *intrinsic_name);
1526*61046927SAndroid Build Coastguard Worker 
1527*61046927SAndroid Build Coastguard Worker    ir_function_signature *_helper_invocation_intrinsic();
1528*61046927SAndroid Build Coastguard Worker    ir_function_signature *_helper_invocation();
1529*61046927SAndroid Build Coastguard Worker 
1530*61046927SAndroid Build Coastguard Worker    ir_function_signature *_subgroup_barrier_intrinsic(enum ir_intrinsic_id id,
1531*61046927SAndroid Build Coastguard Worker                                                       builtin_available_predicate avail);
1532*61046927SAndroid Build Coastguard Worker    ir_function_signature *_subgroup_barrier(const char *intrinsic_name,
1533*61046927SAndroid Build Coastguard Worker                                             builtin_available_predicate avail);
1534*61046927SAndroid Build Coastguard Worker 
1535*61046927SAndroid Build Coastguard Worker    ir_function_signature *_elect_intrinsic();
1536*61046927SAndroid Build Coastguard Worker    ir_function_signature *_elect();
1537*61046927SAndroid Build Coastguard Worker 
1538*61046927SAndroid Build Coastguard Worker    ir_function_signature *_shuffle_intrinsic(const glsl_type *type);
1539*61046927SAndroid Build Coastguard Worker    ir_function_signature *_shuffle(const glsl_type *type);
1540*61046927SAndroid Build Coastguard Worker 
1541*61046927SAndroid Build Coastguard Worker    ir_function_signature *_shuffle_xor_intrinsic(const glsl_type *type);
1542*61046927SAndroid Build Coastguard Worker    ir_function_signature *_shuffle_xor(const glsl_type *type);
1543*61046927SAndroid Build Coastguard Worker 
1544*61046927SAndroid Build Coastguard Worker    ir_function_signature *_shuffle_up_intrinsic(const glsl_type *type);
1545*61046927SAndroid Build Coastguard Worker    ir_function_signature *_shuffle_up(const glsl_type *type);
1546*61046927SAndroid Build Coastguard Worker 
1547*61046927SAndroid Build Coastguard Worker    ir_function_signature *_shuffle_down_intrinsic(const glsl_type *type);
1548*61046927SAndroid Build Coastguard Worker    ir_function_signature *_shuffle_down(const glsl_type *type);
1549*61046927SAndroid Build Coastguard Worker 
1550*61046927SAndroid Build Coastguard Worker    ir_function_signature *_subgroup_arithmetic_intrinsic(const glsl_type *type,
1551*61046927SAndroid Build Coastguard Worker                                                          enum ir_intrinsic_id id);
1552*61046927SAndroid Build Coastguard Worker    ir_function_signature *_subgroup_arithmetic(const glsl_type *type,
1553*61046927SAndroid Build Coastguard Worker                                                const char *intrinsic_name);
1554*61046927SAndroid Build Coastguard Worker 
1555*61046927SAndroid Build Coastguard Worker    ir_function_signature *_subgroup_clustered_intrinsic(const glsl_type *type,
1556*61046927SAndroid Build Coastguard Worker                                                         enum ir_intrinsic_id id);
1557*61046927SAndroid Build Coastguard Worker    ir_function_signature *_subgroup_clustered(const glsl_type *type,
1558*61046927SAndroid Build Coastguard Worker                                               const char *intrinsic_name);
1559*61046927SAndroid Build Coastguard Worker 
1560*61046927SAndroid Build Coastguard Worker    ir_function_signature *_quad_broadcast_intrinsic(const glsl_type *type);
1561*61046927SAndroid Build Coastguard Worker    ir_function_signature *_quad_broadcast(const glsl_type *type);
1562*61046927SAndroid Build Coastguard Worker 
1563*61046927SAndroid Build Coastguard Worker    ir_function_signature *_quad_swap_intrinsic(const glsl_type *type, enum ir_intrinsic_id id);
1564*61046927SAndroid Build Coastguard Worker    ir_function_signature *_quad_swap(const glsl_type *type, const char *intrinsic_name);
1565*61046927SAndroid Build Coastguard Worker 
1566*61046927SAndroid Build Coastguard Worker #undef B0
1567*61046927SAndroid Build Coastguard Worker #undef B1
1568*61046927SAndroid Build Coastguard Worker #undef B2
1569*61046927SAndroid Build Coastguard Worker #undef B3
1570*61046927SAndroid Build Coastguard Worker #undef BA1
1571*61046927SAndroid Build Coastguard Worker #undef BA2
1572*61046927SAndroid Build Coastguard Worker    /** @} */
1573*61046927SAndroid Build Coastguard Worker };
1574*61046927SAndroid Build Coastguard Worker 
1575*61046927SAndroid Build Coastguard Worker enum image_function_flags {
1576*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_EMIT_STUB = (1 << 0),
1577*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_RETURNS_VOID = (1 << 1),
1578*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_HAS_VECTOR_DATA_TYPE = (1 << 2),
1579*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE = (1 << 3),
1580*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_READ_ONLY = (1 << 4),
1581*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_WRITE_ONLY = (1 << 5),
1582*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_AVAIL_ATOMIC = (1 << 6),
1583*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_MS_ONLY = (1 << 7),
1584*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_AVAIL_ATOMIC_EXCHANGE = (1 << 8),
1585*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_AVAIL_ATOMIC_ADD = (1 << 9),
1586*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_EXT_ONLY = (1 << 10),
1587*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE = (1 << 11),
1588*61046927SAndroid Build Coastguard Worker    IMAGE_FUNCTION_SPARSE = (1 << 12),
1589*61046927SAndroid Build Coastguard Worker };
1590*61046927SAndroid Build Coastguard Worker 
1591*61046927SAndroid Build Coastguard Worker } /* anonymous namespace */
1592*61046927SAndroid Build Coastguard Worker 
1593*61046927SAndroid Build Coastguard Worker /**
1594*61046927SAndroid Build Coastguard Worker  * Core builtin_builder functionality:
1595*61046927SAndroid Build Coastguard Worker  *  @{
1596*61046927SAndroid Build Coastguard Worker  */
builtin_builder()1597*61046927SAndroid Build Coastguard Worker builtin_builder::builtin_builder()
1598*61046927SAndroid Build Coastguard Worker    : shader(NULL)
1599*61046927SAndroid Build Coastguard Worker {
1600*61046927SAndroid Build Coastguard Worker    mem_ctx = NULL;
1601*61046927SAndroid Build Coastguard Worker }
1602*61046927SAndroid Build Coastguard Worker 
~builtin_builder()1603*61046927SAndroid Build Coastguard Worker builtin_builder::~builtin_builder()
1604*61046927SAndroid Build Coastguard Worker {
1605*61046927SAndroid Build Coastguard Worker    simple_mtx_lock(&builtins_lock);
1606*61046927SAndroid Build Coastguard Worker 
1607*61046927SAndroid Build Coastguard Worker    ralloc_free(mem_ctx);
1608*61046927SAndroid Build Coastguard Worker    mem_ctx = NULL;
1609*61046927SAndroid Build Coastguard Worker 
1610*61046927SAndroid Build Coastguard Worker    ralloc_free(shader);
1611*61046927SAndroid Build Coastguard Worker    shader = NULL;
1612*61046927SAndroid Build Coastguard Worker 
1613*61046927SAndroid Build Coastguard Worker    simple_mtx_unlock(&builtins_lock);
1614*61046927SAndroid Build Coastguard Worker }
1615*61046927SAndroid Build Coastguard Worker 
1616*61046927SAndroid Build Coastguard Worker ir_function_signature *
find(_mesa_glsl_parse_state * state,const char * name,exec_list * actual_parameters)1617*61046927SAndroid Build Coastguard Worker builtin_builder::find(_mesa_glsl_parse_state *state,
1618*61046927SAndroid Build Coastguard Worker                       const char *name, exec_list *actual_parameters)
1619*61046927SAndroid Build Coastguard Worker {
1620*61046927SAndroid Build Coastguard Worker    /* The shader currently being compiled requested a built-in function;
1621*61046927SAndroid Build Coastguard Worker     * it needs to link against builtin_builder::shader in order to get them.
1622*61046927SAndroid Build Coastguard Worker     *
1623*61046927SAndroid Build Coastguard Worker     * Even if we don't find a matching signature, we still need to do this so
1624*61046927SAndroid Build Coastguard Worker     * that the "no matching signature" error will list potential candidates
1625*61046927SAndroid Build Coastguard Worker     * from the available built-ins.
1626*61046927SAndroid Build Coastguard Worker     */
1627*61046927SAndroid Build Coastguard Worker    state->uses_builtin_functions = true;
1628*61046927SAndroid Build Coastguard Worker 
1629*61046927SAndroid Build Coastguard Worker    ir_function *f = shader->symbols->get_function(name);
1630*61046927SAndroid Build Coastguard Worker    if (f == NULL)
1631*61046927SAndroid Build Coastguard Worker       return NULL;
1632*61046927SAndroid Build Coastguard Worker 
1633*61046927SAndroid Build Coastguard Worker    ir_function_signature *sig =
1634*61046927SAndroid Build Coastguard Worker       f->matching_signature(state, actual_parameters,
1635*61046927SAndroid Build Coastguard Worker                             state->has_implicit_conversions(),
1636*61046927SAndroid Build Coastguard Worker                             state->has_implicit_int_to_uint_conversion(),
1637*61046927SAndroid Build Coastguard Worker                             true);
1638*61046927SAndroid Build Coastguard Worker    if (sig == NULL)
1639*61046927SAndroid Build Coastguard Worker       return NULL;
1640*61046927SAndroid Build Coastguard Worker 
1641*61046927SAndroid Build Coastguard Worker    return sig;
1642*61046927SAndroid Build Coastguard Worker }
1643*61046927SAndroid Build Coastguard Worker 
1644*61046927SAndroid Build Coastguard Worker void
initialize()1645*61046927SAndroid Build Coastguard Worker builtin_builder::initialize()
1646*61046927SAndroid Build Coastguard Worker {
1647*61046927SAndroid Build Coastguard Worker    /* If already initialized, don't do it again. */
1648*61046927SAndroid Build Coastguard Worker    if (mem_ctx != NULL)
1649*61046927SAndroid Build Coastguard Worker       return;
1650*61046927SAndroid Build Coastguard Worker 
1651*61046927SAndroid Build Coastguard Worker    glsl_type_singleton_init_or_ref();
1652*61046927SAndroid Build Coastguard Worker 
1653*61046927SAndroid Build Coastguard Worker    mem_ctx = ralloc_context(NULL);
1654*61046927SAndroid Build Coastguard Worker    create_shader();
1655*61046927SAndroid Build Coastguard Worker    create_intrinsics();
1656*61046927SAndroid Build Coastguard Worker    create_builtins();
1657*61046927SAndroid Build Coastguard Worker }
1658*61046927SAndroid Build Coastguard Worker 
1659*61046927SAndroid Build Coastguard Worker void
release()1660*61046927SAndroid Build Coastguard Worker builtin_builder::release()
1661*61046927SAndroid Build Coastguard Worker {
1662*61046927SAndroid Build Coastguard Worker    ralloc_free(mem_ctx);
1663*61046927SAndroid Build Coastguard Worker    mem_ctx = NULL;
1664*61046927SAndroid Build Coastguard Worker 
1665*61046927SAndroid Build Coastguard Worker    ralloc_free(shader);
1666*61046927SAndroid Build Coastguard Worker    shader = NULL;
1667*61046927SAndroid Build Coastguard Worker 
1668*61046927SAndroid Build Coastguard Worker    glsl_type_singleton_decref();
1669*61046927SAndroid Build Coastguard Worker }
1670*61046927SAndroid Build Coastguard Worker 
1671*61046927SAndroid Build Coastguard Worker void
create_shader()1672*61046927SAndroid Build Coastguard Worker builtin_builder::create_shader()
1673*61046927SAndroid Build Coastguard Worker {
1674*61046927SAndroid Build Coastguard Worker    /* The target doesn't actually matter.  There's no target for generic
1675*61046927SAndroid Build Coastguard Worker     * GLSL utility code that could be linked against any stage, so just
1676*61046927SAndroid Build Coastguard Worker     * arbitrarily pick GL_VERTEX_SHADER.
1677*61046927SAndroid Build Coastguard Worker     */
1678*61046927SAndroid Build Coastguard Worker    shader = _mesa_new_shader(0, MESA_SHADER_VERTEX);
1679*61046927SAndroid Build Coastguard Worker    shader->symbols = new(mem_ctx) glsl_symbol_table;
1680*61046927SAndroid Build Coastguard Worker }
1681*61046927SAndroid Build Coastguard Worker 
1682*61046927SAndroid Build Coastguard Worker /** @} */
1683*61046927SAndroid Build Coastguard Worker 
1684*61046927SAndroid Build Coastguard Worker #define FIU(func, ...) \
1685*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_float, ##__VA_ARGS__), \
1686*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_vec2, ##__VA_ARGS__), \
1687*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_vec3, ##__VA_ARGS__), \
1688*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_vec4, ##__VA_ARGS__), \
1689*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_int, ##__VA_ARGS__), \
1690*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_ivec2, ##__VA_ARGS__), \
1691*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_ivec3, ##__VA_ARGS__), \
1692*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_ivec4, ##__VA_ARGS__), \
1693*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_uint, ##__VA_ARGS__), \
1694*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_uvec2, ##__VA_ARGS__), \
1695*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_uvec3, ##__VA_ARGS__), \
1696*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_uvec4, ##__VA_ARGS__)
1697*61046927SAndroid Build Coastguard Worker 
1698*61046927SAndroid Build Coastguard Worker #define FIUB(func, ...) \
1699*61046927SAndroid Build Coastguard Worker    FIU(func, ##__VA_ARGS__), \
1700*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_bool, ##__VA_ARGS__), \
1701*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_bvec2, ##__VA_ARGS__), \
1702*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_bvec3, ##__VA_ARGS__), \
1703*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_bvec4, ##__VA_ARGS__)
1704*61046927SAndroid Build Coastguard Worker 
1705*61046927SAndroid Build Coastguard Worker #define FIUD(func, ...) \
1706*61046927SAndroid Build Coastguard Worker    FIU(func, ##__VA_ARGS__), \
1707*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_double, ##__VA_ARGS__), \
1708*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_dvec2, ##__VA_ARGS__), \
1709*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_dvec3, ##__VA_ARGS__), \
1710*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_dvec4, ##__VA_ARGS__)
1711*61046927SAndroid Build Coastguard Worker 
1712*61046927SAndroid Build Coastguard Worker #define FIUBD(func, ...) \
1713*61046927SAndroid Build Coastguard Worker    FIUB(func, ##__VA_ARGS__), \
1714*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_double, ##__VA_ARGS__), \
1715*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_dvec2, ##__VA_ARGS__), \
1716*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_dvec3, ##__VA_ARGS__), \
1717*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_dvec4, ##__VA_ARGS__)
1718*61046927SAndroid Build Coastguard Worker 
1719*61046927SAndroid Build Coastguard Worker #define FIUBD_AVAIL(func, avail, ...) \
1720*61046927SAndroid Build Coastguard Worker    FIUB(func, avail, ##__VA_ARGS__), \
1721*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_double, avail##_and_fp64, ##__VA_ARGS__), \
1722*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_dvec2, avail##_and_fp64, ##__VA_ARGS__), \
1723*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_dvec3, avail##_and_fp64, ##__VA_ARGS__), \
1724*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_dvec4, avail##_and_fp64, ##__VA_ARGS__)
1725*61046927SAndroid Build Coastguard Worker 
1726*61046927SAndroid Build Coastguard Worker #define IUB(func, ...) \
1727*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_int, ##__VA_ARGS__), \
1728*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_ivec2, ##__VA_ARGS__), \
1729*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_ivec3, ##__VA_ARGS__), \
1730*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_ivec4, ##__VA_ARGS__), \
1731*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_uint, ##__VA_ARGS__), \
1732*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_uvec2, ##__VA_ARGS__), \
1733*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_uvec3, ##__VA_ARGS__), \
1734*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_uvec4, ##__VA_ARGS__), \
1735*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_bool, ##__VA_ARGS__), \
1736*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_bvec2, ##__VA_ARGS__), \
1737*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_bvec3, ##__VA_ARGS__), \
1738*61046927SAndroid Build Coastguard Worker    func(&glsl_type_builtin_bvec4, ##__VA_ARGS__)
1739*61046927SAndroid Build Coastguard Worker 
1740*61046927SAndroid Build Coastguard Worker /**
1741*61046927SAndroid Build Coastguard Worker  * Create ir_function and ir_function_signature objects for each
1742*61046927SAndroid Build Coastguard Worker  * intrinsic.
1743*61046927SAndroid Build Coastguard Worker  */
1744*61046927SAndroid Build Coastguard Worker void
create_intrinsics()1745*61046927SAndroid Build Coastguard Worker builtin_builder::create_intrinsics()
1746*61046927SAndroid Build Coastguard Worker {
1747*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_atomic_read",
1748*61046927SAndroid Build Coastguard Worker                 _atomic_counter_intrinsic(shader_atomic_counters,
1749*61046927SAndroid Build Coastguard Worker                                           ir_intrinsic_atomic_counter_read),
1750*61046927SAndroid Build Coastguard Worker                 NULL);
1751*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_atomic_increment",
1752*61046927SAndroid Build Coastguard Worker                 _atomic_counter_intrinsic(shader_atomic_counters,
1753*61046927SAndroid Build Coastguard Worker                                           ir_intrinsic_atomic_counter_increment),
1754*61046927SAndroid Build Coastguard Worker                 NULL);
1755*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_atomic_predecrement",
1756*61046927SAndroid Build Coastguard Worker                 _atomic_counter_intrinsic(shader_atomic_counters,
1757*61046927SAndroid Build Coastguard Worker                                           ir_intrinsic_atomic_counter_predecrement),
1758*61046927SAndroid Build Coastguard Worker                 NULL);
1759*61046927SAndroid Build Coastguard Worker 
1760*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_atomic_add",
1761*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1762*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint,
1763*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_add),
1764*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1765*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int,
1766*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_add),
1767*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(NV_shader_atomic_float_supported,
1768*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_float,
1769*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_add),
1770*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_int64_atomics_supported,
1771*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int64_t,
1772*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_add),
1773*61046927SAndroid Build Coastguard Worker                 _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
1774*61046927SAndroid Build Coastguard Worker                                            ir_intrinsic_atomic_counter_add),
1775*61046927SAndroid Build Coastguard Worker                 NULL);
1776*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_atomic_min",
1777*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1778*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint,
1779*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_min),
1780*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1781*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int,
1782*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_min),
1783*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(INTEL_shader_atomic_float_minmax_supported,
1784*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_float,
1785*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_min),
1786*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_int64_atomics_supported,
1787*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint64_t,
1788*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_min),
1789*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_int64_atomics_supported,
1790*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int64_t,
1791*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_min),
1792*61046927SAndroid Build Coastguard Worker                 _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
1793*61046927SAndroid Build Coastguard Worker                                            ir_intrinsic_atomic_counter_min),
1794*61046927SAndroid Build Coastguard Worker                 NULL);
1795*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_atomic_max",
1796*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1797*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint,
1798*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_max),
1799*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1800*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int,
1801*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_max),
1802*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(INTEL_shader_atomic_float_minmax_supported,
1803*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_float,
1804*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_max),
1805*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_int64_atomics_supported,
1806*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint64_t,
1807*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_max),
1808*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_int64_atomics_supported,
1809*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int64_t,
1810*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_max),
1811*61046927SAndroid Build Coastguard Worker                 _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
1812*61046927SAndroid Build Coastguard Worker                                            ir_intrinsic_atomic_counter_max),
1813*61046927SAndroid Build Coastguard Worker                 NULL);
1814*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_atomic_and",
1815*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1816*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint,
1817*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_and),
1818*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1819*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int,
1820*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_and),
1821*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_int64_atomics_supported,
1822*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint64_t,
1823*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_and),
1824*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_int64_atomics_supported,
1825*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int64_t,
1826*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_and),
1827*61046927SAndroid Build Coastguard Worker                 _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
1828*61046927SAndroid Build Coastguard Worker                                            ir_intrinsic_atomic_counter_and),
1829*61046927SAndroid Build Coastguard Worker                 NULL);
1830*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_atomic_or",
1831*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1832*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint,
1833*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_or),
1834*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1835*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int,
1836*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_or),
1837*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_int64_atomics_supported,
1838*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint64_t,
1839*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_or),
1840*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_int64_atomics_supported,
1841*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int64_t,
1842*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_or),
1843*61046927SAndroid Build Coastguard Worker                 _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
1844*61046927SAndroid Build Coastguard Worker                                            ir_intrinsic_atomic_counter_or),
1845*61046927SAndroid Build Coastguard Worker                 NULL);
1846*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_atomic_xor",
1847*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1848*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint,
1849*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_xor),
1850*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1851*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int,
1852*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_xor),
1853*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_int64_atomics_supported,
1854*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint64_t,
1855*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_xor),
1856*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_int64_atomics_supported,
1857*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int64_t,
1858*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_xor),
1859*61046927SAndroid Build Coastguard Worker                 _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
1860*61046927SAndroid Build Coastguard Worker                                            ir_intrinsic_atomic_counter_xor),
1861*61046927SAndroid Build Coastguard Worker                 NULL);
1862*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_atomic_exchange",
1863*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1864*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint,
1865*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_exchange),
1866*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_atomics_supported,
1867*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int,
1868*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_exchange),
1869*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(buffer_int64_atomics_supported,
1870*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int64_t,
1871*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_exchange),
1872*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic2(NV_shader_atomic_float_supported,
1873*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_float,
1874*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_exchange),
1875*61046927SAndroid Build Coastguard Worker                 _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
1876*61046927SAndroid Build Coastguard Worker                                            ir_intrinsic_atomic_counter_exchange),
1877*61046927SAndroid Build Coastguard Worker                 NULL);
1878*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_atomic_comp_swap",
1879*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic3(buffer_atomics_supported,
1880*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint,
1881*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_comp_swap),
1882*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic3(buffer_atomics_supported,
1883*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int,
1884*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_comp_swap),
1885*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic3(buffer_int64_atomics_supported,
1886*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_int64_t,
1887*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_comp_swap),
1888*61046927SAndroid Build Coastguard Worker                 _atomic_intrinsic3(INTEL_shader_atomic_float_minmax_supported,
1889*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_float,
1890*61046927SAndroid Build Coastguard Worker                                    ir_intrinsic_generic_atomic_comp_swap),
1891*61046927SAndroid Build Coastguard Worker                 _atomic_counter_intrinsic2(shader_atomic_counter_ops_or_v460_desktop,
1892*61046927SAndroid Build Coastguard Worker                                            ir_intrinsic_atomic_counter_comp_swap),
1893*61046927SAndroid Build Coastguard Worker                 NULL);
1894*61046927SAndroid Build Coastguard Worker 
1895*61046927SAndroid Build Coastguard Worker    add_image_functions(false);
1896*61046927SAndroid Build Coastguard Worker 
1897*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_memory_barrier",
1898*61046927SAndroid Build Coastguard Worker                 _memory_barrier_intrinsic(shader_image_load_store,
1899*61046927SAndroid Build Coastguard Worker                                           ir_intrinsic_memory_barrier),
1900*61046927SAndroid Build Coastguard Worker                 NULL);
1901*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_group_memory_barrier",
1902*61046927SAndroid Build Coastguard Worker                 _memory_barrier_intrinsic(compute_shader,
1903*61046927SAndroid Build Coastguard Worker                                           ir_intrinsic_group_memory_barrier),
1904*61046927SAndroid Build Coastguard Worker                 NULL);
1905*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_memory_barrier_atomic_counter",
1906*61046927SAndroid Build Coastguard Worker                 _memory_barrier_intrinsic(compute_shader_supported,
1907*61046927SAndroid Build Coastguard Worker                                           ir_intrinsic_memory_barrier_atomic_counter),
1908*61046927SAndroid Build Coastguard Worker                 NULL);
1909*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_memory_barrier_buffer",
1910*61046927SAndroid Build Coastguard Worker                 _memory_barrier_intrinsic(compute_shader_supported,
1911*61046927SAndroid Build Coastguard Worker                                           ir_intrinsic_memory_barrier_buffer),
1912*61046927SAndroid Build Coastguard Worker                 NULL);
1913*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_memory_barrier_image",
1914*61046927SAndroid Build Coastguard Worker                 _memory_barrier_intrinsic(compute_shader_supported,
1915*61046927SAndroid Build Coastguard Worker                                           ir_intrinsic_memory_barrier_image),
1916*61046927SAndroid Build Coastguard Worker                 NULL);
1917*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_memory_barrier_shared",
1918*61046927SAndroid Build Coastguard Worker                 _memory_barrier_intrinsic(compute_shader,
1919*61046927SAndroid Build Coastguard Worker                                           ir_intrinsic_memory_barrier_shared),
1920*61046927SAndroid Build Coastguard Worker                 NULL);
1921*61046927SAndroid Build Coastguard Worker 
1922*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_begin_invocation_interlock",
1923*61046927SAndroid Build Coastguard Worker                 _invocation_interlock_intrinsic(
1924*61046927SAndroid Build Coastguard Worker                    supports_arb_fragment_shader_interlock,
1925*61046927SAndroid Build Coastguard Worker                    ir_intrinsic_begin_invocation_interlock), NULL);
1926*61046927SAndroid Build Coastguard Worker 
1927*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_end_invocation_interlock",
1928*61046927SAndroid Build Coastguard Worker                 _invocation_interlock_intrinsic(
1929*61046927SAndroid Build Coastguard Worker                    supports_arb_fragment_shader_interlock,
1930*61046927SAndroid Build Coastguard Worker                    ir_intrinsic_end_invocation_interlock), NULL);
1931*61046927SAndroid Build Coastguard Worker 
1932*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_shader_clock",
1933*61046927SAndroid Build Coastguard Worker                 _shader_clock_intrinsic(shader_clock,
1934*61046927SAndroid Build Coastguard Worker                                         &glsl_type_builtin_uvec2),
1935*61046927SAndroid Build Coastguard Worker                 NULL);
1936*61046927SAndroid Build Coastguard Worker 
1937*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_vote_all",
1938*61046927SAndroid Build Coastguard Worker                 _vote_intrinsic(&glsl_type_builtin_bool, vote_or_v460_desktop,
1939*61046927SAndroid Build Coastguard Worker                                 ir_intrinsic_vote_all),
1940*61046927SAndroid Build Coastguard Worker                 NULL);
1941*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_vote_any",
1942*61046927SAndroid Build Coastguard Worker                 _vote_intrinsic(&glsl_type_builtin_bool, vote_or_v460_desktop,
1943*61046927SAndroid Build Coastguard Worker                                 ir_intrinsic_vote_any),
1944*61046927SAndroid Build Coastguard Worker                 NULL);
1945*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_vote_eq",
1946*61046927SAndroid Build Coastguard Worker                 FIUBD_AVAIL(_vote_intrinsic, vote_or_v460_desktop, ir_intrinsic_vote_eq),
1947*61046927SAndroid Build Coastguard Worker                 NULL);
1948*61046927SAndroid Build Coastguard Worker 
1949*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_ballot",
1950*61046927SAndroid Build Coastguard Worker                 _ballot_intrinsic(&glsl_type_builtin_uint64_t),
1951*61046927SAndroid Build Coastguard Worker                 _ballot_intrinsic(&glsl_type_builtin_uvec4),
1952*61046927SAndroid Build Coastguard Worker                 NULL);
1953*61046927SAndroid Build Coastguard Worker 
1954*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_inverse_ballot", _inverse_ballot_intrinsic(), NULL);
1955*61046927SAndroid Build Coastguard Worker 
1956*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_ballot_bit_extract", _ballot_bit_extract_intrinsic(), NULL);
1957*61046927SAndroid Build Coastguard Worker 
1958*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_ballot_bit_count",
1959*61046927SAndroid Build Coastguard Worker                 _ballot_bit_intrinsic(ir_intrinsic_ballot_bit_count), NULL);
1960*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_ballot_inclusive_bit_count",
1961*61046927SAndroid Build Coastguard Worker                 _ballot_bit_intrinsic(ir_intrinsic_ballot_inclusive_bit_count), NULL);
1962*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_ballot_exclusive_bit_count",
1963*61046927SAndroid Build Coastguard Worker                 _ballot_bit_intrinsic(ir_intrinsic_ballot_exclusive_bit_count), NULL);
1964*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_ballot_find_lsb",
1965*61046927SAndroid Build Coastguard Worker                 _ballot_bit_intrinsic(ir_intrinsic_ballot_find_lsb), NULL);
1966*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_ballot_find_msb",
1967*61046927SAndroid Build Coastguard Worker                 _ballot_bit_intrinsic(ir_intrinsic_ballot_find_msb), NULL);
1968*61046927SAndroid Build Coastguard Worker 
1969*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_read_invocation", FIUBD(_read_invocation_intrinsic), NULL);
1970*61046927SAndroid Build Coastguard Worker 
1971*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_read_first_invocation",
1972*61046927SAndroid Build Coastguard Worker                 FIUBD(_read_first_invocation_intrinsic), NULL);
1973*61046927SAndroid Build Coastguard Worker 
1974*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_helper_invocation",
1975*61046927SAndroid Build Coastguard Worker                 _helper_invocation_intrinsic(), NULL);
1976*61046927SAndroid Build Coastguard Worker 
1977*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_is_sparse_texels_resident",
1978*61046927SAndroid Build Coastguard Worker                 _is_sparse_texels_resident_intrinsic(), NULL);
1979*61046927SAndroid Build Coastguard Worker 
1980*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_subgroup_barrier",
1981*61046927SAndroid Build Coastguard Worker                 _subgroup_barrier_intrinsic(ir_intrinsic_subgroup_barrier, subgroup_basic),
1982*61046927SAndroid Build Coastguard Worker                 NULL);
1983*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_subgroup_memory_barrier",
1984*61046927SAndroid Build Coastguard Worker                 _subgroup_barrier_intrinsic(ir_intrinsic_subgroup_memory_barrier,
1985*61046927SAndroid Build Coastguard Worker                                             subgroup_basic),
1986*61046927SAndroid Build Coastguard Worker                 NULL);
1987*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_subgroup_memory_barrier_buffer",
1988*61046927SAndroid Build Coastguard Worker                 _subgroup_barrier_intrinsic(ir_intrinsic_subgroup_memory_barrier_buffer,
1989*61046927SAndroid Build Coastguard Worker                                             subgroup_basic),
1990*61046927SAndroid Build Coastguard Worker                 NULL);
1991*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_subgroup_memory_barrier_shared",
1992*61046927SAndroid Build Coastguard Worker                 _subgroup_barrier_intrinsic(ir_intrinsic_subgroup_memory_barrier_shared,
1993*61046927SAndroid Build Coastguard Worker                                             compute_shader_and_subgroup_basic),
1994*61046927SAndroid Build Coastguard Worker                 NULL);
1995*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_subgroup_memory_barrier_image",
1996*61046927SAndroid Build Coastguard Worker                 _subgroup_barrier_intrinsic(ir_intrinsic_subgroup_memory_barrier_image,
1997*61046927SAndroid Build Coastguard Worker                                             subgroup_basic),
1998*61046927SAndroid Build Coastguard Worker                 NULL);
1999*61046927SAndroid Build Coastguard Worker 
2000*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_elect", _elect_intrinsic(), NULL);
2001*61046927SAndroid Build Coastguard Worker 
2002*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_shuffle", FIUBD(_shuffle_intrinsic), NULL);
2003*61046927SAndroid Build Coastguard Worker 
2004*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_shuffle_xor", FIUBD(_shuffle_xor_intrinsic), NULL);
2005*61046927SAndroid Build Coastguard Worker 
2006*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_shuffle_up", FIUBD(_shuffle_up_intrinsic), NULL);
2007*61046927SAndroid Build Coastguard Worker 
2008*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_shuffle_down", FIUBD(_shuffle_down_intrinsic), NULL);
2009*61046927SAndroid Build Coastguard Worker 
2010*61046927SAndroid Build Coastguard Worker #define SUBGROUP_ARITH_INTRINSICS(ext, group) \
2011*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_" #group "_add", \
2012*61046927SAndroid Build Coastguard Worker                 FIUD(_subgroup_##ext##_intrinsic, ir_intrinsic_##group##_add), NULL); \
2013*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_" #group "_mul", \
2014*61046927SAndroid Build Coastguard Worker                 FIUD(_subgroup_##ext##_intrinsic, ir_intrinsic_##group##_mul), NULL); \
2015*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_" #group "_min", \
2016*61046927SAndroid Build Coastguard Worker                 FIUD(_subgroup_##ext##_intrinsic, ir_intrinsic_##group##_min), NULL); \
2017*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_" #group "_max", \
2018*61046927SAndroid Build Coastguard Worker                 FIUD(_subgroup_##ext##_intrinsic, ir_intrinsic_##group##_max), NULL); \
2019*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_" #group "_and", \
2020*61046927SAndroid Build Coastguard Worker                 IUB(_subgroup_##ext##_intrinsic, ir_intrinsic_##group##_and), NULL); \
2021*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_" #group "_or", \
2022*61046927SAndroid Build Coastguard Worker                 IUB(_subgroup_##ext##_intrinsic, ir_intrinsic_##group##_or), NULL); \
2023*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_" #group "_xor", \
2024*61046927SAndroid Build Coastguard Worker                 IUB(_subgroup_##ext##_intrinsic, ir_intrinsic_##group##_xor), NULL)
2025*61046927SAndroid Build Coastguard Worker 
2026*61046927SAndroid Build Coastguard Worker    SUBGROUP_ARITH_INTRINSICS(arithmetic, reduce);
2027*61046927SAndroid Build Coastguard Worker    SUBGROUP_ARITH_INTRINSICS(arithmetic, inclusive);
2028*61046927SAndroid Build Coastguard Worker    SUBGROUP_ARITH_INTRINSICS(arithmetic, exclusive);
2029*61046927SAndroid Build Coastguard Worker 
2030*61046927SAndroid Build Coastguard Worker    SUBGROUP_ARITH_INTRINSICS(clustered, clustered);
2031*61046927SAndroid Build Coastguard Worker 
2032*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_quad_broadcast", FIUBD(_quad_broadcast_intrinsic), NULL);
2033*61046927SAndroid Build Coastguard Worker 
2034*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_quad_swap_horizontal",
2035*61046927SAndroid Build Coastguard Worker                 FIUBD(_quad_swap_intrinsic, ir_intrinsic_quad_swap_horizontal), NULL);
2036*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_quad_swap_vertical",
2037*61046927SAndroid Build Coastguard Worker                 FIUBD(_quad_swap_intrinsic, ir_intrinsic_quad_swap_vertical), NULL);
2038*61046927SAndroid Build Coastguard Worker    add_function("__intrinsic_quad_swap_diagonal",
2039*61046927SAndroid Build Coastguard Worker                 FIUBD(_quad_swap_intrinsic, ir_intrinsic_quad_swap_diagonal), NULL);
2040*61046927SAndroid Build Coastguard Worker }
2041*61046927SAndroid Build Coastguard Worker 
2042*61046927SAndroid Build Coastguard Worker /**
2043*61046927SAndroid Build Coastguard Worker  * Create ir_function and ir_function_signature objects for each built-in.
2044*61046927SAndroid Build Coastguard Worker  *
2045*61046927SAndroid Build Coastguard Worker  * Contains a list of every available built-in.
2046*61046927SAndroid Build Coastguard Worker  */
2047*61046927SAndroid Build Coastguard Worker void
create_builtins()2048*61046927SAndroid Build Coastguard Worker builtin_builder::create_builtins()
2049*61046927SAndroid Build Coastguard Worker {
2050*61046927SAndroid Build Coastguard Worker #define F(NAME)                                 \
2051*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                          \
2052*61046927SAndroid Build Coastguard Worker                 _##NAME(&glsl_type_builtin_float), \
2053*61046927SAndroid Build Coastguard Worker                 _##NAME(&glsl_type_builtin_vec2),  \
2054*61046927SAndroid Build Coastguard Worker                 _##NAME(&glsl_type_builtin_vec3),  \
2055*61046927SAndroid Build Coastguard Worker                 _##NAME(&glsl_type_builtin_vec4),  \
2056*61046927SAndroid Build Coastguard Worker                 NULL);
2057*61046927SAndroid Build Coastguard Worker 
2058*61046927SAndroid Build Coastguard Worker #define FHF(NAME)                                 \
2059*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                          \
2060*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_float), \
2061*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec2),  \
2062*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec3),  \
2063*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec4),  \
2064*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_float16_t), \
2065*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec2),  \
2066*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec3),  \
2067*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec4),  \
2068*61046927SAndroid Build Coastguard Worker                 NULL);
2069*61046927SAndroid Build Coastguard Worker 
2070*61046927SAndroid Build Coastguard Worker #define FHF_DERIVATIVES(NAME)                                               \
2071*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                                                      \
2072*61046927SAndroid Build Coastguard Worker                 _##NAME(derivatives, &glsl_type_builtin_float),                \
2073*61046927SAndroid Build Coastguard Worker                 _##NAME(derivatives, &glsl_type_builtin_vec2),                 \
2074*61046927SAndroid Build Coastguard Worker                 _##NAME(derivatives, &glsl_type_builtin_vec3),                 \
2075*61046927SAndroid Build Coastguard Worker                 _##NAME(derivatives, &glsl_type_builtin_vec4),                 \
2076*61046927SAndroid Build Coastguard Worker                 _##NAME(half_float_derivatives, &glsl_type_builtin_float16_t), \
2077*61046927SAndroid Build Coastguard Worker                 _##NAME(half_float_derivatives, &glsl_type_builtin_f16vec2),   \
2078*61046927SAndroid Build Coastguard Worker                 _##NAME(half_float_derivatives, &glsl_type_builtin_f16vec3),   \
2079*61046927SAndroid Build Coastguard Worker                 _##NAME(half_float_derivatives, &glsl_type_builtin_f16vec4),   \
2080*61046927SAndroid Build Coastguard Worker                 NULL);
2081*61046927SAndroid Build Coastguard Worker 
2082*61046927SAndroid Build Coastguard Worker #define FHF_DERIVATIVE_CONTROL(NAME)                                               \
2083*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                                                             \
2084*61046927SAndroid Build Coastguard Worker                 _##NAME(derivative_control, &glsl_type_builtin_float),                \
2085*61046927SAndroid Build Coastguard Worker                 _##NAME(derivative_control, &glsl_type_builtin_vec2),                 \
2086*61046927SAndroid Build Coastguard Worker                 _##NAME(derivative_control, &glsl_type_builtin_vec3),                 \
2087*61046927SAndroid Build Coastguard Worker                 _##NAME(derivative_control, &glsl_type_builtin_vec4),                 \
2088*61046927SAndroid Build Coastguard Worker                 _##NAME(half_float_derivative_control, &glsl_type_builtin_float16_t), \
2089*61046927SAndroid Build Coastguard Worker                 _##NAME(half_float_derivative_control, &glsl_type_builtin_f16vec2),   \
2090*61046927SAndroid Build Coastguard Worker                 _##NAME(half_float_derivative_control, &glsl_type_builtin_f16vec3),   \
2091*61046927SAndroid Build Coastguard Worker                 _##NAME(half_float_derivative_control, &glsl_type_builtin_f16vec4),   \
2092*61046927SAndroid Build Coastguard Worker                 NULL);
2093*61046927SAndroid Build Coastguard Worker 
2094*61046927SAndroid Build Coastguard Worker #define FHF130(NAME)                                 \
2095*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                          \
2096*61046927SAndroid Build Coastguard Worker                 _##NAME(v130, &glsl_type_builtin_float), \
2097*61046927SAndroid Build Coastguard Worker                 _##NAME(v130, &glsl_type_builtin_vec2),  \
2098*61046927SAndroid Build Coastguard Worker                 _##NAME(v130, &glsl_type_builtin_vec3),  \
2099*61046927SAndroid Build Coastguard Worker                 _##NAME(v130, &glsl_type_builtin_vec4),  \
2100*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_float16_t), \
2101*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec2),  \
2102*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec3),  \
2103*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec4),  \
2104*61046927SAndroid Build Coastguard Worker                 NULL);
2105*61046927SAndroid Build Coastguard Worker 
2106*61046927SAndroid Build Coastguard Worker #define FDHF(NAME)                                 \
2107*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                          \
2108*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_float), \
2109*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec2),  \
2110*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec3),  \
2111*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec4),  \
2112*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_double),  \
2113*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec2),    \
2114*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec3),     \
2115*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec4),      \
2116*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_float16_t), \
2117*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec2),  \
2118*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec3),  \
2119*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec4),  \
2120*61046927SAndroid Build Coastguard Worker                 NULL);
2121*61046927SAndroid Build Coastguard Worker 
2122*61046927SAndroid Build Coastguard Worker #define FDHF130(NAME)                                                      \
2123*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                                                     \
2124*61046927SAndroid Build Coastguard Worker                 _##NAME(v130, &glsl_type_builtin_float),                      \
2125*61046927SAndroid Build Coastguard Worker                 _##NAME(v130, &glsl_type_builtin_vec2),                       \
2126*61046927SAndroid Build Coastguard Worker                 _##NAME(v130, &glsl_type_builtin_vec3),                       \
2127*61046927SAndroid Build Coastguard Worker                 _##NAME(v130, &glsl_type_builtin_vec4),                       \
2128*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_double),                     \
2129*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec2),                      \
2130*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec3),                      \
2131*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec4),                      \
2132*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_float16_t), \
2133*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec2),   \
2134*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec3),   \
2135*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec4),   \
2136*61046927SAndroid Build Coastguard Worker                 NULL);
2137*61046927SAndroid Build Coastguard Worker 
2138*61046927SAndroid Build Coastguard Worker #define FDHF130GS4(NAME)                                                   \
2139*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                                                     \
2140*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_float),    \
2141*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_vec2),     \
2142*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_vec3),     \
2143*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_vec4),     \
2144*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_double),                  \
2145*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec2),                      \
2146*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec3),                      \
2147*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec4),                      \
2148*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_float16_t), \
2149*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec2),   \
2150*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec3),   \
2151*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec4),   \
2152*61046927SAndroid Build Coastguard Worker                 NULL);
2153*61046927SAndroid Build Coastguard Worker 
2154*61046927SAndroid Build Coastguard Worker #define FDHFGS5(NAME)                                                      \
2155*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                                                     \
2156*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader5_es, &glsl_type_builtin_float),            \
2157*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader5_es, &glsl_type_builtin_vec2),             \
2158*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader5_es, &glsl_type_builtin_vec3),             \
2159*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader5_es, &glsl_type_builtin_vec4),             \
2160*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_double),                     \
2161*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec2),                      \
2162*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec3),                      \
2163*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec4),                      \
2164*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_float16_t), \
2165*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec2),   \
2166*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec3),   \
2167*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec4),   \
2168*61046927SAndroid Build Coastguard Worker                 NULL);
2169*61046927SAndroid Build Coastguard Worker 
2170*61046927SAndroid Build Coastguard Worker #define FI64HF(NAME)                                \
2171*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                          \
2172*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_float), \
2173*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec2),  \
2174*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec3),  \
2175*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec4),  \
2176*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_int),   \
2177*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec2), \
2178*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec3), \
2179*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec4), \
2180*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_double), \
2181*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec2),  \
2182*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec3),  \
2183*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec4),  \
2184*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_int64_t), \
2185*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec2),  \
2186*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec3),  \
2187*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec4),  \
2188*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_float16_t), \
2189*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec2),  \
2190*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec3),  \
2191*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec4),  \
2192*61046927SAndroid Build Coastguard Worker                 NULL);
2193*61046927SAndroid Build Coastguard Worker 
2194*61046927SAndroid Build Coastguard Worker #define FIUDHF_VEC(NAME)                                          \
2195*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                                            \
2196*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec2),  \
2197*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec3),  \
2198*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec4),  \
2199*61046927SAndroid Build Coastguard Worker                                                                   \
2200*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec2), \
2201*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec3), \
2202*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec4), \
2203*61046927SAndroid Build Coastguard Worker                                                                   \
2204*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uvec2), \
2205*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uvec3), \
2206*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uvec4), \
2207*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec2),  \
2208*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec3),  \
2209*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec4),  \
2210*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_int64_t), \
2211*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec2),  \
2212*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec3),  \
2213*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec4),  \
2214*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_uint64_t), \
2215*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_u64vec2),  \
2216*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_u64vec3),  \
2217*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_u64vec4),  \
2218*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec2),  \
2219*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec3),  \
2220*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec4),  \
2221*61046927SAndroid Build Coastguard Worker                 NULL);
2222*61046927SAndroid Build Coastguard Worker 
2223*61046927SAndroid Build Coastguard Worker #define IU(NAME)                                \
2224*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                          \
2225*61046927SAndroid Build Coastguard Worker                 _##NAME(&glsl_type_builtin_int),   \
2226*61046927SAndroid Build Coastguard Worker                 _##NAME(&glsl_type_builtin_ivec2), \
2227*61046927SAndroid Build Coastguard Worker                 _##NAME(&glsl_type_builtin_ivec3), \
2228*61046927SAndroid Build Coastguard Worker                 _##NAME(&glsl_type_builtin_ivec4), \
2229*61046927SAndroid Build Coastguard Worker                                                 \
2230*61046927SAndroid Build Coastguard Worker                 _##NAME(&glsl_type_builtin_uint),  \
2231*61046927SAndroid Build Coastguard Worker                 _##NAME(&glsl_type_builtin_uvec2), \
2232*61046927SAndroid Build Coastguard Worker                 _##NAME(&glsl_type_builtin_uvec3), \
2233*61046927SAndroid Build Coastguard Worker                 _##NAME(&glsl_type_builtin_uvec4), \
2234*61046927SAndroid Build Coastguard Worker                 NULL);
2235*61046927SAndroid Build Coastguard Worker 
2236*61046927SAndroid Build Coastguard Worker #define FIUBDHF_VEC(NAME)                                           \
2237*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                                            \
2238*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec2),  \
2239*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec3),  \
2240*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec4),  \
2241*61046927SAndroid Build Coastguard Worker                                                                   \
2242*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec2), \
2243*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec3), \
2244*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec4), \
2245*61046927SAndroid Build Coastguard Worker                                                                   \
2246*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uvec2), \
2247*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uvec3), \
2248*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uvec4), \
2249*61046927SAndroid Build Coastguard Worker                                                                   \
2250*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_bvec2), \
2251*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_bvec3), \
2252*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_bvec4), \
2253*61046927SAndroid Build Coastguard Worker                                                                   \
2254*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec2), \
2255*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec3), \
2256*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec4), \
2257*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_int64_t), \
2258*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec2),  \
2259*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec3),  \
2260*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec4),  \
2261*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_uint64_t), \
2262*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_u64vec2),  \
2263*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_u64vec3),  \
2264*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_u64vec4),  \
2265*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec2),  \
2266*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec3),  \
2267*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec4),  \
2268*61046927SAndroid Build Coastguard Worker                 NULL);
2269*61046927SAndroid Build Coastguard Worker 
2270*61046927SAndroid Build Coastguard Worker #define FIUDHF2_MIXED(NAME)                                                                           \
2271*61046927SAndroid Build Coastguard Worker    add_function(#NAME,                                                                                \
2272*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_float, &glsl_type_builtin_float),        \
2273*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec2,  &glsl_type_builtin_float),        \
2274*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec3,  &glsl_type_builtin_float),        \
2275*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec4,  &glsl_type_builtin_float),        \
2276*61046927SAndroid Build Coastguard Worker                                                                                                       \
2277*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec2,  &glsl_type_builtin_vec2),         \
2278*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec3,  &glsl_type_builtin_vec3),         \
2279*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_vec4,  &glsl_type_builtin_vec4),         \
2280*61046927SAndroid Build Coastguard Worker                                                                                                       \
2281*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_int,   &glsl_type_builtin_int),          \
2282*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec2, &glsl_type_builtin_int),          \
2283*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec3, &glsl_type_builtin_int),          \
2284*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec4, &glsl_type_builtin_int),          \
2285*61046927SAndroid Build Coastguard Worker                                                                                                       \
2286*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),        \
2287*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec3),        \
2288*61046927SAndroid Build Coastguard Worker                 _##NAME(always_available, &glsl_type_builtin_ivec4, &glsl_type_builtin_ivec4),        \
2289*61046927SAndroid Build Coastguard Worker                                                                                                       \
2290*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uint,  &glsl_type_builtin_uint),      \
2291*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uvec2, &glsl_type_builtin_uint),      \
2292*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uvec3, &glsl_type_builtin_uint),      \
2293*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uvec4, &glsl_type_builtin_uint),      \
2294*61046927SAndroid Build Coastguard Worker                                                                                                       \
2295*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uvec2, &glsl_type_builtin_uvec2),     \
2296*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uvec3, &glsl_type_builtin_uvec3),     \
2297*61046927SAndroid Build Coastguard Worker                 _##NAME(v130_or_gpu_shader4, &glsl_type_builtin_uvec4, &glsl_type_builtin_uvec4),     \
2298*61046927SAndroid Build Coastguard Worker                                                                                                       \
2299*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_double, &glsl_type_builtin_double),                  \
2300*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec2, &glsl_type_builtin_double),                   \
2301*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec3, &glsl_type_builtin_double),                   \
2302*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec4, &glsl_type_builtin_double),                   \
2303*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec2, &glsl_type_builtin_dvec2),                    \
2304*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec3, &glsl_type_builtin_dvec3),                    \
2305*61046927SAndroid Build Coastguard Worker                 _##NAME(fp64, &glsl_type_builtin_dvec4, &glsl_type_builtin_dvec4),                    \
2306*61046927SAndroid Build Coastguard Worker                                                                                                       \
2307*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_int64_t, &glsl_type_builtin_int64_t),         \
2308*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec2, &glsl_type_builtin_int64_t),         \
2309*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec3, &glsl_type_builtin_int64_t),         \
2310*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec4, &glsl_type_builtin_int64_t),         \
2311*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec2, &glsl_type_builtin_i64vec2),         \
2312*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec3, &glsl_type_builtin_i64vec3),         \
2313*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_i64vec4, &glsl_type_builtin_i64vec4),         \
2314*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_uint64_t, &glsl_type_builtin_uint64_t),       \
2315*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_u64vec2, &glsl_type_builtin_uint64_t),        \
2316*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_u64vec3, &glsl_type_builtin_uint64_t),        \
2317*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_u64vec4, &glsl_type_builtin_uint64_t),        \
2318*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_u64vec2, &glsl_type_builtin_u64vec2),         \
2319*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_u64vec3, &glsl_type_builtin_u64vec3),         \
2320*61046927SAndroid Build Coastguard Worker                 _##NAME(int64_avail, &glsl_type_builtin_u64vec4, &glsl_type_builtin_u64vec4),         \
2321*61046927SAndroid Build Coastguard Worker                                                                                                       \
2322*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_float16_t, &glsl_type_builtin_float16_t), \
2323*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec2, &glsl_type_builtin_float16_t),   \
2324*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec3, &glsl_type_builtin_float16_t),   \
2325*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec4, &glsl_type_builtin_float16_t),   \
2326*61046927SAndroid Build Coastguard Worker                                                                                                             \
2327*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec2, &glsl_type_builtin_f16vec2),     \
2328*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec3, &glsl_type_builtin_f16vec3),     \
2329*61046927SAndroid Build Coastguard Worker                 _##NAME(gpu_shader_half_float, &glsl_type_builtin_f16vec4, &glsl_type_builtin_f16vec4),     \
2330*61046927SAndroid Build Coastguard Worker                 NULL);
2331*61046927SAndroid Build Coastguard Worker 
2332*61046927SAndroid Build Coastguard Worker    FHF(radians)
2333*61046927SAndroid Build Coastguard Worker    FHF(degrees)
2334*61046927SAndroid Build Coastguard Worker    FHF(sin)
2335*61046927SAndroid Build Coastguard Worker    FHF(cos)
2336*61046927SAndroid Build Coastguard Worker    FHF(tan)
2337*61046927SAndroid Build Coastguard Worker    FHF(asin)
2338*61046927SAndroid Build Coastguard Worker    FHF(acos)
2339*61046927SAndroid Build Coastguard Worker 
2340*61046927SAndroid Build Coastguard Worker    add_function("atan",
2341*61046927SAndroid Build Coastguard Worker                 _atan(always_available, &glsl_type_builtin_float),
2342*61046927SAndroid Build Coastguard Worker                 _atan(always_available, &glsl_type_builtin_vec2),
2343*61046927SAndroid Build Coastguard Worker                 _atan(always_available, &glsl_type_builtin_vec3),
2344*61046927SAndroid Build Coastguard Worker                 _atan(always_available, &glsl_type_builtin_vec4),
2345*61046927SAndroid Build Coastguard Worker                 _atan2(always_available, &glsl_type_builtin_float),
2346*61046927SAndroid Build Coastguard Worker                 _atan2(always_available, &glsl_type_builtin_vec2),
2347*61046927SAndroid Build Coastguard Worker                 _atan2(always_available, &glsl_type_builtin_vec3),
2348*61046927SAndroid Build Coastguard Worker                 _atan2(always_available, &glsl_type_builtin_vec4),
2349*61046927SAndroid Build Coastguard Worker                 _atan(gpu_shader_half_float, &glsl_type_builtin_float16_t),
2350*61046927SAndroid Build Coastguard Worker                 _atan(gpu_shader_half_float, &glsl_type_builtin_f16vec2),
2351*61046927SAndroid Build Coastguard Worker                 _atan(gpu_shader_half_float, &glsl_type_builtin_f16vec3),
2352*61046927SAndroid Build Coastguard Worker                 _atan(gpu_shader_half_float, &glsl_type_builtin_f16vec4),
2353*61046927SAndroid Build Coastguard Worker                 _atan2(gpu_shader_half_float, &glsl_type_builtin_float16_t),
2354*61046927SAndroid Build Coastguard Worker                 _atan2(gpu_shader_half_float, &glsl_type_builtin_f16vec2),
2355*61046927SAndroid Build Coastguard Worker                 _atan2(gpu_shader_half_float, &glsl_type_builtin_f16vec3),
2356*61046927SAndroid Build Coastguard Worker                 _atan2(gpu_shader_half_float, &glsl_type_builtin_f16vec4),
2357*61046927SAndroid Build Coastguard Worker                 NULL);
2358*61046927SAndroid Build Coastguard Worker 
2359*61046927SAndroid Build Coastguard Worker    FHF130(sinh)
2360*61046927SAndroid Build Coastguard Worker    FHF130(cosh)
2361*61046927SAndroid Build Coastguard Worker    FHF130(tanh)
2362*61046927SAndroid Build Coastguard Worker    FHF130(asinh)
2363*61046927SAndroid Build Coastguard Worker    FHF130(acosh)
2364*61046927SAndroid Build Coastguard Worker    FHF130(atanh)
2365*61046927SAndroid Build Coastguard Worker    FHF(pow)
2366*61046927SAndroid Build Coastguard Worker    FHF(exp)
2367*61046927SAndroid Build Coastguard Worker    FHF(log)
2368*61046927SAndroid Build Coastguard Worker    FHF(exp2)
2369*61046927SAndroid Build Coastguard Worker    FHF(log2)
2370*61046927SAndroid Build Coastguard Worker    FDHF(sqrt)
2371*61046927SAndroid Build Coastguard Worker    FDHF(inversesqrt)
2372*61046927SAndroid Build Coastguard Worker    FI64HF(abs)
2373*61046927SAndroid Build Coastguard Worker    FI64HF(sign)
2374*61046927SAndroid Build Coastguard Worker    FDHF(floor)
2375*61046927SAndroid Build Coastguard Worker    FDHF130(trunc)
2376*61046927SAndroid Build Coastguard Worker    FDHF130GS4(round)
2377*61046927SAndroid Build Coastguard Worker    FDHF130(roundEven)
2378*61046927SAndroid Build Coastguard Worker    FDHF(ceil)
2379*61046927SAndroid Build Coastguard Worker    FDHF(fract)
2380*61046927SAndroid Build Coastguard Worker 
2381*61046927SAndroid Build Coastguard Worker    add_function("truncate",
2382*61046927SAndroid Build Coastguard Worker                 _truncate(gpu_shader4, &glsl_type_builtin_float),
2383*61046927SAndroid Build Coastguard Worker                 _truncate(gpu_shader4, &glsl_type_builtin_vec2),
2384*61046927SAndroid Build Coastguard Worker                 _truncate(gpu_shader4, &glsl_type_builtin_vec3),
2385*61046927SAndroid Build Coastguard Worker                 _truncate(gpu_shader4, &glsl_type_builtin_vec4),
2386*61046927SAndroid Build Coastguard Worker                 NULL);
2387*61046927SAndroid Build Coastguard Worker 
2388*61046927SAndroid Build Coastguard Worker 
2389*61046927SAndroid Build Coastguard Worker    add_function("mod",
2390*61046927SAndroid Build Coastguard Worker                 _mod(always_available, &glsl_type_builtin_float, &glsl_type_builtin_float),
2391*61046927SAndroid Build Coastguard Worker                 _mod(always_available, &glsl_type_builtin_vec2,  &glsl_type_builtin_float),
2392*61046927SAndroid Build Coastguard Worker                 _mod(always_available, &glsl_type_builtin_vec3,  &glsl_type_builtin_float),
2393*61046927SAndroid Build Coastguard Worker                 _mod(always_available, &glsl_type_builtin_vec4,  &glsl_type_builtin_float),
2394*61046927SAndroid Build Coastguard Worker 
2395*61046927SAndroid Build Coastguard Worker                 _mod(always_available, &glsl_type_builtin_vec2,  &glsl_type_builtin_vec2),
2396*61046927SAndroid Build Coastguard Worker                 _mod(always_available, &glsl_type_builtin_vec3,  &glsl_type_builtin_vec3),
2397*61046927SAndroid Build Coastguard Worker                 _mod(always_available, &glsl_type_builtin_vec4,  &glsl_type_builtin_vec4),
2398*61046927SAndroid Build Coastguard Worker 
2399*61046927SAndroid Build Coastguard Worker                 _mod(gpu_shader_half_float, &glsl_type_builtin_float16_t, &glsl_type_builtin_float16_t),
2400*61046927SAndroid Build Coastguard Worker                 _mod(gpu_shader_half_float, &glsl_type_builtin_f16vec2,  &glsl_type_builtin_float16_t),
2401*61046927SAndroid Build Coastguard Worker                 _mod(gpu_shader_half_float, &glsl_type_builtin_f16vec3,  &glsl_type_builtin_float16_t),
2402*61046927SAndroid Build Coastguard Worker                 _mod(gpu_shader_half_float, &glsl_type_builtin_f16vec4,  &glsl_type_builtin_float16_t),
2403*61046927SAndroid Build Coastguard Worker 
2404*61046927SAndroid Build Coastguard Worker                 _mod(gpu_shader_half_float, &glsl_type_builtin_f16vec2,  &glsl_type_builtin_f16vec2),
2405*61046927SAndroid Build Coastguard Worker                 _mod(gpu_shader_half_float, &glsl_type_builtin_f16vec3,  &glsl_type_builtin_f16vec3),
2406*61046927SAndroid Build Coastguard Worker                 _mod(gpu_shader_half_float, &glsl_type_builtin_f16vec4,  &glsl_type_builtin_f16vec4),
2407*61046927SAndroid Build Coastguard Worker 
2408*61046927SAndroid Build Coastguard Worker                 _mod(fp64, &glsl_type_builtin_double, &glsl_type_builtin_double),
2409*61046927SAndroid Build Coastguard Worker                 _mod(fp64, &glsl_type_builtin_dvec2,  &glsl_type_builtin_double),
2410*61046927SAndroid Build Coastguard Worker                 _mod(fp64, &glsl_type_builtin_dvec3,  &glsl_type_builtin_double),
2411*61046927SAndroid Build Coastguard Worker                 _mod(fp64, &glsl_type_builtin_dvec4,  &glsl_type_builtin_double),
2412*61046927SAndroid Build Coastguard Worker 
2413*61046927SAndroid Build Coastguard Worker                 _mod(fp64, &glsl_type_builtin_dvec2,  &glsl_type_builtin_dvec2),
2414*61046927SAndroid Build Coastguard Worker                 _mod(fp64, &glsl_type_builtin_dvec3,  &glsl_type_builtin_dvec3),
2415*61046927SAndroid Build Coastguard Worker                 _mod(fp64, &glsl_type_builtin_dvec4,  &glsl_type_builtin_dvec4),
2416*61046927SAndroid Build Coastguard Worker                 NULL);
2417*61046927SAndroid Build Coastguard Worker 
2418*61046927SAndroid Build Coastguard Worker    FDHF130(modf)
2419*61046927SAndroid Build Coastguard Worker 
2420*61046927SAndroid Build Coastguard Worker    FIUDHF2_MIXED(min)
2421*61046927SAndroid Build Coastguard Worker    FIUDHF2_MIXED(max)
2422*61046927SAndroid Build Coastguard Worker    FIUDHF2_MIXED(clamp)
2423*61046927SAndroid Build Coastguard Worker 
2424*61046927SAndroid Build Coastguard Worker    add_function("mix",
2425*61046927SAndroid Build Coastguard Worker                 _mix_lrp(always_available, &glsl_type_builtin_float, &glsl_type_builtin_float),
2426*61046927SAndroid Build Coastguard Worker                 _mix_lrp(always_available, &glsl_type_builtin_vec2,  &glsl_type_builtin_float),
2427*61046927SAndroid Build Coastguard Worker                 _mix_lrp(always_available, &glsl_type_builtin_vec3,  &glsl_type_builtin_float),
2428*61046927SAndroid Build Coastguard Worker                 _mix_lrp(always_available, &glsl_type_builtin_vec4,  &glsl_type_builtin_float),
2429*61046927SAndroid Build Coastguard Worker 
2430*61046927SAndroid Build Coastguard Worker                 _mix_lrp(always_available, &glsl_type_builtin_vec2,  &glsl_type_builtin_vec2),
2431*61046927SAndroid Build Coastguard Worker                 _mix_lrp(always_available, &glsl_type_builtin_vec3,  &glsl_type_builtin_vec3),
2432*61046927SAndroid Build Coastguard Worker                 _mix_lrp(always_available, &glsl_type_builtin_vec4,  &glsl_type_builtin_vec4),
2433*61046927SAndroid Build Coastguard Worker 
2434*61046927SAndroid Build Coastguard Worker                 _mix_lrp(gpu_shader_half_float, &glsl_type_builtin_float16_t, &glsl_type_builtin_float16_t),
2435*61046927SAndroid Build Coastguard Worker                 _mix_lrp(gpu_shader_half_float, &glsl_type_builtin_f16vec2,  &glsl_type_builtin_float16_t),
2436*61046927SAndroid Build Coastguard Worker                 _mix_lrp(gpu_shader_half_float, &glsl_type_builtin_f16vec3,  &glsl_type_builtin_float16_t),
2437*61046927SAndroid Build Coastguard Worker                 _mix_lrp(gpu_shader_half_float, &glsl_type_builtin_f16vec4,  &glsl_type_builtin_float16_t),
2438*61046927SAndroid Build Coastguard Worker 
2439*61046927SAndroid Build Coastguard Worker                 _mix_lrp(gpu_shader_half_float, &glsl_type_builtin_f16vec2,  &glsl_type_builtin_f16vec2),
2440*61046927SAndroid Build Coastguard Worker                 _mix_lrp(gpu_shader_half_float, &glsl_type_builtin_f16vec3,  &glsl_type_builtin_f16vec3),
2441*61046927SAndroid Build Coastguard Worker                 _mix_lrp(gpu_shader_half_float, &glsl_type_builtin_f16vec4,  &glsl_type_builtin_f16vec4),
2442*61046927SAndroid Build Coastguard Worker 
2443*61046927SAndroid Build Coastguard Worker                 _mix_lrp(fp64, &glsl_type_builtin_double, &glsl_type_builtin_double),
2444*61046927SAndroid Build Coastguard Worker                 _mix_lrp(fp64, &glsl_type_builtin_dvec2,  &glsl_type_builtin_double),
2445*61046927SAndroid Build Coastguard Worker                 _mix_lrp(fp64, &glsl_type_builtin_dvec3,  &glsl_type_builtin_double),
2446*61046927SAndroid Build Coastguard Worker                 _mix_lrp(fp64, &glsl_type_builtin_dvec4,  &glsl_type_builtin_double),
2447*61046927SAndroid Build Coastguard Worker 
2448*61046927SAndroid Build Coastguard Worker                 _mix_lrp(fp64, &glsl_type_builtin_dvec2,  &glsl_type_builtin_dvec2),
2449*61046927SAndroid Build Coastguard Worker                 _mix_lrp(fp64, &glsl_type_builtin_dvec3,  &glsl_type_builtin_dvec3),
2450*61046927SAndroid Build Coastguard Worker                 _mix_lrp(fp64, &glsl_type_builtin_dvec4,  &glsl_type_builtin_dvec4),
2451*61046927SAndroid Build Coastguard Worker 
2452*61046927SAndroid Build Coastguard Worker                 _mix_sel(v130, &glsl_type_builtin_float, &glsl_type_builtin_bool),
2453*61046927SAndroid Build Coastguard Worker                 _mix_sel(v130, &glsl_type_builtin_vec2,  &glsl_type_builtin_bvec2),
2454*61046927SAndroid Build Coastguard Worker                 _mix_sel(v130, &glsl_type_builtin_vec3,  &glsl_type_builtin_bvec3),
2455*61046927SAndroid Build Coastguard Worker                 _mix_sel(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_bvec4),
2456*61046927SAndroid Build Coastguard Worker 
2457*61046927SAndroid Build Coastguard Worker                 _mix_sel(gpu_shader_half_float, &glsl_type_builtin_float16_t, &glsl_type_builtin_bool),
2458*61046927SAndroid Build Coastguard Worker                 _mix_sel(gpu_shader_half_float, &glsl_type_builtin_f16vec2,  &glsl_type_builtin_bvec2),
2459*61046927SAndroid Build Coastguard Worker                 _mix_sel(gpu_shader_half_float, &glsl_type_builtin_f16vec3,  &glsl_type_builtin_bvec3),
2460*61046927SAndroid Build Coastguard Worker                 _mix_sel(gpu_shader_half_float, &glsl_type_builtin_f16vec4,  &glsl_type_builtin_bvec4),
2461*61046927SAndroid Build Coastguard Worker 
2462*61046927SAndroid Build Coastguard Worker                 _mix_sel(fp64, &glsl_type_builtin_double, &glsl_type_builtin_bool),
2463*61046927SAndroid Build Coastguard Worker                 _mix_sel(fp64, &glsl_type_builtin_dvec2,  &glsl_type_builtin_bvec2),
2464*61046927SAndroid Build Coastguard Worker                 _mix_sel(fp64, &glsl_type_builtin_dvec3,  &glsl_type_builtin_bvec3),
2465*61046927SAndroid Build Coastguard Worker                 _mix_sel(fp64, &glsl_type_builtin_dvec4,  &glsl_type_builtin_bvec4),
2466*61046927SAndroid Build Coastguard Worker 
2467*61046927SAndroid Build Coastguard Worker                 _mix_sel(shader_integer_mix, &glsl_type_builtin_int,   &glsl_type_builtin_bool),
2468*61046927SAndroid Build Coastguard Worker                 _mix_sel(shader_integer_mix, &glsl_type_builtin_ivec2, &glsl_type_builtin_bvec2),
2469*61046927SAndroid Build Coastguard Worker                 _mix_sel(shader_integer_mix, &glsl_type_builtin_ivec3, &glsl_type_builtin_bvec3),
2470*61046927SAndroid Build Coastguard Worker                 _mix_sel(shader_integer_mix, &glsl_type_builtin_ivec4, &glsl_type_builtin_bvec4),
2471*61046927SAndroid Build Coastguard Worker 
2472*61046927SAndroid Build Coastguard Worker                 _mix_sel(shader_integer_mix, &glsl_type_builtin_uint,  &glsl_type_builtin_bool),
2473*61046927SAndroid Build Coastguard Worker                 _mix_sel(shader_integer_mix, &glsl_type_builtin_uvec2, &glsl_type_builtin_bvec2),
2474*61046927SAndroid Build Coastguard Worker                 _mix_sel(shader_integer_mix, &glsl_type_builtin_uvec3, &glsl_type_builtin_bvec3),
2475*61046927SAndroid Build Coastguard Worker                 _mix_sel(shader_integer_mix, &glsl_type_builtin_uvec4, &glsl_type_builtin_bvec4),
2476*61046927SAndroid Build Coastguard Worker 
2477*61046927SAndroid Build Coastguard Worker                 _mix_sel(shader_integer_mix, &glsl_type_builtin_bool,  &glsl_type_builtin_bool),
2478*61046927SAndroid Build Coastguard Worker                 _mix_sel(shader_integer_mix, &glsl_type_builtin_bvec2, &glsl_type_builtin_bvec2),
2479*61046927SAndroid Build Coastguard Worker                 _mix_sel(shader_integer_mix, &glsl_type_builtin_bvec3, &glsl_type_builtin_bvec3),
2480*61046927SAndroid Build Coastguard Worker                 _mix_sel(shader_integer_mix, &glsl_type_builtin_bvec4, &glsl_type_builtin_bvec4),
2481*61046927SAndroid Build Coastguard Worker 
2482*61046927SAndroid Build Coastguard Worker                 _mix_sel(int64_avail, &glsl_type_builtin_int64_t, &glsl_type_builtin_bool),
2483*61046927SAndroid Build Coastguard Worker                 _mix_sel(int64_avail, &glsl_type_builtin_i64vec2, &glsl_type_builtin_bvec2),
2484*61046927SAndroid Build Coastguard Worker                 _mix_sel(int64_avail, &glsl_type_builtin_i64vec3, &glsl_type_builtin_bvec3),
2485*61046927SAndroid Build Coastguard Worker                 _mix_sel(int64_avail, &glsl_type_builtin_i64vec4, &glsl_type_builtin_bvec4),
2486*61046927SAndroid Build Coastguard Worker 
2487*61046927SAndroid Build Coastguard Worker                 _mix_sel(int64_avail, &glsl_type_builtin_uint64_t,  &glsl_type_builtin_bool),
2488*61046927SAndroid Build Coastguard Worker                 _mix_sel(int64_avail, &glsl_type_builtin_u64vec2, &glsl_type_builtin_bvec2),
2489*61046927SAndroid Build Coastguard Worker                 _mix_sel(int64_avail, &glsl_type_builtin_u64vec3, &glsl_type_builtin_bvec3),
2490*61046927SAndroid Build Coastguard Worker                 _mix_sel(int64_avail, &glsl_type_builtin_u64vec4, &glsl_type_builtin_bvec4),
2491*61046927SAndroid Build Coastguard Worker                 NULL);
2492*61046927SAndroid Build Coastguard Worker 
2493*61046927SAndroid Build Coastguard Worker    add_function("step",
2494*61046927SAndroid Build Coastguard Worker                 _step(always_available, &glsl_type_builtin_float, &glsl_type_builtin_float),
2495*61046927SAndroid Build Coastguard Worker                 _step(always_available, &glsl_type_builtin_float, &glsl_type_builtin_vec2),
2496*61046927SAndroid Build Coastguard Worker                 _step(always_available, &glsl_type_builtin_float, &glsl_type_builtin_vec3),
2497*61046927SAndroid Build Coastguard Worker                 _step(always_available, &glsl_type_builtin_float, &glsl_type_builtin_vec4),
2498*61046927SAndroid Build Coastguard Worker 
2499*61046927SAndroid Build Coastguard Worker                 _step(always_available, &glsl_type_builtin_vec2,  &glsl_type_builtin_vec2),
2500*61046927SAndroid Build Coastguard Worker                 _step(always_available, &glsl_type_builtin_vec3,  &glsl_type_builtin_vec3),
2501*61046927SAndroid Build Coastguard Worker                 _step(always_available, &glsl_type_builtin_vec4,  &glsl_type_builtin_vec4),
2502*61046927SAndroid Build Coastguard Worker                 _step(fp64, &glsl_type_builtin_double, &glsl_type_builtin_double),
2503*61046927SAndroid Build Coastguard Worker                 _step(fp64, &glsl_type_builtin_double, &glsl_type_builtin_dvec2),
2504*61046927SAndroid Build Coastguard Worker                 _step(fp64, &glsl_type_builtin_double, &glsl_type_builtin_dvec3),
2505*61046927SAndroid Build Coastguard Worker                 _step(fp64, &glsl_type_builtin_double, &glsl_type_builtin_dvec4),
2506*61046927SAndroid Build Coastguard Worker 
2507*61046927SAndroid Build Coastguard Worker                 _step(fp64, &glsl_type_builtin_dvec2,  &glsl_type_builtin_dvec2),
2508*61046927SAndroid Build Coastguard Worker                 _step(fp64, &glsl_type_builtin_dvec3,  &glsl_type_builtin_dvec3),
2509*61046927SAndroid Build Coastguard Worker                 _step(fp64, &glsl_type_builtin_dvec4,  &glsl_type_builtin_dvec4),
2510*61046927SAndroid Build Coastguard Worker 
2511*61046927SAndroid Build Coastguard Worker                 _step(gpu_shader_half_float, &glsl_type_builtin_float16_t, &glsl_type_builtin_float16_t),
2512*61046927SAndroid Build Coastguard Worker                 _step(gpu_shader_half_float, &glsl_type_builtin_float16_t, &glsl_type_builtin_f16vec2),
2513*61046927SAndroid Build Coastguard Worker                 _step(gpu_shader_half_float, &glsl_type_builtin_float16_t, &glsl_type_builtin_f16vec3),
2514*61046927SAndroid Build Coastguard Worker                 _step(gpu_shader_half_float, &glsl_type_builtin_float16_t, &glsl_type_builtin_f16vec4),
2515*61046927SAndroid Build Coastguard Worker 
2516*61046927SAndroid Build Coastguard Worker                 _step(gpu_shader_half_float, &glsl_type_builtin_f16vec2,  &glsl_type_builtin_f16vec2),
2517*61046927SAndroid Build Coastguard Worker                 _step(gpu_shader_half_float, &glsl_type_builtin_f16vec3,  &glsl_type_builtin_f16vec3),
2518*61046927SAndroid Build Coastguard Worker                 _step(gpu_shader_half_float, &glsl_type_builtin_f16vec4,  &glsl_type_builtin_f16vec4),
2519*61046927SAndroid Build Coastguard Worker                 NULL);
2520*61046927SAndroid Build Coastguard Worker 
2521*61046927SAndroid Build Coastguard Worker    add_function("smoothstep",
2522*61046927SAndroid Build Coastguard Worker                 _smoothstep(always_available, &glsl_type_builtin_float, &glsl_type_builtin_float),
2523*61046927SAndroid Build Coastguard Worker                 _smoothstep(always_available, &glsl_type_builtin_float, &glsl_type_builtin_vec2),
2524*61046927SAndroid Build Coastguard Worker                 _smoothstep(always_available, &glsl_type_builtin_float, &glsl_type_builtin_vec3),
2525*61046927SAndroid Build Coastguard Worker                 _smoothstep(always_available, &glsl_type_builtin_float, &glsl_type_builtin_vec4),
2526*61046927SAndroid Build Coastguard Worker 
2527*61046927SAndroid Build Coastguard Worker                 _smoothstep(always_available, &glsl_type_builtin_vec2,  &glsl_type_builtin_vec2),
2528*61046927SAndroid Build Coastguard Worker                 _smoothstep(always_available, &glsl_type_builtin_vec3,  &glsl_type_builtin_vec3),
2529*61046927SAndroid Build Coastguard Worker                 _smoothstep(always_available, &glsl_type_builtin_vec4,  &glsl_type_builtin_vec4),
2530*61046927SAndroid Build Coastguard Worker                 _smoothstep(fp64, &glsl_type_builtin_double, &glsl_type_builtin_double),
2531*61046927SAndroid Build Coastguard Worker                 _smoothstep(fp64, &glsl_type_builtin_double, &glsl_type_builtin_dvec2),
2532*61046927SAndroid Build Coastguard Worker                 _smoothstep(fp64, &glsl_type_builtin_double, &glsl_type_builtin_dvec3),
2533*61046927SAndroid Build Coastguard Worker                 _smoothstep(fp64, &glsl_type_builtin_double, &glsl_type_builtin_dvec4),
2534*61046927SAndroid Build Coastguard Worker 
2535*61046927SAndroid Build Coastguard Worker                 _smoothstep(fp64, &glsl_type_builtin_dvec2,  &glsl_type_builtin_dvec2),
2536*61046927SAndroid Build Coastguard Worker                 _smoothstep(fp64, &glsl_type_builtin_dvec3,  &glsl_type_builtin_dvec3),
2537*61046927SAndroid Build Coastguard Worker                 _smoothstep(fp64, &glsl_type_builtin_dvec4,  &glsl_type_builtin_dvec4),
2538*61046927SAndroid Build Coastguard Worker 
2539*61046927SAndroid Build Coastguard Worker                 _smoothstep(gpu_shader_half_float, &glsl_type_builtin_float16_t, &glsl_type_builtin_float16_t),
2540*61046927SAndroid Build Coastguard Worker                 _smoothstep(gpu_shader_half_float, &glsl_type_builtin_float16_t, &glsl_type_builtin_f16vec2),
2541*61046927SAndroid Build Coastguard Worker                 _smoothstep(gpu_shader_half_float, &glsl_type_builtin_float16_t, &glsl_type_builtin_f16vec3),
2542*61046927SAndroid Build Coastguard Worker                 _smoothstep(gpu_shader_half_float, &glsl_type_builtin_float16_t, &glsl_type_builtin_f16vec4),
2543*61046927SAndroid Build Coastguard Worker 
2544*61046927SAndroid Build Coastguard Worker                 _smoothstep(gpu_shader_half_float, &glsl_type_builtin_f16vec2,  &glsl_type_builtin_f16vec2),
2545*61046927SAndroid Build Coastguard Worker                 _smoothstep(gpu_shader_half_float, &glsl_type_builtin_f16vec3,  &glsl_type_builtin_f16vec3),
2546*61046927SAndroid Build Coastguard Worker                 _smoothstep(gpu_shader_half_float, &glsl_type_builtin_f16vec4,  &glsl_type_builtin_f16vec4),
2547*61046927SAndroid Build Coastguard Worker                 NULL);
2548*61046927SAndroid Build Coastguard Worker 
2549*61046927SAndroid Build Coastguard Worker    FDHF130(isnan)
2550*61046927SAndroid Build Coastguard Worker    FDHF130(isinf)
2551*61046927SAndroid Build Coastguard Worker 
2552*61046927SAndroid Build Coastguard Worker    F(floatBitsToInt)
2553*61046927SAndroid Build Coastguard Worker    F(floatBitsToUint)
2554*61046927SAndroid Build Coastguard Worker    add_function("intBitsToFloat",
2555*61046927SAndroid Build Coastguard Worker                 _intBitsToFloat(&glsl_type_builtin_int),
2556*61046927SAndroid Build Coastguard Worker                 _intBitsToFloat(&glsl_type_builtin_ivec2),
2557*61046927SAndroid Build Coastguard Worker                 _intBitsToFloat(&glsl_type_builtin_ivec3),
2558*61046927SAndroid Build Coastguard Worker                 _intBitsToFloat(&glsl_type_builtin_ivec4),
2559*61046927SAndroid Build Coastguard Worker                 NULL);
2560*61046927SAndroid Build Coastguard Worker    add_function("uintBitsToFloat",
2561*61046927SAndroid Build Coastguard Worker                 _uintBitsToFloat(&glsl_type_builtin_uint),
2562*61046927SAndroid Build Coastguard Worker                 _uintBitsToFloat(&glsl_type_builtin_uvec2),
2563*61046927SAndroid Build Coastguard Worker                 _uintBitsToFloat(&glsl_type_builtin_uvec3),
2564*61046927SAndroid Build Coastguard Worker                 _uintBitsToFloat(&glsl_type_builtin_uvec4),
2565*61046927SAndroid Build Coastguard Worker                 NULL);
2566*61046927SAndroid Build Coastguard Worker 
2567*61046927SAndroid Build Coastguard Worker    add_function("doubleBitsToInt64",
2568*61046927SAndroid Build Coastguard Worker                 _doubleBitsToInt64(int64_fp64, &glsl_type_builtin_double),
2569*61046927SAndroid Build Coastguard Worker                 _doubleBitsToInt64(int64_fp64, &glsl_type_builtin_dvec2),
2570*61046927SAndroid Build Coastguard Worker                 _doubleBitsToInt64(int64_fp64, &glsl_type_builtin_dvec3),
2571*61046927SAndroid Build Coastguard Worker                 _doubleBitsToInt64(int64_fp64, &glsl_type_builtin_dvec4),
2572*61046927SAndroid Build Coastguard Worker                 NULL);
2573*61046927SAndroid Build Coastguard Worker 
2574*61046927SAndroid Build Coastguard Worker    add_function("doubleBitsToUint64",
2575*61046927SAndroid Build Coastguard Worker                 _doubleBitsToUint64(int64_fp64, &glsl_type_builtin_double),
2576*61046927SAndroid Build Coastguard Worker                 _doubleBitsToUint64(int64_fp64, &glsl_type_builtin_dvec2),
2577*61046927SAndroid Build Coastguard Worker                 _doubleBitsToUint64(int64_fp64, &glsl_type_builtin_dvec3),
2578*61046927SAndroid Build Coastguard Worker                 _doubleBitsToUint64(int64_fp64, &glsl_type_builtin_dvec4),
2579*61046927SAndroid Build Coastguard Worker                 NULL);
2580*61046927SAndroid Build Coastguard Worker 
2581*61046927SAndroid Build Coastguard Worker    add_function("int64BitsToDouble",
2582*61046927SAndroid Build Coastguard Worker                 _int64BitsToDouble(int64_fp64, &glsl_type_builtin_int64_t),
2583*61046927SAndroid Build Coastguard Worker                 _int64BitsToDouble(int64_fp64, &glsl_type_builtin_i64vec2),
2584*61046927SAndroid Build Coastguard Worker                 _int64BitsToDouble(int64_fp64, &glsl_type_builtin_i64vec3),
2585*61046927SAndroid Build Coastguard Worker                 _int64BitsToDouble(int64_fp64, &glsl_type_builtin_i64vec4),
2586*61046927SAndroid Build Coastguard Worker                 NULL);
2587*61046927SAndroid Build Coastguard Worker 
2588*61046927SAndroid Build Coastguard Worker    add_function("uint64BitsToDouble",
2589*61046927SAndroid Build Coastguard Worker                 _uint64BitsToDouble(int64_fp64, &glsl_type_builtin_uint64_t),
2590*61046927SAndroid Build Coastguard Worker                 _uint64BitsToDouble(int64_fp64, &glsl_type_builtin_u64vec2),
2591*61046927SAndroid Build Coastguard Worker                 _uint64BitsToDouble(int64_fp64, &glsl_type_builtin_u64vec3),
2592*61046927SAndroid Build Coastguard Worker                 _uint64BitsToDouble(int64_fp64, &glsl_type_builtin_u64vec4),
2593*61046927SAndroid Build Coastguard Worker                 NULL);
2594*61046927SAndroid Build Coastguard Worker 
2595*61046927SAndroid Build Coastguard Worker    add_function("packUnorm2x16",   _packUnorm2x16(shader_packing_or_es3_or_gpu_shader5),   NULL);
2596*61046927SAndroid Build Coastguard Worker    add_function("packSnorm2x16",   _packSnorm2x16(shader_packing_or_es3),                  NULL);
2597*61046927SAndroid Build Coastguard Worker    add_function("packUnorm4x8",    _packUnorm4x8(shader_packing_or_es31_or_gpu_shader5),   NULL);
2598*61046927SAndroid Build Coastguard Worker    add_function("packSnorm4x8",    _packSnorm4x8(shader_packing_or_es31_or_gpu_shader5),   NULL);
2599*61046927SAndroid Build Coastguard Worker    add_function("unpackUnorm2x16", _unpackUnorm2x16(shader_packing_or_es3_or_gpu_shader5), NULL);
2600*61046927SAndroid Build Coastguard Worker    add_function("unpackSnorm2x16", _unpackSnorm2x16(shader_packing_or_es3),                NULL);
2601*61046927SAndroid Build Coastguard Worker    add_function("unpackUnorm4x8",  _unpackUnorm4x8(shader_packing_or_es31_or_gpu_shader5), NULL);
2602*61046927SAndroid Build Coastguard Worker    add_function("unpackSnorm4x8",  _unpackSnorm4x8(shader_packing_or_es31_or_gpu_shader5), NULL);
2603*61046927SAndroid Build Coastguard Worker    add_function("packHalf2x16",    _packHalf2x16(shader_packing_or_es3),                   NULL);
2604*61046927SAndroid Build Coastguard Worker    add_function("unpackHalf2x16",  _unpackHalf2x16(shader_packing_or_es3),                 NULL);
2605*61046927SAndroid Build Coastguard Worker    add_function("packFloat2x16",    _packFloat2x16(gpu_shader_half_float),                 NULL);
2606*61046927SAndroid Build Coastguard Worker    add_function("unpackFloat2x16",  _unpackFloat2x16(gpu_shader_half_float),               NULL);
2607*61046927SAndroid Build Coastguard Worker    add_function("packDouble2x32",    _packDouble2x32(fp64),                   NULL);
2608*61046927SAndroid Build Coastguard Worker    add_function("unpackDouble2x32",  _unpackDouble2x32(fp64),                 NULL);
2609*61046927SAndroid Build Coastguard Worker 
2610*61046927SAndroid Build Coastguard Worker    add_function("packInt2x32",     _packInt2x32(int64_avail),                    NULL);
2611*61046927SAndroid Build Coastguard Worker    add_function("unpackInt2x32",   _unpackInt2x32(int64_avail),                  NULL);
2612*61046927SAndroid Build Coastguard Worker    add_function("packUint2x32",    _packUint2x32(int64_avail),                   NULL);
2613*61046927SAndroid Build Coastguard Worker    add_function("unpackUint2x32",  _unpackUint2x32(int64_avail),                 NULL);
2614*61046927SAndroid Build Coastguard Worker 
2615*61046927SAndroid Build Coastguard Worker    FDHF(length)
2616*61046927SAndroid Build Coastguard Worker    FDHF(distance)
2617*61046927SAndroid Build Coastguard Worker    FDHF(dot)
2618*61046927SAndroid Build Coastguard Worker 
2619*61046927SAndroid Build Coastguard Worker    add_function("cross", _cross(always_available, &glsl_type_builtin_vec3),
2620*61046927SAndroid Build Coastguard Worker                 _cross(fp64, &glsl_type_builtin_dvec3),
2621*61046927SAndroid Build Coastguard Worker                 _cross(gpu_shader_half_float, &glsl_type_builtin_f16vec3),
2622*61046927SAndroid Build Coastguard Worker                 NULL);
2623*61046927SAndroid Build Coastguard Worker 
2624*61046927SAndroid Build Coastguard Worker    FDHF(normalize)
2625*61046927SAndroid Build Coastguard Worker    add_function("ftransform", _ftransform(), NULL);
2626*61046927SAndroid Build Coastguard Worker    FDHF(faceforward)
2627*61046927SAndroid Build Coastguard Worker    FDHF(reflect)
2628*61046927SAndroid Build Coastguard Worker    FDHF(refract)
2629*61046927SAndroid Build Coastguard Worker    // ...
2630*61046927SAndroid Build Coastguard Worker    add_function("matrixCompMult",
2631*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(always_available, &glsl_type_builtin_mat2),
2632*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(always_available, &glsl_type_builtin_mat3),
2633*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(always_available, &glsl_type_builtin_mat4),
2634*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(always_available, &glsl_type_builtin_mat2x3),
2635*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(always_available, &glsl_type_builtin_mat2x4),
2636*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(always_available, &glsl_type_builtin_mat3x2),
2637*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(always_available, &glsl_type_builtin_mat3x4),
2638*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(always_available, &glsl_type_builtin_mat4x2),
2639*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(always_available, &glsl_type_builtin_mat4x3),
2640*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(fp64, &glsl_type_builtin_dmat2),
2641*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(fp64, &glsl_type_builtin_dmat3),
2642*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(fp64, &glsl_type_builtin_dmat4),
2643*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(fp64, &glsl_type_builtin_dmat2x3),
2644*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(fp64, &glsl_type_builtin_dmat2x4),
2645*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(fp64, &glsl_type_builtin_dmat3x2),
2646*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(fp64, &glsl_type_builtin_dmat3x4),
2647*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(fp64, &glsl_type_builtin_dmat4x2),
2648*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(fp64, &glsl_type_builtin_dmat4x3),
2649*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(gpu_shader_half_float, &glsl_type_builtin_f16mat2),
2650*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(gpu_shader_half_float, &glsl_type_builtin_f16mat3),
2651*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(gpu_shader_half_float, &glsl_type_builtin_f16mat4),
2652*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(gpu_shader_half_float, &glsl_type_builtin_f16mat2x3),
2653*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(gpu_shader_half_float, &glsl_type_builtin_f16mat2x4),
2654*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(gpu_shader_half_float, &glsl_type_builtin_f16mat3x2),
2655*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(gpu_shader_half_float, &glsl_type_builtin_f16mat3x4),
2656*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(gpu_shader_half_float, &glsl_type_builtin_f16mat4x2),
2657*61046927SAndroid Build Coastguard Worker                 _matrixCompMult(gpu_shader_half_float, &glsl_type_builtin_f16mat4x3),
2658*61046927SAndroid Build Coastguard Worker                 NULL);
2659*61046927SAndroid Build Coastguard Worker    add_function("outerProduct",
2660*61046927SAndroid Build Coastguard Worker                 _outerProduct(v120, &glsl_type_builtin_mat2),
2661*61046927SAndroid Build Coastguard Worker                 _outerProduct(v120, &glsl_type_builtin_mat3),
2662*61046927SAndroid Build Coastguard Worker                 _outerProduct(v120, &glsl_type_builtin_mat4),
2663*61046927SAndroid Build Coastguard Worker                 _outerProduct(v120, &glsl_type_builtin_mat2x3),
2664*61046927SAndroid Build Coastguard Worker                 _outerProduct(v120, &glsl_type_builtin_mat2x4),
2665*61046927SAndroid Build Coastguard Worker                 _outerProduct(v120, &glsl_type_builtin_mat3x2),
2666*61046927SAndroid Build Coastguard Worker                 _outerProduct(v120, &glsl_type_builtin_mat3x4),
2667*61046927SAndroid Build Coastguard Worker                 _outerProduct(v120, &glsl_type_builtin_mat4x2),
2668*61046927SAndroid Build Coastguard Worker                 _outerProduct(v120, &glsl_type_builtin_mat4x3),
2669*61046927SAndroid Build Coastguard Worker                 _outerProduct(fp64, &glsl_type_builtin_dmat2),
2670*61046927SAndroid Build Coastguard Worker                 _outerProduct(fp64, &glsl_type_builtin_dmat3),
2671*61046927SAndroid Build Coastguard Worker                 _outerProduct(fp64, &glsl_type_builtin_dmat4),
2672*61046927SAndroid Build Coastguard Worker                 _outerProduct(fp64, &glsl_type_builtin_dmat2x3),
2673*61046927SAndroid Build Coastguard Worker                 _outerProduct(fp64, &glsl_type_builtin_dmat2x4),
2674*61046927SAndroid Build Coastguard Worker                 _outerProduct(fp64, &glsl_type_builtin_dmat3x2),
2675*61046927SAndroid Build Coastguard Worker                 _outerProduct(fp64, &glsl_type_builtin_dmat3x4),
2676*61046927SAndroid Build Coastguard Worker                 _outerProduct(fp64, &glsl_type_builtin_dmat4x2),
2677*61046927SAndroid Build Coastguard Worker                 _outerProduct(fp64, &glsl_type_builtin_dmat4x3),
2678*61046927SAndroid Build Coastguard Worker                 _outerProduct(gpu_shader_half_float, &glsl_type_builtin_f16mat2),
2679*61046927SAndroid Build Coastguard Worker                 _outerProduct(gpu_shader_half_float, &glsl_type_builtin_f16mat3),
2680*61046927SAndroid Build Coastguard Worker                 _outerProduct(gpu_shader_half_float, &glsl_type_builtin_f16mat4),
2681*61046927SAndroid Build Coastguard Worker                 _outerProduct(gpu_shader_half_float, &glsl_type_builtin_f16mat2x3),
2682*61046927SAndroid Build Coastguard Worker                 _outerProduct(gpu_shader_half_float, &glsl_type_builtin_f16mat2x4),
2683*61046927SAndroid Build Coastguard Worker                 _outerProduct(gpu_shader_half_float, &glsl_type_builtin_f16mat3x2),
2684*61046927SAndroid Build Coastguard Worker                 _outerProduct(gpu_shader_half_float, &glsl_type_builtin_f16mat3x4),
2685*61046927SAndroid Build Coastguard Worker                 _outerProduct(gpu_shader_half_float, &glsl_type_builtin_f16mat4x2),
2686*61046927SAndroid Build Coastguard Worker                 _outerProduct(gpu_shader_half_float, &glsl_type_builtin_f16mat4x3),
2687*61046927SAndroid Build Coastguard Worker                 NULL);
2688*61046927SAndroid Build Coastguard Worker    add_function("determinant",
2689*61046927SAndroid Build Coastguard Worker                 _determinant_mat2(v120, &glsl_type_builtin_mat2),
2690*61046927SAndroid Build Coastguard Worker                 _determinant_mat3(v120, &glsl_type_builtin_mat3),
2691*61046927SAndroid Build Coastguard Worker                 _determinant_mat4(v120, &glsl_type_builtin_mat4),
2692*61046927SAndroid Build Coastguard Worker                 _determinant_mat2(fp64, &glsl_type_builtin_dmat2),
2693*61046927SAndroid Build Coastguard Worker                 _determinant_mat3(fp64, &glsl_type_builtin_dmat3),
2694*61046927SAndroid Build Coastguard Worker                 _determinant_mat4(fp64, &glsl_type_builtin_dmat4),
2695*61046927SAndroid Build Coastguard Worker                 _determinant_mat2(gpu_shader_half_float, &glsl_type_builtin_f16mat2),
2696*61046927SAndroid Build Coastguard Worker                 _determinant_mat3(gpu_shader_half_float, &glsl_type_builtin_f16mat3),
2697*61046927SAndroid Build Coastguard Worker                 _determinant_mat4(gpu_shader_half_float, &glsl_type_builtin_f16mat4),
2698*61046927SAndroid Build Coastguard Worker                 NULL);
2699*61046927SAndroid Build Coastguard Worker    add_function("inverse",
2700*61046927SAndroid Build Coastguard Worker                 _inverse_mat2(v140_or_es3, &glsl_type_builtin_mat2),
2701*61046927SAndroid Build Coastguard Worker                 _inverse_mat3(v140_or_es3, &glsl_type_builtin_mat3),
2702*61046927SAndroid Build Coastguard Worker                 _inverse_mat4(v140_or_es3, &glsl_type_builtin_mat4),
2703*61046927SAndroid Build Coastguard Worker                 _inverse_mat2(fp64, &glsl_type_builtin_dmat2),
2704*61046927SAndroid Build Coastguard Worker                 _inverse_mat3(fp64, &glsl_type_builtin_dmat3),
2705*61046927SAndroid Build Coastguard Worker                 _inverse_mat4(fp64, &glsl_type_builtin_dmat4),
2706*61046927SAndroid Build Coastguard Worker                 _inverse_mat2(gpu_shader_half_float, &glsl_type_builtin_f16mat2),
2707*61046927SAndroid Build Coastguard Worker                 _inverse_mat3(gpu_shader_half_float, &glsl_type_builtin_f16mat3),
2708*61046927SAndroid Build Coastguard Worker                 _inverse_mat4(gpu_shader_half_float, &glsl_type_builtin_f16mat4),
2709*61046927SAndroid Build Coastguard Worker                 NULL);
2710*61046927SAndroid Build Coastguard Worker    add_function("transpose",
2711*61046927SAndroid Build Coastguard Worker                 _transpose(v120, &glsl_type_builtin_mat2),
2712*61046927SAndroid Build Coastguard Worker                 _transpose(v120, &glsl_type_builtin_mat3),
2713*61046927SAndroid Build Coastguard Worker                 _transpose(v120, &glsl_type_builtin_mat4),
2714*61046927SAndroid Build Coastguard Worker                 _transpose(v120, &glsl_type_builtin_mat2x3),
2715*61046927SAndroid Build Coastguard Worker                 _transpose(v120, &glsl_type_builtin_mat2x4),
2716*61046927SAndroid Build Coastguard Worker                 _transpose(v120, &glsl_type_builtin_mat3x2),
2717*61046927SAndroid Build Coastguard Worker                 _transpose(v120, &glsl_type_builtin_mat3x4),
2718*61046927SAndroid Build Coastguard Worker                 _transpose(v120, &glsl_type_builtin_mat4x2),
2719*61046927SAndroid Build Coastguard Worker                 _transpose(v120, &glsl_type_builtin_mat4x3),
2720*61046927SAndroid Build Coastguard Worker                 _transpose(fp64, &glsl_type_builtin_dmat2),
2721*61046927SAndroid Build Coastguard Worker                 _transpose(fp64, &glsl_type_builtin_dmat3),
2722*61046927SAndroid Build Coastguard Worker                 _transpose(fp64, &glsl_type_builtin_dmat4),
2723*61046927SAndroid Build Coastguard Worker                 _transpose(fp64, &glsl_type_builtin_dmat2x3),
2724*61046927SAndroid Build Coastguard Worker                 _transpose(fp64, &glsl_type_builtin_dmat2x4),
2725*61046927SAndroid Build Coastguard Worker                 _transpose(fp64, &glsl_type_builtin_dmat3x2),
2726*61046927SAndroid Build Coastguard Worker                 _transpose(fp64, &glsl_type_builtin_dmat3x4),
2727*61046927SAndroid Build Coastguard Worker                 _transpose(fp64, &glsl_type_builtin_dmat4x2),
2728*61046927SAndroid Build Coastguard Worker                 _transpose(fp64, &glsl_type_builtin_dmat4x3),
2729*61046927SAndroid Build Coastguard Worker                 _transpose(gpu_shader_half_float, &glsl_type_builtin_f16mat2),
2730*61046927SAndroid Build Coastguard Worker                 _transpose(gpu_shader_half_float, &glsl_type_builtin_f16mat3),
2731*61046927SAndroid Build Coastguard Worker                 _transpose(gpu_shader_half_float, &glsl_type_builtin_f16mat4),
2732*61046927SAndroid Build Coastguard Worker                 _transpose(gpu_shader_half_float, &glsl_type_builtin_f16mat2x3),
2733*61046927SAndroid Build Coastguard Worker                 _transpose(gpu_shader_half_float, &glsl_type_builtin_f16mat2x4),
2734*61046927SAndroid Build Coastguard Worker                 _transpose(gpu_shader_half_float, &glsl_type_builtin_f16mat3x2),
2735*61046927SAndroid Build Coastguard Worker                 _transpose(gpu_shader_half_float, &glsl_type_builtin_f16mat3x4),
2736*61046927SAndroid Build Coastguard Worker                 _transpose(gpu_shader_half_float, &glsl_type_builtin_f16mat4x2),
2737*61046927SAndroid Build Coastguard Worker                 _transpose(gpu_shader_half_float, &glsl_type_builtin_f16mat4x3),
2738*61046927SAndroid Build Coastguard Worker                 NULL);
2739*61046927SAndroid Build Coastguard Worker    FIUDHF_VEC(lessThan)
2740*61046927SAndroid Build Coastguard Worker    FIUDHF_VEC(lessThanEqual)
2741*61046927SAndroid Build Coastguard Worker    FIUDHF_VEC(greaterThan)
2742*61046927SAndroid Build Coastguard Worker    FIUDHF_VEC(greaterThanEqual)
2743*61046927SAndroid Build Coastguard Worker    FIUBDHF_VEC(notEqual)
2744*61046927SAndroid Build Coastguard Worker    FIUBDHF_VEC(equal)
2745*61046927SAndroid Build Coastguard Worker 
2746*61046927SAndroid Build Coastguard Worker    add_function("any",
2747*61046927SAndroid Build Coastguard Worker                 _any(&glsl_type_builtin_bvec2),
2748*61046927SAndroid Build Coastguard Worker                 _any(&glsl_type_builtin_bvec3),
2749*61046927SAndroid Build Coastguard Worker                 _any(&glsl_type_builtin_bvec4),
2750*61046927SAndroid Build Coastguard Worker                 NULL);
2751*61046927SAndroid Build Coastguard Worker 
2752*61046927SAndroid Build Coastguard Worker    add_function("all",
2753*61046927SAndroid Build Coastguard Worker                 _all(&glsl_type_builtin_bvec2),
2754*61046927SAndroid Build Coastguard Worker                 _all(&glsl_type_builtin_bvec3),
2755*61046927SAndroid Build Coastguard Worker                 _all(&glsl_type_builtin_bvec4),
2756*61046927SAndroid Build Coastguard Worker                 NULL);
2757*61046927SAndroid Build Coastguard Worker 
2758*61046927SAndroid Build Coastguard Worker    add_function("not",
2759*61046927SAndroid Build Coastguard Worker                 _not(&glsl_type_builtin_bvec2),
2760*61046927SAndroid Build Coastguard Worker                 _not(&glsl_type_builtin_bvec3),
2761*61046927SAndroid Build Coastguard Worker                 _not(&glsl_type_builtin_bvec4),
2762*61046927SAndroid Build Coastguard Worker                 NULL);
2763*61046927SAndroid Build Coastguard Worker 
2764*61046927SAndroid Build Coastguard Worker    add_function("textureSize",
2765*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_int,   &glsl_type_builtin_sampler1D),
2766*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_int,   &glsl_type_builtin_isampler1D),
2767*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_int,   &glsl_type_builtin_usampler1D),
2768*61046927SAndroid Build Coastguard Worker 
2769*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_sampler2D),
2770*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_isampler2D),
2771*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_usampler2D),
2772*61046927SAndroid Build Coastguard Worker 
2773*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec3, &glsl_type_builtin_sampler3D),
2774*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec3, &glsl_type_builtin_isampler3D),
2775*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec3, &glsl_type_builtin_usampler3D),
2776*61046927SAndroid Build Coastguard Worker 
2777*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_samplerCube),
2778*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_isamplerCube),
2779*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_usamplerCube),
2780*61046927SAndroid Build Coastguard Worker 
2781*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_int,   &glsl_type_builtin_sampler1DShadow),
2782*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_sampler2DShadow),
2783*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_samplerCubeShadow),
2784*61046927SAndroid Build Coastguard Worker 
2785*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_sampler1DArray),
2786*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_isampler1DArray),
2787*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_usampler1DArray),
2788*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec3, &glsl_type_builtin_sampler2DArray),
2789*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec3, &glsl_type_builtin_isampler2DArray),
2790*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec3, &glsl_type_builtin_usampler2DArray),
2791*61046927SAndroid Build Coastguard Worker 
2792*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_sampler1DArrayShadow),
2793*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec3, &glsl_type_builtin_sampler2DArrayShadow),
2794*61046927SAndroid Build Coastguard Worker 
2795*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_cube_map_array, &glsl_type_builtin_ivec3, &glsl_type_builtin_samplerCubeArray),
2796*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_cube_map_array, &glsl_type_builtin_ivec3, &glsl_type_builtin_isamplerCubeArray),
2797*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_cube_map_array, &glsl_type_builtin_ivec3, &glsl_type_builtin_usamplerCubeArray),
2798*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_cube_map_array, &glsl_type_builtin_ivec3, &glsl_type_builtin_samplerCubeArrayShadow),
2799*61046927SAndroid Build Coastguard Worker 
2800*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_sampler2DRect),
2801*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_isampler2DRect),
2802*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_usampler2DRect),
2803*61046927SAndroid Build Coastguard Worker                 _textureSize(v130, &glsl_type_builtin_ivec2, &glsl_type_builtin_sampler2DRectShadow),
2804*61046927SAndroid Build Coastguard Worker 
2805*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_buffer, &glsl_type_builtin_int,   &glsl_type_builtin_samplerBuffer),
2806*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_buffer, &glsl_type_builtin_int,   &glsl_type_builtin_isamplerBuffer),
2807*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_buffer, &glsl_type_builtin_int,   &glsl_type_builtin_usamplerBuffer),
2808*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_multisample, &glsl_type_builtin_ivec2, &glsl_type_builtin_sampler2DMS),
2809*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_multisample, &glsl_type_builtin_ivec2, &glsl_type_builtin_isampler2DMS),
2810*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_multisample, &glsl_type_builtin_ivec2, &glsl_type_builtin_usampler2DMS),
2811*61046927SAndroid Build Coastguard Worker 
2812*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_multisample_array, &glsl_type_builtin_ivec3, &glsl_type_builtin_sampler2DMSArray),
2813*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_multisample_array, &glsl_type_builtin_ivec3, &glsl_type_builtin_isampler2DMSArray),
2814*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_multisample_array, &glsl_type_builtin_ivec3, &glsl_type_builtin_usampler2DMSArray),
2815*61046927SAndroid Build Coastguard Worker 
2816*61046927SAndroid Build Coastguard Worker                 _textureSize(texture_external_es3, &glsl_type_builtin_ivec2, &glsl_type_builtin_samplerExternalOES),
2817*61046927SAndroid Build Coastguard Worker                 NULL);
2818*61046927SAndroid Build Coastguard Worker 
2819*61046927SAndroid Build Coastguard Worker    add_function("textureSize1D",
2820*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4, &glsl_type_builtin_int,   &glsl_type_builtin_sampler1D),
2821*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_integer, &glsl_type_builtin_int,   &glsl_type_builtin_isampler1D),
2822*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_integer, &glsl_type_builtin_int,   &glsl_type_builtin_usampler1D),
2823*61046927SAndroid Build Coastguard Worker                 NULL);
2824*61046927SAndroid Build Coastguard Worker 
2825*61046927SAndroid Build Coastguard Worker    add_function("textureSize2D",
2826*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4, &glsl_type_builtin_ivec2, &glsl_type_builtin_sampler2D),
2827*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_integer, &glsl_type_builtin_ivec2, &glsl_type_builtin_isampler2D),
2828*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_integer, &glsl_type_builtin_ivec2, &glsl_type_builtin_usampler2D),
2829*61046927SAndroid Build Coastguard Worker                 NULL);
2830*61046927SAndroid Build Coastguard Worker 
2831*61046927SAndroid Build Coastguard Worker    add_function("textureSize3D",
2832*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4, &glsl_type_builtin_ivec3, &glsl_type_builtin_sampler3D),
2833*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_integer, &glsl_type_builtin_ivec3, &glsl_type_builtin_isampler3D),
2834*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_integer, &glsl_type_builtin_ivec3, &glsl_type_builtin_usampler3D),
2835*61046927SAndroid Build Coastguard Worker                 NULL);
2836*61046927SAndroid Build Coastguard Worker 
2837*61046927SAndroid Build Coastguard Worker    add_function("textureSizeCube",
2838*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4, &glsl_type_builtin_ivec2, &glsl_type_builtin_samplerCube),
2839*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_integer, &glsl_type_builtin_ivec2, &glsl_type_builtin_isamplerCube),
2840*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_integer, &glsl_type_builtin_ivec2, &glsl_type_builtin_usamplerCube),
2841*61046927SAndroid Build Coastguard Worker                 NULL);
2842*61046927SAndroid Build Coastguard Worker 
2843*61046927SAndroid Build Coastguard Worker    add_function("textureSize1DArray",
2844*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_array,         &glsl_type_builtin_ivec2, &glsl_type_builtin_sampler1DArray),
2845*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_array_integer, &glsl_type_builtin_ivec2, &glsl_type_builtin_isampler1DArray),
2846*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_array_integer, &glsl_type_builtin_ivec2, &glsl_type_builtin_usampler1DArray),
2847*61046927SAndroid Build Coastguard Worker                 NULL);
2848*61046927SAndroid Build Coastguard Worker 
2849*61046927SAndroid Build Coastguard Worker    add_function("textureSize2DArray",
2850*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_array,         &glsl_type_builtin_ivec3, &glsl_type_builtin_sampler2DArray),
2851*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_array_integer, &glsl_type_builtin_ivec3, &glsl_type_builtin_isampler2DArray),
2852*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_array_integer, &glsl_type_builtin_ivec3, &glsl_type_builtin_usampler2DArray),
2853*61046927SAndroid Build Coastguard Worker                 NULL);
2854*61046927SAndroid Build Coastguard Worker 
2855*61046927SAndroid Build Coastguard Worker    add_function("textureSize2DRect",
2856*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_rect,         &glsl_type_builtin_ivec2, &glsl_type_builtin_sampler2DRect),
2857*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_rect_integer, &glsl_type_builtin_ivec2, &glsl_type_builtin_isampler2DRect),
2858*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_rect_integer, &glsl_type_builtin_ivec2, &glsl_type_builtin_usampler2DRect),
2859*61046927SAndroid Build Coastguard Worker                 NULL);
2860*61046927SAndroid Build Coastguard Worker 
2861*61046927SAndroid Build Coastguard Worker    add_function("textureSizeBuffer",
2862*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_tbo,         &glsl_type_builtin_int,   &glsl_type_builtin_samplerBuffer),
2863*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_tbo_integer, &glsl_type_builtin_int,   &glsl_type_builtin_isamplerBuffer),
2864*61046927SAndroid Build Coastguard Worker                 _textureSize(gpu_shader4_tbo_integer, &glsl_type_builtin_int,   &glsl_type_builtin_usamplerBuffer),
2865*61046927SAndroid Build Coastguard Worker                 NULL);
2866*61046927SAndroid Build Coastguard Worker 
2867*61046927SAndroid Build Coastguard Worker    add_function("textureSamples",
2868*61046927SAndroid Build Coastguard Worker                 _textureSamples(shader_samples, &glsl_type_builtin_sampler2DMS),
2869*61046927SAndroid Build Coastguard Worker                 _textureSamples(shader_samples, &glsl_type_builtin_isampler2DMS),
2870*61046927SAndroid Build Coastguard Worker                 _textureSamples(shader_samples, &glsl_type_builtin_usampler2DMS),
2871*61046927SAndroid Build Coastguard Worker 
2872*61046927SAndroid Build Coastguard Worker                 _textureSamples(shader_samples, &glsl_type_builtin_sampler2DMSArray),
2873*61046927SAndroid Build Coastguard Worker                 _textureSamples(shader_samples, &glsl_type_builtin_isampler2DMSArray),
2874*61046927SAndroid Build Coastguard Worker                 _textureSamples(shader_samples, &glsl_type_builtin_usampler2DMSArray),
2875*61046927SAndroid Build Coastguard Worker                 NULL);
2876*61046927SAndroid Build Coastguard Worker 
2877*61046927SAndroid Build Coastguard Worker    add_function("texture",
2878*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float),
2879*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float),
2880*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float),
2881*61046927SAndroid Build Coastguard Worker 
2882*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2),
2883*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2),
2884*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2),
2885*61046927SAndroid Build Coastguard Worker 
2886*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3),
2887*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3),
2888*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3),
2889*61046927SAndroid Build Coastguard Worker 
2890*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3),
2891*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3),
2892*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3),
2893*61046927SAndroid Build Coastguard Worker 
2894*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow,   &glsl_type_builtin_vec3),
2895*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow,   &glsl_type_builtin_vec3),
2896*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4),
2897*61046927SAndroid Build Coastguard Worker 
2898*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2),
2899*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2),
2900*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2),
2901*61046927SAndroid Build Coastguard Worker 
2902*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3),
2903*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3),
2904*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3),
2905*61046927SAndroid Build Coastguard Worker 
2906*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_cube_map_array, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4),
2907*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_cube_map_array, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4),
2908*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_cube_map_array, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4),
2909*61046927SAndroid Build Coastguard Worker 
2910*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3),
2911*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4),
2912*61046927SAndroid Build Coastguard Worker                 /* samplerCubeArrayShadow is special; it has an extra parameter
2913*61046927SAndroid Build Coastguard Worker                  * for the shadow comparator since there is no vec5 type.
2914*61046927SAndroid Build Coastguard Worker                  */
2915*61046927SAndroid Build Coastguard Worker                 _textureCubeArrayShadow(ir_tex, texture_cube_map_array, &glsl_type_builtin_samplerCubeArrayShadow),
2916*61046927SAndroid Build Coastguard Worker 
2917*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2),
2918*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2),
2919*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2),
2920*61046927SAndroid Build Coastguard Worker 
2921*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3),
2922*61046927SAndroid Build Coastguard Worker 
2923*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_external_es3, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerExternalOES, &glsl_type_builtin_vec2),
2924*61046927SAndroid Build Coastguard Worker 
2925*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float),
2926*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float),
2927*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float),
2928*61046927SAndroid Build Coastguard Worker 
2929*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2),
2930*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2),
2931*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2),
2932*61046927SAndroid Build Coastguard Worker 
2933*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3),
2934*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3),
2935*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3),
2936*61046927SAndroid Build Coastguard Worker 
2937*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3),
2938*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3),
2939*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3),
2940*61046927SAndroid Build Coastguard Worker 
2941*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow,   &glsl_type_builtin_vec3),
2942*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow,   &glsl_type_builtin_vec3),
2943*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4),
2944*61046927SAndroid Build Coastguard Worker 
2945*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2),
2946*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2),
2947*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2),
2948*61046927SAndroid Build Coastguard Worker 
2949*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3),
2950*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3),
2951*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3),
2952*61046927SAndroid Build Coastguard Worker 
2953*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_texture_cube_map_array, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4),
2954*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_texture_cube_map_array, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4),
2955*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_texture_cube_map_array, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4),
2956*61046927SAndroid Build Coastguard Worker 
2957*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3),
2958*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_or_gpu_shader4_and_tex_shadow_lod, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4),
2959*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_or_gpu_shader4_and_tex_shadow_lod, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4),
2960*61046927SAndroid Build Coastguard Worker 
2961*61046927SAndroid Build Coastguard Worker                 _textureCubeArrayShadow(ir_tex, v130_or_gpu_shader4_and_tex_cube_map_array, &glsl_type_builtin_samplerCubeArrayShadow),
2962*61046927SAndroid Build Coastguard Worker                 _textureCubeArrayShadow(ir_txb, v130_or_gpu_shader4_and_tex_cube_map_array, &glsl_type_builtin_samplerCubeArrayShadow),
2963*61046927SAndroid Build Coastguard Worker                 NULL);
2964*61046927SAndroid Build Coastguard Worker 
2965*61046927SAndroid Build Coastguard Worker    add_function("textureLod",
2966*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float),
2967*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float),
2968*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float),
2969*61046927SAndroid Build Coastguard Worker 
2970*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2),
2971*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2),
2972*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2),
2973*61046927SAndroid Build Coastguard Worker 
2974*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3),
2975*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3),
2976*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3),
2977*61046927SAndroid Build Coastguard Worker 
2978*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3),
2979*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3),
2980*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3),
2981*61046927SAndroid Build Coastguard Worker 
2982*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3),
2983*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3),
2984*61046927SAndroid Build Coastguard Worker 
2985*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2),
2986*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2),
2987*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2),
2988*61046927SAndroid Build Coastguard Worker 
2989*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3),
2990*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3),
2991*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3),
2992*61046927SAndroid Build Coastguard Worker 
2993*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, texture_cube_map_array, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4),
2994*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, texture_cube_map_array, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4),
2995*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, texture_cube_map_array, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4),
2996*61046927SAndroid Build Coastguard Worker 
2997*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3),
2998*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_or_gpu_shader4_and_tex_shadow_lod, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4),
2999*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_or_gpu_shader4_and_tex_shadow_lod, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4),
3000*61046927SAndroid Build Coastguard Worker                 _textureCubeArrayShadow(ir_txl, v130_or_gpu_shader4_and_tex_cube_map_array, &glsl_type_builtin_samplerCubeArrayShadow),
3001*61046927SAndroid Build Coastguard Worker                 NULL);
3002*61046927SAndroid Build Coastguard Worker 
3003*61046927SAndroid Build Coastguard Worker    add_function("textureOffset",
3004*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_OFFSET),
3005*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3006*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3007*61046927SAndroid Build Coastguard Worker 
3008*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET),
3009*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3010*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3011*61046927SAndroid Build Coastguard Worker 
3012*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET),
3013*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3014*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3015*61046927SAndroid Build Coastguard Worker 
3016*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_OFFSET),
3017*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET),
3018*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET),
3019*61046927SAndroid Build Coastguard Worker 
3020*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3021*61046927SAndroid Build Coastguard Worker 
3022*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3023*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3024*61046927SAndroid Build Coastguard Worker 
3025*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_OFFSET),
3026*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3027*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3028*61046927SAndroid Build Coastguard Worker 
3029*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET),
3030*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3031*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3032*61046927SAndroid Build Coastguard Worker 
3033*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3034*61046927SAndroid Build Coastguard Worker                 /* The next one was forgotten in GLSL 1.30 spec. It's from
3035*61046927SAndroid Build Coastguard Worker                  * EXT_gpu_shader4 originally. It was added in 4.30 with the
3036*61046927SAndroid Build Coastguard Worker                  * wrong syntax. This was corrected in 4.40. 4.30 indicates
3037*61046927SAndroid Build Coastguard Worker                  * that it was intended to be included previously, so allow it
3038*61046927SAndroid Build Coastguard Worker                  * in 1.30.
3039*61046927SAndroid Build Coastguard Worker                  */
3040*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET),
3041*61046927SAndroid Build Coastguard Worker 
3042*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_OFFSET),
3043*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3044*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3045*61046927SAndroid Build Coastguard Worker 
3046*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET),
3047*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3048*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3049*61046927SAndroid Build Coastguard Worker 
3050*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET),
3051*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3052*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3053*61046927SAndroid Build Coastguard Worker 
3054*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3055*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3056*61046927SAndroid Build Coastguard Worker 
3057*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_OFFSET),
3058*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3059*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3060*61046927SAndroid Build Coastguard Worker 
3061*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET),
3062*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3063*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3064*61046927SAndroid Build Coastguard Worker 
3065*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3066*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_or_gpu_shader4_and_tex_shadow_lod, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET),
3067*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_or_gpu_shader4_and_tex_shadow_lod, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET),
3068*61046927SAndroid Build Coastguard Worker                 NULL);
3069*61046927SAndroid Build Coastguard Worker 
3070*61046927SAndroid Build Coastguard Worker    add_function("texture1DOffset",
3071*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_OFFSET),
3072*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3073*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3074*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_OFFSET),
3075*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3076*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3077*61046927SAndroid Build Coastguard Worker                 NULL);
3078*61046927SAndroid Build Coastguard Worker 
3079*61046927SAndroid Build Coastguard Worker    add_function("texture2DOffset",
3080*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET),
3081*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3082*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3083*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET),
3084*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3085*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3086*61046927SAndroid Build Coastguard Worker                 NULL);
3087*61046927SAndroid Build Coastguard Worker 
3088*61046927SAndroid Build Coastguard Worker    add_function("texture3DOffset",
3089*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET),
3090*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3091*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3092*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET),
3093*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3094*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3095*61046927SAndroid Build Coastguard Worker                 NULL);
3096*61046927SAndroid Build Coastguard Worker 
3097*61046927SAndroid Build Coastguard Worker    add_function("texture2DRectOffset",
3098*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_OFFSET),
3099*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET),
3100*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET),
3101*61046927SAndroid Build Coastguard Worker                 NULL);
3102*61046927SAndroid Build Coastguard Worker 
3103*61046927SAndroid Build Coastguard Worker    add_function("shadow2DRectOffset",
3104*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3105*61046927SAndroid Build Coastguard Worker                 NULL);
3106*61046927SAndroid Build Coastguard Worker 
3107*61046927SAndroid Build Coastguard Worker    add_function("shadow1DOffset",
3108*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3109*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3110*61046927SAndroid Build Coastguard Worker                 NULL);
3111*61046927SAndroid Build Coastguard Worker 
3112*61046927SAndroid Build Coastguard Worker    add_function("shadow2DOffset",
3113*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3114*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3115*61046927SAndroid Build Coastguard Worker                 NULL);
3116*61046927SAndroid Build Coastguard Worker 
3117*61046927SAndroid Build Coastguard Worker    add_function("texture1DArrayOffset",
3118*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_array,                     &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_OFFSET),
3119*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_array_integer,             &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3120*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_array_integer,             &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3121*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_array_derivs_only,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_OFFSET),
3122*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_array_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3123*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_array_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3124*61046927SAndroid Build Coastguard Worker                 NULL);
3125*61046927SAndroid Build Coastguard Worker 
3126*61046927SAndroid Build Coastguard Worker    add_function("texture2DArrayOffset",
3127*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_array,                     &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET),
3128*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_array_integer,             &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3129*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_array_integer,             &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3130*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_array_derivs_only,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET),
3131*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_array_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3132*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_array_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3133*61046927SAndroid Build Coastguard Worker                 NULL);
3134*61046927SAndroid Build Coastguard Worker 
3135*61046927SAndroid Build Coastguard Worker    add_function("shadow1DArrayOffset",
3136*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_array,             &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3137*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_array_derivs_only, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3138*61046927SAndroid Build Coastguard Worker                 NULL);
3139*61046927SAndroid Build Coastguard Worker 
3140*61046927SAndroid Build Coastguard Worker    add_function("shadow2DArrayOffset",
3141*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_array, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET),
3142*61046927SAndroid Build Coastguard Worker                 NULL);
3143*61046927SAndroid Build Coastguard Worker 
3144*61046927SAndroid Build Coastguard Worker    add_function("textureProj",
3145*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec2, TEX_PROJECT),
3146*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
3147*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
3148*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec4, TEX_PROJECT),
3149*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
3150*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
3151*61046927SAndroid Build Coastguard Worker 
3152*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec3, TEX_PROJECT),
3153*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
3154*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
3155*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec4, TEX_PROJECT),
3156*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
3157*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
3158*61046927SAndroid Build Coastguard Worker 
3159*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec4, TEX_PROJECT),
3160*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
3161*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
3162*61046927SAndroid Build Coastguard Worker 
3163*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
3164*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
3165*61046927SAndroid Build Coastguard Worker 
3166*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec3, TEX_PROJECT),
3167*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT),
3168*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_external_es3, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerExternalOES, &glsl_type_builtin_vec3, TEX_PROJECT),
3169*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_external_es3, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerExternalOES, &glsl_type_builtin_vec4, TEX_PROJECT),
3170*61046927SAndroid Build Coastguard Worker 
3171*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT),
3172*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec4, TEX_PROJECT),
3173*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT),
3174*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT),
3175*61046927SAndroid Build Coastguard Worker 
3176*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
3177*61046927SAndroid Build Coastguard Worker 
3178*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec2, TEX_PROJECT),
3179*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
3180*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
3181*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec4, TEX_PROJECT),
3182*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
3183*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
3184*61046927SAndroid Build Coastguard Worker 
3185*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec3, TEX_PROJECT),
3186*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
3187*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
3188*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec4, TEX_PROJECT),
3189*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
3190*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
3191*61046927SAndroid Build Coastguard Worker 
3192*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec4, TEX_PROJECT),
3193*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
3194*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
3195*61046927SAndroid Build Coastguard Worker 
3196*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
3197*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
3198*61046927SAndroid Build Coastguard Worker                 NULL);
3199*61046927SAndroid Build Coastguard Worker 
3200*61046927SAndroid Build Coastguard Worker    add_function("texelFetch",
3201*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_int),
3202*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_int),
3203*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_int),
3204*61046927SAndroid Build Coastguard Worker 
3205*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_ivec2),
3206*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_ivec2),
3207*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_ivec2),
3208*61046927SAndroid Build Coastguard Worker 
3209*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_ivec3),
3210*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_ivec3),
3211*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_ivec3),
3212*61046927SAndroid Build Coastguard Worker 
3213*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_ivec2),
3214*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_ivec2),
3215*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_ivec2),
3216*61046927SAndroid Build Coastguard Worker 
3217*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_ivec2),
3218*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_ivec2),
3219*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_ivec2),
3220*61046927SAndroid Build Coastguard Worker 
3221*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_ivec3),
3222*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_ivec3),
3223*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_ivec3),
3224*61046927SAndroid Build Coastguard Worker 
3225*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_buffer, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerBuffer,  &glsl_type_builtin_int),
3226*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_buffer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerBuffer, &glsl_type_builtin_int),
3227*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_buffer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerBuffer, &glsl_type_builtin_int),
3228*61046927SAndroid Build Coastguard Worker 
3229*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_multisample, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DMS,  &glsl_type_builtin_ivec2),
3230*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_multisample, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DMS, &glsl_type_builtin_ivec2),
3231*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_multisample, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DMS, &glsl_type_builtin_ivec2),
3232*61046927SAndroid Build Coastguard Worker 
3233*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_multisample_array, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DMSArray,  &glsl_type_builtin_ivec3),
3234*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_multisample_array, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DMSArray, &glsl_type_builtin_ivec3),
3235*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_multisample_array, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DMSArray, &glsl_type_builtin_ivec3),
3236*61046927SAndroid Build Coastguard Worker 
3237*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_external_es3, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerExternalOES, &glsl_type_builtin_ivec2),
3238*61046927SAndroid Build Coastguard Worker 
3239*61046927SAndroid Build Coastguard Worker                 NULL);
3240*61046927SAndroid Build Coastguard Worker 
3241*61046927SAndroid Build Coastguard Worker    add_function("texelFetch1D",
3242*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_int),
3243*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_int),
3244*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_int),
3245*61046927SAndroid Build Coastguard Worker                 NULL);
3246*61046927SAndroid Build Coastguard Worker 
3247*61046927SAndroid Build Coastguard Worker    add_function("texelFetch2D",
3248*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_ivec2),
3249*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_ivec2),
3250*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_ivec2),
3251*61046927SAndroid Build Coastguard Worker                 NULL);
3252*61046927SAndroid Build Coastguard Worker 
3253*61046927SAndroid Build Coastguard Worker    add_function("texelFetch3D",
3254*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_ivec3),
3255*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_ivec3),
3256*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_ivec3),
3257*61046927SAndroid Build Coastguard Worker                 NULL);
3258*61046927SAndroid Build Coastguard Worker 
3259*61046927SAndroid Build Coastguard Worker    add_function("texelFetch2DRect",
3260*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_rect,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_ivec2),
3261*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_rect_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_ivec2),
3262*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_rect_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_ivec2),
3263*61046927SAndroid Build Coastguard Worker                 NULL);
3264*61046927SAndroid Build Coastguard Worker 
3265*61046927SAndroid Build Coastguard Worker    add_function("texelFetch1DArray",
3266*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_array,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_ivec2),
3267*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_array_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_ivec2),
3268*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_array_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_ivec2),
3269*61046927SAndroid Build Coastguard Worker                 NULL);
3270*61046927SAndroid Build Coastguard Worker 
3271*61046927SAndroid Build Coastguard Worker    add_function("texelFetch2DArray",
3272*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_array,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_ivec3),
3273*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_array_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_ivec3),
3274*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_array_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_ivec3),
3275*61046927SAndroid Build Coastguard Worker                 NULL);
3276*61046927SAndroid Build Coastguard Worker 
3277*61046927SAndroid Build Coastguard Worker    add_function("texelFetchBuffer",
3278*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_tbo,         &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerBuffer,  &glsl_type_builtin_int),
3279*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_tbo_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerBuffer, &glsl_type_builtin_int),
3280*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_tbo_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerBuffer, &glsl_type_builtin_int),
3281*61046927SAndroid Build Coastguard Worker                 NULL);
3282*61046927SAndroid Build Coastguard Worker 
3283*61046927SAndroid Build Coastguard Worker    add_function("texelFetchOffset",
3284*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_int, &glsl_type_builtin_int),
3285*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_int, &glsl_type_builtin_int),
3286*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_int, &glsl_type_builtin_int),
3287*61046927SAndroid Build Coastguard Worker 
3288*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),
3289*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),
3290*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),
3291*61046927SAndroid Build Coastguard Worker 
3292*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec3),
3293*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec3),
3294*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec3),
3295*61046927SAndroid Build Coastguard Worker 
3296*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),
3297*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),
3298*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),
3299*61046927SAndroid Build Coastguard Worker 
3300*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_ivec2, &glsl_type_builtin_int),
3301*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_ivec2, &glsl_type_builtin_int),
3302*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_ivec2, &glsl_type_builtin_int),
3303*61046927SAndroid Build Coastguard Worker 
3304*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec2),
3305*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec2),
3306*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec2),
3307*61046927SAndroid Build Coastguard Worker 
3308*61046927SAndroid Build Coastguard Worker                 NULL);
3309*61046927SAndroid Build Coastguard Worker 
3310*61046927SAndroid Build Coastguard Worker    add_function("texelFetch1DOffset",
3311*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_int, &glsl_type_builtin_int),
3312*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_int, &glsl_type_builtin_int),
3313*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_int, &glsl_type_builtin_int),
3314*61046927SAndroid Build Coastguard Worker                 NULL);
3315*61046927SAndroid Build Coastguard Worker 
3316*61046927SAndroid Build Coastguard Worker    add_function("texelFetch2DOffset",
3317*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),
3318*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),
3319*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),
3320*61046927SAndroid Build Coastguard Worker                 NULL);
3321*61046927SAndroid Build Coastguard Worker 
3322*61046927SAndroid Build Coastguard Worker    add_function("texelFetch3DOffset",
3323*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec3),
3324*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec3),
3325*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec3),
3326*61046927SAndroid Build Coastguard Worker                 NULL);
3327*61046927SAndroid Build Coastguard Worker 
3328*61046927SAndroid Build Coastguard Worker    add_function("texelFetch2DRectOffset",
3329*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_rect,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),
3330*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_rect_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),
3331*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_rect_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2),
3332*61046927SAndroid Build Coastguard Worker                 NULL);
3333*61046927SAndroid Build Coastguard Worker 
3334*61046927SAndroid Build Coastguard Worker    add_function("texelFetch1DArrayOffset",
3335*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_array,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_ivec2, &glsl_type_builtin_int),
3336*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_array_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_ivec2, &glsl_type_builtin_int),
3337*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_array_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_ivec2, &glsl_type_builtin_int),
3338*61046927SAndroid Build Coastguard Worker                 NULL);
3339*61046927SAndroid Build Coastguard Worker 
3340*61046927SAndroid Build Coastguard Worker    add_function("texelFetch2DArrayOffset",
3341*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_array,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec2),
3342*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_array_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec2),
3343*61046927SAndroid Build Coastguard Worker                 _texelFetch(gpu_shader4_array_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec2),
3344*61046927SAndroid Build Coastguard Worker                 NULL);
3345*61046927SAndroid Build Coastguard Worker 
3346*61046927SAndroid Build Coastguard Worker    add_function("textureProjOffset",
3347*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3348*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3349*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3350*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3351*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3352*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3353*61046927SAndroid Build Coastguard Worker 
3354*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3355*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3356*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3357*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3358*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3359*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3360*61046927SAndroid Build Coastguard Worker 
3361*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3362*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3363*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3364*61046927SAndroid Build Coastguard Worker 
3365*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3366*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3367*61046927SAndroid Build Coastguard Worker 
3368*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3369*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3370*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3371*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3372*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3373*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3374*61046927SAndroid Build Coastguard Worker 
3375*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3376*61046927SAndroid Build Coastguard Worker 
3377*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3378*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3379*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3380*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3381*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3382*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3383*61046927SAndroid Build Coastguard Worker 
3384*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3385*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3386*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3387*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3388*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3389*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3390*61046927SAndroid Build Coastguard Worker 
3391*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3392*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3393*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3394*61046927SAndroid Build Coastguard Worker 
3395*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3396*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3397*61046927SAndroid Build Coastguard Worker                 NULL);
3398*61046927SAndroid Build Coastguard Worker 
3399*61046927SAndroid Build Coastguard Worker    add_function("texture1DProjOffset",
3400*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3401*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3402*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3403*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3404*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3405*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3406*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3407*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3408*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3409*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3410*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3411*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3412*61046927SAndroid Build Coastguard Worker                 NULL);
3413*61046927SAndroid Build Coastguard Worker 
3414*61046927SAndroid Build Coastguard Worker    add_function("texture2DProjOffset",
3415*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3416*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3417*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3418*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3419*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3420*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3421*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3422*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3423*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3424*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3425*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3426*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3427*61046927SAndroid Build Coastguard Worker                 NULL);
3428*61046927SAndroid Build Coastguard Worker 
3429*61046927SAndroid Build Coastguard Worker    add_function("texture3DProjOffset",
3430*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3431*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3432*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,     &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3433*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3434*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3435*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3436*61046927SAndroid Build Coastguard Worker                 NULL);
3437*61046927SAndroid Build Coastguard Worker 
3438*61046927SAndroid Build Coastguard Worker    add_function("shadow1DProjOffset",
3439*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3440*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3441*61046927SAndroid Build Coastguard Worker                 NULL);
3442*61046927SAndroid Build Coastguard Worker 
3443*61046927SAndroid Build Coastguard Worker    add_function("shadow2DProjOffset",
3444*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3445*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3446*61046927SAndroid Build Coastguard Worker                 NULL);
3447*61046927SAndroid Build Coastguard Worker 
3448*61046927SAndroid Build Coastguard Worker    add_function("texture2DRectProjOffset",
3449*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3450*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3451*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3452*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3453*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3454*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3455*61046927SAndroid Build Coastguard Worker                 NULL);
3456*61046927SAndroid Build Coastguard Worker 
3457*61046927SAndroid Build Coastguard Worker    add_function("shadow2DRectProjOffset",
3458*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3459*61046927SAndroid Build Coastguard Worker                 NULL);
3460*61046927SAndroid Build Coastguard Worker 
3461*61046927SAndroid Build Coastguard Worker    add_function("textureLodOffset",
3462*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_OFFSET),
3463*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3464*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3465*61046927SAndroid Build Coastguard Worker 
3466*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET),
3467*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3468*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3469*61046927SAndroid Build Coastguard Worker 
3470*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET),
3471*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3472*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3473*61046927SAndroid Build Coastguard Worker 
3474*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3475*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3476*61046927SAndroid Build Coastguard Worker 
3477*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_OFFSET),
3478*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3479*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3480*61046927SAndroid Build Coastguard Worker 
3481*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET),
3482*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3483*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3484*61046927SAndroid Build Coastguard Worker 
3485*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3486*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_or_gpu_shader4_and_tex_shadow_lod, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET),
3487*61046927SAndroid Build Coastguard Worker                 NULL);
3488*61046927SAndroid Build Coastguard Worker 
3489*61046927SAndroid Build Coastguard Worker    add_function("texture1DLodOffset",
3490*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_OFFSET),
3491*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3492*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3493*61046927SAndroid Build Coastguard Worker                 NULL);
3494*61046927SAndroid Build Coastguard Worker 
3495*61046927SAndroid Build Coastguard Worker    add_function("texture2DLodOffset",
3496*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET),
3497*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3498*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3499*61046927SAndroid Build Coastguard Worker                 NULL);
3500*61046927SAndroid Build Coastguard Worker 
3501*61046927SAndroid Build Coastguard Worker    add_function("texture3DLodOffset",
3502*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET),
3503*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3504*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3505*61046927SAndroid Build Coastguard Worker                 NULL);
3506*61046927SAndroid Build Coastguard Worker 
3507*61046927SAndroid Build Coastguard Worker    add_function("shadow1DLodOffset",
3508*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3509*61046927SAndroid Build Coastguard Worker                 NULL);
3510*61046927SAndroid Build Coastguard Worker 
3511*61046927SAndroid Build Coastguard Worker    add_function("shadow2DLodOffset",
3512*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3513*61046927SAndroid Build Coastguard Worker                 NULL);
3514*61046927SAndroid Build Coastguard Worker 
3515*61046927SAndroid Build Coastguard Worker    add_function("texture1DArrayLodOffset",
3516*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_array,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_OFFSET),
3517*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_array_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3518*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_array_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3519*61046927SAndroid Build Coastguard Worker                 NULL);
3520*61046927SAndroid Build Coastguard Worker 
3521*61046927SAndroid Build Coastguard Worker    add_function("texture2DArrayLodOffset",
3522*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_array,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET),
3523*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_array_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3524*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_array_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3525*61046927SAndroid Build Coastguard Worker                 NULL);
3526*61046927SAndroid Build Coastguard Worker 
3527*61046927SAndroid Build Coastguard Worker    add_function("shadow1DArrayLodOffset",
3528*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_array, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3529*61046927SAndroid Build Coastguard Worker                 NULL);
3530*61046927SAndroid Build Coastguard Worker 
3531*61046927SAndroid Build Coastguard Worker    add_function("textureProjLod",
3532*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec2, TEX_PROJECT),
3533*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
3534*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
3535*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec4, TEX_PROJECT),
3536*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
3537*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
3538*61046927SAndroid Build Coastguard Worker 
3539*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec3, TEX_PROJECT),
3540*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
3541*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
3542*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec4, TEX_PROJECT),
3543*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
3544*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
3545*61046927SAndroid Build Coastguard Worker 
3546*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec4, TEX_PROJECT),
3547*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
3548*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
3549*61046927SAndroid Build Coastguard Worker 
3550*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
3551*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
3552*61046927SAndroid Build Coastguard Worker                 NULL);
3553*61046927SAndroid Build Coastguard Worker 
3554*61046927SAndroid Build Coastguard Worker    add_function("textureProjLodOffset",
3555*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3556*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3557*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3558*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3559*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3560*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3561*61046927SAndroid Build Coastguard Worker 
3562*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3563*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3564*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3565*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3566*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3567*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3568*61046927SAndroid Build Coastguard Worker 
3569*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3570*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3571*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3572*61046927SAndroid Build Coastguard Worker 
3573*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3574*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3575*61046927SAndroid Build Coastguard Worker                 NULL);
3576*61046927SAndroid Build Coastguard Worker 
3577*61046927SAndroid Build Coastguard Worker    add_function("texture1DProjLodOffset",
3578*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3579*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3580*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3581*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3582*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3583*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3584*61046927SAndroid Build Coastguard Worker                 NULL);
3585*61046927SAndroid Build Coastguard Worker 
3586*61046927SAndroid Build Coastguard Worker    add_function("texture2DProjLodOffset",
3587*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3588*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3589*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3590*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3591*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3592*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3593*61046927SAndroid Build Coastguard Worker                 NULL);
3594*61046927SAndroid Build Coastguard Worker 
3595*61046927SAndroid Build Coastguard Worker    add_function("texture3DProjLodOffset",
3596*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3597*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3598*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3599*61046927SAndroid Build Coastguard Worker                 NULL);
3600*61046927SAndroid Build Coastguard Worker 
3601*61046927SAndroid Build Coastguard Worker    add_function("shadow1DProjLodOffset",
3602*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3603*61046927SAndroid Build Coastguard Worker                 NULL);
3604*61046927SAndroid Build Coastguard Worker 
3605*61046927SAndroid Build Coastguard Worker    add_function("shadow2DProjLodOffset",
3606*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3607*61046927SAndroid Build Coastguard Worker                 NULL);
3608*61046927SAndroid Build Coastguard Worker 
3609*61046927SAndroid Build Coastguard Worker    add_function("textureGrad",
3610*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float),
3611*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float),
3612*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float),
3613*61046927SAndroid Build Coastguard Worker 
3614*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2),
3615*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2),
3616*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2),
3617*61046927SAndroid Build Coastguard Worker 
3618*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3),
3619*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3),
3620*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3),
3621*61046927SAndroid Build Coastguard Worker 
3622*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3),
3623*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3),
3624*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3),
3625*61046927SAndroid Build Coastguard Worker 
3626*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2),
3627*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2),
3628*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2),
3629*61046927SAndroid Build Coastguard Worker 
3630*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3),
3631*61046927SAndroid Build Coastguard Worker 
3632*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow,   &glsl_type_builtin_vec3),
3633*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow,   &glsl_type_builtin_vec3),
3634*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4),
3635*61046927SAndroid Build Coastguard Worker 
3636*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2),
3637*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2),
3638*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2),
3639*61046927SAndroid Build Coastguard Worker 
3640*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3),
3641*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3),
3642*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3),
3643*61046927SAndroid Build Coastguard Worker 
3644*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, texture_cube_map_array, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4),
3645*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, texture_cube_map_array, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4),
3646*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, texture_cube_map_array, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4),
3647*61046927SAndroid Build Coastguard Worker 
3648*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3),
3649*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4),
3650*61046927SAndroid Build Coastguard Worker                 NULL);
3651*61046927SAndroid Build Coastguard Worker 
3652*61046927SAndroid Build Coastguard Worker    add_function("textureGradOffset",
3653*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_OFFSET),
3654*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3655*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3656*61046927SAndroid Build Coastguard Worker 
3657*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET),
3658*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3659*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3660*61046927SAndroid Build Coastguard Worker 
3661*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET),
3662*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3663*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3664*61046927SAndroid Build Coastguard Worker 
3665*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_OFFSET),
3666*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET),
3667*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET),
3668*61046927SAndroid Build Coastguard Worker 
3669*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3670*61046927SAndroid Build Coastguard Worker 
3671*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3672*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3673*61046927SAndroid Build Coastguard Worker 
3674*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_OFFSET),
3675*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3676*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3677*61046927SAndroid Build Coastguard Worker 
3678*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET),
3679*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3680*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3681*61046927SAndroid Build Coastguard Worker 
3682*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3683*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET),
3684*61046927SAndroid Build Coastguard Worker                 NULL);
3685*61046927SAndroid Build Coastguard Worker 
3686*61046927SAndroid Build Coastguard Worker    add_function("texture1DGradOffset",
3687*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_OFFSET),
3688*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3689*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_OFFSET),
3690*61046927SAndroid Build Coastguard Worker                 NULL);
3691*61046927SAndroid Build Coastguard Worker 
3692*61046927SAndroid Build Coastguard Worker    add_function("texture2DGradOffset",
3693*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET),
3694*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3695*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
3696*61046927SAndroid Build Coastguard Worker                 NULL);
3697*61046927SAndroid Build Coastguard Worker 
3698*61046927SAndroid Build Coastguard Worker    add_function("texture3DGradOffset",
3699*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET),
3700*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3701*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET),
3702*61046927SAndroid Build Coastguard Worker                 NULL);
3703*61046927SAndroid Build Coastguard Worker 
3704*61046927SAndroid Build Coastguard Worker    add_function("texture2DRectGradOffset",
3705*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_OFFSET),
3706*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET),
3707*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET),
3708*61046927SAndroid Build Coastguard Worker                 NULL);
3709*61046927SAndroid Build Coastguard Worker 
3710*61046927SAndroid Build Coastguard Worker    add_function("shadow2DRectGradOffset",
3711*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3712*61046927SAndroid Build Coastguard Worker                 NULL);
3713*61046927SAndroid Build Coastguard Worker 
3714*61046927SAndroid Build Coastguard Worker    add_function("shadow1DGradOffset",
3715*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3716*61046927SAndroid Build Coastguard Worker                 NULL);
3717*61046927SAndroid Build Coastguard Worker 
3718*61046927SAndroid Build Coastguard Worker    add_function("shadow2DGradOffset",
3719*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3720*61046927SAndroid Build Coastguard Worker                 NULL);
3721*61046927SAndroid Build Coastguard Worker 
3722*61046927SAndroid Build Coastguard Worker    add_function("texture1DArrayGradOffset",
3723*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_OFFSET),
3724*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3725*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET),
3726*61046927SAndroid Build Coastguard Worker                 NULL);
3727*61046927SAndroid Build Coastguard Worker 
3728*61046927SAndroid Build Coastguard Worker    add_function("texture2DArrayGradOffset",
3729*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET),
3730*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3731*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
3732*61046927SAndroid Build Coastguard Worker                 NULL);
3733*61046927SAndroid Build Coastguard Worker 
3734*61046927SAndroid Build Coastguard Worker    add_function("shadow1DArrayGradOffset",
3735*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
3736*61046927SAndroid Build Coastguard Worker                 NULL);
3737*61046927SAndroid Build Coastguard Worker 
3738*61046927SAndroid Build Coastguard Worker    add_function("shadow2DArrayGradOffset",
3739*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET),
3740*61046927SAndroid Build Coastguard Worker                 NULL);
3741*61046927SAndroid Build Coastguard Worker 
3742*61046927SAndroid Build Coastguard Worker    add_function("textureProjGrad",
3743*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec2, TEX_PROJECT),
3744*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
3745*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
3746*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec4, TEX_PROJECT),
3747*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
3748*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
3749*61046927SAndroid Build Coastguard Worker 
3750*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec3, TEX_PROJECT),
3751*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
3752*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
3753*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec4, TEX_PROJECT),
3754*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
3755*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
3756*61046927SAndroid Build Coastguard Worker 
3757*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec4, TEX_PROJECT),
3758*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
3759*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
3760*61046927SAndroid Build Coastguard Worker 
3761*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec3, TEX_PROJECT),
3762*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT),
3763*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT),
3764*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec4, TEX_PROJECT),
3765*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT),
3766*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT),
3767*61046927SAndroid Build Coastguard Worker 
3768*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
3769*61046927SAndroid Build Coastguard Worker 
3770*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
3771*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
3772*61046927SAndroid Build Coastguard Worker                 NULL);
3773*61046927SAndroid Build Coastguard Worker 
3774*61046927SAndroid Build Coastguard Worker    add_function("textureProjGradOffset",
3775*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3776*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3777*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3778*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3779*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3780*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3781*61046927SAndroid Build Coastguard Worker 
3782*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3783*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3784*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3785*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3786*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3787*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3788*61046927SAndroid Build Coastguard Worker 
3789*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3790*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3791*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3792*61046927SAndroid Build Coastguard Worker 
3793*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3794*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3795*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3796*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3797*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3798*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3799*61046927SAndroid Build Coastguard Worker 
3800*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3801*61046927SAndroid Build Coastguard Worker 
3802*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3803*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3804*61046927SAndroid Build Coastguard Worker                 NULL);
3805*61046927SAndroid Build Coastguard Worker 
3806*61046927SAndroid Build Coastguard Worker    add_function("texture1DProjGradOffset",
3807*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3808*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3809*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT | TEX_OFFSET),
3810*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3811*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3812*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3813*61046927SAndroid Build Coastguard Worker                 NULL);
3814*61046927SAndroid Build Coastguard Worker 
3815*61046927SAndroid Build Coastguard Worker    add_function("texture2DProjGradOffset",
3816*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3817*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3818*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3819*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3820*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3821*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3822*61046927SAndroid Build Coastguard Worker                 NULL);
3823*61046927SAndroid Build Coastguard Worker 
3824*61046927SAndroid Build Coastguard Worker    add_function("texture3DProjGradOffset",
3825*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3826*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3827*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3828*61046927SAndroid Build Coastguard Worker                 NULL);
3829*61046927SAndroid Build Coastguard Worker 
3830*61046927SAndroid Build Coastguard Worker    add_function("texture2DRectProjGradOffset",
3831*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3832*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3833*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT | TEX_OFFSET),
3834*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3835*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3836*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3837*61046927SAndroid Build Coastguard Worker                 NULL);
3838*61046927SAndroid Build Coastguard Worker 
3839*61046927SAndroid Build Coastguard Worker    add_function("shadow2DRectProjGradOffset",
3840*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3841*61046927SAndroid Build Coastguard Worker                 NULL);
3842*61046927SAndroid Build Coastguard Worker 
3843*61046927SAndroid Build Coastguard Worker    add_function("shadow1DProjGradOffset",
3844*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3845*61046927SAndroid Build Coastguard Worker                 NULL);
3846*61046927SAndroid Build Coastguard Worker 
3847*61046927SAndroid Build Coastguard Worker    add_function("shadow2DProjGradOffset",
3848*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT | TEX_OFFSET),
3849*61046927SAndroid Build Coastguard Worker                 NULL);
3850*61046927SAndroid Build Coastguard Worker 
3851*61046927SAndroid Build Coastguard Worker    add_function("EmitVertex",   _EmitVertex(),   NULL);
3852*61046927SAndroid Build Coastguard Worker    add_function("EndPrimitive", _EndPrimitive(), NULL);
3853*61046927SAndroid Build Coastguard Worker    add_function("EmitStreamVertex",
3854*61046927SAndroid Build Coastguard Worker                 _EmitStreamVertex(gs_streams, &glsl_type_builtin_uint),
3855*61046927SAndroid Build Coastguard Worker                 _EmitStreamVertex(gs_streams, &glsl_type_builtin_int),
3856*61046927SAndroid Build Coastguard Worker                 NULL);
3857*61046927SAndroid Build Coastguard Worker    add_function("EndStreamPrimitive",
3858*61046927SAndroid Build Coastguard Worker                 _EndStreamPrimitive(gs_streams, &glsl_type_builtin_uint),
3859*61046927SAndroid Build Coastguard Worker                 _EndStreamPrimitive(gs_streams, &glsl_type_builtin_int),
3860*61046927SAndroid Build Coastguard Worker                 NULL);
3861*61046927SAndroid Build Coastguard Worker    add_function("barrier", _barrier(), NULL);
3862*61046927SAndroid Build Coastguard Worker 
3863*61046927SAndroid Build Coastguard Worker    add_function("textureQueryLOD",
3864*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float),
3865*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float),
3866*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float),
3867*61046927SAndroid Build Coastguard Worker 
3868*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2),
3869*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2),
3870*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2),
3871*61046927SAndroid Build Coastguard Worker 
3872*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3),
3873*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3),
3874*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3),
3875*61046927SAndroid Build Coastguard Worker 
3876*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3),
3877*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3),
3878*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3),
3879*61046927SAndroid Build Coastguard Worker 
3880*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_float),
3881*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_float),
3882*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_float),
3883*61046927SAndroid Build Coastguard Worker 
3884*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec2),
3885*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec2),
3886*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec2),
3887*61046927SAndroid Build Coastguard Worker 
3888*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec3),
3889*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec3),
3890*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec3),
3891*61046927SAndroid Build Coastguard Worker 
3892*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_float),
3893*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec2),
3894*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec3),
3895*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_float),
3896*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec2),
3897*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(texture_query_lod, &glsl_type_builtin_samplerCubeArrayShadow, &glsl_type_builtin_vec3),
3898*61046927SAndroid Build Coastguard Worker                 NULL);
3899*61046927SAndroid Build Coastguard Worker 
3900*61046927SAndroid Build Coastguard Worker    add_function("textureQueryLod",
3901*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float),
3902*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float),
3903*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float),
3904*61046927SAndroid Build Coastguard Worker 
3905*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2),
3906*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2),
3907*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2),
3908*61046927SAndroid Build Coastguard Worker 
3909*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3),
3910*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3),
3911*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3),
3912*61046927SAndroid Build Coastguard Worker 
3913*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3),
3914*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3),
3915*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3),
3916*61046927SAndroid Build Coastguard Worker 
3917*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_float),
3918*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_float),
3919*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_float),
3920*61046927SAndroid Build Coastguard Worker 
3921*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec2),
3922*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec2),
3923*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec2),
3924*61046927SAndroid Build Coastguard Worker 
3925*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec3),
3926*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec3),
3927*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec3),
3928*61046927SAndroid Build Coastguard Worker 
3929*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_float),
3930*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec2),
3931*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec3),
3932*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_float),
3933*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec2),
3934*61046927SAndroid Build Coastguard Worker                 _textureQueryLod(v400_derivatives_only, &glsl_type_builtin_samplerCubeArrayShadow, &glsl_type_builtin_vec3),
3935*61046927SAndroid Build Coastguard Worker                 NULL);
3936*61046927SAndroid Build Coastguard Worker 
3937*61046927SAndroid Build Coastguard Worker    add_function("textureQueryLevels",
3938*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_sampler1D),
3939*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_sampler2D),
3940*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_sampler3D),
3941*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_samplerCube),
3942*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_sampler1DArray),
3943*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_sampler2DArray),
3944*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_samplerCubeArray),
3945*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_sampler1DShadow),
3946*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_sampler2DShadow),
3947*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_samplerCubeShadow),
3948*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_sampler1DArrayShadow),
3949*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_sampler2DArrayShadow),
3950*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_samplerCubeArrayShadow),
3951*61046927SAndroid Build Coastguard Worker 
3952*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_isampler1D),
3953*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_isampler2D),
3954*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_isampler3D),
3955*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_isamplerCube),
3956*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_isampler1DArray),
3957*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_isampler2DArray),
3958*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_isamplerCubeArray),
3959*61046927SAndroid Build Coastguard Worker 
3960*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_usampler1D),
3961*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_usampler2D),
3962*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_usampler3D),
3963*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_usamplerCube),
3964*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_usampler1DArray),
3965*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_usampler2DArray),
3966*61046927SAndroid Build Coastguard Worker                 _textureQueryLevels(texture_query_levels, &glsl_type_builtin_usamplerCubeArray),
3967*61046927SAndroid Build Coastguard Worker 
3968*61046927SAndroid Build Coastguard Worker                 NULL);
3969*61046927SAndroid Build Coastguard Worker 
3970*61046927SAndroid Build Coastguard Worker    add_function("textureSamplesIdenticalEXT",
3971*61046927SAndroid Build Coastguard Worker                 _textureSamplesIdentical(texture_samples_identical, &glsl_type_builtin_sampler2DMS,  &glsl_type_builtin_ivec2),
3972*61046927SAndroid Build Coastguard Worker                 _textureSamplesIdentical(texture_samples_identical, &glsl_type_builtin_isampler2DMS, &glsl_type_builtin_ivec2),
3973*61046927SAndroid Build Coastguard Worker                 _textureSamplesIdentical(texture_samples_identical, &glsl_type_builtin_usampler2DMS, &glsl_type_builtin_ivec2),
3974*61046927SAndroid Build Coastguard Worker 
3975*61046927SAndroid Build Coastguard Worker                 _textureSamplesIdentical(texture_samples_identical_array, &glsl_type_builtin_sampler2DMSArray,  &glsl_type_builtin_ivec3),
3976*61046927SAndroid Build Coastguard Worker                 _textureSamplesIdentical(texture_samples_identical_array, &glsl_type_builtin_isampler2DMSArray, &glsl_type_builtin_ivec3),
3977*61046927SAndroid Build Coastguard Worker                 _textureSamplesIdentical(texture_samples_identical_array, &glsl_type_builtin_usampler2DMSArray, &glsl_type_builtin_ivec3),
3978*61046927SAndroid Build Coastguard Worker                 NULL);
3979*61046927SAndroid Build Coastguard Worker 
3980*61046927SAndroid Build Coastguard Worker    add_function("texture1D",
3981*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v110_deprecated_texture,                      &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_float),
3982*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v110_derivatives_only_deprecated_texture,     &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_float),
3983*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,               &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1D, &glsl_type_builtin_float),
3984*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only,   &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1D, &glsl_type_builtin_float),
3985*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,               &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1D, &glsl_type_builtin_float),
3986*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only,   &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1D, &glsl_type_builtin_float),
3987*61046927SAndroid Build Coastguard Worker                 NULL);
3988*61046927SAndroid Build Coastguard Worker 
3989*61046927SAndroid Build Coastguard Worker    add_function("texture1DArray",
3990*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_array,           &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DArray, &glsl_type_builtin_vec2),
3991*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, texture_array_derivs_only,&glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DArray, &glsl_type_builtin_vec2),
3992*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_array_integer,             &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2),
3993*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_array_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2),
3994*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_array_integer,             &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2),
3995*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_array_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2),
3996*61046927SAndroid Build Coastguard Worker                 NULL);
3997*61046927SAndroid Build Coastguard Worker 
3998*61046927SAndroid Build Coastguard Worker    add_function("texture1DProj",
3999*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v110_deprecated_texture,                  &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4000*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v110_deprecated_texture,                  &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4001*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v110_derivatives_only_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4002*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v110_derivatives_only_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4003*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4004*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4005*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4006*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4007*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4008*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4009*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4010*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4011*61046927SAndroid Build Coastguard Worker                 NULL);
4012*61046927SAndroid Build Coastguard Worker 
4013*61046927SAndroid Build Coastguard Worker    add_function("texture1DLod",
4014*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v110_lod_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_float),
4015*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1D, &glsl_type_builtin_float),
4016*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1D, &glsl_type_builtin_float),
4017*61046927SAndroid Build Coastguard Worker                 NULL);
4018*61046927SAndroid Build Coastguard Worker 
4019*61046927SAndroid Build Coastguard Worker    add_function("texture1DArrayLod",
4020*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, texture_array_lod, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DArray, &glsl_type_builtin_vec2),
4021*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_array_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2),
4022*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_array_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2),
4023*61046927SAndroid Build Coastguard Worker                 NULL);
4024*61046927SAndroid Build Coastguard Worker 
4025*61046927SAndroid Build Coastguard Worker    add_function("texture1DProjLod",
4026*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v110_lod_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4027*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v110_lod_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4028*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4029*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4030*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4031*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4032*61046927SAndroid Build Coastguard Worker                 NULL);
4033*61046927SAndroid Build Coastguard Worker 
4034*61046927SAndroid Build Coastguard Worker    add_function("texture2D",
4035*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, deprecated_texture,                  &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2),
4036*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, deprecated_texture_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2),
4037*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2),
4038*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2),
4039*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2),
4040*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2),
4041*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_external,        &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerExternalOES, &glsl_type_builtin_vec2),
4042*61046927SAndroid Build Coastguard Worker                 NULL);
4043*61046927SAndroid Build Coastguard Worker 
4044*61046927SAndroid Build Coastguard Worker    add_function("texture2DArray",
4045*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_array,           &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArray, &glsl_type_builtin_vec3),
4046*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, texture_array_derivs_only, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArray, &glsl_type_builtin_vec3),
4047*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_array_integer,             &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3),
4048*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_array_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3),
4049*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_array_integer,             &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3),
4050*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_array_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3),
4051*61046927SAndroid Build Coastguard Worker                 NULL);
4052*61046927SAndroid Build Coastguard Worker 
4053*61046927SAndroid Build Coastguard Worker    add_function("texture2DProj",
4054*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, deprecated_texture,                  &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4055*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, deprecated_texture,                  &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4056*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, deprecated_texture_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4057*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, deprecated_texture_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4058*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4059*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4060*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4061*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4062*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4063*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4064*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4065*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4066*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_external,        &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerExternalOES, &glsl_type_builtin_vec3, TEX_PROJECT),
4067*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_external,        &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerExternalOES, &glsl_type_builtin_vec4, TEX_PROJECT),
4068*61046927SAndroid Build Coastguard Worker                 NULL);
4069*61046927SAndroid Build Coastguard Worker 
4070*61046927SAndroid Build Coastguard Worker    add_function("texture2DLod",
4071*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, lod_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2),
4072*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2),
4073*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2),
4074*61046927SAndroid Build Coastguard Worker                 NULL);
4075*61046927SAndroid Build Coastguard Worker 
4076*61046927SAndroid Build Coastguard Worker    add_function("texture2DArrayLod",
4077*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, texture_array_lod, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArray, &glsl_type_builtin_vec3),
4078*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_array_integer, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3),
4079*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_array_integer, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3),
4080*61046927SAndroid Build Coastguard Worker                 NULL);
4081*61046927SAndroid Build Coastguard Worker 
4082*61046927SAndroid Build Coastguard Worker    add_function("texture2DProjLod",
4083*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, lod_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4084*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, lod_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4085*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4086*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4087*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4088*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4089*61046927SAndroid Build Coastguard Worker                 NULL);
4090*61046927SAndroid Build Coastguard Worker 
4091*61046927SAndroid Build Coastguard Worker    add_function("texture3D",
4092*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, tex3d,                   &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D, &glsl_type_builtin_vec3),
4093*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_tex3d,       &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D, &glsl_type_builtin_vec3),
4094*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3),
4095*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3),
4096*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3),
4097*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3),
4098*61046927SAndroid Build Coastguard Worker                 NULL);
4099*61046927SAndroid Build Coastguard Worker 
4100*61046927SAndroid Build Coastguard Worker    add_function("texture3DProj",
4101*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, tex3d,                   &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4102*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_tex3d,       &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4103*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4104*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4105*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4106*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4107*61046927SAndroid Build Coastguard Worker                 NULL);
4108*61046927SAndroid Build Coastguard Worker 
4109*61046927SAndroid Build Coastguard Worker    add_function("texture3DLod",
4110*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, tex3d_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D, &glsl_type_builtin_vec3),
4111*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3),
4112*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3),
4113*61046927SAndroid Build Coastguard Worker                 NULL);
4114*61046927SAndroid Build Coastguard Worker 
4115*61046927SAndroid Build Coastguard Worker    add_function("texture3DProjLod",
4116*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, tex3d_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4117*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4118*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4119*61046927SAndroid Build Coastguard Worker                 NULL);
4120*61046927SAndroid Build Coastguard Worker 
4121*61046927SAndroid Build Coastguard Worker    add_function("textureCube",
4122*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, deprecated_texture,                  &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube, &glsl_type_builtin_vec3),
4123*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, deprecated_texture_derivatives_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube, &glsl_type_builtin_vec3),
4124*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_ivec4,  &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3),
4125*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3),
4126*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_integer,             &glsl_type_builtin_uvec4,  &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3),
4127*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_integer_derivs_only, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3),
4128*61046927SAndroid Build Coastguard Worker                 NULL);
4129*61046927SAndroid Build Coastguard Worker 
4130*61046927SAndroid Build Coastguard Worker    add_function("textureCubeLod",
4131*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, lod_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube, &glsl_type_builtin_vec3),
4132*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3),
4133*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3),
4134*61046927SAndroid Build Coastguard Worker                 NULL);
4135*61046927SAndroid Build Coastguard Worker 
4136*61046927SAndroid Build Coastguard Worker    add_function("texture2DRect",
4137*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_rectangle, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec2),
4138*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2),
4139*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2),
4140*61046927SAndroid Build Coastguard Worker                 NULL);
4141*61046927SAndroid Build Coastguard Worker 
4142*61046927SAndroid Build Coastguard Worker    add_function("texture2DRectProj",
4143*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_rectangle, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT),
4144*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_rectangle, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT),
4145*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT),
4146*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT),
4147*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT),
4148*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4_rect_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT),
4149*61046927SAndroid Build Coastguard Worker                 NULL);
4150*61046927SAndroid Build Coastguard Worker 
4151*61046927SAndroid Build Coastguard Worker    add_function("shadow1D",
4152*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v110_deprecated_texture,                  &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3),
4153*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v110_derivatives_only_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3),
4154*61046927SAndroid Build Coastguard Worker                 NULL);
4155*61046927SAndroid Build Coastguard Worker 
4156*61046927SAndroid Build Coastguard Worker    add_function("shadow1DArray",
4157*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_array,    &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3),
4158*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, texture_array_derivs_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3),
4159*61046927SAndroid Build Coastguard Worker                 NULL);
4160*61046927SAndroid Build Coastguard Worker 
4161*61046927SAndroid Build Coastguard Worker    add_function("shadow2D",
4162*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v110_deprecated_texture,                  &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3),
4163*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v110_derivatives_only_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3),
4164*61046927SAndroid Build Coastguard Worker                 NULL);
4165*61046927SAndroid Build Coastguard Worker 
4166*61046927SAndroid Build Coastguard Worker    add_function("shadow2DEXT",
4167*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_shadow2Dext,                  &glsl_type_builtin_float,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3),
4168*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, texture_shadow2Dext, &glsl_type_builtin_float,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3),
4169*61046927SAndroid Build Coastguard Worker                 NULL);
4170*61046927SAndroid Build Coastguard Worker 
4171*61046927SAndroid Build Coastguard Worker    add_function("shadow2DArray",
4172*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_array,    &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4),
4173*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, texture_array_derivs_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4),
4174*61046927SAndroid Build Coastguard Worker                 NULL);
4175*61046927SAndroid Build Coastguard Worker 
4176*61046927SAndroid Build Coastguard Worker    add_function("shadow1DProj",
4177*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v110_deprecated_texture,                  &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4178*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v110_derivatives_only_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4179*61046927SAndroid Build Coastguard Worker                 NULL);
4180*61046927SAndroid Build Coastguard Worker 
4181*61046927SAndroid Build Coastguard Worker    add_function("shadow2DArray",
4182*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_array,    &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4),
4183*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, texture_array_derivs_only, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4),
4184*61046927SAndroid Build Coastguard Worker                 NULL);
4185*61046927SAndroid Build Coastguard Worker 
4186*61046927SAndroid Build Coastguard Worker    add_function("shadowCube",
4187*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, gpu_shader4,             &glsl_type_builtin_vec4, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4),
4188*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, gpu_shader4_derivs_only, &glsl_type_builtin_vec4, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4),
4189*61046927SAndroid Build Coastguard Worker                 NULL);
4190*61046927SAndroid Build Coastguard Worker 
4191*61046927SAndroid Build Coastguard Worker    add_function("shadow2DProj",
4192*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v110_deprecated_texture,                  &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4193*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v110_derivatives_only_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4194*61046927SAndroid Build Coastguard Worker                 NULL);
4195*61046927SAndroid Build Coastguard Worker 
4196*61046927SAndroid Build Coastguard Worker    add_function("shadow2DProjEXT",
4197*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_shadow2Dext,                  &glsl_type_builtin_float,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4198*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, texture_shadow2Dext, &glsl_type_builtin_float,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4199*61046927SAndroid Build Coastguard Worker                 NULL);
4200*61046927SAndroid Build Coastguard Worker 
4201*61046927SAndroid Build Coastguard Worker    add_function("shadow1DLod",
4202*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v110_lod_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3),
4203*61046927SAndroid Build Coastguard Worker                 NULL);
4204*61046927SAndroid Build Coastguard Worker 
4205*61046927SAndroid Build Coastguard Worker    add_function("shadow2DLod",
4206*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v110_lod_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3),
4207*61046927SAndroid Build Coastguard Worker                 NULL);
4208*61046927SAndroid Build Coastguard Worker 
4209*61046927SAndroid Build Coastguard Worker    add_function("shadow1DArrayLod",
4210*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, texture_array_lod, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3),
4211*61046927SAndroid Build Coastguard Worker                 NULL);
4212*61046927SAndroid Build Coastguard Worker 
4213*61046927SAndroid Build Coastguard Worker    add_function("shadow1DProjLod",
4214*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v110_lod_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4215*61046927SAndroid Build Coastguard Worker                 NULL);
4216*61046927SAndroid Build Coastguard Worker 
4217*61046927SAndroid Build Coastguard Worker    add_function("shadow2DProjLod",
4218*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v110_lod_deprecated_texture, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4219*61046927SAndroid Build Coastguard Worker                 NULL);
4220*61046927SAndroid Build Coastguard Worker 
4221*61046927SAndroid Build Coastguard Worker    add_function("shadow2DRect",
4222*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_rectangle, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3),
4223*61046927SAndroid Build Coastguard Worker                 NULL);
4224*61046927SAndroid Build Coastguard Worker 
4225*61046927SAndroid Build Coastguard Worker    add_function("shadow2DRectProj",
4226*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_rectangle, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4227*61046927SAndroid Build Coastguard Worker                 NULL);
4228*61046927SAndroid Build Coastguard Worker 
4229*61046927SAndroid Build Coastguard Worker    add_function("texture1DGradARB",
4230*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_float),
4231*61046927SAndroid Build Coastguard Worker                 NULL);
4232*61046927SAndroid Build Coastguard Worker 
4233*61046927SAndroid Build Coastguard Worker    add_function("texture1DProjGradARB",
4234*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4235*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4236*61046927SAndroid Build Coastguard Worker                 NULL);
4237*61046927SAndroid Build Coastguard Worker 
4238*61046927SAndroid Build Coastguard Worker    add_function("texture2DGradARB",
4239*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2),
4240*61046927SAndroid Build Coastguard Worker                 NULL);
4241*61046927SAndroid Build Coastguard Worker 
4242*61046927SAndroid Build Coastguard Worker    add_function("texture2DProjGradARB",
4243*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4244*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4245*61046927SAndroid Build Coastguard Worker                 NULL);
4246*61046927SAndroid Build Coastguard Worker 
4247*61046927SAndroid Build Coastguard Worker    add_function("texture3DGradARB",
4248*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D, &glsl_type_builtin_vec3),
4249*61046927SAndroid Build Coastguard Worker                 NULL);
4250*61046927SAndroid Build Coastguard Worker 
4251*61046927SAndroid Build Coastguard Worker    add_function("texture3DProjGradARB",
4252*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4253*61046927SAndroid Build Coastguard Worker                 NULL);
4254*61046927SAndroid Build Coastguard Worker 
4255*61046927SAndroid Build Coastguard Worker    add_function("textureCubeGradARB",
4256*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube, &glsl_type_builtin_vec3),
4257*61046927SAndroid Build Coastguard Worker                 NULL);
4258*61046927SAndroid Build Coastguard Worker 
4259*61046927SAndroid Build Coastguard Worker    add_function("shadow1DGradARB",
4260*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3),
4261*61046927SAndroid Build Coastguard Worker                 NULL);
4262*61046927SAndroid Build Coastguard Worker 
4263*61046927SAndroid Build Coastguard Worker    add_function("shadow1DProjGradARB",
4264*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4265*61046927SAndroid Build Coastguard Worker                 NULL);
4266*61046927SAndroid Build Coastguard Worker 
4267*61046927SAndroid Build Coastguard Worker    add_function("shadow2DGradARB",
4268*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3),
4269*61046927SAndroid Build Coastguard Worker                 NULL);
4270*61046927SAndroid Build Coastguard Worker 
4271*61046927SAndroid Build Coastguard Worker    add_function("shadow2DProjGradARB",
4272*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4273*61046927SAndroid Build Coastguard Worker                 NULL);
4274*61046927SAndroid Build Coastguard Worker 
4275*61046927SAndroid Build Coastguard Worker    add_function("texture2DRectGradARB",
4276*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod_and_rect, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec2),
4277*61046927SAndroid Build Coastguard Worker                 NULL);
4278*61046927SAndroid Build Coastguard Worker 
4279*61046927SAndroid Build Coastguard Worker    add_function("texture2DRectProjGradARB",
4280*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod_and_rect, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT),
4281*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod_and_rect, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT),
4282*61046927SAndroid Build Coastguard Worker                 NULL);
4283*61046927SAndroid Build Coastguard Worker 
4284*61046927SAndroid Build Coastguard Worker    add_function("shadow2DRectGradARB",
4285*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod_and_rect, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3),
4286*61046927SAndroid Build Coastguard Worker                 NULL);
4287*61046927SAndroid Build Coastguard Worker 
4288*61046927SAndroid Build Coastguard Worker    add_function("shadow2DRectProjGradARB",
4289*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, shader_texture_lod_and_rect, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4290*61046927SAndroid Build Coastguard Worker                 NULL);
4291*61046927SAndroid Build Coastguard Worker 
4292*61046927SAndroid Build Coastguard Worker    add_function("texture4",
4293*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_texture4, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2),
4294*61046927SAndroid Build Coastguard Worker                 NULL);
4295*61046927SAndroid Build Coastguard Worker 
4296*61046927SAndroid Build Coastguard Worker    add_function("texture1DGrad",
4297*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_float),
4298*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1D, &glsl_type_builtin_float),
4299*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1D, &glsl_type_builtin_float),
4300*61046927SAndroid Build Coastguard Worker                 NULL);
4301*61046927SAndroid Build Coastguard Worker 
4302*61046927SAndroid Build Coastguard Worker    add_function("texture1DProjGrad",
4303*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4304*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4305*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4306*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4307*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec2, TEX_PROJECT),
4308*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1D, &glsl_type_builtin_vec4, TEX_PROJECT),
4309*61046927SAndroid Build Coastguard Worker                 NULL);
4310*61046927SAndroid Build Coastguard Worker 
4311*61046927SAndroid Build Coastguard Worker    add_function("texture1DArrayGrad",
4312*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray, &glsl_type_builtin_vec2),
4313*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2),
4314*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2),
4315*61046927SAndroid Build Coastguard Worker                 NULL);
4316*61046927SAndroid Build Coastguard Worker 
4317*61046927SAndroid Build Coastguard Worker    add_function("texture2DGrad",
4318*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2),
4319*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2),
4320*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2),
4321*61046927SAndroid Build Coastguard Worker                 NULL);
4322*61046927SAndroid Build Coastguard Worker 
4323*61046927SAndroid Build Coastguard Worker    add_function("texture2DProjGrad",
4324*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4325*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4326*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4327*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4328*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec3, TEX_PROJECT),
4329*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec4, TEX_PROJECT),
4330*61046927SAndroid Build Coastguard Worker                 NULL);
4331*61046927SAndroid Build Coastguard Worker 
4332*61046927SAndroid Build Coastguard Worker    add_function("texture2DArrayGrad",
4333*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray, &glsl_type_builtin_vec3),
4334*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3),
4335*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3),
4336*61046927SAndroid Build Coastguard Worker                 NULL);
4337*61046927SAndroid Build Coastguard Worker 
4338*61046927SAndroid Build Coastguard Worker    add_function("texture3DGrad",
4339*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D, &glsl_type_builtin_vec3),
4340*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3),
4341*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3),
4342*61046927SAndroid Build Coastguard Worker                 NULL);
4343*61046927SAndroid Build Coastguard Worker 
4344*61046927SAndroid Build Coastguard Worker    add_function("texture3DProjGrad",
4345*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4346*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4347*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec4, TEX_PROJECT),
4348*61046927SAndroid Build Coastguard Worker                 NULL);
4349*61046927SAndroid Build Coastguard Worker 
4350*61046927SAndroid Build Coastguard Worker    add_function("textureCubeGrad",
4351*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube, &glsl_type_builtin_vec3),
4352*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3),
4353*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3),
4354*61046927SAndroid Build Coastguard Worker                 NULL);
4355*61046927SAndroid Build Coastguard Worker 
4356*61046927SAndroid Build Coastguard Worker    add_function("shadow1DGrad",
4357*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3),
4358*61046927SAndroid Build Coastguard Worker                 NULL);
4359*61046927SAndroid Build Coastguard Worker 
4360*61046927SAndroid Build Coastguard Worker    add_function("shadow1DProjGrad",
4361*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4362*61046927SAndroid Build Coastguard Worker                 NULL);
4363*61046927SAndroid Build Coastguard Worker 
4364*61046927SAndroid Build Coastguard Worker    add_function("shadow1DArrayGrad",
4365*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3),
4366*61046927SAndroid Build Coastguard Worker                 NULL);
4367*61046927SAndroid Build Coastguard Worker 
4368*61046927SAndroid Build Coastguard Worker    add_function("shadow2DGrad",
4369*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3),
4370*61046927SAndroid Build Coastguard Worker                 NULL);
4371*61046927SAndroid Build Coastguard Worker 
4372*61046927SAndroid Build Coastguard Worker    add_function("shadow2DProjGrad",
4373*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4374*61046927SAndroid Build Coastguard Worker                 NULL);
4375*61046927SAndroid Build Coastguard Worker 
4376*61046927SAndroid Build Coastguard Worker    add_function("shadow2DArrayGrad",
4377*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_array, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4),
4378*61046927SAndroid Build Coastguard Worker                 NULL);
4379*61046927SAndroid Build Coastguard Worker 
4380*61046927SAndroid Build Coastguard Worker    add_function("texture2DRectGrad",
4381*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec2),
4382*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2),
4383*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2),
4384*61046927SAndroid Build Coastguard Worker                 NULL);
4385*61046927SAndroid Build Coastguard Worker 
4386*61046927SAndroid Build Coastguard Worker    add_function("texture2DRectProjGrad",
4387*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT),
4388*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect,         &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT),
4389*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT),
4390*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect_integer, &glsl_type_builtin_ivec4,  &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT),
4391*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec3, TEX_PROJECT),
4392*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect_integer, &glsl_type_builtin_uvec4,  &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec4, TEX_PROJECT),
4393*61046927SAndroid Build Coastguard Worker                 NULL);
4394*61046927SAndroid Build Coastguard Worker 
4395*61046927SAndroid Build Coastguard Worker    add_function("shadow2DRectGrad",
4396*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3),
4397*61046927SAndroid Build Coastguard Worker                 NULL);
4398*61046927SAndroid Build Coastguard Worker 
4399*61046927SAndroid Build Coastguard Worker    add_function("shadow2DRectProjGrad",
4400*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4_rect, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec4, TEX_PROJECT),
4401*61046927SAndroid Build Coastguard Worker                 NULL);
4402*61046927SAndroid Build Coastguard Worker 
4403*61046927SAndroid Build Coastguard Worker    add_function("shadowCubeGrad",
4404*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, gpu_shader4, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4),
4405*61046927SAndroid Build Coastguard Worker                 NULL);
4406*61046927SAndroid Build Coastguard Worker 
4407*61046927SAndroid Build Coastguard Worker    add_function("textureGather",
4408*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_or_es31, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2),
4409*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_or_es31, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2),
4410*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_or_es31, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2),
4411*61046927SAndroid Build Coastguard Worker 
4412*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec2),
4413*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2),
4414*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2),
4415*61046927SAndroid Build Coastguard Worker 
4416*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_or_es31, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArray, &glsl_type_builtin_vec3),
4417*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_or_es31, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3),
4418*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_or_es31, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3),
4419*61046927SAndroid Build Coastguard Worker 
4420*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_or_es31, &glsl_type_builtin_vec4, &glsl_type_builtin_samplerCube, &glsl_type_builtin_vec3),
4421*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_or_es31, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3),
4422*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_or_es31, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3),
4423*61046927SAndroid Build Coastguard Worker 
4424*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_cube_map_array, &glsl_type_builtin_vec4, &glsl_type_builtin_samplerCubeArray, &glsl_type_builtin_vec4),
4425*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_cube_map_array, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4),
4426*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_cube_map_array, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4),
4427*61046927SAndroid Build Coastguard Worker 
4428*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_es31, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2, TEX_COMPONENT),
4429*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_es31, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_COMPONENT),
4430*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_es31, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_COMPONENT),
4431*61046927SAndroid Build Coastguard Worker 
4432*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec2, TEX_COMPONENT),
4433*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_COMPONENT),
4434*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_COMPONENT),
4435*61046927SAndroid Build Coastguard Worker 
4436*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_es31, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArray, &glsl_type_builtin_vec3, TEX_COMPONENT),
4437*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_es31, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_COMPONENT),
4438*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_es31, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_COMPONENT),
4439*61046927SAndroid Build Coastguard Worker 
4440*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_es31, &glsl_type_builtin_vec4, &glsl_type_builtin_samplerCube, &glsl_type_builtin_vec3, TEX_COMPONENT),
4441*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_es31, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_COMPONENT),
4442*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_es31, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_COMPONENT),
4443*61046927SAndroid Build Coastguard Worker 
4444*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_OES_texture_cube_map_array, &glsl_type_builtin_vec4, &glsl_type_builtin_samplerCubeArray, &glsl_type_builtin_vec4, TEX_COMPONENT),
4445*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_OES_texture_cube_map_array, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_COMPONENT),
4446*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_OES_texture_cube_map_array, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_COMPONENT),
4447*61046927SAndroid Build Coastguard Worker 
4448*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_es31, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec2),
4449*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_es31, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec3),
4450*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_es31, &glsl_type_builtin_vec4, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec3),
4451*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_or_OES_texture_cube_map_array, &glsl_type_builtin_vec4, &glsl_type_builtin_samplerCubeArrayShadow, &glsl_type_builtin_vec4),
4452*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec2),
4453*61046927SAndroid Build Coastguard Worker                 NULL);
4454*61046927SAndroid Build Coastguard Worker 
4455*61046927SAndroid Build Coastguard Worker    add_function("textureGatherOffset",
4456*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_only_or_es31, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
4457*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_only_or_es31, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
4458*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_only_or_es31, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET),
4459*61046927SAndroid Build Coastguard Worker 
4460*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_only_or_es31, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
4461*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_only_or_es31, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
4462*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_only_or_es31, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET),
4463*61046927SAndroid Build Coastguard Worker 
4464*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, es31_not_gs5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2, TEX_OFFSET | TEX_COMPONENT),
4465*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, es31_not_gs5, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET | TEX_COMPONENT),
4466*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, es31_not_gs5, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET | TEX_COMPONENT),
4467*61046927SAndroid Build Coastguard Worker 
4468*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, es31_not_gs5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET | TEX_COMPONENT),
4469*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, es31_not_gs5, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET | TEX_COMPONENT),
4470*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, es31_not_gs5, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET | TEX_COMPONENT),
4471*61046927SAndroid Build Coastguard Worker 
4472*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST),
4473*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST),
4474*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST),
4475*61046927SAndroid Build Coastguard Worker 
4476*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST),
4477*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST),
4478*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST),
4479*61046927SAndroid Build Coastguard Worker 
4480*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST),
4481*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST),
4482*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST),
4483*61046927SAndroid Build Coastguard Worker 
4484*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST | TEX_COMPONENT),
4485*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST | TEX_COMPONENT),
4486*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST | TEX_COMPONENT),
4487*61046927SAndroid Build Coastguard Worker 
4488*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST | TEX_COMPONENT),
4489*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST | TEX_COMPONENT),
4490*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST | TEX_COMPONENT),
4491*61046927SAndroid Build Coastguard Worker 
4492*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST | TEX_COMPONENT),
4493*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST | TEX_COMPONENT),
4494*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST | TEX_COMPONENT),
4495*61046927SAndroid Build Coastguard Worker 
4496*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST),
4497*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST),
4498*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST),
4499*61046927SAndroid Build Coastguard Worker 
4500*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, es31_not_gs5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec2, TEX_OFFSET),
4501*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, es31_not_gs5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET),
4502*61046927SAndroid Build Coastguard Worker                 NULL);
4503*61046927SAndroid Build Coastguard Worker 
4504*61046927SAndroid Build Coastguard Worker    add_function("textureGatherOffsets",
4505*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY),
4506*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY),
4507*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY),
4508*61046927SAndroid Build Coastguard Worker 
4509*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY | TEX_COMPONENT),
4510*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY | TEX_COMPONENT),
4511*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY | TEX_COMPONENT),
4512*61046927SAndroid Build Coastguard Worker 
4513*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY),
4514*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY),
4515*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY),
4516*61046927SAndroid Build Coastguard Worker 
4517*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY | TEX_COMPONENT),
4518*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY | TEX_COMPONENT),
4519*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY | TEX_COMPONENT),
4520*61046927SAndroid Build Coastguard Worker 
4521*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY),
4522*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY),
4523*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY),
4524*61046927SAndroid Build Coastguard Worker 
4525*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY | TEX_COMPONENT),
4526*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY | TEX_COMPONENT),
4527*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY | TEX_COMPONENT),
4528*61046927SAndroid Build Coastguard Worker 
4529*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY),
4530*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_es, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY),
4531*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY),
4532*61046927SAndroid Build Coastguard Worker                 NULL);
4533*61046927SAndroid Build Coastguard Worker 
4534*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureARB",
4535*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_SPARSE),
4536*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_SPARSE),
4537*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_SPARSE),
4538*61046927SAndroid Build Coastguard Worker 
4539*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_SPARSE),
4540*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_SPARSE),
4541*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_SPARSE),
4542*61046927SAndroid Build Coastguard Worker 
4543*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3, TEX_SPARSE),
4544*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE),
4545*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE),
4546*61046927SAndroid Build Coastguard Worker 
4547*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow,   &glsl_type_builtin_vec3, TEX_SPARSE),
4548*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4, TEX_SPARSE),
4549*61046927SAndroid Build Coastguard Worker 
4550*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_SPARSE),
4551*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE),
4552*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE),
4553*61046927SAndroid Build Coastguard Worker 
4554*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_cube_map_array_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4, TEX_SPARSE),
4555*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_cube_map_array_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE),
4556*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_cube_map_array_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE),
4557*61046927SAndroid Build Coastguard Worker 
4558*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_SPARSE),
4559*61046927SAndroid Build Coastguard Worker 
4560*61046927SAndroid Build Coastguard Worker                 _textureCubeArrayShadow(ir_tex, texture_cube_map_array_and_sparse, &glsl_type_builtin_samplerCubeArrayShadow, TEX_SPARSE),
4561*61046927SAndroid Build Coastguard Worker 
4562*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_SPARSE),
4563*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_SPARSE),
4564*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_SPARSE),
4565*61046927SAndroid Build Coastguard Worker 
4566*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3, TEX_SPARSE),
4567*61046927SAndroid Build Coastguard Worker 
4568*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_SPARSE),
4569*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_SPARSE),
4570*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_SPARSE),
4571*61046927SAndroid Build Coastguard Worker 
4572*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_SPARSE),
4573*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_SPARSE),
4574*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_SPARSE),
4575*61046927SAndroid Build Coastguard Worker 
4576*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3, TEX_SPARSE),
4577*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE),
4578*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE),
4579*61046927SAndroid Build Coastguard Worker 
4580*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow,   &glsl_type_builtin_vec3, TEX_SPARSE),
4581*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4, TEX_SPARSE),
4582*61046927SAndroid Build Coastguard Worker 
4583*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_SPARSE),
4584*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE),
4585*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE),
4586*61046927SAndroid Build Coastguard Worker 
4587*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_texture_cube_map_array_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4, TEX_SPARSE),
4588*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_texture_cube_map_array_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE),
4589*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_texture_cube_map_array_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE),
4590*61046927SAndroid Build Coastguard Worker                 NULL);
4591*61046927SAndroid Build Coastguard Worker 
4592*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureLodARB",
4593*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_SPARSE),
4594*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_SPARSE),
4595*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_SPARSE),
4596*61046927SAndroid Build Coastguard Worker 
4597*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_SPARSE),
4598*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_SPARSE),
4599*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_SPARSE),
4600*61046927SAndroid Build Coastguard Worker 
4601*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3, TEX_SPARSE),
4602*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE),
4603*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE),
4604*61046927SAndroid Build Coastguard Worker 
4605*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_SPARSE),
4606*61046927SAndroid Build Coastguard Worker 
4607*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_SPARSE),
4608*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE),
4609*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE),
4610*61046927SAndroid Build Coastguard Worker 
4611*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, texture_cube_map_array_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4, TEX_SPARSE),
4612*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, texture_cube_map_array_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE),
4613*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, texture_cube_map_array_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE),
4614*61046927SAndroid Build Coastguard Worker                 NULL);
4615*61046927SAndroid Build Coastguard Worker 
4616*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureOffsetARB",
4617*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4618*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4619*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4620*61046927SAndroid Build Coastguard Worker 
4621*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4622*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4623*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4624*61046927SAndroid Build Coastguard Worker 
4625*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4626*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4627*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4628*61046927SAndroid Build Coastguard Worker 
4629*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4630*61046927SAndroid Build Coastguard Worker 
4631*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4632*61046927SAndroid Build Coastguard Worker 
4633*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4634*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4635*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4636*61046927SAndroid Build Coastguard Worker 
4637*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET|TEX_SPARSE),
4638*61046927SAndroid Build Coastguard Worker 
4639*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4640*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4641*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4642*61046927SAndroid Build Coastguard Worker 
4643*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4644*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4645*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4646*61046927SAndroid Build Coastguard Worker 
4647*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4648*61046927SAndroid Build Coastguard Worker 
4649*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4650*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4651*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4652*61046927SAndroid Build Coastguard Worker                 NULL);
4653*61046927SAndroid Build Coastguard Worker 
4654*61046927SAndroid Build Coastguard Worker    add_function("sparseTexelFetchARB",
4655*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_ivec2, NULL, true),
4656*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_ivec2, NULL, true),
4657*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_ivec2, NULL, true),
4658*61046927SAndroid Build Coastguard Worker 
4659*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_ivec3, NULL, true),
4660*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_ivec3, NULL, true),
4661*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_ivec3, NULL, true),
4662*61046927SAndroid Build Coastguard Worker 
4663*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_ivec2, NULL, true),
4664*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_ivec2, NULL, true),
4665*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_ivec2, NULL, true),
4666*61046927SAndroid Build Coastguard Worker 
4667*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_ivec3, NULL, true),
4668*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_ivec3, NULL, true),
4669*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_ivec3, NULL, true),
4670*61046927SAndroid Build Coastguard Worker 
4671*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_multisample_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DMS,  &glsl_type_builtin_ivec2, NULL, true),
4672*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_multisample_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DMS, &glsl_type_builtin_ivec2, NULL, true),
4673*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_multisample_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DMS, &glsl_type_builtin_ivec2, NULL, true),
4674*61046927SAndroid Build Coastguard Worker 
4675*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_multisample_array_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DMSArray,  &glsl_type_builtin_ivec3, NULL, true),
4676*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_multisample_array_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DMSArray, &glsl_type_builtin_ivec3, NULL, true),
4677*61046927SAndroid Build Coastguard Worker                 _texelFetch(texture_multisample_array_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DMSArray, &glsl_type_builtin_ivec3, NULL, true),
4678*61046927SAndroid Build Coastguard Worker                 NULL);
4679*61046927SAndroid Build Coastguard Worker 
4680*61046927SAndroid Build Coastguard Worker    add_function("sparseTexelFetchOffsetARB",
4681*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2, true),
4682*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2, true),
4683*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2, true),
4684*61046927SAndroid Build Coastguard Worker 
4685*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec3, true),
4686*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec3, true),
4687*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec3, true),
4688*61046927SAndroid Build Coastguard Worker 
4689*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2, true),
4690*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2, true),
4691*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_ivec2, &glsl_type_builtin_ivec2, true),
4692*61046927SAndroid Build Coastguard Worker 
4693*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec2, true),
4694*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec2, true),
4695*61046927SAndroid Build Coastguard Worker                 _texelFetch(v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_ivec3, &glsl_type_builtin_ivec2, true),
4696*61046927SAndroid Build Coastguard Worker                 NULL);
4697*61046927SAndroid Build Coastguard Worker 
4698*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureLodOffsetARB",
4699*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4700*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4701*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4702*61046927SAndroid Build Coastguard Worker 
4703*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4704*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4705*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4706*61046927SAndroid Build Coastguard Worker 
4707*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4708*61046927SAndroid Build Coastguard Worker 
4709*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4710*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4711*61046927SAndroid Build Coastguard Worker                 _texture(ir_txl, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4712*61046927SAndroid Build Coastguard Worker                 NULL);
4713*61046927SAndroid Build Coastguard Worker 
4714*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureGradARB",
4715*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_SPARSE),
4716*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_SPARSE),
4717*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_SPARSE),
4718*61046927SAndroid Build Coastguard Worker 
4719*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_SPARSE),
4720*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_SPARSE),
4721*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_SPARSE),
4722*61046927SAndroid Build Coastguard Worker 
4723*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3, TEX_SPARSE),
4724*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE),
4725*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE),
4726*61046927SAndroid Build Coastguard Worker 
4727*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_SPARSE),
4728*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_SPARSE),
4729*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_SPARSE),
4730*61046927SAndroid Build Coastguard Worker 
4731*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3, TEX_SPARSE),
4732*61046927SAndroid Build Coastguard Worker 
4733*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow,   &glsl_type_builtin_vec3, TEX_SPARSE),
4734*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4, TEX_SPARSE),
4735*61046927SAndroid Build Coastguard Worker 
4736*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_SPARSE),
4737*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE),
4738*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE),
4739*61046927SAndroid Build Coastguard Worker 
4740*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, texture_cube_map_array_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4, TEX_SPARSE),
4741*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, texture_cube_map_array_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE),
4742*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, texture_cube_map_array_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE),
4743*61046927SAndroid Build Coastguard Worker 
4744*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_SPARSE),
4745*61046927SAndroid Build Coastguard Worker                 NULL);
4746*61046927SAndroid Build Coastguard Worker 
4747*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureGradOffsetARB",
4748*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4749*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4750*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4751*61046927SAndroid Build Coastguard Worker 
4752*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4753*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4754*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4755*61046927SAndroid Build Coastguard Worker 
4756*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4757*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4758*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE),
4759*61046927SAndroid Build Coastguard Worker 
4760*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DRectShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4761*61046927SAndroid Build Coastguard Worker 
4762*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4763*61046927SAndroid Build Coastguard Worker 
4764*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4765*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4766*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE),
4767*61046927SAndroid Build Coastguard Worker 
4768*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_sparse, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET|TEX_SPARSE),
4769*61046927SAndroid Build Coastguard Worker                 NULL);
4770*61046927SAndroid Build Coastguard Worker 
4771*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureGatherARB",
4772*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_SPARSE),
4773*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_SPARSE),
4774*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_SPARSE),
4775*61046927SAndroid Build Coastguard Worker 
4776*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_SPARSE),
4777*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_SPARSE),
4778*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_SPARSE),
4779*61046927SAndroid Build Coastguard Worker 
4780*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_SPARSE),
4781*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE),
4782*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE),
4783*61046927SAndroid Build Coastguard Worker 
4784*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3, TEX_SPARSE),
4785*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE),
4786*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE),
4787*61046927SAndroid Build Coastguard Worker 
4788*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4, TEX_SPARSE),
4789*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE),
4790*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, texture_gather_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE),
4791*61046927SAndroid Build Coastguard Worker 
4792*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_COMPONENT|TEX_SPARSE),
4793*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_COMPONENT|TEX_SPARSE),
4794*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_COMPONENT|TEX_SPARSE),
4795*61046927SAndroid Build Coastguard Worker 
4796*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_COMPONENT|TEX_SPARSE),
4797*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_COMPONENT|TEX_SPARSE),
4798*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_COMPONENT|TEX_SPARSE),
4799*61046927SAndroid Build Coastguard Worker 
4800*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_COMPONENT|TEX_SPARSE),
4801*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_COMPONENT|TEX_SPARSE),
4802*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_COMPONENT|TEX_SPARSE),
4803*61046927SAndroid Build Coastguard Worker 
4804*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3, TEX_COMPONENT|TEX_SPARSE),
4805*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_COMPONENT|TEX_SPARSE),
4806*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_COMPONENT|TEX_SPARSE),
4807*61046927SAndroid Build Coastguard Worker 
4808*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4, TEX_COMPONENT|TEX_SPARSE),
4809*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_COMPONENT|TEX_SPARSE),
4810*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_COMPONENT|TEX_SPARSE),
4811*61046927SAndroid Build Coastguard Worker 
4812*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow,        &glsl_type_builtin_vec2, TEX_SPARSE),
4813*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArrayShadow,   &glsl_type_builtin_vec3, TEX_SPARSE),
4814*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4, &glsl_type_builtin_samplerCubeShadow,      &glsl_type_builtin_vec3, TEX_SPARSE),
4815*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4, &glsl_type_builtin_samplerCubeArrayShadow, &glsl_type_builtin_vec4, TEX_SPARSE),
4816*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRectShadow,    &glsl_type_builtin_vec2, TEX_SPARSE),
4817*61046927SAndroid Build Coastguard Worker                 NULL);
4818*61046927SAndroid Build Coastguard Worker 
4819*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureGatherOffsetARB",
4820*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_SPARSE),
4821*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_SPARSE),
4822*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_SPARSE),
4823*61046927SAndroid Build Coastguard Worker 
4824*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST|TEX_SPARSE),
4825*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST|TEX_SPARSE),
4826*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST|TEX_SPARSE),
4827*61046927SAndroid Build Coastguard Worker 
4828*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_SPARSE),
4829*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_SPARSE),
4830*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_SPARSE),
4831*61046927SAndroid Build Coastguard Worker 
4832*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE),
4833*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE),
4834*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE),
4835*61046927SAndroid Build Coastguard Worker 
4836*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE),
4837*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE),
4838*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE),
4839*61046927SAndroid Build Coastguard Worker 
4840*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE),
4841*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE),
4842*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE),
4843*61046927SAndroid Build Coastguard Worker 
4844*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow,      &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_SPARSE),
4845*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET_NONCONST|TEX_SPARSE),
4846*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRectShadow,  &glsl_type_builtin_vec2, TEX_OFFSET_NONCONST|TEX_SPARSE),
4847*61046927SAndroid Build Coastguard Worker                 NULL);
4848*61046927SAndroid Build Coastguard Worker 
4849*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureGatherOffsetsARB",
4850*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_SPARSE),
4851*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_SPARSE),
4852*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_SPARSE),
4853*61046927SAndroid Build Coastguard Worker 
4854*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE),
4855*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE),
4856*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE),
4857*61046927SAndroid Build Coastguard Worker 
4858*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY|TEX_SPARSE),
4859*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY|TEX_SPARSE),
4860*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY|TEX_SPARSE),
4861*61046927SAndroid Build Coastguard Worker 
4862*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE),
4863*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE),
4864*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE),
4865*61046927SAndroid Build Coastguard Worker 
4866*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_SPARSE),
4867*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_SPARSE),
4868*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_SPARSE),
4869*61046927SAndroid Build Coastguard Worker 
4870*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DRect,  &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE),
4871*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE),
4872*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DRect, &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE),
4873*61046927SAndroid Build Coastguard Worker 
4874*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DShadow,      &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_SPARSE),
4875*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET_ARRAY|TEX_SPARSE),
4876*61046927SAndroid Build Coastguard Worker                 _texture(ir_tg4, gpu_shader5_and_sparse, &glsl_type_builtin_vec4, &glsl_type_builtin_sampler2DRectShadow,  &glsl_type_builtin_vec2, TEX_OFFSET_ARRAY|TEX_SPARSE),
4877*61046927SAndroid Build Coastguard Worker                 NULL);
4878*61046927SAndroid Build Coastguard Worker 
4879*61046927SAndroid Build Coastguard Worker    add_function("sparseTexelsResidentARB", _is_sparse_texels_resident(), NULL);
4880*61046927SAndroid Build Coastguard Worker 
4881*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureClampARB",
4882*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_SPARSE|TEX_CLAMP),
4883*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_SPARSE|TEX_CLAMP),
4884*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_SPARSE|TEX_CLAMP),
4885*61046927SAndroid Build Coastguard Worker 
4886*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4887*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4888*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4889*61046927SAndroid Build Coastguard Worker 
4890*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4891*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4892*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4893*61046927SAndroid Build Coastguard Worker 
4894*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow,   &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4895*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
4896*61046927SAndroid Build Coastguard Worker 
4897*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4898*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4899*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4900*61046927SAndroid Build Coastguard Worker 
4901*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_cube_map_array_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
4902*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_cube_map_array_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
4903*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_cube_map_array_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
4904*61046927SAndroid Build Coastguard Worker 
4905*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
4906*61046927SAndroid Build Coastguard Worker 
4907*61046927SAndroid Build Coastguard Worker                 _textureCubeArrayShadow(ir_tex, texture_cube_map_array_and_clamp, &glsl_type_builtin_samplerCubeArrayShadow, TEX_SPARSE|TEX_CLAMP),
4908*61046927SAndroid Build Coastguard Worker 
4909*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_SPARSE|TEX_CLAMP),
4910*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_SPARSE|TEX_CLAMP),
4911*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_SPARSE|TEX_CLAMP),
4912*61046927SAndroid Build Coastguard Worker 
4913*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4914*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4915*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4916*61046927SAndroid Build Coastguard Worker 
4917*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4918*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4919*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4920*61046927SAndroid Build Coastguard Worker 
4921*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow,   &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4922*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
4923*61046927SAndroid Build Coastguard Worker 
4924*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4925*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4926*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
4927*61046927SAndroid Build Coastguard Worker 
4928*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_texture_cube_map_array_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
4929*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_texture_cube_map_array_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
4930*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_texture_cube_map_array_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
4931*61046927SAndroid Build Coastguard Worker                 NULL);
4932*61046927SAndroid Build Coastguard Worker 
4933*61046927SAndroid Build Coastguard Worker    add_function("textureClampARB",
4934*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_CLAMP),
4935*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_CLAMP),
4936*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_CLAMP),
4937*61046927SAndroid Build Coastguard Worker 
4938*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_CLAMP),
4939*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_CLAMP),
4940*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_CLAMP),
4941*61046927SAndroid Build Coastguard Worker 
4942*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_CLAMP),
4943*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_CLAMP),
4944*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_CLAMP),
4945*61046927SAndroid Build Coastguard Worker 
4946*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3, TEX_CLAMP),
4947*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_CLAMP),
4948*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_CLAMP),
4949*61046927SAndroid Build Coastguard Worker 
4950*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow,   &glsl_type_builtin_vec3, TEX_CLAMP),
4951*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow,   &glsl_type_builtin_vec3, TEX_CLAMP),
4952*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4, TEX_CLAMP),
4953*61046927SAndroid Build Coastguard Worker 
4954*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_CLAMP),
4955*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_CLAMP),
4956*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_CLAMP),
4957*61046927SAndroid Build Coastguard Worker 
4958*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_CLAMP),
4959*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_CLAMP),
4960*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_CLAMP),
4961*61046927SAndroid Build Coastguard Worker 
4962*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_cube_map_array_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4, TEX_CLAMP),
4963*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_cube_map_array_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_CLAMP),
4964*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, texture_cube_map_array_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_CLAMP),
4965*61046927SAndroid Build Coastguard Worker 
4966*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_CLAMP),
4967*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_CLAMP),
4968*61046927SAndroid Build Coastguard Worker 
4969*61046927SAndroid Build Coastguard Worker                 _textureCubeArrayShadow(ir_tex, texture_cube_map_array_and_clamp, &glsl_type_builtin_samplerCubeArrayShadow, TEX_CLAMP),
4970*61046927SAndroid Build Coastguard Worker 
4971*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_CLAMP),
4972*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_CLAMP),
4973*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_CLAMP),
4974*61046927SAndroid Build Coastguard Worker 
4975*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_CLAMP),
4976*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_CLAMP),
4977*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_CLAMP),
4978*61046927SAndroid Build Coastguard Worker 
4979*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_CLAMP),
4980*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_CLAMP),
4981*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_CLAMP),
4982*61046927SAndroid Build Coastguard Worker 
4983*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3, TEX_CLAMP),
4984*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_CLAMP),
4985*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_CLAMP),
4986*61046927SAndroid Build Coastguard Worker 
4987*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow,   &glsl_type_builtin_vec3, TEX_CLAMP),
4988*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow,   &glsl_type_builtin_vec3, TEX_CLAMP),
4989*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4, TEX_CLAMP),
4990*61046927SAndroid Build Coastguard Worker 
4991*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_CLAMP),
4992*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_CLAMP),
4993*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_CLAMP),
4994*61046927SAndroid Build Coastguard Worker 
4995*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_CLAMP),
4996*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_CLAMP),
4997*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_CLAMP),
4998*61046927SAndroid Build Coastguard Worker 
4999*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_texture_cube_map_array_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4, TEX_CLAMP),
5000*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_texture_cube_map_array_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_CLAMP),
5001*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, derivatives_texture_cube_map_array_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_CLAMP),
5002*61046927SAndroid Build Coastguard Worker 
5003*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_CLAMP),
5004*61046927SAndroid Build Coastguard Worker                 NULL);
5005*61046927SAndroid Build Coastguard Worker 
5006*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureOffsetClampARB",
5007*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5008*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5009*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5010*61046927SAndroid Build Coastguard Worker 
5011*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5012*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5013*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5014*61046927SAndroid Build Coastguard Worker 
5015*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5016*61046927SAndroid Build Coastguard Worker 
5017*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5018*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5019*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5020*61046927SAndroid Build Coastguard Worker 
5021*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5022*61046927SAndroid Build Coastguard Worker 
5023*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5024*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5025*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5026*61046927SAndroid Build Coastguard Worker 
5027*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5028*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5029*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5030*61046927SAndroid Build Coastguard Worker 
5031*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5032*61046927SAndroid Build Coastguard Worker 
5033*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5034*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5035*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5036*61046927SAndroid Build Coastguard Worker                 NULL);
5037*61046927SAndroid Build Coastguard Worker 
5038*61046927SAndroid Build Coastguard Worker    add_function("textureOffsetClampARB",
5039*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_OFFSET|TEX_CLAMP),
5040*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_OFFSET|TEX_CLAMP),
5041*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_OFFSET|TEX_CLAMP),
5042*61046927SAndroid Build Coastguard Worker 
5043*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5044*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5045*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5046*61046927SAndroid Build Coastguard Worker 
5047*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5048*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5049*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5050*61046927SAndroid Build Coastguard Worker 
5051*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5052*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5053*61046927SAndroid Build Coastguard Worker 
5054*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5055*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5056*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5057*61046927SAndroid Build Coastguard Worker 
5058*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5059*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5060*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5061*61046927SAndroid Build Coastguard Worker 
5062*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5063*61046927SAndroid Build Coastguard Worker                 _texture(ir_tex, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET|TEX_CLAMP),
5064*61046927SAndroid Build Coastguard Worker 
5065*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_OFFSET|TEX_CLAMP),
5066*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_OFFSET|TEX_CLAMP),
5067*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_OFFSET|TEX_CLAMP),
5068*61046927SAndroid Build Coastguard Worker 
5069*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5070*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5071*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5072*61046927SAndroid Build Coastguard Worker 
5073*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5074*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5075*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5076*61046927SAndroid Build Coastguard Worker 
5077*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5078*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5079*61046927SAndroid Build Coastguard Worker 
5080*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5081*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5082*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_derivatives_only_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5083*61046927SAndroid Build Coastguard Worker 
5084*61046927SAndroid Build Coastguard Worker                 _texture(ir_txb, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5085*61046927SAndroid Build Coastguard Worker                 NULL);
5086*61046927SAndroid Build Coastguard Worker 
5087*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureGradClampARB",
5088*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_SPARSE|TEX_CLAMP),
5089*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_SPARSE|TEX_CLAMP),
5090*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_SPARSE|TEX_CLAMP),
5091*61046927SAndroid Build Coastguard Worker 
5092*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
5093*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
5094*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
5095*61046927SAndroid Build Coastguard Worker 
5096*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
5097*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
5098*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
5099*61046927SAndroid Build Coastguard Worker 
5100*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow,   &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
5101*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
5102*61046927SAndroid Build Coastguard Worker 
5103*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
5104*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
5105*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_SPARSE|TEX_CLAMP),
5106*61046927SAndroid Build Coastguard Worker 
5107*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, texture_cube_map_array_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
5108*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, texture_cube_map_array_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
5109*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, texture_cube_map_array_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
5110*61046927SAndroid Build Coastguard Worker 
5111*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_SPARSE|TEX_CLAMP),
5112*61046927SAndroid Build Coastguard Worker                 NULL);
5113*61046927SAndroid Build Coastguard Worker 
5114*61046927SAndroid Build Coastguard Worker    add_function("textureGradClampARB",
5115*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_CLAMP),
5116*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_CLAMP),
5117*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_CLAMP),
5118*61046927SAndroid Build Coastguard Worker 
5119*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_CLAMP),
5120*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_CLAMP),
5121*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_CLAMP),
5122*61046927SAndroid Build Coastguard Worker 
5123*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_CLAMP),
5124*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_CLAMP),
5125*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_CLAMP),
5126*61046927SAndroid Build Coastguard Worker 
5127*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCube,  &glsl_type_builtin_vec3, TEX_CLAMP),
5128*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCube, &glsl_type_builtin_vec3, TEX_CLAMP),
5129*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCube, &glsl_type_builtin_vec3, TEX_CLAMP),
5130*61046927SAndroid Build Coastguard Worker 
5131*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow,   &glsl_type_builtin_vec3, TEX_CLAMP),
5132*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow,   &glsl_type_builtin_vec3, TEX_CLAMP),
5133*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_samplerCubeShadow, &glsl_type_builtin_vec4, TEX_CLAMP),
5134*61046927SAndroid Build Coastguard Worker 
5135*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_CLAMP),
5136*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_CLAMP),
5137*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_CLAMP),
5138*61046927SAndroid Build Coastguard Worker 
5139*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_CLAMP),
5140*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_CLAMP),
5141*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_CLAMP),
5142*61046927SAndroid Build Coastguard Worker 
5143*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, texture_cube_map_array_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_samplerCubeArray,  &glsl_type_builtin_vec4, TEX_CLAMP),
5144*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, texture_cube_map_array_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isamplerCubeArray, &glsl_type_builtin_vec4, TEX_CLAMP),
5145*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, texture_cube_map_array_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usamplerCubeArray, &glsl_type_builtin_vec4, TEX_CLAMP),
5146*61046927SAndroid Build Coastguard Worker 
5147*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_CLAMP),
5148*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_CLAMP),
5149*61046927SAndroid Build Coastguard Worker                 NULL);
5150*61046927SAndroid Build Coastguard Worker 
5151*61046927SAndroid Build Coastguard Worker    add_function("sparseTextureGradOffsetClampARB",
5152*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5153*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5154*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5155*61046927SAndroid Build Coastguard Worker 
5156*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5157*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5158*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5159*61046927SAndroid Build Coastguard Worker 
5160*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5161*61046927SAndroid Build Coastguard Worker 
5162*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5163*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5164*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5165*61046927SAndroid Build Coastguard Worker 
5166*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP),
5167*61046927SAndroid Build Coastguard Worker                 NULL);
5168*61046927SAndroid Build Coastguard Worker 
5169*61046927SAndroid Build Coastguard Worker    add_function("textureGradOffsetClampARB",
5170*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1D,  &glsl_type_builtin_float, TEX_OFFSET|TEX_CLAMP),
5171*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1D, &glsl_type_builtin_float, TEX_OFFSET|TEX_CLAMP),
5172*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1D, &glsl_type_builtin_float, TEX_OFFSET|TEX_CLAMP),
5173*61046927SAndroid Build Coastguard Worker 
5174*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2D,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5175*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5176*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2D, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5177*61046927SAndroid Build Coastguard Worker 
5178*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler3D,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5179*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5180*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler3D, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5181*61046927SAndroid Build Coastguard Worker 
5182*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5183*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5184*61046927SAndroid Build Coastguard Worker 
5185*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler1DArray,  &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5186*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5187*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler1DArray, &glsl_type_builtin_vec2, TEX_OFFSET|TEX_CLAMP),
5188*61046927SAndroid Build Coastguard Worker 
5189*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_vec4,  &glsl_type_builtin_sampler2DArray,  &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5190*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_ivec4, &glsl_type_builtin_isampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5191*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_uvec4, &glsl_type_builtin_usampler2DArray, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5192*61046927SAndroid Build Coastguard Worker 
5193*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler1DArrayShadow, &glsl_type_builtin_vec3, TEX_OFFSET|TEX_CLAMP),
5194*61046927SAndroid Build Coastguard Worker                 _texture(ir_txd, v130_desktop_and_clamp, &glsl_type_builtin_float, &glsl_type_builtin_sampler2DArrayShadow, &glsl_type_builtin_vec4, TEX_OFFSET|TEX_CLAMP),
5195*61046927SAndroid Build Coastguard Worker                 NULL);
5196*61046927SAndroid Build Coastguard Worker 
5197*61046927SAndroid Build Coastguard Worker    FHF_DERIVATIVES(dFdx)
5198*61046927SAndroid Build Coastguard Worker    FHF_DERIVATIVES(dFdy)
5199*61046927SAndroid Build Coastguard Worker    FHF_DERIVATIVES(fwidth)
5200*61046927SAndroid Build Coastguard Worker    FHF_DERIVATIVE_CONTROL(dFdxCoarse)
5201*61046927SAndroid Build Coastguard Worker    FHF_DERIVATIVE_CONTROL(dFdyCoarse)
5202*61046927SAndroid Build Coastguard Worker    FHF_DERIVATIVE_CONTROL(fwidthCoarse)
5203*61046927SAndroid Build Coastguard Worker    FHF_DERIVATIVE_CONTROL(dFdxFine)
5204*61046927SAndroid Build Coastguard Worker    FHF_DERIVATIVE_CONTROL(dFdyFine)
5205*61046927SAndroid Build Coastguard Worker    FHF_DERIVATIVE_CONTROL(fwidthFine)
5206*61046927SAndroid Build Coastguard Worker    F(noise1)
5207*61046927SAndroid Build Coastguard Worker    F(noise2)
5208*61046927SAndroid Build Coastguard Worker    F(noise3)
5209*61046927SAndroid Build Coastguard Worker    F(noise4)
5210*61046927SAndroid Build Coastguard Worker 
5211*61046927SAndroid Build Coastguard Worker    IU(bitfieldExtract)
5212*61046927SAndroid Build Coastguard Worker    IU(bitfieldInsert)
5213*61046927SAndroid Build Coastguard Worker    IU(bitfieldReverse)
5214*61046927SAndroid Build Coastguard Worker    IU(bitCount)
5215*61046927SAndroid Build Coastguard Worker    IU(findLSB)
5216*61046927SAndroid Build Coastguard Worker    IU(findMSB)
5217*61046927SAndroid Build Coastguard Worker    FDHFGS5(fma)
5218*61046927SAndroid Build Coastguard Worker 
5219*61046927SAndroid Build Coastguard Worker    add_function("ldexp",
5220*61046927SAndroid Build Coastguard Worker                 _ldexp(&glsl_type_builtin_float, &glsl_type_builtin_int),
5221*61046927SAndroid Build Coastguard Worker                 _ldexp(&glsl_type_builtin_vec2,  &glsl_type_builtin_ivec2),
5222*61046927SAndroid Build Coastguard Worker                 _ldexp(&glsl_type_builtin_vec3,  &glsl_type_builtin_ivec3),
5223*61046927SAndroid Build Coastguard Worker                 _ldexp(&glsl_type_builtin_vec4,  &glsl_type_builtin_ivec4),
5224*61046927SAndroid Build Coastguard Worker                 _ldexp(&glsl_type_builtin_double, &glsl_type_builtin_int),
5225*61046927SAndroid Build Coastguard Worker                 _ldexp(&glsl_type_builtin_dvec2,  &glsl_type_builtin_ivec2),
5226*61046927SAndroid Build Coastguard Worker                 _ldexp(&glsl_type_builtin_dvec3,  &glsl_type_builtin_ivec3),
5227*61046927SAndroid Build Coastguard Worker                 _ldexp(&glsl_type_builtin_dvec4,  &glsl_type_builtin_ivec4),
5228*61046927SAndroid Build Coastguard Worker                 _ldexp(&glsl_type_builtin_float16_t, &glsl_type_builtin_int),
5229*61046927SAndroid Build Coastguard Worker                 _ldexp(&glsl_type_builtin_f16vec2,  &glsl_type_builtin_ivec2),
5230*61046927SAndroid Build Coastguard Worker                 _ldexp(&glsl_type_builtin_f16vec3,  &glsl_type_builtin_ivec3),
5231*61046927SAndroid Build Coastguard Worker                 _ldexp(&glsl_type_builtin_f16vec4,  &glsl_type_builtin_ivec4),
5232*61046927SAndroid Build Coastguard Worker                 NULL);
5233*61046927SAndroid Build Coastguard Worker 
5234*61046927SAndroid Build Coastguard Worker    add_function("frexp",
5235*61046927SAndroid Build Coastguard Worker                 _frexp(&glsl_type_builtin_float, &glsl_type_builtin_int),
5236*61046927SAndroid Build Coastguard Worker                 _frexp(&glsl_type_builtin_vec2,  &glsl_type_builtin_ivec2),
5237*61046927SAndroid Build Coastguard Worker                 _frexp(&glsl_type_builtin_vec3,  &glsl_type_builtin_ivec3),
5238*61046927SAndroid Build Coastguard Worker                 _frexp(&glsl_type_builtin_vec4,  &glsl_type_builtin_ivec4),
5239*61046927SAndroid Build Coastguard Worker                 _frexp(&glsl_type_builtin_double, &glsl_type_builtin_int),
5240*61046927SAndroid Build Coastguard Worker                 _frexp(&glsl_type_builtin_dvec2,  &glsl_type_builtin_ivec2),
5241*61046927SAndroid Build Coastguard Worker                 _frexp(&glsl_type_builtin_dvec3,  &glsl_type_builtin_ivec3),
5242*61046927SAndroid Build Coastguard Worker                 _frexp(&glsl_type_builtin_dvec4,  &glsl_type_builtin_ivec4),
5243*61046927SAndroid Build Coastguard Worker                 _frexp(&glsl_type_builtin_float16_t, &glsl_type_builtin_int),
5244*61046927SAndroid Build Coastguard Worker                 _frexp(&glsl_type_builtin_f16vec2,  &glsl_type_builtin_ivec2),
5245*61046927SAndroid Build Coastguard Worker                 _frexp(&glsl_type_builtin_f16vec3,  &glsl_type_builtin_ivec3),
5246*61046927SAndroid Build Coastguard Worker                 _frexp(&glsl_type_builtin_f16vec4,  &glsl_type_builtin_ivec4),
5247*61046927SAndroid Build Coastguard Worker                 NULL);
5248*61046927SAndroid Build Coastguard Worker    add_function("uaddCarry",
5249*61046927SAndroid Build Coastguard Worker                 _uaddCarry(&glsl_type_builtin_uint),
5250*61046927SAndroid Build Coastguard Worker                 _uaddCarry(&glsl_type_builtin_uvec2),
5251*61046927SAndroid Build Coastguard Worker                 _uaddCarry(&glsl_type_builtin_uvec3),
5252*61046927SAndroid Build Coastguard Worker                 _uaddCarry(&glsl_type_builtin_uvec4),
5253*61046927SAndroid Build Coastguard Worker                 NULL);
5254*61046927SAndroid Build Coastguard Worker    add_function("usubBorrow",
5255*61046927SAndroid Build Coastguard Worker                 _usubBorrow(&glsl_type_builtin_uint),
5256*61046927SAndroid Build Coastguard Worker                 _usubBorrow(&glsl_type_builtin_uvec2),
5257*61046927SAndroid Build Coastguard Worker                 _usubBorrow(&glsl_type_builtin_uvec3),
5258*61046927SAndroid Build Coastguard Worker                 _usubBorrow(&glsl_type_builtin_uvec4),
5259*61046927SAndroid Build Coastguard Worker                 NULL);
5260*61046927SAndroid Build Coastguard Worker    add_function("imulExtended",
5261*61046927SAndroid Build Coastguard Worker                 _mulExtended(&glsl_type_builtin_int),
5262*61046927SAndroid Build Coastguard Worker                 _mulExtended(&glsl_type_builtin_ivec2),
5263*61046927SAndroid Build Coastguard Worker                 _mulExtended(&glsl_type_builtin_ivec3),
5264*61046927SAndroid Build Coastguard Worker                 _mulExtended(&glsl_type_builtin_ivec4),
5265*61046927SAndroid Build Coastguard Worker                 NULL);
5266*61046927SAndroid Build Coastguard Worker    add_function("umulExtended",
5267*61046927SAndroid Build Coastguard Worker                 _mulExtended(&glsl_type_builtin_uint),
5268*61046927SAndroid Build Coastguard Worker                 _mulExtended(&glsl_type_builtin_uvec2),
5269*61046927SAndroid Build Coastguard Worker                 _mulExtended(&glsl_type_builtin_uvec3),
5270*61046927SAndroid Build Coastguard Worker                 _mulExtended(&glsl_type_builtin_uvec4),
5271*61046927SAndroid Build Coastguard Worker                 NULL);
5272*61046927SAndroid Build Coastguard Worker    add_function("interpolateAtCentroid",
5273*61046927SAndroid Build Coastguard Worker                 _interpolateAtCentroid(fs_interpolate_at, &glsl_type_builtin_float),
5274*61046927SAndroid Build Coastguard Worker                 _interpolateAtCentroid(fs_interpolate_at, &glsl_type_builtin_vec2),
5275*61046927SAndroid Build Coastguard Worker                 _interpolateAtCentroid(fs_interpolate_at, &glsl_type_builtin_vec3),
5276*61046927SAndroid Build Coastguard Worker                 _interpolateAtCentroid(fs_interpolate_at, &glsl_type_builtin_vec4),
5277*61046927SAndroid Build Coastguard Worker                 _interpolateAtCentroid(fs_half_float_interpolate_at, &glsl_type_builtin_float16_t),
5278*61046927SAndroid Build Coastguard Worker                 _interpolateAtCentroid(fs_half_float_interpolate_at, &glsl_type_builtin_f16vec2),
5279*61046927SAndroid Build Coastguard Worker                 _interpolateAtCentroid(fs_half_float_interpolate_at, &glsl_type_builtin_f16vec3),
5280*61046927SAndroid Build Coastguard Worker                 _interpolateAtCentroid(fs_half_float_interpolate_at, &glsl_type_builtin_f16vec4),
5281*61046927SAndroid Build Coastguard Worker                 NULL);
5282*61046927SAndroid Build Coastguard Worker    add_function("interpolateAtOffset",
5283*61046927SAndroid Build Coastguard Worker                 _interpolateAtOffset(fs_interpolate_at, &glsl_type_builtin_float),
5284*61046927SAndroid Build Coastguard Worker                 _interpolateAtOffset(fs_interpolate_at, &glsl_type_builtin_vec2),
5285*61046927SAndroid Build Coastguard Worker                 _interpolateAtOffset(fs_interpolate_at, &glsl_type_builtin_vec3),
5286*61046927SAndroid Build Coastguard Worker                 _interpolateAtOffset(fs_interpolate_at, &glsl_type_builtin_vec4),
5287*61046927SAndroid Build Coastguard Worker                 _interpolateAtOffset(fs_half_float_interpolate_at, &glsl_type_builtin_float16_t),
5288*61046927SAndroid Build Coastguard Worker                 _interpolateAtOffset(fs_half_float_interpolate_at, &glsl_type_builtin_f16vec2),
5289*61046927SAndroid Build Coastguard Worker                 _interpolateAtOffset(fs_half_float_interpolate_at, &glsl_type_builtin_f16vec3),
5290*61046927SAndroid Build Coastguard Worker                 _interpolateAtOffset(fs_half_float_interpolate_at, &glsl_type_builtin_f16vec4),
5291*61046927SAndroid Build Coastguard Worker                 NULL);
5292*61046927SAndroid Build Coastguard Worker    add_function("interpolateAtSample",
5293*61046927SAndroid Build Coastguard Worker                 _interpolateAtSample(fs_interpolate_at, &glsl_type_builtin_float),
5294*61046927SAndroid Build Coastguard Worker                 _interpolateAtSample(fs_interpolate_at, &glsl_type_builtin_vec2),
5295*61046927SAndroid Build Coastguard Worker                 _interpolateAtSample(fs_interpolate_at, &glsl_type_builtin_vec3),
5296*61046927SAndroid Build Coastguard Worker                 _interpolateAtSample(fs_interpolate_at, &glsl_type_builtin_vec4),
5297*61046927SAndroid Build Coastguard Worker                 _interpolateAtSample(fs_half_float_interpolate_at, &glsl_type_builtin_float16_t),
5298*61046927SAndroid Build Coastguard Worker                 _interpolateAtSample(fs_half_float_interpolate_at, &glsl_type_builtin_f16vec2),
5299*61046927SAndroid Build Coastguard Worker                 _interpolateAtSample(fs_half_float_interpolate_at, &glsl_type_builtin_f16vec3),
5300*61046927SAndroid Build Coastguard Worker                 _interpolateAtSample(fs_half_float_interpolate_at, &glsl_type_builtin_f16vec4),
5301*61046927SAndroid Build Coastguard Worker                 NULL);
5302*61046927SAndroid Build Coastguard Worker 
5303*61046927SAndroid Build Coastguard Worker    add_function("atomicCounter",
5304*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op("__intrinsic_atomic_read",
5305*61046927SAndroid Build Coastguard Worker                                    shader_atomic_counters),
5306*61046927SAndroid Build Coastguard Worker                 NULL);
5307*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterIncrement",
5308*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op("__intrinsic_atomic_increment",
5309*61046927SAndroid Build Coastguard Worker                                    shader_atomic_counters),
5310*61046927SAndroid Build Coastguard Worker                 NULL);
5311*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterDecrement",
5312*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op("__intrinsic_atomic_predecrement",
5313*61046927SAndroid Build Coastguard Worker                                    shader_atomic_counters),
5314*61046927SAndroid Build Coastguard Worker                 NULL);
5315*61046927SAndroid Build Coastguard Worker 
5316*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterAddARB",
5317*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_add",
5318*61046927SAndroid Build Coastguard Worker                                     shader_atomic_counter_ops),
5319*61046927SAndroid Build Coastguard Worker                 NULL);
5320*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterSubtractARB",
5321*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_sub",
5322*61046927SAndroid Build Coastguard Worker                                     shader_atomic_counter_ops),
5323*61046927SAndroid Build Coastguard Worker                 NULL);
5324*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterMinARB",
5325*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_min",
5326*61046927SAndroid Build Coastguard Worker                                     shader_atomic_counter_ops),
5327*61046927SAndroid Build Coastguard Worker                 NULL);
5328*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterMaxARB",
5329*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_max",
5330*61046927SAndroid Build Coastguard Worker                                     shader_atomic_counter_ops),
5331*61046927SAndroid Build Coastguard Worker                 NULL);
5332*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterAndARB",
5333*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_and",
5334*61046927SAndroid Build Coastguard Worker                                     shader_atomic_counter_ops),
5335*61046927SAndroid Build Coastguard Worker                 NULL);
5336*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterOrARB",
5337*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_or",
5338*61046927SAndroid Build Coastguard Worker                                     shader_atomic_counter_ops),
5339*61046927SAndroid Build Coastguard Worker                 NULL);
5340*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterXorARB",
5341*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_xor",
5342*61046927SAndroid Build Coastguard Worker                                     shader_atomic_counter_ops),
5343*61046927SAndroid Build Coastguard Worker                 NULL);
5344*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterExchangeARB",
5345*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_exchange",
5346*61046927SAndroid Build Coastguard Worker                                     shader_atomic_counter_ops),
5347*61046927SAndroid Build Coastguard Worker                 NULL);
5348*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterCompSwapARB",
5349*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op2("__intrinsic_atomic_comp_swap",
5350*61046927SAndroid Build Coastguard Worker                                     shader_atomic_counter_ops),
5351*61046927SAndroid Build Coastguard Worker                 NULL);
5352*61046927SAndroid Build Coastguard Worker 
5353*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterAdd",
5354*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_add",
5355*61046927SAndroid Build Coastguard Worker                                     v460_desktop),
5356*61046927SAndroid Build Coastguard Worker                 NULL);
5357*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterSubtract",
5358*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_sub",
5359*61046927SAndroid Build Coastguard Worker                                     v460_desktop),
5360*61046927SAndroid Build Coastguard Worker                 NULL);
5361*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterMin",
5362*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_min",
5363*61046927SAndroid Build Coastguard Worker                                     v460_desktop),
5364*61046927SAndroid Build Coastguard Worker                 NULL);
5365*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterMax",
5366*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_max",
5367*61046927SAndroid Build Coastguard Worker                                     v460_desktop),
5368*61046927SAndroid Build Coastguard Worker                 NULL);
5369*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterAnd",
5370*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_and",
5371*61046927SAndroid Build Coastguard Worker                                     v460_desktop),
5372*61046927SAndroid Build Coastguard Worker                 NULL);
5373*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterOr",
5374*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_or",
5375*61046927SAndroid Build Coastguard Worker                                     v460_desktop),
5376*61046927SAndroid Build Coastguard Worker                 NULL);
5377*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterXor",
5378*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_xor",
5379*61046927SAndroid Build Coastguard Worker                                     v460_desktop),
5380*61046927SAndroid Build Coastguard Worker                 NULL);
5381*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterExchange",
5382*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op1("__intrinsic_atomic_exchange",
5383*61046927SAndroid Build Coastguard Worker                                     v460_desktop),
5384*61046927SAndroid Build Coastguard Worker                 NULL);
5385*61046927SAndroid Build Coastguard Worker    add_function("atomicCounterCompSwap",
5386*61046927SAndroid Build Coastguard Worker                 _atomic_counter_op2("__intrinsic_atomic_comp_swap",
5387*61046927SAndroid Build Coastguard Worker                                     v460_desktop),
5388*61046927SAndroid Build Coastguard Worker                 NULL);
5389*61046927SAndroid Build Coastguard Worker 
5390*61046927SAndroid Build Coastguard Worker    add_function("atomicAdd",
5391*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_add",
5392*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5393*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint),
5394*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_add",
5395*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5396*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int),
5397*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_add",
5398*61046927SAndroid Build Coastguard Worker                             shader_atomic_float_add,
5399*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_float),
5400*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_add",
5401*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5402*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int64_t),
5403*61046927SAndroid Build Coastguard Worker                 NULL);
5404*61046927SAndroid Build Coastguard Worker    add_function("atomicMin",
5405*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_min",
5406*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5407*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint),
5408*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_min",
5409*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5410*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int),
5411*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_min",
5412*61046927SAndroid Build Coastguard Worker                             shader_atomic_float_minmax,
5413*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_float),
5414*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_min",
5415*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5416*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint64_t),
5417*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_min",
5418*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5419*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int64_t),
5420*61046927SAndroid Build Coastguard Worker                 NULL);
5421*61046927SAndroid Build Coastguard Worker    add_function("atomicMax",
5422*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_max",
5423*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5424*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint),
5425*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_max",
5426*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5427*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int),
5428*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_max",
5429*61046927SAndroid Build Coastguard Worker                             shader_atomic_float_minmax,
5430*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_float),
5431*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_max",
5432*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5433*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint64_t),
5434*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_max",
5435*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5436*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int64_t),
5437*61046927SAndroid Build Coastguard Worker                 NULL);
5438*61046927SAndroid Build Coastguard Worker    add_function("atomicAnd",
5439*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_and",
5440*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5441*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint),
5442*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_and",
5443*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5444*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int),
5445*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_and",
5446*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5447*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint64_t),
5448*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_and",
5449*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5450*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int64_t),
5451*61046927SAndroid Build Coastguard Worker                 NULL);
5452*61046927SAndroid Build Coastguard Worker    add_function("atomicOr",
5453*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_or",
5454*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5455*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint),
5456*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_or",
5457*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5458*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int),
5459*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_or",
5460*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5461*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint64_t),
5462*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_or",
5463*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5464*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int64_t),
5465*61046927SAndroid Build Coastguard Worker                 NULL);
5466*61046927SAndroid Build Coastguard Worker    add_function("atomicXor",
5467*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_xor",
5468*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5469*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint),
5470*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_xor",
5471*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5472*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int),
5473*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_xor",
5474*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5475*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint64_t),
5476*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_xor",
5477*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5478*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int64_t),
5479*61046927SAndroid Build Coastguard Worker                 NULL);
5480*61046927SAndroid Build Coastguard Worker    add_function("atomicExchange",
5481*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_exchange",
5482*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5483*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint),
5484*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_exchange",
5485*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5486*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int),
5487*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_exchange",
5488*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5489*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int64_t),
5490*61046927SAndroid Build Coastguard Worker                 _atomic_op2("__intrinsic_atomic_exchange",
5491*61046927SAndroid Build Coastguard Worker                             shader_atomic_float_exchange,
5492*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_float),
5493*61046927SAndroid Build Coastguard Worker                 NULL);
5494*61046927SAndroid Build Coastguard Worker    add_function("atomicCompSwap",
5495*61046927SAndroid Build Coastguard Worker                 _atomic_op3("__intrinsic_atomic_comp_swap",
5496*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5497*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_uint),
5498*61046927SAndroid Build Coastguard Worker                 _atomic_op3("__intrinsic_atomic_comp_swap",
5499*61046927SAndroid Build Coastguard Worker                             buffer_atomics_supported,
5500*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int),
5501*61046927SAndroid Build Coastguard Worker                 _atomic_op3("__intrinsic_atomic_comp_swap",
5502*61046927SAndroid Build Coastguard Worker                             buffer_int64_atomics_supported,
5503*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_int64_t),
5504*61046927SAndroid Build Coastguard Worker                 _atomic_op3("__intrinsic_atomic_comp_swap",
5505*61046927SAndroid Build Coastguard Worker                             shader_atomic_float_minmax,
5506*61046927SAndroid Build Coastguard Worker                             &glsl_type_builtin_float),
5507*61046927SAndroid Build Coastguard Worker                 NULL);
5508*61046927SAndroid Build Coastguard Worker 
5509*61046927SAndroid Build Coastguard Worker    add_function("min3",
5510*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax, &glsl_type_builtin_float),
5511*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax, &glsl_type_builtin_vec2),
5512*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax, &glsl_type_builtin_vec3),
5513*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax, &glsl_type_builtin_vec4),
5514*61046927SAndroid Build Coastguard Worker 
5515*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax_half_float, &glsl_type_builtin_float16_t),
5516*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax_half_float, &glsl_type_builtin_f16vec2),
5517*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax_half_float, &glsl_type_builtin_f16vec3),
5518*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax_half_float, &glsl_type_builtin_f16vec4),
5519*61046927SAndroid Build Coastguard Worker 
5520*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax, &glsl_type_builtin_int),
5521*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax, &glsl_type_builtin_ivec2),
5522*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax, &glsl_type_builtin_ivec3),
5523*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax, &glsl_type_builtin_ivec4),
5524*61046927SAndroid Build Coastguard Worker 
5525*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax, &glsl_type_builtin_uint),
5526*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax, &glsl_type_builtin_uvec2),
5527*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax, &glsl_type_builtin_uvec3),
5528*61046927SAndroid Build Coastguard Worker                 _min3(shader_trinary_minmax, &glsl_type_builtin_uvec4),
5529*61046927SAndroid Build Coastguard Worker                 NULL);
5530*61046927SAndroid Build Coastguard Worker 
5531*61046927SAndroid Build Coastguard Worker    add_function("max3",
5532*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax, &glsl_type_builtin_float),
5533*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax, &glsl_type_builtin_vec2),
5534*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax, &glsl_type_builtin_vec3),
5535*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax, &glsl_type_builtin_vec4),
5536*61046927SAndroid Build Coastguard Worker 
5537*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax_half_float, &glsl_type_builtin_float16_t),
5538*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax_half_float, &glsl_type_builtin_f16vec2),
5539*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax_half_float, &glsl_type_builtin_f16vec3),
5540*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax_half_float, &glsl_type_builtin_f16vec4),
5541*61046927SAndroid Build Coastguard Worker 
5542*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax, &glsl_type_builtin_int),
5543*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax, &glsl_type_builtin_ivec2),
5544*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax, &glsl_type_builtin_ivec3),
5545*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax, &glsl_type_builtin_ivec4),
5546*61046927SAndroid Build Coastguard Worker 
5547*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax, &glsl_type_builtin_uint),
5548*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax, &glsl_type_builtin_uvec2),
5549*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax, &glsl_type_builtin_uvec3),
5550*61046927SAndroid Build Coastguard Worker                 _max3(shader_trinary_minmax, &glsl_type_builtin_uvec4),
5551*61046927SAndroid Build Coastguard Worker                 NULL);
5552*61046927SAndroid Build Coastguard Worker 
5553*61046927SAndroid Build Coastguard Worker    add_function("mid3",
5554*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax, &glsl_type_builtin_float),
5555*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax, &glsl_type_builtin_vec2),
5556*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax, &glsl_type_builtin_vec3),
5557*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax, &glsl_type_builtin_vec4),
5558*61046927SAndroid Build Coastguard Worker 
5559*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax_half_float, &glsl_type_builtin_float16_t),
5560*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax_half_float, &glsl_type_builtin_f16vec2),
5561*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax_half_float, &glsl_type_builtin_f16vec3),
5562*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax_half_float, &glsl_type_builtin_f16vec4),
5563*61046927SAndroid Build Coastguard Worker 
5564*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax, &glsl_type_builtin_int),
5565*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax, &glsl_type_builtin_ivec2),
5566*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax, &glsl_type_builtin_ivec3),
5567*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax, &glsl_type_builtin_ivec4),
5568*61046927SAndroid Build Coastguard Worker 
5569*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax, &glsl_type_builtin_uint),
5570*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax, &glsl_type_builtin_uvec2),
5571*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax, &glsl_type_builtin_uvec3),
5572*61046927SAndroid Build Coastguard Worker                 _mid3(shader_trinary_minmax, &glsl_type_builtin_uvec4),
5573*61046927SAndroid Build Coastguard Worker                 NULL);
5574*61046927SAndroid Build Coastguard Worker 
5575*61046927SAndroid Build Coastguard Worker    add_image_functions(true);
5576*61046927SAndroid Build Coastguard Worker 
5577*61046927SAndroid Build Coastguard Worker    add_function("memoryBarrier",
5578*61046927SAndroid Build Coastguard Worker                 _memory_barrier("__intrinsic_memory_barrier",
5579*61046927SAndroid Build Coastguard Worker                                 shader_image_load_store),
5580*61046927SAndroid Build Coastguard Worker                 NULL);
5581*61046927SAndroid Build Coastguard Worker    add_function("groupMemoryBarrier",
5582*61046927SAndroid Build Coastguard Worker                 _memory_barrier("__intrinsic_group_memory_barrier",
5583*61046927SAndroid Build Coastguard Worker                                 compute_shader),
5584*61046927SAndroid Build Coastguard Worker                 NULL);
5585*61046927SAndroid Build Coastguard Worker    add_function("memoryBarrierAtomicCounter",
5586*61046927SAndroid Build Coastguard Worker                 _memory_barrier("__intrinsic_memory_barrier_atomic_counter",
5587*61046927SAndroid Build Coastguard Worker                                 compute_shader_supported),
5588*61046927SAndroid Build Coastguard Worker                 NULL);
5589*61046927SAndroid Build Coastguard Worker    add_function("memoryBarrierBuffer",
5590*61046927SAndroid Build Coastguard Worker                 _memory_barrier("__intrinsic_memory_barrier_buffer",
5591*61046927SAndroid Build Coastguard Worker                                 compute_shader_supported),
5592*61046927SAndroid Build Coastguard Worker                 NULL);
5593*61046927SAndroid Build Coastguard Worker    add_function("memoryBarrierImage",
5594*61046927SAndroid Build Coastguard Worker                 _memory_barrier("__intrinsic_memory_barrier_image",
5595*61046927SAndroid Build Coastguard Worker                                 compute_shader_supported),
5596*61046927SAndroid Build Coastguard Worker                 NULL);
5597*61046927SAndroid Build Coastguard Worker    add_function("memoryBarrierShared",
5598*61046927SAndroid Build Coastguard Worker                 _memory_barrier("__intrinsic_memory_barrier_shared",
5599*61046927SAndroid Build Coastguard Worker                                 compute_shader),
5600*61046927SAndroid Build Coastguard Worker                 NULL);
5601*61046927SAndroid Build Coastguard Worker 
5602*61046927SAndroid Build Coastguard Worker    add_function("ballotARB", _ballot(&glsl_type_builtin_uint64_t, ballot_arb), NULL);
5603*61046927SAndroid Build Coastguard Worker 
5604*61046927SAndroid Build Coastguard Worker    add_function("readInvocationARB",
5605*61046927SAndroid Build Coastguard Worker                 FIU(_read_invocation, ballot_arb),
5606*61046927SAndroid Build Coastguard Worker                 NULL);
5607*61046927SAndroid Build Coastguard Worker 
5608*61046927SAndroid Build Coastguard Worker    add_function("readFirstInvocationARB",
5609*61046927SAndroid Build Coastguard Worker                 FIU(_read_first_invocation, ballot_arb),
5610*61046927SAndroid Build Coastguard Worker                 NULL);
5611*61046927SAndroid Build Coastguard Worker 
5612*61046927SAndroid Build Coastguard Worker    add_function("clock2x32ARB",
5613*61046927SAndroid Build Coastguard Worker                 _shader_clock(shader_clock,
5614*61046927SAndroid Build Coastguard Worker                               &glsl_type_builtin_uvec2),
5615*61046927SAndroid Build Coastguard Worker                 NULL);
5616*61046927SAndroid Build Coastguard Worker 
5617*61046927SAndroid Build Coastguard Worker    add_function("clockARB",
5618*61046927SAndroid Build Coastguard Worker                 _shader_clock(shader_clock_int64,
5619*61046927SAndroid Build Coastguard Worker                               &glsl_type_builtin_uint64_t),
5620*61046927SAndroid Build Coastguard Worker                 NULL);
5621*61046927SAndroid Build Coastguard Worker 
5622*61046927SAndroid Build Coastguard Worker    add_function("beginInvocationInterlockARB",
5623*61046927SAndroid Build Coastguard Worker                 _invocation_interlock(
5624*61046927SAndroid Build Coastguard Worker                    "__intrinsic_begin_invocation_interlock",
5625*61046927SAndroid Build Coastguard Worker                    supports_arb_fragment_shader_interlock),
5626*61046927SAndroid Build Coastguard Worker                 NULL);
5627*61046927SAndroid Build Coastguard Worker 
5628*61046927SAndroid Build Coastguard Worker    add_function("endInvocationInterlockARB",
5629*61046927SAndroid Build Coastguard Worker                 _invocation_interlock(
5630*61046927SAndroid Build Coastguard Worker                    "__intrinsic_end_invocation_interlock",
5631*61046927SAndroid Build Coastguard Worker                    supports_arb_fragment_shader_interlock),
5632*61046927SAndroid Build Coastguard Worker                 NULL);
5633*61046927SAndroid Build Coastguard Worker 
5634*61046927SAndroid Build Coastguard Worker    add_function("beginInvocationInterlockNV",
5635*61046927SAndroid Build Coastguard Worker                 _invocation_interlock(
5636*61046927SAndroid Build Coastguard Worker                    "__intrinsic_begin_invocation_interlock",
5637*61046927SAndroid Build Coastguard Worker                    supports_nv_fragment_shader_interlock),
5638*61046927SAndroid Build Coastguard Worker                 NULL);
5639*61046927SAndroid Build Coastguard Worker 
5640*61046927SAndroid Build Coastguard Worker    add_function("endInvocationInterlockNV",
5641*61046927SAndroid Build Coastguard Worker                 _invocation_interlock(
5642*61046927SAndroid Build Coastguard Worker                    "__intrinsic_end_invocation_interlock",
5643*61046927SAndroid Build Coastguard Worker                    supports_nv_fragment_shader_interlock),
5644*61046927SAndroid Build Coastguard Worker                 NULL);
5645*61046927SAndroid Build Coastguard Worker 
5646*61046927SAndroid Build Coastguard Worker    add_function("anyInvocationARB",
5647*61046927SAndroid Build Coastguard Worker                 _vote(&glsl_type_builtin_bool, vote, "__intrinsic_vote_any"),
5648*61046927SAndroid Build Coastguard Worker                 NULL);
5649*61046927SAndroid Build Coastguard Worker 
5650*61046927SAndroid Build Coastguard Worker    add_function("allInvocationsARB",
5651*61046927SAndroid Build Coastguard Worker                 _vote(&glsl_type_builtin_bool, vote, "__intrinsic_vote_all"),
5652*61046927SAndroid Build Coastguard Worker                 NULL);
5653*61046927SAndroid Build Coastguard Worker 
5654*61046927SAndroid Build Coastguard Worker    add_function("allInvocationsEqualARB",
5655*61046927SAndroid Build Coastguard Worker                 _vote(&glsl_type_builtin_bool, vote, "__intrinsic_vote_eq"),
5656*61046927SAndroid Build Coastguard Worker                 NULL);
5657*61046927SAndroid Build Coastguard Worker 
5658*61046927SAndroid Build Coastguard Worker    add_function("anyInvocationEXT",
5659*61046927SAndroid Build Coastguard Worker                 _vote(&glsl_type_builtin_bool, vote_ext, "__intrinsic_vote_any"),
5660*61046927SAndroid Build Coastguard Worker                 NULL);
5661*61046927SAndroid Build Coastguard Worker 
5662*61046927SAndroid Build Coastguard Worker    add_function("allInvocationsEXT",
5663*61046927SAndroid Build Coastguard Worker                 _vote(&glsl_type_builtin_bool, vote_ext, "__intrinsic_vote_all"),
5664*61046927SAndroid Build Coastguard Worker                 NULL);
5665*61046927SAndroid Build Coastguard Worker 
5666*61046927SAndroid Build Coastguard Worker    add_function("allInvocationsEqualEXT",
5667*61046927SAndroid Build Coastguard Worker                 _vote(&glsl_type_builtin_bool, vote_ext, "__intrinsic_vote_eq"),
5668*61046927SAndroid Build Coastguard Worker                 NULL);
5669*61046927SAndroid Build Coastguard Worker 
5670*61046927SAndroid Build Coastguard Worker    add_function("anyInvocation",
5671*61046927SAndroid Build Coastguard Worker                 _vote(&glsl_type_builtin_bool, v460_desktop, "__intrinsic_vote_any"),
5672*61046927SAndroid Build Coastguard Worker                 NULL);
5673*61046927SAndroid Build Coastguard Worker 
5674*61046927SAndroid Build Coastguard Worker    add_function("allInvocations",
5675*61046927SAndroid Build Coastguard Worker                 _vote(&glsl_type_builtin_bool, v460_desktop, "__intrinsic_vote_all"),
5676*61046927SAndroid Build Coastguard Worker                 NULL);
5677*61046927SAndroid Build Coastguard Worker 
5678*61046927SAndroid Build Coastguard Worker    add_function("allInvocationsEqual",
5679*61046927SAndroid Build Coastguard Worker                 _vote(&glsl_type_builtin_bool, v460_desktop, "__intrinsic_vote_eq"),
5680*61046927SAndroid Build Coastguard Worker                 NULL);
5681*61046927SAndroid Build Coastguard Worker 
5682*61046927SAndroid Build Coastguard Worker    add_function("helperInvocationEXT", _helper_invocation(), NULL);
5683*61046927SAndroid Build Coastguard Worker 
5684*61046927SAndroid Build Coastguard Worker    add_function("countLeadingZeros",
5685*61046927SAndroid Build Coastguard Worker                 _countLeadingZeros(shader_integer_functions2,
5686*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uint),
5687*61046927SAndroid Build Coastguard Worker                 _countLeadingZeros(shader_integer_functions2,
5688*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uvec2),
5689*61046927SAndroid Build Coastguard Worker                 _countLeadingZeros(shader_integer_functions2,
5690*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uvec3),
5691*61046927SAndroid Build Coastguard Worker                 _countLeadingZeros(shader_integer_functions2,
5692*61046927SAndroid Build Coastguard Worker                                    &glsl_type_builtin_uvec4),
5693*61046927SAndroid Build Coastguard Worker                 NULL);
5694*61046927SAndroid Build Coastguard Worker 
5695*61046927SAndroid Build Coastguard Worker    add_function("countTrailingZeros",
5696*61046927SAndroid Build Coastguard Worker                 _countTrailingZeros(shader_integer_functions2,
5697*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_uint),
5698*61046927SAndroid Build Coastguard Worker                 _countTrailingZeros(shader_integer_functions2,
5699*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_uvec2),
5700*61046927SAndroid Build Coastguard Worker                 _countTrailingZeros(shader_integer_functions2,
5701*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_uvec3),
5702*61046927SAndroid Build Coastguard Worker                 _countTrailingZeros(shader_integer_functions2,
5703*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_uvec4),
5704*61046927SAndroid Build Coastguard Worker                 NULL);
5705*61046927SAndroid Build Coastguard Worker 
5706*61046927SAndroid Build Coastguard Worker    add_function("absoluteDifference",
5707*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2,
5708*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_int),
5709*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2,
5710*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_ivec2),
5711*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2,
5712*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_ivec3),
5713*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2,
5714*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_ivec4),
5715*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2,
5716*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_uint),
5717*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2,
5718*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_uvec2),
5719*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2,
5720*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_uvec3),
5721*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2,
5722*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_uvec4),
5723*61046927SAndroid Build Coastguard Worker 
5724*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2_int64,
5725*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_int64_t),
5726*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2_int64,
5727*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_i64vec2),
5728*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2_int64,
5729*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_i64vec3),
5730*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2_int64,
5731*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_i64vec4),
5732*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2_int64,
5733*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_uint64_t),
5734*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2_int64,
5735*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_u64vec2),
5736*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2_int64,
5737*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_u64vec3),
5738*61046927SAndroid Build Coastguard Worker                 _absoluteDifference(shader_integer_functions2_int64,
5739*61046927SAndroid Build Coastguard Worker                                     &glsl_type_builtin_u64vec4),
5740*61046927SAndroid Build Coastguard Worker                 NULL);
5741*61046927SAndroid Build Coastguard Worker 
5742*61046927SAndroid Build Coastguard Worker    add_function("addSaturate",
5743*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2,
5744*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_int),
5745*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2,
5746*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_ivec2),
5747*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2,
5748*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_ivec3),
5749*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2,
5750*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_ivec4),
5751*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2,
5752*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_uint),
5753*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2,
5754*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_uvec2),
5755*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2,
5756*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_uvec3),
5757*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2,
5758*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_uvec4),
5759*61046927SAndroid Build Coastguard Worker 
5760*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2_int64,
5761*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_int64_t),
5762*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2_int64,
5763*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_i64vec2),
5764*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2_int64,
5765*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_i64vec3),
5766*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2_int64,
5767*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_i64vec4),
5768*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2_int64,
5769*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_uint64_t),
5770*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2_int64,
5771*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_u64vec2),
5772*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2_int64,
5773*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_u64vec3),
5774*61046927SAndroid Build Coastguard Worker                 _addSaturate(shader_integer_functions2_int64,
5775*61046927SAndroid Build Coastguard Worker                              &glsl_type_builtin_u64vec4),
5776*61046927SAndroid Build Coastguard Worker                 NULL);
5777*61046927SAndroid Build Coastguard Worker 
5778*61046927SAndroid Build Coastguard Worker    add_function("average",
5779*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2,
5780*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_int),
5781*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2,
5782*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_ivec2),
5783*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2,
5784*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_ivec3),
5785*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2,
5786*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_ivec4),
5787*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2,
5788*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_uint),
5789*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2,
5790*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_uvec2),
5791*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2,
5792*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_uvec3),
5793*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2,
5794*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_uvec4),
5795*61046927SAndroid Build Coastguard Worker 
5796*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2_int64,
5797*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_int64_t),
5798*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2_int64,
5799*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_i64vec2),
5800*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2_int64,
5801*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_i64vec3),
5802*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2_int64,
5803*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_i64vec4),
5804*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2_int64,
5805*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_uint64_t),
5806*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2_int64,
5807*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_u64vec2),
5808*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2_int64,
5809*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_u64vec3),
5810*61046927SAndroid Build Coastguard Worker                 _average(shader_integer_functions2_int64,
5811*61046927SAndroid Build Coastguard Worker                          &glsl_type_builtin_u64vec4),
5812*61046927SAndroid Build Coastguard Worker                 NULL);
5813*61046927SAndroid Build Coastguard Worker 
5814*61046927SAndroid Build Coastguard Worker    add_function("averageRounded",
5815*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2,
5816*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_int),
5817*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2,
5818*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_ivec2),
5819*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2,
5820*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_ivec3),
5821*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2,
5822*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_ivec4),
5823*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2,
5824*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_uint),
5825*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2,
5826*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_uvec2),
5827*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2,
5828*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_uvec3),
5829*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2,
5830*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_uvec4),
5831*61046927SAndroid Build Coastguard Worker 
5832*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2_int64,
5833*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_int64_t),
5834*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2_int64,
5835*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_i64vec2),
5836*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2_int64,
5837*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_i64vec3),
5838*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2_int64,
5839*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_i64vec4),
5840*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2_int64,
5841*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_uint64_t),
5842*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2_int64,
5843*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_u64vec2),
5844*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2_int64,
5845*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_u64vec3),
5846*61046927SAndroid Build Coastguard Worker                 _averageRounded(shader_integer_functions2_int64,
5847*61046927SAndroid Build Coastguard Worker                                 &glsl_type_builtin_u64vec4),
5848*61046927SAndroid Build Coastguard Worker                 NULL);
5849*61046927SAndroid Build Coastguard Worker 
5850*61046927SAndroid Build Coastguard Worker    add_function("subtractSaturate",
5851*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2,
5852*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_int),
5853*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2,
5854*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_ivec2),
5855*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2,
5856*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_ivec3),
5857*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2,
5858*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_ivec4),
5859*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2,
5860*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_uint),
5861*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2,
5862*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_uvec2),
5863*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2,
5864*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_uvec3),
5865*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2,
5866*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_uvec4),
5867*61046927SAndroid Build Coastguard Worker 
5868*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2_int64,
5869*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_int64_t),
5870*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2_int64,
5871*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_i64vec2),
5872*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2_int64,
5873*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_i64vec3),
5874*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2_int64,
5875*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_i64vec4),
5876*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2_int64,
5877*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_uint64_t),
5878*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2_int64,
5879*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_u64vec2),
5880*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2_int64,
5881*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_u64vec3),
5882*61046927SAndroid Build Coastguard Worker                 _subtractSaturate(shader_integer_functions2_int64,
5883*61046927SAndroid Build Coastguard Worker                                   &glsl_type_builtin_u64vec4),
5884*61046927SAndroid Build Coastguard Worker                 NULL);
5885*61046927SAndroid Build Coastguard Worker 
5886*61046927SAndroid Build Coastguard Worker    add_function("multiply32x16",
5887*61046927SAndroid Build Coastguard Worker                 _multiply32x16(shader_integer_functions2,
5888*61046927SAndroid Build Coastguard Worker                                &glsl_type_builtin_int),
5889*61046927SAndroid Build Coastguard Worker                 _multiply32x16(shader_integer_functions2,
5890*61046927SAndroid Build Coastguard Worker                                &glsl_type_builtin_ivec2),
5891*61046927SAndroid Build Coastguard Worker                 _multiply32x16(shader_integer_functions2,
5892*61046927SAndroid Build Coastguard Worker                                &glsl_type_builtin_ivec3),
5893*61046927SAndroid Build Coastguard Worker                 _multiply32x16(shader_integer_functions2,
5894*61046927SAndroid Build Coastguard Worker                                &glsl_type_builtin_ivec4),
5895*61046927SAndroid Build Coastguard Worker                 _multiply32x16(shader_integer_functions2,
5896*61046927SAndroid Build Coastguard Worker                                &glsl_type_builtin_uint),
5897*61046927SAndroid Build Coastguard Worker                 _multiply32x16(shader_integer_functions2,
5898*61046927SAndroid Build Coastguard Worker                                &glsl_type_builtin_uvec2),
5899*61046927SAndroid Build Coastguard Worker                 _multiply32x16(shader_integer_functions2,
5900*61046927SAndroid Build Coastguard Worker                                &glsl_type_builtin_uvec3),
5901*61046927SAndroid Build Coastguard Worker                 _multiply32x16(shader_integer_functions2,
5902*61046927SAndroid Build Coastguard Worker                                &glsl_type_builtin_uvec4),
5903*61046927SAndroid Build Coastguard Worker                 NULL);
5904*61046927SAndroid Build Coastguard Worker 
5905*61046927SAndroid Build Coastguard Worker    add_function("subgroupBarrier",
5906*61046927SAndroid Build Coastguard Worker                 _subgroup_barrier("__intrinsic_subgroup_barrier", subgroup_basic), NULL);
5907*61046927SAndroid Build Coastguard Worker    add_function("subgroupMemoryBarrier",
5908*61046927SAndroid Build Coastguard Worker                 _subgroup_barrier("__intrinsic_subgroup_memory_barrier", subgroup_basic), NULL);
5909*61046927SAndroid Build Coastguard Worker    add_function("subgroupMemoryBarrierBuffer",
5910*61046927SAndroid Build Coastguard Worker                 _subgroup_barrier("__intrinsic_subgroup_memory_barrier_buffer", subgroup_basic),
5911*61046927SAndroid Build Coastguard Worker                 NULL);
5912*61046927SAndroid Build Coastguard Worker    add_function("subgroupMemoryBarrierShared",
5913*61046927SAndroid Build Coastguard Worker                 _subgroup_barrier("__intrinsic_subgroup_memory_barrier_shared",
5914*61046927SAndroid Build Coastguard Worker                                   compute_shader_and_subgroup_basic),
5915*61046927SAndroid Build Coastguard Worker                 NULL);
5916*61046927SAndroid Build Coastguard Worker    add_function("subgroupMemoryBarrierImage",
5917*61046927SAndroid Build Coastguard Worker                 _subgroup_barrier("__intrinsic_subgroup_memory_barrier_image", subgroup_basic),
5918*61046927SAndroid Build Coastguard Worker                 NULL);
5919*61046927SAndroid Build Coastguard Worker 
5920*61046927SAndroid Build Coastguard Worker    add_function("subgroupElect", _elect(), NULL);
5921*61046927SAndroid Build Coastguard Worker 
5922*61046927SAndroid Build Coastguard Worker    add_function("subgroupAll",
5923*61046927SAndroid Build Coastguard Worker                 _vote(&glsl_type_builtin_bool, vote_khr, "__intrinsic_vote_all"), NULL);
5924*61046927SAndroid Build Coastguard Worker    add_function("subgroupAny",
5925*61046927SAndroid Build Coastguard Worker                 _vote(&glsl_type_builtin_bool, vote_khr, "__intrinsic_vote_any"), NULL);
5926*61046927SAndroid Build Coastguard Worker    add_function("subgroupAllEqual",
5927*61046927SAndroid Build Coastguard Worker                 FIUBD_AVAIL(_vote, vote_khr, "__intrinsic_vote_eq"), NULL);
5928*61046927SAndroid Build Coastguard Worker 
5929*61046927SAndroid Build Coastguard Worker    add_function("subgroupBroadcast", FIUBD_AVAIL(_read_invocation, ballot_khr), NULL);
5930*61046927SAndroid Build Coastguard Worker 
5931*61046927SAndroid Build Coastguard Worker    add_function("subgroupBroadcastFirst", FIUBD_AVAIL(_read_first_invocation, ballot_khr), NULL);
5932*61046927SAndroid Build Coastguard Worker 
5933*61046927SAndroid Build Coastguard Worker    add_function("subgroupBallot", _ballot(&glsl_type_builtin_uvec4, ballot_khr), NULL);
5934*61046927SAndroid Build Coastguard Worker 
5935*61046927SAndroid Build Coastguard Worker    add_function("subgroupInverseBallot", _inverse_ballot(), NULL);
5936*61046927SAndroid Build Coastguard Worker 
5937*61046927SAndroid Build Coastguard Worker    add_function("subgroupBallotBitExtract", _ballot_bit_extract(), NULL);
5938*61046927SAndroid Build Coastguard Worker 
5939*61046927SAndroid Build Coastguard Worker    add_function("subgroupBallotBitCount", _ballot_bit("__intrinsic_ballot_bit_count"), NULL);
5940*61046927SAndroid Build Coastguard Worker 
5941*61046927SAndroid Build Coastguard Worker    add_function("subgroupBallotInclusiveBitCount",
5942*61046927SAndroid Build Coastguard Worker                 _ballot_bit("__intrinsic_ballot_inclusive_bit_count"), NULL);
5943*61046927SAndroid Build Coastguard Worker    add_function("subgroupBallotExclusiveBitCount",
5944*61046927SAndroid Build Coastguard Worker                 _ballot_bit("__intrinsic_ballot_exclusive_bit_count"), NULL);
5945*61046927SAndroid Build Coastguard Worker 
5946*61046927SAndroid Build Coastguard Worker    add_function("subgroupBallotFindLSB", _ballot_bit("__intrinsic_ballot_find_lsb"), NULL);
5947*61046927SAndroid Build Coastguard Worker    add_function("subgroupBallotFindMSB", _ballot_bit("__intrinsic_ballot_find_msb"), NULL);
5948*61046927SAndroid Build Coastguard Worker 
5949*61046927SAndroid Build Coastguard Worker    add_function("subgroupShuffle", FIUBD(_shuffle), NULL);
5950*61046927SAndroid Build Coastguard Worker 
5951*61046927SAndroid Build Coastguard Worker    add_function("subgroupShuffleXor", FIUBD(_shuffle_xor), NULL);
5952*61046927SAndroid Build Coastguard Worker 
5953*61046927SAndroid Build Coastguard Worker    add_function("subgroupShuffleUp", FIUBD(_shuffle_up), NULL);
5954*61046927SAndroid Build Coastguard Worker 
5955*61046927SAndroid Build Coastguard Worker    add_function("subgroupShuffleDown", FIUBD(_shuffle_down), NULL);
5956*61046927SAndroid Build Coastguard Worker 
5957*61046927SAndroid Build Coastguard Worker #define SUBGROUP_ARITH(ext, group1, group2) \
5958*61046927SAndroid Build Coastguard Worker    add_function("subgroup" #group1 "Add", \
5959*61046927SAndroid Build Coastguard Worker                 FIUD(_subgroup_##ext, "__intrinsic_" #group2 "_add"), NULL); \
5960*61046927SAndroid Build Coastguard Worker    add_function("subgroup" #group1 "Mul", \
5961*61046927SAndroid Build Coastguard Worker                 FIUD(_subgroup_##ext, "__intrinsic_" #group2 "_mul"), NULL); \
5962*61046927SAndroid Build Coastguard Worker    add_function("subgroup" #group1 "Min", \
5963*61046927SAndroid Build Coastguard Worker                 FIUD(_subgroup_##ext, "__intrinsic_" #group2 "_min"), NULL); \
5964*61046927SAndroid Build Coastguard Worker    add_function("subgroup" #group1 "Max", \
5965*61046927SAndroid Build Coastguard Worker                 FIUD(_subgroup_##ext, "__intrinsic_" #group2 "_max"), NULL); \
5966*61046927SAndroid Build Coastguard Worker    add_function("subgroup" #group1 "And", \
5967*61046927SAndroid Build Coastguard Worker                 IUB(_subgroup_##ext, "__intrinsic_" #group2 "_and"), NULL); \
5968*61046927SAndroid Build Coastguard Worker    add_function("subgroup" #group1 "Or", \
5969*61046927SAndroid Build Coastguard Worker                 IUB(_subgroup_##ext, "__intrinsic_" #group2 "_or"), NULL); \
5970*61046927SAndroid Build Coastguard Worker    add_function("subgroup" #group1 "Xor", \
5971*61046927SAndroid Build Coastguard Worker                 IUB(_subgroup_##ext, "__intrinsic_" #group2 "_xor"), NULL)
5972*61046927SAndroid Build Coastguard Worker 
5973*61046927SAndroid Build Coastguard Worker    SUBGROUP_ARITH(arithmetic, /* empty */, reduce);
5974*61046927SAndroid Build Coastguard Worker    SUBGROUP_ARITH(arithmetic, Inclusive, inclusive);
5975*61046927SAndroid Build Coastguard Worker    SUBGROUP_ARITH(arithmetic, Exclusive, exclusive);
5976*61046927SAndroid Build Coastguard Worker 
5977*61046927SAndroid Build Coastguard Worker    SUBGROUP_ARITH(clustered, Clustered, clustered);
5978*61046927SAndroid Build Coastguard Worker 
5979*61046927SAndroid Build Coastguard Worker    add_function("subgroupQuadBroadcast", FIUBD(_quad_broadcast), NULL);
5980*61046927SAndroid Build Coastguard Worker 
5981*61046927SAndroid Build Coastguard Worker    add_function("subgroupQuadSwapHorizontal",
5982*61046927SAndroid Build Coastguard Worker                 FIUBD(_quad_swap, "__intrinsic_quad_swap_horizontal"), NULL);
5983*61046927SAndroid Build Coastguard Worker    add_function("subgroupQuadSwapVertical",
5984*61046927SAndroid Build Coastguard Worker                 FIUBD(_quad_swap, "__intrinsic_quad_swap_vertical"), NULL);
5985*61046927SAndroid Build Coastguard Worker    add_function("subgroupQuadSwapDiagonal",
5986*61046927SAndroid Build Coastguard Worker                 FIUBD(_quad_swap, "__intrinsic_quad_swap_diagonal"), NULL);
5987*61046927SAndroid Build Coastguard Worker 
5988*61046927SAndroid Build Coastguard Worker #undef F
5989*61046927SAndroid Build Coastguard Worker #undef FI
5990*61046927SAndroid Build Coastguard Worker #undef FIUDHF_VEC
5991*61046927SAndroid Build Coastguard Worker #undef FIUBDHF_VEC
5992*61046927SAndroid Build Coastguard Worker #undef FIU2_MIXED
5993*61046927SAndroid Build Coastguard Worker }
5994*61046927SAndroid Build Coastguard Worker 
5995*61046927SAndroid Build Coastguard Worker void
add_function(const char * name,...)5996*61046927SAndroid Build Coastguard Worker builtin_builder::add_function(const char *name, ...)
5997*61046927SAndroid Build Coastguard Worker {
5998*61046927SAndroid Build Coastguard Worker    va_list ap;
5999*61046927SAndroid Build Coastguard Worker 
6000*61046927SAndroid Build Coastguard Worker    ir_function *f = new(mem_ctx) ir_function(name);
6001*61046927SAndroid Build Coastguard Worker 
6002*61046927SAndroid Build Coastguard Worker    va_start(ap, name);
6003*61046927SAndroid Build Coastguard Worker    while (true) {
6004*61046927SAndroid Build Coastguard Worker       ir_function_signature *sig = va_arg(ap, ir_function_signature *);
6005*61046927SAndroid Build Coastguard Worker       if (sig == NULL)
6006*61046927SAndroid Build Coastguard Worker          break;
6007*61046927SAndroid Build Coastguard Worker 
6008*61046927SAndroid Build Coastguard Worker       if (false) {
6009*61046927SAndroid Build Coastguard Worker          exec_list stuff;
6010*61046927SAndroid Build Coastguard Worker          stuff.push_tail(sig);
6011*61046927SAndroid Build Coastguard Worker          validate_ir_tree(&stuff);
6012*61046927SAndroid Build Coastguard Worker       }
6013*61046927SAndroid Build Coastguard Worker 
6014*61046927SAndroid Build Coastguard Worker       f->add_signature(sig);
6015*61046927SAndroid Build Coastguard Worker    }
6016*61046927SAndroid Build Coastguard Worker    va_end(ap);
6017*61046927SAndroid Build Coastguard Worker 
6018*61046927SAndroid Build Coastguard Worker    shader->symbols->add_function(f);
6019*61046927SAndroid Build Coastguard Worker }
6020*61046927SAndroid Build Coastguard Worker 
6021*61046927SAndroid Build Coastguard Worker void
add_image_function(const char * name,const char * intrinsic_name,image_prototype_ctr prototype,unsigned num_arguments,unsigned flags,enum ir_intrinsic_id intrinsic_id)6022*61046927SAndroid Build Coastguard Worker builtin_builder::add_image_function(const char *name,
6023*61046927SAndroid Build Coastguard Worker                                     const char *intrinsic_name,
6024*61046927SAndroid Build Coastguard Worker                                     image_prototype_ctr prototype,
6025*61046927SAndroid Build Coastguard Worker                                     unsigned num_arguments,
6026*61046927SAndroid Build Coastguard Worker                                     unsigned flags,
6027*61046927SAndroid Build Coastguard Worker                                     enum ir_intrinsic_id intrinsic_id)
6028*61046927SAndroid Build Coastguard Worker {
6029*61046927SAndroid Build Coastguard Worker    static const glsl_type *const types[] = {
6030*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_image1D,
6031*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_image2D,
6032*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_image3D,
6033*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_image2DRect,
6034*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_imageCube,
6035*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_imageBuffer,
6036*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_image1DArray,
6037*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_image2DArray,
6038*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_imageCubeArray,
6039*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_image2DMS,
6040*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_image2DMSArray,
6041*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_iimage1D,
6042*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_iimage2D,
6043*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_iimage3D,
6044*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_iimage2DRect,
6045*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_iimageCube,
6046*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_iimageBuffer,
6047*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_iimage1DArray,
6048*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_iimage2DArray,
6049*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_iimageCubeArray,
6050*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_iimage2DMS,
6051*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_iimage2DMSArray,
6052*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_uimage1D,
6053*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_uimage2D,
6054*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_uimage3D,
6055*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_uimage2DRect,
6056*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_uimageCube,
6057*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_uimageBuffer,
6058*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_uimage1DArray,
6059*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_uimage2DArray,
6060*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_uimageCubeArray,
6061*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_uimage2DMS,
6062*61046927SAndroid Build Coastguard Worker       &glsl_type_builtin_uimage2DMSArray
6063*61046927SAndroid Build Coastguard Worker    };
6064*61046927SAndroid Build Coastguard Worker 
6065*61046927SAndroid Build Coastguard Worker    ir_function *f = new(mem_ctx) ir_function(name);
6066*61046927SAndroid Build Coastguard Worker 
6067*61046927SAndroid Build Coastguard Worker    for (unsigned i = 0; i < ARRAY_SIZE(types); ++i) {
6068*61046927SAndroid Build Coastguard Worker       if (types[i]->sampled_type == GLSL_TYPE_FLOAT && !(flags & IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE))
6069*61046927SAndroid Build Coastguard Worker          continue;
6070*61046927SAndroid Build Coastguard Worker       if (types[i]->sampled_type == GLSL_TYPE_INT && !(flags & IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE))
6071*61046927SAndroid Build Coastguard Worker          continue;
6072*61046927SAndroid Build Coastguard Worker       if ((types[i]->sampler_dimensionality != GLSL_SAMPLER_DIM_MS) && (flags & IMAGE_FUNCTION_MS_ONLY))
6073*61046927SAndroid Build Coastguard Worker          continue;
6074*61046927SAndroid Build Coastguard Worker       if (flags & IMAGE_FUNCTION_SPARSE) {
6075*61046927SAndroid Build Coastguard Worker          switch (types[i]->sampler_dimensionality) {
6076*61046927SAndroid Build Coastguard Worker          case GLSL_SAMPLER_DIM_2D:
6077*61046927SAndroid Build Coastguard Worker          case GLSL_SAMPLER_DIM_3D:
6078*61046927SAndroid Build Coastguard Worker          case GLSL_SAMPLER_DIM_CUBE:
6079*61046927SAndroid Build Coastguard Worker          case GLSL_SAMPLER_DIM_RECT:
6080*61046927SAndroid Build Coastguard Worker          case GLSL_SAMPLER_DIM_MS:
6081*61046927SAndroid Build Coastguard Worker             break;
6082*61046927SAndroid Build Coastguard Worker          default:
6083*61046927SAndroid Build Coastguard Worker             continue;
6084*61046927SAndroid Build Coastguard Worker          }
6085*61046927SAndroid Build Coastguard Worker       }
6086*61046927SAndroid Build Coastguard Worker       f->add_signature(_image(prototype, types[i], intrinsic_name,
6087*61046927SAndroid Build Coastguard Worker                               num_arguments, flags, intrinsic_id));
6088*61046927SAndroid Build Coastguard Worker    }
6089*61046927SAndroid Build Coastguard Worker    shader->symbols->add_function(f);
6090*61046927SAndroid Build Coastguard Worker }
6091*61046927SAndroid Build Coastguard Worker 
6092*61046927SAndroid Build Coastguard Worker void
add_image_functions(bool glsl)6093*61046927SAndroid Build Coastguard Worker builtin_builder::add_image_functions(bool glsl)
6094*61046927SAndroid Build Coastguard Worker {
6095*61046927SAndroid Build Coastguard Worker    const unsigned flags = (glsl ? IMAGE_FUNCTION_EMIT_STUB : 0);
6096*61046927SAndroid Build Coastguard Worker 
6097*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "imageLoad" : "__intrinsic_image_load",
6098*61046927SAndroid Build Coastguard Worker                        "__intrinsic_image_load",
6099*61046927SAndroid Build Coastguard Worker                        &builtin_builder::_image_prototype, 0,
6100*61046927SAndroid Build Coastguard Worker                        (flags | IMAGE_FUNCTION_HAS_VECTOR_DATA_TYPE |
6101*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE |
6102*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE |
6103*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_READ_ONLY),
6104*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_load);
6105*61046927SAndroid Build Coastguard Worker 
6106*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "imageStore" : "__intrinsic_image_store",
6107*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_store",
6108*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_prototype, 1,
6109*61046927SAndroid Build Coastguard Worker                       (flags | IMAGE_FUNCTION_RETURNS_VOID |
6110*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_HAS_VECTOR_DATA_TYPE |
6111*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE |
6112*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE |
6113*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_WRITE_ONLY),
6114*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_store);
6115*61046927SAndroid Build Coastguard Worker 
6116*61046927SAndroid Build Coastguard Worker    const unsigned atom_flags = flags | IMAGE_FUNCTION_AVAIL_ATOMIC;
6117*61046927SAndroid Build Coastguard Worker 
6118*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "imageAtomicAdd" : "__intrinsic_image_atomic_add",
6119*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_atomic_add",
6120*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_prototype, 1,
6121*61046927SAndroid Build Coastguard Worker                       (flags | IMAGE_FUNCTION_AVAIL_ATOMIC_ADD |
6122*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE |
6123*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE),
6124*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_atomic_add);
6125*61046927SAndroid Build Coastguard Worker 
6126*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "imageAtomicMin" : "__intrinsic_image_atomic_min",
6127*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_atomic_min",
6128*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_prototype, 1,
6129*61046927SAndroid Build Coastguard Worker                       atom_flags | IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE,
6130*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_atomic_min);
6131*61046927SAndroid Build Coastguard Worker 
6132*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "imageAtomicMax" : "__intrinsic_image_atomic_max",
6133*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_atomic_max",
6134*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_prototype, 1,
6135*61046927SAndroid Build Coastguard Worker                       atom_flags | IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE,
6136*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_atomic_max);
6137*61046927SAndroid Build Coastguard Worker 
6138*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "imageAtomicAnd" : "__intrinsic_image_atomic_and",
6139*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_atomic_and",
6140*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_prototype, 1,
6141*61046927SAndroid Build Coastguard Worker                       atom_flags | IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE,
6142*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_atomic_and);
6143*61046927SAndroid Build Coastguard Worker 
6144*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "imageAtomicOr" : "__intrinsic_image_atomic_or",
6145*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_atomic_or",
6146*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_prototype, 1,
6147*61046927SAndroid Build Coastguard Worker                       atom_flags | IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE,
6148*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_atomic_or);
6149*61046927SAndroid Build Coastguard Worker 
6150*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "imageAtomicXor" : "__intrinsic_image_atomic_xor",
6151*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_atomic_xor",
6152*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_prototype, 1,
6153*61046927SAndroid Build Coastguard Worker                       atom_flags | IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE,
6154*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_atomic_xor);
6155*61046927SAndroid Build Coastguard Worker 
6156*61046927SAndroid Build Coastguard Worker    add_image_function((glsl ? "imageAtomicExchange" :
6157*61046927SAndroid Build Coastguard Worker                        "__intrinsic_image_atomic_exchange"),
6158*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_atomic_exchange",
6159*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_prototype, 1,
6160*61046927SAndroid Build Coastguard Worker                       (flags | IMAGE_FUNCTION_AVAIL_ATOMIC_EXCHANGE |
6161*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE |
6162*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE),
6163*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_atomic_exchange);
6164*61046927SAndroid Build Coastguard Worker 
6165*61046927SAndroid Build Coastguard Worker    add_image_function((glsl ? "imageAtomicCompSwap" :
6166*61046927SAndroid Build Coastguard Worker                        "__intrinsic_image_atomic_comp_swap"),
6167*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_atomic_comp_swap",
6168*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_prototype, 2,
6169*61046927SAndroid Build Coastguard Worker                       atom_flags | IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE,
6170*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_atomic_comp_swap);
6171*61046927SAndroid Build Coastguard Worker 
6172*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "imageSize" : "__intrinsic_image_size",
6173*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_size",
6174*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_size_prototype, 1,
6175*61046927SAndroid Build Coastguard Worker                       flags | IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE |
6176*61046927SAndroid Build Coastguard Worker                       IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE,
6177*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_size);
6178*61046927SAndroid Build Coastguard Worker 
6179*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "imageSamples" : "__intrinsic_image_samples",
6180*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_samples",
6181*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_samples_prototype, 1,
6182*61046927SAndroid Build Coastguard Worker                       flags | IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE |
6183*61046927SAndroid Build Coastguard Worker                       IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE |
6184*61046927SAndroid Build Coastguard Worker                       IMAGE_FUNCTION_MS_ONLY,
6185*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_samples);
6186*61046927SAndroid Build Coastguard Worker 
6187*61046927SAndroid Build Coastguard Worker    /* EXT_shader_image_load_store */
6188*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "imageAtomicIncWrap" : "__intrinsic_image_atomic_inc_wrap",
6189*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_atomic_inc_wrap",
6190*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_prototype, 1,
6191*61046927SAndroid Build Coastguard Worker                       (atom_flags | IMAGE_FUNCTION_EXT_ONLY),
6192*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_atomic_inc_wrap);
6193*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "imageAtomicDecWrap" : "__intrinsic_image_atomic_dec_wrap",
6194*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_atomic_dec_wrap",
6195*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_prototype, 1,
6196*61046927SAndroid Build Coastguard Worker                       (atom_flags | IMAGE_FUNCTION_EXT_ONLY),
6197*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_atomic_dec_wrap);
6198*61046927SAndroid Build Coastguard Worker 
6199*61046927SAndroid Build Coastguard Worker    /* ARB_sparse_texture2 */
6200*61046927SAndroid Build Coastguard Worker    add_image_function(glsl ? "sparseImageLoadARB" : "__intrinsic_image_sparse_load",
6201*61046927SAndroid Build Coastguard Worker                       "__intrinsic_image_sparse_load",
6202*61046927SAndroid Build Coastguard Worker                       &builtin_builder::_image_prototype, 0,
6203*61046927SAndroid Build Coastguard Worker                       (flags | IMAGE_FUNCTION_HAS_VECTOR_DATA_TYPE |
6204*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE |
6205*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE |
6206*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_READ_ONLY |
6207*61046927SAndroid Build Coastguard Worker                        IMAGE_FUNCTION_SPARSE),
6208*61046927SAndroid Build Coastguard Worker                       ir_intrinsic_image_sparse_load);
6209*61046927SAndroid Build Coastguard Worker }
6210*61046927SAndroid Build Coastguard Worker 
6211*61046927SAndroid Build Coastguard Worker ir_variable *
in_var(const glsl_type * type,const char * name)6212*61046927SAndroid Build Coastguard Worker builtin_builder::in_var(const glsl_type *type, const char *name)
6213*61046927SAndroid Build Coastguard Worker {
6214*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_variable(type, name, ir_var_function_in);
6215*61046927SAndroid Build Coastguard Worker }
6216*61046927SAndroid Build Coastguard Worker 
6217*61046927SAndroid Build Coastguard Worker ir_variable *
in_highp_var(const glsl_type * type,const char * name)6218*61046927SAndroid Build Coastguard Worker builtin_builder::in_highp_var(const glsl_type *type, const char *name)
6219*61046927SAndroid Build Coastguard Worker {
6220*61046927SAndroid Build Coastguard Worker    ir_variable *var = in_var(type, name);
6221*61046927SAndroid Build Coastguard Worker    var->data.precision = GLSL_PRECISION_HIGH;
6222*61046927SAndroid Build Coastguard Worker    return var;
6223*61046927SAndroid Build Coastguard Worker }
6224*61046927SAndroid Build Coastguard Worker 
6225*61046927SAndroid Build Coastguard Worker ir_variable *
in_mediump_var(const glsl_type * type,const char * name)6226*61046927SAndroid Build Coastguard Worker builtin_builder::in_mediump_var(const glsl_type *type, const char *name)
6227*61046927SAndroid Build Coastguard Worker {
6228*61046927SAndroid Build Coastguard Worker    ir_variable *var = in_var(type, name);
6229*61046927SAndroid Build Coastguard Worker    var->data.precision = GLSL_PRECISION_MEDIUM;
6230*61046927SAndroid Build Coastguard Worker    return var;
6231*61046927SAndroid Build Coastguard Worker }
6232*61046927SAndroid Build Coastguard Worker 
6233*61046927SAndroid Build Coastguard Worker ir_variable *
out_var(const glsl_type * type,const char * name)6234*61046927SAndroid Build Coastguard Worker builtin_builder::out_var(const glsl_type *type, const char *name)
6235*61046927SAndroid Build Coastguard Worker {
6236*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_variable(type, name, ir_var_function_out);
6237*61046927SAndroid Build Coastguard Worker }
6238*61046927SAndroid Build Coastguard Worker 
6239*61046927SAndroid Build Coastguard Worker ir_variable *
out_lowp_var(const glsl_type * type,const char * name)6240*61046927SAndroid Build Coastguard Worker builtin_builder::out_lowp_var(const glsl_type *type, const char *name)
6241*61046927SAndroid Build Coastguard Worker {
6242*61046927SAndroid Build Coastguard Worker    ir_variable *var = out_var(type, name);
6243*61046927SAndroid Build Coastguard Worker    var->data.precision = GLSL_PRECISION_LOW;
6244*61046927SAndroid Build Coastguard Worker    return var;
6245*61046927SAndroid Build Coastguard Worker }
6246*61046927SAndroid Build Coastguard Worker 
6247*61046927SAndroid Build Coastguard Worker ir_variable *
out_highp_var(const glsl_type * type,const char * name)6248*61046927SAndroid Build Coastguard Worker builtin_builder::out_highp_var(const glsl_type *type, const char *name)
6249*61046927SAndroid Build Coastguard Worker {
6250*61046927SAndroid Build Coastguard Worker    ir_variable *var = out_var(type, name);
6251*61046927SAndroid Build Coastguard Worker    var->data.precision = GLSL_PRECISION_HIGH;
6252*61046927SAndroid Build Coastguard Worker    return var;
6253*61046927SAndroid Build Coastguard Worker }
6254*61046927SAndroid Build Coastguard Worker 
6255*61046927SAndroid Build Coastguard Worker ir_variable *
as_highp(ir_factory & body,ir_variable * var)6256*61046927SAndroid Build Coastguard Worker builtin_builder::as_highp(ir_factory &body, ir_variable *var)
6257*61046927SAndroid Build Coastguard Worker {
6258*61046927SAndroid Build Coastguard Worker    ir_variable *t = body.make_temp(var->type, "highp_tmp");
6259*61046927SAndroid Build Coastguard Worker    body.emit(assign(t, var));
6260*61046927SAndroid Build Coastguard Worker    return t;
6261*61046927SAndroid Build Coastguard Worker }
6262*61046927SAndroid Build Coastguard Worker 
6263*61046927SAndroid Build Coastguard Worker ir_constant *
imm(float16_t f16,unsigned vector_elements)6264*61046927SAndroid Build Coastguard Worker builtin_builder::imm(float16_t f16, unsigned vector_elements)
6265*61046927SAndroid Build Coastguard Worker {
6266*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_constant(f16, vector_elements);
6267*61046927SAndroid Build Coastguard Worker }
6268*61046927SAndroid Build Coastguard Worker 
6269*61046927SAndroid Build Coastguard Worker ir_constant *
imm(bool b,unsigned vector_elements)6270*61046927SAndroid Build Coastguard Worker builtin_builder::imm(bool b, unsigned vector_elements)
6271*61046927SAndroid Build Coastguard Worker {
6272*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_constant(b, vector_elements);
6273*61046927SAndroid Build Coastguard Worker }
6274*61046927SAndroid Build Coastguard Worker 
6275*61046927SAndroid Build Coastguard Worker ir_constant *
imm(float f,unsigned vector_elements)6276*61046927SAndroid Build Coastguard Worker builtin_builder::imm(float f, unsigned vector_elements)
6277*61046927SAndroid Build Coastguard Worker {
6278*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_constant(f, vector_elements);
6279*61046927SAndroid Build Coastguard Worker }
6280*61046927SAndroid Build Coastguard Worker 
6281*61046927SAndroid Build Coastguard Worker ir_constant *
imm(int i,unsigned vector_elements)6282*61046927SAndroid Build Coastguard Worker builtin_builder::imm(int i, unsigned vector_elements)
6283*61046927SAndroid Build Coastguard Worker {
6284*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_constant(i, vector_elements);
6285*61046927SAndroid Build Coastguard Worker }
6286*61046927SAndroid Build Coastguard Worker 
6287*61046927SAndroid Build Coastguard Worker ir_constant *
imm(unsigned u,unsigned vector_elements)6288*61046927SAndroid Build Coastguard Worker builtin_builder::imm(unsigned u, unsigned vector_elements)
6289*61046927SAndroid Build Coastguard Worker {
6290*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_constant(u, vector_elements);
6291*61046927SAndroid Build Coastguard Worker }
6292*61046927SAndroid Build Coastguard Worker 
6293*61046927SAndroid Build Coastguard Worker ir_constant *
imm(double d,unsigned vector_elements)6294*61046927SAndroid Build Coastguard Worker builtin_builder::imm(double d, unsigned vector_elements)
6295*61046927SAndroid Build Coastguard Worker {
6296*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_constant(d, vector_elements);
6297*61046927SAndroid Build Coastguard Worker }
6298*61046927SAndroid Build Coastguard Worker 
6299*61046927SAndroid Build Coastguard Worker ir_constant *
imm(const glsl_type * type,const ir_constant_data & data)6300*61046927SAndroid Build Coastguard Worker builtin_builder::imm(const glsl_type *type, const ir_constant_data &data)
6301*61046927SAndroid Build Coastguard Worker {
6302*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_constant(type, &data);
6303*61046927SAndroid Build Coastguard Worker }
6304*61046927SAndroid Build Coastguard Worker 
6305*61046927SAndroid Build Coastguard Worker #define IMM_FP(type, val) (glsl_type_is_double(type)) ? imm(val) : \
6306*61046927SAndroid Build Coastguard Worker    (glsl_type_is_float_16(type)  ? imm((float16_t)val) : imm((float)val))
6307*61046927SAndroid Build Coastguard Worker 
6308*61046927SAndroid Build Coastguard Worker ir_dereference_variable *
var_ref(ir_variable * var)6309*61046927SAndroid Build Coastguard Worker builtin_builder::var_ref(ir_variable *var)
6310*61046927SAndroid Build Coastguard Worker {
6311*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_dereference_variable(var);
6312*61046927SAndroid Build Coastguard Worker }
6313*61046927SAndroid Build Coastguard Worker 
6314*61046927SAndroid Build Coastguard Worker ir_dereference_array *
array_ref(ir_variable * var,int idx)6315*61046927SAndroid Build Coastguard Worker builtin_builder::array_ref(ir_variable *var, int idx)
6316*61046927SAndroid Build Coastguard Worker {
6317*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_dereference_array(var, imm(idx));
6318*61046927SAndroid Build Coastguard Worker }
6319*61046927SAndroid Build Coastguard Worker 
6320*61046927SAndroid Build Coastguard Worker /** Return an element of a matrix */
6321*61046927SAndroid Build Coastguard Worker ir_swizzle *
matrix_elt(ir_variable * var,int column,int row)6322*61046927SAndroid Build Coastguard Worker builtin_builder::matrix_elt(ir_variable *var, int column, int row)
6323*61046927SAndroid Build Coastguard Worker {
6324*61046927SAndroid Build Coastguard Worker    return swizzle(array_ref(var, column), row, 1);
6325*61046927SAndroid Build Coastguard Worker }
6326*61046927SAndroid Build Coastguard Worker 
6327*61046927SAndroid Build Coastguard Worker ir_dereference_record *
record_ref(ir_variable * var,const char * field)6328*61046927SAndroid Build Coastguard Worker builtin_builder::record_ref(ir_variable *var, const char *field)
6329*61046927SAndroid Build Coastguard Worker {
6330*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_dereference_record(var, field);
6331*61046927SAndroid Build Coastguard Worker }
6332*61046927SAndroid Build Coastguard Worker 
6333*61046927SAndroid Build Coastguard Worker /**
6334*61046927SAndroid Build Coastguard Worker  * Implementations of built-in functions:
6335*61046927SAndroid Build Coastguard Worker  *  @{
6336*61046927SAndroid Build Coastguard Worker  */
6337*61046927SAndroid Build Coastguard Worker ir_function_signature *
new_sig(const glsl_type * return_type,builtin_available_predicate avail,int num_params,...)6338*61046927SAndroid Build Coastguard Worker builtin_builder::new_sig(const glsl_type *return_type,
6339*61046927SAndroid Build Coastguard Worker                          builtin_available_predicate avail,
6340*61046927SAndroid Build Coastguard Worker                          int num_params,
6341*61046927SAndroid Build Coastguard Worker                          ...)
6342*61046927SAndroid Build Coastguard Worker {
6343*61046927SAndroid Build Coastguard Worker    va_list ap;
6344*61046927SAndroid Build Coastguard Worker 
6345*61046927SAndroid Build Coastguard Worker    ir_function_signature *sig =
6346*61046927SAndroid Build Coastguard Worker       new(mem_ctx) ir_function_signature(return_type, avail);
6347*61046927SAndroid Build Coastguard Worker 
6348*61046927SAndroid Build Coastguard Worker    exec_list plist;
6349*61046927SAndroid Build Coastguard Worker    va_start(ap, num_params);
6350*61046927SAndroid Build Coastguard Worker    for (int i = 0; i < num_params; i++) {
6351*61046927SAndroid Build Coastguard Worker       plist.push_tail(va_arg(ap, ir_variable *));
6352*61046927SAndroid Build Coastguard Worker    }
6353*61046927SAndroid Build Coastguard Worker    va_end(ap);
6354*61046927SAndroid Build Coastguard Worker 
6355*61046927SAndroid Build Coastguard Worker    sig->replace_parameters(&plist);
6356*61046927SAndroid Build Coastguard Worker    return sig;
6357*61046927SAndroid Build Coastguard Worker }
6358*61046927SAndroid Build Coastguard Worker 
6359*61046927SAndroid Build Coastguard Worker #define MAKE_SIG(return_type, avail, ...)  \
6360*61046927SAndroid Build Coastguard Worker    ir_function_signature *sig =               \
6361*61046927SAndroid Build Coastguard Worker       new_sig(return_type, avail, __VA_ARGS__);      \
6362*61046927SAndroid Build Coastguard Worker    ir_factory body(&sig->body, mem_ctx);             \
6363*61046927SAndroid Build Coastguard Worker    sig->is_defined = true;
6364*61046927SAndroid Build Coastguard Worker 
6365*61046927SAndroid Build Coastguard Worker #define MAKE_INTRINSIC(return_type, id, avail, ...)  \
6366*61046927SAndroid Build Coastguard Worker    ir_function_signature *sig =                      \
6367*61046927SAndroid Build Coastguard Worker       new_sig(return_type, avail, __VA_ARGS__);      \
6368*61046927SAndroid Build Coastguard Worker    sig->intrinsic_id = id;
6369*61046927SAndroid Build Coastguard Worker 
6370*61046927SAndroid Build Coastguard Worker ir_function_signature *
unop(builtin_available_predicate avail,ir_expression_operation opcode,const glsl_type * return_type,const glsl_type * param_type)6371*61046927SAndroid Build Coastguard Worker builtin_builder::unop(builtin_available_predicate avail,
6372*61046927SAndroid Build Coastguard Worker                       ir_expression_operation opcode,
6373*61046927SAndroid Build Coastguard Worker                       const glsl_type *return_type,
6374*61046927SAndroid Build Coastguard Worker                       const glsl_type *param_type)
6375*61046927SAndroid Build Coastguard Worker {
6376*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(param_type, "x");
6377*61046927SAndroid Build Coastguard Worker    MAKE_SIG(return_type, avail, 1, x);
6378*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(opcode, x)));
6379*61046927SAndroid Build Coastguard Worker    return sig;
6380*61046927SAndroid Build Coastguard Worker }
6381*61046927SAndroid Build Coastguard Worker 
6382*61046927SAndroid Build Coastguard Worker #define UNOP(NAME, OPCODE, AVAIL)               \
6383*61046927SAndroid Build Coastguard Worker ir_function_signature *                         \
6384*61046927SAndroid Build Coastguard Worker builtin_builder::_##NAME(const glsl_type *type) \
6385*61046927SAndroid Build Coastguard Worker {                                               \
6386*61046927SAndroid Build Coastguard Worker    return unop(&AVAIL, OPCODE, type, type);     \
6387*61046927SAndroid Build Coastguard Worker }
6388*61046927SAndroid Build Coastguard Worker 
6389*61046927SAndroid Build Coastguard Worker #define UNOPA(NAME, OPCODE)               \
6390*61046927SAndroid Build Coastguard Worker ir_function_signature *                         \
6391*61046927SAndroid Build Coastguard Worker builtin_builder::_##NAME(builtin_available_predicate avail, const glsl_type *type) \
6392*61046927SAndroid Build Coastguard Worker {                                               \
6393*61046927SAndroid Build Coastguard Worker    return unop(avail, OPCODE, type, type);     \
6394*61046927SAndroid Build Coastguard Worker }
6395*61046927SAndroid Build Coastguard Worker 
6396*61046927SAndroid Build Coastguard Worker ir_function_signature *
binop(builtin_available_predicate avail,ir_expression_operation opcode,const glsl_type * return_type,const glsl_type * param0_type,const glsl_type * param1_type,bool swap_operands)6397*61046927SAndroid Build Coastguard Worker builtin_builder::binop(builtin_available_predicate avail,
6398*61046927SAndroid Build Coastguard Worker                        ir_expression_operation opcode,
6399*61046927SAndroid Build Coastguard Worker                        const glsl_type *return_type,
6400*61046927SAndroid Build Coastguard Worker                        const glsl_type *param0_type,
6401*61046927SAndroid Build Coastguard Worker                        const glsl_type *param1_type,
6402*61046927SAndroid Build Coastguard Worker                        bool swap_operands)
6403*61046927SAndroid Build Coastguard Worker {
6404*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(param0_type, "x");
6405*61046927SAndroid Build Coastguard Worker    ir_variable *y = in_var(param1_type, "y");
6406*61046927SAndroid Build Coastguard Worker    MAKE_SIG(return_type, avail, 2, x, y);
6407*61046927SAndroid Build Coastguard Worker 
6408*61046927SAndroid Build Coastguard Worker    if (swap_operands)
6409*61046927SAndroid Build Coastguard Worker       body.emit(ret(expr(opcode, y, x)));
6410*61046927SAndroid Build Coastguard Worker    else
6411*61046927SAndroid Build Coastguard Worker       body.emit(ret(expr(opcode, x, y)));
6412*61046927SAndroid Build Coastguard Worker 
6413*61046927SAndroid Build Coastguard Worker    return sig;
6414*61046927SAndroid Build Coastguard Worker }
6415*61046927SAndroid Build Coastguard Worker 
6416*61046927SAndroid Build Coastguard Worker #define BINOP(NAME, OPCODE, AVAIL)                                      \
6417*61046927SAndroid Build Coastguard Worker ir_function_signature *                                                 \
6418*61046927SAndroid Build Coastguard Worker builtin_builder::_##NAME(const glsl_type *return_type,                  \
6419*61046927SAndroid Build Coastguard Worker                          const glsl_type *param0_type,                  \
6420*61046927SAndroid Build Coastguard Worker                          const glsl_type *param1_type)                  \
6421*61046927SAndroid Build Coastguard Worker {                                                                       \
6422*61046927SAndroid Build Coastguard Worker    return binop(&AVAIL, OPCODE, return_type, param0_type, param1_type); \
6423*61046927SAndroid Build Coastguard Worker }
6424*61046927SAndroid Build Coastguard Worker 
6425*61046927SAndroid Build Coastguard Worker /**
6426*61046927SAndroid Build Coastguard Worker  * Angle and Trigonometry Functions @{
6427*61046927SAndroid Build Coastguard Worker  */
6428*61046927SAndroid Build Coastguard Worker 
6429*61046927SAndroid Build Coastguard Worker ir_function_signature *
_radians(builtin_available_predicate avail,const glsl_type * type)6430*61046927SAndroid Build Coastguard Worker builtin_builder::_radians(builtin_available_predicate avail,
6431*61046927SAndroid Build Coastguard Worker                           const glsl_type *type)
6432*61046927SAndroid Build Coastguard Worker {
6433*61046927SAndroid Build Coastguard Worker    ir_variable *degrees = in_var(type, "degrees");
6434*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, degrees);
6435*61046927SAndroid Build Coastguard Worker    body.emit(ret(mul(degrees, IMM_FP(type, 0.0174532925f))));
6436*61046927SAndroid Build Coastguard Worker    return sig;
6437*61046927SAndroid Build Coastguard Worker }
6438*61046927SAndroid Build Coastguard Worker 
6439*61046927SAndroid Build Coastguard Worker ir_function_signature *
_degrees(builtin_available_predicate avail,const glsl_type * type)6440*61046927SAndroid Build Coastguard Worker builtin_builder::_degrees(builtin_available_predicate avail,
6441*61046927SAndroid Build Coastguard Worker                           const glsl_type *type)
6442*61046927SAndroid Build Coastguard Worker {
6443*61046927SAndroid Build Coastguard Worker    ir_variable *radians = in_var(type, "radians");
6444*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, radians);
6445*61046927SAndroid Build Coastguard Worker    body.emit(ret(mul(radians, IMM_FP(type, 57.29578f))));
6446*61046927SAndroid Build Coastguard Worker    return sig;
6447*61046927SAndroid Build Coastguard Worker }
6448*61046927SAndroid Build Coastguard Worker 
UNOPA(sin,ir_unop_sin)6449*61046927SAndroid Build Coastguard Worker UNOPA(sin, ir_unop_sin)
6450*61046927SAndroid Build Coastguard Worker UNOPA(cos, ir_unop_cos)
6451*61046927SAndroid Build Coastguard Worker 
6452*61046927SAndroid Build Coastguard Worker ir_function_signature *
6453*61046927SAndroid Build Coastguard Worker builtin_builder::_tan(builtin_available_predicate avail,
6454*61046927SAndroid Build Coastguard Worker                       const glsl_type *type)
6455*61046927SAndroid Build Coastguard Worker {
6456*61046927SAndroid Build Coastguard Worker    ir_variable *theta = in_var(type, "theta");
6457*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, theta);
6458*61046927SAndroid Build Coastguard Worker    body.emit(ret(div(sin(theta), cos(theta))));
6459*61046927SAndroid Build Coastguard Worker    return sig;
6460*61046927SAndroid Build Coastguard Worker }
6461*61046927SAndroid Build Coastguard Worker 
6462*61046927SAndroid Build Coastguard Worker ir_expression *
asin_expr(ir_variable * x,float p0,float p1)6463*61046927SAndroid Build Coastguard Worker builtin_builder::asin_expr(ir_variable *x, float p0, float p1)
6464*61046927SAndroid Build Coastguard Worker {
6465*61046927SAndroid Build Coastguard Worker    return mul(sign(x),
6466*61046927SAndroid Build Coastguard Worker               sub(IMM_FP(x->type, M_PI_2f),
6467*61046927SAndroid Build Coastguard Worker                   mul(sqrt(sub(IMM_FP(x->type, 1.0f), abs(x))),
6468*61046927SAndroid Build Coastguard Worker                       add(IMM_FP(x->type, M_PI_2f),
6469*61046927SAndroid Build Coastguard Worker                           mul(abs(x),
6470*61046927SAndroid Build Coastguard Worker                               add(IMM_FP(x->type, (M_PI_4f - 1.0f)),
6471*61046927SAndroid Build Coastguard Worker                                   mul(abs(x),
6472*61046927SAndroid Build Coastguard Worker                                       add(IMM_FP(x->type, p0),
6473*61046927SAndroid Build Coastguard Worker                                           mul(abs(x), IMM_FP(x->type, p1))))))))));
6474*61046927SAndroid Build Coastguard Worker }
6475*61046927SAndroid Build Coastguard Worker 
6476*61046927SAndroid Build Coastguard Worker /**
6477*61046927SAndroid Build Coastguard Worker  * Generate a ir_call to a function with a set of parameters
6478*61046927SAndroid Build Coastguard Worker  *
6479*61046927SAndroid Build Coastguard Worker  * The input \c params can either be a list of \c ir_variable or a list of
6480*61046927SAndroid Build Coastguard Worker  * \c ir_dereference_variable.  In the latter case, all nodes will be removed
6481*61046927SAndroid Build Coastguard Worker  * from \c params and used directly as the parameters to the generated
6482*61046927SAndroid Build Coastguard Worker  * \c ir_call.
6483*61046927SAndroid Build Coastguard Worker  */
6484*61046927SAndroid Build Coastguard Worker ir_call *
call(ir_function * f,ir_variable * ret,exec_list params)6485*61046927SAndroid Build Coastguard Worker builtin_builder::call(ir_function *f, ir_variable *ret, exec_list params)
6486*61046927SAndroid Build Coastguard Worker {
6487*61046927SAndroid Build Coastguard Worker    exec_list actual_params;
6488*61046927SAndroid Build Coastguard Worker 
6489*61046927SAndroid Build Coastguard Worker    foreach_in_list_safe(ir_instruction, ir, &params) {
6490*61046927SAndroid Build Coastguard Worker       ir_dereference_variable *d = ir->as_dereference_variable();
6491*61046927SAndroid Build Coastguard Worker       if (d != NULL) {
6492*61046927SAndroid Build Coastguard Worker          d->remove();
6493*61046927SAndroid Build Coastguard Worker          actual_params.push_tail(d);
6494*61046927SAndroid Build Coastguard Worker       } else {
6495*61046927SAndroid Build Coastguard Worker          ir_variable *var = ir->as_variable();
6496*61046927SAndroid Build Coastguard Worker          assert(var != NULL);
6497*61046927SAndroid Build Coastguard Worker          actual_params.push_tail(var_ref(var));
6498*61046927SAndroid Build Coastguard Worker       }
6499*61046927SAndroid Build Coastguard Worker    }
6500*61046927SAndroid Build Coastguard Worker 
6501*61046927SAndroid Build Coastguard Worker    ir_function_signature *sig =
6502*61046927SAndroid Build Coastguard Worker       f->exact_matching_signature(NULL, &actual_params);
6503*61046927SAndroid Build Coastguard Worker    if (!sig)
6504*61046927SAndroid Build Coastguard Worker       return NULL;
6505*61046927SAndroid Build Coastguard Worker 
6506*61046927SAndroid Build Coastguard Worker    ir_dereference_variable *deref =
6507*61046927SAndroid Build Coastguard Worker       (glsl_type_is_void(sig->return_type) ? NULL : var_ref(ret));
6508*61046927SAndroid Build Coastguard Worker 
6509*61046927SAndroid Build Coastguard Worker    return new(mem_ctx) ir_call(sig, deref, &actual_params);
6510*61046927SAndroid Build Coastguard Worker }
6511*61046927SAndroid Build Coastguard Worker 
6512*61046927SAndroid Build Coastguard Worker ir_function_signature *
_asin(builtin_available_predicate avail,const glsl_type * type)6513*61046927SAndroid Build Coastguard Worker builtin_builder::_asin(builtin_available_predicate avail,
6514*61046927SAndroid Build Coastguard Worker                        const glsl_type *type)
6515*61046927SAndroid Build Coastguard Worker {
6516*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6517*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, x);
6518*61046927SAndroid Build Coastguard Worker 
6519*61046927SAndroid Build Coastguard Worker    body.emit(ret(asin_expr(x, 0.086566724f, -0.03102955f)));
6520*61046927SAndroid Build Coastguard Worker 
6521*61046927SAndroid Build Coastguard Worker    return sig;
6522*61046927SAndroid Build Coastguard Worker }
6523*61046927SAndroid Build Coastguard Worker 
6524*61046927SAndroid Build Coastguard Worker ir_function_signature *
_acos(builtin_available_predicate avail,const glsl_type * type)6525*61046927SAndroid Build Coastguard Worker builtin_builder::_acos(builtin_available_predicate avail,
6526*61046927SAndroid Build Coastguard Worker                        const glsl_type *type)
6527*61046927SAndroid Build Coastguard Worker {
6528*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6529*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, x);
6530*61046927SAndroid Build Coastguard Worker 
6531*61046927SAndroid Build Coastguard Worker    body.emit(ret(sub(IMM_FP(type, M_PI_2f), asin_expr(x, 0.08132463f, -0.02363318f))));
6532*61046927SAndroid Build Coastguard Worker 
6533*61046927SAndroid Build Coastguard Worker    return sig;
6534*61046927SAndroid Build Coastguard Worker }
6535*61046927SAndroid Build Coastguard Worker 
6536*61046927SAndroid Build Coastguard Worker ir_function_signature *
_sinh(builtin_available_predicate avail,const glsl_type * type)6537*61046927SAndroid Build Coastguard Worker builtin_builder::_sinh(builtin_available_predicate avail,
6538*61046927SAndroid Build Coastguard Worker                        const glsl_type *type)
6539*61046927SAndroid Build Coastguard Worker {
6540*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6541*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, x);
6542*61046927SAndroid Build Coastguard Worker 
6543*61046927SAndroid Build Coastguard Worker    /* 0.5 * (e^x - e^(-x)) */
6544*61046927SAndroid Build Coastguard Worker    body.emit(ret(mul(IMM_FP(type, 0.5f), sub(exp(x), exp(neg(x))))));
6545*61046927SAndroid Build Coastguard Worker 
6546*61046927SAndroid Build Coastguard Worker    return sig;
6547*61046927SAndroid Build Coastguard Worker }
6548*61046927SAndroid Build Coastguard Worker 
6549*61046927SAndroid Build Coastguard Worker ir_function_signature *
_cosh(builtin_available_predicate avail,const glsl_type * type)6550*61046927SAndroid Build Coastguard Worker builtin_builder::_cosh(builtin_available_predicate avail,
6551*61046927SAndroid Build Coastguard Worker                        const glsl_type *type)
6552*61046927SAndroid Build Coastguard Worker {
6553*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6554*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, x);
6555*61046927SAndroid Build Coastguard Worker 
6556*61046927SAndroid Build Coastguard Worker    /* 0.5 * (e^x + e^(-x)) */
6557*61046927SAndroid Build Coastguard Worker    body.emit(ret(mul(IMM_FP(type, 0.5f), add(exp(x), exp(neg(x))))));
6558*61046927SAndroid Build Coastguard Worker 
6559*61046927SAndroid Build Coastguard Worker    return sig;
6560*61046927SAndroid Build Coastguard Worker }
6561*61046927SAndroid Build Coastguard Worker 
6562*61046927SAndroid Build Coastguard Worker ir_function_signature *
_tanh(builtin_available_predicate avail,const glsl_type * type)6563*61046927SAndroid Build Coastguard Worker builtin_builder::_tanh(builtin_available_predicate avail,
6564*61046927SAndroid Build Coastguard Worker                        const glsl_type *type)
6565*61046927SAndroid Build Coastguard Worker {
6566*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6567*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, x);
6568*61046927SAndroid Build Coastguard Worker 
6569*61046927SAndroid Build Coastguard Worker    /* Clamp x to [-10, +10] to avoid precision problems.
6570*61046927SAndroid Build Coastguard Worker     * When x > 10, e^(-x) is so small relative to e^x that it gets flushed to
6571*61046927SAndroid Build Coastguard Worker     * zero in the computation e^x + e^(-x). The same happens in the other
6572*61046927SAndroid Build Coastguard Worker     * direction when x < -10.
6573*61046927SAndroid Build Coastguard Worker     */
6574*61046927SAndroid Build Coastguard Worker    ir_variable *t = body.make_temp(type, "tmp");
6575*61046927SAndroid Build Coastguard Worker    body.emit(assign(t, min2(max2(x, IMM_FP(type, -10.0f)), IMM_FP(type, 10.0f))));
6576*61046927SAndroid Build Coastguard Worker 
6577*61046927SAndroid Build Coastguard Worker    /* (e^x - e^(-x)) / (e^x + e^(-x)) */
6578*61046927SAndroid Build Coastguard Worker    body.emit(ret(div(sub(exp(t), exp(neg(t))),
6579*61046927SAndroid Build Coastguard Worker                      add(exp(t), exp(neg(t))))));
6580*61046927SAndroid Build Coastguard Worker 
6581*61046927SAndroid Build Coastguard Worker    return sig;
6582*61046927SAndroid Build Coastguard Worker }
6583*61046927SAndroid Build Coastguard Worker 
6584*61046927SAndroid Build Coastguard Worker ir_function_signature *
_asinh(builtin_available_predicate avail,const glsl_type * type)6585*61046927SAndroid Build Coastguard Worker builtin_builder::_asinh(builtin_available_predicate avail,
6586*61046927SAndroid Build Coastguard Worker                         const glsl_type *type)
6587*61046927SAndroid Build Coastguard Worker {
6588*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6589*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, x);
6590*61046927SAndroid Build Coastguard Worker 
6591*61046927SAndroid Build Coastguard Worker    body.emit(ret(mul(sign(x), log(add(abs(x), sqrt(add(mul(x, x),
6592*61046927SAndroid Build Coastguard Worker                                                        IMM_FP(type, 1.0f))))))));
6593*61046927SAndroid Build Coastguard Worker    return sig;
6594*61046927SAndroid Build Coastguard Worker }
6595*61046927SAndroid Build Coastguard Worker 
6596*61046927SAndroid Build Coastguard Worker ir_function_signature *
_acosh(builtin_available_predicate avail,const glsl_type * type)6597*61046927SAndroid Build Coastguard Worker builtin_builder::_acosh(builtin_available_predicate avail,
6598*61046927SAndroid Build Coastguard Worker                         const glsl_type *type)
6599*61046927SAndroid Build Coastguard Worker {
6600*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6601*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, x);
6602*61046927SAndroid Build Coastguard Worker 
6603*61046927SAndroid Build Coastguard Worker    body.emit(ret(log(add(x, sqrt(sub(mul(x, x), IMM_FP(type, 1.0f)))))));
6604*61046927SAndroid Build Coastguard Worker    return sig;
6605*61046927SAndroid Build Coastguard Worker }
6606*61046927SAndroid Build Coastguard Worker 
6607*61046927SAndroid Build Coastguard Worker ir_function_signature *
_atanh(builtin_available_predicate avail,const glsl_type * type)6608*61046927SAndroid Build Coastguard Worker builtin_builder::_atanh(builtin_available_predicate avail,
6609*61046927SAndroid Build Coastguard Worker                         const glsl_type *type)
6610*61046927SAndroid Build Coastguard Worker {
6611*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6612*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, x);
6613*61046927SAndroid Build Coastguard Worker 
6614*61046927SAndroid Build Coastguard Worker    body.emit(ret(mul(IMM_FP(type, 0.5f), log(div(add(IMM_FP(type, 1.0f), x),
6615*61046927SAndroid Build Coastguard Worker                                                  sub(IMM_FP(type, 1.0f), x))))));
6616*61046927SAndroid Build Coastguard Worker    return sig;
6617*61046927SAndroid Build Coastguard Worker }
6618*61046927SAndroid Build Coastguard Worker /** @} */
6619*61046927SAndroid Build Coastguard Worker 
6620*61046927SAndroid Build Coastguard Worker /**
6621*61046927SAndroid Build Coastguard Worker  * Exponential Functions @{
6622*61046927SAndroid Build Coastguard Worker  */
6623*61046927SAndroid Build Coastguard Worker 
6624*61046927SAndroid Build Coastguard Worker ir_function_signature *
_pow(builtin_available_predicate avail,const glsl_type * type)6625*61046927SAndroid Build Coastguard Worker builtin_builder::_pow(builtin_available_predicate avail,
6626*61046927SAndroid Build Coastguard Worker                       const glsl_type *type)
6627*61046927SAndroid Build Coastguard Worker {
6628*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_pow, type, type, type);
6629*61046927SAndroid Build Coastguard Worker }
6630*61046927SAndroid Build Coastguard Worker 
UNOPA(exp,ir_unop_exp)6631*61046927SAndroid Build Coastguard Worker UNOPA(exp,         ir_unop_exp)
6632*61046927SAndroid Build Coastguard Worker UNOPA(log,         ir_unop_log)
6633*61046927SAndroid Build Coastguard Worker UNOPA(exp2,        ir_unop_exp2)
6634*61046927SAndroid Build Coastguard Worker UNOPA(log2,        ir_unop_log2)
6635*61046927SAndroid Build Coastguard Worker UNOPA(atan,        ir_unop_atan)
6636*61046927SAndroid Build Coastguard Worker UNOPA(sqrt,        ir_unop_sqrt)
6637*61046927SAndroid Build Coastguard Worker UNOPA(inversesqrt, ir_unop_rsq)
6638*61046927SAndroid Build Coastguard Worker 
6639*61046927SAndroid Build Coastguard Worker /** @} */
6640*61046927SAndroid Build Coastguard Worker 
6641*61046927SAndroid Build Coastguard Worker UNOPA(abs,       ir_unop_abs)
6642*61046927SAndroid Build Coastguard Worker UNOPA(sign,      ir_unop_sign)
6643*61046927SAndroid Build Coastguard Worker UNOPA(floor,     ir_unop_floor)
6644*61046927SAndroid Build Coastguard Worker UNOPA(truncate,  ir_unop_trunc)
6645*61046927SAndroid Build Coastguard Worker UNOPA(trunc,     ir_unop_trunc)
6646*61046927SAndroid Build Coastguard Worker UNOPA(round,     ir_unop_round_even)
6647*61046927SAndroid Build Coastguard Worker UNOPA(roundEven, ir_unop_round_even)
6648*61046927SAndroid Build Coastguard Worker UNOPA(ceil,      ir_unop_ceil)
6649*61046927SAndroid Build Coastguard Worker UNOPA(fract,     ir_unop_fract)
6650*61046927SAndroid Build Coastguard Worker 
6651*61046927SAndroid Build Coastguard Worker ir_function_signature *
6652*61046927SAndroid Build Coastguard Worker builtin_builder::_mod(builtin_available_predicate avail,
6653*61046927SAndroid Build Coastguard Worker                       const glsl_type *x_type, const glsl_type *y_type)
6654*61046927SAndroid Build Coastguard Worker {
6655*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_mod, x_type, x_type, y_type);
6656*61046927SAndroid Build Coastguard Worker }
6657*61046927SAndroid Build Coastguard Worker 
6658*61046927SAndroid Build Coastguard Worker ir_function_signature *
_modf(builtin_available_predicate avail,const glsl_type * type)6659*61046927SAndroid Build Coastguard Worker builtin_builder::_modf(builtin_available_predicate avail, const glsl_type *type)
6660*61046927SAndroid Build Coastguard Worker {
6661*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6662*61046927SAndroid Build Coastguard Worker    ir_variable *i = out_var(type, "i");
6663*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 2, x, i);
6664*61046927SAndroid Build Coastguard Worker 
6665*61046927SAndroid Build Coastguard Worker    ir_variable *t = body.make_temp(type, "t");
6666*61046927SAndroid Build Coastguard Worker    body.emit(assign(t, expr(ir_unop_trunc, x)));
6667*61046927SAndroid Build Coastguard Worker    body.emit(assign(i, t));
6668*61046927SAndroid Build Coastguard Worker    body.emit(ret(sub(x, t)));
6669*61046927SAndroid Build Coastguard Worker 
6670*61046927SAndroid Build Coastguard Worker    return sig;
6671*61046927SAndroid Build Coastguard Worker }
6672*61046927SAndroid Build Coastguard Worker 
6673*61046927SAndroid Build Coastguard Worker ir_function_signature *
_min(builtin_available_predicate avail,const glsl_type * x_type,const glsl_type * y_type)6674*61046927SAndroid Build Coastguard Worker builtin_builder::_min(builtin_available_predicate avail,
6675*61046927SAndroid Build Coastguard Worker                       const glsl_type *x_type, const glsl_type *y_type)
6676*61046927SAndroid Build Coastguard Worker {
6677*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_min, x_type, x_type, y_type);
6678*61046927SAndroid Build Coastguard Worker }
6679*61046927SAndroid Build Coastguard Worker 
6680*61046927SAndroid Build Coastguard Worker ir_function_signature *
_max(builtin_available_predicate avail,const glsl_type * x_type,const glsl_type * y_type)6681*61046927SAndroid Build Coastguard Worker builtin_builder::_max(builtin_available_predicate avail,
6682*61046927SAndroid Build Coastguard Worker                       const glsl_type *x_type, const glsl_type *y_type)
6683*61046927SAndroid Build Coastguard Worker {
6684*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_max, x_type, x_type, y_type);
6685*61046927SAndroid Build Coastguard Worker }
6686*61046927SAndroid Build Coastguard Worker 
6687*61046927SAndroid Build Coastguard Worker ir_function_signature *
_clamp(builtin_available_predicate avail,const glsl_type * val_type,const glsl_type * bound_type)6688*61046927SAndroid Build Coastguard Worker builtin_builder::_clamp(builtin_available_predicate avail,
6689*61046927SAndroid Build Coastguard Worker                         const glsl_type *val_type, const glsl_type *bound_type)
6690*61046927SAndroid Build Coastguard Worker {
6691*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(val_type, "x");
6692*61046927SAndroid Build Coastguard Worker    ir_variable *minVal = in_var(bound_type, "minVal");
6693*61046927SAndroid Build Coastguard Worker    ir_variable *maxVal = in_var(bound_type, "maxVal");
6694*61046927SAndroid Build Coastguard Worker    MAKE_SIG(val_type, avail, 3, x, minVal, maxVal);
6695*61046927SAndroid Build Coastguard Worker 
6696*61046927SAndroid Build Coastguard Worker    body.emit(ret(clamp(x, minVal, maxVal)));
6697*61046927SAndroid Build Coastguard Worker 
6698*61046927SAndroid Build Coastguard Worker    return sig;
6699*61046927SAndroid Build Coastguard Worker }
6700*61046927SAndroid Build Coastguard Worker 
6701*61046927SAndroid Build Coastguard Worker ir_function_signature *
_mix_lrp(builtin_available_predicate avail,const glsl_type * val_type,const glsl_type * blend_type)6702*61046927SAndroid Build Coastguard Worker builtin_builder::_mix_lrp(builtin_available_predicate avail, const glsl_type *val_type, const glsl_type *blend_type)
6703*61046927SAndroid Build Coastguard Worker {
6704*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(val_type, "x");
6705*61046927SAndroid Build Coastguard Worker    ir_variable *y = in_var(val_type, "y");
6706*61046927SAndroid Build Coastguard Worker    ir_variable *a = in_var(blend_type, "a");
6707*61046927SAndroid Build Coastguard Worker    MAKE_SIG(val_type, avail, 3, x, y, a);
6708*61046927SAndroid Build Coastguard Worker 
6709*61046927SAndroid Build Coastguard Worker    body.emit(ret(lrp(x, y, a)));
6710*61046927SAndroid Build Coastguard Worker 
6711*61046927SAndroid Build Coastguard Worker    return sig;
6712*61046927SAndroid Build Coastguard Worker }
6713*61046927SAndroid Build Coastguard Worker 
6714*61046927SAndroid Build Coastguard Worker ir_function_signature *
_mix_sel(builtin_available_predicate avail,const glsl_type * val_type,const glsl_type * blend_type)6715*61046927SAndroid Build Coastguard Worker builtin_builder::_mix_sel(builtin_available_predicate avail,
6716*61046927SAndroid Build Coastguard Worker                           const glsl_type *val_type,
6717*61046927SAndroid Build Coastguard Worker                           const glsl_type *blend_type)
6718*61046927SAndroid Build Coastguard Worker {
6719*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(val_type, "x");
6720*61046927SAndroid Build Coastguard Worker    ir_variable *y = in_var(val_type, "y");
6721*61046927SAndroid Build Coastguard Worker    ir_variable *a = in_var(blend_type, "a");
6722*61046927SAndroid Build Coastguard Worker    MAKE_SIG(val_type, avail, 3, x, y, a);
6723*61046927SAndroid Build Coastguard Worker 
6724*61046927SAndroid Build Coastguard Worker    /* csel matches the ternary operator in that a selector of true choses the
6725*61046927SAndroid Build Coastguard Worker     * first argument. This differs from mix(x, y, false) which choses the
6726*61046927SAndroid Build Coastguard Worker     * second argument (to remain consistent with the interpolating version of
6727*61046927SAndroid Build Coastguard Worker     * mix() which takes a blend factor from 0.0 to 1.0 where 0.0 is only x.
6728*61046927SAndroid Build Coastguard Worker     *
6729*61046927SAndroid Build Coastguard Worker     * To handle the behavior mismatch, reverse the x and y arguments.
6730*61046927SAndroid Build Coastguard Worker     */
6731*61046927SAndroid Build Coastguard Worker    body.emit(ret(csel(a, y, x)));
6732*61046927SAndroid Build Coastguard Worker 
6733*61046927SAndroid Build Coastguard Worker    return sig;
6734*61046927SAndroid Build Coastguard Worker }
6735*61046927SAndroid Build Coastguard Worker 
6736*61046927SAndroid Build Coastguard Worker ir_function_signature *
_step(builtin_available_predicate avail,const glsl_type * edge_type,const glsl_type * x_type)6737*61046927SAndroid Build Coastguard Worker builtin_builder::_step(builtin_available_predicate avail, const glsl_type *edge_type, const glsl_type *x_type)
6738*61046927SAndroid Build Coastguard Worker {
6739*61046927SAndroid Build Coastguard Worker    ir_variable *edge = in_var(edge_type, "edge");
6740*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(x_type, "x");
6741*61046927SAndroid Build Coastguard Worker    MAKE_SIG(x_type, avail, 2, edge, x);
6742*61046927SAndroid Build Coastguard Worker 
6743*61046927SAndroid Build Coastguard Worker    ir_variable *t = body.make_temp(x_type, "t");
6744*61046927SAndroid Build Coastguard Worker    if (x_type->vector_elements == 1) {
6745*61046927SAndroid Build Coastguard Worker       /* Both are floats */
6746*61046927SAndroid Build Coastguard Worker       if (glsl_type_is_double(edge_type))
6747*61046927SAndroid Build Coastguard Worker          body.emit(assign(t, f2d(b2f(gequal(x, edge)))));
6748*61046927SAndroid Build Coastguard Worker       else if (glsl_type_is_float_16(edge_type))
6749*61046927SAndroid Build Coastguard Worker          body.emit(assign(t, f2f16(b2f(gequal(x, edge)))));
6750*61046927SAndroid Build Coastguard Worker       else
6751*61046927SAndroid Build Coastguard Worker          body.emit(assign(t, b2f(gequal(x, edge))));
6752*61046927SAndroid Build Coastguard Worker    } else if (edge_type->vector_elements == 1) {
6753*61046927SAndroid Build Coastguard Worker       /* x is a vector but edge is a float */
6754*61046927SAndroid Build Coastguard Worker       for (int i = 0; i < x_type->vector_elements; i++) {
6755*61046927SAndroid Build Coastguard Worker          if (glsl_type_is_double(edge_type))
6756*61046927SAndroid Build Coastguard Worker             body.emit(assign(t, f2d(b2f(gequal(swizzle(x, i, 1), edge))), 1 << i));
6757*61046927SAndroid Build Coastguard Worker          else if (glsl_type_is_float_16(edge_type))
6758*61046927SAndroid Build Coastguard Worker             body.emit(assign(t, f2f16(b2f(gequal(swizzle(x, i, 1), edge))), 1 << i));
6759*61046927SAndroid Build Coastguard Worker          else
6760*61046927SAndroid Build Coastguard Worker             body.emit(assign(t, b2f(gequal(swizzle(x, i, 1), edge)), 1 << i));
6761*61046927SAndroid Build Coastguard Worker       }
6762*61046927SAndroid Build Coastguard Worker    } else {
6763*61046927SAndroid Build Coastguard Worker       /* Both are vectors */
6764*61046927SAndroid Build Coastguard Worker       for (int i = 0; i < x_type->vector_elements; i++) {
6765*61046927SAndroid Build Coastguard Worker          if (glsl_type_is_double(edge_type))
6766*61046927SAndroid Build Coastguard Worker             body.emit(assign(t, f2d(b2f(gequal(swizzle(x, i, 1), swizzle(edge, i, 1)))),
6767*61046927SAndroid Build Coastguard Worker                              1 << i));
6768*61046927SAndroid Build Coastguard Worker          else if (glsl_type_is_float_16(edge_type))
6769*61046927SAndroid Build Coastguard Worker             body.emit(assign(t, f2f16(b2f(gequal(swizzle(x, i, 1), swizzle(edge, i, 1)))),
6770*61046927SAndroid Build Coastguard Worker                              1 << i));
6771*61046927SAndroid Build Coastguard Worker          else
6772*61046927SAndroid Build Coastguard Worker             body.emit(assign(t, b2f(gequal(swizzle(x, i, 1), swizzle(edge, i, 1))),
6773*61046927SAndroid Build Coastguard Worker                              1 << i));
6774*61046927SAndroid Build Coastguard Worker 
6775*61046927SAndroid Build Coastguard Worker       }
6776*61046927SAndroid Build Coastguard Worker    }
6777*61046927SAndroid Build Coastguard Worker    body.emit(ret(t));
6778*61046927SAndroid Build Coastguard Worker 
6779*61046927SAndroid Build Coastguard Worker    return sig;
6780*61046927SAndroid Build Coastguard Worker }
6781*61046927SAndroid Build Coastguard Worker 
6782*61046927SAndroid Build Coastguard Worker ir_function_signature *
_smoothstep(builtin_available_predicate avail,const glsl_type * edge_type,const glsl_type * x_type)6783*61046927SAndroid Build Coastguard Worker builtin_builder::_smoothstep(builtin_available_predicate avail, const glsl_type *edge_type, const glsl_type *x_type)
6784*61046927SAndroid Build Coastguard Worker {
6785*61046927SAndroid Build Coastguard Worker    ir_variable *edge0 = in_var(edge_type, "edge0");
6786*61046927SAndroid Build Coastguard Worker    ir_variable *edge1 = in_var(edge_type, "edge1");
6787*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(x_type, "x");
6788*61046927SAndroid Build Coastguard Worker    MAKE_SIG(x_type, avail, 3, edge0, edge1, x);
6789*61046927SAndroid Build Coastguard Worker 
6790*61046927SAndroid Build Coastguard Worker    /* From the GLSL 1.10 specification:
6791*61046927SAndroid Build Coastguard Worker     *
6792*61046927SAndroid Build Coastguard Worker     *    genType t;
6793*61046927SAndroid Build Coastguard Worker     *    t = clamp((x - edge0) / (edge1 - edge0), 0, 1);
6794*61046927SAndroid Build Coastguard Worker     *    return t * t * (3 - 2 * t);
6795*61046927SAndroid Build Coastguard Worker     */
6796*61046927SAndroid Build Coastguard Worker 
6797*61046927SAndroid Build Coastguard Worker    ir_variable *t = body.make_temp(x_type, "t");
6798*61046927SAndroid Build Coastguard Worker    body.emit(assign(t, clamp(div(sub(x, edge0), sub(edge1, edge0)),
6799*61046927SAndroid Build Coastguard Worker                              IMM_FP(x_type, 0.0), IMM_FP(x_type, 1.0))));
6800*61046927SAndroid Build Coastguard Worker 
6801*61046927SAndroid Build Coastguard Worker    body.emit(ret(mul(t, mul(t, sub(IMM_FP(x_type, 3.0), mul(IMM_FP(x_type, 2.0), t))))));
6802*61046927SAndroid Build Coastguard Worker 
6803*61046927SAndroid Build Coastguard Worker    return sig;
6804*61046927SAndroid Build Coastguard Worker }
6805*61046927SAndroid Build Coastguard Worker 
6806*61046927SAndroid Build Coastguard Worker ir_function_signature *
_isnan(builtin_available_predicate avail,const glsl_type * type)6807*61046927SAndroid Build Coastguard Worker builtin_builder::_isnan(builtin_available_predicate avail, const glsl_type *type)
6808*61046927SAndroid Build Coastguard Worker {
6809*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6810*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_bvec_type(type->vector_elements), avail, 1, x);
6811*61046927SAndroid Build Coastguard Worker 
6812*61046927SAndroid Build Coastguard Worker    body.emit(ret(nequal(x, x)));
6813*61046927SAndroid Build Coastguard Worker 
6814*61046927SAndroid Build Coastguard Worker    return sig;
6815*61046927SAndroid Build Coastguard Worker }
6816*61046927SAndroid Build Coastguard Worker 
6817*61046927SAndroid Build Coastguard Worker ir_function_signature *
_isinf(builtin_available_predicate avail,const glsl_type * type)6818*61046927SAndroid Build Coastguard Worker builtin_builder::_isinf(builtin_available_predicate avail, const glsl_type *type)
6819*61046927SAndroid Build Coastguard Worker {
6820*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6821*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_bvec_type(type->vector_elements), avail, 1, x);
6822*61046927SAndroid Build Coastguard Worker 
6823*61046927SAndroid Build Coastguard Worker    ir_constant_data infinities;
6824*61046927SAndroid Build Coastguard Worker    for (int i = 0; i < type->vector_elements; i++) {
6825*61046927SAndroid Build Coastguard Worker       switch (type->base_type) {
6826*61046927SAndroid Build Coastguard Worker       case GLSL_TYPE_FLOAT16:
6827*61046927SAndroid Build Coastguard Worker          infinities.f16[i] = _mesa_float_to_half(INFINITY);
6828*61046927SAndroid Build Coastguard Worker          break;
6829*61046927SAndroid Build Coastguard Worker       case GLSL_TYPE_FLOAT:
6830*61046927SAndroid Build Coastguard Worker          infinities.f[i] = INFINITY;
6831*61046927SAndroid Build Coastguard Worker          break;
6832*61046927SAndroid Build Coastguard Worker       case GLSL_TYPE_DOUBLE:
6833*61046927SAndroid Build Coastguard Worker          infinities.d[i] = INFINITY;
6834*61046927SAndroid Build Coastguard Worker          break;
6835*61046927SAndroid Build Coastguard Worker       default:
6836*61046927SAndroid Build Coastguard Worker          unreachable("unknown type");
6837*61046927SAndroid Build Coastguard Worker       }
6838*61046927SAndroid Build Coastguard Worker    }
6839*61046927SAndroid Build Coastguard Worker 
6840*61046927SAndroid Build Coastguard Worker    body.emit(ret(equal(abs(x), imm(type, infinities))));
6841*61046927SAndroid Build Coastguard Worker 
6842*61046927SAndroid Build Coastguard Worker    return sig;
6843*61046927SAndroid Build Coastguard Worker }
6844*61046927SAndroid Build Coastguard Worker 
6845*61046927SAndroid Build Coastguard Worker ir_function_signature *
_atan2(builtin_available_predicate avail,const glsl_type * x_type)6846*61046927SAndroid Build Coastguard Worker builtin_builder::_atan2(builtin_available_predicate avail,
6847*61046927SAndroid Build Coastguard Worker                         const glsl_type *x_type)
6848*61046927SAndroid Build Coastguard Worker {
6849*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_atan2, x_type, x_type, x_type);
6850*61046927SAndroid Build Coastguard Worker }
6851*61046927SAndroid Build Coastguard Worker 
6852*61046927SAndroid Build Coastguard Worker ir_function_signature *
_floatBitsToInt(const glsl_type * type)6853*61046927SAndroid Build Coastguard Worker builtin_builder::_floatBitsToInt(const glsl_type *type)
6854*61046927SAndroid Build Coastguard Worker {
6855*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6856*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_ivec_type(type->vector_elements), shader_bit_encoding, 1, x);
6857*61046927SAndroid Build Coastguard Worker    body.emit(ret(bitcast_f2i(as_highp(body, x))));
6858*61046927SAndroid Build Coastguard Worker    return sig;
6859*61046927SAndroid Build Coastguard Worker }
6860*61046927SAndroid Build Coastguard Worker 
6861*61046927SAndroid Build Coastguard Worker ir_function_signature *
_floatBitsToUint(const glsl_type * type)6862*61046927SAndroid Build Coastguard Worker builtin_builder::_floatBitsToUint(const glsl_type *type)
6863*61046927SAndroid Build Coastguard Worker {
6864*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6865*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_uvec_type(type->vector_elements), shader_bit_encoding, 1, x);
6866*61046927SAndroid Build Coastguard Worker    body.emit(ret(bitcast_f2u(as_highp(body, x))));
6867*61046927SAndroid Build Coastguard Worker    return sig;
6868*61046927SAndroid Build Coastguard Worker }
6869*61046927SAndroid Build Coastguard Worker 
6870*61046927SAndroid Build Coastguard Worker ir_function_signature *
_intBitsToFloat(const glsl_type * type)6871*61046927SAndroid Build Coastguard Worker builtin_builder::_intBitsToFloat(const glsl_type *type)
6872*61046927SAndroid Build Coastguard Worker {
6873*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6874*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_vec_type(type->vector_elements), shader_bit_encoding, 1, x);
6875*61046927SAndroid Build Coastguard Worker    body.emit(ret(bitcast_i2f(as_highp(body, x))));
6876*61046927SAndroid Build Coastguard Worker    return sig;
6877*61046927SAndroid Build Coastguard Worker }
6878*61046927SAndroid Build Coastguard Worker 
6879*61046927SAndroid Build Coastguard Worker ir_function_signature *
_uintBitsToFloat(const glsl_type * type)6880*61046927SAndroid Build Coastguard Worker builtin_builder::_uintBitsToFloat(const glsl_type *type)
6881*61046927SAndroid Build Coastguard Worker {
6882*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6883*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_vec_type(type->vector_elements), shader_bit_encoding, 1, x);
6884*61046927SAndroid Build Coastguard Worker    body.emit(ret(bitcast_u2f(as_highp(body, x))));
6885*61046927SAndroid Build Coastguard Worker    return sig;
6886*61046927SAndroid Build Coastguard Worker }
6887*61046927SAndroid Build Coastguard Worker 
6888*61046927SAndroid Build Coastguard Worker ir_function_signature *
_doubleBitsToInt64(builtin_available_predicate avail,const glsl_type * type)6889*61046927SAndroid Build Coastguard Worker builtin_builder::_doubleBitsToInt64(builtin_available_predicate avail, const glsl_type *type)
6890*61046927SAndroid Build Coastguard Worker {
6891*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6892*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_i64vec_type(type->vector_elements), avail, 1, x);
6893*61046927SAndroid Build Coastguard Worker    body.emit(ret(bitcast_d2i64(x)));
6894*61046927SAndroid Build Coastguard Worker    return sig;
6895*61046927SAndroid Build Coastguard Worker }
6896*61046927SAndroid Build Coastguard Worker 
6897*61046927SAndroid Build Coastguard Worker ir_function_signature *
_doubleBitsToUint64(builtin_available_predicate avail,const glsl_type * type)6898*61046927SAndroid Build Coastguard Worker builtin_builder::_doubleBitsToUint64(builtin_available_predicate avail, const glsl_type *type)
6899*61046927SAndroid Build Coastguard Worker {
6900*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6901*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_u64vec_type(type->vector_elements), avail, 1, x);
6902*61046927SAndroid Build Coastguard Worker    body.emit(ret(bitcast_d2u64(x)));
6903*61046927SAndroid Build Coastguard Worker    return sig;
6904*61046927SAndroid Build Coastguard Worker }
6905*61046927SAndroid Build Coastguard Worker 
6906*61046927SAndroid Build Coastguard Worker ir_function_signature *
_int64BitsToDouble(builtin_available_predicate avail,const glsl_type * type)6907*61046927SAndroid Build Coastguard Worker builtin_builder::_int64BitsToDouble(builtin_available_predicate avail, const glsl_type *type)
6908*61046927SAndroid Build Coastguard Worker {
6909*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6910*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_dvec_type(type->vector_elements), avail, 1, x);
6911*61046927SAndroid Build Coastguard Worker    body.emit(ret(bitcast_i642d(x)));
6912*61046927SAndroid Build Coastguard Worker    return sig;
6913*61046927SAndroid Build Coastguard Worker }
6914*61046927SAndroid Build Coastguard Worker 
6915*61046927SAndroid Build Coastguard Worker ir_function_signature *
_uint64BitsToDouble(builtin_available_predicate avail,const glsl_type * type)6916*61046927SAndroid Build Coastguard Worker builtin_builder::_uint64BitsToDouble(builtin_available_predicate avail, const glsl_type *type)
6917*61046927SAndroid Build Coastguard Worker {
6918*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
6919*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_dvec_type(type->vector_elements), avail, 1, x);
6920*61046927SAndroid Build Coastguard Worker    body.emit(ret(bitcast_u642d(x)));
6921*61046927SAndroid Build Coastguard Worker    return sig;
6922*61046927SAndroid Build Coastguard Worker }
6923*61046927SAndroid Build Coastguard Worker 
6924*61046927SAndroid Build Coastguard Worker ir_function_signature *
_packUnorm2x16(builtin_available_predicate avail)6925*61046927SAndroid Build Coastguard Worker builtin_builder::_packUnorm2x16(builtin_available_predicate avail)
6926*61046927SAndroid Build Coastguard Worker {
6927*61046927SAndroid Build Coastguard Worker    ir_variable *v = in_highp_var(&glsl_type_builtin_vec2, "v");
6928*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uint, avail, 1, v);
6929*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
6930*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_pack_unorm_2x16, v)));
6931*61046927SAndroid Build Coastguard Worker    return sig;
6932*61046927SAndroid Build Coastguard Worker }
6933*61046927SAndroid Build Coastguard Worker 
6934*61046927SAndroid Build Coastguard Worker ir_function_signature *
_packSnorm2x16(builtin_available_predicate avail)6935*61046927SAndroid Build Coastguard Worker builtin_builder::_packSnorm2x16(builtin_available_predicate avail)
6936*61046927SAndroid Build Coastguard Worker {
6937*61046927SAndroid Build Coastguard Worker    ir_variable *v = in_var(&glsl_type_builtin_vec2, "v");
6938*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uint, avail, 1, v);
6939*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
6940*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_pack_snorm_2x16, v)));
6941*61046927SAndroid Build Coastguard Worker    return sig;
6942*61046927SAndroid Build Coastguard Worker }
6943*61046927SAndroid Build Coastguard Worker 
6944*61046927SAndroid Build Coastguard Worker ir_function_signature *
_packUnorm4x8(builtin_available_predicate avail)6945*61046927SAndroid Build Coastguard Worker builtin_builder::_packUnorm4x8(builtin_available_predicate avail)
6946*61046927SAndroid Build Coastguard Worker {
6947*61046927SAndroid Build Coastguard Worker    ir_variable *v = in_mediump_var(&glsl_type_builtin_vec4, "v");
6948*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uint, avail, 1, v);
6949*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
6950*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_pack_unorm_4x8, v)));
6951*61046927SAndroid Build Coastguard Worker    return sig;
6952*61046927SAndroid Build Coastguard Worker }
6953*61046927SAndroid Build Coastguard Worker 
6954*61046927SAndroid Build Coastguard Worker ir_function_signature *
_packSnorm4x8(builtin_available_predicate avail)6955*61046927SAndroid Build Coastguard Worker builtin_builder::_packSnorm4x8(builtin_available_predicate avail)
6956*61046927SAndroid Build Coastguard Worker {
6957*61046927SAndroid Build Coastguard Worker    ir_variable *v = in_mediump_var(&glsl_type_builtin_vec4, "v");
6958*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uint, avail, 1, v);
6959*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
6960*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_pack_snorm_4x8, v)));
6961*61046927SAndroid Build Coastguard Worker    return sig;
6962*61046927SAndroid Build Coastguard Worker }
6963*61046927SAndroid Build Coastguard Worker 
6964*61046927SAndroid Build Coastguard Worker ir_function_signature *
_unpackUnorm2x16(builtin_available_predicate avail)6965*61046927SAndroid Build Coastguard Worker builtin_builder::_unpackUnorm2x16(builtin_available_predicate avail)
6966*61046927SAndroid Build Coastguard Worker {
6967*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_highp_var(&glsl_type_builtin_uint, "p");
6968*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_vec2, avail, 1, p);
6969*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
6970*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_unpack_unorm_2x16, p)));
6971*61046927SAndroid Build Coastguard Worker    return sig;
6972*61046927SAndroid Build Coastguard Worker }
6973*61046927SAndroid Build Coastguard Worker 
6974*61046927SAndroid Build Coastguard Worker ir_function_signature *
_unpackSnorm2x16(builtin_available_predicate avail)6975*61046927SAndroid Build Coastguard Worker builtin_builder::_unpackSnorm2x16(builtin_available_predicate avail)
6976*61046927SAndroid Build Coastguard Worker {
6977*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_highp_var(&glsl_type_builtin_uint, "p");
6978*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_vec2, avail, 1, p);
6979*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
6980*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_unpack_snorm_2x16, p)));
6981*61046927SAndroid Build Coastguard Worker    return sig;
6982*61046927SAndroid Build Coastguard Worker }
6983*61046927SAndroid Build Coastguard Worker 
6984*61046927SAndroid Build Coastguard Worker 
6985*61046927SAndroid Build Coastguard Worker ir_function_signature *
_unpackUnorm4x8(builtin_available_predicate avail)6986*61046927SAndroid Build Coastguard Worker builtin_builder::_unpackUnorm4x8(builtin_available_predicate avail)
6987*61046927SAndroid Build Coastguard Worker {
6988*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_highp_var(&glsl_type_builtin_uint, "p");
6989*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_vec4, avail, 1, p);
6990*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_MEDIUM;
6991*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_unpack_unorm_4x8, p)));
6992*61046927SAndroid Build Coastguard Worker    return sig;
6993*61046927SAndroid Build Coastguard Worker }
6994*61046927SAndroid Build Coastguard Worker 
6995*61046927SAndroid Build Coastguard Worker ir_function_signature *
_unpackSnorm4x8(builtin_available_predicate avail)6996*61046927SAndroid Build Coastguard Worker builtin_builder::_unpackSnorm4x8(builtin_available_predicate avail)
6997*61046927SAndroid Build Coastguard Worker {
6998*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_highp_var(&glsl_type_builtin_uint, "p");
6999*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_vec4, avail, 1, p);
7000*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_MEDIUM;
7001*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_unpack_snorm_4x8, p)));
7002*61046927SAndroid Build Coastguard Worker    return sig;
7003*61046927SAndroid Build Coastguard Worker }
7004*61046927SAndroid Build Coastguard Worker 
7005*61046927SAndroid Build Coastguard Worker ir_function_signature *
_packHalf2x16(builtin_available_predicate avail)7006*61046927SAndroid Build Coastguard Worker builtin_builder::_packHalf2x16(builtin_available_predicate avail)
7007*61046927SAndroid Build Coastguard Worker {
7008*61046927SAndroid Build Coastguard Worker    ir_variable *v = in_mediump_var(&glsl_type_builtin_vec2, "v");
7009*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uint, avail, 1, v);
7010*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
7011*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_pack_half_2x16, v)));
7012*61046927SAndroid Build Coastguard Worker    return sig;
7013*61046927SAndroid Build Coastguard Worker }
7014*61046927SAndroid Build Coastguard Worker 
7015*61046927SAndroid Build Coastguard Worker ir_function_signature *
_unpackHalf2x16(builtin_available_predicate avail)7016*61046927SAndroid Build Coastguard Worker builtin_builder::_unpackHalf2x16(builtin_available_predicate avail)
7017*61046927SAndroid Build Coastguard Worker {
7018*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_highp_var(&glsl_type_builtin_uint, "p");
7019*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_vec2, avail, 1, p);
7020*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_MEDIUM;
7021*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_unpack_half_2x16, p)));
7022*61046927SAndroid Build Coastguard Worker    return sig;
7023*61046927SAndroid Build Coastguard Worker }
7024*61046927SAndroid Build Coastguard Worker 
7025*61046927SAndroid Build Coastguard Worker ir_function_signature *
_packFloat2x16(builtin_available_predicate avail)7026*61046927SAndroid Build Coastguard Worker builtin_builder::_packFloat2x16(builtin_available_predicate avail)
7027*61046927SAndroid Build Coastguard Worker {
7028*61046927SAndroid Build Coastguard Worker    ir_variable *v = in_var(&glsl_type_builtin_f16vec2, "v");
7029*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uint, avail, 1, v);
7030*61046927SAndroid Build Coastguard Worker 
7031*61046927SAndroid Build Coastguard Worker    ir_rvalue *value = new(mem_ctx)ir_dereference_variable(v);
7032*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_pack_half_2x16, new(mem_ctx) ir_expression(ir_unop_f162f, &glsl_type_builtin_vec2, value, NULL))));
7033*61046927SAndroid Build Coastguard Worker    return sig;
7034*61046927SAndroid Build Coastguard Worker }
7035*61046927SAndroid Build Coastguard Worker 
7036*61046927SAndroid Build Coastguard Worker ir_function_signature *
_unpackFloat2x16(builtin_available_predicate avail)7037*61046927SAndroid Build Coastguard Worker builtin_builder::_unpackFloat2x16(builtin_available_predicate avail)
7038*61046927SAndroid Build Coastguard Worker {
7039*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_var(&glsl_type_builtin_uint, "p");
7040*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_f16vec2, avail, 1, p);
7041*61046927SAndroid Build Coastguard Worker    body.emit(ret(f2f16(expr(ir_unop_unpack_half_2x16, p))));
7042*61046927SAndroid Build Coastguard Worker    return sig;
7043*61046927SAndroid Build Coastguard Worker }
7044*61046927SAndroid Build Coastguard Worker 
7045*61046927SAndroid Build Coastguard Worker ir_function_signature *
_packDouble2x32(builtin_available_predicate avail)7046*61046927SAndroid Build Coastguard Worker builtin_builder::_packDouble2x32(builtin_available_predicate avail)
7047*61046927SAndroid Build Coastguard Worker {
7048*61046927SAndroid Build Coastguard Worker    ir_variable *v = in_var(&glsl_type_builtin_uvec2, "v");
7049*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_double, avail, 1, v);
7050*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_pack_double_2x32, v)));
7051*61046927SAndroid Build Coastguard Worker    return sig;
7052*61046927SAndroid Build Coastguard Worker }
7053*61046927SAndroid Build Coastguard Worker 
7054*61046927SAndroid Build Coastguard Worker ir_function_signature *
_unpackDouble2x32(builtin_available_predicate avail)7055*61046927SAndroid Build Coastguard Worker builtin_builder::_unpackDouble2x32(builtin_available_predicate avail)
7056*61046927SAndroid Build Coastguard Worker {
7057*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_var(&glsl_type_builtin_double, "p");
7058*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uvec2, avail, 1, p);
7059*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_unpack_double_2x32, p)));
7060*61046927SAndroid Build Coastguard Worker    return sig;
7061*61046927SAndroid Build Coastguard Worker }
7062*61046927SAndroid Build Coastguard Worker 
7063*61046927SAndroid Build Coastguard Worker ir_function_signature *
_packInt2x32(builtin_available_predicate avail)7064*61046927SAndroid Build Coastguard Worker builtin_builder::_packInt2x32(builtin_available_predicate avail)
7065*61046927SAndroid Build Coastguard Worker {
7066*61046927SAndroid Build Coastguard Worker    ir_variable *v = in_var(&glsl_type_builtin_ivec2, "v");
7067*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_int64_t, avail, 1, v);
7068*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_pack_int_2x32, v)));
7069*61046927SAndroid Build Coastguard Worker    return sig;
7070*61046927SAndroid Build Coastguard Worker }
7071*61046927SAndroid Build Coastguard Worker 
7072*61046927SAndroid Build Coastguard Worker ir_function_signature *
_unpackInt2x32(builtin_available_predicate avail)7073*61046927SAndroid Build Coastguard Worker builtin_builder::_unpackInt2x32(builtin_available_predicate avail)
7074*61046927SAndroid Build Coastguard Worker {
7075*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_var(&glsl_type_builtin_int64_t, "p");
7076*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_ivec2, avail, 1, p);
7077*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_unpack_int_2x32, p)));
7078*61046927SAndroid Build Coastguard Worker    return sig;
7079*61046927SAndroid Build Coastguard Worker }
7080*61046927SAndroid Build Coastguard Worker 
7081*61046927SAndroid Build Coastguard Worker ir_function_signature *
_packUint2x32(builtin_available_predicate avail)7082*61046927SAndroid Build Coastguard Worker builtin_builder::_packUint2x32(builtin_available_predicate avail)
7083*61046927SAndroid Build Coastguard Worker {
7084*61046927SAndroid Build Coastguard Worker    ir_variable *v = in_var(&glsl_type_builtin_uvec2, "v");
7085*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uint64_t, avail, 1, v);
7086*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_pack_uint_2x32, v)));
7087*61046927SAndroid Build Coastguard Worker    return sig;
7088*61046927SAndroid Build Coastguard Worker }
7089*61046927SAndroid Build Coastguard Worker 
7090*61046927SAndroid Build Coastguard Worker ir_function_signature *
_unpackUint2x32(builtin_available_predicate avail)7091*61046927SAndroid Build Coastguard Worker builtin_builder::_unpackUint2x32(builtin_available_predicate avail)
7092*61046927SAndroid Build Coastguard Worker {
7093*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_var(&glsl_type_builtin_uint64_t, "p");
7094*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uvec2, avail, 1, p);
7095*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_unpack_uint_2x32, p)));
7096*61046927SAndroid Build Coastguard Worker    return sig;
7097*61046927SAndroid Build Coastguard Worker }
7098*61046927SAndroid Build Coastguard Worker 
7099*61046927SAndroid Build Coastguard Worker ir_function_signature *
_length(builtin_available_predicate avail,const glsl_type * type)7100*61046927SAndroid Build Coastguard Worker builtin_builder::_length(builtin_available_predicate avail, const glsl_type *type)
7101*61046927SAndroid Build Coastguard Worker {
7102*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
7103*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_get_base_glsl_type(type), avail, 1, x);
7104*61046927SAndroid Build Coastguard Worker 
7105*61046927SAndroid Build Coastguard Worker    body.emit(ret(sqrt(dot(x, x))));
7106*61046927SAndroid Build Coastguard Worker 
7107*61046927SAndroid Build Coastguard Worker    return sig;
7108*61046927SAndroid Build Coastguard Worker }
7109*61046927SAndroid Build Coastguard Worker 
7110*61046927SAndroid Build Coastguard Worker ir_function_signature *
_distance(builtin_available_predicate avail,const glsl_type * type)7111*61046927SAndroid Build Coastguard Worker builtin_builder::_distance(builtin_available_predicate avail, const glsl_type *type)
7112*61046927SAndroid Build Coastguard Worker {
7113*61046927SAndroid Build Coastguard Worker    ir_variable *p0 = in_var(type, "p0");
7114*61046927SAndroid Build Coastguard Worker    ir_variable *p1 = in_var(type, "p1");
7115*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_get_base_glsl_type(type), avail, 2, p0, p1);
7116*61046927SAndroid Build Coastguard Worker 
7117*61046927SAndroid Build Coastguard Worker    if (type->vector_elements == 1) {
7118*61046927SAndroid Build Coastguard Worker       body.emit(ret(abs(sub(p0, p1))));
7119*61046927SAndroid Build Coastguard Worker    } else {
7120*61046927SAndroid Build Coastguard Worker       ir_variable *p = body.make_temp(type, "p");
7121*61046927SAndroid Build Coastguard Worker       body.emit(assign(p, sub(p0, p1)));
7122*61046927SAndroid Build Coastguard Worker       body.emit(ret(sqrt(dot(p, p))));
7123*61046927SAndroid Build Coastguard Worker    }
7124*61046927SAndroid Build Coastguard Worker 
7125*61046927SAndroid Build Coastguard Worker    return sig;
7126*61046927SAndroid Build Coastguard Worker }
7127*61046927SAndroid Build Coastguard Worker 
7128*61046927SAndroid Build Coastguard Worker ir_function_signature *
_dot(builtin_available_predicate avail,const glsl_type * type)7129*61046927SAndroid Build Coastguard Worker builtin_builder::_dot(builtin_available_predicate avail, const glsl_type *type)
7130*61046927SAndroid Build Coastguard Worker {
7131*61046927SAndroid Build Coastguard Worker    if (type->vector_elements == 1)
7132*61046927SAndroid Build Coastguard Worker       return binop(avail, ir_binop_mul, type, type, type);
7133*61046927SAndroid Build Coastguard Worker 
7134*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_dot,
7135*61046927SAndroid Build Coastguard Worker                 glsl_get_base_glsl_type(type), type, type);
7136*61046927SAndroid Build Coastguard Worker }
7137*61046927SAndroid Build Coastguard Worker 
7138*61046927SAndroid Build Coastguard Worker ir_function_signature *
_cross(builtin_available_predicate avail,const glsl_type * type)7139*61046927SAndroid Build Coastguard Worker builtin_builder::_cross(builtin_available_predicate avail, const glsl_type *type)
7140*61046927SAndroid Build Coastguard Worker {
7141*61046927SAndroid Build Coastguard Worker    ir_variable *a = in_var(type, "a");
7142*61046927SAndroid Build Coastguard Worker    ir_variable *b = in_var(type, "b");
7143*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 2, a, b);
7144*61046927SAndroid Build Coastguard Worker 
7145*61046927SAndroid Build Coastguard Worker    int yzx = MAKE_SWIZZLE4(SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_X, 0);
7146*61046927SAndroid Build Coastguard Worker    int zxy = MAKE_SWIZZLE4(SWIZZLE_Z, SWIZZLE_X, SWIZZLE_Y, 0);
7147*61046927SAndroid Build Coastguard Worker 
7148*61046927SAndroid Build Coastguard Worker    body.emit(ret(sub(mul(swizzle(a, yzx, 3), swizzle(b, zxy, 3)),
7149*61046927SAndroid Build Coastguard Worker                      mul(swizzle(a, zxy, 3), swizzle(b, yzx, 3)))));
7150*61046927SAndroid Build Coastguard Worker 
7151*61046927SAndroid Build Coastguard Worker    return sig;
7152*61046927SAndroid Build Coastguard Worker }
7153*61046927SAndroid Build Coastguard Worker 
7154*61046927SAndroid Build Coastguard Worker ir_function_signature *
_normalize(builtin_available_predicate avail,const glsl_type * type)7155*61046927SAndroid Build Coastguard Worker builtin_builder::_normalize(builtin_available_predicate avail, const glsl_type *type)
7156*61046927SAndroid Build Coastguard Worker {
7157*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
7158*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, x);
7159*61046927SAndroid Build Coastguard Worker 
7160*61046927SAndroid Build Coastguard Worker    if (type->vector_elements == 1) {
7161*61046927SAndroid Build Coastguard Worker       body.emit(ret(sign(x)));
7162*61046927SAndroid Build Coastguard Worker    } else {
7163*61046927SAndroid Build Coastguard Worker       body.emit(ret(mul(x, rsq(dot(x, x)))));
7164*61046927SAndroid Build Coastguard Worker    }
7165*61046927SAndroid Build Coastguard Worker 
7166*61046927SAndroid Build Coastguard Worker    return sig;
7167*61046927SAndroid Build Coastguard Worker }
7168*61046927SAndroid Build Coastguard Worker 
7169*61046927SAndroid Build Coastguard Worker ir_function_signature *
_ftransform()7170*61046927SAndroid Build Coastguard Worker builtin_builder::_ftransform()
7171*61046927SAndroid Build Coastguard Worker {
7172*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_vec4, compatibility_vs_only, 0);
7173*61046927SAndroid Build Coastguard Worker 
7174*61046927SAndroid Build Coastguard Worker    /* ftransform() refers to global variables, and is always emitted
7175*61046927SAndroid Build Coastguard Worker     * directly by ast_function.cpp.  Just emit a prototype here so we
7176*61046927SAndroid Build Coastguard Worker     * can recognize calls to it.
7177*61046927SAndroid Build Coastguard Worker     */
7178*61046927SAndroid Build Coastguard Worker    return sig;
7179*61046927SAndroid Build Coastguard Worker }
7180*61046927SAndroid Build Coastguard Worker 
7181*61046927SAndroid Build Coastguard Worker ir_function_signature *
_faceforward(builtin_available_predicate avail,const glsl_type * type)7182*61046927SAndroid Build Coastguard Worker builtin_builder::_faceforward(builtin_available_predicate avail, const glsl_type *type)
7183*61046927SAndroid Build Coastguard Worker {
7184*61046927SAndroid Build Coastguard Worker    ir_variable *N = in_var(type, "N");
7185*61046927SAndroid Build Coastguard Worker    ir_variable *I = in_var(type, "I");
7186*61046927SAndroid Build Coastguard Worker    ir_variable *Nref = in_var(type, "Nref");
7187*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 3, N, I, Nref);
7188*61046927SAndroid Build Coastguard Worker 
7189*61046927SAndroid Build Coastguard Worker    body.emit(if_tree(less(dot(Nref, I), IMM_FP(type, 0.0)),
7190*61046927SAndroid Build Coastguard Worker                      ret(N), ret(neg(N))));
7191*61046927SAndroid Build Coastguard Worker 
7192*61046927SAndroid Build Coastguard Worker    return sig;
7193*61046927SAndroid Build Coastguard Worker }
7194*61046927SAndroid Build Coastguard Worker 
7195*61046927SAndroid Build Coastguard Worker ir_function_signature *
_reflect(builtin_available_predicate avail,const glsl_type * type)7196*61046927SAndroid Build Coastguard Worker builtin_builder::_reflect(builtin_available_predicate avail, const glsl_type *type)
7197*61046927SAndroid Build Coastguard Worker {
7198*61046927SAndroid Build Coastguard Worker    ir_variable *I = in_var(type, "I");
7199*61046927SAndroid Build Coastguard Worker    ir_variable *N = in_var(type, "N");
7200*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 2, I, N);
7201*61046927SAndroid Build Coastguard Worker 
7202*61046927SAndroid Build Coastguard Worker    /* I - 2 * dot(N, I) * N */
7203*61046927SAndroid Build Coastguard Worker    body.emit(ret(sub(I, mul(IMM_FP(type, 2.0), mul(dot(N, I), N)))));
7204*61046927SAndroid Build Coastguard Worker 
7205*61046927SAndroid Build Coastguard Worker    return sig;
7206*61046927SAndroid Build Coastguard Worker }
7207*61046927SAndroid Build Coastguard Worker 
7208*61046927SAndroid Build Coastguard Worker ir_function_signature *
_refract(builtin_available_predicate avail,const glsl_type * type)7209*61046927SAndroid Build Coastguard Worker builtin_builder::_refract(builtin_available_predicate avail, const glsl_type *type)
7210*61046927SAndroid Build Coastguard Worker {
7211*61046927SAndroid Build Coastguard Worker    ir_variable *I = in_var(type, "I");
7212*61046927SAndroid Build Coastguard Worker    ir_variable *N = in_var(type, "N");
7213*61046927SAndroid Build Coastguard Worker    ir_variable *eta = in_var(glsl_get_base_glsl_type(type), "eta");
7214*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 3, I, N, eta);
7215*61046927SAndroid Build Coastguard Worker 
7216*61046927SAndroid Build Coastguard Worker    ir_variable *n_dot_i = body.make_temp(glsl_get_base_glsl_type(type), "n_dot_i");
7217*61046927SAndroid Build Coastguard Worker    body.emit(assign(n_dot_i, dot(N, I)));
7218*61046927SAndroid Build Coastguard Worker 
7219*61046927SAndroid Build Coastguard Worker    /* From the GLSL 1.10 specification:
7220*61046927SAndroid Build Coastguard Worker     * k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I))
7221*61046927SAndroid Build Coastguard Worker     * if (k < 0.0)
7222*61046927SAndroid Build Coastguard Worker     *    return genType(0.0)
7223*61046927SAndroid Build Coastguard Worker     * else
7224*61046927SAndroid Build Coastguard Worker     *    return eta * I - (eta * dot(N, I) + sqrt(k)) * N
7225*61046927SAndroid Build Coastguard Worker     */
7226*61046927SAndroid Build Coastguard Worker    ir_variable *k = body.make_temp(glsl_get_base_glsl_type(type), "k");
7227*61046927SAndroid Build Coastguard Worker    body.emit(assign(k, sub(IMM_FP(type, 1.0),
7228*61046927SAndroid Build Coastguard Worker                            mul(eta, mul(eta, sub(IMM_FP(type, 1.0),
7229*61046927SAndroid Build Coastguard Worker                                                  mul(n_dot_i, n_dot_i)))))));
7230*61046927SAndroid Build Coastguard Worker    body.emit(if_tree(less(k, IMM_FP(type, 0.0)),
7231*61046927SAndroid Build Coastguard Worker                      ret(ir_constant::zero(mem_ctx, type)),
7232*61046927SAndroid Build Coastguard Worker                      ret(sub(mul(eta, I),
7233*61046927SAndroid Build Coastguard Worker                              mul(add(mul(eta, n_dot_i), sqrt(k)), N)))));
7234*61046927SAndroid Build Coastguard Worker 
7235*61046927SAndroid Build Coastguard Worker    return sig;
7236*61046927SAndroid Build Coastguard Worker }
7237*61046927SAndroid Build Coastguard Worker 
7238*61046927SAndroid Build Coastguard Worker ir_function_signature *
_matrixCompMult(builtin_available_predicate avail,const glsl_type * type)7239*61046927SAndroid Build Coastguard Worker builtin_builder::_matrixCompMult(builtin_available_predicate avail, const glsl_type *type)
7240*61046927SAndroid Build Coastguard Worker {
7241*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
7242*61046927SAndroid Build Coastguard Worker    ir_variable *y = in_var(type, "y");
7243*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 2, x, y);
7244*61046927SAndroid Build Coastguard Worker 
7245*61046927SAndroid Build Coastguard Worker    ir_variable *z = body.make_temp(type, "z");
7246*61046927SAndroid Build Coastguard Worker    for (int i = 0; i < type->matrix_columns; i++) {
7247*61046927SAndroid Build Coastguard Worker       body.emit(assign(array_ref(z, i), mul(array_ref(x, i), array_ref(y, i))));
7248*61046927SAndroid Build Coastguard Worker    }
7249*61046927SAndroid Build Coastguard Worker    body.emit(ret(z));
7250*61046927SAndroid Build Coastguard Worker 
7251*61046927SAndroid Build Coastguard Worker    return sig;
7252*61046927SAndroid Build Coastguard Worker }
7253*61046927SAndroid Build Coastguard Worker 
7254*61046927SAndroid Build Coastguard Worker ir_function_signature *
_outerProduct(builtin_available_predicate avail,const glsl_type * type)7255*61046927SAndroid Build Coastguard Worker builtin_builder::_outerProduct(builtin_available_predicate avail, const glsl_type *type)
7256*61046927SAndroid Build Coastguard Worker {
7257*61046927SAndroid Build Coastguard Worker    ir_variable *c;
7258*61046927SAndroid Build Coastguard Worker    ir_variable *r;
7259*61046927SAndroid Build Coastguard Worker 
7260*61046927SAndroid Build Coastguard Worker    if (glsl_type_is_double(type)) {
7261*61046927SAndroid Build Coastguard Worker       r = in_var(glsl_dvec_type(type->matrix_columns), "r");
7262*61046927SAndroid Build Coastguard Worker       c = in_var(glsl_dvec_type(type->vector_elements), "c");
7263*61046927SAndroid Build Coastguard Worker    } else if (glsl_type_is_float_16(type)) {
7264*61046927SAndroid Build Coastguard Worker       r = in_var(glsl_f16vec_type(type->matrix_columns), "r");
7265*61046927SAndroid Build Coastguard Worker       c = in_var(glsl_f16vec_type(type->vector_elements), "c");
7266*61046927SAndroid Build Coastguard Worker    } else {
7267*61046927SAndroid Build Coastguard Worker       r = in_var(glsl_vec_type(type->matrix_columns), "r");
7268*61046927SAndroid Build Coastguard Worker       c = in_var(glsl_vec_type(type->vector_elements), "c");
7269*61046927SAndroid Build Coastguard Worker    }
7270*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 2, c, r);
7271*61046927SAndroid Build Coastguard Worker 
7272*61046927SAndroid Build Coastguard Worker    ir_variable *m = body.make_temp(type, "m");
7273*61046927SAndroid Build Coastguard Worker    for (int i = 0; i < type->matrix_columns; i++) {
7274*61046927SAndroid Build Coastguard Worker       body.emit(assign(array_ref(m, i), mul(c, swizzle(r, i, 1))));
7275*61046927SAndroid Build Coastguard Worker    }
7276*61046927SAndroid Build Coastguard Worker    body.emit(ret(m));
7277*61046927SAndroid Build Coastguard Worker 
7278*61046927SAndroid Build Coastguard Worker    return sig;
7279*61046927SAndroid Build Coastguard Worker }
7280*61046927SAndroid Build Coastguard Worker 
7281*61046927SAndroid Build Coastguard Worker ir_function_signature *
_transpose(builtin_available_predicate avail,const glsl_type * orig_type)7282*61046927SAndroid Build Coastguard Worker builtin_builder::_transpose(builtin_available_predicate avail, const glsl_type *orig_type)
7283*61046927SAndroid Build Coastguard Worker {
7284*61046927SAndroid Build Coastguard Worker    const glsl_type *transpose_type =
7285*61046927SAndroid Build Coastguard Worker       glsl_simple_type(orig_type->base_type,
7286*61046927SAndroid Build Coastguard Worker                        orig_type->matrix_columns,
7287*61046927SAndroid Build Coastguard Worker                        orig_type->vector_elements);
7288*61046927SAndroid Build Coastguard Worker 
7289*61046927SAndroid Build Coastguard Worker    ir_variable *m = in_var(orig_type, "m");
7290*61046927SAndroid Build Coastguard Worker    MAKE_SIG(transpose_type, avail, 1, m);
7291*61046927SAndroid Build Coastguard Worker 
7292*61046927SAndroid Build Coastguard Worker    ir_variable *t = body.make_temp(transpose_type, "t");
7293*61046927SAndroid Build Coastguard Worker    for (int i = 0; i < orig_type->matrix_columns; i++) {
7294*61046927SAndroid Build Coastguard Worker       for (int j = 0; j < orig_type->vector_elements; j++) {
7295*61046927SAndroid Build Coastguard Worker          body.emit(assign(array_ref(t, j),
7296*61046927SAndroid Build Coastguard Worker                           matrix_elt(m, i, j),
7297*61046927SAndroid Build Coastguard Worker                           1 << i));
7298*61046927SAndroid Build Coastguard Worker       }
7299*61046927SAndroid Build Coastguard Worker    }
7300*61046927SAndroid Build Coastguard Worker    body.emit(ret(t));
7301*61046927SAndroid Build Coastguard Worker 
7302*61046927SAndroid Build Coastguard Worker    return sig;
7303*61046927SAndroid Build Coastguard Worker }
7304*61046927SAndroid Build Coastguard Worker 
7305*61046927SAndroid Build Coastguard Worker ir_function_signature *
_determinant_mat2(builtin_available_predicate avail,const glsl_type * type)7306*61046927SAndroid Build Coastguard Worker builtin_builder::_determinant_mat2(builtin_available_predicate avail, const glsl_type *type)
7307*61046927SAndroid Build Coastguard Worker {
7308*61046927SAndroid Build Coastguard Worker    ir_variable *m = in_var(type, "m");
7309*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_get_base_glsl_type(type), avail, 1, m);
7310*61046927SAndroid Build Coastguard Worker 
7311*61046927SAndroid Build Coastguard Worker    body.emit(ret(sub(mul(matrix_elt(m, 0, 0), matrix_elt(m, 1, 1)),
7312*61046927SAndroid Build Coastguard Worker                      mul(matrix_elt(m, 1, 0), matrix_elt(m, 0, 1)))));
7313*61046927SAndroid Build Coastguard Worker 
7314*61046927SAndroid Build Coastguard Worker    return sig;
7315*61046927SAndroid Build Coastguard Worker }
7316*61046927SAndroid Build Coastguard Worker 
7317*61046927SAndroid Build Coastguard Worker ir_function_signature *
_determinant_mat3(builtin_available_predicate avail,const glsl_type * type)7318*61046927SAndroid Build Coastguard Worker builtin_builder::_determinant_mat3(builtin_available_predicate avail, const glsl_type *type)
7319*61046927SAndroid Build Coastguard Worker {
7320*61046927SAndroid Build Coastguard Worker    ir_variable *m = in_var(type, "m");
7321*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_get_base_glsl_type(type), avail, 1, m);
7322*61046927SAndroid Build Coastguard Worker 
7323*61046927SAndroid Build Coastguard Worker    ir_expression *f1 =
7324*61046927SAndroid Build Coastguard Worker       sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 2)),
7325*61046927SAndroid Build Coastguard Worker           mul(matrix_elt(m, 1, 2), matrix_elt(m, 2, 1)));
7326*61046927SAndroid Build Coastguard Worker 
7327*61046927SAndroid Build Coastguard Worker    ir_expression *f2 =
7328*61046927SAndroid Build Coastguard Worker       sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 2)),
7329*61046927SAndroid Build Coastguard Worker           mul(matrix_elt(m, 1, 2), matrix_elt(m, 2, 0)));
7330*61046927SAndroid Build Coastguard Worker 
7331*61046927SAndroid Build Coastguard Worker    ir_expression *f3 =
7332*61046927SAndroid Build Coastguard Worker       sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 1)),
7333*61046927SAndroid Build Coastguard Worker           mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 0)));
7334*61046927SAndroid Build Coastguard Worker 
7335*61046927SAndroid Build Coastguard Worker    body.emit(ret(add(sub(mul(matrix_elt(m, 0, 0), f1),
7336*61046927SAndroid Build Coastguard Worker                          mul(matrix_elt(m, 0, 1), f2)),
7337*61046927SAndroid Build Coastguard Worker                      mul(matrix_elt(m, 0, 2), f3))));
7338*61046927SAndroid Build Coastguard Worker 
7339*61046927SAndroid Build Coastguard Worker    return sig;
7340*61046927SAndroid Build Coastguard Worker }
7341*61046927SAndroid Build Coastguard Worker 
7342*61046927SAndroid Build Coastguard Worker ir_function_signature *
_determinant_mat4(builtin_available_predicate avail,const glsl_type * type)7343*61046927SAndroid Build Coastguard Worker builtin_builder::_determinant_mat4(builtin_available_predicate avail, const glsl_type *type)
7344*61046927SAndroid Build Coastguard Worker {
7345*61046927SAndroid Build Coastguard Worker    ir_variable *m = in_var(type, "m");
7346*61046927SAndroid Build Coastguard Worker    const glsl_type *btype = glsl_get_base_glsl_type(type);
7347*61046927SAndroid Build Coastguard Worker    MAKE_SIG(btype, avail, 1, m);
7348*61046927SAndroid Build Coastguard Worker 
7349*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor00 = body.make_temp(btype, "SubFactor00");
7350*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor01 = body.make_temp(btype, "SubFactor01");
7351*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor02 = body.make_temp(btype, "SubFactor02");
7352*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor03 = body.make_temp(btype, "SubFactor03");
7353*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor04 = body.make_temp(btype, "SubFactor04");
7354*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor05 = body.make_temp(btype, "SubFactor05");
7355*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor06 = body.make_temp(btype, "SubFactor06");
7356*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor07 = body.make_temp(btype, "SubFactor07");
7357*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor08 = body.make_temp(btype, "SubFactor08");
7358*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor09 = body.make_temp(btype, "SubFactor09");
7359*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor10 = body.make_temp(btype, "SubFactor10");
7360*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor11 = body.make_temp(btype, "SubFactor11");
7361*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor12 = body.make_temp(btype, "SubFactor12");
7362*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor13 = body.make_temp(btype, "SubFactor13");
7363*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor14 = body.make_temp(btype, "SubFactor14");
7364*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor15 = body.make_temp(btype, "SubFactor15");
7365*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor16 = body.make_temp(btype, "SubFactor16");
7366*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor17 = body.make_temp(btype, "SubFactor17");
7367*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor18 = body.make_temp(btype, "SubFactor18");
7368*61046927SAndroid Build Coastguard Worker 
7369*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor00, sub(mul(matrix_elt(m, 2, 2), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 2), matrix_elt(m, 2, 3)))));
7370*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor01, sub(mul(matrix_elt(m, 2, 1), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 2, 3)))));
7371*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor02, sub(mul(matrix_elt(m, 2, 1), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 2, 2)))));
7372*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor03, sub(mul(matrix_elt(m, 2, 0), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 2, 3)))));
7373*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor04, sub(mul(matrix_elt(m, 2, 0), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 2, 2)))));
7374*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor05, sub(mul(matrix_elt(m, 2, 0), matrix_elt(m, 3, 1)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 2, 1)))));
7375*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor06, sub(mul(matrix_elt(m, 1, 2), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 2), matrix_elt(m, 1, 3)))));
7376*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor07, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 1, 3)))));
7377*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor08, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 1, 2)))));
7378*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor09, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 1, 3)))));
7379*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor10, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 1, 2)))));
7380*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor11, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 1, 3)))));
7381*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor12, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 3, 1)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 1, 1)))));
7382*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor13, sub(mul(matrix_elt(m, 1, 2), matrix_elt(m, 2, 3)), mul(matrix_elt(m, 2, 2), matrix_elt(m, 1, 3)))));
7383*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor14, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 3)), mul(matrix_elt(m, 2, 1), matrix_elt(m, 1, 3)))));
7384*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor15, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 2)), mul(matrix_elt(m, 2, 1), matrix_elt(m, 1, 2)))));
7385*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor16, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 3)), mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 3)))));
7386*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor17, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 2)), mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 2)))));
7387*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor18, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 1)), mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 1)))));
7388*61046927SAndroid Build Coastguard Worker 
7389*61046927SAndroid Build Coastguard Worker    ir_variable *adj_0 = body.make_temp(btype == &glsl_type_builtin_float ? &glsl_type_builtin_vec4 : btype == &glsl_type_builtin_float16_t ? &glsl_type_builtin_f16vec4 : &glsl_type_builtin_dvec4, "adj_0");
7390*61046927SAndroid Build Coastguard Worker 
7391*61046927SAndroid Build Coastguard Worker    body.emit(assign(adj_0,
7392*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 1, 1), SubFactor00),
7393*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 1, 2), SubFactor01)),
7394*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 1, 3), SubFactor02)),
7395*61046927SAndroid Build Coastguard Worker                     WRITEMASK_X));
7396*61046927SAndroid Build Coastguard Worker    body.emit(assign(adj_0, neg(
7397*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 1, 0), SubFactor00),
7398*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 1, 2), SubFactor03)),
7399*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 1, 3), SubFactor04))),
7400*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Y));
7401*61046927SAndroid Build Coastguard Worker    body.emit(assign(adj_0,
7402*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 1, 0), SubFactor01),
7403*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 1, 1), SubFactor03)),
7404*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 1, 3), SubFactor05)),
7405*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Z));
7406*61046927SAndroid Build Coastguard Worker    body.emit(assign(adj_0, neg(
7407*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 1, 0), SubFactor02),
7408*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 1, 1), SubFactor04)),
7409*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 1, 2), SubFactor05))),
7410*61046927SAndroid Build Coastguard Worker                     WRITEMASK_W));
7411*61046927SAndroid Build Coastguard Worker 
7412*61046927SAndroid Build Coastguard Worker    body.emit(ret(dot(array_ref(m, 0), adj_0)));
7413*61046927SAndroid Build Coastguard Worker 
7414*61046927SAndroid Build Coastguard Worker    return sig;
7415*61046927SAndroid Build Coastguard Worker }
7416*61046927SAndroid Build Coastguard Worker 
7417*61046927SAndroid Build Coastguard Worker ir_function_signature *
_inverse_mat2(builtin_available_predicate avail,const glsl_type * type)7418*61046927SAndroid Build Coastguard Worker builtin_builder::_inverse_mat2(builtin_available_predicate avail, const glsl_type *type)
7419*61046927SAndroid Build Coastguard Worker {
7420*61046927SAndroid Build Coastguard Worker    ir_variable *m = in_var(type, "m");
7421*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, m);
7422*61046927SAndroid Build Coastguard Worker 
7423*61046927SAndroid Build Coastguard Worker    ir_variable *adj = body.make_temp(type, "adj");
7424*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 0), matrix_elt(m, 1, 1), 1 << 0));
7425*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 0), neg(matrix_elt(m, 0, 1)), 1 << 1));
7426*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 1), neg(matrix_elt(m, 1, 0)), 1 << 0));
7427*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 1), matrix_elt(m, 0, 0), 1 << 1));
7428*61046927SAndroid Build Coastguard Worker 
7429*61046927SAndroid Build Coastguard Worker    ir_expression *det =
7430*61046927SAndroid Build Coastguard Worker       sub(mul(matrix_elt(m, 0, 0), matrix_elt(m, 1, 1)),
7431*61046927SAndroid Build Coastguard Worker           mul(matrix_elt(m, 1, 0), matrix_elt(m, 0, 1)));
7432*61046927SAndroid Build Coastguard Worker 
7433*61046927SAndroid Build Coastguard Worker    body.emit(ret(div(adj, det)));
7434*61046927SAndroid Build Coastguard Worker    return sig;
7435*61046927SAndroid Build Coastguard Worker }
7436*61046927SAndroid Build Coastguard Worker 
7437*61046927SAndroid Build Coastguard Worker ir_function_signature *
_inverse_mat3(builtin_available_predicate avail,const glsl_type * type)7438*61046927SAndroid Build Coastguard Worker builtin_builder::_inverse_mat3(builtin_available_predicate avail, const glsl_type *type)
7439*61046927SAndroid Build Coastguard Worker {
7440*61046927SAndroid Build Coastguard Worker    ir_variable *m = in_var(type, "m");
7441*61046927SAndroid Build Coastguard Worker    const glsl_type *btype = glsl_get_base_glsl_type(type);
7442*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, m);
7443*61046927SAndroid Build Coastguard Worker 
7444*61046927SAndroid Build Coastguard Worker    ir_variable *f11_22_21_12 = body.make_temp(btype, "f11_22_21_12");
7445*61046927SAndroid Build Coastguard Worker    ir_variable *f10_22_20_12 = body.make_temp(btype, "f10_22_20_12");
7446*61046927SAndroid Build Coastguard Worker    ir_variable *f10_21_20_11 = body.make_temp(btype, "f10_21_20_11");
7447*61046927SAndroid Build Coastguard Worker 
7448*61046927SAndroid Build Coastguard Worker    body.emit(assign(f11_22_21_12,
7449*61046927SAndroid Build Coastguard Worker                     sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 2)),
7450*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 2, 1), matrix_elt(m, 1, 2)))));
7451*61046927SAndroid Build Coastguard Worker    body.emit(assign(f10_22_20_12,
7452*61046927SAndroid Build Coastguard Worker                     sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 2)),
7453*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 2)))));
7454*61046927SAndroid Build Coastguard Worker    body.emit(assign(f10_21_20_11,
7455*61046927SAndroid Build Coastguard Worker                     sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 1)),
7456*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 1)))));
7457*61046927SAndroid Build Coastguard Worker 
7458*61046927SAndroid Build Coastguard Worker    ir_variable *adj = body.make_temp(type, "adj");
7459*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 0), f11_22_21_12, WRITEMASK_X));
7460*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 1), neg(f10_22_20_12), WRITEMASK_X));
7461*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 2), f10_21_20_11, WRITEMASK_X));
7462*61046927SAndroid Build Coastguard Worker 
7463*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 0), neg(
7464*61046927SAndroid Build Coastguard Worker                     sub(mul(matrix_elt(m, 0, 1), matrix_elt(m, 2, 2)),
7465*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 2, 1), matrix_elt(m, 0, 2)))),
7466*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Y));
7467*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 1),
7468*61046927SAndroid Build Coastguard Worker                     sub(mul(matrix_elt(m, 0, 0), matrix_elt(m, 2, 2)),
7469*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 2, 0), matrix_elt(m, 0, 2))),
7470*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Y));
7471*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 2), neg(
7472*61046927SAndroid Build Coastguard Worker                     sub(mul(matrix_elt(m, 0, 0), matrix_elt(m, 2, 1)),
7473*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 2, 0), matrix_elt(m, 0, 1)))),
7474*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Y));
7475*61046927SAndroid Build Coastguard Worker 
7476*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 0),
7477*61046927SAndroid Build Coastguard Worker                     sub(mul(matrix_elt(m, 0, 1), matrix_elt(m, 1, 2)),
7478*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 1, 1), matrix_elt(m, 0, 2))),
7479*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Z));
7480*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 1), neg(
7481*61046927SAndroid Build Coastguard Worker                     sub(mul(matrix_elt(m, 0, 0), matrix_elt(m, 1, 2)),
7482*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 1, 0), matrix_elt(m, 0, 2)))),
7483*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Z));
7484*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 2),
7485*61046927SAndroid Build Coastguard Worker                     sub(mul(matrix_elt(m, 0, 0), matrix_elt(m, 1, 1)),
7486*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 1, 0), matrix_elt(m, 0, 1))),
7487*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Z));
7488*61046927SAndroid Build Coastguard Worker 
7489*61046927SAndroid Build Coastguard Worker    ir_expression *det =
7490*61046927SAndroid Build Coastguard Worker       add(sub(mul(matrix_elt(m, 0, 0), f11_22_21_12),
7491*61046927SAndroid Build Coastguard Worker               mul(matrix_elt(m, 0, 1), f10_22_20_12)),
7492*61046927SAndroid Build Coastguard Worker           mul(matrix_elt(m, 0, 2), f10_21_20_11));
7493*61046927SAndroid Build Coastguard Worker 
7494*61046927SAndroid Build Coastguard Worker    body.emit(ret(div(adj, det)));
7495*61046927SAndroid Build Coastguard Worker 
7496*61046927SAndroid Build Coastguard Worker    return sig;
7497*61046927SAndroid Build Coastguard Worker }
7498*61046927SAndroid Build Coastguard Worker 
7499*61046927SAndroid Build Coastguard Worker ir_function_signature *
_inverse_mat4(builtin_available_predicate avail,const glsl_type * type)7500*61046927SAndroid Build Coastguard Worker builtin_builder::_inverse_mat4(builtin_available_predicate avail, const glsl_type *type)
7501*61046927SAndroid Build Coastguard Worker {
7502*61046927SAndroid Build Coastguard Worker    ir_variable *m = in_var(type, "m");
7503*61046927SAndroid Build Coastguard Worker    const glsl_type *btype = glsl_get_base_glsl_type(type);
7504*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, m);
7505*61046927SAndroid Build Coastguard Worker 
7506*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor00 = body.make_temp(btype, "SubFactor00");
7507*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor01 = body.make_temp(btype, "SubFactor01");
7508*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor02 = body.make_temp(btype, "SubFactor02");
7509*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor03 = body.make_temp(btype, "SubFactor03");
7510*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor04 = body.make_temp(btype, "SubFactor04");
7511*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor05 = body.make_temp(btype, "SubFactor05");
7512*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor06 = body.make_temp(btype, "SubFactor06");
7513*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor07 = body.make_temp(btype, "SubFactor07");
7514*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor08 = body.make_temp(btype, "SubFactor08");
7515*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor09 = body.make_temp(btype, "SubFactor09");
7516*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor10 = body.make_temp(btype, "SubFactor10");
7517*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor11 = body.make_temp(btype, "SubFactor11");
7518*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor12 = body.make_temp(btype, "SubFactor12");
7519*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor13 = body.make_temp(btype, "SubFactor13");
7520*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor14 = body.make_temp(btype, "SubFactor14");
7521*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor15 = body.make_temp(btype, "SubFactor15");
7522*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor16 = body.make_temp(btype, "SubFactor16");
7523*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor17 = body.make_temp(btype, "SubFactor17");
7524*61046927SAndroid Build Coastguard Worker    ir_variable *SubFactor18 = body.make_temp(btype, "SubFactor18");
7525*61046927SAndroid Build Coastguard Worker 
7526*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor00, sub(mul(matrix_elt(m, 2, 2), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 2), matrix_elt(m, 2, 3)))));
7527*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor01, sub(mul(matrix_elt(m, 2, 1), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 2, 3)))));
7528*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor02, sub(mul(matrix_elt(m, 2, 1), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 2, 2)))));
7529*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor03, sub(mul(matrix_elt(m, 2, 0), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 2, 3)))));
7530*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor04, sub(mul(matrix_elt(m, 2, 0), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 2, 2)))));
7531*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor05, sub(mul(matrix_elt(m, 2, 0), matrix_elt(m, 3, 1)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 2, 1)))));
7532*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor06, sub(mul(matrix_elt(m, 1, 2), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 2), matrix_elt(m, 1, 3)))));
7533*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor07, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 1, 3)))));
7534*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor08, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 1, 2)))));
7535*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor09, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 1, 3)))));
7536*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor10, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 1, 2)))));
7537*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor11, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 1, 3)))));
7538*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor12, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 3, 1)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 1, 1)))));
7539*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor13, sub(mul(matrix_elt(m, 1, 2), matrix_elt(m, 2, 3)), mul(matrix_elt(m, 2, 2), matrix_elt(m, 1, 3)))));
7540*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor14, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 3)), mul(matrix_elt(m, 2, 1), matrix_elt(m, 1, 3)))));
7541*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor15, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 2)), mul(matrix_elt(m, 2, 1), matrix_elt(m, 1, 2)))));
7542*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor16, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 3)), mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 3)))));
7543*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor17, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 2)), mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 2)))));
7544*61046927SAndroid Build Coastguard Worker    body.emit(assign(SubFactor18, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 1)), mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 1)))));
7545*61046927SAndroid Build Coastguard Worker 
7546*61046927SAndroid Build Coastguard Worker    ir_variable *adj = body.make_temp(btype == &glsl_type_builtin_float ? &glsl_type_builtin_mat4 : (btype == &glsl_type_builtin_double ? &glsl_type_builtin_dmat4 : &glsl_type_builtin_f16mat4), "adj");
7547*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 0),
7548*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 1, 1), SubFactor00),
7549*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 1, 2), SubFactor01)),
7550*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 1, 3), SubFactor02)),
7551*61046927SAndroid Build Coastguard Worker                     WRITEMASK_X));
7552*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 1), neg(
7553*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 1, 0), SubFactor00),
7554*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 1, 2), SubFactor03)),
7555*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 1, 3), SubFactor04))),
7556*61046927SAndroid Build Coastguard Worker                     WRITEMASK_X));
7557*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 2),
7558*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 1, 0), SubFactor01),
7559*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 1, 1), SubFactor03)),
7560*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 1, 3), SubFactor05)),
7561*61046927SAndroid Build Coastguard Worker                     WRITEMASK_X));
7562*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 3), neg(
7563*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 1, 0), SubFactor02),
7564*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 1, 1), SubFactor04)),
7565*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 1, 2), SubFactor05))),
7566*61046927SAndroid Build Coastguard Worker                     WRITEMASK_X));
7567*61046927SAndroid Build Coastguard Worker 
7568*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 0), neg(
7569*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 0, 1), SubFactor00),
7570*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 0, 2), SubFactor01)),
7571*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 0, 3), SubFactor02))),
7572*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Y));
7573*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 1),
7574*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 0, 0), SubFactor00),
7575*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 0, 2), SubFactor03)),
7576*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 0, 3), SubFactor04)),
7577*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Y));
7578*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 2), neg(
7579*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 0, 0), SubFactor01),
7580*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 0, 1), SubFactor03)),
7581*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 0, 3), SubFactor05))),
7582*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Y));
7583*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 3),
7584*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 0, 0), SubFactor02),
7585*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 0, 1), SubFactor04)),
7586*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 0, 2), SubFactor05)),
7587*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Y));
7588*61046927SAndroid Build Coastguard Worker 
7589*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 0),
7590*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 0, 1), SubFactor06),
7591*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 0, 2), SubFactor07)),
7592*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 0, 3), SubFactor08)),
7593*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Z));
7594*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 1), neg(
7595*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 0, 0), SubFactor06),
7596*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 0, 2), SubFactor09)),
7597*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 0, 3), SubFactor10))),
7598*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Z));
7599*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 2),
7600*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 0, 0), SubFactor11),
7601*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 0, 1), SubFactor09)),
7602*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 0, 3), SubFactor12)),
7603*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Z));
7604*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 3), neg(
7605*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 0, 0), SubFactor08),
7606*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 0, 1), SubFactor10)),
7607*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 0, 2), SubFactor12))),
7608*61046927SAndroid Build Coastguard Worker                     WRITEMASK_Z));
7609*61046927SAndroid Build Coastguard Worker 
7610*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 0), neg(
7611*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 0, 1), SubFactor13),
7612*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 0, 2), SubFactor14)),
7613*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 0, 3), SubFactor15))),
7614*61046927SAndroid Build Coastguard Worker                     WRITEMASK_W));
7615*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 1),
7616*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 0, 0), SubFactor13),
7617*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 0, 2), SubFactor16)),
7618*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 0, 3), SubFactor17)),
7619*61046927SAndroid Build Coastguard Worker                     WRITEMASK_W));
7620*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 2), neg(
7621*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 0, 0), SubFactor14),
7622*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 0, 1), SubFactor16)),
7623*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 0, 3), SubFactor18))),
7624*61046927SAndroid Build Coastguard Worker                     WRITEMASK_W));
7625*61046927SAndroid Build Coastguard Worker    body.emit(assign(array_ref(adj, 3),
7626*61046927SAndroid Build Coastguard Worker                     add(sub(mul(matrix_elt(m, 0, 0), SubFactor15),
7627*61046927SAndroid Build Coastguard Worker                             mul(matrix_elt(m, 0, 1), SubFactor17)),
7628*61046927SAndroid Build Coastguard Worker                         mul(matrix_elt(m, 0, 2), SubFactor18)),
7629*61046927SAndroid Build Coastguard Worker                     WRITEMASK_W));
7630*61046927SAndroid Build Coastguard Worker 
7631*61046927SAndroid Build Coastguard Worker    ir_expression *det =
7632*61046927SAndroid Build Coastguard Worker       add(mul(matrix_elt(m, 0, 0), matrix_elt(adj, 0, 0)),
7633*61046927SAndroid Build Coastguard Worker           add(mul(matrix_elt(m, 0, 1), matrix_elt(adj, 1, 0)),
7634*61046927SAndroid Build Coastguard Worker               add(mul(matrix_elt(m, 0, 2), matrix_elt(adj, 2, 0)),
7635*61046927SAndroid Build Coastguard Worker                   mul(matrix_elt(m, 0, 3), matrix_elt(adj, 3, 0)))));
7636*61046927SAndroid Build Coastguard Worker 
7637*61046927SAndroid Build Coastguard Worker    body.emit(ret(div(adj, det)));
7638*61046927SAndroid Build Coastguard Worker 
7639*61046927SAndroid Build Coastguard Worker    return sig;
7640*61046927SAndroid Build Coastguard Worker }
7641*61046927SAndroid Build Coastguard Worker 
7642*61046927SAndroid Build Coastguard Worker 
7643*61046927SAndroid Build Coastguard Worker ir_function_signature *
_lessThan(builtin_available_predicate avail,const glsl_type * type)7644*61046927SAndroid Build Coastguard Worker builtin_builder::_lessThan(builtin_available_predicate avail,
7645*61046927SAndroid Build Coastguard Worker                            const glsl_type *type)
7646*61046927SAndroid Build Coastguard Worker {
7647*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_less,
7648*61046927SAndroid Build Coastguard Worker                 glsl_bvec_type(type->vector_elements), type, type);
7649*61046927SAndroid Build Coastguard Worker }
7650*61046927SAndroid Build Coastguard Worker 
7651*61046927SAndroid Build Coastguard Worker ir_function_signature *
_lessThanEqual(builtin_available_predicate avail,const glsl_type * type)7652*61046927SAndroid Build Coastguard Worker builtin_builder::_lessThanEqual(builtin_available_predicate avail,
7653*61046927SAndroid Build Coastguard Worker                                 const glsl_type *type)
7654*61046927SAndroid Build Coastguard Worker {
7655*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_gequal,
7656*61046927SAndroid Build Coastguard Worker                 glsl_bvec_type(type->vector_elements), type, type,
7657*61046927SAndroid Build Coastguard Worker                 true);
7658*61046927SAndroid Build Coastguard Worker }
7659*61046927SAndroid Build Coastguard Worker 
7660*61046927SAndroid Build Coastguard Worker ir_function_signature *
_greaterThan(builtin_available_predicate avail,const glsl_type * type)7661*61046927SAndroid Build Coastguard Worker builtin_builder::_greaterThan(builtin_available_predicate avail,
7662*61046927SAndroid Build Coastguard Worker                               const glsl_type *type)
7663*61046927SAndroid Build Coastguard Worker {
7664*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_less,
7665*61046927SAndroid Build Coastguard Worker                 glsl_bvec_type(type->vector_elements), type, type,
7666*61046927SAndroid Build Coastguard Worker                 true);
7667*61046927SAndroid Build Coastguard Worker }
7668*61046927SAndroid Build Coastguard Worker 
7669*61046927SAndroid Build Coastguard Worker ir_function_signature *
_greaterThanEqual(builtin_available_predicate avail,const glsl_type * type)7670*61046927SAndroid Build Coastguard Worker builtin_builder::_greaterThanEqual(builtin_available_predicate avail,
7671*61046927SAndroid Build Coastguard Worker                                    const glsl_type *type)
7672*61046927SAndroid Build Coastguard Worker {
7673*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_gequal,
7674*61046927SAndroid Build Coastguard Worker                 glsl_bvec_type(type->vector_elements), type, type);
7675*61046927SAndroid Build Coastguard Worker }
7676*61046927SAndroid Build Coastguard Worker 
7677*61046927SAndroid Build Coastguard Worker ir_function_signature *
_equal(builtin_available_predicate avail,const glsl_type * type)7678*61046927SAndroid Build Coastguard Worker builtin_builder::_equal(builtin_available_predicate avail,
7679*61046927SAndroid Build Coastguard Worker                         const glsl_type *type)
7680*61046927SAndroid Build Coastguard Worker {
7681*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_equal,
7682*61046927SAndroid Build Coastguard Worker                 glsl_bvec_type(type->vector_elements), type, type);
7683*61046927SAndroid Build Coastguard Worker }
7684*61046927SAndroid Build Coastguard Worker 
7685*61046927SAndroid Build Coastguard Worker ir_function_signature *
_notEqual(builtin_available_predicate avail,const glsl_type * type)7686*61046927SAndroid Build Coastguard Worker builtin_builder::_notEqual(builtin_available_predicate avail,
7687*61046927SAndroid Build Coastguard Worker                            const glsl_type *type)
7688*61046927SAndroid Build Coastguard Worker {
7689*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_nequal,
7690*61046927SAndroid Build Coastguard Worker                 glsl_bvec_type(type->vector_elements), type, type);
7691*61046927SAndroid Build Coastguard Worker }
7692*61046927SAndroid Build Coastguard Worker 
7693*61046927SAndroid Build Coastguard Worker ir_function_signature *
_any(const glsl_type * type)7694*61046927SAndroid Build Coastguard Worker builtin_builder::_any(const glsl_type *type)
7695*61046927SAndroid Build Coastguard Worker {
7696*61046927SAndroid Build Coastguard Worker    ir_variable *v = in_var(type, "v");
7697*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_bool, always_available, 1, v);
7698*61046927SAndroid Build Coastguard Worker 
7699*61046927SAndroid Build Coastguard Worker    const unsigned vec_elem = v->type->vector_elements;
7700*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_binop_any_nequal, v, imm(false, vec_elem))));
7701*61046927SAndroid Build Coastguard Worker 
7702*61046927SAndroid Build Coastguard Worker    return sig;
7703*61046927SAndroid Build Coastguard Worker }
7704*61046927SAndroid Build Coastguard Worker 
7705*61046927SAndroid Build Coastguard Worker ir_function_signature *
_all(const glsl_type * type)7706*61046927SAndroid Build Coastguard Worker builtin_builder::_all(const glsl_type *type)
7707*61046927SAndroid Build Coastguard Worker {
7708*61046927SAndroid Build Coastguard Worker    ir_variable *v = in_var(type, "v");
7709*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_bool, always_available, 1, v);
7710*61046927SAndroid Build Coastguard Worker 
7711*61046927SAndroid Build Coastguard Worker    const unsigned vec_elem = v->type->vector_elements;
7712*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_binop_all_equal, v, imm(true, vec_elem))));
7713*61046927SAndroid Build Coastguard Worker 
7714*61046927SAndroid Build Coastguard Worker    return sig;
7715*61046927SAndroid Build Coastguard Worker }
7716*61046927SAndroid Build Coastguard Worker 
UNOP(not,ir_unop_logic_not,always_available)7717*61046927SAndroid Build Coastguard Worker UNOP(not, ir_unop_logic_not, always_available)
7718*61046927SAndroid Build Coastguard Worker 
7719*61046927SAndroid Build Coastguard Worker static bool
7720*61046927SAndroid Build Coastguard Worker has_lod(const glsl_type *sampler_type)
7721*61046927SAndroid Build Coastguard Worker {
7722*61046927SAndroid Build Coastguard Worker    assert(glsl_type_is_sampler(sampler_type));
7723*61046927SAndroid Build Coastguard Worker 
7724*61046927SAndroid Build Coastguard Worker    switch (sampler_type->sampler_dimensionality) {
7725*61046927SAndroid Build Coastguard Worker    case GLSL_SAMPLER_DIM_RECT:
7726*61046927SAndroid Build Coastguard Worker    case GLSL_SAMPLER_DIM_BUF:
7727*61046927SAndroid Build Coastguard Worker    case GLSL_SAMPLER_DIM_MS:
7728*61046927SAndroid Build Coastguard Worker       return false;
7729*61046927SAndroid Build Coastguard Worker    default:
7730*61046927SAndroid Build Coastguard Worker       return true;
7731*61046927SAndroid Build Coastguard Worker    }
7732*61046927SAndroid Build Coastguard Worker }
7733*61046927SAndroid Build Coastguard Worker 
7734*61046927SAndroid Build Coastguard Worker ir_function_signature *
_textureSize(builtin_available_predicate avail,const glsl_type * return_type,const glsl_type * sampler_type)7735*61046927SAndroid Build Coastguard Worker builtin_builder::_textureSize(builtin_available_predicate avail,
7736*61046927SAndroid Build Coastguard Worker                               const glsl_type *return_type,
7737*61046927SAndroid Build Coastguard Worker                               const glsl_type *sampler_type)
7738*61046927SAndroid Build Coastguard Worker {
7739*61046927SAndroid Build Coastguard Worker    ir_variable *s = in_var(sampler_type, "sampler");
7740*61046927SAndroid Build Coastguard Worker    /* The sampler always exists; add optional lod later. */
7741*61046927SAndroid Build Coastguard Worker    MAKE_SIG(return_type, avail, 1, s);
7742*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
7743*61046927SAndroid Build Coastguard Worker 
7744*61046927SAndroid Build Coastguard Worker    ir_texture *tex = new(mem_ctx) ir_texture(ir_txs);
7745*61046927SAndroid Build Coastguard Worker    tex->set_sampler(new(mem_ctx) ir_dereference_variable(s), return_type);
7746*61046927SAndroid Build Coastguard Worker 
7747*61046927SAndroid Build Coastguard Worker    if (has_lod(sampler_type)) {
7748*61046927SAndroid Build Coastguard Worker       ir_variable *lod = in_var(&glsl_type_builtin_int, "lod");
7749*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(lod);
7750*61046927SAndroid Build Coastguard Worker       tex->lod_info.lod = var_ref(lod);
7751*61046927SAndroid Build Coastguard Worker    } else {
7752*61046927SAndroid Build Coastguard Worker       tex->lod_info.lod = imm(0u);
7753*61046927SAndroid Build Coastguard Worker    }
7754*61046927SAndroid Build Coastguard Worker 
7755*61046927SAndroid Build Coastguard Worker    body.emit(ret(tex));
7756*61046927SAndroid Build Coastguard Worker 
7757*61046927SAndroid Build Coastguard Worker    return sig;
7758*61046927SAndroid Build Coastguard Worker }
7759*61046927SAndroid Build Coastguard Worker 
7760*61046927SAndroid Build Coastguard Worker ir_function_signature *
_textureSamples(builtin_available_predicate avail,const glsl_type * sampler_type)7761*61046927SAndroid Build Coastguard Worker builtin_builder::_textureSamples(builtin_available_predicate avail,
7762*61046927SAndroid Build Coastguard Worker                                  const glsl_type *sampler_type)
7763*61046927SAndroid Build Coastguard Worker {
7764*61046927SAndroid Build Coastguard Worker    ir_variable *s = in_var(sampler_type, "sampler");
7765*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_int, avail, 1, s);
7766*61046927SAndroid Build Coastguard Worker 
7767*61046927SAndroid Build Coastguard Worker    ir_texture *tex = new(mem_ctx) ir_texture(ir_texture_samples);
7768*61046927SAndroid Build Coastguard Worker    tex->set_sampler(new(mem_ctx) ir_dereference_variable(s), &glsl_type_builtin_int);
7769*61046927SAndroid Build Coastguard Worker    body.emit(ret(tex));
7770*61046927SAndroid Build Coastguard Worker 
7771*61046927SAndroid Build Coastguard Worker    return sig;
7772*61046927SAndroid Build Coastguard Worker }
7773*61046927SAndroid Build Coastguard Worker 
7774*61046927SAndroid Build Coastguard Worker ir_function_signature *
_is_sparse_texels_resident(void)7775*61046927SAndroid Build Coastguard Worker builtin_builder::_is_sparse_texels_resident(void)
7776*61046927SAndroid Build Coastguard Worker {
7777*61046927SAndroid Build Coastguard Worker    ir_variable *code = in_var(&glsl_type_builtin_int, "code");
7778*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_bool, sparse_enabled, 1, code);
7779*61046927SAndroid Build Coastguard Worker 
7780*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(&glsl_type_builtin_bool, "retval");
7781*61046927SAndroid Build Coastguard Worker    ir_function *f =
7782*61046927SAndroid Build Coastguard Worker       shader->symbols->get_function("__intrinsic_is_sparse_texels_resident");
7783*61046927SAndroid Build Coastguard Worker 
7784*61046927SAndroid Build Coastguard Worker    body.emit(call(f, retval, sig->parameters));
7785*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
7786*61046927SAndroid Build Coastguard Worker    return sig;
7787*61046927SAndroid Build Coastguard Worker }
7788*61046927SAndroid Build Coastguard Worker 
7789*61046927SAndroid Build Coastguard Worker ir_function_signature *
_is_sparse_texels_resident_intrinsic(void)7790*61046927SAndroid Build Coastguard Worker builtin_builder::_is_sparse_texels_resident_intrinsic(void)
7791*61046927SAndroid Build Coastguard Worker {
7792*61046927SAndroid Build Coastguard Worker    ir_variable *code = in_var(&glsl_type_builtin_int, "code");
7793*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_bool, ir_intrinsic_is_sparse_texels_resident,
7794*61046927SAndroid Build Coastguard Worker                   sparse_enabled, 1, code);
7795*61046927SAndroid Build Coastguard Worker    return sig;
7796*61046927SAndroid Build Coastguard Worker }
7797*61046927SAndroid Build Coastguard Worker 
7798*61046927SAndroid Build Coastguard Worker ir_function_signature *
_texture(ir_texture_opcode opcode,builtin_available_predicate avail,const glsl_type * return_type,const glsl_type * sampler_type,const glsl_type * coord_type,int flags)7799*61046927SAndroid Build Coastguard Worker builtin_builder::_texture(ir_texture_opcode opcode,
7800*61046927SAndroid Build Coastguard Worker                           builtin_available_predicate avail,
7801*61046927SAndroid Build Coastguard Worker                           const glsl_type *return_type,
7802*61046927SAndroid Build Coastguard Worker                           const glsl_type *sampler_type,
7803*61046927SAndroid Build Coastguard Worker                           const glsl_type *coord_type,
7804*61046927SAndroid Build Coastguard Worker                           int flags)
7805*61046927SAndroid Build Coastguard Worker {
7806*61046927SAndroid Build Coastguard Worker    ir_variable *s = in_var(sampler_type, "sampler");
7807*61046927SAndroid Build Coastguard Worker    ir_variable *P = in_var(coord_type, "P");
7808*61046927SAndroid Build Coastguard Worker    /* Sparse texture return residency info. */
7809*61046927SAndroid Build Coastguard Worker    const glsl_type *type = flags & TEX_SPARSE ? &glsl_type_builtin_int : return_type;
7810*61046927SAndroid Build Coastguard Worker    /* The sampler and coordinate always exist; add optional parameters later. */
7811*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 2, s, P);
7812*61046927SAndroid Build Coastguard Worker 
7813*61046927SAndroid Build Coastguard Worker    ir_texture *tex = new(mem_ctx) ir_texture(opcode, flags & TEX_SPARSE);
7814*61046927SAndroid Build Coastguard Worker    tex->set_sampler(var_ref(s), return_type);
7815*61046927SAndroid Build Coastguard Worker 
7816*61046927SAndroid Build Coastguard Worker    const int coord_size = glsl_get_sampler_coordinate_components(sampler_type);
7817*61046927SAndroid Build Coastguard Worker 
7818*61046927SAndroid Build Coastguard Worker    if (coord_size == coord_type->vector_elements) {
7819*61046927SAndroid Build Coastguard Worker       tex->coordinate = var_ref(P);
7820*61046927SAndroid Build Coastguard Worker    } else {
7821*61046927SAndroid Build Coastguard Worker       /* The incoming coordinate also has the projector or shadow comparator,
7822*61046927SAndroid Build Coastguard Worker        * so we need to swizzle those away.
7823*61046927SAndroid Build Coastguard Worker        */
7824*61046927SAndroid Build Coastguard Worker       tex->coordinate = swizzle_for_size(P, coord_size);
7825*61046927SAndroid Build Coastguard Worker    }
7826*61046927SAndroid Build Coastguard Worker 
7827*61046927SAndroid Build Coastguard Worker    /* The projector is always in the last component. */
7828*61046927SAndroid Build Coastguard Worker    if (flags & TEX_PROJECT)
7829*61046927SAndroid Build Coastguard Worker       tex->projector = swizzle(P, coord_type->vector_elements - 1, 1);
7830*61046927SAndroid Build Coastguard Worker 
7831*61046927SAndroid Build Coastguard Worker    if (sampler_type->sampler_shadow) {
7832*61046927SAndroid Build Coastguard Worker       if (opcode == ir_tg4) {
7833*61046927SAndroid Build Coastguard Worker          /* gather has refz as a separate parameter, immediately after the
7834*61046927SAndroid Build Coastguard Worker           * coordinate
7835*61046927SAndroid Build Coastguard Worker           */
7836*61046927SAndroid Build Coastguard Worker          ir_variable *refz = in_var(&glsl_type_builtin_float, "refz");
7837*61046927SAndroid Build Coastguard Worker          sig->parameters.push_tail(refz);
7838*61046927SAndroid Build Coastguard Worker          tex->shadow_comparator = var_ref(refz);
7839*61046927SAndroid Build Coastguard Worker       } else {
7840*61046927SAndroid Build Coastguard Worker          /* The shadow comparator is normally in the Z component, but a few types
7841*61046927SAndroid Build Coastguard Worker           * have sufficiently large coordinates that it's in W.
7842*61046927SAndroid Build Coastguard Worker           */
7843*61046927SAndroid Build Coastguard Worker          tex->shadow_comparator = swizzle(P, MAX2(coord_size, SWIZZLE_Z), 1);
7844*61046927SAndroid Build Coastguard Worker       }
7845*61046927SAndroid Build Coastguard Worker    }
7846*61046927SAndroid Build Coastguard Worker 
7847*61046927SAndroid Build Coastguard Worker    if (opcode == ir_txl) {
7848*61046927SAndroid Build Coastguard Worker       ir_variable *lod = in_var(&glsl_type_builtin_float, "lod");
7849*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(lod);
7850*61046927SAndroid Build Coastguard Worker       tex->lod_info.lod = var_ref(lod);
7851*61046927SAndroid Build Coastguard Worker    } else if (opcode == ir_txd) {
7852*61046927SAndroid Build Coastguard Worker       int grad_size = coord_size - (sampler_type->sampler_array ? 1 : 0);
7853*61046927SAndroid Build Coastguard Worker       ir_variable *dPdx = in_var(glsl_vec_type(grad_size), "dPdx");
7854*61046927SAndroid Build Coastguard Worker       ir_variable *dPdy = in_var(glsl_vec_type(grad_size), "dPdy");
7855*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(dPdx);
7856*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(dPdy);
7857*61046927SAndroid Build Coastguard Worker       tex->lod_info.grad.dPdx = var_ref(dPdx);
7858*61046927SAndroid Build Coastguard Worker       tex->lod_info.grad.dPdy = var_ref(dPdy);
7859*61046927SAndroid Build Coastguard Worker    }
7860*61046927SAndroid Build Coastguard Worker 
7861*61046927SAndroid Build Coastguard Worker    if (flags & (TEX_OFFSET | TEX_OFFSET_NONCONST)) {
7862*61046927SAndroid Build Coastguard Worker       int offset_size = coord_size - (sampler_type->sampler_array ? 1 : 0);
7863*61046927SAndroid Build Coastguard Worker       ir_variable *offset =
7864*61046927SAndroid Build Coastguard Worker          new(mem_ctx) ir_variable(glsl_ivec_type(offset_size), "offset",
7865*61046927SAndroid Build Coastguard Worker                                   (flags & TEX_OFFSET) ? ir_var_const_in : ir_var_function_in);
7866*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(offset);
7867*61046927SAndroid Build Coastguard Worker       tex->offset = var_ref(offset);
7868*61046927SAndroid Build Coastguard Worker    }
7869*61046927SAndroid Build Coastguard Worker 
7870*61046927SAndroid Build Coastguard Worker    if (flags & TEX_OFFSET_ARRAY) {
7871*61046927SAndroid Build Coastguard Worker       ir_variable *offsets =
7872*61046927SAndroid Build Coastguard Worker          new(mem_ctx) ir_variable(glsl_array_type(&glsl_type_builtin_ivec2, 4, 0),
7873*61046927SAndroid Build Coastguard Worker                                   "offsets", ir_var_const_in);
7874*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(offsets);
7875*61046927SAndroid Build Coastguard Worker       tex->offset = var_ref(offsets);
7876*61046927SAndroid Build Coastguard Worker    }
7877*61046927SAndroid Build Coastguard Worker 
7878*61046927SAndroid Build Coastguard Worker    if (flags & TEX_CLAMP) {
7879*61046927SAndroid Build Coastguard Worker       ir_variable *clamp = in_var(&glsl_type_builtin_float, "lodClamp");
7880*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(clamp);
7881*61046927SAndroid Build Coastguard Worker       tex->clamp = var_ref(clamp);
7882*61046927SAndroid Build Coastguard Worker    }
7883*61046927SAndroid Build Coastguard Worker 
7884*61046927SAndroid Build Coastguard Worker    ir_variable *texel = NULL;
7885*61046927SAndroid Build Coastguard Worker    if (flags & TEX_SPARSE) {
7886*61046927SAndroid Build Coastguard Worker       texel = out_var(return_type, "texel");
7887*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(texel);
7888*61046927SAndroid Build Coastguard Worker    }
7889*61046927SAndroid Build Coastguard Worker 
7890*61046927SAndroid Build Coastguard Worker    if (opcode == ir_tg4) {
7891*61046927SAndroid Build Coastguard Worker       if (flags & TEX_COMPONENT) {
7892*61046927SAndroid Build Coastguard Worker          ir_variable *component =
7893*61046927SAndroid Build Coastguard Worker             new(mem_ctx) ir_variable(&glsl_type_builtin_int, "comp", ir_var_const_in);
7894*61046927SAndroid Build Coastguard Worker          sig->parameters.push_tail(component);
7895*61046927SAndroid Build Coastguard Worker          tex->lod_info.component = var_ref(component);
7896*61046927SAndroid Build Coastguard Worker       }
7897*61046927SAndroid Build Coastguard Worker       else {
7898*61046927SAndroid Build Coastguard Worker          tex->lod_info.component = imm(0);
7899*61046927SAndroid Build Coastguard Worker       }
7900*61046927SAndroid Build Coastguard Worker    }
7901*61046927SAndroid Build Coastguard Worker 
7902*61046927SAndroid Build Coastguard Worker    /* The "bias" parameter comes /after/ the "offset" parameter, which is
7903*61046927SAndroid Build Coastguard Worker     * inconsistent with both textureLodOffset and textureGradOffset.
7904*61046927SAndroid Build Coastguard Worker     */
7905*61046927SAndroid Build Coastguard Worker    if (opcode == ir_txb) {
7906*61046927SAndroid Build Coastguard Worker       ir_variable *bias = in_var(&glsl_type_builtin_float, "bias");
7907*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(bias);
7908*61046927SAndroid Build Coastguard Worker       tex->lod_info.bias = var_ref(bias);
7909*61046927SAndroid Build Coastguard Worker    }
7910*61046927SAndroid Build Coastguard Worker 
7911*61046927SAndroid Build Coastguard Worker    if (flags & TEX_SPARSE) {
7912*61046927SAndroid Build Coastguard Worker       ir_variable *r = body.make_temp(tex->type, "result");
7913*61046927SAndroid Build Coastguard Worker       body.emit(assign(r, tex));
7914*61046927SAndroid Build Coastguard Worker       body.emit(assign(texel, record_ref(r, "texel")));
7915*61046927SAndroid Build Coastguard Worker       body.emit(ret(record_ref(r, "code")));
7916*61046927SAndroid Build Coastguard Worker    } else
7917*61046927SAndroid Build Coastguard Worker       body.emit(ret(tex));
7918*61046927SAndroid Build Coastguard Worker 
7919*61046927SAndroid Build Coastguard Worker    return sig;
7920*61046927SAndroid Build Coastguard Worker }
7921*61046927SAndroid Build Coastguard Worker 
7922*61046927SAndroid Build Coastguard Worker ir_function_signature *
_textureCubeArrayShadow(ir_texture_opcode opcode,builtin_available_predicate avail,const glsl_type * sampler_type,int flags)7923*61046927SAndroid Build Coastguard Worker builtin_builder::_textureCubeArrayShadow(ir_texture_opcode opcode,
7924*61046927SAndroid Build Coastguard Worker                                          builtin_available_predicate avail,
7925*61046927SAndroid Build Coastguard Worker                                          const glsl_type *sampler_type,
7926*61046927SAndroid Build Coastguard Worker                                          int flags)
7927*61046927SAndroid Build Coastguard Worker {
7928*61046927SAndroid Build Coastguard Worker    ir_variable *s = in_var(sampler_type, "sampler");
7929*61046927SAndroid Build Coastguard Worker    ir_variable *P = in_var(&glsl_type_builtin_vec4, "P");
7930*61046927SAndroid Build Coastguard Worker    ir_variable *compare = in_var(&glsl_type_builtin_float, "compare");
7931*61046927SAndroid Build Coastguard Worker    const glsl_type *return_type = &glsl_type_builtin_float;
7932*61046927SAndroid Build Coastguard Worker    bool sparse = flags & TEX_SPARSE;
7933*61046927SAndroid Build Coastguard Worker    bool clamp = flags & TEX_CLAMP;
7934*61046927SAndroid Build Coastguard Worker    /* Sparse texture return residency info. */
7935*61046927SAndroid Build Coastguard Worker    const glsl_type *type = sparse ? &glsl_type_builtin_int : return_type;
7936*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 3, s, P, compare);
7937*61046927SAndroid Build Coastguard Worker 
7938*61046927SAndroid Build Coastguard Worker    ir_texture *tex = new(mem_ctx) ir_texture(opcode, sparse);
7939*61046927SAndroid Build Coastguard Worker    tex->set_sampler(var_ref(s), return_type);
7940*61046927SAndroid Build Coastguard Worker 
7941*61046927SAndroid Build Coastguard Worker    tex->coordinate = var_ref(P);
7942*61046927SAndroid Build Coastguard Worker    tex->shadow_comparator = var_ref(compare);
7943*61046927SAndroid Build Coastguard Worker 
7944*61046927SAndroid Build Coastguard Worker    if (opcode == ir_txl) {
7945*61046927SAndroid Build Coastguard Worker       ir_variable *lod = in_var(&glsl_type_builtin_float, "lod");
7946*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(lod);
7947*61046927SAndroid Build Coastguard Worker       tex->lod_info.lod = var_ref(lod);
7948*61046927SAndroid Build Coastguard Worker    }
7949*61046927SAndroid Build Coastguard Worker 
7950*61046927SAndroid Build Coastguard Worker    if (clamp) {
7951*61046927SAndroid Build Coastguard Worker       ir_variable *lod_clamp = in_var(&glsl_type_builtin_float, "lodClamp");
7952*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(lod_clamp);
7953*61046927SAndroid Build Coastguard Worker       tex->clamp = var_ref(lod_clamp);
7954*61046927SAndroid Build Coastguard Worker    }
7955*61046927SAndroid Build Coastguard Worker 
7956*61046927SAndroid Build Coastguard Worker    ir_variable *texel = NULL;
7957*61046927SAndroid Build Coastguard Worker    if (sparse) {
7958*61046927SAndroid Build Coastguard Worker       texel = out_var(return_type, "texel");
7959*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(texel);
7960*61046927SAndroid Build Coastguard Worker    }
7961*61046927SAndroid Build Coastguard Worker 
7962*61046927SAndroid Build Coastguard Worker    if (opcode == ir_txb) {
7963*61046927SAndroid Build Coastguard Worker       ir_variable *bias = in_var(&glsl_type_builtin_float, "bias");
7964*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(bias);
7965*61046927SAndroid Build Coastguard Worker       tex->lod_info.bias = var_ref(bias);
7966*61046927SAndroid Build Coastguard Worker    }
7967*61046927SAndroid Build Coastguard Worker 
7968*61046927SAndroid Build Coastguard Worker    if (sparse) {
7969*61046927SAndroid Build Coastguard Worker       ir_variable *r = body.make_temp(tex->type, "result");
7970*61046927SAndroid Build Coastguard Worker       body.emit(assign(r, tex));
7971*61046927SAndroid Build Coastguard Worker       body.emit(assign(texel, record_ref(r, "texel")));
7972*61046927SAndroid Build Coastguard Worker       body.emit(ret(record_ref(r, "code")));
7973*61046927SAndroid Build Coastguard Worker    } else
7974*61046927SAndroid Build Coastguard Worker       body.emit(ret(tex));
7975*61046927SAndroid Build Coastguard Worker 
7976*61046927SAndroid Build Coastguard Worker    return sig;
7977*61046927SAndroid Build Coastguard Worker }
7978*61046927SAndroid Build Coastguard Worker 
7979*61046927SAndroid Build Coastguard Worker ir_function_signature *
_texelFetch(builtin_available_predicate avail,const glsl_type * return_type,const glsl_type * sampler_type,const glsl_type * coord_type,const glsl_type * offset_type,bool sparse)7980*61046927SAndroid Build Coastguard Worker builtin_builder::_texelFetch(builtin_available_predicate avail,
7981*61046927SAndroid Build Coastguard Worker                              const glsl_type *return_type,
7982*61046927SAndroid Build Coastguard Worker                              const glsl_type *sampler_type,
7983*61046927SAndroid Build Coastguard Worker                              const glsl_type *coord_type,
7984*61046927SAndroid Build Coastguard Worker                              const glsl_type *offset_type,
7985*61046927SAndroid Build Coastguard Worker                              bool sparse)
7986*61046927SAndroid Build Coastguard Worker {
7987*61046927SAndroid Build Coastguard Worker    ir_variable *s = in_var(sampler_type, "sampler");
7988*61046927SAndroid Build Coastguard Worker    ir_variable *P = in_var(coord_type, "P");
7989*61046927SAndroid Build Coastguard Worker    /* Sparse texture return residency info. */
7990*61046927SAndroid Build Coastguard Worker    const glsl_type *type = sparse ? &glsl_type_builtin_int : return_type;
7991*61046927SAndroid Build Coastguard Worker    /* The sampler and coordinate always exist; add optional parameters later. */
7992*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 2, s, P);
7993*61046927SAndroid Build Coastguard Worker 
7994*61046927SAndroid Build Coastguard Worker    ir_texture *tex = new(mem_ctx) ir_texture(ir_txf, sparse);
7995*61046927SAndroid Build Coastguard Worker    tex->coordinate = var_ref(P);
7996*61046927SAndroid Build Coastguard Worker    tex->set_sampler(var_ref(s), return_type);
7997*61046927SAndroid Build Coastguard Worker 
7998*61046927SAndroid Build Coastguard Worker    if (sampler_type->sampler_dimensionality == GLSL_SAMPLER_DIM_MS) {
7999*61046927SAndroid Build Coastguard Worker       ir_variable *sample = in_var(&glsl_type_builtin_int, "sample");
8000*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(sample);
8001*61046927SAndroid Build Coastguard Worker       tex->lod_info.sample_index = var_ref(sample);
8002*61046927SAndroid Build Coastguard Worker       tex->op = ir_txf_ms;
8003*61046927SAndroid Build Coastguard Worker    } else if (has_lod(sampler_type)) {
8004*61046927SAndroid Build Coastguard Worker       ir_variable *lod = in_var(&glsl_type_builtin_int, "lod");
8005*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(lod);
8006*61046927SAndroid Build Coastguard Worker       tex->lod_info.lod = var_ref(lod);
8007*61046927SAndroid Build Coastguard Worker    } else {
8008*61046927SAndroid Build Coastguard Worker       tex->lod_info.lod = imm(0u);
8009*61046927SAndroid Build Coastguard Worker    }
8010*61046927SAndroid Build Coastguard Worker 
8011*61046927SAndroid Build Coastguard Worker    if (offset_type != NULL) {
8012*61046927SAndroid Build Coastguard Worker       ir_variable *offset =
8013*61046927SAndroid Build Coastguard Worker          new(mem_ctx) ir_variable(offset_type, "offset", ir_var_const_in);
8014*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(offset);
8015*61046927SAndroid Build Coastguard Worker       tex->offset = var_ref(offset);
8016*61046927SAndroid Build Coastguard Worker    }
8017*61046927SAndroid Build Coastguard Worker 
8018*61046927SAndroid Build Coastguard Worker    if (sparse) {
8019*61046927SAndroid Build Coastguard Worker       ir_variable *texel = out_var(return_type, "texel");
8020*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(texel);
8021*61046927SAndroid Build Coastguard Worker 
8022*61046927SAndroid Build Coastguard Worker       ir_variable *r = body.make_temp(tex->type, "result");
8023*61046927SAndroid Build Coastguard Worker       body.emit(assign(r, tex));
8024*61046927SAndroid Build Coastguard Worker       body.emit(assign(texel, record_ref(r, "texel")));
8025*61046927SAndroid Build Coastguard Worker       body.emit(ret(record_ref(r, "code")));
8026*61046927SAndroid Build Coastguard Worker    } else
8027*61046927SAndroid Build Coastguard Worker       body.emit(ret(tex));
8028*61046927SAndroid Build Coastguard Worker 
8029*61046927SAndroid Build Coastguard Worker    return sig;
8030*61046927SAndroid Build Coastguard Worker }
8031*61046927SAndroid Build Coastguard Worker 
8032*61046927SAndroid Build Coastguard Worker ir_function_signature *
_EmitVertex()8033*61046927SAndroid Build Coastguard Worker builtin_builder::_EmitVertex()
8034*61046927SAndroid Build Coastguard Worker {
8035*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_void, gs_only, 0);
8036*61046927SAndroid Build Coastguard Worker 
8037*61046927SAndroid Build Coastguard Worker    ir_rvalue *stream = new(mem_ctx) ir_constant(0, 1);
8038*61046927SAndroid Build Coastguard Worker    body.emit(new(mem_ctx) ir_emit_vertex(stream));
8039*61046927SAndroid Build Coastguard Worker 
8040*61046927SAndroid Build Coastguard Worker    return sig;
8041*61046927SAndroid Build Coastguard Worker }
8042*61046927SAndroid Build Coastguard Worker 
8043*61046927SAndroid Build Coastguard Worker ir_function_signature *
_EmitStreamVertex(builtin_available_predicate avail,const glsl_type * stream_type)8044*61046927SAndroid Build Coastguard Worker builtin_builder::_EmitStreamVertex(builtin_available_predicate avail,
8045*61046927SAndroid Build Coastguard Worker                                    const glsl_type *stream_type)
8046*61046927SAndroid Build Coastguard Worker {
8047*61046927SAndroid Build Coastguard Worker    /* Section 8.12 (Geometry Shader Functions) of the GLSL 4.0 spec says:
8048*61046927SAndroid Build Coastguard Worker     *
8049*61046927SAndroid Build Coastguard Worker     *     "Emit the current values of output variables to the current output
8050*61046927SAndroid Build Coastguard Worker     *     primitive on stream stream. The argument to stream must be a constant
8051*61046927SAndroid Build Coastguard Worker     *     integral expression."
8052*61046927SAndroid Build Coastguard Worker     */
8053*61046927SAndroid Build Coastguard Worker    ir_variable *stream =
8054*61046927SAndroid Build Coastguard Worker       new(mem_ctx) ir_variable(stream_type, "stream", ir_var_const_in);
8055*61046927SAndroid Build Coastguard Worker 
8056*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_void, avail, 1, stream);
8057*61046927SAndroid Build Coastguard Worker 
8058*61046927SAndroid Build Coastguard Worker    body.emit(new(mem_ctx) ir_emit_vertex(var_ref(stream)));
8059*61046927SAndroid Build Coastguard Worker 
8060*61046927SAndroid Build Coastguard Worker    return sig;
8061*61046927SAndroid Build Coastguard Worker }
8062*61046927SAndroid Build Coastguard Worker 
8063*61046927SAndroid Build Coastguard Worker ir_function_signature *
_EndPrimitive()8064*61046927SAndroid Build Coastguard Worker builtin_builder::_EndPrimitive()
8065*61046927SAndroid Build Coastguard Worker {
8066*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_void, gs_only, 0);
8067*61046927SAndroid Build Coastguard Worker 
8068*61046927SAndroid Build Coastguard Worker    ir_rvalue *stream = new(mem_ctx) ir_constant(0, 1);
8069*61046927SAndroid Build Coastguard Worker    body.emit(new(mem_ctx) ir_end_primitive(stream));
8070*61046927SAndroid Build Coastguard Worker 
8071*61046927SAndroid Build Coastguard Worker    return sig;
8072*61046927SAndroid Build Coastguard Worker }
8073*61046927SAndroid Build Coastguard Worker 
8074*61046927SAndroid Build Coastguard Worker ir_function_signature *
_EndStreamPrimitive(builtin_available_predicate avail,const glsl_type * stream_type)8075*61046927SAndroid Build Coastguard Worker builtin_builder::_EndStreamPrimitive(builtin_available_predicate avail,
8076*61046927SAndroid Build Coastguard Worker                                      const glsl_type *stream_type)
8077*61046927SAndroid Build Coastguard Worker {
8078*61046927SAndroid Build Coastguard Worker    /* Section 8.12 (Geometry Shader Functions) of the GLSL 4.0 spec says:
8079*61046927SAndroid Build Coastguard Worker     *
8080*61046927SAndroid Build Coastguard Worker     *     "Completes the current output primitive on stream stream and starts
8081*61046927SAndroid Build Coastguard Worker     *     a new one. The argument to stream must be a constant integral
8082*61046927SAndroid Build Coastguard Worker     *     expression."
8083*61046927SAndroid Build Coastguard Worker     */
8084*61046927SAndroid Build Coastguard Worker    ir_variable *stream =
8085*61046927SAndroid Build Coastguard Worker       new(mem_ctx) ir_variable(stream_type, "stream", ir_var_const_in);
8086*61046927SAndroid Build Coastguard Worker 
8087*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_void, avail, 1, stream);
8088*61046927SAndroid Build Coastguard Worker 
8089*61046927SAndroid Build Coastguard Worker    body.emit(new(mem_ctx) ir_end_primitive(var_ref(stream)));
8090*61046927SAndroid Build Coastguard Worker 
8091*61046927SAndroid Build Coastguard Worker    return sig;
8092*61046927SAndroid Build Coastguard Worker }
8093*61046927SAndroid Build Coastguard Worker 
8094*61046927SAndroid Build Coastguard Worker ir_function_signature *
_barrier()8095*61046927SAndroid Build Coastguard Worker builtin_builder::_barrier()
8096*61046927SAndroid Build Coastguard Worker {
8097*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_void, barrier_supported, 0);
8098*61046927SAndroid Build Coastguard Worker 
8099*61046927SAndroid Build Coastguard Worker    body.emit(new(mem_ctx) ir_barrier());
8100*61046927SAndroid Build Coastguard Worker    return sig;
8101*61046927SAndroid Build Coastguard Worker }
8102*61046927SAndroid Build Coastguard Worker 
8103*61046927SAndroid Build Coastguard Worker ir_function_signature *
_textureQueryLod(builtin_available_predicate avail,const glsl_type * sampler_type,const glsl_type * coord_type)8104*61046927SAndroid Build Coastguard Worker builtin_builder::_textureQueryLod(builtin_available_predicate avail,
8105*61046927SAndroid Build Coastguard Worker                                   const glsl_type *sampler_type,
8106*61046927SAndroid Build Coastguard Worker                                   const glsl_type *coord_type)
8107*61046927SAndroid Build Coastguard Worker {
8108*61046927SAndroid Build Coastguard Worker    ir_variable *s = in_var(sampler_type, "sampler");
8109*61046927SAndroid Build Coastguard Worker    ir_variable *coord = in_var(coord_type, "coord");
8110*61046927SAndroid Build Coastguard Worker    /* The sampler and coordinate always exist; add optional parameters later. */
8111*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_vec2, avail, 2, s, coord);
8112*61046927SAndroid Build Coastguard Worker 
8113*61046927SAndroid Build Coastguard Worker    ir_texture *tex = new(mem_ctx) ir_texture(ir_lod);
8114*61046927SAndroid Build Coastguard Worker    tex->coordinate = var_ref(coord);
8115*61046927SAndroid Build Coastguard Worker    tex->set_sampler(var_ref(s), &glsl_type_builtin_vec2);
8116*61046927SAndroid Build Coastguard Worker 
8117*61046927SAndroid Build Coastguard Worker    body.emit(ret(tex));
8118*61046927SAndroid Build Coastguard Worker 
8119*61046927SAndroid Build Coastguard Worker    return sig;
8120*61046927SAndroid Build Coastguard Worker }
8121*61046927SAndroid Build Coastguard Worker 
8122*61046927SAndroid Build Coastguard Worker ir_function_signature *
_textureQueryLevels(builtin_available_predicate avail,const glsl_type * sampler_type)8123*61046927SAndroid Build Coastguard Worker builtin_builder::_textureQueryLevels(builtin_available_predicate avail,
8124*61046927SAndroid Build Coastguard Worker                                      const glsl_type *sampler_type)
8125*61046927SAndroid Build Coastguard Worker {
8126*61046927SAndroid Build Coastguard Worker    ir_variable *s = in_var(sampler_type, "sampler");
8127*61046927SAndroid Build Coastguard Worker    const glsl_type *return_type = &glsl_type_builtin_int;
8128*61046927SAndroid Build Coastguard Worker    MAKE_SIG(return_type, avail, 1, s);
8129*61046927SAndroid Build Coastguard Worker 
8130*61046927SAndroid Build Coastguard Worker    ir_texture *tex = new(mem_ctx) ir_texture(ir_query_levels);
8131*61046927SAndroid Build Coastguard Worker    tex->set_sampler(var_ref(s), return_type);
8132*61046927SAndroid Build Coastguard Worker 
8133*61046927SAndroid Build Coastguard Worker    body.emit(ret(tex));
8134*61046927SAndroid Build Coastguard Worker 
8135*61046927SAndroid Build Coastguard Worker    return sig;
8136*61046927SAndroid Build Coastguard Worker }
8137*61046927SAndroid Build Coastguard Worker 
8138*61046927SAndroid Build Coastguard Worker ir_function_signature *
_textureSamplesIdentical(builtin_available_predicate avail,const glsl_type * sampler_type,const glsl_type * coord_type)8139*61046927SAndroid Build Coastguard Worker builtin_builder::_textureSamplesIdentical(builtin_available_predicate avail,
8140*61046927SAndroid Build Coastguard Worker                                           const glsl_type *sampler_type,
8141*61046927SAndroid Build Coastguard Worker                                           const glsl_type *coord_type)
8142*61046927SAndroid Build Coastguard Worker {
8143*61046927SAndroid Build Coastguard Worker    ir_variable *s = in_var(sampler_type, "sampler");
8144*61046927SAndroid Build Coastguard Worker    ir_variable *P = in_var(coord_type, "P");
8145*61046927SAndroid Build Coastguard Worker    const glsl_type *return_type = &glsl_type_builtin_bool;
8146*61046927SAndroid Build Coastguard Worker    MAKE_SIG(return_type, avail, 2, s, P);
8147*61046927SAndroid Build Coastguard Worker 
8148*61046927SAndroid Build Coastguard Worker    ir_texture *tex = new(mem_ctx) ir_texture(ir_samples_identical);
8149*61046927SAndroid Build Coastguard Worker    tex->coordinate = var_ref(P);
8150*61046927SAndroid Build Coastguard Worker    tex->set_sampler(var_ref(s), return_type);
8151*61046927SAndroid Build Coastguard Worker 
8152*61046927SAndroid Build Coastguard Worker    body.emit(ret(tex));
8153*61046927SAndroid Build Coastguard Worker 
8154*61046927SAndroid Build Coastguard Worker    return sig;
8155*61046927SAndroid Build Coastguard Worker }
8156*61046927SAndroid Build Coastguard Worker 
UNOPA(dFdx,ir_unop_dFdx)8157*61046927SAndroid Build Coastguard Worker UNOPA(dFdx, ir_unop_dFdx)
8158*61046927SAndroid Build Coastguard Worker UNOPA(dFdxCoarse, ir_unop_dFdx_coarse)
8159*61046927SAndroid Build Coastguard Worker UNOPA(dFdxFine, ir_unop_dFdx_fine)
8160*61046927SAndroid Build Coastguard Worker UNOPA(dFdy, ir_unop_dFdy)
8161*61046927SAndroid Build Coastguard Worker UNOPA(dFdyCoarse, ir_unop_dFdy_coarse)
8162*61046927SAndroid Build Coastguard Worker UNOPA(dFdyFine, ir_unop_dFdy_fine)
8163*61046927SAndroid Build Coastguard Worker 
8164*61046927SAndroid Build Coastguard Worker ir_function_signature *
8165*61046927SAndroid Build Coastguard Worker builtin_builder::_fwidth(builtin_available_predicate avail,
8166*61046927SAndroid Build Coastguard Worker                          const glsl_type *type)
8167*61046927SAndroid Build Coastguard Worker {
8168*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_var(type, "p");
8169*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, p);
8170*61046927SAndroid Build Coastguard Worker 
8171*61046927SAndroid Build Coastguard Worker    body.emit(ret(add(abs(expr(ir_unop_dFdx, p)), abs(expr(ir_unop_dFdy, p)))));
8172*61046927SAndroid Build Coastguard Worker 
8173*61046927SAndroid Build Coastguard Worker    return sig;
8174*61046927SAndroid Build Coastguard Worker }
8175*61046927SAndroid Build Coastguard Worker 
8176*61046927SAndroid Build Coastguard Worker ir_function_signature *
_fwidthCoarse(builtin_available_predicate avail,const glsl_type * type)8177*61046927SAndroid Build Coastguard Worker builtin_builder::_fwidthCoarse(builtin_available_predicate avail,
8178*61046927SAndroid Build Coastguard Worker                                const glsl_type *type)
8179*61046927SAndroid Build Coastguard Worker {
8180*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_var(type, "p");
8181*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, p);
8182*61046927SAndroid Build Coastguard Worker 
8183*61046927SAndroid Build Coastguard Worker    body.emit(ret(add(abs(expr(ir_unop_dFdx_coarse, p)),
8184*61046927SAndroid Build Coastguard Worker                      abs(expr(ir_unop_dFdy_coarse, p)))));
8185*61046927SAndroid Build Coastguard Worker 
8186*61046927SAndroid Build Coastguard Worker    return sig;
8187*61046927SAndroid Build Coastguard Worker }
8188*61046927SAndroid Build Coastguard Worker 
8189*61046927SAndroid Build Coastguard Worker ir_function_signature *
_fwidthFine(builtin_available_predicate avail,const glsl_type * type)8190*61046927SAndroid Build Coastguard Worker builtin_builder::_fwidthFine(builtin_available_predicate avail,
8191*61046927SAndroid Build Coastguard Worker                              const glsl_type *type)
8192*61046927SAndroid Build Coastguard Worker {
8193*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_var(type, "p");
8194*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, p);
8195*61046927SAndroid Build Coastguard Worker 
8196*61046927SAndroid Build Coastguard Worker    body.emit(ret(add(abs(expr(ir_unop_dFdx_fine, p)),
8197*61046927SAndroid Build Coastguard Worker                      abs(expr(ir_unop_dFdy_fine, p)))));
8198*61046927SAndroid Build Coastguard Worker 
8199*61046927SAndroid Build Coastguard Worker    return sig;
8200*61046927SAndroid Build Coastguard Worker }
8201*61046927SAndroid Build Coastguard Worker 
8202*61046927SAndroid Build Coastguard Worker ir_function_signature *
_noise1(const glsl_type * type)8203*61046927SAndroid Build Coastguard Worker builtin_builder::_noise1(const glsl_type *type)
8204*61046927SAndroid Build Coastguard Worker {
8205*61046927SAndroid Build Coastguard Worker    /* From the GLSL 4.60 specification:
8206*61046927SAndroid Build Coastguard Worker     *
8207*61046927SAndroid Build Coastguard Worker     *    "The noise functions noise1, noise2, noise3, and noise4 have been
8208*61046927SAndroid Build Coastguard Worker     *    deprecated starting with version 4.4 of GLSL. When not generating
8209*61046927SAndroid Build Coastguard Worker     *    SPIR-V they are defined to return the value 0.0 or a vector whose
8210*61046927SAndroid Build Coastguard Worker     *    components are all 0.0. When generating SPIR-V the noise functions
8211*61046927SAndroid Build Coastguard Worker     *    are not declared and may not be used."
8212*61046927SAndroid Build Coastguard Worker     *
8213*61046927SAndroid Build Coastguard Worker     * In earlier versions of the GLSL specification attempt to define some
8214*61046927SAndroid Build Coastguard Worker     * sort of statistical noise function.  However, the function's
8215*61046927SAndroid Build Coastguard Worker     * characteristics have always been such that always returning 0 is
8216*61046927SAndroid Build Coastguard Worker     * valid and Mesa has always returned 0 for noise on most drivers.
8217*61046927SAndroid Build Coastguard Worker     */
8218*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_var(type, "p");
8219*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_float, v110, 1, p);
8220*61046927SAndroid Build Coastguard Worker    body.emit(ret(imm(&glsl_type_builtin_float, ir_constant_data())));
8221*61046927SAndroid Build Coastguard Worker    return sig;
8222*61046927SAndroid Build Coastguard Worker }
8223*61046927SAndroid Build Coastguard Worker 
8224*61046927SAndroid Build Coastguard Worker ir_function_signature *
_noise2(const glsl_type * type)8225*61046927SAndroid Build Coastguard Worker builtin_builder::_noise2(const glsl_type *type)
8226*61046927SAndroid Build Coastguard Worker {
8227*61046927SAndroid Build Coastguard Worker    /* See builtin_builder::_noise1 */
8228*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_var(type, "p");
8229*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_vec2, v110, 1, p);
8230*61046927SAndroid Build Coastguard Worker    body.emit(ret(imm(&glsl_type_builtin_vec2, ir_constant_data())));
8231*61046927SAndroid Build Coastguard Worker    return sig;
8232*61046927SAndroid Build Coastguard Worker }
8233*61046927SAndroid Build Coastguard Worker 
8234*61046927SAndroid Build Coastguard Worker ir_function_signature *
_noise3(const glsl_type * type)8235*61046927SAndroid Build Coastguard Worker builtin_builder::_noise3(const glsl_type *type)
8236*61046927SAndroid Build Coastguard Worker {
8237*61046927SAndroid Build Coastguard Worker    /* See builtin_builder::_noise1 */
8238*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_var(type, "p");
8239*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_vec3, v110, 1, p);
8240*61046927SAndroid Build Coastguard Worker    body.emit(ret(imm(&glsl_type_builtin_vec3, ir_constant_data())));
8241*61046927SAndroid Build Coastguard Worker    return sig;
8242*61046927SAndroid Build Coastguard Worker }
8243*61046927SAndroid Build Coastguard Worker 
8244*61046927SAndroid Build Coastguard Worker ir_function_signature *
_noise4(const glsl_type * type)8245*61046927SAndroid Build Coastguard Worker builtin_builder::_noise4(const glsl_type *type)
8246*61046927SAndroid Build Coastguard Worker {
8247*61046927SAndroid Build Coastguard Worker    /* See builtin_builder::_noise1 */
8248*61046927SAndroid Build Coastguard Worker    ir_variable *p = in_var(type, "p");
8249*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_vec4, v110, 1, p);
8250*61046927SAndroid Build Coastguard Worker    body.emit(ret(imm(&glsl_type_builtin_vec4, ir_constant_data())));
8251*61046927SAndroid Build Coastguard Worker    return sig;
8252*61046927SAndroid Build Coastguard Worker }
8253*61046927SAndroid Build Coastguard Worker 
8254*61046927SAndroid Build Coastguard Worker ir_function_signature *
_bitfieldExtract(const glsl_type * type)8255*61046927SAndroid Build Coastguard Worker builtin_builder::_bitfieldExtract(const glsl_type *type)
8256*61046927SAndroid Build Coastguard Worker {
8257*61046927SAndroid Build Coastguard Worker    bool is_uint = type->base_type == GLSL_TYPE_UINT;
8258*61046927SAndroid Build Coastguard Worker    ir_variable *value  = in_var(type, "value");
8259*61046927SAndroid Build Coastguard Worker    ir_variable *offset = in_var(&glsl_type_builtin_int, "offset");
8260*61046927SAndroid Build Coastguard Worker    ir_variable *bits   = in_var(&glsl_type_builtin_int, "bits");
8261*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, gpu_shader5_or_es31_or_integer_functions, 3, value, offset,
8262*61046927SAndroid Build Coastguard Worker             bits);
8263*61046927SAndroid Build Coastguard Worker 
8264*61046927SAndroid Build Coastguard Worker    operand cast_offset = is_uint ? i2u(offset) : operand(offset);
8265*61046927SAndroid Build Coastguard Worker    operand cast_bits = is_uint ? i2u(bits) : operand(bits);
8266*61046927SAndroid Build Coastguard Worker 
8267*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_triop_bitfield_extract, value,
8268*61046927SAndroid Build Coastguard Worker       swizzle(cast_offset, SWIZZLE_XXXX, type->vector_elements),
8269*61046927SAndroid Build Coastguard Worker       swizzle(cast_bits, SWIZZLE_XXXX, type->vector_elements))));
8270*61046927SAndroid Build Coastguard Worker 
8271*61046927SAndroid Build Coastguard Worker    return sig;
8272*61046927SAndroid Build Coastguard Worker }
8273*61046927SAndroid Build Coastguard Worker 
8274*61046927SAndroid Build Coastguard Worker ir_function_signature *
_bitfieldInsert(const glsl_type * type)8275*61046927SAndroid Build Coastguard Worker builtin_builder::_bitfieldInsert(const glsl_type *type)
8276*61046927SAndroid Build Coastguard Worker {
8277*61046927SAndroid Build Coastguard Worker    bool is_uint = type->base_type == GLSL_TYPE_UINT;
8278*61046927SAndroid Build Coastguard Worker    ir_variable *base   = in_var(type, "base");
8279*61046927SAndroid Build Coastguard Worker    ir_variable *insert = in_var(type, "insert");
8280*61046927SAndroid Build Coastguard Worker    ir_variable *offset = in_var(&glsl_type_builtin_int, "offset");
8281*61046927SAndroid Build Coastguard Worker    ir_variable *bits   = in_var(&glsl_type_builtin_int, "bits");
8282*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, gpu_shader5_or_es31_or_integer_functions, 4, base, insert,
8283*61046927SAndroid Build Coastguard Worker             offset, bits);
8284*61046927SAndroid Build Coastguard Worker 
8285*61046927SAndroid Build Coastguard Worker    operand cast_offset = is_uint ? i2u(offset) : operand(offset);
8286*61046927SAndroid Build Coastguard Worker    operand cast_bits = is_uint ? i2u(bits) : operand(bits);
8287*61046927SAndroid Build Coastguard Worker 
8288*61046927SAndroid Build Coastguard Worker    body.emit(ret(bitfield_insert(base, insert,
8289*61046927SAndroid Build Coastguard Worker       swizzle(cast_offset, SWIZZLE_XXXX, type->vector_elements),
8290*61046927SAndroid Build Coastguard Worker       swizzle(cast_bits, SWIZZLE_XXXX, type->vector_elements))));
8291*61046927SAndroid Build Coastguard Worker 
8292*61046927SAndroid Build Coastguard Worker    return sig;
8293*61046927SAndroid Build Coastguard Worker }
8294*61046927SAndroid Build Coastguard Worker 
8295*61046927SAndroid Build Coastguard Worker ir_function_signature *
_bitfieldReverse(const glsl_type * type)8296*61046927SAndroid Build Coastguard Worker builtin_builder::_bitfieldReverse(const glsl_type *type)
8297*61046927SAndroid Build Coastguard Worker {
8298*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_highp_var(type, "x");
8299*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, gpu_shader5_or_es31_or_integer_functions, 1, x);
8300*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
8301*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_bitfield_reverse, x)));
8302*61046927SAndroid Build Coastguard Worker    return sig;
8303*61046927SAndroid Build Coastguard Worker }
8304*61046927SAndroid Build Coastguard Worker 
8305*61046927SAndroid Build Coastguard Worker ir_function_signature *
_bitCount(const glsl_type * type)8306*61046927SAndroid Build Coastguard Worker builtin_builder::_bitCount(const glsl_type *type)
8307*61046927SAndroid Build Coastguard Worker {
8308*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
8309*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_ivec_type(type->vector_elements), gpu_shader5_or_es31_or_integer_functions, 1, x);
8310*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_LOW;
8311*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_bit_count, x)));
8312*61046927SAndroid Build Coastguard Worker    return sig;
8313*61046927SAndroid Build Coastguard Worker }
8314*61046927SAndroid Build Coastguard Worker 
8315*61046927SAndroid Build Coastguard Worker ir_function_signature *
_findLSB(const glsl_type * type)8316*61046927SAndroid Build Coastguard Worker builtin_builder::_findLSB(const glsl_type *type)
8317*61046927SAndroid Build Coastguard Worker {
8318*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_highp_var(type, "x");
8319*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_ivec_type(type->vector_elements), gpu_shader5_or_es31_or_integer_functions, 1, x);
8320*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_LOW;
8321*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_find_lsb, x)));
8322*61046927SAndroid Build Coastguard Worker    return sig;
8323*61046927SAndroid Build Coastguard Worker }
8324*61046927SAndroid Build Coastguard Worker 
8325*61046927SAndroid Build Coastguard Worker ir_function_signature *
_findMSB(const glsl_type * type)8326*61046927SAndroid Build Coastguard Worker builtin_builder::_findMSB(const glsl_type *type)
8327*61046927SAndroid Build Coastguard Worker {
8328*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_highp_var(type, "x");
8329*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_ivec_type(type->vector_elements), gpu_shader5_or_es31_or_integer_functions, 1, x);
8330*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_LOW;
8331*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_find_msb, x)));
8332*61046927SAndroid Build Coastguard Worker    return sig;
8333*61046927SAndroid Build Coastguard Worker }
8334*61046927SAndroid Build Coastguard Worker 
8335*61046927SAndroid Build Coastguard Worker ir_function_signature *
_countLeadingZeros(builtin_available_predicate avail,const glsl_type * type)8336*61046927SAndroid Build Coastguard Worker builtin_builder::_countLeadingZeros(builtin_available_predicate avail,
8337*61046927SAndroid Build Coastguard Worker                                     const glsl_type *type)
8338*61046927SAndroid Build Coastguard Worker {
8339*61046927SAndroid Build Coastguard Worker    return unop(avail, ir_unop_clz,
8340*61046927SAndroid Build Coastguard Worker                glsl_uvec_type(type->vector_elements), type);
8341*61046927SAndroid Build Coastguard Worker }
8342*61046927SAndroid Build Coastguard Worker 
8343*61046927SAndroid Build Coastguard Worker ir_function_signature *
_countTrailingZeros(builtin_available_predicate avail,const glsl_type * type)8344*61046927SAndroid Build Coastguard Worker builtin_builder::_countTrailingZeros(builtin_available_predicate avail,
8345*61046927SAndroid Build Coastguard Worker                                      const glsl_type *type)
8346*61046927SAndroid Build Coastguard Worker {
8347*61046927SAndroid Build Coastguard Worker    ir_variable *a = in_var(type, "a");
8348*61046927SAndroid Build Coastguard Worker    MAKE_SIG(glsl_uvec_type(type->vector_elements), avail, 1, a);
8349*61046927SAndroid Build Coastguard Worker 
8350*61046927SAndroid Build Coastguard Worker    body.emit(ret(ir_builder::min2(
8351*61046927SAndroid Build Coastguard Worker                     ir_builder::i2u(ir_builder::expr(ir_unop_find_lsb, a)),
8352*61046927SAndroid Build Coastguard Worker                     imm(32u))));
8353*61046927SAndroid Build Coastguard Worker 
8354*61046927SAndroid Build Coastguard Worker    return sig;
8355*61046927SAndroid Build Coastguard Worker }
8356*61046927SAndroid Build Coastguard Worker 
8357*61046927SAndroid Build Coastguard Worker ir_function_signature *
_fma(builtin_available_predicate avail,const glsl_type * type)8358*61046927SAndroid Build Coastguard Worker builtin_builder::_fma(builtin_available_predicate avail, const glsl_type *type)
8359*61046927SAndroid Build Coastguard Worker {
8360*61046927SAndroid Build Coastguard Worker    ir_variable *a = in_var(type, "a");
8361*61046927SAndroid Build Coastguard Worker    ir_variable *b = in_var(type, "b");
8362*61046927SAndroid Build Coastguard Worker    ir_variable *c = in_var(type, "c");
8363*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 3, a, b, c);
8364*61046927SAndroid Build Coastguard Worker 
8365*61046927SAndroid Build Coastguard Worker    body.emit(ret(ir_builder::fma(a, b, c)));
8366*61046927SAndroid Build Coastguard Worker 
8367*61046927SAndroid Build Coastguard Worker    return sig;
8368*61046927SAndroid Build Coastguard Worker }
8369*61046927SAndroid Build Coastguard Worker 
8370*61046927SAndroid Build Coastguard Worker ir_function_signature *
_ldexp(const glsl_type * x_type,const glsl_type * exp_type)8371*61046927SAndroid Build Coastguard Worker builtin_builder::_ldexp(const glsl_type *x_type, const glsl_type *exp_type)
8372*61046927SAndroid Build Coastguard Worker {
8373*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_highp_var(x_type, "x");
8374*61046927SAndroid Build Coastguard Worker    ir_variable *y = in_highp_var(exp_type, "y");
8375*61046927SAndroid Build Coastguard Worker    builtin_available_predicate avail = glsl_type_is_double(x_type) ? fp64 :
8376*61046927SAndroid Build Coastguard Worker       (glsl_type_is_float_16(x_type) ?
8377*61046927SAndroid Build Coastguard Worker           gpu_shader_half_float : gpu_shader5_or_es31_or_integer_functions);
8378*61046927SAndroid Build Coastguard Worker 
8379*61046927SAndroid Build Coastguard Worker    MAKE_SIG(x_type, avail, 2, x, y);
8380*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
8381*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_binop_ldexp, x, y)));
8382*61046927SAndroid Build Coastguard Worker    return sig;
8383*61046927SAndroid Build Coastguard Worker }
8384*61046927SAndroid Build Coastguard Worker 
8385*61046927SAndroid Build Coastguard Worker ir_function_signature *
_frexp(const glsl_type * x_type,const glsl_type * exp_type)8386*61046927SAndroid Build Coastguard Worker builtin_builder::_frexp(const glsl_type *x_type, const glsl_type *exp_type)
8387*61046927SAndroid Build Coastguard Worker {
8388*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_highp_var(x_type, "x");
8389*61046927SAndroid Build Coastguard Worker    ir_variable *exponent = out_var(exp_type, "exp");
8390*61046927SAndroid Build Coastguard Worker    builtin_available_predicate avail = glsl_type_is_double(x_type) ? fp64 :
8391*61046927SAndroid Build Coastguard Worker       (glsl_type_is_float_16(x_type) ?
8392*61046927SAndroid Build Coastguard Worker           gpu_shader_half_float : gpu_shader5_or_es31_or_integer_functions);
8393*61046927SAndroid Build Coastguard Worker    MAKE_SIG(x_type, avail, 2, x, exponent);
8394*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
8395*61046927SAndroid Build Coastguard Worker 
8396*61046927SAndroid Build Coastguard Worker    body.emit(assign(exponent, expr(ir_unop_frexp_exp, x)));
8397*61046927SAndroid Build Coastguard Worker 
8398*61046927SAndroid Build Coastguard Worker    body.emit(ret(expr(ir_unop_frexp_sig, x)));
8399*61046927SAndroid Build Coastguard Worker    return sig;
8400*61046927SAndroid Build Coastguard Worker }
8401*61046927SAndroid Build Coastguard Worker 
8402*61046927SAndroid Build Coastguard Worker ir_function_signature *
_uaddCarry(const glsl_type * type)8403*61046927SAndroid Build Coastguard Worker builtin_builder::_uaddCarry(const glsl_type *type)
8404*61046927SAndroid Build Coastguard Worker {
8405*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_highp_var(type, "x");
8406*61046927SAndroid Build Coastguard Worker    ir_variable *y = in_highp_var(type, "y");
8407*61046927SAndroid Build Coastguard Worker    ir_variable *carry = out_lowp_var(type, "carry");
8408*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, gpu_shader5_or_es31_or_integer_functions, 3, x, y, carry);
8409*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
8410*61046927SAndroid Build Coastguard Worker 
8411*61046927SAndroid Build Coastguard Worker    body.emit(assign(carry, ir_builder::carry(x, y)));
8412*61046927SAndroid Build Coastguard Worker    body.emit(ret(add(x, y)));
8413*61046927SAndroid Build Coastguard Worker 
8414*61046927SAndroid Build Coastguard Worker    return sig;
8415*61046927SAndroid Build Coastguard Worker }
8416*61046927SAndroid Build Coastguard Worker 
8417*61046927SAndroid Build Coastguard Worker ir_function_signature *
_addSaturate(builtin_available_predicate avail,const glsl_type * type)8418*61046927SAndroid Build Coastguard Worker builtin_builder::_addSaturate(builtin_available_predicate avail,
8419*61046927SAndroid Build Coastguard Worker                               const glsl_type *type)
8420*61046927SAndroid Build Coastguard Worker {
8421*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_add_sat, type, type, type);
8422*61046927SAndroid Build Coastguard Worker }
8423*61046927SAndroid Build Coastguard Worker 
8424*61046927SAndroid Build Coastguard Worker ir_function_signature *
_usubBorrow(const glsl_type * type)8425*61046927SAndroid Build Coastguard Worker builtin_builder::_usubBorrow(const glsl_type *type)
8426*61046927SAndroid Build Coastguard Worker {
8427*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_highp_var(type, "x");
8428*61046927SAndroid Build Coastguard Worker    ir_variable *y = in_highp_var(type, "y");
8429*61046927SAndroid Build Coastguard Worker    ir_variable *borrow = out_lowp_var(type, "borrow");
8430*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, gpu_shader5_or_es31_or_integer_functions, 3, x, y, borrow);
8431*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
8432*61046927SAndroid Build Coastguard Worker 
8433*61046927SAndroid Build Coastguard Worker    body.emit(assign(borrow, ir_builder::borrow(x, y)));
8434*61046927SAndroid Build Coastguard Worker    body.emit(ret(sub(x, y)));
8435*61046927SAndroid Build Coastguard Worker 
8436*61046927SAndroid Build Coastguard Worker    return sig;
8437*61046927SAndroid Build Coastguard Worker }
8438*61046927SAndroid Build Coastguard Worker 
8439*61046927SAndroid Build Coastguard Worker ir_function_signature *
_subtractSaturate(builtin_available_predicate avail,const glsl_type * type)8440*61046927SAndroid Build Coastguard Worker builtin_builder::_subtractSaturate(builtin_available_predicate avail,
8441*61046927SAndroid Build Coastguard Worker                                    const glsl_type *type)
8442*61046927SAndroid Build Coastguard Worker {
8443*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_sub_sat, type, type, type);
8444*61046927SAndroid Build Coastguard Worker }
8445*61046927SAndroid Build Coastguard Worker 
8446*61046927SAndroid Build Coastguard Worker ir_function_signature *
_absoluteDifference(builtin_available_predicate avail,const glsl_type * type)8447*61046927SAndroid Build Coastguard Worker builtin_builder::_absoluteDifference(builtin_available_predicate avail,
8448*61046927SAndroid Build Coastguard Worker                                      const glsl_type *type)
8449*61046927SAndroid Build Coastguard Worker {
8450*61046927SAndroid Build Coastguard Worker    /* absoluteDifference returns an unsigned type that has the same number of
8451*61046927SAndroid Build Coastguard Worker     * bits and number of vector elements as the type of the operands.
8452*61046927SAndroid Build Coastguard Worker     */
8453*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_abs_sub,
8454*61046927SAndroid Build Coastguard Worker                 glsl_simple_type(glsl_unsigned_base_type_of(type->base_type),
8455*61046927SAndroid Build Coastguard Worker                                  type->vector_elements, 1),
8456*61046927SAndroid Build Coastguard Worker                 type, type);
8457*61046927SAndroid Build Coastguard Worker }
8458*61046927SAndroid Build Coastguard Worker 
8459*61046927SAndroid Build Coastguard Worker ir_function_signature *
_average(builtin_available_predicate avail,const glsl_type * type)8460*61046927SAndroid Build Coastguard Worker builtin_builder::_average(builtin_available_predicate avail,
8461*61046927SAndroid Build Coastguard Worker                           const glsl_type *type)
8462*61046927SAndroid Build Coastguard Worker {
8463*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_avg, type, type, type);
8464*61046927SAndroid Build Coastguard Worker }
8465*61046927SAndroid Build Coastguard Worker 
8466*61046927SAndroid Build Coastguard Worker ir_function_signature *
_averageRounded(builtin_available_predicate avail,const glsl_type * type)8467*61046927SAndroid Build Coastguard Worker builtin_builder::_averageRounded(builtin_available_predicate avail,
8468*61046927SAndroid Build Coastguard Worker                                  const glsl_type *type)
8469*61046927SAndroid Build Coastguard Worker {
8470*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_avg_round, type, type, type);
8471*61046927SAndroid Build Coastguard Worker }
8472*61046927SAndroid Build Coastguard Worker 
8473*61046927SAndroid Build Coastguard Worker /**
8474*61046927SAndroid Build Coastguard Worker  * For both imulExtended() and umulExtended() built-ins.
8475*61046927SAndroid Build Coastguard Worker  */
8476*61046927SAndroid Build Coastguard Worker ir_function_signature *
_mulExtended(const glsl_type * type)8477*61046927SAndroid Build Coastguard Worker builtin_builder::_mulExtended(const glsl_type *type)
8478*61046927SAndroid Build Coastguard Worker {
8479*61046927SAndroid Build Coastguard Worker    const glsl_type *mul_type, *unpack_type;
8480*61046927SAndroid Build Coastguard Worker    ir_expression_operation unpack_op;
8481*61046927SAndroid Build Coastguard Worker 
8482*61046927SAndroid Build Coastguard Worker    if (type->base_type == GLSL_TYPE_INT) {
8483*61046927SAndroid Build Coastguard Worker       unpack_op = ir_unop_unpack_int_2x32;
8484*61046927SAndroid Build Coastguard Worker       mul_type = glsl_simple_type(GLSL_TYPE_INT64, type->vector_elements, 1);
8485*61046927SAndroid Build Coastguard Worker       unpack_type = &glsl_type_builtin_ivec2;
8486*61046927SAndroid Build Coastguard Worker    } else {
8487*61046927SAndroid Build Coastguard Worker       unpack_op = ir_unop_unpack_uint_2x32;
8488*61046927SAndroid Build Coastguard Worker       mul_type = glsl_simple_type(GLSL_TYPE_UINT64, type->vector_elements, 1);
8489*61046927SAndroid Build Coastguard Worker       unpack_type = &glsl_type_builtin_uvec2;
8490*61046927SAndroid Build Coastguard Worker    }
8491*61046927SAndroid Build Coastguard Worker 
8492*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_highp_var(type, "x");
8493*61046927SAndroid Build Coastguard Worker    ir_variable *y = in_highp_var(type, "y");
8494*61046927SAndroid Build Coastguard Worker    ir_variable *msb = out_highp_var(type, "msb");
8495*61046927SAndroid Build Coastguard Worker    ir_variable *lsb = out_highp_var(type, "lsb");
8496*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_void, gpu_shader5_or_es31_or_integer_functions, 4, x, y, msb, lsb);
8497*61046927SAndroid Build Coastguard Worker 
8498*61046927SAndroid Build Coastguard Worker    ir_variable *unpack_val = body.make_temp(unpack_type, "_unpack_val");
8499*61046927SAndroid Build Coastguard Worker 
8500*61046927SAndroid Build Coastguard Worker    ir_expression *mul_res = new(mem_ctx) ir_expression(ir_binop_mul, mul_type,
8501*61046927SAndroid Build Coastguard Worker                                                        new(mem_ctx)ir_dereference_variable(x),
8502*61046927SAndroid Build Coastguard Worker                                                        new(mem_ctx)ir_dereference_variable(y));
8503*61046927SAndroid Build Coastguard Worker 
8504*61046927SAndroid Build Coastguard Worker    if (type->vector_elements == 1) {
8505*61046927SAndroid Build Coastguard Worker       body.emit(assign(unpack_val, expr(unpack_op, mul_res)));
8506*61046927SAndroid Build Coastguard Worker       body.emit(assign(msb, swizzle_y(unpack_val)));
8507*61046927SAndroid Build Coastguard Worker       body.emit(assign(lsb, swizzle_x(unpack_val)));
8508*61046927SAndroid Build Coastguard Worker    } else {
8509*61046927SAndroid Build Coastguard Worker       for (int i = 0; i < type->vector_elements; i++) {
8510*61046927SAndroid Build Coastguard Worker          body.emit(assign(unpack_val, expr(unpack_op, swizzle(mul_res, i, 1))));
8511*61046927SAndroid Build Coastguard Worker          body.emit(assign(array_ref(msb, i), swizzle_y(unpack_val)));
8512*61046927SAndroid Build Coastguard Worker          body.emit(assign(array_ref(lsb, i), swizzle_x(unpack_val)));
8513*61046927SAndroid Build Coastguard Worker       }
8514*61046927SAndroid Build Coastguard Worker    }
8515*61046927SAndroid Build Coastguard Worker 
8516*61046927SAndroid Build Coastguard Worker    return sig;
8517*61046927SAndroid Build Coastguard Worker }
8518*61046927SAndroid Build Coastguard Worker 
8519*61046927SAndroid Build Coastguard Worker ir_function_signature *
_multiply32x16(builtin_available_predicate avail,const glsl_type * type)8520*61046927SAndroid Build Coastguard Worker builtin_builder::_multiply32x16(builtin_available_predicate avail,
8521*61046927SAndroid Build Coastguard Worker                                 const glsl_type *type)
8522*61046927SAndroid Build Coastguard Worker {
8523*61046927SAndroid Build Coastguard Worker    return binop(avail, ir_binop_mul_32x16, type, type, type);
8524*61046927SAndroid Build Coastguard Worker }
8525*61046927SAndroid Build Coastguard Worker 
8526*61046927SAndroid Build Coastguard Worker ir_function_signature *
_interpolateAtCentroid(builtin_available_predicate avail,const glsl_type * type)8527*61046927SAndroid Build Coastguard Worker builtin_builder::_interpolateAtCentroid(builtin_available_predicate avail,
8528*61046927SAndroid Build Coastguard Worker                                         const glsl_type *type)
8529*61046927SAndroid Build Coastguard Worker {
8530*61046927SAndroid Build Coastguard Worker    ir_variable *interpolant = in_var(type, "interpolant");
8531*61046927SAndroid Build Coastguard Worker    interpolant->data.must_be_shader_input = 1;
8532*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, fs_interpolate_at, 1, interpolant);
8533*61046927SAndroid Build Coastguard Worker 
8534*61046927SAndroid Build Coastguard Worker    body.emit(ret(interpolate_at_centroid(interpolant)));
8535*61046927SAndroid Build Coastguard Worker 
8536*61046927SAndroid Build Coastguard Worker    return sig;
8537*61046927SAndroid Build Coastguard Worker }
8538*61046927SAndroid Build Coastguard Worker 
8539*61046927SAndroid Build Coastguard Worker ir_function_signature *
_interpolateAtOffset(builtin_available_predicate avail,const glsl_type * type)8540*61046927SAndroid Build Coastguard Worker builtin_builder::_interpolateAtOffset(builtin_available_predicate avail,
8541*61046927SAndroid Build Coastguard Worker                                       const glsl_type *type)
8542*61046927SAndroid Build Coastguard Worker {
8543*61046927SAndroid Build Coastguard Worker    ir_variable *interpolant = in_var(type, "interpolant");
8544*61046927SAndroid Build Coastguard Worker    interpolant->data.must_be_shader_input = 1;
8545*61046927SAndroid Build Coastguard Worker    ir_variable *offset = in_var(glsl_type_is_float_16(type) ? &glsl_type_builtin_f16vec2 : &glsl_type_builtin_vec2, "offset");
8546*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, fs_interpolate_at, 2, interpolant, offset);
8547*61046927SAndroid Build Coastguard Worker 
8548*61046927SAndroid Build Coastguard Worker    body.emit(ret(interpolate_at_offset(interpolant, offset)));
8549*61046927SAndroid Build Coastguard Worker 
8550*61046927SAndroid Build Coastguard Worker    return sig;
8551*61046927SAndroid Build Coastguard Worker }
8552*61046927SAndroid Build Coastguard Worker 
8553*61046927SAndroid Build Coastguard Worker ir_function_signature *
_interpolateAtSample(builtin_available_predicate avail,const glsl_type * type)8554*61046927SAndroid Build Coastguard Worker builtin_builder::_interpolateAtSample(builtin_available_predicate avail,
8555*61046927SAndroid Build Coastguard Worker                                       const glsl_type *type)
8556*61046927SAndroid Build Coastguard Worker {
8557*61046927SAndroid Build Coastguard Worker    ir_variable *interpolant = in_var(type, "interpolant");
8558*61046927SAndroid Build Coastguard Worker    interpolant->data.must_be_shader_input = 1;
8559*61046927SAndroid Build Coastguard Worker    ir_variable *sample_num = in_var(&glsl_type_builtin_int, "sample_num");
8560*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, fs_interpolate_at, 2, interpolant, sample_num);
8561*61046927SAndroid Build Coastguard Worker 
8562*61046927SAndroid Build Coastguard Worker    body.emit(ret(interpolate_at_sample(interpolant, sample_num)));
8563*61046927SAndroid Build Coastguard Worker 
8564*61046927SAndroid Build Coastguard Worker    return sig;
8565*61046927SAndroid Build Coastguard Worker }
8566*61046927SAndroid Build Coastguard Worker 
8567*61046927SAndroid Build Coastguard Worker /* The highp isn't specified in the built-in function descriptions, but in the
8568*61046927SAndroid Build Coastguard Worker  * atomic counter description: "The default precision of all atomic types is
8569*61046927SAndroid Build Coastguard Worker  * highp. It is an error to declare an atomic type with a different precision or
8570*61046927SAndroid Build Coastguard Worker  * to specify the default precision for an atomic type to be lowp or mediump."
8571*61046927SAndroid Build Coastguard Worker  */
8572*61046927SAndroid Build Coastguard Worker ir_function_signature *
_atomic_counter_intrinsic(builtin_available_predicate avail,enum ir_intrinsic_id id)8573*61046927SAndroid Build Coastguard Worker builtin_builder::_atomic_counter_intrinsic(builtin_available_predicate avail,
8574*61046927SAndroid Build Coastguard Worker                                            enum ir_intrinsic_id id)
8575*61046927SAndroid Build Coastguard Worker {
8576*61046927SAndroid Build Coastguard Worker    ir_variable *counter = in_highp_var(&glsl_type_builtin_atomic_uint, "counter");
8577*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_uint, id, avail, 1, counter);
8578*61046927SAndroid Build Coastguard Worker    return sig;
8579*61046927SAndroid Build Coastguard Worker }
8580*61046927SAndroid Build Coastguard Worker 
8581*61046927SAndroid Build Coastguard Worker ir_function_signature *
_atomic_counter_intrinsic1(builtin_available_predicate avail,enum ir_intrinsic_id id)8582*61046927SAndroid Build Coastguard Worker builtin_builder::_atomic_counter_intrinsic1(builtin_available_predicate avail,
8583*61046927SAndroid Build Coastguard Worker                                             enum ir_intrinsic_id id)
8584*61046927SAndroid Build Coastguard Worker {
8585*61046927SAndroid Build Coastguard Worker    ir_variable *counter = in_highp_var(&glsl_type_builtin_atomic_uint, "counter");
8586*61046927SAndroid Build Coastguard Worker    ir_variable *data = in_var(&glsl_type_builtin_uint, "data");
8587*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_uint, id, avail, 2, counter, data);
8588*61046927SAndroid Build Coastguard Worker    return sig;
8589*61046927SAndroid Build Coastguard Worker }
8590*61046927SAndroid Build Coastguard Worker 
8591*61046927SAndroid Build Coastguard Worker ir_function_signature *
_atomic_counter_intrinsic2(builtin_available_predicate avail,enum ir_intrinsic_id id)8592*61046927SAndroid Build Coastguard Worker builtin_builder::_atomic_counter_intrinsic2(builtin_available_predicate avail,
8593*61046927SAndroid Build Coastguard Worker                                             enum ir_intrinsic_id id)
8594*61046927SAndroid Build Coastguard Worker {
8595*61046927SAndroid Build Coastguard Worker    ir_variable *counter = in_highp_var(&glsl_type_builtin_atomic_uint, "counter");
8596*61046927SAndroid Build Coastguard Worker    ir_variable *compare = in_var(&glsl_type_builtin_uint, "compare");
8597*61046927SAndroid Build Coastguard Worker    ir_variable *data = in_var(&glsl_type_builtin_uint, "data");
8598*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_uint, id, avail, 3, counter, compare, data);
8599*61046927SAndroid Build Coastguard Worker    return sig;
8600*61046927SAndroid Build Coastguard Worker }
8601*61046927SAndroid Build Coastguard Worker 
8602*61046927SAndroid Build Coastguard Worker ir_function_signature *
_atomic_intrinsic2(builtin_available_predicate avail,const glsl_type * type,enum ir_intrinsic_id id)8603*61046927SAndroid Build Coastguard Worker builtin_builder::_atomic_intrinsic2(builtin_available_predicate avail,
8604*61046927SAndroid Build Coastguard Worker                                     const glsl_type *type,
8605*61046927SAndroid Build Coastguard Worker                                     enum ir_intrinsic_id id)
8606*61046927SAndroid Build Coastguard Worker {
8607*61046927SAndroid Build Coastguard Worker    ir_variable *atomic = in_var(type, "atomic");
8608*61046927SAndroid Build Coastguard Worker    ir_variable *data = in_var(type, "data");
8609*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, id, avail, 2, atomic, data);
8610*61046927SAndroid Build Coastguard Worker    return sig;
8611*61046927SAndroid Build Coastguard Worker }
8612*61046927SAndroid Build Coastguard Worker 
8613*61046927SAndroid Build Coastguard Worker ir_function_signature *
_atomic_intrinsic3(builtin_available_predicate avail,const glsl_type * type,enum ir_intrinsic_id id)8614*61046927SAndroid Build Coastguard Worker builtin_builder::_atomic_intrinsic3(builtin_available_predicate avail,
8615*61046927SAndroid Build Coastguard Worker                                     const glsl_type *type,
8616*61046927SAndroid Build Coastguard Worker                                     enum ir_intrinsic_id id)
8617*61046927SAndroid Build Coastguard Worker {
8618*61046927SAndroid Build Coastguard Worker    ir_variable *atomic = in_var(type, "atomic");
8619*61046927SAndroid Build Coastguard Worker    ir_variable *data1 = in_var(type, "data1");
8620*61046927SAndroid Build Coastguard Worker    ir_variable *data2 = in_var(type, "data2");
8621*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, id, avail, 3, atomic, data1, data2);
8622*61046927SAndroid Build Coastguard Worker    return sig;
8623*61046927SAndroid Build Coastguard Worker }
8624*61046927SAndroid Build Coastguard Worker 
8625*61046927SAndroid Build Coastguard Worker ir_function_signature *
_atomic_counter_op(const char * intrinsic,builtin_available_predicate avail)8626*61046927SAndroid Build Coastguard Worker builtin_builder::_atomic_counter_op(const char *intrinsic,
8627*61046927SAndroid Build Coastguard Worker                                     builtin_available_predicate avail)
8628*61046927SAndroid Build Coastguard Worker {
8629*61046927SAndroid Build Coastguard Worker    ir_variable *counter = in_highp_var(&glsl_type_builtin_atomic_uint, "atomic_counter");
8630*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uint, avail, 1, counter);
8631*61046927SAndroid Build Coastguard Worker 
8632*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(&glsl_type_builtin_uint, "atomic_retval");
8633*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function(intrinsic), retval,
8634*61046927SAndroid Build Coastguard Worker                   sig->parameters));
8635*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
8636*61046927SAndroid Build Coastguard Worker    return sig;
8637*61046927SAndroid Build Coastguard Worker }
8638*61046927SAndroid Build Coastguard Worker 
8639*61046927SAndroid Build Coastguard Worker ir_function_signature *
_atomic_counter_op1(const char * intrinsic,builtin_available_predicate avail)8640*61046927SAndroid Build Coastguard Worker builtin_builder::_atomic_counter_op1(const char *intrinsic,
8641*61046927SAndroid Build Coastguard Worker                                      builtin_available_predicate avail)
8642*61046927SAndroid Build Coastguard Worker {
8643*61046927SAndroid Build Coastguard Worker    ir_variable *counter = in_highp_var(&glsl_type_builtin_atomic_uint, "atomic_counter");
8644*61046927SAndroid Build Coastguard Worker    ir_variable *data = in_var(&glsl_type_builtin_uint, "data");
8645*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uint, avail, 2, counter, data);
8646*61046927SAndroid Build Coastguard Worker 
8647*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(&glsl_type_builtin_uint, "atomic_retval");
8648*61046927SAndroid Build Coastguard Worker 
8649*61046927SAndroid Build Coastguard Worker    /* Instead of generating an __intrinsic_atomic_sub, generate an
8650*61046927SAndroid Build Coastguard Worker     * __intrinsic_atomic_add with the data parameter negated.
8651*61046927SAndroid Build Coastguard Worker     */
8652*61046927SAndroid Build Coastguard Worker    if (strcmp("__intrinsic_atomic_sub", intrinsic) == 0) {
8653*61046927SAndroid Build Coastguard Worker       ir_variable *const neg_data =
8654*61046927SAndroid Build Coastguard Worker          body.make_temp(&glsl_type_builtin_uint, "neg_data");
8655*61046927SAndroid Build Coastguard Worker 
8656*61046927SAndroid Build Coastguard Worker       body.emit(assign(neg_data, neg(data)));
8657*61046927SAndroid Build Coastguard Worker 
8658*61046927SAndroid Build Coastguard Worker       exec_list parameters;
8659*61046927SAndroid Build Coastguard Worker 
8660*61046927SAndroid Build Coastguard Worker       parameters.push_tail(new(mem_ctx) ir_dereference_variable(counter));
8661*61046927SAndroid Build Coastguard Worker       parameters.push_tail(new(mem_ctx) ir_dereference_variable(neg_data));
8662*61046927SAndroid Build Coastguard Worker 
8663*61046927SAndroid Build Coastguard Worker       ir_function *const func =
8664*61046927SAndroid Build Coastguard Worker          shader->symbols->get_function("__intrinsic_atomic_add");
8665*61046927SAndroid Build Coastguard Worker       ir_instruction *const c = call(func, retval, parameters);
8666*61046927SAndroid Build Coastguard Worker 
8667*61046927SAndroid Build Coastguard Worker       assert(c != NULL);
8668*61046927SAndroid Build Coastguard Worker       assert(parameters.is_empty());
8669*61046927SAndroid Build Coastguard Worker 
8670*61046927SAndroid Build Coastguard Worker       body.emit(c);
8671*61046927SAndroid Build Coastguard Worker    } else {
8672*61046927SAndroid Build Coastguard Worker       body.emit(call(shader->symbols->get_function(intrinsic), retval,
8673*61046927SAndroid Build Coastguard Worker                      sig->parameters));
8674*61046927SAndroid Build Coastguard Worker    }
8675*61046927SAndroid Build Coastguard Worker 
8676*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
8677*61046927SAndroid Build Coastguard Worker    return sig;
8678*61046927SAndroid Build Coastguard Worker }
8679*61046927SAndroid Build Coastguard Worker 
8680*61046927SAndroid Build Coastguard Worker ir_function_signature *
_atomic_counter_op2(const char * intrinsic,builtin_available_predicate avail)8681*61046927SAndroid Build Coastguard Worker builtin_builder::_atomic_counter_op2(const char *intrinsic,
8682*61046927SAndroid Build Coastguard Worker                                     builtin_available_predicate avail)
8683*61046927SAndroid Build Coastguard Worker {
8684*61046927SAndroid Build Coastguard Worker    ir_variable *counter = in_highp_var(&glsl_type_builtin_atomic_uint, "atomic_counter");
8685*61046927SAndroid Build Coastguard Worker    ir_variable *compare = in_var(&glsl_type_builtin_uint, "compare");
8686*61046927SAndroid Build Coastguard Worker    ir_variable *data = in_var(&glsl_type_builtin_uint, "data");
8687*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uint, avail, 3, counter, compare, data);
8688*61046927SAndroid Build Coastguard Worker 
8689*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(&glsl_type_builtin_uint, "atomic_retval");
8690*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function(intrinsic), retval,
8691*61046927SAndroid Build Coastguard Worker                   sig->parameters));
8692*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
8693*61046927SAndroid Build Coastguard Worker    return sig;
8694*61046927SAndroid Build Coastguard Worker }
8695*61046927SAndroid Build Coastguard Worker 
8696*61046927SAndroid Build Coastguard Worker ir_function_signature *
_atomic_op2(const char * intrinsic,builtin_available_predicate avail,const glsl_type * type)8697*61046927SAndroid Build Coastguard Worker builtin_builder::_atomic_op2(const char *intrinsic,
8698*61046927SAndroid Build Coastguard Worker                              builtin_available_predicate avail,
8699*61046927SAndroid Build Coastguard Worker                              const glsl_type *type)
8700*61046927SAndroid Build Coastguard Worker {
8701*61046927SAndroid Build Coastguard Worker    ir_variable *atomic = in_var(type, "atomic_var");
8702*61046927SAndroid Build Coastguard Worker    ir_variable *data = in_var(type, "atomic_data");
8703*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 2, atomic, data);
8704*61046927SAndroid Build Coastguard Worker 
8705*61046927SAndroid Build Coastguard Worker    atomic->data.implicit_conversion_prohibited = true;
8706*61046927SAndroid Build Coastguard Worker 
8707*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "atomic_retval");
8708*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function(intrinsic), retval,
8709*61046927SAndroid Build Coastguard Worker                   sig->parameters));
8710*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
8711*61046927SAndroid Build Coastguard Worker    return sig;
8712*61046927SAndroid Build Coastguard Worker }
8713*61046927SAndroid Build Coastguard Worker 
8714*61046927SAndroid Build Coastguard Worker ir_function_signature *
_atomic_op3(const char * intrinsic,builtin_available_predicate avail,const glsl_type * type)8715*61046927SAndroid Build Coastguard Worker builtin_builder::_atomic_op3(const char *intrinsic,
8716*61046927SAndroid Build Coastguard Worker                              builtin_available_predicate avail,
8717*61046927SAndroid Build Coastguard Worker                              const glsl_type *type)
8718*61046927SAndroid Build Coastguard Worker {
8719*61046927SAndroid Build Coastguard Worker    ir_variable *atomic = in_var(type, "atomic_var");
8720*61046927SAndroid Build Coastguard Worker    ir_variable *data1 = in_var(type, "atomic_data1");
8721*61046927SAndroid Build Coastguard Worker    ir_variable *data2 = in_var(type, "atomic_data2");
8722*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 3, atomic, data1, data2);
8723*61046927SAndroid Build Coastguard Worker 
8724*61046927SAndroid Build Coastguard Worker    atomic->data.implicit_conversion_prohibited = true;
8725*61046927SAndroid Build Coastguard Worker 
8726*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "atomic_retval");
8727*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function(intrinsic), retval,
8728*61046927SAndroid Build Coastguard Worker                   sig->parameters));
8729*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
8730*61046927SAndroid Build Coastguard Worker    return sig;
8731*61046927SAndroid Build Coastguard Worker }
8732*61046927SAndroid Build Coastguard Worker 
8733*61046927SAndroid Build Coastguard Worker ir_function_signature *
_min3(builtin_available_predicate avail,const glsl_type * type)8734*61046927SAndroid Build Coastguard Worker builtin_builder::_min3(builtin_available_predicate avail,
8735*61046927SAndroid Build Coastguard Worker                        const glsl_type *type)
8736*61046927SAndroid Build Coastguard Worker {
8737*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
8738*61046927SAndroid Build Coastguard Worker    ir_variable *y = in_var(type, "y");
8739*61046927SAndroid Build Coastguard Worker    ir_variable *z = in_var(type, "z");
8740*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 3, x, y, z);
8741*61046927SAndroid Build Coastguard Worker 
8742*61046927SAndroid Build Coastguard Worker    ir_expression *min3 = min2(x, min2(y,z));
8743*61046927SAndroid Build Coastguard Worker    body.emit(ret(min3));
8744*61046927SAndroid Build Coastguard Worker 
8745*61046927SAndroid Build Coastguard Worker    return sig;
8746*61046927SAndroid Build Coastguard Worker }
8747*61046927SAndroid Build Coastguard Worker 
8748*61046927SAndroid Build Coastguard Worker ir_function_signature *
_max3(builtin_available_predicate avail,const glsl_type * type)8749*61046927SAndroid Build Coastguard Worker builtin_builder::_max3(builtin_available_predicate avail,
8750*61046927SAndroid Build Coastguard Worker                        const glsl_type *type)
8751*61046927SAndroid Build Coastguard Worker {
8752*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
8753*61046927SAndroid Build Coastguard Worker    ir_variable *y = in_var(type, "y");
8754*61046927SAndroid Build Coastguard Worker    ir_variable *z = in_var(type, "z");
8755*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 3, x, y, z);
8756*61046927SAndroid Build Coastguard Worker 
8757*61046927SAndroid Build Coastguard Worker    ir_expression *max3 = max2(x, max2(y,z));
8758*61046927SAndroid Build Coastguard Worker    body.emit(ret(max3));
8759*61046927SAndroid Build Coastguard Worker 
8760*61046927SAndroid Build Coastguard Worker    return sig;
8761*61046927SAndroid Build Coastguard Worker }
8762*61046927SAndroid Build Coastguard Worker 
8763*61046927SAndroid Build Coastguard Worker ir_function_signature *
_mid3(builtin_available_predicate avail,const glsl_type * type)8764*61046927SAndroid Build Coastguard Worker builtin_builder::_mid3(builtin_available_predicate avail,
8765*61046927SAndroid Build Coastguard Worker                        const glsl_type *type)
8766*61046927SAndroid Build Coastguard Worker {
8767*61046927SAndroid Build Coastguard Worker    ir_variable *x = in_var(type, "x");
8768*61046927SAndroid Build Coastguard Worker    ir_variable *y = in_var(type, "y");
8769*61046927SAndroid Build Coastguard Worker    ir_variable *z = in_var(type, "z");
8770*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 3, x, y, z);
8771*61046927SAndroid Build Coastguard Worker 
8772*61046927SAndroid Build Coastguard Worker    ir_expression *mid3 = max2(min2(x, y), max2(min2(x, z), min2(y, z)));
8773*61046927SAndroid Build Coastguard Worker    body.emit(ret(mid3));
8774*61046927SAndroid Build Coastguard Worker 
8775*61046927SAndroid Build Coastguard Worker    return sig;
8776*61046927SAndroid Build Coastguard Worker }
8777*61046927SAndroid Build Coastguard Worker 
8778*61046927SAndroid Build Coastguard Worker static builtin_available_predicate
get_image_available_predicate(const glsl_type * type,unsigned flags)8779*61046927SAndroid Build Coastguard Worker get_image_available_predicate(const glsl_type *type, unsigned flags)
8780*61046927SAndroid Build Coastguard Worker {
8781*61046927SAndroid Build Coastguard Worker    if ((flags & IMAGE_FUNCTION_AVAIL_ATOMIC_EXCHANGE) &&
8782*61046927SAndroid Build Coastguard Worker        type->sampled_type == GLSL_TYPE_FLOAT)
8783*61046927SAndroid Build Coastguard Worker       return shader_image_atomic_exchange_float;
8784*61046927SAndroid Build Coastguard Worker 
8785*61046927SAndroid Build Coastguard Worker    if ((flags & IMAGE_FUNCTION_AVAIL_ATOMIC_ADD) &&
8786*61046927SAndroid Build Coastguard Worker        type->sampled_type == GLSL_TYPE_FLOAT)
8787*61046927SAndroid Build Coastguard Worker       return shader_image_atomic_add_float;
8788*61046927SAndroid Build Coastguard Worker 
8789*61046927SAndroid Build Coastguard Worker    else if (flags & (IMAGE_FUNCTION_AVAIL_ATOMIC_EXCHANGE |
8790*61046927SAndroid Build Coastguard Worker                      IMAGE_FUNCTION_AVAIL_ATOMIC_ADD |
8791*61046927SAndroid Build Coastguard Worker                      IMAGE_FUNCTION_AVAIL_ATOMIC))
8792*61046927SAndroid Build Coastguard Worker       return shader_image_atomic;
8793*61046927SAndroid Build Coastguard Worker 
8794*61046927SAndroid Build Coastguard Worker    else if (flags & IMAGE_FUNCTION_EXT_ONLY)
8795*61046927SAndroid Build Coastguard Worker       return shader_image_load_store_ext;
8796*61046927SAndroid Build Coastguard Worker 
8797*61046927SAndroid Build Coastguard Worker    else if (flags & IMAGE_FUNCTION_SPARSE)
8798*61046927SAndroid Build Coastguard Worker       return shader_image_load_store_and_sparse;
8799*61046927SAndroid Build Coastguard Worker 
8800*61046927SAndroid Build Coastguard Worker    else
8801*61046927SAndroid Build Coastguard Worker       return shader_image_load_store;
8802*61046927SAndroid Build Coastguard Worker }
8803*61046927SAndroid Build Coastguard Worker 
8804*61046927SAndroid Build Coastguard Worker ir_function_signature *
_image_prototype(const glsl_type * image_type,unsigned num_arguments,unsigned flags)8805*61046927SAndroid Build Coastguard Worker builtin_builder::_image_prototype(const glsl_type *image_type,
8806*61046927SAndroid Build Coastguard Worker                                   unsigned num_arguments,
8807*61046927SAndroid Build Coastguard Worker                                   unsigned flags)
8808*61046927SAndroid Build Coastguard Worker {
8809*61046927SAndroid Build Coastguard Worker    const glsl_type *data_type = glsl_simple_type(
8810*61046927SAndroid Build Coastguard Worker       image_type->sampled_type,
8811*61046927SAndroid Build Coastguard Worker       (flags & IMAGE_FUNCTION_HAS_VECTOR_DATA_TYPE ? 4 : 1),
8812*61046927SAndroid Build Coastguard Worker       1);
8813*61046927SAndroid Build Coastguard Worker 
8814*61046927SAndroid Build Coastguard Worker    const glsl_type *ret_type;
8815*61046927SAndroid Build Coastguard Worker    if (flags & IMAGE_FUNCTION_RETURNS_VOID)
8816*61046927SAndroid Build Coastguard Worker       ret_type = &glsl_type_builtin_void;
8817*61046927SAndroid Build Coastguard Worker    else if (flags & IMAGE_FUNCTION_SPARSE) {
8818*61046927SAndroid Build Coastguard Worker       if (flags & IMAGE_FUNCTION_EMIT_STUB)
8819*61046927SAndroid Build Coastguard Worker          ret_type = &glsl_type_builtin_int;
8820*61046927SAndroid Build Coastguard Worker       else {
8821*61046927SAndroid Build Coastguard Worker          /* code holds residency info */
8822*61046927SAndroid Build Coastguard Worker          glsl_struct_field fields[2] = {
8823*61046927SAndroid Build Coastguard Worker             glsl_struct_field(&glsl_type_builtin_int, "code"),
8824*61046927SAndroid Build Coastguard Worker             glsl_struct_field(data_type, "texel"),
8825*61046927SAndroid Build Coastguard Worker          };
8826*61046927SAndroid Build Coastguard Worker          ret_type = glsl_struct_type(fields, 2, "struct", false /* packed */);
8827*61046927SAndroid Build Coastguard Worker       }
8828*61046927SAndroid Build Coastguard Worker    } else
8829*61046927SAndroid Build Coastguard Worker       ret_type = data_type;
8830*61046927SAndroid Build Coastguard Worker 
8831*61046927SAndroid Build Coastguard Worker    /* Addressing arguments that are always present. */
8832*61046927SAndroid Build Coastguard Worker    ir_variable *image = in_var(image_type, "image");
8833*61046927SAndroid Build Coastguard Worker    ir_variable *coord = in_var(
8834*61046927SAndroid Build Coastguard Worker       glsl_ivec_type(glsl_get_sampler_coordinate_components(image_type)), "coord");
8835*61046927SAndroid Build Coastguard Worker 
8836*61046927SAndroid Build Coastguard Worker    ir_function_signature *sig = new_sig(
8837*61046927SAndroid Build Coastguard Worker       ret_type, get_image_available_predicate(image_type, flags),
8838*61046927SAndroid Build Coastguard Worker       2, image, coord);
8839*61046927SAndroid Build Coastguard Worker 
8840*61046927SAndroid Build Coastguard Worker    /* Sample index for multisample images. */
8841*61046927SAndroid Build Coastguard Worker    if (image_type->sampler_dimensionality == GLSL_SAMPLER_DIM_MS)
8842*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(in_var(&glsl_type_builtin_int, "sample"));
8843*61046927SAndroid Build Coastguard Worker 
8844*61046927SAndroid Build Coastguard Worker    /* Data arguments. */
8845*61046927SAndroid Build Coastguard Worker    for (unsigned i = 0; i < num_arguments; ++i) {
8846*61046927SAndroid Build Coastguard Worker       char *arg_name = ralloc_asprintf(NULL, "arg%d", i);
8847*61046927SAndroid Build Coastguard Worker       sig->parameters.push_tail(in_var(data_type, arg_name));
8848*61046927SAndroid Build Coastguard Worker       ralloc_free(arg_name);
8849*61046927SAndroid Build Coastguard Worker    }
8850*61046927SAndroid Build Coastguard Worker 
8851*61046927SAndroid Build Coastguard Worker    /* Set the maximal set of qualifiers allowed for this image
8852*61046927SAndroid Build Coastguard Worker     * built-in.  Function calls with arguments having fewer
8853*61046927SAndroid Build Coastguard Worker     * qualifiers than present in the prototype are allowed by the
8854*61046927SAndroid Build Coastguard Worker     * spec, but not with more, i.e. this will make the compiler
8855*61046927SAndroid Build Coastguard Worker     * accept everything that needs to be accepted, and reject cases
8856*61046927SAndroid Build Coastguard Worker     * like loads from write-only or stores to read-only images.
8857*61046927SAndroid Build Coastguard Worker     */
8858*61046927SAndroid Build Coastguard Worker    image->data.memory_read_only = (flags & IMAGE_FUNCTION_READ_ONLY) != 0;
8859*61046927SAndroid Build Coastguard Worker    image->data.memory_write_only = (flags & IMAGE_FUNCTION_WRITE_ONLY) != 0;
8860*61046927SAndroid Build Coastguard Worker    image->data.memory_coherent = true;
8861*61046927SAndroid Build Coastguard Worker    image->data.memory_volatile = true;
8862*61046927SAndroid Build Coastguard Worker    image->data.memory_restrict = true;
8863*61046927SAndroid Build Coastguard Worker 
8864*61046927SAndroid Build Coastguard Worker    return sig;
8865*61046927SAndroid Build Coastguard Worker }
8866*61046927SAndroid Build Coastguard Worker 
8867*61046927SAndroid Build Coastguard Worker ir_function_signature *
_image_size_prototype(const glsl_type * image_type,unsigned,unsigned)8868*61046927SAndroid Build Coastguard Worker builtin_builder::_image_size_prototype(const glsl_type *image_type,
8869*61046927SAndroid Build Coastguard Worker                                        unsigned /* num_arguments */,
8870*61046927SAndroid Build Coastguard Worker                                        unsigned /* flags */)
8871*61046927SAndroid Build Coastguard Worker {
8872*61046927SAndroid Build Coastguard Worker    const glsl_type *ret_type;
8873*61046927SAndroid Build Coastguard Worker    unsigned num_components = glsl_get_sampler_coordinate_components(image_type);
8874*61046927SAndroid Build Coastguard Worker 
8875*61046927SAndroid Build Coastguard Worker    /* From the ARB_shader_image_size extension:
8876*61046927SAndroid Build Coastguard Worker     * "Cube images return the dimensions of one face."
8877*61046927SAndroid Build Coastguard Worker     */
8878*61046927SAndroid Build Coastguard Worker    if (image_type->sampler_dimensionality == GLSL_SAMPLER_DIM_CUBE &&
8879*61046927SAndroid Build Coastguard Worker        !image_type->sampler_array) {
8880*61046927SAndroid Build Coastguard Worker       num_components = 2;
8881*61046927SAndroid Build Coastguard Worker    }
8882*61046927SAndroid Build Coastguard Worker 
8883*61046927SAndroid Build Coastguard Worker    /* FIXME: Add the highp precision qualifier for GLES 3.10 when it is
8884*61046927SAndroid Build Coastguard Worker     * supported by mesa.
8885*61046927SAndroid Build Coastguard Worker     */
8886*61046927SAndroid Build Coastguard Worker    ret_type = glsl_simple_type(GLSL_TYPE_INT, num_components, 1);
8887*61046927SAndroid Build Coastguard Worker 
8888*61046927SAndroid Build Coastguard Worker    ir_variable *image = in_var(image_type, "image");
8889*61046927SAndroid Build Coastguard Worker    ir_function_signature *sig = new_sig(ret_type, shader_image_size, 1, image);
8890*61046927SAndroid Build Coastguard Worker 
8891*61046927SAndroid Build Coastguard Worker    /* Set the maximal set of qualifiers allowed for this image
8892*61046927SAndroid Build Coastguard Worker     * built-in.  Function calls with arguments having fewer
8893*61046927SAndroid Build Coastguard Worker     * qualifiers than present in the prototype are allowed by the
8894*61046927SAndroid Build Coastguard Worker     * spec, but not with more, i.e. this will make the compiler
8895*61046927SAndroid Build Coastguard Worker     * accept everything that needs to be accepted, and reject cases
8896*61046927SAndroid Build Coastguard Worker     * like loads from write-only or stores to read-only images.
8897*61046927SAndroid Build Coastguard Worker     */
8898*61046927SAndroid Build Coastguard Worker    image->data.memory_read_only = true;
8899*61046927SAndroid Build Coastguard Worker    image->data.memory_write_only = true;
8900*61046927SAndroid Build Coastguard Worker    image->data.memory_coherent = true;
8901*61046927SAndroid Build Coastguard Worker    image->data.memory_volatile = true;
8902*61046927SAndroid Build Coastguard Worker    image->data.memory_restrict = true;
8903*61046927SAndroid Build Coastguard Worker 
8904*61046927SAndroid Build Coastguard Worker    return sig;
8905*61046927SAndroid Build Coastguard Worker }
8906*61046927SAndroid Build Coastguard Worker 
8907*61046927SAndroid Build Coastguard Worker ir_function_signature *
_image_samples_prototype(const glsl_type * image_type,unsigned,unsigned)8908*61046927SAndroid Build Coastguard Worker builtin_builder::_image_samples_prototype(const glsl_type *image_type,
8909*61046927SAndroid Build Coastguard Worker                                           unsigned /* num_arguments */,
8910*61046927SAndroid Build Coastguard Worker                                           unsigned /* flags */)
8911*61046927SAndroid Build Coastguard Worker {
8912*61046927SAndroid Build Coastguard Worker    ir_variable *image = in_var(image_type, "image");
8913*61046927SAndroid Build Coastguard Worker    ir_function_signature *sig =
8914*61046927SAndroid Build Coastguard Worker       new_sig(&glsl_type_builtin_int, shader_samples, 1, image);
8915*61046927SAndroid Build Coastguard Worker 
8916*61046927SAndroid Build Coastguard Worker    /* Set the maximal set of qualifiers allowed for this image
8917*61046927SAndroid Build Coastguard Worker     * built-in.  Function calls with arguments having fewer
8918*61046927SAndroid Build Coastguard Worker     * qualifiers than present in the prototype are allowed by the
8919*61046927SAndroid Build Coastguard Worker     * spec, but not with more, i.e. this will make the compiler
8920*61046927SAndroid Build Coastguard Worker     * accept everything that needs to be accepted, and reject cases
8921*61046927SAndroid Build Coastguard Worker     * like loads from write-only or stores to read-only images.
8922*61046927SAndroid Build Coastguard Worker     */
8923*61046927SAndroid Build Coastguard Worker    image->data.memory_read_only = true;
8924*61046927SAndroid Build Coastguard Worker    image->data.memory_write_only = true;
8925*61046927SAndroid Build Coastguard Worker    image->data.memory_coherent = true;
8926*61046927SAndroid Build Coastguard Worker    image->data.memory_volatile = true;
8927*61046927SAndroid Build Coastguard Worker    image->data.memory_restrict = true;
8928*61046927SAndroid Build Coastguard Worker 
8929*61046927SAndroid Build Coastguard Worker    return sig;
8930*61046927SAndroid Build Coastguard Worker }
8931*61046927SAndroid Build Coastguard Worker 
8932*61046927SAndroid Build Coastguard Worker ir_function_signature *
_image(image_prototype_ctr prototype,const glsl_type * image_type,const char * intrinsic_name,unsigned num_arguments,unsigned flags,enum ir_intrinsic_id id)8933*61046927SAndroid Build Coastguard Worker builtin_builder::_image(image_prototype_ctr prototype,
8934*61046927SAndroid Build Coastguard Worker                         const glsl_type *image_type,
8935*61046927SAndroid Build Coastguard Worker                         const char *intrinsic_name,
8936*61046927SAndroid Build Coastguard Worker                         unsigned num_arguments,
8937*61046927SAndroid Build Coastguard Worker                         unsigned flags,
8938*61046927SAndroid Build Coastguard Worker                         enum ir_intrinsic_id id)
8939*61046927SAndroid Build Coastguard Worker {
8940*61046927SAndroid Build Coastguard Worker    ir_function_signature *sig = (this->*prototype)(image_type,
8941*61046927SAndroid Build Coastguard Worker                                                    num_arguments, flags);
8942*61046927SAndroid Build Coastguard Worker 
8943*61046927SAndroid Build Coastguard Worker    if (flags & IMAGE_FUNCTION_EMIT_STUB) {
8944*61046927SAndroid Build Coastguard Worker       ir_factory body(&sig->body, mem_ctx);
8945*61046927SAndroid Build Coastguard Worker       ir_function *f = shader->symbols->get_function(intrinsic_name);
8946*61046927SAndroid Build Coastguard Worker 
8947*61046927SAndroid Build Coastguard Worker       if (flags & IMAGE_FUNCTION_RETURNS_VOID) {
8948*61046927SAndroid Build Coastguard Worker          body.emit(call(f, NULL, sig->parameters));
8949*61046927SAndroid Build Coastguard Worker       } else if (flags & IMAGE_FUNCTION_SPARSE) {
8950*61046927SAndroid Build Coastguard Worker          ir_function_signature *intr_sig =
8951*61046927SAndroid Build Coastguard Worker             f->exact_matching_signature(NULL, &sig->parameters);
8952*61046927SAndroid Build Coastguard Worker          assert(intr_sig);
8953*61046927SAndroid Build Coastguard Worker 
8954*61046927SAndroid Build Coastguard Worker          ir_variable *ret_val = body.make_temp(intr_sig->return_type, "_ret_val");
8955*61046927SAndroid Build Coastguard Worker          ir_dereference_record *texel_field = record_ref(ret_val, "texel");
8956*61046927SAndroid Build Coastguard Worker          ir_variable *texel = out_var(texel_field->type, "texel");
8957*61046927SAndroid Build Coastguard Worker 
8958*61046927SAndroid Build Coastguard Worker          /* Add texel param to builtin function after call intrinsic function
8959*61046927SAndroid Build Coastguard Worker           * because they have different prototype:
8960*61046927SAndroid Build Coastguard Worker           *   struct {int code; gvec4 texel;} __intrinsic_image_sparse_load(in)
8961*61046927SAndroid Build Coastguard Worker           *   int sparseImageLoad(in, out texel)
8962*61046927SAndroid Build Coastguard Worker           */
8963*61046927SAndroid Build Coastguard Worker          body.emit(call(f, ret_val, sig->parameters));
8964*61046927SAndroid Build Coastguard Worker          sig->parameters.push_tail(texel);
8965*61046927SAndroid Build Coastguard Worker 
8966*61046927SAndroid Build Coastguard Worker          body.emit(assign(texel, texel_field));
8967*61046927SAndroid Build Coastguard Worker          body.emit(ret(record_ref(ret_val, "code")));
8968*61046927SAndroid Build Coastguard Worker       } else {
8969*61046927SAndroid Build Coastguard Worker          ir_variable *ret_val =
8970*61046927SAndroid Build Coastguard Worker             body.make_temp(sig->return_type, "_ret_val");
8971*61046927SAndroid Build Coastguard Worker          /* all non-void image functions return highp, so make our temporary and return
8972*61046927SAndroid Build Coastguard Worker           * value in the signature highp.
8973*61046927SAndroid Build Coastguard Worker           */
8974*61046927SAndroid Build Coastguard Worker          ret_val->data.precision = GLSL_PRECISION_HIGH;
8975*61046927SAndroid Build Coastguard Worker          body.emit(call(f, ret_val, sig->parameters));
8976*61046927SAndroid Build Coastguard Worker          body.emit(ret(ret_val));
8977*61046927SAndroid Build Coastguard Worker       }
8978*61046927SAndroid Build Coastguard Worker 
8979*61046927SAndroid Build Coastguard Worker       sig->is_defined = true;
8980*61046927SAndroid Build Coastguard Worker 
8981*61046927SAndroid Build Coastguard Worker    } else {
8982*61046927SAndroid Build Coastguard Worker       sig->intrinsic_id = id;
8983*61046927SAndroid Build Coastguard Worker    }
8984*61046927SAndroid Build Coastguard Worker    sig->return_precision = GLSL_PRECISION_HIGH;
8985*61046927SAndroid Build Coastguard Worker 
8986*61046927SAndroid Build Coastguard Worker    return sig;
8987*61046927SAndroid Build Coastguard Worker }
8988*61046927SAndroid Build Coastguard Worker 
8989*61046927SAndroid Build Coastguard Worker ir_function_signature *
_memory_barrier_intrinsic(builtin_available_predicate avail,enum ir_intrinsic_id id)8990*61046927SAndroid Build Coastguard Worker builtin_builder::_memory_barrier_intrinsic(builtin_available_predicate avail,
8991*61046927SAndroid Build Coastguard Worker                                            enum ir_intrinsic_id id)
8992*61046927SAndroid Build Coastguard Worker {
8993*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_void, id, avail, 0);
8994*61046927SAndroid Build Coastguard Worker    return sig;
8995*61046927SAndroid Build Coastguard Worker }
8996*61046927SAndroid Build Coastguard Worker 
8997*61046927SAndroid Build Coastguard Worker ir_function_signature *
_memory_barrier(const char * intrinsic_name,builtin_available_predicate avail)8998*61046927SAndroid Build Coastguard Worker builtin_builder::_memory_barrier(const char *intrinsic_name,
8999*61046927SAndroid Build Coastguard Worker                                  builtin_available_predicate avail)
9000*61046927SAndroid Build Coastguard Worker {
9001*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_void, avail, 0);
9002*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function(intrinsic_name),
9003*61046927SAndroid Build Coastguard Worker                   NULL, sig->parameters));
9004*61046927SAndroid Build Coastguard Worker    return sig;
9005*61046927SAndroid Build Coastguard Worker }
9006*61046927SAndroid Build Coastguard Worker 
9007*61046927SAndroid Build Coastguard Worker ir_function_signature *
_ballot_intrinsic(const glsl_type * type)9008*61046927SAndroid Build Coastguard Worker builtin_builder::_ballot_intrinsic(const glsl_type *type)
9009*61046927SAndroid Build Coastguard Worker {
9010*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(&glsl_type_builtin_bool, "value");
9011*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, ir_intrinsic_ballot, shader_ballot, 1, value);
9012*61046927SAndroid Build Coastguard Worker    return sig;
9013*61046927SAndroid Build Coastguard Worker }
9014*61046927SAndroid Build Coastguard Worker 
9015*61046927SAndroid Build Coastguard Worker ir_function_signature *
_ballot(const glsl_type * type,builtin_available_predicate avail)9016*61046927SAndroid Build Coastguard Worker builtin_builder::_ballot(const glsl_type *type, builtin_available_predicate avail)
9017*61046927SAndroid Build Coastguard Worker {
9018*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(&glsl_type_builtin_bool, "value");
9019*61046927SAndroid Build Coastguard Worker 
9020*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, value);
9021*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "retval");
9022*61046927SAndroid Build Coastguard Worker 
9023*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_ballot"),
9024*61046927SAndroid Build Coastguard Worker                   retval, sig->parameters));
9025*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9026*61046927SAndroid Build Coastguard Worker    return sig;
9027*61046927SAndroid Build Coastguard Worker }
9028*61046927SAndroid Build Coastguard Worker 
9029*61046927SAndroid Build Coastguard Worker ir_function_signature *
_inverse_ballot_intrinsic()9030*61046927SAndroid Build Coastguard Worker builtin_builder::_inverse_ballot_intrinsic()
9031*61046927SAndroid Build Coastguard Worker {
9032*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(&glsl_type_builtin_uvec4, "value");
9033*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_bool, ir_intrinsic_inverse_ballot, ballot_khr, 1, value);
9034*61046927SAndroid Build Coastguard Worker    return sig;
9035*61046927SAndroid Build Coastguard Worker }
9036*61046927SAndroid Build Coastguard Worker 
9037*61046927SAndroid Build Coastguard Worker ir_function_signature *
_inverse_ballot()9038*61046927SAndroid Build Coastguard Worker builtin_builder::_inverse_ballot()
9039*61046927SAndroid Build Coastguard Worker {
9040*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(&glsl_type_builtin_uvec4, "value");
9041*61046927SAndroid Build Coastguard Worker 
9042*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_bool, ballot_khr, 1, value);
9043*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(&glsl_type_builtin_bool, "retval");
9044*61046927SAndroid Build Coastguard Worker 
9045*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_inverse_ballot"),
9046*61046927SAndroid Build Coastguard Worker                   retval, sig->parameters));
9047*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9048*61046927SAndroid Build Coastguard Worker    return sig;
9049*61046927SAndroid Build Coastguard Worker }
9050*61046927SAndroid Build Coastguard Worker 
9051*61046927SAndroid Build Coastguard Worker ir_function_signature *
_ballot_bit_extract_intrinsic()9052*61046927SAndroid Build Coastguard Worker builtin_builder::_ballot_bit_extract_intrinsic()
9053*61046927SAndroid Build Coastguard Worker {
9054*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(&glsl_type_builtin_uvec4, "value");
9055*61046927SAndroid Build Coastguard Worker    ir_variable *index = in_var(&glsl_type_builtin_uint, "index");
9056*61046927SAndroid Build Coastguard Worker 
9057*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_bool, ir_intrinsic_ballot_bit_extract, ballot_khr,
9058*61046927SAndroid Build Coastguard Worker                   2, value, index);
9059*61046927SAndroid Build Coastguard Worker    return sig;
9060*61046927SAndroid Build Coastguard Worker }
9061*61046927SAndroid Build Coastguard Worker 
9062*61046927SAndroid Build Coastguard Worker ir_function_signature *
_ballot_bit_extract()9063*61046927SAndroid Build Coastguard Worker builtin_builder::_ballot_bit_extract()
9064*61046927SAndroid Build Coastguard Worker {
9065*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(&glsl_type_builtin_uvec4, "value");
9066*61046927SAndroid Build Coastguard Worker    ir_variable *index = in_var(&glsl_type_builtin_uint, "index");
9067*61046927SAndroid Build Coastguard Worker 
9068*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_bool, ballot_khr, 2, value, index);
9069*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(&glsl_type_builtin_bool, "retval");
9070*61046927SAndroid Build Coastguard Worker 
9071*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_ballot_bit_extract"),
9072*61046927SAndroid Build Coastguard Worker                   retval, sig->parameters));
9073*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9074*61046927SAndroid Build Coastguard Worker    return sig;
9075*61046927SAndroid Build Coastguard Worker }
9076*61046927SAndroid Build Coastguard Worker 
9077*61046927SAndroid Build Coastguard Worker ir_function_signature *
_ballot_bit_intrinsic(enum ir_intrinsic_id id)9078*61046927SAndroid Build Coastguard Worker builtin_builder::_ballot_bit_intrinsic(enum ir_intrinsic_id id)
9079*61046927SAndroid Build Coastguard Worker {
9080*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(&glsl_type_builtin_uvec4, "value");
9081*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_uint, id, ballot_khr, 1, value);
9082*61046927SAndroid Build Coastguard Worker    return sig;
9083*61046927SAndroid Build Coastguard Worker }
9084*61046927SAndroid Build Coastguard Worker 
9085*61046927SAndroid Build Coastguard Worker ir_function_signature *
_ballot_bit(const char * intrinsic_name)9086*61046927SAndroid Build Coastguard Worker builtin_builder::_ballot_bit(const char *intrinsic_name)
9087*61046927SAndroid Build Coastguard Worker {
9088*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(&glsl_type_builtin_uvec4, "value");
9089*61046927SAndroid Build Coastguard Worker 
9090*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_uint, ballot_khr, 1, value);
9091*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(&glsl_type_builtin_uint, "retval");
9092*61046927SAndroid Build Coastguard Worker 
9093*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function(intrinsic_name), retval, sig->parameters));
9094*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9095*61046927SAndroid Build Coastguard Worker    return sig;
9096*61046927SAndroid Build Coastguard Worker }
9097*61046927SAndroid Build Coastguard Worker 
9098*61046927SAndroid Build Coastguard Worker ir_function_signature *
_read_first_invocation_intrinsic(const glsl_type * type)9099*61046927SAndroid Build Coastguard Worker builtin_builder::_read_first_invocation_intrinsic(const glsl_type *type)
9100*61046927SAndroid Build Coastguard Worker {
9101*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9102*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, ir_intrinsic_read_first_invocation,
9103*61046927SAndroid Build Coastguard Worker                   glsl_type_is_double(type) ? shader_ballot_and_fp64 : shader_ballot,
9104*61046927SAndroid Build Coastguard Worker                   1, value);
9105*61046927SAndroid Build Coastguard Worker    return sig;
9106*61046927SAndroid Build Coastguard Worker }
9107*61046927SAndroid Build Coastguard Worker 
9108*61046927SAndroid Build Coastguard Worker ir_function_signature *
_read_first_invocation(const glsl_type * type,builtin_available_predicate avail)9109*61046927SAndroid Build Coastguard Worker builtin_builder::_read_first_invocation(const glsl_type *type, builtin_available_predicate avail)
9110*61046927SAndroid Build Coastguard Worker {
9111*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9112*61046927SAndroid Build Coastguard Worker 
9113*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 1, value);
9114*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "retval");
9115*61046927SAndroid Build Coastguard Worker 
9116*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_read_first_invocation"),
9117*61046927SAndroid Build Coastguard Worker                   retval, sig->parameters));
9118*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9119*61046927SAndroid Build Coastguard Worker    return sig;
9120*61046927SAndroid Build Coastguard Worker }
9121*61046927SAndroid Build Coastguard Worker 
9122*61046927SAndroid Build Coastguard Worker ir_function_signature *
_read_invocation_intrinsic(const glsl_type * type)9123*61046927SAndroid Build Coastguard Worker builtin_builder::_read_invocation_intrinsic(const glsl_type *type)
9124*61046927SAndroid Build Coastguard Worker {
9125*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9126*61046927SAndroid Build Coastguard Worker    ir_variable *invocation = in_var(&glsl_type_builtin_uint, "invocation");
9127*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, ir_intrinsic_read_invocation,
9128*61046927SAndroid Build Coastguard Worker                   glsl_type_is_double(type) ? shader_ballot_and_fp64 : shader_ballot,
9129*61046927SAndroid Build Coastguard Worker                   2, value, invocation);
9130*61046927SAndroid Build Coastguard Worker    return sig;
9131*61046927SAndroid Build Coastguard Worker }
9132*61046927SAndroid Build Coastguard Worker 
9133*61046927SAndroid Build Coastguard Worker ir_function_signature *
_read_invocation(const glsl_type * type,builtin_available_predicate avail)9134*61046927SAndroid Build Coastguard Worker builtin_builder::_read_invocation(const glsl_type *type, builtin_available_predicate avail)
9135*61046927SAndroid Build Coastguard Worker {
9136*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9137*61046927SAndroid Build Coastguard Worker    ir_variable *invocation = in_var(&glsl_type_builtin_uint, "invocation");
9138*61046927SAndroid Build Coastguard Worker 
9139*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 2, value, invocation);
9140*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "retval");
9141*61046927SAndroid Build Coastguard Worker 
9142*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_read_invocation"),
9143*61046927SAndroid Build Coastguard Worker                   retval, sig->parameters));
9144*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9145*61046927SAndroid Build Coastguard Worker    return sig;
9146*61046927SAndroid Build Coastguard Worker }
9147*61046927SAndroid Build Coastguard Worker 
9148*61046927SAndroid Build Coastguard Worker ir_function_signature *
_invocation_interlock_intrinsic(builtin_available_predicate avail,enum ir_intrinsic_id id)9149*61046927SAndroid Build Coastguard Worker builtin_builder::_invocation_interlock_intrinsic(builtin_available_predicate avail,
9150*61046927SAndroid Build Coastguard Worker                                                  enum ir_intrinsic_id id)
9151*61046927SAndroid Build Coastguard Worker {
9152*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_void, id, avail, 0);
9153*61046927SAndroid Build Coastguard Worker    return sig;
9154*61046927SAndroid Build Coastguard Worker }
9155*61046927SAndroid Build Coastguard Worker 
9156*61046927SAndroid Build Coastguard Worker ir_function_signature *
_invocation_interlock(const char * intrinsic_name,builtin_available_predicate avail)9157*61046927SAndroid Build Coastguard Worker builtin_builder::_invocation_interlock(const char *intrinsic_name,
9158*61046927SAndroid Build Coastguard Worker                                        builtin_available_predicate avail)
9159*61046927SAndroid Build Coastguard Worker {
9160*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_void, avail, 0);
9161*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function(intrinsic_name),
9162*61046927SAndroid Build Coastguard Worker                   NULL, sig->parameters));
9163*61046927SAndroid Build Coastguard Worker    return sig;
9164*61046927SAndroid Build Coastguard Worker }
9165*61046927SAndroid Build Coastguard Worker 
9166*61046927SAndroid Build Coastguard Worker ir_function_signature *
_shader_clock_intrinsic(builtin_available_predicate avail,const glsl_type * type)9167*61046927SAndroid Build Coastguard Worker builtin_builder::_shader_clock_intrinsic(builtin_available_predicate avail,
9168*61046927SAndroid Build Coastguard Worker                                          const glsl_type *type)
9169*61046927SAndroid Build Coastguard Worker {
9170*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, ir_intrinsic_shader_clock, avail, 0);
9171*61046927SAndroid Build Coastguard Worker    return sig;
9172*61046927SAndroid Build Coastguard Worker }
9173*61046927SAndroid Build Coastguard Worker 
9174*61046927SAndroid Build Coastguard Worker ir_function_signature *
_shader_clock(builtin_available_predicate avail,const glsl_type * type)9175*61046927SAndroid Build Coastguard Worker builtin_builder::_shader_clock(builtin_available_predicate avail,
9176*61046927SAndroid Build Coastguard Worker                                const glsl_type *type)
9177*61046927SAndroid Build Coastguard Worker {
9178*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, avail, 0);
9179*61046927SAndroid Build Coastguard Worker 
9180*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(&glsl_type_builtin_uvec2, "clock_retval");
9181*61046927SAndroid Build Coastguard Worker 
9182*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_shader_clock"),
9183*61046927SAndroid Build Coastguard Worker                   retval, sig->parameters));
9184*61046927SAndroid Build Coastguard Worker 
9185*61046927SAndroid Build Coastguard Worker    if (type == &glsl_type_builtin_uint64_t) {
9186*61046927SAndroid Build Coastguard Worker       body.emit(ret(expr(ir_unop_pack_uint_2x32, retval)));
9187*61046927SAndroid Build Coastguard Worker    } else {
9188*61046927SAndroid Build Coastguard Worker       body.emit(ret(retval));
9189*61046927SAndroid Build Coastguard Worker    }
9190*61046927SAndroid Build Coastguard Worker 
9191*61046927SAndroid Build Coastguard Worker    return sig;
9192*61046927SAndroid Build Coastguard Worker }
9193*61046927SAndroid Build Coastguard Worker 
9194*61046927SAndroid Build Coastguard Worker ir_function_signature *
_vote_intrinsic(const glsl_type * type,builtin_available_predicate avail,enum ir_intrinsic_id id)9195*61046927SAndroid Build Coastguard Worker builtin_builder::_vote_intrinsic(const glsl_type *type,
9196*61046927SAndroid Build Coastguard Worker                                  builtin_available_predicate avail,
9197*61046927SAndroid Build Coastguard Worker                                  enum ir_intrinsic_id id)
9198*61046927SAndroid Build Coastguard Worker {
9199*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9200*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_bool, id, avail, 1, value);
9201*61046927SAndroid Build Coastguard Worker    return sig;
9202*61046927SAndroid Build Coastguard Worker }
9203*61046927SAndroid Build Coastguard Worker 
9204*61046927SAndroid Build Coastguard Worker ir_function_signature *
_vote(const glsl_type * type,builtin_available_predicate avail,const char * intrinsic_name)9205*61046927SAndroid Build Coastguard Worker builtin_builder::_vote(const glsl_type *type,
9206*61046927SAndroid Build Coastguard Worker                        builtin_available_predicate avail,
9207*61046927SAndroid Build Coastguard Worker                        const char *intrinsic_name)
9208*61046927SAndroid Build Coastguard Worker {
9209*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9210*61046927SAndroid Build Coastguard Worker 
9211*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_bool, avail, 1, value);
9212*61046927SAndroid Build Coastguard Worker 
9213*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(&glsl_type_builtin_bool, "retval");
9214*61046927SAndroid Build Coastguard Worker 
9215*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function(intrinsic_name),
9216*61046927SAndroid Build Coastguard Worker                   retval, sig->parameters));
9217*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9218*61046927SAndroid Build Coastguard Worker    return sig;
9219*61046927SAndroid Build Coastguard Worker }
9220*61046927SAndroid Build Coastguard Worker 
9221*61046927SAndroid Build Coastguard Worker ir_function_signature *
_helper_invocation_intrinsic()9222*61046927SAndroid Build Coastguard Worker builtin_builder::_helper_invocation_intrinsic()
9223*61046927SAndroid Build Coastguard Worker {
9224*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_bool, ir_intrinsic_helper_invocation,
9225*61046927SAndroid Build Coastguard Worker                   demote_to_helper_invocation, 0);
9226*61046927SAndroid Build Coastguard Worker    return sig;
9227*61046927SAndroid Build Coastguard Worker }
9228*61046927SAndroid Build Coastguard Worker 
9229*61046927SAndroid Build Coastguard Worker ir_function_signature *
_helper_invocation()9230*61046927SAndroid Build Coastguard Worker builtin_builder::_helper_invocation()
9231*61046927SAndroid Build Coastguard Worker {
9232*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_bool, demote_to_helper_invocation, 0);
9233*61046927SAndroid Build Coastguard Worker 
9234*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(&glsl_type_builtin_bool, "retval");
9235*61046927SAndroid Build Coastguard Worker 
9236*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_helper_invocation"),
9237*61046927SAndroid Build Coastguard Worker                   retval, sig->parameters));
9238*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9239*61046927SAndroid Build Coastguard Worker 
9240*61046927SAndroid Build Coastguard Worker    return sig;
9241*61046927SAndroid Build Coastguard Worker }
9242*61046927SAndroid Build Coastguard Worker 
9243*61046927SAndroid Build Coastguard Worker ir_function_signature *
_subgroup_barrier_intrinsic(enum ir_intrinsic_id id,builtin_available_predicate avail)9244*61046927SAndroid Build Coastguard Worker builtin_builder::_subgroup_barrier_intrinsic(enum ir_intrinsic_id id,
9245*61046927SAndroid Build Coastguard Worker                                              builtin_available_predicate avail)
9246*61046927SAndroid Build Coastguard Worker {
9247*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_void, id, avail, 0);
9248*61046927SAndroid Build Coastguard Worker    return sig;
9249*61046927SAndroid Build Coastguard Worker }
9250*61046927SAndroid Build Coastguard Worker 
9251*61046927SAndroid Build Coastguard Worker ir_function_signature *
_subgroup_barrier(const char * intrinsic_name,builtin_available_predicate avail)9252*61046927SAndroid Build Coastguard Worker builtin_builder::_subgroup_barrier(const char *intrinsic_name,
9253*61046927SAndroid Build Coastguard Worker                                    builtin_available_predicate avail)
9254*61046927SAndroid Build Coastguard Worker {
9255*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_void, avail, 0);
9256*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function(intrinsic_name), NULL, sig->parameters));
9257*61046927SAndroid Build Coastguard Worker    return sig;
9258*61046927SAndroid Build Coastguard Worker }
9259*61046927SAndroid Build Coastguard Worker 
9260*61046927SAndroid Build Coastguard Worker ir_function_signature *
_elect_intrinsic()9261*61046927SAndroid Build Coastguard Worker builtin_builder::_elect_intrinsic()
9262*61046927SAndroid Build Coastguard Worker {
9263*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(&glsl_type_builtin_bool, ir_intrinsic_elect, subgroup_basic, 0);
9264*61046927SAndroid Build Coastguard Worker    return sig;
9265*61046927SAndroid Build Coastguard Worker }
9266*61046927SAndroid Build Coastguard Worker 
9267*61046927SAndroid Build Coastguard Worker ir_function_signature *
_elect()9268*61046927SAndroid Build Coastguard Worker builtin_builder::_elect()
9269*61046927SAndroid Build Coastguard Worker {
9270*61046927SAndroid Build Coastguard Worker    MAKE_SIG(&glsl_type_builtin_bool, subgroup_basic, 0);
9271*61046927SAndroid Build Coastguard Worker 
9272*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(&glsl_type_builtin_bool, "retval");
9273*61046927SAndroid Build Coastguard Worker 
9274*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_elect"), retval, sig->parameters));
9275*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9276*61046927SAndroid Build Coastguard Worker 
9277*61046927SAndroid Build Coastguard Worker    return sig;
9278*61046927SAndroid Build Coastguard Worker }
9279*61046927SAndroid Build Coastguard Worker 
9280*61046927SAndroid Build Coastguard Worker ir_function_signature *
_shuffle_intrinsic(const glsl_type * type)9281*61046927SAndroid Build Coastguard Worker builtin_builder::_shuffle_intrinsic(const glsl_type *type)
9282*61046927SAndroid Build Coastguard Worker {
9283*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9284*61046927SAndroid Build Coastguard Worker    ir_variable *id = in_var(&glsl_type_builtin_uint, "id");
9285*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, ir_intrinsic_shuffle,
9286*61046927SAndroid Build Coastguard Worker                   glsl_type_is_double(type) ? subgroup_shuffle_and_fp64 : subgroup_shuffle,
9287*61046927SAndroid Build Coastguard Worker                   2, value, id);
9288*61046927SAndroid Build Coastguard Worker    return sig;
9289*61046927SAndroid Build Coastguard Worker }
9290*61046927SAndroid Build Coastguard Worker 
9291*61046927SAndroid Build Coastguard Worker ir_function_signature *
_shuffle(const glsl_type * type)9292*61046927SAndroid Build Coastguard Worker builtin_builder::_shuffle(const glsl_type *type)
9293*61046927SAndroid Build Coastguard Worker {
9294*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9295*61046927SAndroid Build Coastguard Worker    ir_variable *id = in_var(&glsl_type_builtin_uint, "id");
9296*61046927SAndroid Build Coastguard Worker 
9297*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, glsl_type_is_double(type) ? subgroup_shuffle_and_fp64 : subgroup_shuffle,
9298*61046927SAndroid Build Coastguard Worker             2, value, id);
9299*61046927SAndroid Build Coastguard Worker 
9300*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "retval");
9301*61046927SAndroid Build Coastguard Worker 
9302*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_shuffle"), retval, sig->parameters));
9303*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9304*61046927SAndroid Build Coastguard Worker    return sig;
9305*61046927SAndroid Build Coastguard Worker }
9306*61046927SAndroid Build Coastguard Worker 
9307*61046927SAndroid Build Coastguard Worker ir_function_signature *
_shuffle_xor_intrinsic(const glsl_type * type)9308*61046927SAndroid Build Coastguard Worker builtin_builder::_shuffle_xor_intrinsic(const glsl_type *type)
9309*61046927SAndroid Build Coastguard Worker {
9310*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9311*61046927SAndroid Build Coastguard Worker    ir_variable *mask = in_var(&glsl_type_builtin_uint, "mask");
9312*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, ir_intrinsic_shuffle_xor,
9313*61046927SAndroid Build Coastguard Worker                   glsl_type_is_double(type) ? subgroup_shuffle_and_fp64 : subgroup_shuffle,
9314*61046927SAndroid Build Coastguard Worker                   2, value, mask);
9315*61046927SAndroid Build Coastguard Worker    return sig;
9316*61046927SAndroid Build Coastguard Worker }
9317*61046927SAndroid Build Coastguard Worker 
9318*61046927SAndroid Build Coastguard Worker ir_function_signature *
_shuffle_xor(const glsl_type * type)9319*61046927SAndroid Build Coastguard Worker builtin_builder::_shuffle_xor(const glsl_type *type)
9320*61046927SAndroid Build Coastguard Worker {
9321*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9322*61046927SAndroid Build Coastguard Worker    ir_variable *mask = in_var(&glsl_type_builtin_uint, "mask");
9323*61046927SAndroid Build Coastguard Worker 
9324*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, glsl_type_is_double(type) ? subgroup_shuffle_and_fp64 : subgroup_shuffle,
9325*61046927SAndroid Build Coastguard Worker             2, value, mask);
9326*61046927SAndroid Build Coastguard Worker 
9327*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "retval");
9328*61046927SAndroid Build Coastguard Worker 
9329*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_shuffle_xor"),
9330*61046927SAndroid Build Coastguard Worker                   retval, sig->parameters));
9331*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9332*61046927SAndroid Build Coastguard Worker    return sig;
9333*61046927SAndroid Build Coastguard Worker }
9334*61046927SAndroid Build Coastguard Worker 
9335*61046927SAndroid Build Coastguard Worker ir_function_signature *
_shuffle_up_intrinsic(const glsl_type * type)9336*61046927SAndroid Build Coastguard Worker builtin_builder::_shuffle_up_intrinsic(const glsl_type *type)
9337*61046927SAndroid Build Coastguard Worker {
9338*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9339*61046927SAndroid Build Coastguard Worker    ir_variable *delta = in_var(&glsl_type_builtin_uint, "delta");
9340*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, ir_intrinsic_shuffle_up,
9341*61046927SAndroid Build Coastguard Worker                   glsl_type_is_double(type) ? subgroup_shuffle_relative_and_fp64 : subgroup_shuffle_relative,
9342*61046927SAndroid Build Coastguard Worker                   2, value, delta);
9343*61046927SAndroid Build Coastguard Worker    return sig;
9344*61046927SAndroid Build Coastguard Worker }
9345*61046927SAndroid Build Coastguard Worker 
9346*61046927SAndroid Build Coastguard Worker ir_function_signature *
_shuffle_up(const glsl_type * type)9347*61046927SAndroid Build Coastguard Worker builtin_builder::_shuffle_up(const glsl_type *type)
9348*61046927SAndroid Build Coastguard Worker {
9349*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9350*61046927SAndroid Build Coastguard Worker    ir_variable *delta = in_var(&glsl_type_builtin_uint, "delta");
9351*61046927SAndroid Build Coastguard Worker 
9352*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, glsl_type_is_double(type) ? subgroup_shuffle_relative_and_fp64 : subgroup_shuffle_relative,
9353*61046927SAndroid Build Coastguard Worker             2, value, delta);
9354*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "retval");
9355*61046927SAndroid Build Coastguard Worker 
9356*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_shuffle_up"),
9357*61046927SAndroid Build Coastguard Worker                   retval, sig->parameters));
9358*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9359*61046927SAndroid Build Coastguard Worker    return sig;
9360*61046927SAndroid Build Coastguard Worker }
9361*61046927SAndroid Build Coastguard Worker 
9362*61046927SAndroid Build Coastguard Worker ir_function_signature *
_shuffle_down_intrinsic(const glsl_type * type)9363*61046927SAndroid Build Coastguard Worker builtin_builder::_shuffle_down_intrinsic(const glsl_type *type)
9364*61046927SAndroid Build Coastguard Worker {
9365*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9366*61046927SAndroid Build Coastguard Worker    ir_variable *delta = in_var(&glsl_type_builtin_uint, "delta");
9367*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, ir_intrinsic_shuffle_down,
9368*61046927SAndroid Build Coastguard Worker                   glsl_type_is_double(type) ? subgroup_shuffle_relative_and_fp64 : subgroup_shuffle_relative,
9369*61046927SAndroid Build Coastguard Worker                   2, value, delta);
9370*61046927SAndroid Build Coastguard Worker    return sig;
9371*61046927SAndroid Build Coastguard Worker }
9372*61046927SAndroid Build Coastguard Worker 
9373*61046927SAndroid Build Coastguard Worker ir_function_signature *
_shuffle_down(const glsl_type * type)9374*61046927SAndroid Build Coastguard Worker builtin_builder::_shuffle_down(const glsl_type *type)
9375*61046927SAndroid Build Coastguard Worker {
9376*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9377*61046927SAndroid Build Coastguard Worker    ir_variable *delta = in_var(&glsl_type_builtin_uint, "delta");
9378*61046927SAndroid Build Coastguard Worker 
9379*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, glsl_type_is_double(type) ? subgroup_shuffle_relative_and_fp64 : subgroup_shuffle_relative,
9380*61046927SAndroid Build Coastguard Worker             2, value, delta);
9381*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "retval");
9382*61046927SAndroid Build Coastguard Worker 
9383*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_shuffle_down"),
9384*61046927SAndroid Build Coastguard Worker                   retval, sig->parameters));
9385*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9386*61046927SAndroid Build Coastguard Worker    return sig;
9387*61046927SAndroid Build Coastguard Worker }
9388*61046927SAndroid Build Coastguard Worker 
9389*61046927SAndroid Build Coastguard Worker ir_function_signature *
_subgroup_arithmetic_intrinsic(const glsl_type * type,enum ir_intrinsic_id id)9390*61046927SAndroid Build Coastguard Worker builtin_builder::_subgroup_arithmetic_intrinsic(const glsl_type *type, enum ir_intrinsic_id id)
9391*61046927SAndroid Build Coastguard Worker {
9392*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9393*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, id,
9394*61046927SAndroid Build Coastguard Worker                   glsl_type_is_double(type) ? subgroup_arithmetic_and_fp64 : subgroup_arithmetic,
9395*61046927SAndroid Build Coastguard Worker                   1, value);
9396*61046927SAndroid Build Coastguard Worker    return sig;
9397*61046927SAndroid Build Coastguard Worker }
9398*61046927SAndroid Build Coastguard Worker 
9399*61046927SAndroid Build Coastguard Worker ir_function_signature *
_subgroup_arithmetic(const glsl_type * type,const char * intrinsic_name)9400*61046927SAndroid Build Coastguard Worker builtin_builder::_subgroup_arithmetic(const glsl_type *type, const char *intrinsic_name)
9401*61046927SAndroid Build Coastguard Worker {
9402*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9403*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, glsl_type_is_double(type) ? subgroup_arithmetic_and_fp64 : subgroup_arithmetic,
9404*61046927SAndroid Build Coastguard Worker             1, value);
9405*61046927SAndroid Build Coastguard Worker 
9406*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "retval");
9407*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function(intrinsic_name), retval, sig->parameters));
9408*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9409*61046927SAndroid Build Coastguard Worker    return sig;
9410*61046927SAndroid Build Coastguard Worker }
9411*61046927SAndroid Build Coastguard Worker 
9412*61046927SAndroid Build Coastguard Worker ir_function_signature *
_subgroup_clustered_intrinsic(const glsl_type * type,enum ir_intrinsic_id id)9413*61046927SAndroid Build Coastguard Worker builtin_builder::_subgroup_clustered_intrinsic(const glsl_type *type, enum ir_intrinsic_id id)
9414*61046927SAndroid Build Coastguard Worker {
9415*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9416*61046927SAndroid Build Coastguard Worker    ir_variable *size =
9417*61046927SAndroid Build Coastguard Worker       new(mem_ctx) ir_variable(&glsl_type_builtin_uint, "clusterSize", ir_var_const_in);
9418*61046927SAndroid Build Coastguard Worker 
9419*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, id,
9420*61046927SAndroid Build Coastguard Worker                   glsl_type_is_double(type) ? subgroup_clustered_and_fp64 : subgroup_clustered,
9421*61046927SAndroid Build Coastguard Worker                   2, value, size);
9422*61046927SAndroid Build Coastguard Worker    return sig;
9423*61046927SAndroid Build Coastguard Worker }
9424*61046927SAndroid Build Coastguard Worker 
9425*61046927SAndroid Build Coastguard Worker ir_function_signature *
_subgroup_clustered(const glsl_type * type,const char * intrinsic_name)9426*61046927SAndroid Build Coastguard Worker builtin_builder::_subgroup_clustered(const glsl_type *type, const char *intrinsic_name)
9427*61046927SAndroid Build Coastguard Worker {
9428*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9429*61046927SAndroid Build Coastguard Worker    ir_variable *size =
9430*61046927SAndroid Build Coastguard Worker       new(mem_ctx) ir_variable(&glsl_type_builtin_uint, "clusterSize", ir_var_const_in);
9431*61046927SAndroid Build Coastguard Worker 
9432*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, glsl_type_is_double(type) ? subgroup_clustered_and_fp64 : subgroup_clustered,
9433*61046927SAndroid Build Coastguard Worker             2, value, size);
9434*61046927SAndroid Build Coastguard Worker 
9435*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "retval");
9436*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function(intrinsic_name), retval, sig->parameters));
9437*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9438*61046927SAndroid Build Coastguard Worker    return sig;
9439*61046927SAndroid Build Coastguard Worker }
9440*61046927SAndroid Build Coastguard Worker 
9441*61046927SAndroid Build Coastguard Worker ir_function_signature *
_quad_broadcast_intrinsic(const glsl_type * type)9442*61046927SAndroid Build Coastguard Worker builtin_builder::_quad_broadcast_intrinsic(const glsl_type *type)
9443*61046927SAndroid Build Coastguard Worker {
9444*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9445*61046927SAndroid Build Coastguard Worker    ir_variable *id = in_var(&glsl_type_builtin_uint, "id");
9446*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, ir_intrinsic_quad_broadcast,
9447*61046927SAndroid Build Coastguard Worker                   glsl_type_is_double(type) ? subgroup_quad_and_fp64 : subgroup_quad,
9448*61046927SAndroid Build Coastguard Worker                   2, value, id);
9449*61046927SAndroid Build Coastguard Worker    return sig;
9450*61046927SAndroid Build Coastguard Worker }
9451*61046927SAndroid Build Coastguard Worker 
9452*61046927SAndroid Build Coastguard Worker ir_function_signature *
_quad_broadcast(const glsl_type * type)9453*61046927SAndroid Build Coastguard Worker builtin_builder::_quad_broadcast(const glsl_type *type)
9454*61046927SAndroid Build Coastguard Worker {
9455*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9456*61046927SAndroid Build Coastguard Worker    ir_variable *id = in_var(&glsl_type_builtin_uint, "id");
9457*61046927SAndroid Build Coastguard Worker 
9458*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, glsl_type_is_double(type) ? subgroup_quad_and_fp64 : subgroup_quad,
9459*61046927SAndroid Build Coastguard Worker             2, value, id);
9460*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "retval");
9461*61046927SAndroid Build Coastguard Worker 
9462*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function("__intrinsic_quad_broadcast"),
9463*61046927SAndroid Build Coastguard Worker                   retval, sig->parameters));
9464*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9465*61046927SAndroid Build Coastguard Worker    return sig;
9466*61046927SAndroid Build Coastguard Worker }
9467*61046927SAndroid Build Coastguard Worker 
9468*61046927SAndroid Build Coastguard Worker ir_function_signature *
_quad_swap_intrinsic(const glsl_type * type,enum ir_intrinsic_id id)9469*61046927SAndroid Build Coastguard Worker builtin_builder::_quad_swap_intrinsic(const glsl_type *type, enum ir_intrinsic_id id)
9470*61046927SAndroid Build Coastguard Worker {
9471*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9472*61046927SAndroid Build Coastguard Worker    MAKE_INTRINSIC(type, id,
9473*61046927SAndroid Build Coastguard Worker                   glsl_type_is_double(type) ? subgroup_quad_and_fp64 : subgroup_quad,
9474*61046927SAndroid Build Coastguard Worker                   1, value);
9475*61046927SAndroid Build Coastguard Worker    return sig;
9476*61046927SAndroid Build Coastguard Worker }
9477*61046927SAndroid Build Coastguard Worker 
9478*61046927SAndroid Build Coastguard Worker ir_function_signature *
_quad_swap(const glsl_type * type,const char * intrinsic_name)9479*61046927SAndroid Build Coastguard Worker builtin_builder::_quad_swap(const glsl_type *type, const char *intrinsic_name)
9480*61046927SAndroid Build Coastguard Worker {
9481*61046927SAndroid Build Coastguard Worker    ir_variable *value = in_var(type, "value");
9482*61046927SAndroid Build Coastguard Worker    MAKE_SIG(type, glsl_type_is_double(type) ? subgroup_quad_and_fp64 : subgroup_quad,
9483*61046927SAndroid Build Coastguard Worker             1, value);
9484*61046927SAndroid Build Coastguard Worker 
9485*61046927SAndroid Build Coastguard Worker    ir_variable *retval = body.make_temp(type, "retval");
9486*61046927SAndroid Build Coastguard Worker    body.emit(call(shader->symbols->get_function(intrinsic_name), retval, sig->parameters));
9487*61046927SAndroid Build Coastguard Worker    body.emit(ret(retval));
9488*61046927SAndroid Build Coastguard Worker    return sig;
9489*61046927SAndroid Build Coastguard Worker }
9490*61046927SAndroid Build Coastguard Worker 
9491*61046927SAndroid Build Coastguard Worker /** @} */
9492*61046927SAndroid Build Coastguard Worker 
9493*61046927SAndroid Build Coastguard Worker /******************************************************************************/
9494*61046927SAndroid Build Coastguard Worker 
9495*61046927SAndroid Build Coastguard Worker /* The singleton instance of builtin_builder. */
9496*61046927SAndroid Build Coastguard Worker static builtin_builder builtins;
9497*61046927SAndroid Build Coastguard Worker static uint32_t builtin_users = 0;
9498*61046927SAndroid Build Coastguard Worker 
9499*61046927SAndroid Build Coastguard Worker /**
9500*61046927SAndroid Build Coastguard Worker  * External API (exposing the built-in module to the rest of the compiler):
9501*61046927SAndroid Build Coastguard Worker  *  @{
9502*61046927SAndroid Build Coastguard Worker  */
9503*61046927SAndroid Build Coastguard Worker extern "C" void
_mesa_glsl_builtin_functions_init_or_ref()9504*61046927SAndroid Build Coastguard Worker _mesa_glsl_builtin_functions_init_or_ref()
9505*61046927SAndroid Build Coastguard Worker {
9506*61046927SAndroid Build Coastguard Worker    simple_mtx_lock(&builtins_lock);
9507*61046927SAndroid Build Coastguard Worker    if (builtin_users++ == 0)
9508*61046927SAndroid Build Coastguard Worker       builtins.initialize();
9509*61046927SAndroid Build Coastguard Worker    simple_mtx_unlock(&builtins_lock);
9510*61046927SAndroid Build Coastguard Worker }
9511*61046927SAndroid Build Coastguard Worker 
9512*61046927SAndroid Build Coastguard Worker extern "C" void
_mesa_glsl_builtin_functions_decref()9513*61046927SAndroid Build Coastguard Worker _mesa_glsl_builtin_functions_decref()
9514*61046927SAndroid Build Coastguard Worker {
9515*61046927SAndroid Build Coastguard Worker    simple_mtx_lock(&builtins_lock);
9516*61046927SAndroid Build Coastguard Worker    assert(builtin_users != 0);
9517*61046927SAndroid Build Coastguard Worker    if (--builtin_users == 0)
9518*61046927SAndroid Build Coastguard Worker       builtins.release();
9519*61046927SAndroid Build Coastguard Worker    simple_mtx_unlock(&builtins_lock);
9520*61046927SAndroid Build Coastguard Worker }
9521*61046927SAndroid Build Coastguard Worker 
9522*61046927SAndroid Build Coastguard Worker ir_function_signature *
_mesa_glsl_find_builtin_function(_mesa_glsl_parse_state * state,const char * name,exec_list * actual_parameters)9523*61046927SAndroid Build Coastguard Worker _mesa_glsl_find_builtin_function(_mesa_glsl_parse_state *state,
9524*61046927SAndroid Build Coastguard Worker                                  const char *name, exec_list *actual_parameters)
9525*61046927SAndroid Build Coastguard Worker {
9526*61046927SAndroid Build Coastguard Worker    ir_function_signature *s;
9527*61046927SAndroid Build Coastguard Worker    simple_mtx_lock(&builtins_lock);
9528*61046927SAndroid Build Coastguard Worker    s = builtins.find(state, name, actual_parameters);
9529*61046927SAndroid Build Coastguard Worker    simple_mtx_unlock(&builtins_lock);
9530*61046927SAndroid Build Coastguard Worker 
9531*61046927SAndroid Build Coastguard Worker    return s;
9532*61046927SAndroid Build Coastguard Worker }
9533*61046927SAndroid Build Coastguard Worker 
9534*61046927SAndroid Build Coastguard Worker bool
_mesa_glsl_has_builtin_function(_mesa_glsl_parse_state * state,const char * name)9535*61046927SAndroid Build Coastguard Worker _mesa_glsl_has_builtin_function(_mesa_glsl_parse_state *state, const char *name)
9536*61046927SAndroid Build Coastguard Worker {
9537*61046927SAndroid Build Coastguard Worker    ir_function *f;
9538*61046927SAndroid Build Coastguard Worker    bool ret = false;
9539*61046927SAndroid Build Coastguard Worker    simple_mtx_lock(&builtins_lock);
9540*61046927SAndroid Build Coastguard Worker    f = builtins.shader->symbols->get_function(name);
9541*61046927SAndroid Build Coastguard Worker    if (f != NULL) {
9542*61046927SAndroid Build Coastguard Worker       foreach_in_list(ir_function_signature, sig, &f->signatures) {
9543*61046927SAndroid Build Coastguard Worker          if (sig->is_builtin_available(state)) {
9544*61046927SAndroid Build Coastguard Worker             ret = true;
9545*61046927SAndroid Build Coastguard Worker             break;
9546*61046927SAndroid Build Coastguard Worker          }
9547*61046927SAndroid Build Coastguard Worker       }
9548*61046927SAndroid Build Coastguard Worker    }
9549*61046927SAndroid Build Coastguard Worker    simple_mtx_unlock(&builtins_lock);
9550*61046927SAndroid Build Coastguard Worker 
9551*61046927SAndroid Build Coastguard Worker    return ret;
9552*61046927SAndroid Build Coastguard Worker }
9553*61046927SAndroid Build Coastguard Worker 
9554*61046927SAndroid Build Coastguard Worker gl_shader *
_mesa_glsl_get_builtin_function_shader()9555*61046927SAndroid Build Coastguard Worker _mesa_glsl_get_builtin_function_shader()
9556*61046927SAndroid Build Coastguard Worker {
9557*61046927SAndroid Build Coastguard Worker    return builtins.shader;
9558*61046927SAndroid Build Coastguard Worker }
9559*61046927SAndroid Build Coastguard Worker 
9560*61046927SAndroid Build Coastguard Worker 
9561*61046927SAndroid Build Coastguard Worker /**
9562*61046927SAndroid Build Coastguard Worker  * Get the function signature for main from a shader
9563*61046927SAndroid Build Coastguard Worker  */
9564*61046927SAndroid Build Coastguard Worker ir_function_signature *
_mesa_get_main_function_signature(glsl_symbol_table * symbols)9565*61046927SAndroid Build Coastguard Worker _mesa_get_main_function_signature(glsl_symbol_table *symbols)
9566*61046927SAndroid Build Coastguard Worker {
9567*61046927SAndroid Build Coastguard Worker    ir_function *const f = symbols->get_function("main");
9568*61046927SAndroid Build Coastguard Worker    if (f != NULL) {
9569*61046927SAndroid Build Coastguard Worker       exec_list void_parameters;
9570*61046927SAndroid Build Coastguard Worker 
9571*61046927SAndroid Build Coastguard Worker       /* Look for the 'void main()' signature and ensure that it's defined.
9572*61046927SAndroid Build Coastguard Worker        * This keeps the linker from accidentally pick a shader that just
9573*61046927SAndroid Build Coastguard Worker        * contains a prototype for main.
9574*61046927SAndroid Build Coastguard Worker        *
9575*61046927SAndroid Build Coastguard Worker        * We don't have to check for multiple definitions of main (in multiple
9576*61046927SAndroid Build Coastguard Worker        * shaders) because that would have already been caught above.
9577*61046927SAndroid Build Coastguard Worker        */
9578*61046927SAndroid Build Coastguard Worker       ir_function_signature *sig =
9579*61046927SAndroid Build Coastguard Worker          f->matching_signature(NULL, &void_parameters, false, false, false);
9580*61046927SAndroid Build Coastguard Worker       if ((sig != NULL) && sig->is_defined) {
9581*61046927SAndroid Build Coastguard Worker          return sig;
9582*61046927SAndroid Build Coastguard Worker       }
9583*61046927SAndroid Build Coastguard Worker    }
9584*61046927SAndroid Build Coastguard Worker 
9585*61046927SAndroid Build Coastguard Worker    return NULL;
9586*61046927SAndroid Build Coastguard Worker }
9587*61046927SAndroid Build Coastguard Worker 
9588*61046927SAndroid Build Coastguard Worker /** @} */
9589