[Mesa-dev] [PATCH 03/10] mesa: Returns zero samples when querying GL_NUM_SAMPLE_COUNTS when internal format is integer

Eduardo Lima Mitev elima at igalia.com
Mon Dec 1 05:04:43 PST 2014


In GLES3, multisampling is not supported for signed and unsigned integer
internal formats. See https://www.khronos.org/opengles/sdk/docs/man3/docbook4/xhtml/glGetInternalformativ.xml.

Fixes 19 dEQP tests under 'dEQP-GLES3.functional.state_query.internal_format.*'.
---
 src/mesa/main/formatquery.c | 44 +++++++++++++++++++++++++++-----------------
 1 file changed, 27 insertions(+), 17 deletions(-)

diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c
index 40eca87..629b07b 100644
--- a/src/mesa/main/formatquery.c
+++ b/src/mesa/main/formatquery.c
@@ -115,23 +115,33 @@ _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);
+      size_t num_samples;
+
+      if (_mesa_is_gles3(ctx) && _mesa_is_enum_format_integer(internalformat)) {
+         /* In GLES3.0, multisampling is not supported for signed and unsigned integer internal
+            formats <https://www.khronos.org/opengles/sdk/docs/man3/docbook4/xhtml/glGetInternalformativ.xml>,
+            so return zero
+         */
+         num_samples = 0;
+      }
+      else {
+         /* 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.
-- 
2.1.3



More information about the mesa-dev mailing list