mesa: don't assign numbers to vertex attrib enums manually
[mesa.git] / src / mesa / tnl / t_context.h
index 3b7d4468055597e281cfb382412828b4f2631c14..67a87f26af552061441e00375b171365504a0c35 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * mesa 3-D graphics library
- * Version:  6.5
  *
  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 /**
  * attribs want (16).
  */
 enum {
-       _TNL_ATTRIB_POS = 0,
-       _TNL_ATTRIB_WEIGHT = 1,
-       _TNL_ATTRIB_NORMAL = 2,
-       _TNL_ATTRIB_COLOR0 = 3,
-       _TNL_ATTRIB_COLOR1 = 4,
-       _TNL_ATTRIB_FOG = 5,
-       _TNL_ATTRIB_COLOR_INDEX = 6,
-       _TNL_ATTRIB_EDGEFLAG = 7,
-       _TNL_ATTRIB_TEX0 = 8,
-       _TNL_ATTRIB_TEX1 = 9,
-       _TNL_ATTRIB_TEX2 = 10,
-       _TNL_ATTRIB_TEX3 = 11,
-       _TNL_ATTRIB_TEX4 = 12,
-       _TNL_ATTRIB_TEX5 = 13,
-       _TNL_ATTRIB_TEX6 = 14,
-       _TNL_ATTRIB_TEX7 = 15,
-
-       _TNL_ATTRIB_GENERIC0 = 17, /* doesn't really exist! */
-       _TNL_ATTRIB_GENERIC1 = 18,
-       _TNL_ATTRIB_GENERIC2 = 19,
-       _TNL_ATTRIB_GENERIC3 = 20,
-       _TNL_ATTRIB_GENERIC4 = 21,
-       _TNL_ATTRIB_GENERIC5 = 22,
-       _TNL_ATTRIB_GENERIC6 = 23,
-       _TNL_ATTRIB_GENERIC7 = 24,
-       _TNL_ATTRIB_GENERIC8 = 25,
-       _TNL_ATTRIB_GENERIC9 = 26,
-       _TNL_ATTRIB_GENERIC10 = 27,
-       _TNL_ATTRIB_GENERIC11 = 28,
-       _TNL_ATTRIB_GENERIC12 = 29,
-       _TNL_ATTRIB_GENERIC13 = 30,
-       _TNL_ATTRIB_GENERIC14 = 31,
-       _TNL_ATTRIB_GENERIC15 = 32,
+       _TNL_ATTRIB_POS,
+       _TNL_ATTRIB_WEIGHT,
+       _TNL_ATTRIB_NORMAL,
+       _TNL_ATTRIB_COLOR0,
+       _TNL_ATTRIB_COLOR1,
+       _TNL_ATTRIB_FOG,
+       _TNL_ATTRIB_COLOR_INDEX,
+       _TNL_ATTRIB_EDGEFLAG,
+       _TNL_ATTRIB_TEX0,
+       _TNL_ATTRIB_TEX1,
+       _TNL_ATTRIB_TEX2,
+       _TNL_ATTRIB_TEX3,
+       _TNL_ATTRIB_TEX4,
+       _TNL_ATTRIB_TEX5,
+       _TNL_ATTRIB_TEX6,
+       _TNL_ATTRIB_TEX7,
+
+       /* This is really a VARYING_SLOT, not an attrib.  Need to fix
+        * tnl to understand the difference.
+        */
+       _TNL_ATTRIB_POINTSIZE,
+
+       _TNL_ATTRIB_GENERIC0, /* doesn't really exist! */
+       _TNL_ATTRIB_GENERIC1,
+       _TNL_ATTRIB_GENERIC2,
+       _TNL_ATTRIB_GENERIC3,
+       _TNL_ATTRIB_GENERIC4,
+       _TNL_ATTRIB_GENERIC5,
+       _TNL_ATTRIB_GENERIC6,
+       _TNL_ATTRIB_GENERIC7,
+       _TNL_ATTRIB_GENERIC8,
+       _TNL_ATTRIB_GENERIC9,
+       _TNL_ATTRIB_GENERIC10,
+       _TNL_ATTRIB_GENERIC11,
+       _TNL_ATTRIB_GENERIC12,
+       _TNL_ATTRIB_GENERIC13,
+       _TNL_ATTRIB_GENERIC14,
+       _TNL_ATTRIB_GENERIC15,
+
+       _TNL_ATTRIB_MAX,
 
        /* These alias with the generics, but they are not active
         * concurrently, so it's not a problem.  The TNL module
@@ -120,26 +127,19 @@ enum {
         * generic attribute in order to pick up per-vertex material
         * data.
         */
-       _TNL_ATTRIB_MAT_FRONT_AMBIENT = 17,
-       _TNL_ATTRIB_MAT_BACK_AMBIENT = 18,
-       _TNL_ATTRIB_MAT_FRONT_DIFFUSE = 19,
-       _TNL_ATTRIB_MAT_BACK_DIFFUSE = 20,
-       _TNL_ATTRIB_MAT_FRONT_SPECULAR = 21,
-       _TNL_ATTRIB_MAT_BACK_SPECULAR = 22,
-       _TNL_ATTRIB_MAT_FRONT_EMISSION = 23,
-       _TNL_ATTRIB_MAT_BACK_EMISSION = 24,
-       _TNL_ATTRIB_MAT_FRONT_SHININESS = 25,
-       _TNL_ATTRIB_MAT_BACK_SHININESS = 26,
-       _TNL_ATTRIB_MAT_FRONT_INDEXES = 27,
-       _TNL_ATTRIB_MAT_BACK_INDEXES = 28,
-
-       /* This is really a VERT_RESULT, not an attrib.  Need to fix
-        * tnl to understand the difference.
-        */
-       _TNL_ATTRIB_POINTSIZE = 16,
-
-       _TNL_ATTRIB_MAX = 33
-} ;
+       _TNL_ATTRIB_MAT_FRONT_AMBIENT = _TNL_ATTRIB_GENERIC0,
+       _TNL_ATTRIB_MAT_BACK_AMBIENT,
+       _TNL_ATTRIB_MAT_FRONT_DIFFUSE,
+       _TNL_ATTRIB_MAT_BACK_DIFFUSE,
+       _TNL_ATTRIB_MAT_FRONT_SPECULAR,
+       _TNL_ATTRIB_MAT_BACK_SPECULAR,
+       _TNL_ATTRIB_MAT_FRONT_EMISSION,
+       _TNL_ATTRIB_MAT_BACK_EMISSION,
+       _TNL_ATTRIB_MAT_FRONT_SHININESS,
+       _TNL_ATTRIB_MAT_BACK_SHININESS,
+       _TNL_ATTRIB_MAT_FRONT_INDEXES,
+       _TNL_ATTRIB_MAT_BACK_INDEXES,
+};
 
 #define _TNL_ATTRIB_TEX(u)       (_TNL_ATTRIB_TEX0 + (u))
 #define _TNL_ATTRIB_GENERIC(n) (_TNL_ATTRIB_GENERIC0 + (n))
