mesa: Convert RENDERINPUTS* macros to GLbitfield64.
[mesa.git] / src / mesa / tnl / t_context.h
index 258906f7956ab5181716ba4b2b2a12389d17d1f1..3b7d4468055597e281cfb382412828b4f2631c14 100644 (file)
@@ -50,7 +50,7 @@
 #define _T_CONTEXT_H
 
 #include "main/glheader.h"
-#include "main/bitset.h"
+#include "main/imports.h"
 #include "main/mtypes.h"
 
 #include "math/m_vector.h"
@@ -93,22 +93,22 @@ enum {
        _TNL_ATTRIB_TEX6 = 14,
        _TNL_ATTRIB_TEX7 = 15,
 
-       _TNL_ATTRIB_GENERIC0 = 16, /* doesn't really exist! */
-       _TNL_ATTRIB_GENERIC1 = 17,
-       _TNL_ATTRIB_GENERIC2 = 18,
-       _TNL_ATTRIB_GENERIC3 = 19,
-       _TNL_ATTRIB_GENERIC4 = 20,
-       _TNL_ATTRIB_GENERIC5 = 21,
-       _TNL_ATTRIB_GENERIC6 = 22,
-       _TNL_ATTRIB_GENERIC7 = 23,
-       _TNL_ATTRIB_GENERIC8 = 24,
-       _TNL_ATTRIB_GENERIC9 = 25,
-       _TNL_ATTRIB_GENERIC10 = 26,
-       _TNL_ATTRIB_GENERIC11 = 27,
-       _TNL_ATTRIB_GENERIC12 = 28,
-       _TNL_ATTRIB_GENERIC13 = 29,
-       _TNL_ATTRIB_GENERIC14 = 30,
-       _TNL_ATTRIB_GENERIC15 = 31,
+       _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,
 
        /* These alias with the generics, but they are not active
         * concurrently, so it's not a problem.  The TNL module
@@ -120,25 +120,25 @@ enum {
         * generic attribute in order to pick up per-vertex material
         * data.
         */
-       _TNL_ATTRIB_MAT_FRONT_AMBIENT = 16,
-       _TNL_ATTRIB_MAT_BACK_AMBIENT = 17,
-       _TNL_ATTRIB_MAT_FRONT_DIFFUSE = 18,
-       _TNL_ATTRIB_MAT_BACK_DIFFUSE = 19,
-       _TNL_ATTRIB_MAT_FRONT_SPECULAR = 20,
-       _TNL_ATTRIB_MAT_BACK_SPECULAR = 21,
-       _TNL_ATTRIB_MAT_FRONT_EMISSION = 22,
-       _TNL_ATTRIB_MAT_BACK_EMISSION = 23,
-       _TNL_ATTRIB_MAT_FRONT_SHININESS = 24,
-       _TNL_ATTRIB_MAT_BACK_SHININESS = 25,
-       _TNL_ATTRIB_MAT_FRONT_INDEXES = 26,
-       _TNL_ATTRIB_MAT_BACK_INDEXES = 27,
+       _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 = 32
+       _TNL_ATTRIB_MAX = 33
 } ;
 
 #define _TNL_ATTRIB_TEX(u)       (_TNL_ATTRIB_TEX0 + (u))
@@ -162,6 +162,9 @@ enum {
 #define _TNL_FIRST_MAT       _TNL_ATTRIB_MAT_FRONT_AMBIENT /* GENERIC0 */
 #define _TNL_LAST_MAT        _TNL_ATTRIB_MAT_BACK_INDEXES  /* GENERIC11 */
 
+/* Number of available texture attributes */
+#define _TNL_NUM_TEX 8
+
 /* Number of available generic attributes */
 #define _TNL_NUM_GENERIC 16
 
@@ -173,7 +176,7 @@ enum {
 #define PRIM_END       0x20
 #define PRIM_MODE_MASK 0x0f
 
-static INLINE GLuint _tnl_translate_prim( const struct _mesa_prim *prim )
+static inline GLuint _tnl_translate_prim( const struct _mesa_prim *prim )
 {
    GLuint flag;
    flag = prim->mode;
@@ -235,7 +238,7 @@ struct tnl_pipeline_stage
 
    /* Allocate private data
     */
-   GLboolean (*create)( GLcontext *ctx, struct tnl_pipeline_stage * );
+   GLboolean (*create)( struct gl_context *ctx, struct tnl_pipeline_stage * );
 
    /* Free private data.
     */
@@ -244,7 +247,7 @@ struct tnl_pipeline_stage
    /* Called on any statechange or input array size change or
     * input array change to/from zero stride.
     */
-   void (*validate)( GLcontext *ctx, struct tnl_pipeline_stage * );
+   void (*validate)( struct gl_context *ctx, struct tnl_pipeline_stage * );
 
    /* Called from _tnl_run_pipeline().  The stage.changed_inputs value
     * encodes all inputs to thee struct which have changed.  If
@@ -254,7 +257,7 @@ struct tnl_pipeline_stage
     * Return value: GL_TRUE - keep going
     *               GL_FALSE - finished pipeline
     */
-   GLboolean (*run)( GLcontext *ctx, struct tnl_pipeline_stage * );
+   GLboolean (*run)( struct gl_context *ctx, struct tnl_pipeline_stage * );
 };
 
 
@@ -284,7 +287,7 @@ typedef void (*tnl_insert_func)( const struct tnl_clipspace_attr *a,
                                 GLubyte *v, 
                                 const GLfloat *in );
 
-typedef void (*tnl_emit_func)( GLcontext *ctx, 
+typedef void (*tnl_emit_func)( struct gl_context *ctx, 
                               GLuint count, 
                               GLubyte *dest );
 
@@ -311,19 +314,19 @@ struct tnl_clipspace_attr
 
 
 
-typedef void (*tnl_points_func)( GLcontext *ctx, GLuint first, GLuint last );
-typedef void (*tnl_line_func)( GLcontext *ctx, GLuint v1, GLuint v2 );
-typedef void (*tnl_triangle_func)( GLcontext *ctx,
+typedef void (*tnl_points_func)( struct gl_context *ctx, GLuint first, GLuint last );
+typedef void (*tnl_line_func)( struct gl_context *ctx, GLuint v1, GLuint v2 );
+typedef void (*tnl_triangle_func)( struct gl_context *ctx,
                                   GLuint v1, GLuint v2, GLuint v3 );
-typedef void (*tnl_quad_func)( GLcontext *ctx, GLuint v1, GLuint v2,
+typedef void (*tnl_quad_func)( struct gl_context *ctx, GLuint v1, GLuint v2,
                               GLuint v3, GLuint v4 );
-typedef void (*tnl_render_func)( GLcontext *ctx, GLuint start, GLuint count,
+typedef void (*tnl_render_func)( struct gl_context *ctx, GLuint start, GLuint count,
                                 GLuint flags );
-typedef void (*tnl_interp_func)( GLcontext *ctx,
+typedef void (*tnl_interp_func)( struct gl_context *ctx,
                                 GLfloat t, GLuint dst, GLuint out, GLuint in,
                                 GLboolean force_boundary );
-typedef void (*tnl_copy_pv_func)( GLcontext *ctx, GLuint dst, GLuint src );
-typedef void (*tnl_setup_func)( GLcontext *ctx,
+typedef void (*tnl_copy_pv_func)( struct gl_context *ctx, GLuint dst, GLuint src );
+typedef void (*tnl_setup_func)( struct gl_context *ctx,
                                GLuint start, GLuint end,
                                GLuint new_inputs);
 
@@ -377,7 +380,7 @@ struct tnl_clipspace
 
    struct tnl_clipspace_fastpath *fastpath;
    
-   void (*codegen_emit)( GLcontext *ctx );
+   void (*codegen_emit)( struct gl_context *ctx );
 };
 
 
@@ -387,13 +390,13 @@ struct tnl_device_driver
     *** TNL Pipeline
     ***/
 
-   void (*RunPipeline)(GLcontext *ctx);
+   void (*RunPipeline)(struct gl_context *ctx);
    /* Replaces PipelineStart/PipelineFinish -- intended to allow
     * drivers to wrap _tnl_run_pipeline() with code to validate state
     * and grab/release hardware locks.  
     */
 
-   void (*NotifyMaterialChange)(GLcontext *ctx);
+   void (*NotifyMaterialChange)(struct gl_context *ctx);
    /* Alert tnl-aware drivers of changes to material.
     */
 
@@ -402,14 +405,14 @@ struct tnl_device_driver
     ***/
    struct
    {
-      void (*Start)(GLcontext *ctx);
-      void (*Finish)(GLcontext *ctx);
+      void (*Start)(struct gl_context *ctx);
+      void (*Finish)(struct gl_context *ctx);
       /* Called before and after all rendering operations, including DrawPixels,
        * ReadPixels, Bitmap, span functions, and CopyTexImage, etc commands.
        * These are a suitable place for grabbing/releasing hardware locks.
        */
 
-      void (*PrimitiveNotify)(GLcontext *ctx, GLenum mode);
+      void (*PrimitiveNotify)(struct gl_context *ctx, GLenum mode);
       /* Called between RenderStart() and RenderFinish() to indicate the
        * type of primitive we're about to draw.  Mode will be one of the
        * modes accepted by glBegin().
@@ -427,12 +430,12 @@ struct tnl_device_driver
        * vertex attributes should be copied.
        */
 
-      void (*ClippedPolygon)( GLcontext *ctx, const GLuint *elts, GLuint n );
+      void (*ClippedPolygon)( struct gl_context *ctx, const GLuint *elts, GLuint n );
       /* Render a polygon with <n> vertices whose indexes are in the <elts>
        * array.
        */
 
-      void (*ClippedLine)( GLcontext *ctx, GLuint v0, GLuint v1 );
+      void (*ClippedLine)( struct gl_context *ctx, GLuint v0, GLuint v1 );
       /* Render a line between the two vertices given by indexes v0 and v1. */
 
       tnl_points_func           Points; /* must now respect vb->elts */
@@ -452,7 +455,7 @@ struct tnl_device_driver
        * vertices.
        */
 
-      void (*ResetLineStipple)( GLcontext *ctx );
+      void (*ResetLineStipple)( struct gl_context *ctx );
       /* Reset the hardware's line stipple counter.
        */
 
@@ -467,7 +470,7 @@ struct tnl_device_driver
        */
       
 
-      GLboolean (*Multipass)( GLcontext *ctx, GLuint passno );
+      GLboolean (*Multipass)( struct gl_context *ctx, GLuint passno );
       /* Driver may request additional render passes by returning GL_TRUE
        * when this function is called.  This function will be called
        * after the first pass, and passes will be made until the function
@@ -480,17 +483,16 @@ struct tnl_device_driver
 };
 
 
-#define DECLARE_RENDERINPUTS(name) BITSET64_DECLARE(name, _TNL_ATTRIB_MAX)
-#define RENDERINPUTS_COPY BITSET64_COPY
-#define RENDERINPUTS_EQUAL BITSET64_EQUAL
-#define RENDERINPUTS_ZERO BITSET64_ZERO
-#define RENDERINPUTS_ONES BITSET64_ONES
-#define RENDERINPUTS_TEST BITSET64_TEST
-#define RENDERINPUTS_SET BITSET64_SET
-#define RENDERINPUTS_CLEAR BITSET64_CLEAR
-#define RENDERINPUTS_TEST_RANGE BITSET64_TEST_RANGE
-#define RENDERINPUTS_SET_RANGE BITSET64_SET_RANGE
-#define RENDERINPUTS_CLEAR_RANGE BITSET64_CLEAR_RANGE
+#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)
 
 
 /**
@@ -527,6 +529,7 @@ typedef struct
    GLubyte *block[VERT_ATTRIB_MAX];
    GLuint nr_blocks;
 
+   GLuint CurInstance;
 } TNLcontext;
 
 
@@ -539,7 +542,7 @@ typedef struct
 
 
 extern void
-tnl_clip_prepare(GLcontext *ctx);
+tnl_clip_prepare(struct gl_context *ctx);
 
 
 #endif