These problems have all been corrected except one: In glGenTextures it is create_textures(ctx, 0 ... rather than GL_NONE because the original glGenTextures had the [now removed] line:
- GLenum target = 0; So I passed in 0 to preserve the original functionality. On Wed, Dec 17, 2014 at 6:20 AM, Fredrik Höglund <fred...@kde.org> wrote: > On Tuesday 16 December 2014, Laura Ekstrand wrote: > > --- > > src/mapi/glapi/gen/ARB_direct_state_access.xml | 8 ++ > > src/mesa/main/texobj.c | 109 > +++++++++++++++++++------ > > src/mesa/main/texobj.h | 2 + > > 3 files changed, 92 insertions(+), 27 deletions(-) > > > > diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml > b/src/mapi/glapi/gen/ARB_direct_state_access.xml > > index fcec608..9f2eacb 100644 > > --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml > > +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml > > @@ -7,5 +7,13 @@ > > <enum name="QUERY_TARGET" value="0x82EA"/> > > <enum name="TEXTURE_BINDING" value="0x82EB"/> > > > > + <!-- Texture object functions --> > > + > > + <function name="CreateTextures" offset="assign"> > > + <param name="target" type="GLenum" /> > > + <param name="n" type="GLsizei" /> > > + <param name="textures" type="GLuint *" /> > > + </function> > > + > > </category> > > </OpenGLAPI> > > diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c > > index 6215fe3..26d07ee 100644 > > --- a/src/mesa/main/texobj.c > > +++ b/src/mesa/main/texobj.c > > @@ -1100,38 +1100,23 @@ invalidate_tex_image_error_check(struct > gl_context *ctx, GLuint texture, > > return t; > > } > > > > -/*@}*/ > > - > > - > > > -/***********************************************************************/ > > -/** \name API functions */ > > -/*@{*/ > > - > > - > > -/** > > - * Generate texture names. > > - * > > - * \param n number of texture names to be generated. > > - * \param textures an array in which will hold the generated texture > names. > > - * > > - * \sa glGenTextures(). > > - * > > - * Calls _mesa_HashFindFreeKeyBlock() to find a block of free texture > > - * IDs which are stored in \p textures. Corresponding empty texture > > - * objects are also generated. > > - */ > > -void GLAPIENTRY > > -_mesa_GenTextures( GLsizei n, GLuint *textures ) > > +/* Helper function for glCreateTextures and glGenTextures. Need this > because > > + * glCreateTextures should throw errors if target = 0. This is not > exposed to > > + * the rest of Mesa to encourage Mesa internals to use nameless > textures, > > + * which do not require expensive hash lookups. */ > > +static void > > +create_textures( struct gl_context *ctx, GLenum target, > > + GLsizei n, GLuint *textures, bool dsa ) > > { > > - GET_CURRENT_CONTEXT(ctx); > > GLuint first; > > GLint i; > > + const char *func = dsa ? "Create" : "Gen"; > > > > if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE)) > > - _mesa_debug(ctx, "glGenTextures %d\n", n); > > + _mesa_debug(ctx, "gl%sTextures %d\n", func, n); > > > > if (n < 0) { > > - _mesa_error( ctx, GL_INVALID_VALUE, "glGenTextures" ); > > + _mesa_error( ctx, GL_INVALID_VALUE, "gl%sTextures", func ); > > return; > > } > > > > @@ -1148,15 +1133,28 @@ _mesa_GenTextures( GLsizei n, GLuint *textures ) > > /* Allocate new, empty texture objects */ > > for (i = 0; i < n; i++) { > > struct gl_texture_object *texObj; > > + GLint targetIndex; > > GLuint name = first + i; > > - GLenum target = 0; > > texObj = ctx->Driver.NewTextureObject(ctx, name, target); > > if (!texObj) { > > mtx_unlock(&ctx->Shared->Mutex); > > - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenTextures"); > > + _mesa_error(ctx, GL_OUT_OF_MEMORY, "gl%sTextures", func); > > return; > > } > > > > + /* Initialize the target index if target is non-zero. */ > > + if (target != 0) > > + { > > + targetIndex = _mesa_tex_target_to_index(ctx, texObj->Target); > > + if (targetIndex < 0) { /* Bad Target */ > > + mtx_unlock(&ctx->Shared->Mutex); > > + _mesa_error(ctx, GL_INVALID_ENUM, "gl%sTextures(target)", > func); > > I suggest including the value passed in the target parameter in the error > message. The same goes for other error messages introduced this series. > > > + return; > > + } > > + assert(targetIndex < NUM_TEXTURE_TARGETS); > > + texObj->TargetIndex = targetIndex; > > + } > > + > > /* insert into hash table */ > > _mesa_HashInsert(ctx->Shared->TexObjects, texObj->Name, texObj); > > > > @@ -1166,6 +1164,63 @@ _mesa_GenTextures( GLsizei n, GLuint *textures ) > > mtx_unlock(&ctx->Shared->Mutex); > > } > > > > +/*@}*/ > > + > > + > > > +/***********************************************************************/ > > +/** \name API functions */ > > +/*@{*/ > > + > > + > > +/** > > + * Generate texture names. > > + * > > + * \param n number of texture names to be generated. > > + * \param textures an array in which will hold the generated texture > names. > > + * > > + * \sa glGenTextures(), glCreateTextures(). > > + * > > + * Calls _mesa_HashFindFreeKeyBlock() to find a block of free texture > > + * IDs which are stored in \p textures. Corresponding empty texture > > + * objects are also generated. > > + */ > > +void GLAPIENTRY > > +_mesa_GenTextures( GLsizei n, GLuint *textures ) > > +{ > > + GET_CURRENT_CONTEXT(ctx); > > + create_textures(ctx, 0, n, textures, false); > > +} > > + > > +/** > > + * Create texture objects. > > + * > > + * \param target the texture target for each name to be generated. > > + * \param n number of texture names to be generated. > > + * \param textures an array in which will hold the generated texture > names. > > + * > > + * \sa glCreateTextures(), glGenTextures(). > > + * > > + * Calls _mesa_HashFindFreeKeyBlock() to find a block of free texture > > + * IDs which are stored in \p textures. Corresponding empty texture > > + * objects are also generated. > > + */ > > +void GLAPIENTRY > > +_mesa_CreateTextures( GLenum target, GLsizei n, GLuint *textures ) > > +{ > > + GLint targetIndex; > > + GET_CURRENT_CONTEXT(ctx); > > + > > + /* The 4.5 core profile spec (20141030) doesn't specify what > > + * glCreateTextures should do with invalid targets, which was > probably an > > + * oversight. This conforms to the spec for glBindTexture. */ > > + targetIndex = _mesa_tex_target_to_index(ctx, target); > > + if (targetIndex < 0) { > > + _mesa_error(ctx, GL_INVALID_ENUM, "glCreateTextures(target)"); > > + return; > > + } > > The target is error checked both here and in create_textures(). > > > + create_textures(ctx, target, n, textures, true); > > +} > > > > /** > > * Check if the given texture object is bound to the current draw or > > diff --git a/src/mesa/main/texobj.h b/src/mesa/main/texobj.h > > index 90cb51a..b957ac5 100644 > > --- a/src/mesa/main/texobj.h > > +++ b/src/mesa/main/texobj.h > > @@ -200,6 +200,8 @@ _mesa_lock_context_textures( struct gl_context *ctx > ); > > extern void GLAPIENTRY > > _mesa_GenTextures( GLsizei n, GLuint *textures ); > > > > +extern void GLAPIENTRY > > +_mesa_CreateTextures( GLenum target, GLsizei n, GLuint *textures ); > > > > extern void GLAPIENTRY > > _mesa_DeleteTextures( GLsizei n, const GLuint *textures ); > > > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev