diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h index 74c41fd1d95..7ebf1b84b0f 100644 --- a/src/mesa/main/config.h +++ b/src/mesa/main/config.h @@ -302,6 +302,10 @@ */ #define MAX_CLIPPED_VERTICES ((2 * (6 + MAX_CLIP_PLANES))+1) +/** + * Maximum number of MSAA samples + */ +#define MAX_SAMPLES 16 /** For GL_ARB_sample_locations - maximum of SAMPLE_LOCATION_PIXEL_GRID_*_ARB */ #define MAX_SAMPLE_LOCATION_GRID_SIZE 4 diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c index 6586c5ce6b9..51d02fd9b38 100644 --- a/src/mesa/main/formatquery.c +++ b/src/mesa/main/formatquery.c @@ -909,7 +909,7 @@ void GLAPIENTRY _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params) { - GLint buffer[16]; + GLint buffer[MAX_SAMPLES]; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); @@ -925,7 +925,7 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, return; /* initialize the contents of the temporary buffer */ - memcpy(buffer, params, MIN2(bufSize, 16) * sizeof(GLint)); + memcpy(buffer, params, MIN2(bufSize, MAX_SAMPLES) * sizeof(GLint)); /* Use the 'unsupported' response defined by the spec for every pname * as the default answer. diff --git a/src/mesa/main/formatquery.h b/src/mesa/main/formatquery.h index ce49caf8a79..b8ccdc91cc7 100644 --- a/src/mesa/main/formatquery.h +++ b/src/mesa/main/formatquery.h @@ -25,6 +25,7 @@ #define FORMATQUERY_H #include "util/glheader.h" +#include "config.h" void _mesa_query_internal_format_default(struct gl_context *ctx, GLenum target, diff --git a/src/mesa/main/multisample.c b/src/mesa/main/multisample.c index 3a9aae44c37..f509660272b 100644 --- a/src/mesa/main/multisample.c +++ b/src/mesa/main/multisample.c @@ -310,7 +310,7 @@ _mesa_check_sample_count(struct gl_context *ctx, GLenum target, * for then the error INVALID_OPERATION is generated." */ if (ctx->Extensions.ARB_internalformat_query) { - GLint buffer[16] = {-1}; + GLint buffer[MAX_SAMPLES] = {-1}; GLint limit; st_QueryInternalFormat(ctx, target, internalFormat, diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index 794d4289654..927ff199e04 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -1089,7 +1089,7 @@ _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex, bool is GLenum internalFormat = is_depth ? GL_DEPTH_COMPONENT : GL_RGBA; if (tex == TEXTURE_2D_MULTISAMPLE_INDEX || tex == TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX) { - int samples[16]; + int samples[MAX_SAMPLES]; st_QueryInternalFormat(ctx, 0, internalFormat, GL_SAMPLES, samples); _mesa_init_teximage_fields_ms(ctx, texImage, width, diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index bf3a2111ae7..5be5c161ff3 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -1144,7 +1144,7 @@ guess_and_alloc_texture(struct st_context *st, unsigned nr_samples = 0; if (stObj->TargetIndex == TEXTURE_2D_MULTISAMPLE_INDEX || stObj->TargetIndex == TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX) { - int samples[16]; + int samples[MAX_SAMPLES]; st_QueryInternalFormat(st->ctx, 0, stImage->InternalFormat, GL_SAMPLES, samples); nr_samples = samples[0]; } diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index e007c9a1faa..2761b0bb2d6 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -1373,12 +1373,12 @@ void st_init_extensions(struct pipe_screen *screen, consts->MaxSamples = get_max_samples_for_formats(screen, ARRAY_SIZE(color_formats), - color_formats, 16, + color_formats, MAX_SAMPLES, PIPE_BIND_RENDER_TARGET); consts->MaxImageSamples = get_max_samples_for_formats(screen, ARRAY_SIZE(color_formats), - color_formats, 16, + color_formats, MAX_SAMPLES, PIPE_BIND_SHADER_IMAGE); consts->MaxColorTextureSamples = @@ -1408,7 +1408,7 @@ void st_init_extensions(struct pipe_screen *screen, consts->MaxColorFramebufferSamples = get_max_samples_for_formats_advanced(screen, ARRAY_SIZE(color_formats), - color_formats, 16, + color_formats, MAX_SAMPLES, consts->MaxSamples, PIPE_BIND_RENDER_TARGET); diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index 938c4d00480..6ea8e3720cd 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -1483,7 +1483,7 @@ st_ChooseTextureFormat(struct gl_context *ctx, GLenum target, */ static size_t st_QuerySamplesForFormat(struct gl_context *ctx, GLenum target, - GLenum internalFormat, int samples[16]) + GLenum internalFormat, int samples[MAX_SAMPLES]) { struct st_context *st = st_context(ctx); enum pipe_format format; @@ -1512,7 +1512,7 @@ st_QuerySamplesForFormat(struct gl_context *ctx, GLenum target, } /* Set sample counts in descending order. */ - for (i = 16; i > 1; i--) { + for (i = MAX_SAMPLES; i > 1; i--) { format = st_choose_format(st, internalFormat, GL_NONE, GL_NONE, PIPE_TEXTURE_2D, i, i, bind, false, false); @@ -1545,7 +1545,7 @@ st_QueryTextureFormatSupport(struct gl_context *ctx, GLenum target, GLenum inter /* multisample textures need >= 2 samples */ unsigned min_samples = target == GL_TEXTURE_2D_MULTISAMPLE || target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY ? 1 : 0; - unsigned max_samples = min_samples ? 16 : 1; + unsigned max_samples = min_samples ? MAX_SAMPLES : 1; /* compressed textures will be allocated as e.g., RGBA8, so check that instead */ enum pipe_format pf = st_choose_format(st, internalFormat, GL_NONE, GL_NONE, @@ -1628,7 +1628,7 @@ st_QueryInternalFormat(struct gl_context *ctx, GLenum target, break; case GL_NUM_SAMPLE_COUNTS: { - int samples[16]; + int samples[MAX_SAMPLES]; size_t num_samples; num_samples = st_QuerySamplesForFormat(ctx, target, internalFormat, samples);