mesa/formatquery: Use new driver hook QueryInternalFormat
authorEduardo Lima Mitev <elima@igalia.com>
Wed, 16 Dec 2015 16:49:29 +0000 (17:49 +0100)
committerEduardo Lima Mitev <elima@igalia.com>
Thu, 3 Mar 2016 14:14:05 +0000 (15:14 +0100)
Implements SAMPLES and NUM_SAMPLE_COUNTS queries using the new generic
driver call QueryInternalFormat, which is being introduced as replacement
of QuerySamplesForFormat to support ARB_internalformat_query2.

Reviewed-by: Dave Airlie <airlied@redhat.com>
src/mesa/main/formatquery.c

index 6ffa5534d7cb04b74434e2cce76f8ab202af9a80..21d10a8e79cc4cb4e5e95d86d5b5b918599bbf3f 100644 (file)
@@ -54,10 +54,16 @@ _mesa_query_internal_format_default(struct gl_context *ctx, GLenum target,
    (void) ctx;
    (void) target;
    (void) internalFormat;
-   (void) pname;
-   (void) params;
 
-   /* @TODO */
+   switch (pname) {
+   case GL_SAMPLES:
+   case GL_NUM_SAMPLE_COUNTS:
+      params[0] = 1;
+      break;
+   default:
+      /* @TODO: handle default values for all the different pnames. */
+      break;
+   }
 }
 
 void GLAPIENTRY
@@ -74,7 +80,7 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
       return;
    }
 
-   assert(ctx->Driver.QuerySamplesForFormat != NULL);
+   assert(ctx->Driver.QueryInternalFormat != NULL);
 
    /* The ARB_internalformat_query spec says:
     *
@@ -145,7 +151,8 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
 
    switch (pname) {
    case GL_SAMPLES:
-      ctx->Driver.QuerySamplesForFormat(ctx, target, internalformat, buffer);
+      ctx->Driver.QueryInternalFormat(ctx, target, internalformat, pname,
+                                      buffer);
       break;
    case GL_NUM_SAMPLE_COUNTS: {
       if ((ctx->API == API_OPENGLES2 && ctx->Version == 30) &&
@@ -159,29 +166,8 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
           */
          buffer[0] = 0;
       } 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;
+         ctx->Driver.QueryInternalFormat(ctx, target, internalformat, pname,
+                                         buffer);
       }
       break;
    }