[Mesa-dev] [PATCH 28/41] main: Nameless texture creation and deletion. Does not affect normal creation and deletion paths.

Laura Ekstrand laura at jlekstrand.net
Tue Jan 6 10:41:44 PST 2015


I taken your recommendation:
http://cgit.freedesktop.org/~ldeks/mesa/commit/?h=adsa-textures&id=c984a04159fa1febf6ec4a5e900961f88c06e84c

Thanks.

Laura

On Wed, Dec 31, 2014 at 10:45 AM, Anuj Phogat <anuj.phogat at gmail.com> wrote:

> On Mon, Dec 15, 2014 at 5:22 PM, Laura Ekstrand <laura at jlekstrand.net>
> wrote:
> > In implementing ARB_DIRECT_STATE_ACCESS functions, it is often necessary
> to
> > abstract the functionality of a traditional GL API function into a
> backend
> > that both the traditional and dsa API functions can share.  For instance,
> > glTexParameteri and glTextureParameteri both call
> _mesa_texture_parameteri,
> > which takes a context object and a texture object as arguments.
> >
> > The existance of such backend functions provides the opportunity for
> > driver internals (such as meta) to pass around the actual texture object
> > rather than its ID or target, saving on texture object storage and
> look-up
> > overhead.
> >
> > This patch provides nameless texture creation and deletion for meta.
> This
> > will be used in an upcoming refactor of meta.
> > ---
> >  src/mesa/main/texobj.c | 60
> ++++++++++++++++++++++++++++++++++++++++++++++++++
> >  src/mesa/main/texobj.h |  7 ++++++
> >  2 files changed, 67 insertions(+)
> >
> > diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
> > index eb16f47..01088e3 100644
> > --- a/src/mesa/main/texobj.c
> > +++ b/src/mesa/main/texobj.c
> > @@ -1102,6 +1102,27 @@ invalidate_tex_image_error_check(struct
> gl_context *ctx, GLuint texture,
> >     return t;
> >  }
> >
> > +/**
> > + * Wrapper for the driver function. Need this because
> _mesa_new_texture_object
> > + * permits a target of 0 and does not initialize targetIndex.
> > + */
> > +struct gl_texture_object *
> > +_mesa_create_nameless_texture( struct gl_context *ctx, GLenum target )
> > +{
> > +      struct gl_texture_object *texObj = NULL;
> > +      GLint targetIndex;
> > +
> > +      if (target == 0)
> > +         return texObj;
> > +
> > +      texObj = ctx->Driver.NewTextureObject(ctx, 0, target);
> > +      targetIndex = _mesa_tex_target_to_index(ctx, texObj->Target);
> > +      assert(targetIndex < NUM_TEXTURE_TARGETS);
> > +      texObj->TargetIndex = targetIndex;
> > +
> > +      return texObj;
> > +}
> > +
> >  /* Helper function for glCreateTextures and glGenTextures. Need this
> because
> >   * glCreateTextures should throw errors if target = 0. This is not
> exposed to
> >   * the rest of Mesa to encourage Mesa internals to use nameless
> textures,
> > @@ -1405,6 +1426,45 @@ _mesa_DeleteTextures( GLsizei n, const GLuint
> *textures)
> >     }
> >  }
> >
> > +/**
> > + * This deletes a texObj without altering the hash table.
> > + */
> > +void
> > +_mesa_delete_nameless_texture( struct gl_context *ctx,
> > +                               struct gl_texture_object *texObj )
> > +{
> > +   FLUSH_VERTICES(ctx, 0);
> > +   if (texObj) {
> might use:
> if (!texObj)
>    return;
> > +      _mesa_lock_texture(ctx, texObj);
> > +
> > +      /* Check if texture is bound to any framebuffer objects.
> > +       * If so, unbind.
> > +       * See section 4.4.2.3 of GL_EXT_framebuffer_object.
> > +       */
> > +      unbind_texobj_from_fbo(ctx, texObj);
> > +
> > +      /* Check if this texture is currently bound to any texture units.
> > +       * If so, unbind it.
> > +       */
> > +      unbind_texobj_from_texunits(ctx, texObj);
> > +
> > +      /* Check if this texture is currently bound to any shader
> > +       * image unit.  If so, unbind it.
> > +       * See section 3.9.X of GL_ARB_shader_image_load_store.
> > +       */
> > +      unbind_texobj_from_image_units(ctx, texObj);
> > +
> > +      _mesa_unlock_texture(ctx, texObj);
> > +
> > +      ctx->NewState |= _NEW_TEXTURE;
> > +
> > +      /* Unreference the texobj.  If refcount hits zero, the texture
> > +       * will be deleted.
> > +       */
> > +      _mesa_reference_texobj(&texObj, NULL);
> > +   }
> > +}
> > +
> >
> >  /**
> >   * Convert a GL texture target enum such as GL_TEXTURE_2D or
> GL_TEXTURE_3D
> > diff --git a/src/mesa/main/texobj.h b/src/mesa/main/texobj.h
> > index 34daebb..3a62d63 100644
> > --- a/src/mesa/main/texobj.h
> > +++ b/src/mesa/main/texobj.h
> > @@ -190,6 +190,13 @@ _mesa_unlock_context_textures( struct gl_context
> *ctx );
> >  extern void
> >  _mesa_lock_context_textures( struct gl_context *ctx );
> >
> > +extern struct gl_texture_object *
> > +_mesa_create_nameless_texture( struct gl_context *ctx, GLenum target );
> > +
> > +extern void
> > +_mesa_delete_nameless_texture( struct gl_context *ctx,
> > +                               struct gl_texture_object *texObj );
> > +
> >  extern void
> >  _mesa_bind_texture_unit( struct gl_context *ctx,
> >                           GLuint unit,
> > --
> > 2.1.0
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150106/93ca5567/attachment.html>


More information about the mesa-dev mailing list