diff options
Diffstat (limited to 'mesalib')
60 files changed, 1806 insertions, 2006 deletions
| diff --git a/mesalib/configs/default b/mesalib/configs/default index 1f167b58e..85a863f30 100644 --- a/mesalib/configs/default +++ b/mesalib/configs/default @@ -8,8 +8,8 @@  CONFIG_NAME = default  # Version info -MESA_MAJOR=8 -MESA_MINOR=1 +MESA_MAJOR=9 +MESA_MINOR=0  MESA_TINY=0  MESA_VERSION = $(MESA_MAJOR).$(MESA_MINOR).$(MESA_TINY) diff --git a/mesalib/configure.ac b/mesalib/configure.ac index c30bcf05c..3355488f4 100644 --- a/mesalib/configure.ac +++ b/mesalib/configure.ac @@ -28,7 +28,7 @@ LT_INIT([disable-static])  dnl Versions for external dependencies  LIBDRM_REQUIRED=2.4.24 -LIBDRM_RADEON_REQUIRED=2.4.38 +LIBDRM_RADEON_REQUIRED=2.4.39  LIBDRM_INTEL_REQUIRED=2.4.38  LIBDRM_NVVIEUX_REQUIRED=2.4.33  LIBDRM_NOUVEAU_REQUIRED=2.4.33 @@ -644,7 +644,7 @@ GALLIUM_DRIVERS_DEFAULT="r300,r600,svga,swrast"  AC_ARG_WITH([gallium-drivers],      [AS_HELP_STRING([--with-gallium-drivers@<:@=DIRS...@:>@],          [comma delimited Gallium drivers list, e.g. -        "i915,nouveau,r300,r600,svga,swrast" +        "i915,nouveau,r300,r600,radeonsi,svga,swrast"          @<:@default=r300,r600,swrast@:>@])],      [with_gallium_drivers="$withval"],      [with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT"]) diff --git a/mesalib/docs/GL3.txt b/mesalib/docs/GL3.txt index 1d5528236..24b70a1a2 100644 --- a/mesalib/docs/GL3.txt +++ b/mesalib/docs/GL3.txt @@ -42,13 +42,13 @@ GLX_ARB_create_context (GLX 1.4 is required)          DONE  GL 3.1: -GLSL 1.40                                             needs UBOs (in progress) -Forward compatibile context support/deprecations      not started +GLSL 1.40                                             DONE (i965) +Forward compatibile context support/deprecations      DONE (i965)  Instanced drawing (GL_ARB_draw_instanced)             DONE (i965, gallium, swrast)  Buffer copying (GL_ARB_copy_buffer)                   DONE (i965, r300, r600, swrast)  Primitive restart (GL_NV_primitive_restart)           DONE (i965, r600)  16 vertex texture image units                         DONE -Texture buffer objs (GL_ARB_texture_buffer_object)    needs GL3.1 enabling (i965) +Texture buffer objs (GL_ARB_texture_buffer_object)    DONE for OpenGL 3.1 contexts (i965)  Rectangular textures (GL_ARB_texture_rectangle)       DONE (i965, r300, r600, swrast)  Uniform buffer objs (GL_ARB_uniform_buffer_object)    DONE (i965)  Signed normalized textures (GL_EXT_texture_snorm)     DONE (i965, r300, r600) @@ -56,7 +56,7 @@ Signed normalized textures (GL_EXT_texture_snorm)     DONE (i965, r300, r600)  GL 3.2: -Core/compatibility profiles                           not started +Core/compatibility profiles                           DONE  GLSL 1.50                                             not started  Geometry shaders (GL_ARB_geometry_shader4)            partially done (Zack)  BGRA vertex order (GL_ARB_vertex_array_bgra)          DONE (i965, r300, r600, swrast) diff --git a/mesalib/docs/helpwanted.html b/mesalib/docs/helpwanted.html index e452689ac..4ea7eab4d 100644 --- a/mesalib/docs/helpwanted.html +++ b/mesalib/docs/helpwanted.html @@ -31,11 +31,6 @@ issues in the code.  <b>Windows driver building, testing and maintenance.</b>  Fixing MSVC builds.  <li> -<b>Maintenance and testing of lesser-used drivers.</b> -Drivers such as i810, mach64, mga, r128, savage, sis, tdfx, unichrome, etc that aren't being maintained are being -deprecated starting in Mesa 8.0.<br> -They have to be ported to DRI2 to be accepted in mesa master again. -<li>  <b>Contribute more tests to  <a href="http://piglit.freedesktop.org/" target="_parent">Piglit</a>.</b>  <li> @@ -56,6 +51,8 @@ You can find some further To-do lists here:      target="_parent"><b>LLVMpipe - todo</b></a></li>    <li><a href="http://dri.freedesktop.org/wiki/MissingFunctionality"      target="_parent"><b>MissingFunctionality</b></a></li> +  <li><a href="http://dri.freedesktop.org/wiki/RadeonsiToDo" +    target="_parent"><b>RadeonsiToDo</b></a></li>    <li><a href="http://dri.freedesktop.org/wiki/R600ToDo"      target="_parent"><b>R600ToDo</b></a></li>    <li><a href="http://dri.freedesktop.org/wiki/R300ToDo" diff --git a/mesalib/docs/intro.html b/mesalib/docs/intro.html index ef04f357e..3f21b9353 100644 --- a/mesalib/docs/intro.html +++ b/mesalib/docs/intro.html @@ -166,6 +166,17 @@ of the OpenGL specification is implemented.  </p> +<h2>Version 9.x features</h2> +<p> +Version 9.x of Mesa implements the OpenGL 3.1 API. +While the driver for Intel Sandy Bridge and Ivy Bridge is the only +driver to support OpenGL 3.1, many developers across the open-source +community contributed features required for OpenGL 3.1.  The primary +features added since the Mesa 8.0 release are +GL_ARB_texture_buffer_object and GL_ARB_uniform_buffer_object. +</p> + +  <h2>Version 8.x features</h2>  <p>  Version 8.x of Mesa implements the OpenGL 3.0 API. diff --git a/mesalib/docs/relnotes-8.1.html b/mesalib/docs/relnotes-9.0.html index 8d27c6663..164c8e91d 100644 --- a/mesalib/docs/relnotes-8.1.html +++ b/mesalib/docs/relnotes-9.0.html @@ -7,15 +7,20 @@  </head>  <body> -<h1>Mesa 8.1 Release Notes / date TBD</h1> +<h1>Mesa 9.0 Release Notes / date TBD</h1>  <p> -Mesa 8.1 is a new development release. +Mesa 9.0 is a new development release. +People who are concerned with stability and reliability should stick +with a previous release or wait for Mesa 9.0.1.  </p>  <p> -Mesa 8.1 implements the OpenGL 3.0 API, but the version reported by -glGetString(GL_VERSION) depends on the particular driver being used. -Some drivers don't support all the features required in OpenGL 3.0. +Mesa 9.0 implements the OpenGL 3.1 API, but the version reported by +glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) / +glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used. +Some drivers don't support all the features required in OpenGL 3.1.  OpenGL +3.1 is <strong>only</strong> available if requested at context creation +because GL_ARB_compatibility is not supported.  </p> @@ -38,9 +43,11 @@ Note: some of the new features are only available with certain drivers.  <li>GL_ARB_invalidate_subdate - Currently a "no-op" implementation.  This  extension is always enabled in all drivers.</li>  <li>GL_ARB_shader_bit_encoding</li> +<li>GL_ARB_texture_buffer_object</li>  <li>GL_ARB_timer_query</li>  <li>GL_ARB_transform_feedback3</li>  <li>GL_ARB_transform_feedback_instanced</li> +<li>GL_ARB_uniform_buffer_object</li>  <li>GL_EXT_unpack_subimage for ES 2.0</li>  <li>GL_EXT_read_format_bgra for ES 1.1 and 2.0</li>  <li>GL_EXT_texture_rg for ES 2.x</li> diff --git a/mesalib/docs/utilities.html b/mesalib/docs/utilities.html index 8dd1df08e..062cdc5c1 100644 --- a/mesalib/docs/utilities.html +++ b/mesalib/docs/utilities.html @@ -9,19 +9,25 @@  <h1>Development Utilities</h1> -<ul> +<dl> +  <dt><a href="http://cgit.freedesktop.org/mesa/demos" +    target="_parent">Mesa demos collection</a></dt> +  <dd>includes several utility routines in the <code>src/util/</code> +  directory.</dd> -<li>The Mesa distribution includes several utility routines in the -progs/util/ directory +  <dt><a href="http://piglit.freedesktop.org" +    target="_parent">Piglit</a></dt> +  <dd>is an open-source test suite for OpenGL implementations.</dd> -<li>Allen Akin's <a href="http://glean.sourceforge.net/" -target="_parent">glean</a> is a framework for OpenGL testing. +  <dt><a href="https://github.com/apitrace/apitrace" +    target="_parent">ApiTrace</a></dt> +  <dd>is a project to trace, analyze and debug graphics api's.</dd> -<li><a href="http://www.valgrind.org" -target="_parent">Valgrind</a> is a very useful tool for tracking down -memory-related problems in your code. - -</ul> +  <dt><a href="http://www.valgrind.org" +    target="_parent">Valgrind</a></dt> +  <dd>is a very useful tool for tracking down +  memory-related problems in your code.</dd> +</dl>  </body>  </html> diff --git a/mesalib/src/gallium/auxiliary/util/u_blitter.c b/mesalib/src/gallium/auxiliary/util/u_blitter.c index ad4ccd9eb..44295c136 100644 --- a/mesalib/src/gallium/auxiliary/util/u_blitter.c +++ b/mesalib/src/gallium/auxiliary/util/u_blitter.c @@ -123,13 +123,6 @@ struct blitter_context_priv     boolean has_stencil_export;  }; -static void blitter_draw_rectangle(struct blitter_context *blitter, -                                   unsigned x, unsigned y, -                                   unsigned width, unsigned height, -                                   float depth, -                                   enum blitter_attrib_type type, -                                   const union pipe_color_union *attrib); -  struct blitter_context *util_blitter_create(struct pipe_context *pipe)  { @@ -146,7 +139,7 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe)        return NULL;     ctx->base.pipe = pipe; -   ctx->base.draw_rectangle = blitter_draw_rectangle; +   ctx->base.draw_rectangle = util_blitter_draw_rectangle;     /* init state objects for them to be considered invalid */     ctx->base.saved_blend_state = INVALID_PTR; @@ -862,12 +855,12 @@ static void blitter_draw(struct blitter_context_priv *ctx,     pipe_resource_reference(&buf, NULL);  } -static void blitter_draw_rectangle(struct blitter_context *blitter, -                                   unsigned x1, unsigned y1, -                                   unsigned x2, unsigned y2, -                                   float depth, -                                   enum blitter_attrib_type type, -                                   const union pipe_color_union *attrib) +void util_blitter_draw_rectangle(struct blitter_context *blitter, +                                 unsigned x1, unsigned y1, +                                 unsigned x2, unsigned y2, +                                 float depth, +                                 enum blitter_attrib_type type, +                                 const union pipe_color_union *attrib)  {     struct blitter_context_priv *ctx = (struct blitter_context_priv*)blitter; @@ -1499,6 +1492,7 @@ void util_blitter_custom_resolve_color(struct blitter_context *blitter,  				       unsigned dst_layer,  				       struct pipe_resource *src,  				       unsigned src_layer, +				       unsigned sample_mask,  				       void *custom_blend)  {     struct blitter_context_priv *ctx = (struct blitter_context_priv*)blitter; @@ -1515,7 +1509,7 @@ void util_blitter_custom_resolve_color(struct blitter_context *blitter,     pipe->bind_depth_stencil_alpha_state(pipe, ctx->dsa_keep_depth_stencil);     pipe->bind_vertex_elements_state(pipe, ctx->velem_state);     pipe->bind_fs_state(pipe, blitter_get_fs_col(ctx, 1, FALSE)); -   pipe->set_sample_mask(pipe, (1ull << MAX2(1, src->nr_samples)) - 1); +   pipe->set_sample_mask(pipe, sample_mask);     memset(&surf_tmpl, 0, sizeof(surf_tmpl));     surf_tmpl.format = dst->format; diff --git a/mesalib/src/gallium/auxiliary/util/u_blitter.h b/mesalib/src/gallium/auxiliary/util/u_blitter.h index e06e8b12d..680407381 100644 --- a/mesalib/src/gallium/auxiliary/util/u_blitter.h +++ b/mesalib/src/gallium/auxiliary/util/u_blitter.h @@ -129,6 +129,15 @@ struct pipe_context *util_blitter_get_pipe(struct blitter_context *blitter)     return blitter->pipe;  } +/* The default function to draw a rectangle. This can only be used + * inside of the draw_rectangle callback if the driver overrides it. */ +void util_blitter_draw_rectangle(struct blitter_context *blitter, +                                 unsigned x1, unsigned y1, +                                 unsigned x2, unsigned y2, +                                 float depth, +                                 enum blitter_attrib_type type, +                                 const union pipe_color_union *attrib); +  /*   * These states must be saved before any of the following functions are called:   * - vertex buffers @@ -320,6 +329,7 @@ void util_blitter_custom_resolve_color(struct blitter_context *blitter,                                         unsigned dst_layer,                                         struct pipe_resource *src,                                         unsigned src_layer, +				       unsigned sampled_mask,                                         void *custom_blend);  /* The functions below should be used to save currently bound constant state diff --git a/mesalib/src/gallium/auxiliary/util/u_vbuf.c b/mesalib/src/gallium/auxiliary/util/u_vbuf.c index 4141ba536..52db294cb 100644 --- a/mesalib/src/gallium/auxiliary/util/u_vbuf.c +++ b/mesalib/src/gallium/auxiliary/util/u_vbuf.c @@ -225,7 +225,9 @@ u_vbuf_set_vertex_elements_internal(struct u_vbuf *mgr, unsigned count,     }     assert(ve); -   pipe->bind_vertex_elements_state(pipe, ve->driver_cso); + +   if (ve != mgr->ve) +	   pipe->bind_vertex_elements_state(pipe, ve->driver_cso);     return ve;  } diff --git a/mesalib/src/glsl/glsl_parser_extras.h b/mesalib/src/glsl/glsl_parser_extras.h index 66463c5b6..fc08ee273 100644 --- a/mesalib/src/glsl/glsl_parser_extras.h +++ b/mesalib/src/glsl/glsl_parser_extras.h @@ -96,7 +96,7 @@ struct _mesa_glsl_parse_state {      * Currently affects uniform blocks and uniform buffer variables in      * those blocks.      */ -   class ast_type_qualifier *default_uniform_qualifier; +   struct ast_type_qualifier *default_uniform_qualifier;     /**      * Printable list of GLSL versions supported by the current context diff --git a/mesalib/src/mapi/glapi/gen/es_EXT.xml b/mesalib/src/mapi/glapi/gen/es_EXT.xml index d012ccd5b..fc2ec621e 100644 --- a/mesalib/src/mapi/glapi/gen/es_EXT.xml +++ b/mesalib/src/mapi/glapi/gen/es_EXT.xml @@ -619,6 +619,32 @@  <!-- 69. GL_EXT_multi_draw_arrays --> +<!-- 71. GL_OES_vertex_array_object --> +<category name="GL_OES_vertex_array_object" number="71"> +    <function name="BindVertexArrayOES" alias="BindVertexArray"> +        <param name="array" type="GLuint"/> +    </function> + +    <function name="DeleteVertexArraysOES" alias="DeleteVertexArraysAPPLE"> +        <param name="n" type="GLsizei"/> +        <param name="arrays" type="const GLuint *" count="n"/> +    </function> + +    <function name="GenVertexArraysOES" alias="GenVertexArrays"> +        <param name="n" type="GLsizei"/> +        <param name="arrays" type="GLuint *" output="true" count="n"/> +    </function> + +    <function name="IsVertexArrayOES" alias="IsVertexArrayAPPLE"> +        <param name="array" type="GLuint"/> +        <return type="GLboolean"/> +    </function> + +    <enum name="VERTEX_ARRAY_BINDING_OES"      count="1"  value="0x85B5"> +        <size name="Get" mode="get"/> +    </enum> +</category> +  <!-- 87. GL_OES_EGL_image_external -->  <category name="GL_OES_EGL_image_external" number="87">      <enum name="TEXTURE_EXTERNAL_OES"                     value="0x8D65"/> diff --git a/mesalib/src/mapi/glapi/gen/gles_api.py b/mesalib/src/mapi/glapi/gen/gles_api.py index 70ae2e300..8dfef655a 100644 --- a/mesalib/src/mapi/glapi/gen/gles_api.py +++ b/mesalib/src/mapi/glapi/gen/gles_api.py @@ -449,6 +449,11 @@ es2_api = es2_core + (          # GL_OES_get_program_binary          'GetProgramBinaryOES',          'ProgramBinaryOES', +        # GL_OES_vertex_array_object +        'BindVertexArrayOES', +        'DeleteVertexArraysOES', +        'GenVertexArraysOES', +        'IsVertexArrayOES',          # GL_NV_draw_buffers          'DrawBuffersNV',          # GL_NV_read_buffer diff --git a/mesalib/src/mesa/Android.gen.mk b/mesalib/src/mesa/Android.gen.mk index 5443bb99f..f5e63234a 100644 --- a/mesalib/src/mesa/Android.gen.mk +++ b/mesalib/src/mesa/Android.gen.mk @@ -35,13 +35,10 @@ sources := \  	main/api_exec_es1.c \  	main/api_exec_es1_dispatch.h \  	main/api_exec_es1_remap_helper.h \ -	main/api_exec_es2.c \ -	main/api_exec_es2_dispatch.h \  	program/program_parse.tab.c \  	program/lex.yy.c \  	main/dispatch.h \ -	main/remap_helper.h \ -	main/api_exec_es2_remap_helper.h +	main/remap_helper.h  LOCAL_SRC_FILES := $(filter-out $(sources), $(LOCAL_SRC_FILES)) @@ -100,9 +97,6 @@ $(intermediates)/main/api_exec_%_remap_helper.h: PRIVATE_XML := -f $(glapi)/gl_a  $(intermediates)/main/api_exec_es1.c: $(es_src_deps)  	$(call es-gen, -V GLES1.1) -$(intermediates)/main/api_exec_es2.c: $(es_src_deps) -	$(call es-gen, -V GLES2.0) -  $(intermediates)/main/api_exec_%_dispatch.h: $(es_hdr_deps)  	$(call es-gen, -c $* -m remap_table) diff --git a/mesalib/src/mesa/Makefile.am b/mesalib/src/mesa/Makefile.am index 6964c8a68..57325afab 100644 --- a/mesalib/src/mesa/Makefile.am +++ b/mesalib/src/mesa/Makefile.am @@ -51,10 +51,7 @@ BUILT_SOURCES = \  	main/git_sha1.h \  	main/api_exec_es1_dispatch.h \  	main/api_exec_es1_remap_helper.h \ -	main/api_exec_es2_dispatch.h \ -	main/api_exec_es2_remap_helper.h \  	main/api_exec_es1.c \ -	main/api_exec_es2.c \  	program/program_parse.tab.c \  	program/program_parse.tab.h \  	program/lex.yy.c @@ -70,22 +67,10 @@ main/api_exec_es1_remap_helper.h: $(GLAPI)/gl_and_es_API.xml $(glapi_gen_remap_d  main/api_exec_es1.o: main/api_exec_es1_dispatch.h main/api_exec_es1_remap_helper.h -main/api_exec_es2_dispatch.h: $(GLAPI)/gl_and_es_API.xml $(glapi_gen_dispatch_deps) -	$(call glapi_gen_dispatch,$<,es2) - -main/api_exec_es2_remap_helper.h: $(GLAPI)/gl_and_es_API.xml $(glapi_gen_remap_deps) -	$(call glapi_gen_remap,$<,es2) - -main/api_exec_es2.o: main/api_exec_es2_dispatch.h main/api_exec_es2_remap_helper.h -  main/api_exec_es1.c: main/APIspec.xml main/es_generator.py main/APIspecutil.py main/APIspec.py  	$(AM_V_GEN) $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/main/es_generator.py \  	  -S $(srcdir)/main/APIspec.xml -V GLES1.1 > $@ -main/api_exec_es2.c: main/APIspec.xml main/es_generator.py main/APIspecutil.py main/APIspec.py -	$(AM_V_GEN) $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/main/es_generator.py \ -	  -S $(srcdir)/main/APIspec.xml -V GLES2.0 > $@ -  program/program_parse.tab.c program/program_parse.tab.h: program/program_parse.y  	$(MKDIR_P) program  	$(AM_V_GEN) $(YACC) -v -d --output=program/program_parse.tab.c $< diff --git a/mesalib/src/mesa/SConscript b/mesalib/src/mesa/SConscript index e2064ce73..920b545a8 100644 --- a/mesalib/src/mesa/SConscript +++ b/mesalib/src/mesa/SConscript @@ -31,6 +31,7 @@ if env['platform'] == 'windows':  else:      env.Append(CPPDEFINES = [          'IN_DRI_DRIVER', # enable the remap table (for DRI drivers) +        ('HAVE_DLOPEN', '1'),      ])  # @@ -344,12 +345,6 @@ if env['gles']:          source = 'main/APIspec.xml',          command = python_cmd + ' $SCRIPT -S $SOURCE -V GLES1.1 > $TARGET'      ) -    gles_sources += env.CodeGenerate( -        target = 'main/api_exec_es2.c', -        script = 'main/es_generator.py', -        source = 'main/APIspec.xml', -        command = python_cmd + ' $SCRIPT -S $SOURCE -V GLES2.0 > $TARGET' -    )      # generate GLES headers      gles_headers = [] @@ -365,18 +360,6 @@ if env['gles']:          source = GLAPI + 'gen/gl_and_es_API.xml',          command = python_cmd + ' $SCRIPT -c es1 -f $SOURCE > $TARGET',      ) -    gles_headers += env.CodeGenerate( -        target = 'main/api_exec_es2_dispatch.h', -        script = GLAPI + 'gen/gl_table.py', -        source = GLAPI + 'gen/gl_and_es_API.xml', -        command = python_cmd + ' $SCRIPT -c es2 -m remap_table -f $SOURCE > $TARGET', -    ) -    gles_headers += env.CodeGenerate( -        target = 'main/api_exec_es2_remap_helper.h', -        script = GLAPI + 'gen/remap_helper.py', -        source = GLAPI + 'gen/gl_and_es_API.xml', -        command = python_cmd + ' $SCRIPT -c es2 -f $SOURCE > $TARGET', -    )      env.Depends(gles_sources, gles_headers) diff --git a/mesalib/src/mesa/drivers/common/meta.c b/mesalib/src/mesa/drivers/common/meta.c index 7d7113c56..4b448fed5 100644 --- a/mesalib/src/mesa/drivers/common/meta.c +++ b/mesalib/src/mesa/drivers/common/meta.c @@ -282,6 +282,8 @@ struct gen_mipmap_state     GLuint VBO;     GLuint FBO;     GLuint Sampler; +   GLuint ShaderProg; +   GLuint IntegerShaderProg;  }; @@ -330,6 +332,8 @@ struct gl_meta_state  static void meta_glsl_blit_cleanup(struct gl_context *ctx, struct blit_state *blit);  static void cleanup_temp_texture(struct gl_context *ctx, struct temp_texture *tex);  static void meta_glsl_clear_cleanup(struct gl_context *ctx, struct clear_state *clear); +static void meta_glsl_generate_mipmap_cleanup(struct gl_context *ctx, +                                              struct gen_mipmap_state *mipmap);  static GLuint  compile_shader_with_debug(struct gl_context *ctx, GLenum target, const GLcharARB *source) @@ -422,6 +426,7 @@ _mesa_meta_free(struct gl_context *ctx)     _mesa_make_current(ctx, NULL, NULL);     meta_glsl_blit_cleanup(ctx, &ctx->Meta->Blit);     meta_glsl_clear_cleanup(ctx, &ctx->Meta->Clear); +   meta_glsl_generate_mipmap_cleanup(ctx, &ctx->Meta->Mipmap);     cleanup_temp_texture(ctx, &ctx->Meta->TempTex);     if (old_context)        _mesa_make_current(old_context, old_context->WinSysDrawBuffer, old_context->WinSysReadBuffer); @@ -433,6 +438,35 @@ _mesa_meta_free(struct gl_context *ctx)  /** + * This is an alternative to _mesa_set_enable() to handle some special cases. + * See comments inside. + */ +static void +meta_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) +{ +   switch (cap) { +   case GL_MULTISAMPLE: +      /* We need to enable/disable multisample when using GLES but this enum +       * is not supported there. +       */ +      if (ctx->Multisample.Enabled == state) +         return; +      FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); +      ctx->Multisample.Enabled = state; +      break; +   default: +      _mesa_problem(ctx, "Unexpected cap in _meta_set_enable()"); +      return; +   } + +   if (ctx->Driver.Enable) { +      ctx->Driver.Enable(ctx, cap, state); +   } +} + + + +/**   * Enter meta state.  This is like a light-weight version of glPushAttrib   * but it also resets most GL state back to default values.   * @@ -549,8 +583,10 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)        save->PolygonCull = ctx->Polygon.CullFlag;        _mesa_PolygonMode(GL_FRONT_AND_BACK, GL_FILL);        _mesa_set_enable(ctx, GL_POLYGON_OFFSET_FILL, GL_FALSE); -      _mesa_set_enable(ctx, GL_POLYGON_SMOOTH, GL_FALSE); -      _mesa_set_enable(ctx, GL_POLYGON_STIPPLE, GL_FALSE); +      if (ctx->API == API_OPENGL) { +         _mesa_set_enable(ctx, GL_POLYGON_SMOOTH, GL_FALSE); +         _mesa_set_enable(ctx, GL_POLYGON_STIPPLE, GL_FALSE); +      }        _mesa_set_enable(ctx, GL_CULL_FACE, GL_FALSE);     } @@ -560,14 +596,14 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)     }     if (state & MESA_META_SHADER) { -      if (ctx->Extensions.ARB_vertex_program) { +      if (ctx->API == API_OPENGL && ctx->Extensions.ARB_vertex_program) {           save->VertexProgramEnabled = ctx->VertexProgram.Enabled;           _mesa_reference_vertprog(ctx, &save->VertexProgram,  				  ctx->VertexProgram.Current);           _mesa_set_enable(ctx, GL_VERTEX_PROGRAM_ARB, GL_FALSE);        } -      if (ctx->Extensions.ARB_fragment_program) { +      if (ctx->API == API_OPENGL && ctx->Extensions.ARB_fragment_program) {           save->FragmentProgramEnabled = ctx->FragmentProgram.Enabled;           _mesa_reference_fragprog(ctx, &save->FragmentProgram,  				  ctx->FragmentProgram.Current); @@ -603,25 +639,27 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)        save->EnvMode = ctx->Texture.Unit[0].EnvMode;        /* Disable all texture units */ -      for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { -         save->TexEnabled[u] = ctx->Texture.Unit[u].Enabled; -         save->TexGenEnabled[u] = ctx->Texture.Unit[u].TexGenEnabled; -         if (ctx->Texture.Unit[u].Enabled || -             ctx->Texture.Unit[u].TexGenEnabled) { -            _mesa_ActiveTextureARB(GL_TEXTURE0 + u); -            _mesa_set_enable(ctx, GL_TEXTURE_1D, GL_FALSE); -            _mesa_set_enable(ctx, GL_TEXTURE_2D, GL_FALSE); -            _mesa_set_enable(ctx, GL_TEXTURE_3D, GL_FALSE); -            if (ctx->Extensions.ARB_texture_cube_map) -               _mesa_set_enable(ctx, GL_TEXTURE_CUBE_MAP, GL_FALSE); -            if (ctx->Extensions.NV_texture_rectangle) -               _mesa_set_enable(ctx, GL_TEXTURE_RECTANGLE, GL_FALSE); -            if (ctx->Extensions.OES_EGL_image_external) -               _mesa_set_enable(ctx, GL_TEXTURE_EXTERNAL_OES, GL_FALSE); -            _mesa_set_enable(ctx, GL_TEXTURE_GEN_S, GL_FALSE); -            _mesa_set_enable(ctx, GL_TEXTURE_GEN_T, GL_FALSE); -            _mesa_set_enable(ctx, GL_TEXTURE_GEN_R, GL_FALSE); -            _mesa_set_enable(ctx, GL_TEXTURE_GEN_Q, GL_FALSE); +      if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { +         for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { +            save->TexEnabled[u] = ctx->Texture.Unit[u].Enabled; +            save->TexGenEnabled[u] = ctx->Texture.Unit[u].TexGenEnabled; +            if (ctx->Texture.Unit[u].Enabled || +                ctx->Texture.Unit[u].TexGenEnabled) { +               _mesa_ActiveTextureARB(GL_TEXTURE0 + u); +               _mesa_set_enable(ctx, GL_TEXTURE_1D, GL_FALSE); +               _mesa_set_enable(ctx, GL_TEXTURE_2D, GL_FALSE); +               _mesa_set_enable(ctx, GL_TEXTURE_3D, GL_FALSE); +               if (ctx->Extensions.ARB_texture_cube_map) +                  _mesa_set_enable(ctx, GL_TEXTURE_CUBE_MAP, GL_FALSE); +               if (ctx->Extensions.NV_texture_rectangle) +                  _mesa_set_enable(ctx, GL_TEXTURE_RECTANGLE, GL_FALSE); +               if (ctx->Extensions.OES_EGL_image_external) +                  _mesa_set_enable(ctx, GL_TEXTURE_EXTERNAL_OES, GL_FALSE); +               _mesa_set_enable(ctx, GL_TEXTURE_GEN_S, GL_FALSE); +               _mesa_set_enable(ctx, GL_TEXTURE_GEN_T, GL_FALSE); +               _mesa_set_enable(ctx, GL_TEXTURE_GEN_R, GL_FALSE); +               _mesa_set_enable(ctx, GL_TEXTURE_GEN_Q, GL_FALSE); +            }           }        } @@ -634,7 +672,9 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)        /* set defaults for unit[0] */        _mesa_ActiveTextureARB(GL_TEXTURE0);        _mesa_ClientActiveTextureARB(GL_TEXTURE0); -      _mesa_TexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); +      if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { +         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); +      }     }     if (state & MESA_META_TRANSFORM) { @@ -744,7 +784,7 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)     if (state & MESA_META_MULTISAMPLE) {        save->MultisampleEnabled = ctx->Multisample.Enabled;        if (ctx->Multisample.Enabled) -         _mesa_set_enable(ctx, GL_MULTISAMPLE, GL_FALSE); +         meta_set_enable(ctx, GL_MULTISAMPLE, GL_FALSE);     }     /* misc */ @@ -765,7 +805,7 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)  void  _mesa_meta_end(struct gl_context *ctx)  { -   struct save_state *save = &ctx->Meta->Save[--ctx->Meta->SaveStackDepth]; +   struct save_state *save = &ctx->Meta->Save[ctx->Meta->SaveStackDepth - 1];     const GLbitfield state = save->SavedState;     if (state & MESA_META_ALPHA_TEST) { @@ -840,11 +880,19 @@ _mesa_meta_end(struct gl_context *ctx)     }     if (state & MESA_META_RASTERIZATION) { -      _mesa_PolygonMode(GL_FRONT, save->FrontPolygonMode); -      _mesa_PolygonMode(GL_BACK, save->BackPolygonMode); -      _mesa_set_enable(ctx, GL_POLYGON_STIPPLE, save->PolygonStipple); +      /* Core context requires that front and back mode be the same. +       */ +      if (ctx->API == API_OPENGL_CORE) { +         _mesa_PolygonMode(GL_FRONT_AND_BACK, save->FrontPolygonMode); +      } else { +         _mesa_PolygonMode(GL_FRONT, save->FrontPolygonMode); +         _mesa_PolygonMode(GL_BACK, save->BackPolygonMode); +      } +      if (ctx->API == API_OPENGL) { +         _mesa_set_enable(ctx, GL_POLYGON_STIPPLE, save->PolygonStipple); +         _mesa_set_enable(ctx, GL_POLYGON_SMOOTH, save->PolygonSmooth); +      }        _mesa_set_enable(ctx, GL_POLYGON_OFFSET_FILL, save->PolygonOffset); -      _mesa_set_enable(ctx, GL_POLYGON_SMOOTH, save->PolygonSmooth);        _mesa_set_enable(ctx, GL_CULL_FACE, save->PolygonCull);     } @@ -855,7 +903,7 @@ _mesa_meta_end(struct gl_context *ctx)     }     if (state & MESA_META_SHADER) { -      if (ctx->Extensions.ARB_vertex_program) { +      if (ctx->API == API_OPENGL && ctx->Extensions.ARB_vertex_program) {           _mesa_set_enable(ctx, GL_VERTEX_PROGRAM_ARB,                            save->VertexProgramEnabled);           _mesa_reference_vertprog(ctx, &ctx->VertexProgram.Current,  @@ -863,7 +911,7 @@ _mesa_meta_end(struct gl_context *ctx)  	 _mesa_reference_vertprog(ctx, &save->VertexProgram, NULL);        } -      if (ctx->Extensions.ARB_fragment_program) { +      if (ctx->API == API_OPENGL && ctx->Extensions.ARB_fragment_program) {           _mesa_set_enable(ctx, GL_FRAGMENT_PROGRAM_ARB,                            save->FragmentProgramEnabled);           _mesa_reference_fragprog(ctx, &ctx->FragmentProgram.Current, @@ -896,7 +944,7 @@ _mesa_meta_end(struct gl_context *ctx)        _mesa_set_enable(ctx, GL_STENCIL_TEST, stencil->Enabled);        _mesa_ClearStencil(stencil->Clear); -      if (ctx->Extensions.EXT_stencil_two_side) { +      if (ctx->API == API_OPENGL && ctx->Extensions.EXT_stencil_two_side) {           _mesa_set_enable(ctx, GL_STENCIL_TEST_TWO_SIDE_EXT,                            stencil->TestTwoSide);           _mesa_ActiveStencilFaceEXT(stencil->ActiveFace @@ -928,7 +976,9 @@ _mesa_meta_end(struct gl_context *ctx)        ASSERT(ctx->Texture.CurrentUnit == 0);        /* restore texenv for unit[0] */ -      _mesa_TexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, save->EnvMode); +      if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { +         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, save->EnvMode); +      }        /* restore texture objects for unit[0] only */        for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++) { @@ -941,16 +991,18 @@ _mesa_meta_end(struct gl_context *ctx)        }        /* Restore fixed function texture enables, texgen */ -      for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { -	 if (ctx->Texture.Unit[u].Enabled != save->TexEnabled[u]) { -	    FLUSH_VERTICES(ctx, _NEW_TEXTURE); -	    ctx->Texture.Unit[u].Enabled = save->TexEnabled[u]; -	 } +      if (ctx->API == API_OPENGL || ctx->API == API_OPENGLES) { +         for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { +            if (ctx->Texture.Unit[u].Enabled != save->TexEnabled[u]) { +               FLUSH_VERTICES(ctx, _NEW_TEXTURE); +               ctx->Texture.Unit[u].Enabled = save->TexEnabled[u]; +            } -	 if (ctx->Texture.Unit[u].TexGenEnabled != save->TexGenEnabled[u]) { -	    FLUSH_VERTICES(ctx, _NEW_TEXTURE); -	    ctx->Texture.Unit[u].TexGenEnabled = save->TexGenEnabled[u]; -	 } +            if (ctx->Texture.Unit[u].TexGenEnabled != save->TexGenEnabled[u]) { +               FLUSH_VERTICES(ctx, _NEW_TEXTURE); +               ctx->Texture.Unit[u].TexGenEnabled = save->TexGenEnabled[u]; +            } +         }        }        /* restore current unit state */ @@ -1034,7 +1086,7 @@ _mesa_meta_end(struct gl_context *ctx)     if (state & MESA_META_MULTISAMPLE) {        if (ctx->Multisample.Enabled != save->MultisampleEnabled) -         _mesa_set_enable(ctx, GL_MULTISAMPLE, save->MultisampleEnabled); +         meta_set_enable(ctx, GL_MULTISAMPLE, save->MultisampleEnabled);     }     /* misc */ @@ -1048,6 +1100,8 @@ _mesa_meta_end(struct gl_context *ctx)     if (save->TransformFeedbackNeedsResume)        _mesa_ResumeTransformFeedback();  #endif + +   ctx->Meta->SaveStackDepth--;  } @@ -1400,7 +1454,8 @@ blitframebuffer_texture(struct gl_context *ctx,  	    _mesa_SamplerParameteri(sampler, GL_TEXTURE_SRGB_DECODE_EXT,  				GL_SKIP_DECODE_EXT);  	 } -         if (ctx->Extensions.EXT_framebuffer_sRGB) { +         if ((_mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_framebuffer_sRGB) +             || _mesa_is_gles3(ctx)) {              _mesa_set_enable(ctx, GL_FRAMEBUFFER_SRGB_EXT, GL_FALSE);           } @@ -1799,7 +1854,7 @@ meta_glsl_clear_init(struct gl_context *ctx, struct clear_state *clear)        "}\n";     const char *vs_int_source =        "#version 130\n" -      "attribute vec4 position;\n" +      "in vec4 position;\n"        "void main()\n"        "{\n"        "   gl_Position = position;\n" @@ -2913,6 +2968,157 @@ setup_texture_coords(GLenum faceTarget,  } +static void +setup_ff_generate_mipmap(struct gl_context *ctx, +                           struct gen_mipmap_state *mipmap) +{ +   struct vertex { +      GLfloat x, y, tex[3]; +   }; + +   if (mipmap->ArrayObj == 0) { +      /* one-time setup */ +      /* create vertex array object */ +      _mesa_GenVertexArraysAPPLE(1, &mipmap->ArrayObj); +      _mesa_BindVertexArrayAPPLE(mipmap->ArrayObj); + +      /* create vertex array buffer */ +      _mesa_GenBuffersARB(1, &mipmap->VBO); +      _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, mipmap->VBO); +      /* setup vertex arrays */ +      _mesa_VertexPointer(2, GL_FLOAT, sizeof(struct vertex), OFFSET(x)); +      _mesa_TexCoordPointer(3, GL_FLOAT, sizeof(struct vertex), OFFSET(tex)); +      _mesa_EnableClientState(GL_VERTEX_ARRAY); +      _mesa_EnableClientState(GL_TEXTURE_COORD_ARRAY); +   } + +   /* setup projection matrix */ +   _mesa_MatrixMode(GL_PROJECTION); +   _mesa_LoadIdentity(); +   _mesa_Ortho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); +} + + +static void +setup_glsl_generate_mipmap(struct gl_context *ctx, +                           struct gen_mipmap_state *mipmap) +{ +   struct vertex { +      GLfloat x, y, tex[3]; +   }; + +   static const char *vs_source = +      "attribute vec2 position;\n" +      "attribute vec3 textureCoords;\n" +      "varying vec3 texCoords;\n" +      "void main()\n" +      "{\n" +      "   texCoords = textureCoords;\n" +      "   gl_Position = vec4(position, 0.0, 1.0);\n" +      "}\n"; +   static const char *fs_source = +      "uniform sampler2D tex2d;\n" +      "varying vec3 texCoords;\n" +      "void main()\n" +      "{\n" +      "   gl_FragColor = texture2D(tex2d, texCoords.xy);\n" +      "}\n"; +  +   static const char *vs_int_source = +      "#version 130\n" +      "in vec2 position;\n" +      "in vec3 textureCoords;\n" +      "out vec3 texCoords;\n" +      "void main()\n" +      "{\n" +      "   texCoords = textureCoords;\n" +      "   gl_Position = gl_Vertex;\n" +      "}\n"; +   static const char *fs_int_source = +      "#version 130\n" +      "uniform isampler2D tex2d;\n" +      "in vec3 texCoords;\n" +      "out ivec4 out_color;\n" +      "\n" +      "void main()\n" +      "{\n" +      "   out_color = texture(tex2d, texCoords.xy);\n" +      "}\n"; +   GLuint vs, fs; + +   /* Check if already initialized */ +   if (mipmap->ArrayObj != 0) +      return; +   /* create vertex array object */ +   _mesa_GenVertexArrays(1, &mipmap->ArrayObj); +   _mesa_BindVertexArray(mipmap->ArrayObj); + +   /* create vertex array buffer */ +   _mesa_GenBuffersARB(1, &mipmap->VBO); +   _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, mipmap->VBO); + +   /* setup vertex arrays */ +   _mesa_VertexAttribPointerARB(0, 2, GL_FLOAT, GL_FALSE, +                                sizeof(struct vertex), OFFSET(x)); +   _mesa_VertexAttribPointerARB(1, 3, GL_FLOAT, GL_FALSE, +                                sizeof(struct vertex), OFFSET(tex)); + +   vs = compile_shader_with_debug(ctx, GL_VERTEX_SHADER, vs_source); +   fs = compile_shader_with_debug(ctx, GL_FRAGMENT_SHADER, fs_source); + +   mipmap->ShaderProg = _mesa_CreateProgramObjectARB(); +   _mesa_AttachShader(mipmap->ShaderProg, fs); +   _mesa_DeleteObjectARB(fs); +   _mesa_AttachShader(mipmap->ShaderProg, vs); +   _mesa_DeleteObjectARB(vs); +   _mesa_BindAttribLocationARB(mipmap->ShaderProg, 0, "position"); +   _mesa_BindAttribLocationARB(mipmap->ShaderProg, 1, "texcoords"); +   _mesa_EnableVertexAttribArrayARB(0); +   _mesa_EnableVertexAttribArrayARB(1); +   link_program_with_debug(ctx, mipmap->ShaderProg); + +   if ((_mesa_is_desktop_gl(ctx) && ctx->Const.GLSLVersion >= 130) || +       _mesa_is_gles3(ctx)){ +      vs = compile_shader_with_debug(ctx, GL_VERTEX_SHADER, vs_int_source); +      fs = compile_shader_with_debug(ctx, GL_FRAGMENT_SHADER, fs_int_source); + +      mipmap->IntegerShaderProg = _mesa_CreateProgramObjectARB(); +      _mesa_AttachShader(mipmap->IntegerShaderProg, fs); +      _mesa_DeleteObjectARB(fs); +      _mesa_AttachShader(mipmap->IntegerShaderProg, vs); +      _mesa_DeleteObjectARB(vs); +      _mesa_BindAttribLocationARB(mipmap->IntegerShaderProg, 0, "position"); +      _mesa_BindAttribLocationARB(mipmap->IntegerShaderProg, 1, "texcoords"); + +      /* Note that user-defined out attributes get automatically assigned +       * locations starting from 0, so we don't need to explicitly +       * BindFragDataLocation to 0. +       */ +      link_program_with_debug(ctx, mipmap->IntegerShaderProg); +   } +} + + +static void +meta_glsl_generate_mipmap_cleanup(struct gl_context *ctx, +                                 struct gen_mipmap_state *mipmap) +{ +   if (mipmap->ArrayObj == 0) +      return; +   _mesa_DeleteVertexArraysAPPLE(1, &mipmap->ArrayObj); +   mipmap->ArrayObj = 0; +   _mesa_DeleteBuffersARB(1, &mipmap->VBO); +   mipmap->VBO = 0; +   _mesa_DeleteObjectARB(mipmap->ShaderProg); +   mipmap->ShaderProg = 0; + +   if (mipmap->IntegerShaderProg) { +      _mesa_DeleteObjectARB(mipmap->IntegerShaderProg); +      mipmap->IntegerShaderProg = 0; +   } +} + +  /**   * Called via ctx->Driver.GenerateMipmap()   * Note: We don't yet support 3D textures, 1D/2D array textures or texture @@ -2933,10 +3139,12 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,     const GLboolean genMipmapSave = texObj->GenerateMipmap;     const GLenum srgbBufferSave = ctx->Color.sRGBEnabled;     const GLuint fboSave = ctx->DrawBuffer->Name; -   const GLuint original_active_unit = ctx->Texture.CurrentUnit; +   const GLuint currentTexUnitSave = ctx->Texture.CurrentUnit; +   const GLboolean use_glsl_version = ctx->Extensions.ARB_vertex_shader && +                                      ctx->Extensions.ARB_fragment_shader && +				      (ctx->API != API_OPENGLES);     GLenum faceTarget;     GLuint dstLevel; -   const GLuint border = 0;     const GLint slice = 0;     GLuint samplerSave; @@ -2956,36 +3164,31 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,     _mesa_meta_begin(ctx, MESA_META_ALL); -   samplerSave = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Sampler ? -      ctx->Texture.Unit[ctx->Texture.CurrentUnit].Sampler->Name : 0; - -   if (original_active_unit != 0) -      _mesa_BindTexture(target, texObj->Name); - -   if (mipmap->ArrayObj == 0) { -      /* one-time setup */ - -      /* create vertex array object */ -      _mesa_GenVertexArraysAPPLE(1, &mipmap->ArrayObj); -      _mesa_BindVertexArrayAPPLE(mipmap->ArrayObj); - -      /* create vertex array buffer */ -      _mesa_GenBuffersARB(1, &mipmap->VBO); -      _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, mipmap->VBO); -      _mesa_BufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(verts), -                          NULL, GL_DYNAMIC_DRAW_ARB); +   /* Choose between glsl version and fixed function version of +    * GenerateMipmap function. +    */ +   if (use_glsl_version) { +      setup_glsl_generate_mipmap(ctx, mipmap); -      /* setup vertex arrays */ -      _mesa_VertexPointer(2, GL_FLOAT, sizeof(struct vertex), OFFSET(x)); -      _mesa_TexCoordPointer(3, GL_FLOAT, sizeof(struct vertex), OFFSET(tex)); -      _mesa_EnableClientState(GL_VERTEX_ARRAY); -      _mesa_EnableClientState(GL_TEXTURE_COORD_ARRAY); +      if (texObj->_IsIntegerFormat) +         _mesa_UseProgramObjectARB(mipmap->IntegerShaderProg); +      else +         _mesa_UseProgramObjectARB(mipmap->ShaderProg);     }     else { -      _mesa_BindVertexArray(mipmap->ArrayObj); -      _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, mipmap->VBO); +      setup_ff_generate_mipmap(ctx, mipmap); +      _mesa_set_enable(ctx, target, GL_TRUE);     } +   _mesa_BindVertexArray(mipmap->ArrayObj); +   _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, mipmap->VBO); + +   samplerSave = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Sampler ? +      ctx->Texture.Unit[ctx->Texture.CurrentUnit].Sampler->Name : 0; + +   if (currentTexUnitSave != 0) +      _mesa_BindTexture(target, texObj->Name); +     if (!mipmap->FBO) {        _mesa_GenFramebuffersEXT(1, &mipmap->FBO);     } @@ -2993,12 +3196,25 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,     if (!mipmap->Sampler) {        _mesa_GenSamplers(1, &mipmap->Sampler);        _mesa_BindSampler(ctx->Texture.CurrentUnit, mipmap->Sampler); -      _mesa_SamplerParameteri(mipmap->Sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + +      if (use_glsl_version && texObj->_IsIntegerFormat) +         _mesa_SamplerParameteri(mipmap->Sampler, +	                         GL_TEXTURE_MIN_FILTER, +	                         GL_NEAREST_MIPMAP_NEAREST); +      else +         _mesa_SamplerParameteri(mipmap->Sampler, +	                         GL_TEXTURE_MIN_FILTER, +	                         GL_LINEAR_MIPMAP_LINEAR); +        _mesa_SamplerParameteri(mipmap->Sampler, GL_TEXTURE_MAG_FILTER, GL_LINEAR);        _mesa_SamplerParameteri(mipmap->Sampler, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);        _mesa_SamplerParameteri(mipmap->Sampler, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);        _mesa_SamplerParameteri(mipmap->Sampler, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); -      /* We don't want to encode or decode sRGB values; treat them as linear */ + +      /* We don't want to encode or decode sRGB values; treat them as linear. +       * This is not technically correct for GLES3 but we don't get any API +       * error at the moment. +       */        if (ctx->Extensions.EXT_texture_sRGB_decode) {           _mesa_SamplerParameteri(mipmap->Sampler, GL_TEXTURE_SRGB_DECODE_EXT,                 GL_SKIP_DECODE_EXT); @@ -3015,13 +3231,13 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,     else        assert(!genMipmapSave); -   if (ctx->Extensions.EXT_framebuffer_sRGB) { +   if ((ctx->Extensions.EXT_framebuffer_sRGB && +        _mesa_is_desktop_gl(ctx)) || +       _mesa_is_gles3(ctx)) {        _mesa_set_enable(ctx, GL_FRAMEBUFFER_SRGB_EXT, GL_FALSE);     } -   _mesa_set_enable(ctx, target, GL_TRUE); - -   /* setup texcoords (XXX what about border?) */ +  /* Setup texture coordinates */     setup_texture_coords(faceTarget,                          slice,                          0, 0, /* width, height never used here */ @@ -3031,22 +3247,18 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,                          verts[3].tex);     /* setup vertex positions */ -   verts[0].x = 0.0F; -   verts[0].y = 0.0F; -   verts[1].x = 1.0F; -   verts[1].y = 0.0F; -   verts[2].x = 1.0F; -   verts[2].y = 1.0F; -   verts[3].x = 0.0F; -   verts[3].y = 1.0F; -       -   /* upload new vertex data */ -   _mesa_BufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sizeof(verts), verts); - -   /* setup projection matrix */ -   _mesa_MatrixMode(GL_PROJECTION); -   _mesa_LoadIdentity(); -   _mesa_Ortho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); +   verts[0].x = -1.0F; +   verts[0].y = -1.0F; +   verts[1].x =  1.0F; +   verts[1].y = -1.0F; +   verts[2].x =  1.0F; +   verts[2].y =  1.0F; +   verts[3].x = -1.0F; +   verts[3].y =  1.0F; + +   /* upload vertex data */ +   _mesa_BufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(verts), +                       verts, GL_DYNAMIC_DRAW_ARB);     /* texture is already locked, unlock now */     _mesa_unlock_texture(ctx, texObj); @@ -3059,17 +3271,17 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,        GLenum status;        srcImage = _mesa_select_tex_image(ctx, texObj, faceTarget, srcLevel); -      assert(srcImage->Border == 0); /* XXX we can fix this */ +      assert(srcImage->Border == 0); -      /* src size w/out border */ -      srcWidth = srcImage->Width - 2 * border; -      srcHeight = srcImage->Height - 2 * border; -      srcDepth = srcImage->Depth - 2 * border; +      /* src size */ +      srcWidth = srcImage->Width; +      srcHeight = srcImage->Height; +      srcDepth = srcImage->Depth; -      /* new dst size w/ border */ -      dstWidth = MAX2(1, srcWidth / 2) + 2 * border; -      dstHeight = MAX2(1, srcHeight / 2) + 2 * border; -      dstDepth = MAX2(1, srcDepth / 2) + 2 * border; +      /* new dst size */ +      dstWidth = MAX2(1, srcWidth / 2); +      dstHeight = MAX2(1, srcHeight / 2); +      dstDepth = MAX2(1, srcDepth / 2);        if (dstWidth == srcImage->Width &&            dstHeight == srcImage->Height && @@ -3424,7 +3636,8 @@ decompress_texture_image(struct gl_context *ctx,        }        /* No sRGB decode or encode.*/ -      if (ctx->Extensions.EXT_framebuffer_sRGB) { +      if ((_mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_framebuffer_sRGB) +          || _mesa_is_gles3(ctx)) {           _mesa_set_enable(ctx, GL_FRAMEBUFFER_SRGB_EXT, GL_FALSE);        } diff --git a/mesalib/src/mesa/drivers/dri/common/dri_util.c b/mesalib/src/mesa/drivers/dri/common/dri_util.c index 86409dd06..4276ad981 100644 --- a/mesalib/src/mesa/drivers/dri/common/dri_util.c +++ b/mesalib/src/mesa/drivers/dri/common/dri_util.c @@ -257,17 +257,17 @@ dri2CreateContextAttribs(__DRIscreen *screen, int api,       *     "Forward-compatible contexts are defined only for OpenGL versions       *     3.0 and later."       * -     * Moreover, Mesa can't fulfill the requirements of a forward-looking -     * context.  Return failure if a forward-looking context is requested. +     * Forward-looking contexts are supported by silently converting the +     * requested API to API_OPENGL_CORE.       *       * In Mesa, a debug context is the same as a regular context.       */      if ((flags & __DRI_CTX_FLAG_FORWARD_COMPATIBLE) != 0) { -	*error = __DRI_CTX_ERROR_BAD_FLAG; -	return NULL; +       mesa_api = API_OPENGL_CORE;      } -    if ((flags & ~__DRI_CTX_FLAG_DEBUG) != 0) { +    if ((flags & ~(__DRI_CTX_FLAG_DEBUG | __DRI_CTX_FLAG_FORWARD_COMPATIBLE)) +        != 0) {  	*error = __DRI_CTX_ERROR_UNKNOWN_FLAG;  	return NULL;      } diff --git a/mesalib/src/mesa/main/.gitignore b/mesalib/src/mesa/main/.gitignore index caed74f40..b26be227f 100644 --- a/mesalib/src/mesa/main/.gitignore +++ b/mesalib/src/mesa/main/.gitignore @@ -1,5 +1,4 @@  api_exec_es1.c -api_exec_es2.c  dispatch.h  enums.c  get_es1.c @@ -8,6 +7,4 @@ git_sha1.h  git_sha1.h.tmp  api_exec_es1_dispatch.h  api_exec_es1_remap_helper.h -api_exec_es2_dispatch.h -api_exec_es2_remap_helper.h  remap_helper.h diff --git a/mesalib/src/mesa/main/APIspec.xml b/mesalib/src/mesa/main/APIspec.xml index 3121226ca..a65c5c529 100644 --- a/mesalib/src/mesa/main/APIspec.xml +++ b/mesalib/src/mesa/main/APIspec.xml @@ -58,29 +58,6 @@  			<param name="param" type="GLtype"/>  		</vector>  	</proto> - -        <desc name="pname"> -		<value name="GL_FOG_MODE"/> -		<desc name="param"> -			<value name="GL_EXP"/> -			<value name="GL_EXP2"/> -			<value name="GL_LINEAR"/> -		</desc> -        </desc> - -	<desc name="pname"> -		<value name="GL_FOG_COLOR"/> - -		<desc name="params" vector_size="4"/> -	</desc> - -	<desc name="pname"> -		<value name="GL_FOG_DENSITY"/> -		<value name="GL_FOG_START"/> -		<value name="GL_FOG_END"/> - -		<desc name="params" vector_size="1"/> -	</desc>  </template>  <template name="FrontFace"> @@ -96,19 +73,6 @@  		<param name="target" type="GLenum"/>  		<param name="mode" type="GLenum"/>  	</proto> - -	<desc name="target" category="GLES1.1"> -		<value name="GL_FOG_HINT"/> -		<value name="GL_LINE_SMOOTH_HINT"/> -		<value name="GL_PERSPECTIVE_CORRECTION_HINT"/> -		<value name="GL_POINT_SMOOTH_HINT"/> -	</desc> -	<desc name="target" category="OES_standard_derivatives"> -		<value name="GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES"/> -	</desc> -	<desc name="target"> -		<value name="GL_GENERATE_MIPMAP_HINT"/> -	</desc>  </template>  <template name="Light"> @@ -130,20 +94,6 @@  			<param name="param" type="GLtype"/>  		</vector>  	</proto> - -	<desc name="pname"> -		<value name="GL_LIGHT_MODEL_AMBIENT"/> - -		<desc name="params" vector_size="4"/> -	</desc> - -	<desc name="pname"> -		<value name="GL_LIGHT_MODEL_TWO_SIDE"/> -		<desc name="param"> -			<value name="GL_TRUE"/> -			<value name="GL_FALSE"/> -		</desc> -	</desc>  </template>  <template name="LineWidth"> @@ -162,26 +112,6 @@  			<param name="param" type="GLtype"/>  		</vector>  	</proto> - -	<desc name="face"> -		<value name="GL_FRONT_AND_BACK"/> -	</desc> - -	<desc name="pname"> -		<value name="GL_AMBIENT"/> -		<value name="GL_DIFFUSE"/> -		<value name="GL_AMBIENT_AND_DIFFUSE"/> -		<value name="GL_SPECULAR"/> -		<value name="GL_EMISSION"/> - -		<desc name="params" vector_size="4"/> -	</desc> - -	<desc name="pname"> -		<value name="GL_SHININESS"/> - -		<desc name="params" vector_size="1"/> -	</desc>  </template>  <template name="PointSize"> @@ -252,155 +182,6 @@  			<param name="param" type="GLtype"/>  		</vector>  	</proto> - -	<desc name="target" category="OES_point_sprite"> -		<value name="GL_POINT_SPRITE_OES"/> - -		<desc name="pname"> -			<value name="GL_COORD_REPLACE_OES"/> -		</desc> -	</desc> - -	<desc name="pname" category="OES_point_sprite"> -		<value name="GL_COORD_REPLACE_OES"/> - -		<desc name="param"> -			<value name="GL_TRUE"/> -			<value name="GL_FALSE"/> -		</desc> -	</desc> - -	<desc name="target" category="EXT_texture_lod_bias"> -		<value name="GL_TEXTURE_FILTER_CONTROL_EXT"/> - -		<desc name="pname"> -			<value name="GL_TEXTURE_LOD_BIAS_EXT"/> -		</desc> -	</desc> - -	<desc name="pname" category="EXT_texture_lod_bias"> -		<value name="GL_TEXTURE_LOD_BIAS_EXT"/> -		<desc name="params" vector_size="1"/> -	</desc> - -	<desc name="target"> -		<value name="GL_TEXTURE_ENV"/> - -		<desc name="pname"> -			<value name="GL_TEXTURE_ENV_MODE"/> -			<value name="GL_COMBINE_RGB"/> -			<value name="GL_COMBINE_ALPHA"/> -			<value name="GL_RGB_SCALE"/> -			<value name="GL_ALPHA_SCALE"/> -			<value name="GL_SRC0_RGB"/> -			<value name="GL_SRC1_RGB"/> -			<value name="GL_SRC2_RGB"/> -			<value name="GL_SRC0_ALPHA"/> -			<value name="GL_SRC1_ALPHA"/> -			<value name="GL_SRC2_ALPHA"/> -			<value name="GL_OPERAND0_RGB"/> -			<value name="GL_OPERAND1_RGB"/> -			<value name="GL_OPERAND2_RGB"/> -			<value name="GL_OPERAND0_ALPHA"/> -			<value name="GL_OPERAND1_ALPHA"/> -			<value name="GL_OPERAND2_ALPHA"/> -			<value name="GL_TEXTURE_ENV_COLOR"/> -		</desc> -	</desc> - -	<desc name="pname"> -		<value name="GL_TEXTURE_ENV_MODE"/> - -		<desc name="param"> -			<value name="GL_REPLACE"/> -			<value name="GL_MODULATE"/> -			<value name="GL_DECAL"/> -			<value name="GL_BLEND"/> -			<value name="GL_ADD"/> -			<value name="GL_COMBINE"/> -		</desc> -	</desc> - -	<desc name="pname"> -		<value name="GL_COMBINE_RGB"/> - -		<desc name="param"> -			<value name="GL_REPLACE"/> -			<value name="GL_MODULATE"/> -			<value name="GL_ADD"/> -			<value name="GL_ADD_SIGNED"/> -			<value name="GL_INTERPOLATE"/> -			<value name="GL_SUBTRACT"/> -			<value name="GL_DOT3_RGB"/> -			<value name="GL_DOT3_RGBA"/> -		</desc> -	</desc> - -	<desc name="pname"> -		<value name="GL_COMBINE_ALPHA"/> - -		<desc name="param"> -			<value name="GL_REPLACE"/> -			<value name="GL_MODULATE"/> -			<value name="GL_ADD"/> -			<value name="GL_ADD_SIGNED"/> -			<value name="GL_INTERPOLATE"/> -			<value name="GL_SUBTRACT"/> -		</desc> -	</desc> - -	<desc name="pname"> -		<value name="GL_RGB_SCALE"/> -		<value name="GL_ALPHA_SCALE"/> -	</desc> - -	<desc name="pname"> -		<value name="GL_SRC0_RGB"/> -		<value name="GL_SRC1_RGB"/> -		<value name="GL_SRC2_RGB"/> -		<value name="GL_SRC0_ALPHA"/> -		<value name="GL_SRC1_ALPHA"/> -		<value name="GL_SRC2_ALPHA"/> - -		<desc name="param"> -			<value name="GL_TEXTURE"/> -			<value name="GL_CONSTANT"/> -			<value name="GL_PRIMARY_COLOR"/> -			<value name="GL_PREVIOUS"/> - -			<range base="GL_TEXTURE" from="0" to="31" category="OES_texture_env_crossbar"/> -		</desc> -	</desc> - -	<desc name="pname"> -		<value name="GL_OPERAND0_RGB"/> -		<value name="GL_OPERAND1_RGB"/> -		<value name="GL_OPERAND2_RGB"/> - -		<desc name="param"> -			<value name="GL_SRC_COLOR"/> -			<value name="GL_ONE_MINUS_SRC_COLOR"/> -			<value name="GL_SRC_ALPHA"/> -			<value name="GL_ONE_MINUS_SRC_ALPHA"/> -		</desc> -	</desc> - -	<desc name="pname"> -		<value name="GL_OPERAND0_ALPHA"/> -		<value name="GL_OPERAND1_ALPHA"/> -		<value name="GL_OPERAND2_ALPHA"/> - -		<desc name="param"> -			<value name="GL_SRC_ALPHA"/> -			<value name="GL_ONE_MINUS_SRC_ALPHA"/> -		</desc> -	</desc> - -	<desc name="pname"> -		<value name="GL_TEXTURE_ENV_COLOR"/> - -		<desc name="params" vector_size="4"/> -	</desc>  </template>  <template name="TexGen"> @@ -412,19 +193,6 @@  			<param name="param" type="GLtype"/>  		</vector>  	</proto> - -	<desc name="coord" category="OES_texture_cube_map"> -		<value name="GL_TEXTURE_GEN_STR_OES"/> -	</desc> - -	<desc name="pname" category="OES_texture_cube_map"> -		<value name="GL_TEXTURE_GEN_MODE_OES"/> - -		<desc name="param"> -			<value name="GL_NORMAL_MAP_OES"/> -			<value name="GL_REFLECTION_MAP_OES"/> -		</desc> -	</desc>  </template>  <template name="Clear"> @@ -432,17 +200,6 @@  		<return type="void"/>  		<param name="mask" type="GLbitfield"/>  	</proto> - -	<desc name="mask" error="GL_INVALID_VALUE"> -		<value name="0"/> -		<value name="(GL_COLOR_BUFFER_BIT)"/> -		<value name="(GL_DEPTH_BUFFER_BIT)"/> -		<value name="(GL_STENCIL_BUFFER_BIT)"/> -		<value name="(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)"/> -		<value name="(GL_COLOR_BUFFER_BIT|GL_STENCIL_BUFFER_BIT)"/> -		<value name="(GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT)"/> -		<value name="(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT)"/> -	</desc>  </template>  <template name="ClearColor"> @@ -506,56 +263,6 @@  		<return type="void"/>  		<param name="cap" type="GLenum"/>  	</proto> - -	<desc name="cap" category="GLES1.1"> -		<value name="GL_NORMALIZE"/> -		<value name="GL_RESCALE_NORMAL"/> - -		<range base="GL_CLIP_PLANE" from="0" to="5"/> -		<value name="GL_CLIP_PLANE0+6"/> -		<value name="GL_CLIP_PLANE0+7"/> - -		<value name="GL_FOG"/> -		<value name="GL_LIGHTING"/> -		<value name="GL_COLOR_MATERIAL"/> - -		<range base="GL_LIGHT" from="0" to="7"/> - -		<value name="GL_POINT_SMOOTH"/> -		<value name="GL_LINE_SMOOTH"/> -		<value name="GL_CULL_FACE"/> -		<value name="GL_POLYGON_OFFSET_FILL"/> -		<value name="GL_MULTISAMPLE"/> -		<value name="GL_SAMPLE_ALPHA_TO_COVERAGE"/> -		<value name="GL_SAMPLE_ALPHA_TO_ONE"/> -		<value name="GL_SAMPLE_COVERAGE"/> -		<value name="GL_TEXTURE_2D"/> -		<value name="GL_SCISSOR_TEST"/> -		<value name="GL_ALPHA_TEST"/> -		<value name="GL_STENCIL_TEST"/> -		<value name="GL_DEPTH_TEST"/> -		<value name="GL_BLEND"/> -		<value name="GL_DITHER"/> -		<value name="GL_COLOR_LOGIC_OP"/> - -		<value name="GL_POINT_SPRITE_OES" category="OES_point_sprite"/> -		<value name="GL_MATRIX_PALETTE_OES" category="OES_matrix_palette"/> -		<value name="GL_TEXTURE_CUBE_MAP_OES" category="OES_texture_cube_map"/> -		<value name="GL_TEXTURE_GEN_STR_OES" category="OES_texture_cube_map"/> -		<value name="GL_TEXTURE_EXTERNAL_OES" category="OES_EGL_image_external"/> -	</desc> - -	<desc name="cap" category="GLES2.0"> -		<value name="GL_CULL_FACE"/> -		<value name="GL_SCISSOR_TEST"/> -		<value name="GL_POLYGON_OFFSET_FILL"/> -		<value name="GL_SAMPLE_ALPHA_TO_COVERAGE"/> -		<value name="GL_SAMPLE_COVERAGE"/> -		<value name="GL_STENCIL_TEST"/> -		<value name="GL_DEPTH_TEST"/> -		<value name="GL_DITHER"/> -		<value name="GL_BLEND"/> -	</desc>  </template>  <!-- it is exactly the same as Disable --> @@ -564,56 +271,6 @@  		<return type="void"/>  		<param name="cap" type="GLenum"/>  	</proto> - -	<desc name="cap" category="GLES1.1"> -		<value name="GL_NORMALIZE"/> -		<value name="GL_RESCALE_NORMAL"/> - -		<range base="GL_CLIP_PLANE" from="0" to="5"/> -		<value name="GL_CLIP_PLANE0+6"/> -		<value name="GL_CLIP_PLANE0+7"/> - -		<value name="GL_FOG"/> -		<value name="GL_LIGHTING"/> -		<value name="GL_COLOR_MATERIAL"/> - -		<range base="GL_LIGHT" from="0" to="7"/> - -		<value name="GL_POINT_SMOOTH"/> -		<value name="GL_LINE_SMOOTH"/> -		<value name="GL_CULL_FACE"/> -		<value name="GL_POLYGON_OFFSET_FILL"/> -		<value name="GL_MULTISAMPLE"/> -		<value name="GL_SAMPLE_ALPHA_TO_COVERAGE"/> -		<value name="GL_SAMPLE_ALPHA_TO_ONE"/> -		<value name="GL_SAMPLE_COVERAGE"/> -		<value name="GL_TEXTURE_2D"/> -		<value name="GL_SCISSOR_TEST"/> -		<value name="GL_ALPHA_TEST"/> -		<value name="GL_STENCIL_TEST"/> -		<value name="GL_DEPTH_TEST"/> -		<value name="GL_BLEND"/> -		<value name="GL_DITHER"/> -		<value name="GL_COLOR_LOGIC_OP"/> - -		<value name="GL_POINT_SPRITE_OES" category="OES_point_sprite"/> -		<value name="GL_MATRIX_PALETTE_OES" category="OES_matrix_palette"/> -		<value name="GL_TEXTURE_CUBE_MAP_OES" category="OES_texture_cube_map"/> -		<value name="GL_TEXTURE_GEN_STR_OES" category="OES_texture_cube_map"/> -		<value name="GL_TEXTURE_EXTERNAL_OES" category="OES_EGL_image_external"/> -	</desc> - -	<desc name="cap" category="GLES2.0"> -		<value name="GL_CULL_FACE"/> -		<value name="GL_SCISSOR_TEST"/> -		<value name="GL_POLYGON_OFFSET_FILL"/> -		<value name="GL_SAMPLE_ALPHA_TO_COVERAGE"/> -		<value name="GL_SAMPLE_COVERAGE"/> -		<value name="GL_STENCIL_TEST"/> -		<value name="GL_DEPTH_TEST"/> -		<value name="GL_DITHER"/> -		<value name="GL_BLEND"/> -	</desc>  </template>  <template name="Finish"> @@ -642,43 +299,6 @@  		<param name="sfactor" type="GLenum"/>  		<param name="dfactor" type="GLenum"/>  	</proto> - -	<desc name="sfactor"> -		<value name="GL_ZERO"/> -		<value name="GL_ONE"/> -		<value name="GL_SRC_COLOR"/> -		<value name="GL_ONE_MINUS_SRC_COLOR"/> -		<value name="GL_SRC_ALPHA"/> -		<value name="GL_ONE_MINUS_SRC_ALPHA"/> -		<value name="GL_DST_ALPHA"/> -		<value name="GL_ONE_MINUS_DST_ALPHA"/> -		<value name="GL_DST_COLOR"/> -		<value name="GL_ONE_MINUS_DST_COLOR"/> -		<value name="GL_SRC_ALPHA_SATURATE"/> - -		<value name="GL_CONSTANT_COLOR" category="GLES2.0"/> -		<value name="GL_CONSTANT_ALPHA" category="GLES2.0"/> -		<value name="GL_ONE_MINUS_CONSTANT_COLOR" category="GLES2.0"/> -		<value name="GL_ONE_MINUS_CONSTANT_ALPHA" category="GLES2.0"/> -	</desc> - -	<desc name="dfactor"> -		<value name="GL_ZERO"/> -		<value name="GL_ONE"/> -		<value name="GL_SRC_COLOR"/> -		<value name="GL_ONE_MINUS_SRC_COLOR"/> -		<value name="GL_SRC_ALPHA"/> -		<value name="GL_ONE_MINUS_SRC_ALPHA"/> -		<value name="GL_DST_ALPHA"/> -		<value name="GL_ONE_MINUS_DST_ALPHA"/> -		<value name="GL_DST_COLOR"/> -		<value name="GL_ONE_MINUS_DST_COLOR"/> - -		<value name="GL_CONSTANT_COLOR" category="GLES2.0"/> -		<value name="GL_CONSTANT_ALPHA" category="GLES2.0"/> -		<value name="GL_ONE_MINUS_CONSTANT_COLOR" category="GLES2.0"/> -		<value name="GL_ONE_MINUS_CONSTANT_ALPHA" category="GLES2.0"/> -	</desc>  </template>  <template name="LogicOp"> @@ -739,33 +359,6 @@  		<param name="pname" type="GLenum"/>  		<param name="param" type="GLtype"/>  	</proto> - -	<desc name="pname"> -		<value name="GL_PACK_ALIGNMENT"/> -		<desc name="param" error="GL_INVALID_VALUE"> -			<value name="1"/> -			<value name="2"/> -			<value name="4"/> -			<value name="8"/> -		</desc> -	</desc> - -	<desc name="pname"> -		<value name="GL_UNPACK_ALIGNMENT"/> -		<desc name="param" error="GL_INVALID_VALUE"> -			<value name="1"/> -			<value name="2"/> -			<value name="4"/> -			<value name="8"/> -		</desc> -	</desc> - -	<desc name="pname" category="EXT_unpack_subimage"> -		<value name="GL_UNPACK_ROW_LENGTH"/> -		<value name="GL_UNPACK_SKIP_PIXELS"/> -		<value name="GL_UNPACK_SKIP_ROWS"/> -	</desc> -  </template>  <template name="ReadPixels" direction="get"> @@ -779,59 +372,6 @@  		<param name="type" type="GLenum"/>  		<param name="pixels" type="GLvoid *"/>  	</proto> - -	<!-- Technically, only two combinations are actually allowed: -	     GL_RGBA/GL_UNSIGNED_BYTE, and some implementation-specific -	     internal preferred combination.  I don't know what that is, so I'm -	     allowing any valid combination for now; the underlying support -	     should fail when necessary.--> -	<desc name="format"> -		<value name="GL_ALPHA"/> -		<desc name="type" error="GL_INVALID_OPERATION"> -			<value name="GL_UNSIGNED_BYTE"/> -		</desc> -	</desc> - -	<desc name="format"> -		<value name="GL_RGB"/> -		<desc name="type" error="GL_INVALID_OPERATION"> -			<value name="GL_UNSIGNED_BYTE"/> -			<value name="GL_UNSIGNED_SHORT_5_6_5"/> -		</desc> -	</desc> - -	<desc name="format"> -		<value name="GL_RGBA"/> -		<desc name="type" error="GL_INVALID_OPERATION"> -			<value name="GL_UNSIGNED_BYTE"/> -			<value name="GL_UNSIGNED_SHORT_4_4_4_4"/> -			<value name="GL_UNSIGNED_SHORT_5_5_5_1"/> -		</desc> -	</desc> - -	<desc name="format"> -		<value name="GL_LUMINANCE"/> -		<desc name="type" error="GL_INVALID_OPERATION"> -			<value name="GL_UNSIGNED_BYTE"/> -		</desc> -	</desc> - -	<desc name="format"> -		<value name="GL_LUMINANCE_ALPHA"/> -		<desc name="type" error="GL_INVALID_OPERATION"> -			<value name="GL_UNSIGNED_BYTE"/> -		</desc> -	</desc> - -	<desc name="format" category="EXT_read_format_bgra"> -		<value name="GL_BGRA_EXT"/> - -		<desc name="type" error="GL_INVALID_OPERATION"> -			<value name="GL_UNSIGNED_BYTE"/> -			<value name="GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT"/> -			<value name="GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT"/> -		</desc> -	</desc>  </template>  <template name="GetClipPlane" direction="get"> @@ -876,26 +416,6 @@  			<param name="param" type="GLtype"/>  		</vector>  	</proto> - -	<desc name="face"> -		<value name="GL_FRONT"/> -		<value name="GL_BACK"/> -	</desc> - -	<desc name="pname"> -		<value name="GL_SHININESS"/> -		<desc name="params" vector_size="1"/> -	</desc> - -	<desc name="pname"> -		<value name="GL_AMBIENT"/> -		<value name="GL_DIFFUSE"/> -		<value name="GL_AMBIENT_AND_DIFFUSE"/> -		<value name="GL_SPECULAR"/> -		<value name="GL_EMISSION"/> - -		<desc name="params" vector_size="4"/> -	</desc>  </template>  <template name="GetString" direction="get"> @@ -903,14 +423,6 @@  		<return type="const GLubyte *"/>  		<param name="name" type="GLenum"/>  	</proto> - -	<desc name="name"> -		<value name="GL_VENDOR"/> -		<value name="GL_RENDERER"/> -		<value name="GL_VERSION"/> -		<value name="GL_EXTENSIONS"/> -		<value name="GL_SHADING_LANGUAGE_VERSION" category="GLES2.0"/> -	</desc>  </template>  <template name="GetTexEnv" direction="get"> @@ -920,88 +432,6 @@  		<param name="pname" type="GLenum"/>  		<vector name="params" type="GLtype *" size="dynamic"/>  	</proto> - -	<desc name="target" category="OES_point_sprite"> -		<value name="GL_POINT_SPRITE_OES"/> -		<desc name="pname"> -			<value name="GL_COORD_REPLACE_OES"/> -		</desc> -	</desc> - -	<desc name="pname" category="OES_point_sprite"> -		<value name="GL_COORD_REPLACE_OES"/> -		<desc name="params" vector_size="1" convert="false"/> -	</desc> - -	<desc name="target" category="EXT_texture_lod_bias"> -		<value name="GL_TEXTURE_FILTER_CONTROL_EXT"/> - -		<desc name="pname"> -			<value name="GL_TEXTURE_LOD_BIAS_EXT"/> -		</desc> -	</desc> - -	<desc name="pname" category="EXT_texture_lod_bias"> -		<value name="GL_TEXTURE_LOD_BIAS_EXT"/> -		<desc name="params" vector_size="1"/> -	</desc> - -	<desc name="target"> -		<value name="GL_TEXTURE_ENV"/> - -		<desc name="pname"> -			<value name="GL_TEXTURE_ENV_COLOR"/> -			<value name="GL_RGB_SCALE"/> -			<value name="GL_ALPHA_SCALE"/> -			<value name="GL_TEXTURE_ENV_MODE"/> -			<value name="GL_COMBINE_RGB"/> -			<value name="GL_COMBINE_ALPHA"/> -			<value name="GL_SRC0_RGB"/> -			<value name="GL_SRC1_RGB"/> -			<value name="GL_SRC2_RGB"/> -			<value name="GL_SRC0_ALPHA"/> -			<value name="GL_SRC1_ALPHA"/> -			<value name="GL_SRC2_ALPHA"/> -			<value name="GL_OPERAND0_RGB"/> -			<value name="GL_OPERAND1_RGB"/> -			<value name="GL_OPERAND2_RGB"/> -			<value name="GL_OPERAND0_ALPHA"/> -			<value name="GL_OPERAND1_ALPHA"/> -			<value name="GL_OPERAND2_ALPHA"/> -		</desc> -	</desc> - -	<desc name="pname"> -		<value name="GL_TEXTURE_ENV_COLOR"/> -		<desc name="params" vector_size="4"/> -	</desc> - -	<desc name="pname"> -		<value name="GL_RGB_SCALE"/> -		<value name="GL_ALPHA_SCALE"/> - -		<desc name="params" vector_size="1"/> -	</desc> - -	<desc name="pname"> -		<value name="GL_TEXTURE_ENV_MODE"/> -		<value name="GL_COMBINE_RGB"/> -		<value name="GL_COMBINE_ALPHA"/> -		<value name="GL_SRC0_RGB"/> -		<value name="GL_SRC1_RGB"/> -		<value name="GL_SRC2_RGB"/> -		<value name="GL_SRC0_ALPHA"/> -		<value name="GL_SRC1_ALPHA"/> -		<value name="GL_SRC2_ALPHA"/> -		<value name="GL_OPERAND0_RGB"/> -		<value name="GL_OPERAND1_RGB"/> -		<value name="GL_OPERAND2_RGB"/> -		<value name="GL_OPERAND0_ALPHA"/> -		<value name="GL_OPERAND1_ALPHA"/> -		<value name="GL_OPERAND2_ALPHA"/> - -		<desc name="params" vector_size="1" convert="false"/> -	</desc>  </template>  <template name="GetTexGen" direction="get"> @@ -1011,14 +441,6 @@  		<param name="pname" type="GLenum"/>  		<vector name="params" type="GLtype *" size="dynamic"/>  	</proto> - -	<desc name="coord"> -		<value name="GL_TEXTURE_GEN_STR_OES"/> -	</desc> -	<desc name="pname"> -		<value name="GL_TEXTURE_GEN_MODE_OES"/> -		<desc name="params" vector_size="1" convert="false"/> -	</desc>  </template>  <template name="GetTexParameter" direction="get"> @@ -1035,63 +457,6 @@  		<return type="GLboolean"/>  		<param name="cap" type="GLenum"/>  	</proto> - -	<desc name="cap" category="GLES1.1"> -		<value name="GL_NORMALIZE"/> -		<value name="GL_RESCALE_NORMAL"/> - -		<range base="GL_CLIP_PLANE" from="0" to="5"/> -		<value name="GL_CLIP_PLANE0+6"/> -		<value name="GL_CLIP_PLANE0+7"/> - -		<value name="GL_FOG"/> -		<value name="GL_LIGHTING"/> -		<value name="GL_COLOR_MATERIAL"/> - -		<range base="GL_LIGHT" from="0" to="7"/> - -		<value name="GL_POINT_SMOOTH"/> -		<value name="GL_LINE_SMOOTH"/> -		<value name="GL_CULL_FACE"/> -		<value name="GL_POLYGON_OFFSET_FILL"/> -		<value name="GL_MULTISAMPLE"/> -		<value name="GL_SAMPLE_ALPHA_TO_COVERAGE"/> -		<value name="GL_SAMPLE_ALPHA_TO_ONE"/> -		<value name="GL_SAMPLE_COVERAGE"/> -		<value name="GL_TEXTURE_2D"/> -		<value name="GL_SCISSOR_TEST"/> -		<value name="GL_ALPHA_TEST"/> -		<value name="GL_STENCIL_TEST"/> -		<value name="GL_DEPTH_TEST"/> -		<value name="GL_BLEND"/> -		<value name="GL_DITHER"/> -		<value name="GL_COLOR_LOGIC_OP"/> - -		<value name="GL_POINT_SPRITE_OES" category="OES_point_sprite"/> -		<value name="GL_TEXTURE_CUBE_MAP_OES" category="OES_texture_cube_map"/> -		<value name="GL_TEXTURE_GEN_STR_OES" category="OES_texture_cube_map"/> - -		<value name="GL_VERTEX_ARRAY"/> -		<value name="GL_NORMAL_ARRAY"/> -		<value name="GL_COLOR_ARRAY"/> -		<value name="GL_TEXTURE_COORD_ARRAY"/> -		<value name="GL_MATRIX_INDEX_ARRAY_OES" category="OES_matrix_palette"/> -		<value name="GL_WEIGHT_ARRAY_OES" category="OES_matrix_palette"/> -		<value name="GL_POINT_SIZE_ARRAY_OES" category="OES_point_size_array"/> -		<value name="GL_TEXTURE_EXTERNAL_OES" category="OES_EGL_image_external"/> -	</desc> - -	<desc name="cap" category="GLES2.0"> -		<value name="GL_CULL_FACE"/> -		<value name="GL_SCISSOR_TEST"/> -		<value name="GL_POLYGON_OFFSET_FILL"/> -		<value name="GL_SAMPLE_ALPHA_TO_COVERAGE"/> -		<value name="GL_SAMPLE_COVERAGE"/> -		<value name="GL_STENCIL_TEST"/> -		<value name="GL_DEPTH_TEST"/> -		<value name="GL_DITHER"/> -		<value name="GL_BLEND"/> -	</desc>  </template>  <template name="DepthRange"> @@ -1132,13 +497,6 @@  		<return type="void"/>  		<param name="mode" type="GLenum"/>  	</proto> - -	<desc name="mode"> -		<value name="GL_MODELVIEW"/> -		<value name="GL_PROJECTION"/> -		<value name="GL_TEXTURE"/> -		<value name="GL_MATRIX_PALETTE_OES" category="OES_matrix_palette"/> -	</desc>  </template>  <template name="MultMatrix"> @@ -1225,16 +583,6 @@  		<return type="void"/>  		<param name="array" type="GLenum"/>  	</proto> - -	<desc name="array"> -		<value name="GL_VERTEX_ARRAY"/> -		<value name="GL_NORMAL_ARRAY"/> -		<value name="GL_COLOR_ARRAY"/> -		<value name="GL_TEXTURE_COORD_ARRAY"/> -		<value name="GL_MATRIX_INDEX_ARRAY_OES" category="OES_matrix_palette"/> -		<value name="GL_WEIGHT_ARRAY_OES" category="OES_matrix_palette"/> -		<value name="GL_POINT_SIZE_ARRAY_OES" category="OES_point_size_array"/> -	</desc>  </template>  <template name="DrawArrays"> @@ -1244,16 +592,6 @@  		<param name="first" type="GLint"/>  		<param name="count" type="GLsizei"/>  	</proto> - -	<desc name="mode"> -		<value name="GL_POINTS"/> -		<value name="GL_LINES"/> -		<value name="GL_LINE_LOOP"/> -		<value name="GL_LINE_STRIP"/> -		<value name="GL_TRIANGLES"/> -		<value name="GL_TRIANGLE_STRIP"/> -		<value name="GL_TRIANGLE_FAN"/> -	</desc>  </template>  <template name="DrawElements"> @@ -1264,16 +602,6 @@  		<param name="type" type="GLenum"/>  		<param name="indices" type="const GLvoid *"/>  	</proto> - -	<desc name="mode"> -		<value name="GL_POINTS"/> -		<value name="GL_LINES"/> -		<value name="GL_LINE_LOOP"/> -		<value name="GL_LINE_STRIP"/> -		<value name="GL_TRIANGLES"/> -		<value name="GL_TRIANGLE_STRIP"/> -		<value name="GL_TRIANGLE_FAN"/> -	</desc>  </template>  <template name="EnableClientState"> @@ -1281,16 +609,6 @@  		<return type="void"/>  		<param name="array" type="GLenum"/>  	</proto> - -	<desc name="array"> -		<value name="GL_VERTEX_ARRAY"/> -		<value name="GL_NORMAL_ARRAY"/> -		<value name="GL_COLOR_ARRAY"/> -		<value name="GL_TEXTURE_COORD_ARRAY"/> -		<value name="GL_MATRIX_INDEX_ARRAY_OES" category="OES_matrix_palette"/> -		<value name="GL_WEIGHT_ARRAY_OES" category="OES_matrix_palette"/> -		<value name="GL_POINT_SIZE_ARRAY_OES" category="OES_point_size_array"/> -	</desc>  </template>  <template name="GetPointer" direction="get"> @@ -1299,16 +617,6 @@  		<param name="pname" type="GLenum"/>  		<vector name="params" type="GLvoid **" size="dynamic"/>  	</proto> - -	<desc name="pname"> -		<value name="GL_VERTEX_ARRAY_POINTER"/> -		<value name="GL_NORMAL_ARRAY_POINTER"/> -		<value name="GL_COLOR_ARRAY_POINTER"/> -		<value name="GL_TEXTURE_COORD_ARRAY_POINTER"/> -		<value name="GL_MATRIX_INDEX_ARRAY_POINTER_OES" category="OES_matrix_palette"/> -		<value name="GL_WEIGHT_ARRAY_POINTER_OES" category="OES_matrix_palette"/> -		<value name="GL_POINT_SIZE_ARRAY_POINTER_OES" category="OES_point_size_array"/> -	</desc>  </template>  <template name="Normal"> @@ -1611,80 +919,6 @@  		<param name="srcAlpha" type="GLenum"/>  		<param name="dstAlpha" type="GLenum"/>  	</proto> - -	<desc name="srcRGB"> -		<value name="GL_ZERO"/> -		<value name="GL_ONE"/> -		<value name="GL_SRC_COLOR"/> -		<value name="GL_ONE_MINUS_SRC_COLOR"/> -		<value name="GL_SRC_ALPHA"/> -		<value name="GL_ONE_MINUS_SRC_ALPHA"/> -		<value name="GL_DST_ALPHA"/> -		<value name="GL_ONE_MINUS_DST_ALPHA"/> -		<value name="GL_DST_COLOR"/> -		<value name="GL_ONE_MINUS_DST_COLOR"/> -		<value name="GL_SRC_ALPHA_SATURATE"/> - -		<value name="GL_CONSTANT_COLOR" category="GLES2.0"/> -		<value name="GL_ONE_MINUS_CONSTANT_COLOR" category="GLES2.0"/> -		<value name="GL_CONSTANT_ALPHA" category="GLES2.0"/> -		<value name="GL_ONE_MINUS_CONSTANT_ALPHA" category="GLES2.0"/> -	</desc> - -	<desc name="dstRGB"> -		<value name="GL_ZERO"/> -		<value name="GL_ONE"/> -		<value name="GL_SRC_COLOR"/> -		<value name="GL_ONE_MINUS_SRC_COLOR"/> -		<value name="GL_SRC_ALPHA"/> -		<value name="GL_ONE_MINUS_SRC_ALPHA"/> -		<value name="GL_DST_ALPHA"/> -		<value name="GL_ONE_MINUS_DST_ALPHA"/> -		<value name="GL_DST_COLOR"/> -		<value name="GL_ONE_MINUS_DST_COLOR"/> - -		<value name="GL_CONSTANT_COLOR" category="GLES2.0"/> -		<value name="GL_ONE_MINUS_CONSTANT_COLOR" category="GLES2.0"/> -		<value name="GL_CONSTANT_ALPHA" category="GLES2.0"/> -		<value name="GL_ONE_MINUS_CONSTANT_ALPHA" category="GLES2.0"/> -	</desc> - -	<desc name="srcAlpha"> -		<value name="GL_ZERO"/> -		<value name="GL_ONE"/> -		<value name="GL_SRC_COLOR"/> -		<value name="GL_ONE_MINUS_SRC_COLOR"/> -		<value name="GL_SRC_ALPHA"/> -		<value name="GL_ONE_MINUS_SRC_ALPHA"/> -		<value name="GL_DST_ALPHA"/> -		<value name="GL_ONE_MINUS_DST_ALPHA"/> -		<value name="GL_DST_COLOR"/> -		<value name="GL_ONE_MINUS_DST_COLOR"/> -		<value name="GL_SRC_ALPHA_SATURATE"/> - -		<value name="GL_CONSTANT_COLOR" category="GLES2.0"/> -		<value name="GL_ONE_MINUS_CONSTANT_COLOR" category="GLES2.0"/> -		<value name="GL_CONSTANT_ALPHA" category="GLES2.0"/> -		<value name="GL_ONE_MINUS_CONSTANT_ALPHA" category="GLES2.0"/> -	</desc> - -	<desc name="dstAlpha"> -		<value name="GL_ZERO"/> -		<value name="GL_ONE"/> -		<value name="GL_SRC_COLOR"/> -		<value name="GL_ONE_MINUS_SRC_COLOR"/> -		<value name="GL_SRC_ALPHA"/> -		<value name="GL_ONE_MINUS_SRC_ALPHA"/> -		<value name="GL_DST_ALPHA"/> -		<value name="GL_ONE_MINUS_DST_ALPHA"/> -		<value name="GL_DST_COLOR"/> -		<value name="GL_ONE_MINUS_DST_COLOR"/> - -		<value name="GL_CONSTANT_COLOR" category="GLES2.0"/> -		<value name="GL_ONE_MINUS_CONSTANT_COLOR" category="GLES2.0"/> -		<value name="GL_CONSTANT_ALPHA" category="GLES2.0"/> -		<value name="GL_ONE_MINUS_CONSTANT_ALPHA" category="GLES2.0"/> -	</desc>  </template>  <template name="PointParameter"> @@ -1695,19 +929,6 @@  			<param name="param" type="GLtype"/>  		</vector>  	</proto> - -	<desc name="pname"> -		<value name="GL_POINT_SIZE_MIN"/> -		<value name="GL_POINT_SIZE_MAX"/> -		<value name="GL_POINT_FADE_THRESHOLD_SIZE"/> - -		<desc name="params" vector_size="1"/> -	</desc> - -	<desc name="pname"> -		<value name="GL_POINT_DISTANCE_ATTENUATION"/> -		<desc name="params" vector_size="3"/> -	</desc>  </template>  <template name="VertexAttrib"> @@ -1772,22 +993,6 @@  		<param name="pname" type="GLenum"/>  		<vector name="params" type="GLtype *" size="dynamic"/>  	</proto> - -	<desc name="pname"> -		<value name="GL_VERTEX_ATTRIB_ARRAY_ENABLED"/> -		<value name="GL_VERTEX_ATTRIB_ARRAY_SIZE"/> -		<value name="GL_VERTEX_ATTRIB_ARRAY_STRIDE"/> -		<value name="GL_VERTEX_ATTRIB_ARRAY_TYPE"/> -		<value name="GL_VERTEX_ATTRIB_ARRAY_NORMALIZED"/> -		<value name="GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"/> - -		<desc name="params" vector_size="1" convert="false"/> -	</desc> - -	<desc name="pname"> -		<value name="GL_CURRENT_VERTEX_ATTRIB"/> -		<desc name="params" vector_size="16?" convert="false"/> -	</desc>  </template>  <template name="GetVertexAttribPointer" direction="get"> @@ -2061,13 +1266,6 @@  		<return type="void"/>  		<param name="target" type="GLenum"/>  	</proto> - -	<desc name="target"> -		<value name="GL_TEXTURE_2D"/> -		<value name="GL_TEXTURE_CUBE_MAP" category="GLES2.0"/> -		<value name="GL_TEXTURE_CUBE_MAP_OES" category="OES_texture_cube_map"/> -		<value name="GL_TEXTURE_3D_OES" category="OES_texture_3D"/> -	</desc>  </template>  <template name="BindFramebuffer"> @@ -2126,28 +1324,6 @@  		<param name="width" type="GLsizei"/>  		<param name="height" type="GLsizei"/>  	</proto> - -	<desc name="internalFormat"> -		<value name="GL_DEPTH_COMPONENT16_OES" category="OES_framebuffer_object"/> -		<value name="GL_RGBA4_OES" category="OES_framebuffer_object"/> -		<value name="GL_RGB5_A1_OES" category="OES_framebuffer_object"/> -		<value name="GL_RGB565_OES" category="OES_framebuffer_object"/> -		<value name="GL_STENCIL_INDEX8_OES" category="OES_stencil8"/> - -		<value name="GL_DEPTH_COMPONENT16" category="GLES2.0"/> -		<value name="GL_RGBA4" category="GLES2.0"/> -		<value name="GL_RGB5_A1" category="GLES2.0"/> -		<value name="GL_RGB565" category="GLES2.0"/> -		<value name="GL_STENCIL_INDEX8" category="GLES2.0"/> - -		<value name="GL_DEPTH_COMPONENT24_OES" category="OES_depth24"/> -		<value name="GL_DEPTH_COMPONENT32_OES" category="OES_depth32"/> -		<value name="GL_RGB8_OES" category="OES_rgb8_rgba8"/> -		<value name="GL_RGBA8_OES" category="OES_rgb8_rgba8"/> -		<value name="GL_STENCIL_INDEX1_OES" category="OES_stencil1"/> -		<value name="GL_STENCIL_INDEX4_OES" category="OES_stencil4"/> -		<value name="GL_DEPTH24_STENCIL8_OES" category="OES_packed_depth_stencil"/> -	</desc>  </template>  <template name="FramebufferRenderbuffer"> @@ -2169,22 +1345,6 @@  		<param name="texture" type="GLuint"/>  		<param name="level" type="GLint"/>  	</proto> - -	<desc name="textarget" error="GL_INVALID_OPERATION"> -		<value name="GL_TEXTURE_2D"/> -		<value name="GL_TEXTURE_CUBE_MAP_POSITIVE_X" category="GLES2.0"/> -		<value name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y" category="GLES2.0"/> -		<value name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z" category="GLES2.0"/> -		<value name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X" category="GLES2.0"/> -		<value name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y" category="GLES2.0"/> -		<value name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z" category="GLES2.0"/> -		<value name="GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES" category="OES_texture_cube_map"/> -		<value name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES" category="OES_texture_cube_map"/> -		<value name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES" category="OES_texture_cube_map"/> -		<value name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES" category="OES_texture_cube_map"/> -		<value name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES" category="OES_texture_cube_map"/> -		<value name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES" category="OES_texture_cube_map"/> -	</desc>  	<!-- According to the base specification, "level" must be 0.  But  	     extension GL_OES_fbo_render_mipmap lifts that restriction,  	     so no restriction is placed here. --> @@ -2217,21 +1377,6 @@  		<param name="pname" type="GLenum"/>  		<vector name="params" type="GLtype *" size="dynamic"/>  	</proto> - -	<desc name="pname"> -		<value name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES" category="OES_framebuffer_object"/> -		<value name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES" category="OES_framebuffer_object"/> -		<value name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES" category="OES_framebuffer_object"/> -		<value name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES" category="OES_framebuffer_object"/> - -		<value name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE" category="GLES2.0"/> -		<value name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME" category="GLES2.0"/> -		<value name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL" category="GLES2.0"/> -		<value name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE" category="GLES2.0"/> -		<value name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES" category="OES_texture_3D"/> - -		<desc name="params" vector_size="1" convert="false"/> -	</desc>  </template>  <template name="GetRenderbufferParameter" direction="get"> @@ -2241,34 +1386,6 @@  		<param name="pname" type="GLenum"/>  		<vector name="params" type="GLtype *" size="dynamic"/>  	</proto> - -	<desc name="pname" category="OES_framebuffer_object"> -		<value name="GL_RENDERBUFFER_WIDTH_OES"/> -		<value name="GL_RENDERBUFFER_HEIGHT_OES"/> -		<value name="GL_RENDERBUFFER_INTERNAL_FORMAT_OES"/> -		<value name="GL_RENDERBUFFER_RED_SIZE_OES"/> -		<value name="GL_RENDERBUFFER_GREEN_SIZE_OES"/> -		<value name="GL_RENDERBUFFER_BLUE_SIZE_OES"/> -		<value name="GL_RENDERBUFFER_ALPHA_SIZE_OES"/> -		<value name="GL_RENDERBUFFER_DEPTH_SIZE_OES"/> -		<value name="GL_RENDERBUFFER_STENCIL_SIZE_OES"/> - -		<desc name="params" vector_size="1" convert="false"/> -	</desc> - -	<desc name="pname" category="GLES2.0"> -		<value name="GL_RENDERBUFFER_WIDTH"/> -		<value name="GL_RENDERBUFFER_HEIGHT"/> -		<value name="GL_RENDERBUFFER_INTERNAL_FORMAT"/> -		<value name="GL_RENDERBUFFER_RED_SIZE"/> -		<value name="GL_RENDERBUFFER_GREEN_SIZE"/> -		<value name="GL_RENDERBUFFER_BLUE_SIZE"/> -		<value name="GL_RENDERBUFFER_ALPHA_SIZE"/> -		<value name="GL_RENDERBUFFER_DEPTH_SIZE"/> -		<value name="GL_RENDERBUFFER_STENCIL_SIZE"/> - -		<desc name="params" vector_size="1" convert="false"/> -	</desc>  </template>  <template name="IsRenderbuffer" direction="get"> @@ -2389,16 +1506,6 @@  		<param name="count" type="const GLsizei *"/>  		<param name="primcount" type="GLsizei"/>  	</proto> - -	<desc name="mode"> -		<value name="GL_POINTS"/> -		<value name="GL_LINES"/> -		<value name="GL_LINE_LOOP"/> -		<value name="GL_LINE_STRIP"/> -		<value name="GL_TRIANGLES"/> -		<value name="GL_TRIANGLE_STRIP"/> -		<value name="GL_TRIANGLE_FAN"/> -	</desc>  </template>  <template name="MultiDrawElements"> @@ -2410,16 +1517,6 @@  		<param name="indices" type="const GLvoid **"/>  		<param name="primcount" type="GLsizei"/>  	</proto> - -	<desc name="mode"> -		<value name="GL_POINTS"/> -		<value name="GL_LINES"/> -		<value name="GL_LINE_LOOP"/> -		<value name="GL_LINE_STRIP"/> -		<value name="GL_TRIANGLES"/> -		<value name="GL_TRIANGLE_STRIP"/> -		<value name="GL_TRIANGLE_FAN"/> -	</desc>  </template>  <template name="EGLImageTargetTexture2D"> diff --git a/mesalib/src/mesa/main/api_exec.c b/mesalib/src/mesa/main/api_exec.c index 6b1499f4f..c44818945 100644 --- a/mesalib/src/mesa/main/api_exec.c +++ b/mesalib/src/mesa/main/api_exec.c @@ -106,7 +106,7 @@  #include "main/dispatch.h" -#if FEATURE_GL +#if FEATURE_GL || FEATURE_ES2  /** @@ -133,7 +133,7 @@ _mesa_create_exec_table(struct gl_context *ctx)  #endif     /* load the dispatch slots we understand */ -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_AlphaFunc(exec, _mesa_AlphaFunc);     } @@ -145,14 +145,16 @@ _mesa_create_exec_table(struct gl_context *ctx)     SET_CullFace(exec, _mesa_CullFace);     SET_Disable(exec, _mesa_Disable);  #if FEATURE_draw_read_buffer -   SET_DrawBuffer(exec, _mesa_DrawBuffer); +   if (ctx->API == API_OPENGL || ctx->API == API_OPENGL_CORE) +      SET_DrawBuffer(exec, _mesa_DrawBuffer); +     SET_ReadBuffer(exec, _mesa_ReadBuffer);  #endif     SET_Enable(exec, _mesa_Enable);     SET_Finish(exec, _mesa_Finish);     SET_Flush(exec, _mesa_Flush);     SET_FrontFace(exec, _mesa_FrontFace); -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_Frustum(exec, _mesa_Frustum);     }     SET_GetError(exec, _mesa_GetError); @@ -162,37 +164,39 @@ _mesa_create_exec_table(struct gl_context *ctx)        SET_LineStipple(exec, _mesa_LineStipple);     }     SET_LineWidth(exec, _mesa_LineWidth); -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_LoadIdentity(exec, _mesa_LoadIdentity);        SET_LoadMatrixf(exec, _mesa_LoadMatrixf);     } -   SET_LogicOp(exec, _mesa_LogicOp); -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGLES2) { +      SET_LogicOp(exec, _mesa_LogicOp); +   } +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_MatrixMode(exec, _mesa_MatrixMode);        SET_MultMatrixf(exec, _mesa_MultMatrixf);        SET_Ortho(exec, _mesa_Ortho);     }     SET_PixelStorei(exec, _mesa_PixelStorei); -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_PopMatrix(exec, _mesa_PopMatrix);        SET_PushMatrix(exec, _mesa_PushMatrix);        SET_Rotatef(exec, _mesa_Rotatef);        SET_Scalef(exec, _mesa_Scalef);     }     SET_Scissor(exec, _mesa_Scissor); -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_ShadeModel(exec, _mesa_ShadeModel);     }     SET_StencilFunc(exec, _mesa_StencilFunc);     SET_StencilMask(exec, _mesa_StencilMask);     SET_StencilOp(exec, _mesa_StencilOp); -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_TexEnvfv(exec, _mesa_TexEnvfv);        SET_TexEnvi(exec, _mesa_TexEnvi);     }     SET_TexImage2D(exec, _mesa_TexImage2D);     SET_TexParameteri(exec, _mesa_TexParameteri); -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_Translatef(exec, _mesa_Translatef);     }     SET_Viewport(exec, _mesa_Viewport); @@ -212,7 +216,9 @@ _mesa_create_exec_table(struct gl_context *ctx)     SET_DepthMask(exec, _mesa_DepthMask);     SET_DepthRange(exec, _mesa_DepthRange); -   _mesa_init_drawpix_dispatch(exec); +   if (ctx->API != API_OPENGLES2 && ctx->API != API_OPENGL_CORE) { +      _mesa_init_drawpix_dispatch(exec); +   }     if (ctx->API == API_OPENGL) {        _mesa_init_feedback_dispatch(exec);     } @@ -228,7 +234,7 @@ _mesa_create_exec_table(struct gl_context *ctx)     SET_GetBooleanv(exec, _mesa_GetBooleanv);     SET_GetDoublev(exec, _mesa_GetDoublev);     SET_GetIntegerv(exec, _mesa_GetIntegerv); -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_GetLightfv(exec, _mesa_GetLightfv);        SET_GetLightiv(exec, _mesa_GetLightiv);        SET_GetMaterialfv(exec, _mesa_GetMaterialfv); @@ -237,17 +243,21 @@ _mesa_create_exec_table(struct gl_context *ctx)        SET_GetTexEnvfv(exec, _mesa_GetTexEnvfv);        SET_GetTexEnviv(exec, _mesa_GetTexEnviv);     } -   SET_GetTexLevelParameterfv(exec, _mesa_GetTexLevelParameterfv); -   SET_GetTexLevelParameteriv(exec, _mesa_GetTexLevelParameteriv); +   if (ctx->API != API_OPENGLES2) { +      SET_GetTexLevelParameterfv(exec, _mesa_GetTexLevelParameterfv); +      SET_GetTexLevelParameteriv(exec, _mesa_GetTexLevelParameteriv); +   }     SET_GetTexParameterfv(exec, _mesa_GetTexParameterfv);     SET_GetTexParameteriv(exec, _mesa_GetTexParameteriv); -   SET_GetTexImage(exec, _mesa_GetTexImage); +   if (ctx->API != API_OPENGLES2) { +      SET_GetTexImage(exec, _mesa_GetTexImage); +   }     SET_Hint(exec, _mesa_Hint);     if (ctx->API == API_OPENGL) {        SET_IndexMask(exec, _mesa_IndexMask);     }     SET_IsEnabled(exec, _mesa_IsEnabled); -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_LightModelf(exec, _mesa_LightModelf);        SET_LightModelfv(exec, _mesa_LightModelfv);        SET_LightModeli(exec, _mesa_LightModeli); @@ -265,19 +275,25 @@ _mesa_create_exec_table(struct gl_context *ctx)        _mesa_init_pixel_dispatch(exec);     } -   SET_PixelStoref(exec, _mesa_PixelStoref); +   if (ctx->API != API_OPENGLES2) { +      SET_PixelStoref(exec, _mesa_PixelStoref); +   } +     SET_PointSize(exec, _mesa_PointSize); -   SET_PolygonMode(exec, _mesa_PolygonMode); + +   if (ctx->API != API_OPENGLES2) { +      SET_PolygonMode(exec, _mesa_PolygonMode); +   } +     SET_PolygonOffset(exec, _mesa_PolygonOffset);     if (ctx->API == API_OPENGL) {        SET_PolygonStipple(exec, _mesa_PolygonStipple); -        _mesa_init_attrib_dispatch(exec);        _mesa_init_rastpos_dispatch(exec);     }     SET_ReadPixels(exec, _mesa_ReadPixels); -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_Rotated(exec, _mesa_Rotated);        SET_Scaled(exec, _mesa_Scaled);        SET_SecondaryColorPointerEXT(exec, _mesa_SecondaryColorPointerEXT); @@ -285,11 +301,13 @@ _mesa_create_exec_table(struct gl_context *ctx)        SET_TexEnviv(exec, _mesa_TexEnviv);     } -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        _mesa_init_texgen_dispatch(exec);     } -   SET_TexImage1D(exec, _mesa_TexImage1D); +   if (ctx->API != API_OPENGLES2) { +      SET_TexImage1D(exec, _mesa_TexImage1D); +   }     SET_TexParameterf(exec, _mesa_TexParameterf);     SET_TexParameterfv(exec, _mesa_TexParameterfv);     SET_TexParameteriv(exec, _mesa_TexParameteriv); @@ -306,11 +324,17 @@ _mesa_create_exec_table(struct gl_context *ctx)        SET_AreTexturesResident(exec, _mesa_AreTexturesResident);        SET_ColorPointer(exec, _mesa_ColorPointer);     } -   SET_CopyTexImage1D(exec, _mesa_CopyTexImage1D); +   if (ctx->API != API_OPENGLES2) { +      SET_CopyTexImage1D(exec, _mesa_CopyTexImage1D); +      SET_CopyTexSubImage1D(exec, _mesa_CopyTexSubImage1D); +      SET_TexSubImage1D(exec, _mesa_TexSubImage1D); +   } +     SET_CopyTexImage2D(exec, _mesa_CopyTexImage2D); -   SET_CopyTexSubImage1D(exec, _mesa_CopyTexSubImage1D);     SET_CopyTexSubImage2D(exec, _mesa_CopyTexSubImage2D); -   if (ctx->API != API_OPENGL_CORE) { +   SET_TexSubImage2D(exec, _mesa_TexSubImage2D); + +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_DisableClientState(exec, _mesa_DisableClientState);        SET_EdgeFlagPointer(exec, _mesa_EdgeFlagPointer);        SET_EnableClientState(exec, _mesa_EnableClientState); @@ -319,13 +343,11 @@ _mesa_create_exec_table(struct gl_context *ctx)        SET_InterleavedArrays(exec, _mesa_InterleavedArrays);     }     SET_IsTexture(exec, _mesa_IsTexture); -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) {        SET_NormalPointer(exec, _mesa_NormalPointer);        SET_PrioritizeTextures(exec, _mesa_PrioritizeTextures);        SET_TexCoordPointer(exec, _mesa_TexCoordPointer);     } -   SET_TexSubImage1D(exec, _mesa_TexSubImage1D); -   SET_TexSubImage2D(exec, _mesa_TexSubImage2D);     if (ctx->API != API_OPENGL_CORE) {        SET_VertexPointer(exec, _mesa_VertexPointer);     } @@ -392,7 +414,7 @@ _mesa_create_exec_table(struct gl_context *ctx)     /* 14. SGI_color_table */  #if 0 -   if (ctx->API != API_OPENGL_CORE) { +   if (ctx->API == API_OPENGL) {        SET_ColorTableSGI(exec, _mesa_ColorTable);        SET_ColorSubTableSGI(exec, _mesa_ColorSubTable);        SET_GetColorTableSGI(exec, _mesa_GetColorTable); @@ -456,8 +478,10 @@ _mesa_create_exec_table(struct gl_context *ctx)     /* 200. GL_IBM_multimode_draw_arrays */  #if _HAVE_FULL_GL -   SET_MultiModeDrawArraysIBM(exec, _mesa_MultiModeDrawArraysIBM); -   SET_MultiModeDrawElementsIBM(exec, _mesa_MultiModeDrawElementsIBM); +   if (ctx->API != API_OPENGLES2) { +      SET_MultiModeDrawArraysIBM(exec, _mesa_MultiModeDrawArraysIBM); +      SET_MultiModeDrawElementsIBM(exec, _mesa_MultiModeDrawElementsIBM); +   }  #endif     /* 233. GL_NV_vertex_program */ @@ -477,7 +501,6 @@ _mesa_create_exec_table(struct gl_context *ctx)        SET_GetVertexAttribdvNV(exec, _mesa_GetVertexAttribdvNV);        SET_GetVertexAttribfvNV(exec, _mesa_GetVertexAttribfvNV);        SET_GetVertexAttribivNV(exec, _mesa_GetVertexAttribivNV); -      SET_GetVertexAttribPointervNV(exec, _mesa_GetVertexAttribPointervNV);        SET_IsProgramNV(exec, _mesa_IsProgramARB);        SET_LoadProgramNV(exec, _mesa_LoadProgramNV);        SET_ProgramEnvParameter4dARB(exec, _mesa_ProgramEnvParameter4dARB); /* alias to ProgramParameter4dNV */ @@ -491,13 +514,14 @@ _mesa_create_exec_table(struct gl_context *ctx)        /* glVertexAttrib*NV functions handled in api_loopback.c */     }  #endif +   SET_GetVertexAttribPointervNV(exec, _mesa_GetVertexAttribPointervNV);     /* 273. GL_APPLE_vertex_array_object */     if (ctx->API == API_OPENGL) {        SET_BindVertexArrayAPPLE(exec, _mesa_BindVertexArrayAPPLE);        SET_GenVertexArraysAPPLE(exec, _mesa_GenVertexArraysAPPLE);     } -   /* Reused by ARB_vertex_array_object */ +   /* Reused by ARB_vertex_array_object / OES_vertex_array_object */     SET_DeleteVertexArraysAPPLE(exec, _mesa_DeleteVertexArraysAPPLE);     SET_IsVertexArrayAPPLE(exec, _mesa_IsVertexArrayAPPLE); @@ -533,22 +557,32 @@ _mesa_create_exec_table(struct gl_context *ctx)  #endif     /* 285. GL_NV_primitive_restart */ -   SET_PrimitiveRestartIndexNV(exec, _mesa_PrimitiveRestartIndex); +   if (ctx->API != API_OPENGLES2) { +      SET_PrimitiveRestartIndexNV(exec, _mesa_PrimitiveRestartIndex); +   }     /* ???. GL_EXT_depth_bounds_test */ -   SET_DepthBoundsEXT(exec, _mesa_DepthBoundsEXT); +   if (ctx->API != API_OPENGLES2) { +      SET_DepthBoundsEXT(exec, _mesa_DepthBoundsEXT); +   }     /* 352. GL_EXT_transform_feedback */     /* ARB 93. GL_ARB_transform_feedback2 */ -   _mesa_init_transform_feedback_dispatch(exec); +   if (ctx->API != API_OPENGLES2) { +      _mesa_init_transform_feedback_dispatch(exec); +   }     /* 364. GL_EXT_provoking_vertex */ -   SET_ProvokingVertexEXT(exec, _mesa_ProvokingVertexEXT); +   if (ctx->API != API_OPENGLES2) { +      SET_ProvokingVertexEXT(exec, _mesa_ProvokingVertexEXT); +   }     /* ARB 1. GL_ARB_multitexture */  #if _HAVE_FULL_GL     SET_ActiveTextureARB(exec, _mesa_ActiveTextureARB); -   SET_ClientActiveTextureARB(exec, _mesa_ClientActiveTextureARB); +   if (ctx->API != API_OPENGL_CORE && ctx->API != API_OPENGLES2) { +      SET_ClientActiveTextureARB(exec, _mesa_ClientActiveTextureARB); +   }  #endif     /* ARB 3. GL_ARB_transpose_matrix */ @@ -568,16 +602,21 @@ _mesa_create_exec_table(struct gl_context *ctx)     /* ARB 12. GL_ARB_texture_compression */  #if _HAVE_FULL_GL +   if (ctx->API != API_OPENGLES2) { +      SET_CompressedTexImage1DARB(exec, _mesa_CompressedTexImage1DARB); +      SET_CompressedTexSubImage1DARB(exec, _mesa_CompressedTexSubImage1DARB); +      SET_GetCompressedTexImageARB(exec, _mesa_GetCompressedTexImageARB); +   } +     SET_CompressedTexImage3DARB(exec, _mesa_CompressedTexImage3DARB);     SET_CompressedTexImage2DARB(exec, _mesa_CompressedTexImage2DARB); -   SET_CompressedTexImage1DARB(exec, _mesa_CompressedTexImage1DARB);     SET_CompressedTexSubImage3DARB(exec, _mesa_CompressedTexSubImage3DARB);     SET_CompressedTexSubImage2DARB(exec, _mesa_CompressedTexSubImage2DARB); -   SET_CompressedTexSubImage1DARB(exec, _mesa_CompressedTexSubImage1DARB); -   SET_GetCompressedTexImageARB(exec, _mesa_GetCompressedTexImageARB);     /* ARB 104. GL_ARB_robustness */ -   SET_GetnCompressedTexImageARB(exec, _mesa_GetnCompressedTexImageARB); +   if (ctx->API != API_OPENGLES2) { +      SET_GetnCompressedTexImageARB(exec, _mesa_GetnCompressedTexImageARB); +   }  #endif     /* ARB 14. GL_ARB_point_parameters */ @@ -625,12 +664,15 @@ _mesa_create_exec_table(struct gl_context *ctx)     SET_VertexAttribPointerARB(exec, _mesa_VertexAttribPointerARB);     SET_EnableVertexAttribArrayARB(exec, _mesa_EnableVertexAttribArrayARB);     SET_DisableVertexAttribArrayARB(exec, _mesa_DisableVertexAttribArrayARB); -   SET_ProgramStringARB(exec, _mesa_ProgramStringARB); -   /* glBindProgramARB aliases glBindProgramNV */ -   /* glDeleteProgramsARB aliases glDeleteProgramsNV */ -   /* glGenProgramsARB aliases glGenProgramsNV */ -   /* glIsProgramARB aliases glIsProgramNV */ -   SET_GetVertexAttribdvARB(exec, _mesa_GetVertexAttribdvARB); +   if (ctx->API != API_OPENGLES2) { +      SET_ProgramStringARB(exec, _mesa_ProgramStringARB); +      /* glBindProgramARB aliases glBindProgramNV */ +      /* glDeleteProgramsARB aliases glDeleteProgramsNV */ +      /* glGenProgramsARB aliases glGenProgramsNV */ +      /* glIsProgramARB aliases glIsProgramNV */ +      SET_GetVertexAttribdvARB(exec, _mesa_GetVertexAttribdvARB); +   } +     SET_GetVertexAttribfvARB(exec, _mesa_GetVertexAttribfvARB);     SET_GetVertexAttribivARB(exec, _mesa_GetVertexAttribivARB);     /* glGetVertexAttribPointervARB aliases glGetVertexAttribPointervNV */ @@ -656,7 +698,9 @@ _mesa_create_exec_table(struct gl_context *ctx)     _mesa_init_bufferobj_dispatch(ctx, exec);     /* ARB 29. GL_ARB_occlusion_query */ -   _mesa_init_queryobj_dispatch(exec); +   if (ctx->API != API_OPENGLES2) { +      _mesa_init_queryobj_dispatch(exec); +   }     /* ARB 37. GL_ARB_draw_buffers */  #if FEATURE_draw_read_buffer @@ -664,16 +708,22 @@ _mesa_create_exec_table(struct gl_context *ctx)  #endif     /* ARB 66. GL_ARB_sync */ -   _mesa_init_sync_dispatch(exec); +   if (ctx->API != API_OPENGLES2) { +      _mesa_init_sync_dispatch(exec); +   }     /* ARB 104. GL_ARB_debug_output */ -   _mesa_init_errors_dispatch(exec); +   if (ctx->API != API_OPENGLES2) { +      _mesa_init_errors_dispatch(exec); +   }     /* ARB 105. GL_ARB_robustness */ -   SET_GetGraphicsResetStatusARB(exec, _mesa_GetGraphicsResetStatusARB); -   SET_GetnPolygonStippleARB(exec, _mesa_GetnPolygonStippleARB); -   SET_GetnTexImageARB(exec, _mesa_GetnTexImageARB); -   SET_ReadnPixelsARB(exec, _mesa_ReadnPixelsARB); +   if (ctx->API != API_OPENGLES2) { +      SET_GetGraphicsResetStatusARB(exec, _mesa_GetGraphicsResetStatusARB); +      SET_GetnPolygonStippleARB(exec, _mesa_GetnPolygonStippleARB); +      SET_GetnTexImageARB(exec, _mesa_GetnTexImageARB); +      SET_ReadnPixelsARB(exec, _mesa_ReadnPixelsARB); +   }    /* GL_ATI_fragment_shader */     if (ctx->API == API_OPENGL) { @@ -700,7 +750,9 @@ _mesa_create_exec_table(struct gl_context *ctx)     SET_DeleteFramebuffersEXT(exec, _mesa_DeleteFramebuffersEXT);     SET_GenFramebuffersEXT(exec, _mesa_GenFramebuffersEXT);     SET_CheckFramebufferStatusEXT(exec, _mesa_CheckFramebufferStatusEXT); -   SET_FramebufferTexture1DEXT(exec, _mesa_FramebufferTexture1DEXT); +   if (ctx->API != API_OPENGLES2) { +      SET_FramebufferTexture1DEXT(exec, _mesa_FramebufferTexture1DEXT); +   }     SET_FramebufferTexture2DEXT(exec, _mesa_FramebufferTexture2DEXT);     SET_FramebufferTexture3DEXT(exec, _mesa_FramebufferTexture3DEXT);     SET_FramebufferRenderbufferEXT(exec, _mesa_FramebufferRenderbufferEXT); @@ -709,7 +761,9 @@ _mesa_create_exec_table(struct gl_context *ctx)  #endif  #if FEATURE_EXT_framebuffer_blit -   SET_BlitFramebufferEXT(exec, _mesa_BlitFramebufferEXT); +   if (ctx->API != API_OPENGLES2) { +      SET_BlitFramebufferEXT(exec, _mesa_BlitFramebufferEXT); +   }  #endif     /* GL_EXT_gpu_program_parameters */ @@ -722,7 +776,9 @@ _mesa_create_exec_table(struct gl_context *ctx)     /* GL_MESA_texture_array / GL_EXT_texture_array */  #if FEATURE_EXT_framebuffer_object -   SET_FramebufferTextureLayerEXT(exec, _mesa_FramebufferTextureLayerEXT); +   if (ctx->API != API_OPENGLES2) { +      SET_FramebufferTextureLayerEXT(exec, _mesa_FramebufferTextureLayerEXT); +   }  #endif     /* GL_ATI_separate_stencil */ @@ -734,32 +790,42 @@ _mesa_create_exec_table(struct gl_context *ctx)     /* The ARB_fbo functions are the union of      * GL_EXT_fbo, GL_EXT_framebuffer_blit, GL_EXT_texture_array      */ -   SET_RenderbufferStorageMultisample(exec, _mesa_RenderbufferStorageMultisample); +   if (ctx->API != API_OPENGLES2) { +      SET_RenderbufferStorageMultisample(exec, _mesa_RenderbufferStorageMultisample); +   }  #endif  #if FEATURE_ARB_map_buffer_range -   SET_MapBufferRange(exec, _mesa_MapBufferRange); -   SET_FlushMappedBufferRange(exec, _mesa_FlushMappedBufferRange); +   if (ctx->API != API_OPENGLES2) { +      SET_MapBufferRange(exec, _mesa_MapBufferRange); +      SET_FlushMappedBufferRange(exec, _mesa_FlushMappedBufferRange); +   }  #endif     /* GL_ARB_copy_buffer */ -   SET_CopyBufferSubData(exec, _mesa_CopyBufferSubData); +   if (ctx->API != API_OPENGLES2) { +      SET_CopyBufferSubData(exec, _mesa_CopyBufferSubData); +   } -   /* GL_ARB_vertex_array_object */ +   /* GL_ARB_vertex_array_object / GL_OES_vertex_array_object */     SET_BindVertexArray(exec, _mesa_BindVertexArray);     SET_GenVertexArrays(exec, _mesa_GenVertexArrays);     /* GL_EXT_draw_buffers2 */ -   SET_ColorMaskIndexedEXT(exec, _mesa_ColorMaskIndexed); -   SET_GetBooleanIndexedvEXT(exec, _mesa_GetBooleanIndexedv); -   SET_GetIntegerIndexedvEXT(exec, _mesa_GetIntegerIndexedv); -   SET_EnableIndexedEXT(exec, _mesa_EnableIndexed); -   SET_DisableIndexedEXT(exec, _mesa_DisableIndexed); -   SET_IsEnabledIndexedEXT(exec, _mesa_IsEnabledIndexed); +   if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { +      SET_ColorMaskIndexedEXT(exec, _mesa_ColorMaskIndexed); +      SET_GetBooleanIndexedvEXT(exec, _mesa_GetBooleanIndexedv); +      SET_GetIntegerIndexedvEXT(exec, _mesa_GetIntegerIndexedv); +      SET_EnableIndexedEXT(exec, _mesa_EnableIndexed); +      SET_DisableIndexedEXT(exec, _mesa_DisableIndexed); +      SET_IsEnabledIndexedEXT(exec, _mesa_IsEnabledIndexed); +   }     /* GL_NV_conditional_render */ -   SET_BeginConditionalRenderNV(exec, _mesa_BeginConditionalRender); -   SET_EndConditionalRenderNV(exec, _mesa_EndConditionalRender); +   if (ctx->API != API_OPENGLES2) { +      SET_BeginConditionalRenderNV(exec, _mesa_BeginConditionalRender); +      SET_EndConditionalRenderNV(exec, _mesa_EndConditionalRender); +   }  #if FEATURE_OES_EGL_image     SET_EGLImageTargetTexture2DOES(exec, _mesa_EGLImageTargetTexture2DOES); @@ -767,64 +833,90 @@ _mesa_create_exec_table(struct gl_context *ctx)  #endif  #if FEATURE_APPLE_object_purgeable -   SET_ObjectPurgeableAPPLE(exec, _mesa_ObjectPurgeableAPPLE); -   SET_ObjectUnpurgeableAPPLE(exec, _mesa_ObjectUnpurgeableAPPLE); -   SET_GetObjectParameterivAPPLE(exec, _mesa_GetObjectParameterivAPPLE); +   if (ctx->API != API_OPENGLES2) { +      SET_ObjectPurgeableAPPLE(exec, _mesa_ObjectPurgeableAPPLE); +      SET_ObjectUnpurgeableAPPLE(exec, _mesa_ObjectUnpurgeableAPPLE); +      SET_GetObjectParameterivAPPLE(exec, _mesa_GetObjectParameterivAPPLE); +   }  #endif  #if FEATURE_ARB_geometry_shader4 -   SET_FramebufferTextureARB(exec, _mesa_FramebufferTextureARB); -   SET_FramebufferTextureFaceARB(exec, _mesa_FramebufferTextureFaceARB); +   if (ctx->API != API_OPENGLES2) { +      SET_FramebufferTextureARB(exec, _mesa_FramebufferTextureARB); +      SET_FramebufferTextureFaceARB(exec, _mesa_FramebufferTextureFaceARB); +   }  #endif -   SET_ClampColorARB(exec, _mesa_ClampColorARB); +   if (ctx->API != API_OPENGLES2) { +      SET_ClampColorARB(exec, _mesa_ClampColorARB); +   }     /* GL_EXT_texture_integer */ -   SET_ClearColorIiEXT(exec, _mesa_ClearColorIiEXT); -   SET_ClearColorIuiEXT(exec, _mesa_ClearColorIuiEXT); -   SET_GetTexParameterIivEXT(exec, _mesa_GetTexParameterIiv); -   SET_GetTexParameterIuivEXT(exec, _mesa_GetTexParameterIuiv); -   SET_TexParameterIivEXT(exec, _mesa_TexParameterIiv); -   SET_TexParameterIuivEXT(exec, _mesa_TexParameterIuiv); +   if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) { +      SET_ClearColorIiEXT(exec, _mesa_ClearColorIiEXT); +      SET_ClearColorIuiEXT(exec, _mesa_ClearColorIuiEXT); +   } +   if (ctx->API != API_OPENGLES2) { +      SET_GetTexParameterIivEXT(exec, _mesa_GetTexParameterIiv); +      SET_GetTexParameterIuivEXT(exec, _mesa_GetTexParameterIuiv); +      SET_TexParameterIivEXT(exec, _mesa_TexParameterIiv); +      SET_TexParameterIuivEXT(exec, _mesa_TexParameterIuiv); +   }     /* GL_EXT_gpu_shader4 / OpenGL 3.0 */ -   SET_GetVertexAttribIivEXT(exec, _mesa_GetVertexAttribIiv); -   SET_GetVertexAttribIuivEXT(exec, _mesa_GetVertexAttribIuiv); -   SET_VertexAttribIPointerEXT(exec, _mesa_VertexAttribIPointer); +   if (ctx->API != API_OPENGLES2) { +      SET_GetVertexAttribIivEXT(exec, _mesa_GetVertexAttribIiv); +      SET_GetVertexAttribIuivEXT(exec, _mesa_GetVertexAttribIuiv); +      SET_VertexAttribIPointerEXT(exec, _mesa_VertexAttribIPointer); +   }     /* GL 3.0 (functions not covered by other extensions) */ -   SET_ClearBufferiv(exec, _mesa_ClearBufferiv); -   SET_ClearBufferuiv(exec, _mesa_ClearBufferuiv); -   SET_ClearBufferfv(exec, _mesa_ClearBufferfv); -   SET_ClearBufferfi(exec, _mesa_ClearBufferfi); -   SET_GetStringi(exec, _mesa_GetStringi); -   SET_ClampColor(exec, _mesa_ClampColorARB); +   if (ctx->API != API_OPENGLES2) { +      SET_ClearBufferiv(exec, _mesa_ClearBufferiv); +      SET_ClearBufferuiv(exec, _mesa_ClearBufferuiv); +      SET_ClearBufferfv(exec, _mesa_ClearBufferfv); +      SET_ClearBufferfi(exec, _mesa_ClearBufferfi); +      SET_GetStringi(exec, _mesa_GetStringi); +      SET_ClampColor(exec, _mesa_ClampColorARB); +   }     /* GL_ARB_instanced_arrays */ -   SET_VertexAttribDivisorARB(exec, _mesa_VertexAttribDivisor); +   if (ctx->API != API_OPENGLES2) { +      SET_VertexAttribDivisorARB(exec, _mesa_VertexAttribDivisor); +   }     /* GL_ARB_draw_buffer_blend */ -   SET_BlendFunciARB(exec, _mesa_BlendFunci); -   SET_BlendFuncSeparateiARB(exec, _mesa_BlendFuncSeparatei); -   SET_BlendEquationiARB(exec, _mesa_BlendEquationi); -   SET_BlendEquationSeparateiARB(exec, _mesa_BlendEquationSeparatei); +   if (ctx->API != API_OPENGLES2) { +      SET_BlendFunciARB(exec, _mesa_BlendFunci); +      SET_BlendFuncSeparateiARB(exec, _mesa_BlendFuncSeparatei); +      SET_BlendEquationiARB(exec, _mesa_BlendEquationi); +      SET_BlendEquationSeparateiARB(exec, _mesa_BlendEquationSeparatei); +   }     /* GL_NV_texture_barrier */ -   SET_TextureBarrierNV(exec, _mesa_TextureBarrierNV); +   if (ctx->API != API_OPENGLES2) { +      SET_TextureBarrierNV(exec, _mesa_TextureBarrierNV); +   }     /* GL_ARB_texture_buffer_object */ -   SET_TexBufferARB(exec, _mesa_TexBuffer); +   if (ctx->API != API_OPENGLES2) { +      SET_TexBufferARB(exec, _mesa_TexBuffer); +   }     /* GL_ARB_texture_storage */ -   SET_TexStorage1D(exec, _mesa_TexStorage1D); +   if (ctx->API != API_OPENGLES2) { +      SET_TexStorage1D(exec, _mesa_TexStorage1D); +      SET_TextureStorage1DEXT(exec, _mesa_TextureStorage1DEXT); +   }     SET_TexStorage2D(exec, _mesa_TexStorage2D);     SET_TexStorage3D(exec, _mesa_TexStorage3D); -   SET_TextureStorage1DEXT(exec, _mesa_TextureStorage1DEXT);     SET_TextureStorage2DEXT(exec, _mesa_TextureStorage2DEXT);     SET_TextureStorage3DEXT(exec, _mesa_TextureStorage3DEXT);  #if FEATURE_ARB_sampler_objects -   _mesa_init_sampler_object_dispatch(exec); +   if (ctx->API != API_OPENGLES2) { +      _mesa_init_sampler_object_dispatch(exec); +   }  #endif     if (_mesa_is_desktop_gl(ctx)) { @@ -840,4 +932,4 @@ _mesa_create_exec_table(struct gl_context *ctx)     return exec;  } -#endif /* FEATURE_GL */ +#endif /* FEATURE_GL || FEATURE_ES2 */ diff --git a/mesalib/src/mesa/main/api_validate.c b/mesalib/src/mesa/main/api_validate.c index b15dfba73..d0d2ca4d4 100644 --- a/mesalib/src/mesa/main/api_validate.c +++ b/mesalib/src/mesa/main/api_validate.c @@ -22,6 +22,7 @@   * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.   */ +#include <stdbool.h>  #include "glheader.h"  #include "api_validate.h"  #include "bufferobj.h" @@ -209,12 +210,36 @@ check_index_bounds(struct gl_context *ctx, GLsizei count, GLenum type,  GLboolean  _mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name)  { -   if (ctx->Extensions.ARB_geometry_shader4 && -       mode > GL_TRIANGLE_STRIP_ADJACENCY_ARB) { -      _mesa_error(ctx, GL_INVALID_ENUM, "%s(mode=%x)", name, mode); -      return GL_FALSE; +   bool valid_enum; + +   switch (mode) { +   case GL_POINTS: +   case GL_LINES: +   case GL_LINE_LOOP: +   case GL_LINE_STRIP: +   case GL_TRIANGLES: +   case GL_TRIANGLE_STRIP: +   case GL_TRIANGLE_FAN: +      valid_enum = true; +      break; +   case GL_QUADS: +   case GL_QUAD_STRIP: +   case GL_POLYGON: +      valid_enum = (ctx->API == API_OPENGL); +      break; +   case GL_LINES_ADJACENCY: +   case GL_LINE_STRIP_ADJACENCY: +   case GL_TRIANGLES_ADJACENCY: +   case GL_TRIANGLE_STRIP_ADJACENCY: +      valid_enum = _mesa_is_desktop_gl(ctx) +         && ctx->Extensions.ARB_geometry_shader4; +      break; +   default: +      valid_enum = false; +      break;     } -   else if (mode > GL_POLYGON) { + +   if (!valid_enum) {        _mesa_error(ctx, GL_INVALID_ENUM, "%s(mode=%x)", name, mode);        return GL_FALSE;     } diff --git a/mesalib/src/mesa/main/arrayobj.c b/mesalib/src/mesa/main/arrayobj.c index 3439ab6b5..9337fe725 100644 --- a/mesalib/src/mesa/main/arrayobj.c +++ b/mesalib/src/mesa/main/arrayobj.c @@ -457,7 +457,7 @@ _mesa_DeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids)  	  * becomes current."  	  */  	 if ( obj == ctx->Array.ArrayObj ) { -	    CALL_BindVertexArrayAPPLE( ctx->Exec, (0) ); +	    _mesa_BindVertexArray(0);  	 }  	 /* The ID is immediately freed for re-use */ diff --git a/mesalib/src/mesa/main/attrib.c b/mesalib/src/mesa/main/attrib.c index 1a04eebdd..8cb2a689b 100644 --- a/mesalib/src/mesa/main/attrib.c +++ b/mesalib/src/mesa/main/attrib.c @@ -989,7 +989,8 @@ _mesa_PopAttrib(void)                 _mesa_ClampColorARB(GL_CLAMP_READ_COLOR_ARB, color->ClampReadColor);                 /* GL_ARB_framebuffer_sRGB / GL_EXT_framebuffer_sRGB */ -               _mesa_set_enable(ctx, GL_FRAMEBUFFER_SRGB, color->sRGBEnabled); +               if (ctx->Extensions.EXT_framebuffer_sRGB) +                  _mesa_set_enable(ctx, GL_FRAMEBUFFER_SRGB, color->sRGBEnabled);              }              break;           case GL_CURRENT_BIT: diff --git a/mesalib/src/mesa/main/blend.c b/mesalib/src/mesa/main/blend.c index 5bc40a028..de871a92a 100644 --- a/mesalib/src/mesa/main/blend.c +++ b/mesalib/src/mesa/main/blend.c @@ -58,16 +58,18 @@ legal_src_factor(const struct gl_context *ctx, GLenum factor)     case GL_DST_ALPHA:     case GL_ONE_MINUS_DST_ALPHA:     case GL_SRC_ALPHA_SATURATE: +      return GL_TRUE;     case GL_CONSTANT_COLOR:     case GL_ONE_MINUS_CONSTANT_COLOR:     case GL_CONSTANT_ALPHA:     case GL_ONE_MINUS_CONSTANT_ALPHA: -      return GL_TRUE; +      return _mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2;     case GL_SRC1_COLOR:     case GL_SRC1_ALPHA:     case GL_ONE_MINUS_SRC1_COLOR:     case GL_ONE_MINUS_SRC1_ALPHA: -      return ctx->Extensions.ARB_blend_func_extended; +      return _mesa_is_desktop_gl(ctx) +         && ctx->Extensions.ARB_blend_func_extended;     default:        return GL_FALSE;     } @@ -93,17 +95,22 @@ legal_dst_factor(const struct gl_context *ctx, GLenum factor)     case GL_ONE_MINUS_SRC_ALPHA:     case GL_DST_ALPHA:     case GL_ONE_MINUS_DST_ALPHA: +      return GL_TRUE;     case GL_CONSTANT_COLOR:     case GL_ONE_MINUS_CONSTANT_COLOR:     case GL_CONSTANT_ALPHA:     case GL_ONE_MINUS_CONSTANT_ALPHA: -      return GL_TRUE; +      return _mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2;     case GL_SRC_ALPHA_SATURATE: +      return (_mesa_is_desktop_gl(ctx) +              && ctx->Extensions.ARB_blend_func_extended) +         || _mesa_is_gles3(ctx);     case GL_SRC1_COLOR:     case GL_SRC1_ALPHA:     case GL_ONE_MINUS_SRC1_COLOR:     case GL_ONE_MINUS_SRC1_ALPHA: -      return ctx->Extensions.ARB_blend_func_extended; +      return _mesa_is_desktop_gl(ctx) +         && ctx->Extensions.ARB_blend_func_extended;     default:        return GL_FALSE;     } diff --git a/mesalib/src/mesa/main/bufferobj.c b/mesalib/src/mesa/main/bufferobj.c index f8938a510..728cc51da 100644 --- a/mesalib/src/mesa/main/bufferobj.c +++ b/mesalib/src/mesa/main/bufferobj.c @@ -720,6 +720,10 @@ bind_buffer_object(struct gl_context *ctx, GLenum target, GLuint buffer)     else {        /* non-default buffer object */        newBufObj = _mesa_lookup_bufferobj(ctx, buffer); +      if (newBufObj == NULL && ctx->API == API_OPENGL_CORE) { +         _mesa_error(ctx, GL_INVALID_OPERATION, "glBindBuffer(non-gen name)"); +         return; +      }        handle_bind_buffer_gen(ctx, target, buffer, &newBufObj);     } diff --git a/mesalib/src/mesa/main/clear.c b/mesalib/src/mesa/main/clear.c index 7cc204bc5..f07d5333b 100644 --- a/mesalib/src/mesa/main/clear.c +++ b/mesalib/src/mesa/main/clear.c @@ -167,6 +167,15 @@ _mesa_Clear( GLbitfield mask )        return;     } +   /* Accumulation buffers were removed in core contexts, and they never +    * existed in OpenGL ES. +    */ +   if ((mask & GL_ACCUM_BUFFER_BIT) != 0 +       && (ctx->API == API_OPENGL_CORE || _mesa_is_gles(ctx))) { +      _mesa_error( ctx, GL_INVALID_VALUE, "glClear(GL_ACCUM_BUFFER_BIT)"); +      return; +   } +     if (ctx->NewState) {        _mesa_update_state( ctx );	/* update _Xmin, etc */     } @@ -510,7 +519,7 @@ _mesa_ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)              /* save color */              clearSave = ctx->Color.ClearColor;              /* set color */ -            COPY_4V_CAST(ctx->Color.ClearColor.f, value, GLclampf); +            COPY_4V(ctx->Color.ClearColor.f, value);              /* clear buffer(s) */              ctx->Driver.Clear(ctx, mask);              /* restore color */ diff --git a/mesalib/src/mesa/main/compiler.h b/mesalib/src/mesa/main/compiler.h index bfa06f37d..94484d8f3 100644 --- a/mesalib/src/mesa/main/compiler.h +++ b/mesalib/src/mesa/main/compiler.h @@ -241,6 +241,9 @@ static INLINE GLuint CPU_TO_LE32(GLuint x)             ((x & 0x00ff0000) >>  8) |             ((x & 0xff000000) >> 24));  } +#elif defined(__OpenBSD__) +#include <sys/types.h> +#define CPU_TO_LE32( x )	htole32( x )  #else /*__linux__ */  #include <sys/endian.h>  #define CPU_TO_LE32( x )	bswap32( x ) diff --git a/mesalib/src/mesa/main/context.c b/mesalib/src/mesa/main/context.c index b78bceeb9..feddbaa7e 100644 --- a/mesalib/src/mesa/main/context.c +++ b/mesalib/src/mesa/main/context.c @@ -431,7 +431,7 @@ one_time_init( struct gl_context *ctx )         * when an app is linked to libGLES*, there are not enough dynamic         * entries.         */ -      if (_mesa_is_desktop_gl(ctx)) +      if (_mesa_is_desktop_gl(ctx) || ctx->API == API_OPENGLES2)           _mesa_init_remap_table();     } @@ -964,9 +964,10 @@ _mesa_initialize_context(struct gl_context *ctx,  #if FEATURE_dispatch     /* setup the API dispatch tables */     switch (ctx->API) { -#if FEATURE_GL +#if FEATURE_GL || FEATURE_ES2     case API_OPENGL:     case API_OPENGL_CORE: +   case API_OPENGLES2:        ctx->Exec = _mesa_create_exec_table(ctx);        break;  #endif @@ -975,11 +976,6 @@ _mesa_initialize_context(struct gl_context *ctx,        ctx->Exec = _mesa_create_exec_table_es1();        break;  #endif -#if FEATURE_ES2 -   case API_OPENGLES2: -      ctx->Exec = _mesa_create_exec_table_es2(); -      break; -#endif     default:        _mesa_problem(ctx, "unknown or unsupported API");        break; @@ -1012,7 +1008,6 @@ _mesa_initialize_context(struct gl_context *ctx,     switch (ctx->API) {     case API_OPENGL: -   case API_OPENGL_CORE:  #if FEATURE_dlist        ctx->Save = _mesa_create_save_table();        if (!ctx->Save) { @@ -1023,6 +1018,7 @@ _mesa_initialize_context(struct gl_context *ctx,        _mesa_install_save_vtxfmt( ctx, &ctx->ListState.ListVtxfmt );  #endif +   case API_OPENGL_CORE:        break;     case API_OPENGLES:        /** diff --git a/mesalib/src/mesa/main/enable.c b/mesalib/src/mesa/main/enable.c index f8110578a..14eea53fe 100644 --- a/mesalib/src/mesa/main/enable.c +++ b/mesalib/src/mesa/main/enable.c @@ -38,6 +38,7 @@  #include "enums.h"  #include "api_arrayelt.h"  #include "texstate.h" +#include "drivers/common/meta.h" @@ -209,8 +210,6 @@ _mesa_DisableClientState( GLenum cap )        goto invalid_enum_error;						\     } - -  /**   * Return pointer to current texture unit for setting/getting coordinate   * state. @@ -274,12 +273,16 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)     switch (cap) {        case GL_ALPHA_TEST: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (ctx->Color.AlphaEnabled == state)              return;           FLUSH_VERTICES(ctx, _NEW_COLOR);           ctx->Color.AlphaEnabled = state;           break;        case GL_AUTO_NORMAL: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.AutoNormal == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL); @@ -327,6 +330,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           break;  #endif        case GL_COLOR_MATERIAL: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (ctx->Light.ColorMaterialEnabled == state)              return;           FLUSH_VERTICES(ctx, _NEW_LIGHT); @@ -350,6 +355,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->Depth.Test = state;           break;        case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           ctx->Debug.SyncOutput = state;           break;        case GL_DITHER: @@ -359,6 +366,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->Color.DitherFlag = state;           break;        case GL_FOG: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (ctx->Fog.Enabled == state)              return;           FLUSH_VERTICES(ctx, _NEW_FOG); @@ -372,6 +381,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        case GL_LIGHT5:        case GL_LIGHT6:        case GL_LIGHT7: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (ctx->Light.Light[cap-GL_LIGHT0].Enabled == state)              return;           FLUSH_VERTICES(ctx, _NEW_LIGHT); @@ -385,6 +396,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           }           break;        case GL_LIGHTING: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (ctx->Light.Enabled == state)              return;           FLUSH_VERTICES(ctx, _NEW_LIGHT); @@ -395,6 +408,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)              ctx->_TriangleCaps &= ~DD_TRI_LIGHT_TWOSIDE;           break;        case GL_LINE_SMOOTH: +         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (ctx->Line.SmoothFlag == state)              return;           FLUSH_VERTICES(ctx, _NEW_LINE); @@ -402,6 +417,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->_TriangleCaps ^= DD_LINE_SMOOTH;           break;        case GL_LINE_STIPPLE: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Line.StippleFlag == state)              return;           FLUSH_VERTICES(ctx, _NEW_LINE); @@ -409,132 +426,176 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->_TriangleCaps ^= DD_LINE_STIPPLE;           break;        case GL_INDEX_LOGIC_OP: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Color.IndexLogicOpEnabled == state)              return;           FLUSH_VERTICES(ctx, _NEW_COLOR);           ctx->Color.IndexLogicOpEnabled = state;           break;        case GL_COLOR_LOGIC_OP: +         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (ctx->Color.ColorLogicOpEnabled == state)              return;           FLUSH_VERTICES(ctx, _NEW_COLOR);           ctx->Color.ColorLogicOpEnabled = state;           break;        case GL_MAP1_COLOR_4: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map1Color4 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map1Color4 = state;           break;        case GL_MAP1_INDEX: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map1Index == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map1Index = state;           break;        case GL_MAP1_NORMAL: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map1Normal == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map1Normal = state;           break;        case GL_MAP1_TEXTURE_COORD_1: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map1TextureCoord1 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map1TextureCoord1 = state;           break;        case GL_MAP1_TEXTURE_COORD_2: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map1TextureCoord2 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map1TextureCoord2 = state;           break;        case GL_MAP1_TEXTURE_COORD_3: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map1TextureCoord3 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map1TextureCoord3 = state;           break;        case GL_MAP1_TEXTURE_COORD_4: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map1TextureCoord4 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map1TextureCoord4 = state;           break;        case GL_MAP1_VERTEX_3: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map1Vertex3 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map1Vertex3 = state;           break;        case GL_MAP1_VERTEX_4: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map1Vertex4 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map1Vertex4 = state;           break;        case GL_MAP2_COLOR_4: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map2Color4 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map2Color4 = state;           break;        case GL_MAP2_INDEX: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map2Index == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map2Index = state;           break;        case GL_MAP2_NORMAL: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map2Normal == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map2Normal = state;           break;        case GL_MAP2_TEXTURE_COORD_1: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map2TextureCoord1 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map2TextureCoord1 = state;           break;        case GL_MAP2_TEXTURE_COORD_2: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map2TextureCoord2 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map2TextureCoord2 = state;           break;        case GL_MAP2_TEXTURE_COORD_3: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map2TextureCoord3 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map2TextureCoord3 = state;           break;        case GL_MAP2_TEXTURE_COORD_4: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map2TextureCoord4 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map2TextureCoord4 = state;           break;        case GL_MAP2_VERTEX_3: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map2Vertex3 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map2Vertex3 = state;           break;        case GL_MAP2_VERTEX_4: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Eval.Map2Vertex4 == state)              return;           FLUSH_VERTICES(ctx, _NEW_EVAL);           ctx->Eval.Map2Vertex4 = state;           break;        case GL_NORMALIZE: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (ctx->Transform.Normalize == state)              return;           FLUSH_VERTICES(ctx, _NEW_TRANSFORM);           ctx->Transform.Normalize = state;           break;        case GL_POINT_SMOOTH: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (ctx->Point.SmoothFlag == state)              return;           FLUSH_VERTICES(ctx, _NEW_POINT); @@ -542,6 +603,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->_TriangleCaps ^= DD_POINT_SMOOTH;           break;        case GL_POLYGON_SMOOTH: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           if (ctx->Polygon.SmoothFlag == state)              return;           FLUSH_VERTICES(ctx, _NEW_POLYGON); @@ -549,6 +612,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->_TriangleCaps ^= DD_TRI_SMOOTH;           break;        case GL_POLYGON_STIPPLE: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (ctx->Polygon.StippleFlag == state)              return;           FLUSH_VERTICES(ctx, _NEW_POLYGON); @@ -556,12 +621,16 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->_TriangleCaps ^= DD_TRI_STIPPLE;           break;        case GL_POLYGON_OFFSET_POINT: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           if (ctx->Polygon.OffsetPoint == state)              return;           FLUSH_VERTICES(ctx, _NEW_POLYGON);           ctx->Polygon.OffsetPoint = state;           break;        case GL_POLYGON_OFFSET_LINE: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           if (ctx->Polygon.OffsetLine == state)              return;           FLUSH_VERTICES(ctx, _NEW_POLYGON); @@ -574,6 +643,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->Polygon.OffsetFill = state;           break;        case GL_RESCALE_NORMAL_EXT: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (ctx->Transform.RescaleNormals == state)              return;           FLUSH_VERTICES(ctx, _NEW_TRANSFORM); @@ -592,16 +663,22 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->Stencil.Enabled = state;           break;        case GL_TEXTURE_1D: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           if (!enable_texture(ctx, state, TEXTURE_1D_BIT)) {              return;           }           break;        case GL_TEXTURE_2D: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (!enable_texture(ctx, state, TEXTURE_2D_BIT)) {              return;           }           break;        case GL_TEXTURE_3D: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (!enable_texture(ctx, state, TEXTURE_3D_BIT)) {              return;           } @@ -612,6 +689,10 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        case GL_TEXTURE_GEN_Q:           {              struct gl_texture_unit *texUnit = get_texcoord_unit(ctx); + +            if (ctx->API != API_OPENGL) +               goto invalid_enum_error; +              if (texUnit) {                 GLbitfield coordBit = S_BIT << (cap - GL_TEXTURE_GEN_S);                 GLbitfield newenabled = texUnit->TexGenEnabled & ~coordBit; @@ -630,6 +711,10 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)  	 /* disable S, T, and R at the same time */  	 {              struct gl_texture_unit *texUnit = get_texcoord_unit(ctx); + +            if (ctx->API != API_OPENGLES) +               goto invalid_enum_error; +              if (texUnit) {                 GLuint newenabled =  		  texUnit->TexGenEnabled & ~STR_BITS; @@ -659,6 +744,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        /* GL_ARB_texture_cube_map */        case GL_TEXTURE_CUBE_MAP_ARB: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           CHECK_EXTENSION(ARB_texture_cube_map, cap);           if (!enable_texture(ctx, state, TEXTURE_CUBE_BIT)) {              return; @@ -667,6 +754,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        /* GL_EXT_secondary_color */        case GL_COLOR_SUM_EXT: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION2(EXT_secondary_color, ARB_vertex_program, cap);           if (ctx->Fog.ColorSumEnabled == state)              return; @@ -676,6 +765,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        /* GL_ARB_multisample */        case GL_MULTISAMPLE_ARB: +         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (ctx->Multisample.Enabled == state)              return;           FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); @@ -688,6 +779,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->Multisample.SampleAlphaToCoverage = state;           break;        case GL_SAMPLE_ALPHA_TO_ONE_ARB: +         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           if (ctx->Multisample.SampleAlphaToOne == state)              return;           FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); @@ -700,6 +793,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->Multisample.SampleCoverage = state;           break;        case GL_SAMPLE_COVERAGE_INVERT_ARB: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           if (ctx->Multisample.SampleCoverageInvert == state)              return;           FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); @@ -708,6 +803,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        /* GL_IBM_rasterpos_clip */        case GL_RASTER_POSITION_UNCLIPPED_IBM: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(IBM_rasterpos_clip, cap);           if (ctx->Transform.RasterPositionUnclipped == state)              return; @@ -717,6 +814,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        /* GL_NV_point_sprite */        case GL_POINT_SPRITE_NV: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           CHECK_EXTENSION2(NV_point_sprite, ARB_point_sprite, cap);           if (ctx->Point.PointSprite == state)              return; @@ -726,6 +825,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)  #if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program        case GL_VERTEX_PROGRAM_ARB: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap);           if (ctx->VertexProgram.Enabled == state)              return; @@ -733,6 +834,11 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->VertexProgram.Enabled = state;           break;        case GL_VERTEX_PROGRAM_POINT_SIZE_ARB: +         /* This was added with ARB_vertex_program, but it is also used with +          * GLSL vertex shaders on desktop. +          */ +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap);           if (ctx->VertexProgram.PointSizeEnabled == state)              return; @@ -740,6 +846,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           ctx->VertexProgram.PointSizeEnabled = state;           break;        case GL_VERTEX_PROGRAM_TWO_SIDE_ARB: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program, cap);           if (ctx->VertexProgram.TwoSideEnabled == state)              return; @@ -764,6 +872,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        case GL_MAP1_VERTEX_ATTRIB13_4_NV:        case GL_MAP1_VERTEX_ATTRIB14_4_NV:        case GL_MAP1_VERTEX_ATTRIB15_4_NV: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(NV_vertex_program, cap);           {              const GLuint map = (GLuint) (cap - GL_MAP1_VERTEX_ATTRIB0_4_NV); @@ -787,6 +897,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        case GL_MAP2_VERTEX_ATTRIB13_4_NV:        case GL_MAP2_VERTEX_ATTRIB14_4_NV:        case GL_MAP2_VERTEX_ATTRIB15_4_NV: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(NV_vertex_program, cap);           {              const GLuint map = (GLuint) (cap - GL_MAP2_VERTEX_ATTRIB0_4_NV); @@ -798,6 +910,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)  #if FEATURE_NV_fragment_program        case GL_FRAGMENT_PROGRAM_NV: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(NV_fragment_program, cap);           if (ctx->FragmentProgram.Enabled == state)              return; @@ -808,6 +922,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        /* GL_NV_texture_rectangle */        case GL_TEXTURE_RECTANGLE_NV: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(NV_texture_rectangle, cap);           if (!enable_texture(ctx, state, TEXTURE_RECT_BIT)) {              return; @@ -816,6 +932,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        /* GL_EXT_stencil_two_side */        case GL_STENCIL_TEST_TWO_SIDE_EXT: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(EXT_stencil_two_side, cap);           if (ctx->Stencil.TestTwoSide == state)              return; @@ -830,6 +948,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)  #if FEATURE_ARB_fragment_program        case GL_FRAGMENT_PROGRAM_ARB: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(ARB_fragment_program, cap);           if (ctx->FragmentProgram.Enabled == state)              return; @@ -840,6 +960,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        /* GL_EXT_depth_bounds_test */        case GL_DEPTH_BOUNDS_TEST_EXT: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           CHECK_EXTENSION(EXT_depth_bounds_test, cap);           if (ctx->Depth.BoundsTest == state)              return; @@ -848,15 +970,19 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           break;        case GL_DEPTH_CLAMP: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error; +	 CHECK_EXTENSION(ARB_depth_clamp, cap);           if (ctx->Transform.DepthClamp == state)              return; -	 CHECK_EXTENSION(ARB_depth_clamp, cap);           FLUSH_VERTICES(ctx, _NEW_TRANSFORM);  	 ctx->Transform.DepthClamp = state;  	 break;  #if FEATURE_ATI_fragment_shader        case GL_FRAGMENT_SHADER_ATI: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;          CHECK_EXTENSION(ATI_fragment_shader, cap);  	if (ctx->ATIFragmentShader.Enabled == state)  	  return; @@ -867,6 +993,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        /* GL_MESA_texture_array */        case GL_TEXTURE_1D_ARRAY_EXT: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(MESA_texture_array, cap);           if (!enable_texture(ctx, state, TEXTURE_1D_ARRAY_BIT)) {              return; @@ -874,6 +1002,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           break;        case GL_TEXTURE_2D_ARRAY_EXT: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(MESA_texture_array, cap);           if (!enable_texture(ctx, state, TEXTURE_2D_ARRAY_BIT)) {              return; @@ -881,6 +1011,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)           break;        case GL_TEXTURE_CUBE_MAP_SEAMLESS: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;  	 CHECK_EXTENSION(ARB_seamless_cube_map, cap);  	 if (ctx->Texture.CubeMapSeamless != state) {  	    FLUSH_VERTICES(ctx, _NEW_TEXTURE); @@ -890,6 +1022,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)  #if FEATURE_EXT_transform_feedback        case GL_RASTERIZER_DISCARD: +         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) +            goto invalid_enum_error;  	 CHECK_EXTENSION(EXT_transform_feedback, cap);           if (ctx->RasterDiscard != state) {              FLUSH_VERTICES(ctx, _NEW_RASTERIZER_DISCARD); @@ -902,7 +1036,7 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)         * GL_PRIMITIVE_RESTART_NV (which is client state).         */        case GL_PRIMITIVE_RESTART: -         if (ctx->Version < 31) { +         if (!_mesa_is_desktop_gl(ctx) || ctx->Version < 31) {              goto invalid_enum_error;           }           if (ctx->Array.PrimitiveRestart != state) { @@ -913,6 +1047,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        /* GL3.0 - GL_framebuffer_sRGB */        case GL_FRAMEBUFFER_SRGB_EXT: +         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) +            goto invalid_enum_error;           CHECK_EXTENSION(EXT_framebuffer_sRGB, cap);           FLUSH_VERTICES(ctx, _NEW_BUFFERS);           ctx->Color.sRGBEnabled = state; @@ -920,6 +1056,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)        /* GL_OES_EGL_image_external */        case GL_TEXTURE_EXTERNAL_OES: +         if (!_mesa_is_gles(ctx)) +            goto invalid_enum_error;           CHECK_EXTENSION(OES_EGL_image_external, cap);           if (!enable_texture(ctx, state, TEXTURE_EXTERNAL_BIT)) {              return; @@ -1092,8 +1230,12 @@ _mesa_IsEnabled( GLenum cap )     switch (cap) {        case GL_ALPHA_TEST: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return ctx->Color.AlphaEnabled;        case GL_AUTO_NORMAL: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.AutoNormal;        case GL_BLEND:           return ctx->Color.BlendEnabled & 1;  /* return state for buffer[0] */ @@ -1113,18 +1255,26 @@ _mesa_IsEnabled( GLenum cap )  	 return (ctx->Transform.ClipPlanesEnabled >> p) & 1;        }        case GL_COLOR_MATERIAL: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;  	 return ctx->Light.ColorMaterialEnabled;        case GL_CULL_FACE:           return ctx->Polygon.CullFlag;        case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           return ctx->Debug.SyncOutput;        case GL_DEPTH_TEST:           return ctx->Depth.Test;        case GL_DITHER:  	 return ctx->Color.DitherFlag;        case GL_FOG: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;  	 return ctx->Fog.Enabled;        case GL_LIGHTING: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return ctx->Light.Enabled;        case GL_LIGHT0:        case GL_LIGHT1: @@ -1134,76 +1284,142 @@ _mesa_IsEnabled( GLenum cap )        case GL_LIGHT5:        case GL_LIGHT6:        case GL_LIGHT7: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return ctx->Light.Light[cap-GL_LIGHT0].Enabled;        case GL_LINE_SMOOTH: +         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) +            goto invalid_enum_error;  	 return ctx->Line.SmoothFlag;        case GL_LINE_STIPPLE: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Line.StippleFlag;        case GL_INDEX_LOGIC_OP: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Color.IndexLogicOpEnabled;        case GL_COLOR_LOGIC_OP: +         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) +            goto invalid_enum_error;  	 return ctx->Color.ColorLogicOpEnabled;        case GL_MAP1_COLOR_4: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map1Color4;        case GL_MAP1_INDEX: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map1Index;        case GL_MAP1_NORMAL: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map1Normal;        case GL_MAP1_TEXTURE_COORD_1: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map1TextureCoord1;        case GL_MAP1_TEXTURE_COORD_2: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map1TextureCoord2;        case GL_MAP1_TEXTURE_COORD_3: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map1TextureCoord3;        case GL_MAP1_TEXTURE_COORD_4: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map1TextureCoord4;        case GL_MAP1_VERTEX_3: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map1Vertex3;        case GL_MAP1_VERTEX_4: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map1Vertex4;        case GL_MAP2_COLOR_4: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map2Color4;        case GL_MAP2_INDEX: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map2Index;        case GL_MAP2_NORMAL: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map2Normal;        case GL_MAP2_TEXTURE_COORD_1: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map2TextureCoord1;        case GL_MAP2_TEXTURE_COORD_2: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map2TextureCoord2;        case GL_MAP2_TEXTURE_COORD_3: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map2TextureCoord3;        case GL_MAP2_TEXTURE_COORD_4: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map2TextureCoord4;        case GL_MAP2_VERTEX_3: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map2Vertex3;        case GL_MAP2_VERTEX_4: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Eval.Map2Vertex4;        case GL_NORMALIZE: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;  	 return ctx->Transform.Normalize;        case GL_POINT_SMOOTH: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;  	 return ctx->Point.SmoothFlag;        case GL_POLYGON_SMOOTH: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;  	 return ctx->Polygon.SmoothFlag;        case GL_POLYGON_STIPPLE: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 return ctx->Polygon.StippleFlag;        case GL_POLYGON_OFFSET_POINT: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;  	 return ctx->Polygon.OffsetPoint;        case GL_POLYGON_OFFSET_LINE: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;  	 return ctx->Polygon.OffsetLine;        case GL_POLYGON_OFFSET_FILL:  	 return ctx->Polygon.OffsetFill;        case GL_RESCALE_NORMAL_EXT: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return ctx->Transform.RescaleNormals;        case GL_SCISSOR_TEST:  	 return ctx->Scissor.Enabled;        case GL_STENCIL_TEST:  	 return ctx->Stencil.Enabled;        case GL_TEXTURE_1D: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           return is_texture_enabled(ctx, TEXTURE_1D_BIT);        case GL_TEXTURE_2D: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return is_texture_enabled(ctx, TEXTURE_2D_BIT);        case GL_TEXTURE_3D: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return is_texture_enabled(ctx, TEXTURE_3D_BIT);        case GL_TEXTURE_GEN_S:        case GL_TEXTURE_GEN_T: @@ -1211,6 +1427,10 @@ _mesa_IsEnabled( GLenum cap )        case GL_TEXTURE_GEN_Q:           {              const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx); + +            if (ctx->API != API_OPENGL) +               goto invalid_enum_error; +              if (texUnit) {                 GLbitfield coordBit = S_BIT << (cap - GL_TEXTURE_GEN_S);                 return (texUnit->TexGenEnabled & coordBit) ? GL_TRUE : GL_FALSE; @@ -1221,6 +1441,10 @@ _mesa_IsEnabled( GLenum cap )        case GL_TEXTURE_GEN_STR_OES:  	 {              const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx); + +            if (ctx->API != API_OPENGLES) +               goto invalid_enum_error; +              if (texUnit) {                 return (texUnit->TexGenEnabled & STR_BITS) == STR_BITS                    ? GL_TRUE : GL_FALSE; @@ -1230,26 +1454,44 @@ _mesa_IsEnabled( GLenum cap )        /* client-side state */        case GL_VERTEX_ARRAY: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled != 0);        case GL_NORMAL_ARRAY: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled != 0);        case GL_COLOR_ARRAY: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled != 0);        case GL_INDEX_ARRAY: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled != 0);        case GL_TEXTURE_COORD_ARRAY: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX(ctx->Array.ActiveTexture)]                   .Enabled != 0);        case GL_EDGE_FLAG_ARRAY: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled != 0);        case GL_FOG_COORDINATE_ARRAY_EXT: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(EXT_fog_coord);           return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled != 0);        case GL_SECONDARY_COLOR_ARRAY_EXT: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(EXT_secondary_color);           return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled != 0);  #if FEATURE_point_size_array        case GL_POINT_SIZE_ARRAY_OES: +         if (ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return (ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled != 0);  #endif @@ -1260,39 +1502,60 @@ _mesa_IsEnabled( GLenum cap )        /* GL_EXT_secondary_color */        case GL_COLOR_SUM_EXT: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION2(EXT_secondary_color, ARB_vertex_program);           return ctx->Fog.ColorSumEnabled;        /* GL_ARB_multisample */        case GL_MULTISAMPLE_ARB: +         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return ctx->Multisample.Enabled;        case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB:           return ctx->Multisample.SampleAlphaToCoverage;        case GL_SAMPLE_ALPHA_TO_ONE_ARB: +         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           return ctx->Multisample.SampleAlphaToOne;        case GL_SAMPLE_COVERAGE_ARB:           return ctx->Multisample.SampleCoverage;        case GL_SAMPLE_COVERAGE_INVERT_ARB: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           return ctx->Multisample.SampleCoverageInvert;        /* GL_IBM_rasterpos_clip */        case GL_RASTER_POSITION_UNCLIPPED_IBM: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(IBM_rasterpos_clip);           return ctx->Transform.RasterPositionUnclipped;        /* GL_NV_point_sprite */        case GL_POINT_SPRITE_NV: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_enum_error;           CHECK_EXTENSION2(NV_point_sprite, ARB_point_sprite)           return ctx->Point.PointSprite;  #if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program        case GL_VERTEX_PROGRAM_ARB: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program);           return ctx->VertexProgram.Enabled;        case GL_VERTEX_PROGRAM_POINT_SIZE_ARB: +         /* This was added with ARB_vertex_program, but it is also used with +          * GLSL vertex shaders on desktop. +          */ +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program);           return ctx->VertexProgram.PointSizeEnabled;        case GL_VERTEX_PROGRAM_TWO_SIDE_ARB: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION2(ARB_vertex_program, NV_vertex_program);           return ctx->VertexProgram.TwoSideEnabled;  #endif @@ -1313,6 +1576,8 @@ _mesa_IsEnabled( GLenum cap )        case GL_VERTEX_ATTRIB_ARRAY13_NV:        case GL_VERTEX_ATTRIB_ARRAY14_NV:        case GL_VERTEX_ATTRIB_ARRAY15_NV: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(NV_vertex_program);           {              GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV; @@ -1335,6 +1600,8 @@ _mesa_IsEnabled( GLenum cap )        case GL_MAP1_VERTEX_ATTRIB13_4_NV:        case GL_MAP1_VERTEX_ATTRIB14_4_NV:        case GL_MAP1_VERTEX_ATTRIB15_4_NV: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(NV_vertex_program);           {              const GLuint map = (GLuint) (cap - GL_MAP1_VERTEX_ATTRIB0_4_NV); @@ -1356,6 +1623,8 @@ _mesa_IsEnabled( GLenum cap )        case GL_MAP2_VERTEX_ATTRIB13_4_NV:        case GL_MAP2_VERTEX_ATTRIB14_4_NV:        case GL_MAP2_VERTEX_ATTRIB15_4_NV: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(NV_vertex_program);           {              const GLuint map = (GLuint) (cap - GL_MAP2_VERTEX_ATTRIB0_4_NV); @@ -1365,72 +1634,94 @@ _mesa_IsEnabled( GLenum cap )  #if FEATURE_NV_fragment_program        case GL_FRAGMENT_PROGRAM_NV: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(NV_fragment_program);           return ctx->FragmentProgram.Enabled;  #endif /* FEATURE_NV_fragment_program */        /* GL_NV_texture_rectangle */        case GL_TEXTURE_RECTANGLE_NV: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(NV_texture_rectangle);           return is_texture_enabled(ctx, TEXTURE_RECT_BIT);        /* GL_EXT_stencil_two_side */        case GL_STENCIL_TEST_TWO_SIDE_EXT: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           CHECK_EXTENSION(EXT_stencil_two_side);           return ctx->Stencil.TestTwoSide;  #if FEATURE_ARB_fragment_program        case GL_FRAGMENT_PROGRAM_ARB: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;           return ctx->FragmentProgram.Enabled;  #endif /* FEATURE_ARB_fragment_program */        /* GL_EXT_depth_bounds_test */        case GL_DEPTH_BOUNDS_TEST_EXT: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           CHECK_EXTENSION(EXT_depth_bounds_test);           return ctx->Depth.BoundsTest;        /* GL_ARB_depth_clamp */        case GL_DEPTH_CLAMP: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           CHECK_EXTENSION(ARB_depth_clamp);           return ctx->Transform.DepthClamp;  #if FEATURE_ATI_fragment_shader        case GL_FRAGMENT_SHADER_ATI: +         if (ctx->API != API_OPENGL) +            goto invalid_enum_error;  	 CHECK_EXTENSION(ATI_fragment_shader);  	 return ctx->ATIFragmentShader.Enabled;  #endif /* FEATURE_ATI_fragment_shader */        case GL_TEXTURE_CUBE_MAP_SEAMLESS: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;  	 CHECK_EXTENSION(ARB_seamless_cube_map);  	 return ctx->Texture.CubeMapSeamless;  #if FEATURE_EXT_transform_feedback        case GL_RASTERIZER_DISCARD: +         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) +            goto invalid_enum_error;  	 CHECK_EXTENSION(EXT_transform_feedback);           return ctx->RasterDiscard;  #endif        /* GL_NV_primitive_restart */        case GL_PRIMITIVE_RESTART_NV: -	 if (!ctx->Extensions.NV_primitive_restart) { +         if (ctx->API != API_OPENGL || !ctx->Extensions.NV_primitive_restart) {              goto invalid_enum_error;           }           return ctx->Array.PrimitiveRestart;        /* GL 3.1 primitive restart */        case GL_PRIMITIVE_RESTART: -         if (ctx->Version < 31) { +         if (!_mesa_is_desktop_gl(ctx) || ctx->Version < 31) {              goto invalid_enum_error;           }           return ctx->Array.PrimitiveRestart;        /* GL3.0 - GL_framebuffer_sRGB */        case GL_FRAMEBUFFER_SRGB_EXT: +         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) +            goto invalid_enum_error;  	 CHECK_EXTENSION(EXT_framebuffer_sRGB);  	 return ctx->Color.sRGBEnabled;        /* GL_OES_EGL_image_external */        case GL_TEXTURE_EXTERNAL_OES: +         if (!_mesa_is_gles(ctx)) +            goto invalid_enum_error;  	 CHECK_EXTENSION(OES_EGL_image_external);           return is_texture_enabled(ctx, TEXTURE_EXTERNAL_BIT); diff --git a/mesalib/src/mesa/main/es1_conversion.c b/mesalib/src/mesa/main/es1_conversion.c index 75cdfc887..ae3c5badc 100644 --- a/mesalib/src/mesa/main/es1_conversion.c +++ b/mesalib/src/mesa/main/es1_conversion.c @@ -134,28 +134,7 @@ _es_DrawTexxvOES(const GLfixed *coords)  void GL_APIENTRY  _es_Fogx(GLenum pname, GLfixed param)  { -   bool convert_param_value = true; - -   switch(pname) { -   case GL_FOG_MODE: -      if (param != GL_EXP && param != GL_EXP2 && param != GL_LINEAR) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glFogx(pname=0x%x)", pname); -         return; -      } -      convert_param_value = false; -      break; -   case GL_FOG_DENSITY: -   case GL_FOG_START: -   case GL_FOG_END: -      break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glFogx(pname=0x%x)", pname); -      return; -   } - -   if (convert_param_value) { +   if (pname != GL_FOG_MODE) {        _mesa_Fogf(pname, (GLfloat) (param / 65536.0f));     } else {        _mesa_Fogf(pname, (GLfloat) param); @@ -173,11 +152,6 @@ _es_Fogxv(GLenum pname, const GLfixed *params)     switch(pname) {     case GL_FOG_MODE: -      if (params[0] != GL_EXP && params[0] != GL_EXP2 && params[0] != GL_LINEAR) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glFogxv(pname=0x%x)", pname); -         return; -      }        convert_params_value = false;        n_params = 1;        break; @@ -319,7 +293,6 @@ _es_GetMaterialxv(GLenum face, GLenum pname, GLfixed *params)        break;     case GL_AMBIENT:     case GL_DIFFUSE: -   case GL_AMBIENT_AND_DIFFUSE:     case GL_SPECULAR:     case GL_EMISSION:        n_params = 4; @@ -425,63 +398,13 @@ _es_GetTexEnvxv(GLenum target, GLenum pname, GLfixed *params)  void GL_APIENTRY  _check_GetTexGenivOES(GLenum coord, GLenum pname, GLint *params)  { -   unsigned int i; -   unsigned int n_params = 1; -   GLfloat converted_params[1]; - -   switch(coord) { -   case GL_TEXTURE_GEN_STR_OES: -      break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glGetTexGenivOES(coord=0x%x)", coord); -      return; -   } -   switch(pname) { -   case GL_TEXTURE_GEN_MODE: -      n_params = 1; -      break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glGetTexGenivOES(pname=0x%x)", pname); -      return; -   } - -   _es_GetTexGenfv(coord, pname, converted_params); -   for (i = 0; i < n_params; i++) { -      params[i] = (GLfloat) converted_params[i]; -   } +   _mesa_GetTexGeniv(coord, pname, params);  }  void GL_APIENTRY  _check_GetTexGenxvOES(GLenum coord, GLenum pname, GLfixed *params)  { -   unsigned int i; -   unsigned int n_params = 1; -   GLfloat converted_params[1]; - -   switch(coord) { -   case GL_TEXTURE_GEN_STR_OES: -      break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glGetTexGenxvOES(coord=0x%x)", coord); -      return; -   } -   switch(pname) { -   case GL_TEXTURE_GEN_MODE: -      n_params = 1; -      break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glGetTexGenxvOES(pname=0x%x)", pname); -      return; -   } - -   _es_GetTexGenfv(coord, pname, converted_params); -   for (i = 0; i < n_params; i++) { -      params[i] = (GLfloat) converted_params[i]; -   } +   _mesa_GetTexGeniv(coord, pname, (GLint *) params);  }  void GL_APIENTRY @@ -535,20 +458,6 @@ _es_GetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)  void GL_APIENTRY  _es_LightModelx(GLenum pname, GLfixed param)  { -   switch(pname) { -   case GL_LIGHT_MODEL_TWO_SIDE: -      if (param != GL_TRUE && param != GL_FALSE) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glLightModelx(pname=0x%x)", pname); -         return; -      } -      break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glLightModelx(pname=0x%x)", pname); -      return; -   } -     _mesa_LightModelf(pname, (GLfloat) param);  } @@ -565,11 +474,6 @@ _es_LightModelxv(GLenum pname, const GLfixed *params)        n_params = 4;        break;     case GL_LIGHT_MODEL_TWO_SIDE: -      if (params[0] != GL_TRUE && params[0] != GL_FALSE) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glLightModelxv(pname=0x%x)", pname); -         return; -      }        convert_params_value = false;        n_params = 1;        break; @@ -662,18 +566,13 @@ _es_LoadMatrixx(const GLfixed *m)  void GL_APIENTRY  _es_Materialx(GLenum face, GLenum pname, GLfixed param)  { -   switch(face) { -   case GL_FRONT_AND_BACK: -      break; -   default: +   if (face != GL_FRONT_AND_BACK) {        _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,                    "glMaterialx(face=0x%x)", face);        return;     } -   switch(pname) { -   case GL_SHININESS: -      break; -   default: + +   if (pname != GL_SHININESS) {        _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,                    "glMaterialx(pname=0x%x)", pname);        return; @@ -689,14 +588,12 @@ _es_Materialxv(GLenum face, GLenum pname, const GLfixed *params)     unsigned int n_params = 4;     GLfloat converted_params[4]; -   switch(face) { -   case GL_FRONT_AND_BACK: -      break; -   default: +   if (face != GL_FRONT_AND_BACK) {        _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,                    "glMaterialxv(face=0x%x)", face);        return;     } +     switch(pname) {     case GL_AMBIENT:     case GL_DIFFUSE: @@ -779,17 +676,6 @@ _es_Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top,  void GL_APIENTRY  _es_PointParameterx(GLenum pname, GLfixed param)  { -   switch(pname) { -   case GL_POINT_SIZE_MIN: -   case GL_POINT_SIZE_MAX: -   case GL_POINT_FADE_THRESHOLD_SIZE: -      break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glPointParameterx(pname=0x%x)", pname); -      return; -   } -     _mesa_PointParameterf(pname, (GLfloat) (param / 65536.0f));  } @@ -862,376 +748,126 @@ _es_Scalex(GLfixed x, GLfixed y, GLfixed z)  void GL_APIENTRY  _es_TexEnvx(GLenum target, GLenum pname, GLfixed param)  { -   GLfloat converted_param; -   bool convert_param_value = true; -     switch(target) {     case GL_POINT_SPRITE: -      if (pname != GL_COORD_REPLACE) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvx(target=0x%x)", target); -         return; -      } -      break;     case GL_TEXTURE_FILTER_CONTROL_EXT: -      if (pname != GL_TEXTURE_LOD_BIAS_EXT) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvx(target=0x%x)", target); -         return; -      } -      break;     case GL_TEXTURE_ENV: -      if (pname != GL_TEXTURE_ENV_MODE && pname != GL_COMBINE_RGB && pname != GL_COMBINE_ALPHA && pname != GL_RGB_SCALE && pname != GL_ALPHA_SCALE && pname != GL_SRC0_RGB && pname != GL_SRC1_RGB && pname != GL_SRC2_RGB && pname != GL_SRC0_ALPHA && pname != GL_SRC1_ALPHA && pname != GL_SRC2_ALPHA && pname != GL_OPERAND0_RGB && pname != GL_OPERAND1_RGB && pname != GL_OPERAND2_RGB && pname != GL_OPERAND0_ALPHA && pname != GL_OPERAND1_ALPHA && pname != GL_OPERAND2_ALPHA && pname != GL_TEXTURE_ENV_COLOR) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvx(target=0x%x)", target); -         return; -      }        break;     default:        _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,                    "glTexEnvx(target=0x%x)", target);        return;     } +     switch(pname) {     case GL_COORD_REPLACE: -      if (param != GL_TRUE && param != GL_FALSE) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvx(pname=0x%x)", pname); -         return; -      } -      convert_param_value = false; -      break; -   case GL_TEXTURE_LOD_BIAS_EXT: -      break;     case GL_TEXTURE_ENV_MODE: -      if (param != GL_REPLACE && param != GL_MODULATE && param != GL_DECAL && param != GL_BLEND && param != GL_ADD && param != GL_COMBINE) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvx(pname=0x%x)", pname); -         return; -      } -      convert_param_value = false; -      break;     case GL_COMBINE_RGB: -      if (param != GL_REPLACE && param != GL_MODULATE && param != GL_ADD && param != GL_ADD_SIGNED && param != GL_INTERPOLATE && param != GL_SUBTRACT && param != GL_DOT3_RGB && param != GL_DOT3_RGBA) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvx(pname=0x%x)", pname); -         return; -      } -      convert_param_value = false; -      break;     case GL_COMBINE_ALPHA: -      if (param != GL_REPLACE && param != GL_MODULATE && param != GL_ADD && param != GL_ADD_SIGNED && param != GL_INTERPOLATE && param != GL_SUBTRACT) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvx(pname=0x%x)", pname); -         return; -      } -      convert_param_value = false; -      break; -   case GL_RGB_SCALE: -   case GL_ALPHA_SCALE: -      break;     case GL_SRC0_RGB:     case GL_SRC1_RGB:     case GL_SRC2_RGB:     case GL_SRC0_ALPHA:     case GL_SRC1_ALPHA:     case GL_SRC2_ALPHA: -      convert_param_value = false; -      break;     case GL_OPERAND0_RGB:     case GL_OPERAND1_RGB:     case GL_OPERAND2_RGB: -      if (param != GL_SRC_COLOR && param != GL_ONE_MINUS_SRC_COLOR && param != GL_SRC_ALPHA && param != GL_ONE_MINUS_SRC_ALPHA) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvx(pname=0x%x)", pname); -         return; -      } -      convert_param_value = false; -      break;     case GL_OPERAND0_ALPHA:     case GL_OPERAND1_ALPHA:     case GL_OPERAND2_ALPHA: -      if (param != GL_SRC_ALPHA && param != GL_ONE_MINUS_SRC_ALPHA) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvx(pname=0x%x)", pname); -         return; -      } -      convert_param_value = false; +      _mesa_TexEnvf(target, pname, (GLfloat) param); +      break; +   case GL_TEXTURE_LOD_BIAS_EXT: +   case GL_RGB_SCALE: +   case GL_ALPHA_SCALE: +      _mesa_TexEnvf(target, pname, (GLfloat) (param / 65536.0f));        break;     default:        _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,                    "glTexEnvx(pname=0x%x)", pname);        return;     } - -   if (convert_param_value) { -      converted_param = (GLfloat) (param / 65536.0f); -   } else { -      converted_param = (GLfloat) param; -   } - -   _mesa_TexEnvf(target, pname, converted_param);  }  void GL_APIENTRY  _es_TexEnvxv(GLenum target, GLenum pname, const GLfixed *params)  { -   unsigned int i; -   unsigned int n_params = 4; -   GLfloat converted_params[4]; -   bool convert_params_value = true; -     switch(target) {     case GL_POINT_SPRITE: -      if (pname != GL_COORD_REPLACE) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvxv(target=0x%x)", target); -         return; -      } -      break;     case GL_TEXTURE_FILTER_CONTROL_EXT: -      if (pname != GL_TEXTURE_LOD_BIAS_EXT) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvxv(target=0x%x)", target); -         return; -      } -      break;     case GL_TEXTURE_ENV: -      if (pname != GL_TEXTURE_ENV_MODE && pname != GL_COMBINE_RGB && pname != GL_COMBINE_ALPHA && pname != GL_RGB_SCALE && pname != GL_ALPHA_SCALE && pname != GL_SRC0_RGB && pname != GL_SRC1_RGB && pname != GL_SRC2_RGB && pname != GL_SRC0_ALPHA && pname != GL_SRC1_ALPHA && pname != GL_SRC2_ALPHA && pname != GL_OPERAND0_RGB && pname != GL_OPERAND1_RGB && pname != GL_OPERAND2_RGB && pname != GL_OPERAND0_ALPHA && pname != GL_OPERAND1_ALPHA && pname != GL_OPERAND2_ALPHA && pname != GL_TEXTURE_ENV_COLOR) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvxv(target=0x%x)", target); -         return; -      }        break;     default:        _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM,                    "glTexEnvxv(target=0x%x)", target);        return;     } +     switch(pname) {     case GL_COORD_REPLACE: -      if (params[0] != GL_TRUE && params[0] != GL_FALSE) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvxv(pname=0x%x)", pname); -         return; -      } -      convert_params_value = false; -      n_params = 1; -      break; -   case GL_TEXTURE_LOD_BIAS_EXT: -      n_params = 1; -      break;     case GL_TEXTURE_ENV_MODE: -      if (params[0] != GL_REPLACE && params[0] != GL_MODULATE && params[0] != GL_DECAL && params[0] != GL_BLEND && params[0] != GL_ADD && params[0] != GL_COMBINE) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvxv(pname=0x%x)", pname); -         return; -      } -      convert_params_value = false; -      n_params = 1; -      break;     case GL_COMBINE_RGB: -      if (params[0] != GL_REPLACE && params[0] != GL_MODULATE && params[0] != GL_ADD && params[0] != GL_ADD_SIGNED && params[0] != GL_INTERPOLATE && params[0] != GL_SUBTRACT && params[0] != GL_DOT3_RGB && params[0] != GL_DOT3_RGBA) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvxv(pname=0x%x)", pname); -         return; -      } -      convert_params_value = false; -      n_params = 1; -      break;     case GL_COMBINE_ALPHA: -      if (params[0] != GL_REPLACE && params[0] != GL_MODULATE && params[0] != GL_ADD && params[0] != GL_ADD_SIGNED && params[0] != GL_INTERPOLATE && params[0] != GL_SUBTRACT) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvxv(pname=0x%x)", pname); -         return; -      } -      convert_params_value = false; -      n_params = 1; -      break; -   case GL_RGB_SCALE: -   case GL_ALPHA_SCALE: -      break;     case GL_SRC0_RGB:     case GL_SRC1_RGB:     case GL_SRC2_RGB:     case GL_SRC0_ALPHA:     case GL_SRC1_ALPHA:     case GL_SRC2_ALPHA: -      convert_params_value = false; -      n_params = 1; -      break;     case GL_OPERAND0_RGB:     case GL_OPERAND1_RGB:     case GL_OPERAND2_RGB: -      if (params[0] != GL_SRC_COLOR && params[0] != GL_ONE_MINUS_SRC_COLOR && params[0] != GL_SRC_ALPHA && params[0] != GL_ONE_MINUS_SRC_ALPHA) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvxv(pname=0x%x)", pname); -         return; -      } -      convert_params_value = false; -      n_params = 1; -      break;     case GL_OPERAND0_ALPHA:     case GL_OPERAND1_ALPHA:     case GL_OPERAND2_ALPHA: -      if (params[0] != GL_SRC_ALPHA && params[0] != GL_ONE_MINUS_SRC_ALPHA) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexEnvxv(pname=0x%x)", pname); -         return; -      } -      convert_params_value = false; -      n_params = 1; +      _mesa_TexEnvf(target, pname, (GLfloat) params[0]);        break; -   case GL_TEXTURE_ENV_COLOR: -      n_params = 4; +   case GL_TEXTURE_LOD_BIAS_EXT: +   case GL_RGB_SCALE: +   case GL_ALPHA_SCALE: +      _mesa_TexEnvf(target, pname, (GLfloat) (params[0] / 65536.0f));        break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glTexEnvxv(pname=0x%x)", pname); -      return; -   } +   case GL_TEXTURE_ENV_COLOR: { +      unsigned int i; +      GLfloat converted_params[4]; -   if (convert_params_value) { -      for (i = 0; i < n_params; i++) { +      for (i = 0; i < Elements(converted_params); i++) {           converted_params[i] = (GLfloat) (params[i] / 65536.0f);        } -   } else { -      for (i = 0; i < n_params; i++) { -         converted_params[i] = (GLfloat) params[i]; -      } -   } - -   _mesa_TexEnvfv(target, pname, converted_params); -} -void GL_APIENTRY -_check_TexGeniOES(GLenum coord, GLenum pname, GLint param) -{ -   switch(coord) { -   case GL_TEXTURE_GEN_STR_OES: +      _mesa_TexEnvfv(target, pname, converted_params);        break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glTexGeniOES(coord=0x%x)", coord); -      return;     } -   switch(pname) { -   case GL_TEXTURE_GEN_MODE: -      if (param != GL_NORMAL_MAP && param != GL_REFLECTION_MAP) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexGeniOES(pname=0x%x)", pname); -         return; -      } -      break;     default:        _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glTexGeniOES(pname=0x%x)", pname); +                  "glTexEnvxv(pname=0x%x)", pname);        return;     } +} +void GL_APIENTRY +_check_TexGeniOES(GLenum coord, GLenum pname, GLint param) +{     _es_TexGenf(coord, pname, (GLfloat) param);  }  void GL_APIENTRY  _check_TexGenivOES(GLenum coord, GLenum pname, const GLint *params)  { -   unsigned int i; -   unsigned int n_params = 1; -   GLfloat converted_params[1]; - -   switch(coord) { -   case GL_TEXTURE_GEN_STR_OES: -      break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glTexGenivOES(coord=0x%x)", coord); -      return; -   } -   switch(pname) { -   case GL_TEXTURE_GEN_MODE: -      if (params[0] != GL_NORMAL_MAP && params[0] != GL_REFLECTION_MAP) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexGenivOES(pname=0x%x)", pname); -         return; -      } -      n_params = 1; -      break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glTexGenivOES(pname=0x%x)", pname); -      return; -   } - -   for (i = 0; i < n_params; i++) { -      converted_params[i] = (GLfloat) params[i]; -   } - -   _es_TexGenfv(coord, pname, converted_params); +   _es_TexGenf(coord, pname, (GLfloat) params[0]);  }  void GL_APIENTRY  _check_TexGenxOES(GLenum coord, GLenum pname, GLfixed param)  { -   switch(coord) { -   case GL_TEXTURE_GEN_STR_OES: -      break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glTexGenxOES(coord=0x%x)", coord); -      return; -   } -   switch(pname) { -   case GL_TEXTURE_GEN_MODE: -      if (param != GL_NORMAL_MAP && param != GL_REFLECTION_MAP) { -         _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                     "glTexGenxOES(pname=0x%x)", pname); -         return; -      } -      break; -   default: -      _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                  "glTexGenxOES(pname=0x%x)", pname); -      return; -   } -     _es_TexGenf(coord, pname, (GLfloat) param);  }  void GL_APIENTRY  _check_TexGenxvOES(GLenum coord, GLenum pname, const GLfixed *params)  { -    unsigned int i; -    unsigned int n_params = 1; -    GLfloat converted_params[1]; - -    switch(coord) { -    case GL_TEXTURE_GEN_STR_OES: -       break; -    default: -       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                   "glTexGenxvOES(coord=0x%x)", coord); -       return; -    } -    switch(pname) { -    case GL_TEXTURE_GEN_MODE: -       if (params[0] != GL_NORMAL_MAP && params[0] != GL_REFLECTION_MAP) { -          _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                      "glTexGenxvOES(pname=0x%x)", pname); -          return; -       } -       n_params = 1; -       break; -    default: -       _mesa_error(_mesa_get_current_context(), GL_INVALID_ENUM, -                   "glTexGenxvOES(pname=0x%x)", pname); -       return; -    } - -    for (i = 0; i < n_params; i++) { -       converted_params[i] = (GLfloat) params[i]; -    } - -    _es_TexGenfv(coord, pname, converted_params); +   _es_TexGenf(coord, pname, (GLfloat) params[0]);  }  void GL_APIENTRY diff --git a/mesalib/src/mesa/main/extensions.c b/mesalib/src/mesa/main/extensions.c index ab33ac565..7e116bdd1 100644 --- a/mesalib/src/mesa/main/extensions.c +++ b/mesalib/src/mesa/main/extensions.c @@ -148,7 +148,7 @@ static const struct extension extension_table[] = {     { "GL_ARB_transpose_matrix",                    o(ARB_transpose_matrix),                    GLL,            1999 },     { "GL_ARB_uniform_buffer_object",               o(ARB_uniform_buffer_object),               GL,             2009 },     { "GL_ARB_vertex_array_bgra",                   o(EXT_vertex_array_bgra),                   GL,             2008 }, -   { "GL_ARB_vertex_array_object",                 o(ARB_vertex_array_object),                 GL,             2006 }, +   { "GL_ARB_vertex_array_object",                 o(dummy_true),                              GL,             2006 },     { "GL_ARB_vertex_buffer_object",                o(dummy_true),                              GLL,            2003 },     { "GL_ARB_vertex_program",                      o(ARB_vertex_program),                      GLL,            2002 },     { "GL_ARB_vertex_shader",                       o(ARB_vertex_shader),                       GL,             2002 }, @@ -266,6 +266,7 @@ static const struct extension extension_table[] = {     { "GL_OES_texture_env_crossbar",                o(ARB_texture_env_crossbar),                     ES1,       2005 },     { "GL_OES_texture_mirrored_repeat",             o(dummy_true),                                   ES1,       2005 },     { "GL_OES_texture_npot",                        o(ARB_texture_non_power_of_two),                       ES2, 2005 }, +   { "GL_OES_vertex_array_object",                 o(dummy_true),                                   ES1 | ES2, 2010 },     /* Vendor extensions */     { "GL_3DFX_texture_compression_FXT1",           o(TDFX_texture_compression_FXT1),           GL,             1999 }, @@ -276,7 +277,7 @@ static const struct extension extension_table[] = {     { "GL_APPLE_object_purgeable",                  o(APPLE_object_purgeable),                  GL,             2006 },     { "GL_APPLE_packed_pixels",                     o(APPLE_packed_pixels),                     GLL,            2002 },     { "GL_APPLE_texture_max_level",                 o(dummy_true),                                   ES1 | ES2, 2009 }, -   { "GL_APPLE_vertex_array_object",               o(APPLE_vertex_array_object),               GLL,            2002 }, +   { "GL_APPLE_vertex_array_object",               o(dummy_true),                              GLL,            2002 },     { "GL_ATI_blend_equation_separate",             o(EXT_blend_equation_separate),             GL,             2003 },     { "GL_ATI_draw_buffers",                        o(dummy_true),                              GLL,            2002 },     { "GL_ATI_envmap_bumpmap",                      o(ATI_envmap_bumpmap),                      GLL,            2001 }, @@ -438,7 +439,6 @@ _mesa_enable_sw_extensions(struct gl_context *ctx)     ctx->Extensions.ARB_texture_rg = GL_TRUE;     ctx->Extensions.ARB_texture_compression_rgtc = GL_TRUE;     ctx->Extensions.ARB_texture_storage = GL_TRUE; -   ctx->Extensions.ARB_vertex_array_object = GL_TRUE;  #if FEATURE_ARB_vertex_program     ctx->Extensions.ARB_vertex_program = GL_TRUE;  #endif @@ -448,7 +448,6 @@ _mesa_enable_sw_extensions(struct gl_context *ctx)  #if FEATURE_ARB_sync     ctx->Extensions.ARB_sync = GL_TRUE;  #endif -   ctx->Extensions.APPLE_vertex_array_object = GL_TRUE;  #if FEATURE_APPLE_object_purgeable     ctx->Extensions.APPLE_object_purgeable = GL_TRUE;  #endif diff --git a/mesalib/src/mesa/main/fbobject.c b/mesalib/src/mesa/main/fbobject.c index 792a92da3..59a5ec32d 100644 --- a/mesalib/src/mesa/main/fbobject.c +++ b/mesalib/src/mesa/main/fbobject.c @@ -1075,13 +1075,15 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)     case GL_ALPHA8:     case GL_ALPHA12:     case GL_ALPHA16: -      return ctx->Extensions.ARB_framebuffer_object ? GL_ALPHA : 0; +      return ctx->API == API_OPENGL && ctx->Extensions.ARB_framebuffer_object +         ? GL_ALPHA : 0;     case GL_LUMINANCE:     case GL_LUMINANCE4:     case GL_LUMINANCE8:     case GL_LUMINANCE12:     case GL_LUMINANCE16: -      return ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE : 0; +      return ctx->API == API_OPENGL && ctx->Extensions.ARB_framebuffer_object +         ? GL_LUMINANCE : 0;     case GL_LUMINANCE_ALPHA:     case GL_LUMINANCE4_ALPHA4:     case GL_LUMINANCE6_ALPHA2: @@ -1089,139 +1091,190 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)     case GL_LUMINANCE12_ALPHA4:     case GL_LUMINANCE12_ALPHA12:     case GL_LUMINANCE16_ALPHA16: -      return ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE_ALPHA : 0; +      return ctx->API == API_OPENGL && ctx->Extensions.ARB_framebuffer_object +         ? GL_LUMINANCE_ALPHA : 0;     case GL_INTENSITY:     case GL_INTENSITY4:     case GL_INTENSITY8:     case GL_INTENSITY12:     case GL_INTENSITY16: -      return ctx->Extensions.ARB_framebuffer_object ? GL_INTENSITY : 0; +      return ctx->API == API_OPENGL && ctx->Extensions.ARB_framebuffer_object +         ? GL_INTENSITY : 0; +   case GL_RGB8: +      return GL_RGB;     case GL_RGB:     case GL_R3_G3_B2:     case GL_RGB4:     case GL_RGB5: -   case GL_RGB8:     case GL_RGB10:     case GL_RGB12:     case GL_RGB16: +      return _mesa_is_desktop_gl(ctx) ? GL_RGB : 0;     case GL_SRGB8_EXT: -      return GL_RGB; -   case GL_RGBA: -   case GL_RGBA2: +      return _mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx) ? GL_RGB : 0;     case GL_RGBA4:     case GL_RGB5_A1:     case GL_RGBA8: -   case GL_RGB10_A2: +      return GL_RGBA; +   case GL_RGBA: +   case GL_RGBA2:     case GL_RGBA12:     case GL_RGBA16: +      return _mesa_is_desktop_gl(ctx) ? GL_RGBA : 0; +   case GL_RGB10_A2:     case GL_SRGB8_ALPHA8_EXT: -      return GL_RGBA; +      return _mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx) ? GL_RGBA : 0;     case GL_STENCIL_INDEX:     case GL_STENCIL_INDEX1_EXT:     case GL_STENCIL_INDEX4_EXT: -   case GL_STENCIL_INDEX8_EXT:     case GL_STENCIL_INDEX16_EXT: +      /* There are extensions for GL_STENCIL_INDEX1 and GL_STENCIL_INDEX4 in +       * OpenGL ES, but Mesa does not currently support them. +       */ +      return _mesa_is_desktop_gl(ctx) ? GL_STENCIL_INDEX : 0; +   case GL_STENCIL_INDEX8_EXT:        return GL_STENCIL_INDEX;     case GL_DEPTH_COMPONENT: +   case GL_DEPTH_COMPONENT32: +      return _mesa_is_desktop_gl(ctx) ? GL_DEPTH_COMPONENT : 0;     case GL_DEPTH_COMPONENT16:     case GL_DEPTH_COMPONENT24: -   case GL_DEPTH_COMPONENT32:        return GL_DEPTH_COMPONENT;     case GL_DEPTH_STENCIL_EXT: +      return _mesa_is_desktop_gl(ctx) +         && ctx->Extensions.EXT_packed_depth_stencil +         ? GL_DEPTH_STENCIL_EXT : 0;     case GL_DEPTH24_STENCIL8_EXT: -      if (ctx->Extensions.EXT_packed_depth_stencil) -         return GL_DEPTH_STENCIL_EXT; -      else -         return 0; +      return ctx->Extensions.EXT_packed_depth_stencil +         ? GL_DEPTH_STENCIL_EXT : 0;     case GL_DEPTH_COMPONENT32F: -      if (ctx->Extensions.ARB_depth_buffer_float) -         return GL_DEPTH_COMPONENT; -      else -         return 0; +      return ctx->Version >= 30 +         || (ctx->API == API_OPENGL && ctx->Extensions.ARB_depth_buffer_float) +         ? GL_DEPTH_COMPONENT : 0;     case GL_DEPTH32F_STENCIL8: -      if (ctx->Extensions.ARB_depth_buffer_float) -         return GL_DEPTH_STENCIL; -      else -         return 0; +      return ctx->Version >= 30 +         || (ctx->API == API_OPENGL && ctx->Extensions.ARB_depth_buffer_float) +         ? GL_DEPTH_STENCIL : 0;     case GL_RED: -   case GL_R8:     case GL_R16: -      return ctx->Extensions.ARB_texture_rg ? GL_RED : 0; +      return _mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_rg +         ? GL_RED : 0; +   case GL_R8: +      return ctx->API != API_OPENGLES && ctx->Extensions.ARB_texture_rg +         ? GL_RED : 0;     case GL_RG: -   case GL_RG8:     case GL_RG16: -      return ctx->Extensions.ARB_texture_rg ? GL_RG : 0; +      return _mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_rg +         ? GL_RG : 0; +   case GL_RG8: +      return ctx->API != API_OPENGLES && ctx->Extensions.ARB_texture_rg +         ? GL_RG : 0;     /* signed normalized texture formats */ -   case GL_RED_SNORM:     case GL_R8_SNORM: +      return ctx->Version >= 30 +         || (ctx->API == API_OPENGL && ctx->Extensions.EXT_texture_snorm) +         ? GL_RED : 0; +   case GL_RED_SNORM:     case GL_R16_SNORM: -      return ctx->Extensions.EXT_texture_snorm ? GL_RED : 0; -   case GL_RG_SNORM: +      return _mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_texture_snorm +         ? GL_RED : 0;     case GL_RG8_SNORM: +      return ctx->Version >= 30 +         || (ctx->API == API_OPENGL && ctx->Extensions.EXT_texture_snorm) +         ? GL_RG : 0; +   case GL_RG_SNORM:     case GL_RG16_SNORM: -      return ctx->Extensions.EXT_texture_snorm ? GL_RG : 0; -   case GL_RGB_SNORM: +      return _mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_texture_snorm +         ? GL_RG : 0;     case GL_RGB8_SNORM: +      return ctx->Version >= 30 +         || (ctx->API == API_OPENGL && ctx->Extensions.EXT_texture_snorm) +         ? GL_RGB : 0; +   case GL_RGB_SNORM:     case GL_RGB16_SNORM: -      return ctx->Extensions.EXT_texture_snorm ? GL_RGB : 0; -   case GL_RGBA_SNORM: +      return _mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_texture_snorm +         ? GL_RGB : 0;     case GL_RGBA8_SNORM: +      return ctx->Version >= 30 +         || (ctx->API == API_OPENGL && ctx->Extensions.EXT_texture_snorm) +         ? GL_RGBA : 0; +   case GL_RGBA_SNORM:     case GL_RGBA16_SNORM: -      return ctx->Extensions.EXT_texture_snorm ? GL_RGBA : 0; +      return _mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_texture_snorm +         ? GL_RGBA : 0;     case GL_ALPHA_SNORM:     case GL_ALPHA8_SNORM:     case GL_ALPHA16_SNORM: -      return ctx->Extensions.EXT_texture_snorm && +      return ctx->API == API_OPENGL && +             ctx->Extensions.EXT_texture_snorm &&               ctx->Extensions.ARB_framebuffer_object ? GL_ALPHA : 0;     case GL_LUMINANCE_SNORM:     case GL_LUMINANCE8_SNORM:     case GL_LUMINANCE16_SNORM: -      return ctx->Extensions.EXT_texture_snorm && +      return ctx->API == API_OPENGL && +             ctx->Extensions.EXT_texture_snorm &&               ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE : 0;     case GL_LUMINANCE_ALPHA_SNORM:     case GL_LUMINANCE8_ALPHA8_SNORM:     case GL_LUMINANCE16_ALPHA16_SNORM: -      return ctx->Extensions.EXT_texture_snorm && +      return ctx->API == API_OPENGL && +             ctx->Extensions.EXT_texture_snorm &&               ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE_ALPHA : 0;     case GL_INTENSITY_SNORM:     case GL_INTENSITY8_SNORM:     case GL_INTENSITY16_SNORM: -      return ctx->Extensions.EXT_texture_snorm && +      return ctx->API == API_OPENGL && +             ctx->Extensions.EXT_texture_snorm &&               ctx->Extensions.ARB_framebuffer_object ? GL_INTENSITY : 0;     case GL_R16F:     case GL_R32F: -      return ctx->Extensions.ARB_texture_rg && -             ctx->Extensions.ARB_texture_float ? GL_RED : 0; +      return ctx->Version >= 30 +         || (ctx->API == API_OPENGL && +             ctx->Extensions.ARB_texture_rg && +             ctx->Extensions.ARB_texture_float) ? GL_RED : 0;     case GL_RG16F:     case GL_RG32F: -      return ctx->Extensions.ARB_texture_rg && -             ctx->Extensions.ARB_texture_float ? GL_RG : 0; +      return ctx->Version >= 30 +         || (ctx->API == API_OPENGL && +             ctx->Extensions.ARB_texture_rg && +             ctx->Extensions.ARB_texture_float) ? GL_RG : 0;     case GL_RGB16F:     case GL_RGB32F: -      return ctx->Extensions.ARB_texture_float ? GL_RGB : 0; +      return (_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_float) +         || _mesa_is_gles3(ctx) +         ? GL_RGB : 0;     case GL_RGBA16F:     case GL_RGBA32F: -      return ctx->Extensions.ARB_texture_float ? GL_RGBA : 0; +      return (_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_float) +         || _mesa_is_gles3(ctx) +         ? GL_RGBA : 0;     case GL_ALPHA16F_ARB:     case GL_ALPHA32F_ARB: -      return ctx->Extensions.ARB_texture_float && +      return ctx->API == API_OPENGL && +             ctx->Extensions.ARB_texture_float &&               ctx->Extensions.ARB_framebuffer_object ? GL_ALPHA : 0;     case GL_LUMINANCE16F_ARB:     case GL_LUMINANCE32F_ARB: -      return ctx->Extensions.ARB_texture_float && +      return ctx->API == API_OPENGL && +             ctx->Extensions.ARB_texture_float &&               ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE : 0;     case GL_LUMINANCE_ALPHA16F_ARB:     case GL_LUMINANCE_ALPHA32F_ARB: -      return ctx->Extensions.ARB_texture_float && +      return ctx->API == API_OPENGL && +             ctx->Extensions.ARB_texture_float &&               ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE_ALPHA : 0;     case GL_INTENSITY16F_ARB:     case GL_INTENSITY32F_ARB: -      return ctx->Extensions.ARB_texture_float && +      return ctx->API == API_OPENGL && +             ctx->Extensions.ARB_texture_float &&               ctx->Extensions.ARB_framebuffer_object ? GL_INTENSITY : 0;     case GL_RGB9_E5: -      return ctx->Extensions.EXT_texture_shared_exponent ? GL_RGB : 0; +      return (_mesa_is_desktop_gl(ctx) +              && ctx->Extensions.EXT_texture_shared_exponent) +         || _mesa_is_gles3(ctx) ? GL_RGB : 0;     case GL_R11F_G11F_B10F: -      return ctx->Extensions.EXT_packed_float ? GL_RGB : 0; +      return (_mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_packed_float) +         || _mesa_is_gles3(ctx) ? GL_RGB : 0;     case GL_RGBA8UI_EXT:     case GL_RGBA16UI_EXT: @@ -1229,8 +1282,9 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)     case GL_RGBA8I_EXT:     case GL_RGBA16I_EXT:     case GL_RGBA32I_EXT: -      return ctx->Version >= 30 || -             ctx->Extensions.EXT_texture_integer ? GL_RGBA : 0; +      return ctx->Version >= 30 +         || (_mesa_is_desktop_gl(ctx) && +             ctx->Extensions.EXT_texture_integer) ? GL_RGBA : 0;     case GL_RGB8UI_EXT:     case GL_RGB16UI_EXT: @@ -1238,8 +1292,9 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)     case GL_RGB8I_EXT:     case GL_RGB16I_EXT:     case GL_RGB32I_EXT: -      return ctx->Version >= 30 || -             ctx->Extensions.EXT_texture_integer ? GL_RGB : 0; +      return ctx->Version >= 30 +         || (_mesa_is_desktop_gl(ctx) && +             ctx->Extensions.EXT_texture_integer) ? GL_RGB : 0;     case GL_R8UI:     case GL_R8I: @@ -1247,9 +1302,10 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)     case GL_R16I:     case GL_R32UI:     case GL_R32I: -      return ctx->Version >= 30 || -             (ctx->Extensions.ARB_texture_rg && -              ctx->Extensions.EXT_texture_integer) ? GL_RED : 0; +      return ctx->Version >= 30 +         || (_mesa_is_desktop_gl(ctx) && +             ctx->Extensions.ARB_texture_rg && +             ctx->Extensions.EXT_texture_integer) ? GL_RED : 0;     case GL_RG8UI:     case GL_RG8I: @@ -1257,9 +1313,10 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)     case GL_RG16I:     case GL_RG32UI:     case GL_RG32I: -      return ctx->Version >= 30 || -             (ctx->Extensions.ARB_texture_rg && -              ctx->Extensions.EXT_texture_integer) ? GL_RG : 0; +      return ctx->Version >= 30 +         || (_mesa_is_desktop_gl(ctx) && +             ctx->Extensions.ARB_texture_rg && +             ctx->Extensions.EXT_texture_integer) ? GL_RG : 0;     case GL_INTENSITY8I_EXT:     case GL_INTENSITY8UI_EXT: @@ -1267,7 +1324,8 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)     case GL_INTENSITY16UI_EXT:     case GL_INTENSITY32I_EXT:     case GL_INTENSITY32UI_EXT: -      return ctx->Extensions.EXT_texture_integer && +      return ctx->API == API_OPENGL && +             ctx->Extensions.EXT_texture_integer &&               ctx->Extensions.ARB_framebuffer_object ? GL_INTENSITY : 0;     case GL_LUMINANCE8I_EXT: @@ -1276,7 +1334,8 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)     case GL_LUMINANCE16UI_EXT:     case GL_LUMINANCE32I_EXT:     case GL_LUMINANCE32UI_EXT: -      return ctx->Extensions.EXT_texture_integer && +      return ctx->API == API_OPENGL && +             ctx->Extensions.EXT_texture_integer &&               ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE : 0;     case GL_LUMINANCE_ALPHA8I_EXT: @@ -1285,7 +1344,8 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)     case GL_LUMINANCE_ALPHA16UI_EXT:     case GL_LUMINANCE_ALPHA32I_EXT:     case GL_LUMINANCE_ALPHA32UI_EXT: -      return ctx->Extensions.EXT_texture_integer && +      return ctx->API == API_OPENGL && +             ctx->Extensions.EXT_texture_integer &&               ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE_ALPHA : 0;     case GL_ALPHA8I_EXT: @@ -1294,14 +1354,18 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)     case GL_ALPHA16UI_EXT:     case GL_ALPHA32I_EXT:     case GL_ALPHA32UI_EXT: -      return ctx->Extensions.EXT_texture_integer && +      return ctx->API == API_OPENGL && +             ctx->Extensions.EXT_texture_integer &&               ctx->Extensions.ARB_framebuffer_object ? GL_ALPHA : 0;     case GL_RGB10_A2UI: -      return ctx->Extensions.ARB_texture_rgb10_a2ui ? GL_RGBA : 0; +      return (_mesa_is_desktop_gl(ctx) && +              ctx->Extensions.ARB_texture_rgb10_a2ui) +         || _mesa_is_gles3(ctx) ? GL_RGBA : 0;     case GL_RGB565: -      return ctx->Extensions.ARB_ES2_compatibility ? GL_RGB : 0; +      return _mesa_is_gles(ctx) || ctx->Extensions.ARB_ES2_compatibility +         ? GL_RGB : 0;     default:        return 0;     } @@ -1572,7 +1636,8 @@ _mesa_GetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint *params)        *params = get_component_bits(pname, rb->_BaseFormat, rb->Format);        break;     case GL_RENDERBUFFER_SAMPLES: -      if (ctx->Extensions.ARB_framebuffer_object) { +      if ((_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_framebuffer_object) +          || _mesa_is_gles3(ctx)) {           *params = rb->NumSamples;           break;        } @@ -2137,7 +2202,8 @@ _mesa_FramebufferTexture2DEXT(GLenum target, GLenum attachment,           error = GL_FALSE;           break;        case GL_TEXTURE_RECTANGLE: -         error = !ctx->Extensions.NV_texture_rectangle; +         error = _mesa_is_gles(ctx) +            || !ctx->Extensions.NV_texture_rectangle;           break;        case GL_TEXTURE_CUBE_MAP_POSITIVE_X:        case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: @@ -2148,7 +2214,8 @@ _mesa_FramebufferTexture2DEXT(GLenum target, GLenum attachment,           error = !ctx->Extensions.ARB_texture_cube_map;           break;        case GL_TEXTURE_2D_ARRAY: -         error = !ctx->Extensions.EXT_texture_array; +         error = (_mesa_is_gles(ctx) && ctx->Version < 30) +            || !ctx->Extensions.EXT_texture_array;           break;        default:           error = GL_TRUE; @@ -2360,11 +2427,10 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,        }        else {           assert(att->Type == GL_NONE); -         if (_mesa_is_desktop_gl(ctx)) { +         if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {              *params = 0;           } else { -            _mesa_error(ctx, GL_INVALID_ENUM, -                        "glGetFramebufferAttachmentParameterivEXT(pname)"); +            goto invalid_pname_enum;           }        }        return; @@ -2377,8 +2443,7 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,                       "glGetFramebufferAttachmentParameterivEXT(pname)");        }        else { -	 _mesa_error(ctx, GL_INVALID_ENUM, -		     "glGetFramebufferAttachmentParameterivEXT(pname)"); +         goto invalid_pname_enum;        }        return;     case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT: @@ -2395,12 +2460,16 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,                       "glGetFramebufferAttachmentParameterivEXT(pname)");        }        else { -	 _mesa_error(ctx, GL_INVALID_ENUM, -		     "glGetFramebufferAttachmentParameterivEXT(pname)"); +         goto invalid_pname_enum;        }        return;     case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT: -      if (att->Type == GL_TEXTURE) { +      if (ctx->API == API_OPENGLES) { +         goto invalid_pname_enum; +      } else if (att->Type == GL_NONE) { +         _mesa_error(ctx, err, +                     "glGetFramebufferAttachmentParameterivEXT(pname)"); +      } else if (att->Type == GL_TEXTURE) {           if (att->Texture && att->Texture->Target == GL_TEXTURE_3D) {              *params = att->Zoffset;           } @@ -2408,19 +2477,14 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,              *params = 0;           }        } -      else if (att->Type == GL_NONE) { -         _mesa_error(ctx, err, -                     "glGetFramebufferAttachmentParameterivEXT(pname)"); -      }        else { -	 _mesa_error(ctx, GL_INVALID_ENUM, -		     "glGetFramebufferAttachmentParameterivEXT(pname)"); +         goto invalid_pname_enum;        }        return;     case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: -      if (!ctx->Extensions.ARB_framebuffer_object) { -         _mesa_error(ctx, GL_INVALID_ENUM, -                     "glGetFramebufferAttachmentParameterivEXT(pname)"); +      if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_framebuffer_object) +          && !_mesa_is_gles3(ctx)) { +         goto invalid_pname_enum;        }        else if (att->Type == GL_NONE) {           _mesa_error(ctx, err, @@ -2438,10 +2502,10 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,        }        return;     case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: -      if (!ctx->Extensions.ARB_framebuffer_object) { -         _mesa_error(ctx, GL_INVALID_ENUM, -                     "glGetFramebufferAttachmentParameterivEXT(pname)"); -         return; +      if ((ctx->API != API_OPENGL || !ctx->Extensions.ARB_framebuffer_object) +          && ctx->API != API_OPENGL_CORE +          && !_mesa_is_gles3(ctx)) { +         goto invalid_pname_enum;        }        else if (att->Type == GL_NONE) {           _mesa_error(ctx, err, @@ -2473,9 +2537,9 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,     case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:     case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:     case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: -      if (!ctx->Extensions.ARB_framebuffer_object) { -         _mesa_error(ctx, GL_INVALID_ENUM, -                     "glGetFramebufferAttachmentParameterivEXT(pname)"); +      if ((!_mesa_is_desktop_gl(ctx) || !ctx->Extensions.ARB_framebuffer_object) +          && !_mesa_is_gles3(ctx)) { +         goto invalid_pname_enum;        }        else if (att->Type == GL_NONE) {           _mesa_error(ctx, err, @@ -2503,10 +2567,15 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,        }        return;     default: -      _mesa_error(ctx, GL_INVALID_ENUM, -                  "glGetFramebufferAttachmentParameterivEXT(pname)"); -      return; +      goto invalid_pname_enum;     } + +   return; + +invalid_pname_enum: +   _mesa_error(ctx, GL_INVALID_ENUM, +               "glGetFramebufferAttachmentParameteriv(pname)"); +   return;  } @@ -2524,16 +2593,23 @@ _mesa_GenerateMipmapEXT(GLenum target)     switch (target) {     case GL_TEXTURE_1D: +      error = _mesa_is_gles(ctx); +      break;     case GL_TEXTURE_2D: -   case GL_TEXTURE_3D:        error = GL_FALSE;        break; +   case GL_TEXTURE_3D: +      error = ctx->API == API_OPENGLES; +      break;     case GL_TEXTURE_CUBE_MAP:        error = !ctx->Extensions.ARB_texture_cube_map;        break;     case GL_TEXTURE_1D_ARRAY: +      error = _mesa_is_gles(ctx) || !ctx->Extensions.EXT_texture_array; +      break;     case GL_TEXTURE_2D_ARRAY: -      error = !ctx->Extensions.EXT_texture_array; +      error = (_mesa_is_gles(ctx) && ctx->Version < 30) +         || !ctx->Extensions.EXT_texture_array;        break;     default:        error = GL_TRUE; diff --git a/mesalib/src/mesa/main/fog.c b/mesalib/src/mesa/main/fog.c index d65add930..07405fb4b 100644 --- a/mesalib/src/mesa/main/fog.c +++ b/mesalib/src/mesa/main/fog.c @@ -141,6 +141,8 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )           update_fog_scale(ctx);           break;        case GL_FOG_INDEX: +         if (ctx->API != API_OPENGL) +            goto invalid_pname;   	 if (ctx->Fog.Index == *params)  	    return;  	 FLUSH_VERTICES(ctx, _NEW_FOG); @@ -161,7 +163,7 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )           break;        case GL_FOG_COORDINATE_SOURCE_EXT: {  	 GLenum p = (GLenum) (GLint) *params; -         if (!ctx->Extensions.EXT_fog_coord || +         if (ctx->API != API_OPENGL || !ctx->Extensions.EXT_fog_coord ||               (p != GL_FOG_COORDINATE_EXT && p != GL_FRAGMENT_DEPTH_EXT)) {  	    _mesa_error(ctx, GL_INVALID_ENUM, "glFog");  	    return; @@ -174,7 +176,7 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )        }        case GL_FOG_DISTANCE_MODE_NV: {  	 GLenum p = (GLenum) (GLint) *params; -         if (!ctx->Extensions.NV_fog_distance || +         if (ctx->API != API_OPENGL || !ctx->Extensions.NV_fog_distance ||               (p != GL_EYE_RADIAL_NV && p != GL_EYE_PLANE && p != GL_EYE_PLANE_ABSOLUTE_NV)) {  	    _mesa_error(ctx, GL_INVALID_ENUM, "glFog");  	    return; @@ -186,13 +188,18 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )  	 break;        }        default: -         _mesa_error( ctx, GL_INVALID_ENUM, "glFog" ); -         return; +         goto invalid_pname;     }     if (ctx->Driver.Fogfv) {        (*ctx->Driver.Fogfv)( ctx, pname, params );     } + +   return; + +invalid_pname: +   _mesa_error( ctx, GL_INVALID_ENUM, "glFog" ); +   return;  } diff --git a/mesalib/src/mesa/main/get.c b/mesalib/src/mesa/main/get.c index 332dfaf7f..fe1035be8 100644 --- a/mesalib/src/mesa/main/get.c +++ b/mesalib/src/mesa/main/get.c @@ -284,6 +284,12 @@ static const int extra_GLSL_130[] = {     EXTRA_END  }; +static const int extra_texture_buffer_object[] = { +   EXTRA_VERSION_31, +   EXT(ARB_texture_buffer_object), +   EXTRA_END +}; +  static const int extra_ARB_uniform_buffer_object_and_geometry_shader[] = {     EXT(ARB_uniform_buffer_object),     EXT(ARB_geometry_shader4), @@ -316,7 +322,6 @@ EXTRA_EXT(ARB_fragment_shader);  EXTRA_EXT(ARB_fragment_program);  EXTRA_EXT2(ARB_framebuffer_object, EXT_framebuffer_multisample);  EXTRA_EXT(EXT_framebuffer_object); -EXTRA_EXT(APPLE_vertex_array_object);  EXTRA_EXT(ARB_seamless_cube_map);  EXTRA_EXT(EXT_compiled_vertex_array);  EXTRA_EXT(ARB_sync); @@ -530,6 +535,9 @@ static const struct value_desc values[] = {      * GLSL: */     { GL_MAX_CLIP_PLANES, CONTEXT_INT(Const.MaxClipPlanes), NO_EXTRA }, +   /* GL_{APPLE,ARB,OES}_vertex_array_object */ +   { GL_VERTEX_ARRAY_BINDING_APPLE, ARRAY_INT(Name), NO_EXTRA }, +  #if FEATURE_GL || FEATURE_ES1     /* Enums in OpenGL and GLES1 */     { 0, 0, TYPE_API_MASK, API_OPENGL_BIT | API_OPENGLES_BIT | API_OPENGL_CORE_BIT, NO_EXTRA }, @@ -701,10 +709,19 @@ static const struct value_desc values[] = {  #endif /* FEATURE_ES1 */  #if FEATURE_GL || FEATURE_ES2 -   { 0, 0, TYPE_API_MASK, API_OPENGL_BIT | API_OPENGLES2_BIT, NO_EXTRA }, +   { 0, 0, TYPE_API_MASK, API_OPENGL_BIT | API_OPENGL_CORE_BIT | API_OPENGLES2_BIT, NO_EXTRA },     { GL_MAX_TEXTURE_COORDS_ARB, /* == GL_MAX_TEXTURE_COORDS_NV */       CONTEXT_INT(Const.MaxTextureCoordUnits),       extra_ARB_fragment_program_NV_fragment_program }, +   { GL_PACK_IMAGE_HEIGHT_EXT, CONTEXT_INT(Pack.ImageHeight), NO_EXTRA }, +   { GL_PACK_ROW_LENGTH, CONTEXT_INT(Pack.RowLength), NO_EXTRA }, +   { GL_PACK_SKIP_PIXELS, CONTEXT_INT(Pack.SkipPixels), NO_EXTRA }, +   { GL_PACK_SKIP_ROWS, CONTEXT_INT(Pack.SkipRows), NO_EXTRA }, +   { GL_UNPACK_ROW_LENGTH, CONTEXT_INT(Unpack.RowLength), NO_EXTRA }, +   { GL_UNPACK_SKIP_PIXELS, CONTEXT_INT(Unpack.SkipPixels), NO_EXTRA }, +   { GL_UNPACK_SKIP_ROWS, CONTEXT_INT(Unpack.SkipRows), NO_EXTRA }, +   { GL_UNPACK_SKIP_IMAGES_EXT, CONTEXT_INT(Unpack.SkipImages), NO_EXTRA }, +   { GL_UNPACK_IMAGE_HEIGHT_EXT, CONTEXT_INT(Unpack.ImageHeight), NO_EXTRA },     /* GL_ARB_draw_buffers */     { GL_MAX_DRAW_BUFFERS_ARB, CONTEXT_INT(Const.MaxDrawBuffers), NO_EXTRA }, @@ -882,11 +899,7 @@ static const struct value_desc values[] = {     { GL_MAX_PIXEL_MAP_TABLE, CONST(MAX_PIXEL_MAP_TABLE), NO_EXTRA },     { GL_NAME_STACK_DEPTH, CONTEXT_INT(Select.NameStackDepth), NO_EXTRA },     { GL_PACK_LSB_FIRST, CONTEXT_BOOL(Pack.LsbFirst), NO_EXTRA }, -   { GL_PACK_ROW_LENGTH, CONTEXT_INT(Pack.RowLength), NO_EXTRA }, -   { GL_PACK_SKIP_PIXELS, CONTEXT_INT(Pack.SkipPixels), NO_EXTRA }, -   { GL_PACK_SKIP_ROWS, CONTEXT_INT(Pack.SkipRows), NO_EXTRA },     { GL_PACK_SWAP_BYTES, CONTEXT_BOOL(Pack.SwapBytes), NO_EXTRA }, -   { GL_PACK_IMAGE_HEIGHT_EXT, CONTEXT_INT(Pack.ImageHeight), NO_EXTRA },     { GL_PACK_INVERT_MESA, CONTEXT_BOOL(Pack.Invert), NO_EXTRA },     { GL_PIXEL_MAP_A_TO_A_SIZE, CONTEXT_INT(PixelMaps.AtoA.Size), NO_EXTRA },     { GL_PIXEL_MAP_B_TO_B_SIZE, CONTEXT_INT(PixelMaps.BtoB.Size), NO_EXTRA }, @@ -936,12 +949,7 @@ static const struct value_desc values[] = {     { GL_TEXTURE_GEN_Q, LOC_TEXUNIT, TYPE_BIT_3,       offsetof(struct gl_texture_unit, TexGenEnabled), NO_EXTRA },     { GL_UNPACK_LSB_FIRST, CONTEXT_BOOL(Unpack.LsbFirst), NO_EXTRA }, -   { GL_UNPACK_ROW_LENGTH, CONTEXT_INT(Unpack.RowLength), NO_EXTRA }, -   { GL_UNPACK_SKIP_PIXELS, CONTEXT_INT(Unpack.SkipPixels), NO_EXTRA }, -   { GL_UNPACK_SKIP_ROWS, CONTEXT_INT(Unpack.SkipRows), NO_EXTRA },     { GL_UNPACK_SWAP_BYTES, CONTEXT_BOOL(Unpack.SwapBytes), NO_EXTRA }, -   { GL_UNPACK_SKIP_IMAGES_EXT, CONTEXT_INT(Unpack.SkipImages), NO_EXTRA }, -   { GL_UNPACK_IMAGE_HEIGHT_EXT, CONTEXT_INT(Unpack.ImageHeight), NO_EXTRA },     { GL_ZOOM_X, CONTEXT_FLOAT(Pixel.ZoomX), NO_EXTRA },     { GL_ZOOM_Y, CONTEXT_FLOAT(Pixel.ZoomY), NO_EXTRA }, @@ -1207,10 +1215,6 @@ static const struct value_desc values[] = {     { GL_MAX_SAMPLES, CONTEXT_INT(Const.MaxSamples),       extra_ARB_framebuffer_object_EXT_framebuffer_multisample }, -   /* GL_APPLE_vertex_array_object */ -   { GL_VERTEX_ARRAY_BINDING_APPLE, ARRAY_INT(Name), -     extra_APPLE_vertex_array_object }, -     /* GL_ARB_seamless_cube_map */     { GL_TEXTURE_CUBE_MAP_SEAMLESS,       CONTEXT_BOOL(Texture.CubeMapSeamless), extra_ARB_seamless_cube_map }, @@ -1287,15 +1291,15 @@ static const struct value_desc values[] = {     /* GL_ARB_texture_buffer_object */     { GL_MAX_TEXTURE_BUFFER_SIZE_ARB, CONTEXT_INT(Const.MaxTextureBufferSize), -     extra_ARB_texture_buffer_object }, +     extra_texture_buffer_object },     { GL_TEXTURE_BINDING_BUFFER_ARB, LOC_CUSTOM, TYPE_INT, 0, -     extra_ARB_texture_buffer_object }, +     extra_texture_buffer_object },     { GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB, LOC_CUSTOM, TYPE_INT, -     TEXTURE_BUFFER_INDEX, extra_ARB_texture_buffer_object }, +     TEXTURE_BUFFER_INDEX, extra_texture_buffer_object },     { GL_TEXTURE_BUFFER_FORMAT_ARB, LOC_CUSTOM, TYPE_INT, 0, -     extra_ARB_texture_buffer_object }, +     extra_texture_buffer_object },     { GL_TEXTURE_BUFFER_ARB, LOC_CUSTOM, TYPE_INT, 0, -     extra_ARB_texture_buffer_object }, +     extra_texture_buffer_object },     /* GL_ARB_sampler_objects / GL 3.3 */     { GL_SAMPLER_BINDING, diff --git a/mesalib/src/mesa/main/getstring.c b/mesalib/src/mesa/main/getstring.c index 1734fb3f5..9c9ade359 100644 --- a/mesalib/src/mesa/main/getstring.c +++ b/mesalib/src/mesa/main/getstring.c @@ -126,26 +126,35 @@ _mesa_GetString( GLenum name )        case GL_VERSION:           return (const GLubyte *) ctx->VersionString;        case GL_EXTENSIONS: +         if (ctx->API == API_OPENGL_CORE) { +            _mesa_error(ctx, GL_INVALID_ENUM, "glGetString(GL_EXTENSIONS)"); +            return (const GLubyte *) 0; +         }           return (const GLubyte *) ctx->Extensions.String;  #if FEATURE_ARB_shading_language_100 || FEATURE_ES2        case GL_SHADING_LANGUAGE_VERSION: +         if (ctx->API == API_OPENGLES) +            break;  	 return shading_language_version(ctx);  #endif  #if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program || \      FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program        case GL_PROGRAM_ERROR_STRING_NV: -         if (ctx->Extensions.NV_fragment_program || -             ctx->Extensions.ARB_fragment_program || -             ctx->Extensions.NV_vertex_program || -             ctx->Extensions.ARB_vertex_program) { +         if (ctx->API == API_OPENGL && +             (ctx->Extensions.NV_fragment_program || +              ctx->Extensions.ARB_fragment_program || +              ctx->Extensions.NV_vertex_program || +              ctx->Extensions.ARB_vertex_program)) {              return (const GLubyte *) ctx->Program.ErrorString;           } -         /* FALL-THROUGH */ +         break;  #endif        default: -         _mesa_error( ctx, GL_INVALID_ENUM, "glGetString" ); -         return (const GLubyte *) 0; +         break;     } + +   _mesa_error( ctx, GL_INVALID_ENUM, "glGetString" ); +   return (const GLubyte *) 0;  } @@ -203,50 +212,81 @@ _mesa_GetPointerv( GLenum pname, GLvoid **params )     switch (pname) {        case GL_VERTEX_ARRAY_POINTER: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_pname;           *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POS].Ptr;           break;        case GL_NORMAL_ARRAY_POINTER: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_pname;           *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Ptr;           break;        case GL_COLOR_ARRAY_POINTER: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_pname;           *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Ptr;           break;        case GL_SECONDARY_COLOR_ARRAY_POINTER_EXT: +         if (ctx->API != API_OPENGL) +            goto invalid_pname;           *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Ptr;           break;        case GL_FOG_COORDINATE_ARRAY_POINTER_EXT: +         if (ctx->API != API_OPENGL) +            goto invalid_pname;           *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_FOG].Ptr;           break;        case GL_INDEX_ARRAY_POINTER: +         if (ctx->API != API_OPENGL) +            goto invalid_pname;           *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Ptr;           break;        case GL_TEXTURE_COORD_ARRAY_POINTER: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_pname;           *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_TEX(clientUnit)].Ptr;           break;        case GL_EDGE_FLAG_ARRAY_POINTER: +         if (ctx->API != API_OPENGL) +            goto invalid_pname;           *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Ptr;           break;        case GL_FEEDBACK_BUFFER_POINTER: +         if (ctx->API != API_OPENGL) +            goto invalid_pname;           *params = ctx->Feedback.Buffer;           break;        case GL_SELECTION_BUFFER_POINTER: +         if (ctx->API != API_OPENGL) +            goto invalid_pname;           *params = ctx->Select.Buffer;           break;  #if FEATURE_point_size_array        case GL_POINT_SIZE_ARRAY_POINTER_OES: +         if (ctx->API != API_OPENGLES) +            goto invalid_pname;           *params = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Ptr;           break;  #endif        case GL_DEBUG_CALLBACK_FUNCTION_ARB: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_pname;           *params = (GLvoid *) ctx->Debug.Callback;           break;        case GL_DEBUG_CALLBACK_USER_PARAM_ARB: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_pname;           *params = ctx->Debug.CallbackData;           break;        default: -         _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" ); -         return; +         goto invalid_pname;     } + +   return; + +invalid_pname: +   _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" ); +   return;  } diff --git a/mesalib/src/mesa/main/hint.c b/mesalib/src/mesa/main/hint.c index ff8d88fff..90130e3db 100644 --- a/mesalib/src/mesa/main/hint.c +++ b/mesalib/src/mesa/main/hint.c @@ -51,30 +51,40 @@ _mesa_Hint( GLenum target, GLenum mode )     switch (target) {        case GL_FOG_HINT: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_target;           if (ctx->Hint.Fog == mode)  	    return;  	 FLUSH_VERTICES(ctx, _NEW_HINT);           ctx->Hint.Fog = mode;           break;        case GL_LINE_SMOOTH_HINT: +         if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) +            goto invalid_target;           if (ctx->Hint.LineSmooth == mode)  	    return;  	 FLUSH_VERTICES(ctx, _NEW_HINT);           ctx->Hint.LineSmooth = mode;           break;        case GL_PERSPECTIVE_CORRECTION_HINT: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_target;           if (ctx->Hint.PerspectiveCorrection == mode)  	    return;  	 FLUSH_VERTICES(ctx, _NEW_HINT);           ctx->Hint.PerspectiveCorrection = mode;           break;        case GL_POINT_SMOOTH_HINT: +         if (ctx->API != API_OPENGL && ctx->API != API_OPENGLES) +            goto invalid_target;           if (ctx->Hint.PointSmooth == mode)  	    return;  	 FLUSH_VERTICES(ctx, _NEW_HINT);           ctx->Hint.PointSmooth = mode;           break;        case GL_POLYGON_SMOOTH_HINT: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_target;           if (ctx->Hint.PolygonSmooth == mode)  	    return;  	 FLUSH_VERTICES(ctx, _NEW_HINT); @@ -83,6 +93,8 @@ _mesa_Hint( GLenum target, GLenum mode )        /* GL_EXT_clip_volume_hint */        case GL_CLIP_VOLUME_CLIPPING_HINT_EXT: +         if (ctx->API != API_OPENGL) +            goto invalid_target;           if (ctx->Hint.ClipVolumeClipping == mode)  	    return;  	 FLUSH_VERTICES(ctx, _NEW_HINT); @@ -91,6 +103,8 @@ _mesa_Hint( GLenum target, GLenum mode )        /* GL_ARB_texture_compression */        case GL_TEXTURE_COMPRESSION_HINT_ARB: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_target;  	 if (ctx->Hint.TextureCompression == mode)  	    return;  	 FLUSH_VERTICES(ctx, _NEW_HINT); @@ -99,6 +113,8 @@ _mesa_Hint( GLenum target, GLenum mode )        /* GL_SGIS_generate_mipmap */        case GL_GENERATE_MIPMAP_HINT_SGIS: +         if (ctx->API == API_OPENGL_CORE) +            goto invalid_target;           if (ctx->Hint.GenerateMipmap == mode)              return;  	 FLUSH_VERTICES(ctx, _NEW_HINT); @@ -107,10 +123,8 @@ _mesa_Hint( GLenum target, GLenum mode )        /* GL_ARB_fragment_shader */        case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB: -         if (!ctx->Extensions.ARB_fragment_shader) { -            _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)"); -            return; -         } +         if (ctx->API == API_OPENGLES || !ctx->Extensions.ARB_fragment_shader) +            goto invalid_target;           if (ctx->Hint.FragmentShaderDerivative == mode)              return;           FLUSH_VERTICES(ctx, _NEW_HINT); @@ -118,13 +132,18 @@ _mesa_Hint( GLenum target, GLenum mode )           break;        default: -         _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)"); -         return; +         goto invalid_target;     }     if (ctx->Driver.Hint) {        (*ctx->Driver.Hint)( ctx, target, mode );     } + +   return; + +invalid_target: +   _mesa_error(ctx, GL_INVALID_ENUM, "glHint(target)"); +   return;  } diff --git a/mesalib/src/mesa/main/light.c b/mesalib/src/mesa/main/light.c index d6fbcd9be..cfb53dc06 100644 --- a/mesalib/src/mesa/main/light.c +++ b/mesalib/src/mesa/main/light.c @@ -466,6 +466,8 @@ _mesa_LightModelfv( GLenum pname, const GLfloat *params )           COPY_4V( ctx->Light.Model.Ambient, params );           break;        case GL_LIGHT_MODEL_LOCAL_VIEWER: +         if (ctx->API != API_OPENGL) +            goto invalid_pname;           newbool = (params[0]!=0.0);  	 if (ctx->Light.Model.LocalViewer == newbool)  	    return; @@ -484,6 +486,8 @@ _mesa_LightModelfv( GLenum pname, const GLfloat *params )              ctx->_TriangleCaps &= ~DD_TRI_LIGHT_TWOSIDE;           break;        case GL_LIGHT_MODEL_COLOR_CONTROL: +         if (ctx->API != API_OPENGL) +            goto invalid_pname;           if (params[0] == (GLfloat) GL_SINGLE_COLOR)  	    newenum = GL_SINGLE_COLOR;           else if (params[0] == (GLfloat) GL_SEPARATE_SPECULAR_COLOR) @@ -499,12 +503,17 @@ _mesa_LightModelfv( GLenum pname, const GLfloat *params )  	 ctx->Light.Model.ColorControl = newenum;           break;        default: -         _mesa_error( ctx, GL_INVALID_ENUM, "glLightModel(pname=0x%x)", pname ); -         break; +         goto invalid_pname;     }     if (ctx->Driver.LightModelfv)        ctx->Driver.LightModelfv( ctx, pname, params ); + +   return; + +invalid_pname: +   _mesa_error( ctx, GL_INVALID_ENUM, "glLightModel(pname=0x%x)", pname ); +   return;  } @@ -789,6 +798,10 @@ _mesa_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params )  	 *params = mat[MAT_ATTRIB_SHININESS(f)][0];  	 break;        case GL_COLOR_INDEXES: +         if (ctx->API != API_OPENGL) { +            _mesa_error( ctx, GL_INVALID_ENUM, "glGetMaterialfv(pname)" ); +            return; +         }  	 params[0] = mat[MAT_ATTRIB_INDEXES(f)][0];  	 params[1] = mat[MAT_ATTRIB_INDEXES(f)][1];  	 params[2] = mat[MAT_ATTRIB_INDEXES(f)][2]; @@ -807,6 +820,8 @@ _mesa_GetMaterialiv( GLenum face, GLenum pname, GLint *params )     GLfloat (*mat)[4] = ctx->Light.Material.Attrib;     ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* update materials */ +   ASSERT(ctx->API == API_OPENGL); +     FLUSH_CURRENT(ctx, 0); /* update ctx->Light.Material from vertex buffer */     if (face==GL_FRONT) { diff --git a/mesalib/src/mesa/main/lines.c b/mesalib/src/mesa/main/lines.c index 79bf5679d..e400b3913 100644 --- a/mesalib/src/mesa/main/lines.c +++ b/mesalib/src/mesa/main/lines.c @@ -51,6 +51,23 @@ _mesa_LineWidth( GLfloat width )        return;     } +   /* Page 407 (page 423 of the PDF) of the OpenGL 3.0 spec says (in the list +    * of deprecated functionality): +    * +    *     "Wide lines and line stipple - LineWidth is not deprecated, but +    *     values greater than 1.0 will generate an INVALID_VALUE error;" +    * +    * This is one of the very few cases where functionality was deprecated but +    * *NOT* removed in a later spec.  Therefore, we only disallow this in a +    * forward compatible context. +    */ +   if (ctx->API == API_OPENGL_CORE +       && ((ctx->Const.ContextFlags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT) +           != 0)) { +      _mesa_error( ctx, GL_INVALID_VALUE, "glLineWidth" ); +      return; +   } +     if (ctx->Line.Width == width)        return; diff --git a/mesalib/src/mesa/main/macros.h b/mesalib/src/mesa/main/macros.h index d1df2ce1b..5af9487cb 100644 --- a/mesalib/src/mesa/main/macros.h +++ b/mesalib/src/mesa/main/macros.h @@ -200,11 +200,16 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];                (a)[3] == (b)[3])  /** Test for equality (unsigned bytes) */ +static inline GLboolean +TEST_EQ_4UBV(const GLubyte a[4], const GLubyte b[4]) +{  #if defined(__i386__) -#define TEST_EQ_4UBV(DST, SRC) *((GLuint*)(DST)) == *((GLuint*)(SRC)) +   return *((const GLuint *) a) == *((const GLuint *) b);  #else -#define TEST_EQ_4UBV(DST, SRC) TEST_EQ_4V(DST, SRC) +   return TEST_EQ_4V(a, b);  #endif +} +  /** Copy a 4-element vector */  #define COPY_4V( DST, SRC )         \ @@ -215,40 +220,25 @@ do {                                \     (DST)[3] = (SRC)[3];             \  } while (0) -/** Copy a 4-element vector with cast */ -#define COPY_4V_CAST( DST, SRC, CAST )  \ -do {                                    \ -   (DST)[0] = (CAST)(SRC)[0];           \ -   (DST)[1] = (CAST)(SRC)[1];           \ -   (DST)[2] = (CAST)(SRC)[2];           \ -   (DST)[3] = (CAST)(SRC)[3];           \ -} while (0) -  /** Copy a 4-element unsigned byte vector */ +static inline void +COPY_4UBV(GLubyte dst[4], const GLubyte src[4]) +{  #if defined(__i386__) -#define COPY_4UBV(DST, SRC)                 \ -do {                                        \ -   *((GLuint*)(DST)) = *((GLuint*)(SRC));   \ -} while (0) +   *((GLuint *) dst) = *((GLuint *) src);  #else -/* The GLuint cast might fail if DST or SRC are not dword-aligned (RISC) */ -#define COPY_4UBV(DST, SRC)         \ -do {                                \ -   (DST)[0] = (SRC)[0];             \ -   (DST)[1] = (SRC)[1];             \ -   (DST)[2] = (SRC)[2];             \ -   (DST)[3] = (SRC)[3];             \ -} while (0) +   /* The GLuint cast might fail if DST or SRC are not dword-aligned (RISC) */ +   COPY_4V(dst, src);  #endif +} -/** - * Copy a 4-element float vector - * memcpy seems to be most efficient - */ -#define COPY_4FV( DST, SRC )                  \ -do {                                          \ -   memcpy(DST, SRC, sizeof(GLfloat) * 4);     \ -} while (0) +/** Copy a 4-element float vector */ +static inline void +COPY_4FV(GLfloat dst[4], const GLfloat src[4]) +{ +   /* memcpy seems to be most efficient */ +   memcpy(dst, src, sizeof(GLfloat) * 4); +}  /** Copy \p SZ elements into a 4-element vector */  #define COPY_SZ_4V(DST, SZ, SRC)  \ @@ -584,34 +574,31 @@ do {				\  /*@}*/ -/** \name Linear interpolation macros */ +/** \name Linear interpolation functions */  /*@{*/ -/** - * Linear interpolation - * - * \note \p OUT argument is evaluated twice! - * \note Be wary of using *coord++ as an argument to any of these macros! - */ -#define LINTERP(T, OUT, IN) ((OUT) + (T) * ((IN) - (OUT))) - -#define INTERP_F( t, dstf, outf, inf )      \ -   dstf = LINTERP( t, outf, inf ) - -#define INTERP_4F( t, dst, out, in )        \ -do {                        \ -   dst[0] = LINTERP( (t), (out)[0], (in)[0] );  \ -   dst[1] = LINTERP( (t), (out)[1], (in)[1] );  \ -   dst[2] = LINTERP( (t), (out)[2], (in)[2] );  \ -   dst[3] = LINTERP( (t), (out)[3], (in)[3] );  \ -} while (0) - -#define INTERP_3F( t, dst, out, in )        \ -do {                        \ -   dst[0] = LINTERP( (t), (out)[0], (in)[0] );  \ -   dst[1] = LINTERP( (t), (out)[1], (in)[1] );  \ -   dst[2] = LINTERP( (t), (out)[2], (in)[2] );  \ -} while (0) +static inline GLfloat +LINTERP(GLfloat t, GLfloat out, GLfloat in) +{ +   return out + t * (in - out); +} + +static inline void +INTERP_3F(GLfloat t, GLfloat dst[3], const GLfloat out[3], const GLfloat in[3]) +{ +   dst[0] = LINTERP( t, out[0], in[0] ); +   dst[1] = LINTERP( t, out[1], in[1] ); +   dst[2] = LINTERP( t, out[2], in[2] ); +} + +static inline void +INTERP_4F(GLfloat t, GLfloat dst[4], const GLfloat out[4], const GLfloat in[4]) +{ +   dst[0] = LINTERP( t, out[0], in[0] ); +   dst[1] = LINTERP( t, out[1], in[1] ); +   dst[2] = LINTERP( t, out[2], in[2] ); +   dst[3] = LINTERP( t, out[3], in[3] ); +}  /*@}*/ @@ -630,43 +617,76 @@ do {                        \  #define MIN3( A, B, C ) ((A) < (B) ? MIN2(A, C) : MIN2(B, C))  #define MAX3( A, B, C ) ((A) > (B) ? MAX2(A, C) : MAX2(B, C)) -/** Dot product of two 2-element vectors */ -#define DOT2( a, b )  ( (a)[0]*(b)[0] + (a)[1]*(b)[1] ) - -/** Dot product of two 3-element vectors */ -#define DOT3( a, b )  ( (a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2] ) - -/** Dot product of two 4-element vectors */ -#define DOT4( a, b )  ( (a)[0]*(b)[0] + (a)[1]*(b)[1] + \ -            (a)[2]*(b)[2] + (a)[3]*(b)[3] )  /** Cross product of two 3-element vectors */ -#define CROSS3(n, u, v)             \ -do {                        \ -   (n)[0] = (u)[1]*(v)[2] - (u)[2]*(v)[1];  \ -   (n)[1] = (u)[2]*(v)[0] - (u)[0]*(v)[2];  \ -   (n)[2] = (u)[0]*(v)[1] - (u)[1]*(v)[0];  \ -} while (0) +static inline void +CROSS3(GLfloat n[3], const GLfloat u[3], const GLfloat v[3]) +{ +   n[0] = u[1] * v[2] - u[2] * v[1]; +   n[1] = u[2] * v[0] - u[0] * v[2]; +   n[2] = u[0] * v[1] - u[1] * v[0]; +} -/* Normalize a 3-element vector to unit length. */ -#define NORMALIZE_3FV( V )          \ -do {                        \ -   GLfloat len = (GLfloat) LEN_SQUARED_3FV(V);  \ -   if (len) {                   \ -      len = INV_SQRTF(len);         \ -      (V)[0] = (GLfloat) ((V)[0] * len);    \ -      (V)[1] = (GLfloat) ((V)[1] * len);    \ -      (V)[2] = (GLfloat) ((V)[2] * len);    \ -   }                        \ -} while(0) +/** Dot product of two 2-element vectors */ +static inline GLfloat +DOT2(const GLfloat a[2], const GLfloat b[2]) +{ +   return a[0] * b[0] + a[1] * b[1]; +} + +static inline GLfloat +DOT3(const GLfloat a[3], const GLfloat b[3]) +{ +   return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +} + +static inline GLfloat +DOT4(const GLfloat a[4], const GLfloat b[4]) +{ +   return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; +} + + +static inline GLfloat +LEN_SQUARED_3FV(const GLfloat v[3]) +{ +   return DOT3(v, v); +} + +static inline GLfloat +LEN_SQUARED_2FV(const GLfloat v[2]) +{ +   return DOT2(v, v); +} + + +static inline GLfloat +LEN_3FV(const GLfloat v[3]) +{ +   return SQRTF(LEN_SQUARED_3FV(v)); +} + +static inline GLfloat +LEN_2FV(const GLfloat v[2]) +{ +   return SQRTF(LEN_SQUARED_2FV(v)); +} -#define LEN_3FV( V ) (SQRTF((V)[0]*(V)[0]+(V)[1]*(V)[1]+(V)[2]*(V)[2])) -#define LEN_2FV( V ) (SQRTF((V)[0]*(V)[0]+(V)[1]*(V)[1])) -#define LEN_SQUARED_3FV( V ) ((V)[0]*(V)[0]+(V)[1]*(V)[1]+(V)[2]*(V)[2]) -#define LEN_SQUARED_2FV( V ) ((V)[0]*(V)[0]+(V)[1]*(V)[1]) +/* Normalize a 3-element vector to unit length. */ +static inline void +NORMALIZE_3FV(GLfloat v[3]) +{ +   GLfloat len = (GLfloat) LEN_SQUARED_3FV(v); +   if (len) { +      len = INV_SQRTF(len); +      v[0] *= len; +      v[1] *= len; +      v[2] *= len; +   } +}  /** Compute ceiling of integer quotient of A divided by B. */ diff --git a/mesalib/src/mesa/main/matrix.c b/mesalib/src/mesa/main/matrix.c index b09fa4d3d..7157433de 100644 --- a/mesalib/src/mesa/main/matrix.c +++ b/mesalib/src/mesa/main/matrix.c @@ -187,7 +187,7 @@ _mesa_MatrixMode( GLenum mode )     case GL_MATRIX5_NV:     case GL_MATRIX6_NV:     case GL_MATRIX7_NV: -      if (ctx->Extensions.NV_vertex_program) { +      if (ctx->API == API_OPENGL && ctx->Extensions.NV_vertex_program) {           ctx->CurrentStack = &ctx->ProgramMatrixStack[mode - GL_MATRIX0_NV];        }        else { @@ -203,8 +203,9 @@ _mesa_MatrixMode( GLenum mode )     case GL_MATRIX5_ARB:     case GL_MATRIX6_ARB:     case GL_MATRIX7_ARB: -      if (ctx->Extensions.ARB_vertex_program || -          ctx->Extensions.ARB_fragment_program) { +      if (ctx->API == API_OPENGL +          && (ctx->Extensions.ARB_vertex_program || +              ctx->Extensions.ARB_fragment_program)) {           const GLuint m = mode - GL_MATRIX0_ARB;           if (m > ctx->Const.MaxProgramMatrices) {              _mesa_error(ctx, GL_INVALID_ENUM, diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h index 58111a737..ba43e574d 100644 --- a/mesalib/src/mesa/main/mtypes.h +++ b/mesalib/src/mesa/main/mtypes.h @@ -2999,7 +2999,6 @@ struct gl_extensions     GLboolean ARB_transform_feedback_instanced;     GLboolean ARB_transpose_matrix;     GLboolean ARB_uniform_buffer_object; -   GLboolean ARB_vertex_array_object;     GLboolean ARB_vertex_program;     GLboolean ARB_vertex_shader;     GLboolean ARB_vertex_type_2_10_10_10_rev; @@ -3052,7 +3051,6 @@ struct gl_extensions     /* vendor extensions */     GLboolean AMD_seamless_cubemap_per_texture;     GLboolean APPLE_packed_pixels; -   GLboolean APPLE_vertex_array_object;     GLboolean APPLE_object_purgeable;     GLboolean ATI_envmap_bumpmap;     GLboolean ATI_texture_compression_3dc; diff --git a/mesalib/src/mesa/main/pixelstore.c b/mesalib/src/mesa/main/pixelstore.c index 81474491d..d1e96aa8f 100644 --- a/mesalib/src/mesa/main/pixelstore.c +++ b/mesalib/src/mesa/main/pixelstore.c @@ -45,18 +45,24 @@ _mesa_PixelStorei( GLenum pname, GLint param )     switch (pname) {        case GL_PACK_SWAP_BYTES: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;  	 if (param == (GLint)ctx->Pack.SwapBytes)  	    return;  	 FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);           ctx->Pack.SwapBytes = param ? GL_TRUE : GL_FALSE;  	 break;        case GL_PACK_LSB_FIRST: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;  	 if (param == (GLint)ctx->Pack.LsbFirst)  	    return;  	 FLUSH_VERTICES(ctx, _NEW_PACKUNPACK);           ctx->Pack.LsbFirst = param ? GL_TRUE : GL_FALSE;  	 break;        case GL_PACK_ROW_LENGTH: +         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) +            goto invalid_enum_error;  	 if (param<0) {  	    _mesa_error( ctx, GL_INVALID_VALUE, "glPixelStore(param)" );  	    return; @@ -67,6 +73,8 @@ _mesa_PixelStorei( GLenum pname, GLint param )  	 ctx->Pack.RowLength = param;  	 break;        case GL_PACK_IMAGE_HEIGHT: +         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) +            goto invalid_enum_error;           if (param<0) {              _mesa_error( ctx, GL_INVALID_VALUE, "glPixelStore(param)" );  	    return; @@ -77,6 +85,8 @@ _mesa_PixelStorei( GLenum pname, GLint param )  	 ctx->Pack.ImageHeight = param;           break;        case GL_PACK_SKIP_PIXELS: +         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) +            goto invalid_enum_error;  	 if (param<0) {  	    _mesa_error( ctx, GL_INVALID_VALUE, "glPixelStore(param)" );  	    return; @@ -87,6 +97,8 @@ _mesa_PixelStorei( GLenum pname, GLint param )  	 ctx->Pack.SkipPixels = param;  	 break;        case GL_PACK_SKIP_ROWS: +         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) +            goto invalid_enum_error;  	 if (param<0) {  	    _mesa_error( ctx, GL_INVALID_VALUE, "glPixelStore(param)" );  	    return; @@ -97,6 +109,8 @@ _mesa_PixelStorei( GLenum pname, GLint param )  	 ctx->Pack.SkipRows = param;  	 break;        case GL_PACK_SKIP_IMAGES: +         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) +            goto invalid_enum_error;  	 if (param<0) {  	    _mesa_error( ctx, GL_INVALID_VALUE, "glPixelStore(param)" );  	    return; @@ -117,6 +131,8 @@ _mesa_PixelStorei( GLenum pname, GLint param )  	 ctx->Pack.Alignment = param;  	 break;        case GL_PACK_INVERT_MESA: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;           if (!ctx->Extensions.MESA_pack_invert) {              _mesa_error( ctx, GL_INVALID_ENUM, "glPixelstore(pname)" );              return; @@ -128,6 +144,8 @@ _mesa_PixelStorei( GLenum pname, GLint param )           break;        case GL_UNPACK_SWAP_BYTES: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;  	 if (param == (GLint)ctx->Unpack.SwapBytes)  	    return;  	 if ((GLint)ctx->Unpack.SwapBytes == param) @@ -136,6 +154,8 @@ _mesa_PixelStorei( GLenum pname, GLint param )  	 ctx->Unpack.SwapBytes = param ? GL_TRUE : GL_FALSE;           break;        case GL_UNPACK_LSB_FIRST: +         if (!_mesa_is_desktop_gl(ctx)) +            goto invalid_enum_error;  	 if (param == (GLint)ctx->Unpack.LsbFirst)  	    return;  	 if ((GLint)ctx->Unpack.LsbFirst == param) @@ -144,6 +164,8 @@ _mesa_PixelStorei( GLenum pname, GLint param )  	 ctx->Unpack.LsbFirst = param ? GL_TRUE : GL_FALSE;  	 break;        case GL_UNPACK_ROW_LENGTH: +         if (ctx->API == API_OPENGLES) +            goto invalid_enum_error;  	 if (param<0) {  	    _mesa_error( ctx, GL_INVALID_VALUE, "glPixelStore(param)" );  	    return; @@ -154,6 +176,8 @@ _mesa_PixelStorei( GLenum pname, GLint param )  	 ctx->Unpack.RowLength = param;  	 break;        case GL_UNPACK_IMAGE_HEIGHT: +         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) +            goto invalid_enum_error;           if (param<0) {              _mesa_error( ctx, GL_INVALID_VALUE, "glPixelStore(param)" );  	    return; @@ -165,6 +189,8 @@ _mesa_PixelStorei( GLenum pname, GLint param )  	 ctx->Unpack.ImageHeight = param;           break;        case GL_UNPACK_SKIP_PIXELS: +         if (ctx->API == API_OPENGLES) +            goto invalid_enum_error;  	 if (param<0) {  	    _mesa_error( ctx, GL_INVALID_VALUE, "glPixelStore(param)" );  	    return; @@ -175,6 +201,8 @@ _mesa_PixelStorei( GLenum pname, GLint param )  	 ctx->Unpack.SkipPixels = param;  	 break;        case GL_UNPACK_SKIP_ROWS: +         if (ctx->API == API_OPENGLES) +            goto invalid_enum_error;  	 if (param<0) {  	    _mesa_error( ctx, GL_INVALID_VALUE, "glPixelStore(param)" );  	    return; @@ -185,6 +213,8 @@ _mesa_PixelStorei( GLenum pname, GLint param )  	 ctx->Unpack.SkipRows = param;  	 break;        case GL_UNPACK_SKIP_IMAGES: +         if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) +            goto invalid_enum_error;  	 if (param < 0) {  	    _mesa_error( ctx, GL_INVALID_VALUE, "glPixelStore(param)" );  	    return; @@ -205,9 +235,14 @@ _mesa_PixelStorei( GLenum pname, GLint param )  	 ctx->Unpack.Alignment = param;  	 break;        default: -	 _mesa_error( ctx, GL_INVALID_ENUM, "glPixelStore" ); -	 return; +         goto invalid_enum_error;     } + +   return; + +invalid_enum_error: +   _mesa_error( ctx, GL_INVALID_ENUM, "glPixelStore" ); +   return;  } diff --git a/mesalib/src/mesa/main/points.c b/mesalib/src/mesa/main/points.c index 87bfae27e..538f3cf44 100644 --- a/mesalib/src/mesa/main/points.c +++ b/mesalib/src/mesa/main/points.c @@ -104,88 +104,74 @@ _mesa_PointParameterfv( GLenum pname, const GLfloat *params)     GET_CURRENT_CONTEXT(ctx);     ASSERT_OUTSIDE_BEGIN_END(ctx); +   /* Drivers that support point sprites must also support point parameters. +    * If point parameters aren't supported, then this function shouldn't even +    * exist. +    */ +   ASSERT(!(ctx->Extensions.ARB_point_sprite +            || ctx->Extensions.NV_point_sprite) +          || ctx->Extensions.EXT_point_parameters); + +   if (!ctx->Extensions.EXT_point_parameters) { +      _mesa_error(ctx, GL_INVALID_OPERATION, +                  "unsupported function called (unsupported extension)"); +      return; +   } +     switch (pname) {        case GL_DISTANCE_ATTENUATION_EXT: -         if (ctx->Extensions.EXT_point_parameters) { -            if (TEST_EQ_3V(ctx->Point.Params, params)) -	       return; -	    FLUSH_VERTICES(ctx, _NEW_POINT); -            COPY_3V(ctx->Point.Params, params); -            ctx->Point._Attenuated = (ctx->Point.Params[0] != 1.0 || -                                      ctx->Point.Params[1] != 0.0 || -                                      ctx->Point.Params[2] != 0.0); - -            if (ctx->Point._Attenuated) -               ctx->_TriangleCaps |= DD_POINT_ATTEN; -            else -               ctx->_TriangleCaps &= ~DD_POINT_ATTEN; -         } -         else { -            _mesa_error(ctx, GL_INVALID_ENUM, -                        "glPointParameterf[v]{EXT,ARB}(pname)"); +         if (TEST_EQ_3V(ctx->Point.Params, params))              return; -         } +         FLUSH_VERTICES(ctx, _NEW_POINT); +         COPY_3V(ctx->Point.Params, params); +         ctx->Point._Attenuated = (ctx->Point.Params[0] != 1.0 || +                                   ctx->Point.Params[1] != 0.0 || +                                   ctx->Point.Params[2] != 0.0); + +         if (ctx->Point._Attenuated) +            ctx->_TriangleCaps |= DD_POINT_ATTEN; +         else +            ctx->_TriangleCaps &= ~DD_POINT_ATTEN;           break;        case GL_POINT_SIZE_MIN_EXT: -         if (ctx->Extensions.EXT_point_parameters) { -            if (params[0] < 0.0F) { -               _mesa_error( ctx, GL_INVALID_VALUE, -                            "glPointParameterf[v]{EXT,ARB}(param)" ); -               return; -            } -            if (ctx->Point.MinSize == params[0]) -               return; -            FLUSH_VERTICES(ctx, _NEW_POINT); -            ctx->Point.MinSize = params[0]; -         } -         else { -            _mesa_error(ctx, GL_INVALID_ENUM, -                        "glPointParameterf[v]{EXT,ARB}(pname)"); +         if (params[0] < 0.0F) { +            _mesa_error( ctx, GL_INVALID_VALUE, +                         "glPointParameterf[v]{EXT,ARB}(param)" );              return;           } +         if (ctx->Point.MinSize == params[0]) +            return; +         FLUSH_VERTICES(ctx, _NEW_POINT); +         ctx->Point.MinSize = params[0];           break;        case GL_POINT_SIZE_MAX_EXT: -         if (ctx->Extensions.EXT_point_parameters) { -            if (params[0] < 0.0F) { -               _mesa_error( ctx, GL_INVALID_VALUE, -                            "glPointParameterf[v]{EXT,ARB}(param)" ); -               return; -            } -            if (ctx->Point.MaxSize == params[0]) -               return; -            FLUSH_VERTICES(ctx, _NEW_POINT); -            ctx->Point.MaxSize = params[0]; -         } -         else { -            _mesa_error(ctx, GL_INVALID_ENUM, -                        "glPointParameterf[v]{EXT,ARB}(pname)"); +         if (params[0] < 0.0F) { +            _mesa_error( ctx, GL_INVALID_VALUE, +                         "glPointParameterf[v]{EXT,ARB}(param)" );              return;           } +         if (ctx->Point.MaxSize == params[0]) +            return; +         FLUSH_VERTICES(ctx, _NEW_POINT); +         ctx->Point.MaxSize = params[0];           break;        case GL_POINT_FADE_THRESHOLD_SIZE_EXT: -         if (ctx->Extensions.EXT_point_parameters) { -            if (params[0] < 0.0F) { -               _mesa_error( ctx, GL_INVALID_VALUE, -                            "glPointParameterf[v]{EXT,ARB}(param)" ); -               return; -            } -            if (ctx->Point.Threshold == params[0]) -               return; -            FLUSH_VERTICES(ctx, _NEW_POINT); -            ctx->Point.Threshold = params[0]; -         } -         else { -            _mesa_error(ctx, GL_INVALID_ENUM, -                        "glPointParameterf[v]{EXT,ARB}(pname)"); +         if (params[0] < 0.0F) { +            _mesa_error( ctx, GL_INVALID_VALUE, +                         "glPointParameterf[v]{EXT,ARB}(param)" );              return;           } +         if (ctx->Point.Threshold == params[0]) +            return; +         FLUSH_VERTICES(ctx, _NEW_POINT); +         ctx->Point.Threshold = params[0];           break;        case GL_POINT_SPRITE_R_MODE_NV:           /* This is one area where ARB_point_sprite and NV_point_sprite  	  * differ.  In ARB_point_sprite the POINT_SPRITE_R_MODE is  	  * always ZERO.  NV_point_sprite adds the S and R modes.  	  */ -         if (ctx->Extensions.NV_point_sprite) { +         if (_mesa_is_desktop_gl(ctx) && ctx->Extensions.NV_point_sprite) {              GLenum value = (GLenum) params[0];              if (value != GL_ZERO && value != GL_S && value != GL_R) {                 _mesa_error(ctx, GL_INVALID_VALUE, @@ -204,12 +190,11 @@ _mesa_PointParameterfv( GLenum pname, const GLfloat *params)           }           break;        case GL_POINT_SPRITE_COORD_ORIGIN: -	 /* This is not completely correct.  GL_POINT_SPRITE_COORD_ORIGIN was -	  * added to point sprites when the extension was merged into OpenGL -	  * 2.0.  It is expected that an implementation supporting OpenGL 1.4 -	  * and GL_ARB_point_sprite will generate an error here. +	 /* GL_POINT_SPRITE_COORD_ORIGIN was added to point sprites when the +	  * extension was merged into OpenGL 2.0.  	  */ -         if (ctx->Extensions.ARB_point_sprite) { +         if ((ctx->API == API_OPENGL && ctx->Version >= 20) +             || ctx->API == API_OPENGL_CORE) {              GLenum value = (GLenum) params[0];              if (value != GL_LOWER_LEFT && value != GL_UPPER_LEFT) {                 _mesa_error(ctx, GL_INVALID_VALUE, @@ -263,7 +248,19 @@ _mesa_init_point(struct gl_context *ctx)     ctx->Point.MaxSize        = MAX2(ctx->Const.MaxPointSize, ctx->Const.MaxPointSizeAA);     ctx->Point.Threshold = 1.0; -   ctx->Point.PointSprite = GL_FALSE; /* GL_ARB/NV_point_sprite */ + +   /* Page 403 (page 423 of the PDF) of the OpenGL 3.0 spec says: +    * +    *     "Non-sprite points (section 3.4) - Enable/Disable targets +    *     POINT_SMOOTH and POINT_SPRITE, and all associated state. Point +    *     rasterization is always performed as though POINT_SPRITE were +    *     enabled." +    * +    * In a core context, the state will default to true, and the setters and +    * getters are disabled. +    */ +   ctx->Point.PointSprite = (ctx->API == API_OPENGL_CORE); +     ctx->Point.SpriteRMode = GL_ZERO; /* GL_NV_point_sprite (only!) */     ctx->Point.SpriteOrigin = GL_UPPER_LEFT; /* GL_ARB_point_sprite */     for (i = 0; i < Elements(ctx->Point.CoordReplace); i++) { diff --git a/mesalib/src/mesa/main/polygon.c b/mesalib/src/mesa/main/polygon.c index addca0228..d7d52daa8 100644 --- a/mesalib/src/mesa/main/polygon.c +++ b/mesalib/src/mesa/main/polygon.c @@ -143,6 +143,10 @@ _mesa_PolygonMode( GLenum face, GLenum mode )     switch (face) {     case GL_FRONT: +      if (ctx->API == API_OPENGL_CORE) { +         _mesa_error( ctx, GL_INVALID_ENUM, "glPolygonMode(face)" ); +         return; +      }        if (ctx->Polygon.FrontMode == mode)  	 return;        FLUSH_VERTICES(ctx, _NEW_POLYGON); @@ -157,6 +161,10 @@ _mesa_PolygonMode( GLenum face, GLenum mode )        ctx->Polygon.BackMode = mode;        break;     case GL_BACK: +      if (ctx->API == API_OPENGL_CORE) { +         _mesa_error( ctx, GL_INVALID_ENUM, "glPolygonMode(face)" ); +         return; +      }        if (ctx->Polygon.BackMode == mode)  	 return;        FLUSH_VERTICES(ctx, _NEW_POLYGON); diff --git a/mesalib/src/mesa/main/readpix.c b/mesalib/src/mesa/main/readpix.c index f0bc157d8..7dc758152 100644 --- a/mesalib/src/mesa/main/readpix.c +++ b/mesalib/src/mesa/main/readpix.c @@ -38,7 +38,13 @@  #include "state.h"  #include "glformats.h"  #include "fbobject.h" +#include "teximage.h" +/* Inexplicably, GL_HALF_FLOAT_OES has a different value than GL_HALF_FLOAT. + */ +#ifndef GL_HALF_FLOAT_OES +#define GL_HALF_FLOAT_OES 0x8D61 +#endif  /**   * Tries to implement glReadPixels() of GL_DEPTH_COMPONENT using memcpy of the @@ -699,6 +705,33 @@ _mesa_ReadnPixelsARB( GLint x, GLint y, GLsizei width, GLsizei height,        return;     } +   /* OpenGL ES 1.x and OpenGL ES 2.0 impose additional restrictions on the +    * combinations of format and type that can be used. +    * +    * Technically, only two combinations are actually allowed: +    * GL_RGBA/GL_UNSIGNED_BYTE, and some implementation-specific internal +    * preferred combination.  This code doesn't know what that preferred +    * combination is, and Mesa can handle anything valid.  Just work instead. +    */ +   if (_mesa_is_gles(ctx) && ctx->Version < 30) { +      err = _mesa_es_error_check_format_and_type(format, type, 2); +      if (err == GL_NO_ERROR) { +         if (type == GL_FLOAT || type == GL_HALF_FLOAT_OES) { +            err = GL_INVALID_OPERATION; +         } else if (format == GL_DEPTH_COMPONENT +                    || format == GL_DEPTH_STENCIL) { +            err = GL_INVALID_ENUM; +         } +      } + +      if (err != GL_NO_ERROR) { +         _mesa_error(ctx, err, "glReadPixels(invalid format %s and/or type %s)", +                     _mesa_lookup_enum_by_nr(format), +                     _mesa_lookup_enum_by_nr(type)); +         return; +      } +   } +     if (ctx->NewState)        _mesa_update_state(ctx); diff --git a/mesalib/src/mesa/main/texenv.c b/mesalib/src/mesa/main/texenv.c index e5f1bd39e..f1064c5e3 100644 --- a/mesalib/src/mesa/main/texenv.c +++ b/mesalib/src/mesa/main/texenv.c @@ -122,7 +122,8 @@ set_combiner_mode(struct gl_context *ctx,        break;     case GL_DOT3_RGB_EXT:     case GL_DOT3_RGBA_EXT: -      legal = (ctx->Extensions.EXT_texture_env_dot3 && +      legal = (ctx->API == API_OPENGL && +               ctx->Extensions.EXT_texture_env_dot3 &&                 pname == GL_COMBINE_RGB);        break;     case GL_DOT3_RGB: @@ -133,10 +134,12 @@ set_combiner_mode(struct gl_context *ctx,     case GL_MODULATE_ADD_ATI:     case GL_MODULATE_SIGNED_ADD_ATI:     case GL_MODULATE_SUBTRACT_ATI: -      legal = ctx->Extensions.ATI_texture_env_combine3; +      legal = (ctx->API == API_OPENGL && +               ctx->Extensions.ATI_texture_env_combine3);        break;     case GL_BUMP_ENVMAP_ATI: -      legal = (ctx->Extensions.ATI_envmap_bumpmap && +      legal = (ctx->API == API_OPENGL && +               ctx->Extensions.ATI_envmap_bumpmap &&                 pname == GL_COMBINE_RGB);        break;     default: @@ -203,7 +206,8 @@ set_combiner_source(struct gl_context *ctx,        return;     } -   if ((term == 3) && !ctx->Extensions.NV_texture_env_combine4) { +   if ((term == 3) && (ctx->API != API_OPENGL +                       || !ctx->Extensions.NV_texture_env_combine4)) {        TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);        return;     } @@ -232,11 +236,13 @@ set_combiner_source(struct gl_context *ctx,                 param - GL_TEXTURE0 < ctx->Const.MaxTextureUnits);        break;     case GL_ZERO: -      legal = (ctx->Extensions.ATI_texture_env_combine3 || -               ctx->Extensions.NV_texture_env_combine4); +      legal = (ctx->API == API_OPENGL && +               (ctx->Extensions.ATI_texture_env_combine3 || +                ctx->Extensions.NV_texture_env_combine4));        break;     case GL_ONE: -      legal = ctx->Extensions.ATI_texture_env_combine3; +      legal = (ctx->API == API_OPENGL && +               ctx->Extensions.ATI_texture_env_combine3);        break;     default:        legal = GL_FALSE; @@ -287,7 +293,8 @@ set_combiner_operand(struct gl_context *ctx,        return;     } -   if ((term == 3) && !ctx->Extensions.NV_texture_env_combine4) { +   if ((term == 3) && (ctx->API != API_OPENGL +                       || !ctx->Extensions.NV_texture_env_combine4)) {        TE_ERROR(GL_INVALID_ENUM, "glTexEnv(pname=%s)", pname);        return;     } @@ -301,8 +308,8 @@ set_combiner_operand(struct gl_context *ctx,     case GL_SRC_COLOR:     case GL_ONE_MINUS_SRC_COLOR:        /* The color input can only be used with GL_OPERAND[01]_RGB in the EXT -       * version.  In the ARB and NV versions they can be used for any RGB -       * operand. +       * version.  In the ARB and NV versions and OpenGL ES 1.x they can be +       * used for any RGB operand.         */        legal = !alpha  	 && ((term < 2) || ctx->Extensions.ARB_texture_env_combine @@ -311,7 +318,7 @@ set_combiner_operand(struct gl_context *ctx,     case GL_ONE_MINUS_SRC_ALPHA:        /* GL_ONE_MINUS_SRC_ALPHA can only be used with         * GL_OPERAND[01]_(RGB|ALPHA) in the EXT version.  In the ARB and NV -       * versions it can be used for any operand. +       * versions and OpenGL ES 1.x it can be used for any operand.         */        legal = (term < 2) || ctx->Extensions.ARB_texture_env_combine  	 || ctx->Extensions.NV_texture_env_combine4; @@ -435,7 +442,7 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )           set_combiner_scale(ctx, texUnit, pname, param[0]);  	 break;        case GL_BUMP_TARGET_ATI: -         if (!ctx->Extensions.ATI_envmap_bumpmap) { +         if (ctx->API != API_OPENGL || !ctx->Extensions.ATI_envmap_bumpmap) {  	    _mesa_error( ctx, GL_INVALID_ENUM, "glTexEnv(pname=0x%x)", pname );  	    return;  	 } @@ -581,7 +588,7 @@ get_texenvi(struct gl_context *ctx, const struct gl_texture_unit *texUnit,        return texUnit->Combine.SourceRGB[rgb_idx];     }     case GL_SOURCE3_RGB_NV: -      if (ctx->Extensions.NV_texture_env_combine4) { +      if (ctx->API == API_OPENGL && ctx->Extensions.NV_texture_env_combine4) {           return texUnit->Combine.SourceRGB[3];        }        else { @@ -595,7 +602,7 @@ get_texenvi(struct gl_context *ctx, const struct gl_texture_unit *texUnit,        return texUnit->Combine.SourceA[alpha_idx];     }     case GL_SOURCE3_ALPHA_NV: -      if (ctx->Extensions.NV_texture_env_combine4) { +      if (ctx->API == API_OPENGL && ctx->Extensions.NV_texture_env_combine4) {           return texUnit->Combine.SourceA[3];        }        else { @@ -609,7 +616,7 @@ get_texenvi(struct gl_context *ctx, const struct gl_texture_unit *texUnit,        return texUnit->Combine.OperandRGB[op_rgb];     }     case GL_OPERAND3_RGB_NV: -      if (ctx->Extensions.NV_texture_env_combine4) { +      if (ctx->API == API_OPENGL && ctx->Extensions.NV_texture_env_combine4) {           return texUnit->Combine.OperandRGB[3];        }        else { @@ -623,7 +630,7 @@ get_texenvi(struct gl_context *ctx, const struct gl_texture_unit *texUnit,        return texUnit->Combine.OperandA[op_alpha];     }     case GL_OPERAND3_ALPHA_NV: -      if (ctx->Extensions.NV_texture_env_combine4) { +      if (ctx->API == API_OPENGL && ctx->Extensions.NV_texture_env_combine4) {           return texUnit->Combine.OperandA[3];        }        else { @@ -636,7 +643,7 @@ get_texenvi(struct gl_context *ctx, const struct gl_texture_unit *texUnit,        return 1 << texUnit->Combine.ScaleShiftA;     case GL_BUMP_TARGET_ATI:        /* spec doesn't say so, but I think this should be queryable */ -      if (ctx->Extensions.ATI_envmap_bumpmap) { +      if (ctx->API == API_OPENGL && ctx->Extensions.ATI_envmap_bumpmap) {           return texUnit->BumpTarget;        }        else { diff --git a/mesalib/src/mesa/main/texgen.c b/mesalib/src/mesa/main/texgen.c index 0ace0b936..3788669d4 100644 --- a/mesalib/src/mesa/main/texgen.c +++ b/mesalib/src/mesa/main/texgen.c @@ -48,8 +48,14 @@   * Return texgen state for given coordinate   */  static struct gl_texgen * -get_texgen(struct gl_texture_unit *texUnit, GLenum coord) +get_texgen(struct gl_context *ctx, struct gl_texture_unit *texUnit, +           GLenum coord)  { +   if (ctx->API == API_OPENGLES) { +      return (coord == GL_TEXTURE_GEN_STR_OES) +         ? &texUnit->GenS : NULL; +   } +     switch (coord) {     case GL_S:        return &texUnit->GenS; @@ -87,7 +93,7 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )     texUnit = _mesa_get_current_tex_unit(ctx); -   texgen = get_texgen(texUnit, coord); +   texgen = get_texgen(ctx, texUnit, coord);     if (!texgen) {        _mesa_error(ctx, GL_INVALID_ENUM, "glTexGen(coord)");        return; @@ -126,6 +132,12 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )              _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" );              return;           } +         if (ctx->API != API_OPENGL +             && (bit & (TEXGEN_REFLECTION_MAP_NV | TEXGEN_NORMAL_MAP_NV)) == 0) { +            _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" ); +            return; +         } +           FLUSH_VERTICES(ctx, _NEW_TEXTURE);           texgen->Mode = mode;           texgen->_ModeBit = bit; @@ -134,6 +146,10 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )     case GL_OBJECT_PLANE:        { +         if (ctx->API != API_OPENGL) { +            _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" ); +            return; +         }           if (TEST_EQ_4V(texgen->ObjectPlane, params))              return;           FLUSH_VERTICES(ctx, _NEW_TEXTURE); @@ -144,6 +160,12 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )     case GL_EYE_PLANE:        {           GLfloat tmp[4]; + +         if (ctx->API != API_OPENGL) { +            _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" ); +            return; +         } +           /* Transform plane equation by the inverse modelview matrix */           if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) {              _math_matrix_analyse(ctx->ModelviewMatrixStack.Top); @@ -198,7 +220,6 @@ _mesa_TexGend(GLenum coord, GLenum pname, GLdouble param )  void GLAPIENTRY  _es_GetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)  { -   ASSERT(coord == GL_TEXTURE_GEN_STR_OES);     _mesa_GetTexGenfv(GL_S, pname, params);  } @@ -206,7 +227,11 @@ _es_GetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)  void GLAPIENTRY  _es_TexGenf(GLenum coord, GLenum pname, GLfloat param)  { -   ASSERT(coord == GL_TEXTURE_GEN_STR_OES); +   if (coord != GL_TEXTURE_GEN_STR_OES) { +      GET_CURRENT_CONTEXT(ctx); +      _mesa_error( ctx, GL_INVALID_ENUM, "glTexGen[fx](pname)" ); +      return; +   }     /* set S, T, and R at the same time */     _mesa_TexGenf(GL_S, pname, param);     _mesa_TexGenf(GL_T, pname, param); @@ -217,7 +242,11 @@ _es_TexGenf(GLenum coord, GLenum pname, GLfloat param)  void GLAPIENTRY  _es_TexGenfv(GLenum coord, GLenum pname, const GLfloat *params)  { -   ASSERT(coord == GL_TEXTURE_GEN_STR_OES); +   if (coord != GL_TEXTURE_GEN_STR_OES) { +      GET_CURRENT_CONTEXT(ctx); +      _mesa_error( ctx, GL_INVALID_ENUM, "glTexGen[fx]v(pname)" ); +      return; +   }     /* set S, T, and R at the same time */     _mesa_TexGenfv(GL_S, pname, params);     _mesa_TexGenfv(GL_T, pname, params); @@ -279,7 +308,7 @@ _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params )     texUnit = _mesa_get_current_tex_unit(ctx); -   texgen = get_texgen(texUnit, coord); +   texgen = get_texgen(ctx, texUnit, coord);     if (!texgen) {        _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexGendv(coord)");        return; @@ -317,7 +346,7 @@ _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )     texUnit = _mesa_get_current_tex_unit(ctx); -   texgen = get_texgen(texUnit, coord); +   texgen = get_texgen(ctx, texUnit, coord);     if (!texgen) {        _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexGenfv(coord)");        return; @@ -328,9 +357,17 @@ _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )        params[0] = ENUM_TO_FLOAT(texgen->Mode);        break;     case GL_OBJECT_PLANE: +      if (ctx->API != API_OPENGL) { +         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(param)" ); +         return; +      }        COPY_4V(params, texgen->ObjectPlane);        break;     case GL_EYE_PLANE: +      if (ctx->API != API_OPENGL) { +         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(param)" ); +         return; +      }        COPY_4V(params, texgen->EyePlane);        break;     default: @@ -340,7 +377,7 @@ _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ) -static void GLAPIENTRY +void GLAPIENTRY  _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )  {     struct gl_texture_unit *texUnit; @@ -355,7 +392,7 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )     texUnit = _mesa_get_current_tex_unit(ctx); -   texgen = get_texgen(texUnit, coord); +   texgen = get_texgen(ctx, texUnit, coord);     if (!texgen) {        _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexGeniv(coord)");        return; @@ -366,12 +403,20 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )        params[0] = texgen->Mode;        break;     case GL_OBJECT_PLANE: +      if (ctx->API != API_OPENGL) { +         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(param)" ); +         return; +      }        params[0] = (GLint) texgen->ObjectPlane[0];        params[1] = (GLint) texgen->ObjectPlane[1];        params[2] = (GLint) texgen->ObjectPlane[2];        params[3] = (GLint) texgen->ObjectPlane[3];        break;     case GL_EYE_PLANE: +      if (ctx->API != API_OPENGL) { +         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(param)" ); +         return; +      }        params[0] = (GLint) texgen->EyePlane[0];        params[1] = (GLint) texgen->EyePlane[1];        params[2] = (GLint) texgen->EyePlane[2]; diff --git a/mesalib/src/mesa/main/texgen.h b/mesalib/src/mesa/main/texgen.h index 60a9522af..1d13422b2 100644 --- a/mesalib/src/mesa/main/texgen.h +++ b/mesalib/src/mesa/main/texgen.h @@ -48,6 +48,9 @@ _mesa_TexGeni( GLenum coord, GLenum pname, GLint param );  extern void GLAPIENTRY  _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); +extern void GLAPIENTRY +_mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params ); +  extern void  _mesa_init_texgen_dispatch(struct _glapi_table *disp); diff --git a/mesalib/src/mesa/main/teximage.c b/mesalib/src/mesa/main/teximage.c index 59b38dee4..11b1b3043 100644 --- a/mesalib/src/mesa/main/teximage.c +++ b/mesalib/src/mesa/main/teximage.c @@ -87,14 +87,14 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )        case GL_ALPHA8:        case GL_ALPHA12:        case GL_ALPHA16: -         return GL_ALPHA; +         return (ctx->API != API_OPENGL_CORE) ? GL_ALPHA : -1;        case 1:        case GL_LUMINANCE:        case GL_LUMINANCE4:        case GL_LUMINANCE8:        case GL_LUMINANCE12:        case GL_LUMINANCE16: -         return GL_LUMINANCE; +         return (ctx->API != API_OPENGL_CORE) ? GL_LUMINANCE : -1;        case 2:        case GL_LUMINANCE_ALPHA:        case GL_LUMINANCE4_ALPHA4: @@ -103,14 +103,15 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )        case GL_LUMINANCE12_ALPHA4:        case GL_LUMINANCE12_ALPHA12:        case GL_LUMINANCE16_ALPHA16: -         return GL_LUMINANCE_ALPHA; +         return (ctx->API != API_OPENGL_CORE) ? GL_LUMINANCE_ALPHA : -1;        case GL_INTENSITY:        case GL_INTENSITY4:        case GL_INTENSITY8:        case GL_INTENSITY12:        case GL_INTENSITY16: -         return GL_INTENSITY; +         return (ctx->API != API_OPENGL_CORE) ? GL_INTENSITY : -1;        case 3: +         return (ctx->API != API_OPENGL_CORE) ? GL_RGB : -1;        case GL_RGB:        case GL_R3_G3_B2:        case GL_RGB4: @@ -121,6 +122,7 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )        case GL_RGB16:           return GL_RGB;        case 4: +         return (ctx->API != API_OPENGL_CORE) ? GL_RGBA : -1;        case GL_RGBA:        case GL_RGBA2:        case GL_RGBA4: @@ -754,7 +756,8 @@ _mesa_select_tex_object(struct gl_context *ctx,        case GL_PROXY_TEXTURE_2D_ARRAY_EXT:           return arrayTex ? ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX] : NULL;        case GL_TEXTURE_BUFFER: -         return ctx->Extensions.ARB_texture_buffer_object +         return _mesa_is_desktop_gl(ctx)  +            && ctx->Extensions.ARB_texture_buffer_object              ? texUnit->CurrentTex[TEXTURE_BUFFER_INDEX] : NULL;        case GL_TEXTURE_EXTERNAL_OES:           return ctx->Extensions.OES_EGL_image_external @@ -947,9 +950,9 @@ _mesa_max_texture_levels(struct gl_context *ctx, GLenum target)                ctx->Extensions.EXT_texture_array)           ? ctx->Const.MaxTextureLevels : 0;     case GL_TEXTURE_BUFFER: -      return _mesa_is_desktop_gl(ctx) && -         (ctx->Extensions.ARB_texture_buffer_object || -          (ctx->Version >= 31)) ? 1 : 0; +      return _mesa_is_desktop_gl(ctx) +         && ctx->Extensions.ARB_texture_buffer_object +         ? 1 : 0;     case GL_TEXTURE_EXTERNAL_OES:        /* fall-through */     default: @@ -2796,6 +2799,37 @@ _mesa_choose_texture_format(struct gl_context *ctx,        }     } +   /* If the application requested compression to an S3TC format but we don't +    * have the DTXn library, force a generic compressed format instead. +    */ +   if (internalFormat != format) { +      const GLenum before = internalFormat; + +      switch (internalFormat) { +      case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: +         if (!ctx->Mesa_DXTn) +            internalFormat = GL_COMPRESSED_RGB; +         break; +      case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: +      case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: +      case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: +         if (!ctx->Mesa_DXTn) +            internalFormat = GL_COMPRESSED_RGBA; +         break; +      default: +         break; +      } + +      if (before != internalFormat) { +         _mesa_warning(ctx, +                       "DXT compression requested (%s), " +                       "but libtxc_dxtn library not installed.  Using %s " +                       "instead.", +                       _mesa_lookup_enum_by_nr(before), +                       _mesa_lookup_enum_by_nr(internalFormat)); +      } +   } +     /* choose format from scratch */     f = ctx->Driver.ChooseTextureFormat(ctx, texObj->Target, internalFormat,                                         format, type); @@ -3975,7 +4009,8 @@ _mesa_TexBuffer(GLenum target, GLenum internalFormat, GLuint buffer)     GET_CURRENT_CONTEXT(ctx);     ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); -   if (!ctx->Extensions.ARB_texture_buffer_object) { +   if (!(ctx->Extensions.ARB_texture_buffer_object +         && _mesa_is_desktop_gl(ctx))) {        _mesa_error(ctx, GL_INVALID_OPERATION, "glTexBuffer");        return;     } diff --git a/mesalib/src/mesa/main/texobj.c b/mesalib/src/mesa/main/texobj.c index 638e418da..513f3bb05 100644 --- a/mesalib/src/mesa/main/texobj.c +++ b/mesalib/src/mesa/main/texobj.c @@ -1216,6 +1216,11 @@ _mesa_BindTexture( GLenum target, GLuint texName )           }        }        else { +         if (ctx->API == API_OPENGL_CORE) { +            _mesa_error(ctx, GL_INVALID_OPERATION, "glBindTexture"); +            return; +         } +           /* if this is a new texture id, allocate a texture object now */           newTexObj = ctx->Driver.NewTextureObject(ctx, texName, target);           if (!newTexObj) { diff --git a/mesalib/src/mesa/main/varray.c b/mesalib/src/mesa/main/varray.c index 8c3ddc524..91452b75f 100644 --- a/mesalib/src/mesa/main/varray.c +++ b/mesalib/src/mesa/main/varray.c @@ -133,6 +133,23 @@ update_array(struct gl_context *ctx,     GLsizei elementSize;     GLenum format = GL_RGBA; +   /* Page 407 (page 423 of the PDF) of the OpenGL 3.0 spec says: +    * +    *     "Client vertex arrays - all vertex array attribute pointers must +    *     refer to buffer objects (section 2.9.2). The default vertex array +    *     object (the name zero) is also deprecated. Calling +    *     VertexAttribPointer when no buffer object or no vertex array object +    *     is bound will generate an INVALID_OPERATION error..." +    * +    * The check for VBOs is handled below. +    */ +   if (ctx->API == API_OPENGL_CORE +       && (ctx->Array.ArrayObj == ctx->Array.DefaultArrayObj)) { +      _mesa_error(ctx, GL_INVALID_OPERATION, "%s(no array object bound)", +                  func); +      return; +   } +     if (_mesa_is_gles(ctx)) {        /* Once Mesa gets support for GL_OES_vertex_half_float this mask will         * change.  Adding support for this extension isn't quite as trivial as @@ -216,11 +233,20 @@ update_array(struct gl_context *ctx,        return;     } -   if (ctx->Array.ArrayObj->ARBsemantics && +   /* Page 29 (page 44 of the PDF) of the OpenGL 3.3 spec says: +    * +    *     "An INVALID_OPERATION error is generated under any of the following +    *     conditions: +    * +    *     ... +    * +    *     * any of the *Pointer commands specifying the location and +    *       organization of vertex array data are called while zero is bound +    *       to the ARRAY_BUFFER buffer object binding point (see section +    *       2.9.6), and the pointer argument is not NULL." +    */ +   if (ptr != NULL && ctx->Array.ArrayObj->ARBsemantics &&         !_mesa_is_bufferobj(ctx->Array.ArrayBufferObj)) { -      /* GL_ARB_vertex_array_object requires that all arrays reside in VBOs. -       * Generate GL_INVALID_OPERATION if that's not true. -       */        _mesa_error(ctx, GL_INVALID_OPERATION, "%s(non-VBO array)", func);        return;     } @@ -590,12 +616,15 @@ get_vertex_array_attrib(struct gl_context *ctx, GLuint index, GLenum pname,     case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB:        return array->BufferObj->Name;     case GL_VERTEX_ATTRIB_ARRAY_INTEGER: -      if (ctx->Version >= 30 || ctx->Extensions.EXT_gpu_shader4) { +      if ((_mesa_is_desktop_gl(ctx) +           && (ctx->Version >= 30 || ctx->Extensions.EXT_gpu_shader4)) +          || _mesa_is_gles3(ctx)) {           return array->Integer;        }        goto error;     case GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB: -      if (ctx->Extensions.ARB_instanced_arrays) { +      if ((_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_instanced_arrays) +          || _mesa_is_gles3(ctx)) {           return array->InstanceDivisor;        }        goto error; @@ -613,7 +642,13 @@ static const GLfloat *  get_current_attrib(struct gl_context *ctx, GLuint index, const char *function)  {     if (index == 0) { -      if (ctx->API != API_OPENGLES2) { +      /* In OpenGL 3.1 attribute 0 becomes non-magic, just like in OpenGL ES +       * 2.0.  Note that we cannot just check for API_OPENGL_CORE here because +       * that will erroneously allow this usage in a 3.0 forward-compatible +       * context too. +       */ +      if ((ctx->API != API_OPENGL_CORE || ctx->Version < 31) +          && ctx->API != API_OPENGLES2) {  	 _mesa_error(ctx, GL_INVALID_OPERATION, "%s(index==0)", function);  	 return NULL;        } diff --git a/mesalib/src/mesa/main/version.c b/mesalib/src/mesa/main/version.c index 59c81aedc..f22118a0d 100644 --- a/mesalib/src/mesa/main/version.c +++ b/mesalib/src/mesa/main/version.c @@ -137,7 +137,6 @@ compute_version(struct gl_context *ctx)                                ctx->Extensions.ARB_texture_float &&                                ctx->Extensions.ARB_texture_rg &&                                ctx->Extensions.ARB_texture_compression_rgtc && -                              ctx->Extensions.APPLE_vertex_array_object &&                                ctx->Extensions.EXT_draw_buffers2 &&                                ctx->Extensions.ARB_framebuffer_object &&                                ctx->Extensions.EXT_framebuffer_sRGB && diff --git a/mesalib/src/mesa/main/version.h b/mesalib/src/mesa/main/version.h index 94a9855d9..5b2e85afd 100644 --- a/mesalib/src/mesa/main/version.h +++ b/mesalib/src/mesa/main/version.h @@ -32,10 +32,10 @@ struct gl_context;  /* Mesa version */ -#define MESA_MAJOR 8 -#define MESA_MINOR 1 +#define MESA_MAJOR 9 +#define MESA_MINOR 0  #define MESA_PATCH 0 -#define MESA_VERSION_STRING "8.1-devel" +#define MESA_VERSION_STRING "9.0-devel"  /* To make version comparison easy */  #define MESA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) diff --git a/mesalib/src/mesa/main/vtxfmt.c b/mesalib/src/mesa/main/vtxfmt.c index ce490ed9e..2b6e25ecd 100644 --- a/mesalib/src/mesa/main/vtxfmt.c +++ b/mesalib/src/mesa/main/vtxfmt.c @@ -48,9 +48,8 @@ static void  install_vtxfmt(struct gl_context *ctx, struct _glapi_table *tab,                 const GLvertexformat *vfmt)  { -   _mesa_install_arrayelt_vtxfmt(tab, vfmt); -     if (ctx->API != API_OPENGL_CORE) { +      _mesa_install_arrayelt_vtxfmt(tab, vfmt);        SET_Color3f(tab, vfmt->Color3f);        SET_Color3fv(tab, vfmt->Color3fv);        SET_Color4f(tab, vfmt->Color4f); @@ -58,7 +57,9 @@ install_vtxfmt(struct gl_context *ctx, struct _glapi_table *tab,        SET_EdgeFlag(tab, vfmt->EdgeFlag);     } -   _mesa_install_eval_vtxfmt(tab, vfmt); +   if (ctx->API == API_OPENGL) { +      _mesa_install_eval_vtxfmt(tab, vfmt); +   }     if (ctx->API != API_OPENGL_CORE) {        SET_FogCoordfEXT(tab, vfmt->FogCoordfEXT); @@ -94,7 +95,9 @@ install_vtxfmt(struct gl_context *ctx, struct _glapi_table *tab,        SET_Vertex4fv(tab, vfmt->Vertex4fv);     } -   _mesa_install_dlist_vtxfmt(tab, vfmt);   /* glCallList / glCallLists */ +   if (ctx->API == API_OPENGL) { +      _mesa_install_dlist_vtxfmt(tab, vfmt);   /* glCallList / glCallLists */ +   }     if (ctx->API != API_OPENGL_CORE) {        SET_Begin(tab, vfmt->Begin); @@ -218,8 +221,7 @@ install_vtxfmt(struct gl_context *ctx, struct _glapi_table *tab,  void  _mesa_install_exec_vtxfmt(struct gl_context *ctx, const GLvertexformat *vfmt)  { -   if (_mesa_is_desktop_gl(ctx)) -      install_vtxfmt( ctx, ctx->Exec, vfmt ); +   install_vtxfmt( ctx, ctx->Exec, vfmt );  } diff --git a/mesalib/src/mesa/sources.mak b/mesalib/src/mesa/sources.mak index 7f7ea2885..dabddf2fe 100644 --- a/mesalib/src/mesa/sources.mak +++ b/mesalib/src/mesa/sources.mak @@ -6,7 +6,6 @@  # this is part of MAIN_FILES  MAIN_ES_FILES = \  	$(BUILDDIR)main/api_exec_es1.c \ -	$(BUILDDIR)main/api_exec_es2.c \  	$(SRCDIR)main/es1_conversion.c  MAIN_FILES = \ diff --git a/mesalib/src/mesa/state_tracker/st_extensions.c b/mesalib/src/mesa/state_tracker/st_extensions.c index 5e482d9f7..ac11f127c 100644 --- a/mesalib/src/mesa/state_tracker/st_extensions.c +++ b/mesalib/src/mesa/state_tracker/st_extensions.c @@ -495,7 +495,6 @@ void st_init_extensions(struct st_context *st)     ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE;     ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE;     ctx->Extensions.ARB_texture_storage = GL_TRUE; -   ctx->Extensions.ARB_vertex_array_object = GL_TRUE;     ctx->Extensions.ARB_vertex_program = GL_TRUE;     ctx->Extensions.ARB_vertex_shader = GL_TRUE;     ctx->Extensions.ARB_window_pos = GL_TRUE; @@ -516,8 +515,6 @@ void st_init_extensions(struct st_context *st)     ctx->Extensions.EXT_texture_env_dot3 = GL_TRUE;     ctx->Extensions.EXT_vertex_array_bgra = GL_TRUE; -   ctx->Extensions.APPLE_vertex_array_object = GL_TRUE; -     ctx->Extensions.ATI_texture_env_combine3 = GL_TRUE;     ctx->Extensions.MESA_pack_invert = GL_TRUE; diff --git a/mesalib/src/mesa/swrast/s_lines.c b/mesalib/src/mesa/swrast/s_lines.c index 2078be43b..cfd3e6fa9 100644 --- a/mesalib/src/mesa/swrast/s_lines.c +++ b/mesalib/src/mesa/swrast/s_lines.c @@ -188,8 +188,8 @@ _swrast_add_spec_terms_line(struct gl_context *ctx,     /* draw */     SWRAST_CONTEXT(ctx)->SpecLine( ctx, ncv0, ncv1 );     /* restore original colors */ -   COPY_CHAN4( ncv0->attrib[FRAG_ATTRIB_COL0], cSave[0] ); -   COPY_CHAN4( ncv1->attrib[FRAG_ATTRIB_COL0], cSave[1] ); +   COPY_CHAN4(ncv0->color, cSave[0]); +   COPY_CHAN4(ncv1->color, cSave[1]);  } diff --git a/mesalib/src/mesa/tnl/t_vertex_generic.c b/mesalib/src/mesa/tnl/t_vertex_generic.c index 7b7f511ce..44d625028 100644 --- a/mesalib/src/mesa/tnl/t_vertex_generic.c +++ b/mesalib/src/mesa/tnl/t_vertex_generic.c @@ -1049,10 +1049,7 @@ void _tnl_generic_interp( struct gl_context *ctx,        a[j].extract( &a[j], fin, vin + a[j].vertoffset );        a[j].extract( &a[j], fout, vout + a[j].vertoffset ); -      INTERP_F( t, fdst[3], fout[3], fin[3] ); -      INTERP_F( t, fdst[2], fout[2], fin[2] ); -      INTERP_F( t, fdst[1], fout[1], fin[1] ); -      INTERP_F( t, fdst[0], fout[0], fin[0] ); +      INTERP_4F(t, fdst, fout, fin);        a[j].insert[4-1]( &a[j], vdst + a[j].vertoffset, fdst );     } diff --git a/mesalib/src/mesa/vbo/vbo_exec_api.c b/mesalib/src/mesa/vbo/vbo_exec_api.c index fc7e40692..781e360d2 100644 --- a/mesalib/src/mesa/vbo/vbo_exec_api.c +++ b/mesalib/src/mesa/vbo/vbo_exec_api.c @@ -457,10 +457,10 @@ vbo_Materialfv(GLenum face, GLenum pname, const GLfloat *params)        updateMats = ALL_MATERIAL_BITS;     } -   if (face == GL_FRONT) { +   if (ctx->API == API_OPENGL && face == GL_FRONT) {        updateMats &= FRONT_MATERIAL_BITS;     } -   else if (face == GL_BACK) { +   else if (ctx->API == API_OPENGL && face == GL_BACK) {        updateMats &= BACK_MATERIAL_BITS;     }     else if (face != GL_FRONT_AND_BACK) { @@ -506,6 +506,10 @@ vbo_Materialfv(GLenum face, GLenum pname, const GLfloat *params)           MAT_ATTR(VBO_ATTRIB_MAT_BACK_SHININESS, 1, params);        break;     case GL_COLOR_INDEXES: +      if (ctx->API != API_OPENGL) { +         _mesa_error(ctx, GL_INVALID_ENUM, "glMaterialfv(pname)"); +         return; +      }        if (updateMats & MAT_BIT_FRONT_INDEXES)           MAT_ATTR(VBO_ATTRIB_MAT_FRONT_INDEXES, 3, params);        if (updateMats & MAT_BIT_BACK_INDEXES) @@ -894,6 +898,7 @@ vbo_exec_PrimitiveRestartNV(void)  static void vbo_exec_vtxfmt_init( struct vbo_exec_context *exec )  { +   struct gl_context *ctx = exec->ctx;     GLvertexformat *vfmt = &exec->vtxfmt;     _MESA_INIT_ARRAYELT_VTXFMT(vfmt, _ae_); @@ -942,14 +947,25 @@ static void vbo_exec_vtxfmt_init( struct vbo_exec_context *exec )     vfmt->Vertex4f = vbo_Vertex4f;     vfmt->Vertex4fv = vbo_Vertex4fv; -   vfmt->VertexAttrib1fARB = vbo_VertexAttrib1fARB; -   vfmt->VertexAttrib1fvARB = vbo_VertexAttrib1fvARB; -   vfmt->VertexAttrib2fARB = vbo_VertexAttrib2fARB; -   vfmt->VertexAttrib2fvARB = vbo_VertexAttrib2fvARB; -   vfmt->VertexAttrib3fARB = vbo_VertexAttrib3fARB; -   vfmt->VertexAttrib3fvARB = vbo_VertexAttrib3fvARB; -   vfmt->VertexAttrib4fARB = vbo_VertexAttrib4fARB; -   vfmt->VertexAttrib4fvARB = vbo_VertexAttrib4fvARB; +   if (ctx->API == API_OPENGLES2) { +      vfmt->VertexAttrib1fARB = _es_VertexAttrib1f; +      vfmt->VertexAttrib1fvARB = _es_VertexAttrib1fv; +      vfmt->VertexAttrib2fARB = _es_VertexAttrib2f; +      vfmt->VertexAttrib2fvARB = _es_VertexAttrib2fv; +      vfmt->VertexAttrib3fARB = _es_VertexAttrib3f; +      vfmt->VertexAttrib3fvARB = _es_VertexAttrib3fv; +      vfmt->VertexAttrib4fARB = _es_VertexAttrib4f; +      vfmt->VertexAttrib4fvARB = _es_VertexAttrib4fv; +   } else { +      vfmt->VertexAttrib1fARB = vbo_VertexAttrib1fARB; +      vfmt->VertexAttrib1fvARB = vbo_VertexAttrib1fvARB; +      vfmt->VertexAttrib2fARB = vbo_VertexAttrib2fARB; +      vfmt->VertexAttrib2fvARB = vbo_VertexAttrib2fvARB; +      vfmt->VertexAttrib3fARB = vbo_VertexAttrib3fARB; +      vfmt->VertexAttrib3fvARB = vbo_VertexAttrib3fvARB; +      vfmt->VertexAttrib4fARB = vbo_VertexAttrib4fARB; +      vfmt->VertexAttrib4fvARB = vbo_VertexAttrib4fvARB; +   }     vfmt->VertexAttrib1fNV = vbo_VertexAttrib1fNV;     vfmt->VertexAttrib1fvNV = vbo_VertexAttrib1fvNV; | 
