[Mesa-dev] [PATCH 2/4] glsl: Move initialize_context() to glsl_parser_extras.cpp so it can be re-used.
Chad Versace
chad at chad-versace.us
Wed Jul 20 07:55:56 PDT 2011
Comments below.
On 07/18/2011 11:37 AM, Paul Berry wrote:
> This function is used by main.cpp to initialize a context to a default
> configuration for use in compiling builtins. Moved the bulk of it to
> glsl_parser_extras.cpp so that it can be re-used in testing.
> ---
> src/glsl/glsl_parser_extras.cpp | 33 +++++++++++++++++++++++++++++++++
> src/glsl/glsl_parser_extras.h | 11 +++++++++++
> src/glsl/main.cpp | 25 +------------------------
> 3 files changed, 45 insertions(+), 24 deletions(-)
>
> diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
> index cc78137..936dbcc 100644
> --- a/src/glsl/glsl_parser_extras.cpp
> +++ b/src/glsl/glsl_parser_extras.cpp
> @@ -926,6 +926,39 @@ do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iteration
> return progress;
> }
>
> +void initialize_context_to_defaults(struct gl_context *ctx, gl_api api)
> +{
> + memset(ctx, 0, sizeof(*ctx));
> +
> + ctx->API = api;
> +
> + ctx->Extensions.ARB_ES2_compatibility = GL_TRUE;
> + ctx->Extensions.ARB_draw_buffers = GL_TRUE;
> + ctx->Extensions.ARB_draw_instanced = GL_TRUE;
> + ctx->Extensions.ARB_fragment_coord_conventions = GL_TRUE;
> + ctx->Extensions.EXT_texture_array = GL_TRUE;
> + ctx->Extensions.NV_texture_rectangle = GL_TRUE;
> + ctx->Extensions.EXT_texture3D = GL_TRUE;
> +
> + ctx->Const.GLSLVersion = 120;
> +
> + /* 1.10 minimums. */
> + ctx->Const.MaxLights = 8;
There is conflict here. The GLSL vrsion is 1.20, but the comment says 1.10.
The minimum values below are identical for both versions, so I can't determine
which is correct---1.10 or 1.20.
> + ctx->Const.MaxClipPlanes = 6;
> + ctx->Const.MaxTextureUnits = 2;
> + ctx->Const.MaxTextureCoordUnits = 2;
> + ctx->Const.VertexProgram.MaxAttribs = 16;
> +
> + ctx->Const.VertexProgram.MaxUniformComponents = 512;
> + ctx->Const.MaxVarying = 8;
> + ctx->Const.MaxVertexTextureImageUnits = 0;
> + ctx->Const.MaxCombinedTextureImageUnits = 2;
> + ctx->Const.MaxTextureImageUnits = 2;
> + ctx->Const.FragmentProgram.MaxUniformComponents = 64;
> +
> + ctx->Const.MaxDrawBuffers = 2;
^^^^^^^^^^^^^^^^^^^
For GLSL 1.10 and 1.20, the minimum gl_MaxDrawBuffers is 1.
Is there a reason why you chose 2? If so, it should be
documented why you deviated from the minimum value.
> +}
> +
> extern "C" {
>
> /**
> diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
> index 2f4d3cb..3f88abd 100644
> --- a/src/glsl/glsl_parser_extras.h
> +++ b/src/glsl/glsl_parser_extras.h
> @@ -33,6 +33,7 @@
>
> #include <stdlib.h>
> #include "glsl_symbol_table.h"
> +#include "main/mtypes.h"
>
> enum _mesa_glsl_parser_targets {
> vertex_shader,
> @@ -258,6 +259,16 @@ extern bool _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp,
> extern const char *
> _mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target);
>
> +/**
> + * Initialize the given gl_context structure to a reasonable set of
> + * defaults representing the minimum capabilities required by the
> + * OpenGL spec.
> + *
> + * This is used when compiling builtin functions and in testing, when
> + * we don't have a connection to an actual driver.
> + */
> +void initialize_context_to_defaults(struct gl_context *ctx, gl_api api);
> +
>
> #endif /* __cplusplus */
>
> diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
> index 7952bb1..4cfcf0c 100644
> --- a/src/glsl/main.cpp
> +++ b/src/glsl/main.cpp
> @@ -66,43 +66,20 @@ _mesa_new_shader(struct gl_context *ctx, GLuint name, GLenum type)
> static void
> initialize_context(struct gl_context *ctx, gl_api api)
> {
> - memset(ctx, 0, sizeof(*ctx));
> -
> - ctx->API = api;
> -
> - ctx->Extensions.ARB_ES2_compatibility = GL_TRUE;
> - ctx->Extensions.ARB_draw_buffers = GL_TRUE;
> - ctx->Extensions.ARB_draw_instanced = GL_TRUE;
> - ctx->Extensions.ARB_fragment_coord_conventions = GL_TRUE;
> - ctx->Extensions.EXT_texture_array = GL_TRUE;
> - ctx->Extensions.NV_texture_rectangle = GL_TRUE;
> - ctx->Extensions.EXT_texture3D = GL_TRUE;
> + initialize_context_to_defaults(ctx, api);
>
> /* GLSL 1.30 isn't fully supported, but we need to advertise 1.30 so that
> * the built-in functions for 1.30 can be built.
> */
> ctx->Const.GLSLVersion = 130;
>
> - /* 1.10 minimums. */
> - ctx->Const.MaxLights = 8;
> ctx->Const.MaxClipPlanes = 8;
> - ctx->Const.MaxTextureUnits = 2;
>
> /* More than the 1.10 minimum to appease parser tests taken from
> * apps that (hopefully) already checked the number of coords.
> */
> ctx->Const.MaxTextureCoordUnits = 4;
>
> - ctx->Const.VertexProgram.MaxAttribs = 16;
> - ctx->Const.VertexProgram.MaxUniformComponents = 512;
> - ctx->Const.MaxVarying = 8;
> - ctx->Const.MaxVertexTextureImageUnits = 0;
> - ctx->Const.MaxCombinedTextureImageUnits = 2;
> - ctx->Const.MaxTextureImageUnits = 2;
> - ctx->Const.FragmentProgram.MaxUniformComponents = 64;
> -
> - ctx->Const.MaxDrawBuffers = 2;
> -
> ctx->Driver.NewShader = _mesa_new_shader;
> }
>
--
Chad Versace
chad at chad-versace.us
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 900 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20110720/bb71c8de/attachment.pgp>
More information about the mesa-dev
mailing list