[Mesa-dev] [PATCH 3/3] mesa: move gl_texture_object::TargetIndex initializations
Ian Romanick
idr at freedesktop.org
Tue Oct 6 13:00:26 PDT 2015
On 10/05/2015 11:18 AM, Brian Paul wrote:
> Before, we were unconditionally assigning the TargetIndex field in
> _mesa_BindTexture(), even if it was already set properly. Now we
> initialize TargetIndex wherever we initialize the Target field, in
> _mesa_initialize_texture_object(), finish_texture_init(), etc.
> ---
> src/mesa/main/shared.c | 5 +++++
> src/mesa/main/texobj.c | 27 ++++++++++++++++++---------
> src/mesa/main/textureview.c | 2 ++
> 3 files changed, 25 insertions(+), 9 deletions(-)
>
> diff --git a/src/mesa/main/shared.c b/src/mesa/main/shared.c
> index 1acaf59..c37b31d 100644
> --- a/src/mesa/main/shared.c
> +++ b/src/mesa/main/shared.c
> @@ -107,6 +107,11 @@ _mesa_alloc_shared_state(struct gl_context *ctx)
> };
> STATIC_ASSERT(ARRAY_SIZE(targets) == NUM_TEXTURE_TARGETS);
> shared->DefaultTex[i] = ctx->Driver.NewTextureObject(ctx, 0, targets[i]);
> + /* Need to explicitly set/overwrite the TargetIndex field here since
> + * the call to _mesa_tex_target_to_index() in NewTextureObject() may
> + * fail if the texture target is not supported.
> + */
> + shared->DefaultTex[i]->TargetIndex = i;
> }
>
> /* sanity check */
> diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
> index 66eacf8..60c55ae 100644
> --- a/src/mesa/main/texobj.c
> +++ b/src/mesa/main/texobj.c
> @@ -286,6 +286,12 @@ _mesa_initialize_texture_object( struct gl_context *ctx,
> obj->RefCount = 1;
> obj->Name = name;
> obj->Target = target;
> + if (target != 0) {
> + obj->TargetIndex = _mesa_tex_target_to_index(ctx, target);
> + }
> + else {
> + obj->TargetIndex = NUM_TEXTURE_TARGETS; /* invalid/error value */
> + }
> obj->Priority = 1.0F;
> obj->BaseLevel = 0;
> obj->MaxLevel = 1000;
> @@ -340,6 +346,10 @@ finish_texture_init(struct gl_context *ctx, GLenum target,
> GLenum filter = GL_LINEAR;
> assert(obj->Target == 0);
>
> + obj->Target = target;
> + obj->TargetIndex = _mesa_tex_target_to_index(ctx, target);
> + assert(obj->TargetIndex < NUM_TEXTURE_TARGETS);
> +
> switch (target) {
> case GL_TEXTURE_2D_MULTISAMPLE:
> case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
> @@ -1200,7 +1210,6 @@ create_textures(struct gl_context *ctx, GLenum target,
> GLuint first;
> GLint i;
> const char *func = dsa ? "Create" : "Gen";
> - const GLint targetIndex = _mesa_tex_target_to_index(ctx, target);
>
> if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
> _mesa_debug(ctx, "gl%sTextures %d\n", func, n);
> @@ -1231,11 +1240,6 @@ create_textures(struct gl_context *ctx, GLenum target,
> return;
> }
>
> - /* Initialize the target index if target is non-zero. */
> - if (target != 0) {
> - texObj->TargetIndex = targetIndex;
> - }
> -
I think target is unused in this function now, so it should be removed
as a parameter.
> /* insert into hash table */
> _mesa_HashInsert(ctx->Shared->TexObjects, texObj->Name, texObj);
>
> @@ -1356,8 +1360,12 @@ unbind_texobj_from_texunits(struct gl_context *ctx,
> const gl_texture_index index = texObj->TargetIndex;
> GLuint u;
>
> - if (texObj->Target == 0)
> + if (texObj->Target == 0) {
> + /* texture was never bound */
> return;
> + }
> +
> + assert(index < NUM_TEXTURE_TARGETS);
>
> for (u = 0; u < ctx->Texture.NumCurrentTexUsed; u++) {
> struct gl_texture_unit *unit = &ctx->Texture.Unit[u];
> @@ -1725,10 +1733,11 @@ _mesa_BindTexture( GLenum target, GLuint texName )
> _mesa_HashInsert(ctx->Shared->TexObjects, texName, newTexObj);
> mtx_unlock(&ctx->Shared->Mutex);
> }
> - newTexObj->Target = target;
> - newTexObj->TargetIndex = targetIndex;
> }
>
> + assert(newTexObj->Target == target);
> + assert(newTexObj->TargetIndex == targetIndex);
> +
> bind_texture(ctx, ctx->Texture.CurrentUnit, newTexObj);
> }
>
> diff --git a/src/mesa/main/textureview.c b/src/mesa/main/textureview.c
> index 5a3282a..04b7d73 100644
> --- a/src/mesa/main/textureview.c
> +++ b/src/mesa/main/textureview.c
> @@ -681,6 +681,8 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture,
> texObj->Immutable = GL_TRUE;
> texObj->ImmutableLevels = origTexObj->ImmutableLevels;
> texObj->Target = target;
> + texObj->TargetIndex = _mesa_tex_target_to_index(ctx, target);
> + assert(texObj->TargetIndex < NUM_TEXTURE_TARGETS);
>
> if (ctx->Driver.TextureView != NULL &&
> !ctx->Driver.TextureView(ctx, texObj, origTexObj)) {
>
More information about the mesa-dev
mailing list