diff options
| -rw-r--r-- | src/mesa/main/uniforms.c | 231 | ||||
| -rw-r--r-- | src/mesa/main/uniforms.h | 15 | ||||
| -rw-r--r-- | src/mesa/program/ir_to_mesa.cpp | 248 | 
3 files changed, 251 insertions, 243 deletions
| diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c index a5d7da51f0..29a9be8c99 100644 --- a/src/mesa/main/uniforms.c +++ b/src/mesa/main/uniforms.c @@ -3,6 +3,7 @@   *   * Copyright (C) 2004-2008  Brian Paul   All Rights Reserved.   * Copyright (C) 2009-2010  VMware, Inc.  All Rights Reserved. + * Copyright © 2010 Intel Corporation   *   * Permission is hereby granted, free of charge, to any person obtaining a   * copy of this software and associated documentation files (the "Software"), @@ -44,7 +45,7 @@  #include "program/prog_parameter.h"  #include "program/prog_statevars.h"  #include "program/prog_uniform.h" - +#include "program/prog_instruction.h"  static GLenum @@ -79,6 +80,234 @@ base_uniform_type(GLenum type)     }  } +static struct gl_builtin_uniform_element gl_DepthRange_elements[] = { +   {"near", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_XXXX}, +   {"far", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_YYYY}, +   {"diff", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_ZZZZ}, +}; + +static struct gl_builtin_uniform_element gl_ClipPlane_elements[] = { +   {NULL, {STATE_CLIPPLANE, 0, 0}, SWIZZLE_XYZW} +}; + +static struct gl_builtin_uniform_element gl_Point_elements[] = { +   {"size", {STATE_POINT_SIZE}, SWIZZLE_XXXX}, +   {"sizeMin", {STATE_POINT_SIZE}, SWIZZLE_YYYY}, +   {"sizeMax", {STATE_POINT_SIZE}, SWIZZLE_ZZZZ}, +   {"fadeThresholdSize", {STATE_POINT_SIZE}, SWIZZLE_WWWW}, +   {"distanceConstantAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_XXXX}, +   {"distanceLinearAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_YYYY}, +   {"distanceQuadraticAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_ZZZZ}, +}; + +static struct gl_builtin_uniform_element gl_FrontMaterial_elements[] = { +   {"emission", {STATE_MATERIAL, 0, STATE_EMISSION}, SWIZZLE_XYZW}, +   {"ambient", {STATE_MATERIAL, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, +   {"diffuse", {STATE_MATERIAL, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, +   {"specular", {STATE_MATERIAL, 0, STATE_SPECULAR}, SWIZZLE_XYZW}, +   {"shininess", {STATE_MATERIAL, 0, STATE_SHININESS}, SWIZZLE_XXXX}, +}; + +static struct gl_builtin_uniform_element gl_BackMaterial_elements[] = { +   {"emission", {STATE_MATERIAL, 1, STATE_EMISSION}, SWIZZLE_XYZW}, +   {"ambient", {STATE_MATERIAL, 1, STATE_AMBIENT}, SWIZZLE_XYZW}, +   {"diffuse", {STATE_MATERIAL, 1, STATE_DIFFUSE}, SWIZZLE_XYZW}, +   {"specular", {STATE_MATERIAL, 1, STATE_SPECULAR}, SWIZZLE_XYZW}, +   {"shininess", {STATE_MATERIAL, 1, STATE_SHININESS}, SWIZZLE_XXXX}, +}; + +static struct gl_builtin_uniform_element gl_LightSource_elements[] = { +   {"ambient", {STATE_LIGHT, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, +   {"diffuse", {STATE_LIGHT, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, +   {"specular", {STATE_LIGHT, 0, STATE_SPECULAR}, SWIZZLE_XYZW}, +   {"position", {STATE_LIGHT, 0, STATE_POSITION}, SWIZZLE_XYZW}, +   {"halfVector", {STATE_LIGHT, 0, STATE_HALF_VECTOR}, SWIZZLE_XYZW}, +   {"spotDirection", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_XYZW}, +   {"spotCosCutoff", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_WWWW}, +   {"spotCutoff", {STATE_LIGHT, 0, STATE_SPOT_CUTOFF}, SWIZZLE_XXXX}, +   {"spotExponent", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_WWWW}, +   {"constantAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_XXXX}, +   {"linearAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_YYYY}, +   {"quadraticAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_ZZZZ}, +}; + +static struct gl_builtin_uniform_element gl_LightModel_elements[] = { +   {"ambient", {STATE_LIGHTMODEL_AMBIENT, 0}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_FrontLightModelProduct_elements[] = { +   {"sceneColor", {STATE_LIGHTMODEL_SCENECOLOR, 0}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_BackLightModelProduct_elements[] = { +   {"sceneColor", {STATE_LIGHTMODEL_SCENECOLOR, 1}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_FrontLightProduct_elements[] = { +   {"ambient", {STATE_LIGHTPROD, 0, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, +   {"diffuse", {STATE_LIGHTPROD, 0, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, +   {"specular", {STATE_LIGHTPROD, 0, 0, STATE_SPECULAR}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_BackLightProduct_elements[] = { +   {"ambient", {STATE_LIGHTPROD, 0, 1, STATE_AMBIENT}, SWIZZLE_XYZW}, +   {"diffuse", {STATE_LIGHTPROD, 0, 1, STATE_DIFFUSE}, SWIZZLE_XYZW}, +   {"specular", {STATE_LIGHTPROD, 0, 1, STATE_SPECULAR}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_TextureEnvColor_elements[] = { +   {NULL, {STATE_TEXENV_COLOR, 0}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_EyePlaneS_elements[] = { +   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_S}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_EyePlaneT_elements[] = { +   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_T}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_EyePlaneR_elements[] = { +   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_R}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_EyePlaneQ_elements[] = { +   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_Q}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_ObjectPlaneS_elements[] = { +   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_S}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_ObjectPlaneT_elements[] = { +   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_T}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_ObjectPlaneR_elements[] = { +   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_R}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_ObjectPlaneQ_elements[] = { +   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_Q}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_Fog_elements[] = { +   {"color", {STATE_FOG_COLOR}, SWIZZLE_XYZW}, +   {"density", {STATE_FOG_PARAMS}, SWIZZLE_XXXX}, +   {"start", {STATE_FOG_PARAMS}, SWIZZLE_YYYY}, +   {"end", {STATE_FOG_PARAMS}, SWIZZLE_ZZZZ}, +   {"scale", {STATE_FOG_PARAMS}, SWIZZLE_WWWW}, +}; + +static struct gl_builtin_uniform_element gl_NormalScale_elements[] = { +   {NULL, {STATE_NORMAL_SCALE}, SWIZZLE_XXXX}, +}; + +#define MATRIX(name, statevar, modifier)				\ +   static struct gl_builtin_uniform_element name ## _elements[] = {	\ +      { NULL, { statevar, 0, 0, 0, modifier}, SWIZZLE_XYZW },		\ +      { NULL, { statevar, 0, 1, 1, modifier}, SWIZZLE_XYZW },		\ +      { NULL, { statevar, 0, 2, 2, modifier}, SWIZZLE_XYZW },		\ +      { NULL, { statevar, 0, 3, 3, modifier}, SWIZZLE_XYZW },		\ +   } + +MATRIX(gl_ModelViewMatrix, +       STATE_MODELVIEW_MATRIX, STATE_MATRIX_TRANSPOSE); +MATRIX(gl_ModelViewMatrixInverse, +       STATE_MODELVIEW_MATRIX, STATE_MATRIX_INVTRANS); +MATRIX(gl_ModelViewMatrixTranspose, +       STATE_MODELVIEW_MATRIX, 0); +MATRIX(gl_ModelViewMatrixInverseTranspose, +       STATE_MODELVIEW_MATRIX, STATE_MATRIX_INVERSE); + +MATRIX(gl_ProjectionMatrix, +       STATE_PROJECTION_MATRIX, STATE_MATRIX_TRANSPOSE); +MATRIX(gl_ProjectionMatrixInverse, +       STATE_PROJECTION_MATRIX, STATE_MATRIX_INVTRANS); +MATRIX(gl_ProjectionMatrixTranspose, +       STATE_PROJECTION_MATRIX, 0); +MATRIX(gl_ProjectionMatrixInverseTranspose, +       STATE_PROJECTION_MATRIX, STATE_MATRIX_INVERSE); + +MATRIX(gl_ModelViewProjectionMatrix, +       STATE_MVP_MATRIX, STATE_MATRIX_TRANSPOSE); +MATRIX(gl_ModelViewProjectionMatrixInverse, +       STATE_MVP_MATRIX, STATE_MATRIX_INVTRANS); +MATRIX(gl_ModelViewProjectionMatrixTranspose, +       STATE_MVP_MATRIX, 0); +MATRIX(gl_ModelViewProjectionMatrixInverseTranspose, +       STATE_MVP_MATRIX, STATE_MATRIX_INVERSE); + +MATRIX(gl_TextureMatrix, +       STATE_TEXTURE_MATRIX, STATE_MATRIX_TRANSPOSE); +MATRIX(gl_TextureMatrixInverse, +       STATE_TEXTURE_MATRIX, STATE_MATRIX_INVTRANS); +MATRIX(gl_TextureMatrixTranspose, +       STATE_TEXTURE_MATRIX, 0); +MATRIX(gl_TextureMatrixInverseTranspose, +       STATE_TEXTURE_MATRIX, STATE_MATRIX_INVERSE); + +static struct gl_builtin_uniform_element gl_NormalMatrix_elements[] = { +   { NULL, { STATE_MODELVIEW_MATRIX, 0, 0, 0, STATE_MATRIX_INVERSE}, +     SWIZZLE_XYZW }, +   { NULL, { STATE_MODELVIEW_MATRIX, 0, 1, 1, STATE_MATRIX_INVERSE}, +     SWIZZLE_XYZW }, +   { NULL, { STATE_MODELVIEW_MATRIX, 0, 2, 2, STATE_MATRIX_INVERSE}, +     SWIZZLE_XYZW }, +}; + +#undef MATRIX + +#define STATEVAR(name) {#name, name ## _elements, Elements(name ## _elements)} + +const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = { +   STATEVAR(gl_DepthRange), +   STATEVAR(gl_ClipPlane), +   STATEVAR(gl_Point), +   STATEVAR(gl_FrontMaterial), +   STATEVAR(gl_BackMaterial), +   STATEVAR(gl_LightSource), +   STATEVAR(gl_LightModel), +   STATEVAR(gl_FrontLightModelProduct), +   STATEVAR(gl_BackLightModelProduct), +   STATEVAR(gl_FrontLightProduct), +   STATEVAR(gl_BackLightProduct), +   STATEVAR(gl_TextureEnvColor), +   STATEVAR(gl_EyePlaneS), +   STATEVAR(gl_EyePlaneT), +   STATEVAR(gl_EyePlaneR), +   STATEVAR(gl_EyePlaneQ), +   STATEVAR(gl_ObjectPlaneS), +   STATEVAR(gl_ObjectPlaneT), +   STATEVAR(gl_ObjectPlaneR), +   STATEVAR(gl_ObjectPlaneQ), +   STATEVAR(gl_Fog), + +   STATEVAR(gl_ModelViewMatrix), +   STATEVAR(gl_ModelViewMatrixInverse), +   STATEVAR(gl_ModelViewMatrixTranspose), +   STATEVAR(gl_ModelViewMatrixInverseTranspose), + +   STATEVAR(gl_ProjectionMatrix), +   STATEVAR(gl_ProjectionMatrixInverse), +   STATEVAR(gl_ProjectionMatrixTranspose), +   STATEVAR(gl_ProjectionMatrixInverseTranspose), + +   STATEVAR(gl_ModelViewProjectionMatrix), +   STATEVAR(gl_ModelViewProjectionMatrixInverse), +   STATEVAR(gl_ModelViewProjectionMatrixTranspose), +   STATEVAR(gl_ModelViewProjectionMatrixInverseTranspose), + +   STATEVAR(gl_TextureMatrix), +   STATEVAR(gl_TextureMatrixInverse), +   STATEVAR(gl_TextureMatrixTranspose), +   STATEVAR(gl_TextureMatrixInverseTranspose), + +   STATEVAR(gl_NormalMatrix), +   STATEVAR(gl_NormalScale), + +   {NULL, NULL, 0} +};  static GLboolean  is_boolean_type(GLenum type) diff --git a/src/mesa/main/uniforms.h b/src/mesa/main/uniforms.h index f823c61444..ac2cf30d97 100644 --- a/src/mesa/main/uniforms.h +++ b/src/mesa/main/uniforms.h @@ -26,6 +26,7 @@  #define UNIFORMS_H  #include "glheader.h" +#include "program/prog_parameter.h"  struct gl_program;  struct _glapi_table; @@ -172,4 +173,18 @@ _mesa_update_shader_textures_used(struct gl_program *prog);  extern void  _mesa_init_shader_uniform_dispatch(struct _glapi_table *exec); +struct gl_builtin_uniform_element { +   const char *field; +   int tokens[STATE_LENGTH]; +   int swizzle; +}; + +struct gl_builtin_uniform_desc { +   const char *name; +   struct gl_builtin_uniform_element *elements; +   unsigned int num_elements; +}; + +extern const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[]; +  #endif /* UNIFORMS_H */ diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index aa2add4174..5c92bc9865 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -577,243 +577,6 @@ ir_to_mesa_visitor::find_variable_storage(ir_variable *var)     return NULL;  } -struct statevar_element { -   const char *field; -   int tokens[STATE_LENGTH]; -   int swizzle; -}; - -static struct statevar_element gl_DepthRange_elements[] = { -   {"near", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_XXXX}, -   {"far", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_YYYY}, -   {"diff", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_ZZZZ}, -}; - -static struct statevar_element gl_ClipPlane_elements[] = { -   {NULL, {STATE_CLIPPLANE, 0, 0}, SWIZZLE_XYZW} -}; - -static struct statevar_element gl_Point_elements[] = { -   {"size", {STATE_POINT_SIZE}, SWIZZLE_XXXX}, -   {"sizeMin", {STATE_POINT_SIZE}, SWIZZLE_YYYY}, -   {"sizeMax", {STATE_POINT_SIZE}, SWIZZLE_ZZZZ}, -   {"fadeThresholdSize", {STATE_POINT_SIZE}, SWIZZLE_WWWW}, -   {"distanceConstantAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_XXXX}, -   {"distanceLinearAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_YYYY}, -   {"distanceQuadraticAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_ZZZZ}, -}; - -static struct statevar_element gl_FrontMaterial_elements[] = { -   {"emission", {STATE_MATERIAL, 0, STATE_EMISSION}, SWIZZLE_XYZW}, -   {"ambient", {STATE_MATERIAL, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, -   {"diffuse", {STATE_MATERIAL, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, -   {"specular", {STATE_MATERIAL, 0, STATE_SPECULAR}, SWIZZLE_XYZW}, -   {"shininess", {STATE_MATERIAL, 0, STATE_SHININESS}, SWIZZLE_XXXX}, -}; - -static struct statevar_element gl_BackMaterial_elements[] = { -   {"emission", {STATE_MATERIAL, 1, STATE_EMISSION}, SWIZZLE_XYZW}, -   {"ambient", {STATE_MATERIAL, 1, STATE_AMBIENT}, SWIZZLE_XYZW}, -   {"diffuse", {STATE_MATERIAL, 1, STATE_DIFFUSE}, SWIZZLE_XYZW}, -   {"specular", {STATE_MATERIAL, 1, STATE_SPECULAR}, SWIZZLE_XYZW}, -   {"shininess", {STATE_MATERIAL, 1, STATE_SHININESS}, SWIZZLE_XXXX}, -}; - -static struct statevar_element gl_LightSource_elements[] = { -   {"ambient", {STATE_LIGHT, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, -   {"diffuse", {STATE_LIGHT, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, -   {"specular", {STATE_LIGHT, 0, STATE_SPECULAR}, SWIZZLE_XYZW}, -   {"position", {STATE_LIGHT, 0, STATE_POSITION}, SWIZZLE_XYZW}, -   {"halfVector", {STATE_LIGHT, 0, STATE_HALF_VECTOR}, SWIZZLE_XYZW}, -   {"spotDirection", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_XYZW}, -   {"spotCosCutoff", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_WWWW}, -   {"spotCutoff", {STATE_LIGHT, 0, STATE_SPOT_CUTOFF}, SWIZZLE_XXXX}, -   {"spotExponent", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_WWWW}, -   {"constantAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_XXXX}, -   {"linearAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_YYYY}, -   {"quadraticAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_ZZZZ}, -}; - -static struct statevar_element gl_LightModel_elements[] = { -   {"ambient", {STATE_LIGHTMODEL_AMBIENT, 0}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_FrontLightModelProduct_elements[] = { -   {"sceneColor", {STATE_LIGHTMODEL_SCENECOLOR, 0}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_BackLightModelProduct_elements[] = { -   {"sceneColor", {STATE_LIGHTMODEL_SCENECOLOR, 1}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_FrontLightProduct_elements[] = { -   {"ambient", {STATE_LIGHTPROD, 0, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, -   {"diffuse", {STATE_LIGHTPROD, 0, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, -   {"specular", {STATE_LIGHTPROD, 0, 0, STATE_SPECULAR}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_BackLightProduct_elements[] = { -   {"ambient", {STATE_LIGHTPROD, 0, 1, STATE_AMBIENT}, SWIZZLE_XYZW}, -   {"diffuse", {STATE_LIGHTPROD, 0, 1, STATE_DIFFUSE}, SWIZZLE_XYZW}, -   {"specular", {STATE_LIGHTPROD, 0, 1, STATE_SPECULAR}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_TextureEnvColor_elements[] = { -   {NULL, {STATE_TEXENV_COLOR, 0}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_EyePlaneS_elements[] = { -   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_S}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_EyePlaneT_elements[] = { -   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_T}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_EyePlaneR_elements[] = { -   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_R}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_EyePlaneQ_elements[] = { -   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_Q}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_ObjectPlaneS_elements[] = { -   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_S}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_ObjectPlaneT_elements[] = { -   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_T}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_ObjectPlaneR_elements[] = { -   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_R}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_ObjectPlaneQ_elements[] = { -   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_Q}, SWIZZLE_XYZW}, -}; - -static struct statevar_element gl_Fog_elements[] = { -   {"color", {STATE_FOG_COLOR}, SWIZZLE_XYZW}, -   {"density", {STATE_FOG_PARAMS}, SWIZZLE_XXXX}, -   {"start", {STATE_FOG_PARAMS}, SWIZZLE_YYYY}, -   {"end", {STATE_FOG_PARAMS}, SWIZZLE_ZZZZ}, -   {"scale", {STATE_FOG_PARAMS}, SWIZZLE_WWWW}, -}; - -static struct statevar_element gl_NormalScale_elements[] = { -   {NULL, {STATE_NORMAL_SCALE}, SWIZZLE_XXXX}, -}; - -#define MATRIX(name, statevar, modifier)			\ -   static struct statevar_element name ## _elements[] = {		\ -      { NULL, { statevar, 0, 0, 0, modifier}, SWIZZLE_XYZW },		\ -      { NULL, { statevar, 0, 1, 1, modifier}, SWIZZLE_XYZW },		\ -      { NULL, { statevar, 0, 2, 2, modifier}, SWIZZLE_XYZW },		\ -      { NULL, { statevar, 0, 3, 3, modifier}, SWIZZLE_XYZW },		\ -   } - -MATRIX(gl_ModelViewMatrix, -       STATE_MODELVIEW_MATRIX, STATE_MATRIX_TRANSPOSE); -MATRIX(gl_ModelViewMatrixInverse, -       STATE_MODELVIEW_MATRIX, STATE_MATRIX_INVTRANS); -MATRIX(gl_ModelViewMatrixTranspose, -       STATE_MODELVIEW_MATRIX, 0); -MATRIX(gl_ModelViewMatrixInverseTranspose, -       STATE_MODELVIEW_MATRIX, STATE_MATRIX_INVERSE); - -MATRIX(gl_ProjectionMatrix, -       STATE_PROJECTION_MATRIX, STATE_MATRIX_TRANSPOSE); -MATRIX(gl_ProjectionMatrixInverse, -       STATE_PROJECTION_MATRIX, STATE_MATRIX_INVTRANS); -MATRIX(gl_ProjectionMatrixTranspose, -       STATE_PROJECTION_MATRIX, 0); -MATRIX(gl_ProjectionMatrixInverseTranspose, -       STATE_PROJECTION_MATRIX, STATE_MATRIX_INVERSE); - -MATRIX(gl_ModelViewProjectionMatrix, -       STATE_MVP_MATRIX, STATE_MATRIX_TRANSPOSE); -MATRIX(gl_ModelViewProjectionMatrixInverse, -       STATE_MVP_MATRIX, STATE_MATRIX_INVTRANS); -MATRIX(gl_ModelViewProjectionMatrixTranspose, -       STATE_MVP_MATRIX, 0); -MATRIX(gl_ModelViewProjectionMatrixInverseTranspose, -       STATE_MVP_MATRIX, STATE_MATRIX_INVERSE); - -MATRIX(gl_TextureMatrix, -       STATE_TEXTURE_MATRIX, STATE_MATRIX_TRANSPOSE); -MATRIX(gl_TextureMatrixInverse, -       STATE_TEXTURE_MATRIX, STATE_MATRIX_INVTRANS); -MATRIX(gl_TextureMatrixTranspose, -       STATE_TEXTURE_MATRIX, 0); -MATRIX(gl_TextureMatrixInverseTranspose, -       STATE_TEXTURE_MATRIX, STATE_MATRIX_INVERSE); - -static struct statevar_element gl_NormalMatrix_elements[] = { -   { NULL, { STATE_MODELVIEW_MATRIX, 0, 0, 0, STATE_MATRIX_INVERSE}, -     SWIZZLE_XYZW }, -   { NULL, { STATE_MODELVIEW_MATRIX, 0, 1, 1, STATE_MATRIX_INVERSE}, -     SWIZZLE_XYZW }, -   { NULL, { STATE_MODELVIEW_MATRIX, 0, 2, 2, STATE_MATRIX_INVERSE}, -     SWIZZLE_XYZW }, -}; - -#undef MATRIX - -#define STATEVAR(name) {#name, name ## _elements, Elements(name ## _elements)} - -static const struct statevar { -   const char *name; -   struct statevar_element *elements; -   unsigned int num_elements; -} statevars[] = { -   STATEVAR(gl_DepthRange), -   STATEVAR(gl_ClipPlane), -   STATEVAR(gl_Point), -   STATEVAR(gl_FrontMaterial), -   STATEVAR(gl_BackMaterial), -   STATEVAR(gl_LightSource), -   STATEVAR(gl_LightModel), -   STATEVAR(gl_FrontLightModelProduct), -   STATEVAR(gl_BackLightModelProduct), -   STATEVAR(gl_FrontLightProduct), -   STATEVAR(gl_BackLightProduct), -   STATEVAR(gl_TextureEnvColor), -   STATEVAR(gl_EyePlaneS), -   STATEVAR(gl_EyePlaneT), -   STATEVAR(gl_EyePlaneR), -   STATEVAR(gl_EyePlaneQ), -   STATEVAR(gl_ObjectPlaneS), -   STATEVAR(gl_ObjectPlaneT), -   STATEVAR(gl_ObjectPlaneR), -   STATEVAR(gl_ObjectPlaneQ), -   STATEVAR(gl_Fog), - -   STATEVAR(gl_ModelViewMatrix), -   STATEVAR(gl_ModelViewMatrixInverse), -   STATEVAR(gl_ModelViewMatrixTranspose), -   STATEVAR(gl_ModelViewMatrixInverseTranspose), - -   STATEVAR(gl_ProjectionMatrix), -   STATEVAR(gl_ProjectionMatrixInverse), -   STATEVAR(gl_ProjectionMatrixTranspose), -   STATEVAR(gl_ProjectionMatrixInverseTranspose), - -   STATEVAR(gl_ModelViewProjectionMatrix), -   STATEVAR(gl_ModelViewProjectionMatrixInverse), -   STATEVAR(gl_ModelViewProjectionMatrixTranspose), -   STATEVAR(gl_ModelViewProjectionMatrixInverseTranspose), - -   STATEVAR(gl_TextureMatrix), -   STATEVAR(gl_TextureMatrixInverse), -   STATEVAR(gl_TextureMatrixTranspose), -   STATEVAR(gl_TextureMatrixInverseTranspose), - -   STATEVAR(gl_NormalMatrix), -   STATEVAR(gl_NormalScale), -}; -  void  ir_to_mesa_visitor::visit(ir_variable *ir)  { @@ -826,19 +589,20 @@ ir_to_mesa_visitor::visit(ir_variable *ir)     if (ir->mode == ir_var_uniform && strncmp(ir->name, "gl_", 3) == 0) {        unsigned int i; +      const struct gl_builtin_uniform_desc *statevar; -      for (i = 0; i < Elements(statevars); i++) { -	 if (strcmp(ir->name, statevars[i].name) == 0) +      for (i = 0; _mesa_builtin_uniform_desc[i].name; i++) { +	 if (strcmp(ir->name, _mesa_builtin_uniform_desc[i].name) == 0)  	    break;        } -      if (i == Elements(statevars)) { +      if (!_mesa_builtin_uniform_desc[i].name) {  	 fail_link(this->shader_program,  		   "Failed to find builtin uniform `%s'\n", ir->name);  	 return;        } -      const struct statevar *statevar = &statevars[i]; +      statevar = &_mesa_builtin_uniform_desc[i];        int array_count;        if (ir->type->is_array()) { @@ -881,7 +645,7 @@ ir_to_mesa_visitor::visit(ir_variable *ir)        for (int a = 0; a < array_count; a++) {  	 for (unsigned int i = 0; i < statevar->num_elements; i++) { -	    struct statevar_element *element = &statevar->elements[i]; +	    struct gl_builtin_uniform_element *element = &statevar->elements[i];  	    int tokens[STATE_LENGTH];  	    memcpy(tokens, element->tokens, sizeof(element->tokens)); | 
