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

Ian Romanick idr at freedesktop.org
Tue Oct 6 13:01:06 PDT 2015


On 10/06/2015 01:00 PM, Ian Romanick wrote:
> 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.

Never mind.  It is still passed to NewTextureObject.

>>        /* 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