diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index cfec627f10c..bffa4d026cb 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -3104,7 +3104,7 @@ void st_init_texture_functions(struct dd_function_table *functions) { functions->ChooseTextureFormat = st_ChooseTextureFormat; - functions->QuerySamplesForFormat = st_QuerySamplesForFormat; + functions->QueryInternalFormat = st_QueryInternalFormat; functions->TexImage = st_TexImage; functions->TexSubImage = st_TexSubImage; functions->CompressedTexSubImage = st_CompressedTexSubImage; diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index 82bf3a185ad..5392c23ec00 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -42,6 +42,7 @@ #include "main/texstore.h" #include "main/image.h" #include "main/macros.h" +#include "main/formatquery.h" #include "pipe/p_context.h" #include "pipe/p_defines.h" @@ -2308,9 +2309,9 @@ st_ChooseTextureFormat(struct gl_context *ctx, GLenum target, /** - * Called via ctx->Driver.ChooseTextureFormat(). + * Called via ctx->Driver.QueryInternalFormat(). */ -size_t +static size_t st_QuerySamplesForFormat(struct gl_context *ctx, GLenum target, GLenum internalFormat, int samples[16]) { @@ -2349,6 +2350,39 @@ st_QuerySamplesForFormat(struct gl_context *ctx, GLenum target, return num_sample_counts; } +/** + * ARB_internalformat_query2 driver hook. + */ +void +st_QueryInternalFormat(struct gl_context *ctx, GLenum target, + GLenum internalFormat, GLenum pname, GLint *params) +{ + /* The API entry-point gives us a temporary params buffer that is non-NULL + * and guaranteed to have at least 16 elements. + */ + assert(params != NULL); + + switch (pname) { + case GL_SAMPLES: + st_QuerySamplesForFormat(ctx, target, internalFormat, params); + break; + + case GL_NUM_SAMPLE_COUNTS: { + size_t num_samples; + num_samples = st_QuerySamplesForFormat(ctx, target, internalFormat, + params); + params[0] = (GLint) num_samples; + break; + } + + default: + /* For the rest of the pnames, we call back the Mesa's default + * function for drivers that don't implement ARB_internalformat_query2. + */ + _mesa_query_internal_format_default(ctx, target, internalFormat, pname, + params); + } +} /** * This is used for translating texture border color and the clear diff --git a/src/mesa/state_tracker/st_format.h b/src/mesa/state_tracker/st_format.h index 3e10aa64bc6..6ba61df7e4e 100644 --- a/src/mesa/state_tracker/st_format.h +++ b/src/mesa/state_tracker/st_format.h @@ -70,11 +70,9 @@ st_ChooseTextureFormat(struct gl_context * ctx, GLenum target, GLint internalFormat, GLenum format, GLenum type); -size_t -st_QuerySamplesForFormat(struct gl_context *ctx, GLenum target, - GLenum internalFormat, int samples[16]); - - +void +st_QueryInternalFormat(struct gl_context *ctx, GLenum target, + GLenum internalFormat, GLenum pname, GLint *params); extern void st_translate_color(const union gl_color_union *colorIn,