From 90f691b5be6ea8ac2d0d06e422a31519305059a0 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 21 Jul 2017 11:03:09 +0200 Subject: [PATCH] mesa: add bind_textures() helper Signed-off-by: Samuel Pitoiset Reviewed-by: Timothy Arceri --- src/mesa/main/texobj.c | 47 +++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index bf48d7595da..aa3e4190f52 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -1805,25 +1805,11 @@ _mesa_BindTextureUnit(GLuint unit, GLuint texture) /** * OpenGL 4.4 / GL_ARB_multi_bind glBindTextures(). */ -void GLAPIENTRY -_mesa_BindTextures(GLuint first, GLsizei count, const GLuint *textures) +static ALWAYS_INLINE void +bind_textures(struct gl_context *ctx, GLuint first, GLsizei count, + const GLuint *textures, bool no_error) { - GET_CURRENT_CONTEXT(ctx); - GLint i; - - /* The ARB_multi_bind spec says: - * - * "An INVALID_OPERATION error is generated if + - * is greater than the number of texture image units supported - * by the implementation." - */ - if (first + count > ctx->Const.MaxCombinedTextureImageUnits) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBindTextures(first=%u + count=%d > the value of " - "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS=%u)", - first, count, ctx->Const.MaxCombinedTextureImageUnits); - return; - } + GLsizei i; if (textures) { /* Note that the error semantics for multi-bind commands differ from @@ -1860,7 +1846,7 @@ _mesa_BindTextures(GLuint first, GLsizei count, const GLuint *textures) if (texObj && texObj->Target != 0) { bind_texture_object(ctx, first + i, texObj); - } else { + } else if (!no_error) { /* The ARB_multi_bind spec says: * * "An INVALID_OPERATION error is generated if any value @@ -1886,6 +1872,29 @@ _mesa_BindTextures(GLuint first, GLsizei count, const GLuint *textures) } +void GLAPIENTRY +_mesa_BindTextures(GLuint first, GLsizei count, const GLuint *textures) +{ + GET_CURRENT_CONTEXT(ctx); + + /* The ARB_multi_bind spec says: + * + * "An INVALID_OPERATION error is generated if + + * is greater than the number of texture image units supported + * by the implementation." + */ + if (first + count > ctx->Const.MaxCombinedTextureImageUnits) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBindTextures(first=%u + count=%d > the value of " + "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS=%u)", + first, count, ctx->Const.MaxCombinedTextureImageUnits); + return; + } + + bind_textures(ctx, first, count, textures, false); +} + + /** * Set texture priorities. * -- 2.30.2