diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/main/arrayobj.c | 5 | ||||
| -rw-r--r-- | src/mesa/main/bufferobj.c | 16 | ||||
| -rw-r--r-- | src/mesa/main/context.c | 3 | ||||
| -rw-r--r-- | src/mesa/main/mtypes.h | 3 | ||||
| -rw-r--r-- | src/mesa/main/pixel.c | 12 | ||||
| -rw-r--r-- | src/mesa/main/pixelstore.c | 9 | ||||
| -rw-r--r-- | src/mesa/main/shared.c | 12 | ||||
| -rw-r--r-- | src/mesa/swrast/s_imaging.c | 10 | ||||
| -rw-r--r-- | src/mesa/vbo/vbo_context.c | 9 | ||||
| -rw-r--r-- | src/mesa/vbo/vbo_exec_api.c | 4 | ||||
| -rw-r--r-- | src/mesa/vbo/vbo_rebase.c | 2 | ||||
| -rw-r--r-- | src/mesa/vbo/vbo_split_copy.c | 4 | ||||
| -rw-r--r-- | src/mesa/vbo/vbo_split_inplace.c | 2 | 
13 files changed, 50 insertions, 41 deletions
diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c index b04095fd16..2646c12ccc 100644 --- a/src/mesa/main/arrayobj.c +++ b/src/mesa/main/arrayobj.c @@ -112,7 +112,8 @@ init_array(GLcontext *ctx,     array->Normalized = GL_FALSE;  #if FEATURE_ARB_vertex_buffer_object     /* Vertex array buffers */ -   array->BufferObj = ctx->Array.NullBufferObj; +   _mesa_reference_buffer_object(ctx, &array->BufferObj, +                                 ctx->Shared->NullBufferObj);  #endif  } @@ -180,7 +181,7 @@ _mesa_remove_array_object( GLcontext *ctx, struct gl_array_object *obj )  static void  unbind_buffer_object( GLcontext *ctx, struct gl_buffer_object *bufObj )  { -   if (bufObj != ctx->Array.NullBufferObj) { +   if (bufObj != ctx->Shared->NullBufferObj) {        _mesa_reference_buffer_object(ctx, &bufObj, NULL);     }  } diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index a983376251..1f2070ef47 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -424,16 +424,8 @@ _mesa_buffer_unmap( GLcontext *ctx, GLenum target,  void  _mesa_init_buffer_objects( GLcontext *ctx )  { -   /* Allocate the default buffer object and set refcount so high that -    * it never gets deleted. -    * XXX with recent/improved refcounting this may not longer be needed. -    */ -   ctx->Array.NullBufferObj = _mesa_new_buffer_object(ctx, 0, 0); -   if (ctx->Array.NullBufferObj) -      ctx->Array.NullBufferObj->RefCount = 1000; - -   ctx->Array.ArrayBufferObj = ctx->Array.NullBufferObj; -   ctx->Array.ElementArrayBufferObj = ctx->Array.NullBufferObj; +   ctx->Array.ArrayBufferObj = ctx->Shared->NullBufferObj; +   ctx->Array.ElementArrayBufferObj = ctx->Shared->NullBufferObj;  } @@ -477,7 +469,7 @@ bind_buffer_object(GLcontext *ctx, GLenum target, GLuint buffer)        /* The spec says there's not a buffer object named 0, but we use         * one internally because it simplifies things.         */ -      newBufObj = ctx->Array.NullBufferObj; +      newBufObj = ctx->Shared->NullBufferObj;     }     else {        /* non-default buffer object */ @@ -744,7 +736,7 @@ unbind(GLcontext *ctx,         struct gl_buffer_object *obj)  {     if (*ptr == obj) { -      _mesa_reference_buffer_object(ctx, ptr, ctx->Array.NullBufferObj); +      _mesa_reference_buffer_object(ctx, ptr, ctx->Shared->NullBufferObj);     }  } diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index d780f91f04..1a290f251a 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -1005,9 +1005,6 @@ _mesa_free_context_data( GLcontext *ctx )     _mesa_free_query_data(ctx);  #endif -#if FEATURE_ARB_vertex_buffer_object -   _mesa_delete_buffer_object(ctx, ctx->Array.NullBufferObj); -#endif     _mesa_delete_array_object(ctx, ctx->Array.DefaultArrayObj);     /* free dispatch tables */ diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index affb000b8c..3debbe9f2d 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1593,7 +1593,6 @@ struct gl_array_attrib     GLbitfield NewState;		/**< mask of _NEW_ARRAY_* values */  #if FEATURE_ARB_vertex_buffer_object -   struct gl_buffer_object *NullBufferObj;     struct gl_buffer_object *ArrayBufferObj;     struct gl_buffer_object *ElementArrayBufferObj;  #endif @@ -2064,6 +2063,8 @@ struct gl_shared_state     GLuint TextureStateStamp;	        /**< state notification for shared tex */     /*@}*/ +   /** Default buffer object for vertex arrays that aren't in VBOs */ +   struct gl_buffer_object *NullBufferObj;     /**      * \name Vertex/fragment programs diff --git a/src/mesa/main/pixel.c b/src/mesa/main/pixel.c index 57ae9c721a..d9f3e476e8 100644 --- a/src/mesa/main/pixel.c +++ b/src/mesa/main/pixel.c @@ -170,7 +170,7 @@ _mesa_PixelMapfv( GLenum map, GLsizei mapsize, const GLfloat *values )           return;        }        /* restore */ -      ctx->DefaultPacking.BufferObj = ctx->Array.NullBufferObj; +      ctx->DefaultPacking.BufferObj = ctx->Shared->NullBufferObj;        buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_UNPACK_BUFFER_EXT,                                                GL_READ_ONLY_ARB,                                                ctx->Unpack.BufferObj); @@ -229,7 +229,7 @@ _mesa_PixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values )           return;        }        /* restore */ -      ctx->DefaultPacking.BufferObj = ctx->Array.NullBufferObj; +      ctx->DefaultPacking.BufferObj = ctx->Shared->NullBufferObj;        buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_UNPACK_BUFFER_EXT,                                                GL_READ_ONLY_ARB,                                                ctx->Unpack.BufferObj); @@ -303,7 +303,7 @@ _mesa_PixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values )           return;        }        /* restore */ -      ctx->DefaultPacking.BufferObj = ctx->Array.NullBufferObj; +      ctx->DefaultPacking.BufferObj = ctx->Shared->NullBufferObj;        buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_UNPACK_BUFFER_EXT,                                                GL_READ_ONLY_ARB,                                                ctx->Unpack.BufferObj); @@ -371,7 +371,7 @@ _mesa_GetPixelMapfv( GLenum map, GLfloat *values )           return;        }        /* restore */ -      ctx->DefaultPacking.BufferObj = ctx->Array.NullBufferObj; +      ctx->DefaultPacking.BufferObj = ctx->Shared->NullBufferObj;        buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,                                                GL_WRITE_ONLY_ARB,                                                ctx->Pack.BufferObj); @@ -432,7 +432,7 @@ _mesa_GetPixelMapuiv( GLenum map, GLuint *values )           return;        }        /* restore */ -      ctx->DefaultPacking.BufferObj = ctx->Array.NullBufferObj; +      ctx->DefaultPacking.BufferObj = ctx->Shared->NullBufferObj;        buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,                                                GL_WRITE_ONLY_ARB,                                                ctx->Pack.BufferObj); @@ -494,7 +494,7 @@ _mesa_GetPixelMapusv( GLenum map, GLushort *values )           return;        }        /* restore */ -      ctx->DefaultPacking.BufferObj = ctx->Array.NullBufferObj; +      ctx->DefaultPacking.BufferObj = ctx->Shared->NullBufferObj;        buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,                                                GL_WRITE_ONLY_ARB,                                                ctx->Pack.BufferObj); diff --git a/src/mesa/main/pixelstore.c b/src/mesa/main/pixelstore.c index ff1a6344cc..6a641f83f2 100644 --- a/src/mesa/main/pixelstore.c +++ b/src/mesa/main/pixelstore.c @@ -245,7 +245,8 @@ _mesa_init_pixelstore( GLcontext *ctx )     ctx->Pack.ClientStorage = GL_FALSE;     ctx->Pack.Invert = GL_FALSE;  #if FEATURE_EXT_pixel_buffer_object -   ctx->Pack.BufferObj = ctx->Array.NullBufferObj; +   _mesa_reference_buffer_object(ctx, &ctx->Pack.BufferObj, +                                 ctx->Shared->NullBufferObj);  #endif     ctx->Unpack.Alignment = 4;     ctx->Unpack.RowLength = 0; @@ -258,7 +259,8 @@ _mesa_init_pixelstore( GLcontext *ctx )     ctx->Unpack.ClientStorage = GL_FALSE;     ctx->Unpack.Invert = GL_FALSE;  #if FEATURE_EXT_pixel_buffer_object -   ctx->Unpack.BufferObj = ctx->Array.NullBufferObj; +   _mesa_reference_buffer_object(ctx, &ctx->Unpack.BufferObj, +                                 ctx->Shared->NullBufferObj);  #endif     /* @@ -278,6 +280,7 @@ _mesa_init_pixelstore( GLcontext *ctx )     ctx->DefaultPacking.ClientStorage = GL_FALSE;     ctx->DefaultPacking.Invert = GL_FALSE;  #if FEATURE_EXT_pixel_buffer_object -   ctx->DefaultPacking.BufferObj = ctx->Array.NullBufferObj; +   _mesa_reference_buffer_object(ctx, &ctx->DefaultPacking.BufferObj, +                                 ctx->Shared->NullBufferObj);  #endif  } diff --git a/src/mesa/main/shared.c b/src/mesa/main/shared.c index ae8dd2a836..759883743d 100644 --- a/src/mesa/main/shared.c +++ b/src/mesa/main/shared.c @@ -33,6 +33,7 @@  #include "mtypes.h"  #include "hash.h"  #include "arrayobj.h" +#include "bufferobj.h"  #include "shared.h"  #include "shader/program.h"  #include "shader/shader_api.h" @@ -92,6 +93,13 @@ _mesa_alloc_shared_state(GLcontext *ctx)     shared->BufferObjects = _mesa_NewHashTable();  #endif +   /* Allocate the default buffer object and set refcount so high that +    * it never gets deleted. +    * XXX with recent/improved refcounting this may not longer be needed. +    */ +   shared->NullBufferObj = _mesa_new_buffer_object(ctx, 0, 0); +   shared->NullBufferObj->RefCount = 1000; +     shared->ArrayObjects = _mesa_NewHashTable();     /* Create default texture objects */ @@ -341,6 +349,10 @@ _mesa_free_shared_state(GLcontext *ctx, struct gl_shared_state *shared)     _mesa_DeleteHashTable(shared->RenderBuffers);  #endif +#if FEATURE_ARB_vertex_buffer_object +   _mesa_delete_buffer_object(ctx, shared->NullBufferObj); +#endif +     /*      * Free texture objects (after FBOs since some textures might have      * been bound to FBOs). diff --git a/src/mesa/swrast/s_imaging.c b/src/mesa/swrast/s_imaging.c index d6be3aa022..3578b713f6 100644 --- a/src/mesa/swrast/s_imaging.c +++ b/src/mesa/swrast/s_imaging.c @@ -60,7 +60,7 @@ _swrast_CopyColorTable( GLcontext *ctx,     /* save PBO binding */     bufferSave = ctx->Unpack.BufferObj; -   ctx->Unpack.BufferObj = ctx->Array.NullBufferObj; +   ctx->Unpack.BufferObj = ctx->Shared->NullBufferObj;     _mesa_ColorTable(target, internalformat, width, GL_RGBA, CHAN_TYPE, data); @@ -94,7 +94,7 @@ _swrast_CopyColorSubTable( GLcontext *ctx,GLenum target, GLsizei start,     /* save PBO binding */     bufferSave = ctx->Unpack.BufferObj; -   ctx->Unpack.BufferObj = ctx->Array.NullBufferObj; +   ctx->Unpack.BufferObj = ctx->Shared->NullBufferObj;     _mesa_ColorSubTable(target, start, width, GL_RGBA, CHAN_TYPE, data); @@ -126,7 +126,7 @@ _swrast_CopyConvolutionFilter1D(GLcontext *ctx, GLenum target,     /* save PBO binding */     bufferSave = ctx->Unpack.BufferObj; -   ctx->Unpack.BufferObj = ctx->Array.NullBufferObj; +   ctx->Unpack.BufferObj = ctx->Shared->NullBufferObj;     /* store as convolution filter */     _mesa_ConvolutionFilter1D(target, internalFormat, width, @@ -178,12 +178,12 @@ _swrast_CopyConvolutionFilter2D(GLcontext *ctx, GLenum target,     ctx->Unpack.SkipImages = 0;     ctx->Unpack.SwapBytes = GL_FALSE;     ctx->Unpack.LsbFirst = GL_FALSE; -   ctx->Unpack.BufferObj = ctx->Array.NullBufferObj; +   ctx->Unpack.BufferObj = ctx->Shared->NullBufferObj;     ctx->NewState |= _NEW_PACKUNPACK;     /* save PBO binding */     bufferSave = ctx->Unpack.BufferObj; -   ctx->Unpack.BufferObj = ctx->Array.NullBufferObj; +   ctx->Unpack.BufferObj = ctx->Shared->NullBufferObj;     _mesa_ConvolutionFilter2D(target, internalFormat, width, height,                               GL_RGBA, CHAN_TYPE, rgba); diff --git a/src/mesa/vbo/vbo_context.c b/src/mesa/vbo/vbo_context.c index ca8190fd05..f193a4bf1e 100644 --- a/src/mesa/vbo/vbo_context.c +++ b/src/mesa/vbo/vbo_context.c @@ -28,6 +28,7 @@  #include "main/imports.h"  #include "main/mtypes.h"  #include "main/api_arrayelt.h" +#include "main/bufferobj.h"  #include "math/m_eval.h"  #include "vbo.h"  #include "vbo_context.h" @@ -81,7 +82,8 @@ static void init_legacy_currval(GLcontext *ctx)        cl->Type = GL_FLOAT;        cl->Format = GL_RGBA;        cl->Ptr = (const void *)ctx->Current.Attrib[i]; -      cl->BufferObj = ctx->Array.NullBufferObj; +      _mesa_reference_buffer_object(ctx, &cl->BufferObj, +                                    ctx->Shared->NullBufferObj);     }  } @@ -106,7 +108,8 @@ static void init_generic_currval(GLcontext *ctx)        cl->Stride = 0;        cl->StrideB = 0;        cl->Enabled = 1; -      cl->BufferObj = ctx->Array.NullBufferObj; +      _mesa_reference_buffer_object(ctx, &cl->BufferObj, +                                    ctx->Shared->NullBufferObj);     }  } @@ -150,7 +153,7 @@ static void init_mat_currval(GLcontext *ctx)        cl->Stride = 0;        cl->StrideB = 0;        cl->Enabled = 1; -      cl->BufferObj = ctx->Array.NullBufferObj; +      cl->BufferObj = ctx->Shared->NullBufferObj;     }  } diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c index 5d35ec9c11..6871ee5cab 100644 --- a/src/mesa/vbo/vbo_exec_api.c +++ b/src/mesa/vbo/vbo_exec_api.c @@ -671,7 +671,7 @@ void vbo_use_buffer_objects(GLcontext *ctx)     GLsizei size = VBO_VERT_BUFFER_SIZE;     /* Make sure this func is only used once */ -   assert(exec->vtx.bufferobj == ctx->Array.NullBufferObj); +   assert(exec->vtx.bufferobj == ctx->Shared->NullBufferObj);     if (exec->vtx.buffer_map) {        _mesa_align_free(exec->vtx.buffer_map);        exec->vtx.buffer_map = NULL; @@ -697,7 +697,7 @@ void vbo_exec_vtx_init( struct vbo_exec_context *exec )      */     _mesa_reference_buffer_object(ctx,                                   &exec->vtx.bufferobj, -                                 ctx->Array.NullBufferObj); +                                 ctx->Shared->NullBufferObj);     ASSERT(!exec->vtx.buffer_map);     exec->vtx.buffer_map = (GLfloat *)ALIGN_MALLOC(VBO_VERT_BUFFER_SIZE, 64); diff --git a/src/mesa/vbo/vbo_rebase.c b/src/mesa/vbo/vbo_rebase.c index dae778e741..ea87dede64 100644 --- a/src/mesa/vbo/vbo_rebase.c +++ b/src/mesa/vbo/vbo_rebase.c @@ -161,7 +161,7 @@ void vbo_rebase_prims( GLcontext *ctx,  				 GL_ELEMENT_ARRAY_BUFFER,  				 ib->obj); -      tmp_ib.obj = ctx->Array.NullBufferObj; +      tmp_ib.obj = ctx->Shared->NullBufferObj;        tmp_ib.ptr = tmp_indices;        tmp_ib.count = ib->count;        tmp_ib.type = ib->type; diff --git a/src/mesa/vbo/vbo_split_copy.c b/src/mesa/vbo/vbo_split_copy.c index 56a9fafac4..2f6a1998ea 100644 --- a/src/mesa/vbo/vbo_split_copy.c +++ b/src/mesa/vbo/vbo_split_copy.c @@ -459,7 +459,7 @@ replay_init( struct copy_context *copy )        dst->Ptr = copy->dstbuf + offset;        dst->Enabled = GL_TRUE;        dst->Normalized = src->Normalized;  -      dst->BufferObj = ctx->Array.NullBufferObj; +      dst->BufferObj = ctx->Shared->NullBufferObj;        dst->_MaxElement = copy->dstbuf_size; /* may be less! */        offset += copy->varying[i].size; @@ -479,7 +479,7 @@ replay_init( struct copy_context *copy )      */     copy->dstib.count = 0;	/* duplicates dstelt_nr */     copy->dstib.type = GL_UNSIGNED_INT; -   copy->dstib.obj = ctx->Array.NullBufferObj; +   copy->dstib.obj = ctx->Shared->NullBufferObj;     copy->dstib.ptr = copy->dstelt;  } diff --git a/src/mesa/vbo/vbo_split_inplace.c b/src/mesa/vbo/vbo_split_inplace.c index fbc856e93b..3ed6b34fbf 100644 --- a/src/mesa/vbo/vbo_split_inplace.c +++ b/src/mesa/vbo/vbo_split_inplace.c @@ -221,7 +221,7 @@ static void split_prims( struct split_context *split)  	 ib.count = count;  	 ib.type = GL_UNSIGNED_INT; -	 ib.obj = split->ctx->Array.NullBufferObj; +	 ib.obj = split->ctx->Shared->NullBufferObj;  	 ib.ptr = elts;  	 tmpprim = *prim;  | 
