[Mesa-dev] [PATCH 3/3] mesa, meta: move gl_texture_object::TargetIndex initializations

Anuj Phogat anuj.phogat at gmail.com
Thu Oct 8 12:14:39 PDT 2015


On Thu, Oct 8, 2015 at 7:20 AM, Brian Paul <brianp at vmware.com> 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.
>
> v2: also update the meta_copy_image code.  In make_view() the
> view_tex_obj->Target field was set, but not the TargetIndex field.
> Also, remove a second, redundant assignment to view_tex_obj->Target.
> Add sanity check assertions too.
> ---
>  src/mesa/drivers/common/meta_copy_image.c |  5 ++++-
>  src/mesa/main/shared.c                    |  5 +++++
>  src/mesa/main/texobj.c                    | 27 ++++++++++++++++++---------
>  src/mesa/main/textureview.c               |  2 ++
>  4 files changed, 29 insertions(+), 10 deletions(-)
>
> diff --git a/src/mesa/drivers/common/meta_copy_image.c b/src/mesa/drivers/common/meta_copy_image.c
> index 33490ee..04b9caf 100644
> --- a/src/mesa/drivers/common/meta_copy_image.c
> +++ b/src/mesa/drivers/common/meta_copy_image.c
> @@ -108,7 +108,11 @@ make_view(struct gl_context *ctx, struct gl_texture_image *tex_image,
>        return false;
>     }
>
> +   assert(tex_obj->Target != 0);
> +   assert(tex_obj->TargetIndex < NUM_TEXTURE_TARGETS);
> +
>     view_tex_obj->Target = tex_obj->Target;
> +   view_tex_obj->TargetIndex = tex_obj->TargetIndex;
>
>     *view_tex_image = _mesa_get_tex_image(ctx, view_tex_obj, tex_obj->Target, 0);
>
> @@ -129,7 +133,6 @@ make_view(struct gl_context *ctx, struct gl_texture_image *tex_image,
>     view_tex_obj->NumLayers = tex_obj->NumLayers;
>     view_tex_obj->Immutable = tex_obj->Immutable;
>     view_tex_obj->ImmutableLevels = tex_obj->ImmutableLevels;
> -   view_tex_obj->Target = tex_obj->Target;
>
>     if (ctx->Driver.TextureView != NULL &&
>         !ctx->Driver.TextureView(ctx, view_tex_obj, tex_obj)) {
> 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;
> -      }
> -
>        /* 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)) {
> --
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>


More information about the mesa-dev mailing list