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