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:
+14
-28
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user