[Mesa-dev] [PATCH 2/9] mesa: Add state and getters for the GL_ARB_uniform_buffer_object maximums.

Kenneth Graunke kenneth at whitecape.org
Wed Jun 20 02:51:06 PDT 2012


On 06/18/2012 06:35 PM, Eric Anholt wrote:
> Fixes piglit GL_ARB_uniform_buffer_object/minmax.
> ---
>  src/mesa/main/context.c |    9 +++++++++
>  src/mesa/main/get.c     |   30 ++++++++++++++++++++++++++++++
>  src/mesa/main/mtypes.h  |   12 ++++++++++++
>  3 files changed, 51 insertions(+)
> 
> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
> index 3bcedec..643476b 100644
> --- a/src/mesa/main/context.c
> +++ b/src/mesa/main/context.c
> @@ -542,6 +542,9 @@ init_program_limits(GLenum type, struct gl_program_constants *prog)
>     prog->MediumInt.RangeMax = 24;
>     prog->MediumInt.Precision = 0;
>     prog->LowInt = prog->HighInt = prog->MediumInt;
> +
> +   prog->MaxUniformBlocks = 12;
> +   prog->MaxCombinedUniformComponents = prog->MaxUniformComponents;
>  }
>  
>  
> @@ -653,6 +656,12 @@ _mesa_init_constants(struct gl_context *ctx)
>     ctx->Const.MaxTransformFeedbackSeparateComponents = 4 * MAX_FEEDBACK_ATTRIBS;
>     ctx->Const.MaxTransformFeedbackInterleavedComponents = 4 * MAX_FEEDBACK_ATTRIBS;
>  
> +   /** GL_ARB_uniform_buffer_object */
> +   ctx->Const.MaxCombinedUniformBlocks = 36;
> +   ctx->Const.MaxUniformBufferBindings = 36;
> +   ctx->Const.MaxUniformBlockSize = 16384;
> +   ctx->Const.UniformBufferOffsetAlignment = 1;
> +
>     /* GL 3.2: hard-coded for now: */
>     ctx->Const.ProfileMask = GL_CONTEXT_COMPATIBILITY_PROFILE_BIT;
>  
> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
> index 8dc4730..bbbaddd 100644
> --- a/src/mesa/main/get.c
> +++ b/src/mesa/main/get.c
> @@ -289,6 +289,12 @@ static const int extra_ARB_sampler_objects[] = {
>     EXTRA_END
>  };
>  
> +static const int extra_ARB_uniform_buffer_object_and_geometry_shader[] = {
> +   EXT(ARB_sampler_objects),

I think you mean ARB_uniform_buffer_object here (looks like cut&paste).

Otherwise, LGTM.  With that fixed,
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

> +   EXT(ARB_geometry_shader4),
> +   EXTRA_END
> +};
> +
>  
>  EXTRA_EXT(ARB_ES2_compatibility);
>  EXTRA_EXT(ARB_texture_cube_map);
> @@ -335,6 +341,7 @@ EXTRA_EXT(EXT_framebuffer_sRGB);
>  EXTRA_EXT(ARB_texture_buffer_object);
>  EXTRA_EXT(OES_EGL_image_external);
>  EXTRA_EXT(ARB_blend_func_extended);
> +EXTRA_EXT(ARB_uniform_buffer_object);
>  
>  static const int
>  extra_ARB_vertex_program_ARB_fragment_program_NV_vertex_program[] = {
> @@ -1321,6 +1328,29 @@ static const struct value_desc values[] = {
>  
>     { GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, CONTEXT_INT(Const.MaxDualSourceDrawBuffers), extra_ARB_blend_func_extended },
>  
> +   /* GL_ARB_uniform_buffer_object */
> +   { GL_MAX_VERTEX_UNIFORM_BLOCKS, CONTEXT_INT(Const.VertexProgram.MaxUniformBlocks),
> +     extra_ARB_uniform_buffer_object },
> +   { GL_MAX_FRAGMENT_UNIFORM_BLOCKS, CONTEXT_INT(Const.FragmentProgram.MaxUniformBlocks),
> +     extra_ARB_uniform_buffer_object },
> +   { GL_MAX_GEOMETRY_UNIFORM_BLOCKS, CONTEXT_INT(Const.GeometryProgram.MaxUniformBlocks),
> +     extra_ARB_uniform_buffer_object_and_geometry_shader },
> +   { GL_MAX_COMBINED_UNIFORM_BLOCKS, CONTEXT_INT(Const.MaxCombinedUniformBlocks),
> +     extra_ARB_uniform_buffer_object },
> +   { GL_MAX_UNIFORM_BLOCK_SIZE, CONTEXT_INT(Const.MaxUniformBlockSize),
> +     extra_ARB_uniform_buffer_object },
> +   { GL_MAX_UNIFORM_BUFFER_BINDINGS, CONTEXT_INT(Const.MaxUniformBufferBindings),
> +     extra_ARB_uniform_buffer_object },
> +
> +   { GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, CONTEXT_INT(Const.VertexProgram.MaxCombinedUniformComponents),
> +     extra_ARB_uniform_buffer_object },
> +   { GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, CONTEXT_INT(Const.FragmentProgram.MaxCombinedUniformComponents),
> +     extra_ARB_uniform_buffer_object },
> +   { GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS, CONTEXT_INT(Const.GeometryProgram.MaxCombinedUniformComponents),
> +     extra_ARB_uniform_buffer_object_and_geometry_shader },
> +   { GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, CONTEXT_INT(Const.UniformBufferOffsetAlignment),
> +     extra_ARB_uniform_buffer_object },
> +
>  #endif /* FEATURE_GL */
>  };
>  
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index 3d18b7c..f70df8a 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -2709,6 +2709,9 @@ struct gl_program_constants
>     /* ES 2.0 and GL_ARB_ES2_compatibility */
>     struct gl_precision LowFloat, MediumFloat, HighFloat;
>     struct gl_precision LowInt, MediumInt, HighInt;
> +   /* GL_ARB_uniform_buffer_object */
> +   GLuint MaxUniformBlocks;
> +   GLuint MaxCombinedUniformComponents;
>  };
>  
>  
> @@ -2774,6 +2777,15 @@ struct gl_constants
>     GLuint MaxVertexVaryingComponents;   /**< Between vert and geom shader */
>     GLuint MaxGeometryVaryingComponents; /**< Between geom and frag shader */
>  
> +   /** @{
> +    * GL_ARB_uniform_buffer_object
> +    */
> +   GLuint MaxCombinedUniformBlocks;
> +   GLuint MaxUniformBufferBindings;
> +   GLuint MaxUniformBlockSize;
> +   GLuint UniformBufferOffsetAlignment;
> +   /** @} */
> +
>     /** GL_ARB_geometry_shader4 */
>     GLuint MaxGeometryOutputVertices;
>     GLuint MaxGeometryTotalOutputComponents;


More information about the mesa-dev mailing list