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;
#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"
/**
- * 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])
{
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
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,