Module: Mesa Branch: internalformat_query_interaction Commit: cb856ce3bbdd3d73dce5f69422acc098cdabca0d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cb856ce3bbdd3d73dce5f69422acc098cdabca0d
Author: Chris Forbes <[email protected]> Date: Sun Mar 3 21:46:12 2013 +1300 mesa: use _mesa_check_sample_count() for multisample textures Extends _mesa_check_sample_count() to properly support the TEXTURE_2D_MULTISAMPLE and TEXTURE_2D_MULTISAMPLE_ARRAY targets, which have subtly different limits than renderbuffers. This resolves the remaining TODO in the implementation of TexImage*DMultisample. V2: - Don't introduce spurious block. - Do this in multisample.c instead. Signed-off-by: Chris Forbes <[email protected]> --- src/mesa/main/multisample.c | 18 ++++++++++++++++-- src/mesa/main/teximage.c | 34 +++++++--------------------------- 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/mesa/main/multisample.c b/src/mesa/main/multisample.c index 7e107bf..74ac3a7 100644 --- a/src/mesa/main/multisample.c +++ b/src/mesa/main/multisample.c @@ -137,13 +137,27 @@ _mesa_check_sample_count(struct gl_context *ctx, GLenum target, return samples > limit ? GL_INVALID_OPERATION : GL_NO_ERROR; } - /* If ARB_texture_multisample is supported, we have separate limits for - * integer formats. + /* If ARB_texture_multisample is supported, we have separate limits, which may be + * lower than MAX_SAMPLES: + * - for both renderbuffers and textures, integer formats use MAX_INTEGER_SAMPLES + * - for textures only, depth formats use MAX_DEPTH_TEXTURE_SAMPLES + * - for textures only, color formats use MAX_COLOR_TEXTURE_SAMPLES */ if (ctx->Extensions.ARB_texture_multisample) { if (_mesa_is_enum_format_integer(internalFormat)) return samples > ctx->Const.MaxIntegerSamples ? GL_INVALID_OPERATION : GL_NO_ERROR; + + if (target == GL_TEXTURE_2D_MULTISAMPLE || + target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY) { + + if (_mesa_is_depth_or_stencil_format(internalFormat)) + return samples > ctx->Const.MaxDepthTextureSamples + ? GL_INVALID_OPERATION : GL_NO_ERROR; + else + return samples > ctx->Const.MaxColorTextureSamples + ? GL_INVALID_OPERATION : GL_NO_ERROR; + } } /* No more specific limit is available, so just use MAX_SAMPLES */ diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 0dcf88a..73ae6ec 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -40,6 +40,7 @@ #include "imports.h" #include "macros.h" #include "mfeatures.h" +#include "multisample.h" #include "state.h" #include "texcompress.h" #include "texcompress_cpal.h" @@ -4196,6 +4197,7 @@ teximagemultisample(GLuint dims, GLenum target, GLsizei samples, struct gl_texture_image *texImage; GLboolean sizeOK, dimensionsOK; gl_format texFormat; + GLenum sample_count_error; GET_CURRENT_CONTEXT(ctx); @@ -4222,35 +4224,13 @@ teximagemultisample(GLuint dims, GLenum target, GLsizei samples, return; } - if (_mesa_is_enum_format_integer(internalformat)) { - if (samples > ctx->Const.MaxIntegerSamples) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glTexImage%uDMultisample(samples>GL_MAX_INTEGER_SAMPLES)", - dims); - return; - } - } - else if (_mesa_is_depth_or_stencil_format(internalformat)) { - if (samples > ctx->Const.MaxDepthTextureSamples) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glTexImage%uDMultisample(samples>GL_MAX_DEPTH_TEXTURE_SAMPLES)", - dims); - return; - } - } - else { - if (samples > ctx->Const.MaxColorTextureSamples) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glTexImage%uDMultisample(samples>GL_MAX_COLOR_TEXTURE_SAMPLES)", - dims); - return; - } + sample_count_error = _mesa_check_sample_count(ctx, target, + internalformat, samples); + if (sample_count_error != GL_NO_ERROR) { + _mesa_error(ctx, sample_count_error, "glTexImage%uMultisample(samples)", dims); + return; } - /* TODO: should ask the driver for the exact limit for this internalformat - * once IDR's internalformat_query bits land - */ - texObj = _mesa_get_current_tex_object(ctx, target); texImage = _mesa_get_tex_image(ctx, texObj, 0, 0); _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