@@ -221,7 +221,7 @@ struct vertex_buffer
    GLuint      PrimitiveCount;       
 
    /* Inputs to the vertex program stage */
-   GLvector4f *AttribPtr[_TNL_ATTRIB_MAX];      /* GL_NV_vertex_program */
+   GLvector4f *AttribPtr[_TNL_ATTRIB_MAX];
 };
 
 
@@ -384,6 +384,20 @@ struct tnl_clipspace
 };
 
 
+#define SHINE_TABLE_SIZE 256   /**< Material shininess lookup table sizes */
+
+/**
+ * Material shininess lookup table.
+ */
+struct tnl_shine_tab
+{
+   struct tnl_shine_tab *next, *prev;
+   GLfloat tab[SHINE_TABLE_SIZE+1];
+   GLfloat shininess;
+   GLuint refcount;
+};
+
+
 struct tnl_device_driver
 {
    /***
@@ -483,18 +497,6 @@ struct tnl_device_driver
 };
 
 
-#define DECLARE_RENDERINPUTS(name) GLbitfield64 name
-#define RENDERINPUTS_COPY(x, y) do { (x) = (y); } while (0)
-#define RENDERINPUTS_EQUAL(x, y) ((x) == (y))
-#define RENDERINPUTS_ZERO(x) do { (x) = 0; } while (0)
-#define RENDERINPUTS_ONES(x) do { (x) = ~(GLbitfield64)0; } while (0)
-#define RENDERINPUTS_TEST(x, b) (((x) & BITFIELD64_BIT(b)) != 0)
-#define RENDERINPUTS_SET(x, b) ((x) |= BITFIELD64_BIT(b))
-#define RENDERINPUTS_CLEAR(x, b) ((x) &= ~BITFIELD64_BIT(b))
-#define RENDERINPUTS_TEST_RANGE(x, b, e) \
-   (((x) & BITFIELD64_RANGE((b), (e) - (b) + 1)) != 0)
-
-
 /**
  * Context state for T&L context.
  */
@@ -512,6 +514,7 @@ typedef struct
    /* Clipspace/ndc/window vertex managment:
     */
    struct tnl_clipspace clipspace;
+   GLmatrix _WindowMap;
 
    /* Probably need a better configuration mechanism:
     */
@@ -520,7 +523,7 @@ typedef struct
    GLboolean AllowPixelFog;
    GLboolean _DoVertexFog;  /* eval fog function at each vertex? */
 
-   DECLARE_RENDERINPUTS(render_inputs_bitset);
+   GLbitfield64 render_inputs_bitset;
 
    GLvector4f tmp_inputs[VERT_ATTRIB_MAX];
 
@@ -530,6 +533,10 @@ typedef struct
    GLuint nr_blocks;
 
    GLuint CurInstance;
+
+   struct tnl_shine_tab *_ShineTable[2]; /**< Active shine tables */
+   struct tnl_shine_tab *_ShineTabList;  /**< MRU list of inactive shine tables */
+   /**@}*/
 } TNLcontext;