169861ae49724dd49ae3ba82398239ad892753de7Brian Paul/* 269861ae49724dd49ae3ba82398239ad892753de7Brian Paul * Mesa 3-D graphics library 369861ae49724dd49ae3ba82398239ad892753de7Brian Paul * 469861ae49724dd49ae3ba82398239ad892753de7Brian Paul * Copyright (C) 2010 VMware, Inc. All Rights Reserved. 569861ae49724dd49ae3ba82398239ad892753de7Brian Paul * 669861ae49724dd49ae3ba82398239ad892753de7Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 769861ae49724dd49ae3ba82398239ad892753de7Brian Paul * copy of this software and associated documentation files (the "Software"), 869861ae49724dd49ae3ba82398239ad892753de7Brian Paul * to deal in the Software without restriction, including without limitation 969861ae49724dd49ae3ba82398239ad892753de7Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense, 1069861ae49724dd49ae3ba82398239ad892753de7Brian Paul * and/or sell copies of the Software, and to permit persons to whom the 1169861ae49724dd49ae3ba82398239ad892753de7Brian Paul * Software is furnished to do so, subject to the following conditions: 1269861ae49724dd49ae3ba82398239ad892753de7Brian Paul * 1369861ae49724dd49ae3ba82398239ad892753de7Brian Paul * The above copyright notice and this permission notice shall be included 1469861ae49724dd49ae3ba82398239ad892753de7Brian Paul * in all copies or substantial portions of the Software. 1569861ae49724dd49ae3ba82398239ad892753de7Brian Paul * 1669861ae49724dd49ae3ba82398239ad892753de7Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1769861ae49724dd49ae3ba82398239ad892753de7Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1869861ae49724dd49ae3ba82398239ad892753de7Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1969861ae49724dd49ae3ba82398239ad892753de7Brian Paul * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 2069861ae49724dd49ae3ba82398239ad892753de7Brian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 2169861ae49724dd49ae3ba82398239ad892753de7Brian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2269861ae49724dd49ae3ba82398239ad892753de7Brian Paul */ 2369861ae49724dd49ae3ba82398239ad892753de7Brian Paul 2469861ae49724dd49ae3ba82398239ad892753de7Brian Paul 2569861ae49724dd49ae3ba82398239ad892753de7Brian Paul#ifndef UNIFORMS_H 2669861ae49724dd49ae3ba82398239ad892753de7Brian Paul#define UNIFORMS_H 2769861ae49724dd49ae3ba82398239ad892753de7Brian Paul 281978247f85fd9e4c78ce346543c50910be40da0fVinson Lee#include "glheader.h" 29daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholt#include "program/prog_parameter.h" 30719909698c67c287a393d2380278e7b7495ae018Ian Romanick#include "../glsl/glsl_types.h" 3170650d08fa3f4db2aea41e4ed47b271c3a3e7385Ian Romanick#include "../glsl/ir_uniform.h" 321978247f85fd9e4c78ce346543c50910be40da0fVinson Lee 3363e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca#ifdef __cplusplus 3463e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonsecaextern "C" { 3563e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca#endif 3663e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca 3763e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca 381978247f85fd9e4c78ce346543c50910be40da0fVinson Leestruct gl_program; 391978247f85fd9e4c78ce346543c50910be40da0fVinson Leestruct _glapi_table; 4069861ae49724dd49ae3ba82398239ad892753de7Brian Paul 41a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 42a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform1fARB(GLint, GLfloat); 43a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 44a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 45a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform2fARB(GLint, GLfloat, GLfloat); 46a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 47a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 48a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform3fARB(GLint, GLfloat, GLfloat, GLfloat); 49a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 50a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 51a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform4fARB(GLint, GLfloat, GLfloat, GLfloat, GLfloat); 52a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 53a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 54a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform1iARB(GLint, GLint); 55a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 56a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 57a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform2iARB(GLint, GLint, GLint); 58a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 59a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 60a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform3iARB(GLint, GLint, GLint, GLint); 61a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 62a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 63a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform4iARB(GLint, GLint, GLint, GLint, GLint); 64a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 65a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 66a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform1fvARB(GLint, GLsizei, const GLfloat *); 67a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 68a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 69a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform2fvARB(GLint, GLsizei, const GLfloat *); 70a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 71a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 72a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform3fvARB(GLint, GLsizei, const GLfloat *); 73a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 74a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 75a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform4fvARB(GLint, GLsizei, const GLfloat *); 76a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 77a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 78a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform1ivARB(GLint, GLsizei, const GLint *); 79a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 80a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 81a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform2ivARB(GLint, GLsizei, const GLint *); 82a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 83a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 84a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform3ivARB(GLint, GLsizei, const GLint *); 85a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 86a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 87a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform4ivARB(GLint, GLsizei, const GLint *); 88a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 89a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 90a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform1ui(GLint location, GLuint v0); 91a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 92a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 93a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform2ui(GLint location, GLuint v0, GLuint v1); 94a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 95a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 96a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2); 97a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 98a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 99a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); 100a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 101a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 102a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform1uiv(GLint location, GLsizei count, const GLuint *value); 103a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 104a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 105a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform2uiv(GLint location, GLsizei count, const GLuint *value); 106a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 107a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 108a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform3uiv(GLint location, GLsizei count, const GLuint *value); 109a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 110a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 111a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_Uniform4uiv(GLint location, GLsizei count, const GLuint *value); 112a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 113a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 114a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 115a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_UniformMatrix2fvARB(GLint, GLsizei, GLboolean, const GLfloat *); 116a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 117a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 118a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_UniformMatrix3fvARB(GLint, GLsizei, GLboolean, const GLfloat *); 119a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 120a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 121a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_UniformMatrix4fvARB(GLint, GLsizei, GLboolean, const GLfloat *); 122a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 123a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 124a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, 125a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul const GLfloat *value); 126a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 127a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 128a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, 129a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul const GLfloat *value); 130a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 131a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 132a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, 133a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul const GLfloat *value); 134a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 135a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 136a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, 137a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul const GLfloat *value); 138a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 139a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 140a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, 141a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul const GLfloat *value); 142a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 143a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 144a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, 145a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul const GLfloat *value); 146a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 147a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 148a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 149a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_GetActiveUniformARB(GLhandleARB, GLuint, GLsizei, GLsizei *, 150a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul GLint *, GLenum *, GLcharARB *); 151a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 152a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 1539f1a4a6340824786142be9bc14f0c3418f14a69fEric Anholt_mesa_GetActiveUniformsiv(GLuint program, 1549f1a4a6340824786142be9bc14f0c3418f14a69fEric Anholt GLsizei uniformCount, 1559f1a4a6340824786142be9bc14f0c3418f14a69fEric Anholt const GLuint *uniformIndices, 1569f1a4a6340824786142be9bc14f0c3418f14a69fEric Anholt GLenum pname, 1579f1a4a6340824786142be9bc14f0c3418f14a69fEric Anholt GLint *params); 1589f1a4a6340824786142be9bc14f0c3418f14a69fEric Anholt 1599f1a4a6340824786142be9bc14f0c3418f14a69fEric Anholtextern void GLAPIENTRY 160a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_GetUniformfvARB(GLhandleARB, GLint, GLfloat *); 161a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 162a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void GLAPIENTRY 1636b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul_mesa_GetnUniformfvARB(GLhandleARB, GLint, GLsizei, GLfloat *); 1646b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul 1656b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paulextern void GLAPIENTRY 166a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_GetUniformivARB(GLhandleARB, GLint, GLint *); 167a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 1689c61ca90eaf466211281eba6cacb243d4ed8db5bBrian Paulextern void GLAPIENTRY 1696b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul_mesa_GetnUniformivARB(GLhandleARB, GLint, GLsizei, GLint *); 1706b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul 1716b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paulextern void GLAPIENTRY 1726b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul_mesa_GetUniformuiv(GLhandleARB, GLint, GLuint *); 1736b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul 1746b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paulextern void GLAPIENTRY 1756b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul_mesa_GetnUniformuivARB(GLhandleARB, GLint, GLsizei, GLuint *); 1766b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul 1776b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paulextern void GLAPIENTRY 1786b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul_mesa_GetUniformdv(GLhandleARB, GLint, GLdouble *); 1796b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul 1806b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paulextern void GLAPIENTRY 1816b329b9274b18c50f4177eef7ee087d50ebc1525Brian Paul_mesa_GetnUniformdvARB(GLhandleARB, GLint, GLsizei, GLdouble *); 1829c61ca90eaf466211281eba6cacb243d4ed8db5bBrian Paul 183a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern GLint GLAPIENTRY 184a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul_mesa_GetUniformLocationARB(GLhandleARB, const GLcharARB *); 185a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 186abcdbdf9cce3c7520ee999fac3099d609960847dEric Anholtunsigned 187f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_get_uniform_location(struct gl_context *ctx, struct gl_shader_program *shProg, 188abcdbdf9cce3c7520ee999fac3099d609960847dEric Anholt const GLchar *name, unsigned *offset); 1892f5bf20e44d509fa3afbe2cfbb9bb65347daea6aEric Anholt 1902f5bf20e44d509fa3afbe2cfbb9bb65347daea6aEric Anholtvoid 191f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_uniform(struct gl_context *ctx, struct gl_shader_program *shader_program, 1922f5bf20e44d509fa3afbe2cfbb9bb65347daea6aEric Anholt GLint location, GLsizei count, 1932f5bf20e44d509fa3afbe2cfbb9bb65347daea6aEric Anholt const GLvoid *values, GLenum type); 1942f5bf20e44d509fa3afbe2cfbb9bb65347daea6aEric Anholt 1952f5bf20e44d509fa3afbe2cfbb9bb65347daea6aEric Anholtvoid 196f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_uniform_matrix(struct gl_context *ctx, struct gl_shader_program *shProg, 197207a016ecaabbccf865a5b8e026b95a4276adc15Brian Paul GLuint cols, GLuint rows, 1982f5bf20e44d509fa3afbe2cfbb9bb65347daea6aEric Anholt GLint location, GLsizei count, 1992f5bf20e44d509fa3afbe2cfbb9bb65347daea6aEric Anholt GLboolean transpose, const GLfloat *values); 200a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 2014ad41af616fed7ad0b6980f7181c9db9b95a6732Ian Romanickvoid 2024ad41af616fed7ad0b6980f7181c9db9b95a6732Ian Romanick_mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location, 203719909698c67c287a393d2380278e7b7495ae018Ian Romanick GLsizei bufSize, enum glsl_base_type returnType, 204719909698c67c287a393d2380278e7b7495ae018Ian Romanick GLvoid *paramsOut); 2054ad41af616fed7ad0b6980f7181c9db9b95a6732Ian Romanick 20669861ae49724dd49ae3ba82398239ad892753de7Brian Paulextern void 20770650d08fa3f4db2aea41e4ed47b271c3a3e7385Ian Romanick_mesa_uniform_attach_driver_storage(struct gl_uniform_storage *, 20870650d08fa3f4db2aea41e4ed47b271c3a3e7385Ian Romanick unsigned element_stride, 20970650d08fa3f4db2aea41e4ed47b271c3a3e7385Ian Romanick unsigned vector_stride, 21070650d08fa3f4db2aea41e4ed47b271c3a3e7385Ian Romanick enum gl_uniform_driver_format format, 21170650d08fa3f4db2aea41e4ed47b271c3a3e7385Ian Romanick void *data); 21270650d08fa3f4db2aea41e4ed47b271c3a3e7385Ian Romanick 21370650d08fa3f4db2aea41e4ed47b271c3a3e7385Ian Romanickextern void 21470650d08fa3f4db2aea41e4ed47b271c3a3e7385Ian Romanick_mesa_uniform_detach_all_driver_storage(struct gl_uniform_storage *uni); 21570650d08fa3f4db2aea41e4ed47b271c3a3e7385Ian Romanick 21670650d08fa3f4db2aea41e4ed47b271c3a3e7385Ian Romanickextern void 2179516182e80d5a21ab402c9b2cbe9e6c46e5bb1d8Ian Romanick_mesa_propagate_uniforms_to_driver_storage(struct gl_uniform_storage *uni, 2189516182e80d5a21ab402c9b2cbe9e6c46e5bb1d8Ian Romanick unsigned array_index, 2199516182e80d5a21ab402c9b2cbe9e6c46e5bb1d8Ian Romanick unsigned count); 2209516182e80d5a21ab402c9b2cbe9e6c46e5bb1d8Ian Romanick 2219516182e80d5a21ab402c9b2cbe9e6c46e5bb1d8Ian Romanickextern void 2226a992c3288b6f7a5d94172c9ad1908e71e58233eIan Romanick_mesa_update_shader_textures_used(struct gl_shader_program *shProg, 2236a992c3288b6f7a5d94172c9ad1908e71e58233eIan Romanick struct gl_program *prog); 22469861ae49724dd49ae3ba82398239ad892753de7Brian Paul 225195ee502c3196607e3a74075aefade9770a08a67Ian Romanickextern bool 226195ee502c3196607e3a74075aefade9770a08a67Ian Romanick_mesa_sampler_uniforms_are_valid(const struct gl_shader_program *shProg, 227195ee502c3196607e3a74075aefade9770a08a67Ian Romanick char *errMsg, size_t errMsgLength); 22869861ae49724dd49ae3ba82398239ad892753de7Brian Paul 229a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paulextern void 2304cdbf27fac2537fe1c5216afd5c10bde224eb57bIan Romanick_mesa_init_shader_uniform_dispatch(const struct gl_context *ctx, 2314cdbf27fac2537fe1c5216afd5c10bde224eb57bIan Romanick struct _glapi_table *exec); 232a37b2219d6e3f299379c6434d65f300660d12c3eBrian Paul 233a541ff3fb99f43f9f664daf275e315af2836977eIan Romanickextern const struct gl_program_parameter * 234a541ff3fb99f43f9f664daf275e315af2836977eIan Romanickget_uniform_parameter(struct gl_shader_program *shProg, GLint index); 235a541ff3fb99f43f9f664daf275e315af2836977eIan Romanick 236daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholtstruct gl_builtin_uniform_element { 237daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholt const char *field; 238daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholt int tokens[STATE_LENGTH]; 239daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholt int swizzle; 240daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholt}; 241daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholt 242daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholtstruct gl_builtin_uniform_desc { 243daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholt const char *name; 244daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholt struct gl_builtin_uniform_element *elements; 245daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholt unsigned int num_elements; 246daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholt}; 247daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholt 248daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholtextern const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[]; 249daacaac3c8b91c87ab2cfc2d9f821474552b8181Eric Anholt 250637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick/** 251637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * \name GLSL uniform arrays and structs require special handling. 252637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * 253637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * The GL_ARB_shader_objects spec says that if you use 254637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * glGetUniformLocation to get the location of an array, you CANNOT 255637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * access other elements of the array by adding an offset to the 256637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * returned location. For example, you must call 257637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * glGetUniformLocation("foo[16]") if you want to set the 16th element 258637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * of the array with glUniform(). 259637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * 260637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * HOWEVER, some other OpenGL drivers allow accessing array elements 261637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * by adding an offset to the returned array location. And some apps 262637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * seem to depend on that behaviour. 263637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * 264637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * Mesa's gl_uniform_list doesn't directly support this since each 265637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * entry in the list describes one uniform variable, not one uniform 266637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * element. We could insert dummy entries in the list for each array 267637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * element after [0] but that causes complications elsewhere. 268637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * 269637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * We solve this problem by encoding two values in the location that's 270637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * returned by glGetUniformLocation(): 271637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * a) index into gl_uniform_list::Uniforms[] for the uniform 272637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * b) an array/field offset (0 for simple types) 273637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * 274637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * These two values are encoded in the high and low halves of a GLint. 275637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * By putting the uniform number in the high part and the offset in the 276637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * low part, we can support the unofficial ability to index into arrays 277637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * by adding offsets to the location value. 278637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick */ 279637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick/*@{*/ 280637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick/** 281637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * Combine the uniform's base location and the offset 282637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick */ 283637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanickstatic inline GLint 284637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick_mesa_uniform_merge_location_offset(unsigned base_location, unsigned offset) 285637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick{ 286637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick return (base_location << 16) | offset; 287637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick} 288637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick 289637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick/** 290637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick * Separate the uniform base location and parameter offset 291637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick */ 292637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanickstatic inline void 293637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick_mesa_uniform_split_location_offset(GLint location, unsigned *base_location, 294637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick unsigned *offset) 295637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick{ 296637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick *offset = location & 0xffff; 297637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick *base_location = location >> 16; 298637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick} 299637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick/*@}*/ 300637a7eb9e981d7dbe3bdb0c39712a9183ea19e9cIan Romanick 30163e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca 30263e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca#ifdef __cplusplus 30363e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca} 30463e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca#endif 30563e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca 30663e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca 30769861ae49724dd49ae3ba82398239ad892753de7Brian Paul#endif /* UNIFORMS_H */ 308