[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