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