diff options
-rw-r--r-- | src/mesa/main/texobj.c | 47 |
1 files 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 <first> + <count> - * 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 <first> + <count> + * 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. * |