• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Mesa 3-D graphics library
3  *
4  * Copyright (C) 2004-2008  Brian Paul   All Rights Reserved.
5  * Copyright (C) 2009-2010  VMware, Inc.  All Rights Reserved.
6  * Copyright © 2010 Intel Corporation
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a
9  * copy of this software and associated documentation files (the "Software"),
10  * to deal in the Software without restriction, including without limitation
11  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12  * and/or sell copies of the Software, and to permit persons to whom the
13  * Software is furnished to do so, subject to the following conditions:
14  *
15  * The above copyright notice and this permission notice shall be included
16  * in all copies or substantial portions of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
22  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24  * OTHER DEALINGS IN THE SOFTWARE.
25  */
26 
27 /**
28  * \file uniforms.c
29  * Functions related to GLSL uniform variables.
30  * \author Brian Paul
31  */
32 
33 /**
34  * XXX things to do:
35  * 1. Check that the right error code is generated for all _mesa_error() calls.
36  * 2. Insert FLUSH_VERTICES calls in various places
37  */
38 
39 #include "main/glheader.h"
40 #include "main/context.h"
41 #include "main/shaderapi.h"
42 #include "main/shaderobj.h"
43 #include "main/uniforms.h"
44 #include "main/enums.h"
45 #include "compiler/glsl/ir_uniform.h"
46 #include "compiler/glsl_types.h"
47 #include "program/program.h"
48 #include "util/bitscan.h"
49 #include "api_exec_decl.h"
50 
51 #include "state_tracker/st_context.h"
52 
53 /**
54  * Update the vertex/fragment program's TexturesUsed array.
55  *
56  * This needs to be called after glUniform(set sampler var) is called.
57  * A call to glUniform(samplerVar, value) causes a sampler to point to a
58  * particular texture unit.  We know the sampler's texture target
59  * (1D/2D/3D/etc) from compile time but the sampler's texture unit is
60  * set by glUniform() calls.
61  *
62  * So, scan the program->SamplerUnits[] and program->SamplerTargets[]
63  * information to update the prog->TexturesUsed[] values.
64  * Each value of TexturesUsed[unit] is one of zero, TEXTURE_1D_INDEX,
65  * TEXTURE_2D_INDEX, TEXTURE_3D_INDEX, etc.
66  * We'll use that info for state validation before rendering.
67  */
68 static inline void
update_single_shader_texture_used(struct gl_shader_program * shProg,struct gl_program * prog,GLuint unit,GLuint target)69 update_single_shader_texture_used(struct gl_shader_program *shProg,
70                                   struct gl_program *prog,
71                                   GLuint unit, GLuint target)
72 {
73    gl_shader_stage prog_stage =
74       _mesa_program_enum_to_shader_stage(prog->Target);
75 
76    assert(unit < ARRAY_SIZE(prog->TexturesUsed));
77    assert(target < NUM_TEXTURE_TARGETS);
78 
79    /* From section 7.10 (Samplers) of the OpenGL 4.5 spec:
80     *
81     * "It is not allowed to have variables of different sampler types pointing
82     *  to the same texture image unit within a program object."
83     */
84    unsigned stages_mask = shProg->data->linked_stages;
85    while (stages_mask) {
86       const int stage = u_bit_scan(&stages_mask);
87 
88       /* Skip validation if we are yet to update textures used in this
89        * stage.
90        */
91       if (prog_stage < stage)
92          break;
93 
94       struct gl_program *glprog = shProg->_LinkedShaders[stage]->Program;
95       if (glprog->TexturesUsed[unit] & ~(1 << target))
96          shProg->SamplersValidated = GL_FALSE;
97    }
98 
99    prog->TexturesUsed[unit] |= (1 << target);
100 }
101 
102 void
_mesa_update_shader_textures_used(struct gl_shader_program * shProg,struct gl_program * prog)103 _mesa_update_shader_textures_used(struct gl_shader_program *shProg,
104                                   struct gl_program *prog)
105 {
106    GLbitfield mask = prog->SamplersUsed;
107    ASSERTED gl_shader_stage prog_stage =
108       _mesa_program_enum_to_shader_stage(prog->Target);
109    GLuint s;
110 
111    assert(shProg->_LinkedShaders[prog_stage]);
112 
113    memset(prog->TexturesUsed, 0, sizeof(prog->TexturesUsed));
114 
115    while (mask) {
116       s = u_bit_scan(&mask);
117 
118       update_single_shader_texture_used(shProg, prog,
119                                         prog->SamplerUnits[s],
120                                         prog->sh.SamplerTargets[s]);
121    }
122 
123    if (unlikely(prog->sh.HasBoundBindlessSampler)) {
124       /* Loop over bindless samplers bound to texture units.
125        */
126       for (s = 0; s < prog->sh.NumBindlessSamplers; s++) {
127          struct gl_bindless_sampler *sampler = &prog->sh.BindlessSamplers[s];
128 
129          if (!sampler->bound)
130             continue;
131 
132          update_single_shader_texture_used(shProg, prog, sampler->unit,
133                                            sampler->target);
134       }
135    }
136 }
137 
138 /**
139  * Connect a piece of driver storage with a part of a uniform
140  *
141  * \param uni            The uniform with which the storage will be associated
142  * \param element_stride Byte-stride between array elements.
143  *                       \sa gl_uniform_driver_storage::element_stride.
144  * \param vector_stride  Byte-stride between vectors (in a matrix).
145  *                       \sa gl_uniform_driver_storage::vector_stride.
146  * \param format         Conversion from native format to driver format
147  *                       required by the driver.
148  * \param data           Location to dump the data.
149  */
150 void
_mesa_uniform_attach_driver_storage(struct gl_uniform_storage * uni,unsigned element_stride,unsigned vector_stride,enum gl_uniform_driver_format format,void * data)151 _mesa_uniform_attach_driver_storage(struct gl_uniform_storage *uni,
152 				    unsigned element_stride,
153 				    unsigned vector_stride,
154 				    enum gl_uniform_driver_format format,
155 				    void *data)
156 {
157    uni->driver_storage =
158       realloc(uni->driver_storage,
159 	      sizeof(struct gl_uniform_driver_storage)
160 	      * (uni->num_driver_storage + 1));
161 
162    uni->driver_storage[uni->num_driver_storage].element_stride = element_stride;
163    uni->driver_storage[uni->num_driver_storage].vector_stride = vector_stride;
164    uni->driver_storage[uni->num_driver_storage].format = format;
165    uni->driver_storage[uni->num_driver_storage].data = data;
166 
167    uni->num_driver_storage++;
168 }
169 
170 /**
171  * Sever all connections with all pieces of driver storage for all uniforms
172  *
173  * \warning
174  * This function does \b not release any of the \c data pointers
175  * previously passed in to \c _mesa_uniform_attach_driver_stoarge.
176  */
177 void
_mesa_uniform_detach_all_driver_storage(struct gl_uniform_storage * uni)178 _mesa_uniform_detach_all_driver_storage(struct gl_uniform_storage *uni)
179 {
180    free(uni->driver_storage);
181    uni->driver_storage = NULL;
182    uni->num_driver_storage = 0;
183 }
184 
185 void GLAPIENTRY
_mesa_Uniform1f(GLint location,GLfloat v0)186 _mesa_Uniform1f(GLint location, GLfloat v0)
187 {
188    GET_CURRENT_CONTEXT(ctx);
189    _mesa_uniform(location, 1, &v0, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 1);
190 }
191 
192 void GLAPIENTRY
_mesa_Uniform2f(GLint location,GLfloat v0,GLfloat v1)193 _mesa_Uniform2f(GLint location, GLfloat v0, GLfloat v1)
194 {
195    GET_CURRENT_CONTEXT(ctx);
196    GLfloat v[2];
197    v[0] = v0;
198    v[1] = v1;
199    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 2);
200 }
201 
202 void GLAPIENTRY
_mesa_Uniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)203 _mesa_Uniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
204 {
205    GET_CURRENT_CONTEXT(ctx);
206    GLfloat v[3];
207    v[0] = v0;
208    v[1] = v1;
209    v[2] = v2;
210    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 3);
211 }
212 
213 void GLAPIENTRY
_mesa_Uniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)214 _mesa_Uniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2,
215                    GLfloat v3)
216 {
217    GET_CURRENT_CONTEXT(ctx);
218    GLfloat v[4];
219    v[0] = v0;
220    v[1] = v1;
221    v[2] = v2;
222    v[3] = v3;
223    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 4);
224 }
225 
226 void GLAPIENTRY
_mesa_Uniform1i(GLint location,GLint v0)227 _mesa_Uniform1i(GLint location, GLint v0)
228 {
229    GET_CURRENT_CONTEXT(ctx);
230    _mesa_uniform(location, 1, &v0, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 1);
231 }
232 
233 void GLAPIENTRY
_mesa_Uniform2i(GLint location,GLint v0,GLint v1)234 _mesa_Uniform2i(GLint location, GLint v0, GLint v1)
235 {
236    GET_CURRENT_CONTEXT(ctx);
237    GLint v[2];
238    v[0] = v0;
239    v[1] = v1;
240    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 2);
241 }
242 
243 void GLAPIENTRY
_mesa_Uniform3i(GLint location,GLint v0,GLint v1,GLint v2)244 _mesa_Uniform3i(GLint location, GLint v0, GLint v1, GLint v2)
245 {
246    GET_CURRENT_CONTEXT(ctx);
247    GLint v[3];
248    v[0] = v0;
249    v[1] = v1;
250    v[2] = v2;
251    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 3);
252 }
253 
254 void GLAPIENTRY
_mesa_Uniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)255 _mesa_Uniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
256 {
257    GET_CURRENT_CONTEXT(ctx);
258    GLint v[4];
259    v[0] = v0;
260    v[1] = v1;
261    v[2] = v2;
262    v[3] = v3;
263    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 4);
264 }
265 
266 void GLAPIENTRY
_mesa_Uniform1fv(GLint location,GLsizei count,const GLfloat * value)267 _mesa_Uniform1fv(GLint location, GLsizei count, const GLfloat * value)
268 {
269    GET_CURRENT_CONTEXT(ctx);
270    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 1);
271 }
272 
273 void GLAPIENTRY
_mesa_Uniform2fv(GLint location,GLsizei count,const GLfloat * value)274 _mesa_Uniform2fv(GLint location, GLsizei count, const GLfloat * value)
275 {
276    GET_CURRENT_CONTEXT(ctx);
277    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 2);
278 }
279 
280 void GLAPIENTRY
_mesa_Uniform3fv(GLint location,GLsizei count,const GLfloat * value)281 _mesa_Uniform3fv(GLint location, GLsizei count, const GLfloat * value)
282 {
283    GET_CURRENT_CONTEXT(ctx);
284    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 3);
285 }
286 
287 void GLAPIENTRY
_mesa_Uniform4fv(GLint location,GLsizei count,const GLfloat * value)288 _mesa_Uniform4fv(GLint location, GLsizei count, const GLfloat * value)
289 {
290    GET_CURRENT_CONTEXT(ctx);
291    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 4);
292 }
293 
294 void GLAPIENTRY
_mesa_Uniform1iv(GLint location,GLsizei count,const GLint * value)295 _mesa_Uniform1iv(GLint location, GLsizei count, const GLint * value)
296 {
297    GET_CURRENT_CONTEXT(ctx);
298    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 1);
299 }
300 
301 void GLAPIENTRY
_mesa_Uniform2iv(GLint location,GLsizei count,const GLint * value)302 _mesa_Uniform2iv(GLint location, GLsizei count, const GLint * value)
303 {
304    GET_CURRENT_CONTEXT(ctx);
305    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 2);
306 }
307 
308 void GLAPIENTRY
_mesa_Uniform3iv(GLint location,GLsizei count,const GLint * value)309 _mesa_Uniform3iv(GLint location, GLsizei count, const GLint * value)
310 {
311    GET_CURRENT_CONTEXT(ctx);
312    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 3);
313 }
314 
315 void GLAPIENTRY
_mesa_Uniform4iv(GLint location,GLsizei count,const GLint * value)316 _mesa_Uniform4iv(GLint location, GLsizei count, const GLint * value)
317 {
318    GET_CURRENT_CONTEXT(ctx);
319    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 4);
320 }
321 
322 void GLAPIENTRY
_mesa_UniformHandleui64ARB(GLint location,GLuint64 value)323 _mesa_UniformHandleui64ARB(GLint location, GLuint64 value)
324 {
325    GET_CURRENT_CONTEXT(ctx);
326    _mesa_uniform_handle(location, 1, &value, ctx, ctx->_Shader->ActiveProgram);
327 }
328 
329 void GLAPIENTRY
_mesa_UniformHandleui64vARB(GLint location,GLsizei count,const GLuint64 * value)330 _mesa_UniformHandleui64vARB(GLint location, GLsizei count,
331                             const GLuint64 *value)
332 {
333    GET_CURRENT_CONTEXT(ctx);
334    _mesa_uniform_handle(location, count, value, ctx,
335                         ctx->_Shader->ActiveProgram);
336 }
337 
338 
339 /** Same as above with direct state access **/
340 void GLAPIENTRY
_mesa_ProgramUniform1f(GLuint program,GLint location,GLfloat v0)341 _mesa_ProgramUniform1f(GLuint program, GLint location, GLfloat v0)
342 {
343    GET_CURRENT_CONTEXT(ctx);
344    struct gl_shader_program *shProg =
345       _mesa_lookup_shader_program_err(ctx, program,
346             "glProgramUniform1f");
347    _mesa_uniform(location, 1, &v0, ctx, shProg, GLSL_TYPE_FLOAT, 1);
348 }
349 
350 void GLAPIENTRY
_mesa_ProgramUniform2f(GLuint program,GLint location,GLfloat v0,GLfloat v1)351 _mesa_ProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1)
352 {
353    GET_CURRENT_CONTEXT(ctx);
354    GLfloat v[2];
355    struct gl_shader_program *shProg;
356    v[0] = v0;
357    v[1] = v1;
358    shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform2f");
359    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_FLOAT, 2);
360 }
361 
362 void GLAPIENTRY
_mesa_ProgramUniform3f(GLuint program,GLint location,GLfloat v0,GLfloat v1,GLfloat v2)363 _mesa_ProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1,
364                        GLfloat v2)
365 {
366    GET_CURRENT_CONTEXT(ctx);
367    GLfloat v[3];
368    struct gl_shader_program *shProg;
369    v[0] = v0;
370    v[1] = v1;
371    v[2] = v2;
372    shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform3f");
373    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_FLOAT, 3);
374 }
375 
376 void GLAPIENTRY
_mesa_ProgramUniform4f(GLuint program,GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)377 _mesa_ProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1,
378                        GLfloat v2, GLfloat v3)
379 {
380    GET_CURRENT_CONTEXT(ctx);
381    GLfloat v[4];
382    struct gl_shader_program *shProg;
383    v[0] = v0;
384    v[1] = v1;
385    v[2] = v2;
386    v[3] = v3;
387    shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform4f");
388    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_FLOAT, 4);
389 }
390 
391 void GLAPIENTRY
_mesa_ProgramUniform1i(GLuint program,GLint location,GLint v0)392 _mesa_ProgramUniform1i(GLuint program, GLint location, GLint v0)
393 {
394    GET_CURRENT_CONTEXT(ctx);
395    struct gl_shader_program *shProg =
396       _mesa_lookup_shader_program_err(ctx, program,
397             "glProgramUniform1i");
398    _mesa_uniform(location, 1, &v0, ctx, shProg, GLSL_TYPE_INT, 1);
399 }
400 
401 void GLAPIENTRY
_mesa_ProgramUniform2i(GLuint program,GLint location,GLint v0,GLint v1)402 _mesa_ProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1)
403 {
404    GET_CURRENT_CONTEXT(ctx);
405    GLint v[2];
406    struct gl_shader_program *shProg;
407    v[0] = v0;
408    v[1] = v1;
409    shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform2i");
410    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_INT, 2);
411 }
412 
413 void GLAPIENTRY
_mesa_ProgramUniform3i(GLuint program,GLint location,GLint v0,GLint v1,GLint v2)414 _mesa_ProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1,
415                        GLint v2)
416 {
417    GET_CURRENT_CONTEXT(ctx);
418    GLint v[3];
419    struct gl_shader_program *shProg;
420    v[0] = v0;
421    v[1] = v1;
422    v[2] = v2;
423    shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform3i");
424    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_INT, 3);
425 }
426 
427 void GLAPIENTRY
_mesa_ProgramUniform4i(GLuint program,GLint location,GLint v0,GLint v1,GLint v2,GLint v3)428 _mesa_ProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1,
429                        GLint v2, GLint v3)
430 {
431    GET_CURRENT_CONTEXT(ctx);
432    GLint v[4];
433    struct gl_shader_program *shProg;
434    v[0] = v0;
435    v[1] = v1;
436    v[2] = v2;
437    v[3] = v3;
438    shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform4i");
439    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_INT, 4);
440 }
441 
442 void GLAPIENTRY
_mesa_ProgramUniform1fv(GLuint program,GLint location,GLsizei count,const GLfloat * value)443 _mesa_ProgramUniform1fv(GLuint program, GLint location, GLsizei count,
444                         const GLfloat * value)
445 {
446    GET_CURRENT_CONTEXT(ctx);
447    struct gl_shader_program *shProg =
448       _mesa_lookup_shader_program_err(ctx, program,
449             "glProgramUniform1fv");
450    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_FLOAT, 1);
451 }
452 
453 void GLAPIENTRY
_mesa_ProgramUniform2fv(GLuint program,GLint location,GLsizei count,const GLfloat * value)454 _mesa_ProgramUniform2fv(GLuint program, GLint location, GLsizei count,
455                         const GLfloat * value)
456 {
457    GET_CURRENT_CONTEXT(ctx);
458    struct gl_shader_program *shProg =
459       _mesa_lookup_shader_program_err(ctx, program,
460             "glProgramUniform2fv");
461    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_FLOAT, 2);
462 }
463 
464 void GLAPIENTRY
_mesa_ProgramUniform3fv(GLuint program,GLint location,GLsizei count,const GLfloat * value)465 _mesa_ProgramUniform3fv(GLuint program, GLint location, GLsizei count,
466                         const GLfloat * value)
467 {
468    GET_CURRENT_CONTEXT(ctx);
469    struct gl_shader_program *shProg =
470       _mesa_lookup_shader_program_err(ctx, program,
471             "glProgramUniform3fv");
472    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_FLOAT, 3);
473 }
474 
475 void GLAPIENTRY
_mesa_ProgramUniform4fv(GLuint program,GLint location,GLsizei count,const GLfloat * value)476 _mesa_ProgramUniform4fv(GLuint program, GLint location, GLsizei count,
477                         const GLfloat * value)
478 {
479    GET_CURRENT_CONTEXT(ctx);
480    struct gl_shader_program *shProg =
481       _mesa_lookup_shader_program_err(ctx, program,
482             "glProgramUniform4fv");
483    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_FLOAT, 4);
484 }
485 
486 void GLAPIENTRY
_mesa_ProgramUniform1iv(GLuint program,GLint location,GLsizei count,const GLint * value)487 _mesa_ProgramUniform1iv(GLuint program, GLint location, GLsizei count,
488                         const GLint * value)
489 {
490    GET_CURRENT_CONTEXT(ctx);
491    struct gl_shader_program *shProg =
492       _mesa_lookup_shader_program_err(ctx, program,
493             "glProgramUniform1iv");
494    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT, 1);
495 }
496 
497 void GLAPIENTRY
_mesa_ProgramUniform2iv(GLuint program,GLint location,GLsizei count,const GLint * value)498 _mesa_ProgramUniform2iv(GLuint program, GLint location, GLsizei count,
499                         const GLint * value)
500 {
501    GET_CURRENT_CONTEXT(ctx);
502    struct gl_shader_program *shProg =
503       _mesa_lookup_shader_program_err(ctx, program,
504             "glProgramUniform2iv");
505    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT, 2);
506 }
507 
508 void GLAPIENTRY
_mesa_ProgramUniform3iv(GLuint program,GLint location,GLsizei count,const GLint * value)509 _mesa_ProgramUniform3iv(GLuint program, GLint location, GLsizei count,
510                         const GLint * value)
511 {
512    GET_CURRENT_CONTEXT(ctx);
513    struct gl_shader_program *shProg =
514       _mesa_lookup_shader_program_err(ctx, program,
515             "glProgramUniform3iv");
516    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT, 3);
517 }
518 
519 void GLAPIENTRY
_mesa_ProgramUniform4iv(GLuint program,GLint location,GLsizei count,const GLint * value)520 _mesa_ProgramUniform4iv(GLuint program, GLint location, GLsizei count,
521                         const GLint * value)
522 {
523    GET_CURRENT_CONTEXT(ctx);
524    struct gl_shader_program *shProg =
525       _mesa_lookup_shader_program_err(ctx, program,
526             "glProgramUniform4iv");
527    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT, 4);
528 }
529 
530 void GLAPIENTRY
_mesa_ProgramUniformHandleui64ARB(GLuint program,GLint location,GLuint64 value)531 _mesa_ProgramUniformHandleui64ARB(GLuint program, GLint location,
532                                   GLuint64 value)
533 {
534    GET_CURRENT_CONTEXT(ctx);
535    struct gl_shader_program *shProg =
536       _mesa_lookup_shader_program_err(ctx, program,
537             "glProgramUniformHandleui64ARB");
538    _mesa_uniform_handle(location, 1, &value, ctx, shProg);
539 }
540 
541 void GLAPIENTRY
_mesa_ProgramUniformHandleui64vARB(GLuint program,GLint location,GLsizei count,const GLuint64 * values)542 _mesa_ProgramUniformHandleui64vARB(GLuint program, GLint location,
543                                    GLsizei count, const GLuint64 *values)
544 {
545    GET_CURRENT_CONTEXT(ctx);
546    struct gl_shader_program *shProg =
547       _mesa_lookup_shader_program_err(ctx, program,
548             "glProgramUniformHandleui64vARB");
549    _mesa_uniform_handle(location, count, values, ctx, shProg);
550 }
551 
552 
553 /** OpenGL 3.0 GLuint-valued functions **/
554 void GLAPIENTRY
_mesa_Uniform1ui(GLint location,GLuint v0)555 _mesa_Uniform1ui(GLint location, GLuint v0)
556 {
557    GET_CURRENT_CONTEXT(ctx);
558    _mesa_uniform(location, 1, &v0, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 1);
559 }
560 
561 void GLAPIENTRY
_mesa_Uniform2ui(GLint location,GLuint v0,GLuint v1)562 _mesa_Uniform2ui(GLint location, GLuint v0, GLuint v1)
563 {
564    GET_CURRENT_CONTEXT(ctx);
565    GLuint v[2];
566    v[0] = v0;
567    v[1] = v1;
568    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 2);
569 }
570 
571 void GLAPIENTRY
_mesa_Uniform3ui(GLint location,GLuint v0,GLuint v1,GLuint v2)572 _mesa_Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
573 {
574    GET_CURRENT_CONTEXT(ctx);
575    GLuint v[3];
576    v[0] = v0;
577    v[1] = v1;
578    v[2] = v2;
579    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 3);
580 }
581 
582 void GLAPIENTRY
_mesa_Uniform4ui(GLint location,GLuint v0,GLuint v1,GLuint v2,GLuint v3)583 _mesa_Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
584 {
585    GET_CURRENT_CONTEXT(ctx);
586    GLuint v[4];
587    v[0] = v0;
588    v[1] = v1;
589    v[2] = v2;
590    v[3] = v3;
591    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 4);
592 }
593 
594 void GLAPIENTRY
_mesa_Uniform1uiv(GLint location,GLsizei count,const GLuint * value)595 _mesa_Uniform1uiv(GLint location, GLsizei count, const GLuint *value)
596 {
597    GET_CURRENT_CONTEXT(ctx);
598    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 1);
599 }
600 
601 void GLAPIENTRY
_mesa_Uniform2uiv(GLint location,GLsizei count,const GLuint * value)602 _mesa_Uniform2uiv(GLint location, GLsizei count, const GLuint *value)
603 {
604    GET_CURRENT_CONTEXT(ctx);
605    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 2);
606 }
607 
608 void GLAPIENTRY
_mesa_Uniform3uiv(GLint location,GLsizei count,const GLuint * value)609 _mesa_Uniform3uiv(GLint location, GLsizei count, const GLuint *value)
610 {
611    GET_CURRENT_CONTEXT(ctx);
612    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 3);
613 }
614 
615 void GLAPIENTRY
_mesa_Uniform4uiv(GLint location,GLsizei count,const GLuint * value)616 _mesa_Uniform4uiv(GLint location, GLsizei count, const GLuint *value)
617 {
618    GET_CURRENT_CONTEXT(ctx);
619    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 4);
620 }
621 
622 
623 
624 void GLAPIENTRY
_mesa_UniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)625 _mesa_UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose,
626                           const GLfloat * value)
627 {
628    GET_CURRENT_CONTEXT(ctx);
629    _mesa_uniform_matrix(location, count, transpose, value,
630                         ctx, ctx->_Shader->ActiveProgram, 2, 2, GLSL_TYPE_FLOAT);
631 }
632 
633 void GLAPIENTRY
_mesa_UniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)634 _mesa_UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose,
635                           const GLfloat * value)
636 {
637    GET_CURRENT_CONTEXT(ctx);
638    _mesa_uniform_matrix(location, count, transpose, value,
639                         ctx, ctx->_Shader->ActiveProgram, 3, 3, GLSL_TYPE_FLOAT);
640 }
641 
642 void GLAPIENTRY
_mesa_UniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)643 _mesa_UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose,
644                           const GLfloat * value)
645 {
646    GET_CURRENT_CONTEXT(ctx);
647    _mesa_uniform_matrix(location, count, transpose, value,
648                         ctx, ctx->_Shader->ActiveProgram, 4, 4, GLSL_TYPE_FLOAT);
649 }
650 
651 /** Same as above with direct state access **/
652 
653 void GLAPIENTRY
_mesa_ProgramUniform1ui(GLuint program,GLint location,GLuint v0)654 _mesa_ProgramUniform1ui(GLuint program, GLint location, GLuint v0)
655 {
656    GET_CURRENT_CONTEXT(ctx);
657    struct gl_shader_program *shProg =
658       _mesa_lookup_shader_program_err(ctx, program,
659             "glProgramUniform1ui");
660    _mesa_uniform(location, 1, &v0, ctx, shProg, GLSL_TYPE_UINT, 1);
661 }
662 
663 void GLAPIENTRY
_mesa_ProgramUniform2ui(GLuint program,GLint location,GLuint v0,GLuint v1)664 _mesa_ProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1)
665 {
666    GET_CURRENT_CONTEXT(ctx);
667    GLuint v[2];
668    struct gl_shader_program *shProg;
669    v[0] = v0;
670    v[1] = v1;
671    shProg = _mesa_lookup_shader_program_err(ctx, program,
672                                             "glProgramUniform2ui");
673    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_UINT, 2);
674 }
675 
676 void GLAPIENTRY
_mesa_ProgramUniform3ui(GLuint program,GLint location,GLuint v0,GLuint v1,GLuint v2)677 _mesa_ProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1,
678                         GLuint v2)
679 {
680    GET_CURRENT_CONTEXT(ctx);
681    GLuint v[3];
682    struct gl_shader_program *shProg;
683    v[0] = v0;
684    v[1] = v1;
685    v[2] = v2;
686    shProg = _mesa_lookup_shader_program_err(ctx, program,
687                                             "glProgramUniform3ui");
688    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_UINT, 3);
689 }
690 
691 void GLAPIENTRY
_mesa_ProgramUniform4ui(GLuint program,GLint location,GLuint v0,GLuint v1,GLuint v2,GLuint v3)692 _mesa_ProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1,
693                         GLuint v2, GLuint v3)
694 {
695    GET_CURRENT_CONTEXT(ctx);
696    GLuint v[4];
697    struct gl_shader_program *shProg;
698    v[0] = v0;
699    v[1] = v1;
700    v[2] = v2;
701    v[3] = v3;
702    shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform4ui");
703    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_UINT, 4);
704 }
705 
706 void GLAPIENTRY
_mesa_ProgramUniform1uiv(GLuint program,GLint location,GLsizei count,const GLuint * value)707 _mesa_ProgramUniform1uiv(GLuint program, GLint location, GLsizei count,
708                          const GLuint *value)
709 {
710    GET_CURRENT_CONTEXT(ctx);
711    struct gl_shader_program *shProg =
712       _mesa_lookup_shader_program_err(ctx, program,
713             "glProgramUniform1uiv");
714    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT, 1);
715 }
716 
717 void GLAPIENTRY
_mesa_ProgramUniform2uiv(GLuint program,GLint location,GLsizei count,const GLuint * value)718 _mesa_ProgramUniform2uiv(GLuint program, GLint location, GLsizei count,
719                          const GLuint *value)
720 {
721    GET_CURRENT_CONTEXT(ctx);
722    struct gl_shader_program *shProg =
723       _mesa_lookup_shader_program_err(ctx, program,
724             "glProgramUniform2uiv");
725    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT, 2);
726 }
727 
728 void GLAPIENTRY
_mesa_ProgramUniform3uiv(GLuint program,GLint location,GLsizei count,const GLuint * value)729 _mesa_ProgramUniform3uiv(GLuint program, GLint location, GLsizei count,
730                          const GLuint *value)
731 {
732    GET_CURRENT_CONTEXT(ctx);
733    struct gl_shader_program *shProg =
734       _mesa_lookup_shader_program_err(ctx, program,
735             "glProgramUniform3uiv");
736    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT, 3);
737 }
738 
739 void GLAPIENTRY
_mesa_ProgramUniform4uiv(GLuint program,GLint location,GLsizei count,const GLuint * value)740 _mesa_ProgramUniform4uiv(GLuint program, GLint location, GLsizei count,
741                          const GLuint *value)
742 {
743    GET_CURRENT_CONTEXT(ctx);
744    struct gl_shader_program *shProg =
745       _mesa_lookup_shader_program_err(ctx, program,
746             "glProgramUniform4uiv");
747    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT, 4);
748 }
749 
750 
751 
752 void GLAPIENTRY
_mesa_ProgramUniformMatrix2fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)753 _mesa_ProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count,
754                               GLboolean transpose, const GLfloat * value)
755 {
756    GET_CURRENT_CONTEXT(ctx);
757    struct gl_shader_program *shProg =
758       _mesa_lookup_shader_program_err(ctx, program,
759             "glProgramUniformMatrix2fv");
760    _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 2, 2, GLSL_TYPE_FLOAT);
761 }
762 
763 void GLAPIENTRY
_mesa_ProgramUniformMatrix3fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)764 _mesa_ProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count,
765                               GLboolean transpose, const GLfloat * value)
766 {
767    GET_CURRENT_CONTEXT(ctx);
768    struct gl_shader_program *shProg =
769       _mesa_lookup_shader_program_err(ctx, program,
770             "glProgramUniformMatrix3fv");
771    _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 3, 3, GLSL_TYPE_FLOAT);
772 }
773 
774 void GLAPIENTRY
_mesa_ProgramUniformMatrix4fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)775 _mesa_ProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count,
776                               GLboolean transpose, const GLfloat * value)
777 {
778    GET_CURRENT_CONTEXT(ctx);
779    struct gl_shader_program *shProg =
780       _mesa_lookup_shader_program_err(ctx, program,
781             "glProgramUniformMatrix4fv");
782    _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 4, 4, GLSL_TYPE_FLOAT);
783 }
784 
785 
786 /**
787  * Non-square UniformMatrix are OpenGL 2.1
788  */
789 void GLAPIENTRY
_mesa_UniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)790 _mesa_UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose,
791                          const GLfloat *value)
792 {
793    GET_CURRENT_CONTEXT(ctx);
794    _mesa_uniform_matrix(location, count, transpose, value,
795                         ctx, ctx->_Shader->ActiveProgram, 2, 3, GLSL_TYPE_FLOAT);
796 }
797 
798 void GLAPIENTRY
_mesa_UniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)799 _mesa_UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose,
800                          const GLfloat *value)
801 {
802    GET_CURRENT_CONTEXT(ctx);
803    _mesa_uniform_matrix(location, count, transpose, value,
804                         ctx, ctx->_Shader->ActiveProgram, 3, 2, GLSL_TYPE_FLOAT);
805 }
806 
807 void GLAPIENTRY
_mesa_UniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)808 _mesa_UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose,
809                          const GLfloat *value)
810 {
811    GET_CURRENT_CONTEXT(ctx);
812    _mesa_uniform_matrix(location, count, transpose, value,
813                         ctx, ctx->_Shader->ActiveProgram, 2, 4, GLSL_TYPE_FLOAT);
814 }
815 
816 void GLAPIENTRY
_mesa_UniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)817 _mesa_UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose,
818                          const GLfloat *value)
819 {
820    GET_CURRENT_CONTEXT(ctx);
821    _mesa_uniform_matrix(location, count, transpose, value,
822                         ctx, ctx->_Shader->ActiveProgram, 4, 2, GLSL_TYPE_FLOAT);
823 }
824 
825 void GLAPIENTRY
_mesa_UniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)826 _mesa_UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose,
827                          const GLfloat *value)
828 {
829    GET_CURRENT_CONTEXT(ctx);
830    _mesa_uniform_matrix(location, count, transpose, value,
831                         ctx, ctx->_Shader->ActiveProgram, 3, 4, GLSL_TYPE_FLOAT);
832 }
833 
834 void GLAPIENTRY
_mesa_UniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)835 _mesa_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose,
836                          const GLfloat *value)
837 {
838    GET_CURRENT_CONTEXT(ctx);
839    _mesa_uniform_matrix(location, count, transpose, value,
840                         ctx, ctx->_Shader->ActiveProgram, 4, 3, GLSL_TYPE_FLOAT);
841 }
842 
843 /** Same as above with direct state access **/
844 
845 void GLAPIENTRY
_mesa_ProgramUniformMatrix2x3fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)846 _mesa_ProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count,
847                                 GLboolean transpose, const GLfloat * value)
848 {
849    GET_CURRENT_CONTEXT(ctx);
850    struct gl_shader_program *shProg =
851       _mesa_lookup_shader_program_err(ctx, program,
852             "glProgramUniformMatrix2x3fv");
853    _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 2, 3, GLSL_TYPE_FLOAT);
854 }
855 
856 void GLAPIENTRY
_mesa_ProgramUniformMatrix3x2fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)857 _mesa_ProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count,
858                                 GLboolean transpose, const GLfloat * value)
859 {
860    GET_CURRENT_CONTEXT(ctx);
861    struct gl_shader_program *shProg =
862       _mesa_lookup_shader_program_err(ctx, program,
863             "glProgramUniformMatrix3x2fv");
864    _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 3, 2, GLSL_TYPE_FLOAT);
865 }
866 
867 void GLAPIENTRY
_mesa_ProgramUniformMatrix2x4fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)868 _mesa_ProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count,
869                                 GLboolean transpose, const GLfloat * value)
870 {
871    GET_CURRENT_CONTEXT(ctx);
872    struct gl_shader_program *shProg =
873       _mesa_lookup_shader_program_err(ctx, program,
874             "glProgramUniformMatrix2x4fv");
875    _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 2, 4, GLSL_TYPE_FLOAT);
876 }
877 
878 void GLAPIENTRY
_mesa_ProgramUniformMatrix4x2fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)879 _mesa_ProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count,
880                                 GLboolean transpose, const GLfloat * value)
881 {
882    GET_CURRENT_CONTEXT(ctx);
883    struct gl_shader_program *shProg =
884       _mesa_lookup_shader_program_err(ctx, program,
885             "glProgramUniformMatrix4x2fv");
886    _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 4, 2, GLSL_TYPE_FLOAT);
887 }
888 
889 void GLAPIENTRY
_mesa_ProgramUniformMatrix3x4fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)890 _mesa_ProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count,
891                                 GLboolean transpose, const GLfloat * value)
892 {
893    GET_CURRENT_CONTEXT(ctx);
894    struct gl_shader_program *shProg =
895       _mesa_lookup_shader_program_err(ctx, program,
896             "glProgramUniformMatrix3x4fv");
897    _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 3, 4, GLSL_TYPE_FLOAT);
898 }
899 
900 void GLAPIENTRY
_mesa_ProgramUniformMatrix4x3fv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)901 _mesa_ProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count,
902                                 GLboolean transpose, const GLfloat * value)
903 {
904    GET_CURRENT_CONTEXT(ctx);
905    struct gl_shader_program *shProg =
906       _mesa_lookup_shader_program_err(ctx, program,
907             "glProgramUniformMatrix4x3fv");
908    _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 4, 3, GLSL_TYPE_FLOAT);
909 }
910 
911 
912 void GLAPIENTRY
_mesa_GetnUniformfvARB(GLuint program,GLint location,GLsizei bufSize,GLfloat * params)913 _mesa_GetnUniformfvARB(GLuint program, GLint location,
914                        GLsizei bufSize, GLfloat *params)
915 {
916    GET_CURRENT_CONTEXT(ctx);
917    _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_FLOAT, params);
918 }
919 
920 void GLAPIENTRY
_mesa_GetUniformfv(GLuint program,GLint location,GLfloat * params)921 _mesa_GetUniformfv(GLuint program, GLint location, GLfloat *params)
922 {
923    _mesa_GetnUniformfvARB(program, location, INT_MAX, params);
924 }
925 
926 
927 void GLAPIENTRY
_mesa_GetnUniformivARB(GLuint program,GLint location,GLsizei bufSize,GLint * params)928 _mesa_GetnUniformivARB(GLuint program, GLint location,
929                        GLsizei bufSize, GLint *params)
930 {
931    GET_CURRENT_CONTEXT(ctx);
932    _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_INT, params);
933 }
934 
935 void GLAPIENTRY
_mesa_GetUniformiv(GLuint program,GLint location,GLint * params)936 _mesa_GetUniformiv(GLuint program, GLint location, GLint *params)
937 {
938    _mesa_GetnUniformivARB(program, location, INT_MAX, params);
939 }
940 
941 
942 /* GL3 */
943 void GLAPIENTRY
_mesa_GetnUniformuivARB(GLuint program,GLint location,GLsizei bufSize,GLuint * params)944 _mesa_GetnUniformuivARB(GLuint program, GLint location,
945                         GLsizei bufSize, GLuint *params)
946 {
947    GET_CURRENT_CONTEXT(ctx);
948    _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_UINT, params);
949 }
950 
951 void GLAPIENTRY
_mesa_GetUniformuiv(GLuint program,GLint location,GLuint * params)952 _mesa_GetUniformuiv(GLuint program, GLint location, GLuint *params)
953 {
954    _mesa_GetnUniformuivARB(program, location, INT_MAX, params);
955 }
956 
957 
958 /* GL4 */
959 void GLAPIENTRY
_mesa_GetnUniformdvARB(GLuint program,GLint location,GLsizei bufSize,GLdouble * params)960 _mesa_GetnUniformdvARB(GLuint program, GLint location,
961                        GLsizei bufSize, GLdouble *params)
962 {
963    GET_CURRENT_CONTEXT(ctx);
964 
965    _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_DOUBLE, params);
966 }
967 
968 void GLAPIENTRY
_mesa_GetUniformdv(GLuint program,GLint location,GLdouble * params)969 _mesa_GetUniformdv(GLuint program, GLint location, GLdouble *params)
970 {
971    _mesa_GetnUniformdvARB(program, location, INT_MAX, params);
972 }
973 
974 void GLAPIENTRY
_mesa_GetnUniformi64vARB(GLuint program,GLint location,GLsizei bufSize,GLint64 * params)975 _mesa_GetnUniformi64vARB(GLuint program, GLint location,
976                          GLsizei bufSize, GLint64 *params)
977 {
978    GET_CURRENT_CONTEXT(ctx);
979    _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_INT64, params);
980 }
981 void GLAPIENTRY
_mesa_GetUniformi64vARB(GLuint program,GLint location,GLint64 * params)982 _mesa_GetUniformi64vARB(GLuint program, GLint location, GLint64 *params)
983 {
984    _mesa_GetnUniformi64vARB(program, location, INT_MAX, params);
985 }
986 
987 void GLAPIENTRY
_mesa_GetnUniformui64vARB(GLuint program,GLint location,GLsizei bufSize,GLuint64 * params)988 _mesa_GetnUniformui64vARB(GLuint program, GLint location,
989                          GLsizei bufSize, GLuint64 *params)
990 {
991    GET_CURRENT_CONTEXT(ctx);
992    _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_UINT64, params);
993 }
994 
995 void GLAPIENTRY
_mesa_GetUniformui64vARB(GLuint program,GLint location,GLuint64 * params)996 _mesa_GetUniformui64vARB(GLuint program, GLint location, GLuint64 *params)
997 {
998    _mesa_GetnUniformui64vARB(program, location, INT_MAX, params);
999 }
1000 
1001 
1002 GLint
_mesa_GetUniformLocation_impl(GLuint programObj,const GLcharARB * name,bool glthread)1003 _mesa_GetUniformLocation_impl(GLuint programObj, const GLcharARB *name,
1004                               bool glthread)
1005 {
1006    struct gl_shader_program *shProg;
1007 
1008    GET_CURRENT_CONTEXT(ctx);
1009 
1010    shProg = _mesa_lookup_shader_program_err_glthread(ctx, programObj, glthread,
1011                                                      "glGetUniformLocation");
1012    if (!shProg || !name)
1013       return -1;
1014 
1015    /* Page 80 (page 94 of the PDF) of the OpenGL 2.1 spec says:
1016     *
1017     *     "If program has not been successfully linked, the error
1018     *     INVALID_OPERATION is generated."
1019     */
1020    if (shProg->data->LinkStatus == LINKING_FAILURE) {
1021       _mesa_error_glthread_safe(ctx, GL_INVALID_OPERATION, glthread,
1022                                 "glGetUniformLocation(program not linked)");
1023       return -1;
1024    }
1025 
1026    return _mesa_program_resource_location(shProg, GL_UNIFORM, name);
1027 }
1028 
1029 GLint GLAPIENTRY
_mesa_GetUniformLocation(GLuint programObj,const GLcharARB * name)1030 _mesa_GetUniformLocation(GLuint programObj, const GLcharARB *name)
1031 {
1032    return _mesa_GetUniformLocation_impl(programObj, name, false);
1033 }
1034 
1035 GLint GLAPIENTRY
_mesa_GetUniformLocation_no_error(GLuint programObj,const GLcharARB * name)1036 _mesa_GetUniformLocation_no_error(GLuint programObj, const GLcharARB *name)
1037 {
1038    GET_CURRENT_CONTEXT(ctx);
1039 
1040    struct gl_shader_program *shProg =
1041       _mesa_lookup_shader_program(ctx, programObj);
1042 
1043    return _mesa_program_resource_location(shProg, GL_UNIFORM, name);
1044 }
1045 
1046 GLuint GLAPIENTRY
_mesa_GetUniformBlockIndex(GLuint program,const GLchar * uniformBlockName)1047 _mesa_GetUniformBlockIndex(GLuint program,
1048 			   const GLchar *uniformBlockName)
1049 {
1050    GET_CURRENT_CONTEXT(ctx);
1051    struct gl_shader_program *shProg;
1052 
1053    if (!ctx->Extensions.ARB_uniform_buffer_object) {
1054       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformBlockIndex");
1055       return GL_INVALID_INDEX;
1056    }
1057 
1058    shProg = _mesa_lookup_shader_program_err(ctx, program,
1059 					    "glGetUniformBlockIndex");
1060    if (!shProg)
1061       return GL_INVALID_INDEX;
1062 
1063    struct gl_program_resource *res =
1064       _mesa_program_resource_find_name(shProg, GL_UNIFORM_BLOCK,
1065                                        uniformBlockName, NULL);
1066    if (!res)
1067       return GL_INVALID_INDEX;
1068 
1069    return _mesa_program_resource_index(shProg, res);
1070 }
1071 
1072 void GLAPIENTRY
_mesa_GetUniformIndices(GLuint program,GLsizei uniformCount,const GLchar * const * uniformNames,GLuint * uniformIndices)1073 _mesa_GetUniformIndices(GLuint program,
1074 			GLsizei uniformCount,
1075 			const GLchar * const *uniformNames,
1076 			GLuint *uniformIndices)
1077 {
1078    GET_CURRENT_CONTEXT(ctx);
1079    GLsizei i;
1080    struct gl_shader_program *shProg;
1081 
1082    if (!ctx->Extensions.ARB_uniform_buffer_object) {
1083       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformIndices");
1084       return;
1085    }
1086 
1087    shProg = _mesa_lookup_shader_program_err(ctx, program,
1088 					    "glGetUniformIndices");
1089    if (!shProg)
1090       return;
1091 
1092    if (uniformCount < 0) {
1093       _mesa_error(ctx, GL_INVALID_VALUE,
1094 		  "glGetUniformIndices(uniformCount < 0)");
1095       return;
1096    }
1097 
1098    for (i = 0; i < uniformCount; i++) {
1099       struct gl_program_resource *res =
1100          _mesa_program_resource_find_name(shProg, GL_UNIFORM, uniformNames[i],
1101                                           NULL);
1102       uniformIndices[i] = _mesa_program_resource_index(shProg, res);
1103    }
1104 }
1105 
1106 static void
uniform_block_binding(struct gl_context * ctx,struct gl_shader_program * shProg,GLuint uniformBlockIndex,GLuint uniformBlockBinding)1107 uniform_block_binding(struct gl_context *ctx, struct gl_shader_program *shProg,
1108                       GLuint uniformBlockIndex, GLuint uniformBlockBinding)
1109 {
1110    if (shProg->data->UniformBlocks[uniformBlockIndex].Binding !=
1111        uniformBlockBinding) {
1112 
1113       FLUSH_VERTICES(ctx, 0, 0);
1114       ctx->NewDriverState |= ST_NEW_UNIFORM_BUFFER;
1115 
1116       shProg->data->UniformBlocks[uniformBlockIndex].Binding =
1117          uniformBlockBinding;
1118    }
1119 }
1120 
1121 void GLAPIENTRY
_mesa_UniformBlockBinding_no_error(GLuint program,GLuint uniformBlockIndex,GLuint uniformBlockBinding)1122 _mesa_UniformBlockBinding_no_error(GLuint program, GLuint uniformBlockIndex,
1123                                    GLuint uniformBlockBinding)
1124 {
1125    GET_CURRENT_CONTEXT(ctx);
1126 
1127    struct gl_shader_program *shProg = _mesa_lookup_shader_program(ctx, program);
1128    uniform_block_binding(ctx, shProg, uniformBlockIndex, uniformBlockBinding);
1129 }
1130 
1131 void GLAPIENTRY
_mesa_UniformBlockBinding(GLuint program,GLuint uniformBlockIndex,GLuint uniformBlockBinding)1132 _mesa_UniformBlockBinding(GLuint program,
1133 			  GLuint uniformBlockIndex,
1134 			  GLuint uniformBlockBinding)
1135 {
1136    GET_CURRENT_CONTEXT(ctx);
1137    struct gl_shader_program *shProg;
1138 
1139    if (!ctx->Extensions.ARB_uniform_buffer_object) {
1140       _mesa_error(ctx, GL_INVALID_OPERATION, "glUniformBlockBinding");
1141       return;
1142    }
1143 
1144    shProg = _mesa_lookup_shader_program_err(ctx, program,
1145 					    "glUniformBlockBinding");
1146    if (!shProg)
1147       return;
1148 
1149    if (uniformBlockIndex >= shProg->data->NumUniformBlocks) {
1150       _mesa_error(ctx, GL_INVALID_VALUE,
1151 		  "glUniformBlockBinding(block index %u >= %u)",
1152                   uniformBlockIndex, shProg->data->NumUniformBlocks);
1153       return;
1154    }
1155 
1156    if (uniformBlockBinding >= ctx->Const.MaxUniformBufferBindings) {
1157       _mesa_error(ctx, GL_INVALID_VALUE,
1158 		  "glUniformBlockBinding(block binding %u >= %u)",
1159 		  uniformBlockBinding, ctx->Const.MaxUniformBufferBindings);
1160       return;
1161    }
1162 
1163    uniform_block_binding(ctx, shProg, uniformBlockIndex, uniformBlockBinding);
1164 }
1165 
1166 static void
shader_storage_block_binding(struct gl_context * ctx,struct gl_shader_program * shProg,GLuint shaderStorageBlockIndex,GLuint shaderStorageBlockBinding)1167 shader_storage_block_binding(struct gl_context *ctx,
1168                              struct gl_shader_program *shProg,
1169                              GLuint shaderStorageBlockIndex,
1170                              GLuint shaderStorageBlockBinding)
1171 {
1172    if (shProg->data->ShaderStorageBlocks[shaderStorageBlockIndex].Binding !=
1173        shaderStorageBlockBinding) {
1174 
1175       FLUSH_VERTICES(ctx, 0, 0);
1176       ctx->NewDriverState |= ST_NEW_STORAGE_BUFFER;
1177 
1178       shProg->data->ShaderStorageBlocks[shaderStorageBlockIndex].Binding =
1179          shaderStorageBlockBinding;
1180    }
1181 }
1182 
1183 void GLAPIENTRY
_mesa_ShaderStorageBlockBinding_no_error(GLuint program,GLuint shaderStorageBlockIndex,GLuint shaderStorageBlockBinding)1184 _mesa_ShaderStorageBlockBinding_no_error(GLuint program,
1185                                          GLuint shaderStorageBlockIndex,
1186                                          GLuint shaderStorageBlockBinding)
1187 {
1188    GET_CURRENT_CONTEXT(ctx);
1189 
1190    struct gl_shader_program *shProg = _mesa_lookup_shader_program(ctx, program);
1191    shader_storage_block_binding(ctx, shProg, shaderStorageBlockIndex,
1192                                 shaderStorageBlockBinding);
1193 }
1194 
1195 void GLAPIENTRY
_mesa_ShaderStorageBlockBinding(GLuint program,GLuint shaderStorageBlockIndex,GLuint shaderStorageBlockBinding)1196 _mesa_ShaderStorageBlockBinding(GLuint program,
1197 			        GLuint shaderStorageBlockIndex,
1198 			        GLuint shaderStorageBlockBinding)
1199 {
1200    GET_CURRENT_CONTEXT(ctx);
1201    struct gl_shader_program *shProg;
1202 
1203    if (!ctx->Extensions.ARB_shader_storage_buffer_object) {
1204       _mesa_error(ctx, GL_INVALID_OPERATION, "glShaderStorageBlockBinding");
1205       return;
1206    }
1207 
1208    shProg = _mesa_lookup_shader_program_err(ctx, program,
1209 					    "glShaderStorageBlockBinding");
1210    if (!shProg)
1211       return;
1212 
1213    if (shaderStorageBlockIndex >= shProg->data->NumShaderStorageBlocks) {
1214       _mesa_error(ctx, GL_INVALID_VALUE,
1215 		  "glShaderStorageBlockBinding(block index %u >= %u)",
1216                   shaderStorageBlockIndex,
1217                   shProg->data->NumShaderStorageBlocks);
1218       return;
1219    }
1220 
1221    if (shaderStorageBlockBinding >= ctx->Const.MaxShaderStorageBufferBindings) {
1222       _mesa_error(ctx, GL_INVALID_VALUE,
1223 		  "glShaderStorageBlockBinding(block binding %u >= %u)",
1224 		  shaderStorageBlockBinding,
1225                   ctx->Const.MaxShaderStorageBufferBindings);
1226       return;
1227    }
1228 
1229    shader_storage_block_binding(ctx, shProg, shaderStorageBlockIndex,
1230                                 shaderStorageBlockBinding);
1231 }
1232 
1233 /**
1234  * Generic program resource property query.
1235  */
1236 static void
mesa_bufferiv(struct gl_shader_program * shProg,GLenum type,GLuint index,GLenum pname,GLint * params,const char * caller)1237 mesa_bufferiv(struct gl_shader_program *shProg, GLenum type,
1238               GLuint index, GLenum pname, GLint *params, const char *caller)
1239 {
1240    GET_CURRENT_CONTEXT(ctx);
1241    struct gl_program_resource *res =
1242       _mesa_program_resource_find_index(shProg, type, index);
1243 
1244    if (!res) {
1245       _mesa_error(ctx, GL_INVALID_VALUE, "%s(bufferindex %d)", caller, index);
1246       return;
1247    }
1248 
1249    switch (pname) {
1250    case GL_UNIFORM_BLOCK_BINDING:
1251    case GL_ATOMIC_COUNTER_BUFFER_BINDING:
1252       _mesa_program_resource_prop(shProg, res, index, GL_BUFFER_BINDING,
1253                                   params, false, caller);
1254       return;
1255    case GL_UNIFORM_BLOCK_DATA_SIZE:
1256    case GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE:
1257       _mesa_program_resource_prop(shProg, res, index, GL_BUFFER_DATA_SIZE,
1258                                   params, false, caller);
1259       return;
1260    case GL_UNIFORM_BLOCK_NAME_LENGTH:
1261       _mesa_program_resource_prop(shProg, res, index, GL_NAME_LENGTH,
1262                                   params, false, caller);
1263       return;
1264    case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS:
1265    case GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS:
1266       _mesa_program_resource_prop(shProg, res, index, GL_NUM_ACTIVE_VARIABLES,
1267                                   params, false, caller);
1268       return;
1269    case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:
1270    case GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES:
1271       _mesa_program_resource_prop(shProg, res, index, GL_ACTIVE_VARIABLES,
1272                                   params, false, caller);
1273       return;
1274    case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:
1275    case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER:
1276       _mesa_program_resource_prop(shProg, res, index,
1277                                   GL_REFERENCED_BY_VERTEX_SHADER, params,
1278                                   false, caller);
1279       return;
1280 
1281    case GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER:
1282    case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER:
1283       _mesa_program_resource_prop(shProg, res, index,
1284                                   GL_REFERENCED_BY_TESS_CONTROL_SHADER, params,
1285                                   false, caller);
1286       return;
1287 
1288    case GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER:
1289    case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER:
1290       _mesa_program_resource_prop(shProg, res, index,
1291                                   GL_REFERENCED_BY_TESS_EVALUATION_SHADER, params,
1292                                   false, caller);
1293       return;
1294 
1295    case GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER:
1296    case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER:
1297       _mesa_program_resource_prop(shProg, res, index,
1298                                   GL_REFERENCED_BY_GEOMETRY_SHADER, params,
1299                                   false, caller);
1300       return;
1301    case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:
1302    case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER:
1303       _mesa_program_resource_prop(shProg, res, index,
1304                                   GL_REFERENCED_BY_FRAGMENT_SHADER, params,
1305                                   false, caller);
1306       return;
1307    case GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER:
1308    case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER:
1309       _mesa_program_resource_prop(shProg, res, index,
1310                                   GL_REFERENCED_BY_COMPUTE_SHADER, params,
1311                                   false, caller);
1312       return;
1313    default:
1314       _mesa_error(ctx, GL_INVALID_ENUM,
1315                   "%s(pname 0x%x (%s))", caller, pname,
1316                   _mesa_enum_to_string(pname));
1317       return;
1318    }
1319 }
1320 
1321 
1322 void GLAPIENTRY
_mesa_GetActiveUniformBlockiv(GLuint program,GLuint uniformBlockIndex,GLenum pname,GLint * params)1323 _mesa_GetActiveUniformBlockiv(GLuint program,
1324 			      GLuint uniformBlockIndex,
1325 			      GLenum pname,
1326 			      GLint *params)
1327 {
1328    GET_CURRENT_CONTEXT(ctx);
1329    struct gl_shader_program *shProg;
1330 
1331    if (!ctx->Extensions.ARB_uniform_buffer_object) {
1332       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetActiveUniformBlockiv");
1333       return;
1334    }
1335 
1336    shProg = _mesa_lookup_shader_program_err(ctx, program,
1337 					    "glGetActiveUniformBlockiv");
1338    if (!shProg)
1339       return;
1340 
1341    mesa_bufferiv(shProg, GL_UNIFORM_BLOCK, uniformBlockIndex, pname, params,
1342                  "glGetActiveUniformBlockiv");
1343 }
1344 
1345 void GLAPIENTRY
_mesa_GetActiveUniformBlockName(GLuint program,GLuint uniformBlockIndex,GLsizei bufSize,GLsizei * length,GLchar * uniformBlockName)1346 _mesa_GetActiveUniformBlockName(GLuint program,
1347 				GLuint uniformBlockIndex,
1348 				GLsizei bufSize,
1349 				GLsizei *length,
1350 				GLchar *uniformBlockName)
1351 {
1352    GET_CURRENT_CONTEXT(ctx);
1353    struct gl_shader_program *shProg;
1354 
1355    if (!ctx->Extensions.ARB_uniform_buffer_object) {
1356       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetActiveUniformBlockiv");
1357       return;
1358    }
1359 
1360    if (bufSize < 0) {
1361       _mesa_error(ctx, GL_INVALID_VALUE,
1362 		  "glGetActiveUniformBlockName(bufSize %d < 0)",
1363 		  bufSize);
1364       return;
1365    }
1366 
1367    shProg = _mesa_lookup_shader_program_err(ctx, program,
1368 					    "glGetActiveUniformBlockiv");
1369    if (!shProg)
1370       return;
1371 
1372    if (uniformBlockName)
1373       _mesa_get_program_resource_name(shProg, GL_UNIFORM_BLOCK,
1374                                       uniformBlockIndex, bufSize, length,
1375                                       uniformBlockName, false,
1376                                       "glGetActiveUniformBlockName");
1377 }
1378 
1379 void GLAPIENTRY
_mesa_GetActiveUniformName(GLuint program,GLuint uniformIndex,GLsizei bufSize,GLsizei * length,GLchar * uniformName)1380 _mesa_GetActiveUniformName(GLuint program, GLuint uniformIndex,
1381 			   GLsizei bufSize, GLsizei *length,
1382 			   GLchar *uniformName)
1383 {
1384    GET_CURRENT_CONTEXT(ctx);
1385    struct gl_shader_program *shProg;
1386 
1387    if (!ctx->Extensions.ARB_uniform_buffer_object) {
1388       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetActiveUniformName");
1389       return;
1390    }
1391 
1392    if (bufSize < 0) {
1393       _mesa_error(ctx, GL_INVALID_VALUE,
1394 		  "glGetActiveUniformName(bufSize %d < 0)",
1395 		  bufSize);
1396       return;
1397    }
1398 
1399    shProg = _mesa_lookup_shader_program_err(ctx, program, "glGetActiveUniformName");
1400 
1401    if (!shProg)
1402       return;
1403 
1404    _mesa_get_program_resource_name(shProg, GL_UNIFORM, uniformIndex, bufSize,
1405                                    length, uniformName, false,
1406                                    "glGetActiveUniformName");
1407 }
1408 
1409 void GLAPIENTRY
_mesa_GetActiveAtomicCounterBufferiv(GLuint program,GLuint bufferIndex,GLenum pname,GLint * params)1410 _mesa_GetActiveAtomicCounterBufferiv(GLuint program, GLuint bufferIndex,
1411                                      GLenum pname, GLint *params)
1412 {
1413    GET_CURRENT_CONTEXT(ctx);
1414    struct gl_shader_program *shProg;
1415 
1416    if (!ctx->Extensions.ARB_shader_atomic_counters) {
1417       _mesa_error(ctx, GL_INVALID_OPERATION,
1418                   "glGetActiveAtomicCounterBufferiv");
1419       return;
1420    }
1421 
1422    shProg = _mesa_lookup_shader_program_err(ctx, program,
1423                                             "glGetActiveAtomicCounterBufferiv");
1424    if (!shProg)
1425       return;
1426 
1427    mesa_bufferiv(shProg, GL_ATOMIC_COUNTER_BUFFER, bufferIndex, pname, params,
1428                  "glGetActiveAtomicCounterBufferiv");
1429 }
1430 
1431 void GLAPIENTRY
_mesa_Uniform1d(GLint location,GLdouble v0)1432 _mesa_Uniform1d(GLint location, GLdouble v0)
1433 {
1434    GET_CURRENT_CONTEXT(ctx);
1435    _mesa_uniform(location, 1, &v0, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 1);
1436 }
1437 
1438 void GLAPIENTRY
_mesa_Uniform2d(GLint location,GLdouble v0,GLdouble v1)1439 _mesa_Uniform2d(GLint location, GLdouble v0, GLdouble v1)
1440 {
1441    GET_CURRENT_CONTEXT(ctx);
1442    GLdouble v[2];
1443    v[0] = v0;
1444    v[1] = v1;
1445    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 2);
1446 }
1447 
1448 void GLAPIENTRY
_mesa_Uniform3d(GLint location,GLdouble v0,GLdouble v1,GLdouble v2)1449 _mesa_Uniform3d(GLint location, GLdouble v0, GLdouble v1, GLdouble v2)
1450 {
1451    GET_CURRENT_CONTEXT(ctx);
1452    GLdouble v[3];
1453    v[0] = v0;
1454    v[1] = v1;
1455    v[2] = v2;
1456    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 3);
1457 }
1458 
1459 void GLAPIENTRY
_mesa_Uniform4d(GLint location,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)1460 _mesa_Uniform4d(GLint location, GLdouble v0, GLdouble v1, GLdouble v2,
1461                 GLdouble v3)
1462 {
1463    GET_CURRENT_CONTEXT(ctx);
1464    GLdouble v[4];
1465    v[0] = v0;
1466    v[1] = v1;
1467    v[2] = v2;
1468    v[3] = v3;
1469    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 4);
1470 }
1471 
1472 void GLAPIENTRY
_mesa_Uniform1dv(GLint location,GLsizei count,const GLdouble * value)1473 _mesa_Uniform1dv(GLint location, GLsizei count, const GLdouble * value)
1474 {
1475    GET_CURRENT_CONTEXT(ctx);
1476    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 1);
1477 }
1478 
1479 void GLAPIENTRY
_mesa_Uniform2dv(GLint location,GLsizei count,const GLdouble * value)1480 _mesa_Uniform2dv(GLint location, GLsizei count, const GLdouble * value)
1481 {
1482    GET_CURRENT_CONTEXT(ctx);
1483    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 2);
1484 }
1485 
1486 void GLAPIENTRY
_mesa_Uniform3dv(GLint location,GLsizei count,const GLdouble * value)1487 _mesa_Uniform3dv(GLint location, GLsizei count, const GLdouble * value)
1488 {
1489    GET_CURRENT_CONTEXT(ctx);
1490    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 3);
1491 }
1492 
1493 void GLAPIENTRY
_mesa_Uniform4dv(GLint location,GLsizei count,const GLdouble * value)1494 _mesa_Uniform4dv(GLint location, GLsizei count, const GLdouble * value)
1495 {
1496    GET_CURRENT_CONTEXT(ctx);
1497    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 4);
1498 }
1499 
1500 void GLAPIENTRY
_mesa_UniformMatrix2dv(GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1501 _mesa_UniformMatrix2dv(GLint location, GLsizei count, GLboolean transpose,
1502                        const GLdouble * value)
1503 {
1504    GET_CURRENT_CONTEXT(ctx);
1505    _mesa_uniform_matrix(location, count, transpose, value,
1506                         ctx, ctx->_Shader->ActiveProgram, 2, 2, GLSL_TYPE_DOUBLE);
1507 }
1508 
1509 void GLAPIENTRY
_mesa_UniformMatrix3dv(GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1510 _mesa_UniformMatrix3dv(GLint location, GLsizei count, GLboolean transpose,
1511                        const GLdouble * value)
1512 {
1513    GET_CURRENT_CONTEXT(ctx);
1514    _mesa_uniform_matrix(location, count, transpose, value,
1515                         ctx, ctx->_Shader->ActiveProgram, 3, 3, GLSL_TYPE_DOUBLE);
1516 }
1517 
1518 void GLAPIENTRY
_mesa_UniformMatrix4dv(GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1519 _mesa_UniformMatrix4dv(GLint location, GLsizei count, GLboolean transpose,
1520                        const GLdouble * value)
1521 {
1522    GET_CURRENT_CONTEXT(ctx);
1523    _mesa_uniform_matrix(location, count, transpose, value,
1524                         ctx, ctx->_Shader->ActiveProgram, 4, 4, GLSL_TYPE_DOUBLE);
1525 }
1526 
1527 void GLAPIENTRY
_mesa_UniformMatrix2x3dv(GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1528 _mesa_UniformMatrix2x3dv(GLint location, GLsizei count, GLboolean transpose,
1529                          const GLdouble *value)
1530 {
1531    GET_CURRENT_CONTEXT(ctx);
1532    _mesa_uniform_matrix(location, count, transpose, value,
1533                         ctx, ctx->_Shader->ActiveProgram, 2, 3, GLSL_TYPE_DOUBLE);
1534 }
1535 
1536 void GLAPIENTRY
_mesa_UniformMatrix3x2dv(GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1537 _mesa_UniformMatrix3x2dv(GLint location, GLsizei count, GLboolean transpose,
1538                          const GLdouble *value)
1539 {
1540    GET_CURRENT_CONTEXT(ctx);
1541    _mesa_uniform_matrix(location, count, transpose, value,
1542                         ctx, ctx->_Shader->ActiveProgram, 3, 2, GLSL_TYPE_DOUBLE);
1543 }
1544 
1545 void GLAPIENTRY
_mesa_UniformMatrix2x4dv(GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1546 _mesa_UniformMatrix2x4dv(GLint location, GLsizei count, GLboolean transpose,
1547                          const GLdouble *value)
1548 {
1549    GET_CURRENT_CONTEXT(ctx);
1550    _mesa_uniform_matrix(location, count, transpose, value,
1551                         ctx, ctx->_Shader->ActiveProgram, 2, 4, GLSL_TYPE_DOUBLE);
1552 }
1553 
1554 void GLAPIENTRY
_mesa_UniformMatrix4x2dv(GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1555 _mesa_UniformMatrix4x2dv(GLint location, GLsizei count, GLboolean transpose,
1556                          const GLdouble *value)
1557 {
1558    GET_CURRENT_CONTEXT(ctx);
1559    _mesa_uniform_matrix(location, count, transpose, value,
1560                         ctx, ctx->_Shader->ActiveProgram, 4, 2, GLSL_TYPE_DOUBLE);
1561 }
1562 
1563 void GLAPIENTRY
_mesa_UniformMatrix3x4dv(GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1564 _mesa_UniformMatrix3x4dv(GLint location, GLsizei count, GLboolean transpose,
1565                          const GLdouble *value)
1566 {
1567    GET_CURRENT_CONTEXT(ctx);
1568    _mesa_uniform_matrix(location, count, transpose, value,
1569                         ctx, ctx->_Shader->ActiveProgram, 3, 4, GLSL_TYPE_DOUBLE);
1570 }
1571 
1572 void GLAPIENTRY
_mesa_UniformMatrix4x3dv(GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1573 _mesa_UniformMatrix4x3dv(GLint location, GLsizei count, GLboolean transpose,
1574                          const GLdouble *value)
1575 {
1576    GET_CURRENT_CONTEXT(ctx);
1577    _mesa_uniform_matrix(location, count, transpose, value,
1578                         ctx, ctx->_Shader->ActiveProgram, 4, 3, GLSL_TYPE_DOUBLE);
1579 }
1580 
1581 void GLAPIENTRY
_mesa_ProgramUniform1d(GLuint program,GLint location,GLdouble v0)1582 _mesa_ProgramUniform1d(GLuint program, GLint location, GLdouble v0)
1583 {
1584    GET_CURRENT_CONTEXT(ctx);
1585    struct gl_shader_program *shProg =
1586       _mesa_lookup_shader_program_err(ctx, program,
1587             "glProgramUniform1d");
1588    _mesa_uniform(location, 1, &v0, ctx, shProg, GLSL_TYPE_DOUBLE, 1);
1589 }
1590 
1591 void GLAPIENTRY
_mesa_ProgramUniform2d(GLuint program,GLint location,GLdouble v0,GLdouble v1)1592 _mesa_ProgramUniform2d(GLuint program, GLint location, GLdouble v0, GLdouble v1)
1593 {
1594    GET_CURRENT_CONTEXT(ctx);
1595    GLdouble v[2];
1596    struct gl_shader_program *shProg;
1597    v[0] = v0;
1598    v[1] = v1;
1599    shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform2d");
1600    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_DOUBLE, 2);
1601 }
1602 
1603 void GLAPIENTRY
_mesa_ProgramUniform3d(GLuint program,GLint location,GLdouble v0,GLdouble v1,GLdouble v2)1604 _mesa_ProgramUniform3d(GLuint program, GLint location, GLdouble v0, GLdouble v1,
1605                        GLdouble v2)
1606 {
1607    GET_CURRENT_CONTEXT(ctx);
1608    GLdouble v[3];
1609    struct gl_shader_program *shProg;
1610    v[0] = v0;
1611    v[1] = v1;
1612    v[2] = v2;
1613    shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform3d");
1614    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_DOUBLE, 3);
1615 }
1616 
1617 void GLAPIENTRY
_mesa_ProgramUniform4d(GLuint program,GLint location,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)1618 _mesa_ProgramUniform4d(GLuint program, GLint location, GLdouble v0, GLdouble v1,
1619                        GLdouble v2, GLdouble v3)
1620 {
1621    GET_CURRENT_CONTEXT(ctx);
1622    GLdouble v[4];
1623    struct gl_shader_program *shProg;
1624    v[0] = v0;
1625    v[1] = v1;
1626    v[2] = v2;
1627    v[3] = v3;
1628    shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform4d");
1629    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_DOUBLE, 4);
1630 }
1631 
1632 void GLAPIENTRY
_mesa_ProgramUniform1dv(GLuint program,GLint location,GLsizei count,const GLdouble * value)1633 _mesa_ProgramUniform1dv(GLuint program, GLint location, GLsizei count,
1634                         const GLdouble * value)
1635 {
1636    GET_CURRENT_CONTEXT(ctx);
1637    struct gl_shader_program *shProg =
1638       _mesa_lookup_shader_program_err(ctx, program,
1639             "glProgramUniform1dv");
1640    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_DOUBLE, 1);
1641 }
1642 
1643 void GLAPIENTRY
_mesa_ProgramUniform2dv(GLuint program,GLint location,GLsizei count,const GLdouble * value)1644 _mesa_ProgramUniform2dv(GLuint program, GLint location, GLsizei count,
1645                         const GLdouble * value)
1646 {
1647    GET_CURRENT_CONTEXT(ctx);
1648    struct gl_shader_program *shProg =
1649       _mesa_lookup_shader_program_err(ctx, program,
1650             "glProgramUniform2dv");
1651    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_DOUBLE, 2);
1652 }
1653 
1654 void GLAPIENTRY
_mesa_ProgramUniform3dv(GLuint program,GLint location,GLsizei count,const GLdouble * value)1655 _mesa_ProgramUniform3dv(GLuint program, GLint location, GLsizei count,
1656                         const GLdouble * value)
1657 {
1658    GET_CURRENT_CONTEXT(ctx);
1659    struct gl_shader_program *shProg =
1660       _mesa_lookup_shader_program_err(ctx, program,
1661             "glProgramUniform3dv");
1662    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_DOUBLE, 3);
1663 }
1664 
1665 void GLAPIENTRY
_mesa_ProgramUniform4dv(GLuint program,GLint location,GLsizei count,const GLdouble * value)1666 _mesa_ProgramUniform4dv(GLuint program, GLint location, GLsizei count,
1667                         const GLdouble * value)
1668 {
1669    GET_CURRENT_CONTEXT(ctx);
1670    struct gl_shader_program *shProg =
1671       _mesa_lookup_shader_program_err(ctx, program,
1672             "glProgramUniform4dv");
1673    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_DOUBLE, 4);
1674 }
1675 
1676 void GLAPIENTRY
_mesa_ProgramUniformMatrix2dv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1677 _mesa_ProgramUniformMatrix2dv(GLuint program, GLint location, GLsizei count,
1678                               GLboolean transpose, const GLdouble * value)
1679 {
1680    GET_CURRENT_CONTEXT(ctx);
1681    struct gl_shader_program *shProg =
1682       _mesa_lookup_shader_program_err(ctx, program,
1683             "glProgramUniformMatrix2dv");
1684    _mesa_uniform_matrix(location, count, transpose, value,
1685                         ctx, shProg, 2, 2, GLSL_TYPE_DOUBLE);
1686 }
1687 
1688 void GLAPIENTRY
_mesa_ProgramUniformMatrix3dv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1689 _mesa_ProgramUniformMatrix3dv(GLuint program, GLint location, GLsizei count,
1690                               GLboolean transpose, const GLdouble * value)
1691 {
1692    GET_CURRENT_CONTEXT(ctx);
1693    struct gl_shader_program *shProg =
1694       _mesa_lookup_shader_program_err(ctx, program,
1695             "glProgramUniformMatrix3dv");
1696    _mesa_uniform_matrix(location, count, transpose, value,
1697                         ctx, shProg, 3, 3, GLSL_TYPE_DOUBLE);
1698 }
1699 
1700 void GLAPIENTRY
_mesa_ProgramUniformMatrix4dv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1701 _mesa_ProgramUniformMatrix4dv(GLuint program, GLint location, GLsizei count,
1702                               GLboolean transpose, const GLdouble * value)
1703 {
1704    GET_CURRENT_CONTEXT(ctx);
1705    struct gl_shader_program *shProg =
1706       _mesa_lookup_shader_program_err(ctx, program,
1707             "glProgramUniformMatrix4dv");
1708    _mesa_uniform_matrix(location, count, transpose, value,
1709                         ctx, shProg, 4, 4, GLSL_TYPE_DOUBLE);
1710 }
1711 
1712 void GLAPIENTRY
_mesa_ProgramUniformMatrix2x3dv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1713 _mesa_ProgramUniformMatrix2x3dv(GLuint program, GLint location, GLsizei count,
1714                                 GLboolean transpose, const GLdouble * value)
1715 {
1716    GET_CURRENT_CONTEXT(ctx);
1717    struct gl_shader_program *shProg =
1718       _mesa_lookup_shader_program_err(ctx, program,
1719             "glProgramUniformMatrix2x3dv");
1720    _mesa_uniform_matrix(location, count, transpose, value,
1721                         ctx, shProg, 2, 3, GLSL_TYPE_DOUBLE);
1722 }
1723 
1724 void GLAPIENTRY
_mesa_ProgramUniformMatrix3x2dv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1725 _mesa_ProgramUniformMatrix3x2dv(GLuint program, GLint location, GLsizei count,
1726                                 GLboolean transpose, const GLdouble * value)
1727 {
1728    GET_CURRENT_CONTEXT(ctx);
1729    struct gl_shader_program *shProg =
1730       _mesa_lookup_shader_program_err(ctx, program,
1731             "glProgramUniformMatrix3x2dv");
1732    _mesa_uniform_matrix(location, count, transpose, value,
1733                         ctx, shProg, 3, 2, GLSL_TYPE_DOUBLE);
1734 }
1735 
1736 void GLAPIENTRY
_mesa_ProgramUniformMatrix2x4dv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1737 _mesa_ProgramUniformMatrix2x4dv(GLuint program, GLint location, GLsizei count,
1738                                 GLboolean transpose, const GLdouble * value)
1739 {
1740    GET_CURRENT_CONTEXT(ctx);
1741    struct gl_shader_program *shProg =
1742       _mesa_lookup_shader_program_err(ctx, program,
1743             "glProgramUniformMatrix2x4dv");
1744    _mesa_uniform_matrix(location, count, transpose, value,
1745                         ctx, shProg, 2, 4, GLSL_TYPE_DOUBLE);
1746 }
1747 
1748 void GLAPIENTRY
_mesa_ProgramUniformMatrix4x2dv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1749 _mesa_ProgramUniformMatrix4x2dv(GLuint program, GLint location, GLsizei count,
1750                                 GLboolean transpose, const GLdouble * value)
1751 {
1752    GET_CURRENT_CONTEXT(ctx);
1753    struct gl_shader_program *shProg =
1754       _mesa_lookup_shader_program_err(ctx, program,
1755             "glProgramUniformMatrix4x2dv");
1756    _mesa_uniform_matrix(location, count, transpose, value,
1757                         ctx, shProg, 4, 2, GLSL_TYPE_DOUBLE);
1758 }
1759 
1760 void GLAPIENTRY
_mesa_ProgramUniformMatrix3x4dv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1761 _mesa_ProgramUniformMatrix3x4dv(GLuint program, GLint location, GLsizei count,
1762                                 GLboolean transpose, const GLdouble * value)
1763 {
1764    GET_CURRENT_CONTEXT(ctx);
1765    struct gl_shader_program *shProg =
1766       _mesa_lookup_shader_program_err(ctx, program,
1767             "glProgramUniformMatrix3x4dv");
1768    _mesa_uniform_matrix(location, count, transpose, value,
1769                         ctx, shProg, 3, 4, GLSL_TYPE_DOUBLE);
1770 }
1771 
1772 void GLAPIENTRY
_mesa_ProgramUniformMatrix4x3dv(GLuint program,GLint location,GLsizei count,GLboolean transpose,const GLdouble * value)1773 _mesa_ProgramUniformMatrix4x3dv(GLuint program, GLint location, GLsizei count,
1774                                 GLboolean transpose, const GLdouble * value)
1775 {
1776    GET_CURRENT_CONTEXT(ctx);
1777    struct gl_shader_program *shProg =
1778       _mesa_lookup_shader_program_err(ctx, program,
1779             "glProgramUniformMatrix4x3dv");
1780    _mesa_uniform_matrix(location, count, transpose, value,
1781                         ctx, shProg, 4, 3, GLSL_TYPE_DOUBLE);
1782 }
1783 
1784 void GLAPIENTRY
_mesa_Uniform1i64ARB(GLint location,GLint64 v0)1785 _mesa_Uniform1i64ARB(GLint location, GLint64 v0)
1786 {
1787    GET_CURRENT_CONTEXT(ctx);
1788    _mesa_uniform(location, 1, &v0, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 1);
1789 }
1790 
1791 void GLAPIENTRY
_mesa_Uniform2i64ARB(GLint location,GLint64 v0,GLint64 v1)1792 _mesa_Uniform2i64ARB(GLint location, GLint64 v0, GLint64 v1)
1793 {
1794    GET_CURRENT_CONTEXT(ctx);
1795    int64_t v[2];
1796    v[0] = v0;
1797    v[1] = v1;
1798    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 2);
1799 }
1800 
1801 void GLAPIENTRY
_mesa_Uniform3i64ARB(GLint location,GLint64 v0,GLint64 v1,GLint64 v2)1802 _mesa_Uniform3i64ARB(GLint location, GLint64 v0, GLint64 v1, GLint64 v2)
1803 {
1804    GET_CURRENT_CONTEXT(ctx);
1805    int64_t v[3];
1806    v[0] = v0;
1807    v[1] = v1;
1808    v[2] = v2;
1809    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 3);
1810 }
1811 
1812 void GLAPIENTRY
_mesa_Uniform4i64ARB(GLint location,GLint64 v0,GLint64 v1,GLint64 v2,GLint64 v3)1813 _mesa_Uniform4i64ARB(GLint location,  GLint64 v0, GLint64 v1, GLint64 v2, GLint64 v3)
1814 {
1815    GET_CURRENT_CONTEXT(ctx);
1816    int64_t v[4];
1817    v[0] = v0;
1818    v[1] = v1;
1819    v[2] = v2;
1820    v[3] = v3;
1821    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 4);
1822 }
1823 
1824 void GLAPIENTRY
_mesa_Uniform1i64vARB(GLint location,GLsizei count,const GLint64 * value)1825 _mesa_Uniform1i64vARB(GLint location, GLsizei count, const GLint64 *value)
1826 {
1827    GET_CURRENT_CONTEXT(ctx);
1828    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 1);
1829 }
1830 
1831 void GLAPIENTRY
_mesa_Uniform2i64vARB(GLint location,GLsizei count,const GLint64 * value)1832 _mesa_Uniform2i64vARB(GLint location,  GLsizei count, const GLint64 *value)
1833 {
1834    GET_CURRENT_CONTEXT(ctx);
1835    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 2);
1836 }
1837 
1838 void GLAPIENTRY
_mesa_Uniform3i64vARB(GLint location,GLsizei count,const GLint64 * value)1839 _mesa_Uniform3i64vARB(GLint location,  GLsizei count, const GLint64 *value)
1840 {
1841    GET_CURRENT_CONTEXT(ctx);
1842    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 3);
1843 }
1844 
1845 void GLAPIENTRY
_mesa_Uniform4i64vARB(GLint location,GLsizei count,const GLint64 * value)1846 _mesa_Uniform4i64vARB(GLint location,  GLsizei count, const GLint64 *value)
1847 {
1848    GET_CURRENT_CONTEXT(ctx);
1849    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 4);
1850 }
1851 
1852 void GLAPIENTRY
_mesa_Uniform1ui64ARB(GLint location,GLuint64 v0)1853 _mesa_Uniform1ui64ARB(GLint location,  GLuint64 v0)
1854 {
1855    GET_CURRENT_CONTEXT(ctx);
1856    _mesa_uniform(location, 1, &v0, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 1);
1857 }
1858 
1859 void GLAPIENTRY
_mesa_Uniform2ui64ARB(GLint location,GLuint64 v0,GLuint64 v1)1860 _mesa_Uniform2ui64ARB(GLint location,  GLuint64 v0, GLuint64 v1)
1861 {
1862    GET_CURRENT_CONTEXT(ctx);
1863    uint64_t v[2];
1864    v[0] = v0;
1865    v[1] = v1;
1866    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 2);
1867 }
1868 
1869 void GLAPIENTRY
_mesa_Uniform3ui64ARB(GLint location,GLuint64 v0,GLuint64 v1,GLuint64 v2)1870 _mesa_Uniform3ui64ARB(GLint location, GLuint64 v0, GLuint64 v1, GLuint64 v2)
1871 {
1872    GET_CURRENT_CONTEXT(ctx);
1873    uint64_t v[3];
1874    v[0] = v0;
1875    v[1] = v1;
1876    v[2] = v2;
1877    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 3);
1878 }
1879 
1880 void GLAPIENTRY
_mesa_Uniform4ui64ARB(GLint location,GLuint64 v0,GLuint64 v1,GLuint64 v2,GLuint64 v3)1881 _mesa_Uniform4ui64ARB(GLint location,  GLuint64 v0, GLuint64 v1, GLuint64 v2, GLuint64 v3)
1882 {
1883    GET_CURRENT_CONTEXT(ctx);
1884    uint64_t v[4];
1885    v[0] = v0;
1886    v[1] = v1;
1887    v[2] = v2;
1888    v[3] = v3;
1889    _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 4);
1890 }
1891 
1892 void GLAPIENTRY
_mesa_Uniform1ui64vARB(GLint location,GLsizei count,const GLuint64 * value)1893 _mesa_Uniform1ui64vARB(GLint location,  GLsizei count, const GLuint64 *value)
1894 {
1895    GET_CURRENT_CONTEXT(ctx);
1896    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 1);
1897 }
1898 
1899 void GLAPIENTRY
_mesa_Uniform2ui64vARB(GLint location,GLsizei count,const GLuint64 * value)1900 _mesa_Uniform2ui64vARB(GLint location,  GLsizei count, const GLuint64 *value)
1901 {
1902    GET_CURRENT_CONTEXT(ctx);
1903    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 2);
1904 }
1905 
1906 void GLAPIENTRY
_mesa_Uniform3ui64vARB(GLint location,GLsizei count,const GLuint64 * value)1907 _mesa_Uniform3ui64vARB(GLint location,  GLsizei count, const GLuint64 *value)
1908 {
1909    GET_CURRENT_CONTEXT(ctx);
1910    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 3);
1911 }
1912 
1913 void GLAPIENTRY
_mesa_Uniform4ui64vARB(GLint location,GLsizei count,const GLuint64 * value)1914 _mesa_Uniform4ui64vARB(GLint location,  GLsizei count, const GLuint64 *value)
1915 {
1916    GET_CURRENT_CONTEXT(ctx);
1917    _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 4);
1918 }
1919 
1920 /* DSA entrypoints */
1921 void GLAPIENTRY
_mesa_ProgramUniform1i64ARB(GLuint program,GLint location,GLint64 v0)1922 _mesa_ProgramUniform1i64ARB(GLuint program, GLint location, GLint64 v0)
1923 {
1924    GET_CURRENT_CONTEXT(ctx);
1925    struct gl_shader_program *shProg =
1926       _mesa_lookup_shader_program_err(ctx, program,
1927             "glProgramUniform1i64ARB");
1928    _mesa_uniform(location, 1, &v0, ctx, shProg, GLSL_TYPE_INT64, 1);
1929 }
1930 
1931 void GLAPIENTRY
_mesa_ProgramUniform2i64ARB(GLuint program,GLint location,GLint64 v0,GLint64 v1)1932 _mesa_ProgramUniform2i64ARB(GLuint program, GLint location, GLint64 v0, GLint64 v1)
1933 {
1934    GET_CURRENT_CONTEXT(ctx);
1935    struct gl_shader_program *shProg =
1936       _mesa_lookup_shader_program_err(ctx, program,
1937                                       "glProgramUniform2i64ARB");
1938    int64_t v[2];
1939    v[0] = v0;
1940    v[1] = v1;
1941    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_INT64, 2);
1942 }
1943 
1944 void GLAPIENTRY
_mesa_ProgramUniform3i64ARB(GLuint program,GLint location,GLint64 v0,GLint64 v1,GLint64 v2)1945 _mesa_ProgramUniform3i64ARB(GLuint program, GLint location, GLint64 v0, GLint64 v1, GLint64 v2)
1946 {
1947    GET_CURRENT_CONTEXT(ctx);
1948    struct gl_shader_program *shProg =
1949       _mesa_lookup_shader_program_err(ctx, program,
1950                                       "glProgramUniform3i64ARB");
1951    int64_t v[3];
1952    v[0] = v0;
1953    v[1] = v1;
1954    v[2] = v2;
1955    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_INT64, 3);
1956 }
1957 
1958 void GLAPIENTRY
_mesa_ProgramUniform4i64ARB(GLuint program,GLint location,GLint64 v0,GLint64 v1,GLint64 v2,GLint64 v3)1959 _mesa_ProgramUniform4i64ARB(GLuint program, GLint location,  GLint64 v0, GLint64 v1, GLint64 v2, GLint64 v3)
1960 {
1961    GET_CURRENT_CONTEXT(ctx);
1962    struct gl_shader_program *shProg =
1963       _mesa_lookup_shader_program_err(ctx, program,
1964                                       "glProgramUniform4i64ARB");
1965    int64_t v[4];
1966    v[0] = v0;
1967    v[1] = v1;
1968    v[2] = v2;
1969    v[3] = v3;
1970    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_INT64, 4);
1971 }
1972 
1973 void GLAPIENTRY
_mesa_ProgramUniform1i64vARB(GLuint program,GLint location,GLsizei count,const GLint64 * value)1974 _mesa_ProgramUniform1i64vARB(GLuint program, GLint location, GLsizei count, const GLint64 *value)
1975 {
1976    GET_CURRENT_CONTEXT(ctx);
1977    struct gl_shader_program *shProg =
1978       _mesa_lookup_shader_program_err(ctx, program,
1979                                       "glProgramUniform1i64vARB");
1980    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT64, 1);
1981 }
1982 
1983 void GLAPIENTRY
_mesa_ProgramUniform2i64vARB(GLuint program,GLint location,GLsizei count,const GLint64 * value)1984 _mesa_ProgramUniform2i64vARB(GLuint program, GLint location,  GLsizei count, const GLint64 *value)
1985 {
1986    GET_CURRENT_CONTEXT(ctx);
1987    struct gl_shader_program *shProg =
1988       _mesa_lookup_shader_program_err(ctx, program,
1989                                       "glProgramUniform2i64vARB");
1990    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT64, 2);
1991 }
1992 
1993 void GLAPIENTRY
_mesa_ProgramUniform3i64vARB(GLuint program,GLint location,GLsizei count,const GLint64 * value)1994 _mesa_ProgramUniform3i64vARB(GLuint program, GLint location,  GLsizei count, const GLint64 *value)
1995 {
1996    GET_CURRENT_CONTEXT(ctx);
1997    struct gl_shader_program *shProg =
1998       _mesa_lookup_shader_program_err(ctx, program,
1999                                       "glProgramUniform3i64vARB");
2000    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT64, 3);
2001 }
2002 
2003 void GLAPIENTRY
_mesa_ProgramUniform4i64vARB(GLuint program,GLint location,GLsizei count,const GLint64 * value)2004 _mesa_ProgramUniform4i64vARB(GLuint program, GLint location,  GLsizei count, const GLint64 *value)
2005 {
2006    GET_CURRENT_CONTEXT(ctx);
2007    struct gl_shader_program *shProg =
2008       _mesa_lookup_shader_program_err(ctx, program,
2009                                       "glProgramUniform4i64vARB");
2010    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT64, 4);
2011 }
2012 
2013 void GLAPIENTRY
_mesa_ProgramUniform1ui64ARB(GLuint program,GLint location,GLuint64 v0)2014 _mesa_ProgramUniform1ui64ARB(GLuint program, GLint location,  GLuint64 v0)
2015 {
2016    GET_CURRENT_CONTEXT(ctx);
2017    struct gl_shader_program *shProg =
2018       _mesa_lookup_shader_program_err(ctx, program,
2019                                       "glProgramUniform1ui64ARB");
2020    _mesa_uniform(location, 1, &v0, ctx, shProg, GLSL_TYPE_UINT64, 1);
2021 }
2022 
2023 void GLAPIENTRY
_mesa_ProgramUniform2ui64ARB(GLuint program,GLint location,GLuint64 v0,GLuint64 v1)2024 _mesa_ProgramUniform2ui64ARB(GLuint program, GLint location,  GLuint64 v0, GLuint64 v1)
2025 {
2026    GET_CURRENT_CONTEXT(ctx);
2027    struct gl_shader_program *shProg =
2028       _mesa_lookup_shader_program_err(ctx, program,
2029                                       "glProgramUniform2ui64ARB");
2030    uint64_t v[2];
2031    v[0] = v0;
2032    v[1] = v1;
2033    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_UINT64, 2);
2034 }
2035 
2036 void GLAPIENTRY
_mesa_ProgramUniform3ui64ARB(GLuint program,GLint location,GLuint64 v0,GLuint64 v1,GLuint64 v2)2037 _mesa_ProgramUniform3ui64ARB(GLuint program, GLint location, GLuint64 v0, GLuint64 v1, GLuint64 v2)
2038 {
2039    GET_CURRENT_CONTEXT(ctx);
2040    struct gl_shader_program *shProg =
2041       _mesa_lookup_shader_program_err(ctx, program,
2042                                       "glProgramUniform3ui64ARB");
2043    uint64_t v[3];
2044    v[0] = v0;
2045    v[1] = v1;
2046    v[2] = v2;
2047    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_UINT64, 3);
2048 }
2049 
2050 void GLAPIENTRY
_mesa_ProgramUniform4ui64ARB(GLuint program,GLint location,GLuint64 v0,GLuint64 v1,GLuint64 v2,GLuint64 v3)2051 _mesa_ProgramUniform4ui64ARB(GLuint program, GLint location,  GLuint64 v0, GLuint64 v1, GLuint64 v2, GLuint64 v3)
2052 {
2053    GET_CURRENT_CONTEXT(ctx);
2054    struct gl_shader_program *shProg =
2055       _mesa_lookup_shader_program_err(ctx, program,
2056                                       "glProgramUniform4ui64ARB");
2057    uint64_t v[4];
2058    v[0] = v0;
2059    v[1] = v1;
2060    v[2] = v2;
2061    v[3] = v3;
2062    _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_UINT64, 4);
2063 }
2064 
2065 void GLAPIENTRY
_mesa_ProgramUniform1ui64vARB(GLuint program,GLint location,GLsizei count,const GLuint64 * value)2066 _mesa_ProgramUniform1ui64vARB(GLuint program, GLint location,  GLsizei count, const GLuint64 *value)
2067 {
2068    GET_CURRENT_CONTEXT(ctx);
2069    struct gl_shader_program *shProg =
2070       _mesa_lookup_shader_program_err(ctx, program,
2071                                       "glProgramUniform1ui64vARB");
2072    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT64, 1);
2073 }
2074 
2075 void GLAPIENTRY
_mesa_ProgramUniform2ui64vARB(GLuint program,GLint location,GLsizei count,const GLuint64 * value)2076 _mesa_ProgramUniform2ui64vARB(GLuint program, GLint location,  GLsizei count, const GLuint64 *value)
2077 {
2078    GET_CURRENT_CONTEXT(ctx);
2079    struct gl_shader_program *shProg =
2080       _mesa_lookup_shader_program_err(ctx, program,
2081                                       "glProgramUniform2ui64vARB");
2082    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT64, 2);
2083 }
2084 
2085 void GLAPIENTRY
_mesa_ProgramUniform3ui64vARB(GLuint program,GLint location,GLsizei count,const GLuint64 * value)2086 _mesa_ProgramUniform3ui64vARB(GLuint program, GLint location,  GLsizei count, const GLuint64 *value)
2087 {
2088    GET_CURRENT_CONTEXT(ctx);
2089    struct gl_shader_program *shProg =
2090       _mesa_lookup_shader_program_err(ctx, program,
2091                                       "glProgramUniform3ui64vARB");
2092    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT64, 3);
2093 }
2094 
2095 void GLAPIENTRY
_mesa_ProgramUniform4ui64vARB(GLuint program,GLint location,GLsizei count,const GLuint64 * value)2096 _mesa_ProgramUniform4ui64vARB(GLuint program, GLint location,  GLsizei count, const GLuint64 *value)
2097 {
2098    GET_CURRENT_CONTEXT(ctx);
2099    struct gl_shader_program *shProg =
2100       _mesa_lookup_shader_program_err(ctx, program,
2101                                       "glProgramUniform4ui64vARB");
2102    _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT64, 4);
2103 }
2104