On Wednesday 22 January 2014, Brian Paul wrote: > On 01/21/2014 03:35 PM, Fredrik Höglund wrote: > > This will be used by glBindTextures() so we don't have to look it up > > for each texture. > > --- > > src/mesa/main/mtypes.h | 1 + > > src/mesa/main/texobj.c | 2 ++ > > 2 files changed, 3 insertions(+) > > > > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > > index c396609..2fe47c4 100644 > > --- a/src/mesa/main/mtypes.h > > +++ b/src/mesa/main/mtypes.h > > @@ -1194,6 +1194,7 @@ struct gl_texture_object > > GLuint Name; /**< the user-visible texture object ID */ > > GLchar *Label; /**< GL_KHR_debug */ > > GLenum Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */ > > + GLuint TargetIndex; /**< The gl_texture_unit::CurrentTex index > > */ > > Could this be "gl_texture_index TargetIndex;"?
It can indeed. I'll change it. > > > > struct gl_sampler_object Sampler; > > > > diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c > > index 3c64c437..4d97275 100644 > > --- a/src/mesa/main/texobj.c > > +++ b/src/mesa/main/texobj.c > > @@ -259,6 +259,7 @@ _mesa_copy_texture_object( struct gl_texture_object > > *dest, > > const struct gl_texture_object *src ) > > { > > dest->Target = src->Target; > > + dest->TargetIndex = src->TargetIndex; > > dest->Name = src->Name; > > dest->Priority = src->Priority; > > dest->Sampler.BorderColor.f[0] = src->Sampler.BorderColor.f[0]; > > @@ -1318,6 +1319,7 @@ _mesa_BindTexture( GLenum target, GLuint texName ) > > _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); > > } > > newTexObj->Target = target; > > + newTexObj->TargetIndex = targetIndex; > > } > > > > assert(valid_texture_object(newTexObj)); > > > > > So the memset() in _mesa_initialize_texture_object() would implicitly > set TargetIndex = TEXTURE_2D_MULTISAMPLE_INDEX (zero). Is that going to > cause any trouble? That's a good question. TargetIndex is only used in _mesa_BindTextures() and unbind_texobj_from_texunits(). _mesa_BindTextures() checks if Target is valid before it uses TargetIndex. If unbind_texobj_from_texunits() is called with a texture that has never been used, it doesn't matter that the index is zero, because the texture won't be bound to any unit anyway. It should probably exit early if the texture doesn't have a target though. So to the best of my knowledge it shouldn't be a problem. But maybe it should be documented somewhere that TargetIndex is only valid when Target is valid. Fredrik _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev