Mesa (master): mesa: Returns zero samples when querying GL_NUM_SAMPLE_COUNTS when internal format is integer

Iago Toral Quiroga itoral at kemper.freedesktop.org
Tue Dec 9 10:46:06 UTC 2014


Module: Mesa
Branch: master
Commit: 09cb149ba745302e366c2f965a033103d398748c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=09cb149ba745302e366c2f965a033103d398748c

Author: Eduardo Lima Mitev <elima at igalia.com>
Date:   Thu Nov 20 14:52:35 2014 +0100

mesa: Returns zero samples when querying GL_NUM_SAMPLE_COUNTS when internal format is integer

>From GL ES 3.0 specification, section 6.1.15 Internal Format Queries (page 236),
multisampling is not supported for signed and unsigned integer internal formats.

Fixes 19 dEQP tests under 'dEQP-GLES3.functional.state_query.internal_format.*'.

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 src/mesa/main/formatquery.c |   57 ++++++++++++++++++++++++++-----------------
 1 file changed, 34 insertions(+), 23 deletions(-)

diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c
index 40eca87..f6274fe 100644
--- a/src/mesa/main/formatquery.c
+++ b/src/mesa/main/formatquery.c
@@ -115,29 +115,40 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
             internalformat, buffer);
       break;
    case GL_NUM_SAMPLE_COUNTS: {
-      /* The driver can return 0, and we should pass that along to the
-       * application.  The ARB decided that ARB_internalformat_query should
-       * behave as ARB_internalformat_query2 in this situation.
-       *
-       * The ARB_internalformat_query2 spec says:
-       *
-       *     "- NUM_SAMPLE_COUNTS: The number of sample counts that would be
-       *        returned by querying SAMPLES is returned in <params>.
-       *        * If <internalformat> is not color-renderable,
-       *          depth-renderable, or stencil-renderable (as defined in
-       *          section 4.4.4), or if <target> does not support multiple
-       *          samples (ie other than TEXTURE_2D_MULTISAMPLE,
-       *          TEXTURE_2D_MULTISAMPLE_ARRAY, or RENDERBUFFER), 0 is
-       *          returned."
-       */
-      const size_t num_samples =
-         ctx->Driver.QuerySamplesForFormat(ctx, target, internalformat, buffer);
-
-      /* QuerySamplesForFormat writes some stuff to buffer, so we have to
-       * separately over-write it with the requested value.
-       */
-      buffer[0] = (GLint) num_samples;
-      count = 1;
+      if (_mesa_is_gles3(ctx) && _mesa_is_enum_format_integer(internalformat)) {
+         /* From GL ES 3.0 specification, section 6.1.15 page 236: "Since
+          * multisampling is not supported for signed and unsigned integer
+          * internal formats, the value of NUM_SAMPLE_COUNTS will be zero
+          * for such formats.
+          */
+         buffer[0] = 0;
+         count = 1;
+      } else {
+         size_t num_samples;
+
+         /* The driver can return 0, and we should pass that along to the
+          * application.  The ARB decided that ARB_internalformat_query should
+          * behave as ARB_internalformat_query2 in this situation.
+          *
+          * The ARB_internalformat_query2 spec says:
+          *
+          *     "- NUM_SAMPLE_COUNTS: The number of sample counts that would be
+          *        returned by querying SAMPLES is returned in <params>.
+          *        * If <internalformat> is not color-renderable,
+          *          depth-renderable, or stencil-renderable (as defined in
+          *          section 4.4.4), or if <target> does not support multiple
+          *          samples (ie other than TEXTURE_2D_MULTISAMPLE,
+          *          TEXTURE_2D_MULTISAMPLE_ARRAY, or RENDERBUFFER), 0 is
+          *          returned."
+          */
+         num_samples =  ctx->Driver.QuerySamplesForFormat(ctx, target, internalformat, buffer);
+
+         /* QuerySamplesForFormat writes some stuff to buffer, so we have to
+          * separately over-write it with the requested value.
+          */
+         buffer[0] = (GLint) num_samples;
+         count = 1;
+      }
       break;
    }
    default:




More information about the mesa-commit mailing list