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