[Mesa-dev] [PATCH] mesa: Set default access flags based on the run-time API

Brian Paul brian.e.paul at gmail.com
Tue Jan 17 18:05:31 PST 2012


On Tue, Jan 17, 2012 at 5:29 PM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> The default access flags for OpenGL ES (via GL_OES_map_buffer) and
> desktop OpenGL are different.  The code previously tried to handle
> this, but the decision was made at compile time.  Since the same
> driver binary can be used for both OpenGL ES and desktop OpenGL, the
> decision must be made at run-time.
>
> This should fix bug #44433.  It appears that the test case does
> various map and unmap operations and inspects the state of the buffer
> object around each.  When it sees that GL_BUFFER_ACCESS does not match
> its expectations, it fails.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44433
> ---
>  src/mesa/drivers/dri/intel/intel_buffer_objects.c  |    2 +-
>  src/mesa/drivers/dri/nouveau/nouveau_bufferobj.c   |    2 +-
>  .../drivers/dri/radeon/radeon_buffer_objects.c     |    2 +-
>  src/mesa/main/bufferobj.c                          |   21 +++++++++----------
>  src/mesa/main/bufferobj.h                          |    3 +-
>  src/mesa/state_tracker/st_cb_bufferobjects.c       |    2 +-
>  6 files changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/intel/intel_buffer_objects.c b/src/mesa/drivers/dri/intel/intel_buffer_objects.c
> index 03dd179..600f01c 100644
> --- a/src/mesa/drivers/dri/intel/intel_buffer_objects.c
> +++ b/src/mesa/drivers/dri/intel/intel_buffer_objects.c
> @@ -72,7 +72,7 @@ intel_bufferobj_alloc(struct gl_context * ctx, GLuint name, GLenum target)
>  {
>    struct intel_buffer_object *obj = CALLOC_STRUCT(intel_buffer_object);
>
> -   _mesa_initialize_buffer_object(&obj->Base, name, target);
> +   _mesa_initialize_buffer_object(ctx, &obj->Base, name, target);
>
>    obj->buffer = NULL;
>
> diff --git a/src/mesa/drivers/dri/nouveau/nouveau_bufferobj.c b/src/mesa/drivers/dri/nouveau/nouveau_bufferobj.c
> index dc5b152..f7ad895 100644
> --- a/src/mesa/drivers/dri/nouveau/nouveau_bufferobj.c
> +++ b/src/mesa/drivers/dri/nouveau/nouveau_bufferobj.c
> @@ -56,7 +56,7 @@ nouveau_bufferobj_new(struct gl_context *ctx, GLuint buffer, GLenum target)
>        if (!nbo)
>                return NULL;
>
> -       _mesa_initialize_buffer_object(&nbo->base, buffer, target);
> +       _mesa_initialize_buffer_object(ctx, &nbo->base, buffer, target);
>
>        return &nbo->base;
>  }
> diff --git a/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c b/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c
> index 7b59c03..5abc52b 100644
> --- a/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c
> +++ b/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c
> @@ -46,7 +46,7 @@ radeonNewBufferObject(struct gl_context * ctx,
>  {
>     struct radeon_buffer_object *obj = CALLOC_STRUCT(radeon_buffer_object);
>
> -    _mesa_initialize_buffer_object(&obj->Base, name, target);
> +    _mesa_initialize_buffer_object(ctx, &obj->Base, name, target);
>
>     obj->bo = NULL;
>
> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
> index 5f8071f..6ac2092 100644
> --- a/src/mesa/main/bufferobj.c
> +++ b/src/mesa/main/bufferobj.c
> @@ -49,11 +49,9 @@
>  /*#define BOUNDS_CHECK*/
>
>
> -#if FEATURE_OES_mapbuffer
> -#define DEFAULT_ACCESS GL_MAP_WRITE_BIT
> -#else
> -#define DEFAULT_ACCESS (GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)
> -#endif
> +#define DEFAULT_ACCESS(ctx) \
> +   (ctx->API == API_OPENGLES) \
> +   ? GL_MAP_WRITE_BIT : (GL_MAP_READ_BIT | GL_MAP_WRITE_BIT);

How about changing the macro to an inline function?

-Brian


More information about the mesa-dev mailing list