prog_parameter.h revision 9ab1332d749e8e7eda2896c25725e245fd0f8444
1/* 2 * Mesa 3-D graphics library 3 * Version: 7.3 4 * 5 * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the "Software"), 9 * to deal in the Software without restriction, including without limitation 10 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 * and/or sell copies of the Software, and to permit persons to whom the 12 * Software is furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included 15 * in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 */ 24 25/** 26 * \file prog_parameter.c 27 * Program parameter lists and functions. 28 * \author Brian Paul 29 */ 30 31#ifndef PROG_PARAMETER_H 32#define PROG_PARAMETER_H 33 34#include "main/mtypes.h" 35#include "prog_statevars.h" 36 37 38/** 39 * Program parameter flags 40 */ 41/*@{*/ 42#define PROG_PARAM_BIT_CENTROID 0x1 /**< for varying vars (GLSL 1.20) */ 43#define PROG_PARAM_BIT_INVARIANT 0x2 /**< for varying vars (GLSL 1.20) */ 44#define PROG_PARAM_BIT_FLAT 0x4 /**< for varying vars (GLSL 1.30) */ 45#define PROG_PARAM_BIT_LINEAR 0x8 /**< for varying vars (GLSL 1.30) */ 46#define PROG_PARAM_BIT_CYL_WRAP 0x10 /**< XXX gallium debug */ 47/*@}*/ 48 49 50 51/** 52 * Program parameter. 53 * Used by shaders/programs for uniforms, constants, varying vars, etc. 54 */ 55struct gl_program_parameter 56{ 57 const char *Name; /**< Null-terminated string */ 58 gl_register_file Type; /**< PROGRAM_NAMED_PARAM, CONSTANT or STATE_VAR */ 59 GLenum DataType; /**< GL_FLOAT, GL_FLOAT_VEC2, etc */ 60 /** 61 * Number of components (1..4), or more. 62 * If the number of components is greater than 4, 63 * this parameter is part of a larger uniform like a GLSL matrix or array. 64 * The next program parameter's Size will be Size-4 of this parameter. 65 */ 66 GLuint Size; 67 GLboolean Initialized; /**< debug: Has the ParameterValue[] been set? */ 68 GLbitfield Flags; /**< Bitmask of PROG_PARAM_*_BIT */ 69 /** 70 * A sequence of STATE_* tokens and integers to identify GL state. 71 */ 72 gl_state_index StateIndexes[STATE_LENGTH]; 73}; 74 75 76/** 77 * List of gl_program_parameter instances. 78 */ 79struct gl_program_parameter_list 80{ 81 GLuint Size; /**< allocated size of Parameters, ParameterValues */ 82 GLuint NumParameters; /**< number of parameters in arrays */ 83 struct gl_program_parameter *Parameters; /**< Array [Size] */ 84 GLfloat (*ParameterValues)[4]; /**< Array [Size] of GLfloat[4] */ 85 GLbitfield StateFlags; /**< _NEW_* flags indicating which state changes 86 might invalidate ParameterValues[] */ 87}; 88 89 90extern struct gl_program_parameter_list * 91_mesa_new_parameter_list(void); 92 93extern struct gl_program_parameter_list * 94_mesa_new_parameter_list_sized(unsigned size); 95 96extern void 97_mesa_free_parameter_list(struct gl_program_parameter_list *paramList); 98 99extern struct gl_program_parameter_list * 100_mesa_clone_parameter_list(const struct gl_program_parameter_list *list); 101 102extern struct gl_program_parameter_list * 103_mesa_combine_parameter_lists(const struct gl_program_parameter_list *a, 104 const struct gl_program_parameter_list *b); 105 106static INLINE GLuint 107_mesa_num_parameters(const struct gl_program_parameter_list *list) 108{ 109 return list ? list->NumParameters : 0; 110} 111 112extern GLint 113_mesa_add_parameter(struct gl_program_parameter_list *paramList, 114 gl_register_file type, const char *name, 115 GLuint size, GLenum datatype, const GLfloat *values, 116 const gl_state_index state[STATE_LENGTH], 117 GLbitfield flags); 118 119extern GLint 120_mesa_add_named_parameter(struct gl_program_parameter_list *paramList, 121 const char *name, const GLfloat values[4]); 122 123extern GLint 124_mesa_add_named_constant(struct gl_program_parameter_list *paramList, 125 const char *name, const GLfloat values[4], 126 GLuint size); 127 128extern GLint 129_mesa_add_unnamed_constant(struct gl_program_parameter_list *paramList, 130 const GLfloat values[4], GLuint size, 131 GLuint *swizzleOut); 132 133extern GLint 134_mesa_add_sampler(struct gl_program_parameter_list *paramList, 135 const char *name, GLenum datatype, int array_length); 136 137extern GLint 138_mesa_add_varying(struct gl_program_parameter_list *paramList, 139 const char *name, GLuint size, GLenum datatype, 140 GLbitfield flags); 141 142extern GLint 143_mesa_add_attribute(struct gl_program_parameter_list *paramList, 144 const char *name, GLint size, GLenum datatype, GLint attrib); 145 146extern GLint 147_mesa_add_state_reference(struct gl_program_parameter_list *paramList, 148 const gl_state_index stateTokens[STATE_LENGTH]); 149 150extern GLfloat * 151_mesa_lookup_parameter_value(const struct gl_program_parameter_list *paramList, 152 GLsizei nameLen, const char *name); 153 154extern GLint 155_mesa_lookup_parameter_index(const struct gl_program_parameter_list *paramList, 156 GLsizei nameLen, const char *name); 157 158extern GLboolean 159_mesa_lookup_parameter_constant(const struct gl_program_parameter_list *list, 160 const GLfloat v[], GLuint vSize, 161 GLint *posOut, GLuint *swizzleOut); 162 163extern GLuint 164_mesa_longest_parameter_name(const struct gl_program_parameter_list *list, 165 gl_register_file type); 166 167extern GLuint 168_mesa_num_parameters_of_type(const struct gl_program_parameter_list *list, 169 gl_register_file type); 170 171 172#endif /* PROG_PARAMETER_H */ 173