display list clean-ups
authorBrian Paul <brian.paul@tungstengraphics.com>
Sun, 26 Feb 2006 17:16:37 +0000 (17:16 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Sun, 26 Feb 2006 17:16:37 +0000 (17:16 +0000)
src/mesa/main/context.c
src/mesa/main/dlist.c
src/mesa/main/dlist.h

index 2ce06088aadff7b1ce278f9fd8208b928f39b27e..725386a3c27d9f08716c11476a1876b3f9822a84 100644 (file)
@@ -605,7 +605,7 @@ _glthread_DECLARE_STATIC_MUTEX(OneTimeLock);
  * and sets the glapi callbacks if the \c MESA_DEBUG environment variable is
  * defined.
  *
- * \sa _mesa_init_lists(), _math_init().
+ * \sa _math_init().
  */
 static void
 one_time_init( GLcontext *ctx )
@@ -624,8 +624,6 @@ one_time_init( GLcontext *ctx )
       assert( sizeof(GLint) == 4 );
       assert( sizeof(GLuint) == 4 );
 
-      _mesa_init_lists();
-
 #if _HAVE_FULL_GL
       _math_init();
 
index 8a0ac0fa4ab37ad09fee1f14c93f91a669b220f6..c945fcd58054587428d80d166c986b06474db66e 100644 (file)
@@ -2,7 +2,7 @@
  * Mesa 3-D graphics library
  * Version:  6.5
  *
- * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -407,15 +407,16 @@ void mesa_print_display_list( GLuint list );
 /*****                           Private                          *****/
 /**********************************************************************/
 
-/*
+
+/**
  * Make an empty display list.  This is used by glGenLists() to
- * reserver display list IDs.
+ * reserve display list IDs.
  */
 static struct mesa_display_list *make_list( GLuint list, GLuint count )
 {
    struct mesa_display_list *dlist = CALLOC_STRUCT( mesa_display_list );
    dlist->id = list;
-   dlist->node = (Node *) MALLOC( sizeof(Node) * count );
+   dlist->node = (Node *) _mesa_malloc( sizeof(Node) * count );
    dlist->node[0].opcode = OPCODE_END_OF_LIST;
    return dlist;
 }
@@ -455,118 +456,118 @@ void _mesa_destroy_list( GLcontext *ctx, GLuint list )
         switch (n[0].opcode) {
          /* for some commands, we need to free malloc'd memory */
         case OPCODE_MAP1:
-            FREE(n[6].data);
+            _mesa_free(n[6].data);
            n += InstSize[n[0].opcode];
            break;
         case OPCODE_MAP2:
-            FREE(n[10].data);
+            _mesa_free(n[10].data);
            n += InstSize[n[0].opcode];
            break;
         case OPCODE_DRAW_PIXELS:
-           FREE( n[5].data );
+           _mesa_free( n[5].data );
            n += InstSize[n[0].opcode];
            break;
         case OPCODE_BITMAP:
-           FREE( n[7].data );
+           _mesa_free( n[7].data );
            n += InstSize[n[0].opcode];
            break;
          case OPCODE_COLOR_TABLE:
-            FREE( n[6].data );
+            _mesa_free( n[6].data );
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_COLOR_SUB_TABLE:
-            FREE( n[6].data );
+            _mesa_free( n[6].data );
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_CONVOLUTION_FILTER_1D:
-            FREE( n[6].data );
+            _mesa_free( n[6].data );
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_CONVOLUTION_FILTER_2D:
-            FREE( n[7].data );
+            _mesa_free( n[7].data );
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_POLYGON_STIPPLE:
-            FREE( n[1].data );
+            _mesa_free( n[1].data );
            n += InstSize[n[0].opcode];
             break;
         case OPCODE_TEX_IMAGE1D:
-            FREE(n[8].data);
+            _mesa_free(n[8].data);
             n += InstSize[n[0].opcode];
            break;
         case OPCODE_TEX_IMAGE2D:
-            FREE( n[9]. data );
+            _mesa_free( n[9]. data );
             n += InstSize[n[0].opcode];
            break;
         case OPCODE_TEX_IMAGE3D:
-            FREE( n[10]. data );
+            _mesa_free( n[10]. data );
             n += InstSize[n[0].opcode];
            break;
          case OPCODE_TEX_SUB_IMAGE1D:
-            FREE(n[7].data);
+            _mesa_free(n[7].data);
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_TEX_SUB_IMAGE2D:
-            FREE(n[9].data);
+            _mesa_free(n[9].data);
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_TEX_SUB_IMAGE3D:
-            FREE(n[11].data);
+            _mesa_free(n[11].data);
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_COMPRESSED_TEX_IMAGE_1D:
-            FREE(n[7].data);
+            _mesa_free(n[7].data);
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_COMPRESSED_TEX_IMAGE_2D:
-            FREE(n[8].data);
+            _mesa_free(n[8].data);
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_COMPRESSED_TEX_IMAGE_3D:
-            FREE(n[9].data);
+            _mesa_free(n[9].data);
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D:
-            FREE(n[7].data);
+            _mesa_free(n[7].data);
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D:
-            FREE(n[9].data);
+            _mesa_free(n[9].data);
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D:
-            FREE(n[11].data);
+            _mesa_free(n[11].data);
             n += InstSize[n[0].opcode];
             break;
 #if FEATURE_NV_vertex_program
          case OPCODE_LOAD_PROGRAM_NV:
-            FREE(n[4].data);  /* program string */
+            _mesa_free(n[4].data);  /* program string */
             n += InstSize[n[0].opcode];
             break;
          case OPCODE_REQUEST_RESIDENT_PROGRAMS_NV:
-            FREE(n[2].data);  /* array of program ids */
+            _mesa_free(n[2].data);  /* array of program ids */
             n += InstSize[n[0].opcode];
             break;
 #endif
 #if FEATURE_NV_fragment_program
          case OPCODE_PROGRAM_NAMED_PARAMETER_NV:
-            FREE(n[3].data);  /* parameter name */
+            _mesa_free(n[3].data);  /* parameter name */
             n += InstSize[n[0].opcode];
             break;
 #endif
 #if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
          case OPCODE_PROGRAM_STRING_ARB:
-            FREE(n[4].data);  /* program string */
+            _mesa_free(n[4].data);  /* program string */
             n += InstSize[n[0].opcode];
             break;
 #endif
         case OPCODE_CONTINUE:
            n = (Node *) n[1].next;
-           FREE( block );
+           _mesa_free( block );
            block = n;
            break;
         case OPCODE_END_OF_LIST:
-           FREE( block );
+           _mesa_free( block );
            done = GL_TRUE;
            break;
         default:
@@ -577,7 +578,7 @@ void _mesa_destroy_list( GLcontext *ctx, GLuint list )
       }
    }
 
-   FREE( dlist );
+   _mesa_free( dlist );
    _mesa_HashRemove(ctx->Shared->DisplayList, list);
 }
 
@@ -644,15 +645,16 @@ static GLuint translate_id( GLsizei n, GLenum type, const GLvoid *list )
 /*****                        Public                              *****/
 /**********************************************************************/
 
+
 /**
- * Do one-time initialiazations for display lists.
+ * Initialize the InstSize[] array.  This only needs to be done once.
  */
-void
-_mesa_init_lists( void )
+static void
+init_instruction_size_table(void)
 {
-   static int init_flag = 0;
+   static GLboolean initialized = GL_FALSE;
 
-   if (init_flag==0) {
+   if (!initialized) {
       InstSize[OPCODE_ACCUM] = 3;
       InstSize[OPCODE_ALPHA_FUNC] = 3;
       InstSize[OPCODE_BIND_TEXTURE] = 3;
@@ -830,7 +832,7 @@ _mesa_init_lists( void )
       InstSize[OPCODE_EVAL_P1] = 2;
       InstSize[OPCODE_EVAL_P2] = 3;
    }
-   init_flag = 1;
+   initialized = GL_TRUE;
 }
 
 
@@ -883,7 +885,7 @@ _mesa_alloc_instruction( GLcontext *ctx, int opcode, GLint sz )
       /* This block is full.  Allocate a new block and chain to it */
       n = ctx->ListState.CurrentBlock + ctx->ListState.CurrentPos;
       n[0].opcode = OPCODE_CONTINUE;
-      newblock = (Node *) MALLOC( sizeof(Node) * BLOCK_SIZE );
+      newblock = (Node *) _mesa_malloc( sizeof(Node) * BLOCK_SIZE );
       if (!newblock) {
          _mesa_error( ctx, GL_OUT_OF_MEMORY, "Building display list" );
          return NULL;
@@ -1013,7 +1015,7 @@ static void GLAPIENTRY save_Bitmap( GLsizei width, GLsizei height,
       n[7].data = image;
    }
    else if (image) {
-      FREE(image);
+      _mesa_free(image);
    }
    if (ctx->ExecuteFlag) {
       CALL_Bitmap(ctx->Exec, ( width, height,
@@ -1337,7 +1339,7 @@ static void GLAPIENTRY save_ColorTable( GLenum target, GLenum internalFormat,
          n[6].data = image;
       }
       else if (image) {
-         FREE(image);
+         _mesa_free(image);
       }
       if (ctx->ExecuteFlag) {
          CALL_ColorTable(ctx->Exec, ( target, internalFormat, width,
@@ -1426,7 +1428,7 @@ static void GLAPIENTRY save_ColorSubTable( GLenum target, GLsizei start, GLsizei
       n[6].data = image;
    }
    else if (image) {
-      FREE(image);
+      _mesa_free(image);
    }
    if (ctx->ExecuteFlag) {
       CALL_ColorSubTable(ctx->Exec, (target, start, count, format, type, table));
@@ -1497,7 +1499,7 @@ save_ConvolutionFilter1D(GLenum target, GLenum internalFormat, GLsizei width,
       n[6].data = image;
    }
    else if (image) {
-      FREE(image);
+      _mesa_free(image);
    }
    if (ctx->ExecuteFlag) {
       CALL_ConvolutionFilter1D(ctx->Exec, ( target, internalFormat, width,
@@ -1527,7 +1529,7 @@ save_ConvolutionFilter2D(GLenum target, GLenum internalFormat,
       n[7].data = image;
    }
    else if (image) {
-      FREE(image);
+      _mesa_free(image);
    }
    if (ctx->ExecuteFlag) {
       CALL_ConvolutionFilter2D(ctx->Exec, ( target, internalFormat, width, height,
@@ -1890,7 +1892,7 @@ static void GLAPIENTRY save_DrawPixels( GLsizei width, GLsizei height,
       n[5].data = image;
    }
    else if (image) {
-      FREE(image);
+      _mesa_free(image);
    }
    if (ctx->ExecuteFlag) {
       CALL_DrawPixels(ctx->Exec, ( width, height, format, type, pixels ));
@@ -1915,7 +1917,7 @@ static void GLAPIENTRY save_Enable( GLenum cap )
 
 
 
-void GLAPIENTRY _mesa_save_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
+static void GLAPIENTRY _mesa_save_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1932,7 +1934,7 @@ void GLAPIENTRY _mesa_save_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
 }
 
 
-void GLAPIENTRY _mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
+static void GLAPIENTRY _mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2647,7 +2649,7 @@ save_PixelMapfv( GLenum map, GLint mapsize, const GLfloat *values )
    if (n) {
       n[1].e = map;
       n[2].i = mapsize;
-      n[3].data  = (void *) MALLOC( mapsize * sizeof(GLfloat) );
+      n[3].data  = (void *) _mesa_malloc( mapsize * sizeof(GLfloat) );
       MEMCPY( n[3].data, (void *) values, mapsize * sizeof(GLfloat) );
    }
    if (ctx->ExecuteFlag) {
@@ -2814,7 +2816,7 @@ static void GLAPIENTRY save_PolygonStipple( const GLubyte *pattern )
    n = ALLOC_INSTRUCTION( ctx, OPCODE_POLYGON_STIPPLE, 1 );
    if (n) {
       void *data;
-      n[1].data = MALLOC( 32 * 4 );
+      n[1].data = _mesa_malloc( 32 * 4 );
       data = n[1].data;   /* This needed for Acorn compiler */
       MEMCPY( data, pattern, 32 * 4 );
    }
@@ -3517,7 +3519,7 @@ static void GLAPIENTRY save_TexImage1D( GLenum target,
          n[8].data = image;
       }
       else if (image) {
-         FREE(image);
+         _mesa_free(image);
       }
       if (ctx->ExecuteFlag) {
          CALL_TexImage1D(ctx->Exec, ( target, level, components, width,
@@ -3557,7 +3559,7 @@ static void GLAPIENTRY save_TexImage2D( GLenum target,
          n[9].data = image;
       }
       else if (image) {
-         FREE(image);
+         _mesa_free(image);
       }
       if (ctx->ExecuteFlag) {
          CALL_TexImage2D(ctx->Exec, ( target, level, components, width,
@@ -3599,7 +3601,7 @@ static void GLAPIENTRY save_TexImage3D( GLenum target,
          n[10].data = image;
       }
       else if (image) {
-         FREE(image);
+         _mesa_free(image);
       }
       if (ctx->ExecuteFlag) {
          CALL_TexImage3D(ctx->Exec, ( target, level, internalFormat, width,
@@ -3629,7 +3631,7 @@ static void GLAPIENTRY save_TexSubImage1D( GLenum target, GLint level, GLint xof
       n[7].data = image;
    }
    else if (image) {
-      FREE(image);
+      _mesa_free(image);
    }
    if (ctx->ExecuteFlag) {
       CALL_TexSubImage1D(ctx->Exec, ( target, level, xoffset, width,
@@ -3662,7 +3664,7 @@ static void GLAPIENTRY save_TexSubImage2D( GLenum target, GLint level,
       n[9].data = image;
    }
    else if (image) {
-      FREE(image);
+      _mesa_free(image);
    }
    if (ctx->ExecuteFlag) {
       CALL_TexSubImage2D(ctx->Exec, ( target, level, xoffset, yoffset,
@@ -3697,7 +3699,7 @@ static void GLAPIENTRY save_TexSubImage3D( GLenum target, GLint level,
       n[11].data = image;
    }
    else if (image) {
-      FREE(image);
+      _mesa_free(image);
    }
    if (ctx->ExecuteFlag) {
       CALL_TexSubImage3D(ctx->Exec, ( target, level,
@@ -3955,7 +3957,7 @@ save_CompressedTexImage1DARB(GLenum target, GLint level,
       GLvoid *image;
       ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
       /* make copy of image */
-      image = MALLOC(imageSize);
+      image = _mesa_malloc(imageSize);
       if (!image) {
          _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage1DARB");
          return;
@@ -3972,7 +3974,7 @@ save_CompressedTexImage1DARB(GLenum target, GLint level,
          n[7].data = image;
       }
       else if (image) {
-         FREE(image);
+         _mesa_free(image);
       }
       if (ctx->ExecuteFlag) {
          CALL_CompressedTexImage1DARB(ctx->Exec, (target, level, internalFormat,
@@ -3999,7 +4001,7 @@ save_CompressedTexImage2DARB(GLenum target, GLint level,
       GLvoid *image;
       ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
       /* make copy of image */
-      image = MALLOC(imageSize);
+      image = _mesa_malloc(imageSize);
       if (!image) {
          _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage2DARB");
          return;
@@ -4017,7 +4019,7 @@ save_CompressedTexImage2DARB(GLenum target, GLint level,
          n[8].data = image;
       }
       else if (image) {
-         FREE(image);
+         _mesa_free(image);
       }
       if (ctx->ExecuteFlag) {
          CALL_CompressedTexImage2DARB(ctx->Exec, (target, level, internalFormat,
@@ -4044,7 +4046,7 @@ save_CompressedTexImage3DARB(GLenum target, GLint level,
       GLvoid *image;
       ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
       /* make copy of image */
-      image = MALLOC(imageSize);
+      image = _mesa_malloc(imageSize);
       if (!image) {
          _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexImage3DARB");
          return;
@@ -4063,7 +4065,7 @@ save_CompressedTexImage3DARB(GLenum target, GLint level,
          n[9].data = image;
       }
       else if (image) {
-         FREE(image);
+         _mesa_free(image);
       }
       if (ctx->ExecuteFlag) {
          CALL_CompressedTexImage3DARB(ctx->Exec, (target, level, internalFormat,
@@ -4085,7 +4087,7 @@ save_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset,
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
 
    /* make copy of image */
-   image = MALLOC(imageSize);
+   image = _mesa_malloc(imageSize);
    if (!image) {
       _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexSubImage1DARB");
       return;
@@ -4102,7 +4104,7 @@ save_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset,
       n[7].data = image;
    }
    else if (image) {
-      FREE(image);
+      _mesa_free(image);
    }
    if (ctx->ExecuteFlag) {
       CALL_CompressedTexSubImage1DARB(ctx->Exec, (target, level, xoffset,
@@ -4124,7 +4126,7 @@ save_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset,
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
 
    /* make copy of image */
-   image = MALLOC(imageSize);
+   image = _mesa_malloc(imageSize);
    if (!image) {
       _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexSubImage2DARB");
       return;
@@ -4143,7 +4145,7 @@ save_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset,
       n[9].data = image;
    }
    else if (image) {
-      FREE(image);
+      _mesa_free(image);
    }
    if (ctx->ExecuteFlag) {
       CALL_CompressedTexSubImage2DARB(ctx->Exec, (target, level, xoffset, yoffset,
@@ -4165,7 +4167,7 @@ save_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset,
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
 
    /* make copy of image */
-   image = MALLOC(imageSize);
+   image = _mesa_malloc(imageSize);
    if (!image) {
       _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCompressedTexSubImage3DARB");
       return;
@@ -4186,7 +4188,7 @@ save_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset,
       n[11].data = image;
    }
    else if (image) {
-      FREE(image);
+      _mesa_free(image);
    }
    if (ctx->ExecuteFlag) {
       CALL_CompressedTexSubImage3DARB(ctx->Exec, (target, level, xoffset, yoffset,
@@ -8319,9 +8321,14 @@ void _mesa_save_vtxfmt_init( GLvertexformat *vfmt )
 }
 
 
-
-void _mesa_init_display_list( GLcontext * ctx )
+/**
+ * Initialize display list state for given context.
+ */
+void
+_mesa_init_display_list(GLcontext *ctx)
 {
+   init_instruction_size_table();
+
    /* Display list */
    ctx->ListState.CallDepth = 0;
    ctx->ExecuteFlag = GL_TRUE;
index 1a5b391e760d395f492c835298c403df77c630e2..007006a01497aa004c156142d1ec677af0763b66 100644 (file)
@@ -38,8 +38,6 @@
 
 #if _HAVE_FULL_GL
 
-extern void _mesa_init_lists( void );
-
 extern void _mesa_destroy_list( GLcontext *ctx, GLuint list );
 
 extern void GLAPIENTRY _mesa_CallList( GLuint list );
@@ -58,6 +56,12 @@ extern void GLAPIENTRY _mesa_ListBase( GLuint base );
 
 extern void GLAPIENTRY _mesa_NewList( GLuint list, GLenum mode );
 
+extern void GLAPIENTRY _mesa_save_CallLists( GLsizei n, GLenum type, const GLvoid *lists );
+
+extern void GLAPIENTRY _mesa_save_CallList( GLuint list );
+
+
+
 extern void _mesa_init_dlist_table( struct _glapi_table *table );
 
 extern void _mesa_save_error( GLcontext *ctx, GLenum error, const char *s );
@@ -72,20 +76,13 @@ extern GLint _mesa_alloc_opcode( GLcontext *ctx, GLuint sz,
                                  void (*destroy)( GLcontext *, void * ),
                                  void (*print)( GLcontext *, void * ) );
 
-extern void GLAPIENTRY _mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2,
-                                GLint j1, GLint j2 );
-extern void GLAPIENTRY _mesa_save_EvalMesh1( GLenum mode, GLint i1, GLint i2 );
-extern void GLAPIENTRY _mesa_save_CallLists( GLsizei n, GLenum type, const GLvoid *lists );
-extern void GLAPIENTRY _mesa_save_CallList( GLuint list );
 extern void _mesa_init_display_list( GLcontext * ctx );
+
 extern void _mesa_save_vtxfmt_init( GLvertexformat *vfmt );
 
 
 #else
 
-/** No-op */
-#define _mesa_init_lists() ((void)0)
-
 /** No-op */
 #define _mesa_destroy_list(c,l) ((void)0)