mesa/formatquery: Use new driver hook QueryInternalFormat

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>
This commit is contained in:
Eduardo Lima Mitev
2015-12-16 17:49:29 +01:00
parent 25ee5c60dc
commit 993d7345b7
+14 -28
View 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;
}