[Mesa-dev] [RFC 09/63] mesa/formatquery: Use new driver hook QueryInternalFormat

Eduardo Lima Mitev elima at igalia.com
Tue Jan 19 08:41:49 PST 2016


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.
---
 src/mesa/main/formatquery.c | 42 ++++++++++++++----------------------------
 1 file changed, 14 insertions(+), 28 deletions(-)

diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c
index b55abcd..79f7549 100644
--- a/src/mesa/main/formatquery.c
+++ b/src/mesa/main/formatquery.c
@@ -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 (_mesa_is_gles3(ctx) && _mesa_is_enum_format_integer(internalformat)) {
@@ -156,29 +163,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;
    }
-- 
2.5.3



More information about the mesa-dev mailing list