Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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.  */
  55. struct 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.  */
  79. struct 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.  
  90. extern struct gl_program_parameter_list *
  91. _mesa_new_parameter_list(void);
  92.  
  93. extern struct gl_program_parameter_list *
  94. _mesa_new_parameter_list_sized(unsigned size);
  95.  
  96. extern void
  97. _mesa_free_parameter_list(struct gl_program_parameter_list *paramList);
  98.  
  99. extern struct gl_program_parameter_list *
  100. _mesa_clone_parameter_list(const struct gl_program_parameter_list *list);
  101.  
  102. extern 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.  
  106. static INLINE GLuint
  107. _mesa_num_parameters(const struct gl_program_parameter_list *list)
  108. {
  109.    return list ? list->NumParameters : 0;
  110. }
  111.  
  112. extern 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.  
  119. extern GLint
  120. _mesa_add_named_parameter(struct gl_program_parameter_list *paramList,
  121.                           const char *name, const GLfloat values[4]);
  122.  
  123. extern GLint
  124. _mesa_add_named_constant(struct gl_program_parameter_list *paramList,
  125.                          const char *name, const GLfloat values[4],
  126.                          GLuint size);
  127.  
  128. extern GLint
  129. _mesa_add_unnamed_constant(struct gl_program_parameter_list *paramList,
  130.                            const GLfloat values[4], GLuint size,
  131.                            GLuint *swizzleOut);
  132.  
  133. extern GLint
  134. _mesa_add_varying(struct gl_program_parameter_list *paramList,
  135.                   const char *name, GLuint size, GLenum datatype,
  136.                   GLbitfield flags);
  137.  
  138. extern GLint
  139. _mesa_add_attribute(struct gl_program_parameter_list *paramList,
  140.                     const char *name, GLint size, GLenum datatype, GLint attrib);
  141.  
  142. extern GLint
  143. _mesa_add_state_reference(struct gl_program_parameter_list *paramList,
  144.                           const gl_state_index stateTokens[STATE_LENGTH]);
  145.  
  146. extern GLfloat *
  147. _mesa_lookup_parameter_value(const struct gl_program_parameter_list *paramList,
  148.                              GLsizei nameLen, const char *name);
  149.  
  150. extern GLint
  151. _mesa_lookup_parameter_index(const struct gl_program_parameter_list *paramList,
  152.                              GLsizei nameLen, const char *name);
  153.  
  154. extern GLboolean
  155. _mesa_lookup_parameter_constant(const struct gl_program_parameter_list *list,
  156.                                 const GLfloat v[], GLuint vSize,
  157.                                 GLint *posOut, GLuint *swizzleOut);
  158.  
  159. extern GLuint
  160. _mesa_longest_parameter_name(const struct gl_program_parameter_list *list,
  161.                              gl_register_file type);
  162.  
  163. extern GLuint
  164. _mesa_num_parameters_of_type(const struct gl_program_parameter_list *list,
  165.                              gl_register_file type);
  166.  
  167.  
  168. #endif /* PROG_PARAMETER_H */
  169.