[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 11:13:52 PST 2015
Oops, wrong link. Here it is:
http://cgit.freedesktop.org/~ldeks/mesa/commit/?h=adsa-textures&id=c2b179fe7d50922d8dc01dbf833885e3f4615277
.
Laura
On Tue, Jan 6, 2015 at 10:41 AM, Laura Ekstrand <laura at jlekstrand.net>
wrote:
> 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/4e3d637c/attachment.html>
More information about the mesa-dev
mailing list