--- src/glsl/builtin_variables.cpp | 4 ++++ src/glsl/glsl_parser_extras.cpp | 2 ++ src/glsl/glsl_parser_extras.h | 1 + src/glsl/main.cpp | 3 +++ src/glsl/standalone_scaffolding.cpp | 3 +++ src/mesa/main/context.c | 3 +++ src/mesa/main/get.c | 8 ++++++++ src/mesa/main/mtypes.h | 1 + 8 files changed, 25 insertions(+)
diff --git a/src/glsl/builtin_variables.cpp b/src/glsl/builtin_variables.cpp index 171bf08..f94f5da 100644 --- a/src/glsl/builtin_variables.cpp +++ b/src/glsl/builtin_variables.cpp @@ -682,6 +682,10 @@ builtin_variable_generator::generate_constants() } if (state->is_version(430, 0) || state->ARB_compute_shader_enable) { + add_const_ivec3("gl_MaxComputeWorkGroupCount", + state->Const.MaxComputeWorkGroupCount[0], + state->Const.MaxComputeWorkGroupCount[1], + state->Const.MaxComputeWorkGroupCount[2]); add_const_ivec3("gl_MaxComputeWorkGroupSize", state->Const.MaxComputeWorkGroupSize[0], state->Const.MaxComputeWorkGroupSize[1], diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp index 8524fc6..65c504f 100644 --- a/src/glsl/glsl_parser_extras.cpp +++ b/src/glsl/glsl_parser_extras.cpp @@ -124,6 +124,8 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx, this->Const.MaxAtomicBufferBindings = ctx->Const.MaxAtomicBufferBindings; /* Compute shader constants */ + for (unsigned i = 0; i < Elements(this->Const.MaxComputeWorkGroupCount); i++) + this->Const.MaxComputeWorkGroupCount[i] = ctx->Const.MaxComputeWorkGroupCount[i]; for (unsigned i = 0; i < Elements(this->Const.MaxComputeWorkGroupSize); i++) this->Const.MaxComputeWorkGroupSize[i] = ctx->Const.MaxComputeWorkGroupSize[i]; diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h index be34fd9..68a3d54 100644 --- a/src/glsl/glsl_parser_extras.h +++ b/src/glsl/glsl_parser_extras.h @@ -252,6 +252,7 @@ struct _mesa_glsl_parse_state { unsigned MaxAtomicBufferBindings; /* ARB_compute_shader */ + unsigned MaxComputeWorkGroupCount[3]; unsigned MaxComputeWorkGroupSize[3]; } Const; diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp index 94bc1cc..5ea57d5 100644 --- a/src/glsl/main.cpp +++ b/src/glsl/main.cpp @@ -50,6 +50,9 @@ initialize_context(struct gl_context *ctx, gl_api api) */ ctx->Const.GLSLVersion = glsl_version; ctx->Extensions.ARB_ES3_compatibility = true; + ctx->Const.MaxComputeWorkGroupCount[0] = 65535; + ctx->Const.MaxComputeWorkGroupCount[1] = 65535; + ctx->Const.MaxComputeWorkGroupCount[2] = 65535; ctx->Const.MaxComputeWorkGroupSize[0] = 1024; ctx->Const.MaxComputeWorkGroupSize[1] = 1024; ctx->Const.MaxComputeWorkGroupSize[2] = 64; diff --git a/src/glsl/standalone_scaffolding.cpp b/src/glsl/standalone_scaffolding.cpp index 0c83ea3..cce2dce 100644 --- a/src/glsl/standalone_scaffolding.cpp +++ b/src/glsl/standalone_scaffolding.cpp @@ -140,6 +140,9 @@ void initialize_context_to_defaults(struct gl_context *ctx, gl_api api) ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = 32; ctx->Const.MaxDrawBuffers = 1; + ctx->Const.MaxComputeWorkGroupCount[0] = 65535; + ctx->Const.MaxComputeWorkGroupCount[1] = 65535; + ctx->Const.MaxComputeWorkGroupCount[2] = 65535; ctx->Const.MaxComputeWorkGroupSize[0] = 1024; ctx->Const.MaxComputeWorkGroupSize[1] = 1024; ctx->Const.MaxComputeWorkGroupSize[2] = 64; diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 942f247..6d7e467 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -692,6 +692,9 @@ _mesa_init_constants(struct gl_context *ctx) ctx->Const.MaxVertexAttribBindings = MAX_VERTEX_GENERIC_ATTRIBS; /* GL_ARB_compute_shader */ + ctx->Const.MaxComputeWorkGroupCount[0] = 65535; + ctx->Const.MaxComputeWorkGroupCount[1] = 65535; + ctx->Const.MaxComputeWorkGroupCount[2] = 65535; ctx->Const.MaxComputeWorkGroupSize[0] = 1024; ctx->Const.MaxComputeWorkGroupSize[1] = 1024; ctx->Const.MaxComputeWorkGroupSize[2] = 64; diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index bcbb5d5..e977521 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -1791,6 +1791,14 @@ find_value_indexed(const char *func, GLenum pname, GLuint index, union value *v) v->value_int = ctx->Array.ArrayObj->VertexBinding[VERT_ATTRIB_GENERIC(index)].Stride; return TYPE_INT; + case GL_MAX_COMPUTE_WORK_GROUP_COUNT: + if (!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_compute_shader) + goto invalid_enum; + if (index >= 3) + goto invalid_value; + v->value_int = ctx->Const.MaxComputeWorkGroupCount[index]; + return TYPE_INT; + case GL_MAX_COMPUTE_WORK_GROUP_SIZE: if (!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_compute_shader) goto invalid_enum; diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 6481dc1..2119484 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -3322,6 +3322,7 @@ struct gl_constants GLint MaxVertexAttribBindings; /** GL_ARB_compute_shader */ + GLuint MaxComputeWorkGroupCount[3]; GLuint MaxComputeWorkGroupSize[3]; GLuint MaxComputeWorkGroupInvocations; }; -- 1.8.5.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev