mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 04:58:05 +02:00
mesa,meta: move gl_texture_object::TargetIndex initializations
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. Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com> Tested-by: Mark Janes <mark.a.janes@intel.com>
This commit is contained in:
parent
d61f492aba
commit
7d7dd18711
4 changed files with 29 additions and 10 deletions
|
|
@ -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)) {
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue