[Mesa-dev] [PATCH] glsl: expose accurate gl_MaxCompute* constants rather than cooked values
Ilia Mirkin
imirkin at alum.mit.edu
Wed Jan 20 09:02:05 PST 2016
Actually as we just realized, this patch only makes sense on top of
Samuel's other work which made the GL-side constants
driver-configurable. (I didn't realize that mesa master didn't have
this.)
On Wed, Jan 20, 2016 at 11:47 AM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> This patch fixes the following deqp tests related to compute shaders:
> - max_compute_atomic_counter_buffers
> - max_compute_atomic_counters
> - max_compute_image_uniforms
> - max_compute_uniform_components
>
> Thanks for fixing this.
>
> Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>
>
> On 01/20/2016 09:06 AM, Ilia Mirkin wrote:
>>
>> Looks like the various max's were never plumbed through. This fixes dEQP
>> test failures which checked for gl_MaxCompute* to match up to the
>> relevant GL queries.
>>
>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>> ---
>> src/glsl/builtin_variables.cpp | 15 ++++++++++-----
>> src/glsl/glsl_parser_extras.cpp | 7 +++++++
>> src/glsl/glsl_parser_extras.h | 5 +++++
>> src/glsl/main.cpp | 4 ++++
>> src/mesa/main/config.h | 10 ----------
>> 5 files changed, 26 insertions(+), 15 deletions(-)
>>
>> diff --git a/src/glsl/builtin_variables.cpp
>> b/src/glsl/builtin_variables.cpp
>> index cc7fca2..a8bcdff 100644
>> --- a/src/glsl/builtin_variables.cpp
>> +++ b/src/glsl/builtin_variables.cpp
>> @@ -772,11 +772,16 @@ builtin_variable_generator::generate_constants()
>> }
>>
>> if (state->is_version(430, 310) || state->ARB_compute_shader_enable)
>> {
>> - add_const("gl_MaxComputeAtomicCounterBuffers",
>> MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS);
>> - add_const("gl_MaxComputeAtomicCounters",
>> MAX_COMPUTE_ATOMIC_COUNTERS);
>> - add_const("gl_MaxComputeImageUniforms",
>> MAX_COMPUTE_IMAGE_UNIFORMS);
>> - add_const("gl_MaxComputeTextureImageUnits",
>> MAX_COMPUTE_TEXTURE_IMAGE_UNITS);
>> - add_const("gl_MaxComputeUniformComponents",
>> MAX_COMPUTE_UNIFORM_COMPONENTS);
>> + add_const("gl_MaxComputeAtomicCounterBuffers",
>> + state->Const.MaxComputeAtomicCounterBuffers);
>> + add_const("gl_MaxComputeAtomicCounters",
>> + state->Const.MaxComputeAtomicCounters);
>> + add_const("gl_MaxComputeImageUniforms",
>> + state->Const.MaxComputeImageUniforms);
>> + add_const("gl_MaxComputeTextureImageUnits",
>> + state->Const.MaxComputeTextureImageUnits);
>> + add_const("gl_MaxComputeUniformComponents",
>> + state->Const.MaxComputeUniformComponents);
>>
>> add_const_ivec3("gl_MaxComputeWorkGroupCount",
>> state->Const.MaxComputeWorkGroupCount[0],
>> diff --git a/src/glsl/glsl_parser_extras.cpp
>> b/src/glsl/glsl_parser_extras.cpp
>> index 1d74db5..8765eb8 100644
>> --- a/src/glsl/glsl_parser_extras.cpp
>> +++ b/src/glsl/glsl_parser_extras.cpp
>> @@ -119,6 +119,7 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct
>> gl_context *_ctx,
>> this->Const.MaxTessEvaluationAtomicCounters =
>> ctx->Const.Program[MESA_SHADER_TESS_EVAL].MaxAtomicCounters;
>> this->Const.MaxGeometryAtomicCounters =
>> ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxAtomicCounters;
>> this->Const.MaxFragmentAtomicCounters =
>> ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxAtomicCounters;
>> + this->Const.MaxComputeAtomicCounters =
>> ctx->Const.Program[MESA_SHADER_COMPUTE].MaxAtomicCounters;
>> this->Const.MaxCombinedAtomicCounters =
>> ctx->Const.MaxCombinedAtomicCounters;
>> this->Const.MaxAtomicBufferBindings =
>> ctx->Const.MaxAtomicBufferBindings;
>> this->Const.MaxVertexAtomicCounterBuffers =
>> @@ -131,6 +132,8 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct
>> gl_context *_ctx,
>> ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxAtomicBuffers;
>> this->Const.MaxFragmentAtomicCounterBuffers =
>> ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers;
>> + this->Const.MaxComputeAtomicCounterBuffers =
>> + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxAtomicBuffers;
>> this->Const.MaxCombinedAtomicCounterBuffers =
>> ctx->Const.MaxCombinedAtomicBuffers;
>> this->Const.MaxAtomicCounterBufferSize =
>> @@ -142,6 +145,9 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct
>> gl_context *_ctx,
>> for (unsigned i = 0; i <
>> ARRAY_SIZE(this->Const.MaxComputeWorkGroupSize); i++)
>> this->Const.MaxComputeWorkGroupSize[i] =
>> ctx->Const.MaxComputeWorkGroupSize[i];
>>
>> + this->Const.MaxComputeTextureImageUnits =
>> ctx->Const.Program[MESA_SHADER_COMPUTE].MaxTextureImageUnits;
>> + this->Const.MaxComputeUniformComponents =
>> ctx->Const.Program[MESA_SHADER_COMPUTE].MaxUniformComponents;
>> +
>> this->Const.MaxImageUnits = ctx->Const.MaxImageUnits;
>> this->Const.MaxCombinedShaderOutputResources =
>> ctx->Const.MaxCombinedShaderOutputResources;
>> this->Const.MaxImageSamples = ctx->Const.MaxImageSamples;
>> @@ -150,6 +156,7 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct
>> gl_context *_ctx,
>> this->Const.MaxTessEvaluationImageUniforms =
>> ctx->Const.Program[MESA_SHADER_TESS_EVAL].MaxImageUniforms;
>> this->Const.MaxGeometryImageUniforms =
>> ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxImageUniforms;
>> this->Const.MaxFragmentImageUniforms =
>> ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxImageUniforms;
>> + this->Const.MaxComputeImageUniforms =
>> ctx->Const.Program[MESA_SHADER_COMPUTE].MaxImageUniforms;
>> this->Const.MaxCombinedImageUniforms =
>> ctx->Const.MaxCombinedImageUniforms;
>>
>> /* ARB_viewport_array */
>> diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
>> index ecc2992..43a99ad 100644
>> --- a/src/glsl/glsl_parser_extras.h
>> +++ b/src/glsl/glsl_parser_extras.h
>> @@ -424,6 +424,11 @@ struct _mesa_glsl_parse_state {
>> unsigned MaxAtomicCounterBufferSize;
>>
>> /* ARB_compute_shader */
>> + unsigned MaxComputeAtomicCounterBuffers;
>> + unsigned MaxComputeAtomicCounters;
>> + unsigned MaxComputeImageUniforms;
>> + unsigned MaxComputeTextureImageUnits;
>> + unsigned MaxComputeUniformComponents;
>> unsigned MaxComputeWorkGroupCount[3];
>> unsigned MaxComputeWorkGroupSize[3];
>>
>> diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
>> index c9432f1..bdf2f07 100644
>> --- a/src/glsl/main.cpp
>> +++ b/src/glsl/main.cpp
>> @@ -63,6 +63,10 @@ initialize_context(struct gl_context *ctx, gl_api api)
>> ctx->Const.Program[MESA_SHADER_COMPUTE].MaxUniformComponents = 1024;
>> ctx->Const.Program[MESA_SHADER_COMPUTE].MaxInputComponents = 0; /*
>> not used */
>> ctx->Const.Program[MESA_SHADER_COMPUTE].MaxOutputComponents = 0; /*
>> not used */
>> + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxAtomicBuffers = 8;
>> + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxAtomicCounters = 8;
>> + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxImageUniforms = 8;
>> + ctx->Const.Program[MESA_SHADER_COMPUTE].MaxUniformBlocks = 12;
>>
>> switch (ctx->Const.GLSLVersion) {
>> case 100:
>> diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h
>> index a769e51..820ae07 100644
>> --- a/src/mesa/main/config.h
>> +++ b/src/mesa/main/config.h
>> @@ -288,16 +288,6 @@
>> #define PERFQUERY_HAVE_GPA_EXTENDED_COUNTERS 0
>> /*@}*/
>>
>> -/** For GL_ARB_compute_shader */
>> -/*@{*/
>> -#define MAX_COMPUTE_UNIFORM_BLOCKS 12
>> -#define MAX_COMPUTE_TEXTURE_IMAGE_UNITS 16
>> -#define MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 8
>> -#define MAX_COMPUTE_ATOMIC_COUNTERS 8
>> -#define MAX_COMPUTE_UNIFORM_COMPONENTS 512
>> -#define MAX_COMPUTE_IMAGE_UNIFORMS 8
>> -/*@}*/
>> -
>> /** For GL_ARB_pipeline_statistics_query */
>> #define MAX_PIPELINE_STATISTICS 11
>>
>>
>
More information about the mesa-dev
mailing list