[Mesa-dev] [PATCH 07/12] mesa: make _mesa_init_constants context-independent and public

Ian Romanick idr at freedesktop.org
Tue Aug 5 11:04:48 PDT 2014


This patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

On 08/03/2014 08:18 AM, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
> 
> ---
>  src/mesa/main/context.c | 202 ++++++++++++++++++++++++------------------------
>  src/mesa/main/context.h |   3 +
>  2 files changed, 104 insertions(+), 101 deletions(-)
> 
> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
> index e08f728..2320842 100644
> --- a/src/mesa/main/context.c
> +++ b/src/mesa/main/context.c
> @@ -464,7 +464,7 @@ _mesa_init_current(struct gl_context *ctx)
>   * Important: drivers should override these with actual limits.
>   */
>  static void
> -init_program_limits(struct gl_context *ctx, gl_shader_stage stage,
> +init_program_limits(struct gl_constants *consts, gl_shader_stage stage,
>                      struct gl_program_constants *prog)
>  {
>     prog->MaxInstructions = MAX_PROGRAM_INSTRUCTIONS;
> @@ -546,7 +546,7 @@ init_program_limits(struct gl_context *ctx, gl_shader_stage stage,
>  
>     prog->MaxUniformBlocks = 12;
>     prog->MaxCombinedUniformComponents = (prog->MaxUniformComponents +
> -                                         ctx->Const.MaxUniformBlockSize / 4 *
> +                                         consts->MaxUniformBlockSize / 4 *
>                                           prog->MaxUniformBlocks);
>  
>     prog->MaxAtomicBuffers = 0;
> @@ -559,161 +559,161 @@ init_program_limits(struct gl_context *ctx, gl_shader_stage stage,
>   * Use defaults from config.h.  The device drivers will often override
>   * some of these values (such as number of texture units).
>   */
> -static void 
> -_mesa_init_constants(struct gl_context *ctx)
> +void
> +_mesa_init_constants(struct gl_constants *consts, gl_api api)
>  {
>     int i;
> -   assert(ctx);
> +   assert(consts);
>  
>     /* Constants, may be overriden (usually only reduced) by device drivers */
> -   ctx->Const.MaxTextureMbytes = MAX_TEXTURE_MBYTES;
> -   ctx->Const.MaxTextureLevels = MAX_TEXTURE_LEVELS;
> -   ctx->Const.Max3DTextureLevels = MAX_3D_TEXTURE_LEVELS;
> -   ctx->Const.MaxCubeTextureLevels = MAX_CUBE_TEXTURE_LEVELS;
> -   ctx->Const.MaxTextureRectSize = MAX_TEXTURE_RECT_SIZE;
> -   ctx->Const.MaxArrayTextureLayers = MAX_ARRAY_TEXTURE_LAYERS;
> -   ctx->Const.MaxTextureCoordUnits = MAX_TEXTURE_COORD_UNITS;
> -   ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
> -   ctx->Const.MaxTextureUnits = MIN2(ctx->Const.MaxTextureCoordUnits,
> -                                     ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits);
> -   ctx->Const.MaxTextureMaxAnisotropy = MAX_TEXTURE_MAX_ANISOTROPY;
> -   ctx->Const.MaxTextureLodBias = MAX_TEXTURE_LOD_BIAS;
> -   ctx->Const.MaxTextureBufferSize = 65536;
> -   ctx->Const.TextureBufferOffsetAlignment = 1;
> -   ctx->Const.MaxArrayLockSize = MAX_ARRAY_LOCK_SIZE;
> -   ctx->Const.SubPixelBits = SUB_PIXEL_BITS;
> -   ctx->Const.MinPointSize = MIN_POINT_SIZE;
> -   ctx->Const.MaxPointSize = MAX_POINT_SIZE;
> -   ctx->Const.MinPointSizeAA = MIN_POINT_SIZE;
> -   ctx->Const.MaxPointSizeAA = MAX_POINT_SIZE;
> -   ctx->Const.PointSizeGranularity = (GLfloat) POINT_SIZE_GRANULARITY;
> -   ctx->Const.MinLineWidth = MIN_LINE_WIDTH;
> -   ctx->Const.MaxLineWidth = MAX_LINE_WIDTH;
> -   ctx->Const.MinLineWidthAA = MIN_LINE_WIDTH;
> -   ctx->Const.MaxLineWidthAA = MAX_LINE_WIDTH;
> -   ctx->Const.LineWidthGranularity = (GLfloat) LINE_WIDTH_GRANULARITY;
> -   ctx->Const.MaxClipPlanes = 6;
> -   ctx->Const.MaxLights = MAX_LIGHTS;
> -   ctx->Const.MaxShininess = 128.0;
> -   ctx->Const.MaxSpotExponent = 128.0;
> -   ctx->Const.MaxViewportWidth = MAX_VIEWPORT_WIDTH;
> -   ctx->Const.MaxViewportHeight = MAX_VIEWPORT_HEIGHT;
> -   ctx->Const.MinMapBufferAlignment = 64;
> +   consts->MaxTextureMbytes = MAX_TEXTURE_MBYTES;
> +   consts->MaxTextureLevels = MAX_TEXTURE_LEVELS;
> +   consts->Max3DTextureLevels = MAX_3D_TEXTURE_LEVELS;
> +   consts->MaxCubeTextureLevels = MAX_CUBE_TEXTURE_LEVELS;
> +   consts->MaxTextureRectSize = MAX_TEXTURE_RECT_SIZE;
> +   consts->MaxArrayTextureLayers = MAX_ARRAY_TEXTURE_LAYERS;
> +   consts->MaxTextureCoordUnits = MAX_TEXTURE_COORD_UNITS;
> +   consts->Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
> +   consts->MaxTextureUnits = MIN2(consts->MaxTextureCoordUnits,
> +                                     consts->Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits);
> +   consts->MaxTextureMaxAnisotropy = MAX_TEXTURE_MAX_ANISOTROPY;
> +   consts->MaxTextureLodBias = MAX_TEXTURE_LOD_BIAS;
> +   consts->MaxTextureBufferSize = 65536;
> +   consts->TextureBufferOffsetAlignment = 1;
> +   consts->MaxArrayLockSize = MAX_ARRAY_LOCK_SIZE;
> +   consts->SubPixelBits = SUB_PIXEL_BITS;
> +   consts->MinPointSize = MIN_POINT_SIZE;
> +   consts->MaxPointSize = MAX_POINT_SIZE;
> +   consts->MinPointSizeAA = MIN_POINT_SIZE;
> +   consts->MaxPointSizeAA = MAX_POINT_SIZE;
> +   consts->PointSizeGranularity = (GLfloat) POINT_SIZE_GRANULARITY;
> +   consts->MinLineWidth = MIN_LINE_WIDTH;
> +   consts->MaxLineWidth = MAX_LINE_WIDTH;
> +   consts->MinLineWidthAA = MIN_LINE_WIDTH;
> +   consts->MaxLineWidthAA = MAX_LINE_WIDTH;
> +   consts->LineWidthGranularity = (GLfloat) LINE_WIDTH_GRANULARITY;
> +   consts->MaxClipPlanes = 6;
> +   consts->MaxLights = MAX_LIGHTS;
> +   consts->MaxShininess = 128.0;
> +   consts->MaxSpotExponent = 128.0;
> +   consts->MaxViewportWidth = MAX_VIEWPORT_WIDTH;
> +   consts->MaxViewportHeight = MAX_VIEWPORT_HEIGHT;
> +   consts->MinMapBufferAlignment = 64;
>  
>     /* Driver must override these values if ARB_viewport_array is supported. */
> -   ctx->Const.MaxViewports = 1;
> -   ctx->Const.ViewportSubpixelBits = 0;
> -   ctx->Const.ViewportBounds.Min = 0;
> -   ctx->Const.ViewportBounds.Max = 0;
> +   consts->MaxViewports = 1;
> +   consts->ViewportSubpixelBits = 0;
> +   consts->ViewportBounds.Min = 0;
> +   consts->ViewportBounds.Max = 0;
>  
>     /** GL_ARB_uniform_buffer_object */
> -   ctx->Const.MaxCombinedUniformBlocks = 36;
> -   ctx->Const.MaxUniformBufferBindings = 36;
> -   ctx->Const.MaxUniformBlockSize = 16384;
> -   ctx->Const.UniformBufferOffsetAlignment = 1;
> +   consts->MaxCombinedUniformBlocks = 36;
> +   consts->MaxUniformBufferBindings = 36;
> +   consts->MaxUniformBlockSize = 16384;
> +   consts->UniformBufferOffsetAlignment = 1;
>  
>     /* GL_ARB_explicit_uniform_location, GL_MAX_UNIFORM_LOCATIONS */
> -   ctx->Const.MaxUserAssignableUniformLocations =
> +   consts->MaxUserAssignableUniformLocations =
>        4 * MESA_SHADER_STAGES * MAX_UNIFORMS;
>  
>     for (i = 0; i < MESA_SHADER_STAGES; i++)
> -      init_program_limits(ctx, i, &ctx->Const.Program[i]);
> +      init_program_limits(consts, i, &consts->Program[i]);
>  
> -   ctx->Const.MaxProgramMatrices = MAX_PROGRAM_MATRICES;
> -   ctx->Const.MaxProgramMatrixStackDepth = MAX_PROGRAM_MATRIX_STACK_DEPTH;
> +   consts->MaxProgramMatrices = MAX_PROGRAM_MATRICES;
> +   consts->MaxProgramMatrixStackDepth = MAX_PROGRAM_MATRIX_STACK_DEPTH;
>  
>     /* CheckArrayBounds is overriden by drivers/x11 for X server */
> -   ctx->Const.CheckArrayBounds = GL_FALSE;
> +   consts->CheckArrayBounds = GL_FALSE;
>  
>     /* GL_ARB_draw_buffers */
> -   ctx->Const.MaxDrawBuffers = MAX_DRAW_BUFFERS;
> +   consts->MaxDrawBuffers = MAX_DRAW_BUFFERS;
>  
> -   ctx->Const.MaxColorAttachments = MAX_COLOR_ATTACHMENTS;
> -   ctx->Const.MaxRenderbufferSize = MAX_RENDERBUFFER_SIZE;
> +   consts->MaxColorAttachments = MAX_COLOR_ATTACHMENTS;
> +   consts->MaxRenderbufferSize = MAX_RENDERBUFFER_SIZE;
>  
> -   ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
> -   ctx->Const.MaxCombinedTextureImageUnits = MAX_COMBINED_TEXTURE_IMAGE_UNITS;
> -   ctx->Const.MaxVarying = 16; /* old limit not to break tnl and swrast */
> -   ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
> -   ctx->Const.MaxGeometryOutputVertices = MAX_GEOMETRY_OUTPUT_VERTICES;
> -   ctx->Const.MaxGeometryTotalOutputComponents = MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS;
> +   consts->Program[MESA_SHADER_VERTEX].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
> +   consts->MaxCombinedTextureImageUnits = MAX_COMBINED_TEXTURE_IMAGE_UNITS;
> +   consts->MaxVarying = 16; /* old limit not to break tnl and swrast */
> +   consts->Program[MESA_SHADER_GEOMETRY].MaxTextureImageUnits = MAX_TEXTURE_IMAGE_UNITS;
> +   consts->MaxGeometryOutputVertices = MAX_GEOMETRY_OUTPUT_VERTICES;
> +   consts->MaxGeometryTotalOutputComponents = MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS;
>  
>     /* Shading language version */
> -   if (_mesa_is_desktop_gl(ctx)) {
> -      ctx->Const.GLSLVersion = 120;
> -      _mesa_override_glsl_version(&ctx->Const);
> +   if (api == API_OPENGL_COMPAT || api == API_OPENGL_CORE) {
> +      consts->GLSLVersion = 120;
> +      _mesa_override_glsl_version(consts);
>     }
> -   else if (ctx->API == API_OPENGLES2) {
> -      ctx->Const.GLSLVersion = 100;
> +   else if (api == API_OPENGLES2) {
> +      consts->GLSLVersion = 100;
>     }
> -   else if (ctx->API == API_OPENGLES) {
> -      ctx->Const.GLSLVersion = 0; /* GLSL not supported */
> +   else if (api == API_OPENGLES) {
> +      consts->GLSLVersion = 0; /* GLSL not supported */
>     }
>  
>     /* GL_ARB_framebuffer_object */
> -   ctx->Const.MaxSamples = 0;
> +   consts->MaxSamples = 0;
>  
>     /* GL_ARB_sync */
> -   ctx->Const.MaxServerWaitTimeout = 0x1fff7fffffffULL;
> +   consts->MaxServerWaitTimeout = 0x1fff7fffffffULL;
>  
>     /* GL_EXT_provoking_vertex */
> -   ctx->Const.QuadsFollowProvokingVertexConvention = GL_TRUE;
> +   consts->QuadsFollowProvokingVertexConvention = GL_TRUE;
>  
>     /* GL_EXT_transform_feedback */
> -   ctx->Const.MaxTransformFeedbackBuffers = MAX_FEEDBACK_BUFFERS;
> -   ctx->Const.MaxTransformFeedbackSeparateComponents = 4 * MAX_FEEDBACK_ATTRIBS;
> -   ctx->Const.MaxTransformFeedbackInterleavedComponents = 4 * MAX_FEEDBACK_ATTRIBS;
> -   ctx->Const.MaxVertexStreams = 1;
> +   consts->MaxTransformFeedbackBuffers = MAX_FEEDBACK_BUFFERS;
> +   consts->MaxTransformFeedbackSeparateComponents = 4 * MAX_FEEDBACK_ATTRIBS;
> +   consts->MaxTransformFeedbackInterleavedComponents = 4 * MAX_FEEDBACK_ATTRIBS;
> +   consts->MaxVertexStreams = 1;
>  
>     /* GL 3.2  */
> -   ctx->Const.ProfileMask = ctx->API == API_OPENGL_CORE
> +   consts->ProfileMask = api == API_OPENGL_CORE
>                            ? GL_CONTEXT_CORE_PROFILE_BIT
>                            : GL_CONTEXT_COMPATIBILITY_PROFILE_BIT;
>  
>     /** GL_EXT_gpu_shader4 */
> -   ctx->Const.MinProgramTexelOffset = -8;
> -   ctx->Const.MaxProgramTexelOffset = 7;
> +   consts->MinProgramTexelOffset = -8;
> +   consts->MaxProgramTexelOffset = 7;
>  
>     /* GL_ARB_texture_gather */
> -   ctx->Const.MinProgramTextureGatherOffset = -8;
> -   ctx->Const.MaxProgramTextureGatherOffset = 7;
> +   consts->MinProgramTextureGatherOffset = -8;
> +   consts->MaxProgramTextureGatherOffset = 7;
>  
>     /* GL_ARB_robustness */
> -   ctx->Const.ResetStrategy = GL_NO_RESET_NOTIFICATION_ARB;
> +   consts->ResetStrategy = GL_NO_RESET_NOTIFICATION_ARB;
>  
>     /* PrimitiveRestart */
> -   ctx->Const.PrimitiveRestartInSoftware = GL_FALSE;
> +   consts->PrimitiveRestartInSoftware = GL_FALSE;
>  
>     /* ES 3.0 or ARB_ES3_compatibility */
> -   ctx->Const.MaxElementIndex = 0xffffffffu;
> +   consts->MaxElementIndex = 0xffffffffu;
>  
>     /* GL_ARB_texture_multisample */
> -   ctx->Const.MaxColorTextureSamples = 1;
> -   ctx->Const.MaxDepthTextureSamples = 1;
> -   ctx->Const.MaxIntegerSamples = 1;
> +   consts->MaxColorTextureSamples = 1;
> +   consts->MaxDepthTextureSamples = 1;
> +   consts->MaxIntegerSamples = 1;
>  
>     /* GL_ARB_shader_atomic_counters */
> -   ctx->Const.MaxAtomicBufferBindings = MAX_COMBINED_ATOMIC_BUFFERS;
> -   ctx->Const.MaxAtomicBufferSize = MAX_ATOMIC_COUNTERS * ATOMIC_COUNTER_SIZE;
> -   ctx->Const.MaxCombinedAtomicBuffers = MAX_COMBINED_ATOMIC_BUFFERS;
> -   ctx->Const.MaxCombinedAtomicCounters = MAX_ATOMIC_COUNTERS;
> +   consts->MaxAtomicBufferBindings = MAX_COMBINED_ATOMIC_BUFFERS;
> +   consts->MaxAtomicBufferSize = MAX_ATOMIC_COUNTERS * ATOMIC_COUNTER_SIZE;
> +   consts->MaxCombinedAtomicBuffers = MAX_COMBINED_ATOMIC_BUFFERS;
> +   consts->MaxCombinedAtomicCounters = MAX_ATOMIC_COUNTERS;
>  
>     /* GL_ARB_vertex_attrib_binding */
> -   ctx->Const.MaxVertexAttribRelativeOffset = 2047;
> -   ctx->Const.MaxVertexAttribBindings = MAX_VERTEX_GENERIC_ATTRIBS;
> +   consts->MaxVertexAttribRelativeOffset = 2047;
> +   consts->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;
> -   ctx->Const.MaxComputeWorkGroupInvocations = 1024;
> +   consts->MaxComputeWorkGroupCount[0] = 65535;
> +   consts->MaxComputeWorkGroupCount[1] = 65535;
> +   consts->MaxComputeWorkGroupCount[2] = 65535;
> +   consts->MaxComputeWorkGroupSize[0] = 1024;
> +   consts->MaxComputeWorkGroupSize[1] = 1024;
> +   consts->MaxComputeWorkGroupSize[2] = 64;
> +   consts->MaxComputeWorkGroupInvocations = 1024;
>  
>     /** GL_ARB_gpu_shader5 */
> -   ctx->Const.MinFragmentInterpolationOffset = MIN_FRAGMENT_INTERPOLATION_OFFSET;
> -   ctx->Const.MaxFragmentInterpolationOffset = MAX_FRAGMENT_INTERPOLATION_OFFSET;
> +   consts->MinFragmentInterpolationOffset = MIN_FRAGMENT_INTERPOLATION_OFFSET;
> +   consts->MaxFragmentInterpolationOffset = MAX_FRAGMENT_INTERPOLATION_OFFSET;
>  }
>  
>  
> @@ -790,7 +790,7 @@ init_attrib_groups(struct gl_context *ctx)
>     assert(ctx);
>  
>     /* Constants */
> -   _mesa_init_constants( ctx );
> +   _mesa_init_constants(&ctx->Const, ctx->API);
>  
>     /* Extensions */
>     _mesa_init_extensions(&ctx->Extensions);
> diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h
> index 792ab4c..d902ea7 100644
> --- a/src/mesa/main/context.h
> +++ b/src/mesa/main/context.h
> @@ -144,6 +144,9 @@ _mesa_get_current_context(void);
>  /*@}*/
>  
>  extern void
> +_mesa_init_constants(struct gl_constants *consts, gl_api api);
> +
> +extern void
>  _mesa_init_get_hash(struct gl_context *ctx);
>  
>  extern void
> 



More information about the mesa-dev mailing list