1848b8605Smrg/* 2848b8605Smrg * Mesa 3-D graphics library 3848b8605Smrg * 4848b8605Smrg * Copyright (C) 2004-2008 Brian Paul All Rights Reserved. 5848b8605Smrg * Copyright (C) 2009-2010 VMware, Inc. All Rights Reserved. 6848b8605Smrg * Copyright © 2010 Intel Corporation 7848b8605Smrg * 8848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a 9848b8605Smrg * copy of this software and associated documentation files (the "Software"), 10848b8605Smrg * to deal in the Software without restriction, including without limitation 11848b8605Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12848b8605Smrg * and/or sell copies of the Software, and to permit persons to whom the 13848b8605Smrg * Software is furnished to do so, subject to the following conditions: 14848b8605Smrg * 15848b8605Smrg * The above copyright notice and this permission notice shall be included 16848b8605Smrg * in all copies or substantial portions of the Software. 17848b8605Smrg * 18848b8605Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19848b8605Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20848b8605Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21848b8605Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 22848b8605Smrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 23848b8605Smrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 24848b8605Smrg * OTHER DEALINGS IN THE SOFTWARE. 25848b8605Smrg */ 26848b8605Smrg 27848b8605Smrg/** 28848b8605Smrg * \file uniforms.c 29848b8605Smrg * Functions related to GLSL uniform variables. 30848b8605Smrg * \author Brian Paul 31848b8605Smrg */ 32848b8605Smrg 33848b8605Smrg/** 34848b8605Smrg * XXX things to do: 35848b8605Smrg * 1. Check that the right error code is generated for all _mesa_error() calls. 36848b8605Smrg * 2. Insert FLUSH_VERTICES calls in various places 37848b8605Smrg */ 38848b8605Smrg 39848b8605Smrg#include "main/glheader.h" 40848b8605Smrg#include "main/context.h" 41848b8605Smrg#include "main/shaderapi.h" 42848b8605Smrg#include "main/shaderobj.h" 43848b8605Smrg#include "main/uniforms.h" 44848b8605Smrg#include "main/enums.h" 45b8e80941Smrg#include "compiler/glsl/ir_uniform.h" 46b8e80941Smrg#include "compiler/glsl_types.h" 47848b8605Smrg#include "program/program.h" 48b8e80941Smrg#include "util/bitscan.h" 49848b8605Smrg 50848b8605Smrg/** 51848b8605Smrg * Update the vertex/fragment program's TexturesUsed array. 52848b8605Smrg * 53848b8605Smrg * This needs to be called after glUniform(set sampler var) is called. 54848b8605Smrg * A call to glUniform(samplerVar, value) causes a sampler to point to a 55848b8605Smrg * particular texture unit. We know the sampler's texture target 56848b8605Smrg * (1D/2D/3D/etc) from compile time but the sampler's texture unit is 57848b8605Smrg * set by glUniform() calls. 58848b8605Smrg * 59848b8605Smrg * So, scan the program->SamplerUnits[] and program->SamplerTargets[] 60848b8605Smrg * information to update the prog->TexturesUsed[] values. 61848b8605Smrg * Each value of TexturesUsed[unit] is one of zero, TEXTURE_1D_INDEX, 62848b8605Smrg * TEXTURE_2D_INDEX, TEXTURE_3D_INDEX, etc. 63848b8605Smrg * We'll use that info for state validation before rendering. 64848b8605Smrg */ 65b8e80941Smrgstatic inline void 66b8e80941Smrgupdate_single_shader_texture_used(struct gl_shader_program *shProg, 67b8e80941Smrg struct gl_program *prog, 68b8e80941Smrg GLuint unit, GLuint target) 69b8e80941Smrg{ 70b8e80941Smrg gl_shader_stage prog_stage = 71b8e80941Smrg _mesa_program_enum_to_shader_stage(prog->Target); 72b8e80941Smrg 73b8e80941Smrg assert(unit < ARRAY_SIZE(prog->TexturesUsed)); 74b8e80941Smrg assert(target < NUM_TEXTURE_TARGETS); 75b8e80941Smrg 76b8e80941Smrg /* From section 7.10 (Samplers) of the OpenGL 4.5 spec: 77b8e80941Smrg * 78b8e80941Smrg * "It is not allowed to have variables of different sampler types pointing 79b8e80941Smrg * to the same texture image unit within a program object." 80b8e80941Smrg */ 81b8e80941Smrg unsigned stages_mask = shProg->data->linked_stages; 82b8e80941Smrg while (stages_mask) { 83b8e80941Smrg const int stage = u_bit_scan(&stages_mask); 84b8e80941Smrg 85b8e80941Smrg /* Skip validation if we are yet to update textures used in this 86b8e80941Smrg * stage. 87b8e80941Smrg */ 88b8e80941Smrg if (prog_stage < stage) 89b8e80941Smrg break; 90b8e80941Smrg 91b8e80941Smrg struct gl_program *glprog = shProg->_LinkedShaders[stage]->Program; 92b8e80941Smrg if (glprog->TexturesUsed[unit] & ~(1 << target)) 93b8e80941Smrg shProg->SamplersValidated = GL_FALSE; 94b8e80941Smrg } 95b8e80941Smrg 96b8e80941Smrg prog->TexturesUsed[unit] |= (1 << target); 97b8e80941Smrg} 98b8e80941Smrg 99848b8605Smrgvoid 100848b8605Smrg_mesa_update_shader_textures_used(struct gl_shader_program *shProg, 101b8e80941Smrg struct gl_program *prog) 102848b8605Smrg{ 103b8e80941Smrg GLbitfield mask = prog->SamplersUsed; 104b8e80941Smrg gl_shader_stage prog_stage = 105b8e80941Smrg _mesa_program_enum_to_shader_stage(prog->Target); 106b8e80941Smrg MAYBE_UNUSED struct gl_linked_shader *shader = 107b8e80941Smrg shProg->_LinkedShaders[prog_stage]; 108848b8605Smrg GLuint s; 109848b8605Smrg 110848b8605Smrg assert(shader); 111848b8605Smrg 112848b8605Smrg memset(prog->TexturesUsed, 0, sizeof(prog->TexturesUsed)); 113848b8605Smrg 114b8e80941Smrg while (mask) { 115b8e80941Smrg s = u_bit_scan(&mask); 116b8e80941Smrg 117b8e80941Smrg update_single_shader_texture_used(shProg, prog, 118b8e80941Smrg prog->SamplerUnits[s], 119b8e80941Smrg prog->sh.SamplerTargets[s]); 120b8e80941Smrg } 121b8e80941Smrg 122b8e80941Smrg if (unlikely(prog->sh.HasBoundBindlessSampler)) { 123b8e80941Smrg /* Loop over bindless samplers bound to texture units. 124b8e80941Smrg */ 125b8e80941Smrg for (s = 0; s < prog->sh.NumBindlessSamplers; s++) { 126b8e80941Smrg struct gl_bindless_sampler *sampler = &prog->sh.BindlessSamplers[s]; 127b8e80941Smrg 128b8e80941Smrg if (!sampler->bound) 129b8e80941Smrg continue; 130b8e80941Smrg 131b8e80941Smrg update_single_shader_texture_used(shProg, prog, sampler->unit, 132b8e80941Smrg sampler->target); 133848b8605Smrg } 134848b8605Smrg } 135848b8605Smrg} 136848b8605Smrg 137848b8605Smrg/** 138848b8605Smrg * Connect a piece of driver storage with a part of a uniform 139848b8605Smrg * 140848b8605Smrg * \param uni The uniform with which the storage will be associated 141848b8605Smrg * \param element_stride Byte-stride between array elements. 142848b8605Smrg * \sa gl_uniform_driver_storage::element_stride. 143848b8605Smrg * \param vector_stride Byte-stride between vectors (in a matrix). 144848b8605Smrg * \sa gl_uniform_driver_storage::vector_stride. 145848b8605Smrg * \param format Conversion from native format to driver format 146848b8605Smrg * required by the driver. 147848b8605Smrg * \param data Location to dump the data. 148848b8605Smrg */ 149848b8605Smrgvoid 150848b8605Smrg_mesa_uniform_attach_driver_storage(struct gl_uniform_storage *uni, 151848b8605Smrg unsigned element_stride, 152848b8605Smrg unsigned vector_stride, 153848b8605Smrg enum gl_uniform_driver_format format, 154848b8605Smrg void *data) 155848b8605Smrg{ 156848b8605Smrg uni->driver_storage = 157848b8605Smrg realloc(uni->driver_storage, 158848b8605Smrg sizeof(struct gl_uniform_driver_storage) 159848b8605Smrg * (uni->num_driver_storage + 1)); 160848b8605Smrg 161848b8605Smrg uni->driver_storage[uni->num_driver_storage].element_stride = element_stride; 162848b8605Smrg uni->driver_storage[uni->num_driver_storage].vector_stride = vector_stride; 163848b8605Smrg uni->driver_storage[uni->num_driver_storage].format = format; 164848b8605Smrg uni->driver_storage[uni->num_driver_storage].data = data; 165848b8605Smrg 166848b8605Smrg uni->num_driver_storage++; 167848b8605Smrg} 168848b8605Smrg 169848b8605Smrg/** 170848b8605Smrg * Sever all connections with all pieces of driver storage for all uniforms 171848b8605Smrg * 172848b8605Smrg * \warning 173848b8605Smrg * This function does \b not release any of the \c data pointers 174848b8605Smrg * previously passed in to \c _mesa_uniform_attach_driver_stoarge. 175848b8605Smrg */ 176848b8605Smrgvoid 177848b8605Smrg_mesa_uniform_detach_all_driver_storage(struct gl_uniform_storage *uni) 178848b8605Smrg{ 179848b8605Smrg free(uni->driver_storage); 180848b8605Smrg uni->driver_storage = NULL; 181848b8605Smrg uni->num_driver_storage = 0; 182848b8605Smrg} 183848b8605Smrg 184848b8605Smrgvoid GLAPIENTRY 185848b8605Smrg_mesa_Uniform1f(GLint location, GLfloat v0) 186848b8605Smrg{ 187848b8605Smrg GET_CURRENT_CONTEXT(ctx); 188b8e80941Smrg _mesa_uniform(location, 1, &v0, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 1); 189848b8605Smrg} 190848b8605Smrg 191848b8605Smrgvoid GLAPIENTRY 192848b8605Smrg_mesa_Uniform2f(GLint location, GLfloat v0, GLfloat v1) 193848b8605Smrg{ 194848b8605Smrg GET_CURRENT_CONTEXT(ctx); 195848b8605Smrg GLfloat v[2]; 196848b8605Smrg v[0] = v0; 197848b8605Smrg v[1] = v1; 198b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 2); 199848b8605Smrg} 200848b8605Smrg 201848b8605Smrgvoid GLAPIENTRY 202848b8605Smrg_mesa_Uniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) 203848b8605Smrg{ 204848b8605Smrg GET_CURRENT_CONTEXT(ctx); 205848b8605Smrg GLfloat v[3]; 206848b8605Smrg v[0] = v0; 207848b8605Smrg v[1] = v1; 208848b8605Smrg v[2] = v2; 209b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 3); 210848b8605Smrg} 211848b8605Smrg 212848b8605Smrgvoid GLAPIENTRY 213848b8605Smrg_mesa_Uniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, 214848b8605Smrg GLfloat v3) 215848b8605Smrg{ 216848b8605Smrg GET_CURRENT_CONTEXT(ctx); 217848b8605Smrg GLfloat v[4]; 218848b8605Smrg v[0] = v0; 219848b8605Smrg v[1] = v1; 220848b8605Smrg v[2] = v2; 221848b8605Smrg v[3] = v3; 222b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 4); 223848b8605Smrg} 224848b8605Smrg 225848b8605Smrgvoid GLAPIENTRY 226848b8605Smrg_mesa_Uniform1i(GLint location, GLint v0) 227848b8605Smrg{ 228848b8605Smrg GET_CURRENT_CONTEXT(ctx); 229b8e80941Smrg _mesa_uniform(location, 1, &v0, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 1); 230848b8605Smrg} 231848b8605Smrg 232848b8605Smrgvoid GLAPIENTRY 233848b8605Smrg_mesa_Uniform2i(GLint location, GLint v0, GLint v1) 234848b8605Smrg{ 235848b8605Smrg GET_CURRENT_CONTEXT(ctx); 236848b8605Smrg GLint v[2]; 237848b8605Smrg v[0] = v0; 238848b8605Smrg v[1] = v1; 239b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 2); 240848b8605Smrg} 241848b8605Smrg 242848b8605Smrgvoid GLAPIENTRY 243848b8605Smrg_mesa_Uniform3i(GLint location, GLint v0, GLint v1, GLint v2) 244848b8605Smrg{ 245848b8605Smrg GET_CURRENT_CONTEXT(ctx); 246848b8605Smrg GLint v[3]; 247848b8605Smrg v[0] = v0; 248848b8605Smrg v[1] = v1; 249848b8605Smrg v[2] = v2; 250b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 3); 251848b8605Smrg} 252848b8605Smrg 253848b8605Smrgvoid GLAPIENTRY 254848b8605Smrg_mesa_Uniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) 255848b8605Smrg{ 256848b8605Smrg GET_CURRENT_CONTEXT(ctx); 257848b8605Smrg GLint v[4]; 258848b8605Smrg v[0] = v0; 259848b8605Smrg v[1] = v1; 260848b8605Smrg v[2] = v2; 261848b8605Smrg v[3] = v3; 262b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 4); 263848b8605Smrg} 264848b8605Smrg 265848b8605Smrgvoid GLAPIENTRY 266848b8605Smrg_mesa_Uniform1fv(GLint location, GLsizei count, const GLfloat * value) 267848b8605Smrg{ 268848b8605Smrg GET_CURRENT_CONTEXT(ctx); 269b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 1); 270848b8605Smrg} 271848b8605Smrg 272848b8605Smrgvoid GLAPIENTRY 273848b8605Smrg_mesa_Uniform2fv(GLint location, GLsizei count, const GLfloat * value) 274848b8605Smrg{ 275848b8605Smrg GET_CURRENT_CONTEXT(ctx); 276b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 2); 277848b8605Smrg} 278848b8605Smrg 279848b8605Smrgvoid GLAPIENTRY 280848b8605Smrg_mesa_Uniform3fv(GLint location, GLsizei count, const GLfloat * value) 281848b8605Smrg{ 282848b8605Smrg GET_CURRENT_CONTEXT(ctx); 283b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 3); 284848b8605Smrg} 285848b8605Smrg 286848b8605Smrgvoid GLAPIENTRY 287848b8605Smrg_mesa_Uniform4fv(GLint location, GLsizei count, const GLfloat * value) 288848b8605Smrg{ 289848b8605Smrg GET_CURRENT_CONTEXT(ctx); 290b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_FLOAT, 4); 291848b8605Smrg} 292848b8605Smrg 293848b8605Smrgvoid GLAPIENTRY 294848b8605Smrg_mesa_Uniform1iv(GLint location, GLsizei count, const GLint * value) 295848b8605Smrg{ 296848b8605Smrg GET_CURRENT_CONTEXT(ctx); 297b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 1); 298848b8605Smrg} 299848b8605Smrg 300848b8605Smrgvoid GLAPIENTRY 301848b8605Smrg_mesa_Uniform2iv(GLint location, GLsizei count, const GLint * value) 302848b8605Smrg{ 303848b8605Smrg GET_CURRENT_CONTEXT(ctx); 304b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 2); 305848b8605Smrg} 306848b8605Smrg 307848b8605Smrgvoid GLAPIENTRY 308848b8605Smrg_mesa_Uniform3iv(GLint location, GLsizei count, const GLint * value) 309848b8605Smrg{ 310848b8605Smrg GET_CURRENT_CONTEXT(ctx); 311b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 3); 312848b8605Smrg} 313848b8605Smrg 314848b8605Smrgvoid GLAPIENTRY 315848b8605Smrg_mesa_Uniform4iv(GLint location, GLsizei count, const GLint * value) 316848b8605Smrg{ 317848b8605Smrg GET_CURRENT_CONTEXT(ctx); 318b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT, 4); 319b8e80941Smrg} 320b8e80941Smrg 321b8e80941Smrgvoid GLAPIENTRY 322b8e80941Smrg_mesa_UniformHandleui64ARB(GLint location, GLuint64 value) 323b8e80941Smrg{ 324b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 325b8e80941Smrg _mesa_uniform_handle(location, 1, &value, ctx, ctx->_Shader->ActiveProgram); 326b8e80941Smrg} 327b8e80941Smrg 328b8e80941Smrgvoid GLAPIENTRY 329b8e80941Smrg_mesa_UniformHandleui64vARB(GLint location, GLsizei count, 330b8e80941Smrg const GLuint64 *value) 331b8e80941Smrg{ 332b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 333b8e80941Smrg _mesa_uniform_handle(location, count, value, ctx, 334b8e80941Smrg ctx->_Shader->ActiveProgram); 335848b8605Smrg} 336848b8605Smrg 337b8e80941Smrg 338848b8605Smrg/** Same as above with direct state access **/ 339848b8605Smrgvoid GLAPIENTRY 340848b8605Smrg_mesa_ProgramUniform1f(GLuint program, GLint location, GLfloat v0) 341848b8605Smrg{ 342848b8605Smrg GET_CURRENT_CONTEXT(ctx); 343848b8605Smrg struct gl_shader_program *shProg = 344848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 345848b8605Smrg "glProgramUniform1f"); 346b8e80941Smrg _mesa_uniform(location, 1, &v0, ctx, shProg, GLSL_TYPE_FLOAT, 1); 347848b8605Smrg} 348848b8605Smrg 349848b8605Smrgvoid GLAPIENTRY 350848b8605Smrg_mesa_ProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1) 351848b8605Smrg{ 352848b8605Smrg GET_CURRENT_CONTEXT(ctx); 353848b8605Smrg GLfloat v[2]; 354848b8605Smrg struct gl_shader_program *shProg; 355848b8605Smrg v[0] = v0; 356848b8605Smrg v[1] = v1; 357848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform2f"); 358b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_FLOAT, 2); 359848b8605Smrg} 360848b8605Smrg 361848b8605Smrgvoid GLAPIENTRY 362848b8605Smrg_mesa_ProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, 363848b8605Smrg GLfloat v2) 364848b8605Smrg{ 365848b8605Smrg GET_CURRENT_CONTEXT(ctx); 366848b8605Smrg GLfloat v[3]; 367848b8605Smrg struct gl_shader_program *shProg; 368848b8605Smrg v[0] = v0; 369848b8605Smrg v[1] = v1; 370848b8605Smrg v[2] = v2; 371848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform3f"); 372b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_FLOAT, 3); 373848b8605Smrg} 374848b8605Smrg 375848b8605Smrgvoid GLAPIENTRY 376848b8605Smrg_mesa_ProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, 377848b8605Smrg GLfloat v2, GLfloat v3) 378848b8605Smrg{ 379848b8605Smrg GET_CURRENT_CONTEXT(ctx); 380848b8605Smrg GLfloat v[4]; 381848b8605Smrg struct gl_shader_program *shProg; 382848b8605Smrg v[0] = v0; 383848b8605Smrg v[1] = v1; 384848b8605Smrg v[2] = v2; 385848b8605Smrg v[3] = v3; 386848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform4f"); 387b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_FLOAT, 4); 388848b8605Smrg} 389848b8605Smrg 390848b8605Smrgvoid GLAPIENTRY 391848b8605Smrg_mesa_ProgramUniform1i(GLuint program, GLint location, GLint v0) 392848b8605Smrg{ 393848b8605Smrg GET_CURRENT_CONTEXT(ctx); 394848b8605Smrg struct gl_shader_program *shProg = 395848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 396848b8605Smrg "glProgramUniform1i"); 397b8e80941Smrg _mesa_uniform(location, 1, &v0, ctx, shProg, GLSL_TYPE_INT, 1); 398848b8605Smrg} 399848b8605Smrg 400848b8605Smrgvoid GLAPIENTRY 401848b8605Smrg_mesa_ProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1) 402848b8605Smrg{ 403848b8605Smrg GET_CURRENT_CONTEXT(ctx); 404848b8605Smrg GLint v[2]; 405848b8605Smrg struct gl_shader_program *shProg; 406848b8605Smrg v[0] = v0; 407848b8605Smrg v[1] = v1; 408848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform2i"); 409b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_INT, 2); 410848b8605Smrg} 411848b8605Smrg 412848b8605Smrgvoid GLAPIENTRY 413848b8605Smrg_mesa_ProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, 414848b8605Smrg GLint v2) 415848b8605Smrg{ 416848b8605Smrg GET_CURRENT_CONTEXT(ctx); 417848b8605Smrg GLint v[3]; 418848b8605Smrg struct gl_shader_program *shProg; 419848b8605Smrg v[0] = v0; 420848b8605Smrg v[1] = v1; 421848b8605Smrg v[2] = v2; 422848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform3i"); 423b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_INT, 3); 424848b8605Smrg} 425848b8605Smrg 426848b8605Smrgvoid GLAPIENTRY 427848b8605Smrg_mesa_ProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, 428848b8605Smrg GLint v2, GLint v3) 429848b8605Smrg{ 430848b8605Smrg GET_CURRENT_CONTEXT(ctx); 431848b8605Smrg GLint v[4]; 432848b8605Smrg struct gl_shader_program *shProg; 433848b8605Smrg v[0] = v0; 434848b8605Smrg v[1] = v1; 435848b8605Smrg v[2] = v2; 436848b8605Smrg v[3] = v3; 437848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform4i"); 438b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_INT, 4); 439848b8605Smrg} 440848b8605Smrg 441848b8605Smrgvoid GLAPIENTRY 442848b8605Smrg_mesa_ProgramUniform1fv(GLuint program, GLint location, GLsizei count, 443848b8605Smrg const GLfloat * value) 444848b8605Smrg{ 445848b8605Smrg GET_CURRENT_CONTEXT(ctx); 446848b8605Smrg struct gl_shader_program *shProg = 447848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 448848b8605Smrg "glProgramUniform1fv"); 449b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_FLOAT, 1); 450848b8605Smrg} 451848b8605Smrg 452848b8605Smrgvoid GLAPIENTRY 453848b8605Smrg_mesa_ProgramUniform2fv(GLuint program, GLint location, GLsizei count, 454848b8605Smrg const GLfloat * value) 455848b8605Smrg{ 456848b8605Smrg GET_CURRENT_CONTEXT(ctx); 457848b8605Smrg struct gl_shader_program *shProg = 458848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 459848b8605Smrg "glProgramUniform2fv"); 460b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_FLOAT, 2); 461848b8605Smrg} 462848b8605Smrg 463848b8605Smrgvoid GLAPIENTRY 464848b8605Smrg_mesa_ProgramUniform3fv(GLuint program, GLint location, GLsizei count, 465848b8605Smrg const GLfloat * value) 466848b8605Smrg{ 467848b8605Smrg GET_CURRENT_CONTEXT(ctx); 468848b8605Smrg struct gl_shader_program *shProg = 469848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 470848b8605Smrg "glProgramUniform3fv"); 471b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_FLOAT, 3); 472848b8605Smrg} 473848b8605Smrg 474848b8605Smrgvoid GLAPIENTRY 475848b8605Smrg_mesa_ProgramUniform4fv(GLuint program, GLint location, GLsizei count, 476848b8605Smrg const GLfloat * value) 477848b8605Smrg{ 478848b8605Smrg GET_CURRENT_CONTEXT(ctx); 479848b8605Smrg struct gl_shader_program *shProg = 480848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 481848b8605Smrg "glProgramUniform4fv"); 482b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_FLOAT, 4); 483848b8605Smrg} 484848b8605Smrg 485848b8605Smrgvoid GLAPIENTRY 486848b8605Smrg_mesa_ProgramUniform1iv(GLuint program, GLint location, GLsizei count, 487848b8605Smrg const GLint * value) 488848b8605Smrg{ 489848b8605Smrg GET_CURRENT_CONTEXT(ctx); 490848b8605Smrg struct gl_shader_program *shProg = 491848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 492848b8605Smrg "glProgramUniform1iv"); 493b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT, 1); 494848b8605Smrg} 495848b8605Smrg 496848b8605Smrgvoid GLAPIENTRY 497848b8605Smrg_mesa_ProgramUniform2iv(GLuint program, GLint location, GLsizei count, 498848b8605Smrg const GLint * value) 499848b8605Smrg{ 500848b8605Smrg GET_CURRENT_CONTEXT(ctx); 501848b8605Smrg struct gl_shader_program *shProg = 502848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 503848b8605Smrg "glProgramUniform2iv"); 504b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT, 2); 505848b8605Smrg} 506848b8605Smrg 507848b8605Smrgvoid GLAPIENTRY 508848b8605Smrg_mesa_ProgramUniform3iv(GLuint program, GLint location, GLsizei count, 509848b8605Smrg const GLint * value) 510848b8605Smrg{ 511848b8605Smrg GET_CURRENT_CONTEXT(ctx); 512848b8605Smrg struct gl_shader_program *shProg = 513848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 514848b8605Smrg "glProgramUniform3iv"); 515b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT, 3); 516848b8605Smrg} 517848b8605Smrg 518848b8605Smrgvoid GLAPIENTRY 519848b8605Smrg_mesa_ProgramUniform4iv(GLuint program, GLint location, GLsizei count, 520848b8605Smrg const GLint * value) 521848b8605Smrg{ 522848b8605Smrg GET_CURRENT_CONTEXT(ctx); 523848b8605Smrg struct gl_shader_program *shProg = 524848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 525848b8605Smrg "glProgramUniform4iv"); 526b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT, 4); 527b8e80941Smrg} 528b8e80941Smrg 529b8e80941Smrgvoid GLAPIENTRY 530b8e80941Smrg_mesa_ProgramUniformHandleui64ARB(GLuint program, GLint location, 531b8e80941Smrg GLuint64 value) 532b8e80941Smrg{ 533b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 534b8e80941Smrg struct gl_shader_program *shProg = 535b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 536b8e80941Smrg "glProgramUniformHandleui64ARB"); 537b8e80941Smrg _mesa_uniform_handle(location, 1, &value, ctx, shProg); 538b8e80941Smrg} 539b8e80941Smrg 540b8e80941Smrgvoid GLAPIENTRY 541b8e80941Smrg_mesa_ProgramUniformHandleui64vARB(GLuint program, GLint location, 542b8e80941Smrg GLsizei count, const GLuint64 *values) 543b8e80941Smrg{ 544b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 545b8e80941Smrg struct gl_shader_program *shProg = 546b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 547b8e80941Smrg "glProgramUniformHandleui64vARB"); 548b8e80941Smrg _mesa_uniform_handle(location, count, values, ctx, shProg); 549848b8605Smrg} 550848b8605Smrg 551848b8605Smrg 552848b8605Smrg/** OpenGL 3.0 GLuint-valued functions **/ 553848b8605Smrgvoid GLAPIENTRY 554848b8605Smrg_mesa_Uniform1ui(GLint location, GLuint v0) 555848b8605Smrg{ 556848b8605Smrg GET_CURRENT_CONTEXT(ctx); 557b8e80941Smrg _mesa_uniform(location, 1, &v0, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 1); 558848b8605Smrg} 559848b8605Smrg 560848b8605Smrgvoid GLAPIENTRY 561848b8605Smrg_mesa_Uniform2ui(GLint location, GLuint v0, GLuint v1) 562848b8605Smrg{ 563848b8605Smrg GET_CURRENT_CONTEXT(ctx); 564848b8605Smrg GLuint v[2]; 565848b8605Smrg v[0] = v0; 566848b8605Smrg v[1] = v1; 567b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 2); 568848b8605Smrg} 569848b8605Smrg 570848b8605Smrgvoid GLAPIENTRY 571848b8605Smrg_mesa_Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) 572848b8605Smrg{ 573848b8605Smrg GET_CURRENT_CONTEXT(ctx); 574848b8605Smrg GLuint v[3]; 575848b8605Smrg v[0] = v0; 576848b8605Smrg v[1] = v1; 577848b8605Smrg v[2] = v2; 578b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 3); 579848b8605Smrg} 580848b8605Smrg 581848b8605Smrgvoid GLAPIENTRY 582848b8605Smrg_mesa_Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) 583848b8605Smrg{ 584848b8605Smrg GET_CURRENT_CONTEXT(ctx); 585848b8605Smrg GLuint v[4]; 586848b8605Smrg v[0] = v0; 587848b8605Smrg v[1] = v1; 588848b8605Smrg v[2] = v2; 589848b8605Smrg v[3] = v3; 590b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 4); 591848b8605Smrg} 592848b8605Smrg 593848b8605Smrgvoid GLAPIENTRY 594848b8605Smrg_mesa_Uniform1uiv(GLint location, GLsizei count, const GLuint *value) 595848b8605Smrg{ 596848b8605Smrg GET_CURRENT_CONTEXT(ctx); 597b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 1); 598848b8605Smrg} 599848b8605Smrg 600848b8605Smrgvoid GLAPIENTRY 601848b8605Smrg_mesa_Uniform2uiv(GLint location, GLsizei count, const GLuint *value) 602848b8605Smrg{ 603848b8605Smrg GET_CURRENT_CONTEXT(ctx); 604b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 2); 605848b8605Smrg} 606848b8605Smrg 607848b8605Smrgvoid GLAPIENTRY 608848b8605Smrg_mesa_Uniform3uiv(GLint location, GLsizei count, const GLuint *value) 609848b8605Smrg{ 610848b8605Smrg GET_CURRENT_CONTEXT(ctx); 611b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 3); 612848b8605Smrg} 613848b8605Smrg 614848b8605Smrgvoid GLAPIENTRY 615848b8605Smrg_mesa_Uniform4uiv(GLint location, GLsizei count, const GLuint *value) 616848b8605Smrg{ 617848b8605Smrg GET_CURRENT_CONTEXT(ctx); 618b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT, 4); 619848b8605Smrg} 620848b8605Smrg 621848b8605Smrg 622848b8605Smrg 623848b8605Smrgvoid GLAPIENTRY 624848b8605Smrg_mesa_UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, 625848b8605Smrg const GLfloat * value) 626848b8605Smrg{ 627848b8605Smrg GET_CURRENT_CONTEXT(ctx); 628b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 629b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 2, 2, GLSL_TYPE_FLOAT); 630848b8605Smrg} 631848b8605Smrg 632848b8605Smrgvoid GLAPIENTRY 633848b8605Smrg_mesa_UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, 634848b8605Smrg const GLfloat * value) 635848b8605Smrg{ 636848b8605Smrg GET_CURRENT_CONTEXT(ctx); 637b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 638b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 3, 3, GLSL_TYPE_FLOAT); 639848b8605Smrg} 640848b8605Smrg 641848b8605Smrgvoid GLAPIENTRY 642848b8605Smrg_mesa_UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, 643848b8605Smrg const GLfloat * value) 644848b8605Smrg{ 645848b8605Smrg GET_CURRENT_CONTEXT(ctx); 646b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 647b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 4, 4, GLSL_TYPE_FLOAT); 648848b8605Smrg} 649848b8605Smrg 650848b8605Smrg/** Same as above with direct state access **/ 651848b8605Smrg 652848b8605Smrgvoid GLAPIENTRY 653848b8605Smrg_mesa_ProgramUniform1ui(GLuint program, GLint location, GLuint v0) 654848b8605Smrg{ 655848b8605Smrg GET_CURRENT_CONTEXT(ctx); 656848b8605Smrg struct gl_shader_program *shProg = 657848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 658848b8605Smrg "glProgramUniform1ui"); 659b8e80941Smrg _mesa_uniform(location, 1, &v0, ctx, shProg, GLSL_TYPE_UINT, 1); 660848b8605Smrg} 661848b8605Smrg 662848b8605Smrgvoid GLAPIENTRY 663848b8605Smrg_mesa_ProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1) 664848b8605Smrg{ 665848b8605Smrg GET_CURRENT_CONTEXT(ctx); 666848b8605Smrg GLuint v[2]; 667848b8605Smrg struct gl_shader_program *shProg; 668848b8605Smrg v[0] = v0; 669848b8605Smrg v[1] = v1; 670848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, 671848b8605Smrg "glProgramUniform2ui"); 672b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_UINT, 2); 673848b8605Smrg} 674848b8605Smrg 675848b8605Smrgvoid GLAPIENTRY 676848b8605Smrg_mesa_ProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, 677848b8605Smrg GLuint v2) 678848b8605Smrg{ 679848b8605Smrg GET_CURRENT_CONTEXT(ctx); 680848b8605Smrg GLuint v[3]; 681848b8605Smrg struct gl_shader_program *shProg; 682848b8605Smrg v[0] = v0; 683848b8605Smrg v[1] = v1; 684848b8605Smrg v[2] = v2; 685848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, 686848b8605Smrg "glProgramUniform3ui"); 687b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_UINT, 3); 688848b8605Smrg} 689848b8605Smrg 690848b8605Smrgvoid GLAPIENTRY 691848b8605Smrg_mesa_ProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, 692848b8605Smrg GLuint v2, GLuint v3) 693848b8605Smrg{ 694848b8605Smrg GET_CURRENT_CONTEXT(ctx); 695848b8605Smrg GLuint v[4]; 696848b8605Smrg struct gl_shader_program *shProg; 697848b8605Smrg v[0] = v0; 698848b8605Smrg v[1] = v1; 699848b8605Smrg v[2] = v2; 700848b8605Smrg v[3] = v3; 701848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform4ui"); 702b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_UINT, 4); 703848b8605Smrg} 704848b8605Smrg 705848b8605Smrgvoid GLAPIENTRY 706848b8605Smrg_mesa_ProgramUniform1uiv(GLuint program, GLint location, GLsizei count, 707848b8605Smrg const GLuint *value) 708848b8605Smrg{ 709848b8605Smrg GET_CURRENT_CONTEXT(ctx); 710848b8605Smrg struct gl_shader_program *shProg = 711848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 712848b8605Smrg "glProgramUniform1uiv"); 713b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT, 1); 714848b8605Smrg} 715848b8605Smrg 716848b8605Smrgvoid GLAPIENTRY 717848b8605Smrg_mesa_ProgramUniform2uiv(GLuint program, GLint location, GLsizei count, 718848b8605Smrg const GLuint *value) 719848b8605Smrg{ 720848b8605Smrg GET_CURRENT_CONTEXT(ctx); 721848b8605Smrg struct gl_shader_program *shProg = 722848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 723848b8605Smrg "glProgramUniform2uiv"); 724b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT, 2); 725848b8605Smrg} 726848b8605Smrg 727848b8605Smrgvoid GLAPIENTRY 728848b8605Smrg_mesa_ProgramUniform3uiv(GLuint program, GLint location, GLsizei count, 729848b8605Smrg const GLuint *value) 730848b8605Smrg{ 731848b8605Smrg GET_CURRENT_CONTEXT(ctx); 732848b8605Smrg struct gl_shader_program *shProg = 733848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 734848b8605Smrg "glProgramUniform3uiv"); 735b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT, 3); 736848b8605Smrg} 737848b8605Smrg 738848b8605Smrgvoid GLAPIENTRY 739848b8605Smrg_mesa_ProgramUniform4uiv(GLuint program, GLint location, GLsizei count, 740848b8605Smrg const GLuint *value) 741848b8605Smrg{ 742848b8605Smrg GET_CURRENT_CONTEXT(ctx); 743848b8605Smrg struct gl_shader_program *shProg = 744848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 745848b8605Smrg "glProgramUniform4uiv"); 746b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT, 4); 747848b8605Smrg} 748848b8605Smrg 749848b8605Smrg 750848b8605Smrg 751848b8605Smrgvoid GLAPIENTRY 752848b8605Smrg_mesa_ProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, 753848b8605Smrg GLboolean transpose, const GLfloat * value) 754848b8605Smrg{ 755848b8605Smrg GET_CURRENT_CONTEXT(ctx); 756848b8605Smrg struct gl_shader_program *shProg = 757848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 758848b8605Smrg "glProgramUniformMatrix2fv"); 759b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 2, 2, GLSL_TYPE_FLOAT); 760848b8605Smrg} 761848b8605Smrg 762848b8605Smrgvoid GLAPIENTRY 763848b8605Smrg_mesa_ProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, 764848b8605Smrg GLboolean transpose, const GLfloat * value) 765848b8605Smrg{ 766848b8605Smrg GET_CURRENT_CONTEXT(ctx); 767848b8605Smrg struct gl_shader_program *shProg = 768848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 769848b8605Smrg "glProgramUniformMatrix3fv"); 770b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 3, 3, GLSL_TYPE_FLOAT); 771848b8605Smrg} 772848b8605Smrg 773848b8605Smrgvoid GLAPIENTRY 774848b8605Smrg_mesa_ProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, 775848b8605Smrg GLboolean transpose, const GLfloat * value) 776848b8605Smrg{ 777848b8605Smrg GET_CURRENT_CONTEXT(ctx); 778848b8605Smrg struct gl_shader_program *shProg = 779848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 780848b8605Smrg "glProgramUniformMatrix4fv"); 781b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 4, 4, GLSL_TYPE_FLOAT); 782848b8605Smrg} 783848b8605Smrg 784848b8605Smrg 785848b8605Smrg/** 786848b8605Smrg * Non-square UniformMatrix are OpenGL 2.1 787848b8605Smrg */ 788848b8605Smrgvoid GLAPIENTRY 789848b8605Smrg_mesa_UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, 790848b8605Smrg const GLfloat *value) 791848b8605Smrg{ 792848b8605Smrg GET_CURRENT_CONTEXT(ctx); 793b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 794b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 2, 3, GLSL_TYPE_FLOAT); 795848b8605Smrg} 796848b8605Smrg 797848b8605Smrgvoid GLAPIENTRY 798848b8605Smrg_mesa_UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, 799848b8605Smrg const GLfloat *value) 800848b8605Smrg{ 801848b8605Smrg GET_CURRENT_CONTEXT(ctx); 802b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 803b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 3, 2, GLSL_TYPE_FLOAT); 804848b8605Smrg} 805848b8605Smrg 806848b8605Smrgvoid GLAPIENTRY 807848b8605Smrg_mesa_UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, 808848b8605Smrg const GLfloat *value) 809848b8605Smrg{ 810848b8605Smrg GET_CURRENT_CONTEXT(ctx); 811b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 812b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 2, 4, GLSL_TYPE_FLOAT); 813848b8605Smrg} 814848b8605Smrg 815848b8605Smrgvoid GLAPIENTRY 816848b8605Smrg_mesa_UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, 817848b8605Smrg const GLfloat *value) 818848b8605Smrg{ 819848b8605Smrg GET_CURRENT_CONTEXT(ctx); 820b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 821b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 4, 2, GLSL_TYPE_FLOAT); 822848b8605Smrg} 823848b8605Smrg 824848b8605Smrgvoid GLAPIENTRY 825848b8605Smrg_mesa_UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, 826848b8605Smrg const GLfloat *value) 827848b8605Smrg{ 828848b8605Smrg GET_CURRENT_CONTEXT(ctx); 829b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 830b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 3, 4, GLSL_TYPE_FLOAT); 831848b8605Smrg} 832848b8605Smrg 833848b8605Smrgvoid GLAPIENTRY 834848b8605Smrg_mesa_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, 835848b8605Smrg const GLfloat *value) 836848b8605Smrg{ 837848b8605Smrg GET_CURRENT_CONTEXT(ctx); 838b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 839b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 4, 3, GLSL_TYPE_FLOAT); 840848b8605Smrg} 841848b8605Smrg 842848b8605Smrg/** Same as above with direct state access **/ 843848b8605Smrg 844848b8605Smrgvoid GLAPIENTRY 845848b8605Smrg_mesa_ProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, 846848b8605Smrg GLboolean transpose, const GLfloat * value) 847848b8605Smrg{ 848848b8605Smrg GET_CURRENT_CONTEXT(ctx); 849848b8605Smrg struct gl_shader_program *shProg = 850848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 851848b8605Smrg "glProgramUniformMatrix2x3fv"); 852b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 2, 3, GLSL_TYPE_FLOAT); 853848b8605Smrg} 854848b8605Smrg 855848b8605Smrgvoid GLAPIENTRY 856848b8605Smrg_mesa_ProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, 857848b8605Smrg GLboolean transpose, const GLfloat * value) 858848b8605Smrg{ 859848b8605Smrg GET_CURRENT_CONTEXT(ctx); 860848b8605Smrg struct gl_shader_program *shProg = 861848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 862848b8605Smrg "glProgramUniformMatrix3x2fv"); 863b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 3, 2, GLSL_TYPE_FLOAT); 864848b8605Smrg} 865848b8605Smrg 866848b8605Smrgvoid GLAPIENTRY 867848b8605Smrg_mesa_ProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, 868848b8605Smrg GLboolean transpose, const GLfloat * value) 869848b8605Smrg{ 870848b8605Smrg GET_CURRENT_CONTEXT(ctx); 871848b8605Smrg struct gl_shader_program *shProg = 872848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 873848b8605Smrg "glProgramUniformMatrix2x4fv"); 874b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 2, 4, GLSL_TYPE_FLOAT); 875848b8605Smrg} 876848b8605Smrg 877848b8605Smrgvoid GLAPIENTRY 878848b8605Smrg_mesa_ProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, 879848b8605Smrg GLboolean transpose, const GLfloat * value) 880848b8605Smrg{ 881848b8605Smrg GET_CURRENT_CONTEXT(ctx); 882848b8605Smrg struct gl_shader_program *shProg = 883848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 884848b8605Smrg "glProgramUniformMatrix4x2fv"); 885b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 4, 2, GLSL_TYPE_FLOAT); 886848b8605Smrg} 887848b8605Smrg 888848b8605Smrgvoid GLAPIENTRY 889848b8605Smrg_mesa_ProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, 890848b8605Smrg GLboolean transpose, const GLfloat * value) 891848b8605Smrg{ 892848b8605Smrg GET_CURRENT_CONTEXT(ctx); 893848b8605Smrg struct gl_shader_program *shProg = 894848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 895848b8605Smrg "glProgramUniformMatrix3x4fv"); 896b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 3, 4, GLSL_TYPE_FLOAT); 897848b8605Smrg} 898848b8605Smrg 899848b8605Smrgvoid GLAPIENTRY 900848b8605Smrg_mesa_ProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, 901848b8605Smrg GLboolean transpose, const GLfloat * value) 902848b8605Smrg{ 903848b8605Smrg GET_CURRENT_CONTEXT(ctx); 904848b8605Smrg struct gl_shader_program *shProg = 905848b8605Smrg _mesa_lookup_shader_program_err(ctx, program, 906848b8605Smrg "glProgramUniformMatrix4x3fv"); 907b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, ctx, shProg, 4, 3, GLSL_TYPE_FLOAT); 908848b8605Smrg} 909848b8605Smrg 910848b8605Smrg 911848b8605Smrgvoid GLAPIENTRY 912848b8605Smrg_mesa_GetnUniformfvARB(GLuint program, GLint location, 913848b8605Smrg GLsizei bufSize, GLfloat *params) 914848b8605Smrg{ 915848b8605Smrg GET_CURRENT_CONTEXT(ctx); 916848b8605Smrg _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_FLOAT, params); 917848b8605Smrg} 918848b8605Smrg 919848b8605Smrgvoid GLAPIENTRY 920848b8605Smrg_mesa_GetUniformfv(GLuint program, GLint location, GLfloat *params) 921848b8605Smrg{ 922848b8605Smrg _mesa_GetnUniformfvARB(program, location, INT_MAX, params); 923848b8605Smrg} 924848b8605Smrg 925848b8605Smrg 926848b8605Smrgvoid GLAPIENTRY 927848b8605Smrg_mesa_GetnUniformivARB(GLuint program, GLint location, 928848b8605Smrg GLsizei bufSize, GLint *params) 929848b8605Smrg{ 930848b8605Smrg GET_CURRENT_CONTEXT(ctx); 931848b8605Smrg _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_INT, params); 932848b8605Smrg} 933848b8605Smrg 934848b8605Smrgvoid GLAPIENTRY 935848b8605Smrg_mesa_GetUniformiv(GLuint program, GLint location, GLint *params) 936848b8605Smrg{ 937848b8605Smrg _mesa_GetnUniformivARB(program, location, INT_MAX, params); 938848b8605Smrg} 939848b8605Smrg 940848b8605Smrg 941848b8605Smrg/* GL3 */ 942848b8605Smrgvoid GLAPIENTRY 943848b8605Smrg_mesa_GetnUniformuivARB(GLuint program, GLint location, 944848b8605Smrg GLsizei bufSize, GLuint *params) 945848b8605Smrg{ 946848b8605Smrg GET_CURRENT_CONTEXT(ctx); 947848b8605Smrg _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_UINT, params); 948848b8605Smrg} 949848b8605Smrg 950848b8605Smrgvoid GLAPIENTRY 951848b8605Smrg_mesa_GetUniformuiv(GLuint program, GLint location, GLuint *params) 952848b8605Smrg{ 953848b8605Smrg _mesa_GetnUniformuivARB(program, location, INT_MAX, params); 954848b8605Smrg} 955848b8605Smrg 956848b8605Smrg 957848b8605Smrg/* GL4 */ 958848b8605Smrgvoid GLAPIENTRY 959848b8605Smrg_mesa_GetnUniformdvARB(GLuint program, GLint location, 960848b8605Smrg GLsizei bufSize, GLdouble *params) 961848b8605Smrg{ 962848b8605Smrg GET_CURRENT_CONTEXT(ctx); 963848b8605Smrg 964848b8605Smrg _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_DOUBLE, params); 965848b8605Smrg} 966848b8605Smrg 967848b8605Smrgvoid GLAPIENTRY 968848b8605Smrg_mesa_GetUniformdv(GLuint program, GLint location, GLdouble *params) 969848b8605Smrg{ 970848b8605Smrg _mesa_GetnUniformdvARB(program, location, INT_MAX, params); 971848b8605Smrg} 972848b8605Smrg 973b8e80941Smrgvoid GLAPIENTRY 974b8e80941Smrg_mesa_GetnUniformi64vARB(GLuint program, GLint location, 975b8e80941Smrg GLsizei bufSize, GLint64 *params) 976b8e80941Smrg{ 977b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 978b8e80941Smrg _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_INT64, params); 979b8e80941Smrg} 980b8e80941Smrgvoid GLAPIENTRY 981b8e80941Smrg_mesa_GetUniformi64vARB(GLuint program, GLint location, GLint64 *params) 982b8e80941Smrg{ 983b8e80941Smrg _mesa_GetnUniformi64vARB(program, location, INT_MAX, params); 984b8e80941Smrg} 985b8e80941Smrg 986b8e80941Smrgvoid GLAPIENTRY 987b8e80941Smrg_mesa_GetnUniformui64vARB(GLuint program, GLint location, 988b8e80941Smrg GLsizei bufSize, GLuint64 *params) 989b8e80941Smrg{ 990b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 991b8e80941Smrg _mesa_get_uniform(ctx, program, location, bufSize, GLSL_TYPE_UINT64, params); 992b8e80941Smrg} 993b8e80941Smrg 994b8e80941Smrgvoid GLAPIENTRY 995b8e80941Smrg_mesa_GetUniformui64vARB(GLuint program, GLint location, GLuint64 *params) 996b8e80941Smrg{ 997b8e80941Smrg _mesa_GetnUniformui64vARB(program, location, INT_MAX, params); 998b8e80941Smrg} 999b8e80941Smrg 1000848b8605Smrg 1001848b8605SmrgGLint GLAPIENTRY 1002848b8605Smrg_mesa_GetUniformLocation(GLuint programObj, const GLcharARB *name) 1003848b8605Smrg{ 1004848b8605Smrg struct gl_shader_program *shProg; 1005848b8605Smrg 1006848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1007848b8605Smrg 1008848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, programObj, 1009848b8605Smrg "glGetUniformLocation"); 1010848b8605Smrg if (!shProg) 1011848b8605Smrg return -1; 1012848b8605Smrg 1013848b8605Smrg /* Page 80 (page 94 of the PDF) of the OpenGL 2.1 spec says: 1014848b8605Smrg * 1015848b8605Smrg * "If program has not been successfully linked, the error 1016848b8605Smrg * INVALID_OPERATION is generated." 1017848b8605Smrg */ 1018b8e80941Smrg if (shProg->data->LinkStatus == LINKING_FAILURE) { 1019848b8605Smrg _mesa_error(ctx, GL_INVALID_OPERATION, 1020848b8605Smrg "glGetUniformLocation(program not linked)"); 1021848b8605Smrg return -1; 1022848b8605Smrg } 1023848b8605Smrg 1024b8e80941Smrg return _mesa_program_resource_location(shProg, GL_UNIFORM, name); 1025b8e80941Smrg} 1026848b8605Smrg 1027b8e80941SmrgGLint GLAPIENTRY 1028b8e80941Smrg_mesa_GetUniformLocation_no_error(GLuint programObj, const GLcharARB *name) 1029b8e80941Smrg{ 1030b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1031b8e80941Smrg 1032b8e80941Smrg struct gl_shader_program *shProg = 1033b8e80941Smrg _mesa_lookup_shader_program(ctx, programObj); 1034848b8605Smrg 1035b8e80941Smrg return _mesa_program_resource_location(shProg, GL_UNIFORM, name); 1036848b8605Smrg} 1037848b8605Smrg 1038848b8605SmrgGLuint GLAPIENTRY 1039848b8605Smrg_mesa_GetUniformBlockIndex(GLuint program, 1040848b8605Smrg const GLchar *uniformBlockName) 1041848b8605Smrg{ 1042848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1043848b8605Smrg struct gl_shader_program *shProg; 1044848b8605Smrg 1045848b8605Smrg if (!ctx->Extensions.ARB_uniform_buffer_object) { 1046848b8605Smrg _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformBlockIndex"); 1047848b8605Smrg return GL_INVALID_INDEX; 1048848b8605Smrg } 1049848b8605Smrg 1050848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, 1051848b8605Smrg "glGetUniformBlockIndex"); 1052848b8605Smrg if (!shProg) 1053848b8605Smrg return GL_INVALID_INDEX; 1054848b8605Smrg 1055b8e80941Smrg struct gl_program_resource *res = 1056b8e80941Smrg _mesa_program_resource_find_name(shProg, GL_UNIFORM_BLOCK, 1057b8e80941Smrg uniformBlockName, NULL); 1058b8e80941Smrg if (!res) 1059b8e80941Smrg return GL_INVALID_INDEX; 1060848b8605Smrg 1061b8e80941Smrg return _mesa_program_resource_index(shProg, res); 1062848b8605Smrg} 1063848b8605Smrg 1064848b8605Smrgvoid GLAPIENTRY 1065848b8605Smrg_mesa_GetUniformIndices(GLuint program, 1066848b8605Smrg GLsizei uniformCount, 1067848b8605Smrg const GLchar * const *uniformNames, 1068848b8605Smrg GLuint *uniformIndices) 1069848b8605Smrg{ 1070848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1071848b8605Smrg GLsizei i; 1072848b8605Smrg struct gl_shader_program *shProg; 1073848b8605Smrg 1074848b8605Smrg if (!ctx->Extensions.ARB_uniform_buffer_object) { 1075848b8605Smrg _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformIndices"); 1076848b8605Smrg return; 1077848b8605Smrg } 1078848b8605Smrg 1079848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, 1080848b8605Smrg "glGetUniformIndices"); 1081848b8605Smrg if (!shProg) 1082848b8605Smrg return; 1083848b8605Smrg 1084848b8605Smrg if (uniformCount < 0) { 1085848b8605Smrg _mesa_error(ctx, GL_INVALID_VALUE, 1086848b8605Smrg "glGetUniformIndices(uniformCount < 0)"); 1087848b8605Smrg return; 1088848b8605Smrg } 1089848b8605Smrg 1090848b8605Smrg for (i = 0; i < uniformCount; i++) { 1091b8e80941Smrg struct gl_program_resource *res = 1092b8e80941Smrg _mesa_program_resource_find_name(shProg, GL_UNIFORM, uniformNames[i], 1093b8e80941Smrg NULL); 1094b8e80941Smrg uniformIndices[i] = _mesa_program_resource_index(shProg, res); 1095b8e80941Smrg } 1096b8e80941Smrg} 1097b8e80941Smrg 1098b8e80941Smrgstatic void 1099b8e80941Smrguniform_block_binding(struct gl_context *ctx, struct gl_shader_program *shProg, 1100b8e80941Smrg GLuint uniformBlockIndex, GLuint uniformBlockBinding) 1101b8e80941Smrg{ 1102b8e80941Smrg if (shProg->data->UniformBlocks[uniformBlockIndex].Binding != 1103b8e80941Smrg uniformBlockBinding) { 1104b8e80941Smrg 1105b8e80941Smrg FLUSH_VERTICES(ctx, 0); 1106b8e80941Smrg ctx->NewDriverState |= ctx->DriverFlags.NewUniformBuffer; 1107b8e80941Smrg 1108b8e80941Smrg shProg->data->UniformBlocks[uniformBlockIndex].Binding = 1109b8e80941Smrg uniformBlockBinding; 1110848b8605Smrg } 1111848b8605Smrg} 1112848b8605Smrg 1113b8e80941Smrgvoid GLAPIENTRY 1114b8e80941Smrg_mesa_UniformBlockBinding_no_error(GLuint program, GLuint uniformBlockIndex, 1115b8e80941Smrg GLuint uniformBlockBinding) 1116b8e80941Smrg{ 1117b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1118b8e80941Smrg 1119b8e80941Smrg struct gl_shader_program *shProg = _mesa_lookup_shader_program(ctx, program); 1120b8e80941Smrg uniform_block_binding(ctx, shProg, uniformBlockIndex, uniformBlockBinding); 1121b8e80941Smrg} 1122b8e80941Smrg 1123848b8605Smrgvoid GLAPIENTRY 1124848b8605Smrg_mesa_UniformBlockBinding(GLuint program, 1125848b8605Smrg GLuint uniformBlockIndex, 1126848b8605Smrg GLuint uniformBlockBinding) 1127848b8605Smrg{ 1128848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1129848b8605Smrg struct gl_shader_program *shProg; 1130848b8605Smrg 1131848b8605Smrg if (!ctx->Extensions.ARB_uniform_buffer_object) { 1132848b8605Smrg _mesa_error(ctx, GL_INVALID_OPERATION, "glUniformBlockBinding"); 1133848b8605Smrg return; 1134848b8605Smrg } 1135848b8605Smrg 1136848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, 1137848b8605Smrg "glUniformBlockBinding"); 1138848b8605Smrg if (!shProg) 1139848b8605Smrg return; 1140848b8605Smrg 1141b8e80941Smrg if (uniformBlockIndex >= shProg->data->NumUniformBlocks) { 1142848b8605Smrg _mesa_error(ctx, GL_INVALID_VALUE, 1143848b8605Smrg "glUniformBlockBinding(block index %u >= %u)", 1144b8e80941Smrg uniformBlockIndex, shProg->data->NumUniformBlocks); 1145848b8605Smrg return; 1146848b8605Smrg } 1147848b8605Smrg 1148848b8605Smrg if (uniformBlockBinding >= ctx->Const.MaxUniformBufferBindings) { 1149848b8605Smrg _mesa_error(ctx, GL_INVALID_VALUE, 1150848b8605Smrg "glUniformBlockBinding(block binding %u >= %u)", 1151848b8605Smrg uniformBlockBinding, ctx->Const.MaxUniformBufferBindings); 1152848b8605Smrg return; 1153848b8605Smrg } 1154848b8605Smrg 1155b8e80941Smrg uniform_block_binding(ctx, shProg, uniformBlockIndex, uniformBlockBinding); 1156b8e80941Smrg} 1157b8e80941Smrg 1158b8e80941Smrgstatic void 1159b8e80941Smrgshader_storage_block_binding(struct gl_context *ctx, 1160b8e80941Smrg struct gl_shader_program *shProg, 1161b8e80941Smrg GLuint shaderStorageBlockIndex, 1162b8e80941Smrg GLuint shaderStorageBlockBinding) 1163b8e80941Smrg{ 1164b8e80941Smrg if (shProg->data->ShaderStorageBlocks[shaderStorageBlockIndex].Binding != 1165b8e80941Smrg shaderStorageBlockBinding) { 1166848b8605Smrg 1167848b8605Smrg FLUSH_VERTICES(ctx, 0); 1168b8e80941Smrg ctx->NewDriverState |= ctx->DriverFlags.NewShaderStorageBuffer; 1169848b8605Smrg 1170b8e80941Smrg shProg->data->ShaderStorageBlocks[shaderStorageBlockIndex].Binding = 1171b8e80941Smrg shaderStorageBlockBinding; 1172b8e80941Smrg } 1173b8e80941Smrg} 1174848b8605Smrg 1175b8e80941Smrgvoid GLAPIENTRY 1176b8e80941Smrg_mesa_ShaderStorageBlockBinding_no_error(GLuint program, 1177b8e80941Smrg GLuint shaderStorageBlockIndex, 1178b8e80941Smrg GLuint shaderStorageBlockBinding) 1179b8e80941Smrg{ 1180b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1181848b8605Smrg 1182b8e80941Smrg struct gl_shader_program *shProg = _mesa_lookup_shader_program(ctx, program); 1183b8e80941Smrg shader_storage_block_binding(ctx, shProg, shaderStorageBlockIndex, 1184b8e80941Smrg shaderStorageBlockBinding); 1185848b8605Smrg} 1186848b8605Smrg 1187848b8605Smrgvoid GLAPIENTRY 1188b8e80941Smrg_mesa_ShaderStorageBlockBinding(GLuint program, 1189b8e80941Smrg GLuint shaderStorageBlockIndex, 1190b8e80941Smrg GLuint shaderStorageBlockBinding) 1191848b8605Smrg{ 1192848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1193848b8605Smrg struct gl_shader_program *shProg; 1194848b8605Smrg 1195b8e80941Smrg if (!ctx->Extensions.ARB_shader_storage_buffer_object) { 1196b8e80941Smrg _mesa_error(ctx, GL_INVALID_OPERATION, "glShaderStorageBlockBinding"); 1197848b8605Smrg return; 1198848b8605Smrg } 1199848b8605Smrg 1200848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, 1201b8e80941Smrg "glShaderStorageBlockBinding"); 1202848b8605Smrg if (!shProg) 1203848b8605Smrg return; 1204848b8605Smrg 1205b8e80941Smrg if (shaderStorageBlockIndex >= shProg->data->NumShaderStorageBlocks) { 1206b8e80941Smrg _mesa_error(ctx, GL_INVALID_VALUE, 1207b8e80941Smrg "glShaderStorageBlockBinding(block index %u >= %u)", 1208b8e80941Smrg shaderStorageBlockIndex, 1209b8e80941Smrg shProg->data->NumShaderStorageBlocks); 1210b8e80941Smrg return; 1211b8e80941Smrg } 1212b8e80941Smrg 1213b8e80941Smrg if (shaderStorageBlockBinding >= ctx->Const.MaxShaderStorageBufferBindings) { 1214848b8605Smrg _mesa_error(ctx, GL_INVALID_VALUE, 1215b8e80941Smrg "glShaderStorageBlockBinding(block binding %u >= %u)", 1216b8e80941Smrg shaderStorageBlockBinding, 1217b8e80941Smrg ctx->Const.MaxShaderStorageBufferBindings); 1218848b8605Smrg return; 1219848b8605Smrg } 1220848b8605Smrg 1221b8e80941Smrg shader_storage_block_binding(ctx, shProg, shaderStorageBlockIndex, 1222b8e80941Smrg shaderStorageBlockBinding); 1223b8e80941Smrg} 1224b8e80941Smrg 1225b8e80941Smrg/** 1226b8e80941Smrg * Generic program resource property query. 1227b8e80941Smrg */ 1228b8e80941Smrgstatic void 1229b8e80941Smrgmesa_bufferiv(struct gl_shader_program *shProg, GLenum type, 1230b8e80941Smrg GLuint index, GLenum pname, GLint *params, const char *caller) 1231b8e80941Smrg{ 1232b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1233b8e80941Smrg struct gl_program_resource *res = 1234b8e80941Smrg _mesa_program_resource_find_index(shProg, type, index); 1235b8e80941Smrg 1236b8e80941Smrg if (!res) { 1237b8e80941Smrg _mesa_error(ctx, GL_INVALID_VALUE, "%s(bufferindex %d)", caller, index); 1238b8e80941Smrg return; 1239b8e80941Smrg } 1240848b8605Smrg 1241848b8605Smrg switch (pname) { 1242848b8605Smrg case GL_UNIFORM_BLOCK_BINDING: 1243b8e80941Smrg case GL_ATOMIC_COUNTER_BUFFER_BINDING: 1244b8e80941Smrg _mesa_program_resource_prop(shProg, res, index, GL_BUFFER_BINDING, 1245b8e80941Smrg params, caller); 1246848b8605Smrg return; 1247848b8605Smrg case GL_UNIFORM_BLOCK_DATA_SIZE: 1248b8e80941Smrg case GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE: 1249b8e80941Smrg _mesa_program_resource_prop(shProg, res, index, GL_BUFFER_DATA_SIZE, 1250b8e80941Smrg params, caller); 1251848b8605Smrg return; 1252848b8605Smrg case GL_UNIFORM_BLOCK_NAME_LENGTH: 1253b8e80941Smrg _mesa_program_resource_prop(shProg, res, index, GL_NAME_LENGTH, 1254b8e80941Smrg params, caller); 1255848b8605Smrg return; 1256b8e80941Smrg case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS: 1257b8e80941Smrg case GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS: 1258b8e80941Smrg _mesa_program_resource_prop(shProg, res, index, GL_NUM_ACTIVE_VARIABLES, 1259b8e80941Smrg params, caller); 1260b8e80941Smrg return; 1261b8e80941Smrg case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 1262b8e80941Smrg case GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES: 1263b8e80941Smrg _mesa_program_resource_prop(shProg, res, index, GL_ACTIVE_VARIABLES, 1264b8e80941Smrg params, caller); 1265b8e80941Smrg return; 1266b8e80941Smrg case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 1267b8e80941Smrg case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER: 1268b8e80941Smrg _mesa_program_resource_prop(shProg, res, index, 1269b8e80941Smrg GL_REFERENCED_BY_VERTEX_SHADER, params, 1270b8e80941Smrg caller); 1271848b8605Smrg return; 1272848b8605Smrg 1273b8e80941Smrg case GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER: 1274b8e80941Smrg case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER: 1275b8e80941Smrg _mesa_program_resource_prop(shProg, res, index, 1276b8e80941Smrg GL_REFERENCED_BY_TESS_CONTROL_SHADER, params, 1277b8e80941Smrg caller); 1278848b8605Smrg return; 1279848b8605Smrg 1280b8e80941Smrg case GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER: 1281b8e80941Smrg case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER: 1282b8e80941Smrg _mesa_program_resource_prop(shProg, res, index, 1283b8e80941Smrg GL_REFERENCED_BY_TESS_EVALUATION_SHADER, params, 1284b8e80941Smrg caller); 1285848b8605Smrg return; 1286848b8605Smrg 1287848b8605Smrg case GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER: 1288b8e80941Smrg case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER: 1289b8e80941Smrg _mesa_program_resource_prop(shProg, res, index, 1290b8e80941Smrg GL_REFERENCED_BY_GEOMETRY_SHADER, params, 1291b8e80941Smrg caller); 1292848b8605Smrg return; 1293848b8605Smrg case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 1294b8e80941Smrg case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER: 1295b8e80941Smrg _mesa_program_resource_prop(shProg, res, index, 1296b8e80941Smrg GL_REFERENCED_BY_FRAGMENT_SHADER, params, 1297b8e80941Smrg caller); 1298b8e80941Smrg return; 1299b8e80941Smrg case GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER: 1300b8e80941Smrg case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER: 1301b8e80941Smrg _mesa_program_resource_prop(shProg, res, index, 1302b8e80941Smrg GL_REFERENCED_BY_COMPUTE_SHADER, params, 1303b8e80941Smrg caller); 1304848b8605Smrg return; 1305848b8605Smrg default: 1306848b8605Smrg _mesa_error(ctx, GL_INVALID_ENUM, 1307b8e80941Smrg "%s(pname 0x%x (%s))", caller, pname, 1308b8e80941Smrg _mesa_enum_to_string(pname)); 1309b8e80941Smrg return; 1310b8e80941Smrg } 1311b8e80941Smrg} 1312b8e80941Smrg 1313b8e80941Smrg 1314b8e80941Smrgvoid GLAPIENTRY 1315b8e80941Smrg_mesa_GetActiveUniformBlockiv(GLuint program, 1316b8e80941Smrg GLuint uniformBlockIndex, 1317b8e80941Smrg GLenum pname, 1318b8e80941Smrg GLint *params) 1319b8e80941Smrg{ 1320b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1321b8e80941Smrg struct gl_shader_program *shProg; 1322b8e80941Smrg 1323b8e80941Smrg if (!ctx->Extensions.ARB_uniform_buffer_object) { 1324b8e80941Smrg _mesa_error(ctx, GL_INVALID_OPERATION, "glGetActiveUniformBlockiv"); 1325848b8605Smrg return; 1326848b8605Smrg } 1327b8e80941Smrg 1328b8e80941Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, 1329b8e80941Smrg "glGetActiveUniformBlockiv"); 1330b8e80941Smrg if (!shProg) 1331b8e80941Smrg return; 1332b8e80941Smrg 1333b8e80941Smrg mesa_bufferiv(shProg, GL_UNIFORM_BLOCK, uniformBlockIndex, pname, params, 1334b8e80941Smrg "glGetActiveUniformBlockiv"); 1335848b8605Smrg} 1336848b8605Smrg 1337848b8605Smrgvoid GLAPIENTRY 1338848b8605Smrg_mesa_GetActiveUniformBlockName(GLuint program, 1339848b8605Smrg GLuint uniformBlockIndex, 1340848b8605Smrg GLsizei bufSize, 1341848b8605Smrg GLsizei *length, 1342848b8605Smrg GLchar *uniformBlockName) 1343848b8605Smrg{ 1344848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1345848b8605Smrg struct gl_shader_program *shProg; 1346848b8605Smrg 1347848b8605Smrg if (!ctx->Extensions.ARB_uniform_buffer_object) { 1348848b8605Smrg _mesa_error(ctx, GL_INVALID_OPERATION, "glGetActiveUniformBlockiv"); 1349848b8605Smrg return; 1350848b8605Smrg } 1351848b8605Smrg 1352848b8605Smrg if (bufSize < 0) { 1353848b8605Smrg _mesa_error(ctx, GL_INVALID_VALUE, 1354848b8605Smrg "glGetActiveUniformBlockName(bufSize %d < 0)", 1355848b8605Smrg bufSize); 1356848b8605Smrg return; 1357848b8605Smrg } 1358848b8605Smrg 1359848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, 1360848b8605Smrg "glGetActiveUniformBlockiv"); 1361848b8605Smrg if (!shProg) 1362848b8605Smrg return; 1363848b8605Smrg 1364b8e80941Smrg if (uniformBlockName) 1365b8e80941Smrg _mesa_get_program_resource_name(shProg, GL_UNIFORM_BLOCK, 1366b8e80941Smrg uniformBlockIndex, bufSize, length, 1367b8e80941Smrg uniformBlockName, 1368b8e80941Smrg "glGetActiveUniformBlockName"); 1369848b8605Smrg} 1370848b8605Smrg 1371848b8605Smrgvoid GLAPIENTRY 1372848b8605Smrg_mesa_GetActiveUniformName(GLuint program, GLuint uniformIndex, 1373848b8605Smrg GLsizei bufSize, GLsizei *length, 1374848b8605Smrg GLchar *uniformName) 1375848b8605Smrg{ 1376848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1377848b8605Smrg struct gl_shader_program *shProg; 1378848b8605Smrg 1379848b8605Smrg if (!ctx->Extensions.ARB_uniform_buffer_object) { 1380b8e80941Smrg _mesa_error(ctx, GL_INVALID_OPERATION, "glGetActiveUniformName"); 1381848b8605Smrg return; 1382848b8605Smrg } 1383848b8605Smrg 1384848b8605Smrg if (bufSize < 0) { 1385848b8605Smrg _mesa_error(ctx, GL_INVALID_VALUE, 1386848b8605Smrg "glGetActiveUniformName(bufSize %d < 0)", 1387848b8605Smrg bufSize); 1388848b8605Smrg return; 1389848b8605Smrg } 1390848b8605Smrg 1391848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, "glGetActiveUniformName"); 1392848b8605Smrg 1393848b8605Smrg if (!shProg) 1394848b8605Smrg return; 1395848b8605Smrg 1396b8e80941Smrg _mesa_get_program_resource_name(shProg, GL_UNIFORM, uniformIndex, bufSize, 1397b8e80941Smrg length, uniformName, "glGetActiveUniformName"); 1398848b8605Smrg} 1399848b8605Smrg 1400848b8605Smrgvoid GLAPIENTRY 1401848b8605Smrg_mesa_GetActiveAtomicCounterBufferiv(GLuint program, GLuint bufferIndex, 1402848b8605Smrg GLenum pname, GLint *params) 1403848b8605Smrg{ 1404848b8605Smrg GET_CURRENT_CONTEXT(ctx); 1405848b8605Smrg struct gl_shader_program *shProg; 1406848b8605Smrg 1407848b8605Smrg if (!ctx->Extensions.ARB_shader_atomic_counters) { 1408848b8605Smrg _mesa_error(ctx, GL_INVALID_OPERATION, 1409848b8605Smrg "glGetActiveAtomicCounterBufferiv"); 1410848b8605Smrg return; 1411848b8605Smrg } 1412848b8605Smrg 1413848b8605Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, 1414848b8605Smrg "glGetActiveAtomicCounterBufferiv"); 1415848b8605Smrg if (!shProg) 1416848b8605Smrg return; 1417848b8605Smrg 1418b8e80941Smrg mesa_bufferiv(shProg, GL_ATOMIC_COUNTER_BUFFER, bufferIndex, pname, params, 1419b8e80941Smrg "glGetActiveAtomicCounterBufferiv"); 1420b8e80941Smrg} 1421848b8605Smrg 1422b8e80941Smrgvoid GLAPIENTRY 1423b8e80941Smrg_mesa_Uniform1d(GLint location, GLdouble v0) 1424b8e80941Smrg{ 1425b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1426b8e80941Smrg _mesa_uniform(location, 1, &v0, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 1); 1427b8e80941Smrg} 1428848b8605Smrg 1429b8e80941Smrgvoid GLAPIENTRY 1430b8e80941Smrg_mesa_Uniform2d(GLint location, GLdouble v0, GLdouble v1) 1431b8e80941Smrg{ 1432b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1433b8e80941Smrg GLdouble v[2]; 1434b8e80941Smrg v[0] = v0; 1435b8e80941Smrg v[1] = v1; 1436b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 2); 1437b8e80941Smrg} 1438b8e80941Smrg 1439b8e80941Smrgvoid GLAPIENTRY 1440b8e80941Smrg_mesa_Uniform3d(GLint location, GLdouble v0, GLdouble v1, GLdouble v2) 1441b8e80941Smrg{ 1442b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1443b8e80941Smrg GLdouble v[3]; 1444b8e80941Smrg v[0] = v0; 1445b8e80941Smrg v[1] = v1; 1446b8e80941Smrg v[2] = v2; 1447b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 3); 1448b8e80941Smrg} 1449b8e80941Smrg 1450b8e80941Smrgvoid GLAPIENTRY 1451b8e80941Smrg_mesa_Uniform4d(GLint location, GLdouble v0, GLdouble v1, GLdouble v2, 1452b8e80941Smrg GLdouble v3) 1453b8e80941Smrg{ 1454b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1455b8e80941Smrg GLdouble v[4]; 1456b8e80941Smrg v[0] = v0; 1457b8e80941Smrg v[1] = v1; 1458b8e80941Smrg v[2] = v2; 1459b8e80941Smrg v[3] = v3; 1460b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 4); 1461b8e80941Smrg} 1462b8e80941Smrg 1463b8e80941Smrgvoid GLAPIENTRY 1464b8e80941Smrg_mesa_Uniform1dv(GLint location, GLsizei count, const GLdouble * value) 1465b8e80941Smrg{ 1466b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1467b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 1); 1468b8e80941Smrg} 1469b8e80941Smrg 1470b8e80941Smrgvoid GLAPIENTRY 1471b8e80941Smrg_mesa_Uniform2dv(GLint location, GLsizei count, const GLdouble * value) 1472b8e80941Smrg{ 1473b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1474b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 2); 1475b8e80941Smrg} 1476b8e80941Smrg 1477b8e80941Smrgvoid GLAPIENTRY 1478b8e80941Smrg_mesa_Uniform3dv(GLint location, GLsizei count, const GLdouble * value) 1479b8e80941Smrg{ 1480b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1481b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 3); 1482b8e80941Smrg} 1483b8e80941Smrg 1484b8e80941Smrgvoid GLAPIENTRY 1485b8e80941Smrg_mesa_Uniform4dv(GLint location, GLsizei count, const GLdouble * value) 1486b8e80941Smrg{ 1487b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1488b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_DOUBLE, 4); 1489b8e80941Smrg} 1490b8e80941Smrg 1491b8e80941Smrgvoid GLAPIENTRY 1492b8e80941Smrg_mesa_UniformMatrix2dv(GLint location, GLsizei count, GLboolean transpose, 1493b8e80941Smrg const GLdouble * value) 1494b8e80941Smrg{ 1495b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1496b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1497b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 2, 2, GLSL_TYPE_DOUBLE); 1498b8e80941Smrg} 1499b8e80941Smrg 1500b8e80941Smrgvoid GLAPIENTRY 1501b8e80941Smrg_mesa_UniformMatrix3dv(GLint location, GLsizei count, GLboolean transpose, 1502b8e80941Smrg const GLdouble * value) 1503b8e80941Smrg{ 1504b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1505b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1506b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 3, 3, GLSL_TYPE_DOUBLE); 1507b8e80941Smrg} 1508b8e80941Smrg 1509b8e80941Smrgvoid GLAPIENTRY 1510b8e80941Smrg_mesa_UniformMatrix4dv(GLint location, GLsizei count, GLboolean transpose, 1511b8e80941Smrg const GLdouble * value) 1512b8e80941Smrg{ 1513b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1514b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1515b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 4, 4, GLSL_TYPE_DOUBLE); 1516b8e80941Smrg} 1517b8e80941Smrg 1518b8e80941Smrgvoid GLAPIENTRY 1519b8e80941Smrg_mesa_UniformMatrix2x3dv(GLint location, GLsizei count, GLboolean transpose, 1520b8e80941Smrg const GLdouble *value) 1521b8e80941Smrg{ 1522b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1523b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1524b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 2, 3, GLSL_TYPE_DOUBLE); 1525b8e80941Smrg} 1526b8e80941Smrg 1527b8e80941Smrgvoid GLAPIENTRY 1528b8e80941Smrg_mesa_UniformMatrix3x2dv(GLint location, GLsizei count, GLboolean transpose, 1529b8e80941Smrg const GLdouble *value) 1530b8e80941Smrg{ 1531b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1532b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1533b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 3, 2, GLSL_TYPE_DOUBLE); 1534b8e80941Smrg} 1535b8e80941Smrg 1536b8e80941Smrgvoid GLAPIENTRY 1537b8e80941Smrg_mesa_UniformMatrix2x4dv(GLint location, GLsizei count, GLboolean transpose, 1538b8e80941Smrg const GLdouble *value) 1539b8e80941Smrg{ 1540b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1541b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1542b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 2, 4, GLSL_TYPE_DOUBLE); 1543b8e80941Smrg} 1544b8e80941Smrg 1545b8e80941Smrgvoid GLAPIENTRY 1546b8e80941Smrg_mesa_UniformMatrix4x2dv(GLint location, GLsizei count, GLboolean transpose, 1547b8e80941Smrg const GLdouble *value) 1548b8e80941Smrg{ 1549b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1550b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1551b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 4, 2, GLSL_TYPE_DOUBLE); 1552b8e80941Smrg} 1553b8e80941Smrg 1554b8e80941Smrgvoid GLAPIENTRY 1555b8e80941Smrg_mesa_UniformMatrix3x4dv(GLint location, GLsizei count, GLboolean transpose, 1556b8e80941Smrg const GLdouble *value) 1557b8e80941Smrg{ 1558b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1559b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1560b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 3, 4, GLSL_TYPE_DOUBLE); 1561b8e80941Smrg} 1562b8e80941Smrg 1563b8e80941Smrgvoid GLAPIENTRY 1564b8e80941Smrg_mesa_UniformMatrix4x3dv(GLint location, GLsizei count, GLboolean transpose, 1565b8e80941Smrg const GLdouble *value) 1566b8e80941Smrg{ 1567b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1568b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1569b8e80941Smrg ctx, ctx->_Shader->ActiveProgram, 4, 3, GLSL_TYPE_DOUBLE); 1570b8e80941Smrg} 1571b8e80941Smrg 1572b8e80941Smrgvoid GLAPIENTRY 1573b8e80941Smrg_mesa_ProgramUniform1d(GLuint program, GLint location, GLdouble v0) 1574b8e80941Smrg{ 1575b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1576b8e80941Smrg struct gl_shader_program *shProg = 1577b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1578b8e80941Smrg "glProgramUniform1d"); 1579b8e80941Smrg _mesa_uniform(location, 1, &v0, ctx, shProg, GLSL_TYPE_DOUBLE, 1); 1580b8e80941Smrg} 1581b8e80941Smrg 1582b8e80941Smrgvoid GLAPIENTRY 1583b8e80941Smrg_mesa_ProgramUniform2d(GLuint program, GLint location, GLdouble v0, GLdouble v1) 1584b8e80941Smrg{ 1585b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1586b8e80941Smrg GLdouble v[2]; 1587b8e80941Smrg struct gl_shader_program *shProg; 1588b8e80941Smrg v[0] = v0; 1589b8e80941Smrg v[1] = v1; 1590b8e80941Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform2d"); 1591b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_DOUBLE, 2); 1592b8e80941Smrg} 1593b8e80941Smrg 1594b8e80941Smrgvoid GLAPIENTRY 1595b8e80941Smrg_mesa_ProgramUniform3d(GLuint program, GLint location, GLdouble v0, GLdouble v1, 1596b8e80941Smrg GLdouble v2) 1597b8e80941Smrg{ 1598b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1599b8e80941Smrg GLdouble v[3]; 1600b8e80941Smrg struct gl_shader_program *shProg; 1601b8e80941Smrg v[0] = v0; 1602b8e80941Smrg v[1] = v1; 1603b8e80941Smrg v[2] = v2; 1604b8e80941Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform3d"); 1605b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_DOUBLE, 3); 1606b8e80941Smrg} 1607b8e80941Smrg 1608b8e80941Smrgvoid GLAPIENTRY 1609b8e80941Smrg_mesa_ProgramUniform4d(GLuint program, GLint location, GLdouble v0, GLdouble v1, 1610b8e80941Smrg GLdouble v2, GLdouble v3) 1611b8e80941Smrg{ 1612b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1613b8e80941Smrg GLdouble v[4]; 1614b8e80941Smrg struct gl_shader_program *shProg; 1615b8e80941Smrg v[0] = v0; 1616b8e80941Smrg v[1] = v1; 1617b8e80941Smrg v[2] = v2; 1618b8e80941Smrg v[3] = v3; 1619b8e80941Smrg shProg = _mesa_lookup_shader_program_err(ctx, program, "glProgramUniform4d"); 1620b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_DOUBLE, 4); 1621b8e80941Smrg} 1622b8e80941Smrg 1623b8e80941Smrgvoid GLAPIENTRY 1624b8e80941Smrg_mesa_ProgramUniform1dv(GLuint program, GLint location, GLsizei count, 1625b8e80941Smrg const GLdouble * value) 1626b8e80941Smrg{ 1627b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1628b8e80941Smrg struct gl_shader_program *shProg = 1629b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1630b8e80941Smrg "glProgramUniform1dv"); 1631b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_DOUBLE, 1); 1632b8e80941Smrg} 1633b8e80941Smrg 1634b8e80941Smrgvoid GLAPIENTRY 1635b8e80941Smrg_mesa_ProgramUniform2dv(GLuint program, GLint location, GLsizei count, 1636b8e80941Smrg const GLdouble * value) 1637b8e80941Smrg{ 1638b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1639b8e80941Smrg struct gl_shader_program *shProg = 1640b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1641b8e80941Smrg "glProgramUniform2dv"); 1642b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_DOUBLE, 2); 1643b8e80941Smrg} 1644b8e80941Smrg 1645b8e80941Smrgvoid GLAPIENTRY 1646b8e80941Smrg_mesa_ProgramUniform3dv(GLuint program, GLint location, GLsizei count, 1647b8e80941Smrg const GLdouble * value) 1648b8e80941Smrg{ 1649b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1650b8e80941Smrg struct gl_shader_program *shProg = 1651b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1652b8e80941Smrg "glProgramUniform3dv"); 1653b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_DOUBLE, 3); 1654b8e80941Smrg} 1655b8e80941Smrg 1656b8e80941Smrgvoid GLAPIENTRY 1657b8e80941Smrg_mesa_ProgramUniform4dv(GLuint program, GLint location, GLsizei count, 1658b8e80941Smrg const GLdouble * value) 1659b8e80941Smrg{ 1660b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1661b8e80941Smrg struct gl_shader_program *shProg = 1662b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1663b8e80941Smrg "glProgramUniform4dv"); 1664b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_DOUBLE, 4); 1665b8e80941Smrg} 1666b8e80941Smrg 1667b8e80941Smrgvoid GLAPIENTRY 1668b8e80941Smrg_mesa_ProgramUniformMatrix2dv(GLuint program, GLint location, GLsizei count, 1669b8e80941Smrg GLboolean transpose, const GLdouble * value) 1670b8e80941Smrg{ 1671b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1672b8e80941Smrg struct gl_shader_program *shProg = 1673b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1674b8e80941Smrg "glProgramUniformMatrix2dv"); 1675b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1676b8e80941Smrg ctx, shProg, 2, 2, GLSL_TYPE_DOUBLE); 1677b8e80941Smrg} 1678b8e80941Smrg 1679b8e80941Smrgvoid GLAPIENTRY 1680b8e80941Smrg_mesa_ProgramUniformMatrix3dv(GLuint program, GLint location, GLsizei count, 1681b8e80941Smrg GLboolean transpose, const GLdouble * value) 1682b8e80941Smrg{ 1683b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1684b8e80941Smrg struct gl_shader_program *shProg = 1685b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1686b8e80941Smrg "glProgramUniformMatrix3dv"); 1687b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1688b8e80941Smrg ctx, shProg, 3, 3, GLSL_TYPE_DOUBLE); 1689b8e80941Smrg} 1690b8e80941Smrg 1691b8e80941Smrgvoid GLAPIENTRY 1692b8e80941Smrg_mesa_ProgramUniformMatrix4dv(GLuint program, GLint location, GLsizei count, 1693b8e80941Smrg GLboolean transpose, const GLdouble * value) 1694b8e80941Smrg{ 1695b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1696b8e80941Smrg struct gl_shader_program *shProg = 1697b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1698b8e80941Smrg "glProgramUniformMatrix4dv"); 1699b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1700b8e80941Smrg ctx, shProg, 4, 4, GLSL_TYPE_DOUBLE); 1701b8e80941Smrg} 1702b8e80941Smrg 1703b8e80941Smrgvoid GLAPIENTRY 1704b8e80941Smrg_mesa_ProgramUniformMatrix2x3dv(GLuint program, GLint location, GLsizei count, 1705b8e80941Smrg GLboolean transpose, const GLdouble * value) 1706b8e80941Smrg{ 1707b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1708b8e80941Smrg struct gl_shader_program *shProg = 1709b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1710b8e80941Smrg "glProgramUniformMatrix2x3dv"); 1711b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1712b8e80941Smrg ctx, shProg, 2, 3, GLSL_TYPE_DOUBLE); 1713b8e80941Smrg} 1714b8e80941Smrg 1715b8e80941Smrgvoid GLAPIENTRY 1716b8e80941Smrg_mesa_ProgramUniformMatrix3x2dv(GLuint program, GLint location, GLsizei count, 1717b8e80941Smrg GLboolean transpose, const GLdouble * value) 1718b8e80941Smrg{ 1719b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1720b8e80941Smrg struct gl_shader_program *shProg = 1721b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1722b8e80941Smrg "glProgramUniformMatrix3x2dv"); 1723b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1724b8e80941Smrg ctx, shProg, 3, 2, GLSL_TYPE_DOUBLE); 1725b8e80941Smrg} 1726b8e80941Smrg 1727b8e80941Smrgvoid GLAPIENTRY 1728b8e80941Smrg_mesa_ProgramUniformMatrix2x4dv(GLuint program, GLint location, GLsizei count, 1729b8e80941Smrg GLboolean transpose, const GLdouble * value) 1730b8e80941Smrg{ 1731b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1732b8e80941Smrg struct gl_shader_program *shProg = 1733b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1734b8e80941Smrg "glProgramUniformMatrix2x4dv"); 1735b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1736b8e80941Smrg ctx, shProg, 2, 4, GLSL_TYPE_DOUBLE); 1737b8e80941Smrg} 1738b8e80941Smrg 1739b8e80941Smrgvoid GLAPIENTRY 1740b8e80941Smrg_mesa_ProgramUniformMatrix4x2dv(GLuint program, GLint location, GLsizei count, 1741b8e80941Smrg GLboolean transpose, const GLdouble * value) 1742b8e80941Smrg{ 1743b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1744b8e80941Smrg struct gl_shader_program *shProg = 1745b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1746b8e80941Smrg "glProgramUniformMatrix4x2dv"); 1747b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1748b8e80941Smrg ctx, shProg, 4, 2, GLSL_TYPE_DOUBLE); 1749b8e80941Smrg} 1750b8e80941Smrg 1751b8e80941Smrgvoid GLAPIENTRY 1752b8e80941Smrg_mesa_ProgramUniformMatrix3x4dv(GLuint program, GLint location, GLsizei count, 1753b8e80941Smrg GLboolean transpose, const GLdouble * value) 1754b8e80941Smrg{ 1755b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1756b8e80941Smrg struct gl_shader_program *shProg = 1757b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1758b8e80941Smrg "glProgramUniformMatrix3x4dv"); 1759b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1760b8e80941Smrg ctx, shProg, 3, 4, GLSL_TYPE_DOUBLE); 1761b8e80941Smrg} 1762b8e80941Smrg 1763b8e80941Smrgvoid GLAPIENTRY 1764b8e80941Smrg_mesa_ProgramUniformMatrix4x3dv(GLuint program, GLint location, GLsizei count, 1765b8e80941Smrg GLboolean transpose, const GLdouble * value) 1766b8e80941Smrg{ 1767b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1768b8e80941Smrg struct gl_shader_program *shProg = 1769b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1770b8e80941Smrg "glProgramUniformMatrix4x3dv"); 1771b8e80941Smrg _mesa_uniform_matrix(location, count, transpose, value, 1772b8e80941Smrg ctx, shProg, 4, 3, GLSL_TYPE_DOUBLE); 1773b8e80941Smrg} 1774b8e80941Smrg 1775b8e80941Smrgvoid GLAPIENTRY 1776b8e80941Smrg_mesa_Uniform1i64ARB(GLint location, GLint64 v0) 1777b8e80941Smrg{ 1778b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1779b8e80941Smrg _mesa_uniform(location, 1, &v0, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 1); 1780b8e80941Smrg} 1781b8e80941Smrg 1782b8e80941Smrgvoid GLAPIENTRY 1783b8e80941Smrg_mesa_Uniform2i64ARB(GLint location, GLint64 v0, GLint64 v1) 1784b8e80941Smrg{ 1785b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1786b8e80941Smrg int64_t v[2]; 1787b8e80941Smrg v[0] = v0; 1788b8e80941Smrg v[1] = v1; 1789b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 2); 1790b8e80941Smrg} 1791b8e80941Smrg 1792b8e80941Smrgvoid GLAPIENTRY 1793b8e80941Smrg_mesa_Uniform3i64ARB(GLint location, GLint64 v0, GLint64 v1, GLint64 v2) 1794b8e80941Smrg{ 1795b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1796b8e80941Smrg int64_t v[3]; 1797b8e80941Smrg v[0] = v0; 1798b8e80941Smrg v[1] = v1; 1799b8e80941Smrg v[2] = v2; 1800b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 3); 1801b8e80941Smrg} 1802b8e80941Smrg 1803b8e80941Smrgvoid GLAPIENTRY 1804b8e80941Smrg_mesa_Uniform4i64ARB(GLint location, GLint64 v0, GLint64 v1, GLint64 v2, GLint64 v3) 1805b8e80941Smrg{ 1806b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1807b8e80941Smrg int64_t v[4]; 1808b8e80941Smrg v[0] = v0; 1809b8e80941Smrg v[1] = v1; 1810b8e80941Smrg v[2] = v2; 1811b8e80941Smrg v[3] = v3; 1812b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 4); 1813b8e80941Smrg} 1814b8e80941Smrg 1815b8e80941Smrgvoid GLAPIENTRY 1816b8e80941Smrg_mesa_Uniform1i64vARB(GLint location, GLsizei count, const GLint64 *value) 1817b8e80941Smrg{ 1818b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1819b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 1); 1820b8e80941Smrg} 1821b8e80941Smrg 1822b8e80941Smrgvoid GLAPIENTRY 1823b8e80941Smrg_mesa_Uniform2i64vARB(GLint location, GLsizei count, const GLint64 *value) 1824b8e80941Smrg{ 1825b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1826b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 2); 1827b8e80941Smrg} 1828b8e80941Smrg 1829b8e80941Smrgvoid GLAPIENTRY 1830b8e80941Smrg_mesa_Uniform3i64vARB(GLint location, GLsizei count, const GLint64 *value) 1831b8e80941Smrg{ 1832b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1833b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 3); 1834b8e80941Smrg} 1835b8e80941Smrg 1836b8e80941Smrgvoid GLAPIENTRY 1837b8e80941Smrg_mesa_Uniform4i64vARB(GLint location, GLsizei count, const GLint64 *value) 1838b8e80941Smrg{ 1839b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1840b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_INT64, 4); 1841b8e80941Smrg} 1842b8e80941Smrg 1843b8e80941Smrgvoid GLAPIENTRY 1844b8e80941Smrg_mesa_Uniform1ui64ARB(GLint location, GLuint64 v0) 1845b8e80941Smrg{ 1846b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1847b8e80941Smrg _mesa_uniform(location, 1, &v0, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 1); 1848b8e80941Smrg} 1849b8e80941Smrg 1850b8e80941Smrgvoid GLAPIENTRY 1851b8e80941Smrg_mesa_Uniform2ui64ARB(GLint location, GLuint64 v0, GLuint64 v1) 1852b8e80941Smrg{ 1853b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1854b8e80941Smrg uint64_t v[2]; 1855b8e80941Smrg v[0] = v0; 1856b8e80941Smrg v[1] = v1; 1857b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 2); 1858b8e80941Smrg} 1859b8e80941Smrg 1860b8e80941Smrgvoid GLAPIENTRY 1861b8e80941Smrg_mesa_Uniform3ui64ARB(GLint location, GLuint64 v0, GLuint64 v1, GLuint64 v2) 1862b8e80941Smrg{ 1863b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1864b8e80941Smrg uint64_t v[3]; 1865b8e80941Smrg v[0] = v0; 1866b8e80941Smrg v[1] = v1; 1867b8e80941Smrg v[2] = v2; 1868b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 3); 1869b8e80941Smrg} 1870b8e80941Smrg 1871b8e80941Smrgvoid GLAPIENTRY 1872b8e80941Smrg_mesa_Uniform4ui64ARB(GLint location, GLuint64 v0, GLuint64 v1, GLuint64 v2, GLuint64 v3) 1873b8e80941Smrg{ 1874b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1875b8e80941Smrg uint64_t v[4]; 1876b8e80941Smrg v[0] = v0; 1877b8e80941Smrg v[1] = v1; 1878b8e80941Smrg v[2] = v2; 1879b8e80941Smrg v[3] = v3; 1880b8e80941Smrg _mesa_uniform(location, 1, v, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 4); 1881b8e80941Smrg} 1882b8e80941Smrg 1883b8e80941Smrgvoid GLAPIENTRY 1884b8e80941Smrg_mesa_Uniform1ui64vARB(GLint location, GLsizei count, const GLuint64 *value) 1885b8e80941Smrg{ 1886b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1887b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 1); 1888b8e80941Smrg} 1889b8e80941Smrg 1890b8e80941Smrgvoid GLAPIENTRY 1891b8e80941Smrg_mesa_Uniform2ui64vARB(GLint location, GLsizei count, const GLuint64 *value) 1892b8e80941Smrg{ 1893b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1894b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 2); 1895b8e80941Smrg} 1896b8e80941Smrg 1897b8e80941Smrgvoid GLAPIENTRY 1898b8e80941Smrg_mesa_Uniform3ui64vARB(GLint location, GLsizei count, const GLuint64 *value) 1899b8e80941Smrg{ 1900b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1901b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 3); 1902b8e80941Smrg} 1903b8e80941Smrg 1904b8e80941Smrgvoid GLAPIENTRY 1905b8e80941Smrg_mesa_Uniform4ui64vARB(GLint location, GLsizei count, const GLuint64 *value) 1906b8e80941Smrg{ 1907b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1908b8e80941Smrg _mesa_uniform(location, count, value, ctx, ctx->_Shader->ActiveProgram, GLSL_TYPE_UINT64, 4); 1909b8e80941Smrg} 1910b8e80941Smrg 1911b8e80941Smrg/* DSA entrypoints */ 1912b8e80941Smrgvoid GLAPIENTRY 1913b8e80941Smrg_mesa_ProgramUniform1i64ARB(GLuint program, GLint location, GLint64 v0) 1914b8e80941Smrg{ 1915b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1916b8e80941Smrg struct gl_shader_program *shProg = 1917b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1918b8e80941Smrg "glProgramUniform1i64ARB"); 1919b8e80941Smrg _mesa_uniform(location, 1, &v0, ctx, shProg, GLSL_TYPE_INT64, 1); 1920b8e80941Smrg} 1921b8e80941Smrg 1922b8e80941Smrgvoid GLAPIENTRY 1923b8e80941Smrg_mesa_ProgramUniform2i64ARB(GLuint program, GLint location, GLint64 v0, GLint64 v1) 1924b8e80941Smrg{ 1925b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1926b8e80941Smrg struct gl_shader_program *shProg = 1927b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1928b8e80941Smrg "glProgramUniform2i64ARB"); 1929b8e80941Smrg int64_t v[2]; 1930b8e80941Smrg v[0] = v0; 1931b8e80941Smrg v[1] = v1; 1932b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_INT64, 2); 1933b8e80941Smrg} 1934b8e80941Smrg 1935b8e80941Smrgvoid GLAPIENTRY 1936b8e80941Smrg_mesa_ProgramUniform3i64ARB(GLuint program, GLint location, GLint64 v0, GLint64 v1, GLint64 v2) 1937b8e80941Smrg{ 1938b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1939b8e80941Smrg struct gl_shader_program *shProg = 1940b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1941b8e80941Smrg "glProgramUniform3i64ARB"); 1942b8e80941Smrg int64_t v[3]; 1943b8e80941Smrg v[0] = v0; 1944b8e80941Smrg v[1] = v1; 1945b8e80941Smrg v[2] = v2; 1946b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_INT64, 3); 1947b8e80941Smrg} 1948b8e80941Smrg 1949b8e80941Smrgvoid GLAPIENTRY 1950b8e80941Smrg_mesa_ProgramUniform4i64ARB(GLuint program, GLint location, GLint64 v0, GLint64 v1, GLint64 v2, GLint64 v3) 1951b8e80941Smrg{ 1952b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1953b8e80941Smrg struct gl_shader_program *shProg = 1954b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1955b8e80941Smrg "glProgramUniform4i64ARB"); 1956b8e80941Smrg int64_t v[4]; 1957b8e80941Smrg v[0] = v0; 1958b8e80941Smrg v[1] = v1; 1959b8e80941Smrg v[2] = v2; 1960b8e80941Smrg v[3] = v3; 1961b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_INT64, 4); 1962b8e80941Smrg} 1963b8e80941Smrg 1964b8e80941Smrgvoid GLAPIENTRY 1965b8e80941Smrg_mesa_ProgramUniform1i64vARB(GLuint program, GLint location, GLsizei count, const GLint64 *value) 1966b8e80941Smrg{ 1967b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1968b8e80941Smrg struct gl_shader_program *shProg = 1969b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1970b8e80941Smrg "glProgramUniform1i64vARB"); 1971b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT64, 1); 1972b8e80941Smrg} 1973b8e80941Smrg 1974b8e80941Smrgvoid GLAPIENTRY 1975b8e80941Smrg_mesa_ProgramUniform2i64vARB(GLuint program, GLint location, GLsizei count, const GLint64 *value) 1976b8e80941Smrg{ 1977b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1978b8e80941Smrg struct gl_shader_program *shProg = 1979b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1980b8e80941Smrg "glProgramUniform2i64vARB"); 1981b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT64, 2); 1982b8e80941Smrg} 1983b8e80941Smrg 1984b8e80941Smrgvoid GLAPIENTRY 1985b8e80941Smrg_mesa_ProgramUniform3i64vARB(GLuint program, GLint location, GLsizei count, const GLint64 *value) 1986b8e80941Smrg{ 1987b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1988b8e80941Smrg struct gl_shader_program *shProg = 1989b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 1990b8e80941Smrg "glProgramUniform3i64vARB"); 1991b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT64, 3); 1992b8e80941Smrg} 1993b8e80941Smrg 1994b8e80941Smrgvoid GLAPIENTRY 1995b8e80941Smrg_mesa_ProgramUniform4i64vARB(GLuint program, GLint location, GLsizei count, const GLint64 *value) 1996b8e80941Smrg{ 1997b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 1998b8e80941Smrg struct gl_shader_program *shProg = 1999b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 2000b8e80941Smrg "glProgramUniform4i64vARB"); 2001b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_INT64, 4); 2002b8e80941Smrg} 2003b8e80941Smrg 2004b8e80941Smrgvoid GLAPIENTRY 2005b8e80941Smrg_mesa_ProgramUniform1ui64ARB(GLuint program, GLint location, GLuint64 v0) 2006b8e80941Smrg{ 2007b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 2008b8e80941Smrg struct gl_shader_program *shProg = 2009b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 2010b8e80941Smrg "glProgramUniform1ui64ARB"); 2011b8e80941Smrg _mesa_uniform(location, 1, &v0, ctx, shProg, GLSL_TYPE_UINT64, 1); 2012b8e80941Smrg} 2013b8e80941Smrg 2014b8e80941Smrgvoid GLAPIENTRY 2015b8e80941Smrg_mesa_ProgramUniform2ui64ARB(GLuint program, GLint location, GLuint64 v0, GLuint64 v1) 2016b8e80941Smrg{ 2017b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 2018b8e80941Smrg struct gl_shader_program *shProg = 2019b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 2020b8e80941Smrg "glProgramUniform2ui64ARB"); 2021b8e80941Smrg uint64_t v[2]; 2022b8e80941Smrg v[0] = v0; 2023b8e80941Smrg v[1] = v1; 2024b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_UINT64, 2); 2025b8e80941Smrg} 2026b8e80941Smrg 2027b8e80941Smrgvoid GLAPIENTRY 2028b8e80941Smrg_mesa_ProgramUniform3ui64ARB(GLuint program, GLint location, GLuint64 v0, GLuint64 v1, GLuint64 v2) 2029b8e80941Smrg{ 2030b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 2031b8e80941Smrg struct gl_shader_program *shProg = 2032b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 2033b8e80941Smrg "glProgramUniform3ui64ARB"); 2034b8e80941Smrg uint64_t v[3]; 2035b8e80941Smrg v[0] = v0; 2036b8e80941Smrg v[1] = v1; 2037b8e80941Smrg v[2] = v2; 2038b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_UINT64, 3); 2039b8e80941Smrg} 2040b8e80941Smrg 2041b8e80941Smrgvoid GLAPIENTRY 2042b8e80941Smrg_mesa_ProgramUniform4ui64ARB(GLuint program, GLint location, GLuint64 v0, GLuint64 v1, GLuint64 v2, GLuint64 v3) 2043b8e80941Smrg{ 2044b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 2045b8e80941Smrg struct gl_shader_program *shProg = 2046b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 2047b8e80941Smrg "glProgramUniform4ui64ARB"); 2048b8e80941Smrg uint64_t v[4]; 2049b8e80941Smrg v[0] = v0; 2050b8e80941Smrg v[1] = v1; 2051b8e80941Smrg v[2] = v2; 2052b8e80941Smrg v[3] = v3; 2053b8e80941Smrg _mesa_uniform(location, 1, v, ctx, shProg, GLSL_TYPE_UINT64, 4); 2054b8e80941Smrg} 2055b8e80941Smrg 2056b8e80941Smrgvoid GLAPIENTRY 2057b8e80941Smrg_mesa_ProgramUniform1ui64vARB(GLuint program, GLint location, GLsizei count, const GLuint64 *value) 2058b8e80941Smrg{ 2059b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 2060b8e80941Smrg struct gl_shader_program *shProg = 2061b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 2062b8e80941Smrg "glProgramUniform1ui64vARB"); 2063b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT64, 1); 2064b8e80941Smrg} 2065b8e80941Smrg 2066b8e80941Smrgvoid GLAPIENTRY 2067b8e80941Smrg_mesa_ProgramUniform2ui64vARB(GLuint program, GLint location, GLsizei count, const GLuint64 *value) 2068b8e80941Smrg{ 2069b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 2070b8e80941Smrg struct gl_shader_program *shProg = 2071b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 2072b8e80941Smrg "glProgramUniform2ui64vARB"); 2073b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT64, 2); 2074b8e80941Smrg} 2075b8e80941Smrg 2076b8e80941Smrgvoid GLAPIENTRY 2077b8e80941Smrg_mesa_ProgramUniform3ui64vARB(GLuint program, GLint location, GLsizei count, const GLuint64 *value) 2078b8e80941Smrg{ 2079b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 2080b8e80941Smrg struct gl_shader_program *shProg = 2081b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 2082b8e80941Smrg "glProgramUniform3ui64vARB"); 2083b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT64, 3); 2084b8e80941Smrg} 2085b8e80941Smrg 2086b8e80941Smrgvoid GLAPIENTRY 2087b8e80941Smrg_mesa_ProgramUniform4ui64vARB(GLuint program, GLint location, GLsizei count, const GLuint64 *value) 2088b8e80941Smrg{ 2089b8e80941Smrg GET_CURRENT_CONTEXT(ctx); 2090b8e80941Smrg struct gl_shader_program *shProg = 2091b8e80941Smrg _mesa_lookup_shader_program_err(ctx, program, 2092b8e80941Smrg "glProgramUniform4ui64vARB"); 2093b8e80941Smrg _mesa_uniform(location, count, value, ctx, shProg, GLSL_TYPE_UINT64, 4); 2094848b8605Smrg} 2095