diff options
Diffstat (limited to 'mesalib/src/mesa')
74 files changed, 22538 insertions, 23450 deletions
diff --git a/mesalib/src/mesa/SConscript b/mesalib/src/mesa/SConscript index 39388c8e4..2d8a17727 100644 --- a/mesalib/src/mesa/SConscript +++ b/mesalib/src/mesa/SConscript @@ -144,6 +144,65 @@ math_sources = [ 'math/m_xform.c', ] +math_xform_sources = [ + 'math/m_xform.c' +] + +swrast_sources = [ + 'swrast/s_aaline.c', + 'swrast/s_aatriangle.c', + 'swrast/s_accum.c', + 'swrast/s_alpha.c', + 'swrast/s_atifragshader.c', + 'swrast/s_bitmap.c', + 'swrast/s_blend.c', + 'swrast/s_blit.c', + 'swrast/s_clear.c', + 'swrast/s_copypix.c', + 'swrast/s_context.c', + 'swrast/s_depth.c', + 'swrast/s_drawpix.c', + 'swrast/s_feedback.c', + 'swrast/s_fog.c', + 'swrast/s_fragprog.c', + 'swrast/s_lines.c', + 'swrast/s_logic.c', + 'swrast/s_masking.c', + 'swrast/s_points.c', + 'swrast/s_readpix.c', + 'swrast/s_span.c', + 'swrast/s_stencil.c', + 'swrast/s_texcombine.c', + 'swrast/s_texfilter.c', + 'swrast/s_triangle.c', + 'swrast/s_zoom.c', +] + +swrast_setup_sources = [ + 'swrast_setup/ss_context.c', + 'swrast_setup/ss_triangle.c', +] + +tnl_sources = [ + 'tnl/t_context.c', + 'tnl/t_pipeline.c', + 'tnl/t_draw.c', + 'tnl/t_rasterpos.c', + 'tnl/t_vb_program.c', + 'tnl/t_vb_render.c', + 'tnl/t_vb_texgen.c', + 'tnl/t_vb_texmat.c', + 'tnl/t_vb_vertex.c', + 'tnl/t_vb_fog.c', + 'tnl/t_vb_light.c', + 'tnl/t_vb_normals.c', + 'tnl/t_vb_points.c', + 'tnl/t_vp_build.c', + 'tnl/t_vertex.c', + 'tnl/t_vertex_sse.c', + 'tnl/t_vertex_generic.c', +] + vbo_sources = [ 'vbo/vbo_context.c', 'vbo/vbo_exec.c', @@ -161,12 +220,6 @@ vbo_sources = [ 'vbo/vbo_save_loopback.c', ] -vf_sources = [ - 'vf/vf.c', - 'vf/vf_generic.c', - 'vf/vf_sse.c', -] - statetracker_sources = [ 'state_tracker/st_atom.c', 'state_tracker/st_atom_blend.c', @@ -251,12 +304,21 @@ program_sources = [ program_parse[0], ] +common_driver_sources = [ + 'drivers/common/driverfuncs.c', + 'drivers/common/meta.c', +] + mesa_sources = ( main_sources + math_sources + + math_xform_sources + program_sources + vbo_sources + - vf_sources + + tnl_sources + + swrast_sources + + swrast_setup_sources + + common_driver_sources + statetracker_sources ) @@ -415,3 +477,5 @@ mesa = env.ConvenienceLibrary( env.Alias('mesa', mesa) Export('mesa') + +SConscript('drivers/SConscript') diff --git a/mesalib/src/mesa/drivers/SConscript b/mesalib/src/mesa/drivers/SConscript new file mode 100644 index 000000000..ab0f89432 --- /dev/null +++ b/mesalib/src/mesa/drivers/SConscript @@ -0,0 +1,6 @@ +Import('*') + +SConscript('osmesa/SConscript') + +if env['platform'] == 'windows': + SConscript('windows/gdi/SConscript') diff --git a/mesalib/src/mesa/drivers/common/driverfuncs.c b/mesalib/src/mesa/drivers/common/driverfuncs.c index 8f898f6af..0dbc7c3e8 100644 --- a/mesalib/src/mesa/drivers/common/driverfuncs.c +++ b/mesalib/src/mesa/drivers/common/driverfuncs.c @@ -1,329 +1,332 @@ -/*
- * Mesa 3-D graphics library
- * Version: 7.1
- *
- * Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#include "main/glheader.h"
-#include "main/imports.h"
-#include "main/arrayobj.h"
-#include "main/context.h"
-#include "main/framebuffer.h"
-#include "main/mipmap.h"
-#include "main/queryobj.h"
-#include "main/renderbuffer.h"
-#include "main/shaderobj.h"
-#include "main/texcompress.h"
-#include "main/texformat.h"
-#include "main/texgetimage.h"
-#include "main/teximage.h"
-#include "main/texobj.h"
-#include "main/texstore.h"
-#include "main/bufferobj.h"
-#include "main/fbobject.h"
-#include "main/texrender.h"
-#include "main/syncobj.h"
-#include "main/texturebarrier.h"
-#include "main/transformfeedback.h"
-
-#include "program/program.h"
-#include "tnl/tnl.h"
-#include "swrast/swrast.h"
-
-#include "driverfuncs.h"
-#include "meta.h"
-
-
-
-/**
- * Plug in default functions for all pointers in the dd_function_table
- * structure.
- * Device drivers should call this function and then plug in any
- * functions which it wants to override.
- * Some functions (pointers) MUST be implemented by all drivers (REQUIRED).
- *
- * \param table the dd_function_table to initialize
- */
-void
-_mesa_init_driver_functions(struct dd_function_table *driver)
-{
- memset(driver, 0, sizeof(*driver));
-
- driver->GetString = NULL; /* REQUIRED! */
- driver->UpdateState = NULL; /* REQUIRED! */
- driver->GetBufferSize = NULL; /* REQUIRED! */
- driver->ResizeBuffers = _mesa_resize_framebuffer;
- driver->Error = NULL;
-
- driver->Finish = NULL;
- driver->Flush = NULL;
-
- /* framebuffer/image functions */
- driver->Clear = _swrast_Clear;
- driver->Accum = _swrast_Accum;
- driver->RasterPos = _tnl_RasterPos;
- driver->DrawPixels = _swrast_DrawPixels;
- driver->ReadPixels = _swrast_ReadPixels;
- driver->CopyPixels = _swrast_CopyPixels;
- driver->Bitmap = _swrast_Bitmap;
-
- /* Texture functions */
- driver->ChooseTextureFormat = _mesa_choose_tex_format;
- driver->TexImage1D = _mesa_store_teximage1d;
- driver->TexImage2D = _mesa_store_teximage2d;
- driver->TexImage3D = _mesa_store_teximage3d;
- driver->TexSubImage1D = _mesa_store_texsubimage1d;
- driver->TexSubImage2D = _mesa_store_texsubimage2d;
- driver->TexSubImage3D = _mesa_store_texsubimage3d;
- driver->GetTexImage = _mesa_get_teximage;
- driver->CopyTexImage1D = _mesa_meta_CopyTexImage1D;
- driver->CopyTexImage2D = _mesa_meta_CopyTexImage2D;
- driver->CopyTexSubImage1D = _mesa_meta_CopyTexSubImage1D;
- driver->CopyTexSubImage2D = _mesa_meta_CopyTexSubImage2D;
- driver->CopyTexSubImage3D = _mesa_meta_CopyTexSubImage3D;
- driver->GenerateMipmap = _mesa_meta_GenerateMipmap;
- driver->TestProxyTexImage = _mesa_test_proxy_teximage;
- driver->CompressedTexImage1D = _mesa_store_compressed_teximage1d;
- driver->CompressedTexImage2D = _mesa_store_compressed_teximage2d;
- driver->CompressedTexImage3D = _mesa_store_compressed_teximage3d;
- driver->CompressedTexSubImage1D = _mesa_store_compressed_texsubimage1d;
- driver->CompressedTexSubImage2D = _mesa_store_compressed_texsubimage2d;
- driver->CompressedTexSubImage3D = _mesa_store_compressed_texsubimage3d;
- driver->GetCompressedTexImage = _mesa_get_compressed_teximage;
- driver->BindTexture = NULL;
- driver->NewTextureObject = _mesa_new_texture_object;
- driver->DeleteTexture = _mesa_delete_texture_object;
- driver->NewTextureImage = _mesa_new_texture_image;
- driver->FreeTexImageData = _mesa_free_texture_image_data;
- driver->MapTexture = NULL;
- driver->UnmapTexture = NULL;
- driver->TextureMemCpy = memcpy;
- driver->IsTextureResident = NULL;
- driver->UpdateTexturePalette = NULL;
-
- /* imaging */
- driver->CopyColorTable = _mesa_meta_CopyColorTable;
- driver->CopyColorSubTable = _mesa_meta_CopyColorSubTable;
-
- /* Vertex/fragment programs */
- driver->BindProgram = NULL;
- driver->NewProgram = _mesa_new_program;
- driver->DeleteProgram = _mesa_delete_program;
-
- /* simple state commands */
- driver->AlphaFunc = NULL;
- driver->BlendColor = NULL;
- driver->BlendEquationSeparate = NULL;
- driver->BlendFuncSeparate = NULL;
- driver->ClearColor = NULL;
- driver->ClearDepth = NULL;
- driver->ClearStencil = NULL;
- driver->ClipPlane = NULL;
- driver->ColorMask = NULL;
- driver->ColorMaterial = NULL;
- driver->CullFace = NULL;
- driver->DrawBuffer = NULL;
- driver->DrawBuffers = NULL;
- driver->FrontFace = NULL;
- driver->DepthFunc = NULL;
- driver->DepthMask = NULL;
- driver->DepthRange = NULL;
- driver->Enable = NULL;
- driver->Fogfv = NULL;
- driver->Hint = NULL;
- driver->Lightfv = NULL;
- driver->LightModelfv = NULL;
- driver->LineStipple = NULL;
- driver->LineWidth = NULL;
- driver->LogicOpcode = NULL;
- driver->PointParameterfv = NULL;
- driver->PointSize = NULL;
- driver->PolygonMode = NULL;
- driver->PolygonOffset = NULL;
- driver->PolygonStipple = NULL;
- driver->ReadBuffer = NULL;
- driver->RenderMode = NULL;
- driver->Scissor = NULL;
- driver->ShadeModel = NULL;
- driver->StencilFuncSeparate = NULL;
- driver->StencilOpSeparate = NULL;
- driver->StencilMaskSeparate = NULL;
- driver->TexGen = NULL;
- driver->TexEnv = NULL;
- driver->TexParameter = NULL;
- driver->Viewport = NULL;
-
- /* buffer objects */
- _mesa_init_buffer_object_functions(driver);
-
- /* query objects */
- _mesa_init_query_object_functions(driver);
-
- _mesa_init_sync_object_functions(driver);
-
- driver->NewFramebuffer = _mesa_new_framebuffer;
- driver->NewRenderbuffer = _mesa_new_soft_renderbuffer;
- driver->RenderTexture = _mesa_render_texture;
- driver->FinishRenderTexture = _mesa_finish_render_texture;
- driver->FramebufferRenderbuffer = _mesa_framebuffer_renderbuffer;
- driver->ValidateFramebuffer = _mesa_validate_framebuffer;
-
- driver->BlitFramebuffer = _swrast_BlitFramebuffer;
-
- _mesa_init_texture_barrier_functions(driver);
-
- /* APPLE_vertex_array_object */
- driver->NewArrayObject = _mesa_new_array_object;
- driver->DeleteArrayObject = _mesa_delete_array_object;
- driver->BindArrayObject = NULL;
-
- _mesa_init_shader_object_functions(driver);
-
- _mesa_init_transform_feedback_functions(driver);
-
- /* T&L stuff */
- driver->NeedValidate = GL_FALSE;
- driver->ValidateTnlModule = NULL;
- driver->CurrentExecPrimitive = 0;
- driver->CurrentSavePrimitive = 0;
- driver->NeedFlush = 0;
- driver->SaveNeedFlush = 0;
-
- driver->ProgramStringNotify = _tnl_program_string;
- driver->FlushVertices = NULL;
- driver->SaveFlushVertices = NULL;
- driver->NotifySaveBegin = NULL;
- driver->LightingSpaceChange = NULL;
-
- /* display list */
- driver->NewList = NULL;
- driver->EndList = NULL;
- driver->BeginCallList = NULL;
- driver->EndCallList = NULL;
-}
-
-
-/**
- * Call the ctx->Driver.* state functions with current values to initialize
- * driver state.
- * Only the Intel drivers use this so far.
- */
-void
-_mesa_init_driver_state(struct gl_context *ctx)
-{
- ctx->Driver.AlphaFunc(ctx, ctx->Color.AlphaFunc, ctx->Color.AlphaRef);
-
- ctx->Driver.BlendColor(ctx, ctx->Color.BlendColor);
-
- ctx->Driver.BlendEquationSeparate(ctx,
- ctx->Color.Blend[0].EquationRGB,
- ctx->Color.Blend[0].EquationA);
-
- ctx->Driver.BlendFuncSeparate(ctx,
- ctx->Color.Blend[0].SrcRGB,
- ctx->Color.Blend[0].DstRGB,
- ctx->Color.Blend[0].SrcA,
- ctx->Color.Blend[0].DstA);
-
- if (ctx->Driver.ColorMaskIndexed) {
- GLuint i;
- for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
- ctx->Driver.ColorMaskIndexed(ctx, i,
- ctx->Color.ColorMask[0][RCOMP],
- ctx->Color.ColorMask[0][GCOMP],
- ctx->Color.ColorMask[0][BCOMP],
- ctx->Color.ColorMask[0][ACOMP]);
- }
- }
- else {
- ctx->Driver.ColorMask(ctx,
- ctx->Color.ColorMask[0][RCOMP],
- ctx->Color.ColorMask[0][GCOMP],
- ctx->Color.ColorMask[0][BCOMP],
- ctx->Color.ColorMask[0][ACOMP]);
- }
-
- ctx->Driver.CullFace(ctx, ctx->Polygon.CullFaceMode);
- ctx->Driver.DepthFunc(ctx, ctx->Depth.Func);
- ctx->Driver.DepthMask(ctx, ctx->Depth.Mask);
-
- ctx->Driver.Enable(ctx, GL_ALPHA_TEST, ctx->Color.AlphaEnabled);
- ctx->Driver.Enable(ctx, GL_BLEND, ctx->Color.BlendEnabled);
- ctx->Driver.Enable(ctx, GL_COLOR_LOGIC_OP, ctx->Color.ColorLogicOpEnabled);
- ctx->Driver.Enable(ctx, GL_COLOR_SUM, ctx->Fog.ColorSumEnabled);
- ctx->Driver.Enable(ctx, GL_CULL_FACE, ctx->Polygon.CullFlag);
- ctx->Driver.Enable(ctx, GL_DEPTH_TEST, ctx->Depth.Test);
- ctx->Driver.Enable(ctx, GL_DITHER, ctx->Color.DitherFlag);
- ctx->Driver.Enable(ctx, GL_FOG, ctx->Fog.Enabled);
- ctx->Driver.Enable(ctx, GL_LIGHTING, ctx->Light.Enabled);
- ctx->Driver.Enable(ctx, GL_LINE_SMOOTH, ctx->Line.SmoothFlag);
- ctx->Driver.Enable(ctx, GL_POLYGON_STIPPLE, ctx->Polygon.StippleFlag);
- ctx->Driver.Enable(ctx, GL_SCISSOR_TEST, ctx->Scissor.Enabled);
- ctx->Driver.Enable(ctx, GL_STENCIL_TEST, ctx->Stencil._Enabled);
- ctx->Driver.Enable(ctx, GL_TEXTURE_1D, GL_FALSE);
- ctx->Driver.Enable(ctx, GL_TEXTURE_2D, GL_FALSE);
- ctx->Driver.Enable(ctx, GL_TEXTURE_RECTANGLE_NV, GL_FALSE);
- ctx->Driver.Enable(ctx, GL_TEXTURE_3D, GL_FALSE);
- ctx->Driver.Enable(ctx, GL_TEXTURE_CUBE_MAP, GL_FALSE);
-
- ctx->Driver.Fogfv(ctx, GL_FOG_COLOR, ctx->Fog.Color);
- ctx->Driver.Fogfv(ctx, GL_FOG_MODE, 0);
- ctx->Driver.Fogfv(ctx, GL_FOG_DENSITY, &ctx->Fog.Density);
- ctx->Driver.Fogfv(ctx, GL_FOG_START, &ctx->Fog.Start);
- ctx->Driver.Fogfv(ctx, GL_FOG_END, &ctx->Fog.End);
-
- ctx->Driver.FrontFace(ctx, ctx->Polygon.FrontFace);
-
- {
- GLfloat f = (GLfloat) ctx->Light.Model.ColorControl;
- ctx->Driver.LightModelfv(ctx, GL_LIGHT_MODEL_COLOR_CONTROL, &f);
- }
-
- ctx->Driver.LineWidth(ctx, ctx->Line.Width);
- ctx->Driver.LogicOpcode(ctx, ctx->Color.LogicOp);
- ctx->Driver.PointSize(ctx, ctx->Point.Size);
- ctx->Driver.PolygonStipple(ctx, (const GLubyte *) ctx->PolygonStipple);
- ctx->Driver.Scissor(ctx, ctx->Scissor.X, ctx->Scissor.Y,
- ctx->Scissor.Width, ctx->Scissor.Height);
- ctx->Driver.ShadeModel(ctx, ctx->Light.ShadeModel);
- ctx->Driver.StencilFuncSeparate(ctx, GL_FRONT,
- ctx->Stencil.Function[0],
- ctx->Stencil.Ref[0],
- ctx->Stencil.ValueMask[0]);
- ctx->Driver.StencilFuncSeparate(ctx, GL_BACK,
- ctx->Stencil.Function[1],
- ctx->Stencil.Ref[1],
- ctx->Stencil.ValueMask[1]);
- ctx->Driver.StencilMaskSeparate(ctx, GL_FRONT, ctx->Stencil.WriteMask[0]);
- ctx->Driver.StencilMaskSeparate(ctx, GL_BACK, ctx->Stencil.WriteMask[1]);
- ctx->Driver.StencilOpSeparate(ctx, GL_FRONT,
- ctx->Stencil.FailFunc[0],
- ctx->Stencil.ZFailFunc[0],
- ctx->Stencil.ZPassFunc[0]);
- ctx->Driver.StencilOpSeparate(ctx, GL_BACK,
- ctx->Stencil.FailFunc[1],
- ctx->Stencil.ZFailFunc[1],
- ctx->Stencil.ZPassFunc[1]);
-
-
- ctx->Driver.DrawBuffer(ctx, ctx->Color.DrawBuffer[0]);
-}
+/* + * Mesa 3-D graphics library + * Version: 7.1 + * + * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#include "main/glheader.h" +#include "main/imports.h" +#include "main/arrayobj.h" +#include "main/context.h" +#include "main/framebuffer.h" +#include "main/mipmap.h" +#include "main/queryobj.h" +#include "main/renderbuffer.h" +#include "main/shaderobj.h" +#include "main/texcompress.h" +#include "main/texformat.h" +#include "main/texgetimage.h" +#include "main/teximage.h" +#include "main/texobj.h" +#include "main/texstore.h" +#include "main/bufferobj.h" +#include "main/fbobject.h" +#include "main/texrender.h" +#include "main/samplerobj.h" +#include "main/syncobj.h" +#include "main/texturebarrier.h" +#include "main/transformfeedback.h" + +#include "program/program.h" +#include "tnl/tnl.h" +#include "swrast/swrast.h" + +#include "driverfuncs.h" +#include "meta.h" + + + +/** + * Plug in default functions for all pointers in the dd_function_table + * structure. + * Device drivers should call this function and then plug in any + * functions which it wants to override. + * Some functions (pointers) MUST be implemented by all drivers (REQUIRED). + * + * \param table the dd_function_table to initialize + */ +void +_mesa_init_driver_functions(struct dd_function_table *driver) +{ + memset(driver, 0, sizeof(*driver)); + + driver->GetString = NULL; /* REQUIRED! */ + driver->UpdateState = NULL; /* REQUIRED! */ + driver->GetBufferSize = NULL; /* REQUIRED! */ + driver->ResizeBuffers = _mesa_resize_framebuffer; + driver->Error = NULL; + + driver->Finish = NULL; + driver->Flush = NULL; + + /* framebuffer/image functions */ + driver->Clear = _swrast_Clear; + driver->Accum = _swrast_Accum; + driver->RasterPos = _tnl_RasterPos; + driver->DrawPixels = _swrast_DrawPixels; + driver->ReadPixels = _swrast_ReadPixels; + driver->CopyPixels = _swrast_CopyPixels; + driver->Bitmap = _swrast_Bitmap; + + /* Texture functions */ + driver->ChooseTextureFormat = _mesa_choose_tex_format; + driver->TexImage1D = _mesa_store_teximage1d; + driver->TexImage2D = _mesa_store_teximage2d; + driver->TexImage3D = _mesa_store_teximage3d; + driver->TexSubImage1D = _mesa_store_texsubimage1d; + driver->TexSubImage2D = _mesa_store_texsubimage2d; + driver->TexSubImage3D = _mesa_store_texsubimage3d; + driver->GetTexImage = _mesa_get_teximage; + driver->CopyTexImage1D = _mesa_meta_CopyTexImage1D; + driver->CopyTexImage2D = _mesa_meta_CopyTexImage2D; + driver->CopyTexSubImage1D = _mesa_meta_CopyTexSubImage1D; + driver->CopyTexSubImage2D = _mesa_meta_CopyTexSubImage2D; + driver->CopyTexSubImage3D = _mesa_meta_CopyTexSubImage3D; + driver->GenerateMipmap = _mesa_meta_GenerateMipmap; + driver->TestProxyTexImage = _mesa_test_proxy_teximage; + driver->CompressedTexImage1D = _mesa_store_compressed_teximage1d; + driver->CompressedTexImage2D = _mesa_store_compressed_teximage2d; + driver->CompressedTexImage3D = _mesa_store_compressed_teximage3d; + driver->CompressedTexSubImage1D = _mesa_store_compressed_texsubimage1d; + driver->CompressedTexSubImage2D = _mesa_store_compressed_texsubimage2d; + driver->CompressedTexSubImage3D = _mesa_store_compressed_texsubimage3d; + driver->GetCompressedTexImage = _mesa_get_compressed_teximage; + driver->BindTexture = NULL; + driver->NewTextureObject = _mesa_new_texture_object; + driver->DeleteTexture = _mesa_delete_texture_object; + driver->NewTextureImage = _mesa_new_texture_image; + driver->FreeTexImageData = _mesa_free_texture_image_data; + driver->MapTexture = NULL; + driver->UnmapTexture = NULL; + driver->TextureMemCpy = memcpy; + driver->IsTextureResident = NULL; + driver->UpdateTexturePalette = NULL; + + /* imaging */ + driver->CopyColorTable = _mesa_meta_CopyColorTable; + driver->CopyColorSubTable = _mesa_meta_CopyColorSubTable; + + /* Vertex/fragment programs */ + driver->BindProgram = NULL; + driver->NewProgram = _mesa_new_program; + driver->DeleteProgram = _mesa_delete_program; + + /* simple state commands */ + driver->AlphaFunc = NULL; + driver->BlendColor = NULL; + driver->BlendEquationSeparate = NULL; + driver->BlendFuncSeparate = NULL; + driver->ClearColor = NULL; + driver->ClearDepth = NULL; + driver->ClearStencil = NULL; + driver->ClipPlane = NULL; + driver->ColorMask = NULL; + driver->ColorMaterial = NULL; + driver->CullFace = NULL; + driver->DrawBuffer = NULL; + driver->DrawBuffers = NULL; + driver->FrontFace = NULL; + driver->DepthFunc = NULL; + driver->DepthMask = NULL; + driver->DepthRange = NULL; + driver->Enable = NULL; + driver->Fogfv = NULL; + driver->Hint = NULL; + driver->Lightfv = NULL; + driver->LightModelfv = NULL; + driver->LineStipple = NULL; + driver->LineWidth = NULL; + driver->LogicOpcode = NULL; + driver->PointParameterfv = NULL; + driver->PointSize = NULL; + driver->PolygonMode = NULL; + driver->PolygonOffset = NULL; + driver->PolygonStipple = NULL; + driver->ReadBuffer = NULL; + driver->RenderMode = NULL; + driver->Scissor = NULL; + driver->ShadeModel = NULL; + driver->StencilFuncSeparate = NULL; + driver->StencilOpSeparate = NULL; + driver->StencilMaskSeparate = NULL; + driver->TexGen = NULL; + driver->TexEnv = NULL; + driver->TexParameter = NULL; + driver->Viewport = NULL; + + /* buffer objects */ + _mesa_init_buffer_object_functions(driver); + + /* query objects */ + _mesa_init_query_object_functions(driver); + + _mesa_init_sync_object_functions(driver); + + driver->NewFramebuffer = _mesa_new_framebuffer; + driver->NewRenderbuffer = _mesa_new_soft_renderbuffer; + driver->RenderTexture = _mesa_render_texture; + driver->FinishRenderTexture = _mesa_finish_render_texture; + driver->FramebufferRenderbuffer = _mesa_framebuffer_renderbuffer; + driver->ValidateFramebuffer = _mesa_validate_framebuffer; + + driver->BlitFramebuffer = _swrast_BlitFramebuffer; + + _mesa_init_texture_barrier_functions(driver); + + /* APPLE_vertex_array_object */ + driver->NewArrayObject = _mesa_new_array_object; + driver->DeleteArrayObject = _mesa_delete_array_object; + driver->BindArrayObject = NULL; + + _mesa_init_shader_object_functions(driver); + + _mesa_init_transform_feedback_functions(driver); + + _mesa_init_sampler_object_functions(driver); + + /* T&L stuff */ + driver->NeedValidate = GL_FALSE; + driver->ValidateTnlModule = NULL; + driver->CurrentExecPrimitive = 0; + driver->CurrentSavePrimitive = 0; + driver->NeedFlush = 0; + driver->SaveNeedFlush = 0; + + driver->ProgramStringNotify = _tnl_program_string; + driver->FlushVertices = NULL; + driver->SaveFlushVertices = NULL; + driver->NotifySaveBegin = NULL; + driver->LightingSpaceChange = NULL; + + /* display list */ + driver->NewList = NULL; + driver->EndList = NULL; + driver->BeginCallList = NULL; + driver->EndCallList = NULL; +} + + +/** + * Call the ctx->Driver.* state functions with current values to initialize + * driver state. + * Only the Intel drivers use this so far. + */ +void +_mesa_init_driver_state(struct gl_context *ctx) +{ + ctx->Driver.AlphaFunc(ctx, ctx->Color.AlphaFunc, ctx->Color.AlphaRef); + + ctx->Driver.BlendColor(ctx, ctx->Color.BlendColor); + + ctx->Driver.BlendEquationSeparate(ctx, + ctx->Color.Blend[0].EquationRGB, + ctx->Color.Blend[0].EquationA); + + ctx->Driver.BlendFuncSeparate(ctx, + ctx->Color.Blend[0].SrcRGB, + ctx->Color.Blend[0].DstRGB, + ctx->Color.Blend[0].SrcA, + ctx->Color.Blend[0].DstA); + + if (ctx->Driver.ColorMaskIndexed) { + GLuint i; + for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) { + ctx->Driver.ColorMaskIndexed(ctx, i, + ctx->Color.ColorMask[0][RCOMP], + ctx->Color.ColorMask[0][GCOMP], + ctx->Color.ColorMask[0][BCOMP], + ctx->Color.ColorMask[0][ACOMP]); + } + } + else { + ctx->Driver.ColorMask(ctx, + ctx->Color.ColorMask[0][RCOMP], + ctx->Color.ColorMask[0][GCOMP], + ctx->Color.ColorMask[0][BCOMP], + ctx->Color.ColorMask[0][ACOMP]); + } + + ctx->Driver.CullFace(ctx, ctx->Polygon.CullFaceMode); + ctx->Driver.DepthFunc(ctx, ctx->Depth.Func); + ctx->Driver.DepthMask(ctx, ctx->Depth.Mask); + + ctx->Driver.Enable(ctx, GL_ALPHA_TEST, ctx->Color.AlphaEnabled); + ctx->Driver.Enable(ctx, GL_BLEND, ctx->Color.BlendEnabled); + ctx->Driver.Enable(ctx, GL_COLOR_LOGIC_OP, ctx->Color.ColorLogicOpEnabled); + ctx->Driver.Enable(ctx, GL_COLOR_SUM, ctx->Fog.ColorSumEnabled); + ctx->Driver.Enable(ctx, GL_CULL_FACE, ctx->Polygon.CullFlag); + ctx->Driver.Enable(ctx, GL_DEPTH_TEST, ctx->Depth.Test); + ctx->Driver.Enable(ctx, GL_DITHER, ctx->Color.DitherFlag); + ctx->Driver.Enable(ctx, GL_FOG, ctx->Fog.Enabled); + ctx->Driver.Enable(ctx, GL_LIGHTING, ctx->Light.Enabled); + ctx->Driver.Enable(ctx, GL_LINE_SMOOTH, ctx->Line.SmoothFlag); + ctx->Driver.Enable(ctx, GL_POLYGON_STIPPLE, ctx->Polygon.StippleFlag); + ctx->Driver.Enable(ctx, GL_SCISSOR_TEST, ctx->Scissor.Enabled); + ctx->Driver.Enable(ctx, GL_STENCIL_TEST, ctx->Stencil._Enabled); + ctx->Driver.Enable(ctx, GL_TEXTURE_1D, GL_FALSE); + ctx->Driver.Enable(ctx, GL_TEXTURE_2D, GL_FALSE); + ctx->Driver.Enable(ctx, GL_TEXTURE_RECTANGLE_NV, GL_FALSE); + ctx->Driver.Enable(ctx, GL_TEXTURE_3D, GL_FALSE); + ctx->Driver.Enable(ctx, GL_TEXTURE_CUBE_MAP, GL_FALSE); + + ctx->Driver.Fogfv(ctx, GL_FOG_COLOR, ctx->Fog.Color); + ctx->Driver.Fogfv(ctx, GL_FOG_MODE, 0); + ctx->Driver.Fogfv(ctx, GL_FOG_DENSITY, &ctx->Fog.Density); + ctx->Driver.Fogfv(ctx, GL_FOG_START, &ctx->Fog.Start); + ctx->Driver.Fogfv(ctx, GL_FOG_END, &ctx->Fog.End); + + ctx->Driver.FrontFace(ctx, ctx->Polygon.FrontFace); + + { + GLfloat f = (GLfloat) ctx->Light.Model.ColorControl; + ctx->Driver.LightModelfv(ctx, GL_LIGHT_MODEL_COLOR_CONTROL, &f); + } + + ctx->Driver.LineWidth(ctx, ctx->Line.Width); + ctx->Driver.LogicOpcode(ctx, ctx->Color.LogicOp); + ctx->Driver.PointSize(ctx, ctx->Point.Size); + ctx->Driver.PolygonStipple(ctx, (const GLubyte *) ctx->PolygonStipple); + ctx->Driver.Scissor(ctx, ctx->Scissor.X, ctx->Scissor.Y, + ctx->Scissor.Width, ctx->Scissor.Height); + ctx->Driver.ShadeModel(ctx, ctx->Light.ShadeModel); + ctx->Driver.StencilFuncSeparate(ctx, GL_FRONT, + ctx->Stencil.Function[0], + ctx->Stencil.Ref[0], + ctx->Stencil.ValueMask[0]); + ctx->Driver.StencilFuncSeparate(ctx, GL_BACK, + ctx->Stencil.Function[1], + ctx->Stencil.Ref[1], + ctx->Stencil.ValueMask[1]); + ctx->Driver.StencilMaskSeparate(ctx, GL_FRONT, ctx->Stencil.WriteMask[0]); + ctx->Driver.StencilMaskSeparate(ctx, GL_BACK, ctx->Stencil.WriteMask[1]); + ctx->Driver.StencilOpSeparate(ctx, GL_FRONT, + ctx->Stencil.FailFunc[0], + ctx->Stencil.ZFailFunc[0], + ctx->Stencil.ZPassFunc[0]); + ctx->Driver.StencilOpSeparate(ctx, GL_BACK, + ctx->Stencil.FailFunc[1], + ctx->Stencil.ZFailFunc[1], + ctx->Stencil.ZPassFunc[1]); + + + ctx->Driver.DrawBuffer(ctx, ctx->Color.DrawBuffer[0]); +} diff --git a/mesalib/src/mesa/drivers/common/meta.c b/mesalib/src/mesa/drivers/common/meta.c index c92bf29c3..a3964798b 100644 --- a/mesalib/src/mesa/drivers/common/meta.c +++ b/mesalib/src/mesa/drivers/common/meta.c @@ -40,6 +40,7 @@ #include "main/bufferobj.h" #include "main/buffers.h" #include "main/colortab.h" +#include "main/condrender.h" #include "main/depth.h" #include "main/enable.h" #include "main/fbobject.h" @@ -92,6 +93,9 @@ #define META_TEXTURE 0x1000 #define META_VERTEX 0x2000 #define META_VIEWPORT 0x4000 +#define META_CLAMP_FRAGMENT_COLOR 0x8000 +#define META_CLAMP_VERTEX_COLOR 0x10000 +#define META_CONDITIONAL_RENDER 0x20000 /*@}*/ @@ -180,6 +184,16 @@ struct save_state GLint ViewportX, ViewportY, ViewportW, ViewportH; GLclampd DepthNear, DepthFar; + /** META_CLAMP_FRAGMENT_COLOR */ + GLenum ClampFragmentColor; + + /** META_CLAMP_VERTEX_COLOR */ + GLenum ClampVertexColor; + + /** META_CONDITIONAL_RENDER */ + struct gl_query_object *CondRenderQuery; + GLenum CondRenderMode; + /** Miscellaneous (always disabled) */ GLboolean Lighting; }; @@ -569,6 +583,34 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state) _mesa_DepthRange(0.0, 1.0); } + if (state & META_CLAMP_FRAGMENT_COLOR) { + save->ClampFragmentColor = ctx->Color.ClampFragmentColor; + + /* Generally in here we want to do clamping according to whether + * it's for the pixel path (ClampFragmentColor is GL_TRUE), + * regardless of the internal implementation of the metaops. + */ + if (ctx->Color.ClampFragmentColor != GL_TRUE) + _mesa_ClampColorARB(GL_CLAMP_FRAGMENT_COLOR, GL_FALSE); + } + + if (state & META_CLAMP_VERTEX_COLOR) { + save->ClampVertexColor = ctx->Light.ClampVertexColor; + + /* Generally in here we never want vertex color clamping -- + * result clamping is only dependent on fragment clamping. + */ + _mesa_ClampColorARB(GL_CLAMP_VERTEX_COLOR, GL_FALSE); + } + + if (state & META_CONDITIONAL_RENDER) { + save->CondRenderQuery = ctx->Query.CondRenderQuery; + save->CondRenderMode = ctx->Query.CondRenderMode; + + if (ctx->Query.CondRenderQuery) + _mesa_EndConditionalRender(); + } + /* misc */ { save->Lighting = ctx->Light.Enabled; @@ -833,6 +875,20 @@ _mesa_meta_end(struct gl_context *ctx) _mesa_DepthRange(save->DepthNear, save->DepthFar); } + if (state & META_CLAMP_FRAGMENT_COLOR) { + _mesa_ClampColorARB(GL_CLAMP_FRAGMENT_COLOR, save->ClampFragmentColor); + } + + if (state & META_CLAMP_VERTEX_COLOR) { + _mesa_ClampColorARB(GL_CLAMP_VERTEX_COLOR, save->ClampVertexColor); + } + + if (state & META_CONDITIONAL_RENDER) { + if (save->CondRenderQuery) + _mesa_BeginConditionalRender(save->CondRenderQuery->Id, + save->CondRenderMode); + } + /* misc */ if (save->Lighting) { _mesa_set_enable(ctx, GL_LIGHTING, GL_TRUE); @@ -1406,7 +1462,10 @@ _mesa_meta_Clear(struct gl_context *ctx, GLbitfield buffers) }; struct vertex verts[4]; /* save all state but scissor, pixel pack/unpack */ - GLbitfield metaSave = META_ALL - META_SCISSOR - META_PIXEL_STORE; + GLbitfield metaSave = (META_ALL - + META_SCISSOR - + META_PIXEL_STORE - + META_CONDITIONAL_RENDER); const GLuint stencilMax = (1 << ctx->DrawBuffer->Visual.stencilBits) - 1; if (buffers & BUFFER_BITS_COLOR) { @@ -1441,6 +1500,9 @@ _mesa_meta_Clear(struct gl_context *ctx, GLbitfield buffers) /* GL_COLOR_BUFFER_BIT */ if (buffers & BUFFER_BITS_COLOR) { /* leave colormask, glDrawBuffer state as-is */ + + /* Clears never have the color clamped. */ + _mesa_ClampColorARB(GL_CLAMP_FRAGMENT_COLOR, GL_FALSE); } else { ASSERT(metaSave & META_COLOR_MASK); @@ -1494,10 +1556,10 @@ _mesa_meta_Clear(struct gl_context *ctx, GLbitfield buffers) /* vertex colors */ for (i = 0; i < 4; i++) { - verts[i].r = ctx->Color.ClearColor[0]; - verts[i].g = ctx->Color.ClearColor[1]; - verts[i].b = ctx->Color.ClearColor[2]; - verts[i].a = ctx->Color.ClearColor[3]; + verts[i].r = ctx->Color.ClearColorUnclamped[0]; + verts[i].g = ctx->Color.ClearColorUnclamped[1]; + verts[i].b = ctx->Color.ClearColorUnclamped[2]; + verts[i].a = ctx->Color.ClearColorUnclamped[3]; } /* upload new vertex data */ @@ -1803,6 +1865,14 @@ _mesa_meta_DrawPixels(struct gl_context *ctx, texIntFormat = format; else texIntFormat = GL_RGBA; + + /* If we're not supposed to clamp the resulting color, then just + * promote our texture to fully float. We could do better by + * just going for the matching set of channels, in floating + * point. + */ + if (ctx->Color.ClampFragmentColor != GL_TRUE) + texIntFormat = GL_RGBA32F; } else if (_mesa_is_stencil_format(format)) { if (ctx->Extensions.ARB_fragment_program && @@ -1861,6 +1931,7 @@ _mesa_meta_DrawPixels(struct gl_context *ctx, META_TRANSFORM | META_VERTEX | META_VIEWPORT | + META_CLAMP_FRAGMENT_COLOR | metaExtraSave)); newTex = alloc_texture(tex, width, height, texIntFormat); diff --git a/mesalib/src/mesa/drivers/dri/common/spantmp2.h b/mesalib/src/mesa/drivers/dri/common/spantmp2.h index 160836a77..abd79562f 100644 --- a/mesalib/src/mesa/drivers/dri/common/spantmp2.h +++ b/mesalib/src/mesa/drivers/dri/common/spantmp2.h @@ -1,1038 +1,916 @@ -/*
- * Copyright 2000-2001 VA Linux Systems, Inc.
- * (C) Copyright IBM Corporation 2004
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * on the rights to use, copy, modify, merge, publish, distribute, sub
- * license, and/or sell copies of the Software, and to permit persons to whom
- * the Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
- * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- * USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file spantmp2.h
- *
- * Template file of span read / write functions.
- *
- * \author Keith Whitwell <keithw@tungstengraphics.com>
- * \author Gareth Hughes <gareth@nvidia.com>
- * \author Ian Romanick <idr@us.ibm.com>
- */
-
-#include "main/colormac.h"
-#include "spantmp_common.h"
-
-#ifndef DBG
-#define DBG 0
-#endif
-
-#ifndef HW_READ_CLIPLOOP
-#define HW_READ_CLIPLOOP() HW_CLIPLOOP()
-#endif
-
-#ifndef HW_WRITE_CLIPLOOP
-#define HW_WRITE_CLIPLOOP() HW_CLIPLOOP()
-#endif
-
-#ifdef SPANTMP_MESA_FMT
-#define SPANTMP_PIXEL_FMT GL_NONE
-#define SPANTMP_PIXEL_TYPE GL_NONE
-#endif
-
-#ifndef SPANTMP_MESA_FMT
-#define SPANTMP_MESA_FMT MESA_FORMAT_COUNT
-#endif
-
-#if (SPANTMP_PIXEL_FMT == GL_RGB) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5)
-
-/**
- ** GL_RGB, GL_UNSIGNED_SHORT_5_6_5
- **/
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-#define INIT_MONO_PIXEL(p, color) \
- p = PACK_COLOR_565( color[0], color[1], color[2] )
-
-#define WRITE_RGBA( _x, _y, r, g, b, a ) \
- PUT_VALUE(_x, _y, ((((int)r & 0xf8) << 8) | \
- (((int)g & 0xfc) << 3) | \
- (((int)b & 0xf8) >> 3))) \
-
-#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLushort p = GET_VALUE(_x, _y); \
- rgba[0] = ((p >> 8) & 0xf8) * 255 / 0xf8; \
- rgba[1] = ((p >> 3) & 0xfc) * 255 / 0xfc; \
- rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \
- rgba[3] = 0xff; \
- } while (0)
-
-#elif (SPANTMP_PIXEL_FMT == GL_RGB) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5_REV)
-
-/**
- ** GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV
- **/
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-#define INIT_MONO_PIXEL(p, color) \
- p = PACK_COLOR_565_REV( color[0], color[1], color[2] )
-
-#define WRITE_RGBA( _x, _y, r, g, b, a ) \
- PUT_VALUE(_x, _y, PACK_COLOR_565_REV( r, g, b ))
-
-#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLushort p = GET_VALUE(_x, _y); \
- p = p << 8 | p >> 8; \
- rgba[0] = ((p >> 8) & 0xf8) * 255 / 0xf8; \
- rgba[1] = ((p >> 3) & 0xfc) * 255 / 0xfc; \
- rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \
- rgba[3] = 0xff; \
- } while (0)
-
-#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_4_4_4_4)
-
-/**
- ** GL_BGRA, GL_UNSIGNED_SHORT_4_4_4_4
- **/
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-#define INIT_MONO_PIXEL(p, color) \
- p = PACK_COLOR_4444_REV(color[3], color[0], color[1], color[2])
-
-#define WRITE_RGBA( _x, _y, r, g, b, a ) \
- PUT_VALUE(_x, _y, PACK_COLOR_4444_REV(a, r, g, b)) \
-
-#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLushort p = GET_VALUE(_x, _y); \
- rgba[0] = ((p >> 0) & 0xf) * 0x11; \
- rgba[1] = ((p >> 12) & 0xf) * 0x11; \
- rgba[2] = ((p >> 4) & 0xf) * 0x11; \
- rgba[3] = ((p >> 8) & 0xf) * 0x11; \
- } while (0)
-
-
-#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_4_4_4_4_REV)
-
-/**
- ** GL_BGRA, GL_UNSIGNED_SHORT_4_4_4_4_REV
- **/
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-#define INIT_MONO_PIXEL(p, color) \
- p = PACK_COLOR_4444(color[3], color[0], color[1], color[2])
-
-#define WRITE_RGBA( _x, _y, r, g, b, a ) \
- PUT_VALUE(_x, _y, PACK_COLOR_4444(a, r, g, b)) \
-
-#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLushort p = GET_VALUE(_x, _y); \
- rgba[0] = ((p >> 8) & 0xf) * 0x11; \
- rgba[1] = ((p >> 4) & 0xf) * 0x11; \
- rgba[2] = ((p >> 0) & 0xf) * 0x11; \
- rgba[3] = ((p >> 12) & 0xf) * 0x11; \
- } while (0)
-
-
-#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_1_5_5_5_REV)
-
-/**
- ** GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV
- **/
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-#define INIT_MONO_PIXEL(p, color) \
- p = PACK_COLOR_1555(color[3], color[0], color[1], color[2])
-
-#define WRITE_RGBA( _x, _y, r, g, b, a ) \
- PUT_VALUE(_x, _y, PACK_COLOR_1555(a, r, g, b)) \
-
-#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLushort p = GET_VALUE(_x, _y); \
- rgba[0] = ((p >> 7) & 0xf8) * 255 / 0xf8; \
- rgba[1] = ((p >> 2) & 0xf8) * 255 / 0xf8; \
- rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \
- rgba[3] = ((p >> 15) & 0x1) * 0xff; \
- } while (0)
-
-#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_1_5_5_5)
-
-/**
- ** GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5
- **/
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-#define INIT_MONO_PIXEL(p, color) \
- p = PACK_COLOR_1555_REV(color[3], color[0], color[1], color[2])
-
-#define WRITE_RGBA( _x, _y, r, g, b, a ) \
- PUT_VALUE(_x, _y, PACK_COLOR_1555_REV(a, r, g, b)) \
-
-#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLushort p = GET_VALUE(_x, _y); \
- p = p << 8 | p >> 8; \
- rgba[0] = ((p >> 7) & 0xf8) * 255 / 0xf8; \
- rgba[1] = ((p >> 2) & 0xf8) * 255 / 0xf8; \
- rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \
- rgba[3] = ((p >> 15) & 0x1) * 0xff; \
- } while (0)
-
-#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)
-
-/**
- ** GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV
- **/
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-# define INIT_MONO_PIXEL(p, color) \
- p = PACK_COLOR_8888(color[3], color[0], color[1], color[2])
-
-# define WRITE_RGBA(_x, _y, r, g, b, a) \
- PUT_VALUE(_x, _y, ((r << 16) | \
- (g << 8) | \
- (b << 0) | \
- (a << 24)))
-
-#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
-
-# if defined( USE_X86_ASM )
-# define READ_RGBA(rgba, _x, _y) \
- do { \
- GLuint p = GET_VALUE(_x, _y); \
- __asm__ __volatile__( "bswap %0; rorl $8, %0" \
- : "=r" (p) : "0" (p) ); \
- ((GLuint *)rgba)[0] = p; \
- } while (0)
-# elif defined( MESA_BIG_ENDIAN )
- /* On PowerPC with GCC 3.4.2 the shift madness below becomes a single
- * rotlwi instruction. It also produces good code on SPARC.
- */
-# define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLuint p = GET_VALUE(_x, _y); \
- GLuint t = p; \
- *((uint32_t *) rgba) = (t >> 24) | (p << 8); \
- } while (0)
-# else
-# define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLuint p = GET_VALUE(_x, _y); \
- rgba[0] = (p >> 16) & 0xff; \
- rgba[1] = (p >> 8) & 0xff; \
- rgba[2] = (p >> 0) & 0xff; \
- rgba[3] = (p >> 24) & 0xff; \
- } while (0)
-# endif
-
-#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8)
-
-/**
- ** GL_BGRA, GL_UNSIGNED_INT_8_8_8_8
- **/
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-# define INIT_MONO_PIXEL(p, color) \
- p = PACK_COLOR_8888(color[2], color[1], color[0], color[3])
-
-# define WRITE_RGBA(_x, _y, r, g, b, a) \
- PUT_VALUE(_x, _y, ((r << 8) | \
- (g << 16) | \
- (b << 24) | \
- (a << 0)))
-
-#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
-
-# if defined( USE_X86_ASM )
-# define READ_RGBA(rgba, _x, _y) \
- do { \
- GLuint p = GET_VALUE(_x, _y); \
- __asm__ __volatile__( "rorl $8, %0" \
- : "=r" (p) : "0" (p) ); \
- ((GLuint *)rgba)[0] = p; \
- } while (0)
-# elif defined( MESA_BIG_ENDIAN )
- /* On PowerPC with GCC 3.4.2 the shift madness below becomes a single
- * rotlwi instruction. It also produces good code on SPARC.
- */
-# define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLuint p = CPU_TO_LE32(GET_VALUE(_x, _y)); \
- GLuint t = p; \
- *((uint32_t *) rgba) = (t >> 24) | (p << 8); \
- } while (0)
-# else
-# define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLuint p = GET_VALUE(_x, _y); \
- rgba[0] = (p >> 8) & 0xff; \
- rgba[1] = (p >> 16) & 0xff; \
- rgba[2] = (p >> 24) & 0xff; \
- rgba[3] = (p >> 0) & 0xff; \
- } while (0)
-# endif
-
-#elif (SPANTMP_PIXEL_FMT == GL_BGR) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)
-
-/**
- ** GL_BGR, GL_UNSIGNED_INT_8_8_8_8_REV
- **
- ** This is really for MESA_FORMAT_XRGB8888. The spantmp code needs to be
- ** kicked to the curb, and we need to just code-gen this.
- **/
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-# define INIT_MONO_PIXEL(p, color) \
- p = PACK_COLOR_8888(0xff, color[0], color[1], color[2])
-
-# define WRITE_RGBA(_x, _y, r, g, b, a) \
- PUT_VALUE(_x, _y, ((r << 16) | \
- (g << 8) | \
- (b << 0) | \
- (0xff << 24)))
-
-#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
-
-# if defined( USE_X86_ASM )
-# define READ_RGBA(rgba, _x, _y) \
- do { \
- GLuint p = GET_VALUE(_x, _y); \
- __asm__ __volatile__( "bswap %0; rorl $8, %0" \
- : "=r" (p) : "0" (p) ); \
- ((GLuint *)rgba)[0] = p | 0xff000000; \
- } while (0)
-# elif defined( MESA_BIG_ENDIAN )
- /* On PowerPC with GCC 3.4.2 the shift madness below becomes a single
- * rotlwi instruction. It also produces good code on SPARC.
- */
-# define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLuint p = GET_VALUE(_x, _y); \
- *((uint32_t *) rgba) = (p << 8) | 0xff; \
- } while (0)
-# else
-# define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLuint p = GET_VALUE(_x, _y); \
- rgba[0] = (p >> 16) & 0xff; \
- rgba[1] = (p >> 8) & 0xff; \
- rgba[2] = (p >> 0) & 0xff; \
- rgba[3] = 0xff; \
- } while (0)
-# endif
-
-#elif (SPANTMP_PIXEL_FMT == GL_ALPHA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_BYTE)
-
-/**
- ** GL_ALPHA, GL_UNSIGNED_BYTE
- **/
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) ( buf + (_x) + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLubyte *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLubyte *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-# define INIT_MONO_PIXEL(p, color) \
- p = color[3]
-
-# define WRITE_RGBA(_x, _y, r, g, b, a) \
- PUT_VALUE(_x, _y, a | (r & 0 /* quiet warnings */))
-
-#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLubyte p = GET_VALUE(_x, _y); \
- rgba[0] = 0; \
- rgba[1] = 0; \
- rgba[2] = 0; \
- rgba[3] = p; \
- } while (0)
-
-#elif (SPANTMP_MESA_FMT == MESA_FORMAT_R8)
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) ( buf + (_x) + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLubyte *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLubyte *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-# define INIT_MONO_PIXEL(p, color) \
- p = color[0]
-
-# define WRITE_RGBA(_x, _y, r, g, b, a) \
- PUT_VALUE(_x, _y, r)
-
-#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLubyte p = GET_VALUE(_x, _y); \
- rgba[0] = p; \
- rgba[1] = 0; \
- rgba[2] = 0; \
- rgba[3] = 0; \
- } while (0)
-
-#elif (SPANTMP_MESA_FMT == MESA_FORMAT_RG88)
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) ( buf + (_x) * 2 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-# define INIT_MONO_PIXEL(p, color) \
- PACK_COLOR_8888(color[0], color[1], 0, 0)
-
-# define WRITE_RGBA(_x, _y, r, g, b, a) \
- PUT_VALUE(_x, _y, r)
-
-#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLushort p = GET_VALUE(_x, _y); \
- rgba[0] = p & 0xff; \
- rgba[1] = (p >> 8) & 0xff; \
- rgba[2] = 0; \
- rgba[3] = 0; \
- } while (0)
-
-#elif (SPANTMP_MESA_FMT == MESA_FORMAT_R16)
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) ( buf + (_x) * 2 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-# define INIT_MONO_PIXEL(p, color) \
- p = color[0]
-
-# define WRITE_RGBA(_x, _y, r, g, b, a) \
- PUT_VALUE(_x, _y, r)
-
-#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLushort p = GET_VALUE(_x, _y); \
- rgba[0] = p; \
- rgba[1] = 0; \
- rgba[2] = 0; \
- rgba[3] = 0; \
- } while (0)
-
-#elif (SPANTMP_MESA_FMT == MESA_FORMAT_RG1616)
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-# define INIT_MONO_PIXEL(p, color) \
- ((color[1] << 16) | (color[0]))
-
-# define WRITE_RGBA(_x, _y, r, g, b, a) \
- PUT_VALUE(_x, _y, r)
-
-#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y ) \
- do { \
- GLuint p = GET_VALUE(_x, _y); \
- rgba[0] = p & 0xffff; \
- rgba[1] = (p >> 16) & 0xffff; \
- rgba[2] = 0; \
- rgba[3] = 0; \
- } while (0)
-
-#else
-#error SPANTMP_PIXEL_FMT must be set to a valid value!
-#endif
-
-
-
-/**
- ** Assembly routines.
- **/
-
-#if defined( USE_MMX_ASM ) || defined( USE_SSE_ASM )
-#include "x86/read_rgba_span_x86.h"
-#include "x86/common_x86_asm.h"
-#endif
-
-static void TAG(WriteRGBASpan)( struct gl_context *ctx,
- struct gl_renderbuffer *rb,
- GLuint n, GLint x, GLint y,
- const void *values, const GLubyte mask[] )
-{
- HW_WRITE_LOCK()
- {
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GLint x1;
- GLint n1;
- LOCAL_VARS;
-
- y = Y_FLIP(y);
-
- HW_WRITE_CLIPLOOP()
- {
- GLint i = 0;
- CLIPSPAN(x,y,n,x1,n1,i);
-
- if (DBG) fprintf(stderr, "WriteRGBASpan %d..%d (x1 %d)\n",
- (int)i, (int)n1, (int)x1);
-
- if (mask)
- {
- for (;n1>0;i++,x1++,n1--)
- if (mask[i])
- WRITE_RGBA( x1, y,
- rgba[i][0], rgba[i][1],
- rgba[i][2], rgba[i][3] );
- }
- else
- {
- for (;n1>0;i++,x1++,n1--)
- WRITE_RGBA( x1, y,
- rgba[i][0], rgba[i][1],
- rgba[i][2], rgba[i][3] );
- }
- }
- HW_ENDCLIPLOOP();
- }
- HW_WRITE_UNLOCK();
-}
-
-static void TAG(WriteRGBSpan)( struct gl_context *ctx,
- struct gl_renderbuffer *rb,
- GLuint n, GLint x, GLint y,
- const void *values, const GLubyte mask[] )
-{
- HW_WRITE_LOCK()
- {
- const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values;
- GLint x1;
- GLint n1;
- LOCAL_VARS;
-
- y = Y_FLIP(y);
-
- HW_WRITE_CLIPLOOP()
- {
- GLint i = 0;
- CLIPSPAN(x,y,n,x1,n1,i);
-
- if (DBG) fprintf(stderr, "WriteRGBSpan %d..%d (x1 %d)\n",
- (int)i, (int)n1, (int)x1);
-
- if (mask)
- {
- for (;n1>0;i++,x1++,n1--)
- if (mask[i])
- WRITE_RGBA( x1, y, rgb[i][0], rgb[i][1], rgb[i][2], 255 );
- }
- else
- {
- for (;n1>0;i++,x1++,n1--)
- WRITE_RGBA( x1, y, rgb[i][0], rgb[i][1], rgb[i][2], 255 );
- }
- }
- HW_ENDCLIPLOOP();
- }
- HW_WRITE_UNLOCK();
-}
-
-static void TAG(WriteRGBAPixels)( struct gl_context *ctx,
- struct gl_renderbuffer *rb,
- GLuint n, const GLint x[], const GLint y[],
- const void *values, const GLubyte mask[] )
-{
- HW_WRITE_LOCK()
- {
- const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values;
- GLint i;
- LOCAL_VARS;
-
- if (DBG) fprintf(stderr, "WriteRGBAPixels\n");
-
- HW_WRITE_CLIPLOOP()
- {
- if (mask)
- {
- for (i=0;i<n;i++)
- {
- if (mask[i]) {
- const int fy = Y_FLIP(y[i]);
- if (CLIPPIXEL(x[i],fy))
- WRITE_RGBA( x[i], fy,
- rgba[i][0], rgba[i][1],
- rgba[i][2], rgba[i][3] );
- }
- }
- }
- else
- {
- for (i=0;i<n;i++)
- {
- const int fy = Y_FLIP(y[i]);
- if (CLIPPIXEL(x[i],fy))
- WRITE_RGBA( x[i], fy,
- rgba[i][0], rgba[i][1],
- rgba[i][2], rgba[i][3] );
- }
- }
- }
- HW_ENDCLIPLOOP();
- }
- HW_WRITE_UNLOCK();
-}
-
-
-static void TAG(WriteMonoRGBASpan)( struct gl_context *ctx,
- struct gl_renderbuffer *rb,
- GLuint n, GLint x, GLint y,
- const void *value, const GLubyte mask[] )
-{
- HW_WRITE_LOCK()
- {
- const GLubyte *color = (const GLubyte *) value;
- GLint x1;
- GLint n1;
- LOCAL_VARS;
- INIT_MONO_PIXEL(p, color);
-
- y = Y_FLIP( y );
-
- if (DBG) fprintf(stderr, "WriteMonoRGBASpan\n");
-
- HW_WRITE_CLIPLOOP()
- {
- GLint i = 0;
- CLIPSPAN(x,y,n,x1,n1,i);
- if (mask)
- {
- for (;n1>0;i++,x1++,n1--)
- if (mask[i])
- WRITE_PIXEL( x1, y, p );
- }
- else
- {
- for (;n1>0;i++,x1++,n1--)
- WRITE_PIXEL( x1, y, p );
- }
- }
- HW_ENDCLIPLOOP();
- }
- HW_WRITE_UNLOCK();
-}
-
-
-static void TAG(WriteMonoRGBAPixels)( struct gl_context *ctx,
- struct gl_renderbuffer *rb,
- GLuint n,
- const GLint x[], const GLint y[],
- const void *value,
- const GLubyte mask[] )
-{
- HW_WRITE_LOCK()
- {
- const GLubyte *color = (const GLubyte *) value;
- GLint i;
- LOCAL_VARS;
- INIT_MONO_PIXEL(p, color);
-
- if (DBG) fprintf(stderr, "WriteMonoRGBAPixels\n");
-
- HW_WRITE_CLIPLOOP()
- {
- if (mask)
- {
- for (i=0;i<n;i++)
- if (mask[i]) {
- int fy = Y_FLIP(y[i]);
- if (CLIPPIXEL( x[i], fy ))
- WRITE_PIXEL( x[i], fy, p );
- }
- }
- else
- {
- for (i=0;i<n;i++) {
- int fy = Y_FLIP(y[i]);
- if (CLIPPIXEL( x[i], fy ))
- WRITE_PIXEL( x[i], fy, p );
- }
- }
- }
- HW_ENDCLIPLOOP();
- }
- HW_WRITE_UNLOCK();
-}
-
-
-static void TAG(ReadRGBASpan)( struct gl_context *ctx,
- struct gl_renderbuffer *rb,
- GLuint n, GLint x, GLint y, void *values)
-{
- HW_READ_LOCK()
- {
- GLubyte (*rgba)[4] = (GLubyte (*)[4]) values;
- GLint x1,n1;
- LOCAL_VARS;
-
- y = Y_FLIP(y);
-
- if (DBG) fprintf(stderr, "ReadRGBASpan\n");
-
- HW_READ_CLIPLOOP()
- {
- GLint i = 0;
- CLIPSPAN(x,y,n,x1,n1,i);
- for (;n1>0;i++,x1++,n1--)
- READ_RGBA( rgba[i], x1, y );
- }
- HW_ENDCLIPLOOP();
- }
- HW_READ_UNLOCK();
-}
-
-
-#if defined(GET_PTR) && \
- defined(USE_MMX_ASM) && \
- (((SPANTMP_PIXEL_FMT == GL_BGRA) && \
- (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)) || \
- ((SPANTMP_PIXEL_FMT == GL_RGB) && \
- (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5)))
-static void TAG2(ReadRGBASpan,_MMX)( struct gl_context *ctx,
- struct gl_renderbuffer *rb,
- GLuint n, GLint x, GLint y, void *values)
-{
-#ifndef USE_INNER_EMMS
- /* The EMMS instruction is directly in-lined here because using GCC's
- * built-in _mm_empty function was found to utterly destroy performance.
- */
- __asm__ __volatile__( "emms" );
-#endif
-
- HW_READ_LOCK()
- {
- GLubyte (*rgba)[4] = (GLubyte (*)[4]) values;
- GLint x1,n1;
- LOCAL_VARS;
-
- y = Y_FLIP(y);
-
- if (DBG) fprintf(stderr, "ReadRGBASpan\n");
-
- HW_READ_CLIPLOOP()
- {
- GLint i = 0;
- CLIPSPAN(x,y,n,x1,n1,i);
-
- {
- const void * src = GET_PTR( x1, y );
-#if (SPANTMP_PIXEL_FMT == GL_RGB) && \
- (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5)
- _generic_read_RGBA_span_RGB565_MMX( src, rgba[i], n1 );
-#else
- _generic_read_RGBA_span_BGRA8888_REV_MMX( src, rgba[i], n1 );
-#endif
- }
- }
- HW_ENDCLIPLOOP();
- }
- HW_READ_UNLOCK();
-#ifndef USE_INNER_EMMS
- __asm__ __volatile__( "emms" );
-#endif
-}
-#endif
-
-
-#if defined(GET_PTR) && \
- defined(USE_SSE_ASM) && \
- (SPANTMP_PIXEL_FMT == GL_BGRA) && \
- (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)
-static void TAG2(ReadRGBASpan,_SSE2)( struct gl_context *ctx,
- struct gl_renderbuffer *rb,
- GLuint n, GLint x, GLint y,
- void *values)
-{
- HW_READ_LOCK()
- {
- GLubyte (*rgba)[4] = (GLubyte (*)[4]) values;
- GLint x1,n1;
- LOCAL_VARS;
-
- y = Y_FLIP(y);
-
- if (DBG) fprintf(stderr, "ReadRGBASpan\n");
-
- HW_READ_CLIPLOOP()
- {
- GLint i = 0;
- CLIPSPAN(x,y,n,x1,n1,i);
-
- {
- const void * src = GET_PTR( x1, y );
- _generic_read_RGBA_span_BGRA8888_REV_SSE2( src, rgba[i], n1 );
- }
- }
- HW_ENDCLIPLOOP();
- }
- HW_READ_UNLOCK();
-}
-#endif
-
-#if defined(GET_PTR) && \
- defined(USE_SSE_ASM) && \
- (SPANTMP_PIXEL_FMT == GL_BGRA) && \
- (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)
-static void TAG2(ReadRGBASpan,_SSE)( struct gl_context *ctx,
- struct gl_renderbuffer *rb,
- GLuint n, GLint x, GLint y,
- void *values)
-{
-#ifndef USE_INNER_EMMS
- /* The EMMS instruction is directly in-lined here because using GCC's
- * built-in _mm_empty function was found to utterly destroy performance.
- */
- __asm__ __volatile__( "emms" );
-#endif
-
- HW_READ_LOCK()
- {
- GLubyte (*rgba)[4] = (GLubyte (*)[4]) values;
- GLint x1,n1;
- LOCAL_VARS;
-
- y = Y_FLIP(y);
-
- if (DBG) fprintf(stderr, "ReadRGBASpan\n");
-
- HW_READ_CLIPLOOP()
- {
- GLint i = 0;
- CLIPSPAN(x,y,n,x1,n1,i);
-
- {
- const void * src = GET_PTR( x1, y );
- _generic_read_RGBA_span_BGRA8888_REV_SSE( src, rgba[i], n1 );
- }
- }
- HW_ENDCLIPLOOP();
- }
- HW_READ_UNLOCK();
-#ifndef USE_INNER_EMMS
- __asm__ __volatile__( "emms" );
-#endif
-}
-#endif
-
-
-static void TAG(ReadRGBAPixels)( struct gl_context *ctx,
- struct gl_renderbuffer *rb,
- GLuint n, const GLint x[], const GLint y[],
- void *values )
-{
- HW_READ_LOCK()
- {
- GLubyte (*rgba)[4] = (GLubyte (*)[4]) values;
- GLint i;
- LOCAL_VARS;
-
- if (DBG) fprintf(stderr, "ReadRGBAPixels\n");
-
- HW_READ_CLIPLOOP()
- {
- for (i=0;i<n;i++) {
- int fy = Y_FLIP( y[i] );
- if (CLIPPIXEL( x[i], fy ))
- READ_RGBA( rgba[i], x[i], fy );
- }
- }
- HW_ENDCLIPLOOP();
- }
- HW_READ_UNLOCK();
-}
-
-static void TAG(InitPointers)(struct gl_renderbuffer *rb)
-{
- rb->PutRow = TAG(WriteRGBASpan);
- rb->PutRowRGB = TAG(WriteRGBSpan);
- rb->PutMonoRow = TAG(WriteMonoRGBASpan);
- rb->PutValues = TAG(WriteRGBAPixels);
- rb->PutMonoValues = TAG(WriteMonoRGBAPixels);
- rb->GetValues = TAG(ReadRGBAPixels);
-
-#if defined(GET_PTR)
-#if defined(USE_SSE_ASM) && \
- (SPANTMP_PIXEL_FMT == GL_BGRA) && \
- (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)
- if ( cpu_has_xmm2 ) {
- if (DBG) fprintf( stderr, "Using %s version of GetRow\n", "SSE2" );
- rb->GetRow = TAG2(ReadRGBASpan, _SSE2);
- }
- else
-#endif
-#if defined(USE_SSE_ASM) && \
- (SPANTMP_PIXEL_FMT == GL_BGRA) && \
- (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)
- if ( cpu_has_xmm ) {
- if (DBG) fprintf( stderr, "Using %s version of GetRow\n", "SSE" );
- rb->GetRow = TAG2(ReadRGBASpan, _SSE);
- }
- else
-#endif
-#if defined(USE_MMX_ASM) && \
- (((SPANTMP_PIXEL_FMT == GL_BGRA) && \
- (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)) || \
- ((SPANTMP_PIXEL_FMT == GL_RGB) && \
- (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5)))
- if ( cpu_has_mmx ) {
- if (DBG) fprintf( stderr, "Using %s version of GetRow\n", "MMX" );
- rb->GetRow = TAG2(ReadRGBASpan, _MMX);
- }
- else
-#endif
-#endif /* GET_PTR */
- {
- if (DBG) fprintf( stderr, "Using %s version of GetRow\n", "C" );
- rb->GetRow = TAG(ReadRGBASpan);
- }
-
-}
-
-
-#undef INIT_MONO_PIXEL
-#undef WRITE_PIXEL
-#undef WRITE_RGBA
-#undef READ_RGBA
-#undef TAG
-#undef TAG2
-#undef GET_VALUE
-#undef PUT_VALUE
-#undef GET_PTR
-#undef SPANTMP_PIXEL_FMT
-#undef SPANTMP_PIXEL_TYPE
-#undef SPANTMP_MESA_FMT
+/* + * Copyright 2000-2001 VA Linux Systems, Inc. + * (C) Copyright IBM Corporation 2004 + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * on the rights to use, copy, modify, merge, publish, distribute, sub + * license, and/or sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file spantmp2.h + * + * Template file of span read / write functions. + * + * \author Keith Whitwell <keithw@tungstengraphics.com> + * \author Gareth Hughes <gareth@nvidia.com> + * \author Ian Romanick <idr@us.ibm.com> + */ + +#include "main/colormac.h" +#include "spantmp_common.h" + +#ifndef DBG +#define DBG 0 +#endif + +#ifndef HW_READ_CLIPLOOP +#define HW_READ_CLIPLOOP() HW_CLIPLOOP() +#endif + +#ifndef HW_WRITE_CLIPLOOP +#define HW_WRITE_CLIPLOOP() HW_CLIPLOOP() +#endif + +#if (SPANTMP_PIXEL_FMT == GL_RGB) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5) + +/** + ** GL_RGB, GL_UNSIGNED_SHORT_5_6_5 + **/ + +#ifndef GET_VALUE +#ifndef GET_PTR +#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch) +#endif + +#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) +#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) +#endif /* GET_VALUE */ + +#define INIT_MONO_PIXEL(p, color) \ + p = PACK_COLOR_565( color[0], color[1], color[2] ) + +#define WRITE_RGBA( _x, _y, r, g, b, a ) \ + PUT_VALUE(_x, _y, ((((int)r & 0xf8) << 8) | \ + (((int)g & 0xfc) << 3) | \ + (((int)b & 0xf8) >> 3))) \ + +#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p) + +#define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLushort p = GET_VALUE(_x, _y); \ + rgba[0] = ((p >> 8) & 0xf8) * 255 / 0xf8; \ + rgba[1] = ((p >> 3) & 0xfc) * 255 / 0xfc; \ + rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \ + rgba[3] = 0xff; \ + } while (0) + +#elif (SPANTMP_PIXEL_FMT == GL_RGB) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5_REV) + +/** + ** GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV + **/ + +#ifndef GET_VALUE +#ifndef GET_PTR +#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch) +#endif + +#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) +#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) +#endif /* GET_VALUE */ + +#define INIT_MONO_PIXEL(p, color) \ + p = PACK_COLOR_565_REV( color[0], color[1], color[2] ) + +#define WRITE_RGBA( _x, _y, r, g, b, a ) \ + PUT_VALUE(_x, _y, PACK_COLOR_565_REV( r, g, b )) + +#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p) + +#define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLushort p = GET_VALUE(_x, _y); \ + p = p << 8 | p >> 8; \ + rgba[0] = ((p >> 8) & 0xf8) * 255 / 0xf8; \ + rgba[1] = ((p >> 3) & 0xfc) * 255 / 0xfc; \ + rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \ + rgba[3] = 0xff; \ + } while (0) + +#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_4_4_4_4) + +/** + ** GL_BGRA, GL_UNSIGNED_SHORT_4_4_4_4 + **/ + +#ifndef GET_VALUE +#ifndef GET_PTR +#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch) +#endif + +#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) +#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) +#endif /* GET_VALUE */ + +#define INIT_MONO_PIXEL(p, color) \ + p = PACK_COLOR_4444_REV(color[3], color[0], color[1], color[2]) + +#define WRITE_RGBA( _x, _y, r, g, b, a ) \ + PUT_VALUE(_x, _y, PACK_COLOR_4444_REV(a, r, g, b)) \ + +#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p) + +#define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLushort p = GET_VALUE(_x, _y); \ + rgba[0] = ((p >> 0) & 0xf) * 0x11; \ + rgba[1] = ((p >> 12) & 0xf) * 0x11; \ + rgba[2] = ((p >> 4) & 0xf) * 0x11; \ + rgba[3] = ((p >> 8) & 0xf) * 0x11; \ + } while (0) + + +#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_4_4_4_4_REV) + +/** + ** GL_BGRA, GL_UNSIGNED_SHORT_4_4_4_4_REV + **/ + +#ifndef GET_VALUE +#ifndef GET_PTR +#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch) +#endif + +#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) +#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) +#endif /* GET_VALUE */ + +#define INIT_MONO_PIXEL(p, color) \ + p = PACK_COLOR_4444(color[3], color[0], color[1], color[2]) + +#define WRITE_RGBA( _x, _y, r, g, b, a ) \ + PUT_VALUE(_x, _y, PACK_COLOR_4444(a, r, g, b)) \ + +#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p) + +#define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLushort p = GET_VALUE(_x, _y); \ + rgba[0] = ((p >> 8) & 0xf) * 0x11; \ + rgba[1] = ((p >> 4) & 0xf) * 0x11; \ + rgba[2] = ((p >> 0) & 0xf) * 0x11; \ + rgba[3] = ((p >> 12) & 0xf) * 0x11; \ + } while (0) + + +#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_1_5_5_5_REV) + +/** + ** GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV + **/ + +#ifndef GET_VALUE +#ifndef GET_PTR +#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch) +#endif + +#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) +#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) +#endif /* GET_VALUE */ + +#define INIT_MONO_PIXEL(p, color) \ + p = PACK_COLOR_1555(color[3], color[0], color[1], color[2]) + +#define WRITE_RGBA( _x, _y, r, g, b, a ) \ + PUT_VALUE(_x, _y, PACK_COLOR_1555(a, r, g, b)) \ + +#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p) + +#define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLushort p = GET_VALUE(_x, _y); \ + rgba[0] = ((p >> 7) & 0xf8) * 255 / 0xf8; \ + rgba[1] = ((p >> 2) & 0xf8) * 255 / 0xf8; \ + rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \ + rgba[3] = ((p >> 15) & 0x1) * 0xff; \ + } while (0) + +#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_1_5_5_5) + +/** + ** GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5 + **/ + +#ifndef GET_VALUE +#ifndef GET_PTR +#define GET_PTR(_x, _y) (buf + (_x) * 2 + (_y) * pitch) +#endif + +#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y)) +#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v) +#endif /* GET_VALUE */ + +#define INIT_MONO_PIXEL(p, color) \ + p = PACK_COLOR_1555_REV(color[3], color[0], color[1], color[2]) + +#define WRITE_RGBA( _x, _y, r, g, b, a ) \ + PUT_VALUE(_x, _y, PACK_COLOR_1555_REV(a, r, g, b)) \ + +#define WRITE_PIXEL( _x, _y, p ) PUT_VALUE(_x, _y, p) + +#define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLushort p = GET_VALUE(_x, _y); \ + p = p << 8 | p >> 8; \ + rgba[0] = ((p >> 7) & 0xf8) * 255 / 0xf8; \ + rgba[1] = ((p >> 2) & 0xf8) * 255 / 0xf8; \ + rgba[2] = ((p << 3) & 0xf8) * 255 / 0xf8; \ + rgba[3] = ((p >> 15) & 0x1) * 0xff; \ + } while (0) + +#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV) + +/** + ** GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV + **/ + +#ifndef GET_VALUE +#ifndef GET_PTR +#define GET_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch) +#endif + +#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y)) +#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v) +#endif /* GET_VALUE */ + +# define INIT_MONO_PIXEL(p, color) \ + p = PACK_COLOR_8888(color[3], color[0], color[1], color[2]) + +# define WRITE_RGBA(_x, _y, r, g, b, a) \ + PUT_VALUE(_x, _y, ((r << 16) | \ + (g << 8) | \ + (b << 0) | \ + (a << 24))) + +#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p) + +# if defined( USE_X86_ASM ) +# define READ_RGBA(rgba, _x, _y) \ + do { \ + GLuint p = GET_VALUE(_x, _y); \ + __asm__ __volatile__( "bswap %0; rorl $8, %0" \ + : "=r" (p) : "0" (p) ); \ + ((GLuint *)rgba)[0] = p; \ + } while (0) +# elif defined( MESA_BIG_ENDIAN ) + /* On PowerPC with GCC 3.4.2 the shift madness below becomes a single + * rotlwi instruction. It also produces good code on SPARC. + */ +# define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLuint p = GET_VALUE(_x, _y); \ + GLuint t = p; \ + *((uint32_t *) rgba) = (t >> 24) | (p << 8); \ + } while (0) +# else +# define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLuint p = GET_VALUE(_x, _y); \ + rgba[0] = (p >> 16) & 0xff; \ + rgba[1] = (p >> 8) & 0xff; \ + rgba[2] = (p >> 0) & 0xff; \ + rgba[3] = (p >> 24) & 0xff; \ + } while (0) +# endif + +#elif (SPANTMP_PIXEL_FMT == GL_BGRA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8) + +/** + ** GL_BGRA, GL_UNSIGNED_INT_8_8_8_8 + **/ + +#ifndef GET_VALUE +#ifndef GET_PTR +#define GET_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch) +#endif + +#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y)) +#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v) +#endif /* GET_VALUE */ + +# define INIT_MONO_PIXEL(p, color) \ + p = PACK_COLOR_8888(color[2], color[1], color[0], color[3]) + +# define WRITE_RGBA(_x, _y, r, g, b, a) \ + PUT_VALUE(_x, _y, ((r << 8) | \ + (g << 16) | \ + (b << 24) | \ + (a << 0))) + +#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p) + +# if defined( USE_X86_ASM ) +# define READ_RGBA(rgba, _x, _y) \ + do { \ + GLuint p = GET_VALUE(_x, _y); \ + __asm__ __volatile__( "rorl $8, %0" \ + : "=r" (p) : "0" (p) ); \ + ((GLuint *)rgba)[0] = p; \ + } while (0) +# elif defined( MESA_BIG_ENDIAN ) + /* On PowerPC with GCC 3.4.2 the shift madness below becomes a single + * rotlwi instruction. It also produces good code on SPARC. + */ +# define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLuint p = CPU_TO_LE32(GET_VALUE(_x, _y)); \ + GLuint t = p; \ + *((uint32_t *) rgba) = (t >> 24) | (p << 8); \ + } while (0) +# else +# define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLuint p = GET_VALUE(_x, _y); \ + rgba[0] = (p >> 8) & 0xff; \ + rgba[1] = (p >> 16) & 0xff; \ + rgba[2] = (p >> 24) & 0xff; \ + rgba[3] = (p >> 0) & 0xff; \ + } while (0) +# endif + +#elif (SPANTMP_PIXEL_FMT == GL_BGR) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV) + +/** + ** GL_BGR, GL_UNSIGNED_INT_8_8_8_8_REV + ** + ** This is really for MESA_FORMAT_XRGB8888. The spantmp code needs to be + ** kicked to the curb, and we need to just code-gen this. + **/ + +#ifndef GET_VALUE +#ifndef GET_PTR +#define GET_PTR(_x, _y) ( buf + (_x) * 4 + (_y) * pitch) +#endif + +#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y)) +#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v) +#endif /* GET_VALUE */ + +# define INIT_MONO_PIXEL(p, color) \ + p = PACK_COLOR_8888(0xff, color[0], color[1], color[2]) + +# define WRITE_RGBA(_x, _y, r, g, b, a) \ + PUT_VALUE(_x, _y, ((r << 16) | \ + (g << 8) | \ + (b << 0) | \ + (0xff << 24))) + +#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p) + +# if defined( USE_X86_ASM ) +# define READ_RGBA(rgba, _x, _y) \ + do { \ + GLuint p = GET_VALUE(_x, _y); \ + __asm__ __volatile__( "bswap %0; rorl $8, %0" \ + : "=r" (p) : "0" (p) ); \ + ((GLuint *)rgba)[0] = p | 0xff000000; \ + } while (0) +# elif defined( MESA_BIG_ENDIAN ) + /* On PowerPC with GCC 3.4.2 the shift madness below becomes a single + * rotlwi instruction. It also produces good code on SPARC. + */ +# define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLuint p = GET_VALUE(_x, _y); \ + *((uint32_t *) rgba) = (p << 8) | 0xff; \ + } while (0) +# else +# define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLuint p = GET_VALUE(_x, _y); \ + rgba[0] = (p >> 16) & 0xff; \ + rgba[1] = (p >> 8) & 0xff; \ + rgba[2] = (p >> 0) & 0xff; \ + rgba[3] = 0xff; \ + } while (0) +# endif + +#elif (SPANTMP_PIXEL_FMT == GL_ALPHA) && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_BYTE) + +/** + ** GL_ALPHA, GL_UNSIGNED_BYTE + **/ + +#ifndef GET_VALUE +#ifndef GET_PTR +#define GET_PTR(_x, _y) ( buf + (_x) + (_y) * pitch) +#endif + +#define GET_VALUE(_x, _y) *(volatile GLubyte *)(GET_PTR(_x, _y)) +#define PUT_VALUE(_x, _y, _v) *(volatile GLubyte *)(GET_PTR(_x, _y)) = (_v) +#endif /* GET_VALUE */ + +# define INIT_MONO_PIXEL(p, color) \ + p = color[3] + +# define WRITE_RGBA(_x, _y, r, g, b, a) \ + PUT_VALUE(_x, _y, a | (r & 0 /* quiet warnings */)) + +#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p) + +#define READ_RGBA( rgba, _x, _y ) \ + do { \ + GLubyte p = GET_VALUE(_x, _y); \ + rgba[0] = 0; \ + rgba[1] = 0; \ + rgba[2] = 0; \ + rgba[3] = p; \ + } while (0) + +#else +#error SPANTMP_PIXEL_FMT must be set to a valid value! +#endif + + + +/** + ** Assembly routines. + **/ + +#if defined( USE_MMX_ASM ) || defined( USE_SSE_ASM ) +#include "x86/read_rgba_span_x86.h" +#include "x86/common_x86_asm.h" +#endif + +static void TAG(WriteRGBASpan)( struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, + const void *values, const GLubyte mask[] ) +{ + HW_WRITE_LOCK() + { + const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values; + GLint x1; + GLint n1; + LOCAL_VARS; + + y = Y_FLIP(y); + + HW_WRITE_CLIPLOOP() + { + GLint i = 0; + CLIPSPAN(x,y,n,x1,n1,i); + + if (DBG) fprintf(stderr, "WriteRGBASpan %d..%d (x1 %d)\n", + (int)i, (int)n1, (int)x1); + + if (mask) + { + for (;n1>0;i++,x1++,n1--) + if (mask[i]) + WRITE_RGBA( x1, y, + rgba[i][0], rgba[i][1], + rgba[i][2], rgba[i][3] ); + } + else + { + for (;n1>0;i++,x1++,n1--) + WRITE_RGBA( x1, y, + rgba[i][0], rgba[i][1], + rgba[i][2], rgba[i][3] ); + } + } + HW_ENDCLIPLOOP(); + } + HW_WRITE_UNLOCK(); +} + +static void TAG(WriteRGBSpan)( struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, + const void *values, const GLubyte mask[] ) +{ + HW_WRITE_LOCK() + { + const GLubyte (*rgb)[3] = (const GLubyte (*)[3]) values; + GLint x1; + GLint n1; + LOCAL_VARS; + + y = Y_FLIP(y); + + HW_WRITE_CLIPLOOP() + { + GLint i = 0; + CLIPSPAN(x,y,n,x1,n1,i); + + if (DBG) fprintf(stderr, "WriteRGBSpan %d..%d (x1 %d)\n", + (int)i, (int)n1, (int)x1); + + if (mask) + { + for (;n1>0;i++,x1++,n1--) + if (mask[i]) + WRITE_RGBA( x1, y, rgb[i][0], rgb[i][1], rgb[i][2], 255 ); + } + else + { + for (;n1>0;i++,x1++,n1--) + WRITE_RGBA( x1, y, rgb[i][0], rgb[i][1], rgb[i][2], 255 ); + } + } + HW_ENDCLIPLOOP(); + } + HW_WRITE_UNLOCK(); +} + +static void TAG(WriteRGBAPixels)( struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, const GLint x[], const GLint y[], + const void *values, const GLubyte mask[] ) +{ + HW_WRITE_LOCK() + { + const GLubyte (*rgba)[4] = (const GLubyte (*)[4]) values; + GLint i; + LOCAL_VARS; + + if (DBG) fprintf(stderr, "WriteRGBAPixels\n"); + + HW_WRITE_CLIPLOOP() + { + if (mask) + { + for (i=0;i<n;i++) + { + if (mask[i]) { + const int fy = Y_FLIP(y[i]); + if (CLIPPIXEL(x[i],fy)) + WRITE_RGBA( x[i], fy, + rgba[i][0], rgba[i][1], + rgba[i][2], rgba[i][3] ); + } + } + } + else + { + for (i=0;i<n;i++) + { + const int fy = Y_FLIP(y[i]); + if (CLIPPIXEL(x[i],fy)) + WRITE_RGBA( x[i], fy, + rgba[i][0], rgba[i][1], + rgba[i][2], rgba[i][3] ); + } + } + } + HW_ENDCLIPLOOP(); + } + HW_WRITE_UNLOCK(); +} + + +static void TAG(WriteMonoRGBASpan)( struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, + const void *value, const GLubyte mask[] ) +{ + HW_WRITE_LOCK() + { + const GLubyte *color = (const GLubyte *) value; + GLint x1; + GLint n1; + LOCAL_VARS; + INIT_MONO_PIXEL(p, color); + + y = Y_FLIP( y ); + + if (DBG) fprintf(stderr, "WriteMonoRGBASpan\n"); + + HW_WRITE_CLIPLOOP() + { + GLint i = 0; + CLIPSPAN(x,y,n,x1,n1,i); + if (mask) + { + for (;n1>0;i++,x1++,n1--) + if (mask[i]) + WRITE_PIXEL( x1, y, p ); + } + else + { + for (;n1>0;i++,x1++,n1--) + WRITE_PIXEL( x1, y, p ); + } + } + HW_ENDCLIPLOOP(); + } + HW_WRITE_UNLOCK(); +} + + +static void TAG(WriteMonoRGBAPixels)( struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, + const GLint x[], const GLint y[], + const void *value, + const GLubyte mask[] ) +{ + HW_WRITE_LOCK() + { + const GLubyte *color = (const GLubyte *) value; + GLint i; + LOCAL_VARS; + INIT_MONO_PIXEL(p, color); + + if (DBG) fprintf(stderr, "WriteMonoRGBAPixels\n"); + + HW_WRITE_CLIPLOOP() + { + if (mask) + { + for (i=0;i<n;i++) + if (mask[i]) { + int fy = Y_FLIP(y[i]); + if (CLIPPIXEL( x[i], fy )) + WRITE_PIXEL( x[i], fy, p ); + } + } + else + { + for (i=0;i<n;i++) { + int fy = Y_FLIP(y[i]); + if (CLIPPIXEL( x[i], fy )) + WRITE_PIXEL( x[i], fy, p ); + } + } + } + HW_ENDCLIPLOOP(); + } + HW_WRITE_UNLOCK(); +} + + +static void TAG(ReadRGBASpan)( struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, void *values) +{ + HW_READ_LOCK() + { + GLubyte (*rgba)[4] = (GLubyte (*)[4]) values; + GLint x1,n1; + LOCAL_VARS; + + y = Y_FLIP(y); + + if (DBG) fprintf(stderr, "ReadRGBASpan\n"); + + HW_READ_CLIPLOOP() + { + GLint i = 0; + CLIPSPAN(x,y,n,x1,n1,i); + for (;n1>0;i++,x1++,n1--) + READ_RGBA( rgba[i], x1, y ); + } + HW_ENDCLIPLOOP(); + } + HW_READ_UNLOCK(); +} + + +#if defined(GET_PTR) && \ + defined(USE_MMX_ASM) && \ + (((SPANTMP_PIXEL_FMT == GL_BGRA) && \ + (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)) || \ + ((SPANTMP_PIXEL_FMT == GL_RGB) && \ + (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5))) +static void TAG2(ReadRGBASpan,_MMX)( struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, void *values) +{ +#ifndef USE_INNER_EMMS + /* The EMMS instruction is directly in-lined here because using GCC's + * built-in _mm_empty function was found to utterly destroy performance. + */ + __asm__ __volatile__( "emms" ); +#endif + + HW_READ_LOCK() + { + GLubyte (*rgba)[4] = (GLubyte (*)[4]) values; + GLint x1,n1; + LOCAL_VARS; + + y = Y_FLIP(y); + + if (DBG) fprintf(stderr, "ReadRGBASpan\n"); + + HW_READ_CLIPLOOP() + { + GLint i = 0; + CLIPSPAN(x,y,n,x1,n1,i); + + { + const void * src = GET_PTR( x1, y ); +#if (SPANTMP_PIXEL_FMT == GL_RGB) && \ + (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5) + _generic_read_RGBA_span_RGB565_MMX( src, rgba[i], n1 ); +#else + _generic_read_RGBA_span_BGRA8888_REV_MMX( src, rgba[i], n1 ); +#endif + } + } + HW_ENDCLIPLOOP(); + } + HW_READ_UNLOCK(); +#ifndef USE_INNER_EMMS + __asm__ __volatile__( "emms" ); +#endif +} +#endif + + +#if defined(GET_PTR) && \ + defined(USE_SSE_ASM) && \ + (SPANTMP_PIXEL_FMT == GL_BGRA) && \ + (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV) +static void TAG2(ReadRGBASpan,_SSE2)( struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, + void *values) +{ + HW_READ_LOCK() + { + GLubyte (*rgba)[4] = (GLubyte (*)[4]) values; + GLint x1,n1; + LOCAL_VARS; + + y = Y_FLIP(y); + + if (DBG) fprintf(stderr, "ReadRGBASpan\n"); + + HW_READ_CLIPLOOP() + { + GLint i = 0; + CLIPSPAN(x,y,n,x1,n1,i); + + { + const void * src = GET_PTR( x1, y ); + _generic_read_RGBA_span_BGRA8888_REV_SSE2( src, rgba[i], n1 ); + } + } + HW_ENDCLIPLOOP(); + } + HW_READ_UNLOCK(); +} +#endif + +#if defined(GET_PTR) && \ + defined(USE_SSE_ASM) && \ + (SPANTMP_PIXEL_FMT == GL_BGRA) && \ + (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV) +static void TAG2(ReadRGBASpan,_SSE)( struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, + void *values) +{ +#ifndef USE_INNER_EMMS + /* The EMMS instruction is directly in-lined here because using GCC's + * built-in _mm_empty function was found to utterly destroy performance. + */ + __asm__ __volatile__( "emms" ); +#endif + + HW_READ_LOCK() + { + GLubyte (*rgba)[4] = (GLubyte (*)[4]) values; + GLint x1,n1; + LOCAL_VARS; + + y = Y_FLIP(y); + + if (DBG) fprintf(stderr, "ReadRGBASpan\n"); + + HW_READ_CLIPLOOP() + { + GLint i = 0; + CLIPSPAN(x,y,n,x1,n1,i); + + { + const void * src = GET_PTR( x1, y ); + _generic_read_RGBA_span_BGRA8888_REV_SSE( src, rgba[i], n1 ); + } + } + HW_ENDCLIPLOOP(); + } + HW_READ_UNLOCK(); +#ifndef USE_INNER_EMMS + __asm__ __volatile__( "emms" ); +#endif +} +#endif + + +static void TAG(ReadRGBAPixels)( struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, const GLint x[], const GLint y[], + void *values ) +{ + HW_READ_LOCK() + { + GLubyte (*rgba)[4] = (GLubyte (*)[4]) values; + GLint i; + LOCAL_VARS; + + if (DBG) fprintf(stderr, "ReadRGBAPixels\n"); + + HW_READ_CLIPLOOP() + { + for (i=0;i<n;i++) { + int fy = Y_FLIP( y[i] ); + if (CLIPPIXEL( x[i], fy )) + READ_RGBA( rgba[i], x[i], fy ); + } + } + HW_ENDCLIPLOOP(); + } + HW_READ_UNLOCK(); +} + +static void TAG(InitPointers)(struct gl_renderbuffer *rb) +{ + rb->PutRow = TAG(WriteRGBASpan); + rb->PutRowRGB = TAG(WriteRGBSpan); + rb->PutMonoRow = TAG(WriteMonoRGBASpan); + rb->PutValues = TAG(WriteRGBAPixels); + rb->PutMonoValues = TAG(WriteMonoRGBAPixels); + rb->GetValues = TAG(ReadRGBAPixels); + +#if defined(GET_PTR) +#if defined(USE_SSE_ASM) && \ + (SPANTMP_PIXEL_FMT == GL_BGRA) && \ + (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV) + if ( cpu_has_xmm2 ) { + if (DBG) fprintf( stderr, "Using %s version of GetRow\n", "SSE2" ); + rb->GetRow = TAG2(ReadRGBASpan, _SSE2); + } + else +#endif +#if defined(USE_SSE_ASM) && \ + (SPANTMP_PIXEL_FMT == GL_BGRA) && \ + (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV) + if ( cpu_has_xmm ) { + if (DBG) fprintf( stderr, "Using %s version of GetRow\n", "SSE" ); + rb->GetRow = TAG2(ReadRGBASpan, _SSE); + } + else +#endif +#if defined(USE_MMX_ASM) && \ + (((SPANTMP_PIXEL_FMT == GL_BGRA) && \ + (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_INT_8_8_8_8_REV)) || \ + ((SPANTMP_PIXEL_FMT == GL_RGB) && \ + (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5))) + if ( cpu_has_mmx ) { + if (DBG) fprintf( stderr, "Using %s version of GetRow\n", "MMX" ); + rb->GetRow = TAG2(ReadRGBASpan, _MMX); + } + else +#endif +#endif /* GET_PTR */ + { + if (DBG) fprintf( stderr, "Using %s version of GetRow\n", "C" ); + rb->GetRow = TAG(ReadRGBASpan); + } + +} + + +#undef INIT_MONO_PIXEL +#undef WRITE_PIXEL +#undef WRITE_RGBA +#undef READ_RGBA +#undef TAG +#undef TAG2 +#undef GET_VALUE +#undef PUT_VALUE +#undef GET_PTR +#undef SPANTMP_PIXEL_FMT +#undef SPANTMP_PIXEL_TYPE diff --git a/mesalib/src/mesa/drivers/windows/fx/fx.rc b/mesalib/src/mesa/drivers/windows/fx/fx.rc deleted file mode 100644 index a9aedfc97..000000000 --- a/mesalib/src/mesa/drivers/windows/fx/fx.rc +++ /dev/null @@ -1,39 +0,0 @@ -#include <windows.h>
-
-#define PRODNAME "Mesa 6.x"
-#define CONTACTSTR "http://www.mesa3d.org"
-#define HWSTR "3dfx Voodoo Graphics, Voodoo Rush, Voodoo^2, Voodoo Banshee, Velocity 100/200, Voodoo3, Voodoo4, Voodoo5"
-#define COPYRIGHTSTR "Copyright \251 Brian E. Paul"
-
-#define VERSIONSTR "6.3.0.1"
-#define MANVERSION 6
-#define MANREVISION 3
-#define BUILD_NUMBER 1
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION MANVERSION, MANREVISION, 0, BUILD_NUMBER
- PRODUCTVERSION MANVERSION, MANREVISION, 0, BUILD_NUMBER
- FILEFLAGSMASK 0x0030003FL
-
- FILEOS VOS_DOS_WINDOWS32
- FILETYPE VFT_DRV
- FILESUBTYPE VFT2_DRV_INSTALLABLE
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904E4"
- BEGIN
- VALUE "FileDescription", PRODNAME
- VALUE "FileVersion", VERSIONSTR
- VALUE "LegalCopyright", COPYRIGHTSTR
- VALUE "ProductName", PRODNAME
- VALUE "Graphics Subsystem", HWSTR
- VALUE "Contact", CONTACTSTR
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- /* the following line should be extended for localized versions */
- VALUE "Translation", 0x409, 1252
- END
-END
diff --git a/mesalib/src/mesa/drivers/windows/fx/fxopengl.def b/mesalib/src/mesa/drivers/windows/fx/fxopengl.def deleted file mode 100644 index 8714ae983..000000000 --- a/mesalib/src/mesa/drivers/windows/fx/fxopengl.def +++ /dev/null @@ -1,953 +0,0 @@ -LIBRARY OpenGL32
-DESCRIPTION "Mesa 5.1"
-EXPORTS
- glAccum
- glActiveStencilFaceEXT
- glActiveTexture
- glActiveTextureARB
- glAlphaFunc
- glAreProgramsResidentNV
- glAreTexturesResident
- glAreTexturesResidentEXT
- glArrayElement
- glArrayElementEXT
- glBegin
- glBeginQueryARB
- glBindBufferARB
- glBindProgramARB
- glBindProgramNV
- glBindTexture
- glBindTextureEXT
- glBitmap
-;glBlendColor
-;glBlendColorEXT
- glBlendEquation
- glBlendEquationEXT
- glBlendFunc
- glBlendFuncSeparate
- glBlendFuncSeparateEXT
- glBlendFuncSeparateINGR
- glBufferDataARB
- glBufferSubDataARB
- glCallList
- glCallLists
- glClear
- glClearAccum
- glClearColor
- glClearDepth
- glClearIndex
- glClearStencil
- glClientActiveTexture
- glClientActiveTextureARB
- glClipPlane
- glColorMask
- glColorMaterial
- glColorPointer
- glColorPointerEXT
- glColorSubTable
- glColorSubTableEXT
- glColorTable
- glColorTableEXT
- glColorTableParameterfv
- glColorTableParameterfvSGI
- glColorTableParameteriv
- glColorTableParameterivSGI
- glColorTableSGI
- glColor3b
- glColor3bv
- glColor3d
- glColor3dv
- glColor3f
- glColor3fv
- glColor3i
- glColor3iv
- glColor3s
- glColor3sv
- glColor3ub
- glColor3ubv
- glColor3ui
- glColor3uiv
- glColor3us
- glColor3usv
- glColor4b
- glColor4bv
- glColor4d
- glColor4dv
- glColor4f
- glColor4fv
- glColor4i
- glColor4iv
- glColor4s
- glColor4sv
- glColor4ub
- glColor4ubv
- glColor4ui
- glColor4uiv
- glColor4us
- glColor4usv
- glCombinerInputNV
- glCombinerOutputNV
- glCombinerParameterfNV
- glCombinerParameterfvNV
- glCombinerParameteriNV
- glCombinerParameterivNV
- glCompressedTexImage1D
- glCompressedTexImage1DARB
- glCompressedTexImage2D
- glCompressedTexImage2DARB
- glCompressedTexImage3D
- glCompressedTexImage3DARB
- glCompressedTexSubImage1D
- glCompressedTexSubImage1DARB
- glCompressedTexSubImage2D
- glCompressedTexSubImage2DARB
- glCompressedTexSubImage3D
- glCompressedTexSubImage3DARB
- glConvolutionFilter1D
- glConvolutionFilter1DEXT
- glConvolutionFilter2D
- glConvolutionFilter2DEXT
- glConvolutionParameterf
- glConvolutionParameterfEXT
- glConvolutionParameterfv
- glConvolutionParameterfvEXT
- glConvolutionParameteri
- glConvolutionParameteriEXT
- glConvolutionParameteriv
- glConvolutionParameterivEXT
- glCopyColorSubTable
- glCopyColorSubTableEXT
- glCopyColorTable
- glCopyColorTableSGI
- glCopyConvolutionFilter1D
- glCopyConvolutionFilter1DEXT
- glCopyConvolutionFilter2D
- glCopyConvolutionFilter2DEXT
- glCopyPixels
- glCopyTexImage1D
- glCopyTexImage1DEXT
- glCopyTexImage2D
- glCopyTexImage2DEXT
- glCopyTexSubImage1D
- glCopyTexSubImage1DEXT
- glCopyTexSubImage2D
- glCopyTexSubImage2DEXT
- glCopyTexSubImage3D
- glCopyTexSubImage3DEXT
- glCullFace
- glDeleteBuffersARB
- glDeleteFencesNV
- glDeleteLists
- glDeleteProgramsARB
- glDeleteProgramsNV
- glDeleteQueriesARB
- glDeleteTextures
- glDeleteTexturesEXT
- glDepthBoundsEXT
- glDepthFunc
- glDepthMask
- glDepthRange
- glDetailTexFuncSGIS
- glDisable
- glDisableClientState
- glDisableVertexAttribArrayARB
- glDrawArrays
- glDrawArraysEXT
- glDrawBuffer
- glDrawElements
- glDrawPixels
- glDrawRangeElements
- glDrawRangeElementsEXT
- glEdgeFlag
- glEdgeFlagPointer
- glEdgeFlagPointerEXT
- glEdgeFlagv
- glEnable
- glEnableClientState
- glEnableVertexAttribArrayARB
- glEnd
- glEndList
- glEndQueryARB
- glEvalCoord1d
- glEvalCoord1dv
- glEvalCoord1f
- glEvalCoord1fv
- glEvalCoord2d
- glEvalCoord2dv
- glEvalCoord2f
- glEvalCoord2fv
- glEvalMesh1
- glEvalMesh2
- glEvalPoint1
- glEvalPoint2
- glExecuteProgramNV
- glFeedbackBuffer
- glFinalCombinerInputNV
- glFinish
- glFinishFenceNV
- glFlush
- glFlushRasterSGIX
- glFlushVertexArrayRangeNV
- glFogCoordd
- glFogCoorddEXT
- glFogCoorddv
- glFogCoorddvEXT
- glFogCoordf
- glFogCoordfEXT
- glFogCoordfv
- glFogCoordfvEXT
- glFogCoordPointer
- glFogCoordPointerEXT
- glFogf
- glFogfv
- glFogi
- glFogiv
- glFragmentColorMaterialSGIX
- glFragmentLightfSGIX
- glFragmentLightfvSGIX
- glFragmentLightiSGIX
- glFragmentLightivSGIX
- glFragmentLightModelfSGIX
- glFragmentLightModelfvSGIX
- glFragmentLightModeliSGIX
- glFragmentLightModelivSGIX
- glFragmentMaterialfSGIX
- glFragmentMaterialfvSGIX
- glFragmentMaterialiSGIX
- glFragmentMaterialivSGIX
- glFrameZoomSGIX
- glFrontFace
- glFrustum
- glGenBuffersARB
- glGenFencesNV
- glGenLists
- glGenProgramsARB
- glGenProgramsNV
- glGenQueriesARB
- glGenTextures
- glGenTexturesEXT
- glGetBooleanv
- glGetBufferParameterivARB
- glGetBufferPointervARB
- glGetBufferSubDataARB
- glGetClipPlane
- glGetColorTable
- glGetColorTableEXT
- glGetColorTableParameterfv
- glGetColorTableParameterfvEXT
- glGetColorTableParameterfvSGI
- glGetColorTableParameteriv
- glGetColorTableParameterivEXT
- glGetColorTableParameterivSGI
- glGetColorTableSGI
- glGetCombinerInputParameterfvNV
- glGetCombinerInputParameterivNV
- glGetCombinerOutputParameterfvNV
- glGetCombinerOutputParameterivNV
- glGetCompressedTexImage
- glGetCompressedTexImageARB
- glGetConvolutionFilter
- glGetConvolutionFilterEXT
- glGetConvolutionParameterfv
- glGetConvolutionParameterfvEXT
- glGetConvolutionParameteriv
- glGetConvolutionParameterivEXT
- glGetDetailTexFuncSGIS
- glGetDoublev
- glGetError
- glGetFenceivNV
- glGetFinalCombinerInputParameterfvNV
- glGetFinalCombinerInputParameterivNV
- glGetFloatv
- glGetFragmentLightfvSGIX
- glGetFragmentLightivSGIX
- glGetFragmentMaterialfvSGIX
- glGetFragmentMaterialivSGIX
- glGetHistogram
- glGetHistogramEXT
- glGetHistogramParameterfv
- glGetHistogramParameterfvEXT
- glGetHistogramParameteriv
- glGetHistogramParameterivEXT
- glGetInstrumentsSGIX
- glGetIntegerv
- glGetLightfv
- glGetLightiv
- glGetListParameterfvSGIX
- glGetListParameterivSGIX
- glGetMapdv
- glGetMapfv
- glGetMapiv
- glGetMaterialfv
- glGetMaterialiv
- glGetMinmax
- glGetMinmaxEXT
- glGetMinmaxParameterfv
- glGetMinmaxParameterfvEXT
- glGetMinmaxParameteriv
- glGetMinmaxParameterivEXT
- glGetPixelMapfv
- glGetPixelMapuiv
- glGetPixelMapusv
- glGetPixelTexGenParameterfvSGIS
- glGetPixelTexGenParameterivSGIS
- glGetPointerv
- glGetPointervEXT
- glGetPolygonStipple
- glGetProgramEnvParameterdvARB
- glGetProgramEnvParameterfvARB
- glGetProgramivARB
- glGetProgramivNV
- glGetProgramLocalParameterdvARB
- glGetProgramLocalParameterfvARB
- glGetProgramNamedParameterdvNV
- glGetProgramNamedParameterfvNV
- glGetProgramParameterdvNV
- glGetProgramParameterfvNV
- glGetProgramStringARB
- glGetProgramStringNV
- glGetQueryivARB
- glGetQueryObjectivARB
- glGetQueryObjectuivARB
- glGetSeparableFilter
- glGetSeparableFilterEXT
- glGetSharpenTexFuncSGIS
- glGetString
- glGetTexEnvfv
- glGetTexEnviv
- glGetTexFilterFuncSGIS
- glGetTexGendv
- glGetTexGenfv
- glGetTexGeniv
- glGetTexImage
- glGetTexLevelParameterfv
- glGetTexLevelParameteriv
- glGetTexParameterfv
- glGetTexParameteriv
- glGetTrackMatrixivNV
- glGetVertexAttribdvARB
- glGetVertexAttribdvNV
- glGetVertexAttribfvARB
- glGetVertexAttribfvNV
- glGetVertexAttribivARB
- glGetVertexAttribivNV
- glGetVertexAttribPointervARB
- glGetVertexAttribPointervNV
- glHint
- glHintPGI
- glHistogram
- glHistogramEXT
- glIndexd
- glIndexdv
- glIndexf
- glIndexFuncEXT
- glIndexfv
- glIndexi
- glIndexiv
- glIndexMask
- glIndexMaterialEXT
- glIndexPointer
- glIndexPointerEXT
- glIndexs
- glIndexsv
- glIndexub
- glIndexubv
- glInitNames
- glInstrumentsBufferSGIX
- glInterleavedArrays
- glIsBufferARB
- glIsEnabled
- glIsFenceNV
- glIsList
- glIsProgramARB
- glIsProgramNV
- glIsQueryARB
- glIsTexture
- glIsTextureEXT
- glLightEnviSGIX
- glLightf
- glLightfv
- glLighti
- glLightiv
- glLightModelf
- glLightModelfv
- glLightModeli
- glLightModeliv
- glLineStipple
- glLineWidth
- glListBase
- glListParameterfSGIX
- glListParameterfvSGIX
- glListParameteriSGIX
- glListParameterivSGIX
- glLoadIdentity
- glLoadMatrixd
- glLoadMatrixf
- glLoadName
- glLoadProgramNV
- glLoadTransposeMatrixd
- glLoadTransposeMatrixdARB
- glLoadTransposeMatrixf
- glLoadTransposeMatrixfARB
- glLockArraysEXT
- glLogicOp
- glMapBufferARB
- glMapGrid1d
- glMapGrid1f
- glMapGrid2d
- glMapGrid2f
- glMap1d
- glMap1f
- glMap2d
- glMap2f
- glMaterialf
- glMaterialfv
- glMateriali
- glMaterialiv
- glMatrixMode
- glMinmax
- glMinmaxEXT
- glMultiDrawArrays
- glMultiDrawArraysEXT
- glMultiDrawElements
- glMultiDrawElementsEXT
- glMultiModeDrawArraysIBM
- glMultiModeDrawElementsIBM
- glMultiTexCoord1d
- glMultiTexCoord1dARB
- glMultiTexCoord1dv
- glMultiTexCoord1dvARB
- glMultiTexCoord1f
- glMultiTexCoord1fARB
- glMultiTexCoord1fv
- glMultiTexCoord1fvARB
- glMultiTexCoord1i
- glMultiTexCoord1iARB
- glMultiTexCoord1iv
- glMultiTexCoord1ivARB
- glMultiTexCoord1s
- glMultiTexCoord1sARB
- glMultiTexCoord1sv
- glMultiTexCoord1svARB
- glMultiTexCoord2d
- glMultiTexCoord2dARB
- glMultiTexCoord2dv
- glMultiTexCoord2dvARB
- glMultiTexCoord2f
- glMultiTexCoord2fARB
- glMultiTexCoord2fv
- glMultiTexCoord2fvARB
- glMultiTexCoord2i
- glMultiTexCoord2iARB
- glMultiTexCoord2iv
- glMultiTexCoord2ivARB
- glMultiTexCoord2s
- glMultiTexCoord2sARB
- glMultiTexCoord2sv
- glMultiTexCoord2svARB
- glMultiTexCoord3d
- glMultiTexCoord3dARB
- glMultiTexCoord3dv
- glMultiTexCoord3dvARB
- glMultiTexCoord3f
- glMultiTexCoord3fARB
- glMultiTexCoord3fv
- glMultiTexCoord3fvARB
- glMultiTexCoord3i
- glMultiTexCoord3iARB
- glMultiTexCoord3iv
- glMultiTexCoord3ivARB
- glMultiTexCoord3s
- glMultiTexCoord3sARB
- glMultiTexCoord3sv
- glMultiTexCoord3svARB
- glMultiTexCoord4d
- glMultiTexCoord4dARB
- glMultiTexCoord4dv
- glMultiTexCoord4dvARB
- glMultiTexCoord4f
- glMultiTexCoord4fARB
- glMultiTexCoord4fv
- glMultiTexCoord4fvARB
- glMultiTexCoord4i
- glMultiTexCoord4iARB
- glMultiTexCoord4iv
- glMultiTexCoord4ivARB
- glMultiTexCoord4s
- glMultiTexCoord4sARB
- glMultiTexCoord4sv
- glMultiTexCoord4svARB
- glMultMatrixd
- glMultMatrixf
- glMultTransposeMatrixd
- glMultTransposeMatrixdARB
- glMultTransposeMatrixf
- glMultTransposeMatrixfARB
- glNewList
- glNormalPointer
- glNormalPointerEXT
- glNormal3b
- glNormal3bv
- glNormal3d
- glNormal3dv
- glNormal3f
- glNormal3fv
- glNormal3i
- glNormal3iv
- glNormal3s
- glNormal3sv
- glOrtho
- glPassThrough
- glPixelMapfv
- glPixelMapuiv
- glPixelMapusv
- glPixelStoref
- glPixelStorei
- glPixelTexGenParameterfSGIS
- glPixelTexGenParameterfvSGIS
- glPixelTexGenParameteriSGIS
- glPixelTexGenParameterivSGIS
- glPixelTexGenSGIX
- glPixelTransferf
- glPixelTransferi
- glPixelZoom
- glPointParameterf
- glPointParameterfARB
- glPointParameterfEXT
- glPointParameterfSGIS
- glPointParameterfv
- glPointParameterfvARB
- glPointParameterfvEXT
- glPointParameterfvSGIS
- glPointParameteri
- glPointParameteriNV
- glPointParameteriv
- glPointParameterivNV
- glPointSize
- glPollInstrumentsSGIX
- glPolygonMode
- glPolygonOffset
- glPolygonOffsetEXT
- glPolygonStipple
- glPopAttrib
- glPopClientAttrib
- glPopMatrix
- glPopName
- glPrioritizeTextures
- glPrioritizeTexturesEXT
- glProgramEnvParameter4dARB
- glProgramEnvParameter4dvARB
- glProgramEnvParameter4fARB
- glProgramEnvParameter4fvARB
- glProgramLocalParameter4dARB
- glProgramLocalParameter4dvARB
- glProgramLocalParameter4fARB
- glProgramLocalParameter4fvARB
- glProgramNamedParameter4dNV
- glProgramNamedParameter4dvNV
- glProgramNamedParameter4fNV
- glProgramNamedParameter4fvNV
- glProgramParameters4dvNV
- glProgramParameters4fvNV
- glProgramParameter4dNV
- glProgramParameter4dvNV
- glProgramParameter4fNV
- glProgramParameter4fvNV
- glProgramStringARB
- glPushAttrib
- glPushClientAttrib
- glPushMatrix
- glPushName
- glRasterPos2d
- glRasterPos2dv
- glRasterPos2f
- glRasterPos2fv
- glRasterPos2i
- glRasterPos2iv
- glRasterPos2s
- glRasterPos2sv
- glRasterPos3d
- glRasterPos3dv
- glRasterPos3f
- glRasterPos3fv
- glRasterPos3i
- glRasterPos3iv
- glRasterPos3s
- glRasterPos3sv
- glRasterPos4d
- glRasterPos4dv
- glRasterPos4f
- glRasterPos4fv
- glRasterPos4i
- glRasterPos4iv
- glRasterPos4s
- glRasterPos4sv
- glReadBuffer
- glReadInstrumentsSGIX
- glReadPixels
- glRectd
- glRectdv
- glRectf
- glRectfv
- glRecti
- glRectiv
- glRects
- glRectsv
- glReferencePlaneSGIX
- glRenderMode
- glRequestResidentProgramsNV
- glResetHistogram
- glResetHistogramEXT
- glResetMinmax
- glResetMinmaxEXT
- glResizeBuffersMESA
- glRotated
- glRotatef
- glSampleCoverage
- glSampleCoverageARB
- glSampleMaskEXT
- glSampleMaskSGIS
- glSamplePatternEXT
- glSamplePatternSGIS
- glScaled
- glScalef
- glScissor
- glSecondaryColorPointer
- glSecondaryColorPointerEXT
- glSecondaryColor3b
- glSecondaryColor3bEXT
- glSecondaryColor3bv
- glSecondaryColor3bvEXT
- glSecondaryColor3d
- glSecondaryColor3dEXT
- glSecondaryColor3dv
- glSecondaryColor3dvEXT
- glSecondaryColor3f
- glSecondaryColor3fEXT
- glSecondaryColor3fv
- glSecondaryColor3fvEXT
- glSecondaryColor3i
- glSecondaryColor3iEXT
- glSecondaryColor3iv
- glSecondaryColor3ivEXT
- glSecondaryColor3s
- glSecondaryColor3sEXT
- glSecondaryColor3sv
- glSecondaryColor3svEXT
- glSecondaryColor3ub
- glSecondaryColor3ubEXT
- glSecondaryColor3ubv
- glSecondaryColor3ubvEXT
- glSecondaryColor3ui
- glSecondaryColor3uiEXT
- glSecondaryColor3uiv
- glSecondaryColor3uivEXT
- glSecondaryColor3us
- glSecondaryColor3usEXT
- glSecondaryColor3usv
- glSecondaryColor3usvEXT
- glSelectBuffer
- glSeparableFilter2D
- glSeparableFilter2DEXT
- glSetFenceNV
- glShadeModel
- glSharpenTexFuncSGIS
- glSpriteParameterfSGIX
- glSpriteParameterfvSGIX
- glSpriteParameteriSGIX
- glSpriteParameterivSGIX
- glStartInstrumentsSGIX
- glStencilFunc
- glStencilMask
- glStencilOp
- glStopInstrumentsSGIX
- glTagSampleBufferSGIX
- glTbufferMask3DFX
- glTestFenceNV
- glTexCoordPointer
- glTexCoordPointerEXT
- glTexCoord1d
- glTexCoord1dv
- glTexCoord1f
- glTexCoord1fv
- glTexCoord1i
- glTexCoord1iv
- glTexCoord1s
- glTexCoord1sv
- glTexCoord2d
- glTexCoord2dv
- glTexCoord2f
- glTexCoord2fv
- glTexCoord2i
- glTexCoord2iv
- glTexCoord2s
- glTexCoord2sv
- glTexCoord3d
- glTexCoord3dv
- glTexCoord3f
- glTexCoord3fv
- glTexCoord3i
- glTexCoord3iv
- glTexCoord3s
- glTexCoord3sv
- glTexCoord4d
- glTexCoord4dv
- glTexCoord4f
- glTexCoord4fv
- glTexCoord4i
- glTexCoord4iv
- glTexCoord4s
- glTexCoord4sv
- glTexEnvf
- glTexEnvfv
- glTexEnvi
- glTexEnviv
- glTexFilterFuncSGIS
- glTexGend
- glTexGendv
- glTexGenf
- glTexGenfv
- glTexGeni
- glTexGeniv
- glTexImage1D
- glTexImage2D
- glTexImage3D
- glTexImage3DEXT
- glTexImage4DSGIS
- glTexParameterf
- glTexParameterfv
- glTexParameteri
- glTexParameteriv
- glTexSubImage1D
- glTexSubImage1DEXT
- glTexSubImage2D
- glTexSubImage2DEXT
- glTexSubImage3D
- glTexSubImage3DEXT
- glTexSubImage4DSGIS
- glTrackMatrixNV
- glTranslated
- glTranslatef
- glUnlockArraysEXT
- glUnmapBufferARB
- glVertexArrayRangeNV
- glVertexAttribPointerARB
- glVertexAttribPointerNV
- glVertexAttribs1dvNV
- glVertexAttribs1fvNV
- glVertexAttribs1svNV
- glVertexAttribs2dvNV
- glVertexAttribs2fvNV
- glVertexAttribs2svNV
- glVertexAttribs3dvNV
- glVertexAttribs3fvNV
- glVertexAttribs3svNV
- glVertexAttribs4dvNV
- glVertexAttribs4fvNV
- glVertexAttribs4svNV
- glVertexAttribs4ubvNV
- glVertexAttrib1dARB
- glVertexAttrib1dNV
- glVertexAttrib1dvARB
- glVertexAttrib1dvNV
- glVertexAttrib1fARB
- glVertexAttrib1fNV
- glVertexAttrib1fvARB
- glVertexAttrib1fvNV
- glVertexAttrib1sARB
- glVertexAttrib1sNV
- glVertexAttrib1svARB
- glVertexAttrib1svNV
- glVertexAttrib2dARB
- glVertexAttrib2dNV
- glVertexAttrib2dvARB
- glVertexAttrib2dvNV
- glVertexAttrib2fARB
- glVertexAttrib2fNV
- glVertexAttrib2fvARB
- glVertexAttrib2fvNV
- glVertexAttrib2sARB
- glVertexAttrib2sNV
- glVertexAttrib2svARB
- glVertexAttrib2svNV
- glVertexAttrib3dARB
- glVertexAttrib3dNV
- glVertexAttrib3dvARB
- glVertexAttrib3dvNV
- glVertexAttrib3fARB
- glVertexAttrib3fNV
- glVertexAttrib3fvARB
- glVertexAttrib3fvNV
- glVertexAttrib3sARB
- glVertexAttrib3sNV
- glVertexAttrib3svARB
- glVertexAttrib3svNV
- glVertexAttrib4bvARB
- glVertexAttrib4dARB
- glVertexAttrib4dNV
- glVertexAttrib4dvARB
- glVertexAttrib4dvNV
- glVertexAttrib4fARB
- glVertexAttrib4fNV
- glVertexAttrib4fvARB
- glVertexAttrib4fvNV
- glVertexAttrib4ivARB
- glVertexAttrib4NbvARB
- glVertexAttrib4NivARB
- glVertexAttrib4NsvARB
- glVertexAttrib4NubARB
- glVertexAttrib4NubvARB
- glVertexAttrib4NuivARB
- glVertexAttrib4NusvARB
- glVertexAttrib4sARB
- glVertexAttrib4sNV
- glVertexAttrib4svARB
- glVertexAttrib4svNV
- glVertexAttrib4ubNV
- glVertexAttrib4ubvARB
- glVertexAttrib4ubvNV
- glVertexAttrib4uivARB
- glVertexAttrib4usvARB
- glVertexPointer
- glVertexPointerEXT
- glVertexWeightfEXT
- glVertexWeightfvEXT
- glVertexWeightPointerEXT
- glVertex2d
- glVertex2dv
- glVertex2f
- glVertex2fv
- glVertex2i
- glVertex2iv
- glVertex2s
- glVertex2sv
- glVertex3d
- glVertex3dv
- glVertex3f
- glVertex3fv
- glVertex3i
- glVertex3iv
- glVertex3s
- glVertex3sv
- glVertex4d
- glVertex4dv
- glVertex4f
- glVertex4fv
- glVertex4i
- glVertex4iv
- glVertex4s
- glVertex4sv
- glViewport
- glWindowPos2d
- glWindowPos2dARB
- glWindowPos2dMESA
- glWindowPos2dv
- glWindowPos2dvARB
- glWindowPos2dvMESA
- glWindowPos2f
- glWindowPos2fARB
- glWindowPos2fMESA
- glWindowPos2fv
- glWindowPos2fvARB
- glWindowPos2fvMESA
- glWindowPos2i
- glWindowPos2iARB
- glWindowPos2iMESA
- glWindowPos2iv
- glWindowPos2ivARB
- glWindowPos2ivMESA
- glWindowPos2s
- glWindowPos2sARB
- glWindowPos2sMESA
- glWindowPos2sv
- glWindowPos2svARB
- glWindowPos2svMESA
- glWindowPos3d
- glWindowPos3dARB
- glWindowPos3dMESA
- glWindowPos3dv
- glWindowPos3dvARB
- glWindowPos3dvMESA
- glWindowPos3f
- glWindowPos3fARB
- glWindowPos3fMESA
- glWindowPos3fv
- glWindowPos3fvARB
- glWindowPos3fvMESA
- glWindowPos3i
- glWindowPos3iARB
- glWindowPos3iMESA
- glWindowPos3iv
- glWindowPos3ivARB
- glWindowPos3ivMESA
- glWindowPos3s
- glWindowPos3sARB
- glWindowPos3sMESA
- glWindowPos3sv
- glWindowPos3svARB
- glWindowPos3svMESA
- glWindowPos4dMESA
- glWindowPos4dvMESA
- glWindowPos4fMESA
- glWindowPos4fvMESA
- glWindowPos4iMESA
- glWindowPos4ivMESA
- glWindowPos4sMESA
- glWindowPos4svMESA
- fxCloseHardware
-;fxGetScreenGeometry
- fxMesaCreateBestContext
- fxMesaCreateContext
- fxMesaDestroyContext
- fxMesaGetCurrentContext
- fxMesaMakeCurrent
- fxMesaSelectCurrentBoard
-;fxMesaSetNearFar
- fxMesaSwapBuffers
- fxMesaUpdateScreenSize
- wglChoosePixelFormat
- wglCopyContext
- wglCreateContext
- wglCreateLayerContext
- wglDeleteContext
- wglDescribeLayerPlane
- wglDescribePixelFormat
- wglGetCurrentContext
- wglGetCurrentDC
- wglGetDefaultProcAddress
- wglGetLayerPaletteEntries
- wglGetPixelFormat
- wglGetProcAddress
- wglMakeCurrent
- wglRealizeLayerPalette
- wglSetLayerPaletteEntries
- wglSetPixelFormat
- wglShareLists
- wglSwapBuffers
- wglSwapLayerBuffers
- wglUseFontBitmapsA
- wglUseFontBitmapsW
- wglUseFontOutlinesA
- wglUseFontOutlinesW
- ChoosePixelFormat
- DescribePixelFormat
- GetPixelFormat
- SetPixelFormat
- SwapBuffers
- DrvCopyContext
- DrvCreateContext
- DrvCreateLayerContext
- DrvDeleteContext
- DrvDescribeLayerPlane
- DrvDescribePixelFormat
- DrvGetLayerPaletteEntries
- DrvGetProcAddress
- DrvReleaseContext
- DrvRealizeLayerPalette
- DrvSetContext
- DrvSetLayerPaletteEntries
- DrvSetPixelFormat
- DrvShareLists
- DrvSwapBuffers
- DrvSwapLayerBuffers
- DrvValidateVersion
diff --git a/mesalib/src/mesa/drivers/windows/fx/fxwgl.c b/mesalib/src/mesa/drivers/windows/fx/fxwgl.c deleted file mode 100644 index ce76ecd15..000000000 --- a/mesalib/src/mesa/drivers/windows/fx/fxwgl.c +++ /dev/null @@ -1,1307 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 4.0 - * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* Authors: - * David Bucciarelli - * Brian Paul - * Keith Whitwell - * Hiroshi Morii - * Daniel Borca - */ - -/* fxwgl.c - Microsoft wgl functions emulation for - * 3Dfx VooDoo/Mesa interface - */ - - -#ifdef _WIN32 - -#ifdef __cplusplus -extern "C" { -#endif - -#include <windows.h> -#define GL_GLEXT_PROTOTYPES -#include "GL/gl.h" -#include "GL/glext.h" - -#ifdef __cplusplus -} -#endif - -#include "GL/fxmesa.h" -#include "glheader.h" -#include "glapi.h" -#include "imports.h" -#include "../../glide/fxdrv.h" - -#define MAX_MESA_ATTRS 20 - -#if (_MSC_VER >= 1200) -#pragma warning( push ) -#pragma warning( disable : 4273 ) -#endif - -struct __extensions__ { - PROC proc; - char *name; -}; - -struct __pixelformat__ { - PIXELFORMATDESCRIPTOR pfd; - GLint mesaAttr[MAX_MESA_ATTRS]; -}; - -WINGDIAPI void GLAPIENTRY gl3DfxSetPaletteEXT(GLuint *); -static GLushort gammaTable[3 * 256]; - -struct __pixelformat__ pix[] = { - /* 16bit RGB565 single buffer with depth */ - { - {sizeof(PIXELFORMATDESCRIPTOR), 1, - PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL, - PFD_TYPE_RGBA, - 16, - 5, 0, 6, 5, 5, 11, 0, 0, - 0, 0, 0, 0, 0, - 16, - 0, - 0, - PFD_MAIN_PLANE, - 0, 0, 0, 0} - , - {FXMESA_COLORDEPTH, 16, - FXMESA_ALPHA_SIZE, 0, - FXMESA_DEPTH_SIZE, 16, - FXMESA_STENCIL_SIZE, 0, - FXMESA_ACCUM_SIZE, 0, - FXMESA_NONE} - } - , - /* 16bit RGB565 double buffer with depth */ - { - {sizeof(PIXELFORMATDESCRIPTOR), 1, - PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | - PFD_DOUBLEBUFFER | PFD_SWAP_COPY, - PFD_TYPE_RGBA, - 16, - 5, 0, 6, 5, 5, 11, 0, 0, - 0, 0, 0, 0, 0, - 16, - 0, - 0, - PFD_MAIN_PLANE, - 0, 0, 0, 0} - , - {FXMESA_COLORDEPTH, 16, - FXMESA_DOUBLEBUFFER, - FXMESA_ALPHA_SIZE, 0, - FXMESA_DEPTH_SIZE, 16, - FXMESA_STENCIL_SIZE, 0, - FXMESA_ACCUM_SIZE, 0, - FXMESA_NONE} - } - , - /* 16bit ARGB1555 single buffer with depth */ - { - {sizeof(PIXELFORMATDESCRIPTOR), 1, - PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL, - PFD_TYPE_RGBA, - 16, - 5, 0, 5, 5, 5, 10, 1, 15, - 0, 0, 0, 0, 0, - 16, - 0, - 0, - PFD_MAIN_PLANE, - 0, 0, 0, 0} - , - {FXMESA_COLORDEPTH, 15, - FXMESA_ALPHA_SIZE, 1, - FXMESA_DEPTH_SIZE, 16, - FXMESA_STENCIL_SIZE, 0, - FXMESA_ACCUM_SIZE, 0, - FXMESA_NONE} - } - , - /* 16bit ARGB1555 double buffer with depth */ - { - {sizeof(PIXELFORMATDESCRIPTOR), 1, - PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | - PFD_DOUBLEBUFFER | PFD_SWAP_COPY, - PFD_TYPE_RGBA, - 16, - 5, 0, 5, 5, 5, 10, 1, 15, - 0, 0, 0, 0, 0, - 16, - 0, - 0, - PFD_MAIN_PLANE, - 0, 0, 0, 0} - , - {FXMESA_COLORDEPTH, 15, - FXMESA_DOUBLEBUFFER, - FXMESA_ALPHA_SIZE, 1, - FXMESA_DEPTH_SIZE, 16, - FXMESA_STENCIL_SIZE, 0, - FXMESA_ACCUM_SIZE, 0, - FXMESA_NONE} - } - , - /* 32bit ARGB8888 single buffer with depth */ - { - {sizeof(PIXELFORMATDESCRIPTOR), 1, - PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL, - PFD_TYPE_RGBA, - 32, - 8, 0, 8, 8, 8, 16, 8, 24, - 0, 0, 0, 0, 0, - 24, - 8, - 0, - PFD_MAIN_PLANE, - 0, 0, 0, 0} - , - {FXMESA_COLORDEPTH, 32, - FXMESA_ALPHA_SIZE, 8, - FXMESA_DEPTH_SIZE, 24, - FXMESA_STENCIL_SIZE, 8, - FXMESA_ACCUM_SIZE, 0, - FXMESA_NONE} - } - , - /* 32bit ARGB8888 double buffer with depth */ - { - {sizeof(PIXELFORMATDESCRIPTOR), 1, - PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | - PFD_DOUBLEBUFFER | PFD_SWAP_COPY, - PFD_TYPE_RGBA, - 32, - 8, 0, 8, 8, 8, 16, 8, 24, - 0, 0, 0, 0, 0, - 24, - 8, - 0, - PFD_MAIN_PLANE, - 0, 0, 0, 0} - , - {FXMESA_COLORDEPTH, 32, - FXMESA_DOUBLEBUFFER, - FXMESA_ALPHA_SIZE, 8, - FXMESA_DEPTH_SIZE, 24, - FXMESA_STENCIL_SIZE, 8, - FXMESA_ACCUM_SIZE, 0, - FXMESA_NONE} - } -}; - -static fxMesaContext ctx = NULL; -static WNDPROC hWNDOldProc; -static int curPFD = 0; -static HDC hDC; -static HWND hWND; - -static GLboolean haveDualHead; - -/* For the in-window-rendering hack */ - -#ifndef GR_CONTROL_RESIZE -/* Apparently GR_CONTROL_RESIZE can be ignored. OK? */ -#define GR_CONTROL_RESIZE -1 -#endif - -static GLboolean gdiWindowHack; -static void *dibSurfacePtr; -static BITMAPINFO *dibBMI; -static HBITMAP dibHBM; -static HWND dibWnd; - -static int -env_check (const char *var, int val) -{ - const char *env = getenv(var); - return (env && (env[0] == val)); -} - -static LRESULT APIENTRY -__wglMonitor (HWND hwnd, UINT message, UINT wParam, LONG lParam) -{ - long ret; /* Now gives the resized window at the end to hWNDOldProc */ - - if (ctx && hwnd == hWND) { - switch (message) { - case WM_PAINT: - case WM_MOVE: - break; - case WM_DISPLAYCHANGE: - case WM_SIZE: -#if 0 - if (wParam != SIZE_MINIMIZED) { - static int moving = 0; - if (!moving) { - if (!FX_grSstControl(GR_CONTROL_RESIZE)) { - moving = 1; - SetWindowPos(hwnd, 0, 0, 0, 300, 300, SWP_NOMOVE | SWP_NOZORDER); - moving = 0; - if (!FX_grSstControl(GR_CONTROL_RESIZE)) { - /*MessageBox(0,_T("Error changing windowsize"),_T("fxMESA"),MB_OK);*/ - PostMessage(hWND, WM_CLOSE, 0, 0); - } - } - /* Do the clipping in the glide library */ - grClipWindow(0, 0, FX_grSstScreenWidth(), FX_grSstScreenHeight()); - /* And let the new size set in the context */ - fxMesaUpdateScreenSize(ctx); - } - } -#endif - break; - case WM_ACTIVATE: - break; - case WM_SHOWWINDOW: - break; - case WM_SYSKEYDOWN: - case WM_SYSCHAR: - break; - } - } - - /* Finally call the hWNDOldProc, which handles the resize with the - * now changed window sizes */ - ret = CallWindowProc(hWNDOldProc, hwnd, message, wParam, lParam); - - return ret; -} - -static void -wgl_error (long error) -{ -#define WGL_INVALID_PIXELFORMAT ERROR_INVALID_PIXEL_FORMAT - SetLastError(0xC0000000 /* error severity */ - |0x00070000 /* error facility (who we are) */ - |error); -} - -GLAPI BOOL GLAPIENTRY -wglCopyContext (HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask) -{ - return FALSE; -} - -GLAPI HGLRC GLAPIENTRY -wglCreateContext (HDC hdc) -{ - HWND hWnd; - WNDPROC oldProc; - int error; - - if (ctx) { - SetLastError(0); - return NULL; - } - - if (!(hWnd = WindowFromDC(hdc))) { - SetLastError(0); - return NULL; - } - - if (curPFD == 0) { - wgl_error(WGL_INVALID_PIXELFORMAT); - return NULL; - } - - if ((oldProc = (WNDPROC)GetWindowLong(hWnd, GWL_WNDPROC)) != __wglMonitor) { - hWNDOldProc = oldProc; - SetWindowLong(hWnd, GWL_WNDPROC, (LONG)__wglMonitor); - } - - /* always log when debugging, or if user demands */ - if (TDFX_DEBUG || env_check("MESA_FX_INFO", 'r')) { - freopen("MESA.LOG", "w", stderr); - } - - { - RECT cliRect; - ShowWindow(hWnd, SW_SHOWNORMAL); - SetForegroundWindow(hWnd); - Sleep(100); /* a hack for win95 */ - if (env_check("MESA_GLX_FX", 'w') && !(GetWindowLong(hWnd, GWL_STYLE) & WS_POPUP)) { - /* XXX todo - windowed modes */ - error = !(ctx = fxMesaCreateContext((GLuint) hWnd, GR_RESOLUTION_NONE, GR_REFRESH_NONE, pix[curPFD - 1].mesaAttr)); - } else { - GetClientRect(hWnd, &cliRect); - error = !(ctx = fxMesaCreateBestContext((GLuint) hWnd, cliRect.right, cliRect.bottom, pix[curPFD - 1].mesaAttr)); - } - } - - /*if (getenv("SST_DUALHEAD")) - haveDualHead = - ((atoi(getenv("SST_DUALHEAD")) == 1) ? GL_TRUE : GL_FALSE); - else - haveDualHead = GL_FALSE;*/ - - if (error) { - SetLastError(0); - return NULL; - } - - hDC = hdc; - hWND = hWnd; - - /* Required by the OpenGL Optimizer 1.1 (is it a Optimizer bug ?) */ - wglMakeCurrent(hdc, (HGLRC)1); - - return (HGLRC)1; -} - -GLAPI HGLRC GLAPIENTRY -wglCreateLayerContext (HDC hdc, int iLayerPlane) -{ - SetLastError(0); - return NULL; -} - -GLAPI BOOL GLAPIENTRY -wglDeleteContext (HGLRC hglrc) -{ - if (ctx && hglrc == (HGLRC)1) { - - fxMesaDestroyContext(ctx); - - SetWindowLong(WindowFromDC(hDC), GWL_WNDPROC, (LONG) hWNDOldProc); - - ctx = NULL; - hDC = 0; - return TRUE; - } - - SetLastError(0); - - return FALSE; -} - -GLAPI HGLRC GLAPIENTRY -wglGetCurrentContext (VOID) -{ - if (ctx) - return (HGLRC)1; - - SetLastError(0); - return NULL; -} - -GLAPI HDC GLAPIENTRY -wglGetCurrentDC (VOID) -{ - if (ctx) - return hDC; - - SetLastError(0); - return NULL; -} - -GLAPI BOOL GLAPIENTRY -wglSwapIntervalEXT (int interval) -{ - if (ctx == NULL) { - return FALSE; - } - if (interval < 0) { - interval = 0; - } else if (interval > 3) { - interval = 3; - } - ctx->swapInterval = interval; - return TRUE; -} - -GLAPI int GLAPIENTRY -wglGetSwapIntervalEXT (void) -{ - return (ctx == NULL) ? -1 : ctx->swapInterval; -} - -GLAPI BOOL GLAPIENTRY -wglGetDeviceGammaRamp3DFX (HDC hdc, LPVOID arrays) -{ - /* gammaTable should be per-context */ - memcpy(arrays, gammaTable, 3 * 256 * sizeof(GLushort)); - return TRUE; -} - -GLAPI BOOL GLAPIENTRY -wglSetDeviceGammaRamp3DFX (HDC hdc, LPVOID arrays) -{ - GLint i, tableSize, inc, index; - GLushort *red, *green, *blue; - FxU32 gammaTableR[256], gammaTableG[256], gammaTableB[256]; - - /* gammaTable should be per-context */ - memcpy(gammaTable, arrays, 3 * 256 * sizeof(GLushort)); - - tableSize = FX_grGetInteger(GR_GAMMA_TABLE_ENTRIES); - inc = 256 / tableSize; - red = (GLushort *)arrays; - green = (GLushort *)arrays + 256; - blue = (GLushort *)arrays + 512; - for (i = 0, index = 0; i < tableSize; i++, index += inc) { - gammaTableR[i] = red[index] >> 8; - gammaTableG[i] = green[index] >> 8; - gammaTableB[i] = blue[index] >> 8; - } - - grLoadGammaTable(tableSize, gammaTableR, gammaTableG, gammaTableB); - - return TRUE; -} - -typedef void *HPBUFFERARB; - -/* WGL_ARB_pixel_format */ -GLAPI BOOL GLAPIENTRY -wglGetPixelFormatAttribivARB (HDC hdc, - int iPixelFormat, - int iLayerPlane, - UINT nAttributes, - const int *piAttributes, - int *piValues) -{ - SetLastError(0); - return FALSE; -} - -GLAPI BOOL GLAPIENTRY -wglGetPixelFormatAttribfvARB (HDC hdc, - int iPixelFormat, - int iLayerPlane, - UINT nAttributes, - const int *piAttributes, - FLOAT *pfValues) -{ - SetLastError(0); - return FALSE; -} - -GLAPI BOOL GLAPIENTRY -wglChoosePixelFormatARB (HDC hdc, - const int *piAttribIList, - const FLOAT *pfAttribFList, - UINT nMaxFormats, - int *piFormats, - UINT *nNumFormats) -{ - SetLastError(0); - return FALSE; -} - -/* WGL_ARB_render_texture */ -GLAPI BOOL GLAPIENTRY -wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer) -{ - SetLastError(0); - return FALSE; -} - -GLAPI BOOL GLAPIENTRY -wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer) -{ - SetLastError(0); - return FALSE; -} - -GLAPI BOOL GLAPIENTRY -wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, - const int *piAttribList) -{ - SetLastError(0); - return FALSE; -} - -/* WGL_ARB_pbuffer */ -GLAPI HPBUFFERARB GLAPIENTRY -wglCreatePbufferARB (HDC hDC, - int iPixelFormat, - int iWidth, - int iHeight, - const int *piAttribList) -{ - SetLastError(0); - return NULL; -} - -GLAPI HDC GLAPIENTRY -wglGetPbufferDCARB (HPBUFFERARB hPbuffer) -{ - SetLastError(0); - return NULL; -} - -GLAPI int GLAPIENTRY -wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC) -{ - SetLastError(0); - return -1; -} - -GLAPI BOOL GLAPIENTRY -wglDestroyPbufferARB (HPBUFFERARB hPbuffer) -{ - SetLastError(0); - return FALSE; -} - -GLAPI BOOL GLAPIENTRY -wglQueryPbufferARB (HPBUFFERARB hPbuffer, - int iAttribute, - int *piValue) -{ - SetLastError(0); - return FALSE; -} - -GLAPI const char * GLAPIENTRY -wglGetExtensionsStringEXT (void) -{ - return "WGL_3DFX_gamma_control " - "WGL_EXT_swap_control " - "WGL_EXT_extensions_string WGL_ARB_extensions_string" - /*WGL_ARB_pixel_format WGL_ARB_render_texture WGL_ARB_pbuffer*/; -} - -GLAPI const char * GLAPIENTRY -wglGetExtensionsStringARB (HDC hdc) -{ - return wglGetExtensionsStringEXT(); -} - -static struct { - const char *name; - PROC func; -} wgl_ext[] = { - {"wglGetExtensionsStringARB", (PROC)wglGetExtensionsStringARB}, - {"wglGetExtensionsStringEXT", (PROC)wglGetExtensionsStringEXT}, - {"wglSwapIntervalEXT", (PROC)wglSwapIntervalEXT}, - {"wglGetSwapIntervalEXT", (PROC)wglGetSwapIntervalEXT}, - {"wglGetDeviceGammaRamp3DFX", (PROC)wglGetDeviceGammaRamp3DFX}, - {"wglSetDeviceGammaRamp3DFX", (PROC)wglSetDeviceGammaRamp3DFX}, - /* WGL_ARB_pixel_format */ - {"wglGetPixelFormatAttribivARB", (PROC)wglGetPixelFormatAttribivARB}, - {"wglGetPixelFormatAttribfvARB", (PROC)wglGetPixelFormatAttribfvARB}, - {"wglChoosePixelFormatARB", (PROC)wglChoosePixelFormatARB}, - /* WGL_ARB_render_texture */ - {"wglBindTexImageARB", (PROC)wglBindTexImageARB}, - {"wglReleaseTexImageARB", (PROC)wglReleaseTexImageARB}, - {"wglSetPbufferAttribARB", (PROC)wglSetPbufferAttribARB}, - /* WGL_ARB_pbuffer */ - {"wglCreatePbufferARB", (PROC)wglCreatePbufferARB}, - {"wglGetPbufferDCARB", (PROC)wglGetPbufferDCARB}, - {"wglReleasePbufferDCARB", (PROC)wglReleasePbufferDCARB}, - {"wglDestroyPbufferARB", (PROC)wglDestroyPbufferARB}, - {"wglQueryPbufferARB", (PROC)wglQueryPbufferARB}, - {NULL, NULL} -}; - -GLAPI PROC GLAPIENTRY -wglGetProcAddress (LPCSTR lpszProc) -{ - int i; - PROC p = (PROC)_glapi_get_proc_address((const char *)lpszProc); - - /* we can't BlendColor. work around buggy applications */ - if (p && strcmp(lpszProc, "glBlendColor") - && strcmp(lpszProc, "glBlendColorEXT")) - return p; - - for (i = 0; wgl_ext[i].name; i++) { - if (!strcmp(lpszProc, wgl_ext[i].name)) { - return wgl_ext[i].func; - } - } - - SetLastError(0); - return NULL; -} - -GLAPI PROC GLAPIENTRY -wglGetDefaultProcAddress (LPCSTR lpszProc) -{ - SetLastError(0); - return NULL; -} - -GLAPI BOOL GLAPIENTRY -wglMakeCurrent (HDC hdc, HGLRC hglrc) -{ - if ((hdc == NULL) && (hglrc == NULL)) - return TRUE; - - if (!ctx || hglrc != (HGLRC)1 || WindowFromDC(hdc) != hWND) { - SetLastError(0); - return FALSE; - } - - hDC = hdc; - - fxMesaMakeCurrent(ctx); - - return TRUE; -} - -GLAPI BOOL GLAPIENTRY -wglShareLists (HGLRC hglrc1, HGLRC hglrc2) -{ - if (!ctx || hglrc1 != (HGLRC)1 || hglrc1 != hglrc2) { - SetLastError(0); - return FALSE; - } - - return TRUE; -} - -static BOOL -wglUseFontBitmaps_FX (HDC fontDevice, DWORD firstChar, DWORD numChars, - DWORD listBase) -{ - TEXTMETRIC metric; - BITMAPINFO *dibInfo; - HDC bitDevice; - COLORREF tempColor; - int i; - - GetTextMetrics(fontDevice, &metric); - - dibInfo = (BITMAPINFO *)calloc(sizeof(BITMAPINFO) + sizeof(RGBQUAD), 1); - dibInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - dibInfo->bmiHeader.biPlanes = 1; - dibInfo->bmiHeader.biBitCount = 1; - dibInfo->bmiHeader.biCompression = BI_RGB; - - bitDevice = CreateCompatibleDC(fontDevice); - - /* Swap fore and back colors so the bitmap has the right polarity */ - tempColor = GetBkColor(bitDevice); - SetBkColor(bitDevice, GetTextColor(bitDevice)); - SetTextColor(bitDevice, tempColor); - - /* Place chars based on base line */ - SetTextAlign(bitDevice, TA_BASELINE); - - for (i = 0; i < (int)numChars; i++) { - SIZE size; - char curChar; - int charWidth, charHeight, bmapWidth, bmapHeight, numBytes, res; - HBITMAP bitObject; - HGDIOBJ origBmap; - unsigned char *bmap; - - curChar = (char)(i + firstChar); /* [koolsmoky] explicit cast */ - - /* Find how high/wide this character is */ - GetTextExtentPoint32(bitDevice, &curChar, 1, &size); - - /* Create the output bitmap */ - charWidth = size.cx; - charHeight = size.cy; - bmapWidth = ((charWidth + 31) / 32) * 32; /* Round up to the next multiple of 32 bits */ - bmapHeight = charHeight; - bitObject = CreateCompatibleBitmap(bitDevice, bmapWidth, bmapHeight); - /*VERIFY(bitObject);*/ - - /* Assign the output bitmap to the device */ - origBmap = SelectObject(bitDevice, bitObject); - - PatBlt(bitDevice, 0, 0, bmapWidth, bmapHeight, BLACKNESS); - - /* Use our source font on the device */ - SelectObject(bitDevice, GetCurrentObject(fontDevice, OBJ_FONT)); - - /* Draw the character */ - TextOut(bitDevice, 0, metric.tmAscent, &curChar, 1); - - /* Unselect our bmap object */ - SelectObject(bitDevice, origBmap); - - /* Convert the display dependant representation to a 1 bit deep DIB */ - numBytes = (bmapWidth * bmapHeight) / 8; - bmap = MALLOC(numBytes); - dibInfo->bmiHeader.biWidth = bmapWidth; - dibInfo->bmiHeader.biHeight = bmapHeight; - res = GetDIBits(bitDevice, bitObject, 0, bmapHeight, bmap, - dibInfo, DIB_RGB_COLORS); - - /* Create the GL object */ - glNewList(i + listBase, GL_COMPILE); - glBitmap(bmapWidth, bmapHeight, 0.0, metric.tmDescent, - charWidth, 0.0, bmap); - glEndList(); - /* CheckGL(); */ - - /* Destroy the bmap object */ - DeleteObject(bitObject); - - /* Deallocate the bitmap data */ - FREE(bmap); - } - - /* Destroy the DC */ - DeleteDC(bitDevice); - - FREE(dibInfo); - - return TRUE; -} - -GLAPI BOOL GLAPIENTRY -wglUseFontBitmapsW (HDC hdc, DWORD first, DWORD count, DWORD listBase) -{ - return FALSE; -} - -GLAPI BOOL GLAPIENTRY -wglUseFontOutlinesA (HDC hdc, DWORD first, DWORD count, - DWORD listBase, FLOAT deviation, - FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf) -{ - SetLastError(0); - return FALSE; -} - -GLAPI BOOL GLAPIENTRY -wglUseFontOutlinesW (HDC hdc, DWORD first, DWORD count, - DWORD listBase, FLOAT deviation, - FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf) -{ - SetLastError(0); - return FALSE; -} - - -GLAPI BOOL GLAPIENTRY -wglSwapLayerBuffers (HDC hdc, UINT fuPlanes) -{ - if (ctx && WindowFromDC(hdc) == hWND) { - fxMesaSwapBuffers(); - - return TRUE; - } - - SetLastError(0); - return FALSE; -} - -static int -pfd_tablen (void) -{ - /* we should take an envvar for `fxMesaSelectCurrentBoard' */ - return (fxMesaSelectCurrentBoard(0) < GR_SSTTYPE_Voodoo4) - ? 2 /* only 16bit entries */ - : sizeof(pix) / sizeof(pix[0]); /* full table */ -} - -GLAPI int GLAPIENTRY -wglChoosePixelFormat (HDC hdc, const PIXELFORMATDESCRIPTOR *ppfd) -{ - int i, best = -1, qt_valid_pix; - PIXELFORMATDESCRIPTOR pfd = *ppfd; - - qt_valid_pix = pfd_tablen(); - -#if 1 || QUAKE2 || GORE - /* QUAKE2: 24+32 */ - /* GORE : 24+16 */ - if ((pfd.cColorBits == 24) || (pfd.cColorBits == 32)) { - /* the first 2 entries are 16bit */ - pfd.cColorBits = (qt_valid_pix > 2) ? 32 : 16; - } - if (pfd.cColorBits == 32) { - pfd.cDepthBits = 24; - } else if (pfd.cColorBits == 16) { - pfd.cDepthBits = 16; - } -#endif - - if (pfd.nSize != sizeof(PIXELFORMATDESCRIPTOR) || pfd.nVersion != 1) { - SetLastError(0); - return 0; - } - - for (i = 0; i < qt_valid_pix; i++) { - if (pfd.cColorBits > 0 && pix[i].pfd.cColorBits != pfd.cColorBits) - continue; - - if ((pfd.dwFlags & PFD_DRAW_TO_WINDOW) - && !(pix[i].pfd.dwFlags & PFD_DRAW_TO_WINDOW)) continue; - if ((pfd.dwFlags & PFD_DRAW_TO_BITMAP) - && !(pix[i].pfd.dwFlags & PFD_DRAW_TO_BITMAP)) continue; - if ((pfd.dwFlags & PFD_SUPPORT_GDI) - && !(pix[i].pfd.dwFlags & PFD_SUPPORT_GDI)) continue; - if ((pfd.dwFlags & PFD_SUPPORT_OPENGL) - && !(pix[i].pfd.dwFlags & PFD_SUPPORT_OPENGL)) continue; - if (!(pfd.dwFlags & PFD_DOUBLEBUFFER_DONTCARE) - && ((pfd.dwFlags & PFD_DOUBLEBUFFER) != - (pix[i].pfd.dwFlags & PFD_DOUBLEBUFFER))) continue; -#if 1 /* Doom3 fails here! */ - if (!(pfd.dwFlags & PFD_STEREO_DONTCARE) - && ((pfd.dwFlags & PFD_STEREO) != - (pix[i].pfd.dwFlags & PFD_STEREO))) continue; -#endif - - if (pfd.cDepthBits > 0 && pix[i].pfd.cDepthBits == 0) - continue; /* need depth buffer */ - - if (pfd.cAlphaBits > 0 && pix[i].pfd.cAlphaBits == 0) - continue; /* need alpha buffer */ - -#if 0 /* regression bug? */ - if (pfd.cStencilBits > 0 && pix[i].pfd.cStencilBits == 0) - continue; /* need stencil buffer */ -#endif - - if (pfd.iPixelType == pix[i].pfd.iPixelType) { - best = i + 1; - break; - } - } - - if (best == -1) { - FILE *err = fopen("MESA.LOG", "w"); - if (err != NULL) { - fprintf(err, "wglChoosePixelFormat failed\n"); - fprintf(err, "\tnSize = %d\n", ppfd->nSize); - fprintf(err, "\tnVersion = %d\n", ppfd->nVersion); - fprintf(err, "\tdwFlags = %lu\n", ppfd->dwFlags); - fprintf(err, "\tiPixelType = %d\n", ppfd->iPixelType); - fprintf(err, "\tcColorBits = %d\n", ppfd->cColorBits); - fprintf(err, "\tcRedBits = %d\n", ppfd->cRedBits); - fprintf(err, "\tcRedShift = %d\n", ppfd->cRedShift); - fprintf(err, "\tcGreenBits = %d\n", ppfd->cGreenBits); - fprintf(err, "\tcGreenShift = %d\n", ppfd->cGreenShift); - fprintf(err, "\tcBlueBits = %d\n", ppfd->cBlueBits); - fprintf(err, "\tcBlueShift = %d\n", ppfd->cBlueShift); - fprintf(err, "\tcAlphaBits = %d\n", ppfd->cAlphaBits); - fprintf(err, "\tcAlphaShift = %d\n", ppfd->cAlphaShift); - fprintf(err, "\tcAccumBits = %d\n", ppfd->cAccumBits); - fprintf(err, "\tcAccumRedBits = %d\n", ppfd->cAccumRedBits); - fprintf(err, "\tcAccumGreenBits = %d\n", ppfd->cAccumGreenBits); - fprintf(err, "\tcAccumBlueBits = %d\n", ppfd->cAccumBlueBits); - fprintf(err, "\tcAccumAlphaBits = %d\n", ppfd->cAccumAlphaBits); - fprintf(err, "\tcDepthBits = %d\n", ppfd->cDepthBits); - fprintf(err, "\tcStencilBits = %d\n", ppfd->cStencilBits); - fprintf(err, "\tcAuxBuffers = %d\n", ppfd->cAuxBuffers); - fprintf(err, "\tiLayerType = %d\n", ppfd->iLayerType); - fprintf(err, "\tbReserved = %d\n", ppfd->bReserved); - fprintf(err, "\tdwLayerMask = %lu\n", ppfd->dwLayerMask); - fprintf(err, "\tdwVisibleMask = %lu\n", ppfd->dwVisibleMask); - fprintf(err, "\tdwDamageMask = %lu\n", ppfd->dwDamageMask); - fclose(err); - } - - SetLastError(0); - return 0; - } - - return best; -} - -GLAPI int GLAPIENTRY -ChoosePixelFormat (HDC hdc, const PIXELFORMATDESCRIPTOR *ppfd) -{ - - return wglChoosePixelFormat(hdc, ppfd); -} - -GLAPI int GLAPIENTRY -wglDescribePixelFormat (HDC hdc, int iPixelFormat, UINT nBytes, - LPPIXELFORMATDESCRIPTOR ppfd) -{ - int qt_valid_pix; - - qt_valid_pix = pfd_tablen(); - - if (iPixelFormat < 1 || iPixelFormat > qt_valid_pix || - ((nBytes != sizeof(PIXELFORMATDESCRIPTOR)) && (nBytes != 0))) { - SetLastError(0); - return qt_valid_pix; - } - - if (nBytes != 0) - *ppfd = pix[iPixelFormat - 1].pfd; - - return qt_valid_pix; -} - -GLAPI int GLAPIENTRY -DescribePixelFormat (HDC hdc, int iPixelFormat, UINT nBytes, - LPPIXELFORMATDESCRIPTOR ppfd) -{ - return wglDescribePixelFormat(hdc, iPixelFormat, nBytes, ppfd); -} - -GLAPI int GLAPIENTRY -wglGetPixelFormat (HDC hdc) -{ - if (curPFD == 0) { - SetLastError(0); - return 0; - } - - return curPFD; -} - -GLAPI int GLAPIENTRY -GetPixelFormat (HDC hdc) -{ - return wglGetPixelFormat(hdc); -} - -GLAPI BOOL GLAPIENTRY -wglSetPixelFormat (HDC hdc, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd) -{ - int qt_valid_pix; - - qt_valid_pix = pfd_tablen(); - - if (iPixelFormat < 1 || iPixelFormat > qt_valid_pix) { - if (ppfd == NULL) { - PIXELFORMATDESCRIPTOR my_pfd; - if (!wglDescribePixelFormat(hdc, iPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &my_pfd)) { - SetLastError(0); - return FALSE; - } - } else if (ppfd->nSize != sizeof(PIXELFORMATDESCRIPTOR)) { - SetLastError(0); - return FALSE; - } - } - curPFD = iPixelFormat; - - return TRUE; -} - -GLAPI BOOL GLAPIENTRY -wglSwapBuffers (HDC hdc) -{ - if (!ctx) { - SetLastError(0); - return FALSE; - } - - fxMesaSwapBuffers(); - - return TRUE; -} - -GLAPI BOOL GLAPIENTRY -SetPixelFormat (HDC hdc, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd) -{ - return wglSetPixelFormat(hdc, iPixelFormat, ppfd); -} - -GLAPI BOOL GLAPIENTRY -SwapBuffers(HDC hdc) -{ - return wglSwapBuffers(hdc); -} - -static FIXED -FixedFromDouble (double d) -{ - struct { - FIXED f; - long l; - } pun; - pun.l = (long)(d * 65536L); - return pun.f; -} - -/* -** This was yanked from windows/gdi/wgl.c -*/ -GLAPI BOOL GLAPIENTRY -wglUseFontBitmapsA (HDC hdc, DWORD first, DWORD count, DWORD listBase) -{ - int i; - GLuint font_list; - DWORD size; - GLYPHMETRICS gm; - HANDLE hBits; - LPSTR lpBits; - MAT2 mat; - int success = TRUE; - - font_list = listBase; - - mat.eM11 = FixedFromDouble(1); - mat.eM12 = FixedFromDouble(0); - mat.eM21 = FixedFromDouble(0); - mat.eM22 = FixedFromDouble(-1); - - memset(&gm, 0, sizeof(gm)); - - /* - ** If we can't get the glyph outline, it may be because this is a fixed - ** font. Try processing it that way. - */ - if (GetGlyphOutline(hdc, first, GGO_BITMAP, &gm, 0, NULL, &mat) == GDI_ERROR) { - return wglUseFontBitmaps_FX(hdc, first, count, listBase); - } - - /* - ** Otherwise process all desired characters. - */ - for (i = 0; i < count; i++) { - DWORD err; - - glNewList(font_list + i, GL_COMPILE); - - /* allocate space for the bitmap/outline */ - size = GetGlyphOutline(hdc, first + i, GGO_BITMAP, &gm, 0, NULL, &mat); - if (size == GDI_ERROR) { - glEndList(); - err = GetLastError(); - success = FALSE; - continue; - } - - hBits = GlobalAlloc(GHND, size + 1); - lpBits = GlobalLock(hBits); - - err = GetGlyphOutline(hdc, /* handle to device context */ - first + i, /* character to query */ - GGO_BITMAP, /* format of data to return */ - &gm, /* pointer to structure for metrics */ - size, /* size of buffer for data */ - lpBits, /* pointer to buffer for data */ - &mat /* pointer to transformation */ - /* matrix structure */ - ); - - if (err == GDI_ERROR) { - GlobalUnlock(hBits); - GlobalFree(hBits); - - glEndList(); - err = GetLastError(); - success = FALSE; - continue; - } - - glBitmap(gm.gmBlackBoxX, gm.gmBlackBoxY, - -gm.gmptGlyphOrigin.x, - gm.gmptGlyphOrigin.y, - gm.gmCellIncX, gm.gmCellIncY, - (const GLubyte *)lpBits); - - GlobalUnlock(hBits); - GlobalFree(hBits); - - glEndList(); - } - - return success; -} - -GLAPI BOOL GLAPIENTRY -wglDescribeLayerPlane (HDC hdc, int iPixelFormat, int iLayerPlane, - UINT nBytes, LPLAYERPLANEDESCRIPTOR ppfd) -{ - SetLastError(0); - return FALSE; -} - -GLAPI int GLAPIENTRY -wglGetLayerPaletteEntries (HDC hdc, int iLayerPlane, int iStart, - int cEntries, COLORREF *pcr) -{ - SetLastError(0); - return FALSE; -} - -GLAPI BOOL GLAPIENTRY -wglRealizeLayerPalette (HDC hdc, int iLayerPlane, BOOL bRealize) -{ - SetLastError(0); - return FALSE; -} - -GLAPI int GLAPIENTRY -wglSetLayerPaletteEntries (HDC hdc, int iLayerPlane, int iStart, - int cEntries, CONST COLORREF *pcr) -{ - SetLastError(0); - return FALSE; -} - - -/*************************************************************************** - * [dBorca] simplistic ICD implementation, based on ICD code by Gregor Anich - */ - -typedef struct _icdTable { - DWORD size; - PROC table[336]; -} ICDTABLE, *PICDTABLE; - -#ifdef USE_MGL_NAMESPACE -#define GL_FUNC(func) mgl##func -#else -#define GL_FUNC(func) gl##func -#endif - -static ICDTABLE icdTable = { 336, { -#define ICD_ENTRY(func) (PROC)GL_FUNC(func), -#include "../icd/icdlist.h" -#undef ICD_ENTRY -} }; - - -GLAPI BOOL GLAPIENTRY -DrvCopyContext (HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask) -{ - return wglCopyContext(hglrcSrc, hglrcDst, mask); -} - - -GLAPI HGLRC GLAPIENTRY -DrvCreateContext (HDC hdc) -{ - return wglCreateContext(hdc); -} - - -GLAPI BOOL GLAPIENTRY -DrvDeleteContext (HGLRC hglrc) -{ - return wglDeleteContext(hglrc); -} - - -GLAPI HGLRC GLAPIENTRY -DrvCreateLayerContext (HDC hdc, int iLayerPlane) -{ - return wglCreateContext(hdc); -} - - -GLAPI PICDTABLE GLAPIENTRY -DrvSetContext (HDC hdc, HGLRC hglrc, void *callback) -{ - return wglMakeCurrent(hdc, hglrc) ? &icdTable : NULL; -} - - -GLAPI BOOL GLAPIENTRY -DrvReleaseContext (HGLRC hglrc) -{ - return TRUE; -} - - -GLAPI BOOL GLAPIENTRY -DrvShareLists (HGLRC hglrc1, HGLRC hglrc2) -{ - return wglShareLists(hglrc1, hglrc2); -} - - -GLAPI BOOL GLAPIENTRY -DrvDescribeLayerPlane (HDC hdc, int iPixelFormat, - int iLayerPlane, UINT nBytes, - LPLAYERPLANEDESCRIPTOR plpd) -{ - return wglDescribeLayerPlane(hdc, iPixelFormat, iLayerPlane, nBytes, plpd); -} - - -GLAPI int GLAPIENTRY -DrvSetLayerPaletteEntries (HDC hdc, int iLayerPlane, - int iStart, int cEntries, CONST COLORREF *pcr) -{ - return wglSetLayerPaletteEntries(hdc, iLayerPlane, iStart, cEntries, pcr); -} - - -GLAPI int GLAPIENTRY -DrvGetLayerPaletteEntries (HDC hdc, int iLayerPlane, - int iStart, int cEntries, COLORREF *pcr) -{ - return wglGetLayerPaletteEntries(hdc, iLayerPlane, iStart, cEntries, pcr); -} - - -GLAPI BOOL GLAPIENTRY -DrvRealizeLayerPalette (HDC hdc, int iLayerPlane, BOOL bRealize) -{ - return wglRealizeLayerPalette(hdc, iLayerPlane, bRealize); -} - - -GLAPI BOOL GLAPIENTRY -DrvSwapLayerBuffers (HDC hdc, UINT fuPlanes) -{ - return wglSwapLayerBuffers(hdc, fuPlanes); -} - -GLAPI int GLAPIENTRY -DrvDescribePixelFormat (HDC hdc, int iPixelFormat, UINT nBytes, - LPPIXELFORMATDESCRIPTOR ppfd) -{ - return wglDescribePixelFormat(hdc, iPixelFormat, nBytes, ppfd); -} - - -GLAPI PROC GLAPIENTRY -DrvGetProcAddress (LPCSTR lpszProc) -{ - return wglGetProcAddress(lpszProc); -} - - -GLAPI BOOL GLAPIENTRY -DrvSetPixelFormat (HDC hdc, int iPixelFormat) -{ - return wglSetPixelFormat(hdc, iPixelFormat, NULL); -} - - -GLAPI BOOL GLAPIENTRY -DrvSwapBuffers (HDC hdc) -{ - return wglSwapBuffers(hdc); -} - - -GLAPI BOOL GLAPIENTRY -DrvValidateVersion (DWORD version) -{ - (void)version; - return TRUE; -} - - -#if (_MSC_VER >= 1200) -#pragma warning( pop ) -#endif - -#endif /* FX */ diff --git a/mesalib/src/mesa/drivers/windows/gdi/InitCritSections.cpp b/mesalib/src/mesa/drivers/windows/gdi/InitCritSections.cpp deleted file mode 100644 index 78e5f3851..000000000 --- a/mesalib/src/mesa/drivers/windows/gdi/InitCritSections.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "glapi.h"
-#include "glThread.h"
-
-#ifdef WIN32
-
-extern "C" _glthread_Mutex OneTimeLock;
-extern "C" _glthread_Mutex GenTexturesLock;
-
-extern "C" void FreeAllTSD(void);
-
-class _CriticalSectionInit
-{
-public:
- static _CriticalSectionInit m_inst;
-
- _CriticalSectionInit()
- {
- _glthread_INIT_MUTEX(OneTimeLock);
- _glthread_INIT_MUTEX(GenTexturesLock);
- }
-
- ~_CriticalSectionInit()
- {
- _glthread_DESTROY_MUTEX(OneTimeLock);
- _glthread_DESTROY_MUTEX(GenTexturesLock);
- FreeAllTSD();
- }
-};
-
-_CriticalSectionInit _CriticalSectionInit::m_inst;
-
-
-#endif /* WIN32 */
diff --git a/mesalib/src/mesa/drivers/windows/gdi/SConscript b/mesalib/src/mesa/drivers/windows/gdi/SConscript new file mode 100644 index 000000000..10a7eeaa1 --- /dev/null +++ b/mesalib/src/mesa/drivers/windows/gdi/SConscript @@ -0,0 +1,38 @@ +Import('*') + +env = env.Clone() + +env.Prepend(CPPPATH = [ + '#src/mapi', + '#src/mesa', +]) + +env.AppendUnique(CPPDEFINES = [ + '_GDI32_', # prevent wgl* being declared __declspec(dllimport) + 'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers +]) +if not env['gles']: + # prevent _glapi_* from being declared __declspec(dllimport) + env.Append(CPPDEFINES = ['_GLAPI_NO_EXPORTS']) + +env.Prepend(LIBS = [ + glapi, + mesa, + glsl, + 'gdi32', + 'user32', + 'kernel32', +]) + +sources = [ + 'mesa.def', + 'wgl.c', + 'wmesa.c', +] + +mesagdi = env.SharedLibrary( + target = 'opengl32', + source = sources, +) + +env.Alias('mesagdi', mesagdi) diff --git a/mesalib/src/mesa/drivers/windows/gdi/mesa.def b/mesalib/src/mesa/drivers/windows/gdi/mesa.def index b537b3460..d5c98801d 100644 --- a/mesalib/src/mesa/drivers/windows/gdi/mesa.def +++ b/mesalib/src/mesa/drivers/windows/gdi/mesa.def @@ -26,9 +26,6 @@ VERSION 6.5 ; be needed (for the gl* functions) since the entry ; points are compiled with dllexport declspec. ; -; However, this file is still needed to export "internal" -; Mesa symbols for the benefit of the OSMESA32.DLL. -; EXPORTS glNewList glEndList @@ -857,107 +854,3 @@ EXPORTS wglUseFontOutlinesA wglUseFontOutlinesW wglGetExtensionsStringARB -; -; Mesa internals - mostly for OSMESA - _vbo_CreateContext - _vbo_DestroyContext - _vbo_InvalidateState - _glapi_check_multithread - _glapi_get_context - _glapi_get_proc_address - _mesa_add_soft_renderbuffers - _mesa_add_renderbuffer - _mesa_check_conditional_render - _mesa_choose_tex_format - _mesa_create_framebuffer - _mesa_create_visual - _mesa_delete_array_object - _mesa_delete_program - _mesa_delete_texture_object - _mesa_destroy_framebuffer - _mesa_destroy_visual - _mesa_enable_1_3_extensions - _mesa_enable_1_4_extensions - _mesa_enable_1_5_extensions - _mesa_enable_2_0_extensions - _mesa_enable_2_1_extensions - _mesa_enable_sw_extensions - _mesa_error - _mesa_finish_render_texture - _mesa_framebuffer_renderbuffer - _mesa_free_context_data - _mesa_free_texture_image_data - _mesa_generate_mipmap - _mesa_get_compressed_teximage - _mesa_get_current_context - _mesa_get_teximage - _mesa_init_driver_functions - _mesa_init_glsl_driver_functions - _mesa_init_renderbuffer - _mesa_initialize_context - _mesa_make_current - _mesa_new_array_object - _mesa_new_framebuffer - _mesa_new_program - _mesa_new_renderbuffer - _mesa_new_soft_renderbuffer - _mesa_new_texture_image - _mesa_new_texture_object - _mesa_problem - _mesa_reference_renderbuffer - _mesa_remove_renderbuffer - _mesa_render_texture - _mesa_ResizeBuffersMESA - _mesa_resize_framebuffer - _mesa_store_compressed_teximage1d - _mesa_store_compressed_teximage2d - _mesa_store_compressed_teximage3d - _mesa_store_compressed_texsubimage1d - _mesa_store_compressed_texsubimage2d - _mesa_store_compressed_texsubimage3d - _mesa_store_teximage1d - _mesa_store_teximage2d - _mesa_store_teximage3d - _mesa_store_texsubimage1d - _mesa_store_texsubimage2d - _mesa_store_texsubimage3d - _mesa_test_proxy_teximage - _mesa_reference_framebuffer - _mesa_update_framebuffer_visual - _mesa_use_program - _mesa_Viewport - _mesa_meta_init - _mesa_meta_free - _mesa_meta_CopyColorSubTable - _mesa_meta_CopyColorTable - _mesa_meta_CopyConvolutionFilter1D - _mesa_meta_CopyConvolutionFilter2D - _mesa_meta_CopyTexImage1D - _mesa_meta_CopyTexImage2D - _mesa_meta_CopyTexSubImage1D - _mesa_meta_CopyTexSubImage2D - _mesa_meta_CopyTexSubImage3D - _swrast_Accum - _swrast_Bitmap - _swrast_BlitFramebuffer - _swrast_CopyPixels - _swrast_DrawPixels - _swrast_GetDeviceDriverReference - _swrast_Clear - _swrast_choose_line - _swrast_choose_triangle - _swrast_CreateContext - _swrast_DestroyContext - _swrast_exec_fragment_program - _swrast_InvalidateState - _swrast_ReadPixels - _swsetup_Wakeup - _swsetup_CreateContext - _swsetup_DestroyContext - _swsetup_InvalidateState - _tnl_CreateContext - _tnl_DestroyContext - _tnl_InvalidateState - _tnl_run_pipeline - _tnl_program_string - _tnl_RasterPos diff --git a/mesalib/src/mesa/drivers/windows/gdi/wgl.c b/mesalib/src/mesa/drivers/windows/gdi/wgl.c index 8d8087067..1dafe6e29 100644 --- a/mesalib/src/mesa/drivers/windows/gdi/wgl.c +++ b/mesalib/src/mesa/drivers/windows/gdi/wgl.c @@ -54,8 +54,8 @@ #include <windows.h> #endif -#include "config.h" -#include "glapi.h" +#include "main/config.h" +#include "glapi/glapi.h" #include "GL/wmesa.h" /* protos for wmesa* functions */ /* diff --git a/mesalib/src/mesa/drivers/windows/gdi/wmesa.c b/mesalib/src/mesa/drivers/windows/gdi/wmesa.c index 4a8b1b283..35a150d06 100644 --- a/mesalib/src/mesa/drivers/windows/gdi/wmesa.c +++ b/mesalib/src/mesa/drivers/windows/gdi/wmesa.c @@ -5,12 +5,13 @@ #include "wmesadef.h" #include "colors.h" -#include <GL/wmesa.h> +#include "GL/wmesa.h" #include <winuser.h> -#include "context.h" -#include "extensions.h" -#include "framebuffer.h" -#include "renderbuffer.h" +#include "main/context.h" +#include "main/extensions.h" +#include "main/framebuffer.h" +#include "main/renderbuffer.h" +#include "main/macros.h" #include "drivers/common/driverfuncs.h" #include "drivers/common/meta.h" #include "vbo/vbo.h" @@ -29,7 +30,7 @@ static WMesaFramebuffer FirstFramebuffer = NULL; * Create a new WMesaFramebuffer object which will correspond to the * given HDC (Window handle). */ -WMesaFramebuffer +static WMesaFramebuffer wmesa_new_framebuffer(HDC hdc, struct gl_config *visual) { WMesaFramebuffer pwfb @@ -47,7 +48,7 @@ wmesa_new_framebuffer(HDC hdc, struct gl_config *visual) /** * Given an hdc, free the corresponding WMesaFramebuffer */ -void +static void wmesa_free_framebuffer(HDC hdc) { WMesaFramebuffer pwfb, prev; @@ -70,7 +71,7 @@ wmesa_free_framebuffer(HDC hdc) /** * Given an hdc, return the corresponding WMesaFramebuffer */ -WMesaFramebuffer +static WMesaFramebuffer wmesa_lookup_framebuffer(HDC hdc) { WMesaFramebuffer pwfb; @@ -146,9 +147,8 @@ static void wmSetPixelFormat(WMesaFramebuffer pwfb, HDC hDC) * We write into this memory with the span routines and then blit it * to the window on a buffer swap. */ -BOOL wmCreateBackingStore(WMesaFramebuffer pwfb, long lxSize, long lySize) +static BOOL wmCreateBackingStore(WMesaFramebuffer pwfb, long lxSize, long lySize) { - HDC hdc = pwfb->hDC; LPBITMAPINFO pbmi = &(pwfb->bmi); HDC hic; @@ -185,7 +185,7 @@ BOOL wmCreateBackingStore(WMesaFramebuffer pwfb, long lxSize, long lySize) } -static wmDeleteBackingStore(WMesaFramebuffer pwfb) +static void wmDeleteBackingStore(WMesaFramebuffer pwfb) { if (pwfb->hbmDIB) { SelectObject(pwfb->dib_hDC, pwfb->hOldBitmap); @@ -226,7 +226,6 @@ wmesa_get_buffer_size(struct gl_framebuffer *buffer, GLuint *width, GLuint *heig static void wmesa_flush(struct gl_context *ctx) { - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->WinSysDrawBuffer); if (ctx->Visual.doubleBufferMode == 1) { @@ -253,9 +252,7 @@ static void wmesa_flush(struct gl_context *ctx) static void clear_color(struct gl_context *ctx, const GLfloat color[4]) { WMesaContext pwc = wmesa_context(ctx); - WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); GLubyte col[3]; - UINT bytesPerPixel = pwfb->cColorBits / 8; CLAMPED_FLOAT_TO_UBYTE(col[0], color[0]); CLAMPED_FLOAT_TO_UBYTE(col[1], color[1]); @@ -447,21 +444,15 @@ static void clear(struct gl_context *ctx, GLbitfield mask) **/ /* Write a horizontal span of RGBA color pixels with a boolean mask. */ -static void write_rgba_span_front(const struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, - const GLubyte rgba[][4], - const GLubyte mask[] ) +static void write_rgba_span_front(struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, + const void *values, + const GLubyte *mask) { + const GLubyte (*rgba)[4] = (const GLubyte (*)[4])values; WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_lookup_framebuffer(pwc->hDC); - CONST BITMAPINFO bmi= - { - { - sizeof(BITMAPINFOHEADER), - n, 1, 1, 32, BI_RGB, 0, 1, 1, 0, 0 - } - }; HBITMAP bmp=0; HDC mdc=0; typedef union @@ -534,12 +525,13 @@ static void write_rgba_span_front(const struct gl_context *ctx, } /* Write a horizontal span of RGB color pixels with a boolean mask. */ -static void write_rgb_span_front(const struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, - const GLubyte rgb[][3], - const GLubyte mask[] ) +static void write_rgb_span_front(struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, + const void *values, + const GLubyte *mask) { + const GLubyte (*rgb)[3] = (const GLubyte (*)[3])values; WMesaContext pwc = wmesa_context(ctx); GLuint i; @@ -563,12 +555,13 @@ static void write_rgb_span_front(const struct gl_context *ctx, * Write a horizontal span of pixels with a boolean mask. The current color * is used for all pixels. */ -static void write_mono_rgba_span_front(const struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, - const GLchan color[4], - const GLubyte mask[]) +static void write_mono_rgba_span_front(struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, + const void *value, + const GLubyte *mask) { + const GLchan *color = (const GLchan *)value; GLuint i; WMesaContext pwc = wmesa_context(ctx); COLORREF colorref; @@ -588,13 +581,14 @@ static void write_mono_rgba_span_front(const struct gl_context *ctx, } /* Write an array of RGBA pixels with a boolean mask. */ -static void write_rgba_pixels_front(const struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, - const GLint x[], const GLint y[], - const GLubyte rgba[][4], - const GLubyte mask[] ) +static void write_rgba_pixels_front(struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, + const GLint x[], const GLint y[], + const void *values, + const GLubyte *mask) { + const GLubyte (*rgba)[4] = (const GLubyte (*)[4])values; GLuint i; WMesaContext pwc = wmesa_context(ctx); (void) ctx; @@ -611,13 +605,14 @@ static void write_rgba_pixels_front(const struct gl_context *ctx, * Write an array of pixels with a boolean mask. The current color * is used for all pixels. */ -static void write_mono_rgba_pixels_front(const struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, - const GLint x[], const GLint y[], - const GLchan color[4], - const GLubyte mask[] ) +static void write_mono_rgba_pixels_front(struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, + const GLint x[], const GLint y[], + const void *value, + const GLubyte *mask) { + const GLchan *color = (const GLchan *)value; GLuint i; WMesaContext pwc = wmesa_context(ctx); COLORREF colorref; @@ -629,11 +624,12 @@ static void write_mono_rgba_pixels_front(const struct gl_context *ctx, } /* Read a horizontal span of color pixels. */ -static void read_rgba_span_front(const struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, GLint x, GLint y, - GLubyte rgba[][4] ) +static void read_rgba_span_front(struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, GLint x, GLint y, + void *values) { + GLubyte (*rgba)[4] = (GLubyte (*)[4])values; WMesaContext pwc = wmesa_context(ctx); GLuint i; COLORREF Color; @@ -649,11 +645,12 @@ static void read_rgba_span_front(const struct gl_context *ctx, /* Read an array of color pixels. */ -static void read_rgba_pixels_front(const struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLuint n, const GLint x[], const GLint y[], - GLubyte rgba[][4]) +static void read_rgba_pixels_front(struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint n, const GLint x[], const GLint y[], + void *values) { + GLubyte (*rgba)[4] = (GLubyte (*)[4])values; WMesaContext pwc = wmesa_context(ctx); GLuint i; COLORREF Color; @@ -678,13 +675,13 @@ LPDWORD lpdw = ((LPDWORD)((pwc)->pbPixels + (pwc)->ScanWidth * (y)) + (x)); \ /* Write a horizontal span of RGBA color pixels with a boolean mask. */ -static void write_rgba_span_32(const struct gl_context *ctx, +static void write_rgba_span_32(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - const GLubyte rgba[][4], - const GLubyte mask[] ) + const void *values, + const GLubyte *mask) { - WMesaContext pwc = wmesa_context(ctx); + const GLubyte (*rgba)[4] = (const GLubyte (*)[4])values; WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); GLuint i; LPDWORD lpdw; @@ -708,13 +705,13 @@ static void write_rgba_span_32(const struct gl_context *ctx, /* Write a horizontal span of RGB color pixels with a boolean mask. */ -static void write_rgb_span_32(const struct gl_context *ctx, +static void write_rgb_span_32(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - const GLubyte rgb[][3], - const GLubyte mask[] ) + const void *values, + const GLubyte *mask) { - WMesaContext pwc = wmesa_context(ctx); + const GLubyte (*rgb)[3] = (const GLubyte (*)[3])values; WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); GLuint i; LPDWORD lpdw; @@ -740,16 +737,16 @@ static void write_rgb_span_32(const struct gl_context *ctx, * Write a horizontal span of pixels with a boolean mask. The current color * is used for all pixels. */ -static void write_mono_rgba_span_32(const struct gl_context *ctx, +static void write_mono_rgba_span_32(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - const GLchan color[4], - const GLubyte mask[]) + const void *value, + const GLubyte *mask) { + const GLchan *color = (const GLchan *)value; LPDWORD lpdw; DWORD pixel; GLuint i; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); lpdw = ((LPDWORD)(pwfb->pbPixels + pwfb->ScanWidth * y)) + x; y=FLIP(y); @@ -766,14 +763,14 @@ static void write_mono_rgba_span_32(const struct gl_context *ctx, } /* Write an array of RGBA pixels with a boolean mask. */ -static void write_rgba_pixels_32(const struct gl_context *ctx, +static void write_rgba_pixels_32(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - const GLubyte rgba[][4], - const GLubyte mask[]) + const void *values, + const GLubyte *mask) { + const GLubyte (*rgba)[4] = (const GLubyte (*)[4])values; GLuint i; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); for (i=0; i<n; i++) if (mask[i]) @@ -785,15 +782,15 @@ static void write_rgba_pixels_32(const struct gl_context *ctx, * Write an array of pixels with a boolean mask. The current color * is used for all pixels. */ -static void write_mono_rgba_pixels_32(const struct gl_context *ctx, +static void write_mono_rgba_pixels_32(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - const GLchan color[4], - const GLubyte mask[]) + const void *value, + const GLubyte *mask) { + const GLchan *color = (const GLchan *)value; GLuint i; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); for (i=0; i<n; i++) if (mask[i]) @@ -802,15 +799,15 @@ static void write_mono_rgba_pixels_32(const struct gl_context *ctx, } /* Read a horizontal span of color pixels. */ -static void read_rgba_span_32(const struct gl_context *ctx, +static void read_rgba_span_32(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - GLubyte rgba[][4] ) + void *values) { + GLubyte (*rgba)[4] = (GLubyte (*)[4])values; GLuint i; DWORD pixel; LPDWORD lpdw; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); y = FLIP(y); @@ -826,15 +823,15 @@ static void read_rgba_span_32(const struct gl_context *ctx, /* Read an array of color pixels. */ -static void read_rgba_pixels_32(const struct gl_context *ctx, +static void read_rgba_pixels_32(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - GLubyte rgba[][4]) + void *values) { + GLubyte (*rgba)[4] = (GLubyte (*)[4])values; GLuint i; DWORD pixel; LPDWORD lpdw; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); for (i=0; i<n; i++) { @@ -860,13 +857,13 @@ lpb[1] = (g); \ lpb[2] = (r); } /* Write a horizontal span of RGBA color pixels with a boolean mask. */ -static void write_rgba_span_24(const struct gl_context *ctx, +static void write_rgba_span_24(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - const GLubyte rgba[][4], - const GLubyte mask[] ) + const void *values, + const GLubyte *mask) { - WMesaContext pwc = wmesa_context(ctx); + const GLubyte (*rgba)[4] = (const GLubyte (*)[4])values; WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); GLuint i; LPBYTE lpb; @@ -894,13 +891,13 @@ static void write_rgba_span_24(const struct gl_context *ctx, /* Write a horizontal span of RGB color pixels with a boolean mask. */ -static void write_rgb_span_24(const struct gl_context *ctx, +static void write_rgb_span_24(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - const GLubyte rgb[][3], - const GLubyte mask[] ) + const void *values, + const GLubyte *mask) { - WMesaContext pwc = wmesa_context(ctx); + const GLubyte (*rgb)[3] = (const GLubyte (*)[3])values; WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); GLuint i; LPBYTE lpb; @@ -930,15 +927,15 @@ static void write_rgb_span_24(const struct gl_context *ctx, * Write a horizontal span of pixels with a boolean mask. The current color * is used for all pixels. */ -static void write_mono_rgba_span_24(const struct gl_context *ctx, +static void write_mono_rgba_span_24(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - const GLchan color[4], - const GLubyte mask[]) + const void *value, + const GLubyte *mask) { + const GLchan *color = (const GLchan *)value; LPBYTE lpb; GLuint i; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); lpb = ((LPBYTE)(pwfb->pbPixels + pwfb->ScanWidth * y)) + (3 * x); y=FLIP(y); @@ -959,14 +956,14 @@ static void write_mono_rgba_span_24(const struct gl_context *ctx, } /* Write an array of RGBA pixels with a boolean mask. */ -static void write_rgba_pixels_24(const struct gl_context *ctx, +static void write_rgba_pixels_24(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - const GLubyte rgba[][4], - const GLubyte mask[]) + const void *values, + const GLubyte *mask) { + const GLubyte (*rgba)[4] = (const GLubyte (*)[4])values; GLuint i; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); for (i=0; i<n; i++) if (mask[i]) @@ -978,15 +975,15 @@ static void write_rgba_pixels_24(const struct gl_context *ctx, * Write an array of pixels with a boolean mask. The current color * is used for all pixels. */ -static void write_mono_rgba_pixels_24(const struct gl_context *ctx, +static void write_mono_rgba_pixels_24(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - const GLchan color[4], - const GLubyte mask[]) + const void *value, + const GLubyte *mask) { + const GLchan *color = (const GLchan *)value; GLuint i; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); for (i=0; i<n; i++) if (mask[i]) @@ -995,14 +992,14 @@ static void write_mono_rgba_pixels_24(const struct gl_context *ctx, } /* Read a horizontal span of color pixels. */ -static void read_rgba_span_24(const struct gl_context *ctx, +static void read_rgba_span_24(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - GLubyte rgba[][4] ) + void *values) { + GLubyte (*rgba)[4] = (GLubyte (*)[4])values; GLuint i; LPBYTE lpb; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); y = FLIP(y); @@ -1017,14 +1014,14 @@ static void read_rgba_span_24(const struct gl_context *ctx, /* Read an array of color pixels. */ -static void read_rgba_pixels_24(const struct gl_context *ctx, +static void read_rgba_pixels_24(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - GLubyte rgba[][4]) + void *values) { + GLubyte (*rgba)[4] = (GLubyte (*)[4])values; GLuint i; LPBYTE lpb; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); for (i=0; i<n; i++) { @@ -1049,13 +1046,13 @@ LPWORD lpw = ((LPWORD)((pwc)->pbPixels + (pwc)->ScanWidth * (y)) + (x)); \ /* Write a horizontal span of RGBA color pixels with a boolean mask. */ -static void write_rgba_span_16(const struct gl_context *ctx, +static void write_rgba_span_16(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - const GLubyte rgba[][4], - const GLubyte mask[] ) + const void *values, + const GLubyte *mask) { - WMesaContext pwc = wmesa_context(ctx); + const GLubyte (*rgba)[4] = (const GLubyte (*)[4])values; WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); GLuint i; LPWORD lpw; @@ -1079,13 +1076,13 @@ static void write_rgba_span_16(const struct gl_context *ctx, /* Write a horizontal span of RGB color pixels with a boolean mask. */ -static void write_rgb_span_16(const struct gl_context *ctx, +static void write_rgb_span_16(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - const GLubyte rgb[][3], - const GLubyte mask[] ) + const void *values, + const GLubyte *mask) { - WMesaContext pwc = wmesa_context(ctx); + const GLubyte (*rgb)[3] = (const GLubyte (*)[3])values; WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); GLuint i; LPWORD lpw; @@ -1111,16 +1108,16 @@ static void write_rgb_span_16(const struct gl_context *ctx, * Write a horizontal span of pixels with a boolean mask. The current color * is used for all pixels. */ -static void write_mono_rgba_span_16(const struct gl_context *ctx, +static void write_mono_rgba_span_16(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - const GLchan color[4], - const GLubyte mask[]) + const void *value, + const GLubyte *mask) { + const GLchan *color = (const GLchan *)value; LPWORD lpw; WORD pixel; GLuint i; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); (void) ctx; lpw = ((LPWORD)(pwfb->pbPixels + pwfb->ScanWidth * y)) + x; @@ -1138,14 +1135,14 @@ static void write_mono_rgba_span_16(const struct gl_context *ctx, } /* Write an array of RGBA pixels with a boolean mask. */ -static void write_rgba_pixels_16(const struct gl_context *ctx, +static void write_rgba_pixels_16(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - const GLubyte rgba[][4], - const GLubyte mask[]) + const void *values, + const GLubyte *mask) { + const GLubyte (*rgba)[4] = (const GLubyte (*)[4])values; GLuint i; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); (void) ctx; for (i=0; i<n; i++) @@ -1158,15 +1155,15 @@ static void write_rgba_pixels_16(const struct gl_context *ctx, * Write an array of pixels with a boolean mask. The current color * is used for all pixels. */ -static void write_mono_rgba_pixels_16(const struct gl_context *ctx, +static void write_mono_rgba_pixels_16(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - const GLchan color[4], - const GLubyte mask[]) + const void *value, + const GLubyte *mask) { + const GLchan *color = (const GLchan *)value; GLuint i; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); (void) ctx; for (i=0; i<n; i++) @@ -1176,14 +1173,14 @@ static void write_mono_rgba_pixels_16(const struct gl_context *ctx, } /* Read a horizontal span of color pixels. */ -static void read_rgba_span_16(const struct gl_context *ctx, +static void read_rgba_span_16(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, GLint x, GLint y, - GLubyte rgba[][4] ) + void *values) { + GLubyte (*rgba)[4] = (GLubyte (*)[4])values; GLuint i, pixel; LPWORD lpw; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); y = FLIP(y); @@ -1200,14 +1197,14 @@ static void read_rgba_span_16(const struct gl_context *ctx, /* Read an array of color pixels. */ -static void read_rgba_pixels_16(const struct gl_context *ctx, +static void read_rgba_pixels_16(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint n, const GLint x[], const GLint y[], - GLubyte rgba[][4]) + void *values) { + GLubyte (*rgba)[4] = (GLubyte (*)[4])values; GLuint i, pixel; LPWORD lpw; - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(ctx->DrawBuffer); for (i=0; i<n; i++) { @@ -1260,8 +1257,9 @@ wmesa_renderbuffer_storage(struct gl_context *ctx, * Plug in the Get/PutRow/Values functions for a renderbuffer depending * on if we're drawing to the front or back color buffer. */ -void wmesa_set_renderbuffer_funcs(struct gl_renderbuffer *rb, int pixelformat, - int cColorBits, int double_buffer) +static void +wmesa_set_renderbuffer_funcs(struct gl_renderbuffer *rb, int pixelformat, + int cColorBits, int double_buffer) { if (double_buffer) { /* back buffer */ @@ -1323,7 +1321,6 @@ static void wmesa_resize_buffers(struct gl_context *ctx, struct gl_framebuffer *buffer, GLuint width, GLuint height) { - WMesaContext pwc = wmesa_context(ctx); WMesaFramebuffer pwfb = wmesa_framebuffer(buffer); if (pwfb->Base.Width != width || pwfb->Base.Height != height) { @@ -1352,7 +1349,6 @@ static void wmesa_viewport(struct gl_context *ctx, GLint x, GLint y, GLsizei width, GLsizei height) { - WMesaContext pwc = wmesa_context(ctx); GLuint new_width, new_height; wmesa_get_buffer_size(ctx->WinSysDrawBuffer, &new_width, &new_height); @@ -1552,7 +1548,7 @@ void WMesaDestroyContext( WMesaContext pwc ) /** * Create a new color renderbuffer. */ -struct gl_renderbuffer * +static struct gl_renderbuffer * wmesa_new_renderbuffer(void) { struct gl_renderbuffer *rb = CALLOC_STRUCT(gl_renderbuffer); diff --git a/mesalib/src/mesa/drivers/windows/gdi/wmesadef.h b/mesalib/src/mesa/drivers/windows/gdi/wmesadef.h index 530673373..9fda88390 100644 --- a/mesalib/src/mesa/drivers/windows/gdi/wmesadef.h +++ b/mesalib/src/mesa/drivers/windows/gdi/wmesadef.h @@ -1,43 +1,43 @@ -#ifndef WMESADEF_H
-#define WMESADEF_H
-#ifdef __MINGW32__
-#include <windows.h>
-#endif
-#include "context.h"
-
-
-/**
- * The Windows Mesa rendering context, derived from struct gl_context.
- */
-struct wmesa_context {
- struct gl_context gl_ctx; /* The core GL/Mesa context */
- HDC hDC;
- COLORREF clearColorRef;
- HPEN clearPen;
- HBRUSH clearBrush;
-};
-
-
-/**
- * Windows framebuffer, derived from gl_framebuffer
- */
-struct wmesa_framebuffer
-{
- struct gl_framebuffer Base;
- HDC hDC;
- int pixelformat;
- GLuint ScanWidth;
- int cColorBits;
- /* back buffer DIB fields */
- HDC dib_hDC;
- BITMAPINFO bmi;
- HBITMAP hbmDIB;
- HBITMAP hOldBitmap;
- PBYTE pbPixels;
- struct wmesa_framebuffer *next;
-};
-
-typedef struct wmesa_framebuffer *WMesaFramebuffer;
-
-
-#endif /* WMESADEF_H */
+#ifndef WMESADEF_H +#define WMESADEF_H + +#include <windows.h> + +#include "main/context.h" + + +/** + * The Windows Mesa rendering context, derived from struct gl_context. + */ +struct wmesa_context { + struct gl_context gl_ctx; /* The core GL/Mesa context */ + HDC hDC; + COLORREF clearColorRef; + HPEN clearPen; + HBRUSH clearBrush; +}; + + +/** + * Windows framebuffer, derived from gl_framebuffer + */ +struct wmesa_framebuffer +{ + struct gl_framebuffer Base; + HDC hDC; + int pixelformat; + GLuint ScanWidth; + int cColorBits; + /* back buffer DIB fields */ + HDC dib_hDC; + BITMAPINFO bmi; + HBITMAP hbmDIB; + HBITMAP hOldBitmap; + PBYTE pbPixels; + struct wmesa_framebuffer *next; +}; + +typedef struct wmesa_framebuffer *WMesaFramebuffer; + + +#endif /* WMESADEF_H */ diff --git a/mesalib/src/mesa/main/api_exec.c b/mesalib/src/mesa/main/api_exec.c index d0298df20..93214dd0b 100644 --- a/mesalib/src/mesa/main/api_exec.c +++ b/mesalib/src/mesa/main/api_exec.c @@ -502,6 +502,9 @@ _mesa_create_exec_table(void) 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); #endif /* ARB 14. GL_ARB_point_parameters */ @@ -597,6 +600,12 @@ _mesa_create_exec_table(void) SET_DrawBuffersARB(exec, _mesa_DrawBuffersARB); #endif + /* ARB 104. GL_ARB_robustness */ + SET_GetGraphicsResetStatusARB(exec, _mesa_GetGraphicsResetStatusARB); + SET_GetnPolygonStippleARB(exec, _mesa_GetnPolygonStippleARB); + SET_GetnTexImageARB(exec, _mesa_GetnTexImageARB); + SET_ReadnPixelsARB(exec, _mesa_ReadnPixelsARB); + /* GL_ARB_sync */ _mesa_init_sync_dispatch(exec); diff --git a/mesalib/src/mesa/main/colortab.c b/mesalib/src/mesa/main/colortab.c index 35b3096f6..ddb0f1f65 100644 --- a/mesalib/src/mesa/main/colortab.c +++ b/mesalib/src/mesa/main/colortab.c @@ -190,7 +190,7 @@ store_colortable_entries(struct gl_context *ctx, struct gl_color_table *table, { data = _mesa_map_validate_pbo_source(ctx, 1, &ctx->Unpack, count, 1, 1, - format, type, data, + format, type, INT_MAX, data, "glColor[Sub]Table"); if (!data) return; @@ -509,8 +509,8 @@ _mesa_CopyColorSubTable(GLenum target, GLsizei start, static void GLAPIENTRY -_mesa_GetColorTable( GLenum target, GLenum format, - GLenum type, GLvoid *data ) +_mesa_GetnColorTableARB( GLenum target, GLenum format, GLenum type, + GLsizei bufSize, GLvoid *data ) { GET_CURRENT_CONTEXT(ctx); struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx); @@ -614,7 +614,7 @@ _mesa_GetColorTable( GLenum target, GLenum format, data = _mesa_map_validate_pbo_dest(ctx, 1, &ctx->Pack, table->Size, 1, 1, - format, type, data, + format, type, bufSize, data, "glGetColorTable"); if (!data) return; @@ -630,6 +630,13 @@ _mesa_GetColorTable( GLenum target, GLenum format, } +static void GLAPIENTRY +_mesa_GetColorTable( GLenum target, GLenum format, + GLenum type, GLvoid *data ) +{ + _mesa_GetnColorTableARB(target, format, type, INT_MAX, data); +} + static void GLAPIENTRY _mesa_ColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params) @@ -790,6 +797,9 @@ _mesa_init_colortable_dispatch(struct _glapi_table *disp) SET_GetColorTable(disp, _mesa_GetColorTable); SET_GetColorTableParameterfv(disp, _mesa_GetColorTableParameterfv); SET_GetColorTableParameteriv(disp, _mesa_GetColorTableParameteriv); + + /* GL_ARB_robustness */ + SET_GetnColorTableARB(disp, _mesa_GetnColorTableARB); } diff --git a/mesalib/src/mesa/main/context.c b/mesalib/src/mesa/main/context.c index 8053edc23..ea13bdd68 100644 --- a/mesalib/src/mesa/main/context.c +++ b/mesalib/src/mesa/main/context.c @@ -658,6 +658,9 @@ _mesa_init_constants(struct gl_context *ctx) /** GL_EXT_gpu_shader4 */ ctx->Const.MinProgramTexelOffset = -8; ctx->Const.MaxProgramTexelOffset = 7; + + /* GL_ARB_robustness */ + ctx->Const.ResetStrategy = GL_NO_RESET_NOTIFICATION_ARB; } @@ -793,6 +796,7 @@ init_attrib_groups(struct gl_context *ctx) /* Miscellaneous */ ctx->NewState = _NEW_ALL; ctx->ErrorValue = (GLenum) GL_NO_ERROR; + ctx->ResetStatus = (GLenum) GL_NO_ERROR; ctx->varying_vp_inputs = ~0; return GL_TRUE; diff --git a/mesalib/src/mesa/main/convolve.c b/mesalib/src/mesa/main/convolve.c index 1e789dd8c..74f28da87 100644 --- a/mesalib/src/mesa/main/convolve.c +++ b/mesalib/src/mesa/main/convolve.c @@ -1,182 +1,205 @@ -/*
- * Mesa 3-D graphics library
- * Version: 6.5.2
- *
- * Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/*
- * Image convolution functions.
- *
- * Notes: filter kernel elements are indexed by <n> and <m> as in
- * the GL spec.
- */
-
-
-#include "glheader.h"
-#include "bufferobj.h"
-#include "colormac.h"
-#include "convolve.h"
-#include "macros.h"
-#include "mfeatures.h"
-#include "mtypes.h"
-#include "main/dispatch.h"
-
-
-#if FEATURE_convolve
-
-static void GLAPIENTRY
-_mesa_ConvolutionFilter1D(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *image)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionFilter1D");
-}
-
-static void GLAPIENTRY
-_mesa_ConvolutionFilter2D(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionFilter2D");
-}
-
-
-static void GLAPIENTRY
-_mesa_ConvolutionParameterf(GLenum target, GLenum pname, GLfloat param)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameterf");
-}
-
-
-static void GLAPIENTRY
-_mesa_ConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat *params)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameterfv");
-}
-
-
-static void GLAPIENTRY
-_mesa_ConvolutionParameteri(GLenum target, GLenum pname, GLint param)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameteri");
-}
-
-
-static void GLAPIENTRY
-_mesa_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameteriv");
-}
-
-
-static void GLAPIENTRY
-_mesa_CopyConvolutionFilter1D(GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_ENUM, "glCopyConvolutionFilter1D");
-}
-
-
-static void GLAPIENTRY
-_mesa_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_ENUM, "glCopyConvolutionFilter2D");
-}
-
-
-static void GLAPIENTRY
-_mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type,
- GLvoid *image)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetConvolutionFilter");
-}
-
-
-static void GLAPIENTRY
-_mesa_GetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat *params)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetConvolutionParameterfv");
-}
-
-
-static void GLAPIENTRY
-_mesa_GetConvolutionParameteriv(GLenum target, GLenum pname, GLint *params)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetConvolutionParameteriv");
-}
-
-
-static void GLAPIENTRY
-_mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type,
- GLvoid *row, GLvoid *column, GLvoid *span)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetSeparableFilter");
-}
-
-
-static void GLAPIENTRY
-_mesa_SeparableFilter2D(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_ENUM, "glSeparableFilter2D");
-}
-
-void
-_mesa_init_convolve_dispatch(struct _glapi_table *disp)
-{
- SET_ConvolutionFilter1D(disp, _mesa_ConvolutionFilter1D);
- SET_ConvolutionFilter2D(disp, _mesa_ConvolutionFilter2D);
- SET_ConvolutionParameterf(disp, _mesa_ConvolutionParameterf);
- SET_ConvolutionParameterfv(disp, _mesa_ConvolutionParameterfv);
- SET_ConvolutionParameteri(disp, _mesa_ConvolutionParameteri);
- SET_ConvolutionParameteriv(disp, _mesa_ConvolutionParameteriv);
- SET_CopyConvolutionFilter1D(disp, _mesa_CopyConvolutionFilter1D);
- SET_CopyConvolutionFilter2D(disp, _mesa_CopyConvolutionFilter2D);
- SET_GetConvolutionFilter(disp, _mesa_GetConvolutionFilter);
- SET_GetConvolutionParameterfv(disp, _mesa_GetConvolutionParameterfv);
- SET_GetConvolutionParameteriv(disp, _mesa_GetConvolutionParameteriv);
- SET_SeparableFilter2D(disp, _mesa_SeparableFilter2D);
- SET_GetSeparableFilter(disp, _mesa_GetSeparableFilter);
-}
-
-
-#endif /* FEATURE_convolve */
+/* + * Mesa 3-D graphics library + * Version: 6.5.2 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/* + * Image convolution functions. + * + * Notes: filter kernel elements are indexed by <n> and <m> as in + * the GL spec. + */ + + +#include "glheader.h" +#include "bufferobj.h" +#include "colormac.h" +#include "convolve.h" +#include "macros.h" +#include "mfeatures.h" +#include "mtypes.h" +#include "main/dispatch.h" + + +#if FEATURE_convolve + +static void GLAPIENTRY +_mesa_ConvolutionFilter1D(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *image) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionFilter1D"); +} + +static void GLAPIENTRY +_mesa_ConvolutionFilter2D(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionFilter2D"); +} + + +static void GLAPIENTRY +_mesa_ConvolutionParameterf(GLenum target, GLenum pname, GLfloat param) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameterf"); +} + + +static void GLAPIENTRY +_mesa_ConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat *params) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameterfv"); +} + + +static void GLAPIENTRY +_mesa_ConvolutionParameteri(GLenum target, GLenum pname, GLint param) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameteri"); +} + + +static void GLAPIENTRY +_mesa_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameteriv"); +} + + +static void GLAPIENTRY +_mesa_CopyConvolutionFilter1D(GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_ENUM, "glCopyConvolutionFilter1D"); +} + + +static void GLAPIENTRY +_mesa_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_ENUM, "glCopyConvolutionFilter2D"); +} + + +static void GLAPIENTRY +_mesa_GetnConvolutionFilterARB(GLenum target, GLenum format, GLenum type, + GLsizei bufSize, GLvoid *image) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetConvolutionFilter"); +} + + +static void GLAPIENTRY +_mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type, + GLvoid *image) +{ + _mesa_GetnConvolutionFilterARB(target, format, type, INT_MAX, image); +} + + +static void GLAPIENTRY +_mesa_GetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat *params) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_ENUM, "glGetConvolutionParameterfv"); +} + + +static void GLAPIENTRY +_mesa_GetConvolutionParameteriv(GLenum target, GLenum pname, GLint *params) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_ENUM, "glGetConvolutionParameteriv"); +} + + +static void GLAPIENTRY +_mesa_GetnSeparableFilterARB(GLenum target, GLenum format, GLenum type, + GLsizei rowBufSize, GLvoid *row, + GLsizei columnBufSize, GLvoid *column, + GLvoid *span) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_ENUM, "glGetSeparableFilter"); +} + + +static void GLAPIENTRY +_mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type, + GLvoid *row, GLvoid *column, GLvoid *span) +{ + _mesa_GetnSeparableFilterARB(target, format, type, INT_MAX, row, + INT_MAX, column, span); +} + + +static void GLAPIENTRY +_mesa_SeparableFilter2D(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_ENUM, "glSeparableFilter2D"); +} + +void +_mesa_init_convolve_dispatch(struct _glapi_table *disp) +{ + SET_ConvolutionFilter1D(disp, _mesa_ConvolutionFilter1D); + SET_ConvolutionFilter2D(disp, _mesa_ConvolutionFilter2D); + SET_ConvolutionParameterf(disp, _mesa_ConvolutionParameterf); + SET_ConvolutionParameterfv(disp, _mesa_ConvolutionParameterfv); + SET_ConvolutionParameteri(disp, _mesa_ConvolutionParameteri); + SET_ConvolutionParameteriv(disp, _mesa_ConvolutionParameteriv); + SET_CopyConvolutionFilter1D(disp, _mesa_CopyConvolutionFilter1D); + SET_CopyConvolutionFilter2D(disp, _mesa_CopyConvolutionFilter2D); + SET_GetConvolutionFilter(disp, _mesa_GetConvolutionFilter); + SET_GetConvolutionParameterfv(disp, _mesa_GetConvolutionParameterfv); + SET_GetConvolutionParameteriv(disp, _mesa_GetConvolutionParameteriv); + SET_SeparableFilter2D(disp, _mesa_SeparableFilter2D); + SET_GetSeparableFilter(disp, _mesa_GetSeparableFilter); + + /* GL_ARB_robustness */ + SET_GetnConvolutionFilterARB(disp, _mesa_GetnConvolutionFilterARB); + SET_GetnSeparableFilterARB(disp, _mesa_GetnSeparableFilterARB); +} + + +#endif /* FEATURE_convolve */ diff --git a/mesalib/src/mesa/main/depthstencil.c b/mesalib/src/mesa/main/depthstencil.c index a1f206b9c..ab62c97fe 100644 --- a/mesalib/src/mesa/main/depthstencil.c +++ b/mesalib/src/mesa/main/depthstencil.c @@ -1,832 +1,835 @@ -/*
- * Mesa 3-D graphics library
- * Version: 6.5
- *
- * Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include "glheader.h"
-#include "imports.h"
-#include "context.h"
-#include "formats.h"
-#include "mtypes.h"
-#include "depthstencil.h"
-#include "renderbuffer.h"
-
-
-/**
- * Adaptor/wrappers for GL_DEPTH_STENCIL renderbuffers.
- *
- * The problem with a GL_DEPTH_STENCIL renderbuffer is that sometimes we
- * want to treat it as a stencil buffer, other times we want to treat it
- * as a depth/z buffer and still other times when we want to treat it as
- * a combined Z+stencil buffer! That implies we need three different sets
- * of Get/Put functions.
- *
- * We solve this by wrapping the Z24_S8 or S8_Z24 renderbuffer with depth and
- * stencil adaptors, each with the right kind of depth/stencil Get/Put functions.
- */
-
-
-static void *
-nop_get_pointer(struct gl_context *ctx, struct gl_renderbuffer *rb, GLint x, GLint y)
-{
- (void) ctx;
- (void) rb;
- (void) x;
- (void) y;
- return NULL;
-}
-
-
-/**
- * Delete a depth or stencil wrapper renderbuffer.
- */
-static void
-delete_wrapper(struct gl_renderbuffer *rb)
-{
- ASSERT(rb->Format == MESA_FORMAT_S8 ||
- rb->Format == MESA_FORMAT_X8_Z24);
- _mesa_reference_renderbuffer(&rb->Wrapped, NULL);
- free(rb);
-}
-
-
-/**
- * Realloc storage for wrapper.
- */
-static GLboolean
-alloc_wrapper_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
- GLenum internalFormat, GLuint width, GLuint height)
-{
- /* just pass this on to the wrapped renderbuffer */
- struct gl_renderbuffer *dsrb = rb->Wrapped;
- GLboolean retVal;
-
- (void) internalFormat;
-
- ASSERT(dsrb->Format == MESA_FORMAT_Z24_S8 ||
- dsrb->Format == MESA_FORMAT_Z24_X8 ||
- dsrb->Format == MESA_FORMAT_S8_Z24 ||
- dsrb->Format == MESA_FORMAT_X8_Z24);
-
- retVal = dsrb->AllocStorage(ctx, dsrb, dsrb->InternalFormat, width, height);
- if (retVal) {
- rb->Width = width;
- rb->Height = height;
- }
- return retVal;
-}
-
-
-
-
-/*======================================================================
- * Depth wrapper around depth/stencil renderbuffer
- */
-
-static void
-get_row_z24(struct gl_context *ctx, struct gl_renderbuffer *z24rb, GLuint count,
- GLint x, GLint y, void *values)
-{
- struct gl_renderbuffer *dsrb = z24rb->Wrapped;
- GLuint temp[MAX_WIDTH], i;
- GLuint *dst = (GLuint *) values;
- const GLuint *src = (const GLuint *) dsrb->GetPointer(ctx, dsrb, x, y);
- ASSERT(z24rb->DataType == GL_UNSIGNED_INT);
- ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- if (!src) {
- dsrb->GetRow(ctx, dsrb, count, x, y, temp);
- src = temp;
- }
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- dst[i] = src[i] >> 8;
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- dst[i] = src[i] & 0xffffff;
- }
- }
-}
-
-static void
-get_values_z24(struct gl_context *ctx, struct gl_renderbuffer *z24rb, GLuint count,
- const GLint x[], const GLint y[], void *values)
-{
- struct gl_renderbuffer *dsrb = z24rb->Wrapped;
- GLuint temp[MAX_WIDTH], i;
- GLuint *dst = (GLuint *) values;
- ASSERT(z24rb->DataType == GL_UNSIGNED_INT);
- ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- ASSERT(count <= MAX_WIDTH);
- /* don't bother trying direct access */
- dsrb->GetValues(ctx, dsrb, count, x, y, temp);
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- dst[i] = temp[i] >> 8;
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- dst[i] = temp[i] & 0xffffff;
- }
- }
-}
-
-static void
-put_row_z24(struct gl_context *ctx, struct gl_renderbuffer *z24rb, GLuint count,
- GLint x, GLint y, const void *values, const GLubyte *mask)
-{
- struct gl_renderbuffer *dsrb = z24rb->Wrapped;
- const GLuint *src = (const GLuint *) values;
- GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x, y);
- ASSERT(z24rb->DataType == GL_UNSIGNED_INT);
- ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- if (dst) {
- /* direct access */
- GLuint i;
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- dst[i] = (src[i] << 8) | (dst[i] & 0xff);
- }
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- dst[i] = (src[i] & 0xffffff) | (dst[i] & 0xff000000);
- }
- }
- }
- }
- else {
- /* get, modify, put */
- GLuint temp[MAX_WIDTH], i;
- dsrb->GetRow(ctx, dsrb, count, x, y, temp);
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = (src[i] << 8) | (temp[i] & 0xff);
- }
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = (src[i] & 0xffffff) | (temp[i] & 0xff000000);
- }
- }
- }
- dsrb->PutRow(ctx, dsrb, count, x, y, temp, mask);
- }
-}
-
-static void
-put_mono_row_z24(struct gl_context *ctx, struct gl_renderbuffer *z24rb, GLuint count,
- GLint x, GLint y, const void *value, const GLubyte *mask)
-{
- struct gl_renderbuffer *dsrb = z24rb->Wrapped;
- GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x, y);
- ASSERT(z24rb->DataType == GL_UNSIGNED_INT);
- ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- if (dst) {
- /* direct access */
- GLuint i;
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- const GLuint shiftedVal = *((GLuint *) value) << 8;
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- dst[i] = shiftedVal | (dst[i] & 0xff);
- }
- }
- }
- else {
- const GLuint shiftedVal = *((GLuint *) value);
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- dst[i] = shiftedVal | (dst[i] & 0xff000000);
- }
- }
- }
- }
- else {
- /* get, modify, put */
- GLuint temp[MAX_WIDTH], i;
- dsrb->GetRow(ctx, dsrb, count, x, y, temp);
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- const GLuint shiftedVal = *((GLuint *) value) << 8;
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = shiftedVal | (temp[i] & 0xff);
- }
- }
- }
- else {
- const GLuint shiftedVal = *((GLuint *) value);
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = shiftedVal | (temp[i] & 0xff000000);
- }
- }
- }
- dsrb->PutRow(ctx, dsrb, count, x, y, temp, mask);
- }
-}
-
-static void
-put_values_z24(struct gl_context *ctx, struct gl_renderbuffer *z24rb, GLuint count,
- const GLint x[], const GLint y[],
- const void *values, const GLubyte *mask)
-{
- struct gl_renderbuffer *dsrb = z24rb->Wrapped;
- const GLuint *src = (const GLuint *) values;
- ASSERT(z24rb->DataType == GL_UNSIGNED_INT);
- ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- if (dsrb->GetPointer(ctx, dsrb, 0, 0)) {
- /* direct access */
- GLuint i;
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x[i], y[i]);
- *dst = (src[i] << 8) | (*dst & 0xff);
- }
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x[i], y[i]);
- *dst = (src[i] & 0xffffff) | (*dst & 0xff000000);
- }
- }
- }
- }
- else {
- /* get, modify, put */
- GLuint temp[MAX_WIDTH], i;
- dsrb->GetValues(ctx, dsrb, count, x, y, temp);
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = (src[i] << 8) | (temp[i] & 0xff);
- }
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = (src[i] & 0xffffff) | (temp[i] & 0xff000000);
- }
- }
- }
- dsrb->PutValues(ctx, dsrb, count, x, y, temp, mask);
- }
-}
-
-static void
-put_mono_values_z24(struct gl_context *ctx, struct gl_renderbuffer *z24rb,
- GLuint count, const GLint x[], const GLint y[],
- const void *value, const GLubyte *mask)
-{
- struct gl_renderbuffer *dsrb = z24rb->Wrapped;
- GLuint temp[MAX_WIDTH], i;
- /* get, modify, put */
- dsrb->GetValues(ctx, dsrb, count, x, y, temp);
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- const GLuint shiftedVal = *((GLuint *) value) << 8;
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = shiftedVal | (temp[i] & 0xff);
- }
- }
- }
- else {
- const GLuint shiftedVal = *((GLuint *) value);
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = shiftedVal | (temp[i] & 0xff000000);
- }
- }
- }
- dsrb->PutValues(ctx, dsrb, count, x, y, temp, mask);
-}
-
-
-/**
- * Wrap the given GL_DEPTH_STENCIL renderbuffer so that it acts like
- * a depth renderbuffer.
- * \return new depth renderbuffer
- */
-struct gl_renderbuffer *
-_mesa_new_z24_renderbuffer_wrapper(struct gl_context *ctx,
- struct gl_renderbuffer *dsrb)
-{
- struct gl_renderbuffer *z24rb;
-
- ASSERT(dsrb->Format == MESA_FORMAT_Z24_S8 ||
- dsrb->Format == MESA_FORMAT_Z24_X8 ||
- dsrb->Format == MESA_FORMAT_S8_Z24 ||
- dsrb->Format == MESA_FORMAT_X8_Z24);
- ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT);
-
- z24rb = ctx->Driver.NewRenderbuffer(ctx, 0);
- if (!z24rb)
- return NULL;
-
- /* NOTE: need to do manual refcounting here */
- z24rb->Wrapped = dsrb;
- dsrb->RefCount++;
-
- z24rb->Name = dsrb->Name;
- z24rb->RefCount = 0;
- z24rb->Width = dsrb->Width;
- z24rb->Height = dsrb->Height;
- z24rb->InternalFormat = GL_DEPTH_COMPONENT24;
- z24rb->Format = MESA_FORMAT_X8_Z24;
- z24rb->_BaseFormat = GL_DEPTH_COMPONENT;
- z24rb->DataType = GL_UNSIGNED_INT;
- z24rb->Data = NULL;
- z24rb->Delete = delete_wrapper;
- z24rb->AllocStorage = alloc_wrapper_storage;
- z24rb->GetPointer = nop_get_pointer;
- z24rb->GetRow = get_row_z24;
- z24rb->GetValues = get_values_z24;
- z24rb->PutRow = put_row_z24;
- z24rb->PutRowRGB = NULL;
- z24rb->PutMonoRow = put_mono_row_z24;
- z24rb->PutValues = put_values_z24;
- z24rb->PutMonoValues = put_mono_values_z24;
-
- return z24rb;
-}
-
-
-/*======================================================================
- * Stencil wrapper around depth/stencil renderbuffer
- */
-
-static void
-get_row_s8(struct gl_context *ctx, struct gl_renderbuffer *s8rb, GLuint count,
- GLint x, GLint y, void *values)
-{
- struct gl_renderbuffer *dsrb = s8rb->Wrapped;
- GLuint temp[MAX_WIDTH], i;
- GLubyte *dst = (GLubyte *) values;
- const GLuint *src = (const GLuint *) dsrb->GetPointer(ctx, dsrb, x, y);
- ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE);
- ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- if (!src) {
- dsrb->GetRow(ctx, dsrb, count, x, y, temp);
- src = temp;
- }
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- dst[i] = src[i] & 0xff;
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- dst[i] = src[i] >> 24;
- }
- }
-}
-
-static void
-get_values_s8(struct gl_context *ctx, struct gl_renderbuffer *s8rb, GLuint count,
- const GLint x[], const GLint y[], void *values)
-{
- struct gl_renderbuffer *dsrb = s8rb->Wrapped;
- GLuint temp[MAX_WIDTH], i;
- GLubyte *dst = (GLubyte *) values;
- ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE);
- ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- ASSERT(count <= MAX_WIDTH);
- /* don't bother trying direct access */
- dsrb->GetValues(ctx, dsrb, count, x, y, temp);
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- dst[i] = temp[i] & 0xff;
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- dst[i] = temp[i] >> 24;
- }
- }
-}
-
-static void
-put_row_s8(struct gl_context *ctx, struct gl_renderbuffer *s8rb, GLuint count,
- GLint x, GLint y, const void *values, const GLubyte *mask)
-{
- struct gl_renderbuffer *dsrb = s8rb->Wrapped;
- const GLubyte *src = (const GLubyte *) values;
- GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x, y);
- ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE);
- ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- if (dst) {
- /* direct access */
- GLuint i;
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- dst[i] = (dst[i] & 0xffffff00) | src[i];
- }
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- dst[i] = (dst[i] & 0xffffff) | (src[i] << 24);
- }
- }
- }
- }
- else {
- /* get, modify, put */
- GLuint temp[MAX_WIDTH], i;
- dsrb->GetRow(ctx, dsrb, count, x, y, temp);
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = (temp[i] & 0xffffff00) | src[i];
- }
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = (temp[i] & 0xffffff) | (src[i] << 24);
- }
- }
- }
- dsrb->PutRow(ctx, dsrb, count, x, y, temp, mask);
- }
-}
-
-static void
-put_mono_row_s8(struct gl_context *ctx, struct gl_renderbuffer *s8rb, GLuint count,
- GLint x, GLint y, const void *value, const GLubyte *mask)
-{
- struct gl_renderbuffer *dsrb = s8rb->Wrapped;
- const GLubyte val = *((GLubyte *) value);
- GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x, y);
- ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE);
- ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- if (dst) {
- /* direct access */
- GLuint i;
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- dst[i] = (dst[i] & 0xffffff00) | val;
- }
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- dst[i] = (dst[i] & 0xffffff) | (val << 24);
- }
- }
- }
- }
- else {
- /* get, modify, put */
- GLuint temp[MAX_WIDTH], i;
- dsrb->GetRow(ctx, dsrb, count, x, y, temp);
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = (temp[i] & 0xffffff00) | val;
- }
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = (temp[i] & 0xffffff) | (val << 24);
- }
- }
- }
- dsrb->PutRow(ctx, dsrb, count, x, y, temp, mask);
- }
-}
-
-static void
-put_values_s8(struct gl_context *ctx, struct gl_renderbuffer *s8rb, GLuint count,
- const GLint x[], const GLint y[],
- const void *values, const GLubyte *mask)
-{
- struct gl_renderbuffer *dsrb = s8rb->Wrapped;
- const GLubyte *src = (const GLubyte *) values;
- ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE);
- ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- if (dsrb->GetPointer(ctx, dsrb, 0, 0)) {
- /* direct access */
- GLuint i;
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x[i], y[i]);
- *dst = (*dst & 0xffffff00) | src[i];
- }
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x[i], y[i]);
- *dst = (*dst & 0xffffff) | (src[i] << 24);
- }
- }
- }
- }
- else {
- /* get, modify, put */
- GLuint temp[MAX_WIDTH], i;
- dsrb->GetValues(ctx, dsrb, count, x, y, temp);
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = (temp[i] & 0xffffff00) | src[i];
- }
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = (temp[i] & 0xffffff) | (src[i] << 24);
- }
- }
- }
- dsrb->PutValues(ctx, dsrb, count, x, y, temp, mask);
- }
-}
-
-static void
-put_mono_values_s8(struct gl_context *ctx, struct gl_renderbuffer *s8rb, GLuint count,
- const GLint x[], const GLint y[],
- const void *value, const GLubyte *mask)
-{
- struct gl_renderbuffer *dsrb = s8rb->Wrapped;
- GLuint temp[MAX_WIDTH], i;
- const GLubyte val = *((GLubyte *) value);
- /* get, modify, put */
- dsrb->GetValues(ctx, dsrb, count, x, y, temp);
- if (dsrb->Format == MESA_FORMAT_Z24_S8) {
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = (temp[i] & 0xffffff00) | val;
- }
- }
- }
- else {
- assert(dsrb->Format == MESA_FORMAT_S8_Z24);
- for (i = 0; i < count; i++) {
- if (!mask || mask[i]) {
- temp[i] = (temp[i] & 0xffffff) | (val << 24);
- }
- }
- }
- dsrb->PutValues(ctx, dsrb, count, x, y, temp, mask);
-}
-
-
-/**
- * Wrap the given GL_DEPTH_STENCIL renderbuffer so that it acts like
- * a stencil renderbuffer.
- * \return new stencil renderbuffer
- */
-struct gl_renderbuffer *
-_mesa_new_s8_renderbuffer_wrapper(struct gl_context *ctx, struct gl_renderbuffer *dsrb)
-{
- struct gl_renderbuffer *s8rb;
-
- ASSERT(dsrb->Format == MESA_FORMAT_Z24_S8 ||
- dsrb->Format == MESA_FORMAT_S8_Z24);
- ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT);
-
- s8rb = ctx->Driver.NewRenderbuffer(ctx, 0);
- if (!s8rb)
- return NULL;
-
- /* NOTE: need to do manual refcounting here */
- s8rb->Wrapped = dsrb;
- dsrb->RefCount++;
-
- s8rb->Name = dsrb->Name;
- s8rb->RefCount = 0;
- s8rb->Width = dsrb->Width;
- s8rb->Height = dsrb->Height;
- s8rb->InternalFormat = GL_STENCIL_INDEX8_EXT;
- s8rb->Format = MESA_FORMAT_S8;
- s8rb->_BaseFormat = GL_STENCIL_INDEX;
- s8rb->DataType = GL_UNSIGNED_BYTE;
- s8rb->Data = NULL;
- s8rb->Delete = delete_wrapper;
- s8rb->AllocStorage = alloc_wrapper_storage;
- s8rb->GetPointer = nop_get_pointer;
- s8rb->GetRow = get_row_s8;
- s8rb->GetValues = get_values_s8;
- s8rb->PutRow = put_row_s8;
- s8rb->PutRowRGB = NULL;
- s8rb->PutMonoRow = put_mono_row_s8;
- s8rb->PutValues = put_values_s8;
- s8rb->PutMonoValues = put_mono_values_s8;
-
- return s8rb;
-}
-
-
-
-/**
- ** The following functions are useful for hardware drivers that only
- ** implement combined depth/stencil buffers.
- ** The GL_EXT_framebuffer_object extension allows indepedent depth and
- ** stencil buffers to be used in any combination.
- ** Therefore, we sometimes have to merge separate depth and stencil
- ** renderbuffers into a single depth+stencil renderbuffer. And sometimes
- ** we have to split combined depth+stencil renderbuffers into separate
- ** renderbuffers.
- **/
-
-
-/**
- * Extract stencil values from the combined depth/stencil renderbuffer, storing
- * the values into a separate stencil renderbuffer.
- * \param dsRb the source depth/stencil renderbuffer
- * \param stencilRb the destination stencil renderbuffer
- * (either 8-bit or 32-bit)
- */
-void
-_mesa_extract_stencil(struct gl_context *ctx,
- struct gl_renderbuffer *dsRb,
- struct gl_renderbuffer *stencilRb)
-{
- GLuint row, width, height;
-
- ASSERT(dsRb);
- ASSERT(stencilRb);
-
- ASSERT(dsRb->Format == MESA_FORMAT_Z24_S8);
- ASSERT(dsRb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- ASSERT(stencilRb->Format == MESA_FORMAT_Z24_S8 ||
- stencilRb->Format == MESA_FORMAT_S8);
- ASSERT(dsRb->Width == stencilRb->Width);
- ASSERT(dsRb->Height == stencilRb->Height);
-
- width = dsRb->Width;
- height = dsRb->Height;
-
- for (row = 0; row < height; row++) {
- GLuint depthStencil[MAX_WIDTH];
- dsRb->GetRow(ctx, dsRb, width, 0, row, depthStencil);
- if (stencilRb->Format == MESA_FORMAT_S8) {
- /* 8bpp stencil */
- GLubyte stencil[MAX_WIDTH];
- GLuint i;
- for (i = 0; i < width; i++) {
- stencil[i] = depthStencil[i] & 0xff;
- }
- stencilRb->PutRow(ctx, stencilRb, width, 0, row, stencil, NULL);
- }
- else {
- /* 32bpp stencil */
- /* the 24 depth bits will be ignored */
- ASSERT(stencilRb->Format == MESA_FORMAT_Z24_S8);
- ASSERT(stencilRb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- stencilRb->PutRow(ctx, stencilRb, width, 0, row, depthStencil, NULL);
- }
- }
-}
-
-
-/**
- * Copy stencil values from a stencil renderbuffer into a combined
- * depth/stencil renderbuffer.
- * \param dsRb the destination depth/stencil renderbuffer
- * \param stencilRb the source stencil buffer (either 8-bit or 32-bit)
- */
-void
-_mesa_insert_stencil(struct gl_context *ctx,
- struct gl_renderbuffer *dsRb,
- struct gl_renderbuffer *stencilRb)
-{
- GLuint row, width, height;
-
- ASSERT(dsRb);
- ASSERT(stencilRb);
-
- ASSERT(dsRb->Format == MESA_FORMAT_Z24_S8);
- ASSERT(dsRb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- ASSERT(stencilRb->Format == MESA_FORMAT_Z24_S8 ||
- stencilRb->Format == MESA_FORMAT_S8);
-
- ASSERT(dsRb->Width == stencilRb->Width);
- ASSERT(dsRb->Height == stencilRb->Height);
-
- width = dsRb->Width;
- height = dsRb->Height;
-
- for (row = 0; row < height; row++) {
- GLuint depthStencil[MAX_WIDTH];
-
- dsRb->GetRow(ctx, dsRb, width, 0, row, depthStencil);
-
- if (stencilRb->Format == MESA_FORMAT_S8) {
- /* 8bpp stencil */
- GLubyte stencil[MAX_WIDTH];
- GLuint i;
- stencilRb->GetRow(ctx, stencilRb, width, 0, row, stencil);
- for (i = 0; i < width; i++) {
- depthStencil[i] = (depthStencil[i] & 0xffffff00) | stencil[i];
- }
- }
- else {
- /* 32bpp stencil buffer */
- GLuint stencil[MAX_WIDTH], i;
- ASSERT(stencilRb->Format == MESA_FORMAT_Z24_S8);
- ASSERT(stencilRb->DataType == GL_UNSIGNED_INT_24_8_EXT);
- stencilRb->GetRow(ctx, stencilRb, width, 0, row, stencil);
- for (i = 0; i < width; i++) {
- depthStencil[i]
- = (depthStencil[i] & 0xffffff00) | (stencil[i] & 0xff);
- }
- }
-
- dsRb->PutRow(ctx, dsRb, width, 0, row, depthStencil, NULL);
- }
-}
-
-
-/**
- * Convert the stencil buffer from 8bpp to 32bpp depth/stencil.
- * \param stencilRb the stencil renderbuffer to promote
- */
-void
-_mesa_promote_stencil(struct gl_context *ctx, struct gl_renderbuffer *stencilRb)
-{
- const GLsizei width = stencilRb->Width;
- const GLsizei height = stencilRb->Height;
- GLubyte *data;
- GLint i, j, k;
-
- ASSERT(stencilRb->Format == MESA_FORMAT_S8);
- ASSERT(stencilRb->Data);
-
- data = (GLubyte *) stencilRb->Data;
- stencilRb->Data = NULL;
- stencilRb->AllocStorage(ctx, stencilRb, GL_DEPTH24_STENCIL8_EXT,
- width, height);
-
- ASSERT(stencilRb->DataType == GL_UNSIGNED_INT_24_8_EXT);
-
- k = 0;
- for (i = 0; i < height; i++) {
- GLuint depthStencil[MAX_WIDTH];
- for (j = 0; j < width; j++) {
- depthStencil[j] = data[k++];
- }
- stencilRb->PutRow(ctx, stencilRb, width, 0, i, depthStencil, NULL);
- }
- free(data);
-}
+/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "glheader.h" +#include "imports.h" +#include "context.h" +#include "formats.h" +#include "mtypes.h" +#include "depthstencil.h" +#include "renderbuffer.h" + + +/** + * Adaptor/wrappers for GL_DEPTH_STENCIL renderbuffers. + * + * The problem with a GL_DEPTH_STENCIL renderbuffer is that sometimes we + * want to treat it as a stencil buffer, other times we want to treat it + * as a depth/z buffer and still other times when we want to treat it as + * a combined Z+stencil buffer! That implies we need three different sets + * of Get/Put functions. + * + * We solve this by wrapping the Z24_S8 or S8_Z24 renderbuffer with depth and + * stencil adaptors, each with the right kind of depth/stencil Get/Put functions. + */ + + +static void * +nop_get_pointer(struct gl_context *ctx, struct gl_renderbuffer *rb, GLint x, GLint y) +{ + (void) ctx; + (void) rb; + (void) x; + (void) y; + return NULL; +} + + +/** + * Delete a depth or stencil wrapper renderbuffer. + */ +static void +delete_wrapper(struct gl_renderbuffer *rb) +{ + ASSERT(rb->Format == MESA_FORMAT_S8 || + rb->Format == MESA_FORMAT_X8_Z24); + _mesa_reference_renderbuffer(&rb->Wrapped, NULL); + free(rb); +} + + +/** + * Realloc storage for wrapper. + */ +static GLboolean +alloc_wrapper_storage(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLenum internalFormat, GLuint width, GLuint height) +{ + /* just pass this on to the wrapped renderbuffer */ + struct gl_renderbuffer *dsrb = rb->Wrapped; + GLboolean retVal; + + (void) internalFormat; + + ASSERT(dsrb->Format == MESA_FORMAT_Z24_S8 || + dsrb->Format == MESA_FORMAT_Z24_X8 || + dsrb->Format == MESA_FORMAT_S8_Z24 || + dsrb->Format == MESA_FORMAT_X8_Z24); + + retVal = dsrb->AllocStorage(ctx, dsrb, dsrb->InternalFormat, width, height); + if (retVal) { + rb->Width = width; + rb->Height = height; + rb->RowStride = dsrb->RowStride; + } + return retVal; +} + + + + +/*====================================================================== + * Depth wrapper around depth/stencil renderbuffer + */ + +static void +get_row_z24(struct gl_context *ctx, struct gl_renderbuffer *z24rb, GLuint count, + GLint x, GLint y, void *values) +{ + struct gl_renderbuffer *dsrb = z24rb->Wrapped; + GLuint temp[MAX_WIDTH], i; + GLuint *dst = (GLuint *) values; + const GLuint *src = (const GLuint *) dsrb->GetPointer(ctx, dsrb, x, y); + ASSERT(z24rb->DataType == GL_UNSIGNED_INT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (!src) { + dsrb->GetRow(ctx, dsrb, count, x, y, temp); + src = temp; + } + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + dst[i] = src[i] >> 8; + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + dst[i] = src[i] & 0xffffff; + } + } +} + +static void +get_values_z24(struct gl_context *ctx, struct gl_renderbuffer *z24rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + struct gl_renderbuffer *dsrb = z24rb->Wrapped; + GLuint temp[MAX_WIDTH], i; + GLuint *dst = (GLuint *) values; + ASSERT(z24rb->DataType == GL_UNSIGNED_INT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + ASSERT(count <= MAX_WIDTH); + /* don't bother trying direct access */ + dsrb->GetValues(ctx, dsrb, count, x, y, temp); + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + dst[i] = temp[i] >> 8; + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + dst[i] = temp[i] & 0xffffff; + } + } +} + +static void +put_row_z24(struct gl_context *ctx, struct gl_renderbuffer *z24rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = z24rb->Wrapped; + const GLuint *src = (const GLuint *) values; + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x, y); + ASSERT(z24rb->DataType == GL_UNSIGNED_INT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (dst) { + /* direct access */ + GLuint i; + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = (src[i] << 8) | (dst[i] & 0xff); + } + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = (src[i] & 0xffffff) | (dst[i] & 0xff000000); + } + } + } + } + else { + /* get, modify, put */ + GLuint temp[MAX_WIDTH], i; + dsrb->GetRow(ctx, dsrb, count, x, y, temp); + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (src[i] << 8) | (temp[i] & 0xff); + } + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (src[i] & 0xffffff) | (temp[i] & 0xff000000); + } + } + } + dsrb->PutRow(ctx, dsrb, count, x, y, temp, mask); + } +} + +static void +put_mono_row_z24(struct gl_context *ctx, struct gl_renderbuffer *z24rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = z24rb->Wrapped; + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x, y); + ASSERT(z24rb->DataType == GL_UNSIGNED_INT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (dst) { + /* direct access */ + GLuint i; + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + const GLuint shiftedVal = *((GLuint *) value) << 8; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = shiftedVal | (dst[i] & 0xff); + } + } + } + else { + const GLuint shiftedVal = *((GLuint *) value); + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = shiftedVal | (dst[i] & 0xff000000); + } + } + } + } + else { + /* get, modify, put */ + GLuint temp[MAX_WIDTH], i; + dsrb->GetRow(ctx, dsrb, count, x, y, temp); + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + const GLuint shiftedVal = *((GLuint *) value) << 8; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = shiftedVal | (temp[i] & 0xff); + } + } + } + else { + const GLuint shiftedVal = *((GLuint *) value); + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = shiftedVal | (temp[i] & 0xff000000); + } + } + } + dsrb->PutRow(ctx, dsrb, count, x, y, temp, mask); + } +} + +static void +put_values_z24(struct gl_context *ctx, struct gl_renderbuffer *z24rb, GLuint count, + const GLint x[], const GLint y[], + const void *values, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = z24rb->Wrapped; + const GLuint *src = (const GLuint *) values; + ASSERT(z24rb->DataType == GL_UNSIGNED_INT); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (dsrb->GetPointer(ctx, dsrb, 0, 0)) { + /* direct access */ + GLuint i; + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x[i], y[i]); + *dst = (src[i] << 8) | (*dst & 0xff); + } + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x[i], y[i]); + *dst = (src[i] & 0xffffff) | (*dst & 0xff000000); + } + } + } + } + else { + /* get, modify, put */ + GLuint temp[MAX_WIDTH], i; + dsrb->GetValues(ctx, dsrb, count, x, y, temp); + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (src[i] << 8) | (temp[i] & 0xff); + } + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (src[i] & 0xffffff) | (temp[i] & 0xff000000); + } + } + } + dsrb->PutValues(ctx, dsrb, count, x, y, temp, mask); + } +} + +static void +put_mono_values_z24(struct gl_context *ctx, struct gl_renderbuffer *z24rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = z24rb->Wrapped; + GLuint temp[MAX_WIDTH], i; + /* get, modify, put */ + dsrb->GetValues(ctx, dsrb, count, x, y, temp); + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + const GLuint shiftedVal = *((GLuint *) value) << 8; + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = shiftedVal | (temp[i] & 0xff); + } + } + } + else { + const GLuint shiftedVal = *((GLuint *) value); + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = shiftedVal | (temp[i] & 0xff000000); + } + } + } + dsrb->PutValues(ctx, dsrb, count, x, y, temp, mask); +} + + +/** + * Wrap the given GL_DEPTH_STENCIL renderbuffer so that it acts like + * a depth renderbuffer. + * \return new depth renderbuffer + */ +struct gl_renderbuffer * +_mesa_new_z24_renderbuffer_wrapper(struct gl_context *ctx, + struct gl_renderbuffer *dsrb) +{ + struct gl_renderbuffer *z24rb; + + ASSERT(dsrb->Format == MESA_FORMAT_Z24_S8 || + dsrb->Format == MESA_FORMAT_Z24_X8 || + dsrb->Format == MESA_FORMAT_S8_Z24 || + dsrb->Format == MESA_FORMAT_X8_Z24); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + + z24rb = ctx->Driver.NewRenderbuffer(ctx, 0); + if (!z24rb) + return NULL; + + /* NOTE: need to do manual refcounting here */ + z24rb->Wrapped = dsrb; + dsrb->RefCount++; + + z24rb->Name = dsrb->Name; + z24rb->RefCount = 0; + z24rb->Width = dsrb->Width; + z24rb->Height = dsrb->Height; + z24rb->RowStride = dsrb->RowStride; + z24rb->InternalFormat = GL_DEPTH_COMPONENT24; + z24rb->Format = MESA_FORMAT_X8_Z24; + z24rb->_BaseFormat = GL_DEPTH_COMPONENT; + z24rb->DataType = GL_UNSIGNED_INT; + z24rb->Data = NULL; + z24rb->Delete = delete_wrapper; + z24rb->AllocStorage = alloc_wrapper_storage; + z24rb->GetPointer = nop_get_pointer; + z24rb->GetRow = get_row_z24; + z24rb->GetValues = get_values_z24; + z24rb->PutRow = put_row_z24; + z24rb->PutRowRGB = NULL; + z24rb->PutMonoRow = put_mono_row_z24; + z24rb->PutValues = put_values_z24; + z24rb->PutMonoValues = put_mono_values_z24; + + return z24rb; +} + + +/*====================================================================== + * Stencil wrapper around depth/stencil renderbuffer + */ + +static void +get_row_s8(struct gl_context *ctx, struct gl_renderbuffer *s8rb, GLuint count, + GLint x, GLint y, void *values) +{ + struct gl_renderbuffer *dsrb = s8rb->Wrapped; + GLuint temp[MAX_WIDTH], i; + GLubyte *dst = (GLubyte *) values; + const GLuint *src = (const GLuint *) dsrb->GetPointer(ctx, dsrb, x, y); + ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (!src) { + dsrb->GetRow(ctx, dsrb, count, x, y, temp); + src = temp; + } + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + dst[i] = src[i] & 0xff; + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + dst[i] = src[i] >> 24; + } + } +} + +static void +get_values_s8(struct gl_context *ctx, struct gl_renderbuffer *s8rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + struct gl_renderbuffer *dsrb = s8rb->Wrapped; + GLuint temp[MAX_WIDTH], i; + GLubyte *dst = (GLubyte *) values; + ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + ASSERT(count <= MAX_WIDTH); + /* don't bother trying direct access */ + dsrb->GetValues(ctx, dsrb, count, x, y, temp); + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + dst[i] = temp[i] & 0xff; + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + dst[i] = temp[i] >> 24; + } + } +} + +static void +put_row_s8(struct gl_context *ctx, struct gl_renderbuffer *s8rb, GLuint count, + GLint x, GLint y, const void *values, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = s8rb->Wrapped; + const GLubyte *src = (const GLubyte *) values; + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x, y); + ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (dst) { + /* direct access */ + GLuint i; + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = (dst[i] & 0xffffff00) | src[i]; + } + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = (dst[i] & 0xffffff) | (src[i] << 24); + } + } + } + } + else { + /* get, modify, put */ + GLuint temp[MAX_WIDTH], i; + dsrb->GetRow(ctx, dsrb, count, x, y, temp); + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (temp[i] & 0xffffff00) | src[i]; + } + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (temp[i] & 0xffffff) | (src[i] << 24); + } + } + } + dsrb->PutRow(ctx, dsrb, count, x, y, temp, mask); + } +} + +static void +put_mono_row_s8(struct gl_context *ctx, struct gl_renderbuffer *s8rb, GLuint count, + GLint x, GLint y, const void *value, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = s8rb->Wrapped; + const GLubyte val = *((GLubyte *) value); + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x, y); + ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (dst) { + /* direct access */ + GLuint i; + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = (dst[i] & 0xffffff00) | val; + } + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + dst[i] = (dst[i] & 0xffffff) | (val << 24); + } + } + } + } + else { + /* get, modify, put */ + GLuint temp[MAX_WIDTH], i; + dsrb->GetRow(ctx, dsrb, count, x, y, temp); + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (temp[i] & 0xffffff00) | val; + } + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (temp[i] & 0xffffff) | (val << 24); + } + } + } + dsrb->PutRow(ctx, dsrb, count, x, y, temp, mask); + } +} + +static void +put_values_s8(struct gl_context *ctx, struct gl_renderbuffer *s8rb, GLuint count, + const GLint x[], const GLint y[], + const void *values, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = s8rb->Wrapped; + const GLubyte *src = (const GLubyte *) values; + ASSERT(s8rb->DataType == GL_UNSIGNED_BYTE); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + if (dsrb->GetPointer(ctx, dsrb, 0, 0)) { + /* direct access */ + GLuint i; + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x[i], y[i]); + *dst = (*dst & 0xffffff00) | src[i]; + } + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + GLuint *dst = (GLuint *) dsrb->GetPointer(ctx, dsrb, x[i], y[i]); + *dst = (*dst & 0xffffff) | (src[i] << 24); + } + } + } + } + else { + /* get, modify, put */ + GLuint temp[MAX_WIDTH], i; + dsrb->GetValues(ctx, dsrb, count, x, y, temp); + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (temp[i] & 0xffffff00) | src[i]; + } + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (temp[i] & 0xffffff) | (src[i] << 24); + } + } + } + dsrb->PutValues(ctx, dsrb, count, x, y, temp, mask); + } +} + +static void +put_mono_values_s8(struct gl_context *ctx, struct gl_renderbuffer *s8rb, GLuint count, + const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + struct gl_renderbuffer *dsrb = s8rb->Wrapped; + GLuint temp[MAX_WIDTH], i; + const GLubyte val = *((GLubyte *) value); + /* get, modify, put */ + dsrb->GetValues(ctx, dsrb, count, x, y, temp); + if (dsrb->Format == MESA_FORMAT_Z24_S8) { + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (temp[i] & 0xffffff00) | val; + } + } + } + else { + assert(dsrb->Format == MESA_FORMAT_S8_Z24); + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + temp[i] = (temp[i] & 0xffffff) | (val << 24); + } + } + } + dsrb->PutValues(ctx, dsrb, count, x, y, temp, mask); +} + + +/** + * Wrap the given GL_DEPTH_STENCIL renderbuffer so that it acts like + * a stencil renderbuffer. + * \return new stencil renderbuffer + */ +struct gl_renderbuffer * +_mesa_new_s8_renderbuffer_wrapper(struct gl_context *ctx, struct gl_renderbuffer *dsrb) +{ + struct gl_renderbuffer *s8rb; + + ASSERT(dsrb->Format == MESA_FORMAT_Z24_S8 || + dsrb->Format == MESA_FORMAT_S8_Z24); + ASSERT(dsrb->DataType == GL_UNSIGNED_INT_24_8_EXT); + + s8rb = ctx->Driver.NewRenderbuffer(ctx, 0); + if (!s8rb) + return NULL; + + /* NOTE: need to do manual refcounting here */ + s8rb->Wrapped = dsrb; + dsrb->RefCount++; + + s8rb->Name = dsrb->Name; + s8rb->RefCount = 0; + s8rb->Width = dsrb->Width; + s8rb->Height = dsrb->Height; + s8rb->RowStride = dsrb->RowStride; + s8rb->InternalFormat = GL_STENCIL_INDEX8_EXT; + s8rb->Format = MESA_FORMAT_S8; + s8rb->_BaseFormat = GL_STENCIL_INDEX; + s8rb->DataType = GL_UNSIGNED_BYTE; + s8rb->Data = NULL; + s8rb->Delete = delete_wrapper; + s8rb->AllocStorage = alloc_wrapper_storage; + s8rb->GetPointer = nop_get_pointer; + s8rb->GetRow = get_row_s8; + s8rb->GetValues = get_values_s8; + s8rb->PutRow = put_row_s8; + s8rb->PutRowRGB = NULL; + s8rb->PutMonoRow = put_mono_row_s8; + s8rb->PutValues = put_values_s8; + s8rb->PutMonoValues = put_mono_values_s8; + + return s8rb; +} + + + +/** + ** The following functions are useful for hardware drivers that only + ** implement combined depth/stencil buffers. + ** The GL_EXT_framebuffer_object extension allows indepedent depth and + ** stencil buffers to be used in any combination. + ** Therefore, we sometimes have to merge separate depth and stencil + ** renderbuffers into a single depth+stencil renderbuffer. And sometimes + ** we have to split combined depth+stencil renderbuffers into separate + ** renderbuffers. + **/ + + +/** + * Extract stencil values from the combined depth/stencil renderbuffer, storing + * the values into a separate stencil renderbuffer. + * \param dsRb the source depth/stencil renderbuffer + * \param stencilRb the destination stencil renderbuffer + * (either 8-bit or 32-bit) + */ +void +_mesa_extract_stencil(struct gl_context *ctx, + struct gl_renderbuffer *dsRb, + struct gl_renderbuffer *stencilRb) +{ + GLuint row, width, height; + + ASSERT(dsRb); + ASSERT(stencilRb); + + ASSERT(dsRb->Format == MESA_FORMAT_Z24_S8); + ASSERT(dsRb->DataType == GL_UNSIGNED_INT_24_8_EXT); + ASSERT(stencilRb->Format == MESA_FORMAT_Z24_S8 || + stencilRb->Format == MESA_FORMAT_S8); + ASSERT(dsRb->Width == stencilRb->Width); + ASSERT(dsRb->Height == stencilRb->Height); + + width = dsRb->Width; + height = dsRb->Height; + + for (row = 0; row < height; row++) { + GLuint depthStencil[MAX_WIDTH]; + dsRb->GetRow(ctx, dsRb, width, 0, row, depthStencil); + if (stencilRb->Format == MESA_FORMAT_S8) { + /* 8bpp stencil */ + GLubyte stencil[MAX_WIDTH]; + GLuint i; + for (i = 0; i < width; i++) { + stencil[i] = depthStencil[i] & 0xff; + } + stencilRb->PutRow(ctx, stencilRb, width, 0, row, stencil, NULL); + } + else { + /* 32bpp stencil */ + /* the 24 depth bits will be ignored */ + ASSERT(stencilRb->Format == MESA_FORMAT_Z24_S8); + ASSERT(stencilRb->DataType == GL_UNSIGNED_INT_24_8_EXT); + stencilRb->PutRow(ctx, stencilRb, width, 0, row, depthStencil, NULL); + } + } +} + + +/** + * Copy stencil values from a stencil renderbuffer into a combined + * depth/stencil renderbuffer. + * \param dsRb the destination depth/stencil renderbuffer + * \param stencilRb the source stencil buffer (either 8-bit or 32-bit) + */ +void +_mesa_insert_stencil(struct gl_context *ctx, + struct gl_renderbuffer *dsRb, + struct gl_renderbuffer *stencilRb) +{ + GLuint row, width, height; + + ASSERT(dsRb); + ASSERT(stencilRb); + + ASSERT(dsRb->Format == MESA_FORMAT_Z24_S8); + ASSERT(dsRb->DataType == GL_UNSIGNED_INT_24_8_EXT); + ASSERT(stencilRb->Format == MESA_FORMAT_Z24_S8 || + stencilRb->Format == MESA_FORMAT_S8); + + ASSERT(dsRb->Width == stencilRb->Width); + ASSERT(dsRb->Height == stencilRb->Height); + + width = dsRb->Width; + height = dsRb->Height; + + for (row = 0; row < height; row++) { + GLuint depthStencil[MAX_WIDTH]; + + dsRb->GetRow(ctx, dsRb, width, 0, row, depthStencil); + + if (stencilRb->Format == MESA_FORMAT_S8) { + /* 8bpp stencil */ + GLubyte stencil[MAX_WIDTH]; + GLuint i; + stencilRb->GetRow(ctx, stencilRb, width, 0, row, stencil); + for (i = 0; i < width; i++) { + depthStencil[i] = (depthStencil[i] & 0xffffff00) | stencil[i]; + } + } + else { + /* 32bpp stencil buffer */ + GLuint stencil[MAX_WIDTH], i; + ASSERT(stencilRb->Format == MESA_FORMAT_Z24_S8); + ASSERT(stencilRb->DataType == GL_UNSIGNED_INT_24_8_EXT); + stencilRb->GetRow(ctx, stencilRb, width, 0, row, stencil); + for (i = 0; i < width; i++) { + depthStencil[i] + = (depthStencil[i] & 0xffffff00) | (stencil[i] & 0xff); + } + } + + dsRb->PutRow(ctx, dsRb, width, 0, row, depthStencil, NULL); + } +} + + +/** + * Convert the stencil buffer from 8bpp to 32bpp depth/stencil. + * \param stencilRb the stencil renderbuffer to promote + */ +void +_mesa_promote_stencil(struct gl_context *ctx, struct gl_renderbuffer *stencilRb) +{ + const GLsizei width = stencilRb->Width; + const GLsizei height = stencilRb->Height; + GLubyte *data; + GLint i, j, k; + + ASSERT(stencilRb->Format == MESA_FORMAT_S8); + ASSERT(stencilRb->Data); + + data = (GLubyte *) stencilRb->Data; + stencilRb->Data = NULL; + stencilRb->AllocStorage(ctx, stencilRb, GL_DEPTH24_STENCIL8_EXT, + width, height); + + ASSERT(stencilRb->DataType == GL_UNSIGNED_INT_24_8_EXT); + + k = 0; + for (i = 0; i < height; i++) { + GLuint depthStencil[MAX_WIDTH]; + for (j = 0; j < width; j++) { + depthStencil[j] = data[k++]; + } + stencilRb->PutRow(ctx, stencilRb, width, 0, i, depthStencil, NULL); + } + free(data); +} diff --git a/mesalib/src/mesa/main/dlist.c b/mesalib/src/mesa/main/dlist.c index f66082e7f..63653df45 100644 --- a/mesalib/src/mesa/main/dlist.c +++ b/mesalib/src/mesa/main/dlist.c @@ -859,8 +859,8 @@ unpack_image(struct gl_context *ctx, GLuint dimensions, } return image; } - else if (_mesa_validate_pbo_access(dimensions, unpack, width, height, depth, - format, type, pixels)) { + else if (_mesa_validate_pbo_access(dimensions, unpack, width, height, + depth, format, type, INT_MAX, pixels)) { const GLubyte *map, *src; GLvoid *image; diff --git a/mesalib/src/mesa/main/drawpix.c b/mesalib/src/mesa/main/drawpix.c index fb86036a1..89c2b2697 100644 --- a/mesalib/src/mesa/main/drawpix.c +++ b/mesalib/src/mesa/main/drawpix.c @@ -90,10 +90,10 @@ _mesa_DrawPixels( GLsizei width, GLsizei height, GLint x = IROUND(ctx->Current.RasterPos[0]); GLint y = IROUND(ctx->Current.RasterPos[1]); - if (ctx->Unpack.BufferObj->Name) { + if (_mesa_is_bufferobj(ctx->Unpack.BufferObj)) { /* unpack from PBO */ - if (!_mesa_validate_pbo_access(2, &ctx->Unpack, width, height, 1, - format, type, pixels)) { + if (!_mesa_validate_pbo_access(2, &ctx->Unpack, width, height, + 1, format, type, INT_MAX, pixels)) { _mesa_error(ctx, GL_INVALID_OPERATION, "glDrawPixels(invalid PBO access)"); goto end; @@ -188,7 +188,7 @@ _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height, goto end; } - if (!ctx->Current.RasterPosValid || width ==0 || height == 0) { + if (!ctx->Current.RasterPosValid || width == 0 || height == 0) { goto end; /* no-op, not an error */ } @@ -249,11 +249,11 @@ _mesa_Bitmap( GLsizei width, GLsizei height, GLint x = IFLOOR(ctx->Current.RasterPos[0] + epsilon - xorig); GLint y = IFLOOR(ctx->Current.RasterPos[1] + epsilon - yorig); - if (ctx->Unpack.BufferObj->Name) { + if (_mesa_is_bufferobj(ctx->Unpack.BufferObj)) { /* unpack from PBO */ - if (!_mesa_validate_pbo_access(2, &ctx->Unpack, width, height, 1, - GL_COLOR_INDEX, GL_BITMAP, - (GLvoid *) bitmap)) { + if (!_mesa_validate_pbo_access(2, &ctx->Unpack, width, height, + 1, GL_COLOR_INDEX, GL_BITMAP, + INT_MAX, (const GLvoid *) bitmap)) { _mesa_error(ctx, GL_INVALID_OPERATION, "glBitmap(invalid PBO access)"); return; diff --git a/mesalib/src/mesa/main/enums.c b/mesalib/src/mesa/main/enums.c index 98cbbf53b..8a50e2656 100644 --- a/mesalib/src/mesa/main/enums.c +++ b/mesalib/src/mesa/main/enums.c @@ -366,6 +366,7 @@ LONGSTRING static const char enum_string_table[] = "GL_CONTEXT_CORE_PROFILE_BIT\0" "GL_CONTEXT_FLAGS\0" "GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT\0" + "GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB\0" "GL_CONTEXT_PROFILE_MASK\0" "GL_CONVOLUTION_1D\0" "GL_CONVOLUTION_2D\0" @@ -739,6 +740,7 @@ LONGSTRING static const char enum_string_table[] = "GL_GREEN_INTEGER\0" "GL_GREEN_INTEGER_EXT\0" "GL_GREEN_SCALE\0" + "GL_GUILTY_CONTEXT_RESET_ARB\0" "GL_HALF_FLOAT\0" "GL_HALF_FLOAT_OES\0" "GL_HIGH_FLOAT\0" @@ -786,6 +788,7 @@ LONGSTRING static const char enum_string_table[] = "GL_INDEX_SHIFT\0" "GL_INDEX_WRITEMASK\0" "GL_INFO_LOG_LENGTH\0" + "GL_INNOCENT_CONTEXT_RESET_ARB\0" "GL_INT\0" "GL_INTENSITY\0" "GL_INTENSITY12\0" @@ -894,6 +897,7 @@ LONGSTRING static const char enum_string_table[] = "GL_LOAD\0" "GL_LOGIC_OP\0" "GL_LOGIC_OP_MODE\0" + "GL_LOSE_CONTEXT_ON_RESET_ARB\0" "GL_LOWER_LEFT\0" "GL_LOW_FLOAT\0" "GL_LOW_INT\0" @@ -1277,6 +1281,7 @@ LONGSTRING static const char enum_string_table[] = "GL_NORMAL_MAP_OES\0" "GL_NOTEQUAL\0" "GL_NO_ERROR\0" + "GL_NO_RESET_NOTIFICATION_ARB\0" "GL_NUM_COMPRESSED_TEXTURE_FORMATS\0" "GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB\0" "GL_NUM_EXTENSIONS\0" @@ -1637,6 +1642,7 @@ LONGSTRING static const char enum_string_table[] = "GL_REPLICATE_BORDER_HP\0" "GL_RESCALE_NORMAL\0" "GL_RESCALE_NORMAL_EXT\0" + "GL_RESET_NOTIFICATION_STRATEGY_ARB\0" "GL_RETAINED_APPLE\0" "GL_RETURN\0" "GL_RG16_SNORM\0" @@ -2193,6 +2199,7 @@ LONGSTRING static const char enum_string_table[] = "GL_TRIANGLE_STRIP_ADJACENCY_ARB\0" "GL_TRUE\0" "GL_UNDEFINED_APPLE\0" + "GL_UNKNOWN_CONTEXT_RESET_ARB\0" "GL_UNPACK_ALIGNMENT\0" "GL_UNPACK_IMAGE_HEIGHT\0" "GL_UNPACK_LSB_FIRST\0" @@ -2345,7 +2352,7 @@ LONGSTRING static const char enum_string_table[] = "GL_ZOOM_Y\0" ; -static const enum_elt all_enums[2306] = +static const enum_elt all_enums[2313] = { { 0, 0x00000600 }, /* GL_2D */ { 6, 0x00001407 }, /* GL_2_BYTES */ @@ -2676,2408 +2683,2415 @@ static const enum_elt all_enums[2306] = { 6607, 0x00000001 }, /* GL_CONTEXT_CORE_PROFILE_BIT */ { 6635, 0x0000821E }, /* GL_CONTEXT_FLAGS */ { 6652, 0x00000001 }, /* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */ - { 6691, 0x00009126 }, /* GL_CONTEXT_PROFILE_MASK */ - { 6715, 0x00008010 }, /* GL_CONVOLUTION_1D */ - { 6733, 0x00008011 }, /* GL_CONVOLUTION_2D */ - { 6751, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR */ - { 6779, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR_HP */ - { 6810, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE */ - { 6837, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE_EXT */ - { 6868, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS */ - { 6895, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS_EXT */ - { 6926, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE */ - { 6954, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE_EXT */ - { 6986, 0x00008017 }, /* GL_CONVOLUTION_FORMAT */ - { 7008, 0x00008017 }, /* GL_CONVOLUTION_FORMAT_EXT */ - { 7034, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT */ - { 7056, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT_EXT */ - { 7082, 0x00008018 }, /* GL_CONVOLUTION_WIDTH */ - { 7103, 0x00008018 }, /* GL_CONVOLUTION_WIDTH_EXT */ - { 7128, 0x00008862 }, /* GL_COORD_REPLACE */ - { 7145, 0x00008862 }, /* GL_COORD_REPLACE_ARB */ - { 7166, 0x00008862 }, /* GL_COORD_REPLACE_NV */ - { 7186, 0x00008862 }, /* GL_COORD_REPLACE_OES */ - { 7207, 0x00001503 }, /* GL_COPY */ - { 7215, 0x0000150C }, /* GL_COPY_INVERTED */ - { 7232, 0x00000706 }, /* GL_COPY_PIXEL_TOKEN */ - { 7252, 0x00008F36 }, /* GL_COPY_READ_BUFFER */ - { 7272, 0x00008F37 }, /* GL_COPY_WRITE_BUFFER */ - { 7293, 0x00000B44 }, /* GL_CULL_FACE */ - { 7306, 0x00000B45 }, /* GL_CULL_FACE_MODE */ - { 7324, 0x000081AA }, /* GL_CULL_VERTEX_EXT */ - { 7343, 0x000081AC }, /* GL_CULL_VERTEX_EYE_POSITION_EXT */ - { 7375, 0x000081AB }, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */ - { 7410, 0x00008626 }, /* GL_CURRENT_ATTRIB_NV */ - { 7431, 0x00000001 }, /* GL_CURRENT_BIT */ - { 7446, 0x00000B00 }, /* GL_CURRENT_COLOR */ - { 7463, 0x00008453 }, /* GL_CURRENT_FOG_COORD */ - { 7484, 0x00008453 }, /* GL_CURRENT_FOG_COORDINATE */ - { 7510, 0x00000B01 }, /* GL_CURRENT_INDEX */ - { 7527, 0x00008641 }, /* GL_CURRENT_MATRIX_ARB */ - { 7549, 0x00008845 }, /* GL_CURRENT_MATRIX_INDEX_ARB */ - { 7577, 0x00008641 }, /* GL_CURRENT_MATRIX_NV */ - { 7598, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */ - { 7632, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */ - { 7665, 0x00000B02 }, /* GL_CURRENT_NORMAL */ - { 7683, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_ARB */ - { 7713, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_OES */ - { 7743, 0x00008B8D }, /* GL_CURRENT_PROGRAM */ - { 7762, 0x00008865 }, /* GL_CURRENT_QUERY */ - { 7779, 0x00008865 }, /* GL_CURRENT_QUERY_ARB */ - { 7800, 0x00000B04 }, /* GL_CURRENT_RASTER_COLOR */ - { 7824, 0x00000B09 }, /* GL_CURRENT_RASTER_DISTANCE */ - { 7851, 0x00000B05 }, /* GL_CURRENT_RASTER_INDEX */ - { 7875, 0x00000B07 }, /* GL_CURRENT_RASTER_POSITION */ - { 7902, 0x00000B08 }, /* GL_CURRENT_RASTER_POSITION_VALID */ - { 7935, 0x0000845F }, /* GL_CURRENT_RASTER_SECONDARY_COLOR */ - { 7969, 0x00000B06 }, /* GL_CURRENT_RASTER_TEXTURE_COORDS */ - { 8002, 0x00008459 }, /* GL_CURRENT_SECONDARY_COLOR */ - { 8029, 0x00000B03 }, /* GL_CURRENT_TEXTURE_COORDS */ - { 8055, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB */ - { 8080, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB_ARB */ - { 8109, 0x000086A8 }, /* GL_CURRENT_WEIGHT_ARB */ - { 8131, 0x00000900 }, /* GL_CW */ - { 8137, 0x0000875B }, /* GL_DEBUG_ASSERT_MESA */ - { 8158, 0x00008759 }, /* GL_DEBUG_OBJECT_MESA */ - { 8179, 0x0000875A }, /* GL_DEBUG_PRINT_MESA */ - { 8199, 0x00002101 }, /* GL_DECAL */ - { 8208, 0x00001E03 }, /* GL_DECR */ - { 8216, 0x00008508 }, /* GL_DECR_WRAP */ - { 8229, 0x00008508 }, /* GL_DECR_WRAP_EXT */ - { 8246, 0x00008B80 }, /* GL_DELETE_STATUS */ - { 8263, 0x00001801 }, /* GL_DEPTH */ - { 8272, 0x000088F0 }, /* GL_DEPTH24_STENCIL8 */ - { 8292, 0x000088F0 }, /* GL_DEPTH24_STENCIL8_EXT */ - { 8316, 0x000088F0 }, /* GL_DEPTH24_STENCIL8_OES */ - { 8340, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT */ - { 8360, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_EXT */ - { 8384, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_OES */ - { 8408, 0x00000D1F }, /* GL_DEPTH_BIAS */ - { 8422, 0x00000D56 }, /* GL_DEPTH_BITS */ - { 8436, 0x00008891 }, /* GL_DEPTH_BOUNDS_EXT */ - { 8456, 0x00008890 }, /* GL_DEPTH_BOUNDS_TEST_EXT */ - { 8481, 0x00008223 }, /* GL_DEPTH_BUFFER */ - { 8497, 0x00000100 }, /* GL_DEPTH_BUFFER_BIT */ - { 8517, 0x0000864F }, /* GL_DEPTH_CLAMP */ - { 8532, 0x0000864F }, /* GL_DEPTH_CLAMP_NV */ - { 8550, 0x00000B73 }, /* GL_DEPTH_CLEAR_VALUE */ - { 8571, 0x00001902 }, /* GL_DEPTH_COMPONENT */ - { 8590, 0x000081A5 }, /* GL_DEPTH_COMPONENT16 */ - { 8611, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_ARB */ - { 8636, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_OES */ - { 8661, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_SGIX */ - { 8687, 0x000081A6 }, /* GL_DEPTH_COMPONENT24 */ - { 8708, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_ARB */ - { 8733, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_OES */ - { 8758, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_SGIX */ - { 8784, 0x000081A7 }, /* GL_DEPTH_COMPONENT32 */ - { 8805, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_ARB */ - { 8830, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_OES */ - { 8855, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_SGIX */ - { 8881, 0x00000B74 }, /* GL_DEPTH_FUNC */ - { 8895, 0x00000B70 }, /* GL_DEPTH_RANGE */ - { 8910, 0x00000D1E }, /* GL_DEPTH_SCALE */ - { 8925, 0x000084F9 }, /* GL_DEPTH_STENCIL */ - { 8942, 0x0000821A }, /* GL_DEPTH_STENCIL_ATTACHMENT */ - { 8970, 0x000084F9 }, /* GL_DEPTH_STENCIL_EXT */ - { 8991, 0x000084F9 }, /* GL_DEPTH_STENCIL_NV */ - { 9011, 0x000084F9 }, /* GL_DEPTH_STENCIL_OES */ - { 9032, 0x0000886F }, /* GL_DEPTH_STENCIL_TO_BGRA_NV */ - { 9060, 0x0000886E }, /* GL_DEPTH_STENCIL_TO_RGBA_NV */ - { 9088, 0x00000B71 }, /* GL_DEPTH_TEST */ - { 9102, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE */ - { 9124, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE_ARB */ - { 9150, 0x00000B72 }, /* GL_DEPTH_WRITEMASK */ - { 9169, 0x00001201 }, /* GL_DIFFUSE */ - { 9180, 0x00000BD0 }, /* GL_DITHER */ - { 9190, 0x00000A02 }, /* GL_DOMAIN */ - { 9200, 0x00001100 }, /* GL_DONT_CARE */ - { 9213, 0x000086AE }, /* GL_DOT3_RGB */ - { 9225, 0x000086AF }, /* GL_DOT3_RGBA */ - { 9238, 0x000086AF }, /* GL_DOT3_RGBA_ARB */ - { 9255, 0x00008741 }, /* GL_DOT3_RGBA_EXT */ - { 9272, 0x000086AE }, /* GL_DOT3_RGB_ARB */ - { 9288, 0x00008740 }, /* GL_DOT3_RGB_EXT */ - { 9304, 0x0000140A }, /* GL_DOUBLE */ - { 9314, 0x00000C32 }, /* GL_DOUBLEBUFFER */ - { 9330, 0x00000C01 }, /* GL_DRAW_BUFFER */ - { 9345, 0x00008825 }, /* GL_DRAW_BUFFER0 */ - { 9361, 0x00008825 }, /* GL_DRAW_BUFFER0_ARB */ - { 9381, 0x00008825 }, /* GL_DRAW_BUFFER0_ATI */ - { 9401, 0x00008826 }, /* GL_DRAW_BUFFER1 */ - { 9417, 0x0000882F }, /* GL_DRAW_BUFFER10 */ - { 9434, 0x0000882F }, /* GL_DRAW_BUFFER10_ARB */ - { 9455, 0x0000882F }, /* GL_DRAW_BUFFER10_ATI */ - { 9476, 0x00008830 }, /* GL_DRAW_BUFFER11 */ - { 9493, 0x00008830 }, /* GL_DRAW_BUFFER11_ARB */ - { 9514, 0x00008830 }, /* GL_DRAW_BUFFER11_ATI */ - { 9535, 0x00008831 }, /* GL_DRAW_BUFFER12 */ - { 9552, 0x00008831 }, /* GL_DRAW_BUFFER12_ARB */ - { 9573, 0x00008831 }, /* GL_DRAW_BUFFER12_ATI */ - { 9594, 0x00008832 }, /* GL_DRAW_BUFFER13 */ - { 9611, 0x00008832 }, /* GL_DRAW_BUFFER13_ARB */ - { 9632, 0x00008832 }, /* GL_DRAW_BUFFER13_ATI */ - { 9653, 0x00008833 }, /* GL_DRAW_BUFFER14 */ - { 9670, 0x00008833 }, /* GL_DRAW_BUFFER14_ARB */ - { 9691, 0x00008833 }, /* GL_DRAW_BUFFER14_ATI */ - { 9712, 0x00008834 }, /* GL_DRAW_BUFFER15 */ - { 9729, 0x00008834 }, /* GL_DRAW_BUFFER15_ARB */ - { 9750, 0x00008834 }, /* GL_DRAW_BUFFER15_ATI */ - { 9771, 0x00008826 }, /* GL_DRAW_BUFFER1_ARB */ - { 9791, 0x00008826 }, /* GL_DRAW_BUFFER1_ATI */ - { 9811, 0x00008827 }, /* GL_DRAW_BUFFER2 */ - { 9827, 0x00008827 }, /* GL_DRAW_BUFFER2_ARB */ - { 9847, 0x00008827 }, /* GL_DRAW_BUFFER2_ATI */ - { 9867, 0x00008828 }, /* GL_DRAW_BUFFER3 */ - { 9883, 0x00008828 }, /* GL_DRAW_BUFFER3_ARB */ - { 9903, 0x00008828 }, /* GL_DRAW_BUFFER3_ATI */ - { 9923, 0x00008829 }, /* GL_DRAW_BUFFER4 */ - { 9939, 0x00008829 }, /* GL_DRAW_BUFFER4_ARB */ - { 9959, 0x00008829 }, /* GL_DRAW_BUFFER4_ATI */ - { 9979, 0x0000882A }, /* GL_DRAW_BUFFER5 */ - { 9995, 0x0000882A }, /* GL_DRAW_BUFFER5_ARB */ - { 10015, 0x0000882A }, /* GL_DRAW_BUFFER5_ATI */ - { 10035, 0x0000882B }, /* GL_DRAW_BUFFER6 */ - { 10051, 0x0000882B }, /* GL_DRAW_BUFFER6_ARB */ - { 10071, 0x0000882B }, /* GL_DRAW_BUFFER6_ATI */ - { 10091, 0x0000882C }, /* GL_DRAW_BUFFER7 */ - { 10107, 0x0000882C }, /* GL_DRAW_BUFFER7_ARB */ - { 10127, 0x0000882C }, /* GL_DRAW_BUFFER7_ATI */ - { 10147, 0x0000882D }, /* GL_DRAW_BUFFER8 */ - { 10163, 0x0000882D }, /* GL_DRAW_BUFFER8_ARB */ - { 10183, 0x0000882D }, /* GL_DRAW_BUFFER8_ATI */ - { 10203, 0x0000882E }, /* GL_DRAW_BUFFER9 */ - { 10219, 0x0000882E }, /* GL_DRAW_BUFFER9_ARB */ - { 10239, 0x0000882E }, /* GL_DRAW_BUFFER9_ATI */ - { 10259, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER */ - { 10279, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING */ - { 10307, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */ - { 10339, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER_EXT */ - { 10363, 0x00000705 }, /* GL_DRAW_PIXEL_TOKEN */ - { 10383, 0x00000304 }, /* GL_DST_ALPHA */ - { 10396, 0x00000306 }, /* GL_DST_COLOR */ - { 10409, 0x0000877A }, /* GL_DU8DV8_ATI */ - { 10423, 0x00008779 }, /* GL_DUDV_ATI */ - { 10435, 0x000088EA }, /* GL_DYNAMIC_COPY */ - { 10451, 0x000088EA }, /* GL_DYNAMIC_COPY_ARB */ - { 10471, 0x000088E8 }, /* GL_DYNAMIC_DRAW */ - { 10487, 0x000088E8 }, /* GL_DYNAMIC_DRAW_ARB */ - { 10507, 0x000088E9 }, /* GL_DYNAMIC_READ */ - { 10523, 0x000088E9 }, /* GL_DYNAMIC_READ_ARB */ - { 10543, 0x00000B43 }, /* GL_EDGE_FLAG */ - { 10556, 0x00008079 }, /* GL_EDGE_FLAG_ARRAY */ - { 10575, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */ - { 10609, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */ - { 10647, 0x00008093 }, /* GL_EDGE_FLAG_ARRAY_POINTER */ - { 10674, 0x0000808C }, /* GL_EDGE_FLAG_ARRAY_STRIDE */ - { 10700, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER */ - { 10724, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */ - { 10756, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */ - { 10792, 0x00001600 }, /* GL_EMISSION */ - { 10804, 0x00002000 }, /* GL_ENABLE_BIT */ - { 10818, 0x00000202 }, /* GL_EQUAL */ - { 10827, 0x00001509 }, /* GL_EQUIV */ - { 10836, 0x00010000 }, /* GL_EVAL_BIT */ - { 10848, 0x00000800 }, /* GL_EXP */ - { 10855, 0x00000801 }, /* GL_EXP2 */ - { 10863, 0x00001F03 }, /* GL_EXTENSIONS */ - { 10877, 0x00002400 }, /* GL_EYE_LINEAR */ - { 10891, 0x00002502 }, /* GL_EYE_PLANE */ - { 10904, 0x0000855C }, /* GL_EYE_PLANE_ABSOLUTE_NV */ - { 10929, 0x0000855B }, /* GL_EYE_RADIAL_NV */ - { 10946, 0x00000000 }, /* GL_FALSE */ - { 10955, 0x00001101 }, /* GL_FASTEST */ - { 10966, 0x00001C01 }, /* GL_FEEDBACK */ - { 10978, 0x00000DF0 }, /* GL_FEEDBACK_BUFFER_POINTER */ - { 11005, 0x00000DF1 }, /* GL_FEEDBACK_BUFFER_SIZE */ - { 11029, 0x00000DF2 }, /* GL_FEEDBACK_BUFFER_TYPE */ - { 11053, 0x00001B02 }, /* GL_FILL */ - { 11061, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION */ - { 11088, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION_EXT */ - { 11119, 0x0000140C }, /* GL_FIXED */ - { 11128, 0x0000140C }, /* GL_FIXED_OES */ - { 11141, 0x0000891D }, /* GL_FIXED_ONLY */ - { 11155, 0x0000891D }, /* GL_FIXED_ONLY_ARB */ - { 11173, 0x00001D00 }, /* GL_FLAT */ - { 11181, 0x00001406 }, /* GL_FLOAT */ - { 11190, 0x00008B5A }, /* GL_FLOAT_MAT2 */ - { 11204, 0x00008B5A }, /* GL_FLOAT_MAT2_ARB */ - { 11222, 0x00008B65 }, /* GL_FLOAT_MAT2x3 */ - { 11238, 0x00008B66 }, /* GL_FLOAT_MAT2x4 */ - { 11254, 0x00008B5B }, /* GL_FLOAT_MAT3 */ - { 11268, 0x00008B5B }, /* GL_FLOAT_MAT3_ARB */ - { 11286, 0x00008B67 }, /* GL_FLOAT_MAT3x2 */ - { 11302, 0x00008B68 }, /* GL_FLOAT_MAT3x4 */ - { 11318, 0x00008B5C }, /* GL_FLOAT_MAT4 */ - { 11332, 0x00008B5C }, /* GL_FLOAT_MAT4_ARB */ - { 11350, 0x00008B69 }, /* GL_FLOAT_MAT4x2 */ - { 11366, 0x00008B6A }, /* GL_FLOAT_MAT4x3 */ - { 11382, 0x00008B50 }, /* GL_FLOAT_VEC2 */ - { 11396, 0x00008B50 }, /* GL_FLOAT_VEC2_ARB */ - { 11414, 0x00008B51 }, /* GL_FLOAT_VEC3 */ - { 11428, 0x00008B51 }, /* GL_FLOAT_VEC3_ARB */ - { 11446, 0x00008B52 }, /* GL_FLOAT_VEC4 */ - { 11460, 0x00008B52 }, /* GL_FLOAT_VEC4_ARB */ - { 11478, 0x00000B60 }, /* GL_FOG */ - { 11485, 0x00000080 }, /* GL_FOG_BIT */ - { 11496, 0x00000B66 }, /* GL_FOG_COLOR */ - { 11509, 0x00008451 }, /* GL_FOG_COORD */ - { 11522, 0x00008451 }, /* GL_FOG_COORDINATE */ - { 11540, 0x00008457 }, /* GL_FOG_COORDINATE_ARRAY */ - { 11564, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */ - { 11603, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */ - { 11646, 0x00008456 }, /* GL_FOG_COORDINATE_ARRAY_POINTER */ - { 11678, 0x00008455 }, /* GL_FOG_COORDINATE_ARRAY_STRIDE */ - { 11709, 0x00008454 }, /* GL_FOG_COORDINATE_ARRAY_TYPE */ - { 11738, 0x00008450 }, /* GL_FOG_COORDINATE_SOURCE */ - { 11763, 0x00008457 }, /* GL_FOG_COORD_ARRAY */ - { 11782, 0x0000889D }, /* GL_FOG_COORD_ARRAY_BUFFER_BINDING */ - { 11816, 0x00008456 }, /* GL_FOG_COORD_ARRAY_POINTER */ - { 11843, 0x00008455 }, /* GL_FOG_COORD_ARRAY_STRIDE */ - { 11869, 0x00008454 }, /* GL_FOG_COORD_ARRAY_TYPE */ - { 11893, 0x00008450 }, /* GL_FOG_COORD_SRC */ - { 11910, 0x00000B62 }, /* GL_FOG_DENSITY */ - { 11925, 0x0000855A }, /* GL_FOG_DISTANCE_MODE_NV */ - { 11949, 0x00000B64 }, /* GL_FOG_END */ - { 11960, 0x00000C54 }, /* GL_FOG_HINT */ - { 11972, 0x00000B61 }, /* GL_FOG_INDEX */ - { 11985, 0x00000B65 }, /* GL_FOG_MODE */ - { 11997, 0x00008198 }, /* GL_FOG_OFFSET_SGIX */ - { 12016, 0x00008199 }, /* GL_FOG_OFFSET_VALUE_SGIX */ - { 12041, 0x00000B63 }, /* GL_FOG_START */ - { 12054, 0x00008452 }, /* GL_FRAGMENT_DEPTH */ - { 12072, 0x00008804 }, /* GL_FRAGMENT_PROGRAM_ARB */ - { 12096, 0x00008B30 }, /* GL_FRAGMENT_SHADER */ - { 12115, 0x00008B30 }, /* GL_FRAGMENT_SHADER_ARB */ - { 12138, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */ - { 12173, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES */ - { 12212, 0x00008D40 }, /* GL_FRAMEBUFFER */ - { 12227, 0x00008215 }, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ - { 12264, 0x00008214 }, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ - { 12300, 0x00008210 }, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ - { 12341, 0x00008211 }, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ - { 12382, 0x00008216 }, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ - { 12419, 0x00008213 }, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ - { 12456, 0x00008DA7 }, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED */ - { 12490, 0x00008DA7 }, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB */ - { 12528, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ - { 12566, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */ - { 12608, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES */ - { 12650, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ - { 12688, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */ - { 12730, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES */ - { 12772, 0x00008212 }, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ - { 12807, 0x00008217 }, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ - { 12846, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */ - { 12895, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES */ - { 12944, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ - { 12992, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */ - { 13044, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES */ - { 13096, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ - { 13136, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ - { 13180, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ - { 13220, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */ - { 13264, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES */ - { 13308, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING */ - { 13331, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_EXT */ - { 13358, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_OES */ - { 13385, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE */ - { 13409, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_EXT */ - { 13437, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_OES */ - { 13465, 0x00008218 }, /* GL_FRAMEBUFFER_DEFAULT */ - { 13488, 0x00008D40 }, /* GL_FRAMEBUFFER_EXT */ - { 13507, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ - { 13544, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */ - { 13585, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES */ - { 13626, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS */ - { 13663, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */ - { 13704, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES */ - { 13745, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */ - { 13783, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */ - { 13825, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES */ - { 13867, 0x00008CD8 }, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */ - { 13918, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */ - { 13956, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES */ - { 13994, 0x00008DA9 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB */ - { 14036, 0x00008DA8 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS */ - { 14076, 0x00008DA8 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB */ - { 14120, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ - { 14165, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */ - { 14214, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES */ - { 14263, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ - { 14301, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT */ - { 14343, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */ - { 14381, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */ - { 14423, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES */ - { 14465, 0x00008D40 }, /* GL_FRAMEBUFFER_OES */ - { 14484, 0x00008CDE }, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */ - { 14516, 0x00008219 }, /* GL_FRAMEBUFFER_UNDEFINED */ - { 14541, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED */ - { 14568, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */ - { 14599, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_OES */ - { 14630, 0x00000404 }, /* GL_FRONT */ - { 14639, 0x00000408 }, /* GL_FRONT_AND_BACK */ - { 14657, 0x00000B46 }, /* GL_FRONT_FACE */ - { 14671, 0x00000400 }, /* GL_FRONT_LEFT */ - { 14685, 0x00000401 }, /* GL_FRONT_RIGHT */ - { 14700, 0x00008006 }, /* GL_FUNC_ADD */ - { 14712, 0x00008006 }, /* GL_FUNC_ADD_EXT */ - { 14728, 0x00008006 }, /* GL_FUNC_ADD_OES */ - { 14744, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT */ - { 14769, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_EXT */ - { 14798, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_OES */ - { 14827, 0x0000800A }, /* GL_FUNC_SUBTRACT */ - { 14844, 0x0000800A }, /* GL_FUNC_SUBTRACT_EXT */ - { 14865, 0x0000800A }, /* GL_FUNC_SUBTRACT_OES */ - { 14886, 0x00008191 }, /* GL_GENERATE_MIPMAP */ - { 14905, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT */ - { 14929, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT_SGIS */ - { 14958, 0x00008191 }, /* GL_GENERATE_MIPMAP_SGIS */ - { 14982, 0x00008917 }, /* GL_GEOMETRY_INPUT_TYPE */ - { 15005, 0x00008DDB }, /* GL_GEOMETRY_INPUT_TYPE_ARB */ - { 15032, 0x00008918 }, /* GL_GEOMETRY_OUTPUT_TYPE */ - { 15056, 0x00008DDC }, /* GL_GEOMETRY_OUTPUT_TYPE_ARB */ - { 15084, 0x00008DD9 }, /* GL_GEOMETRY_SHADER */ - { 15103, 0x00008DD9 }, /* GL_GEOMETRY_SHADER_ARB */ - { 15126, 0x00008916 }, /* GL_GEOMETRY_VERTICES_OUT */ - { 15151, 0x00008DDA }, /* GL_GEOMETRY_VERTICES_OUT_ARB */ - { 15180, 0x00000206 }, /* GL_GEQUAL */ - { 15190, 0x00000204 }, /* GL_GREATER */ - { 15201, 0x00001904 }, /* GL_GREEN */ - { 15210, 0x00000D19 }, /* GL_GREEN_BIAS */ - { 15224, 0x00000D53 }, /* GL_GREEN_BITS */ - { 15238, 0x00008D95 }, /* GL_GREEN_INTEGER */ - { 15255, 0x00008D95 }, /* GL_GREEN_INTEGER_EXT */ - { 15276, 0x00000D18 }, /* GL_GREEN_SCALE */ - { 15291, 0x0000140B }, /* GL_HALF_FLOAT */ - { 15305, 0x00008D61 }, /* GL_HALF_FLOAT_OES */ - { 15323, 0x00008DF2 }, /* GL_HIGH_FLOAT */ - { 15337, 0x00008DF5 }, /* GL_HIGH_INT */ - { 15349, 0x00008000 }, /* GL_HINT_BIT */ - { 15361, 0x00008024 }, /* GL_HISTOGRAM */ - { 15374, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE */ - { 15398, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE_EXT */ - { 15426, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE */ - { 15449, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE_EXT */ - { 15476, 0x00008024 }, /* GL_HISTOGRAM_EXT */ - { 15493, 0x00008027 }, /* GL_HISTOGRAM_FORMAT */ - { 15513, 0x00008027 }, /* GL_HISTOGRAM_FORMAT_EXT */ - { 15537, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE */ - { 15561, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE_EXT */ - { 15589, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE */ - { 15617, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */ - { 15649, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE */ - { 15671, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE_EXT */ - { 15697, 0x0000802D }, /* GL_HISTOGRAM_SINK */ - { 15715, 0x0000802D }, /* GL_HISTOGRAM_SINK_EXT */ - { 15737, 0x00008026 }, /* GL_HISTOGRAM_WIDTH */ - { 15756, 0x00008026 }, /* GL_HISTOGRAM_WIDTH_EXT */ - { 15779, 0x0000862A }, /* GL_IDENTITY_NV */ - { 15794, 0x00008150 }, /* GL_IGNORE_BORDER_HP */ - { 15814, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT */ - { 15850, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */ - { 15890, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE */ - { 15924, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */ - { 15962, 0x00001E02 }, /* GL_INCR */ - { 15970, 0x00008507 }, /* GL_INCR_WRAP */ - { 15983, 0x00008507 }, /* GL_INCR_WRAP_EXT */ - { 16000, 0x00008222 }, /* GL_INDEX */ - { 16009, 0x00008077 }, /* GL_INDEX_ARRAY */ - { 16024, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING */ - { 16054, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */ - { 16088, 0x00008091 }, /* GL_INDEX_ARRAY_POINTER */ - { 16111, 0x00008086 }, /* GL_INDEX_ARRAY_STRIDE */ - { 16133, 0x00008085 }, /* GL_INDEX_ARRAY_TYPE */ - { 16153, 0x00000D51 }, /* GL_INDEX_BITS */ - { 16167, 0x00000C20 }, /* GL_INDEX_CLEAR_VALUE */ - { 16188, 0x00000BF1 }, /* GL_INDEX_LOGIC_OP */ - { 16206, 0x00000C30 }, /* GL_INDEX_MODE */ - { 16220, 0x00000D13 }, /* GL_INDEX_OFFSET */ - { 16236, 0x00000D12 }, /* GL_INDEX_SHIFT */ - { 16251, 0x00000C21 }, /* GL_INDEX_WRITEMASK */ - { 16270, 0x00008B84 }, /* GL_INFO_LOG_LENGTH */ - { 16289, 0x00001404 }, /* GL_INT */ - { 16296, 0x00008049 }, /* GL_INTENSITY */ - { 16309, 0x0000804C }, /* GL_INTENSITY12 */ - { 16324, 0x0000804C }, /* GL_INTENSITY12_EXT */ - { 16343, 0x0000804D }, /* GL_INTENSITY16 */ - { 16358, 0x00008D8B }, /* GL_INTENSITY16I_EXT */ - { 16378, 0x00008D79 }, /* GL_INTENSITY16UI_EXT */ - { 16399, 0x0000804D }, /* GL_INTENSITY16_EXT */ - { 16418, 0x00008D85 }, /* GL_INTENSITY32I_EXT */ - { 16438, 0x00008D73 }, /* GL_INTENSITY32UI_EXT */ - { 16459, 0x0000804A }, /* GL_INTENSITY4 */ - { 16473, 0x0000804A }, /* GL_INTENSITY4_EXT */ - { 16491, 0x0000804B }, /* GL_INTENSITY8 */ - { 16505, 0x00008D91 }, /* GL_INTENSITY8I_EXT */ - { 16524, 0x00008D7F }, /* GL_INTENSITY8UI_EXT */ - { 16544, 0x0000804B }, /* GL_INTENSITY8_EXT */ - { 16562, 0x00008049 }, /* GL_INTENSITY_EXT */ - { 16579, 0x00008C8C }, /* GL_INTERLEAVED_ATTRIBS */ - { 16602, 0x00008C8C }, /* GL_INTERLEAVED_ATTRIBS_EXT */ - { 16629, 0x00008575 }, /* GL_INTERPOLATE */ - { 16644, 0x00008575 }, /* GL_INTERPOLATE_ARB */ - { 16663, 0x00008575 }, /* GL_INTERPOLATE_EXT */ - { 16682, 0x00008DF7 }, /* GL_INT_10_10_10_2_OES */ - { 16704, 0x00008DC9 }, /* GL_INT_SAMPLER_1D */ - { 16722, 0x00008DCE }, /* GL_INT_SAMPLER_1D_ARRAY */ - { 16746, 0x00008DCE }, /* GL_INT_SAMPLER_1D_ARRAY_EXT */ - { 16774, 0x00008DC9 }, /* GL_INT_SAMPLER_1D_EXT */ - { 16796, 0x00008DCA }, /* GL_INT_SAMPLER_2D */ - { 16814, 0x00008DCF }, /* GL_INT_SAMPLER_2D_ARRAY */ - { 16838, 0x00008DCF }, /* GL_INT_SAMPLER_2D_ARRAY_EXT */ - { 16866, 0x00008DCA }, /* GL_INT_SAMPLER_2D_EXT */ - { 16888, 0x00008DCD }, /* GL_INT_SAMPLER_2D_RECT */ - { 16911, 0x00008DCD }, /* GL_INT_SAMPLER_2D_RECT_EXT */ - { 16938, 0x00008DCB }, /* GL_INT_SAMPLER_3D */ - { 16956, 0x00008DCB }, /* GL_INT_SAMPLER_3D_EXT */ - { 16978, 0x00008DD0 }, /* GL_INT_SAMPLER_BUFFER */ - { 17000, 0x00008DD0 }, /* GL_INT_SAMPLER_BUFFER_EXT */ - { 17026, 0x00008DCC }, /* GL_INT_SAMPLER_CUBE */ - { 17046, 0x00008DCC }, /* GL_INT_SAMPLER_CUBE_EXT */ - { 17070, 0x00008B53 }, /* GL_INT_VEC2 */ - { 17082, 0x00008B53 }, /* GL_INT_VEC2_ARB */ - { 17098, 0x00008B54 }, /* GL_INT_VEC3 */ - { 17110, 0x00008B54 }, /* GL_INT_VEC3_ARB */ - { 17126, 0x00008B55 }, /* GL_INT_VEC4 */ - { 17138, 0x00008B55 }, /* GL_INT_VEC4_ARB */ - { 17154, 0x00000500 }, /* GL_INVALID_ENUM */ - { 17170, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION */ - { 17203, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */ - { 17240, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_OES */ - { 17277, 0x00000502 }, /* GL_INVALID_OPERATION */ - { 17298, 0x00000501 }, /* GL_INVALID_VALUE */ - { 17315, 0x0000862B }, /* GL_INVERSE_NV */ - { 17329, 0x0000862D }, /* GL_INVERSE_TRANSPOSE_NV */ - { 17353, 0x0000150A }, /* GL_INVERT */ - { 17363, 0x00001E00 }, /* GL_KEEP */ - { 17371, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION */ - { 17397, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION_EXT */ - { 17427, 0x00000406 }, /* GL_LEFT */ - { 17435, 0x00000203 }, /* GL_LEQUAL */ - { 17445, 0x00000201 }, /* GL_LESS */ - { 17453, 0x00004000 }, /* GL_LIGHT0 */ - { 17463, 0x00004001 }, /* GL_LIGHT1 */ - { 17473, 0x00004002 }, /* GL_LIGHT2 */ - { 17483, 0x00004003 }, /* GL_LIGHT3 */ - { 17493, 0x00004004 }, /* GL_LIGHT4 */ - { 17503, 0x00004005 }, /* GL_LIGHT5 */ - { 17513, 0x00004006 }, /* GL_LIGHT6 */ - { 17523, 0x00004007 }, /* GL_LIGHT7 */ - { 17533, 0x00000B50 }, /* GL_LIGHTING */ - { 17545, 0x00000040 }, /* GL_LIGHTING_BIT */ - { 17561, 0x00000B53 }, /* GL_LIGHT_MODEL_AMBIENT */ - { 17584, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL */ - { 17613, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */ - { 17646, 0x00000B51 }, /* GL_LIGHT_MODEL_LOCAL_VIEWER */ - { 17674, 0x00000B52 }, /* GL_LIGHT_MODEL_TWO_SIDE */ - { 17698, 0x00001B01 }, /* GL_LINE */ - { 17706, 0x00002601 }, /* GL_LINEAR */ - { 17716, 0x00001208 }, /* GL_LINEAR_ATTENUATION */ - { 17738, 0x00008170 }, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */ - { 17768, 0x0000844F }, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */ - { 17799, 0x00002703 }, /* GL_LINEAR_MIPMAP_LINEAR */ - { 17823, 0x00002701 }, /* GL_LINEAR_MIPMAP_NEAREST */ - { 17848, 0x00000001 }, /* GL_LINES */ - { 17857, 0x0000000A }, /* GL_LINES_ADJACENCY */ - { 17876, 0x0000000A }, /* GL_LINES_ADJACENCY_ARB */ - { 17899, 0x00000004 }, /* GL_LINE_BIT */ - { 17911, 0x00000002 }, /* GL_LINE_LOOP */ - { 17924, 0x00000707 }, /* GL_LINE_RESET_TOKEN */ - { 17944, 0x00000B20 }, /* GL_LINE_SMOOTH */ - { 17959, 0x00000C52 }, /* GL_LINE_SMOOTH_HINT */ - { 17979, 0x00000B24 }, /* GL_LINE_STIPPLE */ - { 17995, 0x00000B25 }, /* GL_LINE_STIPPLE_PATTERN */ - { 18019, 0x00000B26 }, /* GL_LINE_STIPPLE_REPEAT */ - { 18042, 0x00000003 }, /* GL_LINE_STRIP */ - { 18056, 0x0000000B }, /* GL_LINE_STRIP_ADJACENCY */ - { 18080, 0x0000000B }, /* GL_LINE_STRIP_ADJACENCY_ARB */ - { 18108, 0x00000702 }, /* GL_LINE_TOKEN */ - { 18122, 0x00000B21 }, /* GL_LINE_WIDTH */ - { 18136, 0x00000B23 }, /* GL_LINE_WIDTH_GRANULARITY */ - { 18162, 0x00000B22 }, /* GL_LINE_WIDTH_RANGE */ - { 18182, 0x00008B82 }, /* GL_LINK_STATUS */ - { 18197, 0x00000B32 }, /* GL_LIST_BASE */ - { 18210, 0x00020000 }, /* GL_LIST_BIT */ - { 18222, 0x00000B33 }, /* GL_LIST_INDEX */ - { 18236, 0x00000B30 }, /* GL_LIST_MODE */ - { 18249, 0x00000101 }, /* GL_LOAD */ - { 18257, 0x00000BF1 }, /* GL_LOGIC_OP */ - { 18269, 0x00000BF0 }, /* GL_LOGIC_OP_MODE */ - { 18286, 0x00008CA1 }, /* GL_LOWER_LEFT */ - { 18300, 0x00008DF0 }, /* GL_LOW_FLOAT */ - { 18313, 0x00008DF3 }, /* GL_LOW_INT */ - { 18324, 0x00001909 }, /* GL_LUMINANCE */ - { 18337, 0x00008041 }, /* GL_LUMINANCE12 */ - { 18352, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12 */ - { 18375, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12_EXT */ - { 18402, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4 */ - { 18424, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4_EXT */ - { 18450, 0x00008041 }, /* GL_LUMINANCE12_EXT */ - { 18469, 0x00008042 }, /* GL_LUMINANCE16 */ - { 18484, 0x00008D8C }, /* GL_LUMINANCE16I_EXT */ - { 18504, 0x00008D7A }, /* GL_LUMINANCE16UI_EXT */ - { 18525, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16 */ - { 18548, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16_EXT */ - { 18575, 0x00008042 }, /* GL_LUMINANCE16_EXT */ - { 18594, 0x00008D86 }, /* GL_LUMINANCE32I_EXT */ - { 18614, 0x00008D74 }, /* GL_LUMINANCE32UI_EXT */ - { 18635, 0x0000803F }, /* GL_LUMINANCE4 */ - { 18649, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4 */ - { 18670, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4_EXT */ - { 18695, 0x0000803F }, /* GL_LUMINANCE4_EXT */ - { 18713, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2 */ - { 18734, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2_EXT */ - { 18759, 0x00008040 }, /* GL_LUMINANCE8 */ - { 18773, 0x00008D92 }, /* GL_LUMINANCE8I_EXT */ - { 18792, 0x00008D80 }, /* GL_LUMINANCE8UI_EXT */ - { 18812, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8 */ - { 18833, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8_EXT */ - { 18858, 0x00008040 }, /* GL_LUMINANCE8_EXT */ - { 18876, 0x0000190A }, /* GL_LUMINANCE_ALPHA */ - { 18895, 0x00008D8D }, /* GL_LUMINANCE_ALPHA16I_EXT */ - { 18921, 0x00008D7B }, /* GL_LUMINANCE_ALPHA16UI_EXT */ - { 18948, 0x00008D87 }, /* GL_LUMINANCE_ALPHA32I_EXT */ - { 18974, 0x00008D75 }, /* GL_LUMINANCE_ALPHA32UI_EXT */ - { 19001, 0x00008D93 }, /* GL_LUMINANCE_ALPHA8I_EXT */ - { 19026, 0x00008D81 }, /* GL_LUMINANCE_ALPHA8UI_EXT */ - { 19052, 0x00008D9D }, /* GL_LUMINANCE_ALPHA_INTEGER_EXT */ - { 19083, 0x00008D9C }, /* GL_LUMINANCE_INTEGER_EXT */ - { 19108, 0x0000821B }, /* GL_MAJOR_VERSION */ - { 19125, 0x00000D90 }, /* GL_MAP1_COLOR_4 */ - { 19141, 0x00000DD0 }, /* GL_MAP1_GRID_DOMAIN */ - { 19161, 0x00000DD1 }, /* GL_MAP1_GRID_SEGMENTS */ - { 19183, 0x00000D91 }, /* GL_MAP1_INDEX */ - { 19197, 0x00000D92 }, /* GL_MAP1_NORMAL */ - { 19212, 0x00000D93 }, /* GL_MAP1_TEXTURE_COORD_1 */ - { 19236, 0x00000D94 }, /* GL_MAP1_TEXTURE_COORD_2 */ - { 19260, 0x00000D95 }, /* GL_MAP1_TEXTURE_COORD_3 */ - { 19284, 0x00000D96 }, /* GL_MAP1_TEXTURE_COORD_4 */ - { 19308, 0x00000D97 }, /* GL_MAP1_VERTEX_3 */ - { 19325, 0x00000D98 }, /* GL_MAP1_VERTEX_4 */ - { 19342, 0x00008660 }, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */ - { 19370, 0x0000866A }, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */ - { 19399, 0x0000866B }, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */ - { 19428, 0x0000866C }, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */ - { 19457, 0x0000866D }, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */ - { 19486, 0x0000866E }, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */ - { 19515, 0x0000866F }, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */ - { 19544, 0x00008661 }, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */ - { 19572, 0x00008662 }, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */ - { 19600, 0x00008663 }, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */ - { 19628, 0x00008664 }, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */ - { 19656, 0x00008665 }, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */ - { 19684, 0x00008666 }, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */ - { 19712, 0x00008667 }, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */ - { 19740, 0x00008668 }, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */ - { 19768, 0x00008669 }, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */ - { 19796, 0x00000DB0 }, /* GL_MAP2_COLOR_4 */ - { 19812, 0x00000DD2 }, /* GL_MAP2_GRID_DOMAIN */ - { 19832, 0x00000DD3 }, /* GL_MAP2_GRID_SEGMENTS */ - { 19854, 0x00000DB1 }, /* GL_MAP2_INDEX */ - { 19868, 0x00000DB2 }, /* GL_MAP2_NORMAL */ - { 19883, 0x00000DB3 }, /* GL_MAP2_TEXTURE_COORD_1 */ - { 19907, 0x00000DB4 }, /* GL_MAP2_TEXTURE_COORD_2 */ - { 19931, 0x00000DB5 }, /* GL_MAP2_TEXTURE_COORD_3 */ - { 19955, 0x00000DB6 }, /* GL_MAP2_TEXTURE_COORD_4 */ - { 19979, 0x00000DB7 }, /* GL_MAP2_VERTEX_3 */ - { 19996, 0x00000DB8 }, /* GL_MAP2_VERTEX_4 */ - { 20013, 0x00008670 }, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */ - { 20041, 0x0000867A }, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */ - { 20070, 0x0000867B }, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */ - { 20099, 0x0000867C }, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */ - { 20128, 0x0000867D }, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */ - { 20157, 0x0000867E }, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */ - { 20186, 0x0000867F }, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */ - { 20215, 0x00008671 }, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */ - { 20243, 0x00008672 }, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */ - { 20271, 0x00008673 }, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */ - { 20299, 0x00008674 }, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */ - { 20327, 0x00008675 }, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */ - { 20355, 0x00008676 }, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */ - { 20383, 0x00008677 }, /* GL_MAP2_VERTEX_ATTRIB7_4_NV */ - { 20411, 0x00008678 }, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */ - { 20439, 0x00008679 }, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */ - { 20467, 0x00000D10 }, /* GL_MAP_COLOR */ - { 20480, 0x00000010 }, /* GL_MAP_FLUSH_EXPLICIT_BIT */ - { 20506, 0x00000008 }, /* GL_MAP_INVALIDATE_BUFFER_BIT */ - { 20535, 0x00000004 }, /* GL_MAP_INVALIDATE_RANGE_BIT */ - { 20563, 0x00000001 }, /* GL_MAP_READ_BIT */ - { 20579, 0x00000D11 }, /* GL_MAP_STENCIL */ - { 20594, 0x00000020 }, /* GL_MAP_UNSYNCHRONIZED_BIT */ - { 20620, 0x00000002 }, /* GL_MAP_WRITE_BIT */ - { 20637, 0x000088C0 }, /* GL_MATRIX0_ARB */ - { 20652, 0x00008630 }, /* GL_MATRIX0_NV */ - { 20666, 0x000088CA }, /* GL_MATRIX10_ARB */ - { 20682, 0x000088CB }, /* GL_MATRIX11_ARB */ - { 20698, 0x000088CC }, /* GL_MATRIX12_ARB */ - { 20714, 0x000088CD }, /* GL_MATRIX13_ARB */ - { 20730, 0x000088CE }, /* GL_MATRIX14_ARB */ - { 20746, 0x000088CF }, /* GL_MATRIX15_ARB */ - { 20762, 0x000088D0 }, /* GL_MATRIX16_ARB */ - { 20778, 0x000088D1 }, /* GL_MATRIX17_ARB */ - { 20794, 0x000088D2 }, /* GL_MATRIX18_ARB */ - { 20810, 0x000088D3 }, /* GL_MATRIX19_ARB */ - { 20826, 0x000088C1 }, /* GL_MATRIX1_ARB */ - { 20841, 0x00008631 }, /* GL_MATRIX1_NV */ - { 20855, 0x000088D4 }, /* GL_MATRIX20_ARB */ - { 20871, 0x000088D5 }, /* GL_MATRIX21_ARB */ - { 20887, 0x000088D6 }, /* GL_MATRIX22_ARB */ - { 20903, 0x000088D7 }, /* GL_MATRIX23_ARB */ - { 20919, 0x000088D8 }, /* GL_MATRIX24_ARB */ - { 20935, 0x000088D9 }, /* GL_MATRIX25_ARB */ - { 20951, 0x000088DA }, /* GL_MATRIX26_ARB */ - { 20967, 0x000088DB }, /* GL_MATRIX27_ARB */ - { 20983, 0x000088DC }, /* GL_MATRIX28_ARB */ - { 20999, 0x000088DD }, /* GL_MATRIX29_ARB */ - { 21015, 0x000088C2 }, /* GL_MATRIX2_ARB */ - { 21030, 0x00008632 }, /* GL_MATRIX2_NV */ - { 21044, 0x000088DE }, /* GL_MATRIX30_ARB */ - { 21060, 0x000088DF }, /* GL_MATRIX31_ARB */ - { 21076, 0x000088C3 }, /* GL_MATRIX3_ARB */ - { 21091, 0x00008633 }, /* GL_MATRIX3_NV */ - { 21105, 0x000088C4 }, /* GL_MATRIX4_ARB */ - { 21120, 0x00008634 }, /* GL_MATRIX4_NV */ - { 21134, 0x000088C5 }, /* GL_MATRIX5_ARB */ - { 21149, 0x00008635 }, /* GL_MATRIX5_NV */ - { 21163, 0x000088C6 }, /* GL_MATRIX6_ARB */ - { 21178, 0x00008636 }, /* GL_MATRIX6_NV */ - { 21192, 0x000088C7 }, /* GL_MATRIX7_ARB */ - { 21207, 0x00008637 }, /* GL_MATRIX7_NV */ - { 21221, 0x000088C8 }, /* GL_MATRIX8_ARB */ - { 21236, 0x000088C9 }, /* GL_MATRIX9_ARB */ - { 21251, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_ARB */ - { 21277, 0x00008B9E }, /* GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES */ - { 21318, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_OES */ - { 21344, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */ - { 21378, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_OES */ - { 21412, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */ - { 21443, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_OES */ - { 21474, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */ - { 21507, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_OES */ - { 21540, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */ - { 21571, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_OES */ - { 21602, 0x00000BA0 }, /* GL_MATRIX_MODE */ - { 21617, 0x00008840 }, /* GL_MATRIX_PALETTE_ARB */ - { 21639, 0x00008840 }, /* GL_MATRIX_PALETTE_OES */ - { 21661, 0x00008008 }, /* GL_MAX */ - { 21668, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE */ - { 21691, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE_OES */ - { 21718, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS */ - { 21746, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */ - { 21778, 0x00000D35 }, /* GL_MAX_ATTRIB_STACK_DEPTH */ - { 21804, 0x00000D3B }, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */ - { 21837, 0x00008177 }, /* GL_MAX_CLIPMAP_DEPTH_SGIX */ - { 21863, 0x00008178 }, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */ - { 21897, 0x00000D32 }, /* GL_MAX_CLIP_DISTANCES */ - { 21919, 0x00000D32 }, /* GL_MAX_CLIP_PLANES */ - { 21938, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS */ - { 21963, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS_EXT */ - { 21992, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */ - { 22024, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */ - { 22060, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */ - { 22096, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */ - { 22136, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT */ - { 22162, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT_EXT */ - { 22192, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH */ - { 22217, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH_EXT */ - { 22246, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */ - { 22275, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */ - { 22308, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES */ - { 22341, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS */ - { 22361, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ARB */ - { 22385, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ATI */ - { 22409, 0x000080E9 }, /* GL_MAX_ELEMENTS_INDICES */ - { 22433, 0x000080E8 }, /* GL_MAX_ELEMENTS_VERTICES */ - { 22458, 0x00000D30 }, /* GL_MAX_EVAL_ORDER */ - { 22476, 0x00008008 }, /* GL_MAX_EXT */ - { 22487, 0x00009125 }, /* GL_MAX_FRAGMENT_INPUT_COMPONENTS */ - { 22520, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */ - { 22555, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */ - { 22594, 0x00008DFD }, /* GL_MAX_FRAGMENT_UNIFORM_VECTORS */ - { 22626, 0x00009123 }, /* GL_MAX_GEOMETRY_INPUT_COMPONENTS */ - { 22659, 0x00009124 }, /* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS */ - { 22693, 0x00008DE0 }, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES */ - { 22725, 0x00008DE0 }, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB */ - { 22761, 0x00008C29 }, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS */ - { 22797, 0x00008C29 }, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB */ - { 22837, 0x00008DE1 }, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS */ - { 22877, 0x00008DE1 }, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB */ - { 22921, 0x00008DDF }, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS */ - { 22956, 0x00008DDF }, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB */ - { 22995, 0x00008DDD }, /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB */ - { 23034, 0x00000D31 }, /* GL_MAX_LIGHTS */ - { 23048, 0x00000B31 }, /* GL_MAX_LIST_NESTING */ - { 23068, 0x00008841 }, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */ - { 23106, 0x00000D36 }, /* GL_MAX_MODELVIEW_STACK_DEPTH */ - { 23135, 0x00000D37 }, /* GL_MAX_NAME_STACK_DEPTH */ - { 23159, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_ARB */ - { 23187, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_OES */ - { 23215, 0x00000D34 }, /* GL_MAX_PIXEL_MAP_TABLE */ - { 23238, 0x000088B1 }, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */ - { 23275, 0x0000880B }, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */ - { 23311, 0x000088AD }, /* GL_MAX_PROGRAM_ATTRIBS_ARB */ - { 23338, 0x000088F5 }, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */ - { 23367, 0x000088B5 }, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */ - { 23401, 0x000088F4 }, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ - { 23437, 0x000088F6 }, /* GL_MAX_PROGRAM_IF_DEPTH_NV */ - { 23464, 0x000088A1 }, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */ - { 23496, 0x000088B4 }, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */ - { 23532, 0x000088F8 }, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */ - { 23561, 0x000088F7 }, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */ - { 23590, 0x0000862F }, /* GL_MAX_PROGRAM_MATRICES_ARB */ - { 23618, 0x0000862E }, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */ - { 23656, 0x000088B3 }, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ - { 23700, 0x0000880E }, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ - { 23743, 0x000088AF }, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */ - { 23777, 0x000088A3 }, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ - { 23816, 0x000088AB }, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */ - { 23853, 0x000088A7 }, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */ - { 23891, 0x00008810 }, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ - { 23934, 0x0000880F }, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ - { 23977, 0x000088A9 }, /* GL_MAX_PROGRAM_PARAMETERS_ARB */ - { 24007, 0x000088A5 }, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */ - { 24038, 0x00008905 }, /* GL_MAX_PROGRAM_TEXEL_OFFSET */ - { 24066, 0x00008905 }, /* GL_MAX_PROGRAM_TEXEL_OFFSET_EXT */ - { 24098, 0x0000880D }, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */ - { 24134, 0x0000880C }, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */ - { 24170, 0x00000D38 }, /* GL_MAX_PROJECTION_STACK_DEPTH */ - { 24200, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE */ - { 24230, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */ - { 24264, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */ - { 24297, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE */ - { 24322, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_EXT */ - { 24351, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_OES */ - { 24380, 0x00008D57 }, /* GL_MAX_SAMPLES */ - { 24395, 0x00008D57 }, /* GL_MAX_SAMPLES_EXT */ - { 24414, 0x00009111 }, /* GL_MAX_SERVER_WAIT_TIMEOUT */ - { 24441, 0x00008504 }, /* GL_MAX_SHININESS_NV */ - { 24461, 0x00008505 }, /* GL_MAX_SPOT_EXPONENT_NV */ - { 24485, 0x00008C2B }, /* GL_MAX_TEXTURE_BUFFER_SIZE */ - { 24512, 0x00008C2B }, /* GL_MAX_TEXTURE_BUFFER_SIZE_ARB */ - { 24543, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS */ - { 24565, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS_ARB */ - { 24591, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS */ - { 24618, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */ - { 24649, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS */ - { 24673, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS_EXT */ - { 24701, 0x000084FF }, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */ - { 24735, 0x00000D33 }, /* GL_MAX_TEXTURE_SIZE */ - { 24755, 0x00000D39 }, /* GL_MAX_TEXTURE_STACK_DEPTH */ - { 24782, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS */ - { 24803, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS_ARB */ - { 24828, 0x0000862F }, /* GL_MAX_TRACK_MATRICES_NV */ - { 24853, 0x0000862E }, /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */ - { 24888, 0x00008C8A }, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS */ - { 24937, 0x00008C8A }, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT */ - { 24990, 0x00008C8B }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS */ - { 25033, 0x00008C8B }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT */ - { 25080, 0x00008C80 }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS */ - { 25126, 0x00008C80 }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT */ - { 25176, 0x00008B4B }, /* GL_MAX_VARYING_COMPONENTS */ - { 25202, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS */ - { 25224, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS_ARB */ - { 25250, 0x00008DFC }, /* GL_MAX_VARYING_VECTORS */ - { 25273, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS */ - { 25295, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS_ARB */ - { 25321, 0x00009122 }, /* GL_MAX_VERTEX_OUTPUT_COMPONENTS */ - { 25353, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */ - { 25387, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ - { 25425, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */ - { 25458, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */ - { 25495, 0x00008DFB }, /* GL_MAX_VERTEX_UNIFORM_VECTORS */ - { 25525, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_ARB */ - { 25549, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_OES */ - { 25573, 0x00008DDE }, /* GL_MAX_VERTEX_VARYING_COMPONENTS_ARB */ - { 25610, 0x00000D3A }, /* GL_MAX_VIEWPORT_DIMS */ - { 25631, 0x00008DF1 }, /* GL_MEDIUM_FLOAT */ - { 25647, 0x00008DF4 }, /* GL_MEDIUM_INT */ - { 25661, 0x00008007 }, /* GL_MIN */ - { 25668, 0x0000802E }, /* GL_MINMAX */ - { 25678, 0x0000802E }, /* GL_MINMAX_EXT */ - { 25692, 0x0000802F }, /* GL_MINMAX_FORMAT */ - { 25709, 0x0000802F }, /* GL_MINMAX_FORMAT_EXT */ - { 25730, 0x00008030 }, /* GL_MINMAX_SINK */ - { 25745, 0x00008030 }, /* GL_MINMAX_SINK_EXT */ - { 25764, 0x0000821C }, /* GL_MINOR_VERSION */ - { 25781, 0x00008007 }, /* GL_MIN_EXT */ - { 25792, 0x00008904 }, /* GL_MIN_PROGRAM_TEXEL_OFFSET */ - { 25820, 0x00008904 }, /* GL_MIN_PROGRAM_TEXEL_OFFSET_EXT */ - { 25852, 0x00008370 }, /* GL_MIRRORED_REPEAT */ - { 25871, 0x00008370 }, /* GL_MIRRORED_REPEAT_ARB */ - { 25894, 0x00008370 }, /* GL_MIRRORED_REPEAT_IBM */ - { 25917, 0x00008742 }, /* GL_MIRROR_CLAMP_ATI */ - { 25937, 0x00008742 }, /* GL_MIRROR_CLAMP_EXT */ - { 25957, 0x00008912 }, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */ - { 25987, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_ATI */ - { 26015, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */ - { 26043, 0x00001700 }, /* GL_MODELVIEW */ - { 26056, 0x00001700 }, /* GL_MODELVIEW0_ARB */ - { 26074, 0x0000872A }, /* GL_MODELVIEW10_ARB */ - { 26093, 0x0000872B }, /* GL_MODELVIEW11_ARB */ - { 26112, 0x0000872C }, /* GL_MODELVIEW12_ARB */ - { 26131, 0x0000872D }, /* GL_MODELVIEW13_ARB */ - { 26150, 0x0000872E }, /* GL_MODELVIEW14_ARB */ - { 26169, 0x0000872F }, /* GL_MODELVIEW15_ARB */ - { 26188, 0x00008730 }, /* GL_MODELVIEW16_ARB */ - { 26207, 0x00008731 }, /* GL_MODELVIEW17_ARB */ - { 26226, 0x00008732 }, /* GL_MODELVIEW18_ARB */ - { 26245, 0x00008733 }, /* GL_MODELVIEW19_ARB */ - { 26264, 0x0000850A }, /* GL_MODELVIEW1_ARB */ - { 26282, 0x00008734 }, /* GL_MODELVIEW20_ARB */ - { 26301, 0x00008735 }, /* GL_MODELVIEW21_ARB */ - { 26320, 0x00008736 }, /* GL_MODELVIEW22_ARB */ - { 26339, 0x00008737 }, /* GL_MODELVIEW23_ARB */ - { 26358, 0x00008738 }, /* GL_MODELVIEW24_ARB */ - { 26377, 0x00008739 }, /* GL_MODELVIEW25_ARB */ - { 26396, 0x0000873A }, /* GL_MODELVIEW26_ARB */ - { 26415, 0x0000873B }, /* GL_MODELVIEW27_ARB */ - { 26434, 0x0000873C }, /* GL_MODELVIEW28_ARB */ - { 26453, 0x0000873D }, /* GL_MODELVIEW29_ARB */ - { 26472, 0x00008722 }, /* GL_MODELVIEW2_ARB */ - { 26490, 0x0000873E }, /* GL_MODELVIEW30_ARB */ - { 26509, 0x0000873F }, /* GL_MODELVIEW31_ARB */ - { 26528, 0x00008723 }, /* GL_MODELVIEW3_ARB */ - { 26546, 0x00008724 }, /* GL_MODELVIEW4_ARB */ - { 26564, 0x00008725 }, /* GL_MODELVIEW5_ARB */ - { 26582, 0x00008726 }, /* GL_MODELVIEW6_ARB */ - { 26600, 0x00008727 }, /* GL_MODELVIEW7_ARB */ - { 26618, 0x00008728 }, /* GL_MODELVIEW8_ARB */ - { 26636, 0x00008729 }, /* GL_MODELVIEW9_ARB */ - { 26654, 0x00000BA6 }, /* GL_MODELVIEW_MATRIX */ - { 26674, 0x0000898D }, /* GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES */ - { 26716, 0x00008629 }, /* GL_MODELVIEW_PROJECTION_NV */ - { 26743, 0x00000BA3 }, /* GL_MODELVIEW_STACK_DEPTH */ - { 26768, 0x00002100 }, /* GL_MODULATE */ - { 26780, 0x00008744 }, /* GL_MODULATE_ADD_ATI */ - { 26800, 0x00008745 }, /* GL_MODULATE_SIGNED_ADD_ATI */ - { 26827, 0x00008746 }, /* GL_MODULATE_SUBTRACT_ATI */ - { 26852, 0x00000103 }, /* GL_MULT */ - { 26860, 0x0000809D }, /* GL_MULTISAMPLE */ - { 26875, 0x000086B2 }, /* GL_MULTISAMPLE_3DFX */ - { 26895, 0x0000809D }, /* GL_MULTISAMPLE_ARB */ - { 26914, 0x20000000 }, /* GL_MULTISAMPLE_BIT */ - { 26933, 0x20000000 }, /* GL_MULTISAMPLE_BIT_3DFX */ - { 26957, 0x20000000 }, /* GL_MULTISAMPLE_BIT_ARB */ - { 26980, 0x00008534 }, /* GL_MULTISAMPLE_FILTER_HINT_NV */ - { 27010, 0x00002A25 }, /* GL_N3F_V3F */ - { 27021, 0x00000D70 }, /* GL_NAME_STACK_DEPTH */ - { 27041, 0x0000150E }, /* GL_NAND */ - { 27049, 0x00002600 }, /* GL_NEAREST */ - { 27060, 0x0000844E }, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */ - { 27091, 0x0000844D }, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */ - { 27123, 0x00002702 }, /* GL_NEAREST_MIPMAP_LINEAR */ - { 27148, 0x00002700 }, /* GL_NEAREST_MIPMAP_NEAREST */ - { 27174, 0x00000200 }, /* GL_NEVER */ - { 27183, 0x00001102 }, /* GL_NICEST */ - { 27193, 0x00000000 }, /* GL_NONE */ - { 27201, 0x00000000 }, /* GL_NONE_OES */ - { 27213, 0x00001505 }, /* GL_NOOP */ - { 27221, 0x00001508 }, /* GL_NOR */ - { 27228, 0x00000BA1 }, /* GL_NORMALIZE */ - { 27241, 0x00008075 }, /* GL_NORMAL_ARRAY */ - { 27257, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING */ - { 27288, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */ - { 27323, 0x0000808F }, /* GL_NORMAL_ARRAY_POINTER */ - { 27347, 0x0000807F }, /* GL_NORMAL_ARRAY_STRIDE */ - { 27370, 0x0000807E }, /* GL_NORMAL_ARRAY_TYPE */ - { 27391, 0x00008511 }, /* GL_NORMAL_MAP */ - { 27405, 0x00008511 }, /* GL_NORMAL_MAP_ARB */ - { 27423, 0x00008511 }, /* GL_NORMAL_MAP_NV */ - { 27440, 0x00008511 }, /* GL_NORMAL_MAP_OES */ - { 27458, 0x00000205 }, /* GL_NOTEQUAL */ - { 27470, 0x00000000 }, /* GL_NO_ERROR */ - { 27482, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */ - { 27516, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */ - { 27554, 0x0000821D }, /* GL_NUM_EXTENSIONS */ - { 27572, 0x000087FE }, /* GL_NUM_PROGRAM_BINARY_FORMATS_OES */ - { 27606, 0x00008DF9 }, /* GL_NUM_SHADER_BINARY_FORMATS */ - { 27635, 0x00008B89 }, /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */ - { 27667, 0x00008B8A }, /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */ - { 27709, 0x00008B86 }, /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */ - { 27739, 0x00008B87 }, /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */ - { 27779, 0x00008B85 }, /* GL_OBJECT_ATTACHED_OBJECTS_ARB */ - { 27810, 0x00008B81 }, /* GL_OBJECT_COMPILE_STATUS_ARB */ - { 27839, 0x00008B80 }, /* GL_OBJECT_DELETE_STATUS_ARB */ - { 27867, 0x00008B84 }, /* GL_OBJECT_INFO_LOG_LENGTH_ARB */ - { 27897, 0x00002401 }, /* GL_OBJECT_LINEAR */ - { 27914, 0x00008B82 }, /* GL_OBJECT_LINK_STATUS_ARB */ - { 27940, 0x00002501 }, /* GL_OBJECT_PLANE */ - { 27956, 0x00008B88 }, /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */ - { 27991, 0x00008B4F }, /* GL_OBJECT_SUBTYPE_ARB */ - { 28013, 0x00009112 }, /* GL_OBJECT_TYPE */ - { 28028, 0x00008B4E }, /* GL_OBJECT_TYPE_ARB */ - { 28047, 0x00008B83 }, /* GL_OBJECT_VALIDATE_STATUS_ARB */ - { 28077, 0x00008165 }, /* GL_OCCLUSION_TEST_HP */ - { 28098, 0x00008166 }, /* GL_OCCLUSION_TEST_RESULT_HP */ - { 28126, 0x00000001 }, /* GL_ONE */ - { 28133, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA */ - { 28161, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */ - { 28193, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR */ - { 28221, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */ - { 28253, 0x00000305 }, /* GL_ONE_MINUS_DST_ALPHA */ - { 28276, 0x00000307 }, /* GL_ONE_MINUS_DST_COLOR */ - { 28299, 0x00000303 }, /* GL_ONE_MINUS_SRC_ALPHA */ - { 28322, 0x00000301 }, /* GL_ONE_MINUS_SRC_COLOR */ - { 28345, 0x00008598 }, /* GL_OPERAND0_ALPHA */ - { 28363, 0x00008598 }, /* GL_OPERAND0_ALPHA_ARB */ - { 28385, 0x00008598 }, /* GL_OPERAND0_ALPHA_EXT */ - { 28407, 0x00008590 }, /* GL_OPERAND0_RGB */ - { 28423, 0x00008590 }, /* GL_OPERAND0_RGB_ARB */ - { 28443, 0x00008590 }, /* GL_OPERAND0_RGB_EXT */ - { 28463, 0x00008599 }, /* GL_OPERAND1_ALPHA */ - { 28481, 0x00008599 }, /* GL_OPERAND1_ALPHA_ARB */ - { 28503, 0x00008599 }, /* GL_OPERAND1_ALPHA_EXT */ - { 28525, 0x00008591 }, /* GL_OPERAND1_RGB */ - { 28541, 0x00008591 }, /* GL_OPERAND1_RGB_ARB */ - { 28561, 0x00008591 }, /* GL_OPERAND1_RGB_EXT */ - { 28581, 0x0000859A }, /* GL_OPERAND2_ALPHA */ - { 28599, 0x0000859A }, /* GL_OPERAND2_ALPHA_ARB */ - { 28621, 0x0000859A }, /* GL_OPERAND2_ALPHA_EXT */ - { 28643, 0x00008592 }, /* GL_OPERAND2_RGB */ - { 28659, 0x00008592 }, /* GL_OPERAND2_RGB_ARB */ - { 28679, 0x00008592 }, /* GL_OPERAND2_RGB_EXT */ - { 28699, 0x0000859B }, /* GL_OPERAND3_ALPHA_NV */ - { 28720, 0x00008593 }, /* GL_OPERAND3_RGB_NV */ - { 28739, 0x00001507 }, /* GL_OR */ - { 28745, 0x00000A01 }, /* GL_ORDER */ - { 28754, 0x0000150D }, /* GL_OR_INVERTED */ - { 28769, 0x0000150B }, /* GL_OR_REVERSE */ - { 28783, 0x00000505 }, /* GL_OUT_OF_MEMORY */ - { 28800, 0x00000D05 }, /* GL_PACK_ALIGNMENT */ - { 28818, 0x0000806C }, /* GL_PACK_IMAGE_HEIGHT */ - { 28839, 0x00008758 }, /* GL_PACK_INVERT_MESA */ - { 28859, 0x00000D01 }, /* GL_PACK_LSB_FIRST */ - { 28877, 0x00000D02 }, /* GL_PACK_ROW_LENGTH */ - { 28896, 0x0000806B }, /* GL_PACK_SKIP_IMAGES */ - { 28916, 0x00000D04 }, /* GL_PACK_SKIP_PIXELS */ - { 28936, 0x00000D03 }, /* GL_PACK_SKIP_ROWS */ - { 28954, 0x00000D00 }, /* GL_PACK_SWAP_BYTES */ - { 28973, 0x00008B92 }, /* GL_PALETTE4_R5_G6_B5_OES */ - { 28998, 0x00008B94 }, /* GL_PALETTE4_RGB5_A1_OES */ - { 29022, 0x00008B90 }, /* GL_PALETTE4_RGB8_OES */ - { 29043, 0x00008B93 }, /* GL_PALETTE4_RGBA4_OES */ - { 29065, 0x00008B91 }, /* GL_PALETTE4_RGBA8_OES */ - { 29087, 0x00008B97 }, /* GL_PALETTE8_R5_G6_B5_OES */ - { 29112, 0x00008B99 }, /* GL_PALETTE8_RGB5_A1_OES */ - { 29136, 0x00008B95 }, /* GL_PALETTE8_RGB8_OES */ - { 29157, 0x00008B98 }, /* GL_PALETTE8_RGBA4_OES */ - { 29179, 0x00008B96 }, /* GL_PALETTE8_RGBA8_OES */ - { 29201, 0x00000700 }, /* GL_PASS_THROUGH_TOKEN */ - { 29223, 0x00000C50 }, /* GL_PERSPECTIVE_CORRECTION_HINT */ - { 29254, 0x00000C79 }, /* GL_PIXEL_MAP_A_TO_A */ - { 29274, 0x00000CB9 }, /* GL_PIXEL_MAP_A_TO_A_SIZE */ - { 29299, 0x00000C78 }, /* GL_PIXEL_MAP_B_TO_B */ - { 29319, 0x00000CB8 }, /* GL_PIXEL_MAP_B_TO_B_SIZE */ - { 29344, 0x00000C77 }, /* GL_PIXEL_MAP_G_TO_G */ - { 29364, 0x00000CB7 }, /* GL_PIXEL_MAP_G_TO_G_SIZE */ - { 29389, 0x00000C75 }, /* GL_PIXEL_MAP_I_TO_A */ - { 29409, 0x00000CB5 }, /* GL_PIXEL_MAP_I_TO_A_SIZE */ - { 29434, 0x00000C74 }, /* GL_PIXEL_MAP_I_TO_B */ - { 29454, 0x00000CB4 }, /* GL_PIXEL_MAP_I_TO_B_SIZE */ - { 29479, 0x00000C73 }, /* GL_PIXEL_MAP_I_TO_G */ - { 29499, 0x00000CB3 }, /* GL_PIXEL_MAP_I_TO_G_SIZE */ - { 29524, 0x00000C70 }, /* GL_PIXEL_MAP_I_TO_I */ - { 29544, 0x00000CB0 }, /* GL_PIXEL_MAP_I_TO_I_SIZE */ - { 29569, 0x00000C72 }, /* GL_PIXEL_MAP_I_TO_R */ - { 29589, 0x00000CB2 }, /* GL_PIXEL_MAP_I_TO_R_SIZE */ - { 29614, 0x00000C76 }, /* GL_PIXEL_MAP_R_TO_R */ - { 29634, 0x00000CB6 }, /* GL_PIXEL_MAP_R_TO_R_SIZE */ - { 29659, 0x00000C71 }, /* GL_PIXEL_MAP_S_TO_S */ - { 29679, 0x00000CB1 }, /* GL_PIXEL_MAP_S_TO_S_SIZE */ - { 29704, 0x00000020 }, /* GL_PIXEL_MODE_BIT */ - { 29722, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER */ - { 29743, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING */ - { 29772, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */ - { 29805, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER_EXT */ - { 29830, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER */ - { 29853, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING */ - { 29884, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */ - { 29919, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER_EXT */ - { 29946, 0x00001B00 }, /* GL_POINT */ - { 29955, 0x00000000 }, /* GL_POINTS */ - { 29965, 0x00000002 }, /* GL_POINT_BIT */ - { 29978, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION */ - { 30008, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_ARB */ - { 30042, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_EXT */ - { 30076, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_SGIS */ - { 30111, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE */ - { 30140, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */ - { 30173, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */ - { 30206, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_SGIS */ - { 30240, 0x00000B11 }, /* GL_POINT_SIZE */ - { 30254, 0x00008B9F }, /* GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES */ - { 30293, 0x00008B9C }, /* GL_POINT_SIZE_ARRAY_OES */ - { 30317, 0x0000898C }, /* GL_POINT_SIZE_ARRAY_POINTER_OES */ - { 30349, 0x0000898B }, /* GL_POINT_SIZE_ARRAY_STRIDE_OES */ - { 30380, 0x0000898A }, /* GL_POINT_SIZE_ARRAY_TYPE_OES */ - { 30409, 0x00000B13 }, /* GL_POINT_SIZE_GRANULARITY */ - { 30435, 0x00008127 }, /* GL_POINT_SIZE_MAX */ - { 30453, 0x00008127 }, /* GL_POINT_SIZE_MAX_ARB */ - { 30475, 0x00008127 }, /* GL_POINT_SIZE_MAX_EXT */ - { 30497, 0x00008127 }, /* GL_POINT_SIZE_MAX_SGIS */ - { 30520, 0x00008126 }, /* GL_POINT_SIZE_MIN */ - { 30538, 0x00008126 }, /* GL_POINT_SIZE_MIN_ARB */ - { 30560, 0x00008126 }, /* GL_POINT_SIZE_MIN_EXT */ - { 30582, 0x00008126 }, /* GL_POINT_SIZE_MIN_SGIS */ - { 30605, 0x00000B12 }, /* GL_POINT_SIZE_RANGE */ - { 30625, 0x00000B10 }, /* GL_POINT_SMOOTH */ - { 30641, 0x00000C51 }, /* GL_POINT_SMOOTH_HINT */ - { 30662, 0x00008861 }, /* GL_POINT_SPRITE */ - { 30678, 0x00008861 }, /* GL_POINT_SPRITE_ARB */ - { 30698, 0x00008CA0 }, /* GL_POINT_SPRITE_COORD_ORIGIN */ - { 30727, 0x00008861 }, /* GL_POINT_SPRITE_NV */ - { 30746, 0x00008861 }, /* GL_POINT_SPRITE_OES */ - { 30766, 0x00008863 }, /* GL_POINT_SPRITE_R_MODE_NV */ - { 30792, 0x00000701 }, /* GL_POINT_TOKEN */ - { 30807, 0x00000009 }, /* GL_POLYGON */ - { 30818, 0x00000008 }, /* GL_POLYGON_BIT */ - { 30833, 0x00000B40 }, /* GL_POLYGON_MODE */ - { 30849, 0x00008039 }, /* GL_POLYGON_OFFSET_BIAS */ - { 30872, 0x00008038 }, /* GL_POLYGON_OFFSET_FACTOR */ - { 30897, 0x00008037 }, /* GL_POLYGON_OFFSET_FILL */ - { 30920, 0x00002A02 }, /* GL_POLYGON_OFFSET_LINE */ - { 30943, 0x00002A01 }, /* GL_POLYGON_OFFSET_POINT */ - { 30967, 0x00002A00 }, /* GL_POLYGON_OFFSET_UNITS */ - { 30991, 0x00000B41 }, /* GL_POLYGON_SMOOTH */ - { 31009, 0x00000C53 }, /* GL_POLYGON_SMOOTH_HINT */ - { 31032, 0x00000B42 }, /* GL_POLYGON_STIPPLE */ - { 31051, 0x00000010 }, /* GL_POLYGON_STIPPLE_BIT */ - { 31074, 0x00000703 }, /* GL_POLYGON_TOKEN */ - { 31091, 0x00001203 }, /* GL_POSITION */ - { 31103, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */ - { 31135, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */ - { 31171, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */ - { 31204, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */ - { 31241, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */ - { 31272, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */ - { 31307, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */ - { 31339, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */ - { 31375, 0x000080D2 }, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ - { 31408, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */ - { 31440, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */ - { 31476, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */ - { 31509, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */ - { 31546, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS */ - { 31576, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */ - { 31610, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE */ - { 31641, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */ - { 31676, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS */ - { 31707, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */ - { 31742, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE */ - { 31774, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */ - { 31810, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS */ - { 31840, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */ - { 31874, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE */ - { 31905, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */ - { 31940, 0x000080D1 }, /* GL_POST_CONVOLUTION_COLOR_TABLE */ - { 31972, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS */ - { 32003, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */ - { 32038, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE */ - { 32070, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */ - { 32106, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS */ - { 32135, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS_EXT */ - { 32168, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE */ - { 32198, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE_EXT */ - { 32232, 0x0000817B }, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */ - { 32271, 0x00008179 }, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */ - { 32304, 0x0000817C }, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */ - { 32344, 0x0000817A }, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */ - { 32378, 0x00008578 }, /* GL_PREVIOUS */ - { 32390, 0x00008578 }, /* GL_PREVIOUS_ARB */ - { 32406, 0x00008578 }, /* GL_PREVIOUS_EXT */ - { 32422, 0x00008577 }, /* GL_PRIMARY_COLOR */ - { 32439, 0x00008577 }, /* GL_PRIMARY_COLOR_ARB */ - { 32460, 0x00008577 }, /* GL_PRIMARY_COLOR_EXT */ - { 32481, 0x00008C87 }, /* GL_PRIMITIVES_GENERATED */ - { 32505, 0x00008C87 }, /* GL_PRIMITIVES_GENERATED_EXT */ - { 32533, 0x00008F9D }, /* GL_PRIMITIVE_RESTART */ - { 32554, 0x00008F9E }, /* GL_PRIMITIVE_RESTART_INDEX */ - { 32581, 0x00008559 }, /* GL_PRIMITIVE_RESTART_INDEX_NV */ - { 32611, 0x00008558 }, /* GL_PRIMITIVE_RESTART_NV */ - { 32635, 0x000088B0 }, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */ - { 32668, 0x00008805 }, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */ - { 32700, 0x000088AC }, /* GL_PROGRAM_ATTRIBS_ARB */ - { 32723, 0x000087FF }, /* GL_PROGRAM_BINARY_FORMATS_OES */ - { 32753, 0x00008741 }, /* GL_PROGRAM_BINARY_LENGTH_OES */ - { 32782, 0x00008677 }, /* GL_PROGRAM_BINDING_ARB */ - { 32805, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_ARB */ - { 32835, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_NV */ - { 32864, 0x00008874 }, /* GL_PROGRAM_ERROR_STRING_ARB */ - { 32892, 0x00008876 }, /* GL_PROGRAM_FORMAT_ARB */ - { 32914, 0x00008875 }, /* GL_PROGRAM_FORMAT_ASCII_ARB */ - { 32942, 0x000088A0 }, /* GL_PROGRAM_INSTRUCTIONS_ARB */ - { 32970, 0x00008627 }, /* GL_PROGRAM_LENGTH_ARB */ - { 32992, 0x00008627 }, /* GL_PROGRAM_LENGTH_NV */ - { 33013, 0x000088B2 }, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ - { 33053, 0x00008808 }, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ - { 33092, 0x000088AE }, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */ - { 33122, 0x000088A2 }, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ - { 33157, 0x000088AA }, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */ - { 33190, 0x000088A6 }, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */ - { 33224, 0x0000880A }, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ - { 33263, 0x00008809 }, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ - { 33302, 0x00008B40 }, /* GL_PROGRAM_OBJECT_ARB */ - { 33324, 0x000088A8 }, /* GL_PROGRAM_PARAMETERS_ARB */ - { 33350, 0x00008644 }, /* GL_PROGRAM_PARAMETER_NV */ - { 33374, 0x00008642 }, /* GL_PROGRAM_POINT_SIZE */ - { 33396, 0x00008642 }, /* GL_PROGRAM_POINT_SIZE_ARB */ - { 33422, 0x00008647 }, /* GL_PROGRAM_RESIDENT_NV */ - { 33445, 0x00008628 }, /* GL_PROGRAM_STRING_ARB */ - { 33467, 0x00008628 }, /* GL_PROGRAM_STRING_NV */ - { 33488, 0x00008646 }, /* GL_PROGRAM_TARGET_NV */ - { 33509, 0x000088A4 }, /* GL_PROGRAM_TEMPORARIES_ARB */ - { 33536, 0x00008807 }, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */ - { 33568, 0x00008806 }, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */ - { 33600, 0x000088B6 }, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */ - { 33635, 0x00001701 }, /* GL_PROJECTION */ - { 33649, 0x00000BA7 }, /* GL_PROJECTION_MATRIX */ - { 33670, 0x0000898E }, /* GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES */ - { 33713, 0x00000BA4 }, /* GL_PROJECTION_STACK_DEPTH */ - { 33739, 0x00008E4F }, /* GL_PROVOKING_VERTEX */ - { 33759, 0x00008E4F }, /* GL_PROVOKING_VERTEX_EXT */ - { 33783, 0x000080D3 }, /* GL_PROXY_COLOR_TABLE */ - { 33804, 0x00008025 }, /* GL_PROXY_HISTOGRAM */ - { 33823, 0x00008025 }, /* GL_PROXY_HISTOGRAM_EXT */ - { 33846, 0x000080D5 }, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */ - { 33885, 0x000080D4 }, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */ - { 33923, 0x00008063 }, /* GL_PROXY_TEXTURE_1D */ - { 33943, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY */ - { 33969, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */ - { 33999, 0x00008063 }, /* GL_PROXY_TEXTURE_1D_EXT */ - { 34023, 0x00008064 }, /* GL_PROXY_TEXTURE_2D */ - { 34043, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY */ - { 34069, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */ - { 34099, 0x00008064 }, /* GL_PROXY_TEXTURE_2D_EXT */ - { 34123, 0x00008070 }, /* GL_PROXY_TEXTURE_3D */ - { 34143, 0x000080BD }, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */ - { 34176, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP */ - { 34202, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */ - { 34232, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE */ - { 34259, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */ - { 34290, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_NV */ - { 34320, 0x00008A1D }, /* GL_PURGEABLE_APPLE */ - { 34339, 0x00002003 }, /* GL_Q */ - { 34344, 0x00001209 }, /* GL_QUADRATIC_ATTENUATION */ - { 34369, 0x00000007 }, /* GL_QUADS */ - { 34378, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */ - { 34422, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT */ - { 34470, 0x00008614 }, /* GL_QUAD_MESH_SUN */ - { 34487, 0x00000008 }, /* GL_QUAD_STRIP */ - { 34501, 0x00008E16 }, /* GL_QUERY_BY_REGION_NO_WAIT */ - { 34528, 0x00008E16 }, /* GL_QUERY_BY_REGION_NO_WAIT_NV */ - { 34558, 0x00008E15 }, /* GL_QUERY_BY_REGION_WAIT */ - { 34582, 0x00008E15 }, /* GL_QUERY_BY_REGION_WAIT_NV */ - { 34609, 0x00008864 }, /* GL_QUERY_COUNTER_BITS */ - { 34631, 0x00008864 }, /* GL_QUERY_COUNTER_BITS_ARB */ - { 34657, 0x00008E14 }, /* GL_QUERY_NO_WAIT */ - { 34674, 0x00008E14 }, /* GL_QUERY_NO_WAIT_NV */ - { 34694, 0x00008866 }, /* GL_QUERY_RESULT */ - { 34710, 0x00008866 }, /* GL_QUERY_RESULT_ARB */ - { 34730, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE */ - { 34756, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE_ARB */ - { 34786, 0x00008E13 }, /* GL_QUERY_WAIT */ - { 34800, 0x00008E13 }, /* GL_QUERY_WAIT_NV */ - { 34817, 0x00002002 }, /* GL_R */ - { 34822, 0x00008C3A }, /* GL_R11F_G11F_B10F */ - { 34840, 0x00008F98 }, /* GL_R16_SNORM */ - { 34853, 0x00002A10 }, /* GL_R3_G3_B2 */ - { 34865, 0x00008F94 }, /* GL_R8_SNORM */ - { 34877, 0x00008C89 }, /* GL_RASTERIZER_DISCARD */ - { 34899, 0x00008C89 }, /* GL_RASTERIZER_DISCARD_EXT */ - { 34925, 0x00019262 }, /* GL_RASTER_POSITION_UNCLIPPED_IBM */ - { 34958, 0x00000C02 }, /* GL_READ_BUFFER */ - { 34973, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER */ - { 34993, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING */ - { 35021, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING_EXT */ - { 35053, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER_EXT */ - { 35077, 0x000088B8 }, /* GL_READ_ONLY */ - { 35090, 0x000088B8 }, /* GL_READ_ONLY_ARB */ - { 35107, 0x000088BA }, /* GL_READ_WRITE */ - { 35121, 0x000088BA }, /* GL_READ_WRITE_ARB */ - { 35139, 0x00001903 }, /* GL_RED */ - { 35146, 0x00008016 }, /* GL_REDUCE */ - { 35156, 0x00008016 }, /* GL_REDUCE_EXT */ - { 35170, 0x00000D15 }, /* GL_RED_BIAS */ - { 35182, 0x00000D52 }, /* GL_RED_BITS */ - { 35194, 0x00008D94 }, /* GL_RED_INTEGER */ - { 35209, 0x00008D94 }, /* GL_RED_INTEGER_EXT */ - { 35228, 0x00000D14 }, /* GL_RED_SCALE */ - { 35241, 0x00008F90 }, /* GL_RED_SNORM */ - { 35254, 0x00008512 }, /* GL_REFLECTION_MAP */ - { 35272, 0x00008512 }, /* GL_REFLECTION_MAP_ARB */ - { 35294, 0x00008512 }, /* GL_REFLECTION_MAP_NV */ - { 35315, 0x00008512 }, /* GL_REFLECTION_MAP_OES */ - { 35337, 0x00008A19 }, /* GL_RELEASED_APPLE */ - { 35355, 0x00001C00 }, /* GL_RENDER */ - { 35365, 0x00008D41 }, /* GL_RENDERBUFFER */ - { 35381, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE */ - { 35408, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE_OES */ - { 35439, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING */ - { 35463, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_EXT */ - { 35491, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_OES */ - { 35519, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE */ - { 35545, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE_OES */ - { 35575, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE */ - { 35602, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE_OES */ - { 35633, 0x00008D41 }, /* GL_RENDERBUFFER_EXT */ - { 35653, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE */ - { 35680, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE_OES */ - { 35711, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT */ - { 35734, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_EXT */ - { 35761, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_OES */ - { 35788, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT */ - { 35820, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */ - { 35856, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_OES */ - { 35892, 0x00008D41 }, /* GL_RENDERBUFFER_OES */ - { 35912, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE */ - { 35937, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE_OES */ - { 35966, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES */ - { 35990, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES_EXT */ - { 36018, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE */ - { 36047, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE_OES */ - { 36080, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH */ - { 36102, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_EXT */ - { 36128, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_OES */ - { 36154, 0x00001F01 }, /* GL_RENDERER */ - { 36166, 0x00000C40 }, /* GL_RENDER_MODE */ - { 36181, 0x00002901 }, /* GL_REPEAT */ - { 36191, 0x00001E01 }, /* GL_REPLACE */ - { 36202, 0x00008062 }, /* GL_REPLACE_EXT */ - { 36217, 0x00008153 }, /* GL_REPLICATE_BORDER_HP */ - { 36240, 0x0000803A }, /* GL_RESCALE_NORMAL */ - { 36258, 0x0000803A }, /* GL_RESCALE_NORMAL_EXT */ - { 36280, 0x00008A1B }, /* GL_RETAINED_APPLE */ - { 36298, 0x00000102 }, /* GL_RETURN */ - { 36308, 0x00008F99 }, /* GL_RG16_SNORM */ - { 36322, 0x00008F95 }, /* GL_RG8_SNORM */ - { 36335, 0x00001907 }, /* GL_RGB */ - { 36342, 0x00008052 }, /* GL_RGB10 */ - { 36351, 0x00008059 }, /* GL_RGB10_A2 */ - { 36363, 0x00008059 }, /* GL_RGB10_A2_EXT */ - { 36379, 0x00008052 }, /* GL_RGB10_EXT */ - { 36392, 0x00008053 }, /* GL_RGB12 */ - { 36401, 0x00008053 }, /* GL_RGB12_EXT */ - { 36414, 0x00008054 }, /* GL_RGB16 */ - { 36423, 0x0000881B }, /* GL_RGB16F */ - { 36433, 0x00008D89 }, /* GL_RGB16I */ - { 36443, 0x00008D89 }, /* GL_RGB16I_EXT */ - { 36457, 0x00008D77 }, /* GL_RGB16UI */ - { 36468, 0x00008D77 }, /* GL_RGB16UI_EXT */ - { 36483, 0x00008054 }, /* GL_RGB16_EXT */ - { 36496, 0x00008F9A }, /* GL_RGB16_SNORM */ - { 36511, 0x0000804E }, /* GL_RGB2_EXT */ - { 36523, 0x00008815 }, /* GL_RGB32F */ - { 36533, 0x00008D83 }, /* GL_RGB32I */ - { 36543, 0x00008D83 }, /* GL_RGB32I_EXT */ - { 36557, 0x00008D71 }, /* GL_RGB32UI */ - { 36568, 0x00008D71 }, /* GL_RGB32UI_EXT */ - { 36583, 0x0000804F }, /* GL_RGB4 */ - { 36591, 0x0000804F }, /* GL_RGB4_EXT */ - { 36603, 0x000083A1 }, /* GL_RGB4_S3TC */ - { 36616, 0x00008050 }, /* GL_RGB5 */ - { 36624, 0x00008D62 }, /* GL_RGB565 */ - { 36634, 0x00008D62 }, /* GL_RGB565_OES */ - { 36648, 0x00008057 }, /* GL_RGB5_A1 */ - { 36659, 0x00008057 }, /* GL_RGB5_A1_EXT */ - { 36674, 0x00008057 }, /* GL_RGB5_A1_OES */ - { 36689, 0x00008050 }, /* GL_RGB5_EXT */ - { 36701, 0x00008051 }, /* GL_RGB8 */ - { 36709, 0x00008D8F }, /* GL_RGB8I */ - { 36718, 0x00008D8F }, /* GL_RGB8I_EXT */ - { 36731, 0x00008D7D }, /* GL_RGB8UI */ - { 36741, 0x00008D7D }, /* GL_RGB8UI_EXT */ - { 36755, 0x00008051 }, /* GL_RGB8_EXT */ - { 36767, 0x00008051 }, /* GL_RGB8_OES */ - { 36779, 0x00008F96 }, /* GL_RGB8_SNORM */ - { 36793, 0x00008C3D }, /* GL_RGB9_E5 */ - { 36804, 0x00001908 }, /* GL_RGBA */ - { 36812, 0x0000805A }, /* GL_RGBA12 */ - { 36822, 0x0000805A }, /* GL_RGBA12_EXT */ - { 36836, 0x0000805B }, /* GL_RGBA16 */ - { 36846, 0x0000881A }, /* GL_RGBA16F */ - { 36857, 0x00008D88 }, /* GL_RGBA16I */ - { 36868, 0x00008D88 }, /* GL_RGBA16I_EXT */ - { 36883, 0x00008D76 }, /* GL_RGBA16UI */ - { 36895, 0x00008D76 }, /* GL_RGBA16UI_EXT */ - { 36911, 0x0000805B }, /* GL_RGBA16_EXT */ - { 36925, 0x00008F9B }, /* GL_RGBA16_SNORM */ - { 36941, 0x00008055 }, /* GL_RGBA2 */ - { 36950, 0x00008055 }, /* GL_RGBA2_EXT */ - { 36963, 0x00008814 }, /* GL_RGBA32F */ - { 36974, 0x00008D82 }, /* GL_RGBA32I */ - { 36985, 0x00008D82 }, /* GL_RGBA32I_EXT */ - { 37000, 0x00008D70 }, /* GL_RGBA32UI */ - { 37012, 0x00008D70 }, /* GL_RGBA32UI_EXT */ - { 37028, 0x00008056 }, /* GL_RGBA4 */ - { 37037, 0x000083A5 }, /* GL_RGBA4_DXT5_S3TC */ - { 37056, 0x00008056 }, /* GL_RGBA4_EXT */ - { 37069, 0x00008056 }, /* GL_RGBA4_OES */ - { 37082, 0x000083A3 }, /* GL_RGBA4_S3TC */ - { 37096, 0x00008058 }, /* GL_RGBA8 */ - { 37105, 0x00008D8E }, /* GL_RGBA8I */ - { 37115, 0x00008D8E }, /* GL_RGBA8I_EXT */ - { 37129, 0x00008D7C }, /* GL_RGBA8UI */ - { 37140, 0x00008D7C }, /* GL_RGBA8UI_EXT */ - { 37155, 0x00008058 }, /* GL_RGBA8_EXT */ - { 37168, 0x00008058 }, /* GL_RGBA8_OES */ - { 37181, 0x00008F97 }, /* GL_RGBA8_SNORM */ - { 37196, 0x000083A4 }, /* GL_RGBA_DXT5_S3TC */ - { 37214, 0x00008820 }, /* GL_RGBA_FLOAT_MODE_ARB */ - { 37237, 0x00008D99 }, /* GL_RGBA_INTEGER */ - { 37253, 0x00008D99 }, /* GL_RGBA_INTEGER_EXT */ - { 37273, 0x00008D9E }, /* GL_RGBA_INTEGER_MODE_EXT */ - { 37298, 0x00000C31 }, /* GL_RGBA_MODE */ - { 37311, 0x000083A2 }, /* GL_RGBA_S3TC */ - { 37324, 0x00008F93 }, /* GL_RGBA_SNORM */ - { 37338, 0x00008D98 }, /* GL_RGB_INTEGER */ - { 37353, 0x00008D98 }, /* GL_RGB_INTEGER_EXT */ - { 37372, 0x000083A0 }, /* GL_RGB_S3TC */ - { 37384, 0x00008573 }, /* GL_RGB_SCALE */ - { 37397, 0x00008573 }, /* GL_RGB_SCALE_ARB */ - { 37414, 0x00008573 }, /* GL_RGB_SCALE_EXT */ - { 37431, 0x00008F92 }, /* GL_RGB_SNORM */ - { 37444, 0x00008F91 }, /* GL_RG_SNORM */ - { 37456, 0x00000407 }, /* GL_RIGHT */ - { 37465, 0x00002000 }, /* GL_S */ - { 37470, 0x00008B5D }, /* GL_SAMPLER_1D */ - { 37484, 0x00008DC0 }, /* GL_SAMPLER_1D_ARRAY */ - { 37504, 0x00008DC0 }, /* GL_SAMPLER_1D_ARRAY_EXT */ - { 37528, 0x00008DC3 }, /* GL_SAMPLER_1D_ARRAY_SHADOW */ - { 37555, 0x00008DC3 }, /* GL_SAMPLER_1D_ARRAY_SHADOW_EXT */ - { 37586, 0x00008B61 }, /* GL_SAMPLER_1D_SHADOW */ - { 37607, 0x00008B5E }, /* GL_SAMPLER_2D */ - { 37621, 0x00008DC1 }, /* GL_SAMPLER_2D_ARRAY */ - { 37641, 0x00008DC1 }, /* GL_SAMPLER_2D_ARRAY_EXT */ - { 37665, 0x00008DC4 }, /* GL_SAMPLER_2D_ARRAY_SHADOW */ - { 37692, 0x00008DC4 }, /* GL_SAMPLER_2D_ARRAY_SHADOW_EXT */ - { 37723, 0x00008B63 }, /* GL_SAMPLER_2D_RECT */ - { 37742, 0x00008B64 }, /* GL_SAMPLER_2D_RECT_SHADOW */ - { 37768, 0x00008B62 }, /* GL_SAMPLER_2D_SHADOW */ - { 37789, 0x00008B5F }, /* GL_SAMPLER_3D */ - { 37803, 0x00008B5F }, /* GL_SAMPLER_3D_OES */ - { 37821, 0x00008919 }, /* GL_SAMPLER_BINDING */ - { 37840, 0x00008DC2 }, /* GL_SAMPLER_BUFFER */ - { 37858, 0x00008DC2 }, /* GL_SAMPLER_BUFFER_EXT */ - { 37880, 0x00008B60 }, /* GL_SAMPLER_CUBE */ - { 37896, 0x00008DC5 }, /* GL_SAMPLER_CUBE_SHADOW */ - { 37919, 0x00008DC5 }, /* GL_SAMPLER_CUBE_SHADOW_EXT */ - { 37946, 0x000080A9 }, /* GL_SAMPLES */ - { 37957, 0x000086B4 }, /* GL_SAMPLES_3DFX */ - { 37973, 0x000080A9 }, /* GL_SAMPLES_ARB */ - { 37988, 0x00008914 }, /* GL_SAMPLES_PASSED */ - { 38006, 0x00008914 }, /* GL_SAMPLES_PASSED_ARB */ - { 38028, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE */ - { 38056, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */ - { 38088, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE */ - { 38111, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE_ARB */ - { 38138, 0x000080A8 }, /* GL_SAMPLE_BUFFERS */ - { 38156, 0x000086B3 }, /* GL_SAMPLE_BUFFERS_3DFX */ - { 38179, 0x000080A8 }, /* GL_SAMPLE_BUFFERS_ARB */ - { 38201, 0x000080A0 }, /* GL_SAMPLE_COVERAGE */ - { 38220, 0x000080A0 }, /* GL_SAMPLE_COVERAGE_ARB */ - { 38243, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT */ - { 38269, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT_ARB */ - { 38299, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE */ - { 38324, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE_ARB */ - { 38353, 0x00080000 }, /* GL_SCISSOR_BIT */ - { 38368, 0x00000C10 }, /* GL_SCISSOR_BOX */ - { 38383, 0x00000C11 }, /* GL_SCISSOR_TEST */ - { 38399, 0x0000845E }, /* GL_SECONDARY_COLOR_ARRAY */ - { 38424, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */ - { 38464, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */ - { 38508, 0x0000845D }, /* GL_SECONDARY_COLOR_ARRAY_POINTER */ - { 38541, 0x0000845A }, /* GL_SECONDARY_COLOR_ARRAY_SIZE */ - { 38571, 0x0000845C }, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */ - { 38603, 0x0000845B }, /* GL_SECONDARY_COLOR_ARRAY_TYPE */ - { 38633, 0x00001C02 }, /* GL_SELECT */ - { 38643, 0x00000DF3 }, /* GL_SELECTION_BUFFER_POINTER */ - { 38671, 0x00000DF4 }, /* GL_SELECTION_BUFFER_SIZE */ - { 38696, 0x00008012 }, /* GL_SEPARABLE_2D */ - { 38712, 0x00008C8D }, /* GL_SEPARATE_ATTRIBS */ - { 38732, 0x00008C8D }, /* GL_SEPARATE_ATTRIBS_EXT */ - { 38756, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR */ - { 38783, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR_EXT */ - { 38814, 0x0000150F }, /* GL_SET */ - { 38821, 0x00008DF8 }, /* GL_SHADER_BINARY_FORMATS */ - { 38846, 0x00008DFA }, /* GL_SHADER_COMPILER */ - { 38865, 0x00008B48 }, /* GL_SHADER_OBJECT_ARB */ - { 38886, 0x00008B88 }, /* GL_SHADER_SOURCE_LENGTH */ - { 38910, 0x00008B4F }, /* GL_SHADER_TYPE */ - { 38925, 0x00000B54 }, /* GL_SHADE_MODEL */ - { 38940, 0x00008B8C }, /* GL_SHADING_LANGUAGE_VERSION */ - { 38968, 0x000080BF }, /* GL_SHADOW_AMBIENT_SGIX */ - { 38991, 0x000081FB }, /* GL_SHARED_TEXTURE_PALETTE_EXT */ - { 39021, 0x00001601 }, /* GL_SHININESS */ - { 39034, 0x00001402 }, /* GL_SHORT */ - { 39043, 0x00009119 }, /* GL_SIGNALED */ - { 39055, 0x00008F9C }, /* GL_SIGNED_NORMALIZED */ - { 39076, 0x000081F9 }, /* GL_SINGLE_COLOR */ - { 39092, 0x000081F9 }, /* GL_SINGLE_COLOR_EXT */ - { 39112, 0x000085CC }, /* GL_SLICE_ACCUM_SUN */ - { 39131, 0x00008C46 }, /* GL_SLUMINANCE */ - { 39145, 0x00008C47 }, /* GL_SLUMINANCE8 */ - { 39160, 0x00008C45 }, /* GL_SLUMINANCE8_ALPHA8 */ - { 39182, 0x00008C44 }, /* GL_SLUMINANCE_ALPHA */ - { 39202, 0x00001D01 }, /* GL_SMOOTH */ - { 39212, 0x00000B23 }, /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */ - { 39245, 0x00000B22 }, /* GL_SMOOTH_LINE_WIDTH_RANGE */ - { 39272, 0x00000B13 }, /* GL_SMOOTH_POINT_SIZE_GRANULARITY */ - { 39305, 0x00000B12 }, /* GL_SMOOTH_POINT_SIZE_RANGE */ - { 39332, 0x00008588 }, /* GL_SOURCE0_ALPHA */ - { 39349, 0x00008588 }, /* GL_SOURCE0_ALPHA_ARB */ - { 39370, 0x00008588 }, /* GL_SOURCE0_ALPHA_EXT */ - { 39391, 0x00008580 }, /* GL_SOURCE0_RGB */ - { 39406, 0x00008580 }, /* GL_SOURCE0_RGB_ARB */ - { 39425, 0x00008580 }, /* GL_SOURCE0_RGB_EXT */ - { 39444, 0x00008589 }, /* GL_SOURCE1_ALPHA */ - { 39461, 0x00008589 }, /* GL_SOURCE1_ALPHA_ARB */ - { 39482, 0x00008589 }, /* GL_SOURCE1_ALPHA_EXT */ - { 39503, 0x00008581 }, /* GL_SOURCE1_RGB */ - { 39518, 0x00008581 }, /* GL_SOURCE1_RGB_ARB */ - { 39537, 0x00008581 }, /* GL_SOURCE1_RGB_EXT */ - { 39556, 0x0000858A }, /* GL_SOURCE2_ALPHA */ - { 39573, 0x0000858A }, /* GL_SOURCE2_ALPHA_ARB */ - { 39594, 0x0000858A }, /* GL_SOURCE2_ALPHA_EXT */ - { 39615, 0x00008582 }, /* GL_SOURCE2_RGB */ - { 39630, 0x00008582 }, /* GL_SOURCE2_RGB_ARB */ - { 39649, 0x00008582 }, /* GL_SOURCE2_RGB_EXT */ - { 39668, 0x0000858B }, /* GL_SOURCE3_ALPHA_NV */ - { 39688, 0x00008583 }, /* GL_SOURCE3_RGB_NV */ - { 39706, 0x00001202 }, /* GL_SPECULAR */ - { 39718, 0x00002402 }, /* GL_SPHERE_MAP */ - { 39732, 0x00001206 }, /* GL_SPOT_CUTOFF */ - { 39747, 0x00001204 }, /* GL_SPOT_DIRECTION */ - { 39765, 0x00001205 }, /* GL_SPOT_EXPONENT */ - { 39782, 0x00008588 }, /* GL_SRC0_ALPHA */ - { 39796, 0x00008580 }, /* GL_SRC0_RGB */ - { 39808, 0x00008589 }, /* GL_SRC1_ALPHA */ - { 39822, 0x00008581 }, /* GL_SRC1_RGB */ - { 39834, 0x0000858A }, /* GL_SRC2_ALPHA */ - { 39848, 0x00008582 }, /* GL_SRC2_RGB */ - { 39860, 0x00000302 }, /* GL_SRC_ALPHA */ - { 39873, 0x00000308 }, /* GL_SRC_ALPHA_SATURATE */ - { 39895, 0x00000300 }, /* GL_SRC_COLOR */ - { 39908, 0x00008C40 }, /* GL_SRGB */ - { 39916, 0x00008C41 }, /* GL_SRGB8 */ - { 39925, 0x00008C43 }, /* GL_SRGB8_ALPHA8 */ - { 39941, 0x00008C42 }, /* GL_SRGB_ALPHA */ - { 39955, 0x00000503 }, /* GL_STACK_OVERFLOW */ - { 39973, 0x00000504 }, /* GL_STACK_UNDERFLOW */ - { 39992, 0x000088E6 }, /* GL_STATIC_COPY */ - { 40007, 0x000088E6 }, /* GL_STATIC_COPY_ARB */ - { 40026, 0x000088E4 }, /* GL_STATIC_DRAW */ - { 40041, 0x000088E4 }, /* GL_STATIC_DRAW_ARB */ - { 40060, 0x000088E5 }, /* GL_STATIC_READ */ - { 40075, 0x000088E5 }, /* GL_STATIC_READ_ARB */ - { 40094, 0x00001802 }, /* GL_STENCIL */ - { 40105, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT */ - { 40127, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_EXT */ - { 40153, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_OES */ - { 40179, 0x00008801 }, /* GL_STENCIL_BACK_FAIL */ - { 40200, 0x00008801 }, /* GL_STENCIL_BACK_FAIL_ATI */ - { 40225, 0x00008800 }, /* GL_STENCIL_BACK_FUNC */ - { 40246, 0x00008800 }, /* GL_STENCIL_BACK_FUNC_ATI */ - { 40271, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */ - { 40303, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */ - { 40339, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */ - { 40371, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */ - { 40407, 0x00008CA3 }, /* GL_STENCIL_BACK_REF */ - { 40427, 0x00008CA4 }, /* GL_STENCIL_BACK_VALUE_MASK */ - { 40454, 0x00008CA5 }, /* GL_STENCIL_BACK_WRITEMASK */ - { 40480, 0x00000D57 }, /* GL_STENCIL_BITS */ - { 40496, 0x00008224 }, /* GL_STENCIL_BUFFER */ - { 40514, 0x00000400 }, /* GL_STENCIL_BUFFER_BIT */ - { 40536, 0x00000B91 }, /* GL_STENCIL_CLEAR_VALUE */ - { 40559, 0x00000B94 }, /* GL_STENCIL_FAIL */ - { 40575, 0x00000B92 }, /* GL_STENCIL_FUNC */ - { 40591, 0x00001901 }, /* GL_STENCIL_INDEX */ - { 40608, 0x00008D46 }, /* GL_STENCIL_INDEX1 */ - { 40626, 0x00008D49 }, /* GL_STENCIL_INDEX16 */ - { 40645, 0x00008D49 }, /* GL_STENCIL_INDEX16_EXT */ - { 40668, 0x00008D46 }, /* GL_STENCIL_INDEX1_EXT */ - { 40690, 0x00008D46 }, /* GL_STENCIL_INDEX1_OES */ - { 40712, 0x00008D47 }, /* GL_STENCIL_INDEX4 */ - { 40730, 0x00008D47 }, /* GL_STENCIL_INDEX4_EXT */ - { 40752, 0x00008D47 }, /* GL_STENCIL_INDEX4_OES */ - { 40774, 0x00008D48 }, /* GL_STENCIL_INDEX8 */ - { 40792, 0x00008D48 }, /* GL_STENCIL_INDEX8_EXT */ - { 40814, 0x00008D48 }, /* GL_STENCIL_INDEX8_OES */ - { 40836, 0x00008D45 }, /* GL_STENCIL_INDEX_EXT */ - { 40857, 0x00000B95 }, /* GL_STENCIL_PASS_DEPTH_FAIL */ - { 40884, 0x00000B96 }, /* GL_STENCIL_PASS_DEPTH_PASS */ - { 40911, 0x00000B97 }, /* GL_STENCIL_REF */ - { 40926, 0x00000B90 }, /* GL_STENCIL_TEST */ - { 40942, 0x00008910 }, /* GL_STENCIL_TEST_TWO_SIDE_EXT */ - { 40971, 0x00000B93 }, /* GL_STENCIL_VALUE_MASK */ - { 40993, 0x00000B98 }, /* GL_STENCIL_WRITEMASK */ - { 41014, 0x00000C33 }, /* GL_STEREO */ - { 41024, 0x000085BE }, /* GL_STORAGE_CACHED_APPLE */ - { 41048, 0x000085BD }, /* GL_STORAGE_PRIVATE_APPLE */ - { 41073, 0x000085BF }, /* GL_STORAGE_SHARED_APPLE */ - { 41097, 0x000088E2 }, /* GL_STREAM_COPY */ - { 41112, 0x000088E2 }, /* GL_STREAM_COPY_ARB */ - { 41131, 0x000088E0 }, /* GL_STREAM_DRAW */ - { 41146, 0x000088E0 }, /* GL_STREAM_DRAW_ARB */ - { 41165, 0x000088E1 }, /* GL_STREAM_READ */ - { 41180, 0x000088E1 }, /* GL_STREAM_READ_ARB */ - { 41199, 0x00000D50 }, /* GL_SUBPIXEL_BITS */ - { 41216, 0x000084E7 }, /* GL_SUBTRACT */ - { 41228, 0x000084E7 }, /* GL_SUBTRACT_ARB */ - { 41244, 0x00009113 }, /* GL_SYNC_CONDITION */ - { 41262, 0x00009116 }, /* GL_SYNC_FENCE */ - { 41276, 0x00009115 }, /* GL_SYNC_FLAGS */ - { 41290, 0x00000001 }, /* GL_SYNC_FLUSH_COMMANDS_BIT */ - { 41317, 0x00009117 }, /* GL_SYNC_GPU_COMMANDS_COMPLETE */ - { 41347, 0x00009114 }, /* GL_SYNC_STATUS */ - { 41362, 0x00002001 }, /* GL_T */ - { 41367, 0x00002A2A }, /* GL_T2F_C3F_V3F */ - { 41382, 0x00002A2C }, /* GL_T2F_C4F_N3F_V3F */ - { 41401, 0x00002A29 }, /* GL_T2F_C4UB_V3F */ - { 41417, 0x00002A2B }, /* GL_T2F_N3F_V3F */ - { 41432, 0x00002A27 }, /* GL_T2F_V3F */ - { 41443, 0x00002A2D }, /* GL_T4F_C4F_N3F_V4F */ - { 41462, 0x00002A28 }, /* GL_T4F_V4F */ - { 41473, 0x00008031 }, /* GL_TABLE_TOO_LARGE_EXT */ - { 41496, 0x00001702 }, /* GL_TEXTURE */ - { 41507, 0x000084C0 }, /* GL_TEXTURE0 */ - { 41519, 0x000084C0 }, /* GL_TEXTURE0_ARB */ - { 41535, 0x000084C1 }, /* GL_TEXTURE1 */ - { 41547, 0x000084CA }, /* GL_TEXTURE10 */ - { 41560, 0x000084CA }, /* GL_TEXTURE10_ARB */ - { 41577, 0x000084CB }, /* GL_TEXTURE11 */ - { 41590, 0x000084CB }, /* GL_TEXTURE11_ARB */ - { 41607, 0x000084CC }, /* GL_TEXTURE12 */ - { 41620, 0x000084CC }, /* GL_TEXTURE12_ARB */ - { 41637, 0x000084CD }, /* GL_TEXTURE13 */ - { 41650, 0x000084CD }, /* GL_TEXTURE13_ARB */ - { 41667, 0x000084CE }, /* GL_TEXTURE14 */ - { 41680, 0x000084CE }, /* GL_TEXTURE14_ARB */ - { 41697, 0x000084CF }, /* GL_TEXTURE15 */ - { 41710, 0x000084CF }, /* GL_TEXTURE15_ARB */ - { 41727, 0x000084D0 }, /* GL_TEXTURE16 */ - { 41740, 0x000084D0 }, /* GL_TEXTURE16_ARB */ - { 41757, 0x000084D1 }, /* GL_TEXTURE17 */ - { 41770, 0x000084D1 }, /* GL_TEXTURE17_ARB */ - { 41787, 0x000084D2 }, /* GL_TEXTURE18 */ - { 41800, 0x000084D2 }, /* GL_TEXTURE18_ARB */ - { 41817, 0x000084D3 }, /* GL_TEXTURE19 */ - { 41830, 0x000084D3 }, /* GL_TEXTURE19_ARB */ - { 41847, 0x000084C1 }, /* GL_TEXTURE1_ARB */ - { 41863, 0x000084C2 }, /* GL_TEXTURE2 */ - { 41875, 0x000084D4 }, /* GL_TEXTURE20 */ - { 41888, 0x000084D4 }, /* GL_TEXTURE20_ARB */ - { 41905, 0x000084D5 }, /* GL_TEXTURE21 */ - { 41918, 0x000084D5 }, /* GL_TEXTURE21_ARB */ - { 41935, 0x000084D6 }, /* GL_TEXTURE22 */ - { 41948, 0x000084D6 }, /* GL_TEXTURE22_ARB */ - { 41965, 0x000084D7 }, /* GL_TEXTURE23 */ - { 41978, 0x000084D7 }, /* GL_TEXTURE23_ARB */ - { 41995, 0x000084D8 }, /* GL_TEXTURE24 */ - { 42008, 0x000084D8 }, /* GL_TEXTURE24_ARB */ - { 42025, 0x000084D9 }, /* GL_TEXTURE25 */ - { 42038, 0x000084D9 }, /* GL_TEXTURE25_ARB */ - { 42055, 0x000084DA }, /* GL_TEXTURE26 */ - { 42068, 0x000084DA }, /* GL_TEXTURE26_ARB */ - { 42085, 0x000084DB }, /* GL_TEXTURE27 */ - { 42098, 0x000084DB }, /* GL_TEXTURE27_ARB */ - { 42115, 0x000084DC }, /* GL_TEXTURE28 */ - { 42128, 0x000084DC }, /* GL_TEXTURE28_ARB */ - { 42145, 0x000084DD }, /* GL_TEXTURE29 */ - { 42158, 0x000084DD }, /* GL_TEXTURE29_ARB */ - { 42175, 0x000084C2 }, /* GL_TEXTURE2_ARB */ - { 42191, 0x000084C3 }, /* GL_TEXTURE3 */ - { 42203, 0x000084DE }, /* GL_TEXTURE30 */ - { 42216, 0x000084DE }, /* GL_TEXTURE30_ARB */ - { 42233, 0x000084DF }, /* GL_TEXTURE31 */ - { 42246, 0x000084DF }, /* GL_TEXTURE31_ARB */ - { 42263, 0x000084C3 }, /* GL_TEXTURE3_ARB */ - { 42279, 0x000084C4 }, /* GL_TEXTURE4 */ - { 42291, 0x000084C4 }, /* GL_TEXTURE4_ARB */ - { 42307, 0x000084C5 }, /* GL_TEXTURE5 */ - { 42319, 0x000084C5 }, /* GL_TEXTURE5_ARB */ - { 42335, 0x000084C6 }, /* GL_TEXTURE6 */ - { 42347, 0x000084C6 }, /* GL_TEXTURE6_ARB */ - { 42363, 0x000084C7 }, /* GL_TEXTURE7 */ - { 42375, 0x000084C7 }, /* GL_TEXTURE7_ARB */ - { 42391, 0x000084C8 }, /* GL_TEXTURE8 */ - { 42403, 0x000084C8 }, /* GL_TEXTURE8_ARB */ - { 42419, 0x000084C9 }, /* GL_TEXTURE9 */ - { 42431, 0x000084C9 }, /* GL_TEXTURE9_ARB */ - { 42447, 0x00000DE0 }, /* GL_TEXTURE_1D */ - { 42461, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY */ - { 42481, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY_EXT */ - { 42505, 0x00000DE1 }, /* GL_TEXTURE_2D */ - { 42519, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY */ - { 42539, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY_EXT */ - { 42563, 0x0000806F }, /* GL_TEXTURE_3D */ - { 42577, 0x0000806F }, /* GL_TEXTURE_3D_OES */ - { 42595, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE */ - { 42617, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE_EXT */ - { 42643, 0x0000813C }, /* GL_TEXTURE_BASE_LEVEL */ - { 42665, 0x00008068 }, /* GL_TEXTURE_BINDING_1D */ - { 42687, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY */ - { 42715, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */ - { 42747, 0x00008069 }, /* GL_TEXTURE_BINDING_2D */ - { 42769, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY */ - { 42797, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */ - { 42829, 0x0000806A }, /* GL_TEXTURE_BINDING_3D */ - { 42851, 0x0000806A }, /* GL_TEXTURE_BINDING_3D_OES */ - { 42877, 0x00008C2C }, /* GL_TEXTURE_BINDING_BUFFER */ - { 42903, 0x00008C2C }, /* GL_TEXTURE_BINDING_BUFFER_ARB */ - { 42933, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP */ - { 42961, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */ - { 42993, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_OES */ - { 43025, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE */ - { 43054, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */ - { 43087, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_NV */ - { 43119, 0x00040000 }, /* GL_TEXTURE_BIT */ - { 43134, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE */ - { 43155, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE_EXT */ - { 43180, 0x00001005 }, /* GL_TEXTURE_BORDER */ - { 43198, 0x00001004 }, /* GL_TEXTURE_BORDER_COLOR */ - { 43222, 0x00008C2A }, /* GL_TEXTURE_BUFFER */ - { 43240, 0x00008C2A }, /* GL_TEXTURE_BUFFER_ARB */ - { 43262, 0x00008C2D }, /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING */ - { 43299, 0x00008C2D }, /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB */ - { 43340, 0x00008C2E }, /* GL_TEXTURE_BUFFER_FORMAT */ - { 43365, 0x00008C2E }, /* GL_TEXTURE_BUFFER_FORMAT_ARB */ - { 43394, 0x00008171 }, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */ - { 43425, 0x00008176 }, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */ - { 43455, 0x00008172 }, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */ - { 43485, 0x00008175 }, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */ - { 43520, 0x00008173 }, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */ - { 43551, 0x00008174 }, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */ - { 43589, 0x000080BC }, /* GL_TEXTURE_COLOR_TABLE_SGI */ - { 43616, 0x000081EF }, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */ - { 43648, 0x000080BF }, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */ - { 43682, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC */ - { 43706, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC_ARB */ - { 43734, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE */ - { 43758, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE_ARB */ - { 43786, 0x0000819B }, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */ - { 43819, 0x0000819A }, /* GL_TEXTURE_COMPARE_SGIX */ - { 43843, 0x00001003 }, /* GL_TEXTURE_COMPONENTS */ - { 43865, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED */ - { 43887, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED_ARB */ - { 43913, 0x000086A3 }, /* GL_TEXTURE_COMPRESSED_FORMATS_ARB */ - { 43947, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */ - { 43980, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */ - { 44017, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT */ - { 44045, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT_ARB */ - { 44077, 0x00008078 }, /* GL_TEXTURE_COORD_ARRAY */ - { 44100, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */ - { 44138, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */ - { 44180, 0x00008092 }, /* GL_TEXTURE_COORD_ARRAY_POINTER */ - { 44211, 0x00008088 }, /* GL_TEXTURE_COORD_ARRAY_SIZE */ - { 44239, 0x0000808A }, /* GL_TEXTURE_COORD_ARRAY_STRIDE */ - { 44269, 0x00008089 }, /* GL_TEXTURE_COORD_ARRAY_TYPE */ - { 44297, 0x00008B9D }, /* GL_TEXTURE_CROP_RECT_OES */ - { 44322, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP */ - { 44342, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_ARB */ - { 44366, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */ - { 44397, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */ - { 44432, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES */ - { 44467, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */ - { 44498, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */ - { 44533, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES */ - { 44568, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */ - { 44599, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */ - { 44634, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES */ - { 44669, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_OES */ - { 44693, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */ - { 44724, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */ - { 44759, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES */ - { 44794, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */ - { 44825, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */ - { 44860, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES */ - { 44895, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */ - { 44926, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */ - { 44961, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES */ - { 44996, 0x000088F4 }, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */ - { 45025, 0x00008071 }, /* GL_TEXTURE_DEPTH */ - { 45042, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE */ - { 45064, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE_ARB */ - { 45090, 0x00002300 }, /* GL_TEXTURE_ENV */ - { 45105, 0x00002201 }, /* GL_TEXTURE_ENV_COLOR */ - { 45126, 0x00002200 }, /* GL_TEXTURE_ENV_MODE */ - { 45146, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL */ - { 45172, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL_EXT */ - { 45202, 0x00002500 }, /* GL_TEXTURE_GEN_MODE */ - { 45222, 0x00002500 }, /* GL_TEXTURE_GEN_MODE_OES */ - { 45246, 0x00000C63 }, /* GL_TEXTURE_GEN_Q */ - { 45263, 0x00000C62 }, /* GL_TEXTURE_GEN_R */ - { 45280, 0x00000C60 }, /* GL_TEXTURE_GEN_S */ - { 45297, 0x00008D60 }, /* GL_TEXTURE_GEN_STR_OES */ - { 45320, 0x00000C61 }, /* GL_TEXTURE_GEN_T */ - { 45337, 0x0000819D }, /* GL_TEXTURE_GEQUAL_R_SGIX */ - { 45362, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE */ - { 45384, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE_EXT */ - { 45410, 0x00001001 }, /* GL_TEXTURE_HEIGHT */ - { 45428, 0x000080ED }, /* GL_TEXTURE_INDEX_SIZE_EXT */ - { 45454, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE */ - { 45480, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE_EXT */ - { 45510, 0x00001003 }, /* GL_TEXTURE_INTERNAL_FORMAT */ - { 45537, 0x0000819C }, /* GL_TEXTURE_LEQUAL_R_SGIX */ - { 45562, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS */ - { 45582, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS_EXT */ - { 45606, 0x00008190 }, /* GL_TEXTURE_LOD_BIAS_R_SGIX */ - { 45633, 0x0000818E }, /* GL_TEXTURE_LOD_BIAS_S_SGIX */ - { 45660, 0x0000818F }, /* GL_TEXTURE_LOD_BIAS_T_SGIX */ - { 45687, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE */ - { 45713, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE_EXT */ - { 45743, 0x00002800 }, /* GL_TEXTURE_MAG_FILTER */ - { 45765, 0x00000BA8 }, /* GL_TEXTURE_MATRIX */ - { 45783, 0x0000898F }, /* GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES */ - { 45823, 0x000084FE }, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */ - { 45853, 0x0000836B }, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */ - { 45881, 0x00008369 }, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */ - { 45909, 0x0000836A }, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */ - { 45937, 0x0000813D }, /* GL_TEXTURE_MAX_LEVEL */ - { 45958, 0x0000813B }, /* GL_TEXTURE_MAX_LOD */ - { 45977, 0x00002801 }, /* GL_TEXTURE_MIN_FILTER */ - { 45999, 0x0000813A }, /* GL_TEXTURE_MIN_LOD */ - { 46018, 0x00008066 }, /* GL_TEXTURE_PRIORITY */ - { 46038, 0x000085B7 }, /* GL_TEXTURE_RANGE_LENGTH_APPLE */ - { 46068, 0x000085B8 }, /* GL_TEXTURE_RANGE_POINTER_APPLE */ - { 46099, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE */ - { 46120, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_ARB */ - { 46145, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_NV */ - { 46169, 0x0000805C }, /* GL_TEXTURE_RED_SIZE */ - { 46189, 0x0000805C }, /* GL_TEXTURE_RED_SIZE_EXT */ - { 46213, 0x00008067 }, /* GL_TEXTURE_RESIDENT */ - { 46233, 0x00008C3F }, /* GL_TEXTURE_SHARED_SIZE */ - { 46256, 0x00000BA5 }, /* GL_TEXTURE_STACK_DEPTH */ - { 46279, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE */ - { 46303, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE_EXT */ - { 46331, 0x000085BC }, /* GL_TEXTURE_STORAGE_HINT_APPLE */ - { 46361, 0x00008065 }, /* GL_TEXTURE_TOO_LARGE_EXT */ - { 46386, 0x0000888F }, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */ - { 46420, 0x00001000 }, /* GL_TEXTURE_WIDTH */ - { 46437, 0x00008072 }, /* GL_TEXTURE_WRAP_R */ - { 46455, 0x00008072 }, /* GL_TEXTURE_WRAP_R_OES */ - { 46477, 0x00002802 }, /* GL_TEXTURE_WRAP_S */ - { 46495, 0x00002803 }, /* GL_TEXTURE_WRAP_T */ - { 46513, 0x0000911B }, /* GL_TIMEOUT_EXPIRED */ - { 46532, 0x000088BF }, /* GL_TIME_ELAPSED_EXT */ - { 46552, 0x00008648 }, /* GL_TRACK_MATRIX_NV */ - { 46571, 0x00008649 }, /* GL_TRACK_MATRIX_TRANSFORM_NV */ - { 46600, 0x00001000 }, /* GL_TRANSFORM_BIT */ - { 46617, 0x00008E22 }, /* GL_TRANSFORM_FEEDBACK */ - { 46639, 0x00008E25 }, /* GL_TRANSFORM_FEEDBACK_BINDING */ - { 46669, 0x00008C8E }, /* GL_TRANSFORM_FEEDBACK_BUFFER */ - { 46698, 0x00008E24 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */ - { 46734, 0x00008C8F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING */ - { 46771, 0x00008C8F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT */ - { 46812, 0x00008C8E }, /* GL_TRANSFORM_FEEDBACK_BUFFER_EXT */ - { 46845, 0x00008C7F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE */ - { 46879, 0x00008C7F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT */ - { 46917, 0x00008E23 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */ - { 46953, 0x00008C85 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE */ - { 46987, 0x00008C85 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT */ - { 47025, 0x00008C84 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_START */ - { 47060, 0x00008C84 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT */ - { 47099, 0x00008C88 }, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN */ - { 47140, 0x00008C88 }, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT */ - { 47185, 0x00008C83 }, /* GL_TRANSFORM_FEEDBACK_VARYINGS */ - { 47216, 0x00008C83 }, /* GL_TRANSFORM_FEEDBACK_VARYINGS_EXT */ - { 47251, 0x00008C76 }, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH */ - { 47292, 0x00008C76 }, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT */ - { 47337, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX */ - { 47363, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX_ARB */ - { 47393, 0x000088B7 }, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */ - { 47425, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX */ - { 47455, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */ - { 47489, 0x0000862C }, /* GL_TRANSPOSE_NV */ - { 47505, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX */ - { 47536, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */ - { 47571, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX */ - { 47599, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */ - { 47631, 0x00000004 }, /* GL_TRIANGLES */ - { 47644, 0x0000000C }, /* GL_TRIANGLES_ADJACENCY */ - { 47667, 0x0000000C }, /* GL_TRIANGLES_ADJACENCY_ARB */ - { 47694, 0x00000006 }, /* GL_TRIANGLE_FAN */ - { 47710, 0x00008615 }, /* GL_TRIANGLE_MESH_SUN */ - { 47731, 0x00000005 }, /* GL_TRIANGLE_STRIP */ - { 47749, 0x0000000D }, /* GL_TRIANGLE_STRIP_ADJACENCY */ - { 47777, 0x0000000D }, /* GL_TRIANGLE_STRIP_ADJACENCY_ARB */ - { 47809, 0x00000001 }, /* GL_TRUE */ - { 47817, 0x00008A1C }, /* GL_UNDEFINED_APPLE */ - { 47836, 0x00000CF5 }, /* GL_UNPACK_ALIGNMENT */ - { 47856, 0x0000806E }, /* GL_UNPACK_IMAGE_HEIGHT */ - { 47879, 0x00000CF1 }, /* GL_UNPACK_LSB_FIRST */ - { 47899, 0x00000CF2 }, /* GL_UNPACK_ROW_LENGTH */ - { 47920, 0x0000806D }, /* GL_UNPACK_SKIP_IMAGES */ - { 47942, 0x00000CF4 }, /* GL_UNPACK_SKIP_PIXELS */ - { 47964, 0x00000CF3 }, /* GL_UNPACK_SKIP_ROWS */ - { 47984, 0x00000CF0 }, /* GL_UNPACK_SWAP_BYTES */ - { 48005, 0x00009118 }, /* GL_UNSIGNALED */ - { 48019, 0x00001401 }, /* GL_UNSIGNED_BYTE */ - { 48036, 0x00008362 }, /* GL_UNSIGNED_BYTE_2_3_3_REV */ - { 48063, 0x00008032 }, /* GL_UNSIGNED_BYTE_3_3_2 */ - { 48086, 0x00001405 }, /* GL_UNSIGNED_INT */ - { 48102, 0x00008C3B }, /* GL_UNSIGNED_INT_10F_11F_11F_REV */ - { 48134, 0x00008036 }, /* GL_UNSIGNED_INT_10_10_10_2 */ - { 48161, 0x00008DF6 }, /* GL_UNSIGNED_INT_10_10_10_2_OES */ - { 48192, 0x000084FA }, /* GL_UNSIGNED_INT_24_8 */ - { 48213, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_EXT */ - { 48238, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_NV */ - { 48262, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_OES */ - { 48287, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV */ - { 48318, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV_EXT */ - { 48353, 0x00008C3E }, /* GL_UNSIGNED_INT_5_9_9_9_REV */ - { 48381, 0x00008035 }, /* GL_UNSIGNED_INT_8_8_8_8 */ - { 48405, 0x00008367 }, /* GL_UNSIGNED_INT_8_8_8_8_REV */ - { 48433, 0x00008DD1 }, /* GL_UNSIGNED_INT_SAMPLER_1D */ - { 48460, 0x00008DD6 }, /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY */ - { 48493, 0x00008DD6 }, /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT */ - { 48530, 0x00008DD1 }, /* GL_UNSIGNED_INT_SAMPLER_1D_EXT */ - { 48561, 0x00008DD2 }, /* GL_UNSIGNED_INT_SAMPLER_2D */ - { 48588, 0x00008DD7 }, /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY */ - { 48621, 0x00008DD7 }, /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT */ - { 48658, 0x00008DD2 }, /* GL_UNSIGNED_INT_SAMPLER_2D_EXT */ - { 48689, 0x00008DD5 }, /* GL_UNSIGNED_INT_SAMPLER_2D_RECT */ - { 48721, 0x00008DD5 }, /* GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT */ - { 48757, 0x00008DD3 }, /* GL_UNSIGNED_INT_SAMPLER_3D */ - { 48784, 0x00008DD3 }, /* GL_UNSIGNED_INT_SAMPLER_3D_EXT */ - { 48815, 0x00008DD8 }, /* GL_UNSIGNED_INT_SAMPLER_BUFFER */ - { 48846, 0x00008DD8 }, /* GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT */ - { 48881, 0x00008DD4 }, /* GL_UNSIGNED_INT_SAMPLER_CUBE */ - { 48910, 0x00008DD4 }, /* GL_UNSIGNED_INT_SAMPLER_CUBE_EXT */ - { 48943, 0x00008DC6 }, /* GL_UNSIGNED_INT_VEC2 */ - { 48964, 0x00008DC6 }, /* GL_UNSIGNED_INT_VEC2_EXT */ - { 48989, 0x00008DC7 }, /* GL_UNSIGNED_INT_VEC3 */ - { 49010, 0x00008DC7 }, /* GL_UNSIGNED_INT_VEC3_EXT */ - { 49035, 0x00008DC8 }, /* GL_UNSIGNED_INT_VEC4 */ - { 49056, 0x00008DC8 }, /* GL_UNSIGNED_INT_VEC4_EXT */ - { 49081, 0x00008C17 }, /* GL_UNSIGNED_NORMALIZED */ - { 49104, 0x00001403 }, /* GL_UNSIGNED_SHORT */ - { 49122, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */ - { 49152, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT */ - { 49186, 0x00008033 }, /* GL_UNSIGNED_SHORT_4_4_4_4 */ - { 49212, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */ - { 49242, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT */ - { 49276, 0x00008034 }, /* GL_UNSIGNED_SHORT_5_5_5_1 */ - { 49302, 0x00008363 }, /* GL_UNSIGNED_SHORT_5_6_5 */ - { 49326, 0x00008364 }, /* GL_UNSIGNED_SHORT_5_6_5_REV */ - { 49354, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_APPLE */ - { 49382, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_MESA */ - { 49409, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */ - { 49441, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_MESA */ - { 49472, 0x00008CA2 }, /* GL_UPPER_LEFT */ - { 49486, 0x00002A20 }, /* GL_V2F */ - { 49493, 0x00002A21 }, /* GL_V3F */ - { 49500, 0x00008B83 }, /* GL_VALIDATE_STATUS */ - { 49519, 0x00001F00 }, /* GL_VENDOR */ - { 49529, 0x00001F02 }, /* GL_VERSION */ - { 49540, 0x00008074 }, /* GL_VERTEX_ARRAY */ - { 49556, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING */ - { 49580, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING_APPLE */ - { 49610, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING */ - { 49641, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */ - { 49676, 0x0000808E }, /* GL_VERTEX_ARRAY_POINTER */ - { 49700, 0x0000807A }, /* GL_VERTEX_ARRAY_SIZE */ - { 49721, 0x0000807C }, /* GL_VERTEX_ARRAY_STRIDE */ - { 49744, 0x0000807B }, /* GL_VERTEX_ARRAY_TYPE */ - { 49765, 0x00008650 }, /* GL_VERTEX_ATTRIB_ARRAY0_NV */ - { 49792, 0x0000865A }, /* GL_VERTEX_ATTRIB_ARRAY10_NV */ - { 49820, 0x0000865B }, /* GL_VERTEX_ATTRIB_ARRAY11_NV */ - { 49848, 0x0000865C }, /* GL_VERTEX_ATTRIB_ARRAY12_NV */ - { 49876, 0x0000865D }, /* GL_VERTEX_ATTRIB_ARRAY13_NV */ - { 49904, 0x0000865E }, /* GL_VERTEX_ATTRIB_ARRAY14_NV */ - { 49932, 0x0000865F }, /* GL_VERTEX_ATTRIB_ARRAY15_NV */ - { 49960, 0x00008651 }, /* GL_VERTEX_ATTRIB_ARRAY1_NV */ - { 49987, 0x00008652 }, /* GL_VERTEX_ATTRIB_ARRAY2_NV */ - { 50014, 0x00008653 }, /* GL_VERTEX_ATTRIB_ARRAY3_NV */ - { 50041, 0x00008654 }, /* GL_VERTEX_ATTRIB_ARRAY4_NV */ - { 50068, 0x00008655 }, /* GL_VERTEX_ATTRIB_ARRAY5_NV */ - { 50095, 0x00008656 }, /* GL_VERTEX_ATTRIB_ARRAY6_NV */ - { 50122, 0x00008657 }, /* GL_VERTEX_ATTRIB_ARRAY7_NV */ - { 50149, 0x00008658 }, /* GL_VERTEX_ATTRIB_ARRAY8_NV */ - { 50176, 0x00008659 }, /* GL_VERTEX_ATTRIB_ARRAY9_NV */ - { 50203, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */ - { 50241, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */ - { 50283, 0x000088FE }, /* GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB */ - { 50318, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */ - { 50349, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */ - { 50384, 0x000088FD }, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER */ - { 50415, 0x000088FD }, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT */ - { 50450, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */ - { 50484, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */ - { 50522, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */ - { 50553, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */ - { 50588, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */ - { 50616, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */ - { 50648, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */ - { 50678, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */ - { 50712, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */ - { 50740, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */ - { 50772, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */ - { 50792, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */ - { 50814, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */ - { 50843, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */ - { 50864, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */ - { 50893, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */ - { 50926, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */ - { 50958, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */ - { 50985, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */ - { 51016, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */ - { 51046, 0x00008B31 }, /* GL_VERTEX_SHADER */ - { 51063, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */ - { 51084, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */ - { 51111, 0x00000BA2 }, /* GL_VIEWPORT */ - { 51123, 0x00000800 }, /* GL_VIEWPORT_BIT */ - { 51139, 0x00008A1A }, /* GL_VOLATILE_APPLE */ - { 51157, 0x0000911D }, /* GL_WAIT_FAILED */ - { 51172, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */ - { 51192, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */ - { 51223, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */ - { 51258, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_OES */ - { 51293, 0x000086AD }, /* GL_WEIGHT_ARRAY_OES */ - { 51313, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */ - { 51341, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_OES */ - { 51369, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */ - { 51394, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_OES */ - { 51419, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */ - { 51446, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_OES */ - { 51473, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */ - { 51498, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_OES */ - { 51523, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */ - { 51547, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */ - { 51566, 0x000088B9 }, /* GL_WRITE_ONLY */ - { 51580, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */ - { 51598, 0x000088B9 }, /* GL_WRITE_ONLY_OES */ - { 51616, 0x00001506 }, /* GL_XOR */ - { 51623, 0x000085B9 }, /* GL_YCBCR_422_APPLE */ - { 51642, 0x00008757 }, /* GL_YCBCR_MESA */ - { 51656, 0x00000000 }, /* GL_ZERO */ - { 51664, 0x00000D16 }, /* GL_ZOOM_X */ - { 51674, 0x00000D17 }, /* GL_ZOOM_Y */ + { 6691, 0x00000004 }, /* GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB */ + { 6729, 0x00009126 }, /* GL_CONTEXT_PROFILE_MASK */ + { 6753, 0x00008010 }, /* GL_CONVOLUTION_1D */ + { 6771, 0x00008011 }, /* GL_CONVOLUTION_2D */ + { 6789, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR */ + { 6817, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR_HP */ + { 6848, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE */ + { 6875, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE_EXT */ + { 6906, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS */ + { 6933, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS_EXT */ + { 6964, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE */ + { 6992, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE_EXT */ + { 7024, 0x00008017 }, /* GL_CONVOLUTION_FORMAT */ + { 7046, 0x00008017 }, /* GL_CONVOLUTION_FORMAT_EXT */ + { 7072, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT */ + { 7094, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT_EXT */ + { 7120, 0x00008018 }, /* GL_CONVOLUTION_WIDTH */ + { 7141, 0x00008018 }, /* GL_CONVOLUTION_WIDTH_EXT */ + { 7166, 0x00008862 }, /* GL_COORD_REPLACE */ + { 7183, 0x00008862 }, /* GL_COORD_REPLACE_ARB */ + { 7204, 0x00008862 }, /* GL_COORD_REPLACE_NV */ + { 7224, 0x00008862 }, /* GL_COORD_REPLACE_OES */ + { 7245, 0x00001503 }, /* GL_COPY */ + { 7253, 0x0000150C }, /* GL_COPY_INVERTED */ + { 7270, 0x00000706 }, /* GL_COPY_PIXEL_TOKEN */ + { 7290, 0x00008F36 }, /* GL_COPY_READ_BUFFER */ + { 7310, 0x00008F37 }, /* GL_COPY_WRITE_BUFFER */ + { 7331, 0x00000B44 }, /* GL_CULL_FACE */ + { 7344, 0x00000B45 }, /* GL_CULL_FACE_MODE */ + { 7362, 0x000081AA }, /* GL_CULL_VERTEX_EXT */ + { 7381, 0x000081AC }, /* GL_CULL_VERTEX_EYE_POSITION_EXT */ + { 7413, 0x000081AB }, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */ + { 7448, 0x00008626 }, /* GL_CURRENT_ATTRIB_NV */ + { 7469, 0x00000001 }, /* GL_CURRENT_BIT */ + { 7484, 0x00000B00 }, /* GL_CURRENT_COLOR */ + { 7501, 0x00008453 }, /* GL_CURRENT_FOG_COORD */ + { 7522, 0x00008453 }, /* GL_CURRENT_FOG_COORDINATE */ + { 7548, 0x00000B01 }, /* GL_CURRENT_INDEX */ + { 7565, 0x00008641 }, /* GL_CURRENT_MATRIX_ARB */ + { 7587, 0x00008845 }, /* GL_CURRENT_MATRIX_INDEX_ARB */ + { 7615, 0x00008641 }, /* GL_CURRENT_MATRIX_NV */ + { 7636, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */ + { 7670, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */ + { 7703, 0x00000B02 }, /* GL_CURRENT_NORMAL */ + { 7721, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_ARB */ + { 7751, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_OES */ + { 7781, 0x00008B8D }, /* GL_CURRENT_PROGRAM */ + { 7800, 0x00008865 }, /* GL_CURRENT_QUERY */ + { 7817, 0x00008865 }, /* GL_CURRENT_QUERY_ARB */ + { 7838, 0x00000B04 }, /* GL_CURRENT_RASTER_COLOR */ + { 7862, 0x00000B09 }, /* GL_CURRENT_RASTER_DISTANCE */ + { 7889, 0x00000B05 }, /* GL_CURRENT_RASTER_INDEX */ + { 7913, 0x00000B07 }, /* GL_CURRENT_RASTER_POSITION */ + { 7940, 0x00000B08 }, /* GL_CURRENT_RASTER_POSITION_VALID */ + { 7973, 0x0000845F }, /* GL_CURRENT_RASTER_SECONDARY_COLOR */ + { 8007, 0x00000B06 }, /* GL_CURRENT_RASTER_TEXTURE_COORDS */ + { 8040, 0x00008459 }, /* GL_CURRENT_SECONDARY_COLOR */ + { 8067, 0x00000B03 }, /* GL_CURRENT_TEXTURE_COORDS */ + { 8093, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB */ + { 8118, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB_ARB */ + { 8147, 0x000086A8 }, /* GL_CURRENT_WEIGHT_ARB */ + { 8169, 0x00000900 }, /* GL_CW */ + { 8175, 0x0000875B }, /* GL_DEBUG_ASSERT_MESA */ + { 8196, 0x00008759 }, /* GL_DEBUG_OBJECT_MESA */ + { 8217, 0x0000875A }, /* GL_DEBUG_PRINT_MESA */ + { 8237, 0x00002101 }, /* GL_DECAL */ + { 8246, 0x00001E03 }, /* GL_DECR */ + { 8254, 0x00008508 }, /* GL_DECR_WRAP */ + { 8267, 0x00008508 }, /* GL_DECR_WRAP_EXT */ + { 8284, 0x00008B80 }, /* GL_DELETE_STATUS */ + { 8301, 0x00001801 }, /* GL_DEPTH */ + { 8310, 0x000088F0 }, /* GL_DEPTH24_STENCIL8 */ + { 8330, 0x000088F0 }, /* GL_DEPTH24_STENCIL8_EXT */ + { 8354, 0x000088F0 }, /* GL_DEPTH24_STENCIL8_OES */ + { 8378, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT */ + { 8398, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_EXT */ + { 8422, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_OES */ + { 8446, 0x00000D1F }, /* GL_DEPTH_BIAS */ + { 8460, 0x00000D56 }, /* GL_DEPTH_BITS */ + { 8474, 0x00008891 }, /* GL_DEPTH_BOUNDS_EXT */ + { 8494, 0x00008890 }, /* GL_DEPTH_BOUNDS_TEST_EXT */ + { 8519, 0x00008223 }, /* GL_DEPTH_BUFFER */ + { 8535, 0x00000100 }, /* GL_DEPTH_BUFFER_BIT */ + { 8555, 0x0000864F }, /* GL_DEPTH_CLAMP */ + { 8570, 0x0000864F }, /* GL_DEPTH_CLAMP_NV */ + { 8588, 0x00000B73 }, /* GL_DEPTH_CLEAR_VALUE */ + { 8609, 0x00001902 }, /* GL_DEPTH_COMPONENT */ + { 8628, 0x000081A5 }, /* GL_DEPTH_COMPONENT16 */ + { 8649, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_ARB */ + { 8674, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_OES */ + { 8699, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_SGIX */ + { 8725, 0x000081A6 }, /* GL_DEPTH_COMPONENT24 */ + { 8746, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_ARB */ + { 8771, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_OES */ + { 8796, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_SGIX */ + { 8822, 0x000081A7 }, /* GL_DEPTH_COMPONENT32 */ + { 8843, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_ARB */ + { 8868, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_OES */ + { 8893, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_SGIX */ + { 8919, 0x00000B74 }, /* GL_DEPTH_FUNC */ + { 8933, 0x00000B70 }, /* GL_DEPTH_RANGE */ + { 8948, 0x00000D1E }, /* GL_DEPTH_SCALE */ + { 8963, 0x000084F9 }, /* GL_DEPTH_STENCIL */ + { 8980, 0x0000821A }, /* GL_DEPTH_STENCIL_ATTACHMENT */ + { 9008, 0x000084F9 }, /* GL_DEPTH_STENCIL_EXT */ + { 9029, 0x000084F9 }, /* GL_DEPTH_STENCIL_NV */ + { 9049, 0x000084F9 }, /* GL_DEPTH_STENCIL_OES */ + { 9070, 0x0000886F }, /* GL_DEPTH_STENCIL_TO_BGRA_NV */ + { 9098, 0x0000886E }, /* GL_DEPTH_STENCIL_TO_RGBA_NV */ + { 9126, 0x00000B71 }, /* GL_DEPTH_TEST */ + { 9140, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE */ + { 9162, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE_ARB */ + { 9188, 0x00000B72 }, /* GL_DEPTH_WRITEMASK */ + { 9207, 0x00001201 }, /* GL_DIFFUSE */ + { 9218, 0x00000BD0 }, /* GL_DITHER */ + { 9228, 0x00000A02 }, /* GL_DOMAIN */ + { 9238, 0x00001100 }, /* GL_DONT_CARE */ + { 9251, 0x000086AE }, /* GL_DOT3_RGB */ + { 9263, 0x000086AF }, /* GL_DOT3_RGBA */ + { 9276, 0x000086AF }, /* GL_DOT3_RGBA_ARB */ + { 9293, 0x00008741 }, /* GL_DOT3_RGBA_EXT */ + { 9310, 0x000086AE }, /* GL_DOT3_RGB_ARB */ + { 9326, 0x00008740 }, /* GL_DOT3_RGB_EXT */ + { 9342, 0x0000140A }, /* GL_DOUBLE */ + { 9352, 0x00000C32 }, /* GL_DOUBLEBUFFER */ + { 9368, 0x00000C01 }, /* GL_DRAW_BUFFER */ + { 9383, 0x00008825 }, /* GL_DRAW_BUFFER0 */ + { 9399, 0x00008825 }, /* GL_DRAW_BUFFER0_ARB */ + { 9419, 0x00008825 }, /* GL_DRAW_BUFFER0_ATI */ + { 9439, 0x00008826 }, /* GL_DRAW_BUFFER1 */ + { 9455, 0x0000882F }, /* GL_DRAW_BUFFER10 */ + { 9472, 0x0000882F }, /* GL_DRAW_BUFFER10_ARB */ + { 9493, 0x0000882F }, /* GL_DRAW_BUFFER10_ATI */ + { 9514, 0x00008830 }, /* GL_DRAW_BUFFER11 */ + { 9531, 0x00008830 }, /* GL_DRAW_BUFFER11_ARB */ + { 9552, 0x00008830 }, /* GL_DRAW_BUFFER11_ATI */ + { 9573, 0x00008831 }, /* GL_DRAW_BUFFER12 */ + { 9590, 0x00008831 }, /* GL_DRAW_BUFFER12_ARB */ + { 9611, 0x00008831 }, /* GL_DRAW_BUFFER12_ATI */ + { 9632, 0x00008832 }, /* GL_DRAW_BUFFER13 */ + { 9649, 0x00008832 }, /* GL_DRAW_BUFFER13_ARB */ + { 9670, 0x00008832 }, /* GL_DRAW_BUFFER13_ATI */ + { 9691, 0x00008833 }, /* GL_DRAW_BUFFER14 */ + { 9708, 0x00008833 }, /* GL_DRAW_BUFFER14_ARB */ + { 9729, 0x00008833 }, /* GL_DRAW_BUFFER14_ATI */ + { 9750, 0x00008834 }, /* GL_DRAW_BUFFER15 */ + { 9767, 0x00008834 }, /* GL_DRAW_BUFFER15_ARB */ + { 9788, 0x00008834 }, /* GL_DRAW_BUFFER15_ATI */ + { 9809, 0x00008826 }, /* GL_DRAW_BUFFER1_ARB */ + { 9829, 0x00008826 }, /* GL_DRAW_BUFFER1_ATI */ + { 9849, 0x00008827 }, /* GL_DRAW_BUFFER2 */ + { 9865, 0x00008827 }, /* GL_DRAW_BUFFER2_ARB */ + { 9885, 0x00008827 }, /* GL_DRAW_BUFFER2_ATI */ + { 9905, 0x00008828 }, /* GL_DRAW_BUFFER3 */ + { 9921, 0x00008828 }, /* GL_DRAW_BUFFER3_ARB */ + { 9941, 0x00008828 }, /* GL_DRAW_BUFFER3_ATI */ + { 9961, 0x00008829 }, /* GL_DRAW_BUFFER4 */ + { 9977, 0x00008829 }, /* GL_DRAW_BUFFER4_ARB */ + { 9997, 0x00008829 }, /* GL_DRAW_BUFFER4_ATI */ + { 10017, 0x0000882A }, /* GL_DRAW_BUFFER5 */ + { 10033, 0x0000882A }, /* GL_DRAW_BUFFER5_ARB */ + { 10053, 0x0000882A }, /* GL_DRAW_BUFFER5_ATI */ + { 10073, 0x0000882B }, /* GL_DRAW_BUFFER6 */ + { 10089, 0x0000882B }, /* GL_DRAW_BUFFER6_ARB */ + { 10109, 0x0000882B }, /* GL_DRAW_BUFFER6_ATI */ + { 10129, 0x0000882C }, /* GL_DRAW_BUFFER7 */ + { 10145, 0x0000882C }, /* GL_DRAW_BUFFER7_ARB */ + { 10165, 0x0000882C }, /* GL_DRAW_BUFFER7_ATI */ + { 10185, 0x0000882D }, /* GL_DRAW_BUFFER8 */ + { 10201, 0x0000882D }, /* GL_DRAW_BUFFER8_ARB */ + { 10221, 0x0000882D }, /* GL_DRAW_BUFFER8_ATI */ + { 10241, 0x0000882E }, /* GL_DRAW_BUFFER9 */ + { 10257, 0x0000882E }, /* GL_DRAW_BUFFER9_ARB */ + { 10277, 0x0000882E }, /* GL_DRAW_BUFFER9_ATI */ + { 10297, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER */ + { 10317, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING */ + { 10345, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */ + { 10377, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER_EXT */ + { 10401, 0x00000705 }, /* GL_DRAW_PIXEL_TOKEN */ + { 10421, 0x00000304 }, /* GL_DST_ALPHA */ + { 10434, 0x00000306 }, /* GL_DST_COLOR */ + { 10447, 0x0000877A }, /* GL_DU8DV8_ATI */ + { 10461, 0x00008779 }, /* GL_DUDV_ATI */ + { 10473, 0x000088EA }, /* GL_DYNAMIC_COPY */ + { 10489, 0x000088EA }, /* GL_DYNAMIC_COPY_ARB */ + { 10509, 0x000088E8 }, /* GL_DYNAMIC_DRAW */ + { 10525, 0x000088E8 }, /* GL_DYNAMIC_DRAW_ARB */ + { 10545, 0x000088E9 }, /* GL_DYNAMIC_READ */ + { 10561, 0x000088E9 }, /* GL_DYNAMIC_READ_ARB */ + { 10581, 0x00000B43 }, /* GL_EDGE_FLAG */ + { 10594, 0x00008079 }, /* GL_EDGE_FLAG_ARRAY */ + { 10613, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */ + { 10647, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */ + { 10685, 0x00008093 }, /* GL_EDGE_FLAG_ARRAY_POINTER */ + { 10712, 0x0000808C }, /* GL_EDGE_FLAG_ARRAY_STRIDE */ + { 10738, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER */ + { 10762, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */ + { 10794, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */ + { 10830, 0x00001600 }, /* GL_EMISSION */ + { 10842, 0x00002000 }, /* GL_ENABLE_BIT */ + { 10856, 0x00000202 }, /* GL_EQUAL */ + { 10865, 0x00001509 }, /* GL_EQUIV */ + { 10874, 0x00010000 }, /* GL_EVAL_BIT */ + { 10886, 0x00000800 }, /* GL_EXP */ + { 10893, 0x00000801 }, /* GL_EXP2 */ + { 10901, 0x00001F03 }, /* GL_EXTENSIONS */ + { 10915, 0x00002400 }, /* GL_EYE_LINEAR */ + { 10929, 0x00002502 }, /* GL_EYE_PLANE */ + { 10942, 0x0000855C }, /* GL_EYE_PLANE_ABSOLUTE_NV */ + { 10967, 0x0000855B }, /* GL_EYE_RADIAL_NV */ + { 10984, 0x00000000 }, /* GL_FALSE */ + { 10993, 0x00001101 }, /* GL_FASTEST */ + { 11004, 0x00001C01 }, /* GL_FEEDBACK */ + { 11016, 0x00000DF0 }, /* GL_FEEDBACK_BUFFER_POINTER */ + { 11043, 0x00000DF1 }, /* GL_FEEDBACK_BUFFER_SIZE */ + { 11067, 0x00000DF2 }, /* GL_FEEDBACK_BUFFER_TYPE */ + { 11091, 0x00001B02 }, /* GL_FILL */ + { 11099, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION */ + { 11126, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION_EXT */ + { 11157, 0x0000140C }, /* GL_FIXED */ + { 11166, 0x0000140C }, /* GL_FIXED_OES */ + { 11179, 0x0000891D }, /* GL_FIXED_ONLY */ + { 11193, 0x0000891D }, /* GL_FIXED_ONLY_ARB */ + { 11211, 0x00001D00 }, /* GL_FLAT */ + { 11219, 0x00001406 }, /* GL_FLOAT */ + { 11228, 0x00008B5A }, /* GL_FLOAT_MAT2 */ + { 11242, 0x00008B5A }, /* GL_FLOAT_MAT2_ARB */ + { 11260, 0x00008B65 }, /* GL_FLOAT_MAT2x3 */ + { 11276, 0x00008B66 }, /* GL_FLOAT_MAT2x4 */ + { 11292, 0x00008B5B }, /* GL_FLOAT_MAT3 */ + { 11306, 0x00008B5B }, /* GL_FLOAT_MAT3_ARB */ + { 11324, 0x00008B67 }, /* GL_FLOAT_MAT3x2 */ + { 11340, 0x00008B68 }, /* GL_FLOAT_MAT3x4 */ + { 11356, 0x00008B5C }, /* GL_FLOAT_MAT4 */ + { 11370, 0x00008B5C }, /* GL_FLOAT_MAT4_ARB */ + { 11388, 0x00008B69 }, /* GL_FLOAT_MAT4x2 */ + { 11404, 0x00008B6A }, /* GL_FLOAT_MAT4x3 */ + { 11420, 0x00008B50 }, /* GL_FLOAT_VEC2 */ + { 11434, 0x00008B50 }, /* GL_FLOAT_VEC2_ARB */ + { 11452, 0x00008B51 }, /* GL_FLOAT_VEC3 */ + { 11466, 0x00008B51 }, /* GL_FLOAT_VEC3_ARB */ + { 11484, 0x00008B52 }, /* GL_FLOAT_VEC4 */ + { 11498, 0x00008B52 }, /* GL_FLOAT_VEC4_ARB */ + { 11516, 0x00000B60 }, /* GL_FOG */ + { 11523, 0x00000080 }, /* GL_FOG_BIT */ + { 11534, 0x00000B66 }, /* GL_FOG_COLOR */ + { 11547, 0x00008451 }, /* GL_FOG_COORD */ + { 11560, 0x00008451 }, /* GL_FOG_COORDINATE */ + { 11578, 0x00008457 }, /* GL_FOG_COORDINATE_ARRAY */ + { 11602, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */ + { 11641, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */ + { 11684, 0x00008456 }, /* GL_FOG_COORDINATE_ARRAY_POINTER */ + { 11716, 0x00008455 }, /* GL_FOG_COORDINATE_ARRAY_STRIDE */ + { 11747, 0x00008454 }, /* GL_FOG_COORDINATE_ARRAY_TYPE */ + { 11776, 0x00008450 }, /* GL_FOG_COORDINATE_SOURCE */ + { 11801, 0x00008457 }, /* GL_FOG_COORD_ARRAY */ + { 11820, 0x0000889D }, /* GL_FOG_COORD_ARRAY_BUFFER_BINDING */ + { 11854, 0x00008456 }, /* GL_FOG_COORD_ARRAY_POINTER */ + { 11881, 0x00008455 }, /* GL_FOG_COORD_ARRAY_STRIDE */ + { 11907, 0x00008454 }, /* GL_FOG_COORD_ARRAY_TYPE */ + { 11931, 0x00008450 }, /* GL_FOG_COORD_SRC */ + { 11948, 0x00000B62 }, /* GL_FOG_DENSITY */ + { 11963, 0x0000855A }, /* GL_FOG_DISTANCE_MODE_NV */ + { 11987, 0x00000B64 }, /* GL_FOG_END */ + { 11998, 0x00000C54 }, /* GL_FOG_HINT */ + { 12010, 0x00000B61 }, /* GL_FOG_INDEX */ + { 12023, 0x00000B65 }, /* GL_FOG_MODE */ + { 12035, 0x00008198 }, /* GL_FOG_OFFSET_SGIX */ + { 12054, 0x00008199 }, /* GL_FOG_OFFSET_VALUE_SGIX */ + { 12079, 0x00000B63 }, /* GL_FOG_START */ + { 12092, 0x00008452 }, /* GL_FRAGMENT_DEPTH */ + { 12110, 0x00008804 }, /* GL_FRAGMENT_PROGRAM_ARB */ + { 12134, 0x00008B30 }, /* GL_FRAGMENT_SHADER */ + { 12153, 0x00008B30 }, /* GL_FRAGMENT_SHADER_ARB */ + { 12176, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */ + { 12211, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES */ + { 12250, 0x00008D40 }, /* GL_FRAMEBUFFER */ + { 12265, 0x00008215 }, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ + { 12302, 0x00008214 }, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ + { 12338, 0x00008210 }, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ + { 12379, 0x00008211 }, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ + { 12420, 0x00008216 }, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ + { 12457, 0x00008213 }, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ + { 12494, 0x00008DA7 }, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED */ + { 12528, 0x00008DA7 }, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB */ + { 12566, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ + { 12604, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */ + { 12646, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES */ + { 12688, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ + { 12726, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */ + { 12768, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES */ + { 12810, 0x00008212 }, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ + { 12845, 0x00008217 }, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ + { 12884, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */ + { 12933, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES */ + { 12982, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ + { 13030, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */ + { 13082, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES */ + { 13134, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ + { 13174, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ + { 13218, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ + { 13258, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */ + { 13302, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES */ + { 13346, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING */ + { 13369, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_EXT */ + { 13396, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_OES */ + { 13423, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE */ + { 13447, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_EXT */ + { 13475, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_OES */ + { 13503, 0x00008218 }, /* GL_FRAMEBUFFER_DEFAULT */ + { 13526, 0x00008D40 }, /* GL_FRAMEBUFFER_EXT */ + { 13545, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ + { 13582, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */ + { 13623, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES */ + { 13664, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS */ + { 13701, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */ + { 13742, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES */ + { 13783, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */ + { 13821, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */ + { 13863, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES */ + { 13905, 0x00008CD8 }, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */ + { 13956, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */ + { 13994, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES */ + { 14032, 0x00008DA9 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB */ + { 14074, 0x00008DA8 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS */ + { 14114, 0x00008DA8 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB */ + { 14158, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ + { 14203, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */ + { 14252, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES */ + { 14301, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ + { 14339, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT */ + { 14381, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */ + { 14419, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */ + { 14461, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES */ + { 14503, 0x00008D40 }, /* GL_FRAMEBUFFER_OES */ + { 14522, 0x00008CDE }, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */ + { 14554, 0x00008219 }, /* GL_FRAMEBUFFER_UNDEFINED */ + { 14579, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED */ + { 14606, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */ + { 14637, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_OES */ + { 14668, 0x00000404 }, /* GL_FRONT */ + { 14677, 0x00000408 }, /* GL_FRONT_AND_BACK */ + { 14695, 0x00000B46 }, /* GL_FRONT_FACE */ + { 14709, 0x00000400 }, /* GL_FRONT_LEFT */ + { 14723, 0x00000401 }, /* GL_FRONT_RIGHT */ + { 14738, 0x00008006 }, /* GL_FUNC_ADD */ + { 14750, 0x00008006 }, /* GL_FUNC_ADD_EXT */ + { 14766, 0x00008006 }, /* GL_FUNC_ADD_OES */ + { 14782, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT */ + { 14807, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_EXT */ + { 14836, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_OES */ + { 14865, 0x0000800A }, /* GL_FUNC_SUBTRACT */ + { 14882, 0x0000800A }, /* GL_FUNC_SUBTRACT_EXT */ + { 14903, 0x0000800A }, /* GL_FUNC_SUBTRACT_OES */ + { 14924, 0x00008191 }, /* GL_GENERATE_MIPMAP */ + { 14943, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT */ + { 14967, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT_SGIS */ + { 14996, 0x00008191 }, /* GL_GENERATE_MIPMAP_SGIS */ + { 15020, 0x00008917 }, /* GL_GEOMETRY_INPUT_TYPE */ + { 15043, 0x00008DDB }, /* GL_GEOMETRY_INPUT_TYPE_ARB */ + { 15070, 0x00008918 }, /* GL_GEOMETRY_OUTPUT_TYPE */ + { 15094, 0x00008DDC }, /* GL_GEOMETRY_OUTPUT_TYPE_ARB */ + { 15122, 0x00008DD9 }, /* GL_GEOMETRY_SHADER */ + { 15141, 0x00008DD9 }, /* GL_GEOMETRY_SHADER_ARB */ + { 15164, 0x00008916 }, /* GL_GEOMETRY_VERTICES_OUT */ + { 15189, 0x00008DDA }, /* GL_GEOMETRY_VERTICES_OUT_ARB */ + { 15218, 0x00000206 }, /* GL_GEQUAL */ + { 15228, 0x00000204 }, /* GL_GREATER */ + { 15239, 0x00001904 }, /* GL_GREEN */ + { 15248, 0x00000D19 }, /* GL_GREEN_BIAS */ + { 15262, 0x00000D53 }, /* GL_GREEN_BITS */ + { 15276, 0x00008D95 }, /* GL_GREEN_INTEGER */ + { 15293, 0x00008D95 }, /* GL_GREEN_INTEGER_EXT */ + { 15314, 0x00000D18 }, /* GL_GREEN_SCALE */ + { 15329, 0x00008253 }, /* GL_GUILTY_CONTEXT_RESET_ARB */ + { 15357, 0x0000140B }, /* GL_HALF_FLOAT */ + { 15371, 0x00008D61 }, /* GL_HALF_FLOAT_OES */ + { 15389, 0x00008DF2 }, /* GL_HIGH_FLOAT */ + { 15403, 0x00008DF5 }, /* GL_HIGH_INT */ + { 15415, 0x00008000 }, /* GL_HINT_BIT */ + { 15427, 0x00008024 }, /* GL_HISTOGRAM */ + { 15440, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE */ + { 15464, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE_EXT */ + { 15492, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE */ + { 15515, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE_EXT */ + { 15542, 0x00008024 }, /* GL_HISTOGRAM_EXT */ + { 15559, 0x00008027 }, /* GL_HISTOGRAM_FORMAT */ + { 15579, 0x00008027 }, /* GL_HISTOGRAM_FORMAT_EXT */ + { 15603, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE */ + { 15627, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE_EXT */ + { 15655, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE */ + { 15683, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */ + { 15715, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE */ + { 15737, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE_EXT */ + { 15763, 0x0000802D }, /* GL_HISTOGRAM_SINK */ + { 15781, 0x0000802D }, /* GL_HISTOGRAM_SINK_EXT */ + { 15803, 0x00008026 }, /* GL_HISTOGRAM_WIDTH */ + { 15822, 0x00008026 }, /* GL_HISTOGRAM_WIDTH_EXT */ + { 15845, 0x0000862A }, /* GL_IDENTITY_NV */ + { 15860, 0x00008150 }, /* GL_IGNORE_BORDER_HP */ + { 15880, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT */ + { 15916, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */ + { 15956, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE */ + { 15990, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */ + { 16028, 0x00001E02 }, /* GL_INCR */ + { 16036, 0x00008507 }, /* GL_INCR_WRAP */ + { 16049, 0x00008507 }, /* GL_INCR_WRAP_EXT */ + { 16066, 0x00008222 }, /* GL_INDEX */ + { 16075, 0x00008077 }, /* GL_INDEX_ARRAY */ + { 16090, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING */ + { 16120, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */ + { 16154, 0x00008091 }, /* GL_INDEX_ARRAY_POINTER */ + { 16177, 0x00008086 }, /* GL_INDEX_ARRAY_STRIDE */ + { 16199, 0x00008085 }, /* GL_INDEX_ARRAY_TYPE */ + { 16219, 0x00000D51 }, /* GL_INDEX_BITS */ + { 16233, 0x00000C20 }, /* GL_INDEX_CLEAR_VALUE */ + { 16254, 0x00000BF1 }, /* GL_INDEX_LOGIC_OP */ + { 16272, 0x00000C30 }, /* GL_INDEX_MODE */ + { 16286, 0x00000D13 }, /* GL_INDEX_OFFSET */ + { 16302, 0x00000D12 }, /* GL_INDEX_SHIFT */ + { 16317, 0x00000C21 }, /* GL_INDEX_WRITEMASK */ + { 16336, 0x00008B84 }, /* GL_INFO_LOG_LENGTH */ + { 16355, 0x00008254 }, /* GL_INNOCENT_CONTEXT_RESET_ARB */ + { 16385, 0x00001404 }, /* GL_INT */ + { 16392, 0x00008049 }, /* GL_INTENSITY */ + { 16405, 0x0000804C }, /* GL_INTENSITY12 */ + { 16420, 0x0000804C }, /* GL_INTENSITY12_EXT */ + { 16439, 0x0000804D }, /* GL_INTENSITY16 */ + { 16454, 0x00008D8B }, /* GL_INTENSITY16I_EXT */ + { 16474, 0x00008D79 }, /* GL_INTENSITY16UI_EXT */ + { 16495, 0x0000804D }, /* GL_INTENSITY16_EXT */ + { 16514, 0x00008D85 }, /* GL_INTENSITY32I_EXT */ + { 16534, 0x00008D73 }, /* GL_INTENSITY32UI_EXT */ + { 16555, 0x0000804A }, /* GL_INTENSITY4 */ + { 16569, 0x0000804A }, /* GL_INTENSITY4_EXT */ + { 16587, 0x0000804B }, /* GL_INTENSITY8 */ + { 16601, 0x00008D91 }, /* GL_INTENSITY8I_EXT */ + { 16620, 0x00008D7F }, /* GL_INTENSITY8UI_EXT */ + { 16640, 0x0000804B }, /* GL_INTENSITY8_EXT */ + { 16658, 0x00008049 }, /* GL_INTENSITY_EXT */ + { 16675, 0x00008C8C }, /* GL_INTERLEAVED_ATTRIBS */ + { 16698, 0x00008C8C }, /* GL_INTERLEAVED_ATTRIBS_EXT */ + { 16725, 0x00008575 }, /* GL_INTERPOLATE */ + { 16740, 0x00008575 }, /* GL_INTERPOLATE_ARB */ + { 16759, 0x00008575 }, /* GL_INTERPOLATE_EXT */ + { 16778, 0x00008DF7 }, /* GL_INT_10_10_10_2_OES */ + { 16800, 0x00008DC9 }, /* GL_INT_SAMPLER_1D */ + { 16818, 0x00008DCE }, /* GL_INT_SAMPLER_1D_ARRAY */ + { 16842, 0x00008DCE }, /* GL_INT_SAMPLER_1D_ARRAY_EXT */ + { 16870, 0x00008DC9 }, /* GL_INT_SAMPLER_1D_EXT */ + { 16892, 0x00008DCA }, /* GL_INT_SAMPLER_2D */ + { 16910, 0x00008DCF }, /* GL_INT_SAMPLER_2D_ARRAY */ + { 16934, 0x00008DCF }, /* GL_INT_SAMPLER_2D_ARRAY_EXT */ + { 16962, 0x00008DCA }, /* GL_INT_SAMPLER_2D_EXT */ + { 16984, 0x00008DCD }, /* GL_INT_SAMPLER_2D_RECT */ + { 17007, 0x00008DCD }, /* GL_INT_SAMPLER_2D_RECT_EXT */ + { 17034, 0x00008DCB }, /* GL_INT_SAMPLER_3D */ + { 17052, 0x00008DCB }, /* GL_INT_SAMPLER_3D_EXT */ + { 17074, 0x00008DD0 }, /* GL_INT_SAMPLER_BUFFER */ + { 17096, 0x00008DD0 }, /* GL_INT_SAMPLER_BUFFER_EXT */ + { 17122, 0x00008DCC }, /* GL_INT_SAMPLER_CUBE */ + { 17142, 0x00008DCC }, /* GL_INT_SAMPLER_CUBE_EXT */ + { 17166, 0x00008B53 }, /* GL_INT_VEC2 */ + { 17178, 0x00008B53 }, /* GL_INT_VEC2_ARB */ + { 17194, 0x00008B54 }, /* GL_INT_VEC3 */ + { 17206, 0x00008B54 }, /* GL_INT_VEC3_ARB */ + { 17222, 0x00008B55 }, /* GL_INT_VEC4 */ + { 17234, 0x00008B55 }, /* GL_INT_VEC4_ARB */ + { 17250, 0x00000500 }, /* GL_INVALID_ENUM */ + { 17266, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION */ + { 17299, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */ + { 17336, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_OES */ + { 17373, 0x00000502 }, /* GL_INVALID_OPERATION */ + { 17394, 0x00000501 }, /* GL_INVALID_VALUE */ + { 17411, 0x0000862B }, /* GL_INVERSE_NV */ + { 17425, 0x0000862D }, /* GL_INVERSE_TRANSPOSE_NV */ + { 17449, 0x0000150A }, /* GL_INVERT */ + { 17459, 0x00001E00 }, /* GL_KEEP */ + { 17467, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION */ + { 17493, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION_EXT */ + { 17523, 0x00000406 }, /* GL_LEFT */ + { 17531, 0x00000203 }, /* GL_LEQUAL */ + { 17541, 0x00000201 }, /* GL_LESS */ + { 17549, 0x00004000 }, /* GL_LIGHT0 */ + { 17559, 0x00004001 }, /* GL_LIGHT1 */ + { 17569, 0x00004002 }, /* GL_LIGHT2 */ + { 17579, 0x00004003 }, /* GL_LIGHT3 */ + { 17589, 0x00004004 }, /* GL_LIGHT4 */ + { 17599, 0x00004005 }, /* GL_LIGHT5 */ + { 17609, 0x00004006 }, /* GL_LIGHT6 */ + { 17619, 0x00004007 }, /* GL_LIGHT7 */ + { 17629, 0x00000B50 }, /* GL_LIGHTING */ + { 17641, 0x00000040 }, /* GL_LIGHTING_BIT */ + { 17657, 0x00000B53 }, /* GL_LIGHT_MODEL_AMBIENT */ + { 17680, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL */ + { 17709, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */ + { 17742, 0x00000B51 }, /* GL_LIGHT_MODEL_LOCAL_VIEWER */ + { 17770, 0x00000B52 }, /* GL_LIGHT_MODEL_TWO_SIDE */ + { 17794, 0x00001B01 }, /* GL_LINE */ + { 17802, 0x00002601 }, /* GL_LINEAR */ + { 17812, 0x00001208 }, /* GL_LINEAR_ATTENUATION */ + { 17834, 0x00008170 }, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */ + { 17864, 0x0000844F }, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */ + { 17895, 0x00002703 }, /* GL_LINEAR_MIPMAP_LINEAR */ + { 17919, 0x00002701 }, /* GL_LINEAR_MIPMAP_NEAREST */ + { 17944, 0x00000001 }, /* GL_LINES */ + { 17953, 0x0000000A }, /* GL_LINES_ADJACENCY */ + { 17972, 0x0000000A }, /* GL_LINES_ADJACENCY_ARB */ + { 17995, 0x00000004 }, /* GL_LINE_BIT */ + { 18007, 0x00000002 }, /* GL_LINE_LOOP */ + { 18020, 0x00000707 }, /* GL_LINE_RESET_TOKEN */ + { 18040, 0x00000B20 }, /* GL_LINE_SMOOTH */ + { 18055, 0x00000C52 }, /* GL_LINE_SMOOTH_HINT */ + { 18075, 0x00000B24 }, /* GL_LINE_STIPPLE */ + { 18091, 0x00000B25 }, /* GL_LINE_STIPPLE_PATTERN */ + { 18115, 0x00000B26 }, /* GL_LINE_STIPPLE_REPEAT */ + { 18138, 0x00000003 }, /* GL_LINE_STRIP */ + { 18152, 0x0000000B }, /* GL_LINE_STRIP_ADJACENCY */ + { 18176, 0x0000000B }, /* GL_LINE_STRIP_ADJACENCY_ARB */ + { 18204, 0x00000702 }, /* GL_LINE_TOKEN */ + { 18218, 0x00000B21 }, /* GL_LINE_WIDTH */ + { 18232, 0x00000B23 }, /* GL_LINE_WIDTH_GRANULARITY */ + { 18258, 0x00000B22 }, /* GL_LINE_WIDTH_RANGE */ + { 18278, 0x00008B82 }, /* GL_LINK_STATUS */ + { 18293, 0x00000B32 }, /* GL_LIST_BASE */ + { 18306, 0x00020000 }, /* GL_LIST_BIT */ + { 18318, 0x00000B33 }, /* GL_LIST_INDEX */ + { 18332, 0x00000B30 }, /* GL_LIST_MODE */ + { 18345, 0x00000101 }, /* GL_LOAD */ + { 18353, 0x00000BF1 }, /* GL_LOGIC_OP */ + { 18365, 0x00000BF0 }, /* GL_LOGIC_OP_MODE */ + { 18382, 0x00008252 }, /* GL_LOSE_CONTEXT_ON_RESET_ARB */ + { 18411, 0x00008CA1 }, /* GL_LOWER_LEFT */ + { 18425, 0x00008DF0 }, /* GL_LOW_FLOAT */ + { 18438, 0x00008DF3 }, /* GL_LOW_INT */ + { 18449, 0x00001909 }, /* GL_LUMINANCE */ + { 18462, 0x00008041 }, /* GL_LUMINANCE12 */ + { 18477, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12 */ + { 18500, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12_EXT */ + { 18527, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4 */ + { 18549, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4_EXT */ + { 18575, 0x00008041 }, /* GL_LUMINANCE12_EXT */ + { 18594, 0x00008042 }, /* GL_LUMINANCE16 */ + { 18609, 0x00008D8C }, /* GL_LUMINANCE16I_EXT */ + { 18629, 0x00008D7A }, /* GL_LUMINANCE16UI_EXT */ + { 18650, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16 */ + { 18673, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16_EXT */ + { 18700, 0x00008042 }, /* GL_LUMINANCE16_EXT */ + { 18719, 0x00008D86 }, /* GL_LUMINANCE32I_EXT */ + { 18739, 0x00008D74 }, /* GL_LUMINANCE32UI_EXT */ + { 18760, 0x0000803F }, /* GL_LUMINANCE4 */ + { 18774, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4 */ + { 18795, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4_EXT */ + { 18820, 0x0000803F }, /* GL_LUMINANCE4_EXT */ + { 18838, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2 */ + { 18859, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2_EXT */ + { 18884, 0x00008040 }, /* GL_LUMINANCE8 */ + { 18898, 0x00008D92 }, /* GL_LUMINANCE8I_EXT */ + { 18917, 0x00008D80 }, /* GL_LUMINANCE8UI_EXT */ + { 18937, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8 */ + { 18958, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8_EXT */ + { 18983, 0x00008040 }, /* GL_LUMINANCE8_EXT */ + { 19001, 0x0000190A }, /* GL_LUMINANCE_ALPHA */ + { 19020, 0x00008D8D }, /* GL_LUMINANCE_ALPHA16I_EXT */ + { 19046, 0x00008D7B }, /* GL_LUMINANCE_ALPHA16UI_EXT */ + { 19073, 0x00008D87 }, /* GL_LUMINANCE_ALPHA32I_EXT */ + { 19099, 0x00008D75 }, /* GL_LUMINANCE_ALPHA32UI_EXT */ + { 19126, 0x00008D93 }, /* GL_LUMINANCE_ALPHA8I_EXT */ + { 19151, 0x00008D81 }, /* GL_LUMINANCE_ALPHA8UI_EXT */ + { 19177, 0x00008D9D }, /* GL_LUMINANCE_ALPHA_INTEGER_EXT */ + { 19208, 0x00008D9C }, /* GL_LUMINANCE_INTEGER_EXT */ + { 19233, 0x0000821B }, /* GL_MAJOR_VERSION */ + { 19250, 0x00000D90 }, /* GL_MAP1_COLOR_4 */ + { 19266, 0x00000DD0 }, /* GL_MAP1_GRID_DOMAIN */ + { 19286, 0x00000DD1 }, /* GL_MAP1_GRID_SEGMENTS */ + { 19308, 0x00000D91 }, /* GL_MAP1_INDEX */ + { 19322, 0x00000D92 }, /* GL_MAP1_NORMAL */ + { 19337, 0x00000D93 }, /* GL_MAP1_TEXTURE_COORD_1 */ + { 19361, 0x00000D94 }, /* GL_MAP1_TEXTURE_COORD_2 */ + { 19385, 0x00000D95 }, /* GL_MAP1_TEXTURE_COORD_3 */ + { 19409, 0x00000D96 }, /* GL_MAP1_TEXTURE_COORD_4 */ + { 19433, 0x00000D97 }, /* GL_MAP1_VERTEX_3 */ + { 19450, 0x00000D98 }, /* GL_MAP1_VERTEX_4 */ + { 19467, 0x00008660 }, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */ + { 19495, 0x0000866A }, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */ + { 19524, 0x0000866B }, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */ + { 19553, 0x0000866C }, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */ + { 19582, 0x0000866D }, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */ + { 19611, 0x0000866E }, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */ + { 19640, 0x0000866F }, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */ + { 19669, 0x00008661 }, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */ + { 19697, 0x00008662 }, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */ + { 19725, 0x00008663 }, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */ + { 19753, 0x00008664 }, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */ + { 19781, 0x00008665 }, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */ + { 19809, 0x00008666 }, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */ + { 19837, 0x00008667 }, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */ + { 19865, 0x00008668 }, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */ + { 19893, 0x00008669 }, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */ + { 19921, 0x00000DB0 }, /* GL_MAP2_COLOR_4 */ + { 19937, 0x00000DD2 }, /* GL_MAP2_GRID_DOMAIN */ + { 19957, 0x00000DD3 }, /* GL_MAP2_GRID_SEGMENTS */ + { 19979, 0x00000DB1 }, /* GL_MAP2_INDEX */ + { 19993, 0x00000DB2 }, /* GL_MAP2_NORMAL */ + { 20008, 0x00000DB3 }, /* GL_MAP2_TEXTURE_COORD_1 */ + { 20032, 0x00000DB4 }, /* GL_MAP2_TEXTURE_COORD_2 */ + { 20056, 0x00000DB5 }, /* GL_MAP2_TEXTURE_COORD_3 */ + { 20080, 0x00000DB6 }, /* GL_MAP2_TEXTURE_COORD_4 */ + { 20104, 0x00000DB7 }, /* GL_MAP2_VERTEX_3 */ + { 20121, 0x00000DB8 }, /* GL_MAP2_VERTEX_4 */ + { 20138, 0x00008670 }, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */ + { 20166, 0x0000867A }, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */ + { 20195, 0x0000867B }, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */ + { 20224, 0x0000867C }, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */ + { 20253, 0x0000867D }, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */ + { 20282, 0x0000867E }, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */ + { 20311, 0x0000867F }, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */ + { 20340, 0x00008671 }, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */ + { 20368, 0x00008672 }, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */ + { 20396, 0x00008673 }, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */ + { 20424, 0x00008674 }, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */ + { 20452, 0x00008675 }, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */ + { 20480, 0x00008676 }, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */ + { 20508, 0x00008677 }, /* GL_MAP2_VERTEX_ATTRIB7_4_NV */ + { 20536, 0x00008678 }, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */ + { 20564, 0x00008679 }, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */ + { 20592, 0x00000D10 }, /* GL_MAP_COLOR */ + { 20605, 0x00000010 }, /* GL_MAP_FLUSH_EXPLICIT_BIT */ + { 20631, 0x00000008 }, /* GL_MAP_INVALIDATE_BUFFER_BIT */ + { 20660, 0x00000004 }, /* GL_MAP_INVALIDATE_RANGE_BIT */ + { 20688, 0x00000001 }, /* GL_MAP_READ_BIT */ + { 20704, 0x00000D11 }, /* GL_MAP_STENCIL */ + { 20719, 0x00000020 }, /* GL_MAP_UNSYNCHRONIZED_BIT */ + { 20745, 0x00000002 }, /* GL_MAP_WRITE_BIT */ + { 20762, 0x000088C0 }, /* GL_MATRIX0_ARB */ + { 20777, 0x00008630 }, /* GL_MATRIX0_NV */ + { 20791, 0x000088CA }, /* GL_MATRIX10_ARB */ + { 20807, 0x000088CB }, /* GL_MATRIX11_ARB */ + { 20823, 0x000088CC }, /* GL_MATRIX12_ARB */ + { 20839, 0x000088CD }, /* GL_MATRIX13_ARB */ + { 20855, 0x000088CE }, /* GL_MATRIX14_ARB */ + { 20871, 0x000088CF }, /* GL_MATRIX15_ARB */ + { 20887, 0x000088D0 }, /* GL_MATRIX16_ARB */ + { 20903, 0x000088D1 }, /* GL_MATRIX17_ARB */ + { 20919, 0x000088D2 }, /* GL_MATRIX18_ARB */ + { 20935, 0x000088D3 }, /* GL_MATRIX19_ARB */ + { 20951, 0x000088C1 }, /* GL_MATRIX1_ARB */ + { 20966, 0x00008631 }, /* GL_MATRIX1_NV */ + { 20980, 0x000088D4 }, /* GL_MATRIX20_ARB */ + { 20996, 0x000088D5 }, /* GL_MATRIX21_ARB */ + { 21012, 0x000088D6 }, /* GL_MATRIX22_ARB */ + { 21028, 0x000088D7 }, /* GL_MATRIX23_ARB */ + { 21044, 0x000088D8 }, /* GL_MATRIX24_ARB */ + { 21060, 0x000088D9 }, /* GL_MATRIX25_ARB */ + { 21076, 0x000088DA }, /* GL_MATRIX26_ARB */ + { 21092, 0x000088DB }, /* GL_MATRIX27_ARB */ + { 21108, 0x000088DC }, /* GL_MATRIX28_ARB */ + { 21124, 0x000088DD }, /* GL_MATRIX29_ARB */ + { 21140, 0x000088C2 }, /* GL_MATRIX2_ARB */ + { 21155, 0x00008632 }, /* GL_MATRIX2_NV */ + { 21169, 0x000088DE }, /* GL_MATRIX30_ARB */ + { 21185, 0x000088DF }, /* GL_MATRIX31_ARB */ + { 21201, 0x000088C3 }, /* GL_MATRIX3_ARB */ + { 21216, 0x00008633 }, /* GL_MATRIX3_NV */ + { 21230, 0x000088C4 }, /* GL_MATRIX4_ARB */ + { 21245, 0x00008634 }, /* GL_MATRIX4_NV */ + { 21259, 0x000088C5 }, /* GL_MATRIX5_ARB */ + { 21274, 0x00008635 }, /* GL_MATRIX5_NV */ + { 21288, 0x000088C6 }, /* GL_MATRIX6_ARB */ + { 21303, 0x00008636 }, /* GL_MATRIX6_NV */ + { 21317, 0x000088C7 }, /* GL_MATRIX7_ARB */ + { 21332, 0x00008637 }, /* GL_MATRIX7_NV */ + { 21346, 0x000088C8 }, /* GL_MATRIX8_ARB */ + { 21361, 0x000088C9 }, /* GL_MATRIX9_ARB */ + { 21376, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_ARB */ + { 21402, 0x00008B9E }, /* GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES */ + { 21443, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_OES */ + { 21469, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */ + { 21503, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_OES */ + { 21537, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */ + { 21568, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_OES */ + { 21599, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */ + { 21632, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_OES */ + { 21665, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */ + { 21696, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_OES */ + { 21727, 0x00000BA0 }, /* GL_MATRIX_MODE */ + { 21742, 0x00008840 }, /* GL_MATRIX_PALETTE_ARB */ + { 21764, 0x00008840 }, /* GL_MATRIX_PALETTE_OES */ + { 21786, 0x00008008 }, /* GL_MAX */ + { 21793, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE */ + { 21816, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE_OES */ + { 21843, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS */ + { 21871, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */ + { 21903, 0x00000D35 }, /* GL_MAX_ATTRIB_STACK_DEPTH */ + { 21929, 0x00000D3B }, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */ + { 21962, 0x00008177 }, /* GL_MAX_CLIPMAP_DEPTH_SGIX */ + { 21988, 0x00008178 }, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */ + { 22022, 0x00000D32 }, /* GL_MAX_CLIP_DISTANCES */ + { 22044, 0x00000D32 }, /* GL_MAX_CLIP_PLANES */ + { 22063, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS */ + { 22088, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS_EXT */ + { 22117, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */ + { 22149, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */ + { 22185, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */ + { 22221, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */ + { 22261, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT */ + { 22287, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT_EXT */ + { 22317, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH */ + { 22342, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH_EXT */ + { 22371, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */ + { 22400, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */ + { 22433, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES */ + { 22466, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS */ + { 22486, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ARB */ + { 22510, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ATI */ + { 22534, 0x000080E9 }, /* GL_MAX_ELEMENTS_INDICES */ + { 22558, 0x000080E8 }, /* GL_MAX_ELEMENTS_VERTICES */ + { 22583, 0x00000D30 }, /* GL_MAX_EVAL_ORDER */ + { 22601, 0x00008008 }, /* GL_MAX_EXT */ + { 22612, 0x00009125 }, /* GL_MAX_FRAGMENT_INPUT_COMPONENTS */ + { 22645, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */ + { 22680, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */ + { 22719, 0x00008DFD }, /* GL_MAX_FRAGMENT_UNIFORM_VECTORS */ + { 22751, 0x00009123 }, /* GL_MAX_GEOMETRY_INPUT_COMPONENTS */ + { 22784, 0x00009124 }, /* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS */ + { 22818, 0x00008DE0 }, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES */ + { 22850, 0x00008DE0 }, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB */ + { 22886, 0x00008C29 }, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS */ + { 22922, 0x00008C29 }, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB */ + { 22962, 0x00008DE1 }, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS */ + { 23002, 0x00008DE1 }, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB */ + { 23046, 0x00008DDF }, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS */ + { 23081, 0x00008DDF }, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB */ + { 23120, 0x00008DDD }, /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB */ + { 23159, 0x00000D31 }, /* GL_MAX_LIGHTS */ + { 23173, 0x00000B31 }, /* GL_MAX_LIST_NESTING */ + { 23193, 0x00008841 }, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */ + { 23231, 0x00000D36 }, /* GL_MAX_MODELVIEW_STACK_DEPTH */ + { 23260, 0x00000D37 }, /* GL_MAX_NAME_STACK_DEPTH */ + { 23284, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_ARB */ + { 23312, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_OES */ + { 23340, 0x00000D34 }, /* GL_MAX_PIXEL_MAP_TABLE */ + { 23363, 0x000088B1 }, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */ + { 23400, 0x0000880B }, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */ + { 23436, 0x000088AD }, /* GL_MAX_PROGRAM_ATTRIBS_ARB */ + { 23463, 0x000088F5 }, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */ + { 23492, 0x000088B5 }, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */ + { 23526, 0x000088F4 }, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ + { 23562, 0x000088F6 }, /* GL_MAX_PROGRAM_IF_DEPTH_NV */ + { 23589, 0x000088A1 }, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */ + { 23621, 0x000088B4 }, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */ + { 23657, 0x000088F8 }, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */ + { 23686, 0x000088F7 }, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */ + { 23715, 0x0000862F }, /* GL_MAX_PROGRAM_MATRICES_ARB */ + { 23743, 0x0000862E }, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */ + { 23781, 0x000088B3 }, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ + { 23825, 0x0000880E }, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ + { 23868, 0x000088AF }, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */ + { 23902, 0x000088A3 }, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ + { 23941, 0x000088AB }, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */ + { 23978, 0x000088A7 }, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */ + { 24016, 0x00008810 }, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ + { 24059, 0x0000880F }, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ + { 24102, 0x000088A9 }, /* GL_MAX_PROGRAM_PARAMETERS_ARB */ + { 24132, 0x000088A5 }, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */ + { 24163, 0x00008905 }, /* GL_MAX_PROGRAM_TEXEL_OFFSET */ + { 24191, 0x00008905 }, /* GL_MAX_PROGRAM_TEXEL_OFFSET_EXT */ + { 24223, 0x0000880D }, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */ + { 24259, 0x0000880C }, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */ + { 24295, 0x00000D38 }, /* GL_MAX_PROJECTION_STACK_DEPTH */ + { 24325, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE */ + { 24355, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */ + { 24389, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */ + { 24422, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE */ + { 24447, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_EXT */ + { 24476, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_OES */ + { 24505, 0x00008D57 }, /* GL_MAX_SAMPLES */ + { 24520, 0x00008D57 }, /* GL_MAX_SAMPLES_EXT */ + { 24539, 0x00009111 }, /* GL_MAX_SERVER_WAIT_TIMEOUT */ + { 24566, 0x00008504 }, /* GL_MAX_SHININESS_NV */ + { 24586, 0x00008505 }, /* GL_MAX_SPOT_EXPONENT_NV */ + { 24610, 0x00008C2B }, /* GL_MAX_TEXTURE_BUFFER_SIZE */ + { 24637, 0x00008C2B }, /* GL_MAX_TEXTURE_BUFFER_SIZE_ARB */ + { 24668, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS */ + { 24690, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS_ARB */ + { 24716, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS */ + { 24743, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */ + { 24774, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS */ + { 24798, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS_EXT */ + { 24826, 0x000084FF }, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */ + { 24860, 0x00000D33 }, /* GL_MAX_TEXTURE_SIZE */ + { 24880, 0x00000D39 }, /* GL_MAX_TEXTURE_STACK_DEPTH */ + { 24907, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS */ + { 24928, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS_ARB */ + { 24953, 0x0000862F }, /* GL_MAX_TRACK_MATRICES_NV */ + { 24978, 0x0000862E }, /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */ + { 25013, 0x00008C8A }, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS */ + { 25062, 0x00008C8A }, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT */ + { 25115, 0x00008C8B }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS */ + { 25158, 0x00008C8B }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT */ + { 25205, 0x00008C80 }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS */ + { 25251, 0x00008C80 }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT */ + { 25301, 0x00008B4B }, /* GL_MAX_VARYING_COMPONENTS */ + { 25327, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS */ + { 25349, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS_ARB */ + { 25375, 0x00008DFC }, /* GL_MAX_VARYING_VECTORS */ + { 25398, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS */ + { 25420, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS_ARB */ + { 25446, 0x00009122 }, /* GL_MAX_VERTEX_OUTPUT_COMPONENTS */ + { 25478, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */ + { 25512, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ + { 25550, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */ + { 25583, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */ + { 25620, 0x00008DFB }, /* GL_MAX_VERTEX_UNIFORM_VECTORS */ + { 25650, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_ARB */ + { 25674, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_OES */ + { 25698, 0x00008DDE }, /* GL_MAX_VERTEX_VARYING_COMPONENTS_ARB */ + { 25735, 0x00000D3A }, /* GL_MAX_VIEWPORT_DIMS */ + { 25756, 0x00008DF1 }, /* GL_MEDIUM_FLOAT */ + { 25772, 0x00008DF4 }, /* GL_MEDIUM_INT */ + { 25786, 0x00008007 }, /* GL_MIN */ + { 25793, 0x0000802E }, /* GL_MINMAX */ + { 25803, 0x0000802E }, /* GL_MINMAX_EXT */ + { 25817, 0x0000802F }, /* GL_MINMAX_FORMAT */ + { 25834, 0x0000802F }, /* GL_MINMAX_FORMAT_EXT */ + { 25855, 0x00008030 }, /* GL_MINMAX_SINK */ + { 25870, 0x00008030 }, /* GL_MINMAX_SINK_EXT */ + { 25889, 0x0000821C }, /* GL_MINOR_VERSION */ + { 25906, 0x00008007 }, /* GL_MIN_EXT */ + { 25917, 0x00008904 }, /* GL_MIN_PROGRAM_TEXEL_OFFSET */ + { 25945, 0x00008904 }, /* GL_MIN_PROGRAM_TEXEL_OFFSET_EXT */ + { 25977, 0x00008370 }, /* GL_MIRRORED_REPEAT */ + { 25996, 0x00008370 }, /* GL_MIRRORED_REPEAT_ARB */ + { 26019, 0x00008370 }, /* GL_MIRRORED_REPEAT_IBM */ + { 26042, 0x00008742 }, /* GL_MIRROR_CLAMP_ATI */ + { 26062, 0x00008742 }, /* GL_MIRROR_CLAMP_EXT */ + { 26082, 0x00008912 }, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */ + { 26112, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_ATI */ + { 26140, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */ + { 26168, 0x00001700 }, /* GL_MODELVIEW */ + { 26181, 0x00001700 }, /* GL_MODELVIEW0_ARB */ + { 26199, 0x0000872A }, /* GL_MODELVIEW10_ARB */ + { 26218, 0x0000872B }, /* GL_MODELVIEW11_ARB */ + { 26237, 0x0000872C }, /* GL_MODELVIEW12_ARB */ + { 26256, 0x0000872D }, /* GL_MODELVIEW13_ARB */ + { 26275, 0x0000872E }, /* GL_MODELVIEW14_ARB */ + { 26294, 0x0000872F }, /* GL_MODELVIEW15_ARB */ + { 26313, 0x00008730 }, /* GL_MODELVIEW16_ARB */ + { 26332, 0x00008731 }, /* GL_MODELVIEW17_ARB */ + { 26351, 0x00008732 }, /* GL_MODELVIEW18_ARB */ + { 26370, 0x00008733 }, /* GL_MODELVIEW19_ARB */ + { 26389, 0x0000850A }, /* GL_MODELVIEW1_ARB */ + { 26407, 0x00008734 }, /* GL_MODELVIEW20_ARB */ + { 26426, 0x00008735 }, /* GL_MODELVIEW21_ARB */ + { 26445, 0x00008736 }, /* GL_MODELVIEW22_ARB */ + { 26464, 0x00008737 }, /* GL_MODELVIEW23_ARB */ + { 26483, 0x00008738 }, /* GL_MODELVIEW24_ARB */ + { 26502, 0x00008739 }, /* GL_MODELVIEW25_ARB */ + { 26521, 0x0000873A }, /* GL_MODELVIEW26_ARB */ + { 26540, 0x0000873B }, /* GL_MODELVIEW27_ARB */ + { 26559, 0x0000873C }, /* GL_MODELVIEW28_ARB */ + { 26578, 0x0000873D }, /* GL_MODELVIEW29_ARB */ + { 26597, 0x00008722 }, /* GL_MODELVIEW2_ARB */ + { 26615, 0x0000873E }, /* GL_MODELVIEW30_ARB */ + { 26634, 0x0000873F }, /* GL_MODELVIEW31_ARB */ + { 26653, 0x00008723 }, /* GL_MODELVIEW3_ARB */ + { 26671, 0x00008724 }, /* GL_MODELVIEW4_ARB */ + { 26689, 0x00008725 }, /* GL_MODELVIEW5_ARB */ + { 26707, 0x00008726 }, /* GL_MODELVIEW6_ARB */ + { 26725, 0x00008727 }, /* GL_MODELVIEW7_ARB */ + { 26743, 0x00008728 }, /* GL_MODELVIEW8_ARB */ + { 26761, 0x00008729 }, /* GL_MODELVIEW9_ARB */ + { 26779, 0x00000BA6 }, /* GL_MODELVIEW_MATRIX */ + { 26799, 0x0000898D }, /* GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES */ + { 26841, 0x00008629 }, /* GL_MODELVIEW_PROJECTION_NV */ + { 26868, 0x00000BA3 }, /* GL_MODELVIEW_STACK_DEPTH */ + { 26893, 0x00002100 }, /* GL_MODULATE */ + { 26905, 0x00008744 }, /* GL_MODULATE_ADD_ATI */ + { 26925, 0x00008745 }, /* GL_MODULATE_SIGNED_ADD_ATI */ + { 26952, 0x00008746 }, /* GL_MODULATE_SUBTRACT_ATI */ + { 26977, 0x00000103 }, /* GL_MULT */ + { 26985, 0x0000809D }, /* GL_MULTISAMPLE */ + { 27000, 0x000086B2 }, /* GL_MULTISAMPLE_3DFX */ + { 27020, 0x0000809D }, /* GL_MULTISAMPLE_ARB */ + { 27039, 0x20000000 }, /* GL_MULTISAMPLE_BIT */ + { 27058, 0x20000000 }, /* GL_MULTISAMPLE_BIT_3DFX */ + { 27082, 0x20000000 }, /* GL_MULTISAMPLE_BIT_ARB */ + { 27105, 0x00008534 }, /* GL_MULTISAMPLE_FILTER_HINT_NV */ + { 27135, 0x00002A25 }, /* GL_N3F_V3F */ + { 27146, 0x00000D70 }, /* GL_NAME_STACK_DEPTH */ + { 27166, 0x0000150E }, /* GL_NAND */ + { 27174, 0x00002600 }, /* GL_NEAREST */ + { 27185, 0x0000844E }, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */ + { 27216, 0x0000844D }, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */ + { 27248, 0x00002702 }, /* GL_NEAREST_MIPMAP_LINEAR */ + { 27273, 0x00002700 }, /* GL_NEAREST_MIPMAP_NEAREST */ + { 27299, 0x00000200 }, /* GL_NEVER */ + { 27308, 0x00001102 }, /* GL_NICEST */ + { 27318, 0x00000000 }, /* GL_NONE */ + { 27326, 0x00000000 }, /* GL_NONE_OES */ + { 27338, 0x00001505 }, /* GL_NOOP */ + { 27346, 0x00001508 }, /* GL_NOR */ + { 27353, 0x00000BA1 }, /* GL_NORMALIZE */ + { 27366, 0x00008075 }, /* GL_NORMAL_ARRAY */ + { 27382, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING */ + { 27413, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */ + { 27448, 0x0000808F }, /* GL_NORMAL_ARRAY_POINTER */ + { 27472, 0x0000807F }, /* GL_NORMAL_ARRAY_STRIDE */ + { 27495, 0x0000807E }, /* GL_NORMAL_ARRAY_TYPE */ + { 27516, 0x00008511 }, /* GL_NORMAL_MAP */ + { 27530, 0x00008511 }, /* GL_NORMAL_MAP_ARB */ + { 27548, 0x00008511 }, /* GL_NORMAL_MAP_NV */ + { 27565, 0x00008511 }, /* GL_NORMAL_MAP_OES */ + { 27583, 0x00000205 }, /* GL_NOTEQUAL */ + { 27595, 0x00000000 }, /* GL_NO_ERROR */ + { 27607, 0x00008261 }, /* GL_NO_RESET_NOTIFICATION_ARB */ + { 27636, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */ + { 27670, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */ + { 27708, 0x0000821D }, /* GL_NUM_EXTENSIONS */ + { 27726, 0x000087FE }, /* GL_NUM_PROGRAM_BINARY_FORMATS_OES */ + { 27760, 0x00008DF9 }, /* GL_NUM_SHADER_BINARY_FORMATS */ + { 27789, 0x00008B89 }, /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */ + { 27821, 0x00008B8A }, /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */ + { 27863, 0x00008B86 }, /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */ + { 27893, 0x00008B87 }, /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */ + { 27933, 0x00008B85 }, /* GL_OBJECT_ATTACHED_OBJECTS_ARB */ + { 27964, 0x00008B81 }, /* GL_OBJECT_COMPILE_STATUS_ARB */ + { 27993, 0x00008B80 }, /* GL_OBJECT_DELETE_STATUS_ARB */ + { 28021, 0x00008B84 }, /* GL_OBJECT_INFO_LOG_LENGTH_ARB */ + { 28051, 0x00002401 }, /* GL_OBJECT_LINEAR */ + { 28068, 0x00008B82 }, /* GL_OBJECT_LINK_STATUS_ARB */ + { 28094, 0x00002501 }, /* GL_OBJECT_PLANE */ + { 28110, 0x00008B88 }, /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */ + { 28145, 0x00008B4F }, /* GL_OBJECT_SUBTYPE_ARB */ + { 28167, 0x00009112 }, /* GL_OBJECT_TYPE */ + { 28182, 0x00008B4E }, /* GL_OBJECT_TYPE_ARB */ + { 28201, 0x00008B83 }, /* GL_OBJECT_VALIDATE_STATUS_ARB */ + { 28231, 0x00008165 }, /* GL_OCCLUSION_TEST_HP */ + { 28252, 0x00008166 }, /* GL_OCCLUSION_TEST_RESULT_HP */ + { 28280, 0x00000001 }, /* GL_ONE */ + { 28287, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA */ + { 28315, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */ + { 28347, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR */ + { 28375, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */ + { 28407, 0x00000305 }, /* GL_ONE_MINUS_DST_ALPHA */ + { 28430, 0x00000307 }, /* GL_ONE_MINUS_DST_COLOR */ + { 28453, 0x00000303 }, /* GL_ONE_MINUS_SRC_ALPHA */ + { 28476, 0x00000301 }, /* GL_ONE_MINUS_SRC_COLOR */ + { 28499, 0x00008598 }, /* GL_OPERAND0_ALPHA */ + { 28517, 0x00008598 }, /* GL_OPERAND0_ALPHA_ARB */ + { 28539, 0x00008598 }, /* GL_OPERAND0_ALPHA_EXT */ + { 28561, 0x00008590 }, /* GL_OPERAND0_RGB */ + { 28577, 0x00008590 }, /* GL_OPERAND0_RGB_ARB */ + { 28597, 0x00008590 }, /* GL_OPERAND0_RGB_EXT */ + { 28617, 0x00008599 }, /* GL_OPERAND1_ALPHA */ + { 28635, 0x00008599 }, /* GL_OPERAND1_ALPHA_ARB */ + { 28657, 0x00008599 }, /* GL_OPERAND1_ALPHA_EXT */ + { 28679, 0x00008591 }, /* GL_OPERAND1_RGB */ + { 28695, 0x00008591 }, /* GL_OPERAND1_RGB_ARB */ + { 28715, 0x00008591 }, /* GL_OPERAND1_RGB_EXT */ + { 28735, 0x0000859A }, /* GL_OPERAND2_ALPHA */ + { 28753, 0x0000859A }, /* GL_OPERAND2_ALPHA_ARB */ + { 28775, 0x0000859A }, /* GL_OPERAND2_ALPHA_EXT */ + { 28797, 0x00008592 }, /* GL_OPERAND2_RGB */ + { 28813, 0x00008592 }, /* GL_OPERAND2_RGB_ARB */ + { 28833, 0x00008592 }, /* GL_OPERAND2_RGB_EXT */ + { 28853, 0x0000859B }, /* GL_OPERAND3_ALPHA_NV */ + { 28874, 0x00008593 }, /* GL_OPERAND3_RGB_NV */ + { 28893, 0x00001507 }, /* GL_OR */ + { 28899, 0x00000A01 }, /* GL_ORDER */ + { 28908, 0x0000150D }, /* GL_OR_INVERTED */ + { 28923, 0x0000150B }, /* GL_OR_REVERSE */ + { 28937, 0x00000505 }, /* GL_OUT_OF_MEMORY */ + { 28954, 0x00000D05 }, /* GL_PACK_ALIGNMENT */ + { 28972, 0x0000806C }, /* GL_PACK_IMAGE_HEIGHT */ + { 28993, 0x00008758 }, /* GL_PACK_INVERT_MESA */ + { 29013, 0x00000D01 }, /* GL_PACK_LSB_FIRST */ + { 29031, 0x00000D02 }, /* GL_PACK_ROW_LENGTH */ + { 29050, 0x0000806B }, /* GL_PACK_SKIP_IMAGES */ + { 29070, 0x00000D04 }, /* GL_PACK_SKIP_PIXELS */ + { 29090, 0x00000D03 }, /* GL_PACK_SKIP_ROWS */ + { 29108, 0x00000D00 }, /* GL_PACK_SWAP_BYTES */ + { 29127, 0x00008B92 }, /* GL_PALETTE4_R5_G6_B5_OES */ + { 29152, 0x00008B94 }, /* GL_PALETTE4_RGB5_A1_OES */ + { 29176, 0x00008B90 }, /* GL_PALETTE4_RGB8_OES */ + { 29197, 0x00008B93 }, /* GL_PALETTE4_RGBA4_OES */ + { 29219, 0x00008B91 }, /* GL_PALETTE4_RGBA8_OES */ + { 29241, 0x00008B97 }, /* GL_PALETTE8_R5_G6_B5_OES */ + { 29266, 0x00008B99 }, /* GL_PALETTE8_RGB5_A1_OES */ + { 29290, 0x00008B95 }, /* GL_PALETTE8_RGB8_OES */ + { 29311, 0x00008B98 }, /* GL_PALETTE8_RGBA4_OES */ + { 29333, 0x00008B96 }, /* GL_PALETTE8_RGBA8_OES */ + { 29355, 0x00000700 }, /* GL_PASS_THROUGH_TOKEN */ + { 29377, 0x00000C50 }, /* GL_PERSPECTIVE_CORRECTION_HINT */ + { 29408, 0x00000C79 }, /* GL_PIXEL_MAP_A_TO_A */ + { 29428, 0x00000CB9 }, /* GL_PIXEL_MAP_A_TO_A_SIZE */ + { 29453, 0x00000C78 }, /* GL_PIXEL_MAP_B_TO_B */ + { 29473, 0x00000CB8 }, /* GL_PIXEL_MAP_B_TO_B_SIZE */ + { 29498, 0x00000C77 }, /* GL_PIXEL_MAP_G_TO_G */ + { 29518, 0x00000CB7 }, /* GL_PIXEL_MAP_G_TO_G_SIZE */ + { 29543, 0x00000C75 }, /* GL_PIXEL_MAP_I_TO_A */ + { 29563, 0x00000CB5 }, /* GL_PIXEL_MAP_I_TO_A_SIZE */ + { 29588, 0x00000C74 }, /* GL_PIXEL_MAP_I_TO_B */ + { 29608, 0x00000CB4 }, /* GL_PIXEL_MAP_I_TO_B_SIZE */ + { 29633, 0x00000C73 }, /* GL_PIXEL_MAP_I_TO_G */ + { 29653, 0x00000CB3 }, /* GL_PIXEL_MAP_I_TO_G_SIZE */ + { 29678, 0x00000C70 }, /* GL_PIXEL_MAP_I_TO_I */ + { 29698, 0x00000CB0 }, /* GL_PIXEL_MAP_I_TO_I_SIZE */ + { 29723, 0x00000C72 }, /* GL_PIXEL_MAP_I_TO_R */ + { 29743, 0x00000CB2 }, /* GL_PIXEL_MAP_I_TO_R_SIZE */ + { 29768, 0x00000C76 }, /* GL_PIXEL_MAP_R_TO_R */ + { 29788, 0x00000CB6 }, /* GL_PIXEL_MAP_R_TO_R_SIZE */ + { 29813, 0x00000C71 }, /* GL_PIXEL_MAP_S_TO_S */ + { 29833, 0x00000CB1 }, /* GL_PIXEL_MAP_S_TO_S_SIZE */ + { 29858, 0x00000020 }, /* GL_PIXEL_MODE_BIT */ + { 29876, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER */ + { 29897, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING */ + { 29926, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */ + { 29959, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER_EXT */ + { 29984, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER */ + { 30007, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING */ + { 30038, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */ + { 30073, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER_EXT */ + { 30100, 0x00001B00 }, /* GL_POINT */ + { 30109, 0x00000000 }, /* GL_POINTS */ + { 30119, 0x00000002 }, /* GL_POINT_BIT */ + { 30132, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION */ + { 30162, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_ARB */ + { 30196, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_EXT */ + { 30230, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_SGIS */ + { 30265, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE */ + { 30294, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */ + { 30327, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */ + { 30360, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_SGIS */ + { 30394, 0x00000B11 }, /* GL_POINT_SIZE */ + { 30408, 0x00008B9F }, /* GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES */ + { 30447, 0x00008B9C }, /* GL_POINT_SIZE_ARRAY_OES */ + { 30471, 0x0000898C }, /* GL_POINT_SIZE_ARRAY_POINTER_OES */ + { 30503, 0x0000898B }, /* GL_POINT_SIZE_ARRAY_STRIDE_OES */ + { 30534, 0x0000898A }, /* GL_POINT_SIZE_ARRAY_TYPE_OES */ + { 30563, 0x00000B13 }, /* GL_POINT_SIZE_GRANULARITY */ + { 30589, 0x00008127 }, /* GL_POINT_SIZE_MAX */ + { 30607, 0x00008127 }, /* GL_POINT_SIZE_MAX_ARB */ + { 30629, 0x00008127 }, /* GL_POINT_SIZE_MAX_EXT */ + { 30651, 0x00008127 }, /* GL_POINT_SIZE_MAX_SGIS */ + { 30674, 0x00008126 }, /* GL_POINT_SIZE_MIN */ + { 30692, 0x00008126 }, /* GL_POINT_SIZE_MIN_ARB */ + { 30714, 0x00008126 }, /* GL_POINT_SIZE_MIN_EXT */ + { 30736, 0x00008126 }, /* GL_POINT_SIZE_MIN_SGIS */ + { 30759, 0x00000B12 }, /* GL_POINT_SIZE_RANGE */ + { 30779, 0x00000B10 }, /* GL_POINT_SMOOTH */ + { 30795, 0x00000C51 }, /* GL_POINT_SMOOTH_HINT */ + { 30816, 0x00008861 }, /* GL_POINT_SPRITE */ + { 30832, 0x00008861 }, /* GL_POINT_SPRITE_ARB */ + { 30852, 0x00008CA0 }, /* GL_POINT_SPRITE_COORD_ORIGIN */ + { 30881, 0x00008861 }, /* GL_POINT_SPRITE_NV */ + { 30900, 0x00008861 }, /* GL_POINT_SPRITE_OES */ + { 30920, 0x00008863 }, /* GL_POINT_SPRITE_R_MODE_NV */ + { 30946, 0x00000701 }, /* GL_POINT_TOKEN */ + { 30961, 0x00000009 }, /* GL_POLYGON */ + { 30972, 0x00000008 }, /* GL_POLYGON_BIT */ + { 30987, 0x00000B40 }, /* GL_POLYGON_MODE */ + { 31003, 0x00008039 }, /* GL_POLYGON_OFFSET_BIAS */ + { 31026, 0x00008038 }, /* GL_POLYGON_OFFSET_FACTOR */ + { 31051, 0x00008037 }, /* GL_POLYGON_OFFSET_FILL */ + { 31074, 0x00002A02 }, /* GL_POLYGON_OFFSET_LINE */ + { 31097, 0x00002A01 }, /* GL_POLYGON_OFFSET_POINT */ + { 31121, 0x00002A00 }, /* GL_POLYGON_OFFSET_UNITS */ + { 31145, 0x00000B41 }, /* GL_POLYGON_SMOOTH */ + { 31163, 0x00000C53 }, /* GL_POLYGON_SMOOTH_HINT */ + { 31186, 0x00000B42 }, /* GL_POLYGON_STIPPLE */ + { 31205, 0x00000010 }, /* GL_POLYGON_STIPPLE_BIT */ + { 31228, 0x00000703 }, /* GL_POLYGON_TOKEN */ + { 31245, 0x00001203 }, /* GL_POSITION */ + { 31257, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */ + { 31289, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */ + { 31325, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */ + { 31358, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */ + { 31395, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */ + { 31426, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */ + { 31461, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */ + { 31493, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */ + { 31529, 0x000080D2 }, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ + { 31562, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */ + { 31594, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */ + { 31630, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */ + { 31663, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */ + { 31700, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS */ + { 31730, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */ + { 31764, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE */ + { 31795, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */ + { 31830, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS */ + { 31861, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */ + { 31896, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE */ + { 31928, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */ + { 31964, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS */ + { 31994, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */ + { 32028, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE */ + { 32059, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */ + { 32094, 0x000080D1 }, /* GL_POST_CONVOLUTION_COLOR_TABLE */ + { 32126, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS */ + { 32157, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */ + { 32192, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE */ + { 32224, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */ + { 32260, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS */ + { 32289, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS_EXT */ + { 32322, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE */ + { 32352, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE_EXT */ + { 32386, 0x0000817B }, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */ + { 32425, 0x00008179 }, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */ + { 32458, 0x0000817C }, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */ + { 32498, 0x0000817A }, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */ + { 32532, 0x00008578 }, /* GL_PREVIOUS */ + { 32544, 0x00008578 }, /* GL_PREVIOUS_ARB */ + { 32560, 0x00008578 }, /* GL_PREVIOUS_EXT */ + { 32576, 0x00008577 }, /* GL_PRIMARY_COLOR */ + { 32593, 0x00008577 }, /* GL_PRIMARY_COLOR_ARB */ + { 32614, 0x00008577 }, /* GL_PRIMARY_COLOR_EXT */ + { 32635, 0x00008C87 }, /* GL_PRIMITIVES_GENERATED */ + { 32659, 0x00008C87 }, /* GL_PRIMITIVES_GENERATED_EXT */ + { 32687, 0x00008F9D }, /* GL_PRIMITIVE_RESTART */ + { 32708, 0x00008F9E }, /* GL_PRIMITIVE_RESTART_INDEX */ + { 32735, 0x00008559 }, /* GL_PRIMITIVE_RESTART_INDEX_NV */ + { 32765, 0x00008558 }, /* GL_PRIMITIVE_RESTART_NV */ + { 32789, 0x000088B0 }, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */ + { 32822, 0x00008805 }, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */ + { 32854, 0x000088AC }, /* GL_PROGRAM_ATTRIBS_ARB */ + { 32877, 0x000087FF }, /* GL_PROGRAM_BINARY_FORMATS_OES */ + { 32907, 0x00008741 }, /* GL_PROGRAM_BINARY_LENGTH_OES */ + { 32936, 0x00008677 }, /* GL_PROGRAM_BINDING_ARB */ + { 32959, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_ARB */ + { 32989, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_NV */ + { 33018, 0x00008874 }, /* GL_PROGRAM_ERROR_STRING_ARB */ + { 33046, 0x00008876 }, /* GL_PROGRAM_FORMAT_ARB */ + { 33068, 0x00008875 }, /* GL_PROGRAM_FORMAT_ASCII_ARB */ + { 33096, 0x000088A0 }, /* GL_PROGRAM_INSTRUCTIONS_ARB */ + { 33124, 0x00008627 }, /* GL_PROGRAM_LENGTH_ARB */ + { 33146, 0x00008627 }, /* GL_PROGRAM_LENGTH_NV */ + { 33167, 0x000088B2 }, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ + { 33207, 0x00008808 }, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ + { 33246, 0x000088AE }, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */ + { 33276, 0x000088A2 }, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ + { 33311, 0x000088AA }, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */ + { 33344, 0x000088A6 }, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */ + { 33378, 0x0000880A }, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ + { 33417, 0x00008809 }, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ + { 33456, 0x00008B40 }, /* GL_PROGRAM_OBJECT_ARB */ + { 33478, 0x000088A8 }, /* GL_PROGRAM_PARAMETERS_ARB */ + { 33504, 0x00008644 }, /* GL_PROGRAM_PARAMETER_NV */ + { 33528, 0x00008642 }, /* GL_PROGRAM_POINT_SIZE */ + { 33550, 0x00008642 }, /* GL_PROGRAM_POINT_SIZE_ARB */ + { 33576, 0x00008647 }, /* GL_PROGRAM_RESIDENT_NV */ + { 33599, 0x00008628 }, /* GL_PROGRAM_STRING_ARB */ + { 33621, 0x00008628 }, /* GL_PROGRAM_STRING_NV */ + { 33642, 0x00008646 }, /* GL_PROGRAM_TARGET_NV */ + { 33663, 0x000088A4 }, /* GL_PROGRAM_TEMPORARIES_ARB */ + { 33690, 0x00008807 }, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */ + { 33722, 0x00008806 }, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */ + { 33754, 0x000088B6 }, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */ + { 33789, 0x00001701 }, /* GL_PROJECTION */ + { 33803, 0x00000BA7 }, /* GL_PROJECTION_MATRIX */ + { 33824, 0x0000898E }, /* GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES */ + { 33867, 0x00000BA4 }, /* GL_PROJECTION_STACK_DEPTH */ + { 33893, 0x00008E4F }, /* GL_PROVOKING_VERTEX */ + { 33913, 0x00008E4F }, /* GL_PROVOKING_VERTEX_EXT */ + { 33937, 0x000080D3 }, /* GL_PROXY_COLOR_TABLE */ + { 33958, 0x00008025 }, /* GL_PROXY_HISTOGRAM */ + { 33977, 0x00008025 }, /* GL_PROXY_HISTOGRAM_EXT */ + { 34000, 0x000080D5 }, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */ + { 34039, 0x000080D4 }, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */ + { 34077, 0x00008063 }, /* GL_PROXY_TEXTURE_1D */ + { 34097, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY */ + { 34123, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */ + { 34153, 0x00008063 }, /* GL_PROXY_TEXTURE_1D_EXT */ + { 34177, 0x00008064 }, /* GL_PROXY_TEXTURE_2D */ + { 34197, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY */ + { 34223, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */ + { 34253, 0x00008064 }, /* GL_PROXY_TEXTURE_2D_EXT */ + { 34277, 0x00008070 }, /* GL_PROXY_TEXTURE_3D */ + { 34297, 0x000080BD }, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */ + { 34330, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP */ + { 34356, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */ + { 34386, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE */ + { 34413, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */ + { 34444, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_NV */ + { 34474, 0x00008A1D }, /* GL_PURGEABLE_APPLE */ + { 34493, 0x00002003 }, /* GL_Q */ + { 34498, 0x00001209 }, /* GL_QUADRATIC_ATTENUATION */ + { 34523, 0x00000007 }, /* GL_QUADS */ + { 34532, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */ + { 34576, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT */ + { 34624, 0x00008614 }, /* GL_QUAD_MESH_SUN */ + { 34641, 0x00000008 }, /* GL_QUAD_STRIP */ + { 34655, 0x00008E16 }, /* GL_QUERY_BY_REGION_NO_WAIT */ + { 34682, 0x00008E16 }, /* GL_QUERY_BY_REGION_NO_WAIT_NV */ + { 34712, 0x00008E15 }, /* GL_QUERY_BY_REGION_WAIT */ + { 34736, 0x00008E15 }, /* GL_QUERY_BY_REGION_WAIT_NV */ + { 34763, 0x00008864 }, /* GL_QUERY_COUNTER_BITS */ + { 34785, 0x00008864 }, /* GL_QUERY_COUNTER_BITS_ARB */ + { 34811, 0x00008E14 }, /* GL_QUERY_NO_WAIT */ + { 34828, 0x00008E14 }, /* GL_QUERY_NO_WAIT_NV */ + { 34848, 0x00008866 }, /* GL_QUERY_RESULT */ + { 34864, 0x00008866 }, /* GL_QUERY_RESULT_ARB */ + { 34884, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE */ + { 34910, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE_ARB */ + { 34940, 0x00008E13 }, /* GL_QUERY_WAIT */ + { 34954, 0x00008E13 }, /* GL_QUERY_WAIT_NV */ + { 34971, 0x00002002 }, /* GL_R */ + { 34976, 0x00008C3A }, /* GL_R11F_G11F_B10F */ + { 34994, 0x00008F98 }, /* GL_R16_SNORM */ + { 35007, 0x00002A10 }, /* GL_R3_G3_B2 */ + { 35019, 0x00008F94 }, /* GL_R8_SNORM */ + { 35031, 0x00008C89 }, /* GL_RASTERIZER_DISCARD */ + { 35053, 0x00008C89 }, /* GL_RASTERIZER_DISCARD_EXT */ + { 35079, 0x00019262 }, /* GL_RASTER_POSITION_UNCLIPPED_IBM */ + { 35112, 0x00000C02 }, /* GL_READ_BUFFER */ + { 35127, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER */ + { 35147, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING */ + { 35175, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING_EXT */ + { 35207, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER_EXT */ + { 35231, 0x000088B8 }, /* GL_READ_ONLY */ + { 35244, 0x000088B8 }, /* GL_READ_ONLY_ARB */ + { 35261, 0x000088BA }, /* GL_READ_WRITE */ + { 35275, 0x000088BA }, /* GL_READ_WRITE_ARB */ + { 35293, 0x00001903 }, /* GL_RED */ + { 35300, 0x00008016 }, /* GL_REDUCE */ + { 35310, 0x00008016 }, /* GL_REDUCE_EXT */ + { 35324, 0x00000D15 }, /* GL_RED_BIAS */ + { 35336, 0x00000D52 }, /* GL_RED_BITS */ + { 35348, 0x00008D94 }, /* GL_RED_INTEGER */ + { 35363, 0x00008D94 }, /* GL_RED_INTEGER_EXT */ + { 35382, 0x00000D14 }, /* GL_RED_SCALE */ + { 35395, 0x00008F90 }, /* GL_RED_SNORM */ + { 35408, 0x00008512 }, /* GL_REFLECTION_MAP */ + { 35426, 0x00008512 }, /* GL_REFLECTION_MAP_ARB */ + { 35448, 0x00008512 }, /* GL_REFLECTION_MAP_NV */ + { 35469, 0x00008512 }, /* GL_REFLECTION_MAP_OES */ + { 35491, 0x00008A19 }, /* GL_RELEASED_APPLE */ + { 35509, 0x00001C00 }, /* GL_RENDER */ + { 35519, 0x00008D41 }, /* GL_RENDERBUFFER */ + { 35535, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE */ + { 35562, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE_OES */ + { 35593, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING */ + { 35617, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_EXT */ + { 35645, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_OES */ + { 35673, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE */ + { 35699, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE_OES */ + { 35729, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE */ + { 35756, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE_OES */ + { 35787, 0x00008D41 }, /* GL_RENDERBUFFER_EXT */ + { 35807, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE */ + { 35834, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE_OES */ + { 35865, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT */ + { 35888, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_EXT */ + { 35915, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_OES */ + { 35942, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT */ + { 35974, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */ + { 36010, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_OES */ + { 36046, 0x00008D41 }, /* GL_RENDERBUFFER_OES */ + { 36066, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE */ + { 36091, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE_OES */ + { 36120, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES */ + { 36144, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES_EXT */ + { 36172, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE */ + { 36201, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE_OES */ + { 36234, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH */ + { 36256, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_EXT */ + { 36282, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_OES */ + { 36308, 0x00001F01 }, /* GL_RENDERER */ + { 36320, 0x00000C40 }, /* GL_RENDER_MODE */ + { 36335, 0x00002901 }, /* GL_REPEAT */ + { 36345, 0x00001E01 }, /* GL_REPLACE */ + { 36356, 0x00008062 }, /* GL_REPLACE_EXT */ + { 36371, 0x00008153 }, /* GL_REPLICATE_BORDER_HP */ + { 36394, 0x0000803A }, /* GL_RESCALE_NORMAL */ + { 36412, 0x0000803A }, /* GL_RESCALE_NORMAL_EXT */ + { 36434, 0x00008256 }, /* GL_RESET_NOTIFICATION_STRATEGY_ARB */ + { 36469, 0x00008A1B }, /* GL_RETAINED_APPLE */ + { 36487, 0x00000102 }, /* GL_RETURN */ + { 36497, 0x00008F99 }, /* GL_RG16_SNORM */ + { 36511, 0x00008F95 }, /* GL_RG8_SNORM */ + { 36524, 0x00001907 }, /* GL_RGB */ + { 36531, 0x00008052 }, /* GL_RGB10 */ + { 36540, 0x00008059 }, /* GL_RGB10_A2 */ + { 36552, 0x00008059 }, /* GL_RGB10_A2_EXT */ + { 36568, 0x00008052 }, /* GL_RGB10_EXT */ + { 36581, 0x00008053 }, /* GL_RGB12 */ + { 36590, 0x00008053 }, /* GL_RGB12_EXT */ + { 36603, 0x00008054 }, /* GL_RGB16 */ + { 36612, 0x0000881B }, /* GL_RGB16F */ + { 36622, 0x00008D89 }, /* GL_RGB16I */ + { 36632, 0x00008D89 }, /* GL_RGB16I_EXT */ + { 36646, 0x00008D77 }, /* GL_RGB16UI */ + { 36657, 0x00008D77 }, /* GL_RGB16UI_EXT */ + { 36672, 0x00008054 }, /* GL_RGB16_EXT */ + { 36685, 0x00008F9A }, /* GL_RGB16_SNORM */ + { 36700, 0x0000804E }, /* GL_RGB2_EXT */ + { 36712, 0x00008815 }, /* GL_RGB32F */ + { 36722, 0x00008D83 }, /* GL_RGB32I */ + { 36732, 0x00008D83 }, /* GL_RGB32I_EXT */ + { 36746, 0x00008D71 }, /* GL_RGB32UI */ + { 36757, 0x00008D71 }, /* GL_RGB32UI_EXT */ + { 36772, 0x0000804F }, /* GL_RGB4 */ + { 36780, 0x0000804F }, /* GL_RGB4_EXT */ + { 36792, 0x000083A1 }, /* GL_RGB4_S3TC */ + { 36805, 0x00008050 }, /* GL_RGB5 */ + { 36813, 0x00008D62 }, /* GL_RGB565 */ + { 36823, 0x00008D62 }, /* GL_RGB565_OES */ + { 36837, 0x00008057 }, /* GL_RGB5_A1 */ + { 36848, 0x00008057 }, /* GL_RGB5_A1_EXT */ + { 36863, 0x00008057 }, /* GL_RGB5_A1_OES */ + { 36878, 0x00008050 }, /* GL_RGB5_EXT */ + { 36890, 0x00008051 }, /* GL_RGB8 */ + { 36898, 0x00008D8F }, /* GL_RGB8I */ + { 36907, 0x00008D8F }, /* GL_RGB8I_EXT */ + { 36920, 0x00008D7D }, /* GL_RGB8UI */ + { 36930, 0x00008D7D }, /* GL_RGB8UI_EXT */ + { 36944, 0x00008051 }, /* GL_RGB8_EXT */ + { 36956, 0x00008051 }, /* GL_RGB8_OES */ + { 36968, 0x00008F96 }, /* GL_RGB8_SNORM */ + { 36982, 0x00008C3D }, /* GL_RGB9_E5 */ + { 36993, 0x00001908 }, /* GL_RGBA */ + { 37001, 0x0000805A }, /* GL_RGBA12 */ + { 37011, 0x0000805A }, /* GL_RGBA12_EXT */ + { 37025, 0x0000805B }, /* GL_RGBA16 */ + { 37035, 0x0000881A }, /* GL_RGBA16F */ + { 37046, 0x00008D88 }, /* GL_RGBA16I */ + { 37057, 0x00008D88 }, /* GL_RGBA16I_EXT */ + { 37072, 0x00008D76 }, /* GL_RGBA16UI */ + { 37084, 0x00008D76 }, /* GL_RGBA16UI_EXT */ + { 37100, 0x0000805B }, /* GL_RGBA16_EXT */ + { 37114, 0x00008F9B }, /* GL_RGBA16_SNORM */ + { 37130, 0x00008055 }, /* GL_RGBA2 */ + { 37139, 0x00008055 }, /* GL_RGBA2_EXT */ + { 37152, 0x00008814 }, /* GL_RGBA32F */ + { 37163, 0x00008D82 }, /* GL_RGBA32I */ + { 37174, 0x00008D82 }, /* GL_RGBA32I_EXT */ + { 37189, 0x00008D70 }, /* GL_RGBA32UI */ + { 37201, 0x00008D70 }, /* GL_RGBA32UI_EXT */ + { 37217, 0x00008056 }, /* GL_RGBA4 */ + { 37226, 0x000083A5 }, /* GL_RGBA4_DXT5_S3TC */ + { 37245, 0x00008056 }, /* GL_RGBA4_EXT */ + { 37258, 0x00008056 }, /* GL_RGBA4_OES */ + { 37271, 0x000083A3 }, /* GL_RGBA4_S3TC */ + { 37285, 0x00008058 }, /* GL_RGBA8 */ + { 37294, 0x00008D8E }, /* GL_RGBA8I */ + { 37304, 0x00008D8E }, /* GL_RGBA8I_EXT */ + { 37318, 0x00008D7C }, /* GL_RGBA8UI */ + { 37329, 0x00008D7C }, /* GL_RGBA8UI_EXT */ + { 37344, 0x00008058 }, /* GL_RGBA8_EXT */ + { 37357, 0x00008058 }, /* GL_RGBA8_OES */ + { 37370, 0x00008F97 }, /* GL_RGBA8_SNORM */ + { 37385, 0x000083A4 }, /* GL_RGBA_DXT5_S3TC */ + { 37403, 0x00008820 }, /* GL_RGBA_FLOAT_MODE_ARB */ + { 37426, 0x00008D99 }, /* GL_RGBA_INTEGER */ + { 37442, 0x00008D99 }, /* GL_RGBA_INTEGER_EXT */ + { 37462, 0x00008D9E }, /* GL_RGBA_INTEGER_MODE_EXT */ + { 37487, 0x00000C31 }, /* GL_RGBA_MODE */ + { 37500, 0x000083A2 }, /* GL_RGBA_S3TC */ + { 37513, 0x00008F93 }, /* GL_RGBA_SNORM */ + { 37527, 0x00008D98 }, /* GL_RGB_INTEGER */ + { 37542, 0x00008D98 }, /* GL_RGB_INTEGER_EXT */ + { 37561, 0x000083A0 }, /* GL_RGB_S3TC */ + { 37573, 0x00008573 }, /* GL_RGB_SCALE */ + { 37586, 0x00008573 }, /* GL_RGB_SCALE_ARB */ + { 37603, 0x00008573 }, /* GL_RGB_SCALE_EXT */ + { 37620, 0x00008F92 }, /* GL_RGB_SNORM */ + { 37633, 0x00008F91 }, /* GL_RG_SNORM */ + { 37645, 0x00000407 }, /* GL_RIGHT */ + { 37654, 0x00002000 }, /* GL_S */ + { 37659, 0x00008B5D }, /* GL_SAMPLER_1D */ + { 37673, 0x00008DC0 }, /* GL_SAMPLER_1D_ARRAY */ + { 37693, 0x00008DC0 }, /* GL_SAMPLER_1D_ARRAY_EXT */ + { 37717, 0x00008DC3 }, /* GL_SAMPLER_1D_ARRAY_SHADOW */ + { 37744, 0x00008DC3 }, /* GL_SAMPLER_1D_ARRAY_SHADOW_EXT */ + { 37775, 0x00008B61 }, /* GL_SAMPLER_1D_SHADOW */ + { 37796, 0x00008B5E }, /* GL_SAMPLER_2D */ + { 37810, 0x00008DC1 }, /* GL_SAMPLER_2D_ARRAY */ + { 37830, 0x00008DC1 }, /* GL_SAMPLER_2D_ARRAY_EXT */ + { 37854, 0x00008DC4 }, /* GL_SAMPLER_2D_ARRAY_SHADOW */ + { 37881, 0x00008DC4 }, /* GL_SAMPLER_2D_ARRAY_SHADOW_EXT */ + { 37912, 0x00008B63 }, /* GL_SAMPLER_2D_RECT */ + { 37931, 0x00008B64 }, /* GL_SAMPLER_2D_RECT_SHADOW */ + { 37957, 0x00008B62 }, /* GL_SAMPLER_2D_SHADOW */ + { 37978, 0x00008B5F }, /* GL_SAMPLER_3D */ + { 37992, 0x00008B5F }, /* GL_SAMPLER_3D_OES */ + { 38010, 0x00008919 }, /* GL_SAMPLER_BINDING */ + { 38029, 0x00008DC2 }, /* GL_SAMPLER_BUFFER */ + { 38047, 0x00008DC2 }, /* GL_SAMPLER_BUFFER_EXT */ + { 38069, 0x00008B60 }, /* GL_SAMPLER_CUBE */ + { 38085, 0x00008DC5 }, /* GL_SAMPLER_CUBE_SHADOW */ + { 38108, 0x00008DC5 }, /* GL_SAMPLER_CUBE_SHADOW_EXT */ + { 38135, 0x000080A9 }, /* GL_SAMPLES */ + { 38146, 0x000086B4 }, /* GL_SAMPLES_3DFX */ + { 38162, 0x000080A9 }, /* GL_SAMPLES_ARB */ + { 38177, 0x00008914 }, /* GL_SAMPLES_PASSED */ + { 38195, 0x00008914 }, /* GL_SAMPLES_PASSED_ARB */ + { 38217, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE */ + { 38245, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */ + { 38277, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE */ + { 38300, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE_ARB */ + { 38327, 0x000080A8 }, /* GL_SAMPLE_BUFFERS */ + { 38345, 0x000086B3 }, /* GL_SAMPLE_BUFFERS_3DFX */ + { 38368, 0x000080A8 }, /* GL_SAMPLE_BUFFERS_ARB */ + { 38390, 0x000080A0 }, /* GL_SAMPLE_COVERAGE */ + { 38409, 0x000080A0 }, /* GL_SAMPLE_COVERAGE_ARB */ + { 38432, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT */ + { 38458, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT_ARB */ + { 38488, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE */ + { 38513, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE_ARB */ + { 38542, 0x00080000 }, /* GL_SCISSOR_BIT */ + { 38557, 0x00000C10 }, /* GL_SCISSOR_BOX */ + { 38572, 0x00000C11 }, /* GL_SCISSOR_TEST */ + { 38588, 0x0000845E }, /* GL_SECONDARY_COLOR_ARRAY */ + { 38613, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */ + { 38653, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */ + { 38697, 0x0000845D }, /* GL_SECONDARY_COLOR_ARRAY_POINTER */ + { 38730, 0x0000845A }, /* GL_SECONDARY_COLOR_ARRAY_SIZE */ + { 38760, 0x0000845C }, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */ + { 38792, 0x0000845B }, /* GL_SECONDARY_COLOR_ARRAY_TYPE */ + { 38822, 0x00001C02 }, /* GL_SELECT */ + { 38832, 0x00000DF3 }, /* GL_SELECTION_BUFFER_POINTER */ + { 38860, 0x00000DF4 }, /* GL_SELECTION_BUFFER_SIZE */ + { 38885, 0x00008012 }, /* GL_SEPARABLE_2D */ + { 38901, 0x00008C8D }, /* GL_SEPARATE_ATTRIBS */ + { 38921, 0x00008C8D }, /* GL_SEPARATE_ATTRIBS_EXT */ + { 38945, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR */ + { 38972, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR_EXT */ + { 39003, 0x0000150F }, /* GL_SET */ + { 39010, 0x00008DF8 }, /* GL_SHADER_BINARY_FORMATS */ + { 39035, 0x00008DFA }, /* GL_SHADER_COMPILER */ + { 39054, 0x00008B48 }, /* GL_SHADER_OBJECT_ARB */ + { 39075, 0x00008B88 }, /* GL_SHADER_SOURCE_LENGTH */ + { 39099, 0x00008B4F }, /* GL_SHADER_TYPE */ + { 39114, 0x00000B54 }, /* GL_SHADE_MODEL */ + { 39129, 0x00008B8C }, /* GL_SHADING_LANGUAGE_VERSION */ + { 39157, 0x000080BF }, /* GL_SHADOW_AMBIENT_SGIX */ + { 39180, 0x000081FB }, /* GL_SHARED_TEXTURE_PALETTE_EXT */ + { 39210, 0x00001601 }, /* GL_SHININESS */ + { 39223, 0x00001402 }, /* GL_SHORT */ + { 39232, 0x00009119 }, /* GL_SIGNALED */ + { 39244, 0x00008F9C }, /* GL_SIGNED_NORMALIZED */ + { 39265, 0x000081F9 }, /* GL_SINGLE_COLOR */ + { 39281, 0x000081F9 }, /* GL_SINGLE_COLOR_EXT */ + { 39301, 0x000085CC }, /* GL_SLICE_ACCUM_SUN */ + { 39320, 0x00008C46 }, /* GL_SLUMINANCE */ + { 39334, 0x00008C47 }, /* GL_SLUMINANCE8 */ + { 39349, 0x00008C45 }, /* GL_SLUMINANCE8_ALPHA8 */ + { 39371, 0x00008C44 }, /* GL_SLUMINANCE_ALPHA */ + { 39391, 0x00001D01 }, /* GL_SMOOTH */ + { 39401, 0x00000B23 }, /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */ + { 39434, 0x00000B22 }, /* GL_SMOOTH_LINE_WIDTH_RANGE */ + { 39461, 0x00000B13 }, /* GL_SMOOTH_POINT_SIZE_GRANULARITY */ + { 39494, 0x00000B12 }, /* GL_SMOOTH_POINT_SIZE_RANGE */ + { 39521, 0x00008588 }, /* GL_SOURCE0_ALPHA */ + { 39538, 0x00008588 }, /* GL_SOURCE0_ALPHA_ARB */ + { 39559, 0x00008588 }, /* GL_SOURCE0_ALPHA_EXT */ + { 39580, 0x00008580 }, /* GL_SOURCE0_RGB */ + { 39595, 0x00008580 }, /* GL_SOURCE0_RGB_ARB */ + { 39614, 0x00008580 }, /* GL_SOURCE0_RGB_EXT */ + { 39633, 0x00008589 }, /* GL_SOURCE1_ALPHA */ + { 39650, 0x00008589 }, /* GL_SOURCE1_ALPHA_ARB */ + { 39671, 0x00008589 }, /* GL_SOURCE1_ALPHA_EXT */ + { 39692, 0x00008581 }, /* GL_SOURCE1_RGB */ + { 39707, 0x00008581 }, /* GL_SOURCE1_RGB_ARB */ + { 39726, 0x00008581 }, /* GL_SOURCE1_RGB_EXT */ + { 39745, 0x0000858A }, /* GL_SOURCE2_ALPHA */ + { 39762, 0x0000858A }, /* GL_SOURCE2_ALPHA_ARB */ + { 39783, 0x0000858A }, /* GL_SOURCE2_ALPHA_EXT */ + { 39804, 0x00008582 }, /* GL_SOURCE2_RGB */ + { 39819, 0x00008582 }, /* GL_SOURCE2_RGB_ARB */ + { 39838, 0x00008582 }, /* GL_SOURCE2_RGB_EXT */ + { 39857, 0x0000858B }, /* GL_SOURCE3_ALPHA_NV */ + { 39877, 0x00008583 }, /* GL_SOURCE3_RGB_NV */ + { 39895, 0x00001202 }, /* GL_SPECULAR */ + { 39907, 0x00002402 }, /* GL_SPHERE_MAP */ + { 39921, 0x00001206 }, /* GL_SPOT_CUTOFF */ + { 39936, 0x00001204 }, /* GL_SPOT_DIRECTION */ + { 39954, 0x00001205 }, /* GL_SPOT_EXPONENT */ + { 39971, 0x00008588 }, /* GL_SRC0_ALPHA */ + { 39985, 0x00008580 }, /* GL_SRC0_RGB */ + { 39997, 0x00008589 }, /* GL_SRC1_ALPHA */ + { 40011, 0x00008581 }, /* GL_SRC1_RGB */ + { 40023, 0x0000858A }, /* GL_SRC2_ALPHA */ + { 40037, 0x00008582 }, /* GL_SRC2_RGB */ + { 40049, 0x00000302 }, /* GL_SRC_ALPHA */ + { 40062, 0x00000308 }, /* GL_SRC_ALPHA_SATURATE */ + { 40084, 0x00000300 }, /* GL_SRC_COLOR */ + { 40097, 0x00008C40 }, /* GL_SRGB */ + { 40105, 0x00008C41 }, /* GL_SRGB8 */ + { 40114, 0x00008C43 }, /* GL_SRGB8_ALPHA8 */ + { 40130, 0x00008C42 }, /* GL_SRGB_ALPHA */ + { 40144, 0x00000503 }, /* GL_STACK_OVERFLOW */ + { 40162, 0x00000504 }, /* GL_STACK_UNDERFLOW */ + { 40181, 0x000088E6 }, /* GL_STATIC_COPY */ + { 40196, 0x000088E6 }, /* GL_STATIC_COPY_ARB */ + { 40215, 0x000088E4 }, /* GL_STATIC_DRAW */ + { 40230, 0x000088E4 }, /* GL_STATIC_DRAW_ARB */ + { 40249, 0x000088E5 }, /* GL_STATIC_READ */ + { 40264, 0x000088E5 }, /* GL_STATIC_READ_ARB */ + { 40283, 0x00001802 }, /* GL_STENCIL */ + { 40294, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT */ + { 40316, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_EXT */ + { 40342, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_OES */ + { 40368, 0x00008801 }, /* GL_STENCIL_BACK_FAIL */ + { 40389, 0x00008801 }, /* GL_STENCIL_BACK_FAIL_ATI */ + { 40414, 0x00008800 }, /* GL_STENCIL_BACK_FUNC */ + { 40435, 0x00008800 }, /* GL_STENCIL_BACK_FUNC_ATI */ + { 40460, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */ + { 40492, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */ + { 40528, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */ + { 40560, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */ + { 40596, 0x00008CA3 }, /* GL_STENCIL_BACK_REF */ + { 40616, 0x00008CA4 }, /* GL_STENCIL_BACK_VALUE_MASK */ + { 40643, 0x00008CA5 }, /* GL_STENCIL_BACK_WRITEMASK */ + { 40669, 0x00000D57 }, /* GL_STENCIL_BITS */ + { 40685, 0x00008224 }, /* GL_STENCIL_BUFFER */ + { 40703, 0x00000400 }, /* GL_STENCIL_BUFFER_BIT */ + { 40725, 0x00000B91 }, /* GL_STENCIL_CLEAR_VALUE */ + { 40748, 0x00000B94 }, /* GL_STENCIL_FAIL */ + { 40764, 0x00000B92 }, /* GL_STENCIL_FUNC */ + { 40780, 0x00001901 }, /* GL_STENCIL_INDEX */ + { 40797, 0x00008D46 }, /* GL_STENCIL_INDEX1 */ + { 40815, 0x00008D49 }, /* GL_STENCIL_INDEX16 */ + { 40834, 0x00008D49 }, /* GL_STENCIL_INDEX16_EXT */ + { 40857, 0x00008D46 }, /* GL_STENCIL_INDEX1_EXT */ + { 40879, 0x00008D46 }, /* GL_STENCIL_INDEX1_OES */ + { 40901, 0x00008D47 }, /* GL_STENCIL_INDEX4 */ + { 40919, 0x00008D47 }, /* GL_STENCIL_INDEX4_EXT */ + { 40941, 0x00008D47 }, /* GL_STENCIL_INDEX4_OES */ + { 40963, 0x00008D48 }, /* GL_STENCIL_INDEX8 */ + { 40981, 0x00008D48 }, /* GL_STENCIL_INDEX8_EXT */ + { 41003, 0x00008D48 }, /* GL_STENCIL_INDEX8_OES */ + { 41025, 0x00008D45 }, /* GL_STENCIL_INDEX_EXT */ + { 41046, 0x00000B95 }, /* GL_STENCIL_PASS_DEPTH_FAIL */ + { 41073, 0x00000B96 }, /* GL_STENCIL_PASS_DEPTH_PASS */ + { 41100, 0x00000B97 }, /* GL_STENCIL_REF */ + { 41115, 0x00000B90 }, /* GL_STENCIL_TEST */ + { 41131, 0x00008910 }, /* GL_STENCIL_TEST_TWO_SIDE_EXT */ + { 41160, 0x00000B93 }, /* GL_STENCIL_VALUE_MASK */ + { 41182, 0x00000B98 }, /* GL_STENCIL_WRITEMASK */ + { 41203, 0x00000C33 }, /* GL_STEREO */ + { 41213, 0x000085BE }, /* GL_STORAGE_CACHED_APPLE */ + { 41237, 0x000085BD }, /* GL_STORAGE_PRIVATE_APPLE */ + { 41262, 0x000085BF }, /* GL_STORAGE_SHARED_APPLE */ + { 41286, 0x000088E2 }, /* GL_STREAM_COPY */ + { 41301, 0x000088E2 }, /* GL_STREAM_COPY_ARB */ + { 41320, 0x000088E0 }, /* GL_STREAM_DRAW */ + { 41335, 0x000088E0 }, /* GL_STREAM_DRAW_ARB */ + { 41354, 0x000088E1 }, /* GL_STREAM_READ */ + { 41369, 0x000088E1 }, /* GL_STREAM_READ_ARB */ + { 41388, 0x00000D50 }, /* GL_SUBPIXEL_BITS */ + { 41405, 0x000084E7 }, /* GL_SUBTRACT */ + { 41417, 0x000084E7 }, /* GL_SUBTRACT_ARB */ + { 41433, 0x00009113 }, /* GL_SYNC_CONDITION */ + { 41451, 0x00009116 }, /* GL_SYNC_FENCE */ + { 41465, 0x00009115 }, /* GL_SYNC_FLAGS */ + { 41479, 0x00000001 }, /* GL_SYNC_FLUSH_COMMANDS_BIT */ + { 41506, 0x00009117 }, /* GL_SYNC_GPU_COMMANDS_COMPLETE */ + { 41536, 0x00009114 }, /* GL_SYNC_STATUS */ + { 41551, 0x00002001 }, /* GL_T */ + { 41556, 0x00002A2A }, /* GL_T2F_C3F_V3F */ + { 41571, 0x00002A2C }, /* GL_T2F_C4F_N3F_V3F */ + { 41590, 0x00002A29 }, /* GL_T2F_C4UB_V3F */ + { 41606, 0x00002A2B }, /* GL_T2F_N3F_V3F */ + { 41621, 0x00002A27 }, /* GL_T2F_V3F */ + { 41632, 0x00002A2D }, /* GL_T4F_C4F_N3F_V4F */ + { 41651, 0x00002A28 }, /* GL_T4F_V4F */ + { 41662, 0x00008031 }, /* GL_TABLE_TOO_LARGE_EXT */ + { 41685, 0x00001702 }, /* GL_TEXTURE */ + { 41696, 0x000084C0 }, /* GL_TEXTURE0 */ + { 41708, 0x000084C0 }, /* GL_TEXTURE0_ARB */ + { 41724, 0x000084C1 }, /* GL_TEXTURE1 */ + { 41736, 0x000084CA }, /* GL_TEXTURE10 */ + { 41749, 0x000084CA }, /* GL_TEXTURE10_ARB */ + { 41766, 0x000084CB }, /* GL_TEXTURE11 */ + { 41779, 0x000084CB }, /* GL_TEXTURE11_ARB */ + { 41796, 0x000084CC }, /* GL_TEXTURE12 */ + { 41809, 0x000084CC }, /* GL_TEXTURE12_ARB */ + { 41826, 0x000084CD }, /* GL_TEXTURE13 */ + { 41839, 0x000084CD }, /* GL_TEXTURE13_ARB */ + { 41856, 0x000084CE }, /* GL_TEXTURE14 */ + { 41869, 0x000084CE }, /* GL_TEXTURE14_ARB */ + { 41886, 0x000084CF }, /* GL_TEXTURE15 */ + { 41899, 0x000084CF }, /* GL_TEXTURE15_ARB */ + { 41916, 0x000084D0 }, /* GL_TEXTURE16 */ + { 41929, 0x000084D0 }, /* GL_TEXTURE16_ARB */ + { 41946, 0x000084D1 }, /* GL_TEXTURE17 */ + { 41959, 0x000084D1 }, /* GL_TEXTURE17_ARB */ + { 41976, 0x000084D2 }, /* GL_TEXTURE18 */ + { 41989, 0x000084D2 }, /* GL_TEXTURE18_ARB */ + { 42006, 0x000084D3 }, /* GL_TEXTURE19 */ + { 42019, 0x000084D3 }, /* GL_TEXTURE19_ARB */ + { 42036, 0x000084C1 }, /* GL_TEXTURE1_ARB */ + { 42052, 0x000084C2 }, /* GL_TEXTURE2 */ + { 42064, 0x000084D4 }, /* GL_TEXTURE20 */ + { 42077, 0x000084D4 }, /* GL_TEXTURE20_ARB */ + { 42094, 0x000084D5 }, /* GL_TEXTURE21 */ + { 42107, 0x000084D5 }, /* GL_TEXTURE21_ARB */ + { 42124, 0x000084D6 }, /* GL_TEXTURE22 */ + { 42137, 0x000084D6 }, /* GL_TEXTURE22_ARB */ + { 42154, 0x000084D7 }, /* GL_TEXTURE23 */ + { 42167, 0x000084D7 }, /* GL_TEXTURE23_ARB */ + { 42184, 0x000084D8 }, /* GL_TEXTURE24 */ + { 42197, 0x000084D8 }, /* GL_TEXTURE24_ARB */ + { 42214, 0x000084D9 }, /* GL_TEXTURE25 */ + { 42227, 0x000084D9 }, /* GL_TEXTURE25_ARB */ + { 42244, 0x000084DA }, /* GL_TEXTURE26 */ + { 42257, 0x000084DA }, /* GL_TEXTURE26_ARB */ + { 42274, 0x000084DB }, /* GL_TEXTURE27 */ + { 42287, 0x000084DB }, /* GL_TEXTURE27_ARB */ + { 42304, 0x000084DC }, /* GL_TEXTURE28 */ + { 42317, 0x000084DC }, /* GL_TEXTURE28_ARB */ + { 42334, 0x000084DD }, /* GL_TEXTURE29 */ + { 42347, 0x000084DD }, /* GL_TEXTURE29_ARB */ + { 42364, 0x000084C2 }, /* GL_TEXTURE2_ARB */ + { 42380, 0x000084C3 }, /* GL_TEXTURE3 */ + { 42392, 0x000084DE }, /* GL_TEXTURE30 */ + { 42405, 0x000084DE }, /* GL_TEXTURE30_ARB */ + { 42422, 0x000084DF }, /* GL_TEXTURE31 */ + { 42435, 0x000084DF }, /* GL_TEXTURE31_ARB */ + { 42452, 0x000084C3 }, /* GL_TEXTURE3_ARB */ + { 42468, 0x000084C4 }, /* GL_TEXTURE4 */ + { 42480, 0x000084C4 }, /* GL_TEXTURE4_ARB */ + { 42496, 0x000084C5 }, /* GL_TEXTURE5 */ + { 42508, 0x000084C5 }, /* GL_TEXTURE5_ARB */ + { 42524, 0x000084C6 }, /* GL_TEXTURE6 */ + { 42536, 0x000084C6 }, /* GL_TEXTURE6_ARB */ + { 42552, 0x000084C7 }, /* GL_TEXTURE7 */ + { 42564, 0x000084C7 }, /* GL_TEXTURE7_ARB */ + { 42580, 0x000084C8 }, /* GL_TEXTURE8 */ + { 42592, 0x000084C8 }, /* GL_TEXTURE8_ARB */ + { 42608, 0x000084C9 }, /* GL_TEXTURE9 */ + { 42620, 0x000084C9 }, /* GL_TEXTURE9_ARB */ + { 42636, 0x00000DE0 }, /* GL_TEXTURE_1D */ + { 42650, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY */ + { 42670, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY_EXT */ + { 42694, 0x00000DE1 }, /* GL_TEXTURE_2D */ + { 42708, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY */ + { 42728, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY_EXT */ + { 42752, 0x0000806F }, /* GL_TEXTURE_3D */ + { 42766, 0x0000806F }, /* GL_TEXTURE_3D_OES */ + { 42784, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE */ + { 42806, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE_EXT */ + { 42832, 0x0000813C }, /* GL_TEXTURE_BASE_LEVEL */ + { 42854, 0x00008068 }, /* GL_TEXTURE_BINDING_1D */ + { 42876, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY */ + { 42904, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */ + { 42936, 0x00008069 }, /* GL_TEXTURE_BINDING_2D */ + { 42958, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY */ + { 42986, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */ + { 43018, 0x0000806A }, /* GL_TEXTURE_BINDING_3D */ + { 43040, 0x0000806A }, /* GL_TEXTURE_BINDING_3D_OES */ + { 43066, 0x00008C2C }, /* GL_TEXTURE_BINDING_BUFFER */ + { 43092, 0x00008C2C }, /* GL_TEXTURE_BINDING_BUFFER_ARB */ + { 43122, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP */ + { 43150, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */ + { 43182, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_OES */ + { 43214, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE */ + { 43243, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */ + { 43276, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_NV */ + { 43308, 0x00040000 }, /* GL_TEXTURE_BIT */ + { 43323, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE */ + { 43344, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE_EXT */ + { 43369, 0x00001005 }, /* GL_TEXTURE_BORDER */ + { 43387, 0x00001004 }, /* GL_TEXTURE_BORDER_COLOR */ + { 43411, 0x00008C2A }, /* GL_TEXTURE_BUFFER */ + { 43429, 0x00008C2A }, /* GL_TEXTURE_BUFFER_ARB */ + { 43451, 0x00008C2D }, /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING */ + { 43488, 0x00008C2D }, /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB */ + { 43529, 0x00008C2E }, /* GL_TEXTURE_BUFFER_FORMAT */ + { 43554, 0x00008C2E }, /* GL_TEXTURE_BUFFER_FORMAT_ARB */ + { 43583, 0x00008171 }, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */ + { 43614, 0x00008176 }, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */ + { 43644, 0x00008172 }, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */ + { 43674, 0x00008175 }, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */ + { 43709, 0x00008173 }, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */ + { 43740, 0x00008174 }, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */ + { 43778, 0x000080BC }, /* GL_TEXTURE_COLOR_TABLE_SGI */ + { 43805, 0x000081EF }, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */ + { 43837, 0x000080BF }, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */ + { 43871, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC */ + { 43895, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC_ARB */ + { 43923, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE */ + { 43947, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE_ARB */ + { 43975, 0x0000819B }, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */ + { 44008, 0x0000819A }, /* GL_TEXTURE_COMPARE_SGIX */ + { 44032, 0x00001003 }, /* GL_TEXTURE_COMPONENTS */ + { 44054, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED */ + { 44076, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED_ARB */ + { 44102, 0x000086A3 }, /* GL_TEXTURE_COMPRESSED_FORMATS_ARB */ + { 44136, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */ + { 44169, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */ + { 44206, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT */ + { 44234, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT_ARB */ + { 44266, 0x00008078 }, /* GL_TEXTURE_COORD_ARRAY */ + { 44289, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */ + { 44327, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */ + { 44369, 0x00008092 }, /* GL_TEXTURE_COORD_ARRAY_POINTER */ + { 44400, 0x00008088 }, /* GL_TEXTURE_COORD_ARRAY_SIZE */ + { 44428, 0x0000808A }, /* GL_TEXTURE_COORD_ARRAY_STRIDE */ + { 44458, 0x00008089 }, /* GL_TEXTURE_COORD_ARRAY_TYPE */ + { 44486, 0x00008B9D }, /* GL_TEXTURE_CROP_RECT_OES */ + { 44511, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP */ + { 44531, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_ARB */ + { 44555, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */ + { 44586, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */ + { 44621, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES */ + { 44656, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */ + { 44687, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */ + { 44722, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES */ + { 44757, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */ + { 44788, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */ + { 44823, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES */ + { 44858, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_OES */ + { 44882, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */ + { 44913, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */ + { 44948, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES */ + { 44983, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */ + { 45014, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */ + { 45049, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES */ + { 45084, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */ + { 45115, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */ + { 45150, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES */ + { 45185, 0x000088F4 }, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */ + { 45214, 0x00008071 }, /* GL_TEXTURE_DEPTH */ + { 45231, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE */ + { 45253, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE_ARB */ + { 45279, 0x00002300 }, /* GL_TEXTURE_ENV */ + { 45294, 0x00002201 }, /* GL_TEXTURE_ENV_COLOR */ + { 45315, 0x00002200 }, /* GL_TEXTURE_ENV_MODE */ + { 45335, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL */ + { 45361, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL_EXT */ + { 45391, 0x00002500 }, /* GL_TEXTURE_GEN_MODE */ + { 45411, 0x00002500 }, /* GL_TEXTURE_GEN_MODE_OES */ + { 45435, 0x00000C63 }, /* GL_TEXTURE_GEN_Q */ + { 45452, 0x00000C62 }, /* GL_TEXTURE_GEN_R */ + { 45469, 0x00000C60 }, /* GL_TEXTURE_GEN_S */ + { 45486, 0x00008D60 }, /* GL_TEXTURE_GEN_STR_OES */ + { 45509, 0x00000C61 }, /* GL_TEXTURE_GEN_T */ + { 45526, 0x0000819D }, /* GL_TEXTURE_GEQUAL_R_SGIX */ + { 45551, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE */ + { 45573, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE_EXT */ + { 45599, 0x00001001 }, /* GL_TEXTURE_HEIGHT */ + { 45617, 0x000080ED }, /* GL_TEXTURE_INDEX_SIZE_EXT */ + { 45643, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE */ + { 45669, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE_EXT */ + { 45699, 0x00001003 }, /* GL_TEXTURE_INTERNAL_FORMAT */ + { 45726, 0x0000819C }, /* GL_TEXTURE_LEQUAL_R_SGIX */ + { 45751, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS */ + { 45771, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS_EXT */ + { 45795, 0x00008190 }, /* GL_TEXTURE_LOD_BIAS_R_SGIX */ + { 45822, 0x0000818E }, /* GL_TEXTURE_LOD_BIAS_S_SGIX */ + { 45849, 0x0000818F }, /* GL_TEXTURE_LOD_BIAS_T_SGIX */ + { 45876, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE */ + { 45902, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE_EXT */ + { 45932, 0x00002800 }, /* GL_TEXTURE_MAG_FILTER */ + { 45954, 0x00000BA8 }, /* GL_TEXTURE_MATRIX */ + { 45972, 0x0000898F }, /* GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES */ + { 46012, 0x000084FE }, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */ + { 46042, 0x0000836B }, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */ + { 46070, 0x00008369 }, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */ + { 46098, 0x0000836A }, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */ + { 46126, 0x0000813D }, /* GL_TEXTURE_MAX_LEVEL */ + { 46147, 0x0000813B }, /* GL_TEXTURE_MAX_LOD */ + { 46166, 0x00002801 }, /* GL_TEXTURE_MIN_FILTER */ + { 46188, 0x0000813A }, /* GL_TEXTURE_MIN_LOD */ + { 46207, 0x00008066 }, /* GL_TEXTURE_PRIORITY */ + { 46227, 0x000085B7 }, /* GL_TEXTURE_RANGE_LENGTH_APPLE */ + { 46257, 0x000085B8 }, /* GL_TEXTURE_RANGE_POINTER_APPLE */ + { 46288, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE */ + { 46309, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_ARB */ + { 46334, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_NV */ + { 46358, 0x0000805C }, /* GL_TEXTURE_RED_SIZE */ + { 46378, 0x0000805C }, /* GL_TEXTURE_RED_SIZE_EXT */ + { 46402, 0x00008067 }, /* GL_TEXTURE_RESIDENT */ + { 46422, 0x00008C3F }, /* GL_TEXTURE_SHARED_SIZE */ + { 46445, 0x00000BA5 }, /* GL_TEXTURE_STACK_DEPTH */ + { 46468, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE */ + { 46492, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE_EXT */ + { 46520, 0x000085BC }, /* GL_TEXTURE_STORAGE_HINT_APPLE */ + { 46550, 0x00008065 }, /* GL_TEXTURE_TOO_LARGE_EXT */ + { 46575, 0x0000888F }, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */ + { 46609, 0x00001000 }, /* GL_TEXTURE_WIDTH */ + { 46626, 0x00008072 }, /* GL_TEXTURE_WRAP_R */ + { 46644, 0x00008072 }, /* GL_TEXTURE_WRAP_R_OES */ + { 46666, 0x00002802 }, /* GL_TEXTURE_WRAP_S */ + { 46684, 0x00002803 }, /* GL_TEXTURE_WRAP_T */ + { 46702, 0x0000911B }, /* GL_TIMEOUT_EXPIRED */ + { 46721, 0x000088BF }, /* GL_TIME_ELAPSED_EXT */ + { 46741, 0x00008648 }, /* GL_TRACK_MATRIX_NV */ + { 46760, 0x00008649 }, /* GL_TRACK_MATRIX_TRANSFORM_NV */ + { 46789, 0x00001000 }, /* GL_TRANSFORM_BIT */ + { 46806, 0x00008E22 }, /* GL_TRANSFORM_FEEDBACK */ + { 46828, 0x00008E25 }, /* GL_TRANSFORM_FEEDBACK_BINDING */ + { 46858, 0x00008C8E }, /* GL_TRANSFORM_FEEDBACK_BUFFER */ + { 46887, 0x00008E24 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */ + { 46923, 0x00008C8F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING */ + { 46960, 0x00008C8F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT */ + { 47001, 0x00008C8E }, /* GL_TRANSFORM_FEEDBACK_BUFFER_EXT */ + { 47034, 0x00008C7F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE */ + { 47068, 0x00008C7F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT */ + { 47106, 0x00008E23 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */ + { 47142, 0x00008C85 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE */ + { 47176, 0x00008C85 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT */ + { 47214, 0x00008C84 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_START */ + { 47249, 0x00008C84 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT */ + { 47288, 0x00008C88 }, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN */ + { 47329, 0x00008C88 }, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT */ + { 47374, 0x00008C83 }, /* GL_TRANSFORM_FEEDBACK_VARYINGS */ + { 47405, 0x00008C83 }, /* GL_TRANSFORM_FEEDBACK_VARYINGS_EXT */ + { 47440, 0x00008C76 }, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH */ + { 47481, 0x00008C76 }, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT */ + { 47526, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX */ + { 47552, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX_ARB */ + { 47582, 0x000088B7 }, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */ + { 47614, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX */ + { 47644, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */ + { 47678, 0x0000862C }, /* GL_TRANSPOSE_NV */ + { 47694, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX */ + { 47725, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */ + { 47760, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX */ + { 47788, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */ + { 47820, 0x00000004 }, /* GL_TRIANGLES */ + { 47833, 0x0000000C }, /* GL_TRIANGLES_ADJACENCY */ + { 47856, 0x0000000C }, /* GL_TRIANGLES_ADJACENCY_ARB */ + { 47883, 0x00000006 }, /* GL_TRIANGLE_FAN */ + { 47899, 0x00008615 }, /* GL_TRIANGLE_MESH_SUN */ + { 47920, 0x00000005 }, /* GL_TRIANGLE_STRIP */ + { 47938, 0x0000000D }, /* GL_TRIANGLE_STRIP_ADJACENCY */ + { 47966, 0x0000000D }, /* GL_TRIANGLE_STRIP_ADJACENCY_ARB */ + { 47998, 0x00000001 }, /* GL_TRUE */ + { 48006, 0x00008A1C }, /* GL_UNDEFINED_APPLE */ + { 48025, 0x00008255 }, /* GL_UNKNOWN_CONTEXT_RESET_ARB */ + { 48054, 0x00000CF5 }, /* GL_UNPACK_ALIGNMENT */ + { 48074, 0x0000806E }, /* GL_UNPACK_IMAGE_HEIGHT */ + { 48097, 0x00000CF1 }, /* GL_UNPACK_LSB_FIRST */ + { 48117, 0x00000CF2 }, /* GL_UNPACK_ROW_LENGTH */ + { 48138, 0x0000806D }, /* GL_UNPACK_SKIP_IMAGES */ + { 48160, 0x00000CF4 }, /* GL_UNPACK_SKIP_PIXELS */ + { 48182, 0x00000CF3 }, /* GL_UNPACK_SKIP_ROWS */ + { 48202, 0x00000CF0 }, /* GL_UNPACK_SWAP_BYTES */ + { 48223, 0x00009118 }, /* GL_UNSIGNALED */ + { 48237, 0x00001401 }, /* GL_UNSIGNED_BYTE */ + { 48254, 0x00008362 }, /* GL_UNSIGNED_BYTE_2_3_3_REV */ + { 48281, 0x00008032 }, /* GL_UNSIGNED_BYTE_3_3_2 */ + { 48304, 0x00001405 }, /* GL_UNSIGNED_INT */ + { 48320, 0x00008C3B }, /* GL_UNSIGNED_INT_10F_11F_11F_REV */ + { 48352, 0x00008036 }, /* GL_UNSIGNED_INT_10_10_10_2 */ + { 48379, 0x00008DF6 }, /* GL_UNSIGNED_INT_10_10_10_2_OES */ + { 48410, 0x000084FA }, /* GL_UNSIGNED_INT_24_8 */ + { 48431, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_EXT */ + { 48456, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_NV */ + { 48480, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_OES */ + { 48505, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV */ + { 48536, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV_EXT */ + { 48571, 0x00008C3E }, /* GL_UNSIGNED_INT_5_9_9_9_REV */ + { 48599, 0x00008035 }, /* GL_UNSIGNED_INT_8_8_8_8 */ + { 48623, 0x00008367 }, /* GL_UNSIGNED_INT_8_8_8_8_REV */ + { 48651, 0x00008DD1 }, /* GL_UNSIGNED_INT_SAMPLER_1D */ + { 48678, 0x00008DD6 }, /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY */ + { 48711, 0x00008DD6 }, /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT */ + { 48748, 0x00008DD1 }, /* GL_UNSIGNED_INT_SAMPLER_1D_EXT */ + { 48779, 0x00008DD2 }, /* GL_UNSIGNED_INT_SAMPLER_2D */ + { 48806, 0x00008DD7 }, /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY */ + { 48839, 0x00008DD7 }, /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT */ + { 48876, 0x00008DD2 }, /* GL_UNSIGNED_INT_SAMPLER_2D_EXT */ + { 48907, 0x00008DD5 }, /* GL_UNSIGNED_INT_SAMPLER_2D_RECT */ + { 48939, 0x00008DD5 }, /* GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT */ + { 48975, 0x00008DD3 }, /* GL_UNSIGNED_INT_SAMPLER_3D */ + { 49002, 0x00008DD3 }, /* GL_UNSIGNED_INT_SAMPLER_3D_EXT */ + { 49033, 0x00008DD8 }, /* GL_UNSIGNED_INT_SAMPLER_BUFFER */ + { 49064, 0x00008DD8 }, /* GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT */ + { 49099, 0x00008DD4 }, /* GL_UNSIGNED_INT_SAMPLER_CUBE */ + { 49128, 0x00008DD4 }, /* GL_UNSIGNED_INT_SAMPLER_CUBE_EXT */ + { 49161, 0x00008DC6 }, /* GL_UNSIGNED_INT_VEC2 */ + { 49182, 0x00008DC6 }, /* GL_UNSIGNED_INT_VEC2_EXT */ + { 49207, 0x00008DC7 }, /* GL_UNSIGNED_INT_VEC3 */ + { 49228, 0x00008DC7 }, /* GL_UNSIGNED_INT_VEC3_EXT */ + { 49253, 0x00008DC8 }, /* GL_UNSIGNED_INT_VEC4 */ + { 49274, 0x00008DC8 }, /* GL_UNSIGNED_INT_VEC4_EXT */ + { 49299, 0x00008C17 }, /* GL_UNSIGNED_NORMALIZED */ + { 49322, 0x00001403 }, /* GL_UNSIGNED_SHORT */ + { 49340, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */ + { 49370, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT */ + { 49404, 0x00008033 }, /* GL_UNSIGNED_SHORT_4_4_4_4 */ + { 49430, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */ + { 49460, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT */ + { 49494, 0x00008034 }, /* GL_UNSIGNED_SHORT_5_5_5_1 */ + { 49520, 0x00008363 }, /* GL_UNSIGNED_SHORT_5_6_5 */ + { 49544, 0x00008364 }, /* GL_UNSIGNED_SHORT_5_6_5_REV */ + { 49572, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_APPLE */ + { 49600, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_MESA */ + { 49627, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */ + { 49659, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_MESA */ + { 49690, 0x00008CA2 }, /* GL_UPPER_LEFT */ + { 49704, 0x00002A20 }, /* GL_V2F */ + { 49711, 0x00002A21 }, /* GL_V3F */ + { 49718, 0x00008B83 }, /* GL_VALIDATE_STATUS */ + { 49737, 0x00001F00 }, /* GL_VENDOR */ + { 49747, 0x00001F02 }, /* GL_VERSION */ + { 49758, 0x00008074 }, /* GL_VERTEX_ARRAY */ + { 49774, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING */ + { 49798, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING_APPLE */ + { 49828, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING */ + { 49859, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */ + { 49894, 0x0000808E }, /* GL_VERTEX_ARRAY_POINTER */ + { 49918, 0x0000807A }, /* GL_VERTEX_ARRAY_SIZE */ + { 49939, 0x0000807C }, /* GL_VERTEX_ARRAY_STRIDE */ + { 49962, 0x0000807B }, /* GL_VERTEX_ARRAY_TYPE */ + { 49983, 0x00008650 }, /* GL_VERTEX_ATTRIB_ARRAY0_NV */ + { 50010, 0x0000865A }, /* GL_VERTEX_ATTRIB_ARRAY10_NV */ + { 50038, 0x0000865B }, /* GL_VERTEX_ATTRIB_ARRAY11_NV */ + { 50066, 0x0000865C }, /* GL_VERTEX_ATTRIB_ARRAY12_NV */ + { 50094, 0x0000865D }, /* GL_VERTEX_ATTRIB_ARRAY13_NV */ + { 50122, 0x0000865E }, /* GL_VERTEX_ATTRIB_ARRAY14_NV */ + { 50150, 0x0000865F }, /* GL_VERTEX_ATTRIB_ARRAY15_NV */ + { 50178, 0x00008651 }, /* GL_VERTEX_ATTRIB_ARRAY1_NV */ + { 50205, 0x00008652 }, /* GL_VERTEX_ATTRIB_ARRAY2_NV */ + { 50232, 0x00008653 }, /* GL_VERTEX_ATTRIB_ARRAY3_NV */ + { 50259, 0x00008654 }, /* GL_VERTEX_ATTRIB_ARRAY4_NV */ + { 50286, 0x00008655 }, /* GL_VERTEX_ATTRIB_ARRAY5_NV */ + { 50313, 0x00008656 }, /* GL_VERTEX_ATTRIB_ARRAY6_NV */ + { 50340, 0x00008657 }, /* GL_VERTEX_ATTRIB_ARRAY7_NV */ + { 50367, 0x00008658 }, /* GL_VERTEX_ATTRIB_ARRAY8_NV */ + { 50394, 0x00008659 }, /* GL_VERTEX_ATTRIB_ARRAY9_NV */ + { 50421, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */ + { 50459, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */ + { 50501, 0x000088FE }, /* GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB */ + { 50536, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */ + { 50567, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */ + { 50602, 0x000088FD }, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER */ + { 50633, 0x000088FD }, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT */ + { 50668, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */ + { 50702, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */ + { 50740, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */ + { 50771, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */ + { 50806, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */ + { 50834, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */ + { 50866, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */ + { 50896, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */ + { 50930, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */ + { 50958, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */ + { 50990, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */ + { 51010, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */ + { 51032, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */ + { 51061, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */ + { 51082, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */ + { 51111, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */ + { 51144, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */ + { 51176, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */ + { 51203, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */ + { 51234, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */ + { 51264, 0x00008B31 }, /* GL_VERTEX_SHADER */ + { 51281, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */ + { 51302, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */ + { 51329, 0x00000BA2 }, /* GL_VIEWPORT */ + { 51341, 0x00000800 }, /* GL_VIEWPORT_BIT */ + { 51357, 0x00008A1A }, /* GL_VOLATILE_APPLE */ + { 51375, 0x0000911D }, /* GL_WAIT_FAILED */ + { 51390, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */ + { 51410, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */ + { 51441, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */ + { 51476, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_OES */ + { 51511, 0x000086AD }, /* GL_WEIGHT_ARRAY_OES */ + { 51531, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */ + { 51559, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_OES */ + { 51587, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */ + { 51612, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_OES */ + { 51637, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */ + { 51664, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_OES */ + { 51691, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */ + { 51716, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_OES */ + { 51741, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */ + { 51765, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */ + { 51784, 0x000088B9 }, /* GL_WRITE_ONLY */ + { 51798, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */ + { 51816, 0x000088B9 }, /* GL_WRITE_ONLY_OES */ + { 51834, 0x00001506 }, /* GL_XOR */ + { 51841, 0x000085B9 }, /* GL_YCBCR_422_APPLE */ + { 51860, 0x00008757 }, /* GL_YCBCR_MESA */ + { 51874, 0x00000000 }, /* GL_ZERO */ + { 51882, 0x00000D16 }, /* GL_ZOOM_X */ + { 51892, 0x00000D17 }, /* GL_ZOOM_Y */ }; -static const unsigned reduced_enums[1556] = +static const unsigned reduced_enums[1562] = { - 538, /* GL_FALSE */ - 831, /* GL_LINES */ - 835, /* GL_LINE_LOOP */ - 842, /* GL_LINE_STRIP */ - 2146, /* GL_TRIANGLES */ - 2151, /* GL_TRIANGLE_STRIP */ - 2149, /* GL_TRIANGLE_FAN */ - 1512, /* GL_QUADS */ - 1516, /* GL_QUAD_STRIP */ - 1383, /* GL_POLYGON */ - 832, /* GL_LINES_ADJACENCY */ - 843, /* GL_LINE_STRIP_ADJACENCY */ - 2147, /* GL_TRIANGLES_ADJACENCY */ - 2152, /* GL_TRIANGLE_STRIP_ADJACENCY */ - 1395, /* GL_POLYGON_STIPPLE_BIT */ - 1338, /* GL_PIXEL_MODE_BIT */ - 818, /* GL_LIGHTING_BIT */ - 572, /* GL_FOG_BIT */ + 539, /* GL_FALSE */ + 834, /* GL_LINES */ + 838, /* GL_LINE_LOOP */ + 845, /* GL_LINE_STRIP */ + 2152, /* GL_TRIANGLES */ + 2157, /* GL_TRIANGLE_STRIP */ + 2155, /* GL_TRIANGLE_FAN */ + 1517, /* GL_QUADS */ + 1521, /* GL_QUAD_STRIP */ + 1388, /* GL_POLYGON */ + 835, /* GL_LINES_ADJACENCY */ + 846, /* GL_LINE_STRIP_ADJACENCY */ + 2153, /* GL_TRIANGLES_ADJACENCY */ + 2158, /* GL_TRIANGLE_STRIP_ADJACENCY */ + 1400, /* GL_POLYGON_STIPPLE_BIT */ + 1343, /* GL_PIXEL_MODE_BIT */ + 821, /* GL_LIGHTING_BIT */ + 573, /* GL_FOG_BIT */ 8, /* GL_ACCUM */ - 854, /* GL_LOAD */ - 1601, /* GL_RETURN */ - 1205, /* GL_MULT */ + 857, /* GL_LOAD */ + 1607, /* GL_RETURN */ + 1209, /* GL_MULT */ 24, /* GL_ADD */ - 1221, /* GL_NEVER */ - 808, /* GL_LESS */ - 528, /* GL_EQUAL */ - 807, /* GL_LEQUAL */ - 695, /* GL_GREATER */ - 1238, /* GL_NOTEQUAL */ - 694, /* GL_GEQUAL */ + 1225, /* GL_NEVER */ + 811, /* GL_LESS */ + 529, /* GL_EQUAL */ + 810, /* GL_LEQUAL */ + 696, /* GL_GREATER */ + 1242, /* GL_NOTEQUAL */ + 695, /* GL_GEQUAL */ 55, /* GL_ALWAYS */ - 1810, /* GL_SRC_COLOR */ - 1271, /* GL_ONE_MINUS_SRC_COLOR */ - 1808, /* GL_SRC_ALPHA */ - 1270, /* GL_ONE_MINUS_SRC_ALPHA */ - 507, /* GL_DST_ALPHA */ - 1268, /* GL_ONE_MINUS_DST_ALPHA */ - 508, /* GL_DST_COLOR */ - 1269, /* GL_ONE_MINUS_DST_COLOR */ - 1809, /* GL_SRC_ALPHA_SATURATE */ - 671, /* GL_FRONT_LEFT */ - 672, /* GL_FRONT_RIGHT */ + 1816, /* GL_SRC_COLOR */ + 1276, /* GL_ONE_MINUS_SRC_COLOR */ + 1814, /* GL_SRC_ALPHA */ + 1275, /* GL_ONE_MINUS_SRC_ALPHA */ + 508, /* GL_DST_ALPHA */ + 1273, /* GL_ONE_MINUS_DST_ALPHA */ + 509, /* GL_DST_COLOR */ + 1274, /* GL_ONE_MINUS_DST_COLOR */ + 1815, /* GL_SRC_ALPHA_SATURATE */ + 672, /* GL_FRONT_LEFT */ + 673, /* GL_FRONT_RIGHT */ 77, /* GL_BACK_LEFT */ 78, /* GL_BACK_RIGHT */ - 668, /* GL_FRONT */ + 669, /* GL_FRONT */ 76, /* GL_BACK */ - 806, /* GL_LEFT */ - 1691, /* GL_RIGHT */ - 669, /* GL_FRONT_AND_BACK */ + 809, /* GL_LEFT */ + 1697, /* GL_RIGHT */ + 670, /* GL_FRONT_AND_BACK */ 71, /* GL_AUX0 */ 72, /* GL_AUX1 */ 73, /* GL_AUX2 */ 74, /* GL_AUX3 */ - 794, /* GL_INVALID_ENUM */ - 799, /* GL_INVALID_VALUE */ - 798, /* GL_INVALID_OPERATION */ - 1815, /* GL_STACK_OVERFLOW */ - 1816, /* GL_STACK_UNDERFLOW */ - 1296, /* GL_OUT_OF_MEMORY */ - 795, /* GL_INVALID_FRAMEBUFFER_OPERATION */ + 797, /* GL_INVALID_ENUM */ + 802, /* GL_INVALID_VALUE */ + 801, /* GL_INVALID_OPERATION */ + 1821, /* GL_STACK_OVERFLOW */ + 1822, /* GL_STACK_UNDERFLOW */ + 1301, /* GL_OUT_OF_MEMORY */ + 798, /* GL_INVALID_FRAMEBUFFER_OPERATION */ 0, /* GL_2D */ 2, /* GL_3D */ 3, /* GL_3D_COLOR */ 4, /* GL_3D_COLOR_TEXTURE */ 6, /* GL_4D_COLOR_TEXTURE */ - 1316, /* GL_PASS_THROUGH_TOKEN */ - 1382, /* GL_POINT_TOKEN */ - 845, /* GL_LINE_TOKEN */ - 1396, /* GL_POLYGON_TOKEN */ + 1321, /* GL_PASS_THROUGH_TOKEN */ + 1387, /* GL_POINT_TOKEN */ + 848, /* GL_LINE_TOKEN */ + 1401, /* GL_POLYGON_TOKEN */ 87, /* GL_BITMAP_TOKEN */ - 506, /* GL_DRAW_PIXEL_TOKEN */ - 352, /* GL_COPY_PIXEL_TOKEN */ - 836, /* GL_LINE_RESET_TOKEN */ - 531, /* GL_EXP */ - 532, /* GL_EXP2 */ - 389, /* GL_CW */ + 507, /* GL_DRAW_PIXEL_TOKEN */ + 353, /* GL_COPY_PIXEL_TOKEN */ + 839, /* GL_LINE_RESET_TOKEN */ + 532, /* GL_EXP */ + 533, /* GL_EXP2 */ + 390, /* GL_CW */ 154, /* GL_CCW */ 187, /* GL_COEFF */ - 1293, /* GL_ORDER */ - 443, /* GL_DOMAIN */ - 362, /* GL_CURRENT_COLOR */ - 365, /* GL_CURRENT_INDEX */ - 371, /* GL_CURRENT_NORMAL */ - 385, /* GL_CURRENT_TEXTURE_COORDS */ - 377, /* GL_CURRENT_RASTER_COLOR */ - 379, /* GL_CURRENT_RASTER_INDEX */ - 383, /* GL_CURRENT_RASTER_TEXTURE_COORDS */ - 380, /* GL_CURRENT_RASTER_POSITION */ - 381, /* GL_CURRENT_RASTER_POSITION_VALID */ - 378, /* GL_CURRENT_RASTER_DISTANCE */ - 1374, /* GL_POINT_SMOOTH */ - 1358, /* GL_POINT_SIZE */ - 1373, /* GL_POINT_SIZE_RANGE */ - 1364, /* GL_POINT_SIZE_GRANULARITY */ - 837, /* GL_LINE_SMOOTH */ - 846, /* GL_LINE_WIDTH */ - 848, /* GL_LINE_WIDTH_RANGE */ - 847, /* GL_LINE_WIDTH_GRANULARITY */ - 839, /* GL_LINE_STIPPLE */ - 840, /* GL_LINE_STIPPLE_PATTERN */ - 841, /* GL_LINE_STIPPLE_REPEAT */ - 853, /* GL_LIST_MODE */ - 1060, /* GL_MAX_LIST_NESTING */ - 850, /* GL_LIST_BASE */ - 852, /* GL_LIST_INDEX */ - 1385, /* GL_POLYGON_MODE */ - 1392, /* GL_POLYGON_SMOOTH */ - 1394, /* GL_POLYGON_STIPPLE */ - 517, /* GL_EDGE_FLAG */ - 355, /* GL_CULL_FACE */ - 356, /* GL_CULL_FACE_MODE */ - 670, /* GL_FRONT_FACE */ - 817, /* GL_LIGHTING */ - 822, /* GL_LIGHT_MODEL_LOCAL_VIEWER */ - 823, /* GL_LIGHT_MODEL_TWO_SIDE */ - 819, /* GL_LIGHT_MODEL_AMBIENT */ - 1757, /* GL_SHADE_MODEL */ + 1298, /* GL_ORDER */ + 444, /* GL_DOMAIN */ + 363, /* GL_CURRENT_COLOR */ + 366, /* GL_CURRENT_INDEX */ + 372, /* GL_CURRENT_NORMAL */ + 386, /* GL_CURRENT_TEXTURE_COORDS */ + 378, /* GL_CURRENT_RASTER_COLOR */ + 380, /* GL_CURRENT_RASTER_INDEX */ + 384, /* GL_CURRENT_RASTER_TEXTURE_COORDS */ + 381, /* GL_CURRENT_RASTER_POSITION */ + 382, /* GL_CURRENT_RASTER_POSITION_VALID */ + 379, /* GL_CURRENT_RASTER_DISTANCE */ + 1379, /* GL_POINT_SMOOTH */ + 1363, /* GL_POINT_SIZE */ + 1378, /* GL_POINT_SIZE_RANGE */ + 1369, /* GL_POINT_SIZE_GRANULARITY */ + 840, /* GL_LINE_SMOOTH */ + 849, /* GL_LINE_WIDTH */ + 851, /* GL_LINE_WIDTH_RANGE */ + 850, /* GL_LINE_WIDTH_GRANULARITY */ + 842, /* GL_LINE_STIPPLE */ + 843, /* GL_LINE_STIPPLE_PATTERN */ + 844, /* GL_LINE_STIPPLE_REPEAT */ + 856, /* GL_LIST_MODE */ + 1064, /* GL_MAX_LIST_NESTING */ + 853, /* GL_LIST_BASE */ + 855, /* GL_LIST_INDEX */ + 1390, /* GL_POLYGON_MODE */ + 1397, /* GL_POLYGON_SMOOTH */ + 1399, /* GL_POLYGON_STIPPLE */ + 518, /* GL_EDGE_FLAG */ + 356, /* GL_CULL_FACE */ + 357, /* GL_CULL_FACE_MODE */ + 671, /* GL_FRONT_FACE */ + 820, /* GL_LIGHTING */ + 825, /* GL_LIGHT_MODEL_LOCAL_VIEWER */ + 826, /* GL_LIGHT_MODEL_TWO_SIDE */ + 822, /* GL_LIGHT_MODEL_AMBIENT */ + 1763, /* GL_SHADE_MODEL */ 235, /* GL_COLOR_MATERIAL_FACE */ 236, /* GL_COLOR_MATERIAL_PARAMETER */ 234, /* GL_COLOR_MATERIAL */ - 571, /* GL_FOG */ - 593, /* GL_FOG_INDEX */ - 589, /* GL_FOG_DENSITY */ - 597, /* GL_FOG_START */ - 591, /* GL_FOG_END */ - 594, /* GL_FOG_MODE */ - 573, /* GL_FOG_COLOR */ - 428, /* GL_DEPTH_RANGE */ - 437, /* GL_DEPTH_TEST */ - 440, /* GL_DEPTH_WRITEMASK */ - 413, /* GL_DEPTH_CLEAR_VALUE */ - 427, /* GL_DEPTH_FUNC */ + 572, /* GL_FOG */ + 594, /* GL_FOG_INDEX */ + 590, /* GL_FOG_DENSITY */ + 598, /* GL_FOG_START */ + 592, /* GL_FOG_END */ + 595, /* GL_FOG_MODE */ + 574, /* GL_FOG_COLOR */ + 429, /* GL_DEPTH_RANGE */ + 438, /* GL_DEPTH_TEST */ + 441, /* GL_DEPTH_WRITEMASK */ + 414, /* GL_DEPTH_CLEAR_VALUE */ + 428, /* GL_DEPTH_FUNC */ 12, /* GL_ACCUM_CLEAR_VALUE */ - 1860, /* GL_STENCIL_TEST */ - 1841, /* GL_STENCIL_CLEAR_VALUE */ - 1843, /* GL_STENCIL_FUNC */ - 1862, /* GL_STENCIL_VALUE_MASK */ - 1842, /* GL_STENCIL_FAIL */ - 1857, /* GL_STENCIL_PASS_DEPTH_FAIL */ - 1858, /* GL_STENCIL_PASS_DEPTH_PASS */ - 1859, /* GL_STENCIL_REF */ - 1863, /* GL_STENCIL_WRITEMASK */ - 1010, /* GL_MATRIX_MODE */ - 1227, /* GL_NORMALIZE */ - 2278, /* GL_VIEWPORT */ - 1200, /* GL_MODELVIEW_STACK_DEPTH */ - 1486, /* GL_PROJECTION_STACK_DEPTH */ - 2100, /* GL_TEXTURE_STACK_DEPTH */ - 1197, /* GL_MODELVIEW_MATRIX */ - 1484, /* GL_PROJECTION_MATRIX */ - 2080, /* GL_TEXTURE_MATRIX */ + 1866, /* GL_STENCIL_TEST */ + 1847, /* GL_STENCIL_CLEAR_VALUE */ + 1849, /* GL_STENCIL_FUNC */ + 1868, /* GL_STENCIL_VALUE_MASK */ + 1848, /* GL_STENCIL_FAIL */ + 1863, /* GL_STENCIL_PASS_DEPTH_FAIL */ + 1864, /* GL_STENCIL_PASS_DEPTH_PASS */ + 1865, /* GL_STENCIL_REF */ + 1869, /* GL_STENCIL_WRITEMASK */ + 1014, /* GL_MATRIX_MODE */ + 1231, /* GL_NORMALIZE */ + 2285, /* GL_VIEWPORT */ + 1204, /* GL_MODELVIEW_STACK_DEPTH */ + 1491, /* GL_PROJECTION_STACK_DEPTH */ + 2106, /* GL_TEXTURE_STACK_DEPTH */ + 1201, /* GL_MODELVIEW_MATRIX */ + 1489, /* GL_PROJECTION_MATRIX */ + 2086, /* GL_TEXTURE_MATRIX */ 69, /* GL_ATTRIB_STACK_DEPTH */ 169, /* GL_CLIENT_ATTRIB_STACK_DEPTH */ 51, /* GL_ALPHA_TEST */ 52, /* GL_ALPHA_TEST_FUNC */ 53, /* GL_ALPHA_TEST_REF */ - 442, /* GL_DITHER */ + 443, /* GL_DITHER */ 91, /* GL_BLEND_DST */ 105, /* GL_BLEND_SRC */ 88, /* GL_BLEND */ - 856, /* GL_LOGIC_OP_MODE */ - 743, /* GL_INDEX_LOGIC_OP */ + 859, /* GL_LOGIC_OP_MODE */ + 745, /* GL_INDEX_LOGIC_OP */ 233, /* GL_COLOR_LOGIC_OP */ 75, /* GL_AUX_BUFFERS */ - 453, /* GL_DRAW_BUFFER */ - 1539, /* GL_READ_BUFFER */ - 1734, /* GL_SCISSOR_BOX */ - 1735, /* GL_SCISSOR_TEST */ - 742, /* GL_INDEX_CLEAR_VALUE */ - 747, /* GL_INDEX_WRITEMASK */ + 454, /* GL_DRAW_BUFFER */ + 1544, /* GL_READ_BUFFER */ + 1740, /* GL_SCISSOR_BOX */ + 1741, /* GL_SCISSOR_TEST */ + 744, /* GL_INDEX_CLEAR_VALUE */ + 749, /* GL_INDEX_WRITEMASK */ 230, /* GL_COLOR_CLEAR_VALUE */ 272, /* GL_COLOR_WRITEMASK */ - 744, /* GL_INDEX_MODE */ - 1680, /* GL_RGBA_MODE */ - 452, /* GL_DOUBLEBUFFER */ - 1864, /* GL_STEREO */ - 1593, /* GL_RENDER_MODE */ - 1317, /* GL_PERSPECTIVE_CORRECTION_HINT */ - 1375, /* GL_POINT_SMOOTH_HINT */ - 838, /* GL_LINE_SMOOTH_HINT */ - 1393, /* GL_POLYGON_SMOOTH_HINT */ - 592, /* GL_FOG_HINT */ - 2060, /* GL_TEXTURE_GEN_S */ - 2062, /* GL_TEXTURE_GEN_T */ - 2059, /* GL_TEXTURE_GEN_R */ - 2058, /* GL_TEXTURE_GEN_Q */ - 1330, /* GL_PIXEL_MAP_I_TO_I */ - 1336, /* GL_PIXEL_MAP_S_TO_S */ - 1332, /* GL_PIXEL_MAP_I_TO_R */ - 1328, /* GL_PIXEL_MAP_I_TO_G */ - 1326, /* GL_PIXEL_MAP_I_TO_B */ - 1324, /* GL_PIXEL_MAP_I_TO_A */ - 1334, /* GL_PIXEL_MAP_R_TO_R */ - 1322, /* GL_PIXEL_MAP_G_TO_G */ - 1320, /* GL_PIXEL_MAP_B_TO_B */ - 1318, /* GL_PIXEL_MAP_A_TO_A */ - 1331, /* GL_PIXEL_MAP_I_TO_I_SIZE */ - 1337, /* GL_PIXEL_MAP_S_TO_S_SIZE */ - 1333, /* GL_PIXEL_MAP_I_TO_R_SIZE */ - 1329, /* GL_PIXEL_MAP_I_TO_G_SIZE */ - 1327, /* GL_PIXEL_MAP_I_TO_B_SIZE */ - 1325, /* GL_PIXEL_MAP_I_TO_A_SIZE */ - 1335, /* GL_PIXEL_MAP_R_TO_R_SIZE */ - 1323, /* GL_PIXEL_MAP_G_TO_G_SIZE */ - 1321, /* GL_PIXEL_MAP_B_TO_B_SIZE */ - 1319, /* GL_PIXEL_MAP_A_TO_A_SIZE */ - 2163, /* GL_UNPACK_SWAP_BYTES */ - 2158, /* GL_UNPACK_LSB_FIRST */ - 2159, /* GL_UNPACK_ROW_LENGTH */ - 2162, /* GL_UNPACK_SKIP_ROWS */ - 2161, /* GL_UNPACK_SKIP_PIXELS */ - 2156, /* GL_UNPACK_ALIGNMENT */ - 1305, /* GL_PACK_SWAP_BYTES */ - 1300, /* GL_PACK_LSB_FIRST */ - 1301, /* GL_PACK_ROW_LENGTH */ - 1304, /* GL_PACK_SKIP_ROWS */ - 1303, /* GL_PACK_SKIP_PIXELS */ - 1297, /* GL_PACK_ALIGNMENT */ - 951, /* GL_MAP_COLOR */ - 956, /* GL_MAP_STENCIL */ - 746, /* GL_INDEX_SHIFT */ - 745, /* GL_INDEX_OFFSET */ - 1555, /* GL_RED_SCALE */ - 1551, /* GL_RED_BIAS */ - 2304, /* GL_ZOOM_X */ - 2305, /* GL_ZOOM_Y */ - 701, /* GL_GREEN_SCALE */ - 697, /* GL_GREEN_BIAS */ + 746, /* GL_INDEX_MODE */ + 1686, /* GL_RGBA_MODE */ + 453, /* GL_DOUBLEBUFFER */ + 1870, /* GL_STEREO */ + 1598, /* GL_RENDER_MODE */ + 1322, /* GL_PERSPECTIVE_CORRECTION_HINT */ + 1380, /* GL_POINT_SMOOTH_HINT */ + 841, /* GL_LINE_SMOOTH_HINT */ + 1398, /* GL_POLYGON_SMOOTH_HINT */ + 593, /* GL_FOG_HINT */ + 2066, /* GL_TEXTURE_GEN_S */ + 2068, /* GL_TEXTURE_GEN_T */ + 2065, /* GL_TEXTURE_GEN_R */ + 2064, /* GL_TEXTURE_GEN_Q */ + 1335, /* GL_PIXEL_MAP_I_TO_I */ + 1341, /* GL_PIXEL_MAP_S_TO_S */ + 1337, /* GL_PIXEL_MAP_I_TO_R */ + 1333, /* GL_PIXEL_MAP_I_TO_G */ + 1331, /* GL_PIXEL_MAP_I_TO_B */ + 1329, /* GL_PIXEL_MAP_I_TO_A */ + 1339, /* GL_PIXEL_MAP_R_TO_R */ + 1327, /* GL_PIXEL_MAP_G_TO_G */ + 1325, /* GL_PIXEL_MAP_B_TO_B */ + 1323, /* GL_PIXEL_MAP_A_TO_A */ + 1336, /* GL_PIXEL_MAP_I_TO_I_SIZE */ + 1342, /* GL_PIXEL_MAP_S_TO_S_SIZE */ + 1338, /* GL_PIXEL_MAP_I_TO_R_SIZE */ + 1334, /* GL_PIXEL_MAP_I_TO_G_SIZE */ + 1332, /* GL_PIXEL_MAP_I_TO_B_SIZE */ + 1330, /* GL_PIXEL_MAP_I_TO_A_SIZE */ + 1340, /* GL_PIXEL_MAP_R_TO_R_SIZE */ + 1328, /* GL_PIXEL_MAP_G_TO_G_SIZE */ + 1326, /* GL_PIXEL_MAP_B_TO_B_SIZE */ + 1324, /* GL_PIXEL_MAP_A_TO_A_SIZE */ + 2170, /* GL_UNPACK_SWAP_BYTES */ + 2165, /* GL_UNPACK_LSB_FIRST */ + 2166, /* GL_UNPACK_ROW_LENGTH */ + 2169, /* GL_UNPACK_SKIP_ROWS */ + 2168, /* GL_UNPACK_SKIP_PIXELS */ + 2163, /* GL_UNPACK_ALIGNMENT */ + 1310, /* GL_PACK_SWAP_BYTES */ + 1305, /* GL_PACK_LSB_FIRST */ + 1306, /* GL_PACK_ROW_LENGTH */ + 1309, /* GL_PACK_SKIP_ROWS */ + 1308, /* GL_PACK_SKIP_PIXELS */ + 1302, /* GL_PACK_ALIGNMENT */ + 955, /* GL_MAP_COLOR */ + 960, /* GL_MAP_STENCIL */ + 748, /* GL_INDEX_SHIFT */ + 747, /* GL_INDEX_OFFSET */ + 1560, /* GL_RED_SCALE */ + 1556, /* GL_RED_BIAS */ + 2311, /* GL_ZOOM_X */ + 2312, /* GL_ZOOM_Y */ + 702, /* GL_GREEN_SCALE */ + 698, /* GL_GREEN_BIAS */ 115, /* GL_BLUE_SCALE */ 111, /* GL_BLUE_BIAS */ 50, /* GL_ALPHA_SCALE */ 47, /* GL_ALPHA_BIAS */ - 429, /* GL_DEPTH_SCALE */ - 405, /* GL_DEPTH_BIAS */ - 1042, /* GL_MAX_EVAL_ORDER */ - 1059, /* GL_MAX_LIGHTS */ - 1022, /* GL_MAX_CLIP_DISTANCES */ - 1115, /* GL_MAX_TEXTURE_SIZE */ - 1066, /* GL_MAX_PIXEL_MAP_TABLE */ - 1018, /* GL_MAX_ATTRIB_STACK_DEPTH */ - 1062, /* GL_MAX_MODELVIEW_STACK_DEPTH */ - 1063, /* GL_MAX_NAME_STACK_DEPTH */ - 1094, /* GL_MAX_PROJECTION_STACK_DEPTH */ - 1116, /* GL_MAX_TEXTURE_STACK_DEPTH */ - 1142, /* GL_MAX_VIEWPORT_DIMS */ - 1019, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */ - 1874, /* GL_SUBPIXEL_BITS */ - 741, /* GL_INDEX_BITS */ - 1552, /* GL_RED_BITS */ - 698, /* GL_GREEN_BITS */ + 430, /* GL_DEPTH_SCALE */ + 406, /* GL_DEPTH_BIAS */ + 1046, /* GL_MAX_EVAL_ORDER */ + 1063, /* GL_MAX_LIGHTS */ + 1026, /* GL_MAX_CLIP_DISTANCES */ + 1119, /* GL_MAX_TEXTURE_SIZE */ + 1070, /* GL_MAX_PIXEL_MAP_TABLE */ + 1022, /* GL_MAX_ATTRIB_STACK_DEPTH */ + 1066, /* GL_MAX_MODELVIEW_STACK_DEPTH */ + 1067, /* GL_MAX_NAME_STACK_DEPTH */ + 1098, /* GL_MAX_PROJECTION_STACK_DEPTH */ + 1120, /* GL_MAX_TEXTURE_STACK_DEPTH */ + 1146, /* GL_MAX_VIEWPORT_DIMS */ + 1023, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */ + 1880, /* GL_SUBPIXEL_BITS */ + 743, /* GL_INDEX_BITS */ + 1557, /* GL_RED_BITS */ + 699, /* GL_GREEN_BITS */ 112, /* GL_BLUE_BITS */ 48, /* GL_ALPHA_BITS */ - 406, /* GL_DEPTH_BITS */ - 1838, /* GL_STENCIL_BITS */ + 407, /* GL_DEPTH_BITS */ + 1844, /* GL_STENCIL_BITS */ 14, /* GL_ACCUM_RED_BITS */ 13, /* GL_ACCUM_GREEN_BITS */ 10, /* GL_ACCUM_BLUE_BITS */ 9, /* GL_ACCUM_ALPHA_BITS */ - 1214, /* GL_NAME_STACK_DEPTH */ + 1218, /* GL_NAME_STACK_DEPTH */ 70, /* GL_AUTO_NORMAL */ - 897, /* GL_MAP1_COLOR_4 */ - 900, /* GL_MAP1_INDEX */ - 901, /* GL_MAP1_NORMAL */ - 902, /* GL_MAP1_TEXTURE_COORD_1 */ - 903, /* GL_MAP1_TEXTURE_COORD_2 */ - 904, /* GL_MAP1_TEXTURE_COORD_3 */ - 905, /* GL_MAP1_TEXTURE_COORD_4 */ - 906, /* GL_MAP1_VERTEX_3 */ - 907, /* GL_MAP1_VERTEX_4 */ - 924, /* GL_MAP2_COLOR_4 */ - 927, /* GL_MAP2_INDEX */ - 928, /* GL_MAP2_NORMAL */ - 929, /* GL_MAP2_TEXTURE_COORD_1 */ - 930, /* GL_MAP2_TEXTURE_COORD_2 */ - 931, /* GL_MAP2_TEXTURE_COORD_3 */ - 932, /* GL_MAP2_TEXTURE_COORD_4 */ - 933, /* GL_MAP2_VERTEX_3 */ - 934, /* GL_MAP2_VERTEX_4 */ - 898, /* GL_MAP1_GRID_DOMAIN */ - 899, /* GL_MAP1_GRID_SEGMENTS */ - 925, /* GL_MAP2_GRID_DOMAIN */ - 926, /* GL_MAP2_GRID_SEGMENTS */ - 1957, /* GL_TEXTURE_1D */ - 1960, /* GL_TEXTURE_2D */ - 541, /* GL_FEEDBACK_BUFFER_POINTER */ - 542, /* GL_FEEDBACK_BUFFER_SIZE */ - 543, /* GL_FEEDBACK_BUFFER_TYPE */ - 1744, /* GL_SELECTION_BUFFER_POINTER */ - 1745, /* GL_SELECTION_BUFFER_SIZE */ - 2106, /* GL_TEXTURE_WIDTH */ - 2066, /* GL_TEXTURE_HEIGHT */ - 2010, /* GL_TEXTURE_COMPONENTS */ - 1988, /* GL_TEXTURE_BORDER_COLOR */ - 1987, /* GL_TEXTURE_BORDER */ - 444, /* GL_DONT_CARE */ - 539, /* GL_FASTEST */ - 1222, /* GL_NICEST */ + 901, /* GL_MAP1_COLOR_4 */ + 904, /* GL_MAP1_INDEX */ + 905, /* GL_MAP1_NORMAL */ + 906, /* GL_MAP1_TEXTURE_COORD_1 */ + 907, /* GL_MAP1_TEXTURE_COORD_2 */ + 908, /* GL_MAP1_TEXTURE_COORD_3 */ + 909, /* GL_MAP1_TEXTURE_COORD_4 */ + 910, /* GL_MAP1_VERTEX_3 */ + 911, /* GL_MAP1_VERTEX_4 */ + 928, /* GL_MAP2_COLOR_4 */ + 931, /* GL_MAP2_INDEX */ + 932, /* GL_MAP2_NORMAL */ + 933, /* GL_MAP2_TEXTURE_COORD_1 */ + 934, /* GL_MAP2_TEXTURE_COORD_2 */ + 935, /* GL_MAP2_TEXTURE_COORD_3 */ + 936, /* GL_MAP2_TEXTURE_COORD_4 */ + 937, /* GL_MAP2_VERTEX_3 */ + 938, /* GL_MAP2_VERTEX_4 */ + 902, /* GL_MAP1_GRID_DOMAIN */ + 903, /* GL_MAP1_GRID_SEGMENTS */ + 929, /* GL_MAP2_GRID_DOMAIN */ + 930, /* GL_MAP2_GRID_SEGMENTS */ + 1963, /* GL_TEXTURE_1D */ + 1966, /* GL_TEXTURE_2D */ + 542, /* GL_FEEDBACK_BUFFER_POINTER */ + 543, /* GL_FEEDBACK_BUFFER_SIZE */ + 544, /* GL_FEEDBACK_BUFFER_TYPE */ + 1750, /* GL_SELECTION_BUFFER_POINTER */ + 1751, /* GL_SELECTION_BUFFER_SIZE */ + 2112, /* GL_TEXTURE_WIDTH */ + 2072, /* GL_TEXTURE_HEIGHT */ + 2016, /* GL_TEXTURE_COMPONENTS */ + 1994, /* GL_TEXTURE_BORDER_COLOR */ + 1993, /* GL_TEXTURE_BORDER */ + 445, /* GL_DONT_CARE */ + 540, /* GL_FASTEST */ + 1226, /* GL_NICEST */ 56, /* GL_AMBIENT */ - 441, /* GL_DIFFUSE */ - 1797, /* GL_SPECULAR */ - 1397, /* GL_POSITION */ - 1800, /* GL_SPOT_DIRECTION */ - 1801, /* GL_SPOT_EXPONENT */ - 1799, /* GL_SPOT_CUTOFF */ + 442, /* GL_DIFFUSE */ + 1803, /* GL_SPECULAR */ + 1402, /* GL_POSITION */ + 1806, /* GL_SPOT_DIRECTION */ + 1807, /* GL_SPOT_EXPONENT */ + 1805, /* GL_SPOT_CUTOFF */ 320, /* GL_CONSTANT_ATTENUATION */ - 826, /* GL_LINEAR_ATTENUATION */ - 1511, /* GL_QUADRATIC_ATTENUATION */ + 829, /* GL_LINEAR_ATTENUATION */ + 1516, /* GL_QUADRATIC_ATTENUATION */ 287, /* GL_COMPILE */ 288, /* GL_COMPILE_AND_EXECUTE */ 149, /* GL_BYTE */ - 2165, /* GL_UNSIGNED_BYTE */ - 1762, /* GL_SHORT */ - 2204, /* GL_UNSIGNED_SHORT */ - 749, /* GL_INT */ - 2168, /* GL_UNSIGNED_INT */ - 552, /* GL_FLOAT */ + 2172, /* GL_UNSIGNED_BYTE */ + 1768, /* GL_SHORT */ + 2211, /* GL_UNSIGNED_SHORT */ + 752, /* GL_INT */ + 2175, /* GL_UNSIGNED_INT */ + 553, /* GL_FLOAT */ 1, /* GL_2_BYTES */ 5, /* GL_3_BYTES */ 7, /* GL_4_BYTES */ - 451, /* GL_DOUBLE */ - 702, /* GL_HALF_FLOAT */ - 547, /* GL_FIXED */ + 452, /* GL_DOUBLE */ + 704, /* GL_HALF_FLOAT */ + 548, /* GL_FIXED */ 165, /* GL_CLEAR */ 58, /* GL_AND */ 60, /* GL_AND_REVERSE */ - 350, /* GL_COPY */ + 351, /* GL_COPY */ 59, /* GL_AND_INVERTED */ - 1225, /* GL_NOOP */ - 2300, /* GL_XOR */ - 1292, /* GL_OR */ - 1226, /* GL_NOR */ - 529, /* GL_EQUIV */ - 802, /* GL_INVERT */ - 1295, /* GL_OR_REVERSE */ - 351, /* GL_COPY_INVERTED */ - 1294, /* GL_OR_INVERTED */ - 1215, /* GL_NAND */ - 1751, /* GL_SET */ - 526, /* GL_EMISSION */ - 1761, /* GL_SHININESS */ + 1229, /* GL_NOOP */ + 2307, /* GL_XOR */ + 1297, /* GL_OR */ + 1230, /* GL_NOR */ + 530, /* GL_EQUIV */ + 805, /* GL_INVERT */ + 1300, /* GL_OR_REVERSE */ + 352, /* GL_COPY_INVERTED */ + 1299, /* GL_OR_INVERTED */ + 1219, /* GL_NAND */ + 1757, /* GL_SET */ + 527, /* GL_EMISSION */ + 1767, /* GL_SHININESS */ 57, /* GL_AMBIENT_AND_DIFFUSE */ 232, /* GL_COLOR_INDEXES */ - 1164, /* GL_MODELVIEW */ - 1483, /* GL_PROJECTION */ - 1892, /* GL_TEXTURE */ + 1168, /* GL_MODELVIEW */ + 1488, /* GL_PROJECTION */ + 1898, /* GL_TEXTURE */ 188, /* GL_COLOR */ - 398, /* GL_DEPTH */ - 1823, /* GL_STENCIL */ + 399, /* GL_DEPTH */ + 1829, /* GL_STENCIL */ 231, /* GL_COLOR_INDEX */ - 1844, /* GL_STENCIL_INDEX */ - 414, /* GL_DEPTH_COMPONENT */ - 1548, /* GL_RED */ - 696, /* GL_GREEN */ + 1850, /* GL_STENCIL_INDEX */ + 415, /* GL_DEPTH_COMPONENT */ + 1553, /* GL_RED */ + 697, /* GL_GREEN */ 110, /* GL_BLUE */ 32, /* GL_ALPHA */ - 1604, /* GL_RGB */ - 1644, /* GL_RGBA */ - 860, /* GL_LUMINANCE */ - 887, /* GL_LUMINANCE_ALPHA */ + 1610, /* GL_RGB */ + 1650, /* GL_RGBA */ + 864, /* GL_LUMINANCE */ + 891, /* GL_LUMINANCE_ALPHA */ 86, /* GL_BITMAP */ - 1347, /* GL_POINT */ - 824, /* GL_LINE */ - 544, /* GL_FILL */ - 1562, /* GL_RENDER */ - 540, /* GL_FEEDBACK */ - 1743, /* GL_SELECT */ - 551, /* GL_FLAT */ - 1772, /* GL_SMOOTH */ - 803, /* GL_KEEP */ - 1595, /* GL_REPLACE */ - 731, /* GL_INCR */ - 394, /* GL_DECR */ - 2221, /* GL_VENDOR */ - 1592, /* GL_RENDERER */ - 2222, /* GL_VERSION */ - 533, /* GL_EXTENSIONS */ - 1692, /* GL_S */ - 1883, /* GL_T */ - 1531, /* GL_R */ - 1510, /* GL_Q */ - 1201, /* GL_MODULATE */ - 393, /* GL_DECAL */ - 2053, /* GL_TEXTURE_ENV_MODE */ - 2052, /* GL_TEXTURE_ENV_COLOR */ - 2051, /* GL_TEXTURE_ENV */ - 534, /* GL_EYE_LINEAR */ - 1253, /* GL_OBJECT_LINEAR */ - 1798, /* GL_SPHERE_MAP */ - 2056, /* GL_TEXTURE_GEN_MODE */ - 1255, /* GL_OBJECT_PLANE */ - 535, /* GL_EYE_PLANE */ - 1216, /* GL_NEAREST */ - 825, /* GL_LINEAR */ - 1220, /* GL_NEAREST_MIPMAP_NEAREST */ - 830, /* GL_LINEAR_MIPMAP_NEAREST */ - 1219, /* GL_NEAREST_MIPMAP_LINEAR */ - 829, /* GL_LINEAR_MIPMAP_LINEAR */ - 2079, /* GL_TEXTURE_MAG_FILTER */ - 2088, /* GL_TEXTURE_MIN_FILTER */ - 2109, /* GL_TEXTURE_WRAP_S */ - 2110, /* GL_TEXTURE_WRAP_T */ + 1352, /* GL_POINT */ + 827, /* GL_LINE */ + 545, /* GL_FILL */ + 1567, /* GL_RENDER */ + 541, /* GL_FEEDBACK */ + 1749, /* GL_SELECT */ + 552, /* GL_FLAT */ + 1778, /* GL_SMOOTH */ + 806, /* GL_KEEP */ + 1600, /* GL_REPLACE */ + 733, /* GL_INCR */ + 395, /* GL_DECR */ + 2228, /* GL_VENDOR */ + 1597, /* GL_RENDERER */ + 2229, /* GL_VERSION */ + 534, /* GL_EXTENSIONS */ + 1698, /* GL_S */ + 1889, /* GL_T */ + 1536, /* GL_R */ + 1515, /* GL_Q */ + 1205, /* GL_MODULATE */ + 394, /* GL_DECAL */ + 2059, /* GL_TEXTURE_ENV_MODE */ + 2058, /* GL_TEXTURE_ENV_COLOR */ + 2057, /* GL_TEXTURE_ENV */ + 535, /* GL_EYE_LINEAR */ + 1258, /* GL_OBJECT_LINEAR */ + 1804, /* GL_SPHERE_MAP */ + 2062, /* GL_TEXTURE_GEN_MODE */ + 1260, /* GL_OBJECT_PLANE */ + 536, /* GL_EYE_PLANE */ + 1220, /* GL_NEAREST */ + 828, /* GL_LINEAR */ + 1224, /* GL_NEAREST_MIPMAP_NEAREST */ + 833, /* GL_LINEAR_MIPMAP_NEAREST */ + 1223, /* GL_NEAREST_MIPMAP_LINEAR */ + 832, /* GL_LINEAR_MIPMAP_LINEAR */ + 2085, /* GL_TEXTURE_MAG_FILTER */ + 2094, /* GL_TEXTURE_MIN_FILTER */ + 2115, /* GL_TEXTURE_WRAP_S */ + 2116, /* GL_TEXTURE_WRAP_T */ 155, /* GL_CLAMP */ - 1594, /* GL_REPEAT */ - 1391, /* GL_POLYGON_OFFSET_UNITS */ - 1390, /* GL_POLYGON_OFFSET_POINT */ - 1389, /* GL_POLYGON_OFFSET_LINE */ - 1534, /* GL_R3_G3_B2 */ - 2218, /* GL_V2F */ - 2219, /* GL_V3F */ + 1599, /* GL_REPEAT */ + 1396, /* GL_POLYGON_OFFSET_UNITS */ + 1395, /* GL_POLYGON_OFFSET_POINT */ + 1394, /* GL_POLYGON_OFFSET_LINE */ + 1539, /* GL_R3_G3_B2 */ + 2225, /* GL_V2F */ + 2226, /* GL_V3F */ 152, /* GL_C4UB_V2F */ 153, /* GL_C4UB_V3F */ 150, /* GL_C3F_V3F */ - 1213, /* GL_N3F_V3F */ + 1217, /* GL_N3F_V3F */ 151, /* GL_C4F_N3F_V3F */ - 1888, /* GL_T2F_V3F */ - 1890, /* GL_T4F_V4F */ - 1886, /* GL_T2F_C4UB_V3F */ - 1884, /* GL_T2F_C3F_V3F */ - 1887, /* GL_T2F_N3F_V3F */ - 1885, /* GL_T2F_C4F_N3F_V3F */ - 1889, /* GL_T4F_C4F_N3F_V4F */ + 1894, /* GL_T2F_V3F */ + 1896, /* GL_T4F_V4F */ + 1892, /* GL_T2F_C4UB_V3F */ + 1890, /* GL_T2F_C3F_V3F */ + 1893, /* GL_T2F_N3F_V3F */ + 1891, /* GL_T2F_C4F_N3F_V3F */ + 1895, /* GL_T4F_C4F_N3F_V4F */ 172, /* GL_CLIP_DISTANCE0 */ 173, /* GL_CLIP_DISTANCE1 */ 174, /* GL_CLIP_DISTANCE2 */ @@ -5086,184 +5100,184 @@ static const unsigned reduced_enums[1556] = 177, /* GL_CLIP_DISTANCE5 */ 178, /* GL_CLIP_DISTANCE6 */ 179, /* GL_CLIP_DISTANCE7 */ - 809, /* GL_LIGHT0 */ - 810, /* GL_LIGHT1 */ - 811, /* GL_LIGHT2 */ - 812, /* GL_LIGHT3 */ - 813, /* GL_LIGHT4 */ - 814, /* GL_LIGHT5 */ - 815, /* GL_LIGHT6 */ - 816, /* GL_LIGHT7 */ - 706, /* GL_HINT_BIT */ + 812, /* GL_LIGHT0 */ + 813, /* GL_LIGHT1 */ + 814, /* GL_LIGHT2 */ + 815, /* GL_LIGHT3 */ + 816, /* GL_LIGHT4 */ + 817, /* GL_LIGHT5 */ + 818, /* GL_LIGHT6 */ + 819, /* GL_LIGHT7 */ + 708, /* GL_HINT_BIT */ 322, /* GL_CONSTANT_COLOR */ - 1266, /* GL_ONE_MINUS_CONSTANT_COLOR */ + 1271, /* GL_ONE_MINUS_CONSTANT_COLOR */ 317, /* GL_CONSTANT_ALPHA */ - 1264, /* GL_ONE_MINUS_CONSTANT_ALPHA */ + 1269, /* GL_ONE_MINUS_CONSTANT_ALPHA */ 89, /* GL_BLEND_COLOR */ - 673, /* GL_FUNC_ADD */ - 1145, /* GL_MIN */ - 1013, /* GL_MAX */ + 674, /* GL_FUNC_ADD */ + 1149, /* GL_MIN */ + 1017, /* GL_MAX */ 96, /* GL_BLEND_EQUATION */ - 679, /* GL_FUNC_SUBTRACT */ - 676, /* GL_FUNC_REVERSE_SUBTRACT */ - 330, /* GL_CONVOLUTION_1D */ - 331, /* GL_CONVOLUTION_2D */ - 1746, /* GL_SEPARABLE_2D */ - 334, /* GL_CONVOLUTION_BORDER_MODE */ - 338, /* GL_CONVOLUTION_FILTER_SCALE */ - 336, /* GL_CONVOLUTION_FILTER_BIAS */ - 1549, /* GL_REDUCE */ - 340, /* GL_CONVOLUTION_FORMAT */ - 344, /* GL_CONVOLUTION_WIDTH */ - 342, /* GL_CONVOLUTION_HEIGHT */ - 1032, /* GL_MAX_CONVOLUTION_WIDTH */ - 1030, /* GL_MAX_CONVOLUTION_HEIGHT */ - 1430, /* GL_POST_CONVOLUTION_RED_SCALE */ - 1426, /* GL_POST_CONVOLUTION_GREEN_SCALE */ - 1421, /* GL_POST_CONVOLUTION_BLUE_SCALE */ - 1417, /* GL_POST_CONVOLUTION_ALPHA_SCALE */ - 1428, /* GL_POST_CONVOLUTION_RED_BIAS */ - 1424, /* GL_POST_CONVOLUTION_GREEN_BIAS */ - 1419, /* GL_POST_CONVOLUTION_BLUE_BIAS */ - 1415, /* GL_POST_CONVOLUTION_ALPHA_BIAS */ - 707, /* GL_HISTOGRAM */ - 1490, /* GL_PROXY_HISTOGRAM */ - 723, /* GL_HISTOGRAM_WIDTH */ - 713, /* GL_HISTOGRAM_FORMAT */ - 719, /* GL_HISTOGRAM_RED_SIZE */ - 715, /* GL_HISTOGRAM_GREEN_SIZE */ - 710, /* GL_HISTOGRAM_BLUE_SIZE */ - 708, /* GL_HISTOGRAM_ALPHA_SIZE */ - 717, /* GL_HISTOGRAM_LUMINANCE_SIZE */ - 721, /* GL_HISTOGRAM_SINK */ - 1146, /* GL_MINMAX */ - 1148, /* GL_MINMAX_FORMAT */ - 1150, /* GL_MINMAX_SINK */ - 1891, /* GL_TABLE_TOO_LARGE_EXT */ - 2167, /* GL_UNSIGNED_BYTE_3_3_2 */ - 2207, /* GL_UNSIGNED_SHORT_4_4_4_4 */ - 2210, /* GL_UNSIGNED_SHORT_5_5_5_1 */ - 2179, /* GL_UNSIGNED_INT_8_8_8_8 */ - 2170, /* GL_UNSIGNED_INT_10_10_10_2 */ - 1388, /* GL_POLYGON_OFFSET_FILL */ - 1387, /* GL_POLYGON_OFFSET_FACTOR */ - 1386, /* GL_POLYGON_OFFSET_BIAS */ - 1598, /* GL_RESCALE_NORMAL */ + 680, /* GL_FUNC_SUBTRACT */ + 677, /* GL_FUNC_REVERSE_SUBTRACT */ + 331, /* GL_CONVOLUTION_1D */ + 332, /* GL_CONVOLUTION_2D */ + 1752, /* GL_SEPARABLE_2D */ + 335, /* GL_CONVOLUTION_BORDER_MODE */ + 339, /* GL_CONVOLUTION_FILTER_SCALE */ + 337, /* GL_CONVOLUTION_FILTER_BIAS */ + 1554, /* GL_REDUCE */ + 341, /* GL_CONVOLUTION_FORMAT */ + 345, /* GL_CONVOLUTION_WIDTH */ + 343, /* GL_CONVOLUTION_HEIGHT */ + 1036, /* GL_MAX_CONVOLUTION_WIDTH */ + 1034, /* GL_MAX_CONVOLUTION_HEIGHT */ + 1435, /* GL_POST_CONVOLUTION_RED_SCALE */ + 1431, /* GL_POST_CONVOLUTION_GREEN_SCALE */ + 1426, /* GL_POST_CONVOLUTION_BLUE_SCALE */ + 1422, /* GL_POST_CONVOLUTION_ALPHA_SCALE */ + 1433, /* GL_POST_CONVOLUTION_RED_BIAS */ + 1429, /* GL_POST_CONVOLUTION_GREEN_BIAS */ + 1424, /* GL_POST_CONVOLUTION_BLUE_BIAS */ + 1420, /* GL_POST_CONVOLUTION_ALPHA_BIAS */ + 709, /* GL_HISTOGRAM */ + 1495, /* GL_PROXY_HISTOGRAM */ + 725, /* GL_HISTOGRAM_WIDTH */ + 715, /* GL_HISTOGRAM_FORMAT */ + 721, /* GL_HISTOGRAM_RED_SIZE */ + 717, /* GL_HISTOGRAM_GREEN_SIZE */ + 712, /* GL_HISTOGRAM_BLUE_SIZE */ + 710, /* GL_HISTOGRAM_ALPHA_SIZE */ + 719, /* GL_HISTOGRAM_LUMINANCE_SIZE */ + 723, /* GL_HISTOGRAM_SINK */ + 1150, /* GL_MINMAX */ + 1152, /* GL_MINMAX_FORMAT */ + 1154, /* GL_MINMAX_SINK */ + 1897, /* GL_TABLE_TOO_LARGE_EXT */ + 2174, /* GL_UNSIGNED_BYTE_3_3_2 */ + 2214, /* GL_UNSIGNED_SHORT_4_4_4_4 */ + 2217, /* GL_UNSIGNED_SHORT_5_5_5_1 */ + 2186, /* GL_UNSIGNED_INT_8_8_8_8 */ + 2177, /* GL_UNSIGNED_INT_10_10_10_2 */ + 1393, /* GL_POLYGON_OFFSET_FILL */ + 1392, /* GL_POLYGON_OFFSET_FACTOR */ + 1391, /* GL_POLYGON_OFFSET_BIAS */ + 1603, /* GL_RESCALE_NORMAL */ 41, /* GL_ALPHA4 */ 43, /* GL_ALPHA8 */ 33, /* GL_ALPHA12 */ 35, /* GL_ALPHA16 */ - 875, /* GL_LUMINANCE4 */ - 881, /* GL_LUMINANCE8 */ - 861, /* GL_LUMINANCE12 */ - 867, /* GL_LUMINANCE16 */ - 876, /* GL_LUMINANCE4_ALPHA4 */ - 879, /* GL_LUMINANCE6_ALPHA2 */ - 884, /* GL_LUMINANCE8_ALPHA8 */ - 864, /* GL_LUMINANCE12_ALPHA4 */ - 862, /* GL_LUMINANCE12_ALPHA12 */ - 870, /* GL_LUMINANCE16_ALPHA16 */ - 750, /* GL_INTENSITY */ - 759, /* GL_INTENSITY4 */ - 761, /* GL_INTENSITY8 */ - 751, /* GL_INTENSITY12 */ - 753, /* GL_INTENSITY16 */ - 1619, /* GL_RGB2_EXT */ - 1625, /* GL_RGB4 */ - 1628, /* GL_RGB5 */ - 1635, /* GL_RGB8 */ - 1605, /* GL_RGB10 */ - 1609, /* GL_RGB12 */ - 1611, /* GL_RGB16 */ - 1655, /* GL_RGBA2 */ - 1662, /* GL_RGBA4 */ - 1631, /* GL_RGB5_A1 */ - 1667, /* GL_RGBA8 */ - 1606, /* GL_RGB10_A2 */ - 1645, /* GL_RGBA12 */ - 1647, /* GL_RGBA16 */ - 2096, /* GL_TEXTURE_RED_SIZE */ - 2064, /* GL_TEXTURE_GREEN_SIZE */ - 1985, /* GL_TEXTURE_BLUE_SIZE */ - 1965, /* GL_TEXTURE_ALPHA_SIZE */ - 2077, /* GL_TEXTURE_LUMINANCE_SIZE */ - 2068, /* GL_TEXTURE_INTENSITY_SIZE */ - 1596, /* GL_REPLACE_EXT */ - 1494, /* GL_PROXY_TEXTURE_1D */ - 1498, /* GL_PROXY_TEXTURE_2D */ - 2104, /* GL_TEXTURE_TOO_LARGE_EXT */ - 2090, /* GL_TEXTURE_PRIORITY */ - 2098, /* GL_TEXTURE_RESIDENT */ - 1968, /* GL_TEXTURE_BINDING_1D */ - 1971, /* GL_TEXTURE_BINDING_2D */ - 1974, /* GL_TEXTURE_BINDING_3D */ - 1302, /* GL_PACK_SKIP_IMAGES */ - 1298, /* GL_PACK_IMAGE_HEIGHT */ - 2160, /* GL_UNPACK_SKIP_IMAGES */ - 2157, /* GL_UNPACK_IMAGE_HEIGHT */ - 1963, /* GL_TEXTURE_3D */ - 1502, /* GL_PROXY_TEXTURE_3D */ - 2048, /* GL_TEXTURE_DEPTH */ - 2107, /* GL_TEXTURE_WRAP_R */ - 1014, /* GL_MAX_3D_TEXTURE_SIZE */ - 2223, /* GL_VERTEX_ARRAY */ - 1228, /* GL_NORMAL_ARRAY */ + 879, /* GL_LUMINANCE4 */ + 885, /* GL_LUMINANCE8 */ + 865, /* GL_LUMINANCE12 */ + 871, /* GL_LUMINANCE16 */ + 880, /* GL_LUMINANCE4_ALPHA4 */ + 883, /* GL_LUMINANCE6_ALPHA2 */ + 888, /* GL_LUMINANCE8_ALPHA8 */ + 868, /* GL_LUMINANCE12_ALPHA4 */ + 866, /* GL_LUMINANCE12_ALPHA12 */ + 874, /* GL_LUMINANCE16_ALPHA16 */ + 753, /* GL_INTENSITY */ + 762, /* GL_INTENSITY4 */ + 764, /* GL_INTENSITY8 */ + 754, /* GL_INTENSITY12 */ + 756, /* GL_INTENSITY16 */ + 1625, /* GL_RGB2_EXT */ + 1631, /* GL_RGB4 */ + 1634, /* GL_RGB5 */ + 1641, /* GL_RGB8 */ + 1611, /* GL_RGB10 */ + 1615, /* GL_RGB12 */ + 1617, /* GL_RGB16 */ + 1661, /* GL_RGBA2 */ + 1668, /* GL_RGBA4 */ + 1637, /* GL_RGB5_A1 */ + 1673, /* GL_RGBA8 */ + 1612, /* GL_RGB10_A2 */ + 1651, /* GL_RGBA12 */ + 1653, /* GL_RGBA16 */ + 2102, /* GL_TEXTURE_RED_SIZE */ + 2070, /* GL_TEXTURE_GREEN_SIZE */ + 1991, /* GL_TEXTURE_BLUE_SIZE */ + 1971, /* GL_TEXTURE_ALPHA_SIZE */ + 2083, /* GL_TEXTURE_LUMINANCE_SIZE */ + 2074, /* GL_TEXTURE_INTENSITY_SIZE */ + 1601, /* GL_REPLACE_EXT */ + 1499, /* GL_PROXY_TEXTURE_1D */ + 1503, /* GL_PROXY_TEXTURE_2D */ + 2110, /* GL_TEXTURE_TOO_LARGE_EXT */ + 2096, /* GL_TEXTURE_PRIORITY */ + 2104, /* GL_TEXTURE_RESIDENT */ + 1974, /* GL_TEXTURE_BINDING_1D */ + 1977, /* GL_TEXTURE_BINDING_2D */ + 1980, /* GL_TEXTURE_BINDING_3D */ + 1307, /* GL_PACK_SKIP_IMAGES */ + 1303, /* GL_PACK_IMAGE_HEIGHT */ + 2167, /* GL_UNPACK_SKIP_IMAGES */ + 2164, /* GL_UNPACK_IMAGE_HEIGHT */ + 1969, /* GL_TEXTURE_3D */ + 1507, /* GL_PROXY_TEXTURE_3D */ + 2054, /* GL_TEXTURE_DEPTH */ + 2113, /* GL_TEXTURE_WRAP_R */ + 1018, /* GL_MAX_3D_TEXTURE_SIZE */ + 2230, /* GL_VERTEX_ARRAY */ + 1232, /* GL_NORMAL_ARRAY */ 189, /* GL_COLOR_ARRAY */ - 735, /* GL_INDEX_ARRAY */ - 2018, /* GL_TEXTURE_COORD_ARRAY */ - 518, /* GL_EDGE_FLAG_ARRAY */ - 2229, /* GL_VERTEX_ARRAY_SIZE */ - 2231, /* GL_VERTEX_ARRAY_TYPE */ - 2230, /* GL_VERTEX_ARRAY_STRIDE */ - 1233, /* GL_NORMAL_ARRAY_TYPE */ - 1232, /* GL_NORMAL_ARRAY_STRIDE */ + 737, /* GL_INDEX_ARRAY */ + 2024, /* GL_TEXTURE_COORD_ARRAY */ + 519, /* GL_EDGE_FLAG_ARRAY */ + 2236, /* GL_VERTEX_ARRAY_SIZE */ + 2238, /* GL_VERTEX_ARRAY_TYPE */ + 2237, /* GL_VERTEX_ARRAY_STRIDE */ + 1237, /* GL_NORMAL_ARRAY_TYPE */ + 1236, /* GL_NORMAL_ARRAY_STRIDE */ 193, /* GL_COLOR_ARRAY_SIZE */ 195, /* GL_COLOR_ARRAY_TYPE */ 194, /* GL_COLOR_ARRAY_STRIDE */ - 740, /* GL_INDEX_ARRAY_TYPE */ - 739, /* GL_INDEX_ARRAY_STRIDE */ - 2022, /* GL_TEXTURE_COORD_ARRAY_SIZE */ - 2024, /* GL_TEXTURE_COORD_ARRAY_TYPE */ - 2023, /* GL_TEXTURE_COORD_ARRAY_STRIDE */ - 522, /* GL_EDGE_FLAG_ARRAY_STRIDE */ - 2228, /* GL_VERTEX_ARRAY_POINTER */ - 1231, /* GL_NORMAL_ARRAY_POINTER */ + 742, /* GL_INDEX_ARRAY_TYPE */ + 741, /* GL_INDEX_ARRAY_STRIDE */ + 2028, /* GL_TEXTURE_COORD_ARRAY_SIZE */ + 2030, /* GL_TEXTURE_COORD_ARRAY_TYPE */ + 2029, /* GL_TEXTURE_COORD_ARRAY_STRIDE */ + 523, /* GL_EDGE_FLAG_ARRAY_STRIDE */ + 2235, /* GL_VERTEX_ARRAY_POINTER */ + 1235, /* GL_NORMAL_ARRAY_POINTER */ 192, /* GL_COLOR_ARRAY_POINTER */ - 738, /* GL_INDEX_ARRAY_POINTER */ - 2021, /* GL_TEXTURE_COORD_ARRAY_POINTER */ - 521, /* GL_EDGE_FLAG_ARRAY_POINTER */ - 1206, /* GL_MULTISAMPLE */ - 1720, /* GL_SAMPLE_ALPHA_TO_COVERAGE */ - 1722, /* GL_SAMPLE_ALPHA_TO_ONE */ - 1727, /* GL_SAMPLE_COVERAGE */ - 1724, /* GL_SAMPLE_BUFFERS */ - 1715, /* GL_SAMPLES */ - 1731, /* GL_SAMPLE_COVERAGE_VALUE */ - 1729, /* GL_SAMPLE_COVERAGE_INVERT */ + 740, /* GL_INDEX_ARRAY_POINTER */ + 2027, /* GL_TEXTURE_COORD_ARRAY_POINTER */ + 522, /* GL_EDGE_FLAG_ARRAY_POINTER */ + 1210, /* GL_MULTISAMPLE */ + 1726, /* GL_SAMPLE_ALPHA_TO_COVERAGE */ + 1728, /* GL_SAMPLE_ALPHA_TO_ONE */ + 1733, /* GL_SAMPLE_COVERAGE */ + 1730, /* GL_SAMPLE_BUFFERS */ + 1721, /* GL_SAMPLES */ + 1737, /* GL_SAMPLE_COVERAGE_VALUE */ + 1735, /* GL_SAMPLE_COVERAGE_INVERT */ 237, /* GL_COLOR_MATRIX */ 239, /* GL_COLOR_MATRIX_STACK_DEPTH */ - 1026, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */ - 1413, /* GL_POST_COLOR_MATRIX_RED_SCALE */ - 1409, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */ - 1404, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */ - 1400, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */ - 1411, /* GL_POST_COLOR_MATRIX_RED_BIAS */ - 1407, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */ - 1402, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */ - 1398, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */ - 2001, /* GL_TEXTURE_COLOR_TABLE_SGI */ - 1503, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */ - 2003, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */ + 1030, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */ + 1418, /* GL_POST_COLOR_MATRIX_RED_SCALE */ + 1414, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */ + 1409, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */ + 1405, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */ + 1416, /* GL_POST_COLOR_MATRIX_RED_BIAS */ + 1412, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */ + 1407, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */ + 1403, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */ + 2007, /* GL_TEXTURE_COLOR_TABLE_SGI */ + 1508, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */ + 2009, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */ 94, /* GL_BLEND_DST_RGB */ 108, /* GL_BLEND_SRC_RGB */ 92, /* GL_BLEND_DST_ALPHA */ 106, /* GL_BLEND_SRC_ALPHA */ 243, /* GL_COLOR_TABLE */ - 1423, /* GL_POST_CONVOLUTION_COLOR_TABLE */ - 1406, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ - 1489, /* GL_PROXY_COLOR_TABLE */ - 1493, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */ - 1492, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */ + 1428, /* GL_POST_CONVOLUTION_COLOR_TABLE */ + 1411, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ + 1494, /* GL_PROXY_COLOR_TABLE */ + 1498, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */ + 1497, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */ 267, /* GL_COLOR_TABLE_SCALE */ 247, /* GL_COLOR_TABLE_BIAS */ 252, /* GL_COLOR_TABLE_FORMAT */ @@ -5276,748 +5290,754 @@ static const unsigned reduced_enums[1556] = 258, /* GL_COLOR_TABLE_INTENSITY_SIZE */ 79, /* GL_BGR */ 80, /* GL_BGRA */ - 1041, /* GL_MAX_ELEMENTS_VERTICES */ - 1040, /* GL_MAX_ELEMENTS_INDICES */ - 2067, /* GL_TEXTURE_INDEX_SIZE_EXT */ + 1045, /* GL_MAX_ELEMENTS_VERTICES */ + 1044, /* GL_MAX_ELEMENTS_INDICES */ + 2073, /* GL_TEXTURE_INDEX_SIZE_EXT */ 186, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */ - 1369, /* GL_POINT_SIZE_MIN */ - 1365, /* GL_POINT_SIZE_MAX */ - 1354, /* GL_POINT_FADE_THRESHOLD_SIZE */ - 1350, /* GL_POINT_DISTANCE_ATTENUATION */ + 1374, /* GL_POINT_SIZE_MIN */ + 1370, /* GL_POINT_SIZE_MAX */ + 1359, /* GL_POINT_FADE_THRESHOLD_SIZE */ + 1355, /* GL_POINT_DISTANCE_ATTENUATION */ 159, /* GL_CLAMP_TO_BORDER */ 162, /* GL_CLAMP_TO_EDGE */ - 2089, /* GL_TEXTURE_MIN_LOD */ - 2087, /* GL_TEXTURE_MAX_LOD */ - 1967, /* GL_TEXTURE_BASE_LEVEL */ - 2086, /* GL_TEXTURE_MAX_LEVEL */ - 726, /* GL_IGNORE_BORDER_HP */ + 2095, /* GL_TEXTURE_MIN_LOD */ + 2093, /* GL_TEXTURE_MAX_LOD */ + 1973, /* GL_TEXTURE_BASE_LEVEL */ + 2092, /* GL_TEXTURE_MAX_LEVEL */ + 728, /* GL_IGNORE_BORDER_HP */ 321, /* GL_CONSTANT_BORDER_HP */ - 1597, /* GL_REPLICATE_BORDER_HP */ - 332, /* GL_CONVOLUTION_BORDER_COLOR */ - 1261, /* GL_OCCLUSION_TEST_HP */ - 1262, /* GL_OCCLUSION_TEST_RESULT_HP */ - 827, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */ - 1995, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */ - 1997, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */ - 1999, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */ - 2000, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */ - 1998, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */ - 1996, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */ - 1020, /* GL_MAX_CLIPMAP_DEPTH_SGIX */ - 1021, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */ - 1433, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */ - 1435, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */ - 1432, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */ - 1434, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */ - 2075, /* GL_TEXTURE_LOD_BIAS_S_SGIX */ - 2076, /* GL_TEXTURE_LOD_BIAS_T_SGIX */ - 2074, /* GL_TEXTURE_LOD_BIAS_R_SGIX */ - 682, /* GL_GENERATE_MIPMAP */ - 683, /* GL_GENERATE_MIPMAP_HINT */ - 595, /* GL_FOG_OFFSET_SGIX */ - 596, /* GL_FOG_OFFSET_VALUE_SGIX */ - 2009, /* GL_TEXTURE_COMPARE_SGIX */ - 2008, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */ - 2071, /* GL_TEXTURE_LEQUAL_R_SGIX */ - 2063, /* GL_TEXTURE_GEQUAL_R_SGIX */ - 415, /* GL_DEPTH_COMPONENT16 */ - 419, /* GL_DEPTH_COMPONENT24 */ - 423, /* GL_DEPTH_COMPONENT32 */ - 357, /* GL_CULL_VERTEX_EXT */ - 359, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */ - 358, /* GL_CULL_VERTEX_EYE_POSITION_EXT */ - 2296, /* GL_WRAP_BORDER_SUN */ - 2002, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */ - 820, /* GL_LIGHT_MODEL_COLOR_CONTROL */ - 1765, /* GL_SINGLE_COLOR */ - 1749, /* GL_SEPARATE_SPECULAR_COLOR */ - 1760, /* GL_SHARED_TEXTURE_PALETTE_EXT */ - 607, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ - 608, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ - 619, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ - 610, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ - 606, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ - 605, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ - 609, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ - 620, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ - 637, /* GL_FRAMEBUFFER_DEFAULT */ - 664, /* GL_FRAMEBUFFER_UNDEFINED */ - 431, /* GL_DEPTH_STENCIL_ATTACHMENT */ - 896, /* GL_MAJOR_VERSION */ - 1152, /* GL_MINOR_VERSION */ - 1242, /* GL_NUM_EXTENSIONS */ + 1602, /* GL_REPLICATE_BORDER_HP */ + 333, /* GL_CONVOLUTION_BORDER_COLOR */ + 1266, /* GL_OCCLUSION_TEST_HP */ + 1267, /* GL_OCCLUSION_TEST_RESULT_HP */ + 830, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */ + 2001, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */ + 2003, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */ + 2005, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */ + 2006, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */ + 2004, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */ + 2002, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */ + 1024, /* GL_MAX_CLIPMAP_DEPTH_SGIX */ + 1025, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */ + 1438, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */ + 1440, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */ + 1437, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */ + 1439, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */ + 2081, /* GL_TEXTURE_LOD_BIAS_S_SGIX */ + 2082, /* GL_TEXTURE_LOD_BIAS_T_SGIX */ + 2080, /* GL_TEXTURE_LOD_BIAS_R_SGIX */ + 683, /* GL_GENERATE_MIPMAP */ + 684, /* GL_GENERATE_MIPMAP_HINT */ + 596, /* GL_FOG_OFFSET_SGIX */ + 597, /* GL_FOG_OFFSET_VALUE_SGIX */ + 2015, /* GL_TEXTURE_COMPARE_SGIX */ + 2014, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */ + 2077, /* GL_TEXTURE_LEQUAL_R_SGIX */ + 2069, /* GL_TEXTURE_GEQUAL_R_SGIX */ + 416, /* GL_DEPTH_COMPONENT16 */ + 420, /* GL_DEPTH_COMPONENT24 */ + 424, /* GL_DEPTH_COMPONENT32 */ + 358, /* GL_CULL_VERTEX_EXT */ + 360, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */ + 359, /* GL_CULL_VERTEX_EYE_POSITION_EXT */ + 2303, /* GL_WRAP_BORDER_SUN */ + 2008, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */ + 823, /* GL_LIGHT_MODEL_COLOR_CONTROL */ + 1771, /* GL_SINGLE_COLOR */ + 1755, /* GL_SEPARATE_SPECULAR_COLOR */ + 1766, /* GL_SHARED_TEXTURE_PALETTE_EXT */ + 608, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ + 609, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ + 620, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ + 611, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ + 607, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ + 606, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ + 610, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ + 621, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ + 638, /* GL_FRAMEBUFFER_DEFAULT */ + 665, /* GL_FRAMEBUFFER_UNDEFINED */ + 432, /* GL_DEPTH_STENCIL_ATTACHMENT */ + 900, /* GL_MAJOR_VERSION */ + 1156, /* GL_MINOR_VERSION */ + 1247, /* GL_NUM_EXTENSIONS */ 327, /* GL_CONTEXT_FLAGS */ - 734, /* GL_INDEX */ - 409, /* GL_DEPTH_BUFFER */ - 1839, /* GL_STENCIL_BUFFER */ + 736, /* GL_INDEX */ + 410, /* GL_DEPTH_BUFFER */ + 1845, /* GL_STENCIL_BUFFER */ 298, /* GL_COMPRESSED_RED */ 299, /* GL_COMPRESSED_RG */ - 2166, /* GL_UNSIGNED_BYTE_2_3_3_REV */ - 2211, /* GL_UNSIGNED_SHORT_5_6_5 */ - 2212, /* GL_UNSIGNED_SHORT_5_6_5_REV */ - 2208, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */ - 2205, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */ - 2180, /* GL_UNSIGNED_INT_8_8_8_8_REV */ - 2176, /* GL_UNSIGNED_INT_2_10_10_10_REV */ - 2084, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */ - 2085, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */ - 2083, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */ - 1156, /* GL_MIRRORED_REPEAT */ - 1685, /* GL_RGB_S3TC */ - 1627, /* GL_RGB4_S3TC */ - 1681, /* GL_RGBA_S3TC */ - 1666, /* GL_RGBA4_S3TC */ - 1675, /* GL_RGBA_DXT5_S3TC */ - 1663, /* GL_RGBA4_DXT5_S3TC */ + 860, /* GL_LOSE_CONTEXT_ON_RESET_ARB */ + 703, /* GL_GUILTY_CONTEXT_RESET_ARB */ + 751, /* GL_INNOCENT_CONTEXT_RESET_ARB */ + 2162, /* GL_UNKNOWN_CONTEXT_RESET_ARB */ + 1605, /* GL_RESET_NOTIFICATION_STRATEGY_ARB */ + 1244, /* GL_NO_RESET_NOTIFICATION_ARB */ + 2173, /* GL_UNSIGNED_BYTE_2_3_3_REV */ + 2218, /* GL_UNSIGNED_SHORT_5_6_5 */ + 2219, /* GL_UNSIGNED_SHORT_5_6_5_REV */ + 2215, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */ + 2212, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */ + 2187, /* GL_UNSIGNED_INT_8_8_8_8_REV */ + 2183, /* GL_UNSIGNED_INT_2_10_10_10_REV */ + 2090, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */ + 2091, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */ + 2089, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */ + 1160, /* GL_MIRRORED_REPEAT */ + 1691, /* GL_RGB_S3TC */ + 1633, /* GL_RGB4_S3TC */ + 1687, /* GL_RGBA_S3TC */ + 1672, /* GL_RGBA4_S3TC */ + 1681, /* GL_RGBA_DXT5_S3TC */ + 1669, /* GL_RGBA4_DXT5_S3TC */ 309, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */ 304, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */ 305, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */ 306, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */ - 1218, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */ - 1217, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */ - 828, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */ - 582, /* GL_FOG_COORDINATE_SOURCE */ - 574, /* GL_FOG_COORD */ - 598, /* GL_FRAGMENT_DEPTH */ - 363, /* GL_CURRENT_FOG_COORD */ - 581, /* GL_FOG_COORDINATE_ARRAY_TYPE */ - 580, /* GL_FOG_COORDINATE_ARRAY_STRIDE */ - 579, /* GL_FOG_COORDINATE_ARRAY_POINTER */ - 576, /* GL_FOG_COORDINATE_ARRAY */ + 1222, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */ + 1221, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */ + 831, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */ + 583, /* GL_FOG_COORDINATE_SOURCE */ + 575, /* GL_FOG_COORD */ + 599, /* GL_FRAGMENT_DEPTH */ + 364, /* GL_CURRENT_FOG_COORD */ + 582, /* GL_FOG_COORDINATE_ARRAY_TYPE */ + 581, /* GL_FOG_COORDINATE_ARRAY_STRIDE */ + 580, /* GL_FOG_COORDINATE_ARRAY_POINTER */ + 577, /* GL_FOG_COORDINATE_ARRAY */ 241, /* GL_COLOR_SUM */ - 384, /* GL_CURRENT_SECONDARY_COLOR */ - 1740, /* GL_SECONDARY_COLOR_ARRAY_SIZE */ - 1742, /* GL_SECONDARY_COLOR_ARRAY_TYPE */ - 1741, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */ - 1739, /* GL_SECONDARY_COLOR_ARRAY_POINTER */ - 1736, /* GL_SECONDARY_COLOR_ARRAY */ - 382, /* GL_CURRENT_RASTER_SECONDARY_COLOR */ + 385, /* GL_CURRENT_SECONDARY_COLOR */ + 1746, /* GL_SECONDARY_COLOR_ARRAY_SIZE */ + 1748, /* GL_SECONDARY_COLOR_ARRAY_TYPE */ + 1747, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */ + 1745, /* GL_SECONDARY_COLOR_ARRAY_POINTER */ + 1742, /* GL_SECONDARY_COLOR_ARRAY */ + 383, /* GL_CURRENT_RASTER_SECONDARY_COLOR */ 29, /* GL_ALIASED_POINT_SIZE_RANGE */ 28, /* GL_ALIASED_LINE_WIDTH_RANGE */ - 1893, /* GL_TEXTURE0 */ - 1895, /* GL_TEXTURE1 */ - 1917, /* GL_TEXTURE2 */ - 1939, /* GL_TEXTURE3 */ - 1945, /* GL_TEXTURE4 */ - 1947, /* GL_TEXTURE5 */ - 1949, /* GL_TEXTURE6 */ - 1951, /* GL_TEXTURE7 */ - 1953, /* GL_TEXTURE8 */ - 1955, /* GL_TEXTURE9 */ - 1896, /* GL_TEXTURE10 */ - 1898, /* GL_TEXTURE11 */ - 1900, /* GL_TEXTURE12 */ - 1902, /* GL_TEXTURE13 */ - 1904, /* GL_TEXTURE14 */ - 1906, /* GL_TEXTURE15 */ - 1908, /* GL_TEXTURE16 */ - 1910, /* GL_TEXTURE17 */ - 1912, /* GL_TEXTURE18 */ - 1914, /* GL_TEXTURE19 */ - 1918, /* GL_TEXTURE20 */ - 1920, /* GL_TEXTURE21 */ - 1922, /* GL_TEXTURE22 */ - 1924, /* GL_TEXTURE23 */ - 1926, /* GL_TEXTURE24 */ - 1928, /* GL_TEXTURE25 */ - 1930, /* GL_TEXTURE26 */ - 1932, /* GL_TEXTURE27 */ - 1934, /* GL_TEXTURE28 */ - 1936, /* GL_TEXTURE29 */ - 1940, /* GL_TEXTURE30 */ - 1942, /* GL_TEXTURE31 */ + 1899, /* GL_TEXTURE0 */ + 1901, /* GL_TEXTURE1 */ + 1923, /* GL_TEXTURE2 */ + 1945, /* GL_TEXTURE3 */ + 1951, /* GL_TEXTURE4 */ + 1953, /* GL_TEXTURE5 */ + 1955, /* GL_TEXTURE6 */ + 1957, /* GL_TEXTURE7 */ + 1959, /* GL_TEXTURE8 */ + 1961, /* GL_TEXTURE9 */ + 1902, /* GL_TEXTURE10 */ + 1904, /* GL_TEXTURE11 */ + 1906, /* GL_TEXTURE12 */ + 1908, /* GL_TEXTURE13 */ + 1910, /* GL_TEXTURE14 */ + 1912, /* GL_TEXTURE15 */ + 1914, /* GL_TEXTURE16 */ + 1916, /* GL_TEXTURE17 */ + 1918, /* GL_TEXTURE18 */ + 1920, /* GL_TEXTURE19 */ + 1924, /* GL_TEXTURE20 */ + 1926, /* GL_TEXTURE21 */ + 1928, /* GL_TEXTURE22 */ + 1930, /* GL_TEXTURE23 */ + 1932, /* GL_TEXTURE24 */ + 1934, /* GL_TEXTURE25 */ + 1936, /* GL_TEXTURE26 */ + 1938, /* GL_TEXTURE27 */ + 1940, /* GL_TEXTURE28 */ + 1942, /* GL_TEXTURE29 */ + 1946, /* GL_TEXTURE30 */ + 1948, /* GL_TEXTURE31 */ 19, /* GL_ACTIVE_TEXTURE */ 166, /* GL_CLIENT_ACTIVE_TEXTURE */ - 1117, /* GL_MAX_TEXTURE_UNITS */ - 2139, /* GL_TRANSPOSE_MODELVIEW_MATRIX */ - 2142, /* GL_TRANSPOSE_PROJECTION_MATRIX */ - 2144, /* GL_TRANSPOSE_TEXTURE_MATRIX */ - 2136, /* GL_TRANSPOSE_COLOR_MATRIX */ - 1875, /* GL_SUBTRACT */ - 1098, /* GL_MAX_RENDERBUFFER_SIZE */ + 1121, /* GL_MAX_TEXTURE_UNITS */ + 2145, /* GL_TRANSPOSE_MODELVIEW_MATRIX */ + 2148, /* GL_TRANSPOSE_PROJECTION_MATRIX */ + 2150, /* GL_TRANSPOSE_TEXTURE_MATRIX */ + 2142, /* GL_TRANSPOSE_COLOR_MATRIX */ + 1881, /* GL_SUBTRACT */ + 1102, /* GL_MAX_RENDERBUFFER_SIZE */ 290, /* GL_COMPRESSED_ALPHA */ 294, /* GL_COMPRESSED_LUMINANCE */ 295, /* GL_COMPRESSED_LUMINANCE_ALPHA */ 292, /* GL_COMPRESSED_INTENSITY */ 300, /* GL_COMPRESSED_RGB */ 301, /* GL_COMPRESSED_RGBA */ - 2016, /* GL_TEXTURE_COMPRESSION_HINT */ - 2093, /* GL_TEXTURE_RECTANGLE */ - 1981, /* GL_TEXTURE_BINDING_RECTANGLE */ - 1506, /* GL_PROXY_TEXTURE_RECTANGLE */ - 1095, /* GL_MAX_RECTANGLE_TEXTURE_SIZE */ - 430, /* GL_DEPTH_STENCIL */ - 2172, /* GL_UNSIGNED_INT_24_8 */ - 1112, /* GL_MAX_TEXTURE_LOD_BIAS */ - 2082, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */ - 1114, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */ - 2054, /* GL_TEXTURE_FILTER_CONTROL */ - 2072, /* GL_TEXTURE_LOD_BIAS */ + 2022, /* GL_TEXTURE_COMPRESSION_HINT */ + 2099, /* GL_TEXTURE_RECTANGLE */ + 1987, /* GL_TEXTURE_BINDING_RECTANGLE */ + 1511, /* GL_PROXY_TEXTURE_RECTANGLE */ + 1099, /* GL_MAX_RECTANGLE_TEXTURE_SIZE */ + 431, /* GL_DEPTH_STENCIL */ + 2179, /* GL_UNSIGNED_INT_24_8 */ + 1116, /* GL_MAX_TEXTURE_LOD_BIAS */ + 2088, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */ + 1118, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */ + 2060, /* GL_TEXTURE_FILTER_CONTROL */ + 2078, /* GL_TEXTURE_LOD_BIAS */ 274, /* GL_COMBINE4 */ - 1104, /* GL_MAX_SHININESS_NV */ - 1105, /* GL_MAX_SPOT_EXPONENT_NV */ - 732, /* GL_INCR_WRAP */ - 395, /* GL_DECR_WRAP */ - 1176, /* GL_MODELVIEW1_ARB */ - 1234, /* GL_NORMAL_MAP */ - 1557, /* GL_REFLECTION_MAP */ - 2026, /* GL_TEXTURE_CUBE_MAP */ - 1978, /* GL_TEXTURE_BINDING_CUBE_MAP */ - 2038, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */ - 2028, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */ - 2041, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */ - 2031, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */ - 2044, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */ - 2034, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */ - 1504, /* GL_PROXY_TEXTURE_CUBE_MAP */ - 1034, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */ - 1212, /* GL_MULTISAMPLE_FILTER_HINT_NV */ - 1447, /* GL_PRIMITIVE_RESTART_NV */ - 1446, /* GL_PRIMITIVE_RESTART_INDEX_NV */ - 590, /* GL_FOG_DISTANCE_MODE_NV */ - 537, /* GL_EYE_RADIAL_NV */ - 536, /* GL_EYE_PLANE_ABSOLUTE_NV */ + 1108, /* GL_MAX_SHININESS_NV */ + 1109, /* GL_MAX_SPOT_EXPONENT_NV */ + 734, /* GL_INCR_WRAP */ + 396, /* GL_DECR_WRAP */ + 1180, /* GL_MODELVIEW1_ARB */ + 1238, /* GL_NORMAL_MAP */ + 1562, /* GL_REFLECTION_MAP */ + 2032, /* GL_TEXTURE_CUBE_MAP */ + 1984, /* GL_TEXTURE_BINDING_CUBE_MAP */ + 2044, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */ + 2034, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */ + 2047, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */ + 2037, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */ + 2050, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */ + 2040, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */ + 1509, /* GL_PROXY_TEXTURE_CUBE_MAP */ + 1038, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */ + 1216, /* GL_MULTISAMPLE_FILTER_HINT_NV */ + 1452, /* GL_PRIMITIVE_RESTART_NV */ + 1451, /* GL_PRIMITIVE_RESTART_INDEX_NV */ + 591, /* GL_FOG_DISTANCE_MODE_NV */ + 538, /* GL_EYE_RADIAL_NV */ + 537, /* GL_EYE_PLANE_ABSOLUTE_NV */ 273, /* GL_COMBINE */ 280, /* GL_COMBINE_RGB */ 275, /* GL_COMBINE_ALPHA */ - 1686, /* GL_RGB_SCALE */ + 1692, /* GL_RGB_SCALE */ 25, /* GL_ADD_SIGNED */ - 768, /* GL_INTERPOLATE */ + 771, /* GL_INTERPOLATE */ 316, /* GL_CONSTANT */ - 1439, /* GL_PRIMARY_COLOR */ - 1436, /* GL_PREVIOUS */ - 1780, /* GL_SOURCE0_RGB */ - 1786, /* GL_SOURCE1_RGB */ - 1792, /* GL_SOURCE2_RGB */ - 1796, /* GL_SOURCE3_RGB_NV */ - 1777, /* GL_SOURCE0_ALPHA */ - 1783, /* GL_SOURCE1_ALPHA */ - 1789, /* GL_SOURCE2_ALPHA */ - 1795, /* GL_SOURCE3_ALPHA_NV */ - 1275, /* GL_OPERAND0_RGB */ - 1281, /* GL_OPERAND1_RGB */ - 1287, /* GL_OPERAND2_RGB */ - 1291, /* GL_OPERAND3_RGB_NV */ - 1272, /* GL_OPERAND0_ALPHA */ - 1278, /* GL_OPERAND1_ALPHA */ - 1284, /* GL_OPERAND2_ALPHA */ - 1290, /* GL_OPERAND3_ALPHA_NV */ + 1444, /* GL_PRIMARY_COLOR */ + 1441, /* GL_PREVIOUS */ + 1786, /* GL_SOURCE0_RGB */ + 1792, /* GL_SOURCE1_RGB */ + 1798, /* GL_SOURCE2_RGB */ + 1802, /* GL_SOURCE3_RGB_NV */ + 1783, /* GL_SOURCE0_ALPHA */ + 1789, /* GL_SOURCE1_ALPHA */ + 1795, /* GL_SOURCE2_ALPHA */ + 1801, /* GL_SOURCE3_ALPHA_NV */ + 1280, /* GL_OPERAND0_RGB */ + 1286, /* GL_OPERAND1_RGB */ + 1292, /* GL_OPERAND2_RGB */ + 1296, /* GL_OPERAND3_RGB_NV */ + 1277, /* GL_OPERAND0_ALPHA */ + 1283, /* GL_OPERAND1_ALPHA */ + 1289, /* GL_OPERAND2_ALPHA */ + 1295, /* GL_OPERAND3_ALPHA_NV */ 137, /* GL_BUFFER_OBJECT_APPLE */ - 2224, /* GL_VERTEX_ARRAY_BINDING */ - 2091, /* GL_TEXTURE_RANGE_LENGTH_APPLE */ - 2092, /* GL_TEXTURE_RANGE_POINTER_APPLE */ - 2301, /* GL_YCBCR_422_APPLE */ - 2213, /* GL_UNSIGNED_SHORT_8_8_APPLE */ - 2215, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */ - 2103, /* GL_TEXTURE_STORAGE_HINT_APPLE */ - 1866, /* GL_STORAGE_PRIVATE_APPLE */ - 1865, /* GL_STORAGE_CACHED_APPLE */ - 1867, /* GL_STORAGE_SHARED_APPLE */ - 1767, /* GL_SLICE_ACCUM_SUN */ - 1515, /* GL_QUAD_MESH_SUN */ - 2150, /* GL_TRIANGLE_MESH_SUN */ - 2266, /* GL_VERTEX_PROGRAM_ARB */ - 2277, /* GL_VERTEX_STATE_PROGRAM_NV */ - 2251, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */ - 2259, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */ - 2261, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */ - 2263, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */ - 386, /* GL_CURRENT_VERTEX_ATTRIB */ - 1460, /* GL_PROGRAM_LENGTH_ARB */ - 1476, /* GL_PROGRAM_STRING_ARB */ - 1199, /* GL_MODELVIEW_PROJECTION_NV */ - 725, /* GL_IDENTITY_NV */ - 800, /* GL_INVERSE_NV */ - 2141, /* GL_TRANSPOSE_NV */ - 801, /* GL_INVERSE_TRANSPOSE_NV */ - 1079, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */ - 1078, /* GL_MAX_PROGRAM_MATRICES_ARB */ - 960, /* GL_MATRIX0_NV */ - 972, /* GL_MATRIX1_NV */ - 984, /* GL_MATRIX2_NV */ - 988, /* GL_MATRIX3_NV */ - 990, /* GL_MATRIX4_NV */ - 992, /* GL_MATRIX5_NV */ - 994, /* GL_MATRIX6_NV */ - 996, /* GL_MATRIX7_NV */ - 369, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */ - 366, /* GL_CURRENT_MATRIX_ARB */ - 1473, /* GL_PROGRAM_POINT_SIZE */ - 2272, /* GL_VERTEX_PROGRAM_TWO_SIDE */ - 1472, /* GL_PROGRAM_PARAMETER_NV */ - 2257, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */ - 1478, /* GL_PROGRAM_TARGET_NV */ - 1475, /* GL_PROGRAM_RESIDENT_NV */ - 2113, /* GL_TRACK_MATRIX_NV */ - 2114, /* GL_TRACK_MATRIX_TRANSFORM_NV */ - 2267, /* GL_VERTEX_PROGRAM_BINDING_NV */ - 1454, /* GL_PROGRAM_ERROR_POSITION_ARB */ - 411, /* GL_DEPTH_CLAMP */ - 2232, /* GL_VERTEX_ATTRIB_ARRAY0_NV */ - 2239, /* GL_VERTEX_ATTRIB_ARRAY1_NV */ - 2240, /* GL_VERTEX_ATTRIB_ARRAY2_NV */ - 2241, /* GL_VERTEX_ATTRIB_ARRAY3_NV */ - 2242, /* GL_VERTEX_ATTRIB_ARRAY4_NV */ - 2243, /* GL_VERTEX_ATTRIB_ARRAY5_NV */ - 2244, /* GL_VERTEX_ATTRIB_ARRAY6_NV */ - 2245, /* GL_VERTEX_ATTRIB_ARRAY7_NV */ - 2246, /* GL_VERTEX_ATTRIB_ARRAY8_NV */ - 2247, /* GL_VERTEX_ATTRIB_ARRAY9_NV */ - 2233, /* GL_VERTEX_ATTRIB_ARRAY10_NV */ - 2234, /* GL_VERTEX_ATTRIB_ARRAY11_NV */ - 2235, /* GL_VERTEX_ATTRIB_ARRAY12_NV */ - 2236, /* GL_VERTEX_ATTRIB_ARRAY13_NV */ - 2237, /* GL_VERTEX_ATTRIB_ARRAY14_NV */ - 2238, /* GL_VERTEX_ATTRIB_ARRAY15_NV */ - 908, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */ - 915, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */ - 916, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */ - 917, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */ - 918, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */ - 919, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */ - 920, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */ - 921, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */ - 922, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */ - 923, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */ - 909, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */ - 910, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */ - 911, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */ - 912, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */ - 913, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */ - 914, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */ - 935, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */ - 942, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */ - 943, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */ - 944, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */ - 945, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */ - 946, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */ - 947, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */ - 1453, /* GL_PROGRAM_BINDING_ARB */ - 949, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */ - 950, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */ - 936, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */ - 937, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */ - 938, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */ - 939, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */ - 940, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */ - 941, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */ - 2014, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */ - 2011, /* GL_TEXTURE_COMPRESSED */ - 1240, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */ + 2231, /* GL_VERTEX_ARRAY_BINDING */ + 2097, /* GL_TEXTURE_RANGE_LENGTH_APPLE */ + 2098, /* GL_TEXTURE_RANGE_POINTER_APPLE */ + 2308, /* GL_YCBCR_422_APPLE */ + 2220, /* GL_UNSIGNED_SHORT_8_8_APPLE */ + 2222, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */ + 2109, /* GL_TEXTURE_STORAGE_HINT_APPLE */ + 1872, /* GL_STORAGE_PRIVATE_APPLE */ + 1871, /* GL_STORAGE_CACHED_APPLE */ + 1873, /* GL_STORAGE_SHARED_APPLE */ + 1773, /* GL_SLICE_ACCUM_SUN */ + 1520, /* GL_QUAD_MESH_SUN */ + 2156, /* GL_TRIANGLE_MESH_SUN */ + 2273, /* GL_VERTEX_PROGRAM_ARB */ + 2284, /* GL_VERTEX_STATE_PROGRAM_NV */ + 2258, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */ + 2266, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */ + 2268, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */ + 2270, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */ + 387, /* GL_CURRENT_VERTEX_ATTRIB */ + 1465, /* GL_PROGRAM_LENGTH_ARB */ + 1481, /* GL_PROGRAM_STRING_ARB */ + 1203, /* GL_MODELVIEW_PROJECTION_NV */ + 727, /* GL_IDENTITY_NV */ + 803, /* GL_INVERSE_NV */ + 2147, /* GL_TRANSPOSE_NV */ + 804, /* GL_INVERSE_TRANSPOSE_NV */ + 1083, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */ + 1082, /* GL_MAX_PROGRAM_MATRICES_ARB */ + 964, /* GL_MATRIX0_NV */ + 976, /* GL_MATRIX1_NV */ + 988, /* GL_MATRIX2_NV */ + 992, /* GL_MATRIX3_NV */ + 994, /* GL_MATRIX4_NV */ + 996, /* GL_MATRIX5_NV */ + 998, /* GL_MATRIX6_NV */ + 1000, /* GL_MATRIX7_NV */ + 370, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */ + 367, /* GL_CURRENT_MATRIX_ARB */ + 1478, /* GL_PROGRAM_POINT_SIZE */ + 2279, /* GL_VERTEX_PROGRAM_TWO_SIDE */ + 1477, /* GL_PROGRAM_PARAMETER_NV */ + 2264, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */ + 1483, /* GL_PROGRAM_TARGET_NV */ + 1480, /* GL_PROGRAM_RESIDENT_NV */ + 2119, /* GL_TRACK_MATRIX_NV */ + 2120, /* GL_TRACK_MATRIX_TRANSFORM_NV */ + 2274, /* GL_VERTEX_PROGRAM_BINDING_NV */ + 1459, /* GL_PROGRAM_ERROR_POSITION_ARB */ + 412, /* GL_DEPTH_CLAMP */ + 2239, /* GL_VERTEX_ATTRIB_ARRAY0_NV */ + 2246, /* GL_VERTEX_ATTRIB_ARRAY1_NV */ + 2247, /* GL_VERTEX_ATTRIB_ARRAY2_NV */ + 2248, /* GL_VERTEX_ATTRIB_ARRAY3_NV */ + 2249, /* GL_VERTEX_ATTRIB_ARRAY4_NV */ + 2250, /* GL_VERTEX_ATTRIB_ARRAY5_NV */ + 2251, /* GL_VERTEX_ATTRIB_ARRAY6_NV */ + 2252, /* GL_VERTEX_ATTRIB_ARRAY7_NV */ + 2253, /* GL_VERTEX_ATTRIB_ARRAY8_NV */ + 2254, /* GL_VERTEX_ATTRIB_ARRAY9_NV */ + 2240, /* GL_VERTEX_ATTRIB_ARRAY10_NV */ + 2241, /* GL_VERTEX_ATTRIB_ARRAY11_NV */ + 2242, /* GL_VERTEX_ATTRIB_ARRAY12_NV */ + 2243, /* GL_VERTEX_ATTRIB_ARRAY13_NV */ + 2244, /* GL_VERTEX_ATTRIB_ARRAY14_NV */ + 2245, /* GL_VERTEX_ATTRIB_ARRAY15_NV */ + 912, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */ + 919, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */ + 920, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */ + 921, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */ + 922, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */ + 923, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */ + 924, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */ + 925, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */ + 926, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */ + 927, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */ + 913, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */ + 914, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */ + 915, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */ + 916, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */ + 917, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */ + 918, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */ + 939, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */ + 946, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */ + 947, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */ + 948, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */ + 949, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */ + 950, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */ + 951, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */ + 1458, /* GL_PROGRAM_BINDING_ARB */ + 953, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */ + 954, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */ + 940, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */ + 941, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */ + 942, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */ + 943, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */ + 944, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */ + 945, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */ + 2020, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */ + 2017, /* GL_TEXTURE_COMPRESSED */ + 1245, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */ 314, /* GL_COMPRESSED_TEXTURE_FORMATS */ - 1139, /* GL_MAX_VERTEX_UNITS_ARB */ + 1143, /* GL_MAX_VERTEX_UNITS_ARB */ 23, /* GL_ACTIVE_VERTEX_UNITS_ARB */ - 2295, /* GL_WEIGHT_SUM_UNITY_ARB */ - 2265, /* GL_VERTEX_BLEND_ARB */ - 388, /* GL_CURRENT_WEIGHT_ARB */ - 2293, /* GL_WEIGHT_ARRAY_TYPE_ARB */ - 2291, /* GL_WEIGHT_ARRAY_STRIDE_ARB */ - 2289, /* GL_WEIGHT_ARRAY_SIZE_ARB */ - 2287, /* GL_WEIGHT_ARRAY_POINTER_ARB */ - 2282, /* GL_WEIGHT_ARRAY_ARB */ - 445, /* GL_DOT3_RGB */ - 446, /* GL_DOT3_RGBA */ + 2302, /* GL_WEIGHT_SUM_UNITY_ARB */ + 2272, /* GL_VERTEX_BLEND_ARB */ + 389, /* GL_CURRENT_WEIGHT_ARB */ + 2300, /* GL_WEIGHT_ARRAY_TYPE_ARB */ + 2298, /* GL_WEIGHT_ARRAY_STRIDE_ARB */ + 2296, /* GL_WEIGHT_ARRAY_SIZE_ARB */ + 2294, /* GL_WEIGHT_ARRAY_POINTER_ARB */ + 2289, /* GL_WEIGHT_ARRAY_ARB */ + 446, /* GL_DOT3_RGB */ + 447, /* GL_DOT3_RGBA */ 308, /* GL_COMPRESSED_RGB_FXT1_3DFX */ 303, /* GL_COMPRESSED_RGBA_FXT1_3DFX */ - 1207, /* GL_MULTISAMPLE_3DFX */ - 1725, /* GL_SAMPLE_BUFFERS_3DFX */ - 1716, /* GL_SAMPLES_3DFX */ - 1187, /* GL_MODELVIEW2_ARB */ - 1190, /* GL_MODELVIEW3_ARB */ - 1191, /* GL_MODELVIEW4_ARB */ - 1192, /* GL_MODELVIEW5_ARB */ - 1193, /* GL_MODELVIEW6_ARB */ - 1194, /* GL_MODELVIEW7_ARB */ - 1195, /* GL_MODELVIEW8_ARB */ - 1196, /* GL_MODELVIEW9_ARB */ - 1166, /* GL_MODELVIEW10_ARB */ - 1167, /* GL_MODELVIEW11_ARB */ - 1168, /* GL_MODELVIEW12_ARB */ - 1169, /* GL_MODELVIEW13_ARB */ - 1170, /* GL_MODELVIEW14_ARB */ - 1171, /* GL_MODELVIEW15_ARB */ - 1172, /* GL_MODELVIEW16_ARB */ - 1173, /* GL_MODELVIEW17_ARB */ - 1174, /* GL_MODELVIEW18_ARB */ - 1175, /* GL_MODELVIEW19_ARB */ - 1177, /* GL_MODELVIEW20_ARB */ - 1178, /* GL_MODELVIEW21_ARB */ - 1179, /* GL_MODELVIEW22_ARB */ - 1180, /* GL_MODELVIEW23_ARB */ - 1181, /* GL_MODELVIEW24_ARB */ - 1182, /* GL_MODELVIEW25_ARB */ - 1183, /* GL_MODELVIEW26_ARB */ - 1184, /* GL_MODELVIEW27_ARB */ - 1185, /* GL_MODELVIEW28_ARB */ - 1186, /* GL_MODELVIEW29_ARB */ - 1188, /* GL_MODELVIEW30_ARB */ - 1189, /* GL_MODELVIEW31_ARB */ - 450, /* GL_DOT3_RGB_EXT */ - 448, /* GL_DOT3_RGBA_EXT */ - 1160, /* GL_MIRROR_CLAMP_EXT */ - 1163, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */ - 1202, /* GL_MODULATE_ADD_ATI */ - 1203, /* GL_MODULATE_SIGNED_ADD_ATI */ - 1204, /* GL_MODULATE_SUBTRACT_ATI */ - 2302, /* GL_YCBCR_MESA */ - 1299, /* GL_PACK_INVERT_MESA */ - 391, /* GL_DEBUG_OBJECT_MESA */ - 392, /* GL_DEBUG_PRINT_MESA */ - 390, /* GL_DEBUG_ASSERT_MESA */ + 1211, /* GL_MULTISAMPLE_3DFX */ + 1731, /* GL_SAMPLE_BUFFERS_3DFX */ + 1722, /* GL_SAMPLES_3DFX */ + 1191, /* GL_MODELVIEW2_ARB */ + 1194, /* GL_MODELVIEW3_ARB */ + 1195, /* GL_MODELVIEW4_ARB */ + 1196, /* GL_MODELVIEW5_ARB */ + 1197, /* GL_MODELVIEW6_ARB */ + 1198, /* GL_MODELVIEW7_ARB */ + 1199, /* GL_MODELVIEW8_ARB */ + 1200, /* GL_MODELVIEW9_ARB */ + 1170, /* GL_MODELVIEW10_ARB */ + 1171, /* GL_MODELVIEW11_ARB */ + 1172, /* GL_MODELVIEW12_ARB */ + 1173, /* GL_MODELVIEW13_ARB */ + 1174, /* GL_MODELVIEW14_ARB */ + 1175, /* GL_MODELVIEW15_ARB */ + 1176, /* GL_MODELVIEW16_ARB */ + 1177, /* GL_MODELVIEW17_ARB */ + 1178, /* GL_MODELVIEW18_ARB */ + 1179, /* GL_MODELVIEW19_ARB */ + 1181, /* GL_MODELVIEW20_ARB */ + 1182, /* GL_MODELVIEW21_ARB */ + 1183, /* GL_MODELVIEW22_ARB */ + 1184, /* GL_MODELVIEW23_ARB */ + 1185, /* GL_MODELVIEW24_ARB */ + 1186, /* GL_MODELVIEW25_ARB */ + 1187, /* GL_MODELVIEW26_ARB */ + 1188, /* GL_MODELVIEW27_ARB */ + 1189, /* GL_MODELVIEW28_ARB */ + 1190, /* GL_MODELVIEW29_ARB */ + 1192, /* GL_MODELVIEW30_ARB */ + 1193, /* GL_MODELVIEW31_ARB */ + 451, /* GL_DOT3_RGB_EXT */ + 449, /* GL_DOT3_RGBA_EXT */ + 1164, /* GL_MIRROR_CLAMP_EXT */ + 1167, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */ + 1206, /* GL_MODULATE_ADD_ATI */ + 1207, /* GL_MODULATE_SIGNED_ADD_ATI */ + 1208, /* GL_MODULATE_SUBTRACT_ATI */ + 2309, /* GL_YCBCR_MESA */ + 1304, /* GL_PACK_INVERT_MESA */ + 392, /* GL_DEBUG_OBJECT_MESA */ + 393, /* GL_DEBUG_PRINT_MESA */ + 391, /* GL_DEBUG_ASSERT_MESA */ 139, /* GL_BUFFER_SIZE */ 141, /* GL_BUFFER_USAGE */ 145, /* GL_BUMP_ROT_MATRIX_ATI */ 146, /* GL_BUMP_ROT_MATRIX_SIZE_ATI */ 144, /* GL_BUMP_NUM_TEX_UNITS_ATI */ 148, /* GL_BUMP_TEX_UNITS_ATI */ - 510, /* GL_DUDV_ATI */ - 509, /* GL_DU8DV8_ATI */ + 511, /* GL_DUDV_ATI */ + 510, /* GL_DU8DV8_ATI */ 143, /* GL_BUMP_ENVMAP_ATI */ 147, /* GL_BUMP_TARGET_ATI */ - 1243, /* GL_NUM_PROGRAM_BINARY_FORMATS_OES */ - 1451, /* GL_PROGRAM_BINARY_FORMATS_OES */ - 1829, /* GL_STENCIL_BACK_FUNC */ - 1827, /* GL_STENCIL_BACK_FAIL */ - 1831, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */ - 1833, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */ - 599, /* GL_FRAGMENT_PROGRAM_ARB */ - 1449, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */ - 1481, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */ - 1480, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */ - 1463, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ - 1469, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ - 1468, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ - 1068, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */ - 1093, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */ - 1092, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */ - 1081, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ - 1087, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ - 1086, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ - 1657, /* GL_RGBA32F */ - 1620, /* GL_RGB32F */ - 1648, /* GL_RGBA16F */ - 1612, /* GL_RGB16F */ - 1676, /* GL_RGBA_FLOAT_MODE_ARB */ - 1037, /* GL_MAX_DRAW_BUFFERS */ - 454, /* GL_DRAW_BUFFER0 */ - 457, /* GL_DRAW_BUFFER1 */ - 478, /* GL_DRAW_BUFFER2 */ - 481, /* GL_DRAW_BUFFER3 */ - 484, /* GL_DRAW_BUFFER4 */ - 487, /* GL_DRAW_BUFFER5 */ - 490, /* GL_DRAW_BUFFER6 */ - 493, /* GL_DRAW_BUFFER7 */ - 496, /* GL_DRAW_BUFFER8 */ - 499, /* GL_DRAW_BUFFER9 */ - 458, /* GL_DRAW_BUFFER10 */ - 461, /* GL_DRAW_BUFFER11 */ - 464, /* GL_DRAW_BUFFER12 */ - 467, /* GL_DRAW_BUFFER13 */ - 470, /* GL_DRAW_BUFFER14 */ - 473, /* GL_DRAW_BUFFER15 */ + 1248, /* GL_NUM_PROGRAM_BINARY_FORMATS_OES */ + 1456, /* GL_PROGRAM_BINARY_FORMATS_OES */ + 1835, /* GL_STENCIL_BACK_FUNC */ + 1833, /* GL_STENCIL_BACK_FAIL */ + 1837, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */ + 1839, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */ + 600, /* GL_FRAGMENT_PROGRAM_ARB */ + 1454, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */ + 1486, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */ + 1485, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */ + 1468, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ + 1474, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ + 1473, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ + 1072, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */ + 1097, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */ + 1096, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */ + 1085, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ + 1091, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ + 1090, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ + 1663, /* GL_RGBA32F */ + 1626, /* GL_RGB32F */ + 1654, /* GL_RGBA16F */ + 1618, /* GL_RGB16F */ + 1682, /* GL_RGBA_FLOAT_MODE_ARB */ + 1041, /* GL_MAX_DRAW_BUFFERS */ + 455, /* GL_DRAW_BUFFER0 */ + 458, /* GL_DRAW_BUFFER1 */ + 479, /* GL_DRAW_BUFFER2 */ + 482, /* GL_DRAW_BUFFER3 */ + 485, /* GL_DRAW_BUFFER4 */ + 488, /* GL_DRAW_BUFFER5 */ + 491, /* GL_DRAW_BUFFER6 */ + 494, /* GL_DRAW_BUFFER7 */ + 497, /* GL_DRAW_BUFFER8 */ + 500, /* GL_DRAW_BUFFER9 */ + 459, /* GL_DRAW_BUFFER10 */ + 462, /* GL_DRAW_BUFFER11 */ + 465, /* GL_DRAW_BUFFER12 */ + 468, /* GL_DRAW_BUFFER13 */ + 471, /* GL_DRAW_BUFFER14 */ + 474, /* GL_DRAW_BUFFER15 */ 97, /* GL_BLEND_EQUATION_ALPHA */ - 1011, /* GL_MATRIX_PALETTE_ARB */ - 1061, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */ - 1064, /* GL_MAX_PALETTE_MATRICES_ARB */ - 372, /* GL_CURRENT_PALETTE_MATRIX_ARB */ - 999, /* GL_MATRIX_INDEX_ARRAY_ARB */ - 367, /* GL_CURRENT_MATRIX_INDEX_ARB */ - 1004, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */ - 1008, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */ - 1006, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */ - 1002, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */ - 2049, /* GL_TEXTURE_DEPTH_SIZE */ - 438, /* GL_DEPTH_TEXTURE_MODE */ - 2006, /* GL_TEXTURE_COMPARE_MODE */ - 2004, /* GL_TEXTURE_COMPARE_FUNC */ + 1015, /* GL_MATRIX_PALETTE_ARB */ + 1065, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */ + 1068, /* GL_MAX_PALETTE_MATRICES_ARB */ + 373, /* GL_CURRENT_PALETTE_MATRIX_ARB */ + 1003, /* GL_MATRIX_INDEX_ARRAY_ARB */ + 368, /* GL_CURRENT_MATRIX_INDEX_ARB */ + 1008, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */ + 1012, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */ + 1010, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */ + 1006, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */ + 2055, /* GL_TEXTURE_DEPTH_SIZE */ + 439, /* GL_DEPTH_TEXTURE_MODE */ + 2012, /* GL_TEXTURE_COMPARE_MODE */ + 2010, /* GL_TEXTURE_COMPARE_FUNC */ 284, /* GL_COMPARE_REF_TO_TEXTURE */ - 1376, /* GL_POINT_SPRITE */ - 346, /* GL_COORD_REPLACE */ - 1381, /* GL_POINT_SPRITE_R_MODE_NV */ - 1521, /* GL_QUERY_COUNTER_BITS */ - 375, /* GL_CURRENT_QUERY */ - 1525, /* GL_QUERY_RESULT */ - 1527, /* GL_QUERY_RESULT_AVAILABLE */ - 1131, /* GL_MAX_VERTEX_ATTRIBS */ - 2255, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */ - 436, /* GL_DEPTH_STENCIL_TO_RGBA_NV */ - 435, /* GL_DEPTH_STENCIL_TO_BGRA_NV */ - 1108, /* GL_MAX_TEXTURE_COORDS */ - 1110, /* GL_MAX_TEXTURE_IMAGE_UNITS */ - 1456, /* GL_PROGRAM_ERROR_STRING_ARB */ - 1458, /* GL_PROGRAM_FORMAT_ASCII_ARB */ - 1457, /* GL_PROGRAM_FORMAT_ARB */ - 2105, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */ - 408, /* GL_DEPTH_BOUNDS_TEST_EXT */ - 407, /* GL_DEPTH_BOUNDS_EXT */ + 1381, /* GL_POINT_SPRITE */ + 347, /* GL_COORD_REPLACE */ + 1386, /* GL_POINT_SPRITE_R_MODE_NV */ + 1526, /* GL_QUERY_COUNTER_BITS */ + 376, /* GL_CURRENT_QUERY */ + 1530, /* GL_QUERY_RESULT */ + 1532, /* GL_QUERY_RESULT_AVAILABLE */ + 1135, /* GL_MAX_VERTEX_ATTRIBS */ + 2262, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */ + 437, /* GL_DEPTH_STENCIL_TO_RGBA_NV */ + 436, /* GL_DEPTH_STENCIL_TO_BGRA_NV */ + 1112, /* GL_MAX_TEXTURE_COORDS */ + 1114, /* GL_MAX_TEXTURE_IMAGE_UNITS */ + 1461, /* GL_PROGRAM_ERROR_STRING_ARB */ + 1463, /* GL_PROGRAM_FORMAT_ASCII_ARB */ + 1462, /* GL_PROGRAM_FORMAT_ARB */ + 2111, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */ + 409, /* GL_DEPTH_BOUNDS_TEST_EXT */ + 408, /* GL_DEPTH_BOUNDS_EXT */ 61, /* GL_ARRAY_BUFFER */ - 523, /* GL_ELEMENT_ARRAY_BUFFER */ + 524, /* GL_ELEMENT_ARRAY_BUFFER */ 62, /* GL_ARRAY_BUFFER_BINDING */ - 524, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */ - 2226, /* GL_VERTEX_ARRAY_BUFFER_BINDING */ - 1229, /* GL_NORMAL_ARRAY_BUFFER_BINDING */ + 525, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */ + 2233, /* GL_VERTEX_ARRAY_BUFFER_BINDING */ + 1233, /* GL_NORMAL_ARRAY_BUFFER_BINDING */ 190, /* GL_COLOR_ARRAY_BUFFER_BINDING */ - 736, /* GL_INDEX_ARRAY_BUFFER_BINDING */ - 2019, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */ - 519, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */ - 1737, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */ - 577, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */ - 2283, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */ - 2248, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */ - 1459, /* GL_PROGRAM_INSTRUCTIONS_ARB */ - 1074, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */ - 1465, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ - 1083, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ - 1479, /* GL_PROGRAM_TEMPORARIES_ARB */ - 1089, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */ - 1467, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */ - 1085, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */ - 1471, /* GL_PROGRAM_PARAMETERS_ARB */ - 1088, /* GL_MAX_PROGRAM_PARAMETERS_ARB */ - 1466, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */ - 1084, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */ - 1450, /* GL_PROGRAM_ATTRIBS_ARB */ - 1069, /* GL_MAX_PROGRAM_ATTRIBS_ARB */ - 1464, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */ - 1082, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */ - 1448, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */ - 1067, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */ - 1462, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ - 1080, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ - 1075, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */ - 1071, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */ - 1482, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */ - 2138, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */ - 1544, /* GL_READ_ONLY */ - 2297, /* GL_WRITE_ONLY */ - 1546, /* GL_READ_WRITE */ + 738, /* GL_INDEX_ARRAY_BUFFER_BINDING */ + 2025, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */ + 520, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */ + 1743, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */ + 578, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */ + 2290, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */ + 2255, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */ + 1464, /* GL_PROGRAM_INSTRUCTIONS_ARB */ + 1078, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */ + 1470, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ + 1087, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ + 1484, /* GL_PROGRAM_TEMPORARIES_ARB */ + 1093, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */ + 1472, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */ + 1089, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */ + 1476, /* GL_PROGRAM_PARAMETERS_ARB */ + 1092, /* GL_MAX_PROGRAM_PARAMETERS_ARB */ + 1471, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */ + 1088, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */ + 1455, /* GL_PROGRAM_ATTRIBS_ARB */ + 1073, /* GL_MAX_PROGRAM_ATTRIBS_ARB */ + 1469, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */ + 1086, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */ + 1453, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */ + 1071, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */ + 1467, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ + 1084, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ + 1079, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */ + 1075, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */ + 1487, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */ + 2144, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */ + 1549, /* GL_READ_ONLY */ + 2304, /* GL_WRITE_ONLY */ + 1551, /* GL_READ_WRITE */ 124, /* GL_BUFFER_ACCESS */ 129, /* GL_BUFFER_MAPPED */ 134, /* GL_BUFFER_MAP_POINTER */ - 2112, /* GL_TIME_ELAPSED_EXT */ - 959, /* GL_MATRIX0_ARB */ - 971, /* GL_MATRIX1_ARB */ - 983, /* GL_MATRIX2_ARB */ - 987, /* GL_MATRIX3_ARB */ - 989, /* GL_MATRIX4_ARB */ - 991, /* GL_MATRIX5_ARB */ - 993, /* GL_MATRIX6_ARB */ - 995, /* GL_MATRIX7_ARB */ - 997, /* GL_MATRIX8_ARB */ - 998, /* GL_MATRIX9_ARB */ - 961, /* GL_MATRIX10_ARB */ - 962, /* GL_MATRIX11_ARB */ - 963, /* GL_MATRIX12_ARB */ - 964, /* GL_MATRIX13_ARB */ - 965, /* GL_MATRIX14_ARB */ - 966, /* GL_MATRIX15_ARB */ - 967, /* GL_MATRIX16_ARB */ - 968, /* GL_MATRIX17_ARB */ - 969, /* GL_MATRIX18_ARB */ - 970, /* GL_MATRIX19_ARB */ - 973, /* GL_MATRIX20_ARB */ - 974, /* GL_MATRIX21_ARB */ - 975, /* GL_MATRIX22_ARB */ - 976, /* GL_MATRIX23_ARB */ - 977, /* GL_MATRIX24_ARB */ - 978, /* GL_MATRIX25_ARB */ - 979, /* GL_MATRIX26_ARB */ - 980, /* GL_MATRIX27_ARB */ - 981, /* GL_MATRIX28_ARB */ - 982, /* GL_MATRIX29_ARB */ - 985, /* GL_MATRIX30_ARB */ - 986, /* GL_MATRIX31_ARB */ - 1870, /* GL_STREAM_DRAW */ - 1872, /* GL_STREAM_READ */ - 1868, /* GL_STREAM_COPY */ - 1819, /* GL_STATIC_DRAW */ - 1821, /* GL_STATIC_READ */ - 1817, /* GL_STATIC_COPY */ - 513, /* GL_DYNAMIC_DRAW */ - 515, /* GL_DYNAMIC_READ */ - 511, /* GL_DYNAMIC_COPY */ - 1339, /* GL_PIXEL_PACK_BUFFER */ - 1343, /* GL_PIXEL_UNPACK_BUFFER */ - 1340, /* GL_PIXEL_PACK_BUFFER_BINDING */ - 1344, /* GL_PIXEL_UNPACK_BUFFER_BINDING */ - 399, /* GL_DEPTH24_STENCIL8 */ - 2101, /* GL_TEXTURE_STENCIL_SIZE */ - 2047, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */ - 1070, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */ - 1073, /* GL_MAX_PROGRAM_IF_DEPTH_NV */ - 1077, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */ - 1076, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */ - 2253, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER */ - 2250, /* GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB */ - 1016, /* GL_MAX_ARRAY_TEXTURE_LAYERS */ - 1154, /* GL_MIN_PROGRAM_TEXEL_OFFSET */ - 1090, /* GL_MAX_PROGRAM_TEXEL_OFFSET */ - 1861, /* GL_STENCIL_TEST_TWO_SIDE_EXT */ + 2118, /* GL_TIME_ELAPSED_EXT */ + 963, /* GL_MATRIX0_ARB */ + 975, /* GL_MATRIX1_ARB */ + 987, /* GL_MATRIX2_ARB */ + 991, /* GL_MATRIX3_ARB */ + 993, /* GL_MATRIX4_ARB */ + 995, /* GL_MATRIX5_ARB */ + 997, /* GL_MATRIX6_ARB */ + 999, /* GL_MATRIX7_ARB */ + 1001, /* GL_MATRIX8_ARB */ + 1002, /* GL_MATRIX9_ARB */ + 965, /* GL_MATRIX10_ARB */ + 966, /* GL_MATRIX11_ARB */ + 967, /* GL_MATRIX12_ARB */ + 968, /* GL_MATRIX13_ARB */ + 969, /* GL_MATRIX14_ARB */ + 970, /* GL_MATRIX15_ARB */ + 971, /* GL_MATRIX16_ARB */ + 972, /* GL_MATRIX17_ARB */ + 973, /* GL_MATRIX18_ARB */ + 974, /* GL_MATRIX19_ARB */ + 977, /* GL_MATRIX20_ARB */ + 978, /* GL_MATRIX21_ARB */ + 979, /* GL_MATRIX22_ARB */ + 980, /* GL_MATRIX23_ARB */ + 981, /* GL_MATRIX24_ARB */ + 982, /* GL_MATRIX25_ARB */ + 983, /* GL_MATRIX26_ARB */ + 984, /* GL_MATRIX27_ARB */ + 985, /* GL_MATRIX28_ARB */ + 986, /* GL_MATRIX29_ARB */ + 989, /* GL_MATRIX30_ARB */ + 990, /* GL_MATRIX31_ARB */ + 1876, /* GL_STREAM_DRAW */ + 1878, /* GL_STREAM_READ */ + 1874, /* GL_STREAM_COPY */ + 1825, /* GL_STATIC_DRAW */ + 1827, /* GL_STATIC_READ */ + 1823, /* GL_STATIC_COPY */ + 514, /* GL_DYNAMIC_DRAW */ + 516, /* GL_DYNAMIC_READ */ + 512, /* GL_DYNAMIC_COPY */ + 1344, /* GL_PIXEL_PACK_BUFFER */ + 1348, /* GL_PIXEL_UNPACK_BUFFER */ + 1345, /* GL_PIXEL_PACK_BUFFER_BINDING */ + 1349, /* GL_PIXEL_UNPACK_BUFFER_BINDING */ + 400, /* GL_DEPTH24_STENCIL8 */ + 2107, /* GL_TEXTURE_STENCIL_SIZE */ + 2053, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */ + 1074, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */ + 1077, /* GL_MAX_PROGRAM_IF_DEPTH_NV */ + 1081, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */ + 1080, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */ + 2260, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER */ + 2257, /* GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB */ + 1020, /* GL_MAX_ARRAY_TEXTURE_LAYERS */ + 1158, /* GL_MIN_PROGRAM_TEXEL_OFFSET */ + 1094, /* GL_MAX_PROGRAM_TEXEL_OFFSET */ + 1867, /* GL_STENCIL_TEST_TWO_SIDE_EXT */ 18, /* GL_ACTIVE_STENCIL_FACE_EXT */ - 1161, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */ - 1718, /* GL_SAMPLES_PASSED */ - 692, /* GL_GEOMETRY_VERTICES_OUT */ - 686, /* GL_GEOMETRY_INPUT_TYPE */ - 688, /* GL_GEOMETRY_OUTPUT_TYPE */ - 1709, /* GL_SAMPLER_BINDING */ + 1165, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */ + 1724, /* GL_SAMPLES_PASSED */ + 693, /* GL_GEOMETRY_VERTICES_OUT */ + 687, /* GL_GEOMETRY_INPUT_TYPE */ + 689, /* GL_GEOMETRY_OUTPUT_TYPE */ + 1715, /* GL_SAMPLER_BINDING */ 164, /* GL_CLAMP_VERTEX_COLOR_ARB */ 156, /* GL_CLAMP_FRAGMENT_COLOR_ARB */ 157, /* GL_CLAMP_READ_COLOR */ - 549, /* GL_FIXED_ONLY */ - 1363, /* GL_POINT_SIZE_ARRAY_TYPE_OES */ - 1362, /* GL_POINT_SIZE_ARRAY_STRIDE_OES */ - 1361, /* GL_POINT_SIZE_ARRAY_POINTER_OES */ - 1198, /* GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES */ - 1485, /* GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES */ - 2081, /* GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES */ + 550, /* GL_FIXED_ONLY */ + 1368, /* GL_POINT_SIZE_ARRAY_TYPE_OES */ + 1367, /* GL_POINT_SIZE_ARRAY_STRIDE_OES */ + 1366, /* GL_POINT_SIZE_ARRAY_POINTER_OES */ + 1202, /* GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES */ + 1490, /* GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES */ + 2087, /* GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES */ 138, /* GL_BUFFER_SERIALIZED_MODIFY_APPLE */ 128, /* GL_BUFFER_FLUSHING_UNMAP_APPLE */ - 1561, /* GL_RELEASED_APPLE */ - 2280, /* GL_VOLATILE_APPLE */ - 1600, /* GL_RETAINED_APPLE */ - 2155, /* GL_UNDEFINED_APPLE */ - 1509, /* GL_PURGEABLE_APPLE */ - 600, /* GL_FRAGMENT_SHADER */ - 2275, /* GL_VERTEX_SHADER */ - 1470, /* GL_PROGRAM_OBJECT_ARB */ - 1754, /* GL_SHADER_OBJECT_ARB */ - 1045, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */ - 1136, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */ - 1127, /* GL_MAX_VARYING_COMPONENTS */ - 1134, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */ - 1028, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */ - 1259, /* GL_OBJECT_TYPE_ARB */ - 1756, /* GL_SHADER_TYPE */ - 565, /* GL_FLOAT_VEC2 */ - 567, /* GL_FLOAT_VEC3 */ - 569, /* GL_FLOAT_VEC4 */ - 788, /* GL_INT_VEC2 */ - 790, /* GL_INT_VEC3 */ - 792, /* GL_INT_VEC4 */ + 1566, /* GL_RELEASED_APPLE */ + 2287, /* GL_VOLATILE_APPLE */ + 1606, /* GL_RETAINED_APPLE */ + 2161, /* GL_UNDEFINED_APPLE */ + 1514, /* GL_PURGEABLE_APPLE */ + 601, /* GL_FRAGMENT_SHADER */ + 2282, /* GL_VERTEX_SHADER */ + 1475, /* GL_PROGRAM_OBJECT_ARB */ + 1760, /* GL_SHADER_OBJECT_ARB */ + 1049, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */ + 1140, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */ + 1131, /* GL_MAX_VARYING_COMPONENTS */ + 1138, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */ + 1032, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */ + 1264, /* GL_OBJECT_TYPE_ARB */ + 1762, /* GL_SHADER_TYPE */ + 566, /* GL_FLOAT_VEC2 */ + 568, /* GL_FLOAT_VEC3 */ + 570, /* GL_FLOAT_VEC4 */ + 791, /* GL_INT_VEC2 */ + 793, /* GL_INT_VEC3 */ + 795, /* GL_INT_VEC4 */ 116, /* GL_BOOL */ 118, /* GL_BOOL_VEC2 */ 120, /* GL_BOOL_VEC3 */ 122, /* GL_BOOL_VEC4 */ - 553, /* GL_FLOAT_MAT2 */ - 557, /* GL_FLOAT_MAT3 */ - 561, /* GL_FLOAT_MAT4 */ - 1693, /* GL_SAMPLER_1D */ - 1699, /* GL_SAMPLER_2D */ - 1707, /* GL_SAMPLER_3D */ - 1712, /* GL_SAMPLER_CUBE */ - 1698, /* GL_SAMPLER_1D_SHADOW */ - 1706, /* GL_SAMPLER_2D_SHADOW */ - 1704, /* GL_SAMPLER_2D_RECT */ - 1705, /* GL_SAMPLER_2D_RECT_SHADOW */ - 555, /* GL_FLOAT_MAT2x3 */ - 556, /* GL_FLOAT_MAT2x4 */ - 559, /* GL_FLOAT_MAT3x2 */ - 560, /* GL_FLOAT_MAT3x4 */ - 563, /* GL_FLOAT_MAT4x2 */ - 564, /* GL_FLOAT_MAT4x3 */ - 397, /* GL_DELETE_STATUS */ + 554, /* GL_FLOAT_MAT2 */ + 558, /* GL_FLOAT_MAT3 */ + 562, /* GL_FLOAT_MAT4 */ + 1699, /* GL_SAMPLER_1D */ + 1705, /* GL_SAMPLER_2D */ + 1713, /* GL_SAMPLER_3D */ + 1718, /* GL_SAMPLER_CUBE */ + 1704, /* GL_SAMPLER_1D_SHADOW */ + 1712, /* GL_SAMPLER_2D_SHADOW */ + 1710, /* GL_SAMPLER_2D_RECT */ + 1711, /* GL_SAMPLER_2D_RECT_SHADOW */ + 556, /* GL_FLOAT_MAT2x3 */ + 557, /* GL_FLOAT_MAT2x4 */ + 560, /* GL_FLOAT_MAT3x2 */ + 561, /* GL_FLOAT_MAT3x4 */ + 564, /* GL_FLOAT_MAT4x2 */ + 565, /* GL_FLOAT_MAT4x3 */ + 398, /* GL_DELETE_STATUS */ 289, /* GL_COMPILE_STATUS */ - 849, /* GL_LINK_STATUS */ - 2220, /* GL_VALIDATE_STATUS */ - 748, /* GL_INFO_LOG_LENGTH */ + 852, /* GL_LINK_STATUS */ + 2227, /* GL_VALIDATE_STATUS */ + 750, /* GL_INFO_LOG_LENGTH */ 64, /* GL_ATTACHED_SHADERS */ 21, /* GL_ACTIVE_UNIFORMS */ 22, /* GL_ACTIVE_UNIFORM_MAX_LENGTH */ - 1755, /* GL_SHADER_SOURCE_LENGTH */ + 1761, /* GL_SHADER_SOURCE_LENGTH */ 15, /* GL_ACTIVE_ATTRIBUTES */ 16, /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */ - 602, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */ - 1758, /* GL_SHADING_LANGUAGE_VERSION */ - 374, /* GL_CURRENT_PROGRAM */ - 1308, /* GL_PALETTE4_RGB8_OES */ - 1310, /* GL_PALETTE4_RGBA8_OES */ - 1306, /* GL_PALETTE4_R5_G6_B5_OES */ - 1309, /* GL_PALETTE4_RGBA4_OES */ - 1307, /* GL_PALETTE4_RGB5_A1_OES */ - 1313, /* GL_PALETTE8_RGB8_OES */ - 1315, /* GL_PALETTE8_RGBA8_OES */ - 1311, /* GL_PALETTE8_R5_G6_B5_OES */ - 1314, /* GL_PALETTE8_RGBA4_OES */ - 1312, /* GL_PALETTE8_RGB5_A1_OES */ - 729, /* GL_IMPLEMENTATION_COLOR_READ_TYPE */ - 727, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT */ - 1360, /* GL_POINT_SIZE_ARRAY_OES */ - 2025, /* GL_TEXTURE_CROP_RECT_OES */ - 1000, /* GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES */ - 1359, /* GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES */ - 2203, /* GL_UNSIGNED_NORMALIZED */ - 1958, /* GL_TEXTURE_1D_ARRAY */ - 1495, /* GL_PROXY_TEXTURE_1D_ARRAY */ - 1961, /* GL_TEXTURE_2D_ARRAY */ - 1499, /* GL_PROXY_TEXTURE_2D_ARRAY */ - 1969, /* GL_TEXTURE_BINDING_1D_ARRAY */ - 1972, /* GL_TEXTURE_BINDING_2D_ARRAY */ - 1052, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS */ - 1989, /* GL_TEXTURE_BUFFER */ - 1106, /* GL_MAX_TEXTURE_BUFFER_SIZE */ - 1976, /* GL_TEXTURE_BINDING_BUFFER */ - 1991, /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING */ - 1993, /* GL_TEXTURE_BUFFER_FORMAT */ - 1532, /* GL_R11F_G11F_B10F */ - 2169, /* GL_UNSIGNED_INT_10F_11F_11F_REV */ - 1643, /* GL_RGB9_E5 */ - 2178, /* GL_UNSIGNED_INT_5_9_9_9_REV */ - 2099, /* GL_TEXTURE_SHARED_SIZE */ - 1811, /* GL_SRGB */ - 1812, /* GL_SRGB8 */ - 1814, /* GL_SRGB_ALPHA */ - 1813, /* GL_SRGB8_ALPHA8 */ - 1771, /* GL_SLUMINANCE_ALPHA */ - 1770, /* GL_SLUMINANCE8_ALPHA8 */ - 1768, /* GL_SLUMINANCE */ - 1769, /* GL_SLUMINANCE8 */ + 603, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */ + 1764, /* GL_SHADING_LANGUAGE_VERSION */ + 375, /* GL_CURRENT_PROGRAM */ + 1313, /* GL_PALETTE4_RGB8_OES */ + 1315, /* GL_PALETTE4_RGBA8_OES */ + 1311, /* GL_PALETTE4_R5_G6_B5_OES */ + 1314, /* GL_PALETTE4_RGBA4_OES */ + 1312, /* GL_PALETTE4_RGB5_A1_OES */ + 1318, /* GL_PALETTE8_RGB8_OES */ + 1320, /* GL_PALETTE8_RGBA8_OES */ + 1316, /* GL_PALETTE8_R5_G6_B5_OES */ + 1319, /* GL_PALETTE8_RGBA4_OES */ + 1317, /* GL_PALETTE8_RGB5_A1_OES */ + 731, /* GL_IMPLEMENTATION_COLOR_READ_TYPE */ + 729, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT */ + 1365, /* GL_POINT_SIZE_ARRAY_OES */ + 2031, /* GL_TEXTURE_CROP_RECT_OES */ + 1004, /* GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES */ + 1364, /* GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES */ + 2210, /* GL_UNSIGNED_NORMALIZED */ + 1964, /* GL_TEXTURE_1D_ARRAY */ + 1500, /* GL_PROXY_TEXTURE_1D_ARRAY */ + 1967, /* GL_TEXTURE_2D_ARRAY */ + 1504, /* GL_PROXY_TEXTURE_2D_ARRAY */ + 1975, /* GL_TEXTURE_BINDING_1D_ARRAY */ + 1978, /* GL_TEXTURE_BINDING_2D_ARRAY */ + 1056, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS */ + 1995, /* GL_TEXTURE_BUFFER */ + 1110, /* GL_MAX_TEXTURE_BUFFER_SIZE */ + 1982, /* GL_TEXTURE_BINDING_BUFFER */ + 1997, /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING */ + 1999, /* GL_TEXTURE_BUFFER_FORMAT */ + 1537, /* GL_R11F_G11F_B10F */ + 2176, /* GL_UNSIGNED_INT_10F_11F_11F_REV */ + 1649, /* GL_RGB9_E5 */ + 2185, /* GL_UNSIGNED_INT_5_9_9_9_REV */ + 2105, /* GL_TEXTURE_SHARED_SIZE */ + 1817, /* GL_SRGB */ + 1818, /* GL_SRGB8 */ + 1820, /* GL_SRGB_ALPHA */ + 1819, /* GL_SRGB8_ALPHA8 */ + 1777, /* GL_SLUMINANCE_ALPHA */ + 1776, /* GL_SLUMINANCE8_ALPHA8 */ + 1774, /* GL_SLUMINANCE */ + 1775, /* GL_SLUMINANCE8 */ 312, /* GL_COMPRESSED_SRGB */ 313, /* GL_COMPRESSED_SRGB_ALPHA */ 310, /* GL_COMPRESSED_SLUMINANCE */ 311, /* GL_COMPRESSED_SLUMINANCE_ALPHA */ - 2134, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH */ - 2123, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE */ - 1125, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS */ - 2132, /* GL_TRANSFORM_FEEDBACK_VARYINGS */ - 2128, /* GL_TRANSFORM_FEEDBACK_BUFFER_START */ - 2126, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE */ - 1442, /* GL_PRIMITIVES_GENERATED */ - 2130, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN */ - 1536, /* GL_RASTERIZER_DISCARD */ - 1121, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS */ - 1123, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS */ - 766, /* GL_INTERLEAVED_ATTRIBS */ - 1747, /* GL_SEPARATE_ATTRIBS */ - 2118, /* GL_TRANSFORM_FEEDBACK_BUFFER */ - 2120, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING */ - 1378, /* GL_POINT_SPRITE_COORD_ORIGIN */ - 857, /* GL_LOWER_LEFT */ - 2217, /* GL_UPPER_LEFT */ - 1835, /* GL_STENCIL_BACK_REF */ - 1836, /* GL_STENCIL_BACK_VALUE_MASK */ - 1837, /* GL_STENCIL_BACK_WRITEMASK */ - 503, /* GL_DRAW_FRAMEBUFFER_BINDING */ - 1566, /* GL_RENDERBUFFER_BINDING */ - 1540, /* GL_READ_FRAMEBUFFER */ - 502, /* GL_DRAW_FRAMEBUFFER */ - 1541, /* GL_READ_FRAMEBUFFER_BINDING */ - 1585, /* GL_RENDERBUFFER_SAMPLES */ - 616, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ - 613, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ - 628, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ - 623, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ - 626, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ - 634, /* GL_FRAMEBUFFER_COMPLETE */ - 639, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ - 654, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ - 648, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */ - 643, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */ - 649, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */ - 645, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */ - 659, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */ - 665, /* GL_FRAMEBUFFER_UNSUPPORTED */ - 663, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */ - 1024, /* GL_MAX_COLOR_ATTACHMENTS */ + 2140, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH */ + 2129, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE */ + 1129, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS */ + 2138, /* GL_TRANSFORM_FEEDBACK_VARYINGS */ + 2134, /* GL_TRANSFORM_FEEDBACK_BUFFER_START */ + 2132, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE */ + 1447, /* GL_PRIMITIVES_GENERATED */ + 2136, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN */ + 1541, /* GL_RASTERIZER_DISCARD */ + 1125, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS */ + 1127, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS */ + 769, /* GL_INTERLEAVED_ATTRIBS */ + 1753, /* GL_SEPARATE_ATTRIBS */ + 2124, /* GL_TRANSFORM_FEEDBACK_BUFFER */ + 2126, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING */ + 1383, /* GL_POINT_SPRITE_COORD_ORIGIN */ + 861, /* GL_LOWER_LEFT */ + 2224, /* GL_UPPER_LEFT */ + 1841, /* GL_STENCIL_BACK_REF */ + 1842, /* GL_STENCIL_BACK_VALUE_MASK */ + 1843, /* GL_STENCIL_BACK_WRITEMASK */ + 504, /* GL_DRAW_FRAMEBUFFER_BINDING */ + 1571, /* GL_RENDERBUFFER_BINDING */ + 1545, /* GL_READ_FRAMEBUFFER */ + 503, /* GL_DRAW_FRAMEBUFFER */ + 1546, /* GL_READ_FRAMEBUFFER_BINDING */ + 1590, /* GL_RENDERBUFFER_SAMPLES */ + 617, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ + 614, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ + 629, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ + 624, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ + 627, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ + 635, /* GL_FRAMEBUFFER_COMPLETE */ + 640, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ + 655, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ + 649, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */ + 644, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */ + 650, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */ + 646, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */ + 660, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */ + 666, /* GL_FRAMEBUFFER_UNSUPPORTED */ + 664, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */ + 1028, /* GL_MAX_COLOR_ATTACHMENTS */ 196, /* GL_COLOR_ATTACHMENT0 */ 199, /* GL_COLOR_ATTACHMENT1 */ 213, /* GL_COLOR_ATTACHMENT2 */ @@ -6034,184 +6054,184 @@ static const unsigned reduced_enums[1556] = 206, /* GL_COLOR_ATTACHMENT13 */ 208, /* GL_COLOR_ATTACHMENT14 */ 210, /* GL_COLOR_ATTACHMENT15 */ - 402, /* GL_DEPTH_ATTACHMENT */ - 1824, /* GL_STENCIL_ATTACHMENT */ - 604, /* GL_FRAMEBUFFER */ - 1563, /* GL_RENDERBUFFER */ - 1589, /* GL_RENDERBUFFER_WIDTH */ - 1576, /* GL_RENDERBUFFER_HEIGHT */ - 1579, /* GL_RENDERBUFFER_INTERNAL_FORMAT */ - 1856, /* GL_STENCIL_INDEX_EXT */ - 1845, /* GL_STENCIL_INDEX1 */ - 1850, /* GL_STENCIL_INDEX4 */ - 1853, /* GL_STENCIL_INDEX8 */ - 1846, /* GL_STENCIL_INDEX16 */ - 1583, /* GL_RENDERBUFFER_RED_SIZE */ - 1574, /* GL_RENDERBUFFER_GREEN_SIZE */ - 1569, /* GL_RENDERBUFFER_BLUE_SIZE */ - 1564, /* GL_RENDERBUFFER_ALPHA_SIZE */ - 1571, /* GL_RENDERBUFFER_DEPTH_SIZE */ - 1587, /* GL_RENDERBUFFER_STENCIL_SIZE */ - 657, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ - 1101, /* GL_MAX_SAMPLES */ - 2061, /* GL_TEXTURE_GEN_STR_OES */ - 703, /* GL_HALF_FLOAT_OES */ - 1630, /* GL_RGB565_OES */ - 1660, /* GL_RGBA32UI */ - 1623, /* GL_RGB32UI */ + 403, /* GL_DEPTH_ATTACHMENT */ + 1830, /* GL_STENCIL_ATTACHMENT */ + 605, /* GL_FRAMEBUFFER */ + 1568, /* GL_RENDERBUFFER */ + 1594, /* GL_RENDERBUFFER_WIDTH */ + 1581, /* GL_RENDERBUFFER_HEIGHT */ + 1584, /* GL_RENDERBUFFER_INTERNAL_FORMAT */ + 1862, /* GL_STENCIL_INDEX_EXT */ + 1851, /* GL_STENCIL_INDEX1 */ + 1856, /* GL_STENCIL_INDEX4 */ + 1859, /* GL_STENCIL_INDEX8 */ + 1852, /* GL_STENCIL_INDEX16 */ + 1588, /* GL_RENDERBUFFER_RED_SIZE */ + 1579, /* GL_RENDERBUFFER_GREEN_SIZE */ + 1574, /* GL_RENDERBUFFER_BLUE_SIZE */ + 1569, /* GL_RENDERBUFFER_ALPHA_SIZE */ + 1576, /* GL_RENDERBUFFER_DEPTH_SIZE */ + 1592, /* GL_RENDERBUFFER_STENCIL_SIZE */ + 658, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ + 1105, /* GL_MAX_SAMPLES */ + 2067, /* GL_TEXTURE_GEN_STR_OES */ + 705, /* GL_HALF_FLOAT_OES */ + 1636, /* GL_RGB565_OES */ + 1666, /* GL_RGBA32UI */ + 1629, /* GL_RGB32UI */ 40, /* GL_ALPHA32UI_EXT */ - 758, /* GL_INTENSITY32UI_EXT */ - 874, /* GL_LUMINANCE32UI_EXT */ - 891, /* GL_LUMINANCE_ALPHA32UI_EXT */ - 1651, /* GL_RGBA16UI */ - 1615, /* GL_RGB16UI */ + 761, /* GL_INTENSITY32UI_EXT */ + 878, /* GL_LUMINANCE32UI_EXT */ + 895, /* GL_LUMINANCE_ALPHA32UI_EXT */ + 1657, /* GL_RGBA16UI */ + 1621, /* GL_RGB16UI */ 37, /* GL_ALPHA16UI_EXT */ - 755, /* GL_INTENSITY16UI_EXT */ - 869, /* GL_LUMINANCE16UI_EXT */ - 889, /* GL_LUMINANCE_ALPHA16UI_EXT */ - 1670, /* GL_RGBA8UI */ - 1638, /* GL_RGB8UI */ + 758, /* GL_INTENSITY16UI_EXT */ + 873, /* GL_LUMINANCE16UI_EXT */ + 893, /* GL_LUMINANCE_ALPHA16UI_EXT */ + 1676, /* GL_RGBA8UI */ + 1644, /* GL_RGB8UI */ 45, /* GL_ALPHA8UI_EXT */ - 763, /* GL_INTENSITY8UI_EXT */ - 883, /* GL_LUMINANCE8UI_EXT */ - 893, /* GL_LUMINANCE_ALPHA8UI_EXT */ - 1658, /* GL_RGBA32I */ - 1621, /* GL_RGB32I */ + 766, /* GL_INTENSITY8UI_EXT */ + 887, /* GL_LUMINANCE8UI_EXT */ + 897, /* GL_LUMINANCE_ALPHA8UI_EXT */ + 1664, /* GL_RGBA32I */ + 1627, /* GL_RGB32I */ 39, /* GL_ALPHA32I_EXT */ - 757, /* GL_INTENSITY32I_EXT */ - 873, /* GL_LUMINANCE32I_EXT */ - 890, /* GL_LUMINANCE_ALPHA32I_EXT */ - 1649, /* GL_RGBA16I */ - 1613, /* GL_RGB16I */ + 760, /* GL_INTENSITY32I_EXT */ + 877, /* GL_LUMINANCE32I_EXT */ + 894, /* GL_LUMINANCE_ALPHA32I_EXT */ + 1655, /* GL_RGBA16I */ + 1619, /* GL_RGB16I */ 36, /* GL_ALPHA16I_EXT */ - 754, /* GL_INTENSITY16I_EXT */ - 868, /* GL_LUMINANCE16I_EXT */ - 888, /* GL_LUMINANCE_ALPHA16I_EXT */ - 1668, /* GL_RGBA8I */ - 1636, /* GL_RGB8I */ + 757, /* GL_INTENSITY16I_EXT */ + 872, /* GL_LUMINANCE16I_EXT */ + 892, /* GL_LUMINANCE_ALPHA16I_EXT */ + 1674, /* GL_RGBA8I */ + 1642, /* GL_RGB8I */ 44, /* GL_ALPHA8I_EXT */ - 762, /* GL_INTENSITY8I_EXT */ - 882, /* GL_LUMINANCE8I_EXT */ - 892, /* GL_LUMINANCE_ALPHA8I_EXT */ - 1553, /* GL_RED_INTEGER */ - 699, /* GL_GREEN_INTEGER */ + 765, /* GL_INTENSITY8I_EXT */ + 886, /* GL_LUMINANCE8I_EXT */ + 896, /* GL_LUMINANCE_ALPHA8I_EXT */ + 1558, /* GL_RED_INTEGER */ + 700, /* GL_GREEN_INTEGER */ 113, /* GL_BLUE_INTEGER */ 49, /* GL_ALPHA_INTEGER_EXT */ - 1683, /* GL_RGB_INTEGER */ - 1677, /* GL_RGBA_INTEGER */ + 1689, /* GL_RGB_INTEGER */ + 1683, /* GL_RGBA_INTEGER */ 84, /* GL_BGR_INTEGER */ 82, /* GL_BGRA_INTEGER */ - 895, /* GL_LUMINANCE_INTEGER_EXT */ - 894, /* GL_LUMINANCE_ALPHA_INTEGER_EXT */ - 1679, /* GL_RGBA_INTEGER_MODE_EXT */ - 611, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED */ - 652, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS */ - 651, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB */ - 1694, /* GL_SAMPLER_1D_ARRAY */ - 1700, /* GL_SAMPLER_2D_ARRAY */ - 1710, /* GL_SAMPLER_BUFFER */ - 1696, /* GL_SAMPLER_1D_ARRAY_SHADOW */ - 1702, /* GL_SAMPLER_2D_ARRAY_SHADOW */ - 1713, /* GL_SAMPLER_CUBE_SHADOW */ - 2197, /* GL_UNSIGNED_INT_VEC2 */ - 2199, /* GL_UNSIGNED_INT_VEC3 */ - 2201, /* GL_UNSIGNED_INT_VEC4 */ - 772, /* GL_INT_SAMPLER_1D */ - 776, /* GL_INT_SAMPLER_2D */ - 782, /* GL_INT_SAMPLER_3D */ - 786, /* GL_INT_SAMPLER_CUBE */ - 780, /* GL_INT_SAMPLER_2D_RECT */ - 773, /* GL_INT_SAMPLER_1D_ARRAY */ - 777, /* GL_INT_SAMPLER_2D_ARRAY */ - 784, /* GL_INT_SAMPLER_BUFFER */ - 2181, /* GL_UNSIGNED_INT_SAMPLER_1D */ - 2185, /* GL_UNSIGNED_INT_SAMPLER_2D */ - 2191, /* GL_UNSIGNED_INT_SAMPLER_3D */ - 2195, /* GL_UNSIGNED_INT_SAMPLER_CUBE */ - 2189, /* GL_UNSIGNED_INT_SAMPLER_2D_RECT */ - 2182, /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY */ - 2186, /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY */ - 2193, /* GL_UNSIGNED_INT_SAMPLER_BUFFER */ - 690, /* GL_GEOMETRY_SHADER */ - 693, /* GL_GEOMETRY_VERTICES_OUT_ARB */ - 687, /* GL_GEOMETRY_INPUT_TYPE_ARB */ - 689, /* GL_GEOMETRY_OUTPUT_TYPE_ARB */ - 1058, /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB */ - 1141, /* GL_MAX_VERTEX_VARYING_COMPONENTS_ARB */ - 1056, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS */ - 1050, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES */ - 1054, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS */ - 858, /* GL_LOW_FLOAT */ - 1143, /* GL_MEDIUM_FLOAT */ - 704, /* GL_HIGH_FLOAT */ - 859, /* GL_LOW_INT */ - 1144, /* GL_MEDIUM_INT */ - 705, /* GL_HIGH_INT */ - 2171, /* GL_UNSIGNED_INT_10_10_10_2_OES */ - 771, /* GL_INT_10_10_10_2_OES */ - 1752, /* GL_SHADER_BINARY_FORMATS */ - 1244, /* GL_NUM_SHADER_BINARY_FORMATS */ - 1753, /* GL_SHADER_COMPILER */ - 1138, /* GL_MAX_VERTEX_UNIFORM_VECTORS */ - 1130, /* GL_MAX_VARYING_VECTORS */ - 1047, /* GL_MAX_FRAGMENT_UNIFORM_VECTORS */ - 1529, /* GL_QUERY_WAIT */ - 1523, /* GL_QUERY_NO_WAIT */ - 1519, /* GL_QUERY_BY_REGION_WAIT */ - 1517, /* GL_QUERY_BY_REGION_NO_WAIT */ - 2116, /* GL_TRANSFORM_FEEDBACK */ - 2125, /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */ - 2119, /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */ - 2117, /* GL_TRANSFORM_FEEDBACK_BINDING */ - 1513, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */ - 545, /* GL_FIRST_VERTEX_CONVENTION */ - 804, /* GL_LAST_VERTEX_CONVENTION */ - 1487, /* GL_PROVOKING_VERTEX */ - 353, /* GL_COPY_READ_BUFFER */ - 354, /* GL_COPY_WRITE_BUFFER */ - 1556, /* GL_RED_SNORM */ - 1690, /* GL_RG_SNORM */ - 1689, /* GL_RGB_SNORM */ - 1682, /* GL_RGBA_SNORM */ - 1535, /* GL_R8_SNORM */ - 1603, /* GL_RG8_SNORM */ - 1642, /* GL_RGB8_SNORM */ - 1674, /* GL_RGBA8_SNORM */ - 1533, /* GL_R16_SNORM */ - 1602, /* GL_RG16_SNORM */ - 1618, /* GL_RGB16_SNORM */ - 1654, /* GL_RGBA16_SNORM */ - 1764, /* GL_SIGNED_NORMALIZED */ - 1444, /* GL_PRIMITIVE_RESTART */ - 1445, /* GL_PRIMITIVE_RESTART_INDEX */ - 1103, /* GL_MAX_SERVER_WAIT_TIMEOUT */ - 1258, /* GL_OBJECT_TYPE */ - 1877, /* GL_SYNC_CONDITION */ - 1882, /* GL_SYNC_STATUS */ - 1879, /* GL_SYNC_FLAGS */ - 1878, /* GL_SYNC_FENCE */ - 1881, /* GL_SYNC_GPU_COMMANDS_COMPLETE */ - 2164, /* GL_UNSIGNALED */ - 1763, /* GL_SIGNALED */ + 899, /* GL_LUMINANCE_INTEGER_EXT */ + 898, /* GL_LUMINANCE_ALPHA_INTEGER_EXT */ + 1685, /* GL_RGBA_INTEGER_MODE_EXT */ + 612, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED */ + 653, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS */ + 652, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB */ + 1700, /* GL_SAMPLER_1D_ARRAY */ + 1706, /* GL_SAMPLER_2D_ARRAY */ + 1716, /* GL_SAMPLER_BUFFER */ + 1702, /* GL_SAMPLER_1D_ARRAY_SHADOW */ + 1708, /* GL_SAMPLER_2D_ARRAY_SHADOW */ + 1719, /* GL_SAMPLER_CUBE_SHADOW */ + 2204, /* GL_UNSIGNED_INT_VEC2 */ + 2206, /* GL_UNSIGNED_INT_VEC3 */ + 2208, /* GL_UNSIGNED_INT_VEC4 */ + 775, /* GL_INT_SAMPLER_1D */ + 779, /* GL_INT_SAMPLER_2D */ + 785, /* GL_INT_SAMPLER_3D */ + 789, /* GL_INT_SAMPLER_CUBE */ + 783, /* GL_INT_SAMPLER_2D_RECT */ + 776, /* GL_INT_SAMPLER_1D_ARRAY */ + 780, /* GL_INT_SAMPLER_2D_ARRAY */ + 787, /* GL_INT_SAMPLER_BUFFER */ + 2188, /* GL_UNSIGNED_INT_SAMPLER_1D */ + 2192, /* GL_UNSIGNED_INT_SAMPLER_2D */ + 2198, /* GL_UNSIGNED_INT_SAMPLER_3D */ + 2202, /* GL_UNSIGNED_INT_SAMPLER_CUBE */ + 2196, /* GL_UNSIGNED_INT_SAMPLER_2D_RECT */ + 2189, /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY */ + 2193, /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY */ + 2200, /* GL_UNSIGNED_INT_SAMPLER_BUFFER */ + 691, /* GL_GEOMETRY_SHADER */ + 694, /* GL_GEOMETRY_VERTICES_OUT_ARB */ + 688, /* GL_GEOMETRY_INPUT_TYPE_ARB */ + 690, /* GL_GEOMETRY_OUTPUT_TYPE_ARB */ + 1062, /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB */ + 1145, /* GL_MAX_VERTEX_VARYING_COMPONENTS_ARB */ + 1060, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS */ + 1054, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES */ + 1058, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS */ + 862, /* GL_LOW_FLOAT */ + 1147, /* GL_MEDIUM_FLOAT */ + 706, /* GL_HIGH_FLOAT */ + 863, /* GL_LOW_INT */ + 1148, /* GL_MEDIUM_INT */ + 707, /* GL_HIGH_INT */ + 2178, /* GL_UNSIGNED_INT_10_10_10_2_OES */ + 774, /* GL_INT_10_10_10_2_OES */ + 1758, /* GL_SHADER_BINARY_FORMATS */ + 1249, /* GL_NUM_SHADER_BINARY_FORMATS */ + 1759, /* GL_SHADER_COMPILER */ + 1142, /* GL_MAX_VERTEX_UNIFORM_VECTORS */ + 1134, /* GL_MAX_VARYING_VECTORS */ + 1051, /* GL_MAX_FRAGMENT_UNIFORM_VECTORS */ + 1534, /* GL_QUERY_WAIT */ + 1528, /* GL_QUERY_NO_WAIT */ + 1524, /* GL_QUERY_BY_REGION_WAIT */ + 1522, /* GL_QUERY_BY_REGION_NO_WAIT */ + 2122, /* GL_TRANSFORM_FEEDBACK */ + 2131, /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */ + 2125, /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */ + 2123, /* GL_TRANSFORM_FEEDBACK_BINDING */ + 1518, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */ + 546, /* GL_FIRST_VERTEX_CONVENTION */ + 807, /* GL_LAST_VERTEX_CONVENTION */ + 1492, /* GL_PROVOKING_VERTEX */ + 354, /* GL_COPY_READ_BUFFER */ + 355, /* GL_COPY_WRITE_BUFFER */ + 1561, /* GL_RED_SNORM */ + 1696, /* GL_RG_SNORM */ + 1695, /* GL_RGB_SNORM */ + 1688, /* GL_RGBA_SNORM */ + 1540, /* GL_R8_SNORM */ + 1609, /* GL_RG8_SNORM */ + 1648, /* GL_RGB8_SNORM */ + 1680, /* GL_RGBA8_SNORM */ + 1538, /* GL_R16_SNORM */ + 1608, /* GL_RG16_SNORM */ + 1624, /* GL_RGB16_SNORM */ + 1660, /* GL_RGBA16_SNORM */ + 1770, /* GL_SIGNED_NORMALIZED */ + 1449, /* GL_PRIMITIVE_RESTART */ + 1450, /* GL_PRIMITIVE_RESTART_INDEX */ + 1107, /* GL_MAX_SERVER_WAIT_TIMEOUT */ + 1263, /* GL_OBJECT_TYPE */ + 1883, /* GL_SYNC_CONDITION */ + 1888, /* GL_SYNC_STATUS */ + 1885, /* GL_SYNC_FLAGS */ + 1884, /* GL_SYNC_FENCE */ + 1887, /* GL_SYNC_GPU_COMMANDS_COMPLETE */ + 2171, /* GL_UNSIGNALED */ + 1769, /* GL_SIGNALED */ 54, /* GL_ALREADY_SIGNALED */ - 2111, /* GL_TIMEOUT_EXPIRED */ + 2117, /* GL_TIMEOUT_EXPIRED */ 315, /* GL_CONDITION_SATISFIED */ - 2281, /* GL_WAIT_FAILED */ + 2288, /* GL_WAIT_FAILED */ 126, /* GL_BUFFER_ACCESS_FLAGS */ 132, /* GL_BUFFER_MAP_LENGTH */ 133, /* GL_BUFFER_MAP_OFFSET */ - 1133, /* GL_MAX_VERTEX_OUTPUT_COMPONENTS */ - 1048, /* GL_MAX_GEOMETRY_INPUT_COMPONENTS */ - 1049, /* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS */ - 1044, /* GL_MAX_FRAGMENT_INPUT_COMPONENTS */ - 329, /* GL_CONTEXT_PROFILE_MASK */ - 530, /* GL_EVAL_BIT */ - 1538, /* GL_RASTER_POSITION_UNCLIPPED_IBM */ - 851, /* GL_LIST_BIT */ - 1984, /* GL_TEXTURE_BIT */ - 1733, /* GL_SCISSOR_BIT */ + 1137, /* GL_MAX_VERTEX_OUTPUT_COMPONENTS */ + 1052, /* GL_MAX_GEOMETRY_INPUT_COMPONENTS */ + 1053, /* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS */ + 1048, /* GL_MAX_FRAGMENT_INPUT_COMPONENTS */ + 330, /* GL_CONTEXT_PROFILE_MASK */ + 531, /* GL_EVAL_BIT */ + 1543, /* GL_RASTER_POSITION_UNCLIPPED_IBM */ + 854, /* GL_LIST_BIT */ + 1990, /* GL_TEXTURE_BIT */ + 1739, /* GL_SCISSOR_BIT */ 30, /* GL_ALL_ATTRIB_BITS */ - 1209, /* GL_MULTISAMPLE_BIT */ + 1213, /* GL_MULTISAMPLE_BIT */ 31, /* GL_ALL_CLIENT_ATTRIB_BITS */ }; diff --git a/mesalib/src/mesa/main/eval.c b/mesalib/src/mesa/main/eval.c index 8eeeb2aea..e651715f7 100644 --- a/mesalib/src/mesa/main/eval.c +++ b/mesalib/src/mesa/main/eval.c @@ -1,1002 +1,1091 @@ -
-/*
- * Mesa 3-D graphics library
- * Version: 5.1
- *
- * Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/*
- * eval.c was written by
- * Bernd Barsuhn (bdbarsuh@cip.informatik.uni-erlangen.de) and
- * Volker Weiss (vrweiss@cip.informatik.uni-erlangen.de).
- *
- * My original implementation of evaluators was simplistic and didn't
- * compute surface normal vectors properly. Bernd and Volker applied
- * used more sophisticated methods to get better results.
- *
- * Thanks guys!
- */
-
-
-#include "glheader.h"
-#include "imports.h"
-#include "colormac.h"
-#include "context.h"
-#include "eval.h"
-#include "macros.h"
-#include "mfeatures.h"
-#include "mtypes.h"
-#include "main/dispatch.h"
-
-
-#if FEATURE_evaluators
-
-
-/*
- * Return the number of components per control point for any type of
- * evaluator. Return 0 if bad target.
- * See table 5.1 in the OpenGL 1.2 spec.
- */
-GLuint _mesa_evaluator_components( GLenum target )
-{
- switch (target) {
- case GL_MAP1_VERTEX_3: return 3;
- case GL_MAP1_VERTEX_4: return 4;
- case GL_MAP1_INDEX: return 1;
- case GL_MAP1_COLOR_4: return 4;
- case GL_MAP1_NORMAL: return 3;
- case GL_MAP1_TEXTURE_COORD_1: return 1;
- case GL_MAP1_TEXTURE_COORD_2: return 2;
- case GL_MAP1_TEXTURE_COORD_3: return 3;
- case GL_MAP1_TEXTURE_COORD_4: return 4;
- case GL_MAP2_VERTEX_3: return 3;
- case GL_MAP2_VERTEX_4: return 4;
- case GL_MAP2_INDEX: return 1;
- case GL_MAP2_COLOR_4: return 4;
- case GL_MAP2_NORMAL: return 3;
- case GL_MAP2_TEXTURE_COORD_1: return 1;
- case GL_MAP2_TEXTURE_COORD_2: return 2;
- case GL_MAP2_TEXTURE_COORD_3: return 3;
- case GL_MAP2_TEXTURE_COORD_4: return 4;
- default: break;
- }
-
- /* XXX need to check for the vertex program extension
- if (!ctx->Extensions.NV_vertex_program)
- return 0;
- */
-
- if (target >= GL_MAP1_VERTEX_ATTRIB0_4_NV &&
- target <= GL_MAP1_VERTEX_ATTRIB15_4_NV)
- return 4;
-
- if (target >= GL_MAP2_VERTEX_ATTRIB0_4_NV &&
- target <= GL_MAP2_VERTEX_ATTRIB15_4_NV)
- return 4;
-
- return 0;
-}
-
-
-/*
- * Return pointer to the gl_1d_map struct for the named target.
- */
-static struct gl_1d_map *
-get_1d_map( struct gl_context *ctx, GLenum target )
-{
- switch (target) {
- case GL_MAP1_VERTEX_3:
- return &ctx->EvalMap.Map1Vertex3;
- case GL_MAP1_VERTEX_4:
- return &ctx->EvalMap.Map1Vertex4;
- case GL_MAP1_INDEX:
- return &ctx->EvalMap.Map1Index;
- case GL_MAP1_COLOR_4:
- return &ctx->EvalMap.Map1Color4;
- case GL_MAP1_NORMAL:
- return &ctx->EvalMap.Map1Normal;
- case GL_MAP1_TEXTURE_COORD_1:
- return &ctx->EvalMap.Map1Texture1;
- case GL_MAP1_TEXTURE_COORD_2:
- return &ctx->EvalMap.Map1Texture2;
- case GL_MAP1_TEXTURE_COORD_3:
- return &ctx->EvalMap.Map1Texture3;
- case GL_MAP1_TEXTURE_COORD_4:
- return &ctx->EvalMap.Map1Texture4;
- case GL_MAP1_VERTEX_ATTRIB0_4_NV:
- case GL_MAP1_VERTEX_ATTRIB1_4_NV:
- case GL_MAP1_VERTEX_ATTRIB2_4_NV:
- case GL_MAP1_VERTEX_ATTRIB3_4_NV:
- case GL_MAP1_VERTEX_ATTRIB4_4_NV:
- case GL_MAP1_VERTEX_ATTRIB5_4_NV:
- case GL_MAP1_VERTEX_ATTRIB6_4_NV:
- case GL_MAP1_VERTEX_ATTRIB7_4_NV:
- case GL_MAP1_VERTEX_ATTRIB8_4_NV:
- case GL_MAP1_VERTEX_ATTRIB9_4_NV:
- case GL_MAP1_VERTEX_ATTRIB10_4_NV:
- case GL_MAP1_VERTEX_ATTRIB11_4_NV:
- case GL_MAP1_VERTEX_ATTRIB12_4_NV:
- case GL_MAP1_VERTEX_ATTRIB13_4_NV:
- case GL_MAP1_VERTEX_ATTRIB14_4_NV:
- case GL_MAP1_VERTEX_ATTRIB15_4_NV:
- if (!ctx->Extensions.NV_vertex_program)
- return NULL;
- return &ctx->EvalMap.Map1Attrib[target - GL_MAP1_VERTEX_ATTRIB0_4_NV];
- default:
- return NULL;
- }
-}
-
-
-/*
- * Return pointer to the gl_2d_map struct for the named target.
- */
-static struct gl_2d_map *
-get_2d_map( struct gl_context *ctx, GLenum target )
-{
- switch (target) {
- case GL_MAP2_VERTEX_3:
- return &ctx->EvalMap.Map2Vertex3;
- case GL_MAP2_VERTEX_4:
- return &ctx->EvalMap.Map2Vertex4;
- case GL_MAP2_INDEX:
- return &ctx->EvalMap.Map2Index;
- case GL_MAP2_COLOR_4:
- return &ctx->EvalMap.Map2Color4;
- case GL_MAP2_NORMAL:
- return &ctx->EvalMap.Map2Normal;
- case GL_MAP2_TEXTURE_COORD_1:
- return &ctx->EvalMap.Map2Texture1;
- case GL_MAP2_TEXTURE_COORD_2:
- return &ctx->EvalMap.Map2Texture2;
- case GL_MAP2_TEXTURE_COORD_3:
- return &ctx->EvalMap.Map2Texture3;
- case GL_MAP2_TEXTURE_COORD_4:
- return &ctx->EvalMap.Map2Texture4;
- case GL_MAP2_VERTEX_ATTRIB0_4_NV:
- case GL_MAP2_VERTEX_ATTRIB1_4_NV:
- case GL_MAP2_VERTEX_ATTRIB2_4_NV:
- case GL_MAP2_VERTEX_ATTRIB3_4_NV:
- case GL_MAP2_VERTEX_ATTRIB4_4_NV:
- case GL_MAP2_VERTEX_ATTRIB5_4_NV:
- case GL_MAP2_VERTEX_ATTRIB6_4_NV:
- case GL_MAP2_VERTEX_ATTRIB7_4_NV:
- case GL_MAP2_VERTEX_ATTRIB8_4_NV:
- case GL_MAP2_VERTEX_ATTRIB9_4_NV:
- case GL_MAP2_VERTEX_ATTRIB10_4_NV:
- case GL_MAP2_VERTEX_ATTRIB11_4_NV:
- case GL_MAP2_VERTEX_ATTRIB12_4_NV:
- case GL_MAP2_VERTEX_ATTRIB13_4_NV:
- case GL_MAP2_VERTEX_ATTRIB14_4_NV:
- case GL_MAP2_VERTEX_ATTRIB15_4_NV:
- if (!ctx->Extensions.NV_vertex_program)
- return NULL;
- return &ctx->EvalMap.Map2Attrib[target - GL_MAP2_VERTEX_ATTRIB0_4_NV];
- default:
- return NULL;
- }
-}
-
-
-/**********************************************************************/
-/*** Copy and deallocate control points ***/
-/**********************************************************************/
-
-
-/*
- * Copy 1-parametric evaluator control points from user-specified
- * memory space to a buffer of contiguous control points.
- * \param see glMap1f for details
- * \return pointer to buffer of contiguous control points or NULL if out
- * of memory.
- */
-GLfloat *_mesa_copy_map_points1f( GLenum target, GLint ustride, GLint uorder,
- const GLfloat *points )
-{
- GLfloat *buffer, *p;
- GLint i, k, size = _mesa_evaluator_components(target);
-
- if (!points || !size)
- return NULL;
-
- buffer = (GLfloat *) MALLOC(uorder * size * sizeof(GLfloat));
-
- if (buffer)
- for (i = 0, p = buffer; i < uorder; i++, points += ustride)
- for (k = 0; k < size; k++)
- *p++ = points[k];
-
- return buffer;
-}
-
-
-
-/*
- * Same as above but convert doubles to floats.
- */
-GLfloat *_mesa_copy_map_points1d( GLenum target, GLint ustride, GLint uorder,
- const GLdouble *points )
-{
- GLfloat *buffer, *p;
- GLint i, k, size = _mesa_evaluator_components(target);
-
- if (!points || !size)
- return NULL;
-
- buffer = (GLfloat *) MALLOC(uorder * size * sizeof(GLfloat));
-
- if (buffer)
- for (i = 0, p = buffer; i < uorder; i++, points += ustride)
- for (k = 0; k < size; k++)
- *p++ = (GLfloat) points[k];
-
- return buffer;
-}
-
-
-
-/*
- * Copy 2-parametric evaluator control points from user-specified
- * memory space to a buffer of contiguous control points.
- * Additional memory is allocated to be used by the horner and
- * de Casteljau evaluation schemes.
- *
- * \param see glMap2f for details
- * \return pointer to buffer of contiguous control points or NULL if out
- * of memory.
- */
-GLfloat *_mesa_copy_map_points2f( GLenum target,
- GLint ustride, GLint uorder,
- GLint vstride, GLint vorder,
- const GLfloat *points )
-{
- GLfloat *buffer, *p;
- GLint i, j, k, size, dsize, hsize;
- GLint uinc;
-
- size = _mesa_evaluator_components(target);
-
- if (!points || size==0) {
- return NULL;
- }
-
- /* max(uorder, vorder) additional points are used in */
- /* horner evaluation and uorder*vorder additional */
- /* values are needed for de Casteljau */
- dsize = (uorder == 2 && vorder == 2)? 0 : uorder*vorder;
- hsize = (uorder > vorder ? uorder : vorder)*size;
-
- if(hsize>dsize)
- buffer = (GLfloat *) MALLOC((uorder*vorder*size+hsize)*sizeof(GLfloat));
- else
- buffer = (GLfloat *) MALLOC((uorder*vorder*size+dsize)*sizeof(GLfloat));
-
- /* compute the increment value for the u-loop */
- uinc = ustride - vorder*vstride;
-
- if (buffer)
- for (i=0, p=buffer; i<uorder; i++, points += uinc)
- for (j=0; j<vorder; j++, points += vstride)
- for (k=0; k<size; k++)
- *p++ = points[k];
-
- return buffer;
-}
-
-
-
-/*
- * Same as above but convert doubles to floats.
- */
-GLfloat *_mesa_copy_map_points2d(GLenum target,
- GLint ustride, GLint uorder,
- GLint vstride, GLint vorder,
- const GLdouble *points )
-{
- GLfloat *buffer, *p;
- GLint i, j, k, size, hsize, dsize;
- GLint uinc;
-
- size = _mesa_evaluator_components(target);
-
- if (!points || size==0) {
- return NULL;
- }
-
- /* max(uorder, vorder) additional points are used in */
- /* horner evaluation and uorder*vorder additional */
- /* values are needed for de Casteljau */
- dsize = (uorder == 2 && vorder == 2)? 0 : uorder*vorder;
- hsize = (uorder > vorder ? uorder : vorder)*size;
-
- if(hsize>dsize)
- buffer = (GLfloat *) MALLOC((uorder*vorder*size+hsize)*sizeof(GLfloat));
- else
- buffer = (GLfloat *) MALLOC((uorder*vorder*size+dsize)*sizeof(GLfloat));
-
- /* compute the increment value for the u-loop */
- uinc = ustride - vorder*vstride;
-
- if (buffer)
- for (i=0, p=buffer; i<uorder; i++, points += uinc)
- for (j=0; j<vorder; j++, points += vstride)
- for (k=0; k<size; k++)
- *p++ = (GLfloat) points[k];
-
- return buffer;
-}
-
-
-
-
-/**********************************************************************/
-/*** API entry points ***/
-/**********************************************************************/
-
-
-/*
- * This does the work of glMap1[fd].
- */
-static void
-map1(GLenum target, GLfloat u1, GLfloat u2, GLint ustride,
- GLint uorder, const GLvoid *points, GLenum type )
-{
- GET_CURRENT_CONTEXT(ctx);
- GLint k;
- GLfloat *pnts;
- struct gl_1d_map *map = NULL;
-
- ASSERT_OUTSIDE_BEGIN_END(ctx);
- ASSERT(type == GL_FLOAT || type == GL_DOUBLE);
-
- if (u1 == u2) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMap1(u1,u2)" );
- return;
- }
- if (uorder < 1 || uorder > MAX_EVAL_ORDER) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMap1(order)" );
- return;
- }
- if (!points) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMap1(points)" );
- return;
- }
-
- k = _mesa_evaluator_components( target );
- if (k == 0) {
- _mesa_error( ctx, GL_INVALID_ENUM, "glMap1(target)" );
- }
-
- if (ustride < k) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMap1(stride)" );
- return;
- }
-
- if (ctx->Texture.CurrentUnit != 0) {
- /* See OpenGL 1.2.1 spec, section F.2.13 */
- _mesa_error( ctx, GL_INVALID_OPERATION, "glMap2(ACTIVE_TEXTURE != 0)" );
- return;
- }
-
- map = get_1d_map(ctx, target);
- if (!map) {
- _mesa_error( ctx, GL_INVALID_ENUM, "glMap1(target)" );
- return;
- }
-
- /* make copy of the control points */
- if (type == GL_FLOAT)
- pnts = _mesa_copy_map_points1f(target, ustride, uorder, (GLfloat*) points);
- else
- pnts = _mesa_copy_map_points1d(target, ustride, uorder, (GLdouble*) points);
-
-
- FLUSH_VERTICES(ctx, _NEW_EVAL);
- map->Order = uorder;
- map->u1 = u1;
- map->u2 = u2;
- map->du = 1.0F / (u2 - u1);
- if (map->Points)
- FREE( map->Points );
- map->Points = pnts;
-}
-
-
-
-static void GLAPIENTRY
-_mesa_Map1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride,
- GLint order, const GLfloat *points )
-{
- map1(target, u1, u2, stride, order, points, GL_FLOAT);
-}
-
-
-static void GLAPIENTRY
-_mesa_Map1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride,
- GLint order, const GLdouble *points )
-{
- map1(target, (GLfloat) u1, (GLfloat) u2, stride, order, points, GL_DOUBLE);
-}
-
-
-static void
-map2( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
- GLfloat v1, GLfloat v2, GLint vstride, GLint vorder,
- const GLvoid *points, GLenum type )
-{
- GET_CURRENT_CONTEXT(ctx);
- GLint k;
- GLfloat *pnts;
- struct gl_2d_map *map = NULL;
-
- ASSERT_OUTSIDE_BEGIN_END(ctx);
- ASSERT(type == GL_FLOAT || type == GL_DOUBLE);
-
- if (u1==u2) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(u1,u2)" );
- return;
- }
-
- if (v1==v2) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(v1,v2)" );
- return;
- }
-
- if (uorder<1 || uorder>MAX_EVAL_ORDER) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(uorder)" );
- return;
- }
-
- if (vorder<1 || vorder>MAX_EVAL_ORDER) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(vorder)" );
- return;
- }
-
- k = _mesa_evaluator_components( target );
- if (k==0) {
- _mesa_error( ctx, GL_INVALID_ENUM, "glMap2(target)" );
- }
-
- if (ustride < k) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(ustride)" );
- return;
- }
- if (vstride < k) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(vstride)" );
- return;
- }
-
- if (ctx->Texture.CurrentUnit != 0) {
- /* See OpenGL 1.2.1 spec, section F.2.13 */
- _mesa_error( ctx, GL_INVALID_OPERATION, "glMap2(ACTIVE_TEXTURE != 0)" );
- return;
- }
-
- map = get_2d_map(ctx, target);
- if (!map) {
- _mesa_error( ctx, GL_INVALID_ENUM, "glMap2(target)" );
- return;
- }
-
- /* make copy of the control points */
- if (type == GL_FLOAT)
- pnts = _mesa_copy_map_points2f(target, ustride, uorder,
- vstride, vorder, (GLfloat*) points);
- else
- pnts = _mesa_copy_map_points2d(target, ustride, uorder,
- vstride, vorder, (GLdouble*) points);
-
-
- FLUSH_VERTICES(ctx, _NEW_EVAL);
- map->Uorder = uorder;
- map->u1 = u1;
- map->u2 = u2;
- map->du = 1.0F / (u2 - u1);
- map->Vorder = vorder;
- map->v1 = v1;
- map->v2 = v2;
- map->dv = 1.0F / (v2 - v1);
- if (map->Points)
- FREE( map->Points );
- map->Points = pnts;
-}
-
-
-static void GLAPIENTRY
-_mesa_Map2f( GLenum target,
- GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
- GLfloat v1, GLfloat v2, GLint vstride, GLint vorder,
- const GLfloat *points)
-{
- map2(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder,
- points, GL_FLOAT);
-}
-
-
-static void GLAPIENTRY
-_mesa_Map2d( GLenum target,
- GLdouble u1, GLdouble u2, GLint ustride, GLint uorder,
- GLdouble v1, GLdouble v2, GLint vstride, GLint vorder,
- const GLdouble *points )
-{
- map2(target, (GLfloat) u1, (GLfloat) u2, ustride, uorder,
- (GLfloat) v1, (GLfloat) v2, vstride, vorder, points, GL_DOUBLE);
-}
-
-
-
-static void GLAPIENTRY
-_mesa_GetMapdv( GLenum target, GLenum query, GLdouble *v )
-{
- GET_CURRENT_CONTEXT(ctx);
- struct gl_1d_map *map1d;
- struct gl_2d_map *map2d;
- GLint i, n;
- GLfloat *data;
- GLuint comps;
-
- ASSERT_OUTSIDE_BEGIN_END(ctx);
-
- comps = _mesa_evaluator_components(target);
- if (!comps) {
- _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapdv(target)" );
- return;
- }
-
- map1d = get_1d_map(ctx, target);
- map2d = get_2d_map(ctx, target);
- ASSERT(map1d || map2d);
-
- switch (query) {
- case GL_COEFF:
- if (map1d) {
- data = map1d->Points;
- n = map1d->Order * comps;
- }
- else {
- data = map2d->Points;
- n = map2d->Uorder * map2d->Vorder * comps;
- }
- if (data) {
- for (i=0;i<n;i++) {
- v[i] = data[i];
- }
- }
- break;
- case GL_ORDER:
- if (map1d) {
- v[0] = (GLdouble) map1d->Order;
- }
- else {
- v[0] = (GLdouble) map2d->Uorder;
- v[1] = (GLdouble) map2d->Vorder;
- }
- break;
- case GL_DOMAIN:
- if (map1d) {
- v[0] = (GLdouble) map1d->u1;
- v[1] = (GLdouble) map1d->u2;
- }
- else {
- v[0] = (GLdouble) map2d->u1;
- v[1] = (GLdouble) map2d->u2;
- v[2] = (GLdouble) map2d->v1;
- v[3] = (GLdouble) map2d->v2;
- }
- break;
- default:
- _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapdv(query)" );
- }
-}
-
-
-static void GLAPIENTRY
-_mesa_GetMapfv( GLenum target, GLenum query, GLfloat *v )
-{
- GET_CURRENT_CONTEXT(ctx);
- struct gl_1d_map *map1d;
- struct gl_2d_map *map2d;
- GLint i, n;
- GLfloat *data;
- GLuint comps;
-
- ASSERT_OUTSIDE_BEGIN_END(ctx);
-
- comps = _mesa_evaluator_components(target);
- if (!comps) {
- _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapfv(target)" );
- return;
- }
-
- map1d = get_1d_map(ctx, target);
- map2d = get_2d_map(ctx, target);
- ASSERT(map1d || map2d);
-
- switch (query) {
- case GL_COEFF:
- if (map1d) {
- data = map1d->Points;
- n = map1d->Order * comps;
- }
- else {
- data = map2d->Points;
- n = map2d->Uorder * map2d->Vorder * comps;
- }
- if (data) {
- for (i=0;i<n;i++) {
- v[i] = data[i];
- }
- }
- break;
- case GL_ORDER:
- if (map1d) {
- v[0] = (GLfloat) map1d->Order;
- }
- else {
- v[0] = (GLfloat) map2d->Uorder;
- v[1] = (GLfloat) map2d->Vorder;
- }
- break;
- case GL_DOMAIN:
- if (map1d) {
- v[0] = map1d->u1;
- v[1] = map1d->u2;
- }
- else {
- v[0] = map2d->u1;
- v[1] = map2d->u2;
- v[2] = map2d->v1;
- v[3] = map2d->v2;
- }
- break;
- default:
- _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapfv(query)" );
- }
-}
-
-
-static void GLAPIENTRY
-_mesa_GetMapiv( GLenum target, GLenum query, GLint *v )
-{
- GET_CURRENT_CONTEXT(ctx);
- struct gl_1d_map *map1d;
- struct gl_2d_map *map2d;
- GLuint i, n;
- GLfloat *data;
- GLuint comps;
-
- ASSERT_OUTSIDE_BEGIN_END(ctx);
-
- comps = _mesa_evaluator_components(target);
- if (!comps) {
- _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapiv(target)" );
- return;
- }
-
- map1d = get_1d_map(ctx, target);
- map2d = get_2d_map(ctx, target);
- ASSERT(map1d || map2d);
-
- switch (query) {
- case GL_COEFF:
- if (map1d) {
- data = map1d->Points;
- n = map1d->Order * comps;
- }
- else {
- data = map2d->Points;
- n = map2d->Uorder * map2d->Vorder * comps;
- }
- if (data) {
- for (i=0;i<n;i++) {
- v[i] = IROUND(data[i]);
- }
- }
- break;
- case GL_ORDER:
- if (map1d) {
- v[0] = map1d->Order;
- }
- else {
- v[0] = map2d->Uorder;
- v[1] = map2d->Vorder;
- }
- break;
- case GL_DOMAIN:
- if (map1d) {
- v[0] = IROUND(map1d->u1);
- v[1] = IROUND(map1d->u2);
- }
- else {
- v[0] = IROUND(map2d->u1);
- v[1] = IROUND(map2d->u2);
- v[2] = IROUND(map2d->v1);
- v[3] = IROUND(map2d->v2);
- }
- break;
- default:
- _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapiv(query)" );
- }
-}
-
-
-
-static void GLAPIENTRY
-_mesa_MapGrid1f( GLint un, GLfloat u1, GLfloat u2 )
-{
- GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END(ctx);
-
- if (un<1) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMapGrid1f" );
- return;
- }
- FLUSH_VERTICES(ctx, _NEW_EVAL);
- ctx->Eval.MapGrid1un = un;
- ctx->Eval.MapGrid1u1 = u1;
- ctx->Eval.MapGrid1u2 = u2;
- ctx->Eval.MapGrid1du = (u2 - u1) / (GLfloat) un;
-}
-
-
-static void GLAPIENTRY
-_mesa_MapGrid1d( GLint un, GLdouble u1, GLdouble u2 )
-{
- _mesa_MapGrid1f( un, (GLfloat) u1, (GLfloat) u2 );
-}
-
-
-static void GLAPIENTRY
-_mesa_MapGrid2f( GLint un, GLfloat u1, GLfloat u2,
- GLint vn, GLfloat v1, GLfloat v2 )
-{
- GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END(ctx);
-
- if (un<1) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMapGrid2f(un)" );
- return;
- }
- if (vn<1) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glMapGrid2f(vn)" );
- return;
- }
-
- FLUSH_VERTICES(ctx, _NEW_EVAL);
- ctx->Eval.MapGrid2un = un;
- ctx->Eval.MapGrid2u1 = u1;
- ctx->Eval.MapGrid2u2 = u2;
- ctx->Eval.MapGrid2du = (u2 - u1) / (GLfloat) un;
- ctx->Eval.MapGrid2vn = vn;
- ctx->Eval.MapGrid2v1 = v1;
- ctx->Eval.MapGrid2v2 = v2;
- ctx->Eval.MapGrid2dv = (v2 - v1) / (GLfloat) vn;
-}
-
-
-static void GLAPIENTRY
-_mesa_MapGrid2d( GLint un, GLdouble u1, GLdouble u2,
- GLint vn, GLdouble v1, GLdouble v2 )
-{
- _mesa_MapGrid2f( un, (GLfloat) u1, (GLfloat) u2,
- vn, (GLfloat) v1, (GLfloat) v2 );
-}
-
-
-void
-_mesa_install_eval_vtxfmt(struct _glapi_table *disp,
- const GLvertexformat *vfmt)
-{
- SET_EvalCoord1f(disp, vfmt->EvalCoord1f);
- SET_EvalCoord1fv(disp, vfmt->EvalCoord1fv);
- SET_EvalCoord2f(disp, vfmt->EvalCoord2f);
- SET_EvalCoord2fv(disp, vfmt->EvalCoord2fv);
- SET_EvalPoint1(disp, vfmt->EvalPoint1);
- SET_EvalPoint2(disp, vfmt->EvalPoint2);
-
- SET_EvalMesh1(disp, vfmt->EvalMesh1);
- SET_EvalMesh2(disp, vfmt->EvalMesh2);
-}
-
-
-void
-_mesa_init_eval_dispatch(struct _glapi_table *disp)
-{
- SET_GetMapdv(disp, _mesa_GetMapdv);
- SET_GetMapfv(disp, _mesa_GetMapfv);
- SET_GetMapiv(disp, _mesa_GetMapiv);
- SET_Map1d(disp, _mesa_Map1d);
- SET_Map1f(disp, _mesa_Map1f);
- SET_Map2d(disp, _mesa_Map2d);
- SET_Map2f(disp, _mesa_Map2f);
- SET_MapGrid1d(disp, _mesa_MapGrid1d);
- SET_MapGrid1f(disp, _mesa_MapGrid1f);
- SET_MapGrid2d(disp, _mesa_MapGrid2d);
- SET_MapGrid2f(disp, _mesa_MapGrid2f);
-}
-
-
-#endif /* FEATURE_evaluators */
-
-
-/**********************************************************************/
-/***** Initialization *****/
-/**********************************************************************/
-
-/**
- * Initialize a 1-D evaluator map.
- */
-static void
-init_1d_map( struct gl_1d_map *map, int n, const float *initial )
-{
- map->Order = 1;
- map->u1 = 0.0;
- map->u2 = 1.0;
- map->Points = (GLfloat *) MALLOC(n * sizeof(GLfloat));
- if (map->Points) {
- GLint i;
- for (i=0;i<n;i++)
- map->Points[i] = initial[i];
- }
-}
-
-
-/**
- * Initialize a 2-D evaluator map
- */
-static void
-init_2d_map( struct gl_2d_map *map, int n, const float *initial )
-{
- map->Uorder = 1;
- map->Vorder = 1;
- map->u1 = 0.0;
- map->u2 = 1.0;
- map->v1 = 0.0;
- map->v2 = 1.0;
- map->Points = (GLfloat *) MALLOC(n * sizeof(GLfloat));
- if (map->Points) {
- GLint i;
- for (i=0;i<n;i++)
- map->Points[i] = initial[i];
- }
-}
-
-
-void _mesa_init_eval( struct gl_context *ctx )
-{
- int i;
-
- /* Evaluators group */
- ctx->Eval.Map1Color4 = GL_FALSE;
- ctx->Eval.Map1Index = GL_FALSE;
- ctx->Eval.Map1Normal = GL_FALSE;
- ctx->Eval.Map1TextureCoord1 = GL_FALSE;
- ctx->Eval.Map1TextureCoord2 = GL_FALSE;
- ctx->Eval.Map1TextureCoord3 = GL_FALSE;
- ctx->Eval.Map1TextureCoord4 = GL_FALSE;
- ctx->Eval.Map1Vertex3 = GL_FALSE;
- ctx->Eval.Map1Vertex4 = GL_FALSE;
- memset(ctx->Eval.Map1Attrib, 0, sizeof(ctx->Eval.Map1Attrib));
- ctx->Eval.Map2Color4 = GL_FALSE;
- ctx->Eval.Map2Index = GL_FALSE;
- ctx->Eval.Map2Normal = GL_FALSE;
- ctx->Eval.Map2TextureCoord1 = GL_FALSE;
- ctx->Eval.Map2TextureCoord2 = GL_FALSE;
- ctx->Eval.Map2TextureCoord3 = GL_FALSE;
- ctx->Eval.Map2TextureCoord4 = GL_FALSE;
- ctx->Eval.Map2Vertex3 = GL_FALSE;
- ctx->Eval.Map2Vertex4 = GL_FALSE;
- memset(ctx->Eval.Map2Attrib, 0, sizeof(ctx->Eval.Map2Attrib));
- ctx->Eval.AutoNormal = GL_FALSE;
- ctx->Eval.MapGrid1un = 1;
- ctx->Eval.MapGrid1u1 = 0.0;
- ctx->Eval.MapGrid1u2 = 1.0;
- ctx->Eval.MapGrid2un = 1;
- ctx->Eval.MapGrid2vn = 1;
- ctx->Eval.MapGrid2u1 = 0.0;
- ctx->Eval.MapGrid2u2 = 1.0;
- ctx->Eval.MapGrid2v1 = 0.0;
- ctx->Eval.MapGrid2v2 = 1.0;
-
- /* Evaluator data */
- {
- static GLfloat vertex[4] = { 0.0, 0.0, 0.0, 1.0 };
- static GLfloat normal[3] = { 0.0, 0.0, 1.0 };
- static GLfloat index[1] = { 1.0 };
- static GLfloat color[4] = { 1.0, 1.0, 1.0, 1.0 };
- static GLfloat texcoord[4] = { 0.0, 0.0, 0.0, 1.0 };
- static GLfloat attrib[4] = { 0.0, 0.0, 0.0, 1.0 };
-
- init_1d_map( &ctx->EvalMap.Map1Vertex3, 3, vertex );
- init_1d_map( &ctx->EvalMap.Map1Vertex4, 4, vertex );
- init_1d_map( &ctx->EvalMap.Map1Index, 1, index );
- init_1d_map( &ctx->EvalMap.Map1Color4, 4, color );
- init_1d_map( &ctx->EvalMap.Map1Normal, 3, normal );
- init_1d_map( &ctx->EvalMap.Map1Texture1, 1, texcoord );
- init_1d_map( &ctx->EvalMap.Map1Texture2, 2, texcoord );
- init_1d_map( &ctx->EvalMap.Map1Texture3, 3, texcoord );
- init_1d_map( &ctx->EvalMap.Map1Texture4, 4, texcoord );
- for (i = 0; i < 16; i++)
- init_1d_map( ctx->EvalMap.Map1Attrib + i, 4, attrib );
-
- init_2d_map( &ctx->EvalMap.Map2Vertex3, 3, vertex );
- init_2d_map( &ctx->EvalMap.Map2Vertex4, 4, vertex );
- init_2d_map( &ctx->EvalMap.Map2Index, 1, index );
- init_2d_map( &ctx->EvalMap.Map2Color4, 4, color );
- init_2d_map( &ctx->EvalMap.Map2Normal, 3, normal );
- init_2d_map( &ctx->EvalMap.Map2Texture1, 1, texcoord );
- init_2d_map( &ctx->EvalMap.Map2Texture2, 2, texcoord );
- init_2d_map( &ctx->EvalMap.Map2Texture3, 3, texcoord );
- init_2d_map( &ctx->EvalMap.Map2Texture4, 4, texcoord );
- for (i = 0; i < 16; i++)
- init_2d_map( ctx->EvalMap.Map2Attrib + i, 4, attrib );
- }
-}
-
-
-void _mesa_free_eval_data( struct gl_context *ctx )
-{
- int i;
-
- /* Free evaluator data */
- if (ctx->EvalMap.Map1Vertex3.Points)
- FREE( ctx->EvalMap.Map1Vertex3.Points );
- if (ctx->EvalMap.Map1Vertex4.Points)
- FREE( ctx->EvalMap.Map1Vertex4.Points );
- if (ctx->EvalMap.Map1Index.Points)
- FREE( ctx->EvalMap.Map1Index.Points );
- if (ctx->EvalMap.Map1Color4.Points)
- FREE( ctx->EvalMap.Map1Color4.Points );
- if (ctx->EvalMap.Map1Normal.Points)
- FREE( ctx->EvalMap.Map1Normal.Points );
- if (ctx->EvalMap.Map1Texture1.Points)
- FREE( ctx->EvalMap.Map1Texture1.Points );
- if (ctx->EvalMap.Map1Texture2.Points)
- FREE( ctx->EvalMap.Map1Texture2.Points );
- if (ctx->EvalMap.Map1Texture3.Points)
- FREE( ctx->EvalMap.Map1Texture3.Points );
- if (ctx->EvalMap.Map1Texture4.Points)
- FREE( ctx->EvalMap.Map1Texture4.Points );
- for (i = 0; i < 16; i++)
- FREE((ctx->EvalMap.Map1Attrib[i].Points));
-
- if (ctx->EvalMap.Map2Vertex3.Points)
- FREE( ctx->EvalMap.Map2Vertex3.Points );
- if (ctx->EvalMap.Map2Vertex4.Points)
- FREE( ctx->EvalMap.Map2Vertex4.Points );
- if (ctx->EvalMap.Map2Index.Points)
- FREE( ctx->EvalMap.Map2Index.Points );
- if (ctx->EvalMap.Map2Color4.Points)
- FREE( ctx->EvalMap.Map2Color4.Points );
- if (ctx->EvalMap.Map2Normal.Points)
- FREE( ctx->EvalMap.Map2Normal.Points );
- if (ctx->EvalMap.Map2Texture1.Points)
- FREE( ctx->EvalMap.Map2Texture1.Points );
- if (ctx->EvalMap.Map2Texture2.Points)
- FREE( ctx->EvalMap.Map2Texture2.Points );
- if (ctx->EvalMap.Map2Texture3.Points)
- FREE( ctx->EvalMap.Map2Texture3.Points );
- if (ctx->EvalMap.Map2Texture4.Points)
- FREE( ctx->EvalMap.Map2Texture4.Points );
- for (i = 0; i < 16; i++)
- FREE((ctx->EvalMap.Map2Attrib[i].Points));
-}
+ +/* + * Mesa 3-D graphics library + * Version: 5.1 + * + * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/* + * eval.c was written by + * Bernd Barsuhn (bdbarsuh@cip.informatik.uni-erlangen.de) and + * Volker Weiss (vrweiss@cip.informatik.uni-erlangen.de). + * + * My original implementation of evaluators was simplistic and didn't + * compute surface normal vectors properly. Bernd and Volker applied + * used more sophisticated methods to get better results. + * + * Thanks guys! + */ + + +#include "glheader.h" +#include "imports.h" +#include "colormac.h" +#include "context.h" +#include "eval.h" +#include "macros.h" +#include "mfeatures.h" +#include "mtypes.h" +#include "main/dispatch.h" + + +#if FEATURE_evaluators + + +/* + * Return the number of components per control point for any type of + * evaluator. Return 0 if bad target. + * See table 5.1 in the OpenGL 1.2 spec. + */ +GLuint _mesa_evaluator_components( GLenum target ) +{ + switch (target) { + case GL_MAP1_VERTEX_3: return 3; + case GL_MAP1_VERTEX_4: return 4; + case GL_MAP1_INDEX: return 1; + case GL_MAP1_COLOR_4: return 4; + case GL_MAP1_NORMAL: return 3; + case GL_MAP1_TEXTURE_COORD_1: return 1; + case GL_MAP1_TEXTURE_COORD_2: return 2; + case GL_MAP1_TEXTURE_COORD_3: return 3; + case GL_MAP1_TEXTURE_COORD_4: return 4; + case GL_MAP2_VERTEX_3: return 3; + case GL_MAP2_VERTEX_4: return 4; + case GL_MAP2_INDEX: return 1; + case GL_MAP2_COLOR_4: return 4; + case GL_MAP2_NORMAL: return 3; + case GL_MAP2_TEXTURE_COORD_1: return 1; + case GL_MAP2_TEXTURE_COORD_2: return 2; + case GL_MAP2_TEXTURE_COORD_3: return 3; + case GL_MAP2_TEXTURE_COORD_4: return 4; + default: break; + } + + /* XXX need to check for the vertex program extension + if (!ctx->Extensions.NV_vertex_program) + return 0; + */ + + if (target >= GL_MAP1_VERTEX_ATTRIB0_4_NV && + target <= GL_MAP1_VERTEX_ATTRIB15_4_NV) + return 4; + + if (target >= GL_MAP2_VERTEX_ATTRIB0_4_NV && + target <= GL_MAP2_VERTEX_ATTRIB15_4_NV) + return 4; + + return 0; +} + + +/* + * Return pointer to the gl_1d_map struct for the named target. + */ +static struct gl_1d_map * +get_1d_map( struct gl_context *ctx, GLenum target ) +{ + switch (target) { + case GL_MAP1_VERTEX_3: + return &ctx->EvalMap.Map1Vertex3; + case GL_MAP1_VERTEX_4: + return &ctx->EvalMap.Map1Vertex4; + case GL_MAP1_INDEX: + return &ctx->EvalMap.Map1Index; + case GL_MAP1_COLOR_4: + return &ctx->EvalMap.Map1Color4; + case GL_MAP1_NORMAL: + return &ctx->EvalMap.Map1Normal; + case GL_MAP1_TEXTURE_COORD_1: + return &ctx->EvalMap.Map1Texture1; + case GL_MAP1_TEXTURE_COORD_2: + return &ctx->EvalMap.Map1Texture2; + case GL_MAP1_TEXTURE_COORD_3: + return &ctx->EvalMap.Map1Texture3; + case GL_MAP1_TEXTURE_COORD_4: + return &ctx->EvalMap.Map1Texture4; + case GL_MAP1_VERTEX_ATTRIB0_4_NV: + case GL_MAP1_VERTEX_ATTRIB1_4_NV: + case GL_MAP1_VERTEX_ATTRIB2_4_NV: + case GL_MAP1_VERTEX_ATTRIB3_4_NV: + case GL_MAP1_VERTEX_ATTRIB4_4_NV: + case GL_MAP1_VERTEX_ATTRIB5_4_NV: + case GL_MAP1_VERTEX_ATTRIB6_4_NV: + case GL_MAP1_VERTEX_ATTRIB7_4_NV: + case GL_MAP1_VERTEX_ATTRIB8_4_NV: + case GL_MAP1_VERTEX_ATTRIB9_4_NV: + case GL_MAP1_VERTEX_ATTRIB10_4_NV: + case GL_MAP1_VERTEX_ATTRIB11_4_NV: + case GL_MAP1_VERTEX_ATTRIB12_4_NV: + case GL_MAP1_VERTEX_ATTRIB13_4_NV: + case GL_MAP1_VERTEX_ATTRIB14_4_NV: + case GL_MAP1_VERTEX_ATTRIB15_4_NV: + if (!ctx->Extensions.NV_vertex_program) + return NULL; + return &ctx->EvalMap.Map1Attrib[target - GL_MAP1_VERTEX_ATTRIB0_4_NV]; + default: + return NULL; + } +} + + +/* + * Return pointer to the gl_2d_map struct for the named target. + */ +static struct gl_2d_map * +get_2d_map( struct gl_context *ctx, GLenum target ) +{ + switch (target) { + case GL_MAP2_VERTEX_3: + return &ctx->EvalMap.Map2Vertex3; + case GL_MAP2_VERTEX_4: + return &ctx->EvalMap.Map2Vertex4; + case GL_MAP2_INDEX: + return &ctx->EvalMap.Map2Index; + case GL_MAP2_COLOR_4: + return &ctx->EvalMap.Map2Color4; + case GL_MAP2_NORMAL: + return &ctx->EvalMap.Map2Normal; + case GL_MAP2_TEXTURE_COORD_1: + return &ctx->EvalMap.Map2Texture1; + case GL_MAP2_TEXTURE_COORD_2: + return &ctx->EvalMap.Map2Texture2; + case GL_MAP2_TEXTURE_COORD_3: + return &ctx->EvalMap.Map2Texture3; + case GL_MAP2_TEXTURE_COORD_4: + return &ctx->EvalMap.Map2Texture4; + case GL_MAP2_VERTEX_ATTRIB0_4_NV: + case GL_MAP2_VERTEX_ATTRIB1_4_NV: + case GL_MAP2_VERTEX_ATTRIB2_4_NV: + case GL_MAP2_VERTEX_ATTRIB3_4_NV: + case GL_MAP2_VERTEX_ATTRIB4_4_NV: + case GL_MAP2_VERTEX_ATTRIB5_4_NV: + case GL_MAP2_VERTEX_ATTRIB6_4_NV: + case GL_MAP2_VERTEX_ATTRIB7_4_NV: + case GL_MAP2_VERTEX_ATTRIB8_4_NV: + case GL_MAP2_VERTEX_ATTRIB9_4_NV: + case GL_MAP2_VERTEX_ATTRIB10_4_NV: + case GL_MAP2_VERTEX_ATTRIB11_4_NV: + case GL_MAP2_VERTEX_ATTRIB12_4_NV: + case GL_MAP2_VERTEX_ATTRIB13_4_NV: + case GL_MAP2_VERTEX_ATTRIB14_4_NV: + case GL_MAP2_VERTEX_ATTRIB15_4_NV: + if (!ctx->Extensions.NV_vertex_program) + return NULL; + return &ctx->EvalMap.Map2Attrib[target - GL_MAP2_VERTEX_ATTRIB0_4_NV]; + default: + return NULL; + } +} + + +/**********************************************************************/ +/*** Copy and deallocate control points ***/ +/**********************************************************************/ + + +/* + * Copy 1-parametric evaluator control points from user-specified + * memory space to a buffer of contiguous control points. + * \param see glMap1f for details + * \return pointer to buffer of contiguous control points or NULL if out + * of memory. + */ +GLfloat *_mesa_copy_map_points1f( GLenum target, GLint ustride, GLint uorder, + const GLfloat *points ) +{ + GLfloat *buffer, *p; + GLint i, k, size = _mesa_evaluator_components(target); + + if (!points || !size) + return NULL; + + buffer = (GLfloat *) MALLOC(uorder * size * sizeof(GLfloat)); + + if (buffer) + for (i = 0, p = buffer; i < uorder; i++, points += ustride) + for (k = 0; k < size; k++) + *p++ = points[k]; + + return buffer; +} + + + +/* + * Same as above but convert doubles to floats. + */ +GLfloat *_mesa_copy_map_points1d( GLenum target, GLint ustride, GLint uorder, + const GLdouble *points ) +{ + GLfloat *buffer, *p; + GLint i, k, size = _mesa_evaluator_components(target); + + if (!points || !size) + return NULL; + + buffer = (GLfloat *) MALLOC(uorder * size * sizeof(GLfloat)); + + if (buffer) + for (i = 0, p = buffer; i < uorder; i++, points += ustride) + for (k = 0; k < size; k++) + *p++ = (GLfloat) points[k]; + + return buffer; +} + + + +/* + * Copy 2-parametric evaluator control points from user-specified + * memory space to a buffer of contiguous control points. + * Additional memory is allocated to be used by the horner and + * de Casteljau evaluation schemes. + * + * \param see glMap2f for details + * \return pointer to buffer of contiguous control points or NULL if out + * of memory. + */ +GLfloat *_mesa_copy_map_points2f( GLenum target, + GLint ustride, GLint uorder, + GLint vstride, GLint vorder, + const GLfloat *points ) +{ + GLfloat *buffer, *p; + GLint i, j, k, size, dsize, hsize; + GLint uinc; + + size = _mesa_evaluator_components(target); + + if (!points || size==0) { + return NULL; + } + + /* max(uorder, vorder) additional points are used in */ + /* horner evaluation and uorder*vorder additional */ + /* values are needed for de Casteljau */ + dsize = (uorder == 2 && vorder == 2)? 0 : uorder*vorder; + hsize = (uorder > vorder ? uorder : vorder)*size; + + if(hsize>dsize) + buffer = (GLfloat *) MALLOC((uorder*vorder*size+hsize)*sizeof(GLfloat)); + else + buffer = (GLfloat *) MALLOC((uorder*vorder*size+dsize)*sizeof(GLfloat)); + + /* compute the increment value for the u-loop */ + uinc = ustride - vorder*vstride; + + if (buffer) + for (i=0, p=buffer; i<uorder; i++, points += uinc) + for (j=0; j<vorder; j++, points += vstride) + for (k=0; k<size; k++) + *p++ = points[k]; + + return buffer; +} + + + +/* + * Same as above but convert doubles to floats. + */ +GLfloat *_mesa_copy_map_points2d(GLenum target, + GLint ustride, GLint uorder, + GLint vstride, GLint vorder, + const GLdouble *points ) +{ + GLfloat *buffer, *p; + GLint i, j, k, size, hsize, dsize; + GLint uinc; + + size = _mesa_evaluator_components(target); + + if (!points || size==0) { + return NULL; + } + + /* max(uorder, vorder) additional points are used in */ + /* horner evaluation and uorder*vorder additional */ + /* values are needed for de Casteljau */ + dsize = (uorder == 2 && vorder == 2)? 0 : uorder*vorder; + hsize = (uorder > vorder ? uorder : vorder)*size; + + if(hsize>dsize) + buffer = (GLfloat *) MALLOC((uorder*vorder*size+hsize)*sizeof(GLfloat)); + else + buffer = (GLfloat *) MALLOC((uorder*vorder*size+dsize)*sizeof(GLfloat)); + + /* compute the increment value for the u-loop */ + uinc = ustride - vorder*vstride; + + if (buffer) + for (i=0, p=buffer; i<uorder; i++, points += uinc) + for (j=0; j<vorder; j++, points += vstride) + for (k=0; k<size; k++) + *p++ = (GLfloat) points[k]; + + return buffer; +} + + + + +/**********************************************************************/ +/*** API entry points ***/ +/**********************************************************************/ + + +/* + * This does the work of glMap1[fd]. + */ +static void +map1(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, + GLint uorder, const GLvoid *points, GLenum type ) +{ + GET_CURRENT_CONTEXT(ctx); + GLint k; + GLfloat *pnts; + struct gl_1d_map *map = NULL; + + ASSERT_OUTSIDE_BEGIN_END(ctx); + ASSERT(type == GL_FLOAT || type == GL_DOUBLE); + + if (u1 == u2) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMap1(u1,u2)" ); + return; + } + if (uorder < 1 || uorder > MAX_EVAL_ORDER) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMap1(order)" ); + return; + } + if (!points) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMap1(points)" ); + return; + } + + k = _mesa_evaluator_components( target ); + if (k == 0) { + _mesa_error( ctx, GL_INVALID_ENUM, "glMap1(target)" ); + } + + if (ustride < k) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMap1(stride)" ); + return; + } + + if (ctx->Texture.CurrentUnit != 0) { + /* See OpenGL 1.2.1 spec, section F.2.13 */ + _mesa_error( ctx, GL_INVALID_OPERATION, "glMap2(ACTIVE_TEXTURE != 0)" ); + return; + } + + map = get_1d_map(ctx, target); + if (!map) { + _mesa_error( ctx, GL_INVALID_ENUM, "glMap1(target)" ); + return; + } + + /* make copy of the control points */ + if (type == GL_FLOAT) + pnts = _mesa_copy_map_points1f(target, ustride, uorder, (GLfloat*) points); + else + pnts = _mesa_copy_map_points1d(target, ustride, uorder, (GLdouble*) points); + + + FLUSH_VERTICES(ctx, _NEW_EVAL); + map->Order = uorder; + map->u1 = u1; + map->u2 = u2; + map->du = 1.0F / (u2 - u1); + if (map->Points) + FREE( map->Points ); + map->Points = pnts; +} + + + +static void GLAPIENTRY +_mesa_Map1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride, + GLint order, const GLfloat *points ) +{ + map1(target, u1, u2, stride, order, points, GL_FLOAT); +} + + +static void GLAPIENTRY +_mesa_Map1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride, + GLint order, const GLdouble *points ) +{ + map1(target, (GLfloat) u1, (GLfloat) u2, stride, order, points, GL_DOUBLE); +} + + +static void +map2( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, + GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, + const GLvoid *points, GLenum type ) +{ + GET_CURRENT_CONTEXT(ctx); + GLint k; + GLfloat *pnts; + struct gl_2d_map *map = NULL; + + ASSERT_OUTSIDE_BEGIN_END(ctx); + ASSERT(type == GL_FLOAT || type == GL_DOUBLE); + + if (u1==u2) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(u1,u2)" ); + return; + } + + if (v1==v2) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(v1,v2)" ); + return; + } + + if (uorder<1 || uorder>MAX_EVAL_ORDER) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(uorder)" ); + return; + } + + if (vorder<1 || vorder>MAX_EVAL_ORDER) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(vorder)" ); + return; + } + + k = _mesa_evaluator_components( target ); + if (k==0) { + _mesa_error( ctx, GL_INVALID_ENUM, "glMap2(target)" ); + } + + if (ustride < k) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(ustride)" ); + return; + } + if (vstride < k) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMap2(vstride)" ); + return; + } + + if (ctx->Texture.CurrentUnit != 0) { + /* See OpenGL 1.2.1 spec, section F.2.13 */ + _mesa_error( ctx, GL_INVALID_OPERATION, "glMap2(ACTIVE_TEXTURE != 0)" ); + return; + } + + map = get_2d_map(ctx, target); + if (!map) { + _mesa_error( ctx, GL_INVALID_ENUM, "glMap2(target)" ); + return; + } + + /* make copy of the control points */ + if (type == GL_FLOAT) + pnts = _mesa_copy_map_points2f(target, ustride, uorder, + vstride, vorder, (GLfloat*) points); + else + pnts = _mesa_copy_map_points2d(target, ustride, uorder, + vstride, vorder, (GLdouble*) points); + + + FLUSH_VERTICES(ctx, _NEW_EVAL); + map->Uorder = uorder; + map->u1 = u1; + map->u2 = u2; + map->du = 1.0F / (u2 - u1); + map->Vorder = vorder; + map->v1 = v1; + map->v2 = v2; + map->dv = 1.0F / (v2 - v1); + if (map->Points) + FREE( map->Points ); + map->Points = pnts; +} + + +static void GLAPIENTRY +_mesa_Map2f( GLenum target, + GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, + GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, + const GLfloat *points) +{ + map2(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, + points, GL_FLOAT); +} + + +static void GLAPIENTRY +_mesa_Map2d( GLenum target, + GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, + GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, + const GLdouble *points ) +{ + map2(target, (GLfloat) u1, (GLfloat) u2, ustride, uorder, + (GLfloat) v1, (GLfloat) v2, vstride, vorder, points, GL_DOUBLE); +} + + + +static void GLAPIENTRY +_mesa_GetnMapdvARB( GLenum target, GLenum query, GLsizei bufSize, GLdouble *v ) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_1d_map *map1d; + struct gl_2d_map *map2d; + GLint i, n; + GLfloat *data; + GLuint comps; + GLsizei numBytes; + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + comps = _mesa_evaluator_components(target); + if (!comps) { + _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapdv(target)" ); + return; + } + + map1d = get_1d_map(ctx, target); + map2d = get_2d_map(ctx, target); + ASSERT(map1d || map2d); + + switch (query) { + case GL_COEFF: + if (map1d) { + data = map1d->Points; + n = map1d->Order * comps; + } + else { + data = map2d->Points; + n = map2d->Uorder * map2d->Vorder * comps; + } + if (data) { + numBytes = n * sizeof *v; + if (bufSize < numBytes) + goto overflow; + for (i=0;i<n;i++) { + v[i] = data[i]; + } + } + break; + case GL_ORDER: + if (map1d) { + numBytes = 1 * sizeof *v; + if (bufSize < numBytes) + goto overflow; + v[0] = (GLdouble) map1d->Order; + } + else { + numBytes = 2 * sizeof *v; + if (bufSize < numBytes) + goto overflow; + v[0] = (GLdouble) map2d->Uorder; + v[1] = (GLdouble) map2d->Vorder; + } + break; + case GL_DOMAIN: + if (map1d) { + numBytes = 2 * sizeof *v; + if (bufSize < numBytes) + goto overflow; + v[0] = (GLdouble) map1d->u1; + v[1] = (GLdouble) map1d->u2; + } + else { + numBytes = 4 * sizeof *v; + if (bufSize < numBytes) + goto overflow; + v[0] = (GLdouble) map2d->u1; + v[1] = (GLdouble) map2d->u2; + v[2] = (GLdouble) map2d->v1; + v[3] = (GLdouble) map2d->v2; + } + break; + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapdv(query)" ); + } + return; + +overflow: + _mesa_error( ctx, GL_INVALID_OPERATION, + "glGetnMapdvARB(out of bounds: bufSize is %d," + " but %d bytes are required)", bufSize, numBytes ); +} + +static void GLAPIENTRY +_mesa_GetMapdv( GLenum target, GLenum query, GLdouble *v ) +{ + _mesa_GetnMapdvARB(target, query, INT_MAX, v); +} + +static void GLAPIENTRY +_mesa_GetnMapfvARB( GLenum target, GLenum query, GLsizei bufSize, GLfloat *v ) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_1d_map *map1d; + struct gl_2d_map *map2d; + GLint i, n; + GLfloat *data; + GLuint comps; + GLsizei numBytes; + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + comps = _mesa_evaluator_components(target); + if (!comps) { + _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapfv(target)" ); + return; + } + + map1d = get_1d_map(ctx, target); + map2d = get_2d_map(ctx, target); + ASSERT(map1d || map2d); + + switch (query) { + case GL_COEFF: + if (map1d) { + data = map1d->Points; + n = map1d->Order * comps; + } + else { + data = map2d->Points; + n = map2d->Uorder * map2d->Vorder * comps; + } + if (data) { + numBytes = n * sizeof *v; + if (bufSize < numBytes) + goto overflow; + for (i=0;i<n;i++) { + v[i] = data[i]; + } + } + break; + case GL_ORDER: + if (map1d) { + numBytes = 1 * sizeof *v; + if (bufSize < numBytes) + goto overflow; + v[0] = (GLfloat) map1d->Order; + } + else { + numBytes = 2 * sizeof *v; + if (bufSize < numBytes) + goto overflow; + v[0] = (GLfloat) map2d->Uorder; + v[1] = (GLfloat) map2d->Vorder; + } + break; + case GL_DOMAIN: + if (map1d) { + numBytes = 2 * sizeof *v; + if (bufSize < numBytes) + goto overflow; + v[0] = map1d->u1; + v[1] = map1d->u2; + } + else { + numBytes = 4 * sizeof *v; + if (bufSize < numBytes) + goto overflow; + v[0] = map2d->u1; + v[1] = map2d->u2; + v[2] = map2d->v1; + v[3] = map2d->v2; + } + break; + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapfv(query)" ); + } + return; + +overflow: + _mesa_error( ctx, GL_INVALID_OPERATION, + "glGetnMapfvARB(out of bounds: bufSize is %d," + " but %d bytes are required)", bufSize, numBytes ); +} + + +static void GLAPIENTRY +_mesa_GetMapfv( GLenum target, GLenum query, GLfloat *v ) +{ + _mesa_GetnMapfvARB(target, query, INT_MAX, v); +} + + +static void GLAPIENTRY +_mesa_GetnMapivARB( GLenum target, GLenum query, GLsizei bufSize, GLint *v ) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_1d_map *map1d; + struct gl_2d_map *map2d; + GLuint i, n; + GLfloat *data; + GLuint comps; + GLsizei numBytes; + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + comps = _mesa_evaluator_components(target); + if (!comps) { + _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapiv(target)" ); + return; + } + + map1d = get_1d_map(ctx, target); + map2d = get_2d_map(ctx, target); + ASSERT(map1d || map2d); + + switch (query) { + case GL_COEFF: + if (map1d) { + data = map1d->Points; + n = map1d->Order * comps; + } + else { + data = map2d->Points; + n = map2d->Uorder * map2d->Vorder * comps; + } + if (data) { + numBytes = n * sizeof *v; + if (bufSize < numBytes) + goto overflow; + for (i=0;i<n;i++) { + v[i] = IROUND(data[i]); + } + } + break; + case GL_ORDER: + if (map1d) { + numBytes = 1 * sizeof *v; + if (bufSize < numBytes) + goto overflow; + v[0] = map1d->Order; + } + else { + numBytes = 2 * sizeof *v; + if (bufSize < numBytes) + goto overflow; + v[0] = map2d->Uorder; + v[1] = map2d->Vorder; + } + break; + case GL_DOMAIN: + if (map1d) { + numBytes = 2 * sizeof *v; + if (bufSize < numBytes) + goto overflow; + v[0] = IROUND(map1d->u1); + v[1] = IROUND(map1d->u2); + } + else { + numBytes = 4 * sizeof *v; + if (bufSize < numBytes) + goto overflow; + v[0] = IROUND(map2d->u1); + v[1] = IROUND(map2d->u2); + v[2] = IROUND(map2d->v1); + v[3] = IROUND(map2d->v2); + } + break; + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glGetMapiv(query)" ); + } + return; + +overflow: + _mesa_error( ctx, GL_INVALID_OPERATION, + "glGetnMapivARB(out of bounds: bufSize is %d," + " but %d bytes are required)", bufSize, numBytes ); +} + + +static void GLAPIENTRY +_mesa_GetMapiv( GLenum target, GLenum query, GLint *v ) +{ + _mesa_GetnMapivARB(target, query, INT_MAX, v); +} + + +static void GLAPIENTRY +_mesa_MapGrid1f( GLint un, GLfloat u1, GLfloat u2 ) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (un<1) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMapGrid1f" ); + return; + } + FLUSH_VERTICES(ctx, _NEW_EVAL); + ctx->Eval.MapGrid1un = un; + ctx->Eval.MapGrid1u1 = u1; + ctx->Eval.MapGrid1u2 = u2; + ctx->Eval.MapGrid1du = (u2 - u1) / (GLfloat) un; +} + + +static void GLAPIENTRY +_mesa_MapGrid1d( GLint un, GLdouble u1, GLdouble u2 ) +{ + _mesa_MapGrid1f( un, (GLfloat) u1, (GLfloat) u2 ); +} + + +static void GLAPIENTRY +_mesa_MapGrid2f( GLint un, GLfloat u1, GLfloat u2, + GLint vn, GLfloat v1, GLfloat v2 ) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (un<1) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMapGrid2f(un)" ); + return; + } + if (vn<1) { + _mesa_error( ctx, GL_INVALID_VALUE, "glMapGrid2f(vn)" ); + return; + } + + FLUSH_VERTICES(ctx, _NEW_EVAL); + ctx->Eval.MapGrid2un = un; + ctx->Eval.MapGrid2u1 = u1; + ctx->Eval.MapGrid2u2 = u2; + ctx->Eval.MapGrid2du = (u2 - u1) / (GLfloat) un; + ctx->Eval.MapGrid2vn = vn; + ctx->Eval.MapGrid2v1 = v1; + ctx->Eval.MapGrid2v2 = v2; + ctx->Eval.MapGrid2dv = (v2 - v1) / (GLfloat) vn; +} + + +static void GLAPIENTRY +_mesa_MapGrid2d( GLint un, GLdouble u1, GLdouble u2, + GLint vn, GLdouble v1, GLdouble v2 ) +{ + _mesa_MapGrid2f( un, (GLfloat) u1, (GLfloat) u2, + vn, (GLfloat) v1, (GLfloat) v2 ); +} + + +void +_mesa_install_eval_vtxfmt(struct _glapi_table *disp, + const GLvertexformat *vfmt) +{ + SET_EvalCoord1f(disp, vfmt->EvalCoord1f); + SET_EvalCoord1fv(disp, vfmt->EvalCoord1fv); + SET_EvalCoord2f(disp, vfmt->EvalCoord2f); + SET_EvalCoord2fv(disp, vfmt->EvalCoord2fv); + SET_EvalPoint1(disp, vfmt->EvalPoint1); + SET_EvalPoint2(disp, vfmt->EvalPoint2); + + SET_EvalMesh1(disp, vfmt->EvalMesh1); + SET_EvalMesh2(disp, vfmt->EvalMesh2); +} + + +void +_mesa_init_eval_dispatch(struct _glapi_table *disp) +{ + SET_GetMapdv(disp, _mesa_GetMapdv); + SET_GetMapfv(disp, _mesa_GetMapfv); + SET_GetMapiv(disp, _mesa_GetMapiv); + SET_Map1d(disp, _mesa_Map1d); + SET_Map1f(disp, _mesa_Map1f); + SET_Map2d(disp, _mesa_Map2d); + SET_Map2f(disp, _mesa_Map2f); + SET_MapGrid1d(disp, _mesa_MapGrid1d); + SET_MapGrid1f(disp, _mesa_MapGrid1f); + SET_MapGrid2d(disp, _mesa_MapGrid2d); + SET_MapGrid2f(disp, _mesa_MapGrid2f); + + /* GL_ARB_robustness */ + SET_GetnMapdvARB(disp, _mesa_GetnMapdvARB); + SET_GetnMapfvARB(disp, _mesa_GetnMapfvARB); + SET_GetnMapivARB(disp, _mesa_GetnMapivARB); +} + + +#endif /* FEATURE_evaluators */ + + +/**********************************************************************/ +/***** Initialization *****/ +/**********************************************************************/ + +/** + * Initialize a 1-D evaluator map. + */ +static void +init_1d_map( struct gl_1d_map *map, int n, const float *initial ) +{ + map->Order = 1; + map->u1 = 0.0; + map->u2 = 1.0; + map->Points = (GLfloat *) MALLOC(n * sizeof(GLfloat)); + if (map->Points) { + GLint i; + for (i=0;i<n;i++) + map->Points[i] = initial[i]; + } +} + + +/** + * Initialize a 2-D evaluator map + */ +static void +init_2d_map( struct gl_2d_map *map, int n, const float *initial ) +{ + map->Uorder = 1; + map->Vorder = 1; + map->u1 = 0.0; + map->u2 = 1.0; + map->v1 = 0.0; + map->v2 = 1.0; + map->Points = (GLfloat *) MALLOC(n * sizeof(GLfloat)); + if (map->Points) { + GLint i; + for (i=0;i<n;i++) + map->Points[i] = initial[i]; + } +} + + +void _mesa_init_eval( struct gl_context *ctx ) +{ + int i; + + /* Evaluators group */ + ctx->Eval.Map1Color4 = GL_FALSE; + ctx->Eval.Map1Index = GL_FALSE; + ctx->Eval.Map1Normal = GL_FALSE; + ctx->Eval.Map1TextureCoord1 = GL_FALSE; + ctx->Eval.Map1TextureCoord2 = GL_FALSE; + ctx->Eval.Map1TextureCoord3 = GL_FALSE; + ctx->Eval.Map1TextureCoord4 = GL_FALSE; + ctx->Eval.Map1Vertex3 = GL_FALSE; + ctx->Eval.Map1Vertex4 = GL_FALSE; + memset(ctx->Eval.Map1Attrib, 0, sizeof(ctx->Eval.Map1Attrib)); + ctx->Eval.Map2Color4 = GL_FALSE; + ctx->Eval.Map2Index = GL_FALSE; + ctx->Eval.Map2Normal = GL_FALSE; + ctx->Eval.Map2TextureCoord1 = GL_FALSE; + ctx->Eval.Map2TextureCoord2 = GL_FALSE; + ctx->Eval.Map2TextureCoord3 = GL_FALSE; + ctx->Eval.Map2TextureCoord4 = GL_FALSE; + ctx->Eval.Map2Vertex3 = GL_FALSE; + ctx->Eval.Map2Vertex4 = GL_FALSE; + memset(ctx->Eval.Map2Attrib, 0, sizeof(ctx->Eval.Map2Attrib)); + ctx->Eval.AutoNormal = GL_FALSE; + ctx->Eval.MapGrid1un = 1; + ctx->Eval.MapGrid1u1 = 0.0; + ctx->Eval.MapGrid1u2 = 1.0; + ctx->Eval.MapGrid2un = 1; + ctx->Eval.MapGrid2vn = 1; + ctx->Eval.MapGrid2u1 = 0.0; + ctx->Eval.MapGrid2u2 = 1.0; + ctx->Eval.MapGrid2v1 = 0.0; + ctx->Eval.MapGrid2v2 = 1.0; + + /* Evaluator data */ + { + static GLfloat vertex[4] = { 0.0, 0.0, 0.0, 1.0 }; + static GLfloat normal[3] = { 0.0, 0.0, 1.0 }; + static GLfloat index[1] = { 1.0 }; + static GLfloat color[4] = { 1.0, 1.0, 1.0, 1.0 }; + static GLfloat texcoord[4] = { 0.0, 0.0, 0.0, 1.0 }; + static GLfloat attrib[4] = { 0.0, 0.0, 0.0, 1.0 }; + + init_1d_map( &ctx->EvalMap.Map1Vertex3, 3, vertex ); + init_1d_map( &ctx->EvalMap.Map1Vertex4, 4, vertex ); + init_1d_map( &ctx->EvalMap.Map1Index, 1, index ); + init_1d_map( &ctx->EvalMap.Map1Color4, 4, color ); + init_1d_map( &ctx->EvalMap.Map1Normal, 3, normal ); + init_1d_map( &ctx->EvalMap.Map1Texture1, 1, texcoord ); + init_1d_map( &ctx->EvalMap.Map1Texture2, 2, texcoord ); + init_1d_map( &ctx->EvalMap.Map1Texture3, 3, texcoord ); + init_1d_map( &ctx->EvalMap.Map1Texture4, 4, texcoord ); + for (i = 0; i < 16; i++) + init_1d_map( ctx->EvalMap.Map1Attrib + i, 4, attrib ); + + init_2d_map( &ctx->EvalMap.Map2Vertex3, 3, vertex ); + init_2d_map( &ctx->EvalMap.Map2Vertex4, 4, vertex ); + init_2d_map( &ctx->EvalMap.Map2Index, 1, index ); + init_2d_map( &ctx->EvalMap.Map2Color4, 4, color ); + init_2d_map( &ctx->EvalMap.Map2Normal, 3, normal ); + init_2d_map( &ctx->EvalMap.Map2Texture1, 1, texcoord ); + init_2d_map( &ctx->EvalMap.Map2Texture2, 2, texcoord ); + init_2d_map( &ctx->EvalMap.Map2Texture3, 3, texcoord ); + init_2d_map( &ctx->EvalMap.Map2Texture4, 4, texcoord ); + for (i = 0; i < 16; i++) + init_2d_map( ctx->EvalMap.Map2Attrib + i, 4, attrib ); + } +} + + +void _mesa_free_eval_data( struct gl_context *ctx ) +{ + int i; + + /* Free evaluator data */ + if (ctx->EvalMap.Map1Vertex3.Points) + FREE( ctx->EvalMap.Map1Vertex3.Points ); + if (ctx->EvalMap.Map1Vertex4.Points) + FREE( ctx->EvalMap.Map1Vertex4.Points ); + if (ctx->EvalMap.Map1Index.Points) + FREE( ctx->EvalMap.Map1Index.Points ); + if (ctx->EvalMap.Map1Color4.Points) + FREE( ctx->EvalMap.Map1Color4.Points ); + if (ctx->EvalMap.Map1Normal.Points) + FREE( ctx->EvalMap.Map1Normal.Points ); + if (ctx->EvalMap.Map1Texture1.Points) + FREE( ctx->EvalMap.Map1Texture1.Points ); + if (ctx->EvalMap.Map1Texture2.Points) + FREE( ctx->EvalMap.Map1Texture2.Points ); + if (ctx->EvalMap.Map1Texture3.Points) + FREE( ctx->EvalMap.Map1Texture3.Points ); + if (ctx->EvalMap.Map1Texture4.Points) + FREE( ctx->EvalMap.Map1Texture4.Points ); + for (i = 0; i < 16; i++) + FREE((ctx->EvalMap.Map1Attrib[i].Points)); + + if (ctx->EvalMap.Map2Vertex3.Points) + FREE( ctx->EvalMap.Map2Vertex3.Points ); + if (ctx->EvalMap.Map2Vertex4.Points) + FREE( ctx->EvalMap.Map2Vertex4.Points ); + if (ctx->EvalMap.Map2Index.Points) + FREE( ctx->EvalMap.Map2Index.Points ); + if (ctx->EvalMap.Map2Color4.Points) + FREE( ctx->EvalMap.Map2Color4.Points ); + if (ctx->EvalMap.Map2Normal.Points) + FREE( ctx->EvalMap.Map2Normal.Points ); + if (ctx->EvalMap.Map2Texture1.Points) + FREE( ctx->EvalMap.Map2Texture1.Points ); + if (ctx->EvalMap.Map2Texture2.Points) + FREE( ctx->EvalMap.Map2Texture2.Points ); + if (ctx->EvalMap.Map2Texture3.Points) + FREE( ctx->EvalMap.Map2Texture3.Points ); + if (ctx->EvalMap.Map2Texture4.Points) + FREE( ctx->EvalMap.Map2Texture4.Points ); + for (i = 0; i < 16; i++) + FREE((ctx->EvalMap.Map2Attrib[i].Points)); +} diff --git a/mesalib/src/mesa/main/extensions.c b/mesalib/src/mesa/main/extensions.c index 8a0ab9615..82474cf41 100644 --- a/mesalib/src/mesa/main/extensions.c +++ b/mesalib/src/mesa/main/extensions.c @@ -107,6 +107,7 @@ static const struct extension extension_table[] = { { "GL_ARB_point_parameters", o(EXT_point_parameters), GL, 1997 }, { "GL_ARB_point_sprite", o(ARB_point_sprite), GL, 2003 }, { "GL_ARB_provoking_vertex", o(EXT_provoking_vertex), GL, 2009 }, + { "GL_ARB_robustness", o(dummy_true), GL, 2010 }, { "GL_ARB_sampler_objects", o(ARB_sampler_objects), GL, 2009 }, { "GL_ARB_seamless_cube_map", o(ARB_seamless_cube_map), GL, 2009 }, { "GL_ARB_shader_objects", o(ARB_shader_objects), GL, 2002 }, diff --git a/mesalib/src/mesa/main/ff_fragment_shader.cpp b/mesalib/src/mesa/main/ff_fragment_shader.cpp index 43930a4b3..0b53c28f7 100644 --- a/mesalib/src/mesa/main/ff_fragment_shader.cpp +++ b/mesalib/src/mesa/main/ff_fragment_shader.cpp @@ -1530,15 +1530,26 @@ create_new_program(struct gl_context *ctx, struct state_key *key, */ emit_arith( &p, OPCODE_END, undef, WRITEMASK_XYZW, 0, undef, undef, undef); - if (key->fog_enabled) { - /* Pull fog mode from struct gl_context, the value in the state key is - * a reduced value and not what is expected in FogOption - */ - p.program->FogOption = ctx->Fog.Mode; - p.program->Base.InputsRead |= FRAG_BIT_FOGC; + /* Allocate final instruction array. This has to be done before calling + * _mesa_append_fog_code because that function frees the Base.Instructions. + * At this point, Base.Instructions points to stack data, so it's a really + * bad idea to free it. + */ + p.program->Base.Instructions + = _mesa_alloc_instructions(p.program->Base.NumInstructions); + if (!p.program->Base.Instructions) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, + "generating tex env program"); + return; } - else { - p.program->FogOption = GL_NONE; + _mesa_copy_instructions(p.program->Base.Instructions, instBuffer, + p.program->Base.NumInstructions); + + /* Append fog code. This must be done before checking the program against + * the limits becuase it will potentially add some instructions. + */ + if (key->fog_enabled) { + _mesa_append_fog_code(ctx, p.program, ctx->Fog.Mode, GL_FALSE); } if (p.program->Base.NumTexIndirections > ctx->Const.FragmentProgram.MaxTexIndirections) @@ -1552,23 +1563,6 @@ create_new_program(struct gl_context *ctx, struct state_key *key, ASSERT(p.program->Base.NumInstructions <= MAX_INSTRUCTIONS); - /* Allocate final instruction array */ - p.program->Base.Instructions - = _mesa_alloc_instructions(p.program->Base.NumInstructions); - if (!p.program->Base.Instructions) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, - "generating tex env program"); - return; - } - _mesa_copy_instructions(p.program->Base.Instructions, instBuffer, - p.program->Base.NumInstructions); - - if (key->num_draw_buffers && p.program->FogOption) { - _mesa_append_fog_code(ctx, p.program, GL_FALSE); - p.program->FogOption = GL_NONE; - } - - /* Notify driver the fragment program has (actually) changed. */ if (ctx->Driver.ProgramStringNotify) { diff --git a/mesalib/src/mesa/main/get.c b/mesalib/src/mesa/main/get.c index e18803280..e933bbe0f 100644 --- a/mesalib/src/mesa/main/get.c +++ b/mesalib/src/mesa/main/get.c @@ -1281,6 +1281,9 @@ static const struct value_desc values[] = { /* GL 3.2 */ { GL_CONTEXT_PROFILE_MASK, CONTEXT_INT(Const.ProfileMask), extra_version_32 }, + + /* GL_ARB_robustness */ + { GL_RESET_NOTIFICATION_STRATEGY_ARB, CONTEXT_ENUM(Const.ResetStrategy), NO_EXTRA }, #endif /* FEATURE_GL */ }; diff --git a/mesalib/src/mesa/main/get.h b/mesalib/src/mesa/main/get.h index 99a004b71..9422efec5 100644 --- a/mesalib/src/mesa/main/get.h +++ b/mesalib/src/mesa/main/get.h @@ -74,4 +74,8 @@ _mesa_GetStringi(GLenum name, GLuint index); extern GLenum GLAPIENTRY _mesa_GetError( void ); +/* GL_ARB_robustness */ +extern GLenum GLAPIENTRY +_mesa_GetGraphicsResetStatusARB( void ); + #endif diff --git a/mesalib/src/mesa/main/getstring.c b/mesalib/src/mesa/main/getstring.c index e55584afc..c381fb2df 100644 --- a/mesalib/src/mesa/main/getstring.c +++ b/mesalib/src/mesa/main/getstring.c @@ -1,253 +1,270 @@ -/*
- * Mesa 3-D graphics library
- * Version: 7.1
- *
- * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-
-#include "glheader.h"
-#include "context.h"
-#include "get.h"
-#include "enums.h"
-#include "extensions.h"
-#include "mfeatures.h"
-#include "mtypes.h"
-
-
-/**
- * Return the string for a glGetString(GL_SHADING_LANGUAGE_VERSION) query.
- */
-static const GLubyte *
-shading_language_version(struct gl_context *ctx)
-{
- switch (ctx->API) {
- case API_OPENGL:
- if (!ctx->Extensions.ARB_shader_objects) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetString");
- return (const GLubyte *) 0;
- }
-
- switch (ctx->Const.GLSLVersion) {
- case 110:
- return (const GLubyte *) "1.10";
- case 120:
- return (const GLubyte *) "1.20";
- case 130:
- return (const GLubyte *) "1.30";
- default:
- _mesa_problem(ctx,
- "Invalid GLSL version in shading_language_version()");
- return (const GLubyte *) 0;
- }
- break;
-
- case API_OPENGLES2:
- return (const GLubyte *) "OpenGL ES GLSL ES 1.0.16";
-
- case API_OPENGLES:
- /* fall-through */
-
- default:
- _mesa_problem(ctx, "Unexpected API value in shading_language_version()");
- return (const GLubyte *) 0;
- }
-}
-
-
-/**
- * Query string-valued state. The return value should _not_ be freed by
- * the caller.
- *
- * \param name the state variable to query.
- *
- * \sa glGetString().
- *
- * Tries to get the string from dd_function_table::GetString, otherwise returns
- * the hardcoded strings.
- */
-const GLubyte * GLAPIENTRY
-_mesa_GetString( GLenum name )
-{
- GET_CURRENT_CONTEXT(ctx);
- static const char *vendor = "Brian Paul";
- static const char *renderer = "Mesa";
-
- if (!ctx)
- return NULL;
-
- ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, NULL);
-
- /* this is a required driver function */
- assert(ctx->Driver.GetString);
- {
- /* Give the driver the chance to handle this query */
- const GLubyte *str = (*ctx->Driver.GetString)(ctx, name);
- if (str)
- return str;
- }
-
- switch (name) {
- case GL_VENDOR:
- return (const GLubyte *) vendor;
- case GL_RENDERER:
- return (const GLubyte *) renderer;
- case GL_VERSION:
- return (const GLubyte *) ctx->VersionString;
- case GL_EXTENSIONS:
- return (const GLubyte *) ctx->Extensions.String;
-#if FEATURE_ARB_shading_language_100 || FEATURE_ES2
- case GL_SHADING_LANGUAGE_VERSION:
- 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) {
- return (const GLubyte *) ctx->Program.ErrorString;
- }
- /* FALL-THROUGH */
-#endif
- default:
- _mesa_error( ctx, GL_INVALID_ENUM, "glGetString" );
- return (const GLubyte *) 0;
- }
-}
-
-
-/**
- * GL3
- */
-const GLubyte * GLAPIENTRY
-_mesa_GetStringi(GLenum name, GLuint index)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- if (!ctx)
- return NULL;
-
- ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, NULL);
-
- switch (name) {
- case GL_EXTENSIONS:
- if (index >= _mesa_get_extension_count(ctx)) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glGetStringi(index=%u)", index);
- return (const GLubyte *) 0;
- }
- return _mesa_get_enabled_extension(ctx, index);
- default:
- _mesa_error( ctx, GL_INVALID_ENUM, "glGetString" );
- return (const GLubyte *) 0;
- }
-}
-
-
-
-/**
- * Return pointer-valued state, such as a vertex array pointer.
- *
- * \param pname names state to be queried
- * \param params returns the pointer value
- *
- * \sa glGetPointerv().
- *
- * Tries to get the specified pointer via dd_function_table::GetPointerv,
- * otherwise gets the specified pointer from the current context.
- */
-void GLAPIENTRY
-_mesa_GetPointerv( GLenum pname, GLvoid **params )
-{
- GET_CURRENT_CONTEXT(ctx);
- const GLuint clientUnit = ctx->Array.ActiveTexture;
- ASSERT_OUTSIDE_BEGIN_END(ctx);
-
- if (!params)
- return;
-
- if (MESA_VERBOSE & VERBOSE_API)
- _mesa_debug(ctx, "glGetPointerv %s\n", _mesa_lookup_enum_by_nr(pname));
-
- switch (pname) {
- case GL_VERTEX_ARRAY_POINTER:
- *params = (GLvoid *) ctx->Array.ArrayObj->Vertex.Ptr;
- break;
- case GL_NORMAL_ARRAY_POINTER:
- *params = (GLvoid *) ctx->Array.ArrayObj->Normal.Ptr;
- break;
- case GL_COLOR_ARRAY_POINTER:
- *params = (GLvoid *) ctx->Array.ArrayObj->Color.Ptr;
- break;
- case GL_SECONDARY_COLOR_ARRAY_POINTER_EXT:
- *params = (GLvoid *) ctx->Array.ArrayObj->SecondaryColor.Ptr;
- break;
- case GL_FOG_COORDINATE_ARRAY_POINTER_EXT:
- *params = (GLvoid *) ctx->Array.ArrayObj->FogCoord.Ptr;
- break;
- case GL_INDEX_ARRAY_POINTER:
- *params = (GLvoid *) ctx->Array.ArrayObj->Index.Ptr;
- break;
- case GL_TEXTURE_COORD_ARRAY_POINTER:
- *params = (GLvoid *) ctx->Array.ArrayObj->TexCoord[clientUnit].Ptr;
- break;
- case GL_EDGE_FLAG_ARRAY_POINTER:
- *params = (GLvoid *) ctx->Array.ArrayObj->EdgeFlag.Ptr;
- break;
- case GL_FEEDBACK_BUFFER_POINTER:
- *params = ctx->Feedback.Buffer;
- break;
- case GL_SELECTION_BUFFER_POINTER:
- *params = ctx->Select.Buffer;
- break;
-#if FEATURE_point_size_array
- case GL_POINT_SIZE_ARRAY_POINTER_OES:
- *params = (GLvoid *) ctx->Array.ArrayObj->PointSize.Ptr;
- break;
-#endif
- default:
- _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" );
- return;
- }
-}
-
-
-/**
- * Returns the current GL error code, or GL_NO_ERROR.
- * \return current error code
- *
- * Returns __struct gl_contextRec::ErrorValue.
- */
-GLenum GLAPIENTRY
-_mesa_GetError( void )
-{
- GET_CURRENT_CONTEXT(ctx);
- GLenum e = ctx->ErrorValue;
- ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
-
- if (MESA_VERBOSE & VERBOSE_API)
- _mesa_debug(ctx, "glGetError <-- %s\n", _mesa_lookup_enum_by_nr(e));
-
- ctx->ErrorValue = (GLenum) GL_NO_ERROR;
- ctx->ErrorDebugCount = 0;
- return e;
-}
+/* + * Mesa 3-D graphics library + * Version: 7.1 + * + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + + +#include "glheader.h" +#include "context.h" +#include "get.h" +#include "enums.h" +#include "extensions.h" +#include "mfeatures.h" +#include "mtypes.h" + + +/** + * Return the string for a glGetString(GL_SHADING_LANGUAGE_VERSION) query. + */ +static const GLubyte * +shading_language_version(struct gl_context *ctx) +{ + switch (ctx->API) { + case API_OPENGL: + if (!ctx->Extensions.ARB_shader_objects) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetString"); + return (const GLubyte *) 0; + } + + switch (ctx->Const.GLSLVersion) { + case 110: + return (const GLubyte *) "1.10"; + case 120: + return (const GLubyte *) "1.20"; + case 130: + return (const GLubyte *) "1.30"; + default: + _mesa_problem(ctx, + "Invalid GLSL version in shading_language_version()"); + return (const GLubyte *) 0; + } + break; + + case API_OPENGLES2: + return (const GLubyte *) "OpenGL ES GLSL ES 1.0.16"; + + case API_OPENGLES: + /* fall-through */ + + default: + _mesa_problem(ctx, "Unexpected API value in shading_language_version()"); + return (const GLubyte *) 0; + } +} + + +/** + * Query string-valued state. The return value should _not_ be freed by + * the caller. + * + * \param name the state variable to query. + * + * \sa glGetString(). + * + * Tries to get the string from dd_function_table::GetString, otherwise returns + * the hardcoded strings. + */ +const GLubyte * GLAPIENTRY +_mesa_GetString( GLenum name ) +{ + GET_CURRENT_CONTEXT(ctx); + static const char *vendor = "Brian Paul"; + static const char *renderer = "Mesa"; + + if (!ctx) + return NULL; + + ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, NULL); + + /* this is a required driver function */ + assert(ctx->Driver.GetString); + { + /* Give the driver the chance to handle this query */ + const GLubyte *str = (*ctx->Driver.GetString)(ctx, name); + if (str) + return str; + } + + switch (name) { + case GL_VENDOR: + return (const GLubyte *) vendor; + case GL_RENDERER: + return (const GLubyte *) renderer; + case GL_VERSION: + return (const GLubyte *) ctx->VersionString; + case GL_EXTENSIONS: + return (const GLubyte *) ctx->Extensions.String; +#if FEATURE_ARB_shading_language_100 || FEATURE_ES2 + case GL_SHADING_LANGUAGE_VERSION: + 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) { + return (const GLubyte *) ctx->Program.ErrorString; + } + /* FALL-THROUGH */ +#endif + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glGetString" ); + return (const GLubyte *) 0; + } +} + + +/** + * GL3 + */ +const GLubyte * GLAPIENTRY +_mesa_GetStringi(GLenum name, GLuint index) +{ + GET_CURRENT_CONTEXT(ctx); + + if (!ctx) + return NULL; + + ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, NULL); + + switch (name) { + case GL_EXTENSIONS: + if (index >= _mesa_get_extension_count(ctx)) { + _mesa_error(ctx, GL_INVALID_VALUE, "glGetStringi(index=%u)", index); + return (const GLubyte *) 0; + } + return _mesa_get_enabled_extension(ctx, index); + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glGetString" ); + return (const GLubyte *) 0; + } +} + + + +/** + * Return pointer-valued state, such as a vertex array pointer. + * + * \param pname names state to be queried + * \param params returns the pointer value + * + * \sa glGetPointerv(). + * + * Tries to get the specified pointer via dd_function_table::GetPointerv, + * otherwise gets the specified pointer from the current context. + */ +void GLAPIENTRY +_mesa_GetPointerv( GLenum pname, GLvoid **params ) +{ + GET_CURRENT_CONTEXT(ctx); + const GLuint clientUnit = ctx->Array.ActiveTexture; + ASSERT_OUTSIDE_BEGIN_END(ctx); + + if (!params) + return; + + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(ctx, "glGetPointerv %s\n", _mesa_lookup_enum_by_nr(pname)); + + switch (pname) { + case GL_VERTEX_ARRAY_POINTER: + *params = (GLvoid *) ctx->Array.ArrayObj->Vertex.Ptr; + break; + case GL_NORMAL_ARRAY_POINTER: + *params = (GLvoid *) ctx->Array.ArrayObj->Normal.Ptr; + break; + case GL_COLOR_ARRAY_POINTER: + *params = (GLvoid *) ctx->Array.ArrayObj->Color.Ptr; + break; + case GL_SECONDARY_COLOR_ARRAY_POINTER_EXT: + *params = (GLvoid *) ctx->Array.ArrayObj->SecondaryColor.Ptr; + break; + case GL_FOG_COORDINATE_ARRAY_POINTER_EXT: + *params = (GLvoid *) ctx->Array.ArrayObj->FogCoord.Ptr; + break; + case GL_INDEX_ARRAY_POINTER: + *params = (GLvoid *) ctx->Array.ArrayObj->Index.Ptr; + break; + case GL_TEXTURE_COORD_ARRAY_POINTER: + *params = (GLvoid *) ctx->Array.ArrayObj->TexCoord[clientUnit].Ptr; + break; + case GL_EDGE_FLAG_ARRAY_POINTER: + *params = (GLvoid *) ctx->Array.ArrayObj->EdgeFlag.Ptr; + break; + case GL_FEEDBACK_BUFFER_POINTER: + *params = ctx->Feedback.Buffer; + break; + case GL_SELECTION_BUFFER_POINTER: + *params = ctx->Select.Buffer; + break; +#if FEATURE_point_size_array + case GL_POINT_SIZE_ARRAY_POINTER_OES: + *params = (GLvoid *) ctx->Array.ArrayObj->PointSize.Ptr; + break; +#endif + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" ); + return; + } +} + + +/** + * Returns the current GL error code, or GL_NO_ERROR. + * \return current error code + * + * Returns __struct gl_contextRec::ErrorValue. + */ +GLenum GLAPIENTRY +_mesa_GetError( void ) +{ + GET_CURRENT_CONTEXT(ctx); + GLenum e = ctx->ErrorValue; + ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); + + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(ctx, "glGetError <-- %s\n", _mesa_lookup_enum_by_nr(e)); + + ctx->ErrorValue = (GLenum) GL_NO_ERROR; + ctx->ErrorDebugCount = 0; + return e; +} + +/** + * Returns an error code specified by GL_ARB_robustness, or GL_NO_ERROR. + * \return current context status + */ +GLenum GLAPIENTRY +_mesa_GetGraphicsResetStatusARB( void ) +{ + GET_CURRENT_CONTEXT(ctx); + GLenum status = ctx->ResetStatus; + + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(ctx, "glGetGraphicsResetStatusARB" + "(always returns GL_NO_ERROR)\n"); + + return status; +} diff --git a/mesalib/src/mesa/main/glapidispatch.h b/mesalib/src/mesa/main/glapidispatch.h index c1cc6cb12..93cc0122d 100644 --- a/mesalib/src/mesa/main/glapidispatch.h +++ b/mesalib/src/mesa/main/glapidispatch.h @@ -59,7 +59,7 @@ } while(0) /* total number of offsets below */ -#define _gloffset_COUNT 908 +#define _gloffset_COUNT 928 #define _gloffset_NewList 0 #define _gloffset_EndList 1 @@ -690,292 +690,312 @@ #define _gloffset_GetShaderPrecisionFormat 623 #define _gloffset_ReleaseShaderCompiler 624 #define _gloffset_ShaderBinary 625 -#define _gloffset_PolygonOffsetEXT 626 -#define _gloffset_GetPixelTexGenParameterfvSGIS 627 -#define _gloffset_GetPixelTexGenParameterivSGIS 628 -#define _gloffset_PixelTexGenParameterfSGIS 629 -#define _gloffset_PixelTexGenParameterfvSGIS 630 -#define _gloffset_PixelTexGenParameteriSGIS 631 -#define _gloffset_PixelTexGenParameterivSGIS 632 -#define _gloffset_SampleMaskSGIS 633 -#define _gloffset_SamplePatternSGIS 634 -#define _gloffset_ColorPointerEXT 635 -#define _gloffset_EdgeFlagPointerEXT 636 -#define _gloffset_IndexPointerEXT 637 -#define _gloffset_NormalPointerEXT 638 -#define _gloffset_TexCoordPointerEXT 639 -#define _gloffset_VertexPointerEXT 640 -#define _gloffset_PointParameterfEXT 641 -#define _gloffset_PointParameterfvEXT 642 -#define _gloffset_LockArraysEXT 643 -#define _gloffset_UnlockArraysEXT 644 -#define _gloffset_SecondaryColor3bEXT 645 -#define _gloffset_SecondaryColor3bvEXT 646 -#define _gloffset_SecondaryColor3dEXT 647 -#define _gloffset_SecondaryColor3dvEXT 648 -#define _gloffset_SecondaryColor3fEXT 649 -#define _gloffset_SecondaryColor3fvEXT 650 -#define _gloffset_SecondaryColor3iEXT 651 -#define _gloffset_SecondaryColor3ivEXT 652 -#define _gloffset_SecondaryColor3sEXT 653 -#define _gloffset_SecondaryColor3svEXT 654 -#define _gloffset_SecondaryColor3ubEXT 655 -#define _gloffset_SecondaryColor3ubvEXT 656 -#define _gloffset_SecondaryColor3uiEXT 657 -#define _gloffset_SecondaryColor3uivEXT 658 -#define _gloffset_SecondaryColor3usEXT 659 -#define _gloffset_SecondaryColor3usvEXT 660 -#define _gloffset_SecondaryColorPointerEXT 661 -#define _gloffset_MultiDrawArraysEXT 662 -#define _gloffset_MultiDrawElementsEXT 663 -#define _gloffset_FogCoordPointerEXT 664 -#define _gloffset_FogCoorddEXT 665 -#define _gloffset_FogCoorddvEXT 666 -#define _gloffset_FogCoordfEXT 667 -#define _gloffset_FogCoordfvEXT 668 -#define _gloffset_PixelTexGenSGIX 669 -#define _gloffset_BlendFuncSeparateEXT 670 -#define _gloffset_FlushVertexArrayRangeNV 671 -#define _gloffset_VertexArrayRangeNV 672 -#define _gloffset_CombinerInputNV 673 -#define _gloffset_CombinerOutputNV 674 -#define _gloffset_CombinerParameterfNV 675 -#define _gloffset_CombinerParameterfvNV 676 -#define _gloffset_CombinerParameteriNV 677 -#define _gloffset_CombinerParameterivNV 678 -#define _gloffset_FinalCombinerInputNV 679 -#define _gloffset_GetCombinerInputParameterfvNV 680 -#define _gloffset_GetCombinerInputParameterivNV 681 -#define _gloffset_GetCombinerOutputParameterfvNV 682 -#define _gloffset_GetCombinerOutputParameterivNV 683 -#define _gloffset_GetFinalCombinerInputParameterfvNV 684 -#define _gloffset_GetFinalCombinerInputParameterivNV 685 -#define _gloffset_ResizeBuffersMESA 686 -#define _gloffset_WindowPos2dMESA 687 -#define _gloffset_WindowPos2dvMESA 688 -#define _gloffset_WindowPos2fMESA 689 -#define _gloffset_WindowPos2fvMESA 690 -#define _gloffset_WindowPos2iMESA 691 -#define _gloffset_WindowPos2ivMESA 692 -#define _gloffset_WindowPos2sMESA 693 -#define _gloffset_WindowPos2svMESA 694 -#define _gloffset_WindowPos3dMESA 695 -#define _gloffset_WindowPos3dvMESA 696 -#define _gloffset_WindowPos3fMESA 697 -#define _gloffset_WindowPos3fvMESA 698 -#define _gloffset_WindowPos3iMESA 699 -#define _gloffset_WindowPos3ivMESA 700 -#define _gloffset_WindowPos3sMESA 701 -#define _gloffset_WindowPos3svMESA 702 -#define _gloffset_WindowPos4dMESA 703 -#define _gloffset_WindowPos4dvMESA 704 -#define _gloffset_WindowPos4fMESA 705 -#define _gloffset_WindowPos4fvMESA 706 -#define _gloffset_WindowPos4iMESA 707 -#define _gloffset_WindowPos4ivMESA 708 -#define _gloffset_WindowPos4sMESA 709 -#define _gloffset_WindowPos4svMESA 710 -#define _gloffset_MultiModeDrawArraysIBM 711 -#define _gloffset_MultiModeDrawElementsIBM 712 -#define _gloffset_DeleteFencesNV 713 -#define _gloffset_FinishFenceNV 714 -#define _gloffset_GenFencesNV 715 -#define _gloffset_GetFenceivNV 716 -#define _gloffset_IsFenceNV 717 -#define _gloffset_SetFenceNV 718 -#define _gloffset_TestFenceNV 719 -#define _gloffset_AreProgramsResidentNV 720 -#define _gloffset_BindProgramNV 721 -#define _gloffset_DeleteProgramsNV 722 -#define _gloffset_ExecuteProgramNV 723 -#define _gloffset_GenProgramsNV 724 -#define _gloffset_GetProgramParameterdvNV 725 -#define _gloffset_GetProgramParameterfvNV 726 -#define _gloffset_GetProgramStringNV 727 -#define _gloffset_GetProgramivNV 728 -#define _gloffset_GetTrackMatrixivNV 729 -#define _gloffset_GetVertexAttribPointervNV 730 -#define _gloffset_GetVertexAttribdvNV 731 -#define _gloffset_GetVertexAttribfvNV 732 -#define _gloffset_GetVertexAttribivNV 733 -#define _gloffset_IsProgramNV 734 -#define _gloffset_LoadProgramNV 735 -#define _gloffset_ProgramParameters4dvNV 736 -#define _gloffset_ProgramParameters4fvNV 737 -#define _gloffset_RequestResidentProgramsNV 738 -#define _gloffset_TrackMatrixNV 739 -#define _gloffset_VertexAttrib1dNV 740 -#define _gloffset_VertexAttrib1dvNV 741 -#define _gloffset_VertexAttrib1fNV 742 -#define _gloffset_VertexAttrib1fvNV 743 -#define _gloffset_VertexAttrib1sNV 744 -#define _gloffset_VertexAttrib1svNV 745 -#define _gloffset_VertexAttrib2dNV 746 -#define _gloffset_VertexAttrib2dvNV 747 -#define _gloffset_VertexAttrib2fNV 748 -#define _gloffset_VertexAttrib2fvNV 749 -#define _gloffset_VertexAttrib2sNV 750 -#define _gloffset_VertexAttrib2svNV 751 -#define _gloffset_VertexAttrib3dNV 752 -#define _gloffset_VertexAttrib3dvNV 753 -#define _gloffset_VertexAttrib3fNV 754 -#define _gloffset_VertexAttrib3fvNV 755 -#define _gloffset_VertexAttrib3sNV 756 -#define _gloffset_VertexAttrib3svNV 757 -#define _gloffset_VertexAttrib4dNV 758 -#define _gloffset_VertexAttrib4dvNV 759 -#define _gloffset_VertexAttrib4fNV 760 -#define _gloffset_VertexAttrib4fvNV 761 -#define _gloffset_VertexAttrib4sNV 762 -#define _gloffset_VertexAttrib4svNV 763 -#define _gloffset_VertexAttrib4ubNV 764 -#define _gloffset_VertexAttrib4ubvNV 765 -#define _gloffset_VertexAttribPointerNV 766 -#define _gloffset_VertexAttribs1dvNV 767 -#define _gloffset_VertexAttribs1fvNV 768 -#define _gloffset_VertexAttribs1svNV 769 -#define _gloffset_VertexAttribs2dvNV 770 -#define _gloffset_VertexAttribs2fvNV 771 -#define _gloffset_VertexAttribs2svNV 772 -#define _gloffset_VertexAttribs3dvNV 773 -#define _gloffset_VertexAttribs3fvNV 774 -#define _gloffset_VertexAttribs3svNV 775 -#define _gloffset_VertexAttribs4dvNV 776 -#define _gloffset_VertexAttribs4fvNV 777 -#define _gloffset_VertexAttribs4svNV 778 -#define _gloffset_VertexAttribs4ubvNV 779 -#define _gloffset_GetTexBumpParameterfvATI 780 -#define _gloffset_GetTexBumpParameterivATI 781 -#define _gloffset_TexBumpParameterfvATI 782 -#define _gloffset_TexBumpParameterivATI 783 -#define _gloffset_AlphaFragmentOp1ATI 784 -#define _gloffset_AlphaFragmentOp2ATI 785 -#define _gloffset_AlphaFragmentOp3ATI 786 -#define _gloffset_BeginFragmentShaderATI 787 -#define _gloffset_BindFragmentShaderATI 788 -#define _gloffset_ColorFragmentOp1ATI 789 -#define _gloffset_ColorFragmentOp2ATI 790 -#define _gloffset_ColorFragmentOp3ATI 791 -#define _gloffset_DeleteFragmentShaderATI 792 -#define _gloffset_EndFragmentShaderATI 793 -#define _gloffset_GenFragmentShadersATI 794 -#define _gloffset_PassTexCoordATI 795 -#define _gloffset_SampleMapATI 796 -#define _gloffset_SetFragmentShaderConstantATI 797 -#define _gloffset_PointParameteriNV 798 -#define _gloffset_PointParameterivNV 799 -#define _gloffset_ActiveStencilFaceEXT 800 -#define _gloffset_BindVertexArrayAPPLE 801 -#define _gloffset_DeleteVertexArraysAPPLE 802 -#define _gloffset_GenVertexArraysAPPLE 803 -#define _gloffset_IsVertexArrayAPPLE 804 -#define _gloffset_GetProgramNamedParameterdvNV 805 -#define _gloffset_GetProgramNamedParameterfvNV 806 -#define _gloffset_ProgramNamedParameter4dNV 807 -#define _gloffset_ProgramNamedParameter4dvNV 808 -#define _gloffset_ProgramNamedParameter4fNV 809 -#define _gloffset_ProgramNamedParameter4fvNV 810 -#define _gloffset_PrimitiveRestartIndexNV 811 -#define _gloffset_PrimitiveRestartNV 812 -#define _gloffset_DepthBoundsEXT 813 -#define _gloffset_BlendEquationSeparateEXT 814 -#define _gloffset_BindFramebufferEXT 815 -#define _gloffset_BindRenderbufferEXT 816 -#define _gloffset_CheckFramebufferStatusEXT 817 -#define _gloffset_DeleteFramebuffersEXT 818 -#define _gloffset_DeleteRenderbuffersEXT 819 -#define _gloffset_FramebufferRenderbufferEXT 820 -#define _gloffset_FramebufferTexture1DEXT 821 -#define _gloffset_FramebufferTexture2DEXT 822 -#define _gloffset_FramebufferTexture3DEXT 823 -#define _gloffset_GenFramebuffersEXT 824 -#define _gloffset_GenRenderbuffersEXT 825 -#define _gloffset_GenerateMipmapEXT 826 -#define _gloffset_GetFramebufferAttachmentParameterivEXT 827 -#define _gloffset_GetRenderbufferParameterivEXT 828 -#define _gloffset_IsFramebufferEXT 829 -#define _gloffset_IsRenderbufferEXT 830 -#define _gloffset_RenderbufferStorageEXT 831 -#define _gloffset_BlitFramebufferEXT 832 -#define _gloffset_BufferParameteriAPPLE 833 -#define _gloffset_FlushMappedBufferRangeAPPLE 834 -#define _gloffset_BindFragDataLocationEXT 835 -#define _gloffset_GetFragDataLocationEXT 836 -#define _gloffset_GetUniformuivEXT 837 -#define _gloffset_GetVertexAttribIivEXT 838 -#define _gloffset_GetVertexAttribIuivEXT 839 -#define _gloffset_Uniform1uiEXT 840 -#define _gloffset_Uniform1uivEXT 841 -#define _gloffset_Uniform2uiEXT 842 -#define _gloffset_Uniform2uivEXT 843 -#define _gloffset_Uniform3uiEXT 844 -#define _gloffset_Uniform3uivEXT 845 -#define _gloffset_Uniform4uiEXT 846 -#define _gloffset_Uniform4uivEXT 847 -#define _gloffset_VertexAttribI1iEXT 848 -#define _gloffset_VertexAttribI1ivEXT 849 -#define _gloffset_VertexAttribI1uiEXT 850 -#define _gloffset_VertexAttribI1uivEXT 851 -#define _gloffset_VertexAttribI2iEXT 852 -#define _gloffset_VertexAttribI2ivEXT 853 -#define _gloffset_VertexAttribI2uiEXT 854 -#define _gloffset_VertexAttribI2uivEXT 855 -#define _gloffset_VertexAttribI3iEXT 856 -#define _gloffset_VertexAttribI3ivEXT 857 -#define _gloffset_VertexAttribI3uiEXT 858 -#define _gloffset_VertexAttribI3uivEXT 859 -#define _gloffset_VertexAttribI4bvEXT 860 -#define _gloffset_VertexAttribI4iEXT 861 -#define _gloffset_VertexAttribI4ivEXT 862 -#define _gloffset_VertexAttribI4svEXT 863 -#define _gloffset_VertexAttribI4ubvEXT 864 -#define _gloffset_VertexAttribI4uiEXT 865 -#define _gloffset_VertexAttribI4uivEXT 866 -#define _gloffset_VertexAttribI4usvEXT 867 -#define _gloffset_VertexAttribIPointerEXT 868 -#define _gloffset_FramebufferTextureLayerEXT 869 -#define _gloffset_ColorMaskIndexedEXT 870 -#define _gloffset_DisableIndexedEXT 871 -#define _gloffset_EnableIndexedEXT 872 -#define _gloffset_GetBooleanIndexedvEXT 873 -#define _gloffset_GetIntegerIndexedvEXT 874 -#define _gloffset_IsEnabledIndexedEXT 875 -#define _gloffset_ClearColorIiEXT 876 -#define _gloffset_ClearColorIuiEXT 877 -#define _gloffset_GetTexParameterIivEXT 878 -#define _gloffset_GetTexParameterIuivEXT 879 -#define _gloffset_TexParameterIivEXT 880 -#define _gloffset_TexParameterIuivEXT 881 -#define _gloffset_BeginConditionalRenderNV 882 -#define _gloffset_EndConditionalRenderNV 883 -#define _gloffset_BeginTransformFeedbackEXT 884 -#define _gloffset_BindBufferBaseEXT 885 -#define _gloffset_BindBufferOffsetEXT 886 -#define _gloffset_BindBufferRangeEXT 887 -#define _gloffset_EndTransformFeedbackEXT 888 -#define _gloffset_GetTransformFeedbackVaryingEXT 889 -#define _gloffset_TransformFeedbackVaryingsEXT 890 -#define _gloffset_ProvokingVertexEXT 891 -#define _gloffset_GetTexParameterPointervAPPLE 892 -#define _gloffset_TextureRangeAPPLE 893 -#define _gloffset_GetObjectParameterivAPPLE 894 -#define _gloffset_ObjectPurgeableAPPLE 895 -#define _gloffset_ObjectUnpurgeableAPPLE 896 -#define _gloffset_ActiveProgramEXT 897 -#define _gloffset_CreateShaderProgramEXT 898 -#define _gloffset_UseShaderProgramEXT 899 -#define _gloffset_TextureBarrierNV 900 -#define _gloffset_StencilFuncSeparateATI 901 -#define _gloffset_ProgramEnvParameters4fvEXT 902 -#define _gloffset_ProgramLocalParameters4fvEXT 903 -#define _gloffset_GetQueryObjecti64vEXT 904 -#define _gloffset_GetQueryObjectui64vEXT 905 -#define _gloffset_EGLImageTargetRenderbufferStorageOES 906 -#define _gloffset_EGLImageTargetTexture2DOES 907 +#define _gloffset_GetGraphicsResetStatusARB 626 +#define _gloffset_GetnColorTableARB 627 +#define _gloffset_GetnCompressedTexImageARB 628 +#define _gloffset_GetnConvolutionFilterARB 629 +#define _gloffset_GetnHistogramARB 630 +#define _gloffset_GetnMapdvARB 631 +#define _gloffset_GetnMapfvARB 632 +#define _gloffset_GetnMapivARB 633 +#define _gloffset_GetnMinmaxARB 634 +#define _gloffset_GetnPixelMapfvARB 635 +#define _gloffset_GetnPixelMapuivARB 636 +#define _gloffset_GetnPixelMapusvARB 637 +#define _gloffset_GetnPolygonStippleARB 638 +#define _gloffset_GetnSeparableFilterARB 639 +#define _gloffset_GetnTexImageARB 640 +#define _gloffset_GetnUniformdvARB 641 +#define _gloffset_GetnUniformfvARB 642 +#define _gloffset_GetnUniformivARB 643 +#define _gloffset_GetnUniformuivARB 644 +#define _gloffset_ReadnPixelsARB 645 +#define _gloffset_PolygonOffsetEXT 646 +#define _gloffset_GetPixelTexGenParameterfvSGIS 647 +#define _gloffset_GetPixelTexGenParameterivSGIS 648 +#define _gloffset_PixelTexGenParameterfSGIS 649 +#define _gloffset_PixelTexGenParameterfvSGIS 650 +#define _gloffset_PixelTexGenParameteriSGIS 651 +#define _gloffset_PixelTexGenParameterivSGIS 652 +#define _gloffset_SampleMaskSGIS 653 +#define _gloffset_SamplePatternSGIS 654 +#define _gloffset_ColorPointerEXT 655 +#define _gloffset_EdgeFlagPointerEXT 656 +#define _gloffset_IndexPointerEXT 657 +#define _gloffset_NormalPointerEXT 658 +#define _gloffset_TexCoordPointerEXT 659 +#define _gloffset_VertexPointerEXT 660 +#define _gloffset_PointParameterfEXT 661 +#define _gloffset_PointParameterfvEXT 662 +#define _gloffset_LockArraysEXT 663 +#define _gloffset_UnlockArraysEXT 664 +#define _gloffset_SecondaryColor3bEXT 665 +#define _gloffset_SecondaryColor3bvEXT 666 +#define _gloffset_SecondaryColor3dEXT 667 +#define _gloffset_SecondaryColor3dvEXT 668 +#define _gloffset_SecondaryColor3fEXT 669 +#define _gloffset_SecondaryColor3fvEXT 670 +#define _gloffset_SecondaryColor3iEXT 671 +#define _gloffset_SecondaryColor3ivEXT 672 +#define _gloffset_SecondaryColor3sEXT 673 +#define _gloffset_SecondaryColor3svEXT 674 +#define _gloffset_SecondaryColor3ubEXT 675 +#define _gloffset_SecondaryColor3ubvEXT 676 +#define _gloffset_SecondaryColor3uiEXT 677 +#define _gloffset_SecondaryColor3uivEXT 678 +#define _gloffset_SecondaryColor3usEXT 679 +#define _gloffset_SecondaryColor3usvEXT 680 +#define _gloffset_SecondaryColorPointerEXT 681 +#define _gloffset_MultiDrawArraysEXT 682 +#define _gloffset_MultiDrawElementsEXT 683 +#define _gloffset_FogCoordPointerEXT 684 +#define _gloffset_FogCoorddEXT 685 +#define _gloffset_FogCoorddvEXT 686 +#define _gloffset_FogCoordfEXT 687 +#define _gloffset_FogCoordfvEXT 688 +#define _gloffset_PixelTexGenSGIX 689 +#define _gloffset_BlendFuncSeparateEXT 690 +#define _gloffset_FlushVertexArrayRangeNV 691 +#define _gloffset_VertexArrayRangeNV 692 +#define _gloffset_CombinerInputNV 693 +#define _gloffset_CombinerOutputNV 694 +#define _gloffset_CombinerParameterfNV 695 +#define _gloffset_CombinerParameterfvNV 696 +#define _gloffset_CombinerParameteriNV 697 +#define _gloffset_CombinerParameterivNV 698 +#define _gloffset_FinalCombinerInputNV 699 +#define _gloffset_GetCombinerInputParameterfvNV 700 +#define _gloffset_GetCombinerInputParameterivNV 701 +#define _gloffset_GetCombinerOutputParameterfvNV 702 +#define _gloffset_GetCombinerOutputParameterivNV 703 +#define _gloffset_GetFinalCombinerInputParameterfvNV 704 +#define _gloffset_GetFinalCombinerInputParameterivNV 705 +#define _gloffset_ResizeBuffersMESA 706 +#define _gloffset_WindowPos2dMESA 707 +#define _gloffset_WindowPos2dvMESA 708 +#define _gloffset_WindowPos2fMESA 709 +#define _gloffset_WindowPos2fvMESA 710 +#define _gloffset_WindowPos2iMESA 711 +#define _gloffset_WindowPos2ivMESA 712 +#define _gloffset_WindowPos2sMESA 713 +#define _gloffset_WindowPos2svMESA 714 +#define _gloffset_WindowPos3dMESA 715 +#define _gloffset_WindowPos3dvMESA 716 +#define _gloffset_WindowPos3fMESA 717 +#define _gloffset_WindowPos3fvMESA 718 +#define _gloffset_WindowPos3iMESA 719 +#define _gloffset_WindowPos3ivMESA 720 +#define _gloffset_WindowPos3sMESA 721 +#define _gloffset_WindowPos3svMESA 722 +#define _gloffset_WindowPos4dMESA 723 +#define _gloffset_WindowPos4dvMESA 724 +#define _gloffset_WindowPos4fMESA 725 +#define _gloffset_WindowPos4fvMESA 726 +#define _gloffset_WindowPos4iMESA 727 +#define _gloffset_WindowPos4ivMESA 728 +#define _gloffset_WindowPos4sMESA 729 +#define _gloffset_WindowPos4svMESA 730 +#define _gloffset_MultiModeDrawArraysIBM 731 +#define _gloffset_MultiModeDrawElementsIBM 732 +#define _gloffset_DeleteFencesNV 733 +#define _gloffset_FinishFenceNV 734 +#define _gloffset_GenFencesNV 735 +#define _gloffset_GetFenceivNV 736 +#define _gloffset_IsFenceNV 737 +#define _gloffset_SetFenceNV 738 +#define _gloffset_TestFenceNV 739 +#define _gloffset_AreProgramsResidentNV 740 +#define _gloffset_BindProgramNV 741 +#define _gloffset_DeleteProgramsNV 742 +#define _gloffset_ExecuteProgramNV 743 +#define _gloffset_GenProgramsNV 744 +#define _gloffset_GetProgramParameterdvNV 745 +#define _gloffset_GetProgramParameterfvNV 746 +#define _gloffset_GetProgramStringNV 747 +#define _gloffset_GetProgramivNV 748 +#define _gloffset_GetTrackMatrixivNV 749 +#define _gloffset_GetVertexAttribPointervNV 750 +#define _gloffset_GetVertexAttribdvNV 751 +#define _gloffset_GetVertexAttribfvNV 752 +#define _gloffset_GetVertexAttribivNV 753 +#define _gloffset_IsProgramNV 754 +#define _gloffset_LoadProgramNV 755 +#define _gloffset_ProgramParameters4dvNV 756 +#define _gloffset_ProgramParameters4fvNV 757 +#define _gloffset_RequestResidentProgramsNV 758 +#define _gloffset_TrackMatrixNV 759 +#define _gloffset_VertexAttrib1dNV 760 +#define _gloffset_VertexAttrib1dvNV 761 +#define _gloffset_VertexAttrib1fNV 762 +#define _gloffset_VertexAttrib1fvNV 763 +#define _gloffset_VertexAttrib1sNV 764 +#define _gloffset_VertexAttrib1svNV 765 +#define _gloffset_VertexAttrib2dNV 766 +#define _gloffset_VertexAttrib2dvNV 767 +#define _gloffset_VertexAttrib2fNV 768 +#define _gloffset_VertexAttrib2fvNV 769 +#define _gloffset_VertexAttrib2sNV 770 +#define _gloffset_VertexAttrib2svNV 771 +#define _gloffset_VertexAttrib3dNV 772 +#define _gloffset_VertexAttrib3dvNV 773 +#define _gloffset_VertexAttrib3fNV 774 +#define _gloffset_VertexAttrib3fvNV 775 +#define _gloffset_VertexAttrib3sNV 776 +#define _gloffset_VertexAttrib3svNV 777 +#define _gloffset_VertexAttrib4dNV 778 +#define _gloffset_VertexAttrib4dvNV 779 +#define _gloffset_VertexAttrib4fNV 780 +#define _gloffset_VertexAttrib4fvNV 781 +#define _gloffset_VertexAttrib4sNV 782 +#define _gloffset_VertexAttrib4svNV 783 +#define _gloffset_VertexAttrib4ubNV 784 +#define _gloffset_VertexAttrib4ubvNV 785 +#define _gloffset_VertexAttribPointerNV 786 +#define _gloffset_VertexAttribs1dvNV 787 +#define _gloffset_VertexAttribs1fvNV 788 +#define _gloffset_VertexAttribs1svNV 789 +#define _gloffset_VertexAttribs2dvNV 790 +#define _gloffset_VertexAttribs2fvNV 791 +#define _gloffset_VertexAttribs2svNV 792 +#define _gloffset_VertexAttribs3dvNV 793 +#define _gloffset_VertexAttribs3fvNV 794 +#define _gloffset_VertexAttribs3svNV 795 +#define _gloffset_VertexAttribs4dvNV 796 +#define _gloffset_VertexAttribs4fvNV 797 +#define _gloffset_VertexAttribs4svNV 798 +#define _gloffset_VertexAttribs4ubvNV 799 +#define _gloffset_GetTexBumpParameterfvATI 800 +#define _gloffset_GetTexBumpParameterivATI 801 +#define _gloffset_TexBumpParameterfvATI 802 +#define _gloffset_TexBumpParameterivATI 803 +#define _gloffset_AlphaFragmentOp1ATI 804 +#define _gloffset_AlphaFragmentOp2ATI 805 +#define _gloffset_AlphaFragmentOp3ATI 806 +#define _gloffset_BeginFragmentShaderATI 807 +#define _gloffset_BindFragmentShaderATI 808 +#define _gloffset_ColorFragmentOp1ATI 809 +#define _gloffset_ColorFragmentOp2ATI 810 +#define _gloffset_ColorFragmentOp3ATI 811 +#define _gloffset_DeleteFragmentShaderATI 812 +#define _gloffset_EndFragmentShaderATI 813 +#define _gloffset_GenFragmentShadersATI 814 +#define _gloffset_PassTexCoordATI 815 +#define _gloffset_SampleMapATI 816 +#define _gloffset_SetFragmentShaderConstantATI 817 +#define _gloffset_PointParameteriNV 818 +#define _gloffset_PointParameterivNV 819 +#define _gloffset_ActiveStencilFaceEXT 820 +#define _gloffset_BindVertexArrayAPPLE 821 +#define _gloffset_DeleteVertexArraysAPPLE 822 +#define _gloffset_GenVertexArraysAPPLE 823 +#define _gloffset_IsVertexArrayAPPLE 824 +#define _gloffset_GetProgramNamedParameterdvNV 825 +#define _gloffset_GetProgramNamedParameterfvNV 826 +#define _gloffset_ProgramNamedParameter4dNV 827 +#define _gloffset_ProgramNamedParameter4dvNV 828 +#define _gloffset_ProgramNamedParameter4fNV 829 +#define _gloffset_ProgramNamedParameter4fvNV 830 +#define _gloffset_PrimitiveRestartIndexNV 831 +#define _gloffset_PrimitiveRestartNV 832 +#define _gloffset_DepthBoundsEXT 833 +#define _gloffset_BlendEquationSeparateEXT 834 +#define _gloffset_BindFramebufferEXT 835 +#define _gloffset_BindRenderbufferEXT 836 +#define _gloffset_CheckFramebufferStatusEXT 837 +#define _gloffset_DeleteFramebuffersEXT 838 +#define _gloffset_DeleteRenderbuffersEXT 839 +#define _gloffset_FramebufferRenderbufferEXT 840 +#define _gloffset_FramebufferTexture1DEXT 841 +#define _gloffset_FramebufferTexture2DEXT 842 +#define _gloffset_FramebufferTexture3DEXT 843 +#define _gloffset_GenFramebuffersEXT 844 +#define _gloffset_GenRenderbuffersEXT 845 +#define _gloffset_GenerateMipmapEXT 846 +#define _gloffset_GetFramebufferAttachmentParameterivEXT 847 +#define _gloffset_GetRenderbufferParameterivEXT 848 +#define _gloffset_IsFramebufferEXT 849 +#define _gloffset_IsRenderbufferEXT 850 +#define _gloffset_RenderbufferStorageEXT 851 +#define _gloffset_BlitFramebufferEXT 852 +#define _gloffset_BufferParameteriAPPLE 853 +#define _gloffset_FlushMappedBufferRangeAPPLE 854 +#define _gloffset_BindFragDataLocationEXT 855 +#define _gloffset_GetFragDataLocationEXT 856 +#define _gloffset_GetUniformuivEXT 857 +#define _gloffset_GetVertexAttribIivEXT 858 +#define _gloffset_GetVertexAttribIuivEXT 859 +#define _gloffset_Uniform1uiEXT 860 +#define _gloffset_Uniform1uivEXT 861 +#define _gloffset_Uniform2uiEXT 862 +#define _gloffset_Uniform2uivEXT 863 +#define _gloffset_Uniform3uiEXT 864 +#define _gloffset_Uniform3uivEXT 865 +#define _gloffset_Uniform4uiEXT 866 +#define _gloffset_Uniform4uivEXT 867 +#define _gloffset_VertexAttribI1iEXT 868 +#define _gloffset_VertexAttribI1ivEXT 869 +#define _gloffset_VertexAttribI1uiEXT 870 +#define _gloffset_VertexAttribI1uivEXT 871 +#define _gloffset_VertexAttribI2iEXT 872 +#define _gloffset_VertexAttribI2ivEXT 873 +#define _gloffset_VertexAttribI2uiEXT 874 +#define _gloffset_VertexAttribI2uivEXT 875 +#define _gloffset_VertexAttribI3iEXT 876 +#define _gloffset_VertexAttribI3ivEXT 877 +#define _gloffset_VertexAttribI3uiEXT 878 +#define _gloffset_VertexAttribI3uivEXT 879 +#define _gloffset_VertexAttribI4bvEXT 880 +#define _gloffset_VertexAttribI4iEXT 881 +#define _gloffset_VertexAttribI4ivEXT 882 +#define _gloffset_VertexAttribI4svEXT 883 +#define _gloffset_VertexAttribI4ubvEXT 884 +#define _gloffset_VertexAttribI4uiEXT 885 +#define _gloffset_VertexAttribI4uivEXT 886 +#define _gloffset_VertexAttribI4usvEXT 887 +#define _gloffset_VertexAttribIPointerEXT 888 +#define _gloffset_FramebufferTextureLayerEXT 889 +#define _gloffset_ColorMaskIndexedEXT 890 +#define _gloffset_DisableIndexedEXT 891 +#define _gloffset_EnableIndexedEXT 892 +#define _gloffset_GetBooleanIndexedvEXT 893 +#define _gloffset_GetIntegerIndexedvEXT 894 +#define _gloffset_IsEnabledIndexedEXT 895 +#define _gloffset_ClearColorIiEXT 896 +#define _gloffset_ClearColorIuiEXT 897 +#define _gloffset_GetTexParameterIivEXT 898 +#define _gloffset_GetTexParameterIuivEXT 899 +#define _gloffset_TexParameterIivEXT 900 +#define _gloffset_TexParameterIuivEXT 901 +#define _gloffset_BeginConditionalRenderNV 902 +#define _gloffset_EndConditionalRenderNV 903 +#define _gloffset_BeginTransformFeedbackEXT 904 +#define _gloffset_BindBufferBaseEXT 905 +#define _gloffset_BindBufferOffsetEXT 906 +#define _gloffset_BindBufferRangeEXT 907 +#define _gloffset_EndTransformFeedbackEXT 908 +#define _gloffset_GetTransformFeedbackVaryingEXT 909 +#define _gloffset_TransformFeedbackVaryingsEXT 910 +#define _gloffset_ProvokingVertexEXT 911 +#define _gloffset_GetTexParameterPointervAPPLE 912 +#define _gloffset_TextureRangeAPPLE 913 +#define _gloffset_GetObjectParameterivAPPLE 914 +#define _gloffset_ObjectPurgeableAPPLE 915 +#define _gloffset_ObjectUnpurgeableAPPLE 916 +#define _gloffset_ActiveProgramEXT 917 +#define _gloffset_CreateShaderProgramEXT 918 +#define _gloffset_UseShaderProgramEXT 919 +#define _gloffset_TextureBarrierNV 920 +#define _gloffset_StencilFuncSeparateATI 921 +#define _gloffset_ProgramEnvParameters4fvEXT 922 +#define _gloffset_ProgramLocalParameters4fvEXT 923 +#define _gloffset_GetQueryObjecti64vEXT 924 +#define _gloffset_GetQueryObjectui64vEXT 925 +#define _gloffset_EGLImageTargetRenderbufferStorageOES 926 +#define _gloffset_EGLImageTargetTexture2DOES 927 #else /* !_GLAPI_USE_REMAP_TABLE */ -#define driDispatchRemapTable_size 500 +#define driDispatchRemapTable_size 520 extern int driDispatchRemapTable[ driDispatchRemapTable_size ]; #define AttachShader_remap_index 0 @@ -1196,288 +1216,308 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ]; #define GetShaderPrecisionFormat_remap_index 215 #define ReleaseShaderCompiler_remap_index 216 #define ShaderBinary_remap_index 217 -#define PolygonOffsetEXT_remap_index 218 -#define GetPixelTexGenParameterfvSGIS_remap_index 219 -#define GetPixelTexGenParameterivSGIS_remap_index 220 -#define PixelTexGenParameterfSGIS_remap_index 221 -#define PixelTexGenParameterfvSGIS_remap_index 222 -#define PixelTexGenParameteriSGIS_remap_index 223 -#define PixelTexGenParameterivSGIS_remap_index 224 -#define SampleMaskSGIS_remap_index 225 -#define SamplePatternSGIS_remap_index 226 -#define ColorPointerEXT_remap_index 227 -#define EdgeFlagPointerEXT_remap_index 228 -#define IndexPointerEXT_remap_index 229 -#define NormalPointerEXT_remap_index 230 -#define TexCoordPointerEXT_remap_index 231 -#define VertexPointerEXT_remap_index 232 -#define PointParameterfEXT_remap_index 233 -#define PointParameterfvEXT_remap_index 234 -#define LockArraysEXT_remap_index 235 -#define UnlockArraysEXT_remap_index 236 -#define SecondaryColor3bEXT_remap_index 237 -#define SecondaryColor3bvEXT_remap_index 238 -#define SecondaryColor3dEXT_remap_index 239 -#define SecondaryColor3dvEXT_remap_index 240 -#define SecondaryColor3fEXT_remap_index 241 -#define SecondaryColor3fvEXT_remap_index 242 -#define SecondaryColor3iEXT_remap_index 243 -#define SecondaryColor3ivEXT_remap_index 244 -#define SecondaryColor3sEXT_remap_index 245 -#define SecondaryColor3svEXT_remap_index 246 -#define SecondaryColor3ubEXT_remap_index 247 -#define SecondaryColor3ubvEXT_remap_index 248 -#define SecondaryColor3uiEXT_remap_index 249 -#define SecondaryColor3uivEXT_remap_index 250 -#define SecondaryColor3usEXT_remap_index 251 -#define SecondaryColor3usvEXT_remap_index 252 -#define SecondaryColorPointerEXT_remap_index 253 -#define MultiDrawArraysEXT_remap_index 254 -#define MultiDrawElementsEXT_remap_index 255 -#define FogCoordPointerEXT_remap_index 256 -#define FogCoorddEXT_remap_index 257 -#define FogCoorddvEXT_remap_index 258 -#define FogCoordfEXT_remap_index 259 -#define FogCoordfvEXT_remap_index 260 -#define PixelTexGenSGIX_remap_index 261 -#define BlendFuncSeparateEXT_remap_index 262 -#define FlushVertexArrayRangeNV_remap_index 263 -#define VertexArrayRangeNV_remap_index 264 -#define CombinerInputNV_remap_index 265 -#define CombinerOutputNV_remap_index 266 -#define CombinerParameterfNV_remap_index 267 -#define CombinerParameterfvNV_remap_index 268 -#define CombinerParameteriNV_remap_index 269 -#define CombinerParameterivNV_remap_index 270 -#define FinalCombinerInputNV_remap_index 271 -#define GetCombinerInputParameterfvNV_remap_index 272 -#define GetCombinerInputParameterivNV_remap_index 273 -#define GetCombinerOutputParameterfvNV_remap_index 274 -#define GetCombinerOutputParameterivNV_remap_index 275 -#define GetFinalCombinerInputParameterfvNV_remap_index 276 -#define GetFinalCombinerInputParameterivNV_remap_index 277 -#define ResizeBuffersMESA_remap_index 278 -#define WindowPos2dMESA_remap_index 279 -#define WindowPos2dvMESA_remap_index 280 -#define WindowPos2fMESA_remap_index 281 -#define WindowPos2fvMESA_remap_index 282 -#define WindowPos2iMESA_remap_index 283 -#define WindowPos2ivMESA_remap_index 284 -#define WindowPos2sMESA_remap_index 285 -#define WindowPos2svMESA_remap_index 286 -#define WindowPos3dMESA_remap_index 287 -#define WindowPos3dvMESA_remap_index 288 -#define WindowPos3fMESA_remap_index 289 -#define WindowPos3fvMESA_remap_index 290 -#define WindowPos3iMESA_remap_index 291 -#define WindowPos3ivMESA_remap_index 292 -#define WindowPos3sMESA_remap_index 293 -#define WindowPos3svMESA_remap_index 294 -#define WindowPos4dMESA_remap_index 295 -#define WindowPos4dvMESA_remap_index 296 -#define WindowPos4fMESA_remap_index 297 -#define WindowPos4fvMESA_remap_index 298 -#define WindowPos4iMESA_remap_index 299 -#define WindowPos4ivMESA_remap_index 300 -#define WindowPos4sMESA_remap_index 301 -#define WindowPos4svMESA_remap_index 302 -#define MultiModeDrawArraysIBM_remap_index 303 -#define MultiModeDrawElementsIBM_remap_index 304 -#define DeleteFencesNV_remap_index 305 -#define FinishFenceNV_remap_index 306 -#define GenFencesNV_remap_index 307 -#define GetFenceivNV_remap_index 308 -#define IsFenceNV_remap_index 309 -#define SetFenceNV_remap_index 310 -#define TestFenceNV_remap_index 311 -#define AreProgramsResidentNV_remap_index 312 -#define BindProgramNV_remap_index 313 -#define DeleteProgramsNV_remap_index 314 -#define ExecuteProgramNV_remap_index 315 -#define GenProgramsNV_remap_index 316 -#define GetProgramParameterdvNV_remap_index 317 -#define GetProgramParameterfvNV_remap_index 318 -#define GetProgramStringNV_remap_index 319 -#define GetProgramivNV_remap_index 320 -#define GetTrackMatrixivNV_remap_index 321 -#define GetVertexAttribPointervNV_remap_index 322 -#define GetVertexAttribdvNV_remap_index 323 -#define GetVertexAttribfvNV_remap_index 324 -#define GetVertexAttribivNV_remap_index 325 -#define IsProgramNV_remap_index 326 -#define LoadProgramNV_remap_index 327 -#define ProgramParameters4dvNV_remap_index 328 -#define ProgramParameters4fvNV_remap_index 329 -#define RequestResidentProgramsNV_remap_index 330 -#define TrackMatrixNV_remap_index 331 -#define VertexAttrib1dNV_remap_index 332 -#define VertexAttrib1dvNV_remap_index 333 -#define VertexAttrib1fNV_remap_index 334 -#define VertexAttrib1fvNV_remap_index 335 -#define VertexAttrib1sNV_remap_index 336 -#define VertexAttrib1svNV_remap_index 337 -#define VertexAttrib2dNV_remap_index 338 -#define VertexAttrib2dvNV_remap_index 339 -#define VertexAttrib2fNV_remap_index 340 -#define VertexAttrib2fvNV_remap_index 341 -#define VertexAttrib2sNV_remap_index 342 -#define VertexAttrib2svNV_remap_index 343 -#define VertexAttrib3dNV_remap_index 344 -#define VertexAttrib3dvNV_remap_index 345 -#define VertexAttrib3fNV_remap_index 346 -#define VertexAttrib3fvNV_remap_index 347 -#define VertexAttrib3sNV_remap_index 348 -#define VertexAttrib3svNV_remap_index 349 -#define VertexAttrib4dNV_remap_index 350 -#define VertexAttrib4dvNV_remap_index 351 -#define VertexAttrib4fNV_remap_index 352 -#define VertexAttrib4fvNV_remap_index 353 -#define VertexAttrib4sNV_remap_index 354 -#define VertexAttrib4svNV_remap_index 355 -#define VertexAttrib4ubNV_remap_index 356 -#define VertexAttrib4ubvNV_remap_index 357 -#define VertexAttribPointerNV_remap_index 358 -#define VertexAttribs1dvNV_remap_index 359 -#define VertexAttribs1fvNV_remap_index 360 -#define VertexAttribs1svNV_remap_index 361 -#define VertexAttribs2dvNV_remap_index 362 -#define VertexAttribs2fvNV_remap_index 363 -#define VertexAttribs2svNV_remap_index 364 -#define VertexAttribs3dvNV_remap_index 365 -#define VertexAttribs3fvNV_remap_index 366 -#define VertexAttribs3svNV_remap_index 367 -#define VertexAttribs4dvNV_remap_index 368 -#define VertexAttribs4fvNV_remap_index 369 -#define VertexAttribs4svNV_remap_index 370 -#define VertexAttribs4ubvNV_remap_index 371 -#define GetTexBumpParameterfvATI_remap_index 372 -#define GetTexBumpParameterivATI_remap_index 373 -#define TexBumpParameterfvATI_remap_index 374 -#define TexBumpParameterivATI_remap_index 375 -#define AlphaFragmentOp1ATI_remap_index 376 -#define AlphaFragmentOp2ATI_remap_index 377 -#define AlphaFragmentOp3ATI_remap_index 378 -#define BeginFragmentShaderATI_remap_index 379 -#define BindFragmentShaderATI_remap_index 380 -#define ColorFragmentOp1ATI_remap_index 381 -#define ColorFragmentOp2ATI_remap_index 382 -#define ColorFragmentOp3ATI_remap_index 383 -#define DeleteFragmentShaderATI_remap_index 384 -#define EndFragmentShaderATI_remap_index 385 -#define GenFragmentShadersATI_remap_index 386 -#define PassTexCoordATI_remap_index 387 -#define SampleMapATI_remap_index 388 -#define SetFragmentShaderConstantATI_remap_index 389 -#define PointParameteriNV_remap_index 390 -#define PointParameterivNV_remap_index 391 -#define ActiveStencilFaceEXT_remap_index 392 -#define BindVertexArrayAPPLE_remap_index 393 -#define DeleteVertexArraysAPPLE_remap_index 394 -#define GenVertexArraysAPPLE_remap_index 395 -#define IsVertexArrayAPPLE_remap_index 396 -#define GetProgramNamedParameterdvNV_remap_index 397 -#define GetProgramNamedParameterfvNV_remap_index 398 -#define ProgramNamedParameter4dNV_remap_index 399 -#define ProgramNamedParameter4dvNV_remap_index 400 -#define ProgramNamedParameter4fNV_remap_index 401 -#define ProgramNamedParameter4fvNV_remap_index 402 -#define PrimitiveRestartIndexNV_remap_index 403 -#define PrimitiveRestartNV_remap_index 404 -#define DepthBoundsEXT_remap_index 405 -#define BlendEquationSeparateEXT_remap_index 406 -#define BindFramebufferEXT_remap_index 407 -#define BindRenderbufferEXT_remap_index 408 -#define CheckFramebufferStatusEXT_remap_index 409 -#define DeleteFramebuffersEXT_remap_index 410 -#define DeleteRenderbuffersEXT_remap_index 411 -#define FramebufferRenderbufferEXT_remap_index 412 -#define FramebufferTexture1DEXT_remap_index 413 -#define FramebufferTexture2DEXT_remap_index 414 -#define FramebufferTexture3DEXT_remap_index 415 -#define GenFramebuffersEXT_remap_index 416 -#define GenRenderbuffersEXT_remap_index 417 -#define GenerateMipmapEXT_remap_index 418 -#define GetFramebufferAttachmentParameterivEXT_remap_index 419 -#define GetRenderbufferParameterivEXT_remap_index 420 -#define IsFramebufferEXT_remap_index 421 -#define IsRenderbufferEXT_remap_index 422 -#define RenderbufferStorageEXT_remap_index 423 -#define BlitFramebufferEXT_remap_index 424 -#define BufferParameteriAPPLE_remap_index 425 -#define FlushMappedBufferRangeAPPLE_remap_index 426 -#define BindFragDataLocationEXT_remap_index 427 -#define GetFragDataLocationEXT_remap_index 428 -#define GetUniformuivEXT_remap_index 429 -#define GetVertexAttribIivEXT_remap_index 430 -#define GetVertexAttribIuivEXT_remap_index 431 -#define Uniform1uiEXT_remap_index 432 -#define Uniform1uivEXT_remap_index 433 -#define Uniform2uiEXT_remap_index 434 -#define Uniform2uivEXT_remap_index 435 -#define Uniform3uiEXT_remap_index 436 -#define Uniform3uivEXT_remap_index 437 -#define Uniform4uiEXT_remap_index 438 -#define Uniform4uivEXT_remap_index 439 -#define VertexAttribI1iEXT_remap_index 440 -#define VertexAttribI1ivEXT_remap_index 441 -#define VertexAttribI1uiEXT_remap_index 442 -#define VertexAttribI1uivEXT_remap_index 443 -#define VertexAttribI2iEXT_remap_index 444 -#define VertexAttribI2ivEXT_remap_index 445 -#define VertexAttribI2uiEXT_remap_index 446 -#define VertexAttribI2uivEXT_remap_index 447 -#define VertexAttribI3iEXT_remap_index 448 -#define VertexAttribI3ivEXT_remap_index 449 -#define VertexAttribI3uiEXT_remap_index 450 -#define VertexAttribI3uivEXT_remap_index 451 -#define VertexAttribI4bvEXT_remap_index 452 -#define VertexAttribI4iEXT_remap_index 453 -#define VertexAttribI4ivEXT_remap_index 454 -#define VertexAttribI4svEXT_remap_index 455 -#define VertexAttribI4ubvEXT_remap_index 456 -#define VertexAttribI4uiEXT_remap_index 457 -#define VertexAttribI4uivEXT_remap_index 458 -#define VertexAttribI4usvEXT_remap_index 459 -#define VertexAttribIPointerEXT_remap_index 460 -#define FramebufferTextureLayerEXT_remap_index 461 -#define ColorMaskIndexedEXT_remap_index 462 -#define DisableIndexedEXT_remap_index 463 -#define EnableIndexedEXT_remap_index 464 -#define GetBooleanIndexedvEXT_remap_index 465 -#define GetIntegerIndexedvEXT_remap_index 466 -#define IsEnabledIndexedEXT_remap_index 467 -#define ClearColorIiEXT_remap_index 468 -#define ClearColorIuiEXT_remap_index 469 -#define GetTexParameterIivEXT_remap_index 470 -#define GetTexParameterIuivEXT_remap_index 471 -#define TexParameterIivEXT_remap_index 472 -#define TexParameterIuivEXT_remap_index 473 -#define BeginConditionalRenderNV_remap_index 474 -#define EndConditionalRenderNV_remap_index 475 -#define BeginTransformFeedbackEXT_remap_index 476 -#define BindBufferBaseEXT_remap_index 477 -#define BindBufferOffsetEXT_remap_index 478 -#define BindBufferRangeEXT_remap_index 479 -#define EndTransformFeedbackEXT_remap_index 480 -#define GetTransformFeedbackVaryingEXT_remap_index 481 -#define TransformFeedbackVaryingsEXT_remap_index 482 -#define ProvokingVertexEXT_remap_index 483 -#define GetTexParameterPointervAPPLE_remap_index 484 -#define TextureRangeAPPLE_remap_index 485 -#define GetObjectParameterivAPPLE_remap_index 486 -#define ObjectPurgeableAPPLE_remap_index 487 -#define ObjectUnpurgeableAPPLE_remap_index 488 -#define ActiveProgramEXT_remap_index 489 -#define CreateShaderProgramEXT_remap_index 490 -#define UseShaderProgramEXT_remap_index 491 -#define TextureBarrierNV_remap_index 492 -#define StencilFuncSeparateATI_remap_index 493 -#define ProgramEnvParameters4fvEXT_remap_index 494 -#define ProgramLocalParameters4fvEXT_remap_index 495 -#define GetQueryObjecti64vEXT_remap_index 496 -#define GetQueryObjectui64vEXT_remap_index 497 -#define EGLImageTargetRenderbufferStorageOES_remap_index 498 -#define EGLImageTargetTexture2DOES_remap_index 499 +#define GetGraphicsResetStatusARB_remap_index 218 +#define GetnColorTableARB_remap_index 219 +#define GetnCompressedTexImageARB_remap_index 220 +#define GetnConvolutionFilterARB_remap_index 221 +#define GetnHistogramARB_remap_index 222 +#define GetnMapdvARB_remap_index 223 +#define GetnMapfvARB_remap_index 224 +#define GetnMapivARB_remap_index 225 +#define GetnMinmaxARB_remap_index 226 +#define GetnPixelMapfvARB_remap_index 227 +#define GetnPixelMapuivARB_remap_index 228 +#define GetnPixelMapusvARB_remap_index 229 +#define GetnPolygonStippleARB_remap_index 230 +#define GetnSeparableFilterARB_remap_index 231 +#define GetnTexImageARB_remap_index 232 +#define GetnUniformdvARB_remap_index 233 +#define GetnUniformfvARB_remap_index 234 +#define GetnUniformivARB_remap_index 235 +#define GetnUniformuivARB_remap_index 236 +#define ReadnPixelsARB_remap_index 237 +#define PolygonOffsetEXT_remap_index 238 +#define GetPixelTexGenParameterfvSGIS_remap_index 239 +#define GetPixelTexGenParameterivSGIS_remap_index 240 +#define PixelTexGenParameterfSGIS_remap_index 241 +#define PixelTexGenParameterfvSGIS_remap_index 242 +#define PixelTexGenParameteriSGIS_remap_index 243 +#define PixelTexGenParameterivSGIS_remap_index 244 +#define SampleMaskSGIS_remap_index 245 +#define SamplePatternSGIS_remap_index 246 +#define ColorPointerEXT_remap_index 247 +#define EdgeFlagPointerEXT_remap_index 248 +#define IndexPointerEXT_remap_index 249 +#define NormalPointerEXT_remap_index 250 +#define TexCoordPointerEXT_remap_index 251 +#define VertexPointerEXT_remap_index 252 +#define PointParameterfEXT_remap_index 253 +#define PointParameterfvEXT_remap_index 254 +#define LockArraysEXT_remap_index 255 +#define UnlockArraysEXT_remap_index 256 +#define SecondaryColor3bEXT_remap_index 257 +#define SecondaryColor3bvEXT_remap_index 258 +#define SecondaryColor3dEXT_remap_index 259 +#define SecondaryColor3dvEXT_remap_index 260 +#define SecondaryColor3fEXT_remap_index 261 +#define SecondaryColor3fvEXT_remap_index 262 +#define SecondaryColor3iEXT_remap_index 263 +#define SecondaryColor3ivEXT_remap_index 264 +#define SecondaryColor3sEXT_remap_index 265 +#define SecondaryColor3svEXT_remap_index 266 +#define SecondaryColor3ubEXT_remap_index 267 +#define SecondaryColor3ubvEXT_remap_index 268 +#define SecondaryColor3uiEXT_remap_index 269 +#define SecondaryColor3uivEXT_remap_index 270 +#define SecondaryColor3usEXT_remap_index 271 +#define SecondaryColor3usvEXT_remap_index 272 +#define SecondaryColorPointerEXT_remap_index 273 +#define MultiDrawArraysEXT_remap_index 274 +#define MultiDrawElementsEXT_remap_index 275 +#define FogCoordPointerEXT_remap_index 276 +#define FogCoorddEXT_remap_index 277 +#define FogCoorddvEXT_remap_index 278 +#define FogCoordfEXT_remap_index 279 +#define FogCoordfvEXT_remap_index 280 +#define PixelTexGenSGIX_remap_index 281 +#define BlendFuncSeparateEXT_remap_index 282 +#define FlushVertexArrayRangeNV_remap_index 283 +#define VertexArrayRangeNV_remap_index 284 +#define CombinerInputNV_remap_index 285 +#define CombinerOutputNV_remap_index 286 +#define CombinerParameterfNV_remap_index 287 +#define CombinerParameterfvNV_remap_index 288 +#define CombinerParameteriNV_remap_index 289 +#define CombinerParameterivNV_remap_index 290 +#define FinalCombinerInputNV_remap_index 291 +#define GetCombinerInputParameterfvNV_remap_index 292 +#define GetCombinerInputParameterivNV_remap_index 293 +#define GetCombinerOutputParameterfvNV_remap_index 294 +#define GetCombinerOutputParameterivNV_remap_index 295 +#define GetFinalCombinerInputParameterfvNV_remap_index 296 +#define GetFinalCombinerInputParameterivNV_remap_index 297 +#define ResizeBuffersMESA_remap_index 298 +#define WindowPos2dMESA_remap_index 299 +#define WindowPos2dvMESA_remap_index 300 +#define WindowPos2fMESA_remap_index 301 +#define WindowPos2fvMESA_remap_index 302 +#define WindowPos2iMESA_remap_index 303 +#define WindowPos2ivMESA_remap_index 304 +#define WindowPos2sMESA_remap_index 305 +#define WindowPos2svMESA_remap_index 306 +#define WindowPos3dMESA_remap_index 307 +#define WindowPos3dvMESA_remap_index 308 +#define WindowPos3fMESA_remap_index 309 +#define WindowPos3fvMESA_remap_index 310 +#define WindowPos3iMESA_remap_index 311 +#define WindowPos3ivMESA_remap_index 312 +#define WindowPos3sMESA_remap_index 313 +#define WindowPos3svMESA_remap_index 314 +#define WindowPos4dMESA_remap_index 315 +#define WindowPos4dvMESA_remap_index 316 +#define WindowPos4fMESA_remap_index 317 +#define WindowPos4fvMESA_remap_index 318 +#define WindowPos4iMESA_remap_index 319 +#define WindowPos4ivMESA_remap_index 320 +#define WindowPos4sMESA_remap_index 321 +#define WindowPos4svMESA_remap_index 322 +#define MultiModeDrawArraysIBM_remap_index 323 +#define MultiModeDrawElementsIBM_remap_index 324 +#define DeleteFencesNV_remap_index 325 +#define FinishFenceNV_remap_index 326 +#define GenFencesNV_remap_index 327 +#define GetFenceivNV_remap_index 328 +#define IsFenceNV_remap_index 329 +#define SetFenceNV_remap_index 330 +#define TestFenceNV_remap_index 331 +#define AreProgramsResidentNV_remap_index 332 +#define BindProgramNV_remap_index 333 +#define DeleteProgramsNV_remap_index 334 +#define ExecuteProgramNV_remap_index 335 +#define GenProgramsNV_remap_index 336 +#define GetProgramParameterdvNV_remap_index 337 +#define GetProgramParameterfvNV_remap_index 338 +#define GetProgramStringNV_remap_index 339 +#define GetProgramivNV_remap_index 340 +#define GetTrackMatrixivNV_remap_index 341 +#define GetVertexAttribPointervNV_remap_index 342 +#define GetVertexAttribdvNV_remap_index 343 +#define GetVertexAttribfvNV_remap_index 344 +#define GetVertexAttribivNV_remap_index 345 +#define IsProgramNV_remap_index 346 +#define LoadProgramNV_remap_index 347 +#define ProgramParameters4dvNV_remap_index 348 +#define ProgramParameters4fvNV_remap_index 349 +#define RequestResidentProgramsNV_remap_index 350 +#define TrackMatrixNV_remap_index 351 +#define VertexAttrib1dNV_remap_index 352 +#define VertexAttrib1dvNV_remap_index 353 +#define VertexAttrib1fNV_remap_index 354 +#define VertexAttrib1fvNV_remap_index 355 +#define VertexAttrib1sNV_remap_index 356 +#define VertexAttrib1svNV_remap_index 357 +#define VertexAttrib2dNV_remap_index 358 +#define VertexAttrib2dvNV_remap_index 359 +#define VertexAttrib2fNV_remap_index 360 +#define VertexAttrib2fvNV_remap_index 361 +#define VertexAttrib2sNV_remap_index 362 +#define VertexAttrib2svNV_remap_index 363 +#define VertexAttrib3dNV_remap_index 364 +#define VertexAttrib3dvNV_remap_index 365 +#define VertexAttrib3fNV_remap_index 366 +#define VertexAttrib3fvNV_remap_index 367 +#define VertexAttrib3sNV_remap_index 368 +#define VertexAttrib3svNV_remap_index 369 +#define VertexAttrib4dNV_remap_index 370 +#define VertexAttrib4dvNV_remap_index 371 +#define VertexAttrib4fNV_remap_index 372 +#define VertexAttrib4fvNV_remap_index 373 +#define VertexAttrib4sNV_remap_index 374 +#define VertexAttrib4svNV_remap_index 375 +#define VertexAttrib4ubNV_remap_index 376 +#define VertexAttrib4ubvNV_remap_index 377 +#define VertexAttribPointerNV_remap_index 378 +#define VertexAttribs1dvNV_remap_index 379 +#define VertexAttribs1fvNV_remap_index 380 +#define VertexAttribs1svNV_remap_index 381 +#define VertexAttribs2dvNV_remap_index 382 +#define VertexAttribs2fvNV_remap_index 383 +#define VertexAttribs2svNV_remap_index 384 +#define VertexAttribs3dvNV_remap_index 385 +#define VertexAttribs3fvNV_remap_index 386 +#define VertexAttribs3svNV_remap_index 387 +#define VertexAttribs4dvNV_remap_index 388 +#define VertexAttribs4fvNV_remap_index 389 +#define VertexAttribs4svNV_remap_index 390 +#define VertexAttribs4ubvNV_remap_index 391 +#define GetTexBumpParameterfvATI_remap_index 392 +#define GetTexBumpParameterivATI_remap_index 393 +#define TexBumpParameterfvATI_remap_index 394 +#define TexBumpParameterivATI_remap_index 395 +#define AlphaFragmentOp1ATI_remap_index 396 +#define AlphaFragmentOp2ATI_remap_index 397 +#define AlphaFragmentOp3ATI_remap_index 398 +#define BeginFragmentShaderATI_remap_index 399 +#define BindFragmentShaderATI_remap_index 400 +#define ColorFragmentOp1ATI_remap_index 401 +#define ColorFragmentOp2ATI_remap_index 402 +#define ColorFragmentOp3ATI_remap_index 403 +#define DeleteFragmentShaderATI_remap_index 404 +#define EndFragmentShaderATI_remap_index 405 +#define GenFragmentShadersATI_remap_index 406 +#define PassTexCoordATI_remap_index 407 +#define SampleMapATI_remap_index 408 +#define SetFragmentShaderConstantATI_remap_index 409 +#define PointParameteriNV_remap_index 410 +#define PointParameterivNV_remap_index 411 +#define ActiveStencilFaceEXT_remap_index 412 +#define BindVertexArrayAPPLE_remap_index 413 +#define DeleteVertexArraysAPPLE_remap_index 414 +#define GenVertexArraysAPPLE_remap_index 415 +#define IsVertexArrayAPPLE_remap_index 416 +#define GetProgramNamedParameterdvNV_remap_index 417 +#define GetProgramNamedParameterfvNV_remap_index 418 +#define ProgramNamedParameter4dNV_remap_index 419 +#define ProgramNamedParameter4dvNV_remap_index 420 +#define ProgramNamedParameter4fNV_remap_index 421 +#define ProgramNamedParameter4fvNV_remap_index 422 +#define PrimitiveRestartIndexNV_remap_index 423 +#define PrimitiveRestartNV_remap_index 424 +#define DepthBoundsEXT_remap_index 425 +#define BlendEquationSeparateEXT_remap_index 426 +#define BindFramebufferEXT_remap_index 427 +#define BindRenderbufferEXT_remap_index 428 +#define CheckFramebufferStatusEXT_remap_index 429 +#define DeleteFramebuffersEXT_remap_index 430 +#define DeleteRenderbuffersEXT_remap_index 431 +#define FramebufferRenderbufferEXT_remap_index 432 +#define FramebufferTexture1DEXT_remap_index 433 +#define FramebufferTexture2DEXT_remap_index 434 +#define FramebufferTexture3DEXT_remap_index 435 +#define GenFramebuffersEXT_remap_index 436 +#define GenRenderbuffersEXT_remap_index 437 +#define GenerateMipmapEXT_remap_index 438 +#define GetFramebufferAttachmentParameterivEXT_remap_index 439 +#define GetRenderbufferParameterivEXT_remap_index 440 +#define IsFramebufferEXT_remap_index 441 +#define IsRenderbufferEXT_remap_index 442 +#define RenderbufferStorageEXT_remap_index 443 +#define BlitFramebufferEXT_remap_index 444 +#define BufferParameteriAPPLE_remap_index 445 +#define FlushMappedBufferRangeAPPLE_remap_index 446 +#define BindFragDataLocationEXT_remap_index 447 +#define GetFragDataLocationEXT_remap_index 448 +#define GetUniformuivEXT_remap_index 449 +#define GetVertexAttribIivEXT_remap_index 450 +#define GetVertexAttribIuivEXT_remap_index 451 +#define Uniform1uiEXT_remap_index 452 +#define Uniform1uivEXT_remap_index 453 +#define Uniform2uiEXT_remap_index 454 +#define Uniform2uivEXT_remap_index 455 +#define Uniform3uiEXT_remap_index 456 +#define Uniform3uivEXT_remap_index 457 +#define Uniform4uiEXT_remap_index 458 +#define Uniform4uivEXT_remap_index 459 +#define VertexAttribI1iEXT_remap_index 460 +#define VertexAttribI1ivEXT_remap_index 461 +#define VertexAttribI1uiEXT_remap_index 462 +#define VertexAttribI1uivEXT_remap_index 463 +#define VertexAttribI2iEXT_remap_index 464 +#define VertexAttribI2ivEXT_remap_index 465 +#define VertexAttribI2uiEXT_remap_index 466 +#define VertexAttribI2uivEXT_remap_index 467 +#define VertexAttribI3iEXT_remap_index 468 +#define VertexAttribI3ivEXT_remap_index 469 +#define VertexAttribI3uiEXT_remap_index 470 +#define VertexAttribI3uivEXT_remap_index 471 +#define VertexAttribI4bvEXT_remap_index 472 +#define VertexAttribI4iEXT_remap_index 473 +#define VertexAttribI4ivEXT_remap_index 474 +#define VertexAttribI4svEXT_remap_index 475 +#define VertexAttribI4ubvEXT_remap_index 476 +#define VertexAttribI4uiEXT_remap_index 477 +#define VertexAttribI4uivEXT_remap_index 478 +#define VertexAttribI4usvEXT_remap_index 479 +#define VertexAttribIPointerEXT_remap_index 480 +#define FramebufferTextureLayerEXT_remap_index 481 +#define ColorMaskIndexedEXT_remap_index 482 +#define DisableIndexedEXT_remap_index 483 +#define EnableIndexedEXT_remap_index 484 +#define GetBooleanIndexedvEXT_remap_index 485 +#define GetIntegerIndexedvEXT_remap_index 486 +#define IsEnabledIndexedEXT_remap_index 487 +#define ClearColorIiEXT_remap_index 488 +#define ClearColorIuiEXT_remap_index 489 +#define GetTexParameterIivEXT_remap_index 490 +#define GetTexParameterIuivEXT_remap_index 491 +#define TexParameterIivEXT_remap_index 492 +#define TexParameterIuivEXT_remap_index 493 +#define BeginConditionalRenderNV_remap_index 494 +#define EndConditionalRenderNV_remap_index 495 +#define BeginTransformFeedbackEXT_remap_index 496 +#define BindBufferBaseEXT_remap_index 497 +#define BindBufferOffsetEXT_remap_index 498 +#define BindBufferRangeEXT_remap_index 499 +#define EndTransformFeedbackEXT_remap_index 500 +#define GetTransformFeedbackVaryingEXT_remap_index 501 +#define TransformFeedbackVaryingsEXT_remap_index 502 +#define ProvokingVertexEXT_remap_index 503 +#define GetTexParameterPointervAPPLE_remap_index 504 +#define TextureRangeAPPLE_remap_index 505 +#define GetObjectParameterivAPPLE_remap_index 506 +#define ObjectPurgeableAPPLE_remap_index 507 +#define ObjectUnpurgeableAPPLE_remap_index 508 +#define ActiveProgramEXT_remap_index 509 +#define CreateShaderProgramEXT_remap_index 510 +#define UseShaderProgramEXT_remap_index 511 +#define TextureBarrierNV_remap_index 512 +#define StencilFuncSeparateATI_remap_index 513 +#define ProgramEnvParameters4fvEXT_remap_index 514 +#define ProgramLocalParameters4fvEXT_remap_index 515 +#define GetQueryObjecti64vEXT_remap_index 516 +#define GetQueryObjectui64vEXT_remap_index 517 +#define EGLImageTargetRenderbufferStorageOES_remap_index 518 +#define EGLImageTargetTexture2DOES_remap_index 519 #define _gloffset_AttachShader driDispatchRemapTable[AttachShader_remap_index] #define _gloffset_CreateProgram driDispatchRemapTable[CreateProgram_remap_index] @@ -1697,6 +1737,26 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ]; #define _gloffset_GetShaderPrecisionFormat driDispatchRemapTable[GetShaderPrecisionFormat_remap_index] #define _gloffset_ReleaseShaderCompiler driDispatchRemapTable[ReleaseShaderCompiler_remap_index] #define _gloffset_ShaderBinary driDispatchRemapTable[ShaderBinary_remap_index] +#define _gloffset_GetGraphicsResetStatusARB driDispatchRemapTable[GetGraphicsResetStatusARB_remap_index] +#define _gloffset_GetnColorTableARB driDispatchRemapTable[GetnColorTableARB_remap_index] +#define _gloffset_GetnCompressedTexImageARB driDispatchRemapTable[GetnCompressedTexImageARB_remap_index] +#define _gloffset_GetnConvolutionFilterARB driDispatchRemapTable[GetnConvolutionFilterARB_remap_index] +#define _gloffset_GetnHistogramARB driDispatchRemapTable[GetnHistogramARB_remap_index] +#define _gloffset_GetnMapdvARB driDispatchRemapTable[GetnMapdvARB_remap_index] +#define _gloffset_GetnMapfvARB driDispatchRemapTable[GetnMapfvARB_remap_index] +#define _gloffset_GetnMapivARB driDispatchRemapTable[GetnMapivARB_remap_index] +#define _gloffset_GetnMinmaxARB driDispatchRemapTable[GetnMinmaxARB_remap_index] +#define _gloffset_GetnPixelMapfvARB driDispatchRemapTable[GetnPixelMapfvARB_remap_index] +#define _gloffset_GetnPixelMapuivARB driDispatchRemapTable[GetnPixelMapuivARB_remap_index] +#define _gloffset_GetnPixelMapusvARB driDispatchRemapTable[GetnPixelMapusvARB_remap_index] +#define _gloffset_GetnPolygonStippleARB driDispatchRemapTable[GetnPolygonStippleARB_remap_index] +#define _gloffset_GetnSeparableFilterARB driDispatchRemapTable[GetnSeparableFilterARB_remap_index] +#define _gloffset_GetnTexImageARB driDispatchRemapTable[GetnTexImageARB_remap_index] +#define _gloffset_GetnUniformdvARB driDispatchRemapTable[GetnUniformdvARB_remap_index] +#define _gloffset_GetnUniformfvARB driDispatchRemapTable[GetnUniformfvARB_remap_index] +#define _gloffset_GetnUniformivARB driDispatchRemapTable[GetnUniformivARB_remap_index] +#define _gloffset_GetnUniformuivARB driDispatchRemapTable[GetnUniformuivARB_remap_index] +#define _gloffset_ReadnPixelsARB driDispatchRemapTable[ReadnPixelsARB_remap_index] #define _gloffset_PolygonOffsetEXT driDispatchRemapTable[PolygonOffsetEXT_remap_index] #define _gloffset_GetPixelTexGenParameterfvSGIS driDispatchRemapTable[GetPixelTexGenParameterfvSGIS_remap_index] #define _gloffset_GetPixelTexGenParameterivSGIS driDispatchRemapTable[GetPixelTexGenParameterivSGIS_remap_index] @@ -3860,6 +3920,66 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ]; #define CALL_ShaderBinary(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *, GLenum, const GLvoid *, GLsizei)), _gloffset_ShaderBinary, parameters) #define GET_ShaderBinary(disp) GET_by_offset(disp, _gloffset_ShaderBinary) #define SET_ShaderBinary(disp, fn) SET_by_offset(disp, _gloffset_ShaderBinary, fn) +#define CALL_GetGraphicsResetStatusARB(disp, parameters) CALL_by_offset(disp, (GLenum (GLAPIENTRYP)(void)), _gloffset_GetGraphicsResetStatusARB, parameters) +#define GET_GetGraphicsResetStatusARB(disp) GET_by_offset(disp, _gloffset_GetGraphicsResetStatusARB) +#define SET_GetGraphicsResetStatusARB(disp, fn) SET_by_offset(disp, _gloffset_GetGraphicsResetStatusARB, fn) +#define CALL_GetnColorTableARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLsizei, GLvoid *)), _gloffset_GetnColorTableARB, parameters) +#define GET_GetnColorTableARB(disp) GET_by_offset(disp, _gloffset_GetnColorTableARB) +#define SET_GetnColorTableARB(disp, fn) SET_by_offset(disp, _gloffset_GetnColorTableARB, fn) +#define CALL_GetnCompressedTexImageARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLsizei, GLvoid *)), _gloffset_GetnCompressedTexImageARB, parameters) +#define GET_GetnCompressedTexImageARB(disp) GET_by_offset(disp, _gloffset_GetnCompressedTexImageARB) +#define SET_GetnCompressedTexImageARB(disp, fn) SET_by_offset(disp, _gloffset_GetnCompressedTexImageARB, fn) +#define CALL_GetnConvolutionFilterARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLsizei, GLvoid *)), _gloffset_GetnConvolutionFilterARB, parameters) +#define GET_GetnConvolutionFilterARB(disp) GET_by_offset(disp, _gloffset_GetnConvolutionFilterARB) +#define SET_GetnConvolutionFilterARB(disp, fn) SET_by_offset(disp, _gloffset_GetnConvolutionFilterARB, fn) +#define CALL_GetnHistogramARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLboolean, GLenum, GLenum, GLsizei, GLvoid *)), _gloffset_GetnHistogramARB, parameters) +#define GET_GetnHistogramARB(disp) GET_by_offset(disp, _gloffset_GetnHistogramARB) +#define SET_GetnHistogramARB(disp, fn) SET_by_offset(disp, _gloffset_GetnHistogramARB, fn) +#define CALL_GetnMapdvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, GLdouble *)), _gloffset_GetnMapdvARB, parameters) +#define GET_GetnMapdvARB(disp) GET_by_offset(disp, _gloffset_GetnMapdvARB) +#define SET_GetnMapdvARB(disp, fn) SET_by_offset(disp, _gloffset_GetnMapdvARB, fn) +#define CALL_GetnMapfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, GLfloat *)), _gloffset_GetnMapfvARB, parameters) +#define GET_GetnMapfvARB(disp) GET_by_offset(disp, _gloffset_GetnMapfvARB) +#define SET_GetnMapfvARB(disp, fn) SET_by_offset(disp, _gloffset_GetnMapfvARB, fn) +#define CALL_GetnMapivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLsizei, GLint *)), _gloffset_GetnMapivARB, parameters) +#define GET_GetnMapivARB(disp) GET_by_offset(disp, _gloffset_GetnMapivARB) +#define SET_GetnMapivARB(disp, fn) SET_by_offset(disp, _gloffset_GetnMapivARB, fn) +#define CALL_GetnMinmaxARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLboolean, GLenum, GLenum, GLsizei, GLvoid *)), _gloffset_GetnMinmaxARB, parameters) +#define GET_GetnMinmaxARB(disp) GET_by_offset(disp, _gloffset_GetnMinmaxARB) +#define SET_GetnMinmaxARB(disp, fn) SET_by_offset(disp, _gloffset_GetnMinmaxARB, fn) +#define CALL_GetnPixelMapfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLfloat *)), _gloffset_GetnPixelMapfvARB, parameters) +#define GET_GetnPixelMapfvARB(disp) GET_by_offset(disp, _gloffset_GetnPixelMapfvARB) +#define SET_GetnPixelMapfvARB(disp, fn) SET_by_offset(disp, _gloffset_GetnPixelMapfvARB, fn) +#define CALL_GetnPixelMapuivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLuint *)), _gloffset_GetnPixelMapuivARB, parameters) +#define GET_GetnPixelMapuivARB(disp) GET_by_offset(disp, _gloffset_GetnPixelMapuivARB) +#define SET_GetnPixelMapuivARB(disp, fn) SET_by_offset(disp, _gloffset_GetnPixelMapuivARB, fn) +#define CALL_GetnPixelMapusvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLsizei, GLushort *)), _gloffset_GetnPixelMapusvARB, parameters) +#define GET_GetnPixelMapusvARB(disp) GET_by_offset(disp, _gloffset_GetnPixelMapusvARB) +#define SET_GetnPixelMapusvARB(disp, fn) SET_by_offset(disp, _gloffset_GetnPixelMapusvARB, fn) +#define CALL_GetnPolygonStippleARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLubyte *)), _gloffset_GetnPolygonStippleARB, parameters) +#define GET_GetnPolygonStippleARB(disp) GET_by_offset(disp, _gloffset_GetnPolygonStippleARB) +#define SET_GetnPolygonStippleARB(disp, fn) SET_by_offset(disp, _gloffset_GetnPolygonStippleARB, fn) +#define CALL_GetnSeparableFilterARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLenum, GLsizei, GLvoid *, GLsizei, GLvoid *, GLvoid *)), _gloffset_GetnSeparableFilterARB, parameters) +#define GET_GetnSeparableFilterARB(disp) GET_by_offset(disp, _gloffset_GetnSeparableFilterARB) +#define SET_GetnSeparableFilterARB(disp, fn) SET_by_offset(disp, _gloffset_GetnSeparableFilterARB, fn) +#define CALL_GetnTexImageARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLenum, GLenum, GLsizei, GLvoid *)), _gloffset_GetnTexImageARB, parameters) +#define GET_GetnTexImageARB(disp) GET_by_offset(disp, _gloffset_GetnTexImageARB) +#define SET_GetnTexImageARB(disp, fn) SET_by_offset(disp, _gloffset_GetnTexImageARB, fn) +#define CALL_GetnUniformdvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLint, GLsizei, GLdouble *)), _gloffset_GetnUniformdvARB, parameters) +#define GET_GetnUniformdvARB(disp) GET_by_offset(disp, _gloffset_GetnUniformdvARB) +#define SET_GetnUniformdvARB(disp, fn) SET_by_offset(disp, _gloffset_GetnUniformdvARB, fn) +#define CALL_GetnUniformfvARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLint, GLsizei, GLfloat *)), _gloffset_GetnUniformfvARB, parameters) +#define GET_GetnUniformfvARB(disp) GET_by_offset(disp, _gloffset_GetnUniformfvARB) +#define SET_GetnUniformfvARB(disp, fn) SET_by_offset(disp, _gloffset_GetnUniformfvARB, fn) +#define CALL_GetnUniformivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLint, GLsizei, GLint *)), _gloffset_GetnUniformivARB, parameters) +#define GET_GetnUniformivARB(disp) GET_by_offset(disp, _gloffset_GetnUniformivARB) +#define SET_GetnUniformivARB(disp, fn) SET_by_offset(disp, _gloffset_GetnUniformivARB, fn) +#define CALL_GetnUniformuivARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLhandleARB, GLint, GLsizei, GLuint *)), _gloffset_GetnUniformuivARB, parameters) +#define GET_GetnUniformuivARB(disp) GET_by_offset(disp, _gloffset_GetnUniformuivARB) +#define SET_GetnUniformuivARB(disp, fn) SET_by_offset(disp, _gloffset_GetnUniformuivARB, fn) +#define CALL_ReadnPixelsARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLsizei, GLvoid *)), _gloffset_ReadnPixelsARB, parameters) +#define GET_ReadnPixelsARB(disp) GET_by_offset(disp, _gloffset_ReadnPixelsARB) +#define SET_ReadnPixelsARB(disp, fn) SET_by_offset(disp, _gloffset_ReadnPixelsARB, fn) #define CALL_PolygonOffsetEXT(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLfloat, GLfloat)), _gloffset_PolygonOffsetEXT, parameters) #define GET_PolygonOffsetEXT(disp) GET_by_offset(disp, _gloffset_PolygonOffsetEXT) #define SET_PolygonOffsetEXT(disp, fn) SET_by_offset(disp, _gloffset_PolygonOffsetEXT, fn) diff --git a/mesalib/src/mesa/main/histogram.c b/mesalib/src/mesa/main/histogram.c index fc79feb68..44fc1325c 100644 --- a/mesalib/src/mesa/main/histogram.c +++ b/mesalib/src/mesa/main/histogram.c @@ -1,151 +1,173 @@ -/*
- * Mesa 3-D graphics library
- * Version: 6.3
- *
- * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#include "glheader.h"
-#include "bufferobj.h"
-#include "colormac.h"
-#include "histogram.h"
-#include "macros.h"
-#include "mfeatures.h"
-#include "main/dispatch.h"
-
-
-#if FEATURE_histogram
-
-/**********************************************************************
- * API functions
- */
-
-
-/* this is defined below */
-static void GLAPIENTRY _mesa_ResetMinmax(GLenum target);
-
-
-static void GLAPIENTRY
-_mesa_GetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmax");
-}
-
-
-static void GLAPIENTRY
-_mesa_GetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogram");
-}
-
-
-static void GLAPIENTRY
-_mesa_GetHistogramParameterfv(GLenum target, GLenum pname, GLfloat *params)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogramParameterfv");
-}
-
-
-static void GLAPIENTRY
-_mesa_GetHistogramParameteriv(GLenum target, GLenum pname, GLint *params)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogramParameteriv");
-}
-
-
-static void GLAPIENTRY
-_mesa_GetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat *params)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmaxParameterfv");
-}
-
-
-static void GLAPIENTRY
-_mesa_GetMinmaxParameteriv(GLenum target, GLenum pname, GLint *params)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmaxParameteriv");
-}
-
-
-static void GLAPIENTRY
-_mesa_Histogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_OPERATION, "glHistogram");
-}
-
-
-static void GLAPIENTRY
-_mesa_Minmax(GLenum target, GLenum internalFormat, GLboolean sink)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_OPERATION, "glMinmax");
-}
-
-
-static void GLAPIENTRY
-_mesa_ResetHistogram(GLenum target)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_OPERATION, "glResetHistogram");
-}
-
-
-static void GLAPIENTRY
-_mesa_ResetMinmax(GLenum target)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- _mesa_error(ctx, GL_INVALID_OPERATION, "glResetMinmax");
-}
-
-
-void
-_mesa_init_histogram_dispatch(struct _glapi_table *disp)
-{
- SET_GetHistogram(disp, _mesa_GetHistogram);
- SET_GetHistogramParameterfv(disp, _mesa_GetHistogramParameterfv);
- SET_GetHistogramParameteriv(disp, _mesa_GetHistogramParameteriv);
- SET_GetMinmax(disp, _mesa_GetMinmax);
- SET_GetMinmaxParameterfv(disp, _mesa_GetMinmaxParameterfv);
- SET_GetMinmaxParameteriv(disp, _mesa_GetMinmaxParameteriv);
- SET_Histogram(disp, _mesa_Histogram);
- SET_Minmax(disp, _mesa_Minmax);
- SET_ResetHistogram(disp, _mesa_ResetHistogram);
- SET_ResetMinmax(disp, _mesa_ResetMinmax);
-}
-
-#endif /* FEATURE_histogram */
+/* + * Mesa 3-D graphics library + * Version: 6.3 + * + * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#include "glheader.h" +#include "bufferobj.h" +#include "colormac.h" +#include "histogram.h" +#include "macros.h" +#include "mfeatures.h" +#include "main/dispatch.h" + + +#if FEATURE_histogram + +/********************************************************************** + * API functions + */ + + +/* this is defined below */ +static void GLAPIENTRY _mesa_ResetMinmax(GLenum target); + + +static void GLAPIENTRY +_mesa_GetnMinmaxARB(GLenum target, GLboolean reset, GLenum format, + GLenum type, GLsizei bufSize, GLvoid *values) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmax"); +} + + +static void GLAPIENTRY +_mesa_GetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, + GLvoid *values) +{ + _mesa_GetnMinmaxARB(target, reset, format, type, INT_MAX, values); +} + + +static void GLAPIENTRY +_mesa_GetnHistogramARB(GLenum target, GLboolean reset, GLenum format, + GLenum type, GLsizei bufSize, GLvoid *values) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogram"); +} + + +static void GLAPIENTRY +_mesa_GetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, + GLvoid *values) +{ + _mesa_GetnHistogramARB(target, reset, format, type, INT_MAX, values); +} + + +static void GLAPIENTRY +_mesa_GetHistogramParameterfv(GLenum target, GLenum pname, GLfloat *params) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogramParameterfv"); +} + + +static void GLAPIENTRY +_mesa_GetHistogramParameteriv(GLenum target, GLenum pname, GLint *params) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogramParameteriv"); +} + + +static void GLAPIENTRY +_mesa_GetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat *params) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmaxParameterfv"); +} + + +static void GLAPIENTRY +_mesa_GetMinmaxParameteriv(GLenum target, GLenum pname, GLint *params) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmaxParameteriv"); +} + + +static void GLAPIENTRY +_mesa_Histogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_OPERATION, "glHistogram"); +} + + +static void GLAPIENTRY +_mesa_Minmax(GLenum target, GLenum internalFormat, GLboolean sink) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_OPERATION, "glMinmax"); +} + + +static void GLAPIENTRY +_mesa_ResetHistogram(GLenum target) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_OPERATION, "glResetHistogram"); +} + + +static void GLAPIENTRY +_mesa_ResetMinmax(GLenum target) +{ + GET_CURRENT_CONTEXT(ctx); + + _mesa_error(ctx, GL_INVALID_OPERATION, "glResetMinmax"); +} + + +void +_mesa_init_histogram_dispatch(struct _glapi_table *disp) +{ + SET_GetHistogram(disp, _mesa_GetHistogram); + SET_GetHistogramParameterfv(disp, _mesa_GetHistogramParameterfv); + SET_GetHistogramParameteriv(disp, _mesa_GetHistogramParameteriv); + SET_GetMinmax(disp, _mesa_GetMinmax); + SET_GetMinmaxParameterfv(disp, _mesa_GetMinmaxParameterfv); + SET_GetMinmaxParameteriv(disp, _mesa_GetMinmaxParameteriv); + SET_Histogram(disp, _mesa_Histogram); + SET_Minmax(disp, _mesa_Minmax); + SET_ResetHistogram(disp, _mesa_ResetHistogram); + SET_ResetMinmax(disp, _mesa_ResetMinmax); + + /* GL_ARB_robustness */ + SET_GetnHistogramARB(disp, _mesa_GetnHistogramARB); + SET_GetnMinmaxARB(disp, _mesa_GetnMinmaxARB); +} + +#endif /* FEATURE_histogram */ diff --git a/mesalib/src/mesa/main/mipmap.c b/mesalib/src/mesa/main/mipmap.c index e594160ad..0578631ef 100644 --- a/mesalib/src/mesa/main/mipmap.c +++ b/mesalib/src/mesa/main/mipmap.c @@ -634,6 +634,37 @@ do_row(GLenum datatype, GLuint comps, GLint srcWidth, } } + else if (datatype == GL_UNSIGNED_INT_2_10_10_10_REV && comps == 4) { + GLuint i, j, k; + const GLuint *rowA = (const GLuint *) srcRowA; + const GLuint *rowB = (const GLuint *) srcRowB; + GLuint *dst = (GLuint *) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + const GLint rowAr0 = rowA[j] & 0x3ff; + const GLint rowAr1 = rowA[k] & 0x3ff; + const GLint rowBr0 = rowB[j] & 0x3ff; + const GLint rowBr1 = rowB[k] & 0x3ff; + const GLint rowAg0 = (rowA[j] >> 10) & 0x3ff; + const GLint rowAg1 = (rowA[k] >> 10) & 0x3ff; + const GLint rowBg0 = (rowB[j] >> 10) & 0x3ff; + const GLint rowBg1 = (rowB[k] >> 10) & 0x3ff; + const GLint rowAb0 = (rowA[j] >> 20) & 0x3ff; + const GLint rowAb1 = (rowA[k] >> 20) & 0x3ff; + const GLint rowBb0 = (rowB[j] >> 20) & 0x3ff; + const GLint rowBb1 = (rowB[k] >> 20) & 0x3ff; + const GLint rowAa0 = (rowA[j] >> 30) & 0x3; + const GLint rowAa1 = (rowA[k] >> 30) & 0x3; + const GLint rowBa0 = (rowB[j] >> 30) & 0x3; + const GLint rowBa1 = (rowB[k] >> 30) & 0x3; + const GLint red = (rowAr0 + rowAr1 + rowBr0 + rowBr1) >> 2; + const GLint green = (rowAg0 + rowAg1 + rowBg0 + rowBg1) >> 2; + const GLint blue = (rowAb0 + rowAb1 + rowBb0 + rowBb1) >> 2; + const GLint alpha = (rowAa0 + rowAa1 + rowBa0 + rowBa1) >> 2; + dst[i] = (alpha << 30) | (blue << 20) | (green << 10) | red; + } + } + else { _mesa_problem(NULL, "bad format in do_row()"); } @@ -1165,6 +1196,55 @@ do_row_3D(GLenum datatype, GLuint comps, GLint srcWidth, dst[i] = (g << 4) | r; } } + else if ((datatype == GL_UNSIGNED_INT_2_10_10_10_REV) && (comps == 4)) { + DECLARE_ROW_POINTERS0(GLuint); + + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + const GLint rowAr0 = rowA[j] & 0x3ff; + const GLint rowAr1 = rowA[k] & 0x3ff; + const GLint rowBr0 = rowB[j] & 0x3ff; + const GLint rowBr1 = rowB[k] & 0x3ff; + const GLint rowCr0 = rowC[j] & 0x3ff; + const GLint rowCr1 = rowC[k] & 0x3ff; + const GLint rowDr0 = rowD[j] & 0x3ff; + const GLint rowDr1 = rowD[k] & 0x3ff; + const GLint rowAg0 = (rowA[j] >> 10) & 0x3ff; + const GLint rowAg1 = (rowA[k] >> 10) & 0x3ff; + const GLint rowBg0 = (rowB[j] >> 10) & 0x3ff; + const GLint rowBg1 = (rowB[k] >> 10) & 0x3ff; + const GLint rowCg0 = (rowC[j] >> 10) & 0x3ff; + const GLint rowCg1 = (rowC[k] >> 10) & 0x3ff; + const GLint rowDg0 = (rowD[j] >> 10) & 0x3ff; + const GLint rowDg1 = (rowD[k] >> 10) & 0x3ff; + const GLint rowAb0 = (rowA[j] >> 20) & 0x3ff; + const GLint rowAb1 = (rowA[k] >> 20) & 0x3ff; + const GLint rowBb0 = (rowB[j] >> 20) & 0x3ff; + const GLint rowBb1 = (rowB[k] >> 20) & 0x3ff; + const GLint rowCb0 = (rowC[j] >> 20) & 0x3ff; + const GLint rowCb1 = (rowC[k] >> 20) & 0x3ff; + const GLint rowDb0 = (rowD[j] >> 20) & 0x3ff; + const GLint rowDb1 = (rowD[k] >> 20) & 0x3ff; + const GLint rowAa0 = (rowA[j] >> 30) & 0x3; + const GLint rowAa1 = (rowA[k] >> 30) & 0x3; + const GLint rowBa0 = (rowB[j] >> 30) & 0x3; + const GLint rowBa1 = (rowB[k] >> 30) & 0x3; + const GLint rowCa0 = (rowC[j] >> 30) & 0x3; + const GLint rowCa1 = (rowC[k] >> 30) & 0x3; + const GLint rowDa0 = (rowD[j] >> 30) & 0x3; + const GLint rowDa1 = (rowD[k] >> 30) & 0x3; + const GLint r = FILTER_SUM_3D(rowAr0, rowAr1, rowBr0, rowBr1, + rowCr0, rowCr1, rowDr0, rowDr1); + const GLint g = FILTER_SUM_3D(rowAg0, rowAg1, rowBg0, rowBg1, + rowCg0, rowCg1, rowDg0, rowDg1); + const GLint b = FILTER_SUM_3D(rowAb0, rowAb1, rowBb0, rowBb1, + rowCb0, rowCb1, rowDb0, rowDb1); + const GLint a = FILTER_SUM_3D(rowAa0, rowAa1, rowBa0, rowBa1, + rowCa0, rowCa1, rowDa0, rowDa1); + + dst[i] = (a << 30) | (b << 20) | (g << 10) | r; + } + } else { _mesa_problem(NULL, "bad format in do_row()"); } @@ -1896,7 +1976,6 @@ _mesa_generate_mipmap(struct gl_context *ctx, GLenum target, const GLenum srcFormat = _mesa_get_format_base_format(convertFormat); GLint dstRowStride = _mesa_format_row_stride(dstImage->TexFormat, dstWidth); - ASSERT(srcFormat == GL_RGB || srcFormat == GL_RGBA); _mesa_texstore(ctx, 2, dstImage->_BaseFormat, dstImage->TexFormat, diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h index 9e2905ab2..fba65e890 100644 --- a/mesalib/src/mesa/main/mtypes.h +++ b/mesalib/src/mesa/main/mtypes.h @@ -376,7 +376,15 @@ typedef enum { FRAG_RESULT_DEPTH = 0, FRAG_RESULT_STENCIL = 1, + /* If a single color should be written to all render targets, this + * register is written. No FRAG_RESULT_DATAn will be written. + */ FRAG_RESULT_COLOR = 2, + + /* FRAG_RESULT_DATAn are the per-render-target (GLSL gl_FragData[n] + * or ARB_fragment_program fragment.color[n]) color results. If + * any are written, FRAG_RESULT_COLOR will not be written. + */ FRAG_RESULT_DATA0 = 3, FRAG_RESULT_MAX = (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS) } gl_frag_result; @@ -1923,7 +1931,6 @@ struct gl_geometry_program struct gl_fragment_program { struct gl_program Base; /**< base class */ - GLenum FogOption; GLboolean UsesKill; /**< shader uses KIL instruction */ GLboolean OriginUpperLeft; GLboolean PixelCenterInteger; @@ -2406,27 +2413,26 @@ struct gl_shared_state */ struct gl_renderbuffer { -#define RB_MAGIC 0xaabbccdd - int Magic; /** XXX TEMPORARY DEBUG INFO */ _glthread_Mutex Mutex; /**< for thread safety */ GLuint ClassID; /**< Useful for drivers */ GLuint Name; GLint RefCount; GLuint Width, Height; + GLint RowStride; /**< Padded width in units of pixels */ GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ + GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */ + + GLubyte NumSamples; + GLenum InternalFormat; /**< The user-specified format */ GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or GL_STENCIL_INDEX. */ gl_format Format; /**< The actual renderbuffer memory format */ - GLubyte NumSamples; - GLenum DataType; /**< Type of values passed to the Get/Put functions */ GLvoid *Data; /**< This may not be used by some kinds of RBs */ - GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */ - /* Used to wrap one renderbuffer around another: */ struct gl_renderbuffer *Wrapped; @@ -2740,6 +2746,9 @@ struct gl_constants /* GL_EXT_framebuffer_sRGB */ GLboolean sRGBCapable; /* can enable sRGB blend/update on FBOs */ + + /* GL_ARB_robustness */ + GLenum ResetStrategy; }; @@ -3299,6 +3308,9 @@ struct gl_context GLenum ErrorValue; /**< Last error code */ + /* GL_ARB_robustness */ + GLenum ResetStatus; + /** * Recognize and silence repeated error debug messages in buggy apps. */ diff --git a/mesalib/src/mesa/main/pack.c b/mesalib/src/mesa/main/pack.c index 02154585a..ad8ab9d00 100644 --- a/mesalib/src/mesa/main/pack.c +++ b/mesalib/src/mesa/main/pack.c @@ -37,7 +37,6 @@ #include "mtypes.h" #include "pack.h" #include "pixeltransfer.h" -#include "imports.h" /** @@ -3973,7 +3972,8 @@ _mesa_unpack_dudv_span_byte( struct gl_context *ctx, GLbitfield transferOps ) { ASSERT(dstFormat == GL_DUDV_ATI); - ASSERT(srcFormat == GL_DUDV_ATI); + ASSERT(srcFormat == GL_DUDV_ATI || + srcFormat == GL_DU8DV8_ATI); ASSERT(srcType == GL_UNSIGNED_BYTE || srcType == GL_BYTE || diff --git a/mesalib/src/mesa/main/pbo.c b/mesalib/src/mesa/main/pbo.c index dc00d423b..15e0480e9 100644 --- a/mesalib/src/mesa/main/pbo.c +++ b/mesalib/src/mesa/main/pbo.c @@ -43,7 +43,7 @@ * When we're about to read pixel data out of a PBO (via glDrawPixels, * glTexImage, etc) or write data into a PBO (via glReadPixels, * glGetTexImage, etc) we call this function to check that we're not - * going to read out of bounds. + * going to read/write out of bounds. * * XXX This would also be a convenient time to check that the PBO isn't * currently mapped. Whoever calls this function should check for that. @@ -56,43 +56,52 @@ * \param depth depth of image to read/write * \param format format of image to read/write * \param type datatype of image to read/write + * \param clientMemSize the maximum number of bytes to read/write * \param ptr the user-provided pointer/offset - * \return GL_TRUE if the PBO access is OK, GL_FALSE if the access would + * \return GL_TRUE if the buffer access is OK, GL_FALSE if the access would * go out of bounds. */ GLboolean _mesa_validate_pbo_access(GLuint dimensions, const struct gl_pixelstore_attrib *pack, GLsizei width, GLsizei height, GLsizei depth, - GLenum format, GLenum type, const GLvoid *ptr) + GLenum format, GLenum type, GLsizei clientMemSize, + const GLvoid *ptr) { - GLvoid *start, *end; + const GLvoid *start, *end, *offset; const GLubyte *sizeAddr; /* buffer size, cast to a pointer */ - if (!_mesa_is_bufferobj(pack->BufferObj)) - return GL_TRUE; /* no PBO, OK */ + /* If no PBO is bound, 'ptr' is a pointer to client memory containing + 'clientMemSize' bytes. + If a PBO is bound, 'ptr' is an offset into the bound PBO. + In that case 'clientMemSize' is ignored: we just use the PBO's size. + */ + if (!_mesa_is_bufferobj(pack->BufferObj)) { + offset = 0; + sizeAddr = ((const GLubyte *) 0) + clientMemSize; + } else { + offset = ptr; + sizeAddr = ((const GLubyte *) 0) + pack->BufferObj->Size; + } - if (pack->BufferObj->Size == 0) + if (sizeAddr == 0) /* no buffer! */ return GL_FALSE; - /* get address of first pixel we'll read */ - start = _mesa_image_address(dimensions, pack, ptr, width, height, + /* get the offset to the first pixel we'll read/write */ + start = _mesa_image_address(dimensions, pack, offset, width, height, format, type, 0, 0, 0); - /* get address just past the last pixel we'll read */ - end = _mesa_image_address(dimensions, pack, ptr, width, height, + /* get the offset to just past the last pixel we'll read/write */ + end = _mesa_image_address(dimensions, pack, offset, width, height, format, type, depth-1, height-1, width); - - sizeAddr = ((const GLubyte *) 0) + pack->BufferObj->Size; - if ((const GLubyte *) start > sizeAddr) { /* This will catch negative values / wrap-around */ return GL_FALSE; } if ((const GLubyte *) end > sizeAddr) { - /* Image read goes beyond end of buffer */ + /* Image read/write goes beyond end of buffer */ return GL_FALSE; } @@ -146,24 +155,30 @@ _mesa_map_pbo_source(struct gl_context *ctx, */ const GLvoid * _mesa_map_validate_pbo_source(struct gl_context *ctx, - GLuint dimensions, - const struct gl_pixelstore_attrib *unpack, - GLsizei width, GLsizei height, GLsizei depth, - GLenum format, GLenum type, const GLvoid *ptr, - const char *where) + GLuint dimensions, + const struct gl_pixelstore_attrib *unpack, + GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLenum type, GLsizei clientMemSize, + const GLvoid *ptr, const char *where) { ASSERT(dimensions == 1 || dimensions == 2 || dimensions == 3); - if (!_mesa_is_bufferobj(unpack->BufferObj)) { - /* non-PBO access: no validation to be done */ - return ptr; + if (!_mesa_validate_pbo_access(dimensions, unpack, width, height, depth, + format, type, clientMemSize, ptr)) { + if (_mesa_is_bufferobj(unpack->BufferObj)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "%s(out of bounds PBO access)", where); + } else { + _mesa_error(ctx, GL_INVALID_OPERATION, + "%s(out of bounds access: bufSize (%d) is too small)", + where, clientMemSize); + } + return NULL; } - if (!_mesa_validate_pbo_access(dimensions, unpack, - width, height, depth, format, type, ptr)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "%s(out of bounds PBO access)", where); - return NULL; + if (!_mesa_is_bufferobj(unpack->BufferObj)) { + /* non-PBO access: no further validation to be done */ + return ptr; } if (_mesa_bufferobj_mapped(unpack->BufferObj)) { @@ -236,24 +251,30 @@ _mesa_map_pbo_dest(struct gl_context *ctx, */ GLvoid * _mesa_map_validate_pbo_dest(struct gl_context *ctx, - GLuint dimensions, - const struct gl_pixelstore_attrib *unpack, - GLsizei width, GLsizei height, GLsizei depth, - GLenum format, GLenum type, GLvoid *ptr, - const char *where) + GLuint dimensions, + const struct gl_pixelstore_attrib *unpack, + GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLenum type, GLsizei clientMemSize, + GLvoid *ptr, const char *where) { ASSERT(dimensions == 1 || dimensions == 2 || dimensions == 3); - if (!_mesa_is_bufferobj(unpack->BufferObj)) { - /* non-PBO access: no validation to be done */ - return ptr; + if (!_mesa_validate_pbo_access(dimensions, unpack, width, height, depth, + format, type, clientMemSize, ptr)) { + if (_mesa_is_bufferobj(unpack->BufferObj)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "%s(out of bounds PBO access)", where); + } else { + _mesa_error(ctx, GL_INVALID_OPERATION, + "%s(out of bounds access: bufSize (%d) is too small)", + where, clientMemSize); + } + return NULL; } - if (!_mesa_validate_pbo_access(dimensions, unpack, - width, height, depth, format, type, ptr)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "%s(out of bounds PBO access)", where); - return NULL; + if (!_mesa_is_bufferobj(unpack->BufferObj)) { + /* non-PBO access: no further validation to be done */ + return ptr; } if (_mesa_bufferobj_mapped(unpack->BufferObj)) { @@ -281,7 +302,6 @@ _mesa_unmap_pbo_dest(struct gl_context *ctx, } - /** * Check if an unpack PBO is active prior to fetching a texture image. * If so, do bounds checking and map the buffer into main memory. @@ -302,7 +322,7 @@ _mesa_validate_pbo_teximage(struct gl_context *ctx, GLuint dimensions, return pixels; } if (!_mesa_validate_pbo_access(dimensions, unpack, width, height, depth, - format, type, pixels)) { + format, type, INT_MAX, pixels)) { _mesa_error(ctx, GL_INVALID_OPERATION, funcName, "(invalid PBO access)"); return NULL; } diff --git a/mesalib/src/mesa/main/pbo.h b/mesalib/src/mesa/main/pbo.h index 0cddd72ba..00a6e617f 100644 --- a/mesalib/src/mesa/main/pbo.h +++ b/mesalib/src/mesa/main/pbo.h @@ -34,7 +34,8 @@ extern GLboolean _mesa_validate_pbo_access(GLuint dimensions, const struct gl_pixelstore_attrib *pack, GLsizei width, GLsizei height, GLsizei depth, - GLenum format, GLenum type, const GLvoid *ptr); + GLenum format, GLenum type, GLsizei clientMemSize, + const GLvoid *ptr); extern const GLvoid * _mesa_map_pbo_source(struct gl_context *ctx, @@ -46,8 +47,8 @@ _mesa_map_validate_pbo_source(struct gl_context *ctx, GLuint dimensions, const struct gl_pixelstore_attrib *unpack, GLsizei width, GLsizei height, GLsizei depth, - GLenum format, GLenum type, const GLvoid *ptr, - const char *where); + GLenum format, GLenum type, GLsizei clientMemSize, + const GLvoid *ptr, const char *where); extern void _mesa_unmap_pbo_source(struct gl_context *ctx, @@ -63,8 +64,8 @@ _mesa_map_validate_pbo_dest(struct gl_context *ctx, GLuint dimensions, const struct gl_pixelstore_attrib *unpack, GLsizei width, GLsizei height, GLsizei depth, - GLenum format, GLenum type, GLvoid *ptr, - const char *where); + GLenum format, GLenum type, GLsizei clientMemSize, + GLvoid *ptr, const char *where); extern void _mesa_unmap_pbo_dest(struct gl_context *ctx, diff --git a/mesalib/src/mesa/main/pixel.c b/mesalib/src/mesa/main/pixel.c index da99c9b6f..775746270 100644 --- a/mesalib/src/mesa/main/pixel.c +++ b/mesalib/src/mesa/main/pixel.c @@ -145,8 +145,9 @@ store_pixelmap(struct gl_context *ctx, GLenum map, GLsizei mapsize, * Convenience wrapper for _mesa_validate_pbo_access() for gl[Get]PixelMap(). */ static GLboolean -validate_pbo_access(struct gl_context *ctx, struct gl_pixelstore_attrib *pack, - GLsizei mapsize, GLenum format, GLenum type, +validate_pbo_access(struct gl_context *ctx, + struct gl_pixelstore_attrib *pack, GLsizei mapsize, + GLenum format, GLenum type, GLsizei clientMemSize, const GLvoid *ptr) { GLboolean ok; @@ -157,7 +158,7 @@ validate_pbo_access(struct gl_context *ctx, struct gl_pixelstore_attrib *pack, pack->BufferObj); ok = _mesa_validate_pbo_access(1, &ctx->DefaultPacking, mapsize, 1, 1, - format, type, ptr); + format, type, clientMemSize, ptr); /* restore */ _mesa_reference_buffer_object(ctx, @@ -165,8 +166,14 @@ validate_pbo_access(struct gl_context *ctx, struct gl_pixelstore_attrib *pack, ctx->Shared->NullBufferObj); if (!ok) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glPixelMap(invalid PBO access)"); + if (_mesa_is_bufferobj(pack->BufferObj)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "gl[Get]PixelMap*v(out of bounds PBO access)"); + } else { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetnPixelMap*vARB(out of bounds access:" + " bufSize (%d) is too small)", clientMemSize); + } } return ok; } @@ -194,8 +201,8 @@ _mesa_PixelMapfv( GLenum map, GLsizei mapsize, const GLfloat *values ) FLUSH_VERTICES(ctx, _NEW_PIXEL); - if (!validate_pbo_access(ctx, &ctx->Unpack, mapsize, - GL_INTENSITY, GL_FLOAT, values)) { + if (!validate_pbo_access(ctx, &ctx->Unpack, mapsize, GL_INTENSITY, + GL_FLOAT, INT_MAX, values)) { return; } @@ -236,8 +243,8 @@ _mesa_PixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values ) FLUSH_VERTICES(ctx, _NEW_PIXEL); - if (!validate_pbo_access(ctx, &ctx->Unpack, mapsize, - GL_INTENSITY, GL_UNSIGNED_INT, values)) { + if (!validate_pbo_access(ctx, &ctx->Unpack, mapsize, GL_INTENSITY, + GL_UNSIGNED_INT, INT_MAX, values)) { return; } @@ -292,8 +299,8 @@ _mesa_PixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values ) FLUSH_VERTICES(ctx, _NEW_PIXEL); - if (!validate_pbo_access(ctx, &ctx->Unpack, mapsize, - GL_INTENSITY, GL_UNSIGNED_SHORT, values)) { + if (!validate_pbo_access(ctx, &ctx->Unpack, mapsize, GL_INTENSITY, + GL_UNSIGNED_SHORT, INT_MAX, values)) { return; } @@ -327,10 +334,10 @@ _mesa_PixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values ) static void GLAPIENTRY -_mesa_GetPixelMapfv( GLenum map, GLfloat *values ) +_mesa_GetnPixelMapfvARB( GLenum map, GLsizei bufSize, GLfloat *values ) { GET_CURRENT_CONTEXT(ctx); - GLuint mapsize, i; + GLint mapsize, i; const struct gl_pixelmap *pm; ASSERT_OUTSIDE_BEGIN_END(ctx); @@ -343,8 +350,8 @@ _mesa_GetPixelMapfv( GLenum map, GLfloat *values ) mapsize = pm->Size; - if (!validate_pbo_access(ctx, &ctx->Pack, mapsize, - GL_INTENSITY, GL_FLOAT, values)) { + if (!validate_pbo_access(ctx, &ctx->Pack, mapsize, GL_INTENSITY, + GL_FLOAT, bufSize, values)) { return; } @@ -372,7 +379,13 @@ _mesa_GetPixelMapfv( GLenum map, GLfloat *values ) static void GLAPIENTRY -_mesa_GetPixelMapuiv( GLenum map, GLuint *values ) +_mesa_GetPixelMapfv( GLenum map, GLfloat *values ) +{ + _mesa_GetnPixelMapfvARB(map, INT_MAX, values); +} + +static void GLAPIENTRY +_mesa_GetnPixelMapuivARB( GLenum map, GLsizei bufSize, GLuint *values ) { GET_CURRENT_CONTEXT(ctx); GLint mapsize, i; @@ -385,10 +398,11 @@ _mesa_GetPixelMapuiv( GLenum map, GLuint *values ) _mesa_error(ctx, GL_INVALID_ENUM, "glGetPixelMapuiv(map)"); return; } + mapsize = pm->Size; - if (!validate_pbo_access(ctx, &ctx->Pack, mapsize, - GL_INTENSITY, GL_UNSIGNED_INT, values)) { + if (!validate_pbo_access(ctx, &ctx->Pack, mapsize, GL_INTENSITY, + GL_UNSIGNED_INT, bufSize, values)) { return; } @@ -416,7 +430,13 @@ _mesa_GetPixelMapuiv( GLenum map, GLuint *values ) static void GLAPIENTRY -_mesa_GetPixelMapusv( GLenum map, GLushort *values ) +_mesa_GetPixelMapuiv( GLenum map, GLuint *values ) +{ + _mesa_GetnPixelMapuivARB(map, INT_MAX, values); +} + +static void GLAPIENTRY +_mesa_GetnPixelMapusvARB( GLenum map, GLsizei bufSize, GLushort *values ) { GET_CURRENT_CONTEXT(ctx); GLint mapsize, i; @@ -429,10 +449,11 @@ _mesa_GetPixelMapusv( GLenum map, GLushort *values ) _mesa_error(ctx, GL_INVALID_ENUM, "glGetPixelMapusv(map)"); return; } + mapsize = pm->Size; - if (!validate_pbo_access(ctx, &ctx->Pack, mapsize, - GL_INTENSITY, GL_UNSIGNED_SHORT, values)) { + if (!validate_pbo_access(ctx, &ctx->Pack, mapsize, GL_INTENSITY, + GL_UNSIGNED_SHORT, bufSize, values)) { return; } @@ -467,6 +488,12 @@ _mesa_GetPixelMapusv( GLenum map, GLushort *values ) } +static void GLAPIENTRY +_mesa_GetPixelMapusv( GLenum map, GLushort *values ) +{ + _mesa_GetnPixelMapusvARB(map, INT_MAX, values); +} + /**********************************************************************/ /***** glPixelTransfer *****/ @@ -634,6 +661,11 @@ _mesa_init_pixel_dispatch(struct _glapi_table *disp) SET_PixelTransferf(disp, _mesa_PixelTransferf); SET_PixelTransferi(disp, _mesa_PixelTransferi); SET_PixelZoom(disp, _mesa_PixelZoom); + + /* GL_ARB_robustness */ + SET_GetnPixelMapfvARB(disp, _mesa_GetnPixelMapfvARB); + SET_GetnPixelMapuivARB(disp, _mesa_GetnPixelMapuivARB); + SET_GetnPixelMapusvARB(disp, _mesa_GetnPixelMapusvARB); } diff --git a/mesalib/src/mesa/main/polygon.c b/mesalib/src/mesa/main/polygon.c index ff4232ecc..addca0228 100644 --- a/mesalib/src/mesa/main/polygon.c +++ b/mesalib/src/mesa/main/polygon.c @@ -195,7 +195,8 @@ _mesa_polygon_stipple(struct gl_context *ctx, const GLubyte *pattern) { pattern = _mesa_map_validate_pbo_source(ctx, 2, &ctx->Unpack, 32, 32, 1, - GL_COLOR_INDEX, GL_BITMAP, pattern, + GL_COLOR_INDEX, GL_BITMAP, + INT_MAX, pattern, "glPolygonStipple"); if (!pattern) return; @@ -231,7 +232,7 @@ _mesa_PolygonStipple( const GLubyte *pattern ) * Called by glPolygonStipple. */ void GLAPIENTRY -_mesa_GetPolygonStipple( GLubyte *dest ) +_mesa_GetnPolygonStippleARB( GLsizei bufSize, GLubyte *dest ) { GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); @@ -241,8 +242,8 @@ _mesa_GetPolygonStipple( GLubyte *dest ) dest = _mesa_map_validate_pbo_dest(ctx, 2, &ctx->Pack, 32, 32, 1, - GL_COLOR_INDEX, GL_BITMAP, dest, - "glGetPolygonStipple"); + GL_COLOR_INDEX, GL_BITMAP, + bufSize, dest, "glGetPolygonStipple"); if (!dest) return; @@ -253,6 +254,13 @@ _mesa_GetPolygonStipple( GLubyte *dest ) void GLAPIENTRY +_mesa_GetPolygonStipple( GLubyte *dest ) +{ + _mesa_GetnPolygonStippleARB(INT_MAX, dest); +} + + +void GLAPIENTRY _mesa_PolygonOffset( GLfloat factor, GLfloat units ) { GET_CURRENT_CONTEXT(ctx); diff --git a/mesalib/src/mesa/main/polygon.h b/mesalib/src/mesa/main/polygon.h index 1357d4b01..35f222f26 100644 --- a/mesalib/src/mesa/main/polygon.h +++ b/mesalib/src/mesa/main/polygon.h @@ -1,67 +1,70 @@ -/**
- * \file polygon.h
- * Polygon operations.
- */
-
-/*
- * Mesa 3-D graphics library
- * Version: 6.5.1
- *
- * Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#ifndef POLYGON_H
-#define POLYGON_H
-
-
-#include "glheader.h"
-
-struct gl_context;
-
-extern void
-_mesa_polygon_stipple(struct gl_context *ctx, const GLubyte *pattern);
-
-
-extern void GLAPIENTRY
-_mesa_CullFace( GLenum mode );
-
-extern void GLAPIENTRY
-_mesa_FrontFace( GLenum mode );
-
-extern void GLAPIENTRY
-_mesa_PolygonMode( GLenum face, GLenum mode );
-
-extern void GLAPIENTRY
-_mesa_PolygonOffset( GLfloat factor, GLfloat units );
-
-extern void GLAPIENTRY
-_mesa_PolygonOffsetEXT( GLfloat factor, GLfloat bias );
-
-extern void GLAPIENTRY
-_mesa_PolygonStipple( const GLubyte *mask );
-
-extern void GLAPIENTRY
-_mesa_GetPolygonStipple( GLubyte *mask );
-
-extern void
-_mesa_init_polygon( struct gl_context * ctx );
-
-#endif
+/** + * \file polygon.h + * Polygon operations. + */ + +/* + * Mesa 3-D graphics library + * Version: 6.5.1 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef POLYGON_H +#define POLYGON_H + + +#include "glheader.h" + +struct gl_context; + +extern void GLAPIENTRY +_mesa_GetnPolygonStippleARB( GLsizei bufSize, GLubyte *dest ); + +extern void +_mesa_polygon_stipple(struct gl_context *ctx, const GLubyte *pattern); + + +extern void GLAPIENTRY +_mesa_CullFace( GLenum mode ); + +extern void GLAPIENTRY +_mesa_FrontFace( GLenum mode ); + +extern void GLAPIENTRY +_mesa_PolygonMode( GLenum face, GLenum mode ); + +extern void GLAPIENTRY +_mesa_PolygonOffset( GLfloat factor, GLfloat units ); + +extern void GLAPIENTRY +_mesa_PolygonOffsetEXT( GLfloat factor, GLfloat bias ); + +extern void GLAPIENTRY +_mesa_PolygonStipple( const GLubyte *mask ); + +extern void GLAPIENTRY +_mesa_GetPolygonStipple( GLubyte *mask ); + +extern void +_mesa_init_polygon( struct gl_context * ctx ); + +#endif diff --git a/mesalib/src/mesa/main/readpix.c b/mesalib/src/mesa/main/readpix.c index 864e5b6dc..0331a8ca2 100644 --- a/mesalib/src/mesa/main/readpix.c +++ b/mesalib/src/mesa/main/readpix.c @@ -1,244 +1,257 @@ -/*
- * Mesa 3-D graphics library
- * Version: 7.1
- *
- * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include "glheader.h"
-#include "imports.h"
-#include "bufferobj.h"
-#include "context.h"
-#include "enums.h"
-#include "readpix.h"
-#include "framebuffer.h"
-#include "formats.h"
-#include "image.h"
-#include "mtypes.h"
-#include "pbo.h"
-#include "state.h"
-
-
-/**
- * Do error checking of the format/type parameters to glReadPixels and
- * glDrawPixels.
- * \param drawing if GL_TRUE do checking for DrawPixels, else do checking
- * for ReadPixels.
- * \return GL_TRUE if error detected, GL_FALSE if no errors
- */
-GLboolean
-_mesa_error_check_format_type(struct gl_context *ctx, GLenum format,
- GLenum type, GLboolean drawing)
-{
- const char *readDraw = drawing ? "Draw" : "Read";
- const GLboolean reading = !drawing;
-
- /* state validation should have already been done */
- ASSERT(ctx->NewState == 0x0);
-
- if (ctx->Extensions.EXT_packed_depth_stencil
- && type == GL_UNSIGNED_INT_24_8_EXT
- && format != GL_DEPTH_STENCIL_EXT) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "gl%sPixels(format is not GL_DEPTH_STENCIL_EXT)", readDraw);
- return GL_TRUE;
- }
-
- /* basic combinations test */
- if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
- _mesa_error(ctx, GL_INVALID_ENUM,
- "gl%sPixels(format or type)", readDraw);
- return GL_TRUE;
- }
-
- /* additional checks */
- switch (format) {
- case GL_RG:
- case GL_RED:
- case GL_GREEN:
- case GL_BLUE:
- case GL_ALPHA:
- case GL_LUMINANCE:
- case GL_LUMINANCE_ALPHA:
- case GL_RGB:
- case GL_BGR:
- case GL_RGBA:
- case GL_BGRA:
- case GL_ABGR_EXT:
- case GL_RED_INTEGER_EXT:
- case GL_GREEN_INTEGER_EXT:
- case GL_BLUE_INTEGER_EXT:
- case GL_ALPHA_INTEGER_EXT:
- case GL_RGB_INTEGER_EXT:
- case GL_RGBA_INTEGER_EXT:
- case GL_BGR_INTEGER_EXT:
- case GL_BGRA_INTEGER_EXT:
- case GL_LUMINANCE_INTEGER_EXT:
- case GL_LUMINANCE_ALPHA_INTEGER_EXT:
- if (!drawing) {
- /* reading */
- if (!_mesa_source_buffer_exists(ctx, GL_COLOR)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glReadPixels(no color buffer)");
- return GL_TRUE;
- }
- }
- break;
- case GL_COLOR_INDEX:
- if (drawing) {
- if (ctx->PixelMaps.ItoR.Size == 0 ||
- ctx->PixelMaps.ItoG.Size == 0 ||
- ctx->PixelMaps.ItoB.Size == 0) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glDrawPixels(drawing color index pixels into RGB buffer)");
- return GL_TRUE;
- }
- }
- else {
- /* reading */
- if (!_mesa_source_buffer_exists(ctx, GL_COLOR)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glReadPixels(no color buffer)");
- return GL_TRUE;
- }
- /* We no longer support CI-mode color buffers so trying to read
- * GL_COLOR_INDEX pixels is always an error.
- */
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glReadPixels(color buffer is RGB)");
- return GL_TRUE;
- }
- break;
- case GL_STENCIL_INDEX:
- if ((drawing && !_mesa_dest_buffer_exists(ctx, format)) ||
- (reading && !_mesa_source_buffer_exists(ctx, format))) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "gl%sPixels(no stencil buffer)", readDraw);
- return GL_TRUE;
- }
- break;
- case GL_DEPTH_COMPONENT:
- if ((drawing && !_mesa_dest_buffer_exists(ctx, format))) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "gl%sPixels(no depth buffer)", readDraw);
- return GL_TRUE;
- }
- break;
- case GL_DEPTH_STENCIL_EXT:
- if (!ctx->Extensions.EXT_packed_depth_stencil ||
- type != GL_UNSIGNED_INT_24_8_EXT) {
- _mesa_error(ctx, GL_INVALID_ENUM, "gl%sPixels(type)", readDraw);
- return GL_TRUE;
- }
- if ((drawing && !_mesa_dest_buffer_exists(ctx, format)) ||
- (reading && !_mesa_source_buffer_exists(ctx, format))) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "gl%sPixels(no depth or stencil buffer)", readDraw);
- return GL_TRUE;
- }
- break;
- default:
- /* this should have been caught in _mesa_is_legal_format_type() */
- _mesa_problem(ctx, "unexpected format in _mesa_%sPixels", readDraw);
- return GL_TRUE;
- }
-
- /* no errors */
- return GL_FALSE;
-}
-
-
-
-void GLAPIENTRY
-_mesa_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
- GLenum format, GLenum type, GLvoid *pixels )
-{
- GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- FLUSH_CURRENT(ctx, 0);
-
- if (MESA_VERBOSE & VERBOSE_API)
- _mesa_debug(ctx, "glReadPixels(%d, %d, %s, %s, %p)\n",
- width, height,
- _mesa_lookup_enum_by_nr(format),
- _mesa_lookup_enum_by_nr(type),
- pixels);
-
- if (width < 0 || height < 0) {
- _mesa_error( ctx, GL_INVALID_VALUE,
- "glReadPixels(width=%d height=%d)", width, height );
- return;
- }
-
- if (ctx->NewState)
- _mesa_update_state(ctx);
-
- if (_mesa_error_check_format_type(ctx, format, type, GL_FALSE)) {
- /* found an error */
- return;
- }
-
- /* Check that the destination format and source buffer are both
- * integer-valued or both non-integer-valued.
- */
- if (ctx->Extensions.EXT_texture_integer && _mesa_is_color_format(format)) {
- const struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
- const GLboolean srcInteger = _mesa_is_format_integer_color(rb->Format);
- const GLboolean dstInteger = _mesa_is_integer_format(format);
- if (dstInteger != srcInteger) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glReadPixels(integer / non-integer format mismatch");
- return;
- }
- }
-
- if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
- _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
- "glReadPixels(incomplete framebuffer)" );
- return;
- }
-
- if (!_mesa_source_buffer_exists(ctx, format)) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(no readbuffer)");
- return;
- }
-
- if (width == 0 || height == 0)
- return; /* nothing to do */
-
- if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) {
- if (!_mesa_validate_pbo_access(2, &ctx->Pack, width, height, 1,
- format, type, pixels)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glReadPixels(invalid PBO access)");
- return;
- }
-
- if (_mesa_bufferobj_mapped(ctx->Pack.BufferObj)) {
- /* buffer is mapped - that's an error */
- _mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(PBO is mapped)");
- return;
- }
- }
-
- ctx->Driver.ReadPixels(ctx, x, y, width, height,
- format, type, &ctx->Pack, pixels);
-}
+/* + * Mesa 3-D graphics library + * Version: 7.1 + * + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "glheader.h" +#include "imports.h" +#include "bufferobj.h" +#include "context.h" +#include "enums.h" +#include "readpix.h" +#include "framebuffer.h" +#include "formats.h" +#include "image.h" +#include "mtypes.h" +#include "pbo.h" +#include "state.h" + + +/** + * Do error checking of the format/type parameters to glReadPixels and + * glDrawPixels. + * \param drawing if GL_TRUE do checking for DrawPixels, else do checking + * for ReadPixels. + * \return GL_TRUE if error detected, GL_FALSE if no errors + */ +GLboolean +_mesa_error_check_format_type(struct gl_context *ctx, GLenum format, + GLenum type, GLboolean drawing) +{ + const char *readDraw = drawing ? "Draw" : "Read"; + const GLboolean reading = !drawing; + + /* state validation should have already been done */ + ASSERT(ctx->NewState == 0x0); + + if (ctx->Extensions.EXT_packed_depth_stencil + && type == GL_UNSIGNED_INT_24_8_EXT + && format != GL_DEPTH_STENCIL_EXT) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "gl%sPixels(format is not GL_DEPTH_STENCIL_EXT)", readDraw); + return GL_TRUE; + } + + /* basic combinations test */ + if (!_mesa_is_legal_format_and_type(ctx, format, type)) { + _mesa_error(ctx, GL_INVALID_ENUM, + "gl%sPixels(format or type)", readDraw); + return GL_TRUE; + } + + /* additional checks */ + switch (format) { + case GL_RG: + case GL_RED: + case GL_GREEN: + case GL_BLUE: + case GL_ALPHA: + case GL_LUMINANCE: + case GL_LUMINANCE_ALPHA: + case GL_RGB: + case GL_BGR: + case GL_RGBA: + case GL_BGRA: + case GL_ABGR_EXT: + case GL_RED_INTEGER_EXT: + case GL_GREEN_INTEGER_EXT: + case GL_BLUE_INTEGER_EXT: + case GL_ALPHA_INTEGER_EXT: + case GL_RGB_INTEGER_EXT: + case GL_RGBA_INTEGER_EXT: + case GL_BGR_INTEGER_EXT: + case GL_BGRA_INTEGER_EXT: + case GL_LUMINANCE_INTEGER_EXT: + case GL_LUMINANCE_ALPHA_INTEGER_EXT: + if (!drawing) { + /* reading */ + if (!_mesa_source_buffer_exists(ctx, GL_COLOR)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glReadPixels(no color buffer)"); + return GL_TRUE; + } + } + break; + case GL_COLOR_INDEX: + if (drawing) { + if (ctx->PixelMaps.ItoR.Size == 0 || + ctx->PixelMaps.ItoG.Size == 0 || + ctx->PixelMaps.ItoB.Size == 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glDrawPixels(drawing color index pixels into RGB buffer)"); + return GL_TRUE; + } + } + else { + /* reading */ + if (!_mesa_source_buffer_exists(ctx, GL_COLOR)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glReadPixels(no color buffer)"); + return GL_TRUE; + } + /* We no longer support CI-mode color buffers so trying to read + * GL_COLOR_INDEX pixels is always an error. + */ + _mesa_error(ctx, GL_INVALID_OPERATION, + "glReadPixels(color buffer is RGB)"); + return GL_TRUE; + } + break; + case GL_STENCIL_INDEX: + if ((drawing && !_mesa_dest_buffer_exists(ctx, format)) || + (reading && !_mesa_source_buffer_exists(ctx, format))) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "gl%sPixels(no stencil buffer)", readDraw); + return GL_TRUE; + } + break; + case GL_DEPTH_COMPONENT: + if ((drawing && !_mesa_dest_buffer_exists(ctx, format))) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "gl%sPixels(no depth buffer)", readDraw); + return GL_TRUE; + } + break; + case GL_DEPTH_STENCIL_EXT: + if (!ctx->Extensions.EXT_packed_depth_stencil || + type != GL_UNSIGNED_INT_24_8_EXT) { + _mesa_error(ctx, GL_INVALID_ENUM, "gl%sPixels(type)", readDraw); + return GL_TRUE; + } + if ((drawing && !_mesa_dest_buffer_exists(ctx, format)) || + (reading && !_mesa_source_buffer_exists(ctx, format))) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "gl%sPixels(no depth or stencil buffer)", readDraw); + return GL_TRUE; + } + break; + default: + /* this should have been caught in _mesa_is_legal_format_type() */ + _mesa_problem(ctx, "unexpected format in _mesa_%sPixels", readDraw); + return GL_TRUE; + } + + /* no errors */ + return GL_FALSE; +} + + + +void GLAPIENTRY +_mesa_ReadnPixelsARB( GLint x, GLint y, GLsizei width, GLsizei height, + GLenum format, GLenum type, GLsizei bufSize, + GLvoid *pixels ) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + FLUSH_CURRENT(ctx, 0); + + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(ctx, "glReadPixels(%d, %d, %s, %s, %p)\n", + width, height, + _mesa_lookup_enum_by_nr(format), + _mesa_lookup_enum_by_nr(type), + pixels); + + if (width < 0 || height < 0) { + _mesa_error( ctx, GL_INVALID_VALUE, + "glReadPixels(width=%d height=%d)", width, height ); + return; + } + + if (ctx->NewState) + _mesa_update_state(ctx); + + if (_mesa_error_check_format_type(ctx, format, type, GL_FALSE)) { + /* found an error */ + return; + } + + /* Check that the destination format and source buffer are both + * integer-valued or both non-integer-valued. + */ + if (ctx->Extensions.EXT_texture_integer && _mesa_is_color_format(format)) { + const struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer; + const GLboolean srcInteger = _mesa_is_format_integer_color(rb->Format); + const GLboolean dstInteger = _mesa_is_integer_format(format); + if (dstInteger != srcInteger) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glReadPixels(integer / non-integer format mismatch"); + return; + } + } + + if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glReadPixels(incomplete framebuffer)" ); + return; + } + + if (!_mesa_source_buffer_exists(ctx, format)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(no readbuffer)"); + return; + } + + if (width == 0 || height == 0) + return; /* nothing to do */ + + if (!_mesa_validate_pbo_access(2, &ctx->Pack, width, height, 1, + format, type, bufSize, pixels)) { + if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glReadPixels(out of bounds PBO access)"); + } else { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glReadnPixelsARB(out of bounds access:" + " bufSize (%d) is too small)", bufSize); + } + return; + } + + if (_mesa_is_bufferobj(ctx->Pack.BufferObj) && + _mesa_bufferobj_mapped(ctx->Pack.BufferObj)) { + /* buffer is mapped - that's an error */ + _mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(PBO is mapped)"); + return; + } + + ctx->Driver.ReadPixels(ctx, x, y, width, height, + format, type, &ctx->Pack, pixels); +} + +void GLAPIENTRY +_mesa_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, + GLenum format, GLenum type, GLvoid *pixels ) +{ + _mesa_ReadnPixelsARB(x, y, width, height, format, type, INT_MAX, pixels); +} diff --git a/mesalib/src/mesa/main/readpix.h b/mesalib/src/mesa/main/readpix.h index 4ed5eb5a4..f6bb3d6e2 100644 --- a/mesalib/src/mesa/main/readpix.h +++ b/mesalib/src/mesa/main/readpix.h @@ -1,43 +1,47 @@ -/*
- * Mesa 3-D graphics library
- * Version: 7.1
- *
- * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#ifndef READPIXELS_H
-#define READPIXELS_H
-
-
-#include "glheader.h"
-
-struct gl_context;
-
-extern GLboolean
-_mesa_error_check_format_type(struct gl_context *ctx, GLenum format, GLenum type,
- GLboolean drawing);
-
-extern void GLAPIENTRY
-_mesa_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
- GLenum format, GLenum type, GLvoid *pixels );
-
-
-#endif
+/* + * Mesa 3-D graphics library + * Version: 7.1 + * + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef READPIXELS_H +#define READPIXELS_H + + +#include "glheader.h" + +struct gl_context; + +extern GLboolean +_mesa_error_check_format_type(struct gl_context *ctx, GLenum format, GLenum type, + GLboolean drawing); + +extern void GLAPIENTRY +_mesa_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, + GLenum format, GLenum type, GLvoid *pixels ); + +extern void GLAPIENTRY +_mesa_ReadnPixelsARB( GLint x, GLint y, GLsizei width, GLsizei height, + GLenum format, GLenum type, GLsizei bufSize, + GLvoid *pixels ); + +#endif diff --git a/mesalib/src/mesa/main/remap_helper.h b/mesalib/src/mesa/main/remap_helper.h index 72a2f1e0b..f506efcef 100644 --- a/mesalib/src/mesa/main/remap_helper.h +++ b/mesalib/src/mesa/main/remap_helper.h @@ -181,4663 +181,4743 @@ static const char _mesa_function_pool[] = "iiii\0" "glFramebufferTexture\0" "\0" - /* _mesa_function_pool[965]: VertexAttribI1ivEXT (will be remapped) */ - "ip\0" - "glVertexAttribI1ivEXT\0" - "glVertexAttribI1iv\0" + /* _mesa_function_pool[965]: GetGraphicsResetStatusARB (will be remapped) */ "\0" - /* _mesa_function_pool[1010]: TexImage4DSGIS (dynamic) */ + "glGetGraphicsResetStatusARB\0" + "\0" + /* _mesa_function_pool[995]: TexImage4DSGIS (dynamic) */ "iiiiiiiiiip\0" "glTexImage4DSGIS\0" "\0" - /* _mesa_function_pool[1040]: PolygonStipple (offset 175) */ + /* _mesa_function_pool[1025]: PolygonStipple (offset 175) */ "p\0" "glPolygonStipple\0" "\0" - /* _mesa_function_pool[1060]: WindowPos2dvMESA (will be remapped) */ + /* _mesa_function_pool[1045]: WindowPos2dvMESA (will be remapped) */ "p\0" "glWindowPos2dv\0" "glWindowPos2dvARB\0" "glWindowPos2dvMESA\0" "\0" - /* _mesa_function_pool[1115]: ReplacementCodeuiColor3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[1100]: ReplacementCodeuiColor3fVertex3fvSUN (dynamic) */ "ppp\0" "glReplacementCodeuiColor3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[1159]: BlendEquationSeparateEXT (will be remapped) */ + /* _mesa_function_pool[1144]: BlendEquationSeparateEXT (will be remapped) */ "ii\0" "glBlendEquationSeparate\0" "glBlendEquationSeparateEXT\0" "glBlendEquationSeparateATI\0" "\0" - /* _mesa_function_pool[1241]: ListParameterfSGIX (dynamic) */ + /* _mesa_function_pool[1226]: ListParameterfSGIX (dynamic) */ "iif\0" "glListParameterfSGIX\0" "\0" - /* _mesa_function_pool[1267]: SecondaryColor3bEXT (will be remapped) */ + /* _mesa_function_pool[1252]: SecondaryColor3bEXT (will be remapped) */ "iii\0" "glSecondaryColor3b\0" "glSecondaryColor3bEXT\0" "\0" - /* _mesa_function_pool[1313]: TexCoord4fColor4fNormal3fVertex4fvSUN (dynamic) */ + /* _mesa_function_pool[1298]: TexCoord4fColor4fNormal3fVertex4fvSUN (dynamic) */ "pppp\0" "glTexCoord4fColor4fNormal3fVertex4fvSUN\0" "\0" - /* _mesa_function_pool[1359]: GetPixelMapfv (offset 271) */ + /* _mesa_function_pool[1344]: GetnPolygonStippleARB (will be remapped) */ + "ip\0" + "glGetnPolygonStippleARB\0" + "\0" + /* _mesa_function_pool[1372]: GetPixelMapfv (offset 271) */ "ip\0" "glGetPixelMapfv\0" "\0" - /* _mesa_function_pool[1379]: Color3uiv (offset 22) */ + /* _mesa_function_pool[1392]: Color3uiv (offset 22) */ "p\0" "glColor3uiv\0" "\0" - /* _mesa_function_pool[1394]: IsEnabled (offset 286) */ + /* _mesa_function_pool[1407]: IsEnabled (offset 286) */ "i\0" "glIsEnabled\0" "\0" - /* _mesa_function_pool[1409]: VertexAttrib4svNV (will be remapped) */ + /* _mesa_function_pool[1422]: VertexAttrib4svNV (will be remapped) */ "ip\0" "glVertexAttrib4svNV\0" "\0" - /* _mesa_function_pool[1433]: EvalCoord2fv (offset 235) */ + /* _mesa_function_pool[1446]: EvalCoord2fv (offset 235) */ "p\0" "glEvalCoord2fv\0" "\0" - /* _mesa_function_pool[1451]: GetBufferSubDataARB (will be remapped) */ + /* _mesa_function_pool[1464]: GetBufferSubDataARB (will be remapped) */ "iiip\0" "glGetBufferSubData\0" "glGetBufferSubDataARB\0" "\0" - /* _mesa_function_pool[1498]: BufferSubDataARB (will be remapped) */ + /* _mesa_function_pool[1511]: BufferSubDataARB (will be remapped) */ "iiip\0" "glBufferSubData\0" "glBufferSubDataARB\0" "\0" - /* _mesa_function_pool[1539]: TexCoord2fColor4ubVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[1552]: TexCoord2fColor4ubVertex3fvSUN (dynamic) */ "ppp\0" "glTexCoord2fColor4ubVertex3fvSUN\0" "\0" - /* _mesa_function_pool[1577]: AttachShader (will be remapped) */ + /* _mesa_function_pool[1590]: AttachShader (will be remapped) */ "ii\0" "glAttachShader\0" "\0" - /* _mesa_function_pool[1596]: VertexAttrib2fARB (will be remapped) */ + /* _mesa_function_pool[1609]: GetCombinerInputParameterfvNV (will be remapped) */ + "iiiip\0" + "glGetCombinerInputParameterfvNV\0" + "\0" + /* _mesa_function_pool[1648]: VertexAttrib2fARB (will be remapped) */ "iff\0" "glVertexAttrib2f\0" "glVertexAttrib2fARB\0" "\0" - /* _mesa_function_pool[1638]: GetDebugLogLengthMESA (dynamic) */ + /* _mesa_function_pool[1690]: GetDebugLogLengthMESA (dynamic) */ "iii\0" "glGetDebugLogLengthMESA\0" "\0" - /* _mesa_function_pool[1667]: GetMapiv (offset 268) */ + /* _mesa_function_pool[1719]: GetMapiv (offset 268) */ "iip\0" "glGetMapiv\0" "\0" - /* _mesa_function_pool[1683]: VertexAttrib3fARB (will be remapped) */ + /* _mesa_function_pool[1735]: VertexAttrib3fARB (will be remapped) */ "ifff\0" "glVertexAttrib3f\0" "glVertexAttrib3fARB\0" "\0" - /* _mesa_function_pool[1726]: Indexubv (offset 316) */ + /* _mesa_function_pool[1778]: Indexubv (offset 316) */ "p\0" "glIndexubv\0" "\0" - /* _mesa_function_pool[1740]: GetQueryivARB (will be remapped) */ + /* _mesa_function_pool[1792]: GetQueryivARB (will be remapped) */ "iip\0" "glGetQueryiv\0" "glGetQueryivARB\0" "\0" - /* _mesa_function_pool[1774]: TexImage3D (offset 371) */ + /* _mesa_function_pool[1826]: TexImage3D (offset 371) */ "iiiiiiiiip\0" "glTexImage3D\0" "glTexImage3DEXT\0" "\0" - /* _mesa_function_pool[1815]: BindFragDataLocationEXT (will be remapped) */ + /* _mesa_function_pool[1867]: BindFragDataLocationEXT (will be remapped) */ "iip\0" "glBindFragDataLocationEXT\0" "glBindFragDataLocation\0" "\0" - /* _mesa_function_pool[1869]: ReplacementCodeuiVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[1921]: ReplacementCodeuiVertex3fvSUN (dynamic) */ "pp\0" "glReplacementCodeuiVertex3fvSUN\0" "\0" - /* _mesa_function_pool[1905]: EdgeFlagPointer (offset 312) */ + /* _mesa_function_pool[1957]: EdgeFlagPointer (offset 312) */ "ip\0" "glEdgeFlagPointer\0" "\0" - /* _mesa_function_pool[1927]: Color3ubv (offset 20) */ + /* _mesa_function_pool[1979]: Color3ubv (offset 20) */ "p\0" "glColor3ubv\0" "\0" - /* _mesa_function_pool[1942]: GetQueryObjectivARB (will be remapped) */ + /* _mesa_function_pool[1994]: GetQueryObjectivARB (will be remapped) */ "iip\0" "glGetQueryObjectiv\0" "glGetQueryObjectivARB\0" "\0" - /* _mesa_function_pool[1988]: Vertex3dv (offset 135) */ + /* _mesa_function_pool[2040]: Vertex3dv (offset 135) */ "p\0" "glVertex3dv\0" "\0" - /* _mesa_function_pool[2003]: ReplacementCodeuiTexCoord2fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[2055]: ReplacementCodeuiTexCoord2fVertex3fvSUN (dynamic) */ "ppp\0" "glReplacementCodeuiTexCoord2fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[2050]: CompressedTexSubImage2DARB (will be remapped) */ + /* _mesa_function_pool[2102]: CompressedTexSubImage2DARB (will be remapped) */ "iiiiiiiip\0" "glCompressedTexSubImage2D\0" "glCompressedTexSubImage2DARB\0" "\0" - /* _mesa_function_pool[2116]: CombinerOutputNV (will be remapped) */ + /* _mesa_function_pool[2168]: CombinerOutputNV (will be remapped) */ "iiiiiiiiii\0" "glCombinerOutputNV\0" "\0" - /* _mesa_function_pool[2147]: VertexAttribs3fvNV (will be remapped) */ + /* _mesa_function_pool[2199]: VertexAttribs3fvNV (will be remapped) */ "iip\0" "glVertexAttribs3fvNV\0" "\0" - /* _mesa_function_pool[2173]: Uniform2fARB (will be remapped) */ + /* _mesa_function_pool[2225]: GetnMapivARB (will be remapped) */ + "iiip\0" + "glGetnMapivARB\0" + "\0" + /* _mesa_function_pool[2246]: Uniform2fARB (will be remapped) */ "iff\0" "glUniform2f\0" "glUniform2fARB\0" "\0" - /* _mesa_function_pool[2205]: LightModeliv (offset 166) */ + /* _mesa_function_pool[2278]: LightModeliv (offset 166) */ "ip\0" "glLightModeliv\0" "\0" - /* _mesa_function_pool[2224]: VertexAttrib1svARB (will be remapped) */ + /* _mesa_function_pool[2297]: VertexAttrib1svARB (will be remapped) */ "ip\0" "glVertexAttrib1sv\0" "glVertexAttrib1svARB\0" "\0" - /* _mesa_function_pool[2267]: VertexAttribs1dvNV (will be remapped) */ + /* _mesa_function_pool[2340]: VertexAttribs1dvNV (will be remapped) */ "iip\0" "glVertexAttribs1dvNV\0" "\0" - /* _mesa_function_pool[2293]: Uniform2ivARB (will be remapped) */ + /* _mesa_function_pool[2366]: Uniform2ivARB (will be remapped) */ "iip\0" "glUniform2iv\0" "glUniform2ivARB\0" "\0" - /* _mesa_function_pool[2327]: GetImageTransformParameterfvHP (dynamic) */ + /* _mesa_function_pool[2400]: GetImageTransformParameterfvHP (dynamic) */ "iip\0" "glGetImageTransformParameterfvHP\0" "\0" - /* _mesa_function_pool[2365]: Normal3bv (offset 53) */ + /* _mesa_function_pool[2438]: Normal3bv (offset 53) */ "p\0" "glNormal3bv\0" "\0" - /* _mesa_function_pool[2380]: TexGeniv (offset 193) */ + /* _mesa_function_pool[2453]: TexGeniv (offset 193) */ "iip\0" "glTexGeniv\0" "\0" - /* _mesa_function_pool[2396]: WeightubvARB (dynamic) */ + /* _mesa_function_pool[2469]: WeightubvARB (dynamic) */ "ip\0" "glWeightubvARB\0" "\0" - /* _mesa_function_pool[2415]: VertexAttrib1fvNV (will be remapped) */ + /* _mesa_function_pool[2488]: VertexAttrib1fvNV (will be remapped) */ "ip\0" "glVertexAttrib1fvNV\0" "\0" - /* _mesa_function_pool[2439]: Vertex3iv (offset 139) */ + /* _mesa_function_pool[2512]: Vertex3iv (offset 139) */ "p\0" "glVertex3iv\0" "\0" - /* _mesa_function_pool[2454]: CopyConvolutionFilter1D (offset 354) */ + /* _mesa_function_pool[2527]: CopyConvolutionFilter1D (offset 354) */ "iiiii\0" "glCopyConvolutionFilter1D\0" "glCopyConvolutionFilter1DEXT\0" "\0" - /* _mesa_function_pool[2516]: VertexAttribI1uiEXT (will be remapped) */ + /* _mesa_function_pool[2589]: VertexAttribI1uiEXT (will be remapped) */ "ii\0" "glVertexAttribI1uiEXT\0" "glVertexAttribI1ui\0" "\0" - /* _mesa_function_pool[2561]: ReplacementCodeuiNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[2634]: ReplacementCodeuiNormal3fVertex3fSUN (dynamic) */ "iffffff\0" "glReplacementCodeuiNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[2609]: DeleteSync (will be remapped) */ + /* _mesa_function_pool[2682]: DeleteSync (will be remapped) */ "i\0" "glDeleteSync\0" "\0" - /* _mesa_function_pool[2625]: FragmentMaterialfvSGIX (dynamic) */ + /* _mesa_function_pool[2698]: FragmentMaterialfvSGIX (dynamic) */ "iip\0" "glFragmentMaterialfvSGIX\0" "\0" - /* _mesa_function_pool[2655]: BlendColor (offset 336) */ + /* _mesa_function_pool[2728]: BlendColor (offset 336) */ "ffff\0" "glBlendColor\0" "glBlendColorEXT\0" "\0" - /* _mesa_function_pool[2690]: UniformMatrix4fvARB (will be remapped) */ + /* _mesa_function_pool[2763]: UniformMatrix4fvARB (will be remapped) */ "iiip\0" "glUniformMatrix4fv\0" "glUniformMatrix4fvARB\0" "\0" - /* _mesa_function_pool[2737]: DeleteVertexArraysAPPLE (will be remapped) */ + /* _mesa_function_pool[2810]: DeleteVertexArraysAPPLE (will be remapped) */ "ip\0" "glDeleteVertexArrays\0" "glDeleteVertexArraysAPPLE\0" "\0" - /* _mesa_function_pool[2788]: TexBuffer (will be remapped) */ + /* _mesa_function_pool[2861]: TexBuffer (will be remapped) */ "iii\0" "glTexBuffer\0" "\0" - /* _mesa_function_pool[2805]: ReadInstrumentsSGIX (dynamic) */ + /* _mesa_function_pool[2878]: ReadInstrumentsSGIX (dynamic) */ "i\0" "glReadInstrumentsSGIX\0" "\0" - /* _mesa_function_pool[2830]: CallLists (offset 3) */ + /* _mesa_function_pool[2903]: CallLists (offset 3) */ "iip\0" "glCallLists\0" "\0" - /* _mesa_function_pool[2847]: UniformMatrix2x4fv (will be remapped) */ + /* _mesa_function_pool[2920]: UniformMatrix2x4fv (will be remapped) */ "iiip\0" "glUniformMatrix2x4fv\0" "\0" - /* _mesa_function_pool[2874]: Color4ubVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[2947]: ReadnPixelsARB (will be remapped) */ + "iiiiiiip\0" + "glReadnPixelsARB\0" + "\0" + /* _mesa_function_pool[2974]: Color4ubVertex3fvSUN (dynamic) */ "pp\0" "glColor4ubVertex3fvSUN\0" "\0" - /* _mesa_function_pool[2901]: Normal3iv (offset 59) */ + /* _mesa_function_pool[3001]: Normal3iv (offset 59) */ "p\0" "glNormal3iv\0" "\0" - /* _mesa_function_pool[2916]: PassThrough (offset 199) */ + /* _mesa_function_pool[3016]: PassThrough (offset 199) */ "f\0" "glPassThrough\0" "\0" - /* _mesa_function_pool[2933]: GetVertexAttribIivEXT (will be remapped) */ + /* _mesa_function_pool[3033]: GetnPixelMapusvARB (will be remapped) */ "iip\0" - "glGetVertexAttribIivEXT\0" - "glGetVertexAttribIiv\0" + "glGetnPixelMapusvARB\0" "\0" - /* _mesa_function_pool[2983]: TexParameterIivEXT (will be remapped) */ + /* _mesa_function_pool[3059]: TexParameterIivEXT (will be remapped) */ "iip\0" "glTexParameterIivEXT\0" "glTexParameterIiv\0" "\0" - /* _mesa_function_pool[3027]: FramebufferTextureLayerEXT (will be remapped) */ + /* _mesa_function_pool[3103]: FramebufferTextureLayerEXT (will be remapped) */ "iiiii\0" "glFramebufferTextureLayer\0" "glFramebufferTextureLayerEXT\0" "\0" - /* _mesa_function_pool[3089]: GetListParameterfvSGIX (dynamic) */ + /* _mesa_function_pool[3165]: GetListParameterfvSGIX (dynamic) */ "iip\0" "glGetListParameterfvSGIX\0" "\0" - /* _mesa_function_pool[3119]: Viewport (offset 305) */ + /* _mesa_function_pool[3195]: Viewport (offset 305) */ "iiii\0" "glViewport\0" "\0" - /* _mesa_function_pool[3136]: VertexAttrib4NusvARB (will be remapped) */ + /* _mesa_function_pool[3212]: VertexAttrib4NusvARB (will be remapped) */ "ip\0" "glVertexAttrib4Nusv\0" "glVertexAttrib4NusvARB\0" "\0" - /* _mesa_function_pool[3183]: WindowPos4svMESA (will be remapped) */ + /* _mesa_function_pool[3259]: WindowPos4svMESA (will be remapped) */ "p\0" "glWindowPos4svMESA\0" "\0" - /* _mesa_function_pool[3205]: CreateProgramObjectARB (will be remapped) */ + /* _mesa_function_pool[3281]: CreateProgramObjectARB (will be remapped) */ "\0" "glCreateProgramObjectARB\0" "\0" - /* _mesa_function_pool[3232]: DeleteTransformFeedbacks (will be remapped) */ + /* _mesa_function_pool[3308]: DeleteTransformFeedbacks (will be remapped) */ "ip\0" "glDeleteTransformFeedbacks\0" "\0" - /* _mesa_function_pool[3263]: UniformMatrix4x3fv (will be remapped) */ + /* _mesa_function_pool[3339]: UniformMatrix4x3fv (will be remapped) */ "iiip\0" "glUniformMatrix4x3fv\0" "\0" - /* _mesa_function_pool[3290]: PrioritizeTextures (offset 331) */ + /* _mesa_function_pool[3366]: PrioritizeTextures (offset 331) */ "ipp\0" "glPrioritizeTextures\0" "glPrioritizeTexturesEXT\0" "\0" - /* _mesa_function_pool[3340]: VertexAttribI3uiEXT (will be remapped) */ + /* _mesa_function_pool[3416]: VertexAttribI3uiEXT (will be remapped) */ "iiii\0" "glVertexAttribI3uiEXT\0" "glVertexAttribI3ui\0" "\0" - /* _mesa_function_pool[3387]: AsyncMarkerSGIX (dynamic) */ + /* _mesa_function_pool[3463]: AsyncMarkerSGIX (dynamic) */ "i\0" "glAsyncMarkerSGIX\0" "\0" - /* _mesa_function_pool[3408]: GlobalAlphaFactorubSUN (dynamic) */ + /* _mesa_function_pool[3484]: GlobalAlphaFactorubSUN (dynamic) */ "i\0" "glGlobalAlphaFactorubSUN\0" "\0" - /* _mesa_function_pool[3436]: ClearColorIuiEXT (will be remapped) */ + /* _mesa_function_pool[3512]: ClearColorIuiEXT (will be remapped) */ "iiii\0" "glClearColorIuiEXT\0" "\0" - /* _mesa_function_pool[3461]: ClearDebugLogMESA (dynamic) */ + /* _mesa_function_pool[3537]: ClearDebugLogMESA (dynamic) */ "iii\0" "glClearDebugLogMESA\0" "\0" - /* _mesa_function_pool[3486]: Uniform4uiEXT (will be remapped) */ + /* _mesa_function_pool[3562]: Uniform4uiEXT (will be remapped) */ "iiiii\0" "glUniform4uiEXT\0" "glUniform4ui\0" "\0" - /* _mesa_function_pool[3522]: ResetHistogram (offset 369) */ + /* _mesa_function_pool[3598]: ResetHistogram (offset 369) */ "i\0" "glResetHistogram\0" "glResetHistogramEXT\0" "\0" - /* _mesa_function_pool[3562]: GetProgramNamedParameterfvNV (will be remapped) */ + /* _mesa_function_pool[3638]: GetProgramNamedParameterfvNV (will be remapped) */ "iipp\0" "glGetProgramNamedParameterfvNV\0" "\0" - /* _mesa_function_pool[3599]: PointParameterfEXT (will be remapped) */ + /* _mesa_function_pool[3675]: PointParameterfEXT (will be remapped) */ "if\0" "glPointParameterf\0" "glPointParameterfARB\0" "glPointParameterfEXT\0" "glPointParameterfSGIS\0" "\0" - /* _mesa_function_pool[3685]: LoadIdentityDeformationMapSGIX (dynamic) */ + /* _mesa_function_pool[3761]: LoadIdentityDeformationMapSGIX (dynamic) */ "i\0" "glLoadIdentityDeformationMapSGIX\0" "\0" - /* _mesa_function_pool[3721]: GenFencesNV (will be remapped) */ + /* _mesa_function_pool[3797]: GenFencesNV (will be remapped) */ "ip\0" "glGenFencesNV\0" "\0" - /* _mesa_function_pool[3739]: ImageTransformParameterfHP (dynamic) */ + /* _mesa_function_pool[3815]: ImageTransformParameterfHP (dynamic) */ "iif\0" "glImageTransformParameterfHP\0" "\0" - /* _mesa_function_pool[3773]: MatrixIndexusvARB (dynamic) */ + /* _mesa_function_pool[3849]: MatrixIndexusvARB (dynamic) */ "ip\0" "glMatrixIndexusvARB\0" "\0" - /* _mesa_function_pool[3797]: DrawElementsBaseVertex (will be remapped) */ + /* _mesa_function_pool[3873]: DrawElementsBaseVertex (will be remapped) */ "iiipi\0" "glDrawElementsBaseVertex\0" "\0" - /* _mesa_function_pool[3829]: DisableVertexAttribArrayARB (will be remapped) */ + /* _mesa_function_pool[3905]: DisableVertexAttribArrayARB (will be remapped) */ "i\0" "glDisableVertexAttribArray\0" "glDisableVertexAttribArrayARB\0" "\0" - /* _mesa_function_pool[3889]: TexCoord2sv (offset 109) */ + /* _mesa_function_pool[3965]: GetnConvolutionFilterARB (will be remapped) */ + "iiiip\0" + "glGetnConvolutionFilterARB\0" + "\0" + /* _mesa_function_pool[3999]: TexCoord2sv (offset 109) */ "p\0" "glTexCoord2sv\0" "\0" - /* _mesa_function_pool[3906]: Vertex4dv (offset 143) */ + /* _mesa_function_pool[4016]: Vertex4dv (offset 143) */ "p\0" "glVertex4dv\0" "\0" - /* _mesa_function_pool[3921]: StencilMaskSeparate (will be remapped) */ + /* _mesa_function_pool[4031]: StencilMaskSeparate (will be remapped) */ "ii\0" "glStencilMaskSeparate\0" "\0" - /* _mesa_function_pool[3947]: ProgramLocalParameter4dARB (will be remapped) */ + /* _mesa_function_pool[4057]: ProgramLocalParameter4dARB (will be remapped) */ "iidddd\0" "glProgramLocalParameter4dARB\0" "\0" - /* _mesa_function_pool[3984]: CompressedTexImage3DARB (will be remapped) */ + /* _mesa_function_pool[4094]: CompressedTexImage3DARB (will be remapped) */ "iiiiiiiip\0" "glCompressedTexImage3D\0" "glCompressedTexImage3DARB\0" "\0" - /* _mesa_function_pool[4044]: Color3sv (offset 18) */ + /* _mesa_function_pool[4154]: Color3sv (offset 18) */ "p\0" "glColor3sv\0" "\0" - /* _mesa_function_pool[4058]: GetConvolutionParameteriv (offset 358) */ + /* _mesa_function_pool[4168]: GetConvolutionParameteriv (offset 358) */ "iip\0" "glGetConvolutionParameteriv\0" "glGetConvolutionParameterivEXT\0" "\0" - /* _mesa_function_pool[4122]: DeleteSamplers (will be remapped) */ + /* _mesa_function_pool[4232]: DeleteSamplers (will be remapped) */ "ip\0" "glDeleteSamplers\0" "\0" - /* _mesa_function_pool[4143]: VertexAttrib1fARB (will be remapped) */ + /* _mesa_function_pool[4253]: VertexAttrib1fARB (will be remapped) */ "if\0" "glVertexAttrib1f\0" "glVertexAttrib1fARB\0" "\0" - /* _mesa_function_pool[4184]: Vertex2dv (offset 127) */ + /* _mesa_function_pool[4294]: Vertex2dv (offset 127) */ "p\0" "glVertex2dv\0" "\0" - /* _mesa_function_pool[4199]: TestFenceNV (will be remapped) */ + /* _mesa_function_pool[4309]: TestFenceNV (will be remapped) */ "i\0" "glTestFenceNV\0" "\0" - /* _mesa_function_pool[4216]: GetVertexAttribIuivEXT (will be remapped) */ + /* _mesa_function_pool[4326]: GetVertexAttribIuivEXT (will be remapped) */ "iip\0" "glGetVertexAttribIuivEXT\0" "glGetVertexAttribIuiv\0" "\0" - /* _mesa_function_pool[4268]: MultiTexCoord1fvARB (offset 379) */ + /* _mesa_function_pool[4378]: MultiTexCoord1fvARB (offset 379) */ "ip\0" "glMultiTexCoord1fv\0" "glMultiTexCoord1fvARB\0" "\0" - /* _mesa_function_pool[4313]: TexCoord3iv (offset 115) */ + /* _mesa_function_pool[4423]: TexCoord3iv (offset 115) */ "p\0" "glTexCoord3iv\0" "\0" - /* _mesa_function_pool[4330]: Uniform2uivEXT (will be remapped) */ + /* _mesa_function_pool[4440]: Uniform2uivEXT (will be remapped) */ "iip\0" "glUniform2uivEXT\0" "glUniform2uiv\0" "\0" - /* _mesa_function_pool[4366]: ColorFragmentOp2ATI (will be remapped) */ + /* _mesa_function_pool[4476]: ColorFragmentOp2ATI (will be remapped) */ "iiiiiiiiii\0" "glColorFragmentOp2ATI\0" "\0" - /* _mesa_function_pool[4400]: SecondaryColorPointerListIBM (dynamic) */ + /* _mesa_function_pool[4510]: SecondaryColorPointerListIBM (dynamic) */ "iiipi\0" "glSecondaryColorPointerListIBM\0" "\0" - /* _mesa_function_pool[4438]: GetPixelTexGenParameterivSGIS (will be remapped) */ + /* _mesa_function_pool[4548]: GetPixelTexGenParameterivSGIS (will be remapped) */ "ip\0" "glGetPixelTexGenParameterivSGIS\0" "\0" - /* _mesa_function_pool[4474]: Color3fv (offset 14) */ + /* _mesa_function_pool[4584]: Color3fv (offset 14) */ "p\0" "glColor3fv\0" "\0" - /* _mesa_function_pool[4488]: VertexAttrib4fNV (will be remapped) */ - "iffff\0" - "glVertexAttrib4fNV\0" + /* _mesa_function_pool[4598]: GetnPixelMapfvARB (will be remapped) */ + "iip\0" + "glGetnPixelMapfvARB\0" "\0" - /* _mesa_function_pool[4514]: ReplacementCodeubSUN (dynamic) */ + /* _mesa_function_pool[4623]: ReplacementCodeubSUN (dynamic) */ "i\0" "glReplacementCodeubSUN\0" "\0" - /* _mesa_function_pool[4540]: FinishAsyncSGIX (dynamic) */ + /* _mesa_function_pool[4649]: FinishAsyncSGIX (dynamic) */ "p\0" "glFinishAsyncSGIX\0" "\0" - /* _mesa_function_pool[4561]: GetDebugLogMESA (dynamic) */ + /* _mesa_function_pool[4670]: GetnUniformfvARB (will be remapped) */ + "iiip\0" + "glGetnUniformfvARB\0" + "\0" + /* _mesa_function_pool[4695]: GetDebugLogMESA (dynamic) */ "iiiipp\0" "glGetDebugLogMESA\0" "\0" - /* _mesa_function_pool[4587]: FogCoorddEXT (will be remapped) */ + /* _mesa_function_pool[4721]: FogCoorddEXT (will be remapped) */ "d\0" "glFogCoordd\0" "glFogCoorddEXT\0" "\0" - /* _mesa_function_pool[4617]: BeginConditionalRenderNV (will be remapped) */ + /* _mesa_function_pool[4751]: BeginConditionalRenderNV (will be remapped) */ "ii\0" "glBeginConditionalRenderNV\0" "glBeginConditionalRender\0" "\0" - /* _mesa_function_pool[4673]: Color4ubVertex3fSUN (dynamic) */ + /* _mesa_function_pool[4807]: Color4ubVertex3fSUN (dynamic) */ "iiiifff\0" "glColor4ubVertex3fSUN\0" "\0" - /* _mesa_function_pool[4704]: FogCoordfEXT (will be remapped) */ + /* _mesa_function_pool[4838]: FogCoordfEXT (will be remapped) */ "f\0" "glFogCoordf\0" "glFogCoordfEXT\0" "\0" - /* _mesa_function_pool[4734]: PointSize (offset 173) */ + /* _mesa_function_pool[4868]: PointSize (offset 173) */ "f\0" "glPointSize\0" "\0" - /* _mesa_function_pool[4749]: VertexAttribI2uivEXT (will be remapped) */ + /* _mesa_function_pool[4883]: VertexAttribI2uivEXT (will be remapped) */ "ip\0" "glVertexAttribI2uivEXT\0" "glVertexAttribI2uiv\0" "\0" - /* _mesa_function_pool[4796]: TexCoord2fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[4930]: TexCoord2fVertex3fSUN (dynamic) */ "fffff\0" "glTexCoord2fVertex3fSUN\0" "\0" - /* _mesa_function_pool[4827]: PopName (offset 200) */ + /* _mesa_function_pool[4961]: PopName (offset 200) */ "\0" "glPopName\0" "\0" - /* _mesa_function_pool[4839]: GetSamplerParameterfv (will be remapped) */ + /* _mesa_function_pool[4973]: GetSamplerParameterfv (will be remapped) */ "iip\0" "glGetSamplerParameterfv\0" "\0" - /* _mesa_function_pool[4868]: GlobalAlphaFactoriSUN (dynamic) */ + /* _mesa_function_pool[5002]: GlobalAlphaFactoriSUN (dynamic) */ "i\0" "glGlobalAlphaFactoriSUN\0" "\0" - /* _mesa_function_pool[4895]: VertexAttrib2dNV (will be remapped) */ + /* _mesa_function_pool[5029]: VertexAttrib2dNV (will be remapped) */ "idd\0" "glVertexAttrib2dNV\0" "\0" - /* _mesa_function_pool[4919]: GetProgramInfoLog (will be remapped) */ + /* _mesa_function_pool[5053]: GetProgramInfoLog (will be remapped) */ "iipp\0" "glGetProgramInfoLog\0" "\0" - /* _mesa_function_pool[4945]: VertexAttrib4NbvARB (will be remapped) */ + /* _mesa_function_pool[5079]: VertexAttrib4NbvARB (will be remapped) */ "ip\0" "glVertexAttrib4Nbv\0" "glVertexAttrib4NbvARB\0" "\0" - /* _mesa_function_pool[4990]: GetActiveAttribARB (will be remapped) */ + /* _mesa_function_pool[5124]: GetActiveAttribARB (will be remapped) */ "iiipppp\0" "glGetActiveAttrib\0" "glGetActiveAttribARB\0" "\0" - /* _mesa_function_pool[5038]: Vertex4sv (offset 149) */ + /* _mesa_function_pool[5172]: Vertex4sv (offset 149) */ "p\0" "glVertex4sv\0" "\0" - /* _mesa_function_pool[5053]: VertexAttrib4ubNV (will be remapped) */ + /* _mesa_function_pool[5187]: VertexAttrib4ubNV (will be remapped) */ "iiiii\0" "glVertexAttrib4ubNV\0" "\0" - /* _mesa_function_pool[5080]: ClampColor (will be remapped) */ + /* _mesa_function_pool[5214]: VertexAttribI1ivEXT (will be remapped) */ + "ip\0" + "glVertexAttribI1ivEXT\0" + "glVertexAttribI1iv\0" + "\0" + /* _mesa_function_pool[5259]: ClampColor (will be remapped) */ "ii\0" "glClampColor\0" "\0" - /* _mesa_function_pool[5097]: TextureRangeAPPLE (will be remapped) */ + /* _mesa_function_pool[5276]: TextureRangeAPPLE (will be remapped) */ "iip\0" "glTextureRangeAPPLE\0" "\0" - /* _mesa_function_pool[5122]: GetTexEnvfv (offset 276) */ + /* _mesa_function_pool[5301]: GetTexEnvfv (offset 276) */ "iip\0" "glGetTexEnvfv\0" "\0" - /* _mesa_function_pool[5141]: BindTransformFeedback (will be remapped) */ + /* _mesa_function_pool[5320]: BindTransformFeedback (will be remapped) */ "ii\0" "glBindTransformFeedback\0" "\0" - /* _mesa_function_pool[5169]: TexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[5348]: TexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */ "ffffffffffff\0" "glTexCoord2fColor4fNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[5222]: Indexub (offset 315) */ + /* _mesa_function_pool[5401]: Indexub (offset 315) */ "i\0" "glIndexub\0" "\0" - /* _mesa_function_pool[5235]: TexEnvi (offset 186) */ + /* _mesa_function_pool[5414]: VertexAttrib4fNV (will be remapped) */ + "iffff\0" + "glVertexAttrib4fNV\0" + "\0" + /* _mesa_function_pool[5440]: TexEnvi (offset 186) */ "iii\0" "glTexEnvi\0" "\0" - /* _mesa_function_pool[5250]: GetClipPlane (offset 259) */ + /* _mesa_function_pool[5455]: GetClipPlane (offset 259) */ "ip\0" "glGetClipPlane\0" "\0" - /* _mesa_function_pool[5269]: CombinerParameterfvNV (will be remapped) */ + /* _mesa_function_pool[5474]: CombinerParameterfvNV (will be remapped) */ "ip\0" "glCombinerParameterfvNV\0" "\0" - /* _mesa_function_pool[5297]: VertexAttribs3dvNV (will be remapped) */ + /* _mesa_function_pool[5502]: VertexAttribs3dvNV (will be remapped) */ "iip\0" "glVertexAttribs3dvNV\0" "\0" - /* _mesa_function_pool[5323]: VertexAttribI2uiEXT (will be remapped) */ + /* _mesa_function_pool[5528]: VertexAttribI2uiEXT (will be remapped) */ "iii\0" "glVertexAttribI2uiEXT\0" "glVertexAttribI2ui\0" "\0" - /* _mesa_function_pool[5369]: VertexAttribs4fvNV (will be remapped) */ + /* _mesa_function_pool[5574]: VertexAttribs4fvNV (will be remapped) */ "iip\0" "glVertexAttribs4fvNV\0" "\0" - /* _mesa_function_pool[5395]: VertexArrayRangeNV (will be remapped) */ + /* _mesa_function_pool[5600]: VertexArrayRangeNV (will be remapped) */ "ip\0" "glVertexArrayRangeNV\0" "\0" - /* _mesa_function_pool[5420]: FragmentLightiSGIX (dynamic) */ + /* _mesa_function_pool[5625]: FragmentLightiSGIX (dynamic) */ "iii\0" "glFragmentLightiSGIX\0" "\0" - /* _mesa_function_pool[5446]: PolygonOffsetEXT (will be remapped) */ + /* _mesa_function_pool[5651]: PolygonOffsetEXT (will be remapped) */ "ff\0" "glPolygonOffsetEXT\0" "\0" - /* _mesa_function_pool[5469]: VertexAttribI4uivEXT (will be remapped) */ + /* _mesa_function_pool[5674]: VertexAttribI4uivEXT (will be remapped) */ "ip\0" "glVertexAttribI4uivEXT\0" "glVertexAttribI4uiv\0" "\0" - /* _mesa_function_pool[5516]: PollAsyncSGIX (dynamic) */ + /* _mesa_function_pool[5721]: PollAsyncSGIX (dynamic) */ "p\0" "glPollAsyncSGIX\0" "\0" - /* _mesa_function_pool[5535]: DeleteFragmentShaderATI (will be remapped) */ + /* _mesa_function_pool[5740]: DeleteFragmentShaderATI (will be remapped) */ "i\0" "glDeleteFragmentShaderATI\0" "\0" - /* _mesa_function_pool[5564]: Scaled (offset 301) */ + /* _mesa_function_pool[5769]: Scaled (offset 301) */ "ddd\0" "glScaled\0" "\0" - /* _mesa_function_pool[5578]: ResumeTransformFeedback (will be remapped) */ + /* _mesa_function_pool[5783]: ResumeTransformFeedback (will be remapped) */ "\0" "glResumeTransformFeedback\0" "\0" - /* _mesa_function_pool[5606]: Scalef (offset 302) */ + /* _mesa_function_pool[5811]: Scalef (offset 302) */ "fff\0" "glScalef\0" "\0" - /* _mesa_function_pool[5620]: TexCoord2fNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[5825]: TexCoord2fNormal3fVertex3fvSUN (dynamic) */ "ppp\0" "glTexCoord2fNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[5658]: ProgramEnvParameters4fvEXT (will be remapped) */ + /* _mesa_function_pool[5863]: ProgramEnvParameters4fvEXT (will be remapped) */ "iiip\0" "glProgramEnvParameters4fvEXT\0" "\0" - /* _mesa_function_pool[5693]: MultTransposeMatrixdARB (will be remapped) */ + /* _mesa_function_pool[5898]: MultTransposeMatrixdARB (will be remapped) */ "p\0" "glMultTransposeMatrixd\0" "glMultTransposeMatrixdARB\0" "\0" - /* _mesa_function_pool[5745]: ColorMaskIndexedEXT (will be remapped) */ + /* _mesa_function_pool[5950]: ColorMaskIndexedEXT (will be remapped) */ "iiiii\0" "glColorMaskIndexedEXT\0" "glColorMaski\0" "\0" - /* _mesa_function_pool[5787]: ObjectUnpurgeableAPPLE (will be remapped) */ + /* _mesa_function_pool[5992]: ObjectUnpurgeableAPPLE (will be remapped) */ "iii\0" "glObjectUnpurgeableAPPLE\0" "\0" - /* _mesa_function_pool[5817]: AlphaFunc (offset 240) */ + /* _mesa_function_pool[6022]: AlphaFunc (offset 240) */ "if\0" "glAlphaFunc\0" "\0" - /* _mesa_function_pool[5833]: WindowPos2svMESA (will be remapped) */ + /* _mesa_function_pool[6038]: WindowPos2svMESA (will be remapped) */ "p\0" "glWindowPos2sv\0" "glWindowPos2svARB\0" "glWindowPos2svMESA\0" "\0" - /* _mesa_function_pool[5888]: EdgeFlag (offset 41) */ + /* _mesa_function_pool[6093]: EdgeFlag (offset 41) */ "i\0" "glEdgeFlag\0" "\0" - /* _mesa_function_pool[5902]: TexCoord2iv (offset 107) */ + /* _mesa_function_pool[6107]: TexCoord2iv (offset 107) */ "p\0" "glTexCoord2iv\0" "\0" - /* _mesa_function_pool[5919]: CompressedTexImage1DARB (will be remapped) */ + /* _mesa_function_pool[6124]: CompressedTexImage1DARB (will be remapped) */ "iiiiiip\0" "glCompressedTexImage1D\0" "glCompressedTexImage1DARB\0" "\0" - /* _mesa_function_pool[5977]: Rotated (offset 299) */ + /* _mesa_function_pool[6182]: Rotated (offset 299) */ "dddd\0" "glRotated\0" "\0" - /* _mesa_function_pool[5993]: GetTexParameterIuivEXT (will be remapped) */ + /* _mesa_function_pool[6198]: GetTexParameterIuivEXT (will be remapped) */ "iip\0" "glGetTexParameterIuivEXT\0" "glGetTexParameterIuiv\0" "\0" - /* _mesa_function_pool[6045]: VertexAttrib2sNV (will be remapped) */ + /* _mesa_function_pool[6250]: VertexAttrib2sNV (will be remapped) */ "iii\0" "glVertexAttrib2sNV\0" "\0" - /* _mesa_function_pool[6069]: ReadPixels (offset 256) */ + /* _mesa_function_pool[6274]: ReadPixels (offset 256) */ "iiiiiip\0" "glReadPixels\0" "\0" - /* _mesa_function_pool[6091]: EdgeFlagv (offset 42) */ + /* _mesa_function_pool[6296]: VertexAttribDivisorARB (will be remapped) */ + "ii\0" + "glVertexAttribDivisorARB\0" + "\0" + /* _mesa_function_pool[6325]: EdgeFlagv (offset 42) */ "p\0" "glEdgeFlagv\0" "\0" - /* _mesa_function_pool[6106]: NormalPointerListIBM (dynamic) */ + /* _mesa_function_pool[6340]: NormalPointerListIBM (dynamic) */ "iipi\0" "glNormalPointerListIBM\0" "\0" - /* _mesa_function_pool[6135]: IndexPointerEXT (will be remapped) */ + /* _mesa_function_pool[6369]: IndexPointerEXT (will be remapped) */ "iiip\0" "glIndexPointerEXT\0" "\0" - /* _mesa_function_pool[6159]: Color4iv (offset 32) */ + /* _mesa_function_pool[6393]: Color4iv (offset 32) */ "p\0" "glColor4iv\0" "\0" - /* _mesa_function_pool[6173]: TexParameterf (offset 178) */ + /* _mesa_function_pool[6407]: TexParameterf (offset 178) */ "iif\0" "glTexParameterf\0" "\0" - /* _mesa_function_pool[6194]: TexParameteri (offset 180) */ + /* _mesa_function_pool[6428]: TexParameteri (offset 180) */ "iii\0" "glTexParameteri\0" "\0" - /* _mesa_function_pool[6215]: NormalPointerEXT (will be remapped) */ + /* _mesa_function_pool[6449]: NormalPointerEXT (will be remapped) */ "iiip\0" "glNormalPointerEXT\0" "\0" - /* _mesa_function_pool[6240]: MultiTexCoord3dARB (offset 392) */ + /* _mesa_function_pool[6474]: MultiTexCoord3dARB (offset 392) */ "iddd\0" "glMultiTexCoord3d\0" "glMultiTexCoord3dARB\0" "\0" - /* _mesa_function_pool[6285]: MultiTexCoord2iARB (offset 388) */ + /* _mesa_function_pool[6519]: MultiTexCoord2iARB (offset 388) */ "iii\0" "glMultiTexCoord2i\0" "glMultiTexCoord2iARB\0" "\0" - /* _mesa_function_pool[6329]: DrawPixels (offset 257) */ + /* _mesa_function_pool[6563]: DrawPixels (offset 257) */ "iiiip\0" "glDrawPixels\0" "\0" - /* _mesa_function_pool[6349]: ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[6583]: ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (dynamic) */ "iffffffff\0" "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[6409]: MultiTexCoord2svARB (offset 391) */ + /* _mesa_function_pool[6643]: MultiTexCoord2svARB (offset 391) */ "ip\0" "glMultiTexCoord2sv\0" "glMultiTexCoord2svARB\0" "\0" - /* _mesa_function_pool[6454]: ReplacementCodeubvSUN (dynamic) */ + /* _mesa_function_pool[6688]: ReplacementCodeubvSUN (dynamic) */ "p\0" "glReplacementCodeubvSUN\0" "\0" - /* _mesa_function_pool[6481]: Uniform3iARB (will be remapped) */ + /* _mesa_function_pool[6715]: Uniform3iARB (will be remapped) */ "iiii\0" "glUniform3i\0" "glUniform3iARB\0" "\0" - /* _mesa_function_pool[6514]: DrawTransformFeedback (will be remapped) */ + /* _mesa_function_pool[6748]: DrawTransformFeedback (will be remapped) */ "ii\0" "glDrawTransformFeedback\0" "\0" - /* _mesa_function_pool[6542]: DrawElementsInstancedARB (will be remapped) */ + /* _mesa_function_pool[6776]: DrawElementsInstancedARB (will be remapped) */ "iiipi\0" "glDrawElementsInstancedARB\0" "glDrawElementsInstancedEXT\0" "glDrawElementsInstanced\0" "\0" - /* _mesa_function_pool[6627]: GetShaderInfoLog (will be remapped) */ + /* _mesa_function_pool[6861]: GetShaderInfoLog (will be remapped) */ "iipp\0" "glGetShaderInfoLog\0" "\0" - /* _mesa_function_pool[6652]: WeightivARB (dynamic) */ + /* _mesa_function_pool[6886]: WeightivARB (dynamic) */ "ip\0" "glWeightivARB\0" "\0" - /* _mesa_function_pool[6670]: PollInstrumentsSGIX (dynamic) */ + /* _mesa_function_pool[6904]: PollInstrumentsSGIX (dynamic) */ "p\0" "glPollInstrumentsSGIX\0" "\0" - /* _mesa_function_pool[6695]: GlobalAlphaFactordSUN (dynamic) */ + /* _mesa_function_pool[6929]: GlobalAlphaFactordSUN (dynamic) */ "d\0" "glGlobalAlphaFactordSUN\0" "\0" - /* _mesa_function_pool[6722]: GetFinalCombinerInputParameterfvNV (will be remapped) */ + /* _mesa_function_pool[6956]: GetFinalCombinerInputParameterfvNV (will be remapped) */ "iip\0" "glGetFinalCombinerInputParameterfvNV\0" "\0" - /* _mesa_function_pool[6764]: GenerateMipmapEXT (will be remapped) */ + /* _mesa_function_pool[6998]: GenerateMipmapEXT (will be remapped) */ "i\0" "glGenerateMipmap\0" "glGenerateMipmapEXT\0" "\0" - /* _mesa_function_pool[6804]: GenLists (offset 5) */ + /* _mesa_function_pool[7038]: GenLists (offset 5) */ "i\0" "glGenLists\0" "\0" - /* _mesa_function_pool[6818]: DepthRangef (will be remapped) */ + /* _mesa_function_pool[7052]: DepthRangef (will be remapped) */ "ff\0" "glDepthRangef\0" "\0" - /* _mesa_function_pool[6836]: GetMapAttribParameterivNV (dynamic) */ + /* _mesa_function_pool[7070]: GetMapAttribParameterivNV (dynamic) */ "iiip\0" "glGetMapAttribParameterivNV\0" "\0" - /* _mesa_function_pool[6870]: CreateShaderObjectARB (will be remapped) */ + /* _mesa_function_pool[7104]: CreateShaderObjectARB (will be remapped) */ "i\0" "glCreateShaderObjectARB\0" "\0" - /* _mesa_function_pool[6897]: GetSharpenTexFuncSGIS (dynamic) */ + /* _mesa_function_pool[7131]: GetSharpenTexFuncSGIS (dynamic) */ "ip\0" "glGetSharpenTexFuncSGIS\0" "\0" - /* _mesa_function_pool[6925]: BufferDataARB (will be remapped) */ + /* _mesa_function_pool[7159]: BufferDataARB (will be remapped) */ "iipi\0" "glBufferData\0" "glBufferDataARB\0" "\0" - /* _mesa_function_pool[6960]: FlushVertexArrayRangeNV (will be remapped) */ + /* _mesa_function_pool[7194]: FlushVertexArrayRangeNV (will be remapped) */ "\0" "glFlushVertexArrayRangeNV\0" "\0" - /* _mesa_function_pool[6988]: MapGrid2d (offset 226) */ + /* _mesa_function_pool[7222]: MapGrid2d (offset 226) */ "iddidd\0" "glMapGrid2d\0" "\0" - /* _mesa_function_pool[7008]: MapGrid2f (offset 227) */ + /* _mesa_function_pool[7242]: MapGrid2f (offset 227) */ "iffiff\0" "glMapGrid2f\0" "\0" - /* _mesa_function_pool[7028]: SampleMapATI (will be remapped) */ + /* _mesa_function_pool[7262]: SampleMapATI (will be remapped) */ "iii\0" "glSampleMapATI\0" "\0" - /* _mesa_function_pool[7048]: VertexPointerEXT (will be remapped) */ + /* _mesa_function_pool[7282]: VertexPointerEXT (will be remapped) */ "iiiip\0" "glVertexPointerEXT\0" "\0" - /* _mesa_function_pool[7074]: GetTexFilterFuncSGIS (dynamic) */ + /* _mesa_function_pool[7308]: GetTexFilterFuncSGIS (dynamic) */ "iip\0" "glGetTexFilterFuncSGIS\0" "\0" - /* _mesa_function_pool[7102]: Scissor (offset 176) */ + /* _mesa_function_pool[7336]: Scissor (offset 176) */ "iiii\0" "glScissor\0" "\0" - /* _mesa_function_pool[7118]: Fogf (offset 153) */ + /* _mesa_function_pool[7352]: Fogf (offset 153) */ "if\0" "glFogf\0" "\0" - /* _mesa_function_pool[7129]: ReplacementCodeuiColor4ubVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[7363]: ReplacementCodeuiColor4ubVertex3fvSUN (dynamic) */ "ppp\0" "glReplacementCodeuiColor4ubVertex3fvSUN\0" "\0" - /* _mesa_function_pool[7174]: TexSubImage1D (offset 332) */ + /* _mesa_function_pool[7408]: TexSubImage1D (offset 332) */ "iiiiiip\0" "glTexSubImage1D\0" "glTexSubImage1DEXT\0" "\0" - /* _mesa_function_pool[7218]: VertexAttrib1sARB (will be remapped) */ + /* _mesa_function_pool[7452]: VertexAttrib1sARB (will be remapped) */ "ii\0" "glVertexAttrib1s\0" "glVertexAttrib1sARB\0" "\0" - /* _mesa_function_pool[7259]: FenceSync (will be remapped) */ + /* _mesa_function_pool[7493]: FenceSync (will be remapped) */ "ii\0" "glFenceSync\0" "\0" - /* _mesa_function_pool[7275]: Color4usv (offset 40) */ + /* _mesa_function_pool[7509]: Color4usv (offset 40) */ "p\0" "glColor4usv\0" "\0" - /* _mesa_function_pool[7290]: Fogi (offset 155) */ + /* _mesa_function_pool[7524]: Fogi (offset 155) */ "ii\0" "glFogi\0" "\0" - /* _mesa_function_pool[7301]: DepthRange (offset 288) */ + /* _mesa_function_pool[7535]: DepthRange (offset 288) */ "dd\0" "glDepthRange\0" "\0" - /* _mesa_function_pool[7318]: RasterPos3iv (offset 75) */ + /* _mesa_function_pool[7552]: RasterPos3iv (offset 75) */ "p\0" "glRasterPos3iv\0" "\0" - /* _mesa_function_pool[7336]: FinalCombinerInputNV (will be remapped) */ + /* _mesa_function_pool[7570]: FinalCombinerInputNV (will be remapped) */ "iiii\0" "glFinalCombinerInputNV\0" "\0" - /* _mesa_function_pool[7365]: TexCoord2i (offset 106) */ + /* _mesa_function_pool[7599]: TexCoord2i (offset 106) */ "ii\0" "glTexCoord2i\0" "\0" - /* _mesa_function_pool[7382]: PixelMapfv (offset 251) */ + /* _mesa_function_pool[7616]: PixelMapfv (offset 251) */ "iip\0" "glPixelMapfv\0" "\0" - /* _mesa_function_pool[7400]: Color4ui (offset 37) */ + /* _mesa_function_pool[7634]: Color4ui (offset 37) */ "iiii\0" "glColor4ui\0" "\0" - /* _mesa_function_pool[7417]: RasterPos3s (offset 76) */ + /* _mesa_function_pool[7651]: RasterPos3s (offset 76) */ "iii\0" "glRasterPos3s\0" "\0" - /* _mesa_function_pool[7436]: Color3usv (offset 24) */ + /* _mesa_function_pool[7670]: Color3usv (offset 24) */ "p\0" "glColor3usv\0" "\0" - /* _mesa_function_pool[7451]: FlushRasterSGIX (dynamic) */ + /* _mesa_function_pool[7685]: FlushRasterSGIX (dynamic) */ "\0" "glFlushRasterSGIX\0" "\0" - /* _mesa_function_pool[7471]: TexCoord2f (offset 104) */ + /* _mesa_function_pool[7705]: TexCoord2f (offset 104) */ "ff\0" "glTexCoord2f\0" "\0" - /* _mesa_function_pool[7488]: ReplacementCodeuiTexCoord2fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[7722]: ReplacementCodeuiTexCoord2fVertex3fSUN (dynamic) */ "ifffff\0" "glReplacementCodeuiTexCoord2fVertex3fSUN\0" "\0" - /* _mesa_function_pool[7537]: TexCoord2d (offset 102) */ + /* _mesa_function_pool[7771]: TexCoord2d (offset 102) */ "dd\0" "glTexCoord2d\0" "\0" - /* _mesa_function_pool[7554]: RasterPos3d (offset 70) */ + /* _mesa_function_pool[7788]: RasterPos3d (offset 70) */ "ddd\0" "glRasterPos3d\0" "\0" - /* _mesa_function_pool[7573]: RasterPos3f (offset 72) */ + /* _mesa_function_pool[7807]: RasterPos3f (offset 72) */ "fff\0" "glRasterPos3f\0" "\0" - /* _mesa_function_pool[7592]: Uniform1fARB (will be remapped) */ + /* _mesa_function_pool[7826]: Uniform1fARB (will be remapped) */ "if\0" "glUniform1f\0" "glUniform1fARB\0" "\0" - /* _mesa_function_pool[7623]: AreTexturesResident (offset 322) */ + /* _mesa_function_pool[7857]: AreTexturesResident (offset 322) */ "ipp\0" "glAreTexturesResident\0" "glAreTexturesResidentEXT\0" "\0" - /* _mesa_function_pool[7675]: TexCoord2s (offset 108) */ + /* _mesa_function_pool[7909]: TexCoord2s (offset 108) */ "ii\0" "glTexCoord2s\0" "\0" - /* _mesa_function_pool[7692]: StencilOpSeparate (will be remapped) */ + /* _mesa_function_pool[7926]: StencilOpSeparate (will be remapped) */ "iiii\0" "glStencilOpSeparate\0" "glStencilOpSeparateATI\0" "\0" - /* _mesa_function_pool[7741]: ColorTableParameteriv (offset 341) */ + /* _mesa_function_pool[7975]: ColorTableParameteriv (offset 341) */ "iip\0" "glColorTableParameteriv\0" "glColorTableParameterivSGI\0" "\0" - /* _mesa_function_pool[7797]: FogCoordPointerListIBM (dynamic) */ + /* _mesa_function_pool[8031]: FogCoordPointerListIBM (dynamic) */ "iipi\0" "glFogCoordPointerListIBM\0" "\0" - /* _mesa_function_pool[7828]: WindowPos3dMESA (will be remapped) */ + /* _mesa_function_pool[8062]: WindowPos3dMESA (will be remapped) */ "ddd\0" "glWindowPos3d\0" "glWindowPos3dARB\0" "glWindowPos3dMESA\0" "\0" - /* _mesa_function_pool[7882]: Color4us (offset 39) */ + /* _mesa_function_pool[8116]: Color4us (offset 39) */ "iiii\0" "glColor4us\0" "\0" - /* _mesa_function_pool[7899]: PointParameterfvEXT (will be remapped) */ + /* _mesa_function_pool[8133]: PointParameterfvEXT (will be remapped) */ "ip\0" "glPointParameterfv\0" "glPointParameterfvARB\0" "glPointParameterfvEXT\0" "glPointParameterfvSGIS\0" "\0" - /* _mesa_function_pool[7989]: Color3bv (offset 10) */ + /* _mesa_function_pool[8223]: Color3bv (offset 10) */ "p\0" "glColor3bv\0" "\0" - /* _mesa_function_pool[8003]: WindowPos2fvMESA (will be remapped) */ + /* _mesa_function_pool[8237]: GetnCompressedTexImageARB (will be remapped) */ + "iiip\0" + "glGetnCompressedTexImageARB\0" + "\0" + /* _mesa_function_pool[8271]: WindowPos2fvMESA (will be remapped) */ "p\0" "glWindowPos2fv\0" "glWindowPos2fvARB\0" "glWindowPos2fvMESA\0" "\0" - /* _mesa_function_pool[8058]: SecondaryColor3bvEXT (will be remapped) */ + /* _mesa_function_pool[8326]: SecondaryColor3bvEXT (will be remapped) */ "p\0" "glSecondaryColor3bv\0" "glSecondaryColor3bvEXT\0" "\0" - /* _mesa_function_pool[8104]: VertexPointerListIBM (dynamic) */ + /* _mesa_function_pool[8372]: VertexPointerListIBM (dynamic) */ "iiipi\0" "glVertexPointerListIBM\0" "\0" - /* _mesa_function_pool[8134]: GetProgramLocalParameterfvARB (will be remapped) */ + /* _mesa_function_pool[8402]: GetProgramLocalParameterfvARB (will be remapped) */ "iip\0" "glGetProgramLocalParameterfvARB\0" "\0" - /* _mesa_function_pool[8171]: FragmentMaterialfSGIX (dynamic) */ + /* _mesa_function_pool[8439]: FragmentMaterialfSGIX (dynamic) */ "iif\0" "glFragmentMaterialfSGIX\0" "\0" - /* _mesa_function_pool[8200]: BindSampler (will be remapped) */ + /* _mesa_function_pool[8468]: BindSampler (will be remapped) */ "ii\0" "glBindSampler\0" "\0" - /* _mesa_function_pool[8218]: RenderbufferStorageEXT (will be remapped) */ + /* _mesa_function_pool[8486]: RenderbufferStorageEXT (will be remapped) */ "iiii\0" "glRenderbufferStorage\0" "glRenderbufferStorageEXT\0" "\0" - /* _mesa_function_pool[8271]: IsFenceNV (will be remapped) */ + /* _mesa_function_pool[8539]: IsFenceNV (will be remapped) */ "i\0" "glIsFenceNV\0" "\0" - /* _mesa_function_pool[8286]: AttachObjectARB (will be remapped) */ + /* _mesa_function_pool[8554]: AttachObjectARB (will be remapped) */ "ii\0" "glAttachObjectARB\0" "\0" - /* _mesa_function_pool[8308]: GetFragmentLightivSGIX (dynamic) */ + /* _mesa_function_pool[8576]: GetFragmentLightivSGIX (dynamic) */ "iip\0" "glGetFragmentLightivSGIX\0" "\0" - /* _mesa_function_pool[8338]: UniformMatrix2fvARB (will be remapped) */ + /* _mesa_function_pool[8606]: UniformMatrix2fvARB (will be remapped) */ "iiip\0" "glUniformMatrix2fv\0" "glUniformMatrix2fvARB\0" "\0" - /* _mesa_function_pool[8385]: MultiTexCoord2fARB (offset 386) */ + /* _mesa_function_pool[8653]: MultiTexCoord2fARB (offset 386) */ "iff\0" "glMultiTexCoord2f\0" "glMultiTexCoord2fARB\0" "\0" - /* _mesa_function_pool[8429]: ColorTable (offset 339) */ + /* _mesa_function_pool[8697]: ColorTable (offset 339) */ "iiiiip\0" "glColorTable\0" "glColorTableSGI\0" "glColorTableEXT\0" "\0" - /* _mesa_function_pool[8482]: IndexPointer (offset 314) */ + /* _mesa_function_pool[8750]: IndexPointer (offset 314) */ "iip\0" "glIndexPointer\0" "\0" - /* _mesa_function_pool[8502]: Accum (offset 213) */ + /* _mesa_function_pool[8770]: Accum (offset 213) */ "if\0" "glAccum\0" "\0" - /* _mesa_function_pool[8514]: GetTexImage (offset 281) */ + /* _mesa_function_pool[8782]: GetTexImage (offset 281) */ "iiiip\0" "glGetTexImage\0" "\0" - /* _mesa_function_pool[8535]: MapControlPointsNV (dynamic) */ + /* _mesa_function_pool[8803]: MapControlPointsNV (dynamic) */ "iiiiiiiip\0" "glMapControlPointsNV\0" "\0" - /* _mesa_function_pool[8567]: ConvolutionFilter2D (offset 349) */ + /* _mesa_function_pool[8835]: ConvolutionFilter2D (offset 349) */ "iiiiiip\0" "glConvolutionFilter2D\0" "glConvolutionFilter2DEXT\0" "\0" - /* _mesa_function_pool[8623]: Finish (offset 216) */ + /* _mesa_function_pool[8891]: Finish (offset 216) */ "\0" "glFinish\0" "\0" - /* _mesa_function_pool[8634]: MapParameterfvNV (dynamic) */ + /* _mesa_function_pool[8902]: MapParameterfvNV (dynamic) */ "iip\0" "glMapParameterfvNV\0" "\0" - /* _mesa_function_pool[8658]: ClearStencil (offset 207) */ + /* _mesa_function_pool[8926]: ClearStencil (offset 207) */ "i\0" "glClearStencil\0" "\0" - /* _mesa_function_pool[8676]: VertexAttrib3dvARB (will be remapped) */ + /* _mesa_function_pool[8944]: VertexAttrib3dvARB (will be remapped) */ "ip\0" "glVertexAttrib3dv\0" "glVertexAttrib3dvARB\0" "\0" - /* _mesa_function_pool[8719]: Uniform4uivEXT (will be remapped) */ + /* _mesa_function_pool[8987]: Uniform4uivEXT (will be remapped) */ "iip\0" "glUniform4uivEXT\0" "glUniform4uiv\0" "\0" - /* _mesa_function_pool[8755]: HintPGI (dynamic) */ + /* _mesa_function_pool[9023]: HintPGI (dynamic) */ "ii\0" "glHintPGI\0" "\0" - /* _mesa_function_pool[8769]: ConvolutionParameteriv (offset 353) */ + /* _mesa_function_pool[9037]: ConvolutionParameteriv (offset 353) */ "iip\0" "glConvolutionParameteriv\0" "glConvolutionParameterivEXT\0" "\0" - /* _mesa_function_pool[8827]: Color4s (offset 33) */ + /* _mesa_function_pool[9095]: Color4s (offset 33) */ "iiii\0" "glColor4s\0" "\0" - /* _mesa_function_pool[8843]: InterleavedArrays (offset 317) */ + /* _mesa_function_pool[9111]: InterleavedArrays (offset 317) */ "iip\0" "glInterleavedArrays\0" "\0" - /* _mesa_function_pool[8868]: RasterPos2fv (offset 65) */ + /* _mesa_function_pool[9136]: RasterPos2fv (offset 65) */ "p\0" "glRasterPos2fv\0" "\0" - /* _mesa_function_pool[8886]: TexCoord1fv (offset 97) */ + /* _mesa_function_pool[9154]: TexCoord1fv (offset 97) */ "p\0" "glTexCoord1fv\0" "\0" - /* _mesa_function_pool[8903]: Vertex2d (offset 126) */ + /* _mesa_function_pool[9171]: Vertex2d (offset 126) */ "dd\0" "glVertex2d\0" "\0" - /* _mesa_function_pool[8918]: CullParameterdvEXT (dynamic) */ + /* _mesa_function_pool[9186]: CullParameterdvEXT (dynamic) */ "ip\0" "glCullParameterdvEXT\0" "\0" - /* _mesa_function_pool[8943]: ProgramNamedParameter4fNV (will be remapped) */ + /* _mesa_function_pool[9211]: ProgramNamedParameter4fNV (will be remapped) */ "iipffff\0" "glProgramNamedParameter4fNV\0" "\0" - /* _mesa_function_pool[8980]: Color3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[9248]: Color3fVertex3fSUN (dynamic) */ "ffffff\0" "glColor3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[9009]: ProgramEnvParameter4fvARB (will be remapped) */ + /* _mesa_function_pool[9277]: ProgramEnvParameter4fvARB (will be remapped) */ "iip\0" "glProgramEnvParameter4fvARB\0" "glProgramParameter4fvNV\0" "\0" - /* _mesa_function_pool[9066]: Color4i (offset 31) */ + /* _mesa_function_pool[9334]: Color4i (offset 31) */ "iiii\0" "glColor4i\0" "\0" - /* _mesa_function_pool[9082]: Color4f (offset 29) */ + /* _mesa_function_pool[9350]: Color4f (offset 29) */ "ffff\0" "glColor4f\0" "\0" - /* _mesa_function_pool[9098]: RasterPos4fv (offset 81) */ + /* _mesa_function_pool[9366]: RasterPos4fv (offset 81) */ "p\0" "glRasterPos4fv\0" "\0" - /* _mesa_function_pool[9116]: Color4d (offset 27) */ + /* _mesa_function_pool[9384]: Color4d (offset 27) */ "dddd\0" "glColor4d\0" "\0" - /* _mesa_function_pool[9132]: ClearIndex (offset 205) */ + /* _mesa_function_pool[9400]: ClearIndex (offset 205) */ "f\0" "glClearIndex\0" "\0" - /* _mesa_function_pool[9148]: Color4b (offset 25) */ + /* _mesa_function_pool[9416]: Color4b (offset 25) */ "iiii\0" "glColor4b\0" "\0" - /* _mesa_function_pool[9164]: LoadMatrixd (offset 292) */ + /* _mesa_function_pool[9432]: LoadMatrixd (offset 292) */ "p\0" "glLoadMatrixd\0" "\0" - /* _mesa_function_pool[9181]: FragmentLightModeliSGIX (dynamic) */ + /* _mesa_function_pool[9449]: FragmentLightModeliSGIX (dynamic) */ "ii\0" "glFragmentLightModeliSGIX\0" "\0" - /* _mesa_function_pool[9211]: RasterPos2dv (offset 63) */ + /* _mesa_function_pool[9479]: RasterPos2dv (offset 63) */ "p\0" "glRasterPos2dv\0" "\0" - /* _mesa_function_pool[9229]: ConvolutionParameterfv (offset 351) */ + /* _mesa_function_pool[9497]: ConvolutionParameterfv (offset 351) */ "iip\0" "glConvolutionParameterfv\0" "glConvolutionParameterfvEXT\0" "\0" - /* _mesa_function_pool[9287]: TbufferMask3DFX (dynamic) */ + /* _mesa_function_pool[9555]: TbufferMask3DFX (dynamic) */ "i\0" "glTbufferMask3DFX\0" "\0" - /* _mesa_function_pool[9308]: GetTexGendv (offset 278) */ + /* _mesa_function_pool[9576]: GetTexGendv (offset 278) */ "iip\0" "glGetTexGendv\0" "\0" - /* _mesa_function_pool[9327]: GetVertexAttribfvNV (will be remapped) */ + /* _mesa_function_pool[9595]: GetVertexAttribfvNV (will be remapped) */ "iip\0" "glGetVertexAttribfvNV\0" "\0" - /* _mesa_function_pool[9354]: BeginTransformFeedbackEXT (will be remapped) */ + /* _mesa_function_pool[9622]: BeginTransformFeedbackEXT (will be remapped) */ "i\0" "glBeginTransformFeedbackEXT\0" "glBeginTransformFeedback\0" "\0" - /* _mesa_function_pool[9410]: LoadProgramNV (will be remapped) */ + /* _mesa_function_pool[9678]: LoadProgramNV (will be remapped) */ "iiip\0" "glLoadProgramNV\0" "\0" - /* _mesa_function_pool[9432]: WaitSync (will be remapped) */ + /* _mesa_function_pool[9700]: WaitSync (will be remapped) */ "iii\0" "glWaitSync\0" "\0" - /* _mesa_function_pool[9448]: EndList (offset 1) */ + /* _mesa_function_pool[9716]: EndList (offset 1) */ "\0" "glEndList\0" "\0" - /* _mesa_function_pool[9460]: VertexAttrib4fvNV (will be remapped) */ + /* _mesa_function_pool[9728]: VertexAttrib4fvNV (will be remapped) */ "ip\0" "glVertexAttrib4fvNV\0" "\0" - /* _mesa_function_pool[9484]: GetAttachedObjectsARB (will be remapped) */ + /* _mesa_function_pool[9752]: GetAttachedObjectsARB (will be remapped) */ "iipp\0" "glGetAttachedObjectsARB\0" "\0" - /* _mesa_function_pool[9514]: Uniform3fvARB (will be remapped) */ + /* _mesa_function_pool[9782]: Uniform3fvARB (will be remapped) */ "iip\0" "glUniform3fv\0" "glUniform3fvARB\0" "\0" - /* _mesa_function_pool[9548]: EvalCoord1fv (offset 231) */ + /* _mesa_function_pool[9816]: EvalCoord1fv (offset 231) */ "p\0" "glEvalCoord1fv\0" "\0" - /* _mesa_function_pool[9566]: DrawRangeElements (offset 338) */ + /* _mesa_function_pool[9834]: DrawRangeElements (offset 338) */ "iiiiip\0" "glDrawRangeElements\0" "glDrawRangeElementsEXT\0" "\0" - /* _mesa_function_pool[9617]: EvalMesh2 (offset 238) */ + /* _mesa_function_pool[9885]: EvalMesh2 (offset 238) */ "iiiii\0" "glEvalMesh2\0" "\0" - /* _mesa_function_pool[9636]: Vertex4fv (offset 145) */ + /* _mesa_function_pool[9904]: Vertex4fv (offset 145) */ "p\0" "glVertex4fv\0" "\0" - /* _mesa_function_pool[9651]: GenTransformFeedbacks (will be remapped) */ + /* _mesa_function_pool[9919]: GenTransformFeedbacks (will be remapped) */ "ip\0" "glGenTransformFeedbacks\0" "\0" - /* _mesa_function_pool[9679]: SpriteParameterfvSGIX (dynamic) */ + /* _mesa_function_pool[9947]: SpriteParameterfvSGIX (dynamic) */ "ip\0" "glSpriteParameterfvSGIX\0" "\0" - /* _mesa_function_pool[9707]: CheckFramebufferStatusEXT (will be remapped) */ + /* _mesa_function_pool[9975]: CheckFramebufferStatusEXT (will be remapped) */ "i\0" "glCheckFramebufferStatus\0" "glCheckFramebufferStatusEXT\0" "\0" - /* _mesa_function_pool[9763]: GlobalAlphaFactoruiSUN (dynamic) */ + /* _mesa_function_pool[10031]: GlobalAlphaFactoruiSUN (dynamic) */ "i\0" "glGlobalAlphaFactoruiSUN\0" "\0" - /* _mesa_function_pool[9791]: GetHandleARB (will be remapped) */ + /* _mesa_function_pool[10059]: GetHandleARB (will be remapped) */ "i\0" "glGetHandleARB\0" "\0" - /* _mesa_function_pool[9809]: GetVertexAttribivARB (will be remapped) */ + /* _mesa_function_pool[10077]: GetVertexAttribivARB (will be remapped) */ "iip\0" "glGetVertexAttribiv\0" "glGetVertexAttribivARB\0" "\0" - /* _mesa_function_pool[9857]: BlendFunciARB (will be remapped) */ + /* _mesa_function_pool[10125]: BlendFunciARB (will be remapped) */ "iii\0" "glBlendFunciARB\0" "\0" - /* _mesa_function_pool[9878]: GetCombinerInputParameterfvNV (will be remapped) */ - "iiiip\0" - "glGetCombinerInputParameterfvNV\0" + /* _mesa_function_pool[10146]: GetnUniformivARB (will be remapped) */ + "iiip\0" + "glGetnUniformivARB\0" "\0" - /* _mesa_function_pool[9917]: GetTexParameterIivEXT (will be remapped) */ + /* _mesa_function_pool[10171]: GetTexParameterIivEXT (will be remapped) */ "iip\0" "glGetTexParameterIivEXT\0" "glGetTexParameterIiv\0" "\0" - /* _mesa_function_pool[9967]: CreateProgram (will be remapped) */ + /* _mesa_function_pool[10221]: CreateProgram (will be remapped) */ "\0" "glCreateProgram\0" "\0" - /* _mesa_function_pool[9985]: LoadTransposeMatrixdARB (will be remapped) */ + /* _mesa_function_pool[10239]: LoadTransposeMatrixdARB (will be remapped) */ "p\0" "glLoadTransposeMatrixd\0" "glLoadTransposeMatrixdARB\0" "\0" - /* _mesa_function_pool[10037]: ReleaseShaderCompiler (will be remapped) */ + /* _mesa_function_pool[10291]: ReleaseShaderCompiler (will be remapped) */ "\0" "glReleaseShaderCompiler\0" "\0" - /* _mesa_function_pool[10063]: GetMinmax (offset 364) */ + /* _mesa_function_pool[10317]: GetMinmax (offset 364) */ "iiiip\0" "glGetMinmax\0" "glGetMinmaxEXT\0" "\0" - /* _mesa_function_pool[10097]: StencilFuncSeparate (will be remapped) */ + /* _mesa_function_pool[10351]: StencilFuncSeparate (will be remapped) */ "iiii\0" "glStencilFuncSeparate\0" "\0" - /* _mesa_function_pool[10125]: SecondaryColor3sEXT (will be remapped) */ + /* _mesa_function_pool[10379]: SecondaryColor3sEXT (will be remapped) */ "iii\0" "glSecondaryColor3s\0" "glSecondaryColor3sEXT\0" "\0" - /* _mesa_function_pool[10171]: Color3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[10425]: Color3fVertex3fvSUN (dynamic) */ "pp\0" "glColor3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[10197]: GetInteger64i_v (will be remapped) */ + /* _mesa_function_pool[10451]: GetInteger64i_v (will be remapped) */ "iip\0" "glGetInteger64i_v\0" "\0" - /* _mesa_function_pool[10220]: Normal3fv (offset 57) */ + /* _mesa_function_pool[10474]: GetVertexAttribdvNV (will be remapped) */ + "iip\0" + "glGetVertexAttribdvNV\0" + "\0" + /* _mesa_function_pool[10501]: Normal3fv (offset 57) */ "p\0" "glNormal3fv\0" "\0" - /* _mesa_function_pool[10235]: GlobalAlphaFactorbSUN (dynamic) */ + /* _mesa_function_pool[10516]: GlobalAlphaFactorbSUN (dynamic) */ "i\0" "glGlobalAlphaFactorbSUN\0" "\0" - /* _mesa_function_pool[10262]: Color3us (offset 23) */ + /* _mesa_function_pool[10543]: Color3us (offset 23) */ "iii\0" "glColor3us\0" "\0" - /* _mesa_function_pool[10278]: ImageTransformParameterfvHP (dynamic) */ + /* _mesa_function_pool[10559]: ImageTransformParameterfvHP (dynamic) */ "iip\0" "glImageTransformParameterfvHP\0" "\0" - /* _mesa_function_pool[10313]: VertexAttrib4ivARB (will be remapped) */ + /* _mesa_function_pool[10594]: VertexAttrib4ivARB (will be remapped) */ "ip\0" "glVertexAttrib4iv\0" "glVertexAttrib4ivARB\0" "\0" - /* _mesa_function_pool[10356]: End (offset 43) */ + /* _mesa_function_pool[10637]: End (offset 43) */ "\0" "glEnd\0" "\0" - /* _mesa_function_pool[10364]: VertexAttrib3fNV (will be remapped) */ + /* _mesa_function_pool[10645]: VertexAttrib3fNV (will be remapped) */ "ifff\0" "glVertexAttrib3fNV\0" "\0" - /* _mesa_function_pool[10389]: VertexAttribs2dvNV (will be remapped) */ + /* _mesa_function_pool[10670]: VertexAttribs2dvNV (will be remapped) */ "iip\0" "glVertexAttribs2dvNV\0" "\0" - /* _mesa_function_pool[10415]: GetQueryObjectui64vEXT (will be remapped) */ + /* _mesa_function_pool[10696]: GetQueryObjectui64vEXT (will be remapped) */ "iip\0" "glGetQueryObjectui64vEXT\0" "\0" - /* _mesa_function_pool[10445]: MultiTexCoord3fvARB (offset 395) */ + /* _mesa_function_pool[10726]: MultiTexCoord3fvARB (offset 395) */ "ip\0" "glMultiTexCoord3fv\0" "glMultiTexCoord3fvARB\0" "\0" - /* _mesa_function_pool[10490]: SecondaryColor3dEXT (will be remapped) */ + /* _mesa_function_pool[10771]: SecondaryColor3dEXT (will be remapped) */ "ddd\0" "glSecondaryColor3d\0" "glSecondaryColor3dEXT\0" "\0" - /* _mesa_function_pool[10536]: Color3ub (offset 19) */ + /* _mesa_function_pool[10817]: Color3ub (offset 19) */ "iii\0" "glColor3ub\0" "\0" - /* _mesa_function_pool[10552]: GetProgramParameterfvNV (will be remapped) */ + /* _mesa_function_pool[10833]: GetProgramParameterfvNV (will be remapped) */ "iiip\0" "glGetProgramParameterfvNV\0" "\0" - /* _mesa_function_pool[10584]: TangentPointerEXT (dynamic) */ + /* _mesa_function_pool[10865]: TangentPointerEXT (dynamic) */ "iip\0" "glTangentPointerEXT\0" "\0" - /* _mesa_function_pool[10609]: Color4fNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[10890]: Color4fNormal3fVertex3fvSUN (dynamic) */ "ppp\0" "glColor4fNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[10644]: GetInstrumentsSGIX (dynamic) */ + /* _mesa_function_pool[10925]: GetInstrumentsSGIX (dynamic) */ "\0" "glGetInstrumentsSGIX\0" "\0" - /* _mesa_function_pool[10667]: GetUniformuivEXT (will be remapped) */ + /* _mesa_function_pool[10948]: GetUniformuivEXT (will be remapped) */ "iip\0" "glGetUniformuivEXT\0" "glGetUniformuiv\0" "\0" - /* _mesa_function_pool[10707]: Color3ui (offset 21) */ + /* _mesa_function_pool[10988]: Color3ui (offset 21) */ "iii\0" "glColor3ui\0" "\0" - /* _mesa_function_pool[10723]: EvalMapsNV (dynamic) */ + /* _mesa_function_pool[11004]: EvalMapsNV (dynamic) */ "ii\0" "glEvalMapsNV\0" "\0" - /* _mesa_function_pool[10740]: TexSubImage2D (offset 333) */ + /* _mesa_function_pool[11021]: TexSubImage2D (offset 333) */ "iiiiiiiip\0" "glTexSubImage2D\0" "glTexSubImage2DEXT\0" "\0" - /* _mesa_function_pool[10786]: FragmentLightivSGIX (dynamic) */ + /* _mesa_function_pool[11067]: FragmentLightivSGIX (dynamic) */ "iip\0" "glFragmentLightivSGIX\0" "\0" - /* _mesa_function_pool[10813]: GetTexParameterPointervAPPLE (will be remapped) */ + /* _mesa_function_pool[11094]: GetTexParameterPointervAPPLE (will be remapped) */ "iip\0" "glGetTexParameterPointervAPPLE\0" "\0" - /* _mesa_function_pool[10849]: TexGenfv (offset 191) */ + /* _mesa_function_pool[11130]: TexGenfv (offset 191) */ "iip\0" "glTexGenfv\0" "\0" - /* _mesa_function_pool[10865]: GetTransformFeedbackVaryingEXT (will be remapped) */ + /* _mesa_function_pool[11146]: GetTransformFeedbackVaryingEXT (will be remapped) */ "iiipppp\0" "glGetTransformFeedbackVaryingEXT\0" "glGetTransformFeedbackVarying\0" "\0" - /* _mesa_function_pool[10937]: VertexAttrib4bvARB (will be remapped) */ + /* _mesa_function_pool[11218]: VertexAttrib4bvARB (will be remapped) */ "ip\0" "glVertexAttrib4bv\0" "glVertexAttrib4bvARB\0" "\0" - /* _mesa_function_pool[10980]: ShaderBinary (will be remapped) */ + /* _mesa_function_pool[11261]: ShaderBinary (will be remapped) */ "ipipi\0" "glShaderBinary\0" "\0" - /* _mesa_function_pool[11002]: GetIntegerIndexedvEXT (will be remapped) */ + /* _mesa_function_pool[11283]: GetIntegerIndexedvEXT (will be remapped) */ "iip\0" "glGetIntegerIndexedvEXT\0" "glGetIntegeri_v\0" "\0" - /* _mesa_function_pool[11047]: MultiTexCoord4sARB (offset 406) */ + /* _mesa_function_pool[11328]: MultiTexCoord4sARB (offset 406) */ "iiiii\0" "glMultiTexCoord4s\0" "glMultiTexCoord4sARB\0" "\0" - /* _mesa_function_pool[11093]: GetFragmentMaterialivSGIX (dynamic) */ + /* _mesa_function_pool[11374]: GetFragmentMaterialivSGIX (dynamic) */ "iip\0" "glGetFragmentMaterialivSGIX\0" "\0" - /* _mesa_function_pool[11126]: WindowPos4dMESA (will be remapped) */ + /* _mesa_function_pool[11407]: WindowPos4dMESA (will be remapped) */ "dddd\0" "glWindowPos4dMESA\0" "\0" - /* _mesa_function_pool[11150]: WeightPointerARB (dynamic) */ + /* _mesa_function_pool[11431]: WeightPointerARB (dynamic) */ "iiip\0" "glWeightPointerARB\0" "\0" - /* _mesa_function_pool[11175]: WindowPos2dMESA (will be remapped) */ + /* _mesa_function_pool[11456]: WindowPos2dMESA (will be remapped) */ "dd\0" "glWindowPos2d\0" "glWindowPos2dARB\0" "glWindowPos2dMESA\0" "\0" - /* _mesa_function_pool[11228]: FramebufferTexture3DEXT (will be remapped) */ + /* _mesa_function_pool[11509]: FramebufferTexture3DEXT (will be remapped) */ "iiiiii\0" "glFramebufferTexture3D\0" "glFramebufferTexture3DEXT\0" "\0" - /* _mesa_function_pool[11285]: BlendEquation (offset 337) */ + /* _mesa_function_pool[11566]: BlendEquation (offset 337) */ "i\0" "glBlendEquation\0" "glBlendEquationEXT\0" "\0" - /* _mesa_function_pool[11323]: VertexAttrib3dNV (will be remapped) */ + /* _mesa_function_pool[11604]: VertexAttrib3dNV (will be remapped) */ "iddd\0" "glVertexAttrib3dNV\0" "\0" - /* _mesa_function_pool[11348]: VertexAttrib3dARB (will be remapped) */ + /* _mesa_function_pool[11629]: VertexAttrib3dARB (will be remapped) */ "iddd\0" "glVertexAttrib3d\0" "glVertexAttrib3dARB\0" "\0" - /* _mesa_function_pool[11391]: VertexAttribI4usvEXT (will be remapped) */ + /* _mesa_function_pool[11672]: VertexAttribI4usvEXT (will be remapped) */ "ip\0" "glVertexAttribI4usvEXT\0" "glVertexAttribI4usv\0" "\0" - /* _mesa_function_pool[11438]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[11719]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */ "ppppp\0" "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[11502]: VertexAttrib4fARB (will be remapped) */ + /* _mesa_function_pool[11783]: VertexAttrib4fARB (will be remapped) */ "iffff\0" "glVertexAttrib4f\0" "glVertexAttrib4fARB\0" "\0" - /* _mesa_function_pool[11546]: GetError (offset 261) */ + /* _mesa_function_pool[11827]: GetError (offset 261) */ "\0" "glGetError\0" "\0" - /* _mesa_function_pool[11559]: IndexFuncEXT (dynamic) */ + /* _mesa_function_pool[11840]: IndexFuncEXT (dynamic) */ "if\0" "glIndexFuncEXT\0" "\0" - /* _mesa_function_pool[11578]: TexCoord3dv (offset 111) */ + /* _mesa_function_pool[11859]: TexCoord3dv (offset 111) */ "p\0" "glTexCoord3dv\0" "\0" - /* _mesa_function_pool[11595]: Indexdv (offset 45) */ + /* _mesa_function_pool[11876]: Indexdv (offset 45) */ "p\0" "glIndexdv\0" "\0" - /* _mesa_function_pool[11608]: FramebufferTexture2DEXT (will be remapped) */ + /* _mesa_function_pool[11889]: FramebufferTexture2DEXT (will be remapped) */ "iiiii\0" "glFramebufferTexture2D\0" "glFramebufferTexture2DEXT\0" "\0" - /* _mesa_function_pool[11664]: Normal3s (offset 60) */ + /* _mesa_function_pool[11945]: Normal3s (offset 60) */ "iii\0" "glNormal3s\0" "\0" - /* _mesa_function_pool[11680]: GetObjectParameterivAPPLE (will be remapped) */ + /* _mesa_function_pool[11961]: GetObjectParameterivAPPLE (will be remapped) */ "iiip\0" "glGetObjectParameterivAPPLE\0" "\0" - /* _mesa_function_pool[11714]: PushName (offset 201) */ + /* _mesa_function_pool[11995]: PushName (offset 201) */ "i\0" "glPushName\0" "\0" - /* _mesa_function_pool[11728]: MultiTexCoord2dvARB (offset 385) */ + /* _mesa_function_pool[12009]: MultiTexCoord2dvARB (offset 385) */ "ip\0" "glMultiTexCoord2dv\0" "glMultiTexCoord2dvARB\0" "\0" - /* _mesa_function_pool[11773]: CullParameterfvEXT (dynamic) */ + /* _mesa_function_pool[12054]: CullParameterfvEXT (dynamic) */ "ip\0" "glCullParameterfvEXT\0" "\0" - /* _mesa_function_pool[11798]: Normal3i (offset 58) */ + /* _mesa_function_pool[12079]: Normal3i (offset 58) */ "iii\0" "glNormal3i\0" "\0" - /* _mesa_function_pool[11814]: ProgramNamedParameter4fvNV (will be remapped) */ + /* _mesa_function_pool[12095]: ProgramNamedParameter4fvNV (will be remapped) */ "iipp\0" "glProgramNamedParameter4fvNV\0" "\0" - /* _mesa_function_pool[11849]: SecondaryColorPointerEXT (will be remapped) */ + /* _mesa_function_pool[12130]: SecondaryColorPointerEXT (will be remapped) */ "iiip\0" "glSecondaryColorPointer\0" "glSecondaryColorPointerEXT\0" "\0" - /* _mesa_function_pool[11906]: VertexAttrib4fvARB (will be remapped) */ + /* _mesa_function_pool[12187]: VertexAttrib4fvARB (will be remapped) */ "ip\0" "glVertexAttrib4fv\0" "glVertexAttrib4fvARB\0" "\0" - /* _mesa_function_pool[11949]: PixelTexGenSGIX (will be remapped) */ + /* _mesa_function_pool[12230]: PixelTexGenSGIX (will be remapped) */ "i\0" "glPixelTexGenSGIX\0" "\0" - /* _mesa_function_pool[11970]: GetActiveUniformARB (will be remapped) */ + /* _mesa_function_pool[12251]: GetActiveUniformARB (will be remapped) */ "iiipppp\0" "glGetActiveUniform\0" "glGetActiveUniformARB\0" "\0" - /* _mesa_function_pool[12020]: ImageTransformParameteriHP (dynamic) */ + /* _mesa_function_pool[12301]: ImageTransformParameteriHP (dynamic) */ "iii\0" "glImageTransformParameteriHP\0" "\0" - /* _mesa_function_pool[12054]: Normal3b (offset 52) */ + /* _mesa_function_pool[12335]: Normal3b (offset 52) */ "iii\0" "glNormal3b\0" "\0" - /* _mesa_function_pool[12070]: Normal3d (offset 54) */ + /* _mesa_function_pool[12351]: Normal3d (offset 54) */ "ddd\0" "glNormal3d\0" "\0" - /* _mesa_function_pool[12086]: Uniform1uiEXT (will be remapped) */ + /* _mesa_function_pool[12367]: Uniform1uiEXT (will be remapped) */ "ii\0" "glUniform1uiEXT\0" "glUniform1ui\0" "\0" - /* _mesa_function_pool[12119]: Normal3f (offset 56) */ + /* _mesa_function_pool[12400]: Normal3f (offset 56) */ "fff\0" "glNormal3f\0" "\0" - /* _mesa_function_pool[12135]: MultiTexCoord1svARB (offset 383) */ + /* _mesa_function_pool[12416]: MultiTexCoord1svARB (offset 383) */ "ip\0" "glMultiTexCoord1sv\0" "glMultiTexCoord1svARB\0" "\0" - /* _mesa_function_pool[12180]: Indexi (offset 48) */ + /* _mesa_function_pool[12461]: Indexi (offset 48) */ "i\0" "glIndexi\0" "\0" - /* _mesa_function_pool[12192]: EGLImageTargetTexture2DOES (will be remapped) */ + /* _mesa_function_pool[12473]: EGLImageTargetTexture2DOES (will be remapped) */ "ip\0" "glEGLImageTargetTexture2DOES\0" "\0" - /* _mesa_function_pool[12225]: EndQueryARB (will be remapped) */ + /* _mesa_function_pool[12506]: EndQueryARB (will be remapped) */ "i\0" "glEndQuery\0" "glEndQueryARB\0" "\0" - /* _mesa_function_pool[12253]: DeleteFencesNV (will be remapped) */ + /* _mesa_function_pool[12534]: DeleteFencesNV (will be remapped) */ "ip\0" "glDeleteFencesNV\0" "\0" - /* _mesa_function_pool[12274]: ColorPointerListIBM (dynamic) */ + /* _mesa_function_pool[12555]: ColorPointerListIBM (dynamic) */ "iiipi\0" "glColorPointerListIBM\0" "\0" - /* _mesa_function_pool[12303]: BindBufferRangeEXT (will be remapped) */ + /* _mesa_function_pool[12584]: BindBufferRangeEXT (will be remapped) */ "iiiii\0" "glBindBufferRangeEXT\0" "glBindBufferRange\0" "\0" - /* _mesa_function_pool[12349]: DepthMask (offset 211) */ + /* _mesa_function_pool[12630]: DepthMask (offset 211) */ "i\0" "glDepthMask\0" "\0" - /* _mesa_function_pool[12364]: IsShader (will be remapped) */ + /* _mesa_function_pool[12645]: IsShader (will be remapped) */ "i\0" "glIsShader\0" "\0" - /* _mesa_function_pool[12378]: Indexf (offset 46) */ + /* _mesa_function_pool[12659]: Indexf (offset 46) */ "f\0" "glIndexf\0" "\0" - /* _mesa_function_pool[12390]: GetImageTransformParameterivHP (dynamic) */ + /* _mesa_function_pool[12671]: GetImageTransformParameterivHP (dynamic) */ "iip\0" "glGetImageTransformParameterivHP\0" "\0" - /* _mesa_function_pool[12428]: Indexd (offset 44) */ + /* _mesa_function_pool[12709]: Indexd (offset 44) */ "d\0" "glIndexd\0" "\0" - /* _mesa_function_pool[12440]: GetMaterialiv (offset 270) */ + /* _mesa_function_pool[12721]: GetMaterialiv (offset 270) */ "iip\0" "glGetMaterialiv\0" "\0" - /* _mesa_function_pool[12461]: StencilOp (offset 244) */ + /* _mesa_function_pool[12742]: StencilOp (offset 244) */ "iii\0" "glStencilOp\0" "\0" - /* _mesa_function_pool[12478]: WindowPos4ivMESA (will be remapped) */ + /* _mesa_function_pool[12759]: WindowPos4ivMESA (will be remapped) */ "p\0" "glWindowPos4ivMESA\0" "\0" - /* _mesa_function_pool[12500]: FramebufferTextureLayer (dynamic) */ + /* _mesa_function_pool[12781]: FramebufferTextureLayer (dynamic) */ "iiiii\0" "glFramebufferTextureLayerARB\0" "\0" - /* _mesa_function_pool[12536]: MultiTexCoord3svARB (offset 399) */ + /* _mesa_function_pool[12817]: MultiTexCoord3svARB (offset 399) */ "ip\0" "glMultiTexCoord3sv\0" "glMultiTexCoord3svARB\0" "\0" - /* _mesa_function_pool[12581]: TexEnvfv (offset 185) */ + /* _mesa_function_pool[12862]: TexEnvfv (offset 185) */ "iip\0" "glTexEnvfv\0" "\0" - /* _mesa_function_pool[12597]: MultiTexCoord4iARB (offset 404) */ + /* _mesa_function_pool[12878]: MultiTexCoord4iARB (offset 404) */ "iiiii\0" "glMultiTexCoord4i\0" "glMultiTexCoord4iARB\0" "\0" - /* _mesa_function_pool[12643]: Indexs (offset 50) */ + /* _mesa_function_pool[12924]: Indexs (offset 50) */ "i\0" "glIndexs\0" "\0" - /* _mesa_function_pool[12655]: Binormal3ivEXT (dynamic) */ + /* _mesa_function_pool[12936]: Binormal3ivEXT (dynamic) */ "p\0" "glBinormal3ivEXT\0" "\0" - /* _mesa_function_pool[12675]: ResizeBuffersMESA (will be remapped) */ + /* _mesa_function_pool[12956]: ResizeBuffersMESA (will be remapped) */ "\0" "glResizeBuffersMESA\0" "\0" - /* _mesa_function_pool[12697]: BlendFuncSeparateiARB (will be remapped) */ + /* _mesa_function_pool[12978]: BlendFuncSeparateiARB (will be remapped) */ "iiiii\0" "glBlendFuncSeparateiARB\0" "\0" - /* _mesa_function_pool[12728]: GetUniformivARB (will be remapped) */ + /* _mesa_function_pool[13009]: GetUniformivARB (will be remapped) */ "iip\0" "glGetUniformiv\0" "glGetUniformivARB\0" "\0" - /* _mesa_function_pool[12766]: PixelTexGenParameteriSGIS (will be remapped) */ + /* _mesa_function_pool[13047]: PixelTexGenParameteriSGIS (will be remapped) */ "ii\0" "glPixelTexGenParameteriSGIS\0" "\0" - /* _mesa_function_pool[12798]: VertexPointervINTEL (dynamic) */ + /* _mesa_function_pool[13079]: VertexPointervINTEL (dynamic) */ "iip\0" "glVertexPointervINTEL\0" "\0" - /* _mesa_function_pool[12825]: Vertex2i (offset 130) */ + /* _mesa_function_pool[13106]: Vertex2i (offset 130) */ "ii\0" "glVertex2i\0" "\0" - /* _mesa_function_pool[12840]: LoadMatrixf (offset 291) */ + /* _mesa_function_pool[13121]: LoadMatrixf (offset 291) */ "p\0" "glLoadMatrixf\0" "\0" - /* _mesa_function_pool[12857]: VertexAttribI1uivEXT (will be remapped) */ + /* _mesa_function_pool[13138]: VertexAttribI1uivEXT (will be remapped) */ "ip\0" "glVertexAttribI1uivEXT\0" "glVertexAttribI1uiv\0" "\0" - /* _mesa_function_pool[12904]: Vertex2f (offset 128) */ + /* _mesa_function_pool[13185]: Vertex2f (offset 128) */ "ff\0" "glVertex2f\0" "\0" - /* _mesa_function_pool[12919]: ReplacementCodeuiColor4fNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[13200]: ReplacementCodeuiColor4fNormal3fVertex3fvSUN (dynamic) */ "pppp\0" "glReplacementCodeuiColor4fNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[12972]: Color4bv (offset 26) */ + /* _mesa_function_pool[13253]: Color4bv (offset 26) */ "p\0" "glColor4bv\0" "\0" - /* _mesa_function_pool[12986]: VertexPointer (offset 321) */ + /* _mesa_function_pool[13267]: VertexPointer (offset 321) */ "iiip\0" "glVertexPointer\0" "\0" - /* _mesa_function_pool[13008]: SecondaryColor3uiEXT (will be remapped) */ + /* _mesa_function_pool[13289]: SecondaryColor3uiEXT (will be remapped) */ "iii\0" "glSecondaryColor3ui\0" "glSecondaryColor3uiEXT\0" "\0" - /* _mesa_function_pool[13056]: StartInstrumentsSGIX (dynamic) */ + /* _mesa_function_pool[13337]: StartInstrumentsSGIX (dynamic) */ "\0" "glStartInstrumentsSGIX\0" "\0" - /* _mesa_function_pool[13081]: SecondaryColor3usvEXT (will be remapped) */ + /* _mesa_function_pool[13362]: SecondaryColor3usvEXT (will be remapped) */ "p\0" "glSecondaryColor3usv\0" "glSecondaryColor3usvEXT\0" "\0" - /* _mesa_function_pool[13129]: VertexAttrib2fvNV (will be remapped) */ + /* _mesa_function_pool[13410]: VertexAttrib2fvNV (will be remapped) */ "ip\0" "glVertexAttrib2fvNV\0" "\0" - /* _mesa_function_pool[13153]: ProgramLocalParameter4dvARB (will be remapped) */ + /* _mesa_function_pool[13434]: ProgramLocalParameter4dvARB (will be remapped) */ "iip\0" "glProgramLocalParameter4dvARB\0" "\0" - /* _mesa_function_pool[13188]: DeleteLists (offset 4) */ + /* _mesa_function_pool[13469]: DeleteLists (offset 4) */ "ii\0" "glDeleteLists\0" "\0" - /* _mesa_function_pool[13206]: LogicOp (offset 242) */ + /* _mesa_function_pool[13487]: LogicOp (offset 242) */ "i\0" "glLogicOp\0" "\0" - /* _mesa_function_pool[13219]: MatrixIndexuivARB (dynamic) */ + /* _mesa_function_pool[13500]: MatrixIndexuivARB (dynamic) */ "ip\0" "glMatrixIndexuivARB\0" "\0" - /* _mesa_function_pool[13243]: Vertex2s (offset 132) */ + /* _mesa_function_pool[13524]: Vertex2s (offset 132) */ "ii\0" "glVertex2s\0" "\0" - /* _mesa_function_pool[13258]: RenderbufferStorageMultisample (will be remapped) */ + /* _mesa_function_pool[13539]: RenderbufferStorageMultisample (will be remapped) */ "iiiii\0" "glRenderbufferStorageMultisample\0" "glRenderbufferStorageMultisampleEXT\0" "\0" - /* _mesa_function_pool[13334]: TexCoord4fv (offset 121) */ + /* _mesa_function_pool[13615]: TexCoord4fv (offset 121) */ "p\0" "glTexCoord4fv\0" "\0" - /* _mesa_function_pool[13351]: Tangent3sEXT (dynamic) */ + /* _mesa_function_pool[13632]: Tangent3sEXT (dynamic) */ "iii\0" "glTangent3sEXT\0" "\0" - /* _mesa_function_pool[13371]: GlobalAlphaFactorfSUN (dynamic) */ + /* _mesa_function_pool[13652]: GlobalAlphaFactorfSUN (dynamic) */ "f\0" "glGlobalAlphaFactorfSUN\0" "\0" - /* _mesa_function_pool[13398]: MultiTexCoord3iARB (offset 396) */ + /* _mesa_function_pool[13679]: MultiTexCoord3iARB (offset 396) */ "iiii\0" "glMultiTexCoord3i\0" "glMultiTexCoord3iARB\0" "\0" - /* _mesa_function_pool[13443]: IsProgram (will be remapped) */ + /* _mesa_function_pool[13724]: IsProgram (will be remapped) */ "i\0" "glIsProgram\0" "\0" - /* _mesa_function_pool[13458]: TexCoordPointerListIBM (dynamic) */ + /* _mesa_function_pool[13739]: TexCoordPointerListIBM (dynamic) */ "iiipi\0" "glTexCoordPointerListIBM\0" "\0" - /* _mesa_function_pool[13490]: VertexAttribI4svEXT (will be remapped) */ + /* _mesa_function_pool[13771]: VertexAttribI4svEXT (will be remapped) */ "ip\0" "glVertexAttribI4svEXT\0" "glVertexAttribI4sv\0" "\0" - /* _mesa_function_pool[13535]: GlobalAlphaFactorusSUN (dynamic) */ + /* _mesa_function_pool[13816]: GlobalAlphaFactorusSUN (dynamic) */ "i\0" "glGlobalAlphaFactorusSUN\0" "\0" - /* _mesa_function_pool[13563]: VertexAttrib2dvNV (will be remapped) */ + /* _mesa_function_pool[13844]: VertexAttrib2dvNV (will be remapped) */ "ip\0" "glVertexAttrib2dvNV\0" "\0" - /* _mesa_function_pool[13587]: FramebufferRenderbufferEXT (will be remapped) */ + /* _mesa_function_pool[13868]: FramebufferRenderbufferEXT (will be remapped) */ "iiii\0" "glFramebufferRenderbuffer\0" "glFramebufferRenderbufferEXT\0" "\0" - /* _mesa_function_pool[13648]: ClearBufferuiv (will be remapped) */ + /* _mesa_function_pool[13929]: ClearBufferuiv (will be remapped) */ "iip\0" "glClearBufferuiv\0" "\0" - /* _mesa_function_pool[13670]: VertexAttrib1dvNV (will be remapped) */ + /* _mesa_function_pool[13951]: VertexAttrib1dvNV (will be remapped) */ "ip\0" "glVertexAttrib1dvNV\0" "\0" - /* _mesa_function_pool[13694]: GenTextures (offset 328) */ + /* _mesa_function_pool[13975]: GenTextures (offset 328) */ "ip\0" "glGenTextures\0" "glGenTexturesEXT\0" "\0" - /* _mesa_function_pool[13729]: FramebufferTextureARB (will be remapped) */ + /* _mesa_function_pool[14010]: FramebufferTextureARB (will be remapped) */ "iiii\0" "glFramebufferTextureARB\0" "\0" - /* _mesa_function_pool[13759]: SetFenceNV (will be remapped) */ + /* _mesa_function_pool[14040]: SetFenceNV (will be remapped) */ "ii\0" "glSetFenceNV\0" "\0" - /* _mesa_function_pool[13776]: FramebufferTexture1DEXT (will be remapped) */ + /* _mesa_function_pool[14057]: FramebufferTexture1DEXT (will be remapped) */ "iiiii\0" "glFramebufferTexture1D\0" "glFramebufferTexture1DEXT\0" "\0" - /* _mesa_function_pool[13832]: GetCombinerOutputParameterivNV (will be remapped) */ + /* _mesa_function_pool[14113]: GetCombinerOutputParameterivNV (will be remapped) */ "iiip\0" "glGetCombinerOutputParameterivNV\0" "\0" - /* _mesa_function_pool[13871]: MultiModeDrawArraysIBM (will be remapped) */ + /* _mesa_function_pool[14152]: MultiModeDrawArraysIBM (will be remapped) */ "pppii\0" "glMultiModeDrawArraysIBM\0" "\0" - /* _mesa_function_pool[13903]: PixelTexGenParameterivSGIS (will be remapped) */ + /* _mesa_function_pool[14184]: PixelTexGenParameterivSGIS (will be remapped) */ "ip\0" "glPixelTexGenParameterivSGIS\0" "\0" - /* _mesa_function_pool[13936]: TextureNormalEXT (dynamic) */ + /* _mesa_function_pool[14217]: TextureNormalEXT (dynamic) */ "i\0" "glTextureNormalEXT\0" "\0" - /* _mesa_function_pool[13958]: IndexPointerListIBM (dynamic) */ + /* _mesa_function_pool[14239]: IndexPointerListIBM (dynamic) */ "iipi\0" "glIndexPointerListIBM\0" "\0" - /* _mesa_function_pool[13986]: WeightfvARB (dynamic) */ + /* _mesa_function_pool[14267]: WeightfvARB (dynamic) */ "ip\0" "glWeightfvARB\0" "\0" - /* _mesa_function_pool[14004]: GetCombinerOutputParameterfvNV (will be remapped) */ + /* _mesa_function_pool[14285]: GetCombinerOutputParameterfvNV (will be remapped) */ "iiip\0" "glGetCombinerOutputParameterfvNV\0" "\0" - /* _mesa_function_pool[14043]: RasterPos2sv (offset 69) */ + /* _mesa_function_pool[14324]: RasterPos2sv (offset 69) */ "p\0" "glRasterPos2sv\0" "\0" - /* _mesa_function_pool[14061]: Color4ubv (offset 36) */ + /* _mesa_function_pool[14342]: Color4ubv (offset 36) */ "p\0" "glColor4ubv\0" "\0" - /* _mesa_function_pool[14076]: DrawBuffer (offset 202) */ + /* _mesa_function_pool[14357]: DrawBuffer (offset 202) */ "i\0" "glDrawBuffer\0" "\0" - /* _mesa_function_pool[14092]: TexCoord2fv (offset 105) */ + /* _mesa_function_pool[14373]: TexCoord2fv (offset 105) */ "p\0" "glTexCoord2fv\0" "\0" - /* _mesa_function_pool[14109]: WindowPos4fMESA (will be remapped) */ + /* _mesa_function_pool[14390]: WindowPos4fMESA (will be remapped) */ "ffff\0" "glWindowPos4fMESA\0" "\0" - /* _mesa_function_pool[14133]: TexCoord1sv (offset 101) */ + /* _mesa_function_pool[14414]: TexCoord1sv (offset 101) */ "p\0" "glTexCoord1sv\0" "\0" - /* _mesa_function_pool[14150]: WindowPos3dvMESA (will be remapped) */ + /* _mesa_function_pool[14431]: WindowPos3dvMESA (will be remapped) */ "p\0" "glWindowPos3dv\0" "glWindowPos3dvARB\0" "glWindowPos3dvMESA\0" "\0" - /* _mesa_function_pool[14205]: DepthFunc (offset 245) */ + /* _mesa_function_pool[14486]: DepthFunc (offset 245) */ "i\0" "glDepthFunc\0" "\0" - /* _mesa_function_pool[14220]: PixelMapusv (offset 253) */ + /* _mesa_function_pool[14501]: PixelMapusv (offset 253) */ "iip\0" "glPixelMapusv\0" "\0" - /* _mesa_function_pool[14239]: GetQueryObjecti64vEXT (will be remapped) */ + /* _mesa_function_pool[14520]: GetQueryObjecti64vEXT (will be remapped) */ "iip\0" "glGetQueryObjecti64vEXT\0" "\0" - /* _mesa_function_pool[14268]: MultiTexCoord1dARB (offset 376) */ + /* _mesa_function_pool[14549]: MultiTexCoord1dARB (offset 376) */ "id\0" "glMultiTexCoord1d\0" "glMultiTexCoord1dARB\0" "\0" - /* _mesa_function_pool[14311]: PointParameterivNV (will be remapped) */ + /* _mesa_function_pool[14592]: PointParameterivNV (will be remapped) */ "ip\0" "glPointParameteriv\0" "glPointParameterivNV\0" "\0" - /* _mesa_function_pool[14355]: IsSampler (will be remapped) */ + /* _mesa_function_pool[14636]: IsSampler (will be remapped) */ "i\0" "glIsSampler\0" "\0" - /* _mesa_function_pool[14370]: BlendFunc (offset 241) */ + /* _mesa_function_pool[14651]: BlendFunc (offset 241) */ "ii\0" "glBlendFunc\0" "\0" - /* _mesa_function_pool[14386]: EndTransformFeedbackEXT (will be remapped) */ + /* _mesa_function_pool[14667]: EndTransformFeedbackEXT (will be remapped) */ "\0" "glEndTransformFeedbackEXT\0" "glEndTransformFeedback\0" "\0" - /* _mesa_function_pool[14437]: Uniform2fvARB (will be remapped) */ + /* _mesa_function_pool[14718]: Uniform2fvARB (will be remapped) */ "iip\0" "glUniform2fv\0" "glUniform2fvARB\0" "\0" - /* _mesa_function_pool[14471]: BufferParameteriAPPLE (will be remapped) */ + /* _mesa_function_pool[14752]: BufferParameteriAPPLE (will be remapped) */ "iii\0" "glBufferParameteriAPPLE\0" "\0" - /* _mesa_function_pool[14500]: MultiTexCoord3dvARB (offset 393) */ + /* _mesa_function_pool[14781]: MultiTexCoord3dvARB (offset 393) */ "ip\0" "glMultiTexCoord3dv\0" "glMultiTexCoord3dvARB\0" "\0" - /* _mesa_function_pool[14545]: ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[14826]: ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (dynamic) */ "pppp\0" "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[14601]: DeleteObjectARB (will be remapped) */ + /* _mesa_function_pool[14882]: DeleteObjectARB (will be remapped) */ "i\0" "glDeleteObjectARB\0" "\0" - /* _mesa_function_pool[14622]: GetShaderPrecisionFormat (will be remapped) */ + /* _mesa_function_pool[14903]: GetShaderPrecisionFormat (will be remapped) */ "iipp\0" "glGetShaderPrecisionFormat\0" "\0" - /* _mesa_function_pool[14655]: MatrixIndexPointerARB (dynamic) */ + /* _mesa_function_pool[14936]: MatrixIndexPointerARB (dynamic) */ "iiip\0" "glMatrixIndexPointerARB\0" "\0" - /* _mesa_function_pool[14685]: ProgramNamedParameter4dvNV (will be remapped) */ + /* _mesa_function_pool[14966]: ProgramNamedParameter4dvNV (will be remapped) */ "iipp\0" "glProgramNamedParameter4dvNV\0" "\0" - /* _mesa_function_pool[14720]: Tangent3fvEXT (dynamic) */ + /* _mesa_function_pool[15001]: Tangent3fvEXT (dynamic) */ "p\0" "glTangent3fvEXT\0" "\0" - /* _mesa_function_pool[14739]: Flush (offset 217) */ + /* _mesa_function_pool[15020]: Flush (offset 217) */ "\0" "glFlush\0" "\0" - /* _mesa_function_pool[14749]: Color4uiv (offset 38) */ + /* _mesa_function_pool[15030]: Color4uiv (offset 38) */ "p\0" "glColor4uiv\0" "\0" - /* _mesa_function_pool[14764]: VertexAttribI4iEXT (will be remapped) */ + /* _mesa_function_pool[15045]: VertexAttribI4iEXT (will be remapped) */ "iiiii\0" "glVertexAttribI4iEXT\0" "glVertexAttribI4i\0" "\0" - /* _mesa_function_pool[14810]: GenVertexArrays (will be remapped) */ + /* _mesa_function_pool[15091]: GenVertexArrays (will be remapped) */ "ip\0" "glGenVertexArrays\0" "\0" - /* _mesa_function_pool[14832]: Uniform3uivEXT (will be remapped) */ + /* _mesa_function_pool[15113]: Uniform3uivEXT (will be remapped) */ "iip\0" "glUniform3uivEXT\0" "glUniform3uiv\0" "\0" - /* _mesa_function_pool[14868]: RasterPos3sv (offset 77) */ + /* _mesa_function_pool[15149]: RasterPos3sv (offset 77) */ "p\0" "glRasterPos3sv\0" "\0" - /* _mesa_function_pool[14886]: BindFramebufferEXT (will be remapped) */ + /* _mesa_function_pool[15167]: BindFramebufferEXT (will be remapped) */ "ii\0" "glBindFramebuffer\0" "glBindFramebufferEXT\0" "\0" - /* _mesa_function_pool[14929]: ReferencePlaneSGIX (dynamic) */ + /* _mesa_function_pool[15210]: ReferencePlaneSGIX (dynamic) */ "p\0" "glReferencePlaneSGIX\0" "\0" - /* _mesa_function_pool[14953]: PushAttrib (offset 219) */ + /* _mesa_function_pool[15234]: PushAttrib (offset 219) */ "i\0" "glPushAttrib\0" "\0" - /* _mesa_function_pool[14969]: RasterPos2i (offset 66) */ + /* _mesa_function_pool[15250]: RasterPos2i (offset 66) */ "ii\0" "glRasterPos2i\0" "\0" - /* _mesa_function_pool[14987]: ValidateProgramARB (will be remapped) */ + /* _mesa_function_pool[15268]: ValidateProgramARB (will be remapped) */ "i\0" "glValidateProgram\0" "glValidateProgramARB\0" "\0" - /* _mesa_function_pool[15029]: TexParameteriv (offset 181) */ + /* _mesa_function_pool[15310]: TexParameteriv (offset 181) */ "iip\0" "glTexParameteriv\0" "\0" - /* _mesa_function_pool[15051]: UnlockArraysEXT (will be remapped) */ + /* _mesa_function_pool[15332]: UnlockArraysEXT (will be remapped) */ "\0" "glUnlockArraysEXT\0" "\0" - /* _mesa_function_pool[15071]: TexCoord2fColor3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[15352]: TexCoord2fColor3fVertex3fSUN (dynamic) */ "ffffffff\0" "glTexCoord2fColor3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[15112]: WindowPos3fvMESA (will be remapped) */ + /* _mesa_function_pool[15393]: WindowPos3fvMESA (will be remapped) */ "p\0" "glWindowPos3fv\0" "glWindowPos3fvARB\0" "glWindowPos3fvMESA\0" "\0" - /* _mesa_function_pool[15167]: RasterPos2f (offset 64) */ + /* _mesa_function_pool[15448]: RasterPos2f (offset 64) */ "ff\0" "glRasterPos2f\0" "\0" - /* _mesa_function_pool[15185]: VertexAttrib1svNV (will be remapped) */ + /* _mesa_function_pool[15466]: VertexAttrib1svNV (will be remapped) */ "ip\0" "glVertexAttrib1svNV\0" "\0" - /* _mesa_function_pool[15209]: RasterPos2d (offset 62) */ + /* _mesa_function_pool[15490]: RasterPos2d (offset 62) */ "dd\0" "glRasterPos2d\0" "\0" - /* _mesa_function_pool[15227]: RasterPos3fv (offset 73) */ + /* _mesa_function_pool[15508]: RasterPos3fv (offset 73) */ "p\0" "glRasterPos3fv\0" "\0" - /* _mesa_function_pool[15245]: CopyTexSubImage3D (offset 373) */ + /* _mesa_function_pool[15526]: CopyTexSubImage3D (offset 373) */ "iiiiiiiii\0" "glCopyTexSubImage3D\0" "glCopyTexSubImage3DEXT\0" "\0" - /* _mesa_function_pool[15299]: VertexAttrib2dARB (will be remapped) */ + /* _mesa_function_pool[15580]: VertexAttrib2dARB (will be remapped) */ "idd\0" "glVertexAttrib2d\0" "glVertexAttrib2dARB\0" "\0" - /* _mesa_function_pool[15341]: Color4ub (offset 35) */ + /* _mesa_function_pool[15622]: Color4ub (offset 35) */ "iiii\0" "glColor4ub\0" "\0" - /* _mesa_function_pool[15358]: GetInteger64v (will be remapped) */ + /* _mesa_function_pool[15639]: GetInteger64v (will be remapped) */ "ip\0" "glGetInteger64v\0" "\0" - /* _mesa_function_pool[15378]: TextureColorMaskSGIS (dynamic) */ + /* _mesa_function_pool[15659]: TextureColorMaskSGIS (dynamic) */ "iiii\0" "glTextureColorMaskSGIS\0" "\0" - /* _mesa_function_pool[15407]: RasterPos2s (offset 68) */ + /* _mesa_function_pool[15688]: RasterPos2s (offset 68) */ "ii\0" "glRasterPos2s\0" "\0" - /* _mesa_function_pool[15425]: GetColorTable (offset 343) */ + /* _mesa_function_pool[15706]: GetColorTable (offset 343) */ "iiip\0" "glGetColorTable\0" "glGetColorTableSGI\0" "glGetColorTableEXT\0" "\0" - /* _mesa_function_pool[15485]: SelectBuffer (offset 195) */ + /* _mesa_function_pool[15766]: SelectBuffer (offset 195) */ "ip\0" "glSelectBuffer\0" "\0" - /* _mesa_function_pool[15504]: Indexiv (offset 49) */ + /* _mesa_function_pool[15785]: Indexiv (offset 49) */ "p\0" "glIndexiv\0" "\0" - /* _mesa_function_pool[15517]: TexCoord3i (offset 114) */ + /* _mesa_function_pool[15798]: TexCoord3i (offset 114) */ "iii\0" "glTexCoord3i\0" "\0" - /* _mesa_function_pool[15535]: CopyColorTable (offset 342) */ + /* _mesa_function_pool[15816]: CopyColorTable (offset 342) */ "iiiii\0" "glCopyColorTable\0" "glCopyColorTableSGI\0" "\0" - /* _mesa_function_pool[15579]: GetHistogramParameterfv (offset 362) */ + /* _mesa_function_pool[15860]: GetHistogramParameterfv (offset 362) */ "iip\0" "glGetHistogramParameterfv\0" "glGetHistogramParameterfvEXT\0" "\0" - /* _mesa_function_pool[15639]: Frustum (offset 289) */ + /* _mesa_function_pool[15920]: Frustum (offset 289) */ "dddddd\0" "glFrustum\0" "\0" - /* _mesa_function_pool[15657]: GetString (offset 275) */ + /* _mesa_function_pool[15938]: GetString (offset 275) */ "i\0" "glGetString\0" "\0" - /* _mesa_function_pool[15672]: ColorPointervINTEL (dynamic) */ + /* _mesa_function_pool[15953]: ColorPointervINTEL (dynamic) */ "iip\0" "glColorPointervINTEL\0" "\0" - /* _mesa_function_pool[15698]: TexEnvf (offset 184) */ + /* _mesa_function_pool[15979]: TexEnvf (offset 184) */ "iif\0" "glTexEnvf\0" "\0" - /* _mesa_function_pool[15713]: TexCoord3d (offset 110) */ + /* _mesa_function_pool[15994]: TexCoord3d (offset 110) */ "ddd\0" "glTexCoord3d\0" "\0" - /* _mesa_function_pool[15731]: AlphaFragmentOp1ATI (will be remapped) */ + /* _mesa_function_pool[16012]: AlphaFragmentOp1ATI (will be remapped) */ "iiiiii\0" "glAlphaFragmentOp1ATI\0" "\0" - /* _mesa_function_pool[15761]: TexCoord3f (offset 112) */ + /* _mesa_function_pool[16042]: TexCoord3f (offset 112) */ "fff\0" "glTexCoord3f\0" "\0" - /* _mesa_function_pool[15779]: MultiTexCoord3ivARB (offset 397) */ + /* _mesa_function_pool[16060]: MultiTexCoord3ivARB (offset 397) */ "ip\0" "glMultiTexCoord3iv\0" "glMultiTexCoord3ivARB\0" "\0" - /* _mesa_function_pool[15824]: MultiTexCoord2sARB (offset 390) */ + /* _mesa_function_pool[16105]: MultiTexCoord2sARB (offset 390) */ "iii\0" "glMultiTexCoord2s\0" "glMultiTexCoord2sARB\0" "\0" - /* _mesa_function_pool[15868]: VertexAttrib1dvARB (will be remapped) */ + /* _mesa_function_pool[16149]: VertexAttrib1dvARB (will be remapped) */ "ip\0" "glVertexAttrib1dv\0" "glVertexAttrib1dvARB\0" "\0" - /* _mesa_function_pool[15911]: DeleteTextures (offset 327) */ + /* _mesa_function_pool[16192]: GetnHistogramARB (will be remapped) */ + "iiiiip\0" + "glGetnHistogramARB\0" + "\0" + /* _mesa_function_pool[16219]: DeleteTextures (offset 327) */ "ip\0" "glDeleteTextures\0" "glDeleteTexturesEXT\0" "\0" - /* _mesa_function_pool[15952]: TexCoordPointerEXT (will be remapped) */ + /* _mesa_function_pool[16260]: TexCoordPointerEXT (will be remapped) */ "iiiip\0" "glTexCoordPointerEXT\0" "\0" - /* _mesa_function_pool[15980]: TexSubImage4DSGIS (dynamic) */ + /* _mesa_function_pool[16288]: TexSubImage4DSGIS (dynamic) */ "iiiiiiiiiiiip\0" "glTexSubImage4DSGIS\0" "\0" - /* _mesa_function_pool[16015]: TexCoord3s (offset 116) */ + /* _mesa_function_pool[16323]: TexCoord3s (offset 116) */ "iii\0" "glTexCoord3s\0" "\0" - /* _mesa_function_pool[16033]: GetTexLevelParameteriv (offset 285) */ + /* _mesa_function_pool[16341]: GetTexLevelParameteriv (offset 285) */ "iiip\0" "glGetTexLevelParameteriv\0" "\0" - /* _mesa_function_pool[16064]: CombinerStageParameterfvNV (dynamic) */ + /* _mesa_function_pool[16372]: CombinerStageParameterfvNV (dynamic) */ "iip\0" "glCombinerStageParameterfvNV\0" "\0" - /* _mesa_function_pool[16098]: StopInstrumentsSGIX (dynamic) */ + /* _mesa_function_pool[16406]: StopInstrumentsSGIX (dynamic) */ "i\0" "glStopInstrumentsSGIX\0" "\0" - /* _mesa_function_pool[16123]: TexCoord4fColor4fNormal3fVertex4fSUN (dynamic) */ + /* _mesa_function_pool[16431]: TexCoord4fColor4fNormal3fVertex4fSUN (dynamic) */ "fffffffffffffff\0" "glTexCoord4fColor4fNormal3fVertex4fSUN\0" "\0" - /* _mesa_function_pool[16179]: ClearAccum (offset 204) */ + /* _mesa_function_pool[16487]: ClearAccum (offset 204) */ "ffff\0" "glClearAccum\0" "\0" - /* _mesa_function_pool[16198]: DeformSGIX (dynamic) */ + /* _mesa_function_pool[16506]: DeformSGIX (dynamic) */ "i\0" "glDeformSGIX\0" "\0" - /* _mesa_function_pool[16214]: GetVertexAttribfvARB (will be remapped) */ + /* _mesa_function_pool[16522]: GetVertexAttribfvARB (will be remapped) */ "iip\0" "glGetVertexAttribfv\0" "glGetVertexAttribfvARB\0" "\0" - /* _mesa_function_pool[16262]: SecondaryColor3ivEXT (will be remapped) */ + /* _mesa_function_pool[16570]: SecondaryColor3ivEXT (will be remapped) */ "p\0" "glSecondaryColor3iv\0" "glSecondaryColor3ivEXT\0" "\0" - /* _mesa_function_pool[16308]: TexCoord4iv (offset 123) */ + /* _mesa_function_pool[16616]: TexCoord4iv (offset 123) */ "p\0" "glTexCoord4iv\0" "\0" - /* _mesa_function_pool[16325]: VertexAttribI4uiEXT (will be remapped) */ + /* _mesa_function_pool[16633]: VertexAttribI4uiEXT (will be remapped) */ "iiiii\0" "glVertexAttribI4uiEXT\0" "glVertexAttribI4ui\0" "\0" - /* _mesa_function_pool[16373]: GetFragmentMaterialfvSGIX (dynamic) */ + /* _mesa_function_pool[16681]: GetFragmentMaterialfvSGIX (dynamic) */ "iip\0" "glGetFragmentMaterialfvSGIX\0" "\0" - /* _mesa_function_pool[16406]: UniformMatrix4x2fv (will be remapped) */ + /* _mesa_function_pool[16714]: UniformMatrix4x2fv (will be remapped) */ "iiip\0" "glUniformMatrix4x2fv\0" "\0" - /* _mesa_function_pool[16433]: GetDetailTexFuncSGIS (dynamic) */ + /* _mesa_function_pool[16741]: GetDetailTexFuncSGIS (dynamic) */ "ip\0" "glGetDetailTexFuncSGIS\0" "\0" - /* _mesa_function_pool[16460]: GetCombinerStageParameterfvNV (dynamic) */ + /* _mesa_function_pool[16768]: GetCombinerStageParameterfvNV (dynamic) */ "iip\0" "glGetCombinerStageParameterfvNV\0" "\0" - /* _mesa_function_pool[16497]: SamplerParameterIiv (will be remapped) */ + /* _mesa_function_pool[16805]: SamplerParameterIiv (will be remapped) */ "iip\0" "glSamplerParameterIiv\0" "\0" - /* _mesa_function_pool[16524]: PolygonOffset (offset 319) */ + /* _mesa_function_pool[16832]: PolygonOffset (offset 319) */ "ff\0" "glPolygonOffset\0" "\0" - /* _mesa_function_pool[16544]: BindVertexArray (will be remapped) */ + /* _mesa_function_pool[16852]: BindVertexArray (will be remapped) */ "i\0" "glBindVertexArray\0" "\0" - /* _mesa_function_pool[16565]: Color4ubVertex2fvSUN (dynamic) */ + /* _mesa_function_pool[16873]: Color4ubVertex2fvSUN (dynamic) */ "pp\0" "glColor4ubVertex2fvSUN\0" "\0" - /* _mesa_function_pool[16592]: Rectd (offset 86) */ + /* _mesa_function_pool[16900]: Rectd (offset 86) */ "dddd\0" "glRectd\0" "\0" - /* _mesa_function_pool[16606]: TexFilterFuncSGIS (dynamic) */ + /* _mesa_function_pool[16914]: TexFilterFuncSGIS (dynamic) */ "iiip\0" "glTexFilterFuncSGIS\0" "\0" - /* _mesa_function_pool[16632]: TextureBarrierNV (will be remapped) */ + /* _mesa_function_pool[16940]: TextureBarrierNV (will be remapped) */ "\0" "glTextureBarrierNV\0" "\0" - /* _mesa_function_pool[16653]: SamplerParameterfv (will be remapped) */ + /* _mesa_function_pool[16961]: SamplerParameterfv (will be remapped) */ "iip\0" "glSamplerParameterfv\0" "\0" - /* _mesa_function_pool[16679]: VertexAttribI4ubvEXT (will be remapped) */ + /* _mesa_function_pool[16987]: VertexAttribI4ubvEXT (will be remapped) */ "ip\0" "glVertexAttribI4ubvEXT\0" "glVertexAttribI4ubv\0" "\0" - /* _mesa_function_pool[16726]: GetAttribLocationARB (will be remapped) */ + /* _mesa_function_pool[17034]: GetAttribLocationARB (will be remapped) */ "ip\0" "glGetAttribLocation\0" "glGetAttribLocationARB\0" "\0" - /* _mesa_function_pool[16773]: RasterPos3i (offset 74) */ + /* _mesa_function_pool[17081]: RasterPos3i (offset 74) */ "iii\0" "glRasterPos3i\0" "\0" - /* _mesa_function_pool[16792]: BlendEquationSeparateiARB (will be remapped) */ + /* _mesa_function_pool[17100]: BlendEquationSeparateiARB (will be remapped) */ "iii\0" "glBlendEquationSeparateiARB\0" "\0" - /* _mesa_function_pool[16825]: VertexAttrib4ubvARB (will be remapped) */ + /* _mesa_function_pool[17133]: VertexAttrib4ubvARB (will be remapped) */ "ip\0" "glVertexAttrib4ubv\0" "glVertexAttrib4ubvARB\0" "\0" - /* _mesa_function_pool[16870]: DetailTexFuncSGIS (dynamic) */ + /* _mesa_function_pool[17178]: DetailTexFuncSGIS (dynamic) */ "iip\0" "glDetailTexFuncSGIS\0" "\0" - /* _mesa_function_pool[16895]: Normal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[17203]: Normal3fVertex3fSUN (dynamic) */ "ffffff\0" "glNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[16925]: CopyTexImage2D (offset 324) */ + /* _mesa_function_pool[17233]: CopyTexImage2D (offset 324) */ "iiiiiiii\0" "glCopyTexImage2D\0" "glCopyTexImage2DEXT\0" "\0" - /* _mesa_function_pool[16972]: GetBufferPointervARB (will be remapped) */ + /* _mesa_function_pool[17280]: GetBufferPointervARB (will be remapped) */ "iip\0" "glGetBufferPointerv\0" "glGetBufferPointervARB\0" "\0" - /* _mesa_function_pool[17020]: ProgramEnvParameter4fARB (will be remapped) */ + /* _mesa_function_pool[17328]: ProgramEnvParameter4fARB (will be remapped) */ "iiffff\0" "glProgramEnvParameter4fARB\0" "glProgramParameter4fNV\0" "\0" - /* _mesa_function_pool[17078]: Uniform3ivARB (will be remapped) */ + /* _mesa_function_pool[17386]: Uniform3ivARB (will be remapped) */ "iip\0" "glUniform3iv\0" "glUniform3ivARB\0" "\0" - /* _mesa_function_pool[17112]: Lightfv (offset 160) */ + /* _mesa_function_pool[17420]: Lightfv (offset 160) */ "iip\0" "glLightfv\0" "\0" - /* _mesa_function_pool[17127]: PrimitiveRestartIndexNV (will be remapped) */ + /* _mesa_function_pool[17435]: PrimitiveRestartIndexNV (will be remapped) */ "i\0" "glPrimitiveRestartIndexNV\0" "glPrimitiveRestartIndex\0" "\0" - /* _mesa_function_pool[17180]: ClearDepth (offset 208) */ + /* _mesa_function_pool[17488]: ClearDepth (offset 208) */ "d\0" "glClearDepth\0" "\0" - /* _mesa_function_pool[17196]: GetFenceivNV (will be remapped) */ + /* _mesa_function_pool[17504]: GetFenceivNV (will be remapped) */ "iip\0" "glGetFenceivNV\0" "\0" - /* _mesa_function_pool[17216]: WindowPos4dvMESA (will be remapped) */ + /* _mesa_function_pool[17524]: WindowPos4dvMESA (will be remapped) */ "p\0" "glWindowPos4dvMESA\0" "\0" - /* _mesa_function_pool[17238]: ColorSubTable (offset 346) */ + /* _mesa_function_pool[17546]: ColorSubTable (offset 346) */ "iiiiip\0" "glColorSubTable\0" "glColorSubTableEXT\0" "\0" - /* _mesa_function_pool[17281]: Color4fv (offset 30) */ + /* _mesa_function_pool[17589]: Color4fv (offset 30) */ "p\0" "glColor4fv\0" "\0" - /* _mesa_function_pool[17295]: MultiTexCoord4ivARB (offset 405) */ + /* _mesa_function_pool[17603]: MultiTexCoord4ivARB (offset 405) */ "ip\0" "glMultiTexCoord4iv\0" "glMultiTexCoord4ivARB\0" "\0" - /* _mesa_function_pool[17340]: ProgramLocalParameters4fvEXT (will be remapped) */ + /* _mesa_function_pool[17648]: GetnMinmaxARB (will be remapped) */ + "iiiiip\0" + "glGetnMinmaxARB\0" + "\0" + /* _mesa_function_pool[17672]: ProgramLocalParameters4fvEXT (will be remapped) */ "iiip\0" "glProgramLocalParameters4fvEXT\0" "\0" - /* _mesa_function_pool[17377]: ColorPointer (offset 308) */ + /* _mesa_function_pool[17709]: ColorPointer (offset 308) */ "iiip\0" "glColorPointer\0" "\0" - /* _mesa_function_pool[17398]: Rects (offset 92) */ + /* _mesa_function_pool[17730]: Rects (offset 92) */ "iiii\0" "glRects\0" "\0" - /* _mesa_function_pool[17412]: GetMapAttribParameterfvNV (dynamic) */ + /* _mesa_function_pool[17744]: GetMapAttribParameterfvNV (dynamic) */ "iiip\0" "glGetMapAttribParameterfvNV\0" "\0" - /* _mesa_function_pool[17446]: CreateShaderProgramEXT (will be remapped) */ + /* _mesa_function_pool[17778]: CreateShaderProgramEXT (will be remapped) */ "ip\0" "glCreateShaderProgramEXT\0" "\0" - /* _mesa_function_pool[17475]: ActiveProgramEXT (will be remapped) */ + /* _mesa_function_pool[17807]: ActiveProgramEXT (will be remapped) */ "i\0" "glActiveProgramEXT\0" "\0" - /* _mesa_function_pool[17497]: Lightiv (offset 162) */ + /* _mesa_function_pool[17829]: Lightiv (offset 162) */ "iip\0" "glLightiv\0" "\0" - /* _mesa_function_pool[17512]: VertexAttrib4sARB (will be remapped) */ + /* _mesa_function_pool[17844]: VertexAttrib4sARB (will be remapped) */ "iiiii\0" "glVertexAttrib4s\0" "glVertexAttrib4sARB\0" "\0" - /* _mesa_function_pool[17556]: GetQueryObjectuivARB (will be remapped) */ + /* _mesa_function_pool[17888]: GetQueryObjectuivARB (will be remapped) */ "iip\0" "glGetQueryObjectuiv\0" "glGetQueryObjectuivARB\0" "\0" - /* _mesa_function_pool[17604]: GetTexParameteriv (offset 283) */ + /* _mesa_function_pool[17936]: GetTexParameteriv (offset 283) */ "iip\0" "glGetTexParameteriv\0" "\0" - /* _mesa_function_pool[17629]: MapParameterivNV (dynamic) */ + /* _mesa_function_pool[17961]: MapParameterivNV (dynamic) */ "iip\0" "glMapParameterivNV\0" "\0" - /* _mesa_function_pool[17653]: GenRenderbuffersEXT (will be remapped) */ + /* _mesa_function_pool[17985]: GenRenderbuffersEXT (will be remapped) */ "ip\0" "glGenRenderbuffers\0" "glGenRenderbuffersEXT\0" "\0" - /* _mesa_function_pool[17698]: ClearBufferfv (will be remapped) */ + /* _mesa_function_pool[18030]: ClearBufferfv (will be remapped) */ "iip\0" "glClearBufferfv\0" "\0" - /* _mesa_function_pool[17719]: VertexAttrib2dvARB (will be remapped) */ + /* _mesa_function_pool[18051]: VertexAttrib2dvARB (will be remapped) */ "ip\0" "glVertexAttrib2dv\0" "glVertexAttrib2dvARB\0" "\0" - /* _mesa_function_pool[17762]: EdgeFlagPointerEXT (will be remapped) */ + /* _mesa_function_pool[18094]: EdgeFlagPointerEXT (will be remapped) */ "iip\0" "glEdgeFlagPointerEXT\0" "\0" - /* _mesa_function_pool[17788]: VertexAttribs2svNV (will be remapped) */ + /* _mesa_function_pool[18120]: VertexAttribs2svNV (will be remapped) */ "iip\0" "glVertexAttribs2svNV\0" "\0" - /* _mesa_function_pool[17814]: WeightbvARB (dynamic) */ + /* _mesa_function_pool[18146]: WeightbvARB (dynamic) */ "ip\0" "glWeightbvARB\0" "\0" - /* _mesa_function_pool[17832]: VertexAttrib2fvARB (will be remapped) */ + /* _mesa_function_pool[18164]: VertexAttrib2fvARB (will be remapped) */ "ip\0" "glVertexAttrib2fv\0" "glVertexAttrib2fvARB\0" "\0" - /* _mesa_function_pool[17875]: GetBufferParameterivARB (will be remapped) */ + /* _mesa_function_pool[18207]: GetBufferParameterivARB (will be remapped) */ "iip\0" "glGetBufferParameteriv\0" "glGetBufferParameterivARB\0" "\0" - /* _mesa_function_pool[17929]: Rectdv (offset 87) */ + /* _mesa_function_pool[18261]: Rectdv (offset 87) */ "pp\0" "glRectdv\0" "\0" - /* _mesa_function_pool[17942]: ListParameteriSGIX (dynamic) */ + /* _mesa_function_pool[18274]: ListParameteriSGIX (dynamic) */ "iii\0" "glListParameteriSGIX\0" "\0" - /* _mesa_function_pool[17968]: BlendEquationiARB (will be remapped) */ + /* _mesa_function_pool[18300]: BlendEquationiARB (will be remapped) */ "ii\0" "glBlendEquationiARB\0" "\0" - /* _mesa_function_pool[17992]: ReplacementCodeuiColor4fNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[18324]: ReplacementCodeuiColor4fNormal3fVertex3fSUN (dynamic) */ "iffffffffff\0" "glReplacementCodeuiColor4fNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[18051]: InstrumentsBufferSGIX (dynamic) */ + /* _mesa_function_pool[18383]: InstrumentsBufferSGIX (dynamic) */ "ip\0" "glInstrumentsBufferSGIX\0" "\0" - /* _mesa_function_pool[18079]: VertexAttrib4NivARB (will be remapped) */ + /* _mesa_function_pool[18411]: VertexAttrib4NivARB (will be remapped) */ "ip\0" "glVertexAttrib4Niv\0" "glVertexAttrib4NivARB\0" "\0" - /* _mesa_function_pool[18124]: DrawArraysInstancedARB (will be remapped) */ + /* _mesa_function_pool[18456]: DrawArraysInstancedARB (will be remapped) */ "iiii\0" "glDrawArraysInstancedARB\0" "glDrawArraysInstancedEXT\0" "glDrawArraysInstanced\0" "\0" - /* _mesa_function_pool[18202]: GetAttachedShaders (will be remapped) */ + /* _mesa_function_pool[18534]: GetAttachedShaders (will be remapped) */ "iipp\0" "glGetAttachedShaders\0" "\0" - /* _mesa_function_pool[18229]: GenVertexArraysAPPLE (will be remapped) */ + /* _mesa_function_pool[18561]: GenVertexArraysAPPLE (will be remapped) */ "ip\0" "glGenVertexArraysAPPLE\0" "\0" - /* _mesa_function_pool[18256]: ClearBufferfi (will be remapped) */ + /* _mesa_function_pool[18588]: ClearBufferfi (will be remapped) */ "iifi\0" "glClearBufferfi\0" "\0" - /* _mesa_function_pool[18278]: Materialiv (offset 172) */ + /* _mesa_function_pool[18610]: Materialiv (offset 172) */ "iip\0" "glMaterialiv\0" "\0" - /* _mesa_function_pool[18296]: PushClientAttrib (offset 335) */ + /* _mesa_function_pool[18628]: PushClientAttrib (offset 335) */ "i\0" "glPushClientAttrib\0" "\0" - /* _mesa_function_pool[18318]: SamplerParameteriv (will be remapped) */ + /* _mesa_function_pool[18650]: SamplerParameteriv (will be remapped) */ "iip\0" "glSamplerParameteriv\0" "\0" - /* _mesa_function_pool[18344]: TexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[18676]: TexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */ "pppp\0" "glTexCoord2fColor4fNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[18390]: WindowPos2iMESA (will be remapped) */ + /* _mesa_function_pool[18722]: WindowPos2iMESA (will be remapped) */ "ii\0" "glWindowPos2i\0" "glWindowPos2iARB\0" "glWindowPos2iMESA\0" "\0" - /* _mesa_function_pool[18443]: SampleMaskSGIS (will be remapped) */ + /* _mesa_function_pool[18775]: SampleMaskSGIS (will be remapped) */ "fi\0" "glSampleMaskSGIS\0" "glSampleMaskEXT\0" "\0" - /* _mesa_function_pool[18480]: SecondaryColor3fvEXT (will be remapped) */ + /* _mesa_function_pool[18812]: SecondaryColor3fvEXT (will be remapped) */ "p\0" "glSecondaryColor3fv\0" "glSecondaryColor3fvEXT\0" "\0" - /* _mesa_function_pool[18526]: PolygonMode (offset 174) */ + /* _mesa_function_pool[18858]: PolygonMode (offset 174) */ "ii\0" "glPolygonMode\0" "\0" - /* _mesa_function_pool[18544]: CompressedTexSubImage1DARB (will be remapped) */ + /* _mesa_function_pool[18876]: CompressedTexSubImage1DARB (will be remapped) */ "iiiiiip\0" "glCompressedTexSubImage1D\0" "glCompressedTexSubImage1DARB\0" "\0" - /* _mesa_function_pool[18608]: VertexAttribI1iEXT (will be remapped) */ + /* _mesa_function_pool[18940]: VertexAttribI1iEXT (will be remapped) */ "ii\0" "glVertexAttribI1iEXT\0" "glVertexAttribI1i\0" "\0" - /* _mesa_function_pool[18651]: TexCoord2fNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[18983]: TexCoord2fNormal3fVertex3fSUN (dynamic) */ "ffffffff\0" "glTexCoord2fNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[18693]: GetVertexAttribivNV (will be remapped) */ + /* _mesa_function_pool[19025]: GetVertexAttribivNV (will be remapped) */ "iip\0" "glGetVertexAttribivNV\0" "\0" - /* _mesa_function_pool[18720]: GetProgramStringARB (will be remapped) */ + /* _mesa_function_pool[19052]: GetProgramStringARB (will be remapped) */ "iip\0" "glGetProgramStringARB\0" "\0" - /* _mesa_function_pool[18747]: VertexAttribIPointerEXT (will be remapped) */ + /* _mesa_function_pool[19079]: GetnUniformdvARB (will be remapped) */ + "iiip\0" + "glGetnUniformdvARB\0" + "\0" + /* _mesa_function_pool[19104]: VertexAttribIPointerEXT (will be remapped) */ "iiiip\0" "glVertexAttribIPointerEXT\0" "glVertexAttribIPointer\0" "\0" - /* _mesa_function_pool[18803]: TexBumpParameterfvATI (will be remapped) */ + /* _mesa_function_pool[19160]: TexBumpParameterfvATI (will be remapped) */ "ip\0" "glTexBumpParameterfvATI\0" "\0" - /* _mesa_function_pool[18831]: Tangent3ivEXT (dynamic) */ + /* _mesa_function_pool[19188]: Tangent3ivEXT (dynamic) */ "p\0" "glTangent3ivEXT\0" "\0" - /* _mesa_function_pool[18850]: CompileShaderARB (will be remapped) */ + /* _mesa_function_pool[19207]: CompileShaderARB (will be remapped) */ "i\0" "glCompileShader\0" "glCompileShaderARB\0" "\0" - /* _mesa_function_pool[18888]: DeleteShader (will be remapped) */ + /* _mesa_function_pool[19245]: DeleteShader (will be remapped) */ "i\0" "glDeleteShader\0" "\0" - /* _mesa_function_pool[18906]: DisableClientState (offset 309) */ + /* _mesa_function_pool[19263]: DisableClientState (offset 309) */ "i\0" "glDisableClientState\0" "\0" - /* _mesa_function_pool[18930]: TexGeni (offset 192) */ + /* _mesa_function_pool[19287]: TexGeni (offset 192) */ "iii\0" "glTexGeni\0" "\0" - /* _mesa_function_pool[18945]: TexGenf (offset 190) */ + /* _mesa_function_pool[19302]: TexGenf (offset 190) */ "iif\0" "glTexGenf\0" "\0" - /* _mesa_function_pool[18960]: Uniform3fARB (will be remapped) */ + /* _mesa_function_pool[19317]: Uniform3fARB (will be remapped) */ "ifff\0" "glUniform3f\0" "glUniform3fARB\0" "\0" - /* _mesa_function_pool[18993]: TexGend (offset 188) */ + /* _mesa_function_pool[19350]: TexGend (offset 188) */ "iid\0" "glTexGend\0" "\0" - /* _mesa_function_pool[19008]: ListParameterfvSGIX (dynamic) */ + /* _mesa_function_pool[19365]: ListParameterfvSGIX (dynamic) */ "iip\0" "glListParameterfvSGIX\0" "\0" - /* _mesa_function_pool[19035]: GetPolygonStipple (offset 274) */ + /* _mesa_function_pool[19392]: GetPolygonStipple (offset 274) */ "p\0" "glGetPolygonStipple\0" "\0" - /* _mesa_function_pool[19058]: Tangent3dvEXT (dynamic) */ + /* _mesa_function_pool[19415]: Tangent3dvEXT (dynamic) */ "p\0" "glTangent3dvEXT\0" "\0" - /* _mesa_function_pool[19077]: BindBufferOffsetEXT (will be remapped) */ + /* _mesa_function_pool[19434]: BindBufferOffsetEXT (will be remapped) */ "iiii\0" "glBindBufferOffsetEXT\0" "\0" - /* _mesa_function_pool[19105]: WindowPos3sMESA (will be remapped) */ + /* _mesa_function_pool[19462]: WindowPos3sMESA (will be remapped) */ "iii\0" "glWindowPos3s\0" "glWindowPos3sARB\0" "glWindowPos3sMESA\0" "\0" - /* _mesa_function_pool[19159]: VertexAttrib2svNV (will be remapped) */ + /* _mesa_function_pool[19516]: VertexAttrib2svNV (will be remapped) */ "ip\0" "glVertexAttrib2svNV\0" "\0" - /* _mesa_function_pool[19183]: DisableIndexedEXT (will be remapped) */ + /* _mesa_function_pool[19540]: DisableIndexedEXT (will be remapped) */ "ii\0" "glDisableIndexedEXT\0" "glDisablei\0" "\0" - /* _mesa_function_pool[19218]: BindBufferBaseEXT (will be remapped) */ + /* _mesa_function_pool[19575]: BindBufferBaseEXT (will be remapped) */ "iii\0" "glBindBufferBaseEXT\0" "glBindBufferBase\0" "\0" - /* _mesa_function_pool[19260]: TexCoord2fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[19617]: TexCoord2fVertex3fvSUN (dynamic) */ "pp\0" "glTexCoord2fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[19289]: WindowPos4sMESA (will be remapped) */ + /* _mesa_function_pool[19646]: WindowPos4sMESA (will be remapped) */ "iiii\0" "glWindowPos4sMESA\0" "\0" - /* _mesa_function_pool[19313]: VertexAttrib4NuivARB (will be remapped) */ + /* _mesa_function_pool[19670]: GetnPixelMapuivARB (will be remapped) */ + "iip\0" + "glGetnPixelMapuivARB\0" + "\0" + /* _mesa_function_pool[19696]: VertexAttrib4NuivARB (will be remapped) */ "ip\0" "glVertexAttrib4Nuiv\0" "glVertexAttrib4NuivARB\0" "\0" - /* _mesa_function_pool[19360]: ClientActiveTextureARB (offset 375) */ + /* _mesa_function_pool[19743]: ClientActiveTextureARB (offset 375) */ "i\0" "glClientActiveTexture\0" "glClientActiveTextureARB\0" "\0" - /* _mesa_function_pool[19410]: GetSamplerParameterIuiv (will be remapped) */ + /* _mesa_function_pool[19793]: GetSamplerParameterIuiv (will be remapped) */ "iip\0" "glGetSamplerParameterIuiv\0" "\0" - /* _mesa_function_pool[19441]: ReplacementCodeusvSUN (dynamic) */ + /* _mesa_function_pool[19824]: ReplacementCodeusvSUN (dynamic) */ "p\0" "glReplacementCodeusvSUN\0" "\0" - /* _mesa_function_pool[19468]: Uniform4fARB (will be remapped) */ + /* _mesa_function_pool[19851]: Uniform4fARB (will be remapped) */ "iffff\0" "glUniform4f\0" "glUniform4fARB\0" "\0" - /* _mesa_function_pool[19502]: Color4sv (offset 34) */ + /* _mesa_function_pool[19885]: Color4sv (offset 34) */ "p\0" "glColor4sv\0" "\0" - /* _mesa_function_pool[19516]: FlushMappedBufferRange (will be remapped) */ + /* _mesa_function_pool[19899]: FlushMappedBufferRange (will be remapped) */ "iii\0" "glFlushMappedBufferRange\0" "\0" - /* _mesa_function_pool[19546]: IsProgramNV (will be remapped) */ + /* _mesa_function_pool[19929]: IsProgramNV (will be remapped) */ "i\0" "glIsProgramARB\0" "glIsProgramNV\0" "\0" - /* _mesa_function_pool[19578]: FlushMappedBufferRangeAPPLE (will be remapped) */ + /* _mesa_function_pool[19961]: FlushMappedBufferRangeAPPLE (will be remapped) */ "iii\0" "glFlushMappedBufferRangeAPPLE\0" "\0" - /* _mesa_function_pool[19613]: PixelZoom (offset 246) */ + /* _mesa_function_pool[19996]: PixelZoom (offset 246) */ "ff\0" "glPixelZoom\0" "\0" - /* _mesa_function_pool[19629]: ReplacementCodePointerSUN (dynamic) */ + /* _mesa_function_pool[20012]: ReplacementCodePointerSUN (dynamic) */ "iip\0" "glReplacementCodePointerSUN\0" "\0" - /* _mesa_function_pool[19662]: ProgramEnvParameter4dARB (will be remapped) */ + /* _mesa_function_pool[20045]: ProgramEnvParameter4dARB (will be remapped) */ "iidddd\0" "glProgramEnvParameter4dARB\0" "glProgramParameter4dNV\0" "\0" - /* _mesa_function_pool[19720]: ColorTableParameterfv (offset 340) */ + /* _mesa_function_pool[20103]: ColorTableParameterfv (offset 340) */ "iip\0" "glColorTableParameterfv\0" "glColorTableParameterfvSGI\0" "\0" - /* _mesa_function_pool[19776]: FragmentLightModelfSGIX (dynamic) */ + /* _mesa_function_pool[20159]: FragmentLightModelfSGIX (dynamic) */ "if\0" "glFragmentLightModelfSGIX\0" "\0" - /* _mesa_function_pool[19806]: Binormal3bvEXT (dynamic) */ + /* _mesa_function_pool[20189]: Binormal3bvEXT (dynamic) */ "p\0" "glBinormal3bvEXT\0" "\0" - /* _mesa_function_pool[19826]: PixelMapuiv (offset 252) */ + /* _mesa_function_pool[20209]: PixelMapuiv (offset 252) */ "iip\0" "glPixelMapuiv\0" "\0" - /* _mesa_function_pool[19845]: Color3dv (offset 12) */ + /* _mesa_function_pool[20228]: Color3dv (offset 12) */ "p\0" "glColor3dv\0" "\0" - /* _mesa_function_pool[19859]: IsTexture (offset 330) */ + /* _mesa_function_pool[20242]: IsTexture (offset 330) */ "i\0" "glIsTexture\0" "glIsTextureEXT\0" "\0" - /* _mesa_function_pool[19889]: GenSamplers (will be remapped) */ + /* _mesa_function_pool[20272]: GenSamplers (will be remapped) */ "ip\0" "glGenSamplers\0" "\0" - /* _mesa_function_pool[19907]: VertexWeightfvEXT (dynamic) */ + /* _mesa_function_pool[20290]: VertexWeightfvEXT (dynamic) */ "p\0" "glVertexWeightfvEXT\0" "\0" - /* _mesa_function_pool[19930]: VertexAttrib1dARB (will be remapped) */ + /* _mesa_function_pool[20313]: VertexAttrib1dARB (will be remapped) */ "id\0" "glVertexAttrib1d\0" "glVertexAttrib1dARB\0" "\0" - /* _mesa_function_pool[19971]: ImageTransformParameterivHP (dynamic) */ + /* _mesa_function_pool[20354]: ImageTransformParameterivHP (dynamic) */ "iip\0" "glImageTransformParameterivHP\0" "\0" - /* _mesa_function_pool[20006]: TexCoord4i (offset 122) */ + /* _mesa_function_pool[20389]: TexCoord4i (offset 122) */ "iiii\0" "glTexCoord4i\0" "\0" - /* _mesa_function_pool[20025]: DeleteQueriesARB (will be remapped) */ + /* _mesa_function_pool[20408]: DeleteQueriesARB (will be remapped) */ "ip\0" "glDeleteQueries\0" "glDeleteQueriesARB\0" "\0" - /* _mesa_function_pool[20064]: Color4ubVertex2fSUN (dynamic) */ + /* _mesa_function_pool[20447]: Color4ubVertex2fSUN (dynamic) */ "iiiiff\0" "glColor4ubVertex2fSUN\0" "\0" - /* _mesa_function_pool[20094]: FragmentColorMaterialSGIX (dynamic) */ + /* _mesa_function_pool[20477]: FragmentColorMaterialSGIX (dynamic) */ "ii\0" "glFragmentColorMaterialSGIX\0" "\0" - /* _mesa_function_pool[20126]: CurrentPaletteMatrixARB (dynamic) */ + /* _mesa_function_pool[20509]: CurrentPaletteMatrixARB (dynamic) */ "i\0" "glCurrentPaletteMatrixARB\0" "\0" - /* _mesa_function_pool[20155]: GetMapdv (offset 266) */ + /* _mesa_function_pool[20538]: GetMapdv (offset 266) */ "iip\0" "glGetMapdv\0" "\0" - /* _mesa_function_pool[20171]: ObjectPurgeableAPPLE (will be remapped) */ + /* _mesa_function_pool[20554]: ObjectPurgeableAPPLE (will be remapped) */ "iii\0" "glObjectPurgeableAPPLE\0" "\0" - /* _mesa_function_pool[20199]: GetStringi (will be remapped) */ + /* _mesa_function_pool[20582]: GetStringi (will be remapped) */ "ii\0" "glGetStringi\0" "\0" - /* _mesa_function_pool[20216]: SamplePatternSGIS (will be remapped) */ + /* _mesa_function_pool[20599]: SamplePatternSGIS (will be remapped) */ "i\0" "glSamplePatternSGIS\0" "glSamplePatternEXT\0" "\0" - /* _mesa_function_pool[20258]: PixelStoref (offset 249) */ + /* _mesa_function_pool[20641]: PixelStoref (offset 249) */ "if\0" "glPixelStoref\0" "\0" - /* _mesa_function_pool[20276]: IsQueryARB (will be remapped) */ + /* _mesa_function_pool[20659]: IsQueryARB (will be remapped) */ "i\0" "glIsQuery\0" "glIsQueryARB\0" "\0" - /* _mesa_function_pool[20302]: ReplacementCodeuiColor4ubVertex3fSUN (dynamic) */ + /* _mesa_function_pool[20685]: ReplacementCodeuiColor4ubVertex3fSUN (dynamic) */ "iiiiifff\0" "glReplacementCodeuiColor4ubVertex3fSUN\0" "\0" - /* _mesa_function_pool[20351]: PixelStorei (offset 250) */ + /* _mesa_function_pool[20734]: PixelStorei (offset 250) */ "ii\0" "glPixelStorei\0" "\0" - /* _mesa_function_pool[20369]: VertexAttrib4usvARB (will be remapped) */ + /* _mesa_function_pool[20752]: VertexAttrib4usvARB (will be remapped) */ "ip\0" "glVertexAttrib4usv\0" "glVertexAttrib4usvARB\0" "\0" - /* _mesa_function_pool[20414]: LinkProgramARB (will be remapped) */ + /* _mesa_function_pool[20797]: LinkProgramARB (will be remapped) */ "i\0" "glLinkProgram\0" "glLinkProgramARB\0" "\0" - /* _mesa_function_pool[20448]: VertexAttrib2fNV (will be remapped) */ + /* _mesa_function_pool[20831]: VertexAttrib2fNV (will be remapped) */ "iff\0" "glVertexAttrib2fNV\0" "\0" - /* _mesa_function_pool[20472]: ShaderSourceARB (will be remapped) */ + /* _mesa_function_pool[20855]: ShaderSourceARB (will be remapped) */ "iipp\0" "glShaderSource\0" "glShaderSourceARB\0" "\0" - /* _mesa_function_pool[20511]: FragmentMaterialiSGIX (dynamic) */ + /* _mesa_function_pool[20894]: FragmentMaterialiSGIX (dynamic) */ "iii\0" "glFragmentMaterialiSGIX\0" "\0" - /* _mesa_function_pool[20540]: EvalCoord2dv (offset 233) */ + /* _mesa_function_pool[20923]: EvalCoord2dv (offset 233) */ "p\0" "glEvalCoord2dv\0" "\0" - /* _mesa_function_pool[20558]: VertexAttrib3svARB (will be remapped) */ + /* _mesa_function_pool[20941]: VertexAttrib3svARB (will be remapped) */ "ip\0" "glVertexAttrib3sv\0" "glVertexAttrib3svARB\0" "\0" - /* _mesa_function_pool[20601]: ColorMaterial (offset 151) */ + /* _mesa_function_pool[20984]: ColorMaterial (offset 151) */ "ii\0" "glColorMaterial\0" "\0" - /* _mesa_function_pool[20621]: CompressedTexSubImage3DARB (will be remapped) */ + /* _mesa_function_pool[21004]: CompressedTexSubImage3DARB (will be remapped) */ "iiiiiiiiiip\0" "glCompressedTexSubImage3D\0" "glCompressedTexSubImage3DARB\0" "\0" - /* _mesa_function_pool[20689]: WindowPos2ivMESA (will be remapped) */ + /* _mesa_function_pool[21072]: WindowPos2ivMESA (will be remapped) */ "p\0" "glWindowPos2iv\0" "glWindowPos2ivARB\0" "glWindowPos2ivMESA\0" "\0" - /* _mesa_function_pool[20744]: IsFramebufferEXT (will be remapped) */ + /* _mesa_function_pool[21127]: IsFramebufferEXT (will be remapped) */ "i\0" "glIsFramebuffer\0" "glIsFramebufferEXT\0" "\0" - /* _mesa_function_pool[20782]: Uniform4ivARB (will be remapped) */ + /* _mesa_function_pool[21165]: Uniform4ivARB (will be remapped) */ "iip\0" "glUniform4iv\0" "glUniform4ivARB\0" "\0" - /* _mesa_function_pool[20816]: GetVertexAttribdvARB (will be remapped) */ + /* _mesa_function_pool[21199]: GetVertexAttribdvARB (will be remapped) */ "iip\0" "glGetVertexAttribdv\0" "glGetVertexAttribdvARB\0" "\0" - /* _mesa_function_pool[20864]: TexBumpParameterivATI (will be remapped) */ + /* _mesa_function_pool[21247]: TexBumpParameterivATI (will be remapped) */ "ip\0" "glTexBumpParameterivATI\0" "\0" - /* _mesa_function_pool[20892]: GetSeparableFilter (offset 359) */ + /* _mesa_function_pool[21275]: GetSeparableFilter (offset 359) */ "iiippp\0" "glGetSeparableFilter\0" "glGetSeparableFilterEXT\0" "\0" - /* _mesa_function_pool[20945]: Binormal3dEXT (dynamic) */ + /* _mesa_function_pool[21328]: Binormal3dEXT (dynamic) */ "ddd\0" "glBinormal3dEXT\0" "\0" - /* _mesa_function_pool[20966]: SpriteParameteriSGIX (dynamic) */ + /* _mesa_function_pool[21349]: SpriteParameteriSGIX (dynamic) */ "ii\0" "glSpriteParameteriSGIX\0" "\0" - /* _mesa_function_pool[20993]: RequestResidentProgramsNV (will be remapped) */ + /* _mesa_function_pool[21376]: RequestResidentProgramsNV (will be remapped) */ "ip\0" "glRequestResidentProgramsNV\0" "\0" - /* _mesa_function_pool[21025]: TagSampleBufferSGIX (dynamic) */ + /* _mesa_function_pool[21408]: TagSampleBufferSGIX (dynamic) */ "\0" "glTagSampleBufferSGIX\0" "\0" - /* _mesa_function_pool[21049]: TransformFeedbackVaryingsEXT (will be remapped) */ + /* _mesa_function_pool[21432]: TransformFeedbackVaryingsEXT (will be remapped) */ "iipi\0" "glTransformFeedbackVaryingsEXT\0" "glTransformFeedbackVaryings\0" "\0" - /* _mesa_function_pool[21114]: FeedbackBuffer (offset 194) */ + /* _mesa_function_pool[21497]: FeedbackBuffer (offset 194) */ "iip\0" "glFeedbackBuffer\0" "\0" - /* _mesa_function_pool[21136]: RasterPos2iv (offset 67) */ + /* _mesa_function_pool[21519]: RasterPos2iv (offset 67) */ "p\0" "glRasterPos2iv\0" "\0" - /* _mesa_function_pool[21154]: TexImage1D (offset 182) */ + /* _mesa_function_pool[21537]: TexImage1D (offset 182) */ "iiiiiiip\0" "glTexImage1D\0" "\0" - /* _mesa_function_pool[21177]: ListParameterivSGIX (dynamic) */ + /* _mesa_function_pool[21560]: ListParameterivSGIX (dynamic) */ "iip\0" "glListParameterivSGIX\0" "\0" - /* _mesa_function_pool[21204]: MultiDrawElementsEXT (will be remapped) */ + /* _mesa_function_pool[21587]: MultiDrawElementsEXT (will be remapped) */ "ipipi\0" "glMultiDrawElements\0" "glMultiDrawElementsEXT\0" "\0" - /* _mesa_function_pool[21254]: Color3s (offset 17) */ + /* _mesa_function_pool[21637]: Color3s (offset 17) */ "iii\0" "glColor3s\0" "\0" - /* _mesa_function_pool[21269]: Uniform1ivARB (will be remapped) */ + /* _mesa_function_pool[21652]: Uniform1ivARB (will be remapped) */ "iip\0" "glUniform1iv\0" "glUniform1ivARB\0" "\0" - /* _mesa_function_pool[21303]: WindowPos2sMESA (will be remapped) */ + /* _mesa_function_pool[21686]: WindowPos2sMESA (will be remapped) */ "ii\0" "glWindowPos2s\0" "glWindowPos2sARB\0" "glWindowPos2sMESA\0" "\0" - /* _mesa_function_pool[21356]: WeightusvARB (dynamic) */ + /* _mesa_function_pool[21739]: WeightusvARB (dynamic) */ "ip\0" "glWeightusvARB\0" "\0" - /* _mesa_function_pool[21375]: TexCoordPointer (offset 320) */ + /* _mesa_function_pool[21758]: TexCoordPointer (offset 320) */ "iiip\0" "glTexCoordPointer\0" "\0" - /* _mesa_function_pool[21399]: FogCoordPointerEXT (will be remapped) */ + /* _mesa_function_pool[21782]: FogCoordPointerEXT (will be remapped) */ "iip\0" "glFogCoordPointer\0" "glFogCoordPointerEXT\0" "\0" - /* _mesa_function_pool[21443]: IndexMaterialEXT (dynamic) */ + /* _mesa_function_pool[21826]: GetnSeparableFilterARB (will be remapped) */ + "iiiipipp\0" + "glGetnSeparableFilterARB\0" + "\0" + /* _mesa_function_pool[21861]: IndexMaterialEXT (dynamic) */ "ii\0" "glIndexMaterialEXT\0" "\0" - /* _mesa_function_pool[21466]: Color3i (offset 15) */ + /* _mesa_function_pool[21884]: Color3i (offset 15) */ "iii\0" "glColor3i\0" "\0" - /* _mesa_function_pool[21481]: FrontFace (offset 157) */ + /* _mesa_function_pool[21899]: FrontFace (offset 157) */ "i\0" "glFrontFace\0" "\0" - /* _mesa_function_pool[21496]: EvalCoord2d (offset 232) */ + /* _mesa_function_pool[21914]: EvalCoord2d (offset 232) */ "dd\0" "glEvalCoord2d\0" "\0" - /* _mesa_function_pool[21514]: SecondaryColor3ubvEXT (will be remapped) */ + /* _mesa_function_pool[21932]: SecondaryColor3ubvEXT (will be remapped) */ "p\0" "glSecondaryColor3ubv\0" "glSecondaryColor3ubvEXT\0" "\0" - /* _mesa_function_pool[21562]: EvalCoord2f (offset 234) */ + /* _mesa_function_pool[21980]: EvalCoord2f (offset 234) */ "ff\0" "glEvalCoord2f\0" "\0" - /* _mesa_function_pool[21580]: VertexAttrib4dvARB (will be remapped) */ + /* _mesa_function_pool[21998]: VertexAttrib4dvARB (will be remapped) */ "ip\0" "glVertexAttrib4dv\0" "glVertexAttrib4dvARB\0" "\0" - /* _mesa_function_pool[21623]: BindAttribLocationARB (will be remapped) */ + /* _mesa_function_pool[22041]: BindAttribLocationARB (will be remapped) */ "iip\0" "glBindAttribLocation\0" "glBindAttribLocationARB\0" "\0" - /* _mesa_function_pool[21673]: Color3b (offset 9) */ + /* _mesa_function_pool[22091]: Color3b (offset 9) */ "iii\0" "glColor3b\0" "\0" - /* _mesa_function_pool[21688]: MultiTexCoord2dARB (offset 384) */ + /* _mesa_function_pool[22106]: MultiTexCoord2dARB (offset 384) */ "idd\0" "glMultiTexCoord2d\0" "glMultiTexCoord2dARB\0" "\0" - /* _mesa_function_pool[21732]: ExecuteProgramNV (will be remapped) */ + /* _mesa_function_pool[22150]: ExecuteProgramNV (will be remapped) */ "iip\0" "glExecuteProgramNV\0" "\0" - /* _mesa_function_pool[21756]: Color3f (offset 13) */ + /* _mesa_function_pool[22174]: Color3f (offset 13) */ "fff\0" "glColor3f\0" "\0" - /* _mesa_function_pool[21771]: LightEnviSGIX (dynamic) */ + /* _mesa_function_pool[22189]: LightEnviSGIX (dynamic) */ "ii\0" "glLightEnviSGIX\0" "\0" - /* _mesa_function_pool[21791]: Color3d (offset 11) */ + /* _mesa_function_pool[22209]: Color3d (offset 11) */ "ddd\0" "glColor3d\0" "\0" - /* _mesa_function_pool[21806]: Normal3dv (offset 55) */ + /* _mesa_function_pool[22224]: Normal3dv (offset 55) */ "p\0" "glNormal3dv\0" "\0" - /* _mesa_function_pool[21821]: Lightf (offset 159) */ + /* _mesa_function_pool[22239]: Lightf (offset 159) */ "iif\0" "glLightf\0" "\0" - /* _mesa_function_pool[21835]: ReplacementCodeuiSUN (dynamic) */ + /* _mesa_function_pool[22253]: ReplacementCodeuiSUN (dynamic) */ "i\0" "glReplacementCodeuiSUN\0" "\0" - /* _mesa_function_pool[21861]: MatrixMode (offset 293) */ + /* _mesa_function_pool[22279]: MatrixMode (offset 293) */ "i\0" "glMatrixMode\0" "\0" - /* _mesa_function_pool[21877]: GetPixelMapusv (offset 273) */ + /* _mesa_function_pool[22295]: GetPixelMapusv (offset 273) */ "ip\0" "glGetPixelMapusv\0" "\0" - /* _mesa_function_pool[21898]: Lighti (offset 161) */ + /* _mesa_function_pool[22316]: Lighti (offset 161) */ "iii\0" "glLighti\0" "\0" - /* _mesa_function_pool[21912]: VertexAttribPointerNV (will be remapped) */ + /* _mesa_function_pool[22330]: VertexAttribPointerNV (will be remapped) */ "iiiip\0" "glVertexAttribPointerNV\0" "\0" - /* _mesa_function_pool[21943]: ClearDepthf (will be remapped) */ + /* _mesa_function_pool[22361]: ClearDepthf (will be remapped) */ "f\0" "glClearDepthf\0" "\0" - /* _mesa_function_pool[21960]: GetBooleanIndexedvEXT (will be remapped) */ + /* _mesa_function_pool[22378]: GetBooleanIndexedvEXT (will be remapped) */ "iip\0" "glGetBooleanIndexedvEXT\0" "glGetBooleani_v\0" "\0" - /* _mesa_function_pool[22005]: GetFramebufferAttachmentParameterivEXT (will be remapped) */ + /* _mesa_function_pool[22423]: GetFramebufferAttachmentParameterivEXT (will be remapped) */ "iiip\0" "glGetFramebufferAttachmentParameteriv\0" "glGetFramebufferAttachmentParameterivEXT\0" "\0" - /* _mesa_function_pool[22090]: PixelTransformParameterfEXT (dynamic) */ + /* _mesa_function_pool[22508]: PixelTransformParameterfEXT (dynamic) */ "iif\0" "glPixelTransformParameterfEXT\0" "\0" - /* _mesa_function_pool[22125]: MultiTexCoord4dvARB (offset 401) */ + /* _mesa_function_pool[22543]: MultiTexCoord4dvARB (offset 401) */ "ip\0" "glMultiTexCoord4dv\0" "glMultiTexCoord4dvARB\0" "\0" - /* _mesa_function_pool[22170]: PixelTransformParameteriEXT (dynamic) */ + /* _mesa_function_pool[22588]: PixelTransformParameteriEXT (dynamic) */ "iii\0" "glPixelTransformParameteriEXT\0" "\0" - /* _mesa_function_pool[22205]: GetDoublev (offset 260) */ + /* _mesa_function_pool[22623]: GetDoublev (offset 260) */ "ip\0" "glGetDoublev\0" "\0" - /* _mesa_function_pool[22222]: MultMatrixd (offset 295) */ + /* _mesa_function_pool[22640]: MultMatrixd (offset 295) */ "p\0" "glMultMatrixd\0" "\0" - /* _mesa_function_pool[22239]: MultMatrixf (offset 294) */ + /* _mesa_function_pool[22657]: MultMatrixf (offset 294) */ "p\0" "glMultMatrixf\0" "\0" - /* _mesa_function_pool[22256]: VertexAttribI4bvEXT (will be remapped) */ + /* _mesa_function_pool[22674]: VertexAttribI4bvEXT (will be remapped) */ "ip\0" "glVertexAttribI4bvEXT\0" "glVertexAttribI4bv\0" "\0" - /* _mesa_function_pool[22301]: TexCoord2fColor4ubVertex3fSUN (dynamic) */ + /* _mesa_function_pool[22719]: TexCoord2fColor4ubVertex3fSUN (dynamic) */ "ffiiiifff\0" "glTexCoord2fColor4ubVertex3fSUN\0" "\0" - /* _mesa_function_pool[22344]: Uniform1iARB (will be remapped) */ + /* _mesa_function_pool[22762]: Uniform1iARB (will be remapped) */ "ii\0" "glUniform1i\0" "glUniform1iARB\0" "\0" - /* _mesa_function_pool[22375]: VertexAttribPointerARB (will be remapped) */ + /* _mesa_function_pool[22793]: GetnMapfvARB (will be remapped) */ + "iiip\0" + "glGetnMapfvARB\0" + "\0" + /* _mesa_function_pool[22814]: VertexAttribPointerARB (will be remapped) */ "iiiiip\0" "glVertexAttribPointer\0" "glVertexAttribPointerARB\0" "\0" - /* _mesa_function_pool[22430]: VertexAttrib3sNV (will be remapped) */ + /* _mesa_function_pool[22869]: VertexAttrib3sNV (will be remapped) */ "iiii\0" "glVertexAttrib3sNV\0" "\0" - /* _mesa_function_pool[22455]: SharpenTexFuncSGIS (dynamic) */ + /* _mesa_function_pool[22894]: SharpenTexFuncSGIS (dynamic) */ "iip\0" "glSharpenTexFuncSGIS\0" "\0" - /* _mesa_function_pool[22481]: MultiTexCoord4fvARB (offset 403) */ + /* _mesa_function_pool[22920]: MultiTexCoord4fvARB (offset 403) */ "ip\0" "glMultiTexCoord4fv\0" "glMultiTexCoord4fvARB\0" "\0" - /* _mesa_function_pool[22526]: Uniform2uiEXT (will be remapped) */ + /* _mesa_function_pool[22965]: Uniform2uiEXT (will be remapped) */ "iii\0" "glUniform2uiEXT\0" "glUniform2ui\0" "\0" - /* _mesa_function_pool[22560]: UniformMatrix2x3fv (will be remapped) */ + /* _mesa_function_pool[22999]: UniformMatrix2x3fv (will be remapped) */ "iiip\0" "glUniformMatrix2x3fv\0" "\0" - /* _mesa_function_pool[22587]: SamplerParameteri (will be remapped) */ + /* _mesa_function_pool[23026]: SamplerParameteri (will be remapped) */ "iii\0" "glSamplerParameteri\0" "\0" - /* _mesa_function_pool[22612]: SamplerParameterf (will be remapped) */ + /* _mesa_function_pool[23051]: SamplerParameterf (will be remapped) */ "iif\0" "glSamplerParameterf\0" "\0" - /* _mesa_function_pool[22637]: CombinerParameteriNV (will be remapped) */ + /* _mesa_function_pool[23076]: CombinerParameteriNV (will be remapped) */ "ii\0" "glCombinerParameteriNV\0" "\0" - /* _mesa_function_pool[22664]: DeleteAsyncMarkersSGIX (dynamic) */ + /* _mesa_function_pool[23103]: DeleteAsyncMarkersSGIX (dynamic) */ "ii\0" "glDeleteAsyncMarkersSGIX\0" "\0" - /* _mesa_function_pool[22693]: ReplacementCodeusSUN (dynamic) */ + /* _mesa_function_pool[23132]: ReplacementCodeusSUN (dynamic) */ "i\0" "glReplacementCodeusSUN\0" "\0" - /* _mesa_function_pool[22719]: IsAsyncMarkerSGIX (dynamic) */ + /* _mesa_function_pool[23158]: IsAsyncMarkerSGIX (dynamic) */ "i\0" "glIsAsyncMarkerSGIX\0" "\0" - /* _mesa_function_pool[22742]: FrameZoomSGIX (dynamic) */ + /* _mesa_function_pool[23181]: FrameZoomSGIX (dynamic) */ "i\0" "glFrameZoomSGIX\0" "\0" - /* _mesa_function_pool[22761]: Normal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[23200]: Normal3fVertex3fvSUN (dynamic) */ "pp\0" "glNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[22788]: RasterPos4sv (offset 85) */ + /* _mesa_function_pool[23227]: GetnUniformuivARB (will be remapped) */ + "iiip\0" + "glGetnUniformuivARB\0" + "\0" + /* _mesa_function_pool[23253]: RasterPos4sv (offset 85) */ "p\0" "glRasterPos4sv\0" "\0" - /* _mesa_function_pool[22806]: VertexAttrib4NsvARB (will be remapped) */ + /* _mesa_function_pool[23271]: VertexAttrib4NsvARB (will be remapped) */ "ip\0" "glVertexAttrib4Nsv\0" "glVertexAttrib4NsvARB\0" "\0" - /* _mesa_function_pool[22851]: VertexAttrib3fvARB (will be remapped) */ + /* _mesa_function_pool[23316]: VertexAttrib3fvARB (will be remapped) */ "ip\0" "glVertexAttrib3fv\0" "glVertexAttrib3fvARB\0" "\0" - /* _mesa_function_pool[22894]: ClearColor (offset 206) */ + /* _mesa_function_pool[23359]: ClearColor (offset 206) */ "ffff\0" "glClearColor\0" "\0" - /* _mesa_function_pool[22913]: GetSynciv (will be remapped) */ + /* _mesa_function_pool[23378]: GetSynciv (will be remapped) */ "iiipp\0" "glGetSynciv\0" "\0" - /* _mesa_function_pool[22932]: ClearColorIiEXT (will be remapped) */ + /* _mesa_function_pool[23397]: ClearColorIiEXT (will be remapped) */ "iiii\0" "glClearColorIiEXT\0" "\0" - /* _mesa_function_pool[22956]: DeleteFramebuffersEXT (will be remapped) */ + /* _mesa_function_pool[23421]: DeleteFramebuffersEXT (will be remapped) */ "ip\0" "glDeleteFramebuffers\0" "glDeleteFramebuffersEXT\0" "\0" - /* _mesa_function_pool[23005]: GlobalAlphaFactorsSUN (dynamic) */ + /* _mesa_function_pool[23470]: GlobalAlphaFactorsSUN (dynamic) */ "i\0" "glGlobalAlphaFactorsSUN\0" "\0" - /* _mesa_function_pool[23032]: IsEnabledIndexedEXT (will be remapped) */ + /* _mesa_function_pool[23497]: IsEnabledIndexedEXT (will be remapped) */ "ii\0" "glIsEnabledIndexedEXT\0" "glIsEnabledi\0" "\0" - /* _mesa_function_pool[23071]: TexEnviv (offset 187) */ + /* _mesa_function_pool[23536]: TexEnviv (offset 187) */ "iip\0" "glTexEnviv\0" "\0" - /* _mesa_function_pool[23087]: TexSubImage3D (offset 372) */ + /* _mesa_function_pool[23552]: TexSubImage3D (offset 372) */ "iiiiiiiiiip\0" "glTexSubImage3D\0" "glTexSubImage3DEXT\0" "\0" - /* _mesa_function_pool[23135]: Tangent3fEXT (dynamic) */ + /* _mesa_function_pool[23600]: Tangent3fEXT (dynamic) */ "fff\0" "glTangent3fEXT\0" "\0" - /* _mesa_function_pool[23155]: SecondaryColor3uivEXT (will be remapped) */ + /* _mesa_function_pool[23620]: SecondaryColor3uivEXT (will be remapped) */ "p\0" "glSecondaryColor3uiv\0" "glSecondaryColor3uivEXT\0" "\0" - /* _mesa_function_pool[23203]: MatrixIndexubvARB (dynamic) */ + /* _mesa_function_pool[23668]: MatrixIndexubvARB (dynamic) */ "ip\0" "glMatrixIndexubvARB\0" "\0" - /* _mesa_function_pool[23227]: Color4fNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[23692]: Color4fNormal3fVertex3fSUN (dynamic) */ "ffffffffff\0" "glColor4fNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[23268]: PixelTexGenParameterfSGIS (will be remapped) */ + /* _mesa_function_pool[23733]: PixelTexGenParameterfSGIS (will be remapped) */ "if\0" "glPixelTexGenParameterfSGIS\0" "\0" - /* _mesa_function_pool[23300]: CreateShader (will be remapped) */ + /* _mesa_function_pool[23765]: CreateShader (will be remapped) */ "i\0" "glCreateShader\0" "\0" - /* _mesa_function_pool[23318]: GetColorTableParameterfv (offset 344) */ + /* _mesa_function_pool[23783]: GetColorTableParameterfv (offset 344) */ "iip\0" "glGetColorTableParameterfv\0" "glGetColorTableParameterfvSGI\0" "glGetColorTableParameterfvEXT\0" "\0" - /* _mesa_function_pool[23410]: FragmentLightModelfvSGIX (dynamic) */ + /* _mesa_function_pool[23875]: FragmentLightModelfvSGIX (dynamic) */ "ip\0" "glFragmentLightModelfvSGIX\0" "\0" - /* _mesa_function_pool[23441]: Bitmap (offset 8) */ + /* _mesa_function_pool[23906]: Bitmap (offset 8) */ "iiffffp\0" "glBitmap\0" "\0" - /* _mesa_function_pool[23459]: MultiTexCoord3fARB (offset 394) */ + /* _mesa_function_pool[23924]: MultiTexCoord3fARB (offset 394) */ "ifff\0" "glMultiTexCoord3f\0" "glMultiTexCoord3fARB\0" "\0" - /* _mesa_function_pool[23504]: GetTexLevelParameterfv (offset 284) */ + /* _mesa_function_pool[23969]: GetTexLevelParameterfv (offset 284) */ "iiip\0" "glGetTexLevelParameterfv\0" "\0" - /* _mesa_function_pool[23535]: GetPixelTexGenParameterfvSGIS (will be remapped) */ + /* _mesa_function_pool[24000]: GetPixelTexGenParameterfvSGIS (will be remapped) */ "ip\0" "glGetPixelTexGenParameterfvSGIS\0" "\0" - /* _mesa_function_pool[23571]: GenFramebuffersEXT (will be remapped) */ + /* _mesa_function_pool[24036]: GenFramebuffersEXT (will be remapped) */ "ip\0" "glGenFramebuffers\0" "glGenFramebuffersEXT\0" "\0" - /* _mesa_function_pool[23614]: VertexAttribDivisor (will be remapped) */ + /* _mesa_function_pool[24079]: VertexAttribDivisor (will be remapped) */ "ii\0" "glVertexAttribDivisor\0" "\0" - /* _mesa_function_pool[23640]: GetProgramParameterdvNV (will be remapped) */ + /* _mesa_function_pool[24105]: GetProgramParameterdvNV (will be remapped) */ "iiip\0" "glGetProgramParameterdvNV\0" "\0" - /* _mesa_function_pool[23672]: Vertex2sv (offset 133) */ + /* _mesa_function_pool[24137]: Vertex2sv (offset 133) */ "p\0" "glVertex2sv\0" "\0" - /* _mesa_function_pool[23687]: GetIntegerv (offset 263) */ + /* _mesa_function_pool[24152]: GetIntegerv (offset 263) */ "ip\0" "glGetIntegerv\0" "\0" - /* _mesa_function_pool[23705]: IsVertexArrayAPPLE (will be remapped) */ + /* _mesa_function_pool[24170]: IsVertexArrayAPPLE (will be remapped) */ "i\0" "glIsVertexArray\0" "glIsVertexArrayAPPLE\0" "\0" - /* _mesa_function_pool[23745]: FragmentLightfvSGIX (dynamic) */ + /* _mesa_function_pool[24210]: FragmentLightfvSGIX (dynamic) */ "iip\0" "glFragmentLightfvSGIX\0" "\0" - /* _mesa_function_pool[23772]: VertexAttribDivisorARB (will be remapped) */ - "ii\0" - "glVertexAttribDivisorARB\0" + /* _mesa_function_pool[24237]: GetnMapdvARB (will be remapped) */ + "iiip\0" + "glGetnMapdvARB\0" "\0" - /* _mesa_function_pool[23801]: DetachShader (will be remapped) */ + /* _mesa_function_pool[24258]: DetachShader (will be remapped) */ "ii\0" "glDetachShader\0" "\0" - /* _mesa_function_pool[23820]: VertexAttrib4NubARB (will be remapped) */ + /* _mesa_function_pool[24277]: VertexAttrib4NubARB (will be remapped) */ "iiiii\0" "glVertexAttrib4Nub\0" "glVertexAttrib4NubARB\0" "\0" - /* _mesa_function_pool[23868]: GetProgramEnvParameterfvARB (will be remapped) */ + /* _mesa_function_pool[24325]: GetProgramEnvParameterfvARB (will be remapped) */ "iip\0" "glGetProgramEnvParameterfvARB\0" "\0" - /* _mesa_function_pool[23903]: GetTrackMatrixivNV (will be remapped) */ + /* _mesa_function_pool[24360]: GetTrackMatrixivNV (will be remapped) */ "iiip\0" "glGetTrackMatrixivNV\0" "\0" - /* _mesa_function_pool[23930]: VertexAttrib3svNV (will be remapped) */ + /* _mesa_function_pool[24387]: VertexAttrib3svNV (will be remapped) */ "ip\0" "glVertexAttrib3svNV\0" "\0" - /* _mesa_function_pool[23954]: Uniform4fvARB (will be remapped) */ + /* _mesa_function_pool[24411]: Uniform4fvARB (will be remapped) */ "iip\0" "glUniform4fv\0" "glUniform4fvARB\0" "\0" - /* _mesa_function_pool[23988]: MultTransposeMatrixfARB (will be remapped) */ + /* _mesa_function_pool[24445]: MultTransposeMatrixfARB (will be remapped) */ "p\0" "glMultTransposeMatrixf\0" "glMultTransposeMatrixfARB\0" "\0" - /* _mesa_function_pool[24040]: GetTexEnviv (offset 277) */ + /* _mesa_function_pool[24497]: GetTexEnviv (offset 277) */ "iip\0" "glGetTexEnviv\0" "\0" - /* _mesa_function_pool[24059]: ColorFragmentOp1ATI (will be remapped) */ + /* _mesa_function_pool[24516]: ColorFragmentOp1ATI (will be remapped) */ "iiiiiii\0" "glColorFragmentOp1ATI\0" "\0" - /* _mesa_function_pool[24090]: GetUniformfvARB (will be remapped) */ + /* _mesa_function_pool[24547]: GetUniformfvARB (will be remapped) */ "iip\0" "glGetUniformfv\0" "glGetUniformfvARB\0" "\0" - /* _mesa_function_pool[24128]: EGLImageTargetRenderbufferStorageOES (will be remapped) */ + /* _mesa_function_pool[24585]: EGLImageTargetRenderbufferStorageOES (will be remapped) */ "ip\0" "glEGLImageTargetRenderbufferStorageOES\0" "\0" - /* _mesa_function_pool[24171]: VertexAttribI2ivEXT (will be remapped) */ + /* _mesa_function_pool[24628]: VertexAttribI2ivEXT (will be remapped) */ "ip\0" "glVertexAttribI2ivEXT\0" "glVertexAttribI2iv\0" "\0" - /* _mesa_function_pool[24216]: PopClientAttrib (offset 334) */ + /* _mesa_function_pool[24673]: PopClientAttrib (offset 334) */ "\0" "glPopClientAttrib\0" "\0" - /* _mesa_function_pool[24236]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[24693]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */ "iffffffffffff\0" "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[24307]: DetachObjectARB (will be remapped) */ + /* _mesa_function_pool[24764]: DetachObjectARB (will be remapped) */ "ii\0" "glDetachObjectARB\0" "\0" - /* _mesa_function_pool[24329]: VertexBlendARB (dynamic) */ + /* _mesa_function_pool[24786]: VertexBlendARB (dynamic) */ "i\0" "glVertexBlendARB\0" "\0" - /* _mesa_function_pool[24349]: WindowPos3iMESA (will be remapped) */ + /* _mesa_function_pool[24806]: WindowPos3iMESA (will be remapped) */ "iii\0" "glWindowPos3i\0" "glWindowPos3iARB\0" "glWindowPos3iMESA\0" "\0" - /* _mesa_function_pool[24403]: SeparableFilter2D (offset 360) */ + /* _mesa_function_pool[24860]: SeparableFilter2D (offset 360) */ "iiiiiipp\0" "glSeparableFilter2D\0" "glSeparableFilter2DEXT\0" "\0" - /* _mesa_function_pool[24456]: ProgramParameteriARB (will be remapped) */ + /* _mesa_function_pool[24913]: ProgramParameteriARB (will be remapped) */ "iii\0" "glProgramParameteriARB\0" "\0" - /* _mesa_function_pool[24484]: Map1d (offset 220) */ + /* _mesa_function_pool[24941]: Map1d (offset 220) */ "iddiip\0" "glMap1d\0" "\0" - /* _mesa_function_pool[24500]: Map1f (offset 221) */ + /* _mesa_function_pool[24957]: Map1f (offset 221) */ "iffiip\0" "glMap1f\0" "\0" - /* _mesa_function_pool[24516]: CompressedTexImage2DARB (will be remapped) */ + /* _mesa_function_pool[24973]: CompressedTexImage2DARB (will be remapped) */ "iiiiiiip\0" "glCompressedTexImage2D\0" "glCompressedTexImage2DARB\0" "\0" - /* _mesa_function_pool[24575]: ArrayElement (offset 306) */ + /* _mesa_function_pool[25032]: ArrayElement (offset 306) */ "i\0" "glArrayElement\0" "glArrayElementEXT\0" "\0" - /* _mesa_function_pool[24611]: TexImage2D (offset 183) */ + /* _mesa_function_pool[25068]: TexImage2D (offset 183) */ "iiiiiiiip\0" "glTexImage2D\0" "\0" - /* _mesa_function_pool[24635]: DepthBoundsEXT (will be remapped) */ + /* _mesa_function_pool[25092]: DepthBoundsEXT (will be remapped) */ "dd\0" "glDepthBoundsEXT\0" "\0" - /* _mesa_function_pool[24656]: ProgramParameters4fvNV (will be remapped) */ + /* _mesa_function_pool[25113]: ProgramParameters4fvNV (will be remapped) */ "iiip\0" "glProgramParameters4fvNV\0" "\0" - /* _mesa_function_pool[24687]: DeformationMap3fSGIX (dynamic) */ + /* _mesa_function_pool[25144]: DeformationMap3fSGIX (dynamic) */ "iffiiffiiffiip\0" "glDeformationMap3fSGIX\0" "\0" - /* _mesa_function_pool[24726]: GetProgramivNV (will be remapped) */ + /* _mesa_function_pool[25183]: GetProgramivNV (will be remapped) */ "iip\0" "glGetProgramivNV\0" "\0" - /* _mesa_function_pool[24748]: GetFragDataLocationEXT (will be remapped) */ + /* _mesa_function_pool[25205]: GetFragDataLocationEXT (will be remapped) */ "ip\0" "glGetFragDataLocationEXT\0" "glGetFragDataLocation\0" "\0" - /* _mesa_function_pool[24799]: GetMinmaxParameteriv (offset 366) */ + /* _mesa_function_pool[25256]: GetMinmaxParameteriv (offset 366) */ "iip\0" "glGetMinmaxParameteriv\0" "glGetMinmaxParameterivEXT\0" "\0" - /* _mesa_function_pool[24853]: PixelTransferf (offset 247) */ + /* _mesa_function_pool[25310]: PixelTransferf (offset 247) */ "if\0" "glPixelTransferf\0" "\0" - /* _mesa_function_pool[24874]: CopyTexImage1D (offset 323) */ + /* _mesa_function_pool[25331]: CopyTexImage1D (offset 323) */ "iiiiiii\0" "glCopyTexImage1D\0" "glCopyTexImage1DEXT\0" "\0" - /* _mesa_function_pool[24920]: PushMatrix (offset 298) */ + /* _mesa_function_pool[25377]: PushMatrix (offset 298) */ "\0" "glPushMatrix\0" "\0" - /* _mesa_function_pool[24935]: Fogiv (offset 156) */ + /* _mesa_function_pool[25392]: Fogiv (offset 156) */ "ip\0" "glFogiv\0" "\0" - /* _mesa_function_pool[24947]: TexCoord1dv (offset 95) */ + /* _mesa_function_pool[25404]: TexCoord1dv (offset 95) */ "p\0" "glTexCoord1dv\0" "\0" - /* _mesa_function_pool[24964]: AlphaFragmentOp3ATI (will be remapped) */ + /* _mesa_function_pool[25421]: AlphaFragmentOp3ATI (will be remapped) */ "iiiiiiiiiiii\0" "glAlphaFragmentOp3ATI\0" "\0" - /* _mesa_function_pool[25000]: PixelTransferi (offset 248) */ + /* _mesa_function_pool[25457]: PixelTransferi (offset 248) */ "ii\0" "glPixelTransferi\0" "\0" - /* _mesa_function_pool[25021]: GetVertexAttribdvNV (will be remapped) */ - "iip\0" - "glGetVertexAttribdvNV\0" + /* _mesa_function_pool[25478]: GetnColorTableARB (will be remapped) */ + "iiiip\0" + "glGetnColorTableARB\0" "\0" - /* _mesa_function_pool[25048]: VertexAttrib3fvNV (will be remapped) */ + /* _mesa_function_pool[25505]: VertexAttrib3fvNV (will be remapped) */ "ip\0" "glVertexAttrib3fvNV\0" "\0" - /* _mesa_function_pool[25072]: Rotatef (offset 300) */ + /* _mesa_function_pool[25529]: Rotatef (offset 300) */ "ffff\0" "glRotatef\0" "\0" - /* _mesa_function_pool[25088]: GetFinalCombinerInputParameterivNV (will be remapped) */ + /* _mesa_function_pool[25545]: GetFinalCombinerInputParameterivNV (will be remapped) */ "iip\0" "glGetFinalCombinerInputParameterivNV\0" "\0" - /* _mesa_function_pool[25130]: Vertex3i (offset 138) */ + /* _mesa_function_pool[25587]: Vertex3i (offset 138) */ "iii\0" "glVertex3i\0" "\0" - /* _mesa_function_pool[25146]: Vertex3f (offset 136) */ + /* _mesa_function_pool[25603]: Vertex3f (offset 136) */ "fff\0" "glVertex3f\0" "\0" - /* _mesa_function_pool[25162]: Clear (offset 203) */ + /* _mesa_function_pool[25619]: Clear (offset 203) */ "i\0" "glClear\0" "\0" - /* _mesa_function_pool[25173]: Vertex3d (offset 134) */ + /* _mesa_function_pool[25630]: Vertex3d (offset 134) */ "ddd\0" "glVertex3d\0" "\0" - /* _mesa_function_pool[25189]: GetMapParameterivNV (dynamic) */ + /* _mesa_function_pool[25646]: GetMapParameterivNV (dynamic) */ "iip\0" "glGetMapParameterivNV\0" "\0" - /* _mesa_function_pool[25216]: Uniform4iARB (will be remapped) */ + /* _mesa_function_pool[25673]: Uniform4iARB (will be remapped) */ "iiiii\0" "glUniform4i\0" "glUniform4iARB\0" "\0" - /* _mesa_function_pool[25250]: ReadBuffer (offset 254) */ + /* _mesa_function_pool[25707]: ReadBuffer (offset 254) */ "i\0" "glReadBuffer\0" "\0" - /* _mesa_function_pool[25266]: ConvolutionParameteri (offset 352) */ + /* _mesa_function_pool[25723]: ConvolutionParameteri (offset 352) */ "iii\0" "glConvolutionParameteri\0" "glConvolutionParameteriEXT\0" "\0" - /* _mesa_function_pool[25322]: Ortho (offset 296) */ + /* _mesa_function_pool[25779]: Ortho (offset 296) */ "dddddd\0" "glOrtho\0" "\0" - /* _mesa_function_pool[25338]: Binormal3sEXT (dynamic) */ + /* _mesa_function_pool[25795]: Binormal3sEXT (dynamic) */ "iii\0" "glBinormal3sEXT\0" "\0" - /* _mesa_function_pool[25359]: ListBase (offset 6) */ + /* _mesa_function_pool[25816]: ListBase (offset 6) */ "i\0" "glListBase\0" "\0" - /* _mesa_function_pool[25373]: VertexAttribI3ivEXT (will be remapped) */ + /* _mesa_function_pool[25830]: VertexAttribI3ivEXT (will be remapped) */ "ip\0" "glVertexAttribI3ivEXT\0" "glVertexAttribI3iv\0" "\0" - /* _mesa_function_pool[25418]: Vertex3s (offset 140) */ + /* _mesa_function_pool[25875]: Vertex3s (offset 140) */ "iii\0" "glVertex3s\0" "\0" - /* _mesa_function_pool[25434]: ConvolutionParameterf (offset 350) */ + /* _mesa_function_pool[25891]: ConvolutionParameterf (offset 350) */ "iif\0" "glConvolutionParameterf\0" "glConvolutionParameterfEXT\0" "\0" - /* _mesa_function_pool[25490]: GetColorTableParameteriv (offset 345) */ + /* _mesa_function_pool[25947]: GetColorTableParameteriv (offset 345) */ "iip\0" "glGetColorTableParameteriv\0" "glGetColorTableParameterivSGI\0" "glGetColorTableParameterivEXT\0" "\0" - /* _mesa_function_pool[25582]: ProgramEnvParameter4dvARB (will be remapped) */ + /* _mesa_function_pool[26039]: ProgramEnvParameter4dvARB (will be remapped) */ "iip\0" "glProgramEnvParameter4dvARB\0" "glProgramParameter4dvNV\0" "\0" - /* _mesa_function_pool[25639]: ShadeModel (offset 177) */ + /* _mesa_function_pool[26096]: ShadeModel (offset 177) */ "i\0" "glShadeModel\0" "\0" - /* _mesa_function_pool[25655]: VertexAttribs2fvNV (will be remapped) */ + /* _mesa_function_pool[26112]: VertexAttribs2fvNV (will be remapped) */ "iip\0" "glVertexAttribs2fvNV\0" "\0" - /* _mesa_function_pool[25681]: Rectiv (offset 91) */ + /* _mesa_function_pool[26138]: Rectiv (offset 91) */ "pp\0" "glRectiv\0" "\0" - /* _mesa_function_pool[25694]: UseProgramObjectARB (will be remapped) */ + /* _mesa_function_pool[26151]: UseProgramObjectARB (will be remapped) */ "i\0" "glUseProgram\0" "glUseProgramObjectARB\0" "\0" - /* _mesa_function_pool[25732]: GetMapParameterfvNV (dynamic) */ + /* _mesa_function_pool[26189]: GetMapParameterfvNV (dynamic) */ "iip\0" "glGetMapParameterfvNV\0" "\0" - /* _mesa_function_pool[25759]: EndConditionalRenderNV (will be remapped) */ + /* _mesa_function_pool[26216]: EndConditionalRenderNV (will be remapped) */ "\0" "glEndConditionalRenderNV\0" "glEndConditionalRender\0" "\0" - /* _mesa_function_pool[25809]: PassTexCoordATI (will be remapped) */ + /* _mesa_function_pool[26266]: PassTexCoordATI (will be remapped) */ "iii\0" "glPassTexCoordATI\0" "\0" - /* _mesa_function_pool[25832]: DeleteProgram (will be remapped) */ + /* _mesa_function_pool[26289]: DeleteProgram (will be remapped) */ "i\0" "glDeleteProgram\0" "\0" - /* _mesa_function_pool[25851]: GetSamplerParameteriv (will be remapped) */ + /* _mesa_function_pool[26308]: GetSamplerParameteriv (will be remapped) */ "iip\0" "glGetSamplerParameteriv\0" "\0" - /* _mesa_function_pool[25880]: Tangent3dEXT (dynamic) */ + /* _mesa_function_pool[26337]: Tangent3dEXT (dynamic) */ "ddd\0" "glTangent3dEXT\0" "\0" - /* _mesa_function_pool[25900]: SecondaryColor3dvEXT (will be remapped) */ + /* _mesa_function_pool[26357]: SecondaryColor3dvEXT (will be remapped) */ "p\0" "glSecondaryColor3dv\0" "glSecondaryColor3dvEXT\0" "\0" - /* _mesa_function_pool[25946]: AlphaFragmentOp2ATI (will be remapped) */ + /* _mesa_function_pool[26403]: AlphaFragmentOp2ATI (will be remapped) */ "iiiiiiiii\0" "glAlphaFragmentOp2ATI\0" "\0" - /* _mesa_function_pool[25979]: Vertex2fv (offset 129) */ + /* _mesa_function_pool[26436]: Vertex2fv (offset 129) */ "p\0" "glVertex2fv\0" "\0" - /* _mesa_function_pool[25994]: MultiDrawArraysEXT (will be remapped) */ + /* _mesa_function_pool[26451]: MultiDrawArraysEXT (will be remapped) */ "ippi\0" "glMultiDrawArrays\0" "glMultiDrawArraysEXT\0" "\0" - /* _mesa_function_pool[26039]: BindRenderbufferEXT (will be remapped) */ + /* _mesa_function_pool[26496]: BindRenderbufferEXT (will be remapped) */ "ii\0" "glBindRenderbuffer\0" "glBindRenderbufferEXT\0" "\0" - /* _mesa_function_pool[26084]: MultiTexCoord4dARB (offset 400) */ + /* _mesa_function_pool[26541]: MultiTexCoord4dARB (offset 400) */ "idddd\0" "glMultiTexCoord4d\0" "glMultiTexCoord4dARB\0" "\0" - /* _mesa_function_pool[26130]: FramebufferTextureFaceARB (will be remapped) */ + /* _mesa_function_pool[26587]: FramebufferTextureFaceARB (will be remapped) */ "iiiii\0" "glFramebufferTextureFaceARB\0" "\0" - /* _mesa_function_pool[26165]: Vertex3sv (offset 141) */ + /* _mesa_function_pool[26622]: Vertex3sv (offset 141) */ "p\0" "glVertex3sv\0" "\0" - /* _mesa_function_pool[26180]: SecondaryColor3usEXT (will be remapped) */ + /* _mesa_function_pool[26637]: SecondaryColor3usEXT (will be remapped) */ "iii\0" "glSecondaryColor3us\0" "glSecondaryColor3usEXT\0" "\0" - /* _mesa_function_pool[26228]: ProgramLocalParameter4fvARB (will be remapped) */ + /* _mesa_function_pool[26685]: ProgramLocalParameter4fvARB (will be remapped) */ "iip\0" "glProgramLocalParameter4fvARB\0" "\0" - /* _mesa_function_pool[26263]: DeleteProgramsNV (will be remapped) */ + /* _mesa_function_pool[26720]: DeleteProgramsNV (will be remapped) */ "ip\0" "glDeleteProgramsARB\0" "glDeleteProgramsNV\0" "\0" - /* _mesa_function_pool[26306]: EvalMesh1 (offset 236) */ + /* _mesa_function_pool[26763]: EvalMesh1 (offset 236) */ "iii\0" "glEvalMesh1\0" "\0" - /* _mesa_function_pool[26323]: PauseTransformFeedback (will be remapped) */ + /* _mesa_function_pool[26780]: PauseTransformFeedback (will be remapped) */ "\0" "glPauseTransformFeedback\0" "\0" - /* _mesa_function_pool[26350]: MultiTexCoord1sARB (offset 382) */ + /* _mesa_function_pool[26807]: MultiTexCoord1sARB (offset 382) */ "ii\0" "glMultiTexCoord1s\0" "glMultiTexCoord1sARB\0" "\0" - /* _mesa_function_pool[26393]: ReplacementCodeuiColor3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[26850]: ReplacementCodeuiColor3fVertex3fSUN (dynamic) */ "iffffff\0" "glReplacementCodeuiColor3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[26440]: GetVertexAttribPointervNV (will be remapped) */ + /* _mesa_function_pool[26897]: GetVertexAttribPointervNV (will be remapped) */ "iip\0" "glGetVertexAttribPointerv\0" "glGetVertexAttribPointervARB\0" "glGetVertexAttribPointervNV\0" "\0" - /* _mesa_function_pool[26528]: VertexAttribs1fvNV (will be remapped) */ + /* _mesa_function_pool[26985]: VertexAttribs1fvNV (will be remapped) */ "iip\0" "glVertexAttribs1fvNV\0" "\0" - /* _mesa_function_pool[26554]: MultiTexCoord1dvARB (offset 377) */ + /* _mesa_function_pool[27011]: MultiTexCoord1dvARB (offset 377) */ "ip\0" "glMultiTexCoord1dv\0" "glMultiTexCoord1dvARB\0" "\0" - /* _mesa_function_pool[26599]: Uniform2iARB (will be remapped) */ + /* _mesa_function_pool[27056]: Uniform2iARB (will be remapped) */ "iii\0" "glUniform2i\0" "glUniform2iARB\0" "\0" - /* _mesa_function_pool[26631]: Vertex2iv (offset 131) */ + /* _mesa_function_pool[27088]: Vertex2iv (offset 131) */ "p\0" "glVertex2iv\0" "\0" - /* _mesa_function_pool[26646]: GetProgramStringNV (will be remapped) */ + /* _mesa_function_pool[27103]: GetProgramStringNV (will be remapped) */ "iip\0" "glGetProgramStringNV\0" "\0" - /* _mesa_function_pool[26672]: ColorPointerEXT (will be remapped) */ + /* _mesa_function_pool[27129]: ColorPointerEXT (will be remapped) */ "iiiip\0" "glColorPointerEXT\0" "\0" - /* _mesa_function_pool[26697]: LineWidth (offset 168) */ + /* _mesa_function_pool[27154]: LineWidth (offset 168) */ "f\0" "glLineWidth\0" "\0" - /* _mesa_function_pool[26712]: MapBufferARB (will be remapped) */ + /* _mesa_function_pool[27169]: MapBufferARB (will be remapped) */ "ii\0" "glMapBuffer\0" "glMapBufferARB\0" "\0" - /* _mesa_function_pool[26743]: MultiDrawElementsBaseVertex (will be remapped) */ + /* _mesa_function_pool[27200]: MultiDrawElementsBaseVertex (will be remapped) */ "ipipip\0" "glMultiDrawElementsBaseVertex\0" "\0" - /* _mesa_function_pool[26781]: TexParameterIuivEXT (will be remapped) */ + /* _mesa_function_pool[27238]: TexParameterIuivEXT (will be remapped) */ "iip\0" "glTexParameterIuivEXT\0" "glTexParameterIuiv\0" "\0" - /* _mesa_function_pool[26827]: Binormal3svEXT (dynamic) */ + /* _mesa_function_pool[27284]: Binormal3svEXT (dynamic) */ "p\0" "glBinormal3svEXT\0" "\0" - /* _mesa_function_pool[26847]: ApplyTextureEXT (dynamic) */ + /* _mesa_function_pool[27304]: ApplyTextureEXT (dynamic) */ "i\0" "glApplyTextureEXT\0" "\0" - /* _mesa_function_pool[26868]: GetBufferParameteri64v (will be remapped) */ + /* _mesa_function_pool[27325]: GetBufferParameteri64v (will be remapped) */ "iip\0" "glGetBufferParameteri64v\0" "\0" - /* _mesa_function_pool[26898]: TexGendv (offset 189) */ + /* _mesa_function_pool[27355]: TexGendv (offset 189) */ "iip\0" "glTexGendv\0" "\0" - /* _mesa_function_pool[26914]: VertexAttribI3iEXT (will be remapped) */ + /* _mesa_function_pool[27371]: VertexAttribI3iEXT (will be remapped) */ "iiii\0" "glVertexAttribI3iEXT\0" "glVertexAttribI3i\0" "\0" - /* _mesa_function_pool[26959]: EnableIndexedEXT (will be remapped) */ + /* _mesa_function_pool[27416]: EnableIndexedEXT (will be remapped) */ "ii\0" "glEnableIndexedEXT\0" "glEnablei\0" "\0" - /* _mesa_function_pool[26992]: TextureMaterialEXT (dynamic) */ + /* _mesa_function_pool[27449]: TextureMaterialEXT (dynamic) */ "ii\0" "glTextureMaterialEXT\0" "\0" - /* _mesa_function_pool[27017]: TextureLightEXT (dynamic) */ + /* _mesa_function_pool[27474]: TextureLightEXT (dynamic) */ "i\0" "glTextureLightEXT\0" "\0" - /* _mesa_function_pool[27038]: ResetMinmax (offset 370) */ + /* _mesa_function_pool[27495]: ResetMinmax (offset 370) */ "i\0" "glResetMinmax\0" "glResetMinmaxEXT\0" "\0" - /* _mesa_function_pool[27072]: SpriteParameterfSGIX (dynamic) */ + /* _mesa_function_pool[27529]: SpriteParameterfSGIX (dynamic) */ "if\0" "glSpriteParameterfSGIX\0" "\0" - /* _mesa_function_pool[27099]: EnableClientState (offset 313) */ + /* _mesa_function_pool[27556]: EnableClientState (offset 313) */ "i\0" "glEnableClientState\0" "\0" - /* _mesa_function_pool[27122]: VertexAttrib4sNV (will be remapped) */ + /* _mesa_function_pool[27579]: VertexAttrib4sNV (will be remapped) */ "iiiii\0" "glVertexAttrib4sNV\0" "\0" - /* _mesa_function_pool[27148]: GetConvolutionParameterfv (offset 357) */ + /* _mesa_function_pool[27605]: GetConvolutionParameterfv (offset 357) */ "iip\0" "glGetConvolutionParameterfv\0" "glGetConvolutionParameterfvEXT\0" "\0" - /* _mesa_function_pool[27212]: VertexAttribs4dvNV (will be remapped) */ + /* _mesa_function_pool[27669]: VertexAttribs4dvNV (will be remapped) */ "iip\0" "glVertexAttribs4dvNV\0" "\0" - /* _mesa_function_pool[27238]: VertexAttrib4dARB (will be remapped) */ + /* _mesa_function_pool[27695]: VertexAttrib4dARB (will be remapped) */ "idddd\0" "glVertexAttrib4d\0" "glVertexAttrib4dARB\0" "\0" - /* _mesa_function_pool[27282]: GetTexBumpParameterfvATI (will be remapped) */ + /* _mesa_function_pool[27739]: GetTexBumpParameterfvATI (will be remapped) */ "ip\0" "glGetTexBumpParameterfvATI\0" "\0" - /* _mesa_function_pool[27313]: ProgramNamedParameter4dNV (will be remapped) */ + /* _mesa_function_pool[27770]: ProgramNamedParameter4dNV (will be remapped) */ "iipdddd\0" "glProgramNamedParameter4dNV\0" "\0" - /* _mesa_function_pool[27350]: GetMaterialfv (offset 269) */ + /* _mesa_function_pool[27807]: GetMaterialfv (offset 269) */ "iip\0" "glGetMaterialfv\0" "\0" - /* _mesa_function_pool[27371]: VertexWeightfEXT (dynamic) */ + /* _mesa_function_pool[27828]: VertexWeightfEXT (dynamic) */ "f\0" "glVertexWeightfEXT\0" "\0" - /* _mesa_function_pool[27393]: SetFragmentShaderConstantATI (will be remapped) */ + /* _mesa_function_pool[27850]: SetFragmentShaderConstantATI (will be remapped) */ "ip\0" "glSetFragmentShaderConstantATI\0" "\0" - /* _mesa_function_pool[27428]: Binormal3fEXT (dynamic) */ + /* _mesa_function_pool[27885]: Binormal3fEXT (dynamic) */ "fff\0" "glBinormal3fEXT\0" "\0" - /* _mesa_function_pool[27449]: CallList (offset 2) */ + /* _mesa_function_pool[27906]: CallList (offset 2) */ "i\0" "glCallList\0" "\0" - /* _mesa_function_pool[27463]: Materialfv (offset 170) */ + /* _mesa_function_pool[27920]: Materialfv (offset 170) */ "iip\0" "glMaterialfv\0" "\0" - /* _mesa_function_pool[27481]: TexCoord3fv (offset 113) */ + /* _mesa_function_pool[27938]: TexCoord3fv (offset 113) */ "p\0" "glTexCoord3fv\0" "\0" - /* _mesa_function_pool[27498]: FogCoordfvEXT (will be remapped) */ + /* _mesa_function_pool[27955]: FogCoordfvEXT (will be remapped) */ "p\0" "glFogCoordfv\0" "glFogCoordfvEXT\0" "\0" - /* _mesa_function_pool[27530]: MultiTexCoord1ivARB (offset 381) */ + /* _mesa_function_pool[27987]: MultiTexCoord1ivARB (offset 381) */ "ip\0" "glMultiTexCoord1iv\0" "glMultiTexCoord1ivARB\0" "\0" - /* _mesa_function_pool[27575]: SecondaryColor3ubEXT (will be remapped) */ + /* _mesa_function_pool[28032]: SecondaryColor3ubEXT (will be remapped) */ "iii\0" "glSecondaryColor3ub\0" "glSecondaryColor3ubEXT\0" "\0" - /* _mesa_function_pool[27623]: MultiTexCoord2ivARB (offset 389) */ + /* _mesa_function_pool[28080]: MultiTexCoord2ivARB (offset 389) */ "ip\0" "glMultiTexCoord2iv\0" "glMultiTexCoord2ivARB\0" "\0" - /* _mesa_function_pool[27668]: FogFuncSGIS (dynamic) */ + /* _mesa_function_pool[28125]: FogFuncSGIS (dynamic) */ "ip\0" "glFogFuncSGIS\0" "\0" - /* _mesa_function_pool[27686]: CopyTexSubImage2D (offset 326) */ + /* _mesa_function_pool[28143]: CopyTexSubImage2D (offset 326) */ "iiiiiiii\0" "glCopyTexSubImage2D\0" "glCopyTexSubImage2DEXT\0" "\0" - /* _mesa_function_pool[27739]: GetObjectParameterivARB (will be remapped) */ + /* _mesa_function_pool[28196]: GetObjectParameterivARB (will be remapped) */ "iip\0" "glGetObjectParameterivARB\0" "\0" - /* _mesa_function_pool[27770]: Color3iv (offset 16) */ + /* _mesa_function_pool[28227]: Color3iv (offset 16) */ "p\0" "glColor3iv\0" "\0" - /* _mesa_function_pool[27784]: TexCoord4fVertex4fSUN (dynamic) */ + /* _mesa_function_pool[28241]: TexCoord4fVertex4fSUN (dynamic) */ "ffffffff\0" "glTexCoord4fVertex4fSUN\0" "\0" - /* _mesa_function_pool[27818]: DrawElements (offset 311) */ + /* _mesa_function_pool[28275]: DrawElements (offset 311) */ "iiip\0" "glDrawElements\0" "\0" - /* _mesa_function_pool[27839]: BindVertexArrayAPPLE (will be remapped) */ + /* _mesa_function_pool[28296]: BindVertexArrayAPPLE (will be remapped) */ "i\0" "glBindVertexArrayAPPLE\0" "\0" - /* _mesa_function_pool[27865]: GetProgramLocalParameterdvARB (will be remapped) */ + /* _mesa_function_pool[28322]: GetProgramLocalParameterdvARB (will be remapped) */ "iip\0" "glGetProgramLocalParameterdvARB\0" "\0" - /* _mesa_function_pool[27902]: GetHistogramParameteriv (offset 363) */ + /* _mesa_function_pool[28359]: GetHistogramParameteriv (offset 363) */ "iip\0" "glGetHistogramParameteriv\0" "glGetHistogramParameterivEXT\0" "\0" - /* _mesa_function_pool[27962]: MultiTexCoord1iARB (offset 380) */ + /* _mesa_function_pool[28419]: MultiTexCoord1iARB (offset 380) */ "ii\0" "glMultiTexCoord1i\0" "glMultiTexCoord1iARB\0" "\0" - /* _mesa_function_pool[28005]: GetConvolutionFilter (offset 356) */ + /* _mesa_function_pool[28462]: GetConvolutionFilter (offset 356) */ "iiip\0" "glGetConvolutionFilter\0" "glGetConvolutionFilterEXT\0" "\0" - /* _mesa_function_pool[28060]: GetProgramivARB (will be remapped) */ + /* _mesa_function_pool[28517]: GetProgramivARB (will be remapped) */ "iip\0" "glGetProgramivARB\0" "\0" - /* _mesa_function_pool[28083]: TexBufferARB (will be remapped) */ + /* _mesa_function_pool[28540]: TexBufferARB (will be remapped) */ "iii\0" "glTexBufferARB\0" "\0" - /* _mesa_function_pool[28103]: BlendFuncSeparateEXT (will be remapped) */ + /* _mesa_function_pool[28560]: BlendFuncSeparateEXT (will be remapped) */ "iiii\0" "glBlendFuncSeparate\0" "glBlendFuncSeparateEXT\0" "glBlendFuncSeparateINGR\0" "\0" - /* _mesa_function_pool[28176]: MapBufferRange (will be remapped) */ + /* _mesa_function_pool[28633]: MapBufferRange (will be remapped) */ "iiii\0" "glMapBufferRange\0" "\0" - /* _mesa_function_pool[28199]: ProgramParameters4dvNV (will be remapped) */ + /* _mesa_function_pool[28656]: ProgramParameters4dvNV (will be remapped) */ "iiip\0" "glProgramParameters4dvNV\0" "\0" - /* _mesa_function_pool[28230]: TexCoord2fColor3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[28687]: TexCoord2fColor3fVertex3fvSUN (dynamic) */ "ppp\0" "glTexCoord2fColor3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[28267]: EvalPoint2 (offset 239) */ + /* _mesa_function_pool[28724]: EvalPoint2 (offset 239) */ "ii\0" "glEvalPoint2\0" "\0" - /* _mesa_function_pool[28284]: Uniform1uivEXT (will be remapped) */ + /* _mesa_function_pool[28741]: Uniform1uivEXT (will be remapped) */ "iip\0" "glUniform1uivEXT\0" "glUniform1uiv\0" "\0" - /* _mesa_function_pool[28320]: EvalPoint1 (offset 237) */ + /* _mesa_function_pool[28777]: EvalPoint1 (offset 237) */ "i\0" "glEvalPoint1\0" "\0" - /* _mesa_function_pool[28336]: Binormal3dvEXT (dynamic) */ + /* _mesa_function_pool[28793]: Binormal3dvEXT (dynamic) */ "p\0" "glBinormal3dvEXT\0" "\0" - /* _mesa_function_pool[28356]: PopMatrix (offset 297) */ + /* _mesa_function_pool[28813]: PopMatrix (offset 297) */ "\0" "glPopMatrix\0" "\0" - /* _mesa_function_pool[28370]: FinishFenceNV (will be remapped) */ + /* _mesa_function_pool[28827]: FinishFenceNV (will be remapped) */ "i\0" "glFinishFenceNV\0" "\0" - /* _mesa_function_pool[28389]: GetFogFuncSGIS (dynamic) */ + /* _mesa_function_pool[28846]: GetFogFuncSGIS (dynamic) */ "p\0" "glGetFogFuncSGIS\0" "\0" - /* _mesa_function_pool[28409]: GetUniformLocationARB (will be remapped) */ + /* _mesa_function_pool[28866]: GetUniformLocationARB (will be remapped) */ "ip\0" "glGetUniformLocation\0" "glGetUniformLocationARB\0" "\0" - /* _mesa_function_pool[28458]: SecondaryColor3fEXT (will be remapped) */ + /* _mesa_function_pool[28915]: SecondaryColor3fEXT (will be remapped) */ "fff\0" "glSecondaryColor3f\0" "glSecondaryColor3fEXT\0" "\0" - /* _mesa_function_pool[28504]: GetTexGeniv (offset 280) */ + /* _mesa_function_pool[28961]: GetTexGeniv (offset 280) */ "iip\0" "glGetTexGeniv\0" "\0" - /* _mesa_function_pool[28523]: CombinerInputNV (will be remapped) */ + /* _mesa_function_pool[28980]: CombinerInputNV (will be remapped) */ "iiiiii\0" "glCombinerInputNV\0" "\0" - /* _mesa_function_pool[28549]: VertexAttrib3sARB (will be remapped) */ + /* _mesa_function_pool[29006]: VertexAttrib3sARB (will be remapped) */ "iiii\0" "glVertexAttrib3s\0" "glVertexAttrib3sARB\0" "\0" - /* _mesa_function_pool[28592]: IsTransformFeedback (will be remapped) */ + /* _mesa_function_pool[29049]: IsTransformFeedback (will be remapped) */ "i\0" "glIsTransformFeedback\0" "\0" - /* _mesa_function_pool[28617]: ReplacementCodeuiNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[29074]: ReplacementCodeuiNormal3fVertex3fvSUN (dynamic) */ "ppp\0" "glReplacementCodeuiNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[28662]: Map2d (offset 222) */ + /* _mesa_function_pool[29119]: Map2d (offset 222) */ "iddiiddiip\0" "glMap2d\0" "\0" - /* _mesa_function_pool[28682]: Map2f (offset 223) */ + /* _mesa_function_pool[29139]: Map2f (offset 223) */ "iffiiffiip\0" "glMap2f\0" "\0" - /* _mesa_function_pool[28702]: ProgramStringARB (will be remapped) */ + /* _mesa_function_pool[29159]: ProgramStringARB (will be remapped) */ "iiip\0" "glProgramStringARB\0" "\0" - /* _mesa_function_pool[28727]: Vertex4s (offset 148) */ + /* _mesa_function_pool[29184]: Vertex4s (offset 148) */ "iiii\0" "glVertex4s\0" "\0" - /* _mesa_function_pool[28744]: TexCoord4fVertex4fvSUN (dynamic) */ + /* _mesa_function_pool[29201]: TexCoord4fVertex4fvSUN (dynamic) */ "pp\0" "glTexCoord4fVertex4fvSUN\0" "\0" - /* _mesa_function_pool[28773]: FragmentLightModelivSGIX (dynamic) */ + /* _mesa_function_pool[29230]: FragmentLightModelivSGIX (dynamic) */ "ip\0" "glFragmentLightModelivSGIX\0" "\0" - /* _mesa_function_pool[28804]: VertexAttrib1fNV (will be remapped) */ + /* _mesa_function_pool[29261]: VertexAttrib1fNV (will be remapped) */ "if\0" "glVertexAttrib1fNV\0" "\0" - /* _mesa_function_pool[28827]: Vertex4f (offset 144) */ + /* _mesa_function_pool[29284]: Vertex4f (offset 144) */ "ffff\0" "glVertex4f\0" "\0" - /* _mesa_function_pool[28844]: EvalCoord1d (offset 228) */ + /* _mesa_function_pool[29301]: EvalCoord1d (offset 228) */ "d\0" "glEvalCoord1d\0" "\0" - /* _mesa_function_pool[28861]: Vertex4d (offset 142) */ + /* _mesa_function_pool[29318]: Vertex4d (offset 142) */ "dddd\0" "glVertex4d\0" "\0" - /* _mesa_function_pool[28878]: RasterPos4dv (offset 79) */ + /* _mesa_function_pool[29335]: RasterPos4dv (offset 79) */ "p\0" "glRasterPos4dv\0" "\0" - /* _mesa_function_pool[28896]: UseShaderProgramEXT (will be remapped) */ + /* _mesa_function_pool[29353]: UseShaderProgramEXT (will be remapped) */ "ii\0" "glUseShaderProgramEXT\0" "\0" - /* _mesa_function_pool[28922]: FragmentLightfSGIX (dynamic) */ + /* _mesa_function_pool[29379]: FragmentLightfSGIX (dynamic) */ "iif\0" "glFragmentLightfSGIX\0" "\0" - /* _mesa_function_pool[28948]: GetCompressedTexImageARB (will be remapped) */ + /* _mesa_function_pool[29405]: GetCompressedTexImageARB (will be remapped) */ "iip\0" "glGetCompressedTexImage\0" "glGetCompressedTexImageARB\0" "\0" - /* _mesa_function_pool[29004]: GetTexGenfv (offset 279) */ + /* _mesa_function_pool[29461]: GetTexGenfv (offset 279) */ "iip\0" "glGetTexGenfv\0" "\0" - /* _mesa_function_pool[29023]: Vertex4i (offset 146) */ + /* _mesa_function_pool[29480]: Vertex4i (offset 146) */ "iiii\0" "glVertex4i\0" "\0" - /* _mesa_function_pool[29040]: VertexWeightPointerEXT (dynamic) */ + /* _mesa_function_pool[29497]: VertexWeightPointerEXT (dynamic) */ "iiip\0" "glVertexWeightPointerEXT\0" "\0" - /* _mesa_function_pool[29071]: GetHistogram (offset 361) */ + /* _mesa_function_pool[29528]: GetHistogram (offset 361) */ "iiiip\0" "glGetHistogram\0" "glGetHistogramEXT\0" "\0" - /* _mesa_function_pool[29111]: ActiveStencilFaceEXT (will be remapped) */ + /* _mesa_function_pool[29568]: ActiveStencilFaceEXT (will be remapped) */ "i\0" "glActiveStencilFaceEXT\0" "\0" - /* _mesa_function_pool[29137]: StencilFuncSeparateATI (will be remapped) */ + /* _mesa_function_pool[29594]: StencilFuncSeparateATI (will be remapped) */ "iiii\0" "glStencilFuncSeparateATI\0" "\0" - /* _mesa_function_pool[29168]: Materialf (offset 169) */ + /* _mesa_function_pool[29625]: Materialf (offset 169) */ "iif\0" "glMaterialf\0" "\0" - /* _mesa_function_pool[29185]: GetShaderSourceARB (will be remapped) */ + /* _mesa_function_pool[29642]: GetShaderSourceARB (will be remapped) */ "iipp\0" "glGetShaderSource\0" "glGetShaderSourceARB\0" "\0" - /* _mesa_function_pool[29230]: IglooInterfaceSGIX (dynamic) */ + /* _mesa_function_pool[29687]: IglooInterfaceSGIX (dynamic) */ "ip\0" "glIglooInterfaceSGIX\0" "\0" - /* _mesa_function_pool[29255]: Materiali (offset 171) */ + /* _mesa_function_pool[29712]: Materiali (offset 171) */ "iii\0" "glMateriali\0" "\0" - /* _mesa_function_pool[29272]: VertexAttrib4dNV (will be remapped) */ + /* _mesa_function_pool[29729]: VertexAttrib4dNV (will be remapped) */ "idddd\0" "glVertexAttrib4dNV\0" "\0" - /* _mesa_function_pool[29298]: MultiModeDrawElementsIBM (will be remapped) */ + /* _mesa_function_pool[29755]: MultiModeDrawElementsIBM (will be remapped) */ "ppipii\0" "glMultiModeDrawElementsIBM\0" "\0" - /* _mesa_function_pool[29333]: Indexsv (offset 51) */ + /* _mesa_function_pool[29790]: Indexsv (offset 51) */ "p\0" "glIndexsv\0" "\0" - /* _mesa_function_pool[29346]: MultiTexCoord4svARB (offset 407) */ + /* _mesa_function_pool[29803]: MultiTexCoord4svARB (offset 407) */ "ip\0" "glMultiTexCoord4sv\0" "glMultiTexCoord4svARB\0" "\0" - /* _mesa_function_pool[29391]: LightModelfv (offset 164) */ + /* _mesa_function_pool[29848]: LightModelfv (offset 164) */ "ip\0" "glLightModelfv\0" "\0" - /* _mesa_function_pool[29410]: TexCoord2dv (offset 103) */ + /* _mesa_function_pool[29867]: TexCoord2dv (offset 103) */ "p\0" "glTexCoord2dv\0" "\0" - /* _mesa_function_pool[29427]: GenQueriesARB (will be remapped) */ + /* _mesa_function_pool[29884]: GenQueriesARB (will be remapped) */ "ip\0" "glGenQueries\0" "glGenQueriesARB\0" "\0" - /* _mesa_function_pool[29460]: EvalCoord1dv (offset 229) */ + /* _mesa_function_pool[29917]: EvalCoord1dv (offset 229) */ "p\0" "glEvalCoord1dv\0" "\0" - /* _mesa_function_pool[29478]: ReplacementCodeuiVertex3fSUN (dynamic) */ + /* _mesa_function_pool[29935]: ReplacementCodeuiVertex3fSUN (dynamic) */ "ifff\0" "glReplacementCodeuiVertex3fSUN\0" "\0" - /* _mesa_function_pool[29515]: Translated (offset 303) */ + /* _mesa_function_pool[29972]: Translated (offset 303) */ "ddd\0" "glTranslated\0" "\0" - /* _mesa_function_pool[29533]: Translatef (offset 304) */ + /* _mesa_function_pool[29990]: Translatef (offset 304) */ "fff\0" "glTranslatef\0" "\0" - /* _mesa_function_pool[29551]: Uniform3uiEXT (will be remapped) */ + /* _mesa_function_pool[30008]: Uniform3uiEXT (will be remapped) */ "iiii\0" "glUniform3uiEXT\0" "glUniform3ui\0" "\0" - /* _mesa_function_pool[29586]: StencilMask (offset 209) */ + /* _mesa_function_pool[30043]: StencilMask (offset 209) */ "i\0" "glStencilMask\0" "\0" - /* _mesa_function_pool[29603]: Tangent3iEXT (dynamic) */ + /* _mesa_function_pool[30060]: Tangent3iEXT (dynamic) */ "iii\0" "glTangent3iEXT\0" "\0" - /* _mesa_function_pool[29623]: ClampColorARB (will be remapped) */ + /* _mesa_function_pool[30080]: ClampColorARB (will be remapped) */ "ii\0" "glClampColorARB\0" "\0" - /* _mesa_function_pool[29643]: GetLightiv (offset 265) */ + /* _mesa_function_pool[30100]: GetLightiv (offset 265) */ "iip\0" "glGetLightiv\0" "\0" - /* _mesa_function_pool[29661]: GetSamplerParameterIiv (will be remapped) */ + /* _mesa_function_pool[30118]: GetSamplerParameterIiv (will be remapped) */ "iip\0" "glGetSamplerParameterIiv\0" "\0" - /* _mesa_function_pool[29691]: DrawMeshArraysSUN (dynamic) */ + /* _mesa_function_pool[30148]: DrawMeshArraysSUN (dynamic) */ "iiii\0" "glDrawMeshArraysSUN\0" "\0" - /* _mesa_function_pool[29717]: IsList (offset 287) */ + /* _mesa_function_pool[30174]: IsList (offset 287) */ "i\0" "glIsList\0" "\0" - /* _mesa_function_pool[29729]: IsSync (will be remapped) */ + /* _mesa_function_pool[30186]: IsSync (will be remapped) */ "i\0" "glIsSync\0" "\0" - /* _mesa_function_pool[29741]: RenderMode (offset 196) */ + /* _mesa_function_pool[30198]: RenderMode (offset 196) */ "i\0" "glRenderMode\0" "\0" - /* _mesa_function_pool[29757]: GetMapControlPointsNV (dynamic) */ + /* _mesa_function_pool[30214]: GetMapControlPointsNV (dynamic) */ "iiiiiip\0" "glGetMapControlPointsNV\0" "\0" - /* _mesa_function_pool[29790]: DrawBuffersARB (will be remapped) */ + /* _mesa_function_pool[30247]: DrawBuffersARB (will be remapped) */ "ip\0" "glDrawBuffers\0" "glDrawBuffersARB\0" "glDrawBuffersATI\0" "\0" - /* _mesa_function_pool[29842]: ClearBufferiv (will be remapped) */ + /* _mesa_function_pool[30299]: ClearBufferiv (will be remapped) */ "iip\0" "glClearBufferiv\0" "\0" - /* _mesa_function_pool[29863]: ProgramLocalParameter4fARB (will be remapped) */ + /* _mesa_function_pool[30320]: ProgramLocalParameter4fARB (will be remapped) */ "iiffff\0" "glProgramLocalParameter4fARB\0" "\0" - /* _mesa_function_pool[29900]: SpriteParameterivSGIX (dynamic) */ + /* _mesa_function_pool[30357]: SpriteParameterivSGIX (dynamic) */ "ip\0" "glSpriteParameterivSGIX\0" "\0" - /* _mesa_function_pool[29928]: ProvokingVertexEXT (will be remapped) */ + /* _mesa_function_pool[30385]: ProvokingVertexEXT (will be remapped) */ "i\0" "glProvokingVertexEXT\0" "glProvokingVertex\0" "\0" - /* _mesa_function_pool[29970]: MultiTexCoord1fARB (offset 378) */ + /* _mesa_function_pool[30427]: MultiTexCoord1fARB (offset 378) */ "if\0" "glMultiTexCoord1f\0" "glMultiTexCoord1fARB\0" "\0" - /* _mesa_function_pool[30013]: LoadName (offset 198) */ + /* _mesa_function_pool[30470]: LoadName (offset 198) */ "i\0" "glLoadName\0" "\0" - /* _mesa_function_pool[30027]: VertexAttribs4ubvNV (will be remapped) */ + /* _mesa_function_pool[30484]: VertexAttribs4ubvNV (will be remapped) */ "iip\0" "glVertexAttribs4ubvNV\0" "\0" - /* _mesa_function_pool[30054]: WeightsvARB (dynamic) */ + /* _mesa_function_pool[30511]: WeightsvARB (dynamic) */ "ip\0" "glWeightsvARB\0" "\0" - /* _mesa_function_pool[30072]: Uniform1fvARB (will be remapped) */ + /* _mesa_function_pool[30529]: Uniform1fvARB (will be remapped) */ "iip\0" "glUniform1fv\0" "glUniform1fvARB\0" "\0" - /* _mesa_function_pool[30106]: CopyTexSubImage1D (offset 325) */ + /* _mesa_function_pool[30563]: CopyTexSubImage1D (offset 325) */ "iiiiii\0" "glCopyTexSubImage1D\0" "glCopyTexSubImage1DEXT\0" "\0" - /* _mesa_function_pool[30157]: CullFace (offset 152) */ + /* _mesa_function_pool[30614]: CullFace (offset 152) */ "i\0" "glCullFace\0" "\0" - /* _mesa_function_pool[30171]: BindTexture (offset 307) */ + /* _mesa_function_pool[30628]: BindTexture (offset 307) */ "ii\0" "glBindTexture\0" "glBindTextureEXT\0" "\0" - /* _mesa_function_pool[30206]: BeginFragmentShaderATI (will be remapped) */ + /* _mesa_function_pool[30663]: BeginFragmentShaderATI (will be remapped) */ "\0" "glBeginFragmentShaderATI\0" "\0" - /* _mesa_function_pool[30233]: MultiTexCoord4fARB (offset 402) */ + /* _mesa_function_pool[30690]: MultiTexCoord4fARB (offset 402) */ "iffff\0" "glMultiTexCoord4f\0" "glMultiTexCoord4fARB\0" "\0" - /* _mesa_function_pool[30279]: VertexAttribs3svNV (will be remapped) */ + /* _mesa_function_pool[30736]: VertexAttribs3svNV (will be remapped) */ "iip\0" "glVertexAttribs3svNV\0" "\0" - /* _mesa_function_pool[30305]: StencilFunc (offset 243) */ + /* _mesa_function_pool[30762]: StencilFunc (offset 243) */ "iii\0" "glStencilFunc\0" "\0" - /* _mesa_function_pool[30324]: CopyPixels (offset 255) */ + /* _mesa_function_pool[30781]: CopyPixels (offset 255) */ "iiiii\0" "glCopyPixels\0" "\0" - /* _mesa_function_pool[30344]: Rectsv (offset 93) */ + /* _mesa_function_pool[30801]: Rectsv (offset 93) */ "pp\0" "glRectsv\0" "\0" - /* _mesa_function_pool[30357]: ReplacementCodeuivSUN (dynamic) */ + /* _mesa_function_pool[30814]: ReplacementCodeuivSUN (dynamic) */ "p\0" "glReplacementCodeuivSUN\0" "\0" - /* _mesa_function_pool[30384]: EnableVertexAttribArrayARB (will be remapped) */ + /* _mesa_function_pool[30841]: EnableVertexAttribArrayARB (will be remapped) */ "i\0" "glEnableVertexAttribArray\0" "glEnableVertexAttribArrayARB\0" "\0" - /* _mesa_function_pool[30442]: NormalPointervINTEL (dynamic) */ + /* _mesa_function_pool[30899]: NormalPointervINTEL (dynamic) */ "ip\0" "glNormalPointervINTEL\0" "\0" - /* _mesa_function_pool[30468]: CopyConvolutionFilter2D (offset 355) */ + /* _mesa_function_pool[30925]: CopyConvolutionFilter2D (offset 355) */ "iiiiii\0" "glCopyConvolutionFilter2D\0" "glCopyConvolutionFilter2DEXT\0" "\0" - /* _mesa_function_pool[30531]: WindowPos3ivMESA (will be remapped) */ + /* _mesa_function_pool[30988]: WindowPos3ivMESA (will be remapped) */ "p\0" "glWindowPos3iv\0" "glWindowPos3ivARB\0" "glWindowPos3ivMESA\0" "\0" - /* _mesa_function_pool[30586]: CopyBufferSubData (will be remapped) */ + /* _mesa_function_pool[31043]: CopyBufferSubData (will be remapped) */ "iiiii\0" "glCopyBufferSubData\0" "\0" - /* _mesa_function_pool[30613]: NormalPointer (offset 318) */ + /* _mesa_function_pool[31070]: NormalPointer (offset 318) */ "iip\0" "glNormalPointer\0" "\0" - /* _mesa_function_pool[30634]: TexParameterfv (offset 179) */ + /* _mesa_function_pool[31091]: TexParameterfv (offset 179) */ "iip\0" "glTexParameterfv\0" "\0" - /* _mesa_function_pool[30656]: IsBufferARB (will be remapped) */ + /* _mesa_function_pool[31113]: IsBufferARB (will be remapped) */ "i\0" "glIsBuffer\0" "glIsBufferARB\0" "\0" - /* _mesa_function_pool[30684]: WindowPos4iMESA (will be remapped) */ + /* _mesa_function_pool[31141]: WindowPos4iMESA (will be remapped) */ "iiii\0" "glWindowPos4iMESA\0" "\0" - /* _mesa_function_pool[30708]: VertexAttrib4uivARB (will be remapped) */ + /* _mesa_function_pool[31165]: VertexAttrib4uivARB (will be remapped) */ "ip\0" "glVertexAttrib4uiv\0" "glVertexAttrib4uivARB\0" "\0" - /* _mesa_function_pool[30753]: Tangent3bvEXT (dynamic) */ + /* _mesa_function_pool[31210]: Tangent3bvEXT (dynamic) */ "p\0" "glTangent3bvEXT\0" "\0" - /* _mesa_function_pool[30772]: VertexAttribI3uivEXT (will be remapped) */ + /* _mesa_function_pool[31229]: VertexAttribI3uivEXT (will be remapped) */ "ip\0" "glVertexAttribI3uivEXT\0" "glVertexAttribI3uiv\0" "\0" - /* _mesa_function_pool[30819]: UniformMatrix3x4fv (will be remapped) */ + /* _mesa_function_pool[31276]: UniformMatrix3x4fv (will be remapped) */ "iiip\0" "glUniformMatrix3x4fv\0" "\0" - /* _mesa_function_pool[30846]: ClipPlane (offset 150) */ + /* _mesa_function_pool[31303]: ClipPlane (offset 150) */ "ip\0" "glClipPlane\0" "\0" - /* _mesa_function_pool[30862]: Recti (offset 90) */ + /* _mesa_function_pool[31319]: Recti (offset 90) */ "iiii\0" "glRecti\0" "\0" - /* _mesa_function_pool[30876]: TrackMatrixNV (will be remapped) */ + /* _mesa_function_pool[31333]: TrackMatrixNV (will be remapped) */ "iiii\0" "glTrackMatrixNV\0" "\0" - /* _mesa_function_pool[30898]: DrawRangeElementsBaseVertex (will be remapped) */ + /* _mesa_function_pool[31355]: DrawRangeElementsBaseVertex (will be remapped) */ "iiiiipi\0" "glDrawRangeElementsBaseVertex\0" "\0" - /* _mesa_function_pool[30937]: SamplerParameterIuiv (will be remapped) */ + /* _mesa_function_pool[31394]: SamplerParameterIuiv (will be remapped) */ "iip\0" "glSamplerParameterIuiv\0" "\0" - /* _mesa_function_pool[30965]: TexCoordPointervINTEL (dynamic) */ + /* _mesa_function_pool[31422]: TexCoordPointervINTEL (dynamic) */ "iip\0" "glTexCoordPointervINTEL\0" "\0" - /* _mesa_function_pool[30994]: DeleteBuffersARB (will be remapped) */ + /* _mesa_function_pool[31451]: DeleteBuffersARB (will be remapped) */ "ip\0" "glDeleteBuffers\0" "glDeleteBuffersARB\0" "\0" - /* _mesa_function_pool[31033]: PixelTransformParameterfvEXT (dynamic) */ + /* _mesa_function_pool[31490]: PixelTransformParameterfvEXT (dynamic) */ "iip\0" "glPixelTransformParameterfvEXT\0" "\0" - /* _mesa_function_pool[31069]: PrimitiveRestartNV (will be remapped) */ + /* _mesa_function_pool[31526]: PrimitiveRestartNV (will be remapped) */ "\0" "glPrimitiveRestartNV\0" "\0" - /* _mesa_function_pool[31092]: WindowPos4fvMESA (will be remapped) */ + /* _mesa_function_pool[31549]: WindowPos4fvMESA (will be remapped) */ "p\0" "glWindowPos4fvMESA\0" "\0" - /* _mesa_function_pool[31114]: GetPixelMapuiv (offset 272) */ + /* _mesa_function_pool[31571]: GetPixelMapuiv (offset 272) */ "ip\0" "glGetPixelMapuiv\0" "\0" - /* _mesa_function_pool[31135]: Rectf (offset 88) */ + /* _mesa_function_pool[31592]: Rectf (offset 88) */ "ffff\0" "glRectf\0" "\0" - /* _mesa_function_pool[31149]: VertexAttrib1sNV (will be remapped) */ + /* _mesa_function_pool[31606]: VertexAttrib1sNV (will be remapped) */ "ii\0" "glVertexAttrib1sNV\0" "\0" - /* _mesa_function_pool[31172]: Indexfv (offset 47) */ + /* _mesa_function_pool[31629]: Indexfv (offset 47) */ "p\0" "glIndexfv\0" "\0" - /* _mesa_function_pool[31185]: SecondaryColor3svEXT (will be remapped) */ + /* _mesa_function_pool[31642]: SecondaryColor3svEXT (will be remapped) */ "p\0" "glSecondaryColor3sv\0" "glSecondaryColor3svEXT\0" "\0" - /* _mesa_function_pool[31231]: LoadTransposeMatrixfARB (will be remapped) */ + /* _mesa_function_pool[31688]: LoadTransposeMatrixfARB (will be remapped) */ "p\0" "glLoadTransposeMatrixf\0" "glLoadTransposeMatrixfARB\0" "\0" - /* _mesa_function_pool[31283]: GetPointerv (offset 329) */ + /* _mesa_function_pool[31740]: GetPointerv (offset 329) */ "ip\0" "glGetPointerv\0" "glGetPointervEXT\0" "\0" - /* _mesa_function_pool[31318]: Tangent3bEXT (dynamic) */ + /* _mesa_function_pool[31775]: Tangent3bEXT (dynamic) */ "iii\0" "glTangent3bEXT\0" "\0" - /* _mesa_function_pool[31338]: CombinerParameterfNV (will be remapped) */ + /* _mesa_function_pool[31795]: CombinerParameterfNV (will be remapped) */ "if\0" "glCombinerParameterfNV\0" "\0" - /* _mesa_function_pool[31365]: IndexMask (offset 212) */ + /* _mesa_function_pool[31822]: IndexMask (offset 212) */ "i\0" "glIndexMask\0" "\0" - /* _mesa_function_pool[31380]: BindProgramNV (will be remapped) */ + /* _mesa_function_pool[31837]: BindProgramNV (will be remapped) */ "ii\0" "glBindProgramARB\0" "glBindProgramNV\0" "\0" - /* _mesa_function_pool[31417]: VertexAttrib4svARB (will be remapped) */ + /* _mesa_function_pool[31874]: VertexAttrib4svARB (will be remapped) */ "ip\0" "glVertexAttrib4sv\0" "glVertexAttrib4svARB\0" "\0" - /* _mesa_function_pool[31460]: GetFloatv (offset 262) */ + /* _mesa_function_pool[31917]: GetFloatv (offset 262) */ "ip\0" "glGetFloatv\0" "\0" - /* _mesa_function_pool[31476]: CreateDebugObjectMESA (dynamic) */ + /* _mesa_function_pool[31933]: CreateDebugObjectMESA (dynamic) */ "\0" "glCreateDebugObjectMESA\0" "\0" - /* _mesa_function_pool[31502]: GetShaderiv (will be remapped) */ + /* _mesa_function_pool[31959]: GetShaderiv (will be remapped) */ "iip\0" "glGetShaderiv\0" "\0" - /* _mesa_function_pool[31521]: ClientWaitSync (will be remapped) */ + /* _mesa_function_pool[31978]: ClientWaitSync (will be remapped) */ "iii\0" "glClientWaitSync\0" "\0" - /* _mesa_function_pool[31543]: TexCoord4s (offset 124) */ + /* _mesa_function_pool[32000]: TexCoord4s (offset 124) */ "iiii\0" "glTexCoord4s\0" "\0" - /* _mesa_function_pool[31562]: TexCoord3sv (offset 117) */ + /* _mesa_function_pool[32019]: TexCoord3sv (offset 117) */ "p\0" "glTexCoord3sv\0" "\0" - /* _mesa_function_pool[31579]: BindFragmentShaderATI (will be remapped) */ + /* _mesa_function_pool[32036]: BindFragmentShaderATI (will be remapped) */ "i\0" "glBindFragmentShaderATI\0" "\0" - /* _mesa_function_pool[31606]: PopAttrib (offset 218) */ + /* _mesa_function_pool[32063]: PopAttrib (offset 218) */ "\0" "glPopAttrib\0" "\0" - /* _mesa_function_pool[31620]: Fogfv (offset 154) */ + /* _mesa_function_pool[32077]: Fogfv (offset 154) */ "ip\0" "glFogfv\0" "\0" - /* _mesa_function_pool[31632]: UnmapBufferARB (will be remapped) */ + /* _mesa_function_pool[32089]: UnmapBufferARB (will be remapped) */ "i\0" "glUnmapBuffer\0" "glUnmapBufferARB\0" "\0" - /* _mesa_function_pool[31666]: InitNames (offset 197) */ + /* _mesa_function_pool[32123]: InitNames (offset 197) */ "\0" "glInitNames\0" "\0" - /* _mesa_function_pool[31680]: Normal3sv (offset 61) */ + /* _mesa_function_pool[32137]: Normal3sv (offset 61) */ "p\0" "glNormal3sv\0" "\0" - /* _mesa_function_pool[31695]: Minmax (offset 368) */ + /* _mesa_function_pool[32152]: Minmax (offset 368) */ "iii\0" "glMinmax\0" "glMinmaxEXT\0" "\0" - /* _mesa_function_pool[31721]: TexCoord4d (offset 118) */ + /* _mesa_function_pool[32178]: TexCoord4d (offset 118) */ "dddd\0" "glTexCoord4d\0" "\0" - /* _mesa_function_pool[31740]: DeformationMap3dSGIX (dynamic) */ + /* _mesa_function_pool[32197]: DeformationMap3dSGIX (dynamic) */ "iddiiddiiddiip\0" "glDeformationMap3dSGIX\0" "\0" - /* _mesa_function_pool[31779]: TexCoord4f (offset 120) */ + /* _mesa_function_pool[32236]: TexCoord4f (offset 120) */ "ffff\0" "glTexCoord4f\0" "\0" - /* _mesa_function_pool[31798]: FogCoorddvEXT (will be remapped) */ + /* _mesa_function_pool[32255]: FogCoorddvEXT (will be remapped) */ "p\0" "glFogCoorddv\0" "glFogCoorddvEXT\0" "\0" - /* _mesa_function_pool[31830]: FinishTextureSUNX (dynamic) */ + /* _mesa_function_pool[32287]: FinishTextureSUNX (dynamic) */ "\0" "glFinishTextureSUNX\0" "\0" - /* _mesa_function_pool[31852]: GetFragmentLightfvSGIX (dynamic) */ + /* _mesa_function_pool[32309]: GetFragmentLightfvSGIX (dynamic) */ "iip\0" "glGetFragmentLightfvSGIX\0" "\0" - /* _mesa_function_pool[31882]: Binormal3fvEXT (dynamic) */ + /* _mesa_function_pool[32339]: Binormal3fvEXT (dynamic) */ "p\0" "glBinormal3fvEXT\0" "\0" - /* _mesa_function_pool[31902]: GetBooleanv (offset 258) */ + /* _mesa_function_pool[32359]: GetBooleanv (offset 258) */ "ip\0" "glGetBooleanv\0" "\0" - /* _mesa_function_pool[31920]: ColorFragmentOp3ATI (will be remapped) */ + /* _mesa_function_pool[32377]: ColorFragmentOp3ATI (will be remapped) */ "iiiiiiiiiiiii\0" "glColorFragmentOp3ATI\0" "\0" - /* _mesa_function_pool[31957]: Hint (offset 158) */ + /* _mesa_function_pool[32414]: Hint (offset 158) */ "ii\0" "glHint\0" "\0" - /* _mesa_function_pool[31968]: Color4dv (offset 28) */ + /* _mesa_function_pool[32425]: Color4dv (offset 28) */ "p\0" "glColor4dv\0" "\0" - /* _mesa_function_pool[31982]: VertexAttrib2svARB (will be remapped) */ + /* _mesa_function_pool[32439]: VertexAttrib2svARB (will be remapped) */ "ip\0" "glVertexAttrib2sv\0" "glVertexAttrib2svARB\0" "\0" - /* _mesa_function_pool[32025]: AreProgramsResidentNV (will be remapped) */ + /* _mesa_function_pool[32482]: AreProgramsResidentNV (will be remapped) */ "ipp\0" "glAreProgramsResidentNV\0" "\0" - /* _mesa_function_pool[32054]: WindowPos3svMESA (will be remapped) */ + /* _mesa_function_pool[32511]: WindowPos3svMESA (will be remapped) */ "p\0" "glWindowPos3sv\0" "glWindowPos3svARB\0" "glWindowPos3svMESA\0" "\0" - /* _mesa_function_pool[32109]: CopyColorSubTable (offset 347) */ + /* _mesa_function_pool[32566]: CopyColorSubTable (offset 347) */ "iiiii\0" "glCopyColorSubTable\0" "glCopyColorSubTableEXT\0" "\0" - /* _mesa_function_pool[32159]: WeightdvARB (dynamic) */ + /* _mesa_function_pool[32616]: WeightdvARB (dynamic) */ "ip\0" "glWeightdvARB\0" "\0" - /* _mesa_function_pool[32177]: DeleteRenderbuffersEXT (will be remapped) */ + /* _mesa_function_pool[32634]: DeleteRenderbuffersEXT (will be remapped) */ "ip\0" "glDeleteRenderbuffers\0" "glDeleteRenderbuffersEXT\0" "\0" - /* _mesa_function_pool[32228]: VertexAttrib4NubvARB (will be remapped) */ + /* _mesa_function_pool[32685]: VertexAttrib4NubvARB (will be remapped) */ "ip\0" "glVertexAttrib4Nubv\0" "glVertexAttrib4NubvARB\0" "\0" - /* _mesa_function_pool[32275]: VertexAttrib3dvNV (will be remapped) */ + /* _mesa_function_pool[32732]: VertexAttrib3dvNV (will be remapped) */ "ip\0" "glVertexAttrib3dvNV\0" "\0" - /* _mesa_function_pool[32299]: GetObjectParameterfvARB (will be remapped) */ + /* _mesa_function_pool[32756]: GetObjectParameterfvARB (will be remapped) */ "iip\0" "glGetObjectParameterfvARB\0" "\0" - /* _mesa_function_pool[32330]: Vertex4iv (offset 147) */ + /* _mesa_function_pool[32787]: Vertex4iv (offset 147) */ "p\0" "glVertex4iv\0" "\0" - /* _mesa_function_pool[32345]: GetProgramEnvParameterdvARB (will be remapped) */ + /* _mesa_function_pool[32802]: GetProgramEnvParameterdvARB (will be remapped) */ "iip\0" "glGetProgramEnvParameterdvARB\0" "\0" - /* _mesa_function_pool[32380]: TexCoord4dv (offset 119) */ + /* _mesa_function_pool[32837]: TexCoord4dv (offset 119) */ "p\0" "glTexCoord4dv\0" "\0" - /* _mesa_function_pool[32397]: LockArraysEXT (will be remapped) */ + /* _mesa_function_pool[32854]: LockArraysEXT (will be remapped) */ "ii\0" "glLockArraysEXT\0" "\0" - /* _mesa_function_pool[32417]: Begin (offset 7) */ + /* _mesa_function_pool[32874]: Begin (offset 7) */ "i\0" "glBegin\0" "\0" - /* _mesa_function_pool[32428]: LightModeli (offset 165) */ + /* _mesa_function_pool[32885]: LightModeli (offset 165) */ "ii\0" "glLightModeli\0" "\0" - /* _mesa_function_pool[32446]: VertexAttribI4ivEXT (will be remapped) */ + /* _mesa_function_pool[32903]: VertexAttribI4ivEXT (will be remapped) */ "ip\0" "glVertexAttribI4ivEXT\0" "glVertexAttribI4iv\0" "\0" - /* _mesa_function_pool[32491]: Rectfv (offset 89) */ + /* _mesa_function_pool[32948]: Rectfv (offset 89) */ "pp\0" "glRectfv\0" "\0" - /* _mesa_function_pool[32504]: LightModelf (offset 163) */ + /* _mesa_function_pool[32961]: LightModelf (offset 163) */ "if\0" "glLightModelf\0" "\0" - /* _mesa_function_pool[32522]: GetTexParameterfv (offset 282) */ + /* _mesa_function_pool[32979]: GetTexParameterfv (offset 282) */ "iip\0" "glGetTexParameterfv\0" "\0" - /* _mesa_function_pool[32547]: GetLightfv (offset 264) */ + /* _mesa_function_pool[33004]: GetLightfv (offset 264) */ "iip\0" "glGetLightfv\0" "\0" - /* _mesa_function_pool[32565]: PixelTransformParameterivEXT (dynamic) */ + /* _mesa_function_pool[33022]: PixelTransformParameterivEXT (dynamic) */ "iip\0" "glPixelTransformParameterivEXT\0" "\0" - /* _mesa_function_pool[32601]: BinormalPointerEXT (dynamic) */ + /* _mesa_function_pool[33058]: BinormalPointerEXT (dynamic) */ "iip\0" "glBinormalPointerEXT\0" "\0" - /* _mesa_function_pool[32627]: VertexAttrib1dNV (will be remapped) */ + /* _mesa_function_pool[33084]: VertexAttrib1dNV (will be remapped) */ "id\0" "glVertexAttrib1dNV\0" "\0" - /* _mesa_function_pool[32650]: GetCombinerInputParameterivNV (will be remapped) */ + /* _mesa_function_pool[33107]: GetCombinerInputParameterivNV (will be remapped) */ "iiiip\0" "glGetCombinerInputParameterivNV\0" "\0" - /* _mesa_function_pool[32689]: Disable (offset 214) */ + /* _mesa_function_pool[33146]: Disable (offset 214) */ "i\0" "glDisable\0" "\0" - /* _mesa_function_pool[32702]: MultiTexCoord2fvARB (offset 387) */ + /* _mesa_function_pool[33159]: MultiTexCoord2fvARB (offset 387) */ "ip\0" "glMultiTexCoord2fv\0" "glMultiTexCoord2fvARB\0" "\0" - /* _mesa_function_pool[32747]: GetRenderbufferParameterivEXT (will be remapped) */ + /* _mesa_function_pool[33204]: GetRenderbufferParameterivEXT (will be remapped) */ "iip\0" "glGetRenderbufferParameteriv\0" "glGetRenderbufferParameterivEXT\0" "\0" - /* _mesa_function_pool[32813]: CombinerParameterivNV (will be remapped) */ + /* _mesa_function_pool[33270]: CombinerParameterivNV (will be remapped) */ "ip\0" "glCombinerParameterivNV\0" "\0" - /* _mesa_function_pool[32841]: GenFragmentShadersATI (will be remapped) */ + /* _mesa_function_pool[33298]: GenFragmentShadersATI (will be remapped) */ "i\0" "glGenFragmentShadersATI\0" "\0" - /* _mesa_function_pool[32868]: DrawArrays (offset 310) */ + /* _mesa_function_pool[33325]: DrawArrays (offset 310) */ "iii\0" "glDrawArrays\0" "glDrawArraysEXT\0" "\0" - /* _mesa_function_pool[32902]: WeightuivARB (dynamic) */ + /* _mesa_function_pool[33359]: WeightuivARB (dynamic) */ "ip\0" "glWeightuivARB\0" "\0" - /* _mesa_function_pool[32921]: VertexAttrib2sARB (will be remapped) */ + /* _mesa_function_pool[33378]: GetVertexAttribIivEXT (will be remapped) */ + "iip\0" + "glGetVertexAttribIivEXT\0" + "glGetVertexAttribIiv\0" + "\0" + /* _mesa_function_pool[33428]: VertexAttrib2sARB (will be remapped) */ "iii\0" "glVertexAttrib2s\0" "glVertexAttrib2sARB\0" "\0" - /* _mesa_function_pool[32963]: ColorMask (offset 210) */ + /* _mesa_function_pool[33470]: GetnTexImageARB (will be remapped) */ + "iiiiip\0" + "glGetnTexImageARB\0" + "\0" + /* _mesa_function_pool[33496]: ColorMask (offset 210) */ "iiii\0" "glColorMask\0" "\0" - /* _mesa_function_pool[32981]: GenAsyncMarkersSGIX (dynamic) */ + /* _mesa_function_pool[33514]: GenAsyncMarkersSGIX (dynamic) */ "i\0" "glGenAsyncMarkersSGIX\0" "\0" - /* _mesa_function_pool[33006]: Tangent3svEXT (dynamic) */ + /* _mesa_function_pool[33539]: Tangent3svEXT (dynamic) */ "p\0" "glTangent3svEXT\0" "\0" - /* _mesa_function_pool[33025]: GetListParameterivSGIX (dynamic) */ + /* _mesa_function_pool[33558]: GetListParameterivSGIX (dynamic) */ "iip\0" "glGetListParameterivSGIX\0" "\0" - /* _mesa_function_pool[33055]: BindBufferARB (will be remapped) */ + /* _mesa_function_pool[33588]: BindBufferARB (will be remapped) */ "ii\0" "glBindBuffer\0" "glBindBufferARB\0" "\0" - /* _mesa_function_pool[33088]: GetInfoLogARB (will be remapped) */ + /* _mesa_function_pool[33621]: GetInfoLogARB (will be remapped) */ "iipp\0" "glGetInfoLogARB\0" "\0" - /* _mesa_function_pool[33110]: RasterPos4iv (offset 83) */ + /* _mesa_function_pool[33643]: RasterPos4iv (offset 83) */ "p\0" "glRasterPos4iv\0" "\0" - /* _mesa_function_pool[33128]: Enable (offset 215) */ + /* _mesa_function_pool[33661]: Enable (offset 215) */ "i\0" "glEnable\0" "\0" - /* _mesa_function_pool[33140]: LineStipple (offset 167) */ + /* _mesa_function_pool[33673]: LineStipple (offset 167) */ "ii\0" "glLineStipple\0" "\0" - /* _mesa_function_pool[33158]: VertexAttribs4svNV (will be remapped) */ + /* _mesa_function_pool[33691]: VertexAttribs4svNV (will be remapped) */ "iip\0" "glVertexAttribs4svNV\0" "\0" - /* _mesa_function_pool[33184]: EdgeFlagPointerListIBM (dynamic) */ + /* _mesa_function_pool[33717]: EdgeFlagPointerListIBM (dynamic) */ "ipi\0" "glEdgeFlagPointerListIBM\0" "\0" - /* _mesa_function_pool[33214]: UniformMatrix3x2fv (will be remapped) */ + /* _mesa_function_pool[33747]: UniformMatrix3x2fv (will be remapped) */ "iiip\0" "glUniformMatrix3x2fv\0" "\0" - /* _mesa_function_pool[33241]: GetMinmaxParameterfv (offset 365) */ + /* _mesa_function_pool[33774]: GetMinmaxParameterfv (offset 365) */ "iip\0" "glGetMinmaxParameterfv\0" "glGetMinmaxParameterfvEXT\0" "\0" - /* _mesa_function_pool[33295]: VertexAttrib1fvARB (will be remapped) */ + /* _mesa_function_pool[33828]: VertexAttrib1fvARB (will be remapped) */ "ip\0" "glVertexAttrib1fv\0" "glVertexAttrib1fvARB\0" "\0" - /* _mesa_function_pool[33338]: GenBuffersARB (will be remapped) */ + /* _mesa_function_pool[33871]: GenBuffersARB (will be remapped) */ "ip\0" "glGenBuffers\0" "glGenBuffersARB\0" "\0" - /* _mesa_function_pool[33371]: VertexAttribs1svNV (will be remapped) */ + /* _mesa_function_pool[33904]: VertexAttribs1svNV (will be remapped) */ "iip\0" "glVertexAttribs1svNV\0" "\0" - /* _mesa_function_pool[33397]: Vertex3fv (offset 137) */ + /* _mesa_function_pool[33930]: Vertex3fv (offset 137) */ "p\0" "glVertex3fv\0" "\0" - /* _mesa_function_pool[33412]: GetTexBumpParameterivATI (will be remapped) */ + /* _mesa_function_pool[33945]: GetTexBumpParameterivATI (will be remapped) */ "ip\0" "glGetTexBumpParameterivATI\0" "\0" - /* _mesa_function_pool[33443]: Binormal3bEXT (dynamic) */ + /* _mesa_function_pool[33976]: Binormal3bEXT (dynamic) */ "iii\0" "glBinormal3bEXT\0" "\0" - /* _mesa_function_pool[33464]: FragmentMaterialivSGIX (dynamic) */ + /* _mesa_function_pool[33997]: FragmentMaterialivSGIX (dynamic) */ "iip\0" "glFragmentMaterialivSGIX\0" "\0" - /* _mesa_function_pool[33494]: IsRenderbufferEXT (will be remapped) */ + /* _mesa_function_pool[34027]: IsRenderbufferEXT (will be remapped) */ "i\0" "glIsRenderbuffer\0" "glIsRenderbufferEXT\0" "\0" - /* _mesa_function_pool[33534]: GenProgramsNV (will be remapped) */ + /* _mesa_function_pool[34067]: GenProgramsNV (will be remapped) */ "ip\0" "glGenProgramsARB\0" "glGenProgramsNV\0" "\0" - /* _mesa_function_pool[33571]: VertexAttrib4dvNV (will be remapped) */ + /* _mesa_function_pool[34104]: VertexAttrib4dvNV (will be remapped) */ "ip\0" "glVertexAttrib4dvNV\0" "\0" - /* _mesa_function_pool[33595]: EndFragmentShaderATI (will be remapped) */ + /* _mesa_function_pool[34128]: EndFragmentShaderATI (will be remapped) */ "\0" "glEndFragmentShaderATI\0" "\0" - /* _mesa_function_pool[33620]: Binormal3iEXT (dynamic) */ + /* _mesa_function_pool[34153]: Binormal3iEXT (dynamic) */ "iii\0" "glBinormal3iEXT\0" "\0" - /* _mesa_function_pool[33641]: WindowPos2fMESA (will be remapped) */ + /* _mesa_function_pool[34174]: WindowPos2fMESA (will be remapped) */ "ff\0" "glWindowPos2f\0" "glWindowPos2fARB\0" @@ -4847,616 +4927,636 @@ static const char _mesa_function_pool[] = /* these functions need to be remapped */ static const struct gl_function_pool_remap MESA_remap_table_functions[] = { - { 1577, AttachShader_remap_index }, - { 9967, CreateProgram_remap_index }, - { 23300, CreateShader_remap_index }, - { 25832, DeleteProgram_remap_index }, - { 18888, DeleteShader_remap_index }, - { 23801, DetachShader_remap_index }, - { 18202, GetAttachedShaders_remap_index }, - { 4919, GetProgramInfoLog_remap_index }, + { 1590, AttachShader_remap_index }, + { 10221, CreateProgram_remap_index }, + { 23765, CreateShader_remap_index }, + { 26289, DeleteProgram_remap_index }, + { 19245, DeleteShader_remap_index }, + { 24258, DetachShader_remap_index }, + { 18534, GetAttachedShaders_remap_index }, + { 5053, GetProgramInfoLog_remap_index }, { 405, GetProgramiv_remap_index }, - { 6627, GetShaderInfoLog_remap_index }, - { 31502, GetShaderiv_remap_index }, - { 13443, IsProgram_remap_index }, - { 12364, IsShader_remap_index }, - { 10097, StencilFuncSeparate_remap_index }, - { 3921, StencilMaskSeparate_remap_index }, - { 7692, StencilOpSeparate_remap_index }, - { 22560, UniformMatrix2x3fv_remap_index }, - { 2847, UniformMatrix2x4fv_remap_index }, - { 33214, UniformMatrix3x2fv_remap_index }, - { 30819, UniformMatrix3x4fv_remap_index }, - { 16406, UniformMatrix4x2fv_remap_index }, - { 3263, UniformMatrix4x3fv_remap_index }, - { 5080, ClampColor_remap_index }, - { 18256, ClearBufferfi_remap_index }, - { 17698, ClearBufferfv_remap_index }, - { 29842, ClearBufferiv_remap_index }, - { 13648, ClearBufferuiv_remap_index }, - { 20199, GetStringi_remap_index }, - { 2788, TexBuffer_remap_index }, + { 6861, GetShaderInfoLog_remap_index }, + { 31959, GetShaderiv_remap_index }, + { 13724, IsProgram_remap_index }, + { 12645, IsShader_remap_index }, + { 10351, StencilFuncSeparate_remap_index }, + { 4031, StencilMaskSeparate_remap_index }, + { 7926, StencilOpSeparate_remap_index }, + { 22999, UniformMatrix2x3fv_remap_index }, + { 2920, UniformMatrix2x4fv_remap_index }, + { 33747, UniformMatrix3x2fv_remap_index }, + { 31276, UniformMatrix3x4fv_remap_index }, + { 16714, UniformMatrix4x2fv_remap_index }, + { 3339, UniformMatrix4x3fv_remap_index }, + { 5259, ClampColor_remap_index }, + { 18588, ClearBufferfi_remap_index }, + { 18030, ClearBufferfv_remap_index }, + { 30299, ClearBufferiv_remap_index }, + { 13929, ClearBufferuiv_remap_index }, + { 20582, GetStringi_remap_index }, + { 2861, TexBuffer_remap_index }, { 938, FramebufferTexture_remap_index }, - { 26868, GetBufferParameteri64v_remap_index }, - { 10197, GetInteger64i_v_remap_index }, - { 23614, VertexAttribDivisor_remap_index }, - { 9985, LoadTransposeMatrixdARB_remap_index }, - { 31231, LoadTransposeMatrixfARB_remap_index }, - { 5693, MultTransposeMatrixdARB_remap_index }, - { 23988, MultTransposeMatrixfARB_remap_index }, + { 27325, GetBufferParameteri64v_remap_index }, + { 10451, GetInteger64i_v_remap_index }, + { 24079, VertexAttribDivisor_remap_index }, + { 10239, LoadTransposeMatrixdARB_remap_index }, + { 31688, LoadTransposeMatrixfARB_remap_index }, + { 5898, MultTransposeMatrixdARB_remap_index }, + { 24445, MultTransposeMatrixfARB_remap_index }, { 216, SampleCoverageARB_remap_index }, - { 5919, CompressedTexImage1DARB_remap_index }, - { 24516, CompressedTexImage2DARB_remap_index }, - { 3984, CompressedTexImage3DARB_remap_index }, - { 18544, CompressedTexSubImage1DARB_remap_index }, - { 2050, CompressedTexSubImage2DARB_remap_index }, - { 20621, CompressedTexSubImage3DARB_remap_index }, - { 28948, GetCompressedTexImageARB_remap_index }, - { 3829, DisableVertexAttribArrayARB_remap_index }, - { 30384, EnableVertexAttribArrayARB_remap_index }, - { 32345, GetProgramEnvParameterdvARB_remap_index }, - { 23868, GetProgramEnvParameterfvARB_remap_index }, - { 27865, GetProgramLocalParameterdvARB_remap_index }, - { 8134, GetProgramLocalParameterfvARB_remap_index }, - { 18720, GetProgramStringARB_remap_index }, - { 28060, GetProgramivARB_remap_index }, - { 20816, GetVertexAttribdvARB_remap_index }, - { 16214, GetVertexAttribfvARB_remap_index }, - { 9809, GetVertexAttribivARB_remap_index }, - { 19662, ProgramEnvParameter4dARB_remap_index }, - { 25582, ProgramEnvParameter4dvARB_remap_index }, - { 17020, ProgramEnvParameter4fARB_remap_index }, - { 9009, ProgramEnvParameter4fvARB_remap_index }, - { 3947, ProgramLocalParameter4dARB_remap_index }, - { 13153, ProgramLocalParameter4dvARB_remap_index }, - { 29863, ProgramLocalParameter4fARB_remap_index }, - { 26228, ProgramLocalParameter4fvARB_remap_index }, - { 28702, ProgramStringARB_remap_index }, - { 19930, VertexAttrib1dARB_remap_index }, - { 15868, VertexAttrib1dvARB_remap_index }, - { 4143, VertexAttrib1fARB_remap_index }, - { 33295, VertexAttrib1fvARB_remap_index }, - { 7218, VertexAttrib1sARB_remap_index }, - { 2224, VertexAttrib1svARB_remap_index }, - { 15299, VertexAttrib2dARB_remap_index }, - { 17719, VertexAttrib2dvARB_remap_index }, - { 1596, VertexAttrib2fARB_remap_index }, - { 17832, VertexAttrib2fvARB_remap_index }, - { 32921, VertexAttrib2sARB_remap_index }, - { 31982, VertexAttrib2svARB_remap_index }, - { 11348, VertexAttrib3dARB_remap_index }, - { 8676, VertexAttrib3dvARB_remap_index }, - { 1683, VertexAttrib3fARB_remap_index }, - { 22851, VertexAttrib3fvARB_remap_index }, - { 28549, VertexAttrib3sARB_remap_index }, - { 20558, VertexAttrib3svARB_remap_index }, - { 4945, VertexAttrib4NbvARB_remap_index }, - { 18079, VertexAttrib4NivARB_remap_index }, - { 22806, VertexAttrib4NsvARB_remap_index }, - { 23820, VertexAttrib4NubARB_remap_index }, - { 32228, VertexAttrib4NubvARB_remap_index }, - { 19313, VertexAttrib4NuivARB_remap_index }, - { 3136, VertexAttrib4NusvARB_remap_index }, - { 10937, VertexAttrib4bvARB_remap_index }, - { 27238, VertexAttrib4dARB_remap_index }, - { 21580, VertexAttrib4dvARB_remap_index }, - { 11502, VertexAttrib4fARB_remap_index }, - { 11906, VertexAttrib4fvARB_remap_index }, - { 10313, VertexAttrib4ivARB_remap_index }, - { 17512, VertexAttrib4sARB_remap_index }, - { 31417, VertexAttrib4svARB_remap_index }, - { 16825, VertexAttrib4ubvARB_remap_index }, - { 30708, VertexAttrib4uivARB_remap_index }, - { 20369, VertexAttrib4usvARB_remap_index }, - { 22375, VertexAttribPointerARB_remap_index }, - { 33055, BindBufferARB_remap_index }, - { 6925, BufferDataARB_remap_index }, - { 1498, BufferSubDataARB_remap_index }, - { 30994, DeleteBuffersARB_remap_index }, - { 33338, GenBuffersARB_remap_index }, - { 17875, GetBufferParameterivARB_remap_index }, - { 16972, GetBufferPointervARB_remap_index }, - { 1451, GetBufferSubDataARB_remap_index }, - { 30656, IsBufferARB_remap_index }, - { 26712, MapBufferARB_remap_index }, - { 31632, UnmapBufferARB_remap_index }, + { 6124, CompressedTexImage1DARB_remap_index }, + { 24973, CompressedTexImage2DARB_remap_index }, + { 4094, CompressedTexImage3DARB_remap_index }, + { 18876, CompressedTexSubImage1DARB_remap_index }, + { 2102, CompressedTexSubImage2DARB_remap_index }, + { 21004, CompressedTexSubImage3DARB_remap_index }, + { 29405, GetCompressedTexImageARB_remap_index }, + { 3905, DisableVertexAttribArrayARB_remap_index }, + { 30841, EnableVertexAttribArrayARB_remap_index }, + { 32802, GetProgramEnvParameterdvARB_remap_index }, + { 24325, GetProgramEnvParameterfvARB_remap_index }, + { 28322, GetProgramLocalParameterdvARB_remap_index }, + { 8402, GetProgramLocalParameterfvARB_remap_index }, + { 19052, GetProgramStringARB_remap_index }, + { 28517, GetProgramivARB_remap_index }, + { 21199, GetVertexAttribdvARB_remap_index }, + { 16522, GetVertexAttribfvARB_remap_index }, + { 10077, GetVertexAttribivARB_remap_index }, + { 20045, ProgramEnvParameter4dARB_remap_index }, + { 26039, ProgramEnvParameter4dvARB_remap_index }, + { 17328, ProgramEnvParameter4fARB_remap_index }, + { 9277, ProgramEnvParameter4fvARB_remap_index }, + { 4057, ProgramLocalParameter4dARB_remap_index }, + { 13434, ProgramLocalParameter4dvARB_remap_index }, + { 30320, ProgramLocalParameter4fARB_remap_index }, + { 26685, ProgramLocalParameter4fvARB_remap_index }, + { 29159, ProgramStringARB_remap_index }, + { 20313, VertexAttrib1dARB_remap_index }, + { 16149, VertexAttrib1dvARB_remap_index }, + { 4253, VertexAttrib1fARB_remap_index }, + { 33828, VertexAttrib1fvARB_remap_index }, + { 7452, VertexAttrib1sARB_remap_index }, + { 2297, VertexAttrib1svARB_remap_index }, + { 15580, VertexAttrib2dARB_remap_index }, + { 18051, VertexAttrib2dvARB_remap_index }, + { 1648, VertexAttrib2fARB_remap_index }, + { 18164, VertexAttrib2fvARB_remap_index }, + { 33428, VertexAttrib2sARB_remap_index }, + { 32439, VertexAttrib2svARB_remap_index }, + { 11629, VertexAttrib3dARB_remap_index }, + { 8944, VertexAttrib3dvARB_remap_index }, + { 1735, VertexAttrib3fARB_remap_index }, + { 23316, VertexAttrib3fvARB_remap_index }, + { 29006, VertexAttrib3sARB_remap_index }, + { 20941, VertexAttrib3svARB_remap_index }, + { 5079, VertexAttrib4NbvARB_remap_index }, + { 18411, VertexAttrib4NivARB_remap_index }, + { 23271, VertexAttrib4NsvARB_remap_index }, + { 24277, VertexAttrib4NubARB_remap_index }, + { 32685, VertexAttrib4NubvARB_remap_index }, + { 19696, VertexAttrib4NuivARB_remap_index }, + { 3212, VertexAttrib4NusvARB_remap_index }, + { 11218, VertexAttrib4bvARB_remap_index }, + { 27695, VertexAttrib4dARB_remap_index }, + { 21998, VertexAttrib4dvARB_remap_index }, + { 11783, VertexAttrib4fARB_remap_index }, + { 12187, VertexAttrib4fvARB_remap_index }, + { 10594, VertexAttrib4ivARB_remap_index }, + { 17844, VertexAttrib4sARB_remap_index }, + { 31874, VertexAttrib4svARB_remap_index }, + { 17133, VertexAttrib4ubvARB_remap_index }, + { 31165, VertexAttrib4uivARB_remap_index }, + { 20752, VertexAttrib4usvARB_remap_index }, + { 22814, VertexAttribPointerARB_remap_index }, + { 33588, BindBufferARB_remap_index }, + { 7159, BufferDataARB_remap_index }, + { 1511, BufferSubDataARB_remap_index }, + { 31451, DeleteBuffersARB_remap_index }, + { 33871, GenBuffersARB_remap_index }, + { 18207, GetBufferParameterivARB_remap_index }, + { 17280, GetBufferPointervARB_remap_index }, + { 1464, GetBufferSubDataARB_remap_index }, + { 31113, IsBufferARB_remap_index }, + { 27169, MapBufferARB_remap_index }, + { 32089, UnmapBufferARB_remap_index }, { 312, BeginQueryARB_remap_index }, - { 20025, DeleteQueriesARB_remap_index }, - { 12225, EndQueryARB_remap_index }, - { 29427, GenQueriesARB_remap_index }, - { 1942, GetQueryObjectivARB_remap_index }, - { 17556, GetQueryObjectuivARB_remap_index }, - { 1740, GetQueryivARB_remap_index }, - { 20276, IsQueryARB_remap_index }, - { 8286, AttachObjectARB_remap_index }, - { 18850, CompileShaderARB_remap_index }, - { 3205, CreateProgramObjectARB_remap_index }, - { 6870, CreateShaderObjectARB_remap_index }, - { 14601, DeleteObjectARB_remap_index }, - { 24307, DetachObjectARB_remap_index }, - { 11970, GetActiveUniformARB_remap_index }, - { 9484, GetAttachedObjectsARB_remap_index }, - { 9791, GetHandleARB_remap_index }, - { 33088, GetInfoLogARB_remap_index }, - { 32299, GetObjectParameterfvARB_remap_index }, - { 27739, GetObjectParameterivARB_remap_index }, - { 29185, GetShaderSourceARB_remap_index }, - { 28409, GetUniformLocationARB_remap_index }, - { 24090, GetUniformfvARB_remap_index }, - { 12728, GetUniformivARB_remap_index }, - { 20414, LinkProgramARB_remap_index }, - { 20472, ShaderSourceARB_remap_index }, - { 7592, Uniform1fARB_remap_index }, - { 30072, Uniform1fvARB_remap_index }, - { 22344, Uniform1iARB_remap_index }, - { 21269, Uniform1ivARB_remap_index }, - { 2173, Uniform2fARB_remap_index }, - { 14437, Uniform2fvARB_remap_index }, - { 26599, Uniform2iARB_remap_index }, - { 2293, Uniform2ivARB_remap_index }, - { 18960, Uniform3fARB_remap_index }, - { 9514, Uniform3fvARB_remap_index }, - { 6481, Uniform3iARB_remap_index }, - { 17078, Uniform3ivARB_remap_index }, - { 19468, Uniform4fARB_remap_index }, - { 23954, Uniform4fvARB_remap_index }, - { 25216, Uniform4iARB_remap_index }, - { 20782, Uniform4ivARB_remap_index }, - { 8338, UniformMatrix2fvARB_remap_index }, + { 20408, DeleteQueriesARB_remap_index }, + { 12506, EndQueryARB_remap_index }, + { 29884, GenQueriesARB_remap_index }, + { 1994, GetQueryObjectivARB_remap_index }, + { 17888, GetQueryObjectuivARB_remap_index }, + { 1792, GetQueryivARB_remap_index }, + { 20659, IsQueryARB_remap_index }, + { 8554, AttachObjectARB_remap_index }, + { 19207, CompileShaderARB_remap_index }, + { 3281, CreateProgramObjectARB_remap_index }, + { 7104, CreateShaderObjectARB_remap_index }, + { 14882, DeleteObjectARB_remap_index }, + { 24764, DetachObjectARB_remap_index }, + { 12251, GetActiveUniformARB_remap_index }, + { 9752, GetAttachedObjectsARB_remap_index }, + { 10059, GetHandleARB_remap_index }, + { 33621, GetInfoLogARB_remap_index }, + { 32756, GetObjectParameterfvARB_remap_index }, + { 28196, GetObjectParameterivARB_remap_index }, + { 29642, GetShaderSourceARB_remap_index }, + { 28866, GetUniformLocationARB_remap_index }, + { 24547, GetUniformfvARB_remap_index }, + { 13009, GetUniformivARB_remap_index }, + { 20797, LinkProgramARB_remap_index }, + { 20855, ShaderSourceARB_remap_index }, + { 7826, Uniform1fARB_remap_index }, + { 30529, Uniform1fvARB_remap_index }, + { 22762, Uniform1iARB_remap_index }, + { 21652, Uniform1ivARB_remap_index }, + { 2246, Uniform2fARB_remap_index }, + { 14718, Uniform2fvARB_remap_index }, + { 27056, Uniform2iARB_remap_index }, + { 2366, Uniform2ivARB_remap_index }, + { 19317, Uniform3fARB_remap_index }, + { 9782, Uniform3fvARB_remap_index }, + { 6715, Uniform3iARB_remap_index }, + { 17386, Uniform3ivARB_remap_index }, + { 19851, Uniform4fARB_remap_index }, + { 24411, Uniform4fvARB_remap_index }, + { 25673, Uniform4iARB_remap_index }, + { 21165, Uniform4ivARB_remap_index }, + { 8606, UniformMatrix2fvARB_remap_index }, { 17, UniformMatrix3fvARB_remap_index }, - { 2690, UniformMatrix4fvARB_remap_index }, - { 25694, UseProgramObjectARB_remap_index }, - { 14987, ValidateProgramARB_remap_index }, - { 21623, BindAttribLocationARB_remap_index }, - { 4990, GetActiveAttribARB_remap_index }, - { 16726, GetAttribLocationARB_remap_index }, - { 29790, DrawBuffersARB_remap_index }, - { 29623, ClampColorARB_remap_index }, - { 18124, DrawArraysInstancedARB_remap_index }, - { 6542, DrawElementsInstancedARB_remap_index }, - { 13258, RenderbufferStorageMultisample_remap_index }, - { 13729, FramebufferTextureARB_remap_index }, - { 26130, FramebufferTextureFaceARB_remap_index }, - { 24456, ProgramParameteriARB_remap_index }, - { 23772, VertexAttribDivisorARB_remap_index }, - { 19516, FlushMappedBufferRange_remap_index }, - { 28176, MapBufferRange_remap_index }, - { 28083, TexBufferARB_remap_index }, - { 16544, BindVertexArray_remap_index }, - { 14810, GenVertexArrays_remap_index }, - { 30586, CopyBufferSubData_remap_index }, - { 31521, ClientWaitSync_remap_index }, - { 2609, DeleteSync_remap_index }, - { 7259, FenceSync_remap_index }, - { 15358, GetInteger64v_remap_index }, - { 22913, GetSynciv_remap_index }, - { 29729, IsSync_remap_index }, - { 9432, WaitSync_remap_index }, - { 3797, DrawElementsBaseVertex_remap_index }, - { 30898, DrawRangeElementsBaseVertex_remap_index }, - { 26743, MultiDrawElementsBaseVertex_remap_index }, - { 16792, BlendEquationSeparateiARB_remap_index }, - { 17968, BlendEquationiARB_remap_index }, - { 12697, BlendFuncSeparateiARB_remap_index }, - { 9857, BlendFunciARB_remap_index }, - { 8200, BindSampler_remap_index }, - { 4122, DeleteSamplers_remap_index }, - { 19889, GenSamplers_remap_index }, - { 29661, GetSamplerParameterIiv_remap_index }, - { 19410, GetSamplerParameterIuiv_remap_index }, - { 4839, GetSamplerParameterfv_remap_index }, - { 25851, GetSamplerParameteriv_remap_index }, - { 14355, IsSampler_remap_index }, - { 16497, SamplerParameterIiv_remap_index }, - { 30937, SamplerParameterIuiv_remap_index }, - { 22612, SamplerParameterf_remap_index }, - { 16653, SamplerParameterfv_remap_index }, - { 22587, SamplerParameteri_remap_index }, - { 18318, SamplerParameteriv_remap_index }, - { 5141, BindTransformFeedback_remap_index }, - { 3232, DeleteTransformFeedbacks_remap_index }, - { 6514, DrawTransformFeedback_remap_index }, - { 9651, GenTransformFeedbacks_remap_index }, - { 28592, IsTransformFeedback_remap_index }, - { 26323, PauseTransformFeedback_remap_index }, - { 5578, ResumeTransformFeedback_remap_index }, - { 21943, ClearDepthf_remap_index }, - { 6818, DepthRangef_remap_index }, - { 14622, GetShaderPrecisionFormat_remap_index }, - { 10037, ReleaseShaderCompiler_remap_index }, - { 10980, ShaderBinary_remap_index }, - { 5446, PolygonOffsetEXT_remap_index }, - { 23535, GetPixelTexGenParameterfvSGIS_remap_index }, - { 4438, GetPixelTexGenParameterivSGIS_remap_index }, - { 23268, PixelTexGenParameterfSGIS_remap_index }, + { 2763, UniformMatrix4fvARB_remap_index }, + { 26151, UseProgramObjectARB_remap_index }, + { 15268, ValidateProgramARB_remap_index }, + { 22041, BindAttribLocationARB_remap_index }, + { 5124, GetActiveAttribARB_remap_index }, + { 17034, GetAttribLocationARB_remap_index }, + { 30247, DrawBuffersARB_remap_index }, + { 30080, ClampColorARB_remap_index }, + { 18456, DrawArraysInstancedARB_remap_index }, + { 6776, DrawElementsInstancedARB_remap_index }, + { 13539, RenderbufferStorageMultisample_remap_index }, + { 14010, FramebufferTextureARB_remap_index }, + { 26587, FramebufferTextureFaceARB_remap_index }, + { 24913, ProgramParameteriARB_remap_index }, + { 6296, VertexAttribDivisorARB_remap_index }, + { 19899, FlushMappedBufferRange_remap_index }, + { 28633, MapBufferRange_remap_index }, + { 28540, TexBufferARB_remap_index }, + { 16852, BindVertexArray_remap_index }, + { 15091, GenVertexArrays_remap_index }, + { 31043, CopyBufferSubData_remap_index }, + { 31978, ClientWaitSync_remap_index }, + { 2682, DeleteSync_remap_index }, + { 7493, FenceSync_remap_index }, + { 15639, GetInteger64v_remap_index }, + { 23378, GetSynciv_remap_index }, + { 30186, IsSync_remap_index }, + { 9700, WaitSync_remap_index }, + { 3873, DrawElementsBaseVertex_remap_index }, + { 31355, DrawRangeElementsBaseVertex_remap_index }, + { 27200, MultiDrawElementsBaseVertex_remap_index }, + { 17100, BlendEquationSeparateiARB_remap_index }, + { 18300, BlendEquationiARB_remap_index }, + { 12978, BlendFuncSeparateiARB_remap_index }, + { 10125, BlendFunciARB_remap_index }, + { 8468, BindSampler_remap_index }, + { 4232, DeleteSamplers_remap_index }, + { 20272, GenSamplers_remap_index }, + { 30118, GetSamplerParameterIiv_remap_index }, + { 19793, GetSamplerParameterIuiv_remap_index }, + { 4973, GetSamplerParameterfv_remap_index }, + { 26308, GetSamplerParameteriv_remap_index }, + { 14636, IsSampler_remap_index }, + { 16805, SamplerParameterIiv_remap_index }, + { 31394, SamplerParameterIuiv_remap_index }, + { 23051, SamplerParameterf_remap_index }, + { 16961, SamplerParameterfv_remap_index }, + { 23026, SamplerParameteri_remap_index }, + { 18650, SamplerParameteriv_remap_index }, + { 5320, BindTransformFeedback_remap_index }, + { 3308, DeleteTransformFeedbacks_remap_index }, + { 6748, DrawTransformFeedback_remap_index }, + { 9919, GenTransformFeedbacks_remap_index }, + { 29049, IsTransformFeedback_remap_index }, + { 26780, PauseTransformFeedback_remap_index }, + { 5783, ResumeTransformFeedback_remap_index }, + { 22361, ClearDepthf_remap_index }, + { 7052, DepthRangef_remap_index }, + { 14903, GetShaderPrecisionFormat_remap_index }, + { 10291, ReleaseShaderCompiler_remap_index }, + { 11261, ShaderBinary_remap_index }, + { 965, GetGraphicsResetStatusARB_remap_index }, + { 25478, GetnColorTableARB_remap_index }, + { 8237, GetnCompressedTexImageARB_remap_index }, + { 3965, GetnConvolutionFilterARB_remap_index }, + { 16192, GetnHistogramARB_remap_index }, + { 24237, GetnMapdvARB_remap_index }, + { 22793, GetnMapfvARB_remap_index }, + { 2225, GetnMapivARB_remap_index }, + { 17648, GetnMinmaxARB_remap_index }, + { 4598, GetnPixelMapfvARB_remap_index }, + { 19670, GetnPixelMapuivARB_remap_index }, + { 3033, GetnPixelMapusvARB_remap_index }, + { 1344, GetnPolygonStippleARB_remap_index }, + { 21826, GetnSeparableFilterARB_remap_index }, + { 33470, GetnTexImageARB_remap_index }, + { 19079, GetnUniformdvARB_remap_index }, + { 4670, GetnUniformfvARB_remap_index }, + { 10146, GetnUniformivARB_remap_index }, + { 23227, GetnUniformuivARB_remap_index }, + { 2947, ReadnPixelsARB_remap_index }, + { 5651, PolygonOffsetEXT_remap_index }, + { 24000, GetPixelTexGenParameterfvSGIS_remap_index }, + { 4548, GetPixelTexGenParameterivSGIS_remap_index }, + { 23733, PixelTexGenParameterfSGIS_remap_index }, { 624, PixelTexGenParameterfvSGIS_remap_index }, - { 12766, PixelTexGenParameteriSGIS_remap_index }, - { 13903, PixelTexGenParameterivSGIS_remap_index }, - { 18443, SampleMaskSGIS_remap_index }, - { 20216, SamplePatternSGIS_remap_index }, - { 26672, ColorPointerEXT_remap_index }, - { 17762, EdgeFlagPointerEXT_remap_index }, - { 6135, IndexPointerEXT_remap_index }, - { 6215, NormalPointerEXT_remap_index }, - { 15952, TexCoordPointerEXT_remap_index }, - { 7048, VertexPointerEXT_remap_index }, - { 3599, PointParameterfEXT_remap_index }, - { 7899, PointParameterfvEXT_remap_index }, - { 32397, LockArraysEXT_remap_index }, - { 15051, UnlockArraysEXT_remap_index }, - { 1267, SecondaryColor3bEXT_remap_index }, - { 8058, SecondaryColor3bvEXT_remap_index }, - { 10490, SecondaryColor3dEXT_remap_index }, - { 25900, SecondaryColor3dvEXT_remap_index }, - { 28458, SecondaryColor3fEXT_remap_index }, - { 18480, SecondaryColor3fvEXT_remap_index }, + { 13047, PixelTexGenParameteriSGIS_remap_index }, + { 14184, PixelTexGenParameterivSGIS_remap_index }, + { 18775, SampleMaskSGIS_remap_index }, + { 20599, SamplePatternSGIS_remap_index }, + { 27129, ColorPointerEXT_remap_index }, + { 18094, EdgeFlagPointerEXT_remap_index }, + { 6369, IndexPointerEXT_remap_index }, + { 6449, NormalPointerEXT_remap_index }, + { 16260, TexCoordPointerEXT_remap_index }, + { 7282, VertexPointerEXT_remap_index }, + { 3675, PointParameterfEXT_remap_index }, + { 8133, PointParameterfvEXT_remap_index }, + { 32854, LockArraysEXT_remap_index }, + { 15332, UnlockArraysEXT_remap_index }, + { 1252, SecondaryColor3bEXT_remap_index }, + { 8326, SecondaryColor3bvEXT_remap_index }, + { 10771, SecondaryColor3dEXT_remap_index }, + { 26357, SecondaryColor3dvEXT_remap_index }, + { 28915, SecondaryColor3fEXT_remap_index }, + { 18812, SecondaryColor3fvEXT_remap_index }, { 470, SecondaryColor3iEXT_remap_index }, - { 16262, SecondaryColor3ivEXT_remap_index }, - { 10125, SecondaryColor3sEXT_remap_index }, - { 31185, SecondaryColor3svEXT_remap_index }, - { 27575, SecondaryColor3ubEXT_remap_index }, - { 21514, SecondaryColor3ubvEXT_remap_index }, - { 13008, SecondaryColor3uiEXT_remap_index }, - { 23155, SecondaryColor3uivEXT_remap_index }, - { 26180, SecondaryColor3usEXT_remap_index }, - { 13081, SecondaryColor3usvEXT_remap_index }, - { 11849, SecondaryColorPointerEXT_remap_index }, - { 25994, MultiDrawArraysEXT_remap_index }, - { 21204, MultiDrawElementsEXT_remap_index }, - { 21399, FogCoordPointerEXT_remap_index }, - { 4587, FogCoorddEXT_remap_index }, - { 31798, FogCoorddvEXT_remap_index }, - { 4704, FogCoordfEXT_remap_index }, - { 27498, FogCoordfvEXT_remap_index }, - { 11949, PixelTexGenSGIX_remap_index }, - { 28103, BlendFuncSeparateEXT_remap_index }, - { 6960, FlushVertexArrayRangeNV_remap_index }, - { 5395, VertexArrayRangeNV_remap_index }, - { 28523, CombinerInputNV_remap_index }, - { 2116, CombinerOutputNV_remap_index }, - { 31338, CombinerParameterfNV_remap_index }, - { 5269, CombinerParameterfvNV_remap_index }, - { 22637, CombinerParameteriNV_remap_index }, - { 32813, CombinerParameterivNV_remap_index }, - { 7336, FinalCombinerInputNV_remap_index }, - { 9878, GetCombinerInputParameterfvNV_remap_index }, - { 32650, GetCombinerInputParameterivNV_remap_index }, - { 14004, GetCombinerOutputParameterfvNV_remap_index }, - { 13832, GetCombinerOutputParameterivNV_remap_index }, - { 6722, GetFinalCombinerInputParameterfvNV_remap_index }, - { 25088, GetFinalCombinerInputParameterivNV_remap_index }, - { 12675, ResizeBuffersMESA_remap_index }, - { 11175, WindowPos2dMESA_remap_index }, - { 1060, WindowPos2dvMESA_remap_index }, - { 33641, WindowPos2fMESA_remap_index }, - { 8003, WindowPos2fvMESA_remap_index }, - { 18390, WindowPos2iMESA_remap_index }, - { 20689, WindowPos2ivMESA_remap_index }, - { 21303, WindowPos2sMESA_remap_index }, - { 5833, WindowPos2svMESA_remap_index }, - { 7828, WindowPos3dMESA_remap_index }, - { 14150, WindowPos3dvMESA_remap_index }, + { 16570, SecondaryColor3ivEXT_remap_index }, + { 10379, SecondaryColor3sEXT_remap_index }, + { 31642, SecondaryColor3svEXT_remap_index }, + { 28032, SecondaryColor3ubEXT_remap_index }, + { 21932, SecondaryColor3ubvEXT_remap_index }, + { 13289, SecondaryColor3uiEXT_remap_index }, + { 23620, SecondaryColor3uivEXT_remap_index }, + { 26637, SecondaryColor3usEXT_remap_index }, + { 13362, SecondaryColor3usvEXT_remap_index }, + { 12130, SecondaryColorPointerEXT_remap_index }, + { 26451, MultiDrawArraysEXT_remap_index }, + { 21587, MultiDrawElementsEXT_remap_index }, + { 21782, FogCoordPointerEXT_remap_index }, + { 4721, FogCoorddEXT_remap_index }, + { 32255, FogCoorddvEXT_remap_index }, + { 4838, FogCoordfEXT_remap_index }, + { 27955, FogCoordfvEXT_remap_index }, + { 12230, PixelTexGenSGIX_remap_index }, + { 28560, BlendFuncSeparateEXT_remap_index }, + { 7194, FlushVertexArrayRangeNV_remap_index }, + { 5600, VertexArrayRangeNV_remap_index }, + { 28980, CombinerInputNV_remap_index }, + { 2168, CombinerOutputNV_remap_index }, + { 31795, CombinerParameterfNV_remap_index }, + { 5474, CombinerParameterfvNV_remap_index }, + { 23076, CombinerParameteriNV_remap_index }, + { 33270, CombinerParameterivNV_remap_index }, + { 7570, FinalCombinerInputNV_remap_index }, + { 1609, GetCombinerInputParameterfvNV_remap_index }, + { 33107, GetCombinerInputParameterivNV_remap_index }, + { 14285, GetCombinerOutputParameterfvNV_remap_index }, + { 14113, GetCombinerOutputParameterivNV_remap_index }, + { 6956, GetFinalCombinerInputParameterfvNV_remap_index }, + { 25545, GetFinalCombinerInputParameterivNV_remap_index }, + { 12956, ResizeBuffersMESA_remap_index }, + { 11456, WindowPos2dMESA_remap_index }, + { 1045, WindowPos2dvMESA_remap_index }, + { 34174, WindowPos2fMESA_remap_index }, + { 8271, WindowPos2fvMESA_remap_index }, + { 18722, WindowPos2iMESA_remap_index }, + { 21072, WindowPos2ivMESA_remap_index }, + { 21686, WindowPos2sMESA_remap_index }, + { 6038, WindowPos2svMESA_remap_index }, + { 8062, WindowPos3dMESA_remap_index }, + { 14431, WindowPos3dvMESA_remap_index }, { 516, WindowPos3fMESA_remap_index }, - { 15112, WindowPos3fvMESA_remap_index }, - { 24349, WindowPos3iMESA_remap_index }, - { 30531, WindowPos3ivMESA_remap_index }, - { 19105, WindowPos3sMESA_remap_index }, - { 32054, WindowPos3svMESA_remap_index }, - { 11126, WindowPos4dMESA_remap_index }, - { 17216, WindowPos4dvMESA_remap_index }, - { 14109, WindowPos4fMESA_remap_index }, - { 31092, WindowPos4fvMESA_remap_index }, - { 30684, WindowPos4iMESA_remap_index }, - { 12478, WindowPos4ivMESA_remap_index }, - { 19289, WindowPos4sMESA_remap_index }, - { 3183, WindowPos4svMESA_remap_index }, - { 13871, MultiModeDrawArraysIBM_remap_index }, - { 29298, MultiModeDrawElementsIBM_remap_index }, - { 12253, DeleteFencesNV_remap_index }, - { 28370, FinishFenceNV_remap_index }, - { 3721, GenFencesNV_remap_index }, - { 17196, GetFenceivNV_remap_index }, - { 8271, IsFenceNV_remap_index }, - { 13759, SetFenceNV_remap_index }, - { 4199, TestFenceNV_remap_index }, - { 32025, AreProgramsResidentNV_remap_index }, - { 31380, BindProgramNV_remap_index }, - { 26263, DeleteProgramsNV_remap_index }, - { 21732, ExecuteProgramNV_remap_index }, - { 33534, GenProgramsNV_remap_index }, - { 23640, GetProgramParameterdvNV_remap_index }, - { 10552, GetProgramParameterfvNV_remap_index }, - { 26646, GetProgramStringNV_remap_index }, - { 24726, GetProgramivNV_remap_index }, - { 23903, GetTrackMatrixivNV_remap_index }, - { 26440, GetVertexAttribPointervNV_remap_index }, - { 25021, GetVertexAttribdvNV_remap_index }, - { 9327, GetVertexAttribfvNV_remap_index }, - { 18693, GetVertexAttribivNV_remap_index }, - { 19546, IsProgramNV_remap_index }, - { 9410, LoadProgramNV_remap_index }, - { 28199, ProgramParameters4dvNV_remap_index }, - { 24656, ProgramParameters4fvNV_remap_index }, - { 20993, RequestResidentProgramsNV_remap_index }, - { 30876, TrackMatrixNV_remap_index }, - { 32627, VertexAttrib1dNV_remap_index }, - { 13670, VertexAttrib1dvNV_remap_index }, - { 28804, VertexAttrib1fNV_remap_index }, - { 2415, VertexAttrib1fvNV_remap_index }, - { 31149, VertexAttrib1sNV_remap_index }, - { 15185, VertexAttrib1svNV_remap_index }, - { 4895, VertexAttrib2dNV_remap_index }, - { 13563, VertexAttrib2dvNV_remap_index }, - { 20448, VertexAttrib2fNV_remap_index }, - { 13129, VertexAttrib2fvNV_remap_index }, - { 6045, VertexAttrib2sNV_remap_index }, - { 19159, VertexAttrib2svNV_remap_index }, - { 11323, VertexAttrib3dNV_remap_index }, - { 32275, VertexAttrib3dvNV_remap_index }, - { 10364, VertexAttrib3fNV_remap_index }, - { 25048, VertexAttrib3fvNV_remap_index }, - { 22430, VertexAttrib3sNV_remap_index }, - { 23930, VertexAttrib3svNV_remap_index }, - { 29272, VertexAttrib4dNV_remap_index }, - { 33571, VertexAttrib4dvNV_remap_index }, - { 4488, VertexAttrib4fNV_remap_index }, - { 9460, VertexAttrib4fvNV_remap_index }, - { 27122, VertexAttrib4sNV_remap_index }, - { 1409, VertexAttrib4svNV_remap_index }, - { 5053, VertexAttrib4ubNV_remap_index }, + { 15393, WindowPos3fvMESA_remap_index }, + { 24806, WindowPos3iMESA_remap_index }, + { 30988, WindowPos3ivMESA_remap_index }, + { 19462, WindowPos3sMESA_remap_index }, + { 32511, WindowPos3svMESA_remap_index }, + { 11407, WindowPos4dMESA_remap_index }, + { 17524, WindowPos4dvMESA_remap_index }, + { 14390, WindowPos4fMESA_remap_index }, + { 31549, WindowPos4fvMESA_remap_index }, + { 31141, WindowPos4iMESA_remap_index }, + { 12759, WindowPos4ivMESA_remap_index }, + { 19646, WindowPos4sMESA_remap_index }, + { 3259, WindowPos4svMESA_remap_index }, + { 14152, MultiModeDrawArraysIBM_remap_index }, + { 29755, MultiModeDrawElementsIBM_remap_index }, + { 12534, DeleteFencesNV_remap_index }, + { 28827, FinishFenceNV_remap_index }, + { 3797, GenFencesNV_remap_index }, + { 17504, GetFenceivNV_remap_index }, + { 8539, IsFenceNV_remap_index }, + { 14040, SetFenceNV_remap_index }, + { 4309, TestFenceNV_remap_index }, + { 32482, AreProgramsResidentNV_remap_index }, + { 31837, BindProgramNV_remap_index }, + { 26720, DeleteProgramsNV_remap_index }, + { 22150, ExecuteProgramNV_remap_index }, + { 34067, GenProgramsNV_remap_index }, + { 24105, GetProgramParameterdvNV_remap_index }, + { 10833, GetProgramParameterfvNV_remap_index }, + { 27103, GetProgramStringNV_remap_index }, + { 25183, GetProgramivNV_remap_index }, + { 24360, GetTrackMatrixivNV_remap_index }, + { 26897, GetVertexAttribPointervNV_remap_index }, + { 10474, GetVertexAttribdvNV_remap_index }, + { 9595, GetVertexAttribfvNV_remap_index }, + { 19025, GetVertexAttribivNV_remap_index }, + { 19929, IsProgramNV_remap_index }, + { 9678, LoadProgramNV_remap_index }, + { 28656, ProgramParameters4dvNV_remap_index }, + { 25113, ProgramParameters4fvNV_remap_index }, + { 21376, RequestResidentProgramsNV_remap_index }, + { 31333, TrackMatrixNV_remap_index }, + { 33084, VertexAttrib1dNV_remap_index }, + { 13951, VertexAttrib1dvNV_remap_index }, + { 29261, VertexAttrib1fNV_remap_index }, + { 2488, VertexAttrib1fvNV_remap_index }, + { 31606, VertexAttrib1sNV_remap_index }, + { 15466, VertexAttrib1svNV_remap_index }, + { 5029, VertexAttrib2dNV_remap_index }, + { 13844, VertexAttrib2dvNV_remap_index }, + { 20831, VertexAttrib2fNV_remap_index }, + { 13410, VertexAttrib2fvNV_remap_index }, + { 6250, VertexAttrib2sNV_remap_index }, + { 19516, VertexAttrib2svNV_remap_index }, + { 11604, VertexAttrib3dNV_remap_index }, + { 32732, VertexAttrib3dvNV_remap_index }, + { 10645, VertexAttrib3fNV_remap_index }, + { 25505, VertexAttrib3fvNV_remap_index }, + { 22869, VertexAttrib3sNV_remap_index }, + { 24387, VertexAttrib3svNV_remap_index }, + { 29729, VertexAttrib4dNV_remap_index }, + { 34104, VertexAttrib4dvNV_remap_index }, + { 5414, VertexAttrib4fNV_remap_index }, + { 9728, VertexAttrib4fvNV_remap_index }, + { 27579, VertexAttrib4sNV_remap_index }, + { 1422, VertexAttrib4svNV_remap_index }, + { 5187, VertexAttrib4ubNV_remap_index }, { 778, VertexAttrib4ubvNV_remap_index }, - { 21912, VertexAttribPointerNV_remap_index }, - { 2267, VertexAttribs1dvNV_remap_index }, - { 26528, VertexAttribs1fvNV_remap_index }, - { 33371, VertexAttribs1svNV_remap_index }, - { 10389, VertexAttribs2dvNV_remap_index }, - { 25655, VertexAttribs2fvNV_remap_index }, - { 17788, VertexAttribs2svNV_remap_index }, - { 5297, VertexAttribs3dvNV_remap_index }, - { 2147, VertexAttribs3fvNV_remap_index }, - { 30279, VertexAttribs3svNV_remap_index }, - { 27212, VertexAttribs4dvNV_remap_index }, - { 5369, VertexAttribs4fvNV_remap_index }, - { 33158, VertexAttribs4svNV_remap_index }, - { 30027, VertexAttribs4ubvNV_remap_index }, - { 27282, GetTexBumpParameterfvATI_remap_index }, - { 33412, GetTexBumpParameterivATI_remap_index }, - { 18803, TexBumpParameterfvATI_remap_index }, - { 20864, TexBumpParameterivATI_remap_index }, - { 15731, AlphaFragmentOp1ATI_remap_index }, - { 25946, AlphaFragmentOp2ATI_remap_index }, - { 24964, AlphaFragmentOp3ATI_remap_index }, - { 30206, BeginFragmentShaderATI_remap_index }, - { 31579, BindFragmentShaderATI_remap_index }, - { 24059, ColorFragmentOp1ATI_remap_index }, - { 4366, ColorFragmentOp2ATI_remap_index }, - { 31920, ColorFragmentOp3ATI_remap_index }, - { 5535, DeleteFragmentShaderATI_remap_index }, - { 33595, EndFragmentShaderATI_remap_index }, - { 32841, GenFragmentShadersATI_remap_index }, - { 25809, PassTexCoordATI_remap_index }, - { 7028, SampleMapATI_remap_index }, - { 27393, SetFragmentShaderConstantATI_remap_index }, + { 22330, VertexAttribPointerNV_remap_index }, + { 2340, VertexAttribs1dvNV_remap_index }, + { 26985, VertexAttribs1fvNV_remap_index }, + { 33904, VertexAttribs1svNV_remap_index }, + { 10670, VertexAttribs2dvNV_remap_index }, + { 26112, VertexAttribs2fvNV_remap_index }, + { 18120, VertexAttribs2svNV_remap_index }, + { 5502, VertexAttribs3dvNV_remap_index }, + { 2199, VertexAttribs3fvNV_remap_index }, + { 30736, VertexAttribs3svNV_remap_index }, + { 27669, VertexAttribs4dvNV_remap_index }, + { 5574, VertexAttribs4fvNV_remap_index }, + { 33691, VertexAttribs4svNV_remap_index }, + { 30484, VertexAttribs4ubvNV_remap_index }, + { 27739, GetTexBumpParameterfvATI_remap_index }, + { 33945, GetTexBumpParameterivATI_remap_index }, + { 19160, TexBumpParameterfvATI_remap_index }, + { 21247, TexBumpParameterivATI_remap_index }, + { 16012, AlphaFragmentOp1ATI_remap_index }, + { 26403, AlphaFragmentOp2ATI_remap_index }, + { 25421, AlphaFragmentOp3ATI_remap_index }, + { 30663, BeginFragmentShaderATI_remap_index }, + { 32036, BindFragmentShaderATI_remap_index }, + { 24516, ColorFragmentOp1ATI_remap_index }, + { 4476, ColorFragmentOp2ATI_remap_index }, + { 32377, ColorFragmentOp3ATI_remap_index }, + { 5740, DeleteFragmentShaderATI_remap_index }, + { 34128, EndFragmentShaderATI_remap_index }, + { 33298, GenFragmentShadersATI_remap_index }, + { 26266, PassTexCoordATI_remap_index }, + { 7262, SampleMapATI_remap_index }, + { 27850, SetFragmentShaderConstantATI_remap_index }, { 363, PointParameteriNV_remap_index }, - { 14311, PointParameterivNV_remap_index }, - { 29111, ActiveStencilFaceEXT_remap_index }, - { 27839, BindVertexArrayAPPLE_remap_index }, - { 2737, DeleteVertexArraysAPPLE_remap_index }, - { 18229, GenVertexArraysAPPLE_remap_index }, - { 23705, IsVertexArrayAPPLE_remap_index }, + { 14592, PointParameterivNV_remap_index }, + { 29568, ActiveStencilFaceEXT_remap_index }, + { 28296, BindVertexArrayAPPLE_remap_index }, + { 2810, DeleteVertexArraysAPPLE_remap_index }, + { 18561, GenVertexArraysAPPLE_remap_index }, + { 24170, IsVertexArrayAPPLE_remap_index }, { 819, GetProgramNamedParameterdvNV_remap_index }, - { 3562, GetProgramNamedParameterfvNV_remap_index }, - { 27313, ProgramNamedParameter4dNV_remap_index }, - { 14685, ProgramNamedParameter4dvNV_remap_index }, - { 8943, ProgramNamedParameter4fNV_remap_index }, - { 11814, ProgramNamedParameter4fvNV_remap_index }, - { 17127, PrimitiveRestartIndexNV_remap_index }, - { 31069, PrimitiveRestartNV_remap_index }, - { 24635, DepthBoundsEXT_remap_index }, - { 1159, BlendEquationSeparateEXT_remap_index }, - { 14886, BindFramebufferEXT_remap_index }, - { 26039, BindRenderbufferEXT_remap_index }, - { 9707, CheckFramebufferStatusEXT_remap_index }, - { 22956, DeleteFramebuffersEXT_remap_index }, - { 32177, DeleteRenderbuffersEXT_remap_index }, - { 13587, FramebufferRenderbufferEXT_remap_index }, - { 13776, FramebufferTexture1DEXT_remap_index }, - { 11608, FramebufferTexture2DEXT_remap_index }, - { 11228, FramebufferTexture3DEXT_remap_index }, - { 23571, GenFramebuffersEXT_remap_index }, - { 17653, GenRenderbuffersEXT_remap_index }, - { 6764, GenerateMipmapEXT_remap_index }, - { 22005, GetFramebufferAttachmentParameterivEXT_remap_index }, - { 32747, GetRenderbufferParameterivEXT_remap_index }, - { 20744, IsFramebufferEXT_remap_index }, - { 33494, IsRenderbufferEXT_remap_index }, - { 8218, RenderbufferStorageEXT_remap_index }, + { 3638, GetProgramNamedParameterfvNV_remap_index }, + { 27770, ProgramNamedParameter4dNV_remap_index }, + { 14966, ProgramNamedParameter4dvNV_remap_index }, + { 9211, ProgramNamedParameter4fNV_remap_index }, + { 12095, ProgramNamedParameter4fvNV_remap_index }, + { 17435, PrimitiveRestartIndexNV_remap_index }, + { 31526, PrimitiveRestartNV_remap_index }, + { 25092, DepthBoundsEXT_remap_index }, + { 1144, BlendEquationSeparateEXT_remap_index }, + { 15167, BindFramebufferEXT_remap_index }, + { 26496, BindRenderbufferEXT_remap_index }, + { 9975, CheckFramebufferStatusEXT_remap_index }, + { 23421, DeleteFramebuffersEXT_remap_index }, + { 32634, DeleteRenderbuffersEXT_remap_index }, + { 13868, FramebufferRenderbufferEXT_remap_index }, + { 14057, FramebufferTexture1DEXT_remap_index }, + { 11889, FramebufferTexture2DEXT_remap_index }, + { 11509, FramebufferTexture3DEXT_remap_index }, + { 24036, GenFramebuffersEXT_remap_index }, + { 17985, GenRenderbuffersEXT_remap_index }, + { 6998, GenerateMipmapEXT_remap_index }, + { 22423, GetFramebufferAttachmentParameterivEXT_remap_index }, + { 33204, GetRenderbufferParameterivEXT_remap_index }, + { 21127, IsFramebufferEXT_remap_index }, + { 34027, IsRenderbufferEXT_remap_index }, + { 8486, RenderbufferStorageEXT_remap_index }, { 695, BlitFramebufferEXT_remap_index }, - { 14471, BufferParameteriAPPLE_remap_index }, - { 19578, FlushMappedBufferRangeAPPLE_remap_index }, - { 1815, BindFragDataLocationEXT_remap_index }, - { 24748, GetFragDataLocationEXT_remap_index }, - { 10667, GetUniformuivEXT_remap_index }, - { 2933, GetVertexAttribIivEXT_remap_index }, - { 4216, GetVertexAttribIuivEXT_remap_index }, - { 12086, Uniform1uiEXT_remap_index }, - { 28284, Uniform1uivEXT_remap_index }, - { 22526, Uniform2uiEXT_remap_index }, - { 4330, Uniform2uivEXT_remap_index }, - { 29551, Uniform3uiEXT_remap_index }, - { 14832, Uniform3uivEXT_remap_index }, - { 3486, Uniform4uiEXT_remap_index }, - { 8719, Uniform4uivEXT_remap_index }, - { 18608, VertexAttribI1iEXT_remap_index }, - { 965, VertexAttribI1ivEXT_remap_index }, - { 2516, VertexAttribI1uiEXT_remap_index }, - { 12857, VertexAttribI1uivEXT_remap_index }, + { 14752, BufferParameteriAPPLE_remap_index }, + { 19961, FlushMappedBufferRangeAPPLE_remap_index }, + { 1867, BindFragDataLocationEXT_remap_index }, + { 25205, GetFragDataLocationEXT_remap_index }, + { 10948, GetUniformuivEXT_remap_index }, + { 33378, GetVertexAttribIivEXT_remap_index }, + { 4326, GetVertexAttribIuivEXT_remap_index }, + { 12367, Uniform1uiEXT_remap_index }, + { 28741, Uniform1uivEXT_remap_index }, + { 22965, Uniform2uiEXT_remap_index }, + { 4440, Uniform2uivEXT_remap_index }, + { 30008, Uniform3uiEXT_remap_index }, + { 15113, Uniform3uivEXT_remap_index }, + { 3562, Uniform4uiEXT_remap_index }, + { 8987, Uniform4uivEXT_remap_index }, + { 18940, VertexAttribI1iEXT_remap_index }, + { 5214, VertexAttribI1ivEXT_remap_index }, + { 2589, VertexAttribI1uiEXT_remap_index }, + { 13138, VertexAttribI1uivEXT_remap_index }, { 81, VertexAttribI2iEXT_remap_index }, - { 24171, VertexAttribI2ivEXT_remap_index }, - { 5323, VertexAttribI2uiEXT_remap_index }, - { 4749, VertexAttribI2uivEXT_remap_index }, - { 26914, VertexAttribI3iEXT_remap_index }, - { 25373, VertexAttribI3ivEXT_remap_index }, - { 3340, VertexAttribI3uiEXT_remap_index }, - { 30772, VertexAttribI3uivEXT_remap_index }, - { 22256, VertexAttribI4bvEXT_remap_index }, - { 14764, VertexAttribI4iEXT_remap_index }, - { 32446, VertexAttribI4ivEXT_remap_index }, - { 13490, VertexAttribI4svEXT_remap_index }, - { 16679, VertexAttribI4ubvEXT_remap_index }, - { 16325, VertexAttribI4uiEXT_remap_index }, - { 5469, VertexAttribI4uivEXT_remap_index }, - { 11391, VertexAttribI4usvEXT_remap_index }, - { 18747, VertexAttribIPointerEXT_remap_index }, - { 3027, FramebufferTextureLayerEXT_remap_index }, - { 5745, ColorMaskIndexedEXT_remap_index }, - { 19183, DisableIndexedEXT_remap_index }, - { 26959, EnableIndexedEXT_remap_index }, - { 21960, GetBooleanIndexedvEXT_remap_index }, - { 11002, GetIntegerIndexedvEXT_remap_index }, - { 23032, IsEnabledIndexedEXT_remap_index }, - { 22932, ClearColorIiEXT_remap_index }, - { 3436, ClearColorIuiEXT_remap_index }, - { 9917, GetTexParameterIivEXT_remap_index }, - { 5993, GetTexParameterIuivEXT_remap_index }, - { 2983, TexParameterIivEXT_remap_index }, - { 26781, TexParameterIuivEXT_remap_index }, - { 4617, BeginConditionalRenderNV_remap_index }, - { 25759, EndConditionalRenderNV_remap_index }, - { 9354, BeginTransformFeedbackEXT_remap_index }, - { 19218, BindBufferBaseEXT_remap_index }, - { 19077, BindBufferOffsetEXT_remap_index }, - { 12303, BindBufferRangeEXT_remap_index }, - { 14386, EndTransformFeedbackEXT_remap_index }, - { 10865, GetTransformFeedbackVaryingEXT_remap_index }, - { 21049, TransformFeedbackVaryingsEXT_remap_index }, - { 29928, ProvokingVertexEXT_remap_index }, - { 10813, GetTexParameterPointervAPPLE_remap_index }, - { 5097, TextureRangeAPPLE_remap_index }, - { 11680, GetObjectParameterivAPPLE_remap_index }, - { 20171, ObjectPurgeableAPPLE_remap_index }, - { 5787, ObjectUnpurgeableAPPLE_remap_index }, - { 17475, ActiveProgramEXT_remap_index }, - { 17446, CreateShaderProgramEXT_remap_index }, - { 28896, UseShaderProgramEXT_remap_index }, - { 16632, TextureBarrierNV_remap_index }, - { 29137, StencilFuncSeparateATI_remap_index }, - { 5658, ProgramEnvParameters4fvEXT_remap_index }, - { 17340, ProgramLocalParameters4fvEXT_remap_index }, - { 14239, GetQueryObjecti64vEXT_remap_index }, - { 10415, GetQueryObjectui64vEXT_remap_index }, - { 24128, EGLImageTargetRenderbufferStorageOES_remap_index }, - { 12192, EGLImageTargetTexture2DOES_remap_index }, + { 24628, VertexAttribI2ivEXT_remap_index }, + { 5528, VertexAttribI2uiEXT_remap_index }, + { 4883, VertexAttribI2uivEXT_remap_index }, + { 27371, VertexAttribI3iEXT_remap_index }, + { 25830, VertexAttribI3ivEXT_remap_index }, + { 3416, VertexAttribI3uiEXT_remap_index }, + { 31229, VertexAttribI3uivEXT_remap_index }, + { 22674, VertexAttribI4bvEXT_remap_index }, + { 15045, VertexAttribI4iEXT_remap_index }, + { 32903, VertexAttribI4ivEXT_remap_index }, + { 13771, VertexAttribI4svEXT_remap_index }, + { 16987, VertexAttribI4ubvEXT_remap_index }, + { 16633, VertexAttribI4uiEXT_remap_index }, + { 5674, VertexAttribI4uivEXT_remap_index }, + { 11672, VertexAttribI4usvEXT_remap_index }, + { 19104, VertexAttribIPointerEXT_remap_index }, + { 3103, FramebufferTextureLayerEXT_remap_index }, + { 5950, ColorMaskIndexedEXT_remap_index }, + { 19540, DisableIndexedEXT_remap_index }, + { 27416, EnableIndexedEXT_remap_index }, + { 22378, GetBooleanIndexedvEXT_remap_index }, + { 11283, GetIntegerIndexedvEXT_remap_index }, + { 23497, IsEnabledIndexedEXT_remap_index }, + { 23397, ClearColorIiEXT_remap_index }, + { 3512, ClearColorIuiEXT_remap_index }, + { 10171, GetTexParameterIivEXT_remap_index }, + { 6198, GetTexParameterIuivEXT_remap_index }, + { 3059, TexParameterIivEXT_remap_index }, + { 27238, TexParameterIuivEXT_remap_index }, + { 4751, BeginConditionalRenderNV_remap_index }, + { 26216, EndConditionalRenderNV_remap_index }, + { 9622, BeginTransformFeedbackEXT_remap_index }, + { 19575, BindBufferBaseEXT_remap_index }, + { 19434, BindBufferOffsetEXT_remap_index }, + { 12584, BindBufferRangeEXT_remap_index }, + { 14667, EndTransformFeedbackEXT_remap_index }, + { 11146, GetTransformFeedbackVaryingEXT_remap_index }, + { 21432, TransformFeedbackVaryingsEXT_remap_index }, + { 30385, ProvokingVertexEXT_remap_index }, + { 11094, GetTexParameterPointervAPPLE_remap_index }, + { 5276, TextureRangeAPPLE_remap_index }, + { 11961, GetObjectParameterivAPPLE_remap_index }, + { 20554, ObjectPurgeableAPPLE_remap_index }, + { 5992, ObjectUnpurgeableAPPLE_remap_index }, + { 17807, ActiveProgramEXT_remap_index }, + { 17778, CreateShaderProgramEXT_remap_index }, + { 29353, UseShaderProgramEXT_remap_index }, + { 16940, TextureBarrierNV_remap_index }, + { 29594, StencilFuncSeparateATI_remap_index }, + { 5863, ProgramEnvParameters4fvEXT_remap_index }, + { 17672, ProgramLocalParameters4fvEXT_remap_index }, + { 14520, GetQueryObjecti64vEXT_remap_index }, + { 10696, GetQueryObjectui64vEXT_remap_index }, + { 24585, EGLImageTargetRenderbufferStorageOES_remap_index }, + { 12473, EGLImageTargetTexture2DOES_remap_index }, { -1, -1 } }; /* these functions are in the ABI, but have alternative names */ static const struct gl_function_remap MESA_alt_functions[] = { /* from GL_EXT_blend_color */ - { 2655, _gloffset_BlendColor }, + { 2728, _gloffset_BlendColor }, /* from GL_EXT_blend_minmax */ - { 11285, _gloffset_BlendEquation }, + { 11566, _gloffset_BlendEquation }, /* from GL_EXT_color_subtable */ - { 17238, _gloffset_ColorSubTable }, - { 32109, _gloffset_CopyColorSubTable }, + { 17546, _gloffset_ColorSubTable }, + { 32566, _gloffset_CopyColorSubTable }, /* from GL_EXT_convolution */ { 257, _gloffset_ConvolutionFilter1D }, - { 2454, _gloffset_CopyConvolutionFilter1D }, - { 4058, _gloffset_GetConvolutionParameteriv }, - { 8567, _gloffset_ConvolutionFilter2D }, - { 8769, _gloffset_ConvolutionParameteriv }, - { 9229, _gloffset_ConvolutionParameterfv }, - { 20892, _gloffset_GetSeparableFilter }, - { 24403, _gloffset_SeparableFilter2D }, - { 25266, _gloffset_ConvolutionParameteri }, - { 25434, _gloffset_ConvolutionParameterf }, - { 27148, _gloffset_GetConvolutionParameterfv }, - { 28005, _gloffset_GetConvolutionFilter }, - { 30468, _gloffset_CopyConvolutionFilter2D }, + { 2527, _gloffset_CopyConvolutionFilter1D }, + { 4168, _gloffset_GetConvolutionParameteriv }, + { 8835, _gloffset_ConvolutionFilter2D }, + { 9037, _gloffset_ConvolutionParameteriv }, + { 9497, _gloffset_ConvolutionParameterfv }, + { 21275, _gloffset_GetSeparableFilter }, + { 24860, _gloffset_SeparableFilter2D }, + { 25723, _gloffset_ConvolutionParameteri }, + { 25891, _gloffset_ConvolutionParameterf }, + { 27605, _gloffset_GetConvolutionParameterfv }, + { 28462, _gloffset_GetConvolutionFilter }, + { 30925, _gloffset_CopyConvolutionFilter2D }, /* from GL_EXT_copy_texture */ - { 15245, _gloffset_CopyTexSubImage3D }, - { 16925, _gloffset_CopyTexImage2D }, - { 24874, _gloffset_CopyTexImage1D }, - { 27686, _gloffset_CopyTexSubImage2D }, - { 30106, _gloffset_CopyTexSubImage1D }, + { 15526, _gloffset_CopyTexSubImage3D }, + { 17233, _gloffset_CopyTexImage2D }, + { 25331, _gloffset_CopyTexImage1D }, + { 28143, _gloffset_CopyTexSubImage2D }, + { 30563, _gloffset_CopyTexSubImage1D }, /* from GL_EXT_draw_range_elements */ - { 9566, _gloffset_DrawRangeElements }, + { 9834, _gloffset_DrawRangeElements }, /* from GL_EXT_histogram */ { 856, _gloffset_Histogram }, - { 3522, _gloffset_ResetHistogram }, - { 10063, _gloffset_GetMinmax }, - { 15579, _gloffset_GetHistogramParameterfv }, - { 24799, _gloffset_GetMinmaxParameteriv }, - { 27038, _gloffset_ResetMinmax }, - { 27902, _gloffset_GetHistogramParameteriv }, - { 29071, _gloffset_GetHistogram }, - { 31695, _gloffset_Minmax }, - { 33241, _gloffset_GetMinmaxParameterfv }, + { 3598, _gloffset_ResetHistogram }, + { 10317, _gloffset_GetMinmax }, + { 15860, _gloffset_GetHistogramParameterfv }, + { 25256, _gloffset_GetMinmaxParameteriv }, + { 27495, _gloffset_ResetMinmax }, + { 28359, _gloffset_GetHistogramParameteriv }, + { 29528, _gloffset_GetHistogram }, + { 32152, _gloffset_Minmax }, + { 33774, _gloffset_GetMinmaxParameterfv }, /* from GL_EXT_paletted_texture */ - { 8429, _gloffset_ColorTable }, - { 15425, _gloffset_GetColorTable }, - { 23318, _gloffset_GetColorTableParameterfv }, - { 25490, _gloffset_GetColorTableParameteriv }, + { 8697, _gloffset_ColorTable }, + { 15706, _gloffset_GetColorTable }, + { 23783, _gloffset_GetColorTableParameterfv }, + { 25947, _gloffset_GetColorTableParameteriv }, /* from GL_EXT_subtexture */ - { 7174, _gloffset_TexSubImage1D }, - { 10740, _gloffset_TexSubImage2D }, + { 7408, _gloffset_TexSubImage1D }, + { 11021, _gloffset_TexSubImage2D }, /* from GL_EXT_texture3D */ - { 1774, _gloffset_TexImage3D }, - { 23087, _gloffset_TexSubImage3D }, + { 1826, _gloffset_TexImage3D }, + { 23552, _gloffset_TexSubImage3D }, /* from GL_EXT_texture_object */ - { 3290, _gloffset_PrioritizeTextures }, - { 7623, _gloffset_AreTexturesResident }, - { 13694, _gloffset_GenTextures }, - { 15911, _gloffset_DeleteTextures }, - { 19859, _gloffset_IsTexture }, - { 30171, _gloffset_BindTexture }, + { 3366, _gloffset_PrioritizeTextures }, + { 7857, _gloffset_AreTexturesResident }, + { 13975, _gloffset_GenTextures }, + { 16219, _gloffset_DeleteTextures }, + { 20242, _gloffset_IsTexture }, + { 30628, _gloffset_BindTexture }, /* from GL_EXT_vertex_array */ - { 24575, _gloffset_ArrayElement }, - { 31283, _gloffset_GetPointerv }, - { 32868, _gloffset_DrawArrays }, + { 25032, _gloffset_ArrayElement }, + { 31740, _gloffset_GetPointerv }, + { 33325, _gloffset_DrawArrays }, /* from GL_SGI_color_table */ - { 7741, _gloffset_ColorTableParameteriv }, - { 8429, _gloffset_ColorTable }, - { 15425, _gloffset_GetColorTable }, - { 15535, _gloffset_CopyColorTable }, - { 19720, _gloffset_ColorTableParameterfv }, - { 23318, _gloffset_GetColorTableParameterfv }, - { 25490, _gloffset_GetColorTableParameteriv }, + { 7975, _gloffset_ColorTableParameteriv }, + { 8697, _gloffset_ColorTable }, + { 15706, _gloffset_GetColorTable }, + { 15816, _gloffset_CopyColorTable }, + { 20103, _gloffset_ColorTableParameterfv }, + { 23783, _gloffset_GetColorTableParameterfv }, + { 25947, _gloffset_GetColorTableParameteriv }, /* from GL_VERSION_1_3 */ { 425, _gloffset_MultiTexCoord3sARB }, { 657, _gloffset_ActiveTextureARB }, - { 4268, _gloffset_MultiTexCoord1fvARB }, - { 6240, _gloffset_MultiTexCoord3dARB }, - { 6285, _gloffset_MultiTexCoord2iARB }, - { 6409, _gloffset_MultiTexCoord2svARB }, - { 8385, _gloffset_MultiTexCoord2fARB }, - { 10445, _gloffset_MultiTexCoord3fvARB }, - { 11047, _gloffset_MultiTexCoord4sARB }, - { 11728, _gloffset_MultiTexCoord2dvARB }, - { 12135, _gloffset_MultiTexCoord1svARB }, - { 12536, _gloffset_MultiTexCoord3svARB }, - { 12597, _gloffset_MultiTexCoord4iARB }, - { 13398, _gloffset_MultiTexCoord3iARB }, - { 14268, _gloffset_MultiTexCoord1dARB }, - { 14500, _gloffset_MultiTexCoord3dvARB }, - { 15779, _gloffset_MultiTexCoord3ivARB }, - { 15824, _gloffset_MultiTexCoord2sARB }, - { 17295, _gloffset_MultiTexCoord4ivARB }, - { 19360, _gloffset_ClientActiveTextureARB }, - { 21688, _gloffset_MultiTexCoord2dARB }, - { 22125, _gloffset_MultiTexCoord4dvARB }, - { 22481, _gloffset_MultiTexCoord4fvARB }, - { 23459, _gloffset_MultiTexCoord3fARB }, - { 26084, _gloffset_MultiTexCoord4dARB }, - { 26350, _gloffset_MultiTexCoord1sARB }, - { 26554, _gloffset_MultiTexCoord1dvARB }, - { 27530, _gloffset_MultiTexCoord1ivARB }, - { 27623, _gloffset_MultiTexCoord2ivARB }, - { 27962, _gloffset_MultiTexCoord1iARB }, - { 29346, _gloffset_MultiTexCoord4svARB }, - { 29970, _gloffset_MultiTexCoord1fARB }, - { 30233, _gloffset_MultiTexCoord4fARB }, - { 32702, _gloffset_MultiTexCoord2fvARB }, + { 4378, _gloffset_MultiTexCoord1fvARB }, + { 6474, _gloffset_MultiTexCoord3dARB }, + { 6519, _gloffset_MultiTexCoord2iARB }, + { 6643, _gloffset_MultiTexCoord2svARB }, + { 8653, _gloffset_MultiTexCoord2fARB }, + { 10726, _gloffset_MultiTexCoord3fvARB }, + { 11328, _gloffset_MultiTexCoord4sARB }, + { 12009, _gloffset_MultiTexCoord2dvARB }, + { 12416, _gloffset_MultiTexCoord1svARB }, + { 12817, _gloffset_MultiTexCoord3svARB }, + { 12878, _gloffset_MultiTexCoord4iARB }, + { 13679, _gloffset_MultiTexCoord3iARB }, + { 14549, _gloffset_MultiTexCoord1dARB }, + { 14781, _gloffset_MultiTexCoord3dvARB }, + { 16060, _gloffset_MultiTexCoord3ivARB }, + { 16105, _gloffset_MultiTexCoord2sARB }, + { 17603, _gloffset_MultiTexCoord4ivARB }, + { 19743, _gloffset_ClientActiveTextureARB }, + { 22106, _gloffset_MultiTexCoord2dARB }, + { 22543, _gloffset_MultiTexCoord4dvARB }, + { 22920, _gloffset_MultiTexCoord4fvARB }, + { 23924, _gloffset_MultiTexCoord3fARB }, + { 26541, _gloffset_MultiTexCoord4dARB }, + { 26807, _gloffset_MultiTexCoord1sARB }, + { 27011, _gloffset_MultiTexCoord1dvARB }, + { 27987, _gloffset_MultiTexCoord1ivARB }, + { 28080, _gloffset_MultiTexCoord2ivARB }, + { 28419, _gloffset_MultiTexCoord1iARB }, + { 29803, _gloffset_MultiTexCoord4svARB }, + { 30427, _gloffset_MultiTexCoord1fARB }, + { 30690, _gloffset_MultiTexCoord4fARB }, + { 33159, _gloffset_MultiTexCoord2fvARB }, { -1, -1 } }; @@ -5464,7 +5564,7 @@ static const struct gl_function_remap MESA_alt_functions[] = { #if defined(need_GL_3DFX_tbuffer) static const struct gl_function_remap GL_3DFX_tbuffer_functions[] = { - { 9287, -1 }, /* TbufferMask3DFX */ + { 9555, -1 }, /* TbufferMask3DFX */ { -1, -1 } }; #endif @@ -5556,7 +5656,7 @@ static const struct gl_function_remap GL_ARB_framebuffer_object_functions[] = { #if defined(need_GL_ARB_geometry_shader4) /* functions defined in MESA_remap_table_functions are excluded */ static const struct gl_function_remap GL_ARB_geometry_shader4_functions[] = { - { 12500, -1 }, /* FramebufferTextureLayer */ + { 12781, -1 }, /* FramebufferTextureLayer */ { -1, -1 } }; #endif @@ -5577,11 +5677,11 @@ static const struct gl_function_remap GL_ARB_map_buffer_range_functions[] = { #if defined(need_GL_ARB_matrix_palette) static const struct gl_function_remap GL_ARB_matrix_palette_functions[] = { - { 3773, -1 }, /* MatrixIndexusvARB */ - { 13219, -1 }, /* MatrixIndexuivARB */ - { 14655, -1 }, /* MatrixIndexPointerARB */ - { 20126, -1 }, /* CurrentPaletteMatrixARB */ - { 23203, -1 }, /* MatrixIndexubvARB */ + { 3849, -1 }, /* MatrixIndexusvARB */ + { 13500, -1 }, /* MatrixIndexuivARB */ + { 14936, -1 }, /* MatrixIndexPointerARB */ + { 20509, -1 }, /* CurrentPaletteMatrixARB */ + { 23668, -1 }, /* MatrixIndexubvARB */ { -1, -1 } }; #endif @@ -5614,6 +5714,13 @@ static const struct gl_function_remap GL_ARB_provoking_vertex_functions[] = { }; #endif +#if defined(need_GL_ARB_robustness) +/* functions defined in MESA_remap_table_functions are excluded */ +static const struct gl_function_remap GL_ARB_robustness_functions[] = { + { -1, -1 } +}; +#endif + #if defined(need_GL_ARB_sampler_objects) /* functions defined in MESA_remap_table_functions are excluded */ static const struct gl_function_remap GL_ARB_sampler_objects_functions[] = { @@ -5672,16 +5779,16 @@ static const struct gl_function_remap GL_ARB_vertex_array_object_functions[] = { #if defined(need_GL_ARB_vertex_blend) static const struct gl_function_remap GL_ARB_vertex_blend_functions[] = { - { 2396, -1 }, /* WeightubvARB */ - { 6652, -1 }, /* WeightivARB */ - { 11150, -1 }, /* WeightPointerARB */ - { 13986, -1 }, /* WeightfvARB */ - { 17814, -1 }, /* WeightbvARB */ - { 21356, -1 }, /* WeightusvARB */ - { 24329, -1 }, /* VertexBlendARB */ - { 30054, -1 }, /* WeightsvARB */ - { 32159, -1 }, /* WeightdvARB */ - { 32902, -1 }, /* WeightuivARB */ + { 2469, -1 }, /* WeightubvARB */ + { 6886, -1 }, /* WeightivARB */ + { 11431, -1 }, /* WeightPointerARB */ + { 14267, -1 }, /* WeightfvARB */ + { 18146, -1 }, /* WeightbvARB */ + { 21739, -1 }, /* WeightusvARB */ + { 24786, -1 }, /* VertexBlendARB */ + { 30511, -1 }, /* WeightsvARB */ + { 32616, -1 }, /* WeightdvARB */ + { 33359, -1 }, /* WeightuivARB */ { -1, -1 } }; #endif @@ -5751,7 +5858,7 @@ static const struct gl_function_remap GL_ATI_separate_stencil_functions[] = { #if defined(need_GL_EXT_blend_color) static const struct gl_function_remap GL_EXT_blend_color_functions[] = { - { 2655, _gloffset_BlendColor }, + { 2728, _gloffset_BlendColor }, { -1, -1 } }; #endif @@ -5772,15 +5879,15 @@ static const struct gl_function_remap GL_EXT_blend_func_separate_functions[] = { #if defined(need_GL_EXT_blend_minmax) static const struct gl_function_remap GL_EXT_blend_minmax_functions[] = { - { 11285, _gloffset_BlendEquation }, + { 11566, _gloffset_BlendEquation }, { -1, -1 } }; #endif #if defined(need_GL_EXT_color_subtable) static const struct gl_function_remap GL_EXT_color_subtable_functions[] = { - { 17238, _gloffset_ColorSubTable }, - { 32109, _gloffset_CopyColorSubTable }, + { 17546, _gloffset_ColorSubTable }, + { 32566, _gloffset_CopyColorSubTable }, { -1, -1 } }; #endif @@ -5795,65 +5902,65 @@ static const struct gl_function_remap GL_EXT_compiled_vertex_array_functions[] = #if defined(need_GL_EXT_convolution) static const struct gl_function_remap GL_EXT_convolution_functions[] = { { 257, _gloffset_ConvolutionFilter1D }, - { 2454, _gloffset_CopyConvolutionFilter1D }, - { 4058, _gloffset_GetConvolutionParameteriv }, - { 8567, _gloffset_ConvolutionFilter2D }, - { 8769, _gloffset_ConvolutionParameteriv }, - { 9229, _gloffset_ConvolutionParameterfv }, - { 20892, _gloffset_GetSeparableFilter }, - { 24403, _gloffset_SeparableFilter2D }, - { 25266, _gloffset_ConvolutionParameteri }, - { 25434, _gloffset_ConvolutionParameterf }, - { 27148, _gloffset_GetConvolutionParameterfv }, - { 28005, _gloffset_GetConvolutionFilter }, - { 30468, _gloffset_CopyConvolutionFilter2D }, + { 2527, _gloffset_CopyConvolutionFilter1D }, + { 4168, _gloffset_GetConvolutionParameteriv }, + { 8835, _gloffset_ConvolutionFilter2D }, + { 9037, _gloffset_ConvolutionParameteriv }, + { 9497, _gloffset_ConvolutionParameterfv }, + { 21275, _gloffset_GetSeparableFilter }, + { 24860, _gloffset_SeparableFilter2D }, + { 25723, _gloffset_ConvolutionParameteri }, + { 25891, _gloffset_ConvolutionParameterf }, + { 27605, _gloffset_GetConvolutionParameterfv }, + { 28462, _gloffset_GetConvolutionFilter }, + { 30925, _gloffset_CopyConvolutionFilter2D }, { -1, -1 } }; #endif #if defined(need_GL_EXT_coordinate_frame) static const struct gl_function_remap GL_EXT_coordinate_frame_functions[] = { - { 10584, -1 }, /* TangentPointerEXT */ - { 12655, -1 }, /* Binormal3ivEXT */ - { 13351, -1 }, /* Tangent3sEXT */ - { 14720, -1 }, /* Tangent3fvEXT */ - { 18831, -1 }, /* Tangent3ivEXT */ - { 19058, -1 }, /* Tangent3dvEXT */ - { 19806, -1 }, /* Binormal3bvEXT */ - { 20945, -1 }, /* Binormal3dEXT */ - { 23135, -1 }, /* Tangent3fEXT */ - { 25338, -1 }, /* Binormal3sEXT */ - { 25880, -1 }, /* Tangent3dEXT */ - { 26827, -1 }, /* Binormal3svEXT */ - { 27428, -1 }, /* Binormal3fEXT */ - { 28336, -1 }, /* Binormal3dvEXT */ - { 29603, -1 }, /* Tangent3iEXT */ - { 30753, -1 }, /* Tangent3bvEXT */ - { 31318, -1 }, /* Tangent3bEXT */ - { 31882, -1 }, /* Binormal3fvEXT */ - { 32601, -1 }, /* BinormalPointerEXT */ - { 33006, -1 }, /* Tangent3svEXT */ - { 33443, -1 }, /* Binormal3bEXT */ - { 33620, -1 }, /* Binormal3iEXT */ + { 10865, -1 }, /* TangentPointerEXT */ + { 12936, -1 }, /* Binormal3ivEXT */ + { 13632, -1 }, /* Tangent3sEXT */ + { 15001, -1 }, /* Tangent3fvEXT */ + { 19188, -1 }, /* Tangent3ivEXT */ + { 19415, -1 }, /* Tangent3dvEXT */ + { 20189, -1 }, /* Binormal3bvEXT */ + { 21328, -1 }, /* Binormal3dEXT */ + { 23600, -1 }, /* Tangent3fEXT */ + { 25795, -1 }, /* Binormal3sEXT */ + { 26337, -1 }, /* Tangent3dEXT */ + { 27284, -1 }, /* Binormal3svEXT */ + { 27885, -1 }, /* Binormal3fEXT */ + { 28793, -1 }, /* Binormal3dvEXT */ + { 30060, -1 }, /* Tangent3iEXT */ + { 31210, -1 }, /* Tangent3bvEXT */ + { 31775, -1 }, /* Tangent3bEXT */ + { 32339, -1 }, /* Binormal3fvEXT */ + { 33058, -1 }, /* BinormalPointerEXT */ + { 33539, -1 }, /* Tangent3svEXT */ + { 33976, -1 }, /* Binormal3bEXT */ + { 34153, -1 }, /* Binormal3iEXT */ { -1, -1 } }; #endif #if defined(need_GL_EXT_copy_texture) static const struct gl_function_remap GL_EXT_copy_texture_functions[] = { - { 15245, _gloffset_CopyTexSubImage3D }, - { 16925, _gloffset_CopyTexImage2D }, - { 24874, _gloffset_CopyTexImage1D }, - { 27686, _gloffset_CopyTexSubImage2D }, - { 30106, _gloffset_CopyTexSubImage1D }, + { 15526, _gloffset_CopyTexSubImage3D }, + { 17233, _gloffset_CopyTexImage2D }, + { 25331, _gloffset_CopyTexImage1D }, + { 28143, _gloffset_CopyTexSubImage2D }, + { 30563, _gloffset_CopyTexSubImage1D }, { -1, -1 } }; #endif #if defined(need_GL_EXT_cull_vertex) static const struct gl_function_remap GL_EXT_cull_vertex_functions[] = { - { 8918, -1 }, /* CullParameterdvEXT */ - { 11773, -1 }, /* CullParameterfvEXT */ + { 9186, -1 }, /* CullParameterdvEXT */ + { 12054, -1 }, /* CullParameterfvEXT */ { -1, -1 } }; #endif @@ -5881,7 +5988,7 @@ static const struct gl_function_remap GL_EXT_draw_instanced_functions[] = { #if defined(need_GL_EXT_draw_range_elements) static const struct gl_function_remap GL_EXT_draw_range_elements_functions[] = { - { 9566, _gloffset_DrawRangeElements }, + { 9834, _gloffset_DrawRangeElements }, { -1, -1 } }; #endif @@ -5931,38 +6038,38 @@ static const struct gl_function_remap GL_EXT_gpu_shader4_functions[] = { #if defined(need_GL_EXT_histogram) static const struct gl_function_remap GL_EXT_histogram_functions[] = { { 856, _gloffset_Histogram }, - { 3522, _gloffset_ResetHistogram }, - { 10063, _gloffset_GetMinmax }, - { 15579, _gloffset_GetHistogramParameterfv }, - { 24799, _gloffset_GetMinmaxParameteriv }, - { 27038, _gloffset_ResetMinmax }, - { 27902, _gloffset_GetHistogramParameteriv }, - { 29071, _gloffset_GetHistogram }, - { 31695, _gloffset_Minmax }, - { 33241, _gloffset_GetMinmaxParameterfv }, + { 3598, _gloffset_ResetHistogram }, + { 10317, _gloffset_GetMinmax }, + { 15860, _gloffset_GetHistogramParameterfv }, + { 25256, _gloffset_GetMinmaxParameteriv }, + { 27495, _gloffset_ResetMinmax }, + { 28359, _gloffset_GetHistogramParameteriv }, + { 29528, _gloffset_GetHistogram }, + { 32152, _gloffset_Minmax }, + { 33774, _gloffset_GetMinmaxParameterfv }, { -1, -1 } }; #endif #if defined(need_GL_EXT_index_func) static const struct gl_function_remap GL_EXT_index_func_functions[] = { - { 11559, -1 }, /* IndexFuncEXT */ + { 11840, -1 }, /* IndexFuncEXT */ { -1, -1 } }; #endif #if defined(need_GL_EXT_index_material) static const struct gl_function_remap GL_EXT_index_material_functions[] = { - { 21443, -1 }, /* IndexMaterialEXT */ + { 21861, -1 }, /* IndexMaterialEXT */ { -1, -1 } }; #endif #if defined(need_GL_EXT_light_texture) static const struct gl_function_remap GL_EXT_light_texture_functions[] = { - { 26847, -1 }, /* ApplyTextureEXT */ - { 26992, -1 }, /* TextureMaterialEXT */ - { 27017, -1 }, /* TextureLightEXT */ + { 27304, -1 }, /* ApplyTextureEXT */ + { 27449, -1 }, /* TextureMaterialEXT */ + { 27474, -1 }, /* TextureLightEXT */ { -1, -1 } }; #endif @@ -5983,20 +6090,20 @@ static const struct gl_function_remap GL_EXT_multisample_functions[] = { #if defined(need_GL_EXT_paletted_texture) static const struct gl_function_remap GL_EXT_paletted_texture_functions[] = { - { 8429, _gloffset_ColorTable }, - { 15425, _gloffset_GetColorTable }, - { 23318, _gloffset_GetColorTableParameterfv }, - { 25490, _gloffset_GetColorTableParameteriv }, + { 8697, _gloffset_ColorTable }, + { 15706, _gloffset_GetColorTable }, + { 23783, _gloffset_GetColorTableParameterfv }, + { 25947, _gloffset_GetColorTableParameteriv }, { -1, -1 } }; #endif #if defined(need_GL_EXT_pixel_transform) static const struct gl_function_remap GL_EXT_pixel_transform_functions[] = { - { 22090, -1 }, /* PixelTransformParameterfEXT */ - { 22170, -1 }, /* PixelTransformParameteriEXT */ - { 31033, -1 }, /* PixelTransformParameterfvEXT */ - { 32565, -1 }, /* PixelTransformParameterivEXT */ + { 22508, -1 }, /* PixelTransformParameterfEXT */ + { 22588, -1 }, /* PixelTransformParameteriEXT */ + { 31490, -1 }, /* PixelTransformParameterfvEXT */ + { 33022, -1 }, /* PixelTransformParameterivEXT */ { -1, -1 } }; #endif @@ -6045,16 +6152,16 @@ static const struct gl_function_remap GL_EXT_stencil_two_side_functions[] = { #if defined(need_GL_EXT_subtexture) static const struct gl_function_remap GL_EXT_subtexture_functions[] = { - { 7174, _gloffset_TexSubImage1D }, - { 10740, _gloffset_TexSubImage2D }, + { 7408, _gloffset_TexSubImage1D }, + { 11021, _gloffset_TexSubImage2D }, { -1, -1 } }; #endif #if defined(need_GL_EXT_texture3D) static const struct gl_function_remap GL_EXT_texture3D_functions[] = { - { 1774, _gloffset_TexImage3D }, - { 23087, _gloffset_TexSubImage3D }, + { 1826, _gloffset_TexImage3D }, + { 23552, _gloffset_TexSubImage3D }, { -1, -1 } }; #endif @@ -6075,19 +6182,19 @@ static const struct gl_function_remap GL_EXT_texture_integer_functions[] = { #if defined(need_GL_EXT_texture_object) static const struct gl_function_remap GL_EXT_texture_object_functions[] = { - { 3290, _gloffset_PrioritizeTextures }, - { 7623, _gloffset_AreTexturesResident }, - { 13694, _gloffset_GenTextures }, - { 15911, _gloffset_DeleteTextures }, - { 19859, _gloffset_IsTexture }, - { 30171, _gloffset_BindTexture }, + { 3366, _gloffset_PrioritizeTextures }, + { 7857, _gloffset_AreTexturesResident }, + { 13975, _gloffset_GenTextures }, + { 16219, _gloffset_DeleteTextures }, + { 20242, _gloffset_IsTexture }, + { 30628, _gloffset_BindTexture }, { -1, -1 } }; #endif #if defined(need_GL_EXT_texture_perturb_normal) static const struct gl_function_remap GL_EXT_texture_perturb_normal_functions[] = { - { 13936, -1 }, /* TextureNormalEXT */ + { 14217, -1 }, /* TextureNormalEXT */ { -1, -1 } }; #endif @@ -6109,30 +6216,30 @@ static const struct gl_function_remap GL_EXT_transform_feedback_functions[] = { #if defined(need_GL_EXT_vertex_array) /* functions defined in MESA_remap_table_functions are excluded */ static const struct gl_function_remap GL_EXT_vertex_array_functions[] = { - { 24575, _gloffset_ArrayElement }, - { 31283, _gloffset_GetPointerv }, - { 32868, _gloffset_DrawArrays }, + { 25032, _gloffset_ArrayElement }, + { 31740, _gloffset_GetPointerv }, + { 33325, _gloffset_DrawArrays }, { -1, -1 } }; #endif #if defined(need_GL_EXT_vertex_weighting) static const struct gl_function_remap GL_EXT_vertex_weighting_functions[] = { - { 19907, -1 }, /* VertexWeightfvEXT */ - { 27371, -1 }, /* VertexWeightfEXT */ - { 29040, -1 }, /* VertexWeightPointerEXT */ + { 20290, -1 }, /* VertexWeightfvEXT */ + { 27828, -1 }, /* VertexWeightfEXT */ + { 29497, -1 }, /* VertexWeightPointerEXT */ { -1, -1 } }; #endif #if defined(need_GL_HP_image_transform) static const struct gl_function_remap GL_HP_image_transform_functions[] = { - { 2327, -1 }, /* GetImageTransformParameterfvHP */ - { 3739, -1 }, /* ImageTransformParameterfHP */ - { 10278, -1 }, /* ImageTransformParameterfvHP */ - { 12020, -1 }, /* ImageTransformParameteriHP */ - { 12390, -1 }, /* GetImageTransformParameterivHP */ - { 19971, -1 }, /* ImageTransformParameterivHP */ + { 2400, -1 }, /* GetImageTransformParameterfvHP */ + { 3815, -1 }, /* ImageTransformParameterfHP */ + { 10559, -1 }, /* ImageTransformParameterfvHP */ + { 12301, -1 }, /* ImageTransformParameteriHP */ + { 12671, -1 }, /* GetImageTransformParameterivHP */ + { 20354, -1 }, /* ImageTransformParameterivHP */ { -1, -1 } }; #endif @@ -6146,14 +6253,14 @@ static const struct gl_function_remap GL_IBM_multimode_draw_arrays_functions[] = #if defined(need_GL_IBM_vertex_array_lists) static const struct gl_function_remap GL_IBM_vertex_array_lists_functions[] = { - { 4400, -1 }, /* SecondaryColorPointerListIBM */ - { 6106, -1 }, /* NormalPointerListIBM */ - { 7797, -1 }, /* FogCoordPointerListIBM */ - { 8104, -1 }, /* VertexPointerListIBM */ - { 12274, -1 }, /* ColorPointerListIBM */ - { 13458, -1 }, /* TexCoordPointerListIBM */ - { 13958, -1 }, /* IndexPointerListIBM */ - { 33184, -1 }, /* EdgeFlagPointerListIBM */ + { 4510, -1 }, /* SecondaryColorPointerListIBM */ + { 6340, -1 }, /* NormalPointerListIBM */ + { 8031, -1 }, /* FogCoordPointerListIBM */ + { 8372, -1 }, /* VertexPointerListIBM */ + { 12555, -1 }, /* ColorPointerListIBM */ + { 13739, -1 }, /* TexCoordPointerListIBM */ + { 14239, -1 }, /* IndexPointerListIBM */ + { 33717, -1 }, /* EdgeFlagPointerListIBM */ { -1, -1 } }; #endif @@ -6167,10 +6274,10 @@ static const struct gl_function_remap GL_INGR_blend_func_separate_functions[] = #if defined(need_GL_INTEL_parallel_arrays) static const struct gl_function_remap GL_INTEL_parallel_arrays_functions[] = { - { 12798, -1 }, /* VertexPointervINTEL */ - { 15672, -1 }, /* ColorPointervINTEL */ - { 30442, -1 }, /* NormalPointervINTEL */ - { 30965, -1 }, /* TexCoordPointervINTEL */ + { 13079, -1 }, /* VertexPointervINTEL */ + { 15953, -1 }, /* ColorPointervINTEL */ + { 30899, -1 }, /* NormalPointervINTEL */ + { 31422, -1 }, /* TexCoordPointervINTEL */ { -1, -1 } }; #endif @@ -6184,10 +6291,10 @@ static const struct gl_function_remap GL_MESA_resize_buffers_functions[] = { #if defined(need_GL_MESA_shader_debug) static const struct gl_function_remap GL_MESA_shader_debug_functions[] = { - { 1638, -1 }, /* GetDebugLogLengthMESA */ - { 3461, -1 }, /* ClearDebugLogMESA */ - { 4561, -1 }, /* GetDebugLogMESA */ - { 31476, -1 }, /* CreateDebugObjectMESA */ + { 1690, -1 }, /* GetDebugLogLengthMESA */ + { 3537, -1 }, /* ClearDebugLogMESA */ + { 4695, -1 }, /* GetDebugLogMESA */ + { 31933, -1 }, /* CreateDebugObjectMESA */ { -1, -1 } }; #endif @@ -6208,15 +6315,15 @@ static const struct gl_function_remap GL_NV_condtitional_render_functions[] = { #if defined(need_GL_NV_evaluators) static const struct gl_function_remap GL_NV_evaluators_functions[] = { - { 6836, -1 }, /* GetMapAttribParameterivNV */ - { 8535, -1 }, /* MapControlPointsNV */ - { 8634, -1 }, /* MapParameterfvNV */ - { 10723, -1 }, /* EvalMapsNV */ - { 17412, -1 }, /* GetMapAttribParameterfvNV */ - { 17629, -1 }, /* MapParameterivNV */ - { 25189, -1 }, /* GetMapParameterivNV */ - { 25732, -1 }, /* GetMapParameterfvNV */ - { 29757, -1 }, /* GetMapControlPointsNV */ + { 7070, -1 }, /* GetMapAttribParameterivNV */ + { 8803, -1 }, /* MapControlPointsNV */ + { 8902, -1 }, /* MapParameterfvNV */ + { 11004, -1 }, /* EvalMapsNV */ + { 17744, -1 }, /* GetMapAttribParameterfvNV */ + { 17961, -1 }, /* MapParameterivNV */ + { 25646, -1 }, /* GetMapParameterivNV */ + { 26189, -1 }, /* GetMapParameterfvNV */ + { 30214, -1 }, /* GetMapControlPointsNV */ { -1, -1 } }; #endif @@ -6258,8 +6365,8 @@ static const struct gl_function_remap GL_NV_register_combiners_functions[] = { #if defined(need_GL_NV_register_combiners2) static const struct gl_function_remap GL_NV_register_combiners2_functions[] = { - { 16064, -1 }, /* CombinerStageParameterfvNV */ - { 16460, -1 }, /* GetCombinerStageParameterfvNV */ + { 16372, -1 }, /* CombinerStageParameterfvNV */ + { 16768, -1 }, /* GetCombinerStageParameterfvNV */ { -1, -1 } }; #endif @@ -6294,23 +6401,23 @@ static const struct gl_function_remap GL_OES_EGL_image_functions[] = { #if defined(need_GL_PGI_misc_hints) static const struct gl_function_remap GL_PGI_misc_hints_functions[] = { - { 8755, -1 }, /* HintPGI */ + { 9023, -1 }, /* HintPGI */ { -1, -1 } }; #endif #if defined(need_GL_SGIS_detail_texture) static const struct gl_function_remap GL_SGIS_detail_texture_functions[] = { - { 16433, -1 }, /* GetDetailTexFuncSGIS */ - { 16870, -1 }, /* DetailTexFuncSGIS */ + { 16741, -1 }, /* GetDetailTexFuncSGIS */ + { 17178, -1 }, /* DetailTexFuncSGIS */ { -1, -1 } }; #endif #if defined(need_GL_SGIS_fog_function) static const struct gl_function_remap GL_SGIS_fog_function_functions[] = { - { 27668, -1 }, /* FogFuncSGIS */ - { 28389, -1 }, /* GetFogFuncSGIS */ + { 28125, -1 }, /* FogFuncSGIS */ + { 28846, -1 }, /* GetFogFuncSGIS */ { -1, -1 } }; #endif @@ -6338,112 +6445,112 @@ static const struct gl_function_remap GL_SGIS_point_parameters_functions[] = { #if defined(need_GL_SGIS_sharpen_texture) static const struct gl_function_remap GL_SGIS_sharpen_texture_functions[] = { - { 6897, -1 }, /* GetSharpenTexFuncSGIS */ - { 22455, -1 }, /* SharpenTexFuncSGIS */ + { 7131, -1 }, /* GetSharpenTexFuncSGIS */ + { 22894, -1 }, /* SharpenTexFuncSGIS */ { -1, -1 } }; #endif #if defined(need_GL_SGIS_texture4D) static const struct gl_function_remap GL_SGIS_texture4D_functions[] = { - { 1010, -1 }, /* TexImage4DSGIS */ - { 15980, -1 }, /* TexSubImage4DSGIS */ + { 995, -1 }, /* TexImage4DSGIS */ + { 16288, -1 }, /* TexSubImage4DSGIS */ { -1, -1 } }; #endif #if defined(need_GL_SGIS_texture_color_mask) static const struct gl_function_remap GL_SGIS_texture_color_mask_functions[] = { - { 15378, -1 }, /* TextureColorMaskSGIS */ + { 15659, -1 }, /* TextureColorMaskSGIS */ { -1, -1 } }; #endif #if defined(need_GL_SGIS_texture_filter4) static const struct gl_function_remap GL_SGIS_texture_filter4_functions[] = { - { 7074, -1 }, /* GetTexFilterFuncSGIS */ - { 16606, -1 }, /* TexFilterFuncSGIS */ + { 7308, -1 }, /* GetTexFilterFuncSGIS */ + { 16914, -1 }, /* TexFilterFuncSGIS */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_async) static const struct gl_function_remap GL_SGIX_async_functions[] = { - { 3387, -1 }, /* AsyncMarkerSGIX */ - { 4540, -1 }, /* FinishAsyncSGIX */ - { 5516, -1 }, /* PollAsyncSGIX */ - { 22664, -1 }, /* DeleteAsyncMarkersSGIX */ - { 22719, -1 }, /* IsAsyncMarkerSGIX */ - { 32981, -1 }, /* GenAsyncMarkersSGIX */ + { 3463, -1 }, /* AsyncMarkerSGIX */ + { 4649, -1 }, /* FinishAsyncSGIX */ + { 5721, -1 }, /* PollAsyncSGIX */ + { 23103, -1 }, /* DeleteAsyncMarkersSGIX */ + { 23158, -1 }, /* IsAsyncMarkerSGIX */ + { 33514, -1 }, /* GenAsyncMarkersSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_flush_raster) static const struct gl_function_remap GL_SGIX_flush_raster_functions[] = { - { 7451, -1 }, /* FlushRasterSGIX */ + { 7685, -1 }, /* FlushRasterSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_fragment_lighting) static const struct gl_function_remap GL_SGIX_fragment_lighting_functions[] = { - { 2625, -1 }, /* FragmentMaterialfvSGIX */ - { 5420, -1 }, /* FragmentLightiSGIX */ - { 8171, -1 }, /* FragmentMaterialfSGIX */ - { 8308, -1 }, /* GetFragmentLightivSGIX */ - { 9181, -1 }, /* FragmentLightModeliSGIX */ - { 10786, -1 }, /* FragmentLightivSGIX */ - { 11093, -1 }, /* GetFragmentMaterialivSGIX */ - { 16373, -1 }, /* GetFragmentMaterialfvSGIX */ - { 19776, -1 }, /* FragmentLightModelfSGIX */ - { 20094, -1 }, /* FragmentColorMaterialSGIX */ - { 20511, -1 }, /* FragmentMaterialiSGIX */ - { 21771, -1 }, /* LightEnviSGIX */ - { 23410, -1 }, /* FragmentLightModelfvSGIX */ - { 23745, -1 }, /* FragmentLightfvSGIX */ - { 28773, -1 }, /* FragmentLightModelivSGIX */ - { 28922, -1 }, /* FragmentLightfSGIX */ - { 31852, -1 }, /* GetFragmentLightfvSGIX */ - { 33464, -1 }, /* FragmentMaterialivSGIX */ + { 2698, -1 }, /* FragmentMaterialfvSGIX */ + { 5625, -1 }, /* FragmentLightiSGIX */ + { 8439, -1 }, /* FragmentMaterialfSGIX */ + { 8576, -1 }, /* GetFragmentLightivSGIX */ + { 9449, -1 }, /* FragmentLightModeliSGIX */ + { 11067, -1 }, /* FragmentLightivSGIX */ + { 11374, -1 }, /* GetFragmentMaterialivSGIX */ + { 16681, -1 }, /* GetFragmentMaterialfvSGIX */ + { 20159, -1 }, /* FragmentLightModelfSGIX */ + { 20477, -1 }, /* FragmentColorMaterialSGIX */ + { 20894, -1 }, /* FragmentMaterialiSGIX */ + { 22189, -1 }, /* LightEnviSGIX */ + { 23875, -1 }, /* FragmentLightModelfvSGIX */ + { 24210, -1 }, /* FragmentLightfvSGIX */ + { 29230, -1 }, /* FragmentLightModelivSGIX */ + { 29379, -1 }, /* FragmentLightfSGIX */ + { 32309, -1 }, /* GetFragmentLightfvSGIX */ + { 33997, -1 }, /* FragmentMaterialivSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_framezoom) static const struct gl_function_remap GL_SGIX_framezoom_functions[] = { - { 22742, -1 }, /* FrameZoomSGIX */ + { 23181, -1 }, /* FrameZoomSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_igloo_interface) static const struct gl_function_remap GL_SGIX_igloo_interface_functions[] = { - { 29230, -1 }, /* IglooInterfaceSGIX */ + { 29687, -1 }, /* IglooInterfaceSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_instruments) static const struct gl_function_remap GL_SGIX_instruments_functions[] = { - { 2805, -1 }, /* ReadInstrumentsSGIX */ - { 6670, -1 }, /* PollInstrumentsSGIX */ - { 10644, -1 }, /* GetInstrumentsSGIX */ - { 13056, -1 }, /* StartInstrumentsSGIX */ - { 16098, -1 }, /* StopInstrumentsSGIX */ - { 18051, -1 }, /* InstrumentsBufferSGIX */ + { 2878, -1 }, /* ReadInstrumentsSGIX */ + { 6904, -1 }, /* PollInstrumentsSGIX */ + { 10925, -1 }, /* GetInstrumentsSGIX */ + { 13337, -1 }, /* StartInstrumentsSGIX */ + { 16406, -1 }, /* StopInstrumentsSGIX */ + { 18383, -1 }, /* InstrumentsBufferSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_list_priority) static const struct gl_function_remap GL_SGIX_list_priority_functions[] = { - { 1241, -1 }, /* ListParameterfSGIX */ - { 3089, -1 }, /* GetListParameterfvSGIX */ - { 17942, -1 }, /* ListParameteriSGIX */ - { 19008, -1 }, /* ListParameterfvSGIX */ - { 21177, -1 }, /* ListParameterivSGIX */ - { 33025, -1 }, /* GetListParameterivSGIX */ + { 1226, -1 }, /* ListParameterfSGIX */ + { 3165, -1 }, /* GetListParameterfvSGIX */ + { 18274, -1 }, /* ListParameteriSGIX */ + { 19365, -1 }, /* ListParameterfvSGIX */ + { 21560, -1 }, /* ListParameterivSGIX */ + { 33558, -1 }, /* GetListParameterivSGIX */ { -1, -1 } }; #endif @@ -6457,134 +6564,134 @@ static const struct gl_function_remap GL_SGIX_pixel_texture_functions[] = { #if defined(need_GL_SGIX_polynomial_ffd) static const struct gl_function_remap GL_SGIX_polynomial_ffd_functions[] = { - { 3685, -1 }, /* LoadIdentityDeformationMapSGIX */ - { 16198, -1 }, /* DeformSGIX */ - { 24687, -1 }, /* DeformationMap3fSGIX */ - { 31740, -1 }, /* DeformationMap3dSGIX */ + { 3761, -1 }, /* LoadIdentityDeformationMapSGIX */ + { 16506, -1 }, /* DeformSGIX */ + { 25144, -1 }, /* DeformationMap3fSGIX */ + { 32197, -1 }, /* DeformationMap3dSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_reference_plane) static const struct gl_function_remap GL_SGIX_reference_plane_functions[] = { - { 14929, -1 }, /* ReferencePlaneSGIX */ + { 15210, -1 }, /* ReferencePlaneSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_sprite) static const struct gl_function_remap GL_SGIX_sprite_functions[] = { - { 9679, -1 }, /* SpriteParameterfvSGIX */ - { 20966, -1 }, /* SpriteParameteriSGIX */ - { 27072, -1 }, /* SpriteParameterfSGIX */ - { 29900, -1 }, /* SpriteParameterivSGIX */ + { 9947, -1 }, /* SpriteParameterfvSGIX */ + { 21349, -1 }, /* SpriteParameteriSGIX */ + { 27529, -1 }, /* SpriteParameterfSGIX */ + { 30357, -1 }, /* SpriteParameterivSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_tag_sample_buffer) static const struct gl_function_remap GL_SGIX_tag_sample_buffer_functions[] = { - { 21025, -1 }, /* TagSampleBufferSGIX */ + { 21408, -1 }, /* TagSampleBufferSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGI_color_table) static const struct gl_function_remap GL_SGI_color_table_functions[] = { - { 7741, _gloffset_ColorTableParameteriv }, - { 8429, _gloffset_ColorTable }, - { 15425, _gloffset_GetColorTable }, - { 15535, _gloffset_CopyColorTable }, - { 19720, _gloffset_ColorTableParameterfv }, - { 23318, _gloffset_GetColorTableParameterfv }, - { 25490, _gloffset_GetColorTableParameteriv }, + { 7975, _gloffset_ColorTableParameteriv }, + { 8697, _gloffset_ColorTable }, + { 15706, _gloffset_GetColorTable }, + { 15816, _gloffset_CopyColorTable }, + { 20103, _gloffset_ColorTableParameterfv }, + { 23783, _gloffset_GetColorTableParameterfv }, + { 25947, _gloffset_GetColorTableParameteriv }, { -1, -1 } }; #endif #if defined(need_GL_SUNX_constant_data) static const struct gl_function_remap GL_SUNX_constant_data_functions[] = { - { 31830, -1 }, /* FinishTextureSUNX */ + { 32287, -1 }, /* FinishTextureSUNX */ { -1, -1 } }; #endif #if defined(need_GL_SUN_global_alpha) static const struct gl_function_remap GL_SUN_global_alpha_functions[] = { - { 3408, -1 }, /* GlobalAlphaFactorubSUN */ - { 4868, -1 }, /* GlobalAlphaFactoriSUN */ - { 6695, -1 }, /* GlobalAlphaFactordSUN */ - { 9763, -1 }, /* GlobalAlphaFactoruiSUN */ - { 10235, -1 }, /* GlobalAlphaFactorbSUN */ - { 13371, -1 }, /* GlobalAlphaFactorfSUN */ - { 13535, -1 }, /* GlobalAlphaFactorusSUN */ - { 23005, -1 }, /* GlobalAlphaFactorsSUN */ + { 3484, -1 }, /* GlobalAlphaFactorubSUN */ + { 5002, -1 }, /* GlobalAlphaFactoriSUN */ + { 6929, -1 }, /* GlobalAlphaFactordSUN */ + { 10031, -1 }, /* GlobalAlphaFactoruiSUN */ + { 10516, -1 }, /* GlobalAlphaFactorbSUN */ + { 13652, -1 }, /* GlobalAlphaFactorfSUN */ + { 13816, -1 }, /* GlobalAlphaFactorusSUN */ + { 23470, -1 }, /* GlobalAlphaFactorsSUN */ { -1, -1 } }; #endif #if defined(need_GL_SUN_mesh_array) static const struct gl_function_remap GL_SUN_mesh_array_functions[] = { - { 29691, -1 }, /* DrawMeshArraysSUN */ + { 30148, -1 }, /* DrawMeshArraysSUN */ { -1, -1 } }; #endif #if defined(need_GL_SUN_triangle_list) static const struct gl_function_remap GL_SUN_triangle_list_functions[] = { - { 4514, -1 }, /* ReplacementCodeubSUN */ - { 6454, -1 }, /* ReplacementCodeubvSUN */ - { 19441, -1 }, /* ReplacementCodeusvSUN */ - { 19629, -1 }, /* ReplacementCodePointerSUN */ - { 21835, -1 }, /* ReplacementCodeuiSUN */ - { 22693, -1 }, /* ReplacementCodeusSUN */ - { 30357, -1 }, /* ReplacementCodeuivSUN */ + { 4623, -1 }, /* ReplacementCodeubSUN */ + { 6688, -1 }, /* ReplacementCodeubvSUN */ + { 19824, -1 }, /* ReplacementCodeusvSUN */ + { 20012, -1 }, /* ReplacementCodePointerSUN */ + { 22253, -1 }, /* ReplacementCodeuiSUN */ + { 23132, -1 }, /* ReplacementCodeusSUN */ + { 30814, -1 }, /* ReplacementCodeuivSUN */ { -1, -1 } }; #endif #if defined(need_GL_SUN_vertex) static const struct gl_function_remap GL_SUN_vertex_functions[] = { - { 1115, -1 }, /* ReplacementCodeuiColor3fVertex3fvSUN */ - { 1313, -1 }, /* TexCoord4fColor4fNormal3fVertex4fvSUN */ - { 1539, -1 }, /* TexCoord2fColor4ubVertex3fvSUN */ - { 1869, -1 }, /* ReplacementCodeuiVertex3fvSUN */ - { 2003, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fvSUN */ - { 2561, -1 }, /* ReplacementCodeuiNormal3fVertex3fSUN */ - { 2874, -1 }, /* Color4ubVertex3fvSUN */ - { 4673, -1 }, /* Color4ubVertex3fSUN */ - { 4796, -1 }, /* TexCoord2fVertex3fSUN */ - { 5169, -1 }, /* TexCoord2fColor4fNormal3fVertex3fSUN */ - { 5620, -1 }, /* TexCoord2fNormal3fVertex3fvSUN */ - { 6349, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */ - { 7129, -1 }, /* ReplacementCodeuiColor4ubVertex3fvSUN */ - { 7488, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fSUN */ - { 8980, -1 }, /* Color3fVertex3fSUN */ - { 10171, -1 }, /* Color3fVertex3fvSUN */ - { 10609, -1 }, /* Color4fNormal3fVertex3fvSUN */ - { 11438, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */ - { 12919, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fvSUN */ - { 14545, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */ - { 15071, -1 }, /* TexCoord2fColor3fVertex3fSUN */ - { 16123, -1 }, /* TexCoord4fColor4fNormal3fVertex4fSUN */ - { 16565, -1 }, /* Color4ubVertex2fvSUN */ - { 16895, -1 }, /* Normal3fVertex3fSUN */ - { 17992, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fSUN */ - { 18344, -1 }, /* TexCoord2fColor4fNormal3fVertex3fvSUN */ - { 18651, -1 }, /* TexCoord2fNormal3fVertex3fSUN */ - { 19260, -1 }, /* TexCoord2fVertex3fvSUN */ - { 20064, -1 }, /* Color4ubVertex2fSUN */ - { 20302, -1 }, /* ReplacementCodeuiColor4ubVertex3fSUN */ - { 22301, -1 }, /* TexCoord2fColor4ubVertex3fSUN */ - { 22761, -1 }, /* Normal3fVertex3fvSUN */ - { 23227, -1 }, /* Color4fNormal3fVertex3fSUN */ - { 24236, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */ - { 26393, -1 }, /* ReplacementCodeuiColor3fVertex3fSUN */ - { 27784, -1 }, /* TexCoord4fVertex4fSUN */ - { 28230, -1 }, /* TexCoord2fColor3fVertex3fvSUN */ - { 28617, -1 }, /* ReplacementCodeuiNormal3fVertex3fvSUN */ - { 28744, -1 }, /* TexCoord4fVertex4fvSUN */ - { 29478, -1 }, /* ReplacementCodeuiVertex3fSUN */ + { 1100, -1 }, /* ReplacementCodeuiColor3fVertex3fvSUN */ + { 1298, -1 }, /* TexCoord4fColor4fNormal3fVertex4fvSUN */ + { 1552, -1 }, /* TexCoord2fColor4ubVertex3fvSUN */ + { 1921, -1 }, /* ReplacementCodeuiVertex3fvSUN */ + { 2055, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fvSUN */ + { 2634, -1 }, /* ReplacementCodeuiNormal3fVertex3fSUN */ + { 2974, -1 }, /* Color4ubVertex3fvSUN */ + { 4807, -1 }, /* Color4ubVertex3fSUN */ + { 4930, -1 }, /* TexCoord2fVertex3fSUN */ + { 5348, -1 }, /* TexCoord2fColor4fNormal3fVertex3fSUN */ + { 5825, -1 }, /* TexCoord2fNormal3fVertex3fvSUN */ + { 6583, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */ + { 7363, -1 }, /* ReplacementCodeuiColor4ubVertex3fvSUN */ + { 7722, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fSUN */ + { 9248, -1 }, /* Color3fVertex3fSUN */ + { 10425, -1 }, /* Color3fVertex3fvSUN */ + { 10890, -1 }, /* Color4fNormal3fVertex3fvSUN */ + { 11719, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */ + { 13200, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fvSUN */ + { 14826, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */ + { 15352, -1 }, /* TexCoord2fColor3fVertex3fSUN */ + { 16431, -1 }, /* TexCoord4fColor4fNormal3fVertex4fSUN */ + { 16873, -1 }, /* Color4ubVertex2fvSUN */ + { 17203, -1 }, /* Normal3fVertex3fSUN */ + { 18324, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fSUN */ + { 18676, -1 }, /* TexCoord2fColor4fNormal3fVertex3fvSUN */ + { 18983, -1 }, /* TexCoord2fNormal3fVertex3fSUN */ + { 19617, -1 }, /* TexCoord2fVertex3fvSUN */ + { 20447, -1 }, /* Color4ubVertex2fSUN */ + { 20685, -1 }, /* ReplacementCodeuiColor4ubVertex3fSUN */ + { 22719, -1 }, /* TexCoord2fColor4ubVertex3fSUN */ + { 23200, -1 }, /* Normal3fVertex3fvSUN */ + { 23692, -1 }, /* Color4fNormal3fVertex3fSUN */ + { 24693, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */ + { 26850, -1 }, /* ReplacementCodeuiColor3fVertex3fSUN */ + { 28241, -1 }, /* TexCoord4fVertex4fSUN */ + { 28687, -1 }, /* TexCoord2fColor3fVertex3fvSUN */ + { 29074, -1 }, /* ReplacementCodeuiNormal3fVertex3fvSUN */ + { 29201, -1 }, /* TexCoord4fVertex4fvSUN */ + { 29935, -1 }, /* ReplacementCodeuiVertex3fSUN */ { -1, -1 } }; #endif @@ -6594,38 +6701,38 @@ static const struct gl_function_remap GL_SUN_vertex_functions[] = { static const struct gl_function_remap GL_VERSION_1_3_functions[] = { { 425, _gloffset_MultiTexCoord3sARB }, { 657, _gloffset_ActiveTextureARB }, - { 4268, _gloffset_MultiTexCoord1fvARB }, - { 6240, _gloffset_MultiTexCoord3dARB }, - { 6285, _gloffset_MultiTexCoord2iARB }, - { 6409, _gloffset_MultiTexCoord2svARB }, - { 8385, _gloffset_MultiTexCoord2fARB }, - { 10445, _gloffset_MultiTexCoord3fvARB }, - { 11047, _gloffset_MultiTexCoord4sARB }, - { 11728, _gloffset_MultiTexCoord2dvARB }, - { 12135, _gloffset_MultiTexCoord1svARB }, - { 12536, _gloffset_MultiTexCoord3svARB }, - { 12597, _gloffset_MultiTexCoord4iARB }, - { 13398, _gloffset_MultiTexCoord3iARB }, - { 14268, _gloffset_MultiTexCoord1dARB }, - { 14500, _gloffset_MultiTexCoord3dvARB }, - { 15779, _gloffset_MultiTexCoord3ivARB }, - { 15824, _gloffset_MultiTexCoord2sARB }, - { 17295, _gloffset_MultiTexCoord4ivARB }, - { 19360, _gloffset_ClientActiveTextureARB }, - { 21688, _gloffset_MultiTexCoord2dARB }, - { 22125, _gloffset_MultiTexCoord4dvARB }, - { 22481, _gloffset_MultiTexCoord4fvARB }, - { 23459, _gloffset_MultiTexCoord3fARB }, - { 26084, _gloffset_MultiTexCoord4dARB }, - { 26350, _gloffset_MultiTexCoord1sARB }, - { 26554, _gloffset_MultiTexCoord1dvARB }, - { 27530, _gloffset_MultiTexCoord1ivARB }, - { 27623, _gloffset_MultiTexCoord2ivARB }, - { 27962, _gloffset_MultiTexCoord1iARB }, - { 29346, _gloffset_MultiTexCoord4svARB }, - { 29970, _gloffset_MultiTexCoord1fARB }, - { 30233, _gloffset_MultiTexCoord4fARB }, - { 32702, _gloffset_MultiTexCoord2fvARB }, + { 4378, _gloffset_MultiTexCoord1fvARB }, + { 6474, _gloffset_MultiTexCoord3dARB }, + { 6519, _gloffset_MultiTexCoord2iARB }, + { 6643, _gloffset_MultiTexCoord2svARB }, + { 8653, _gloffset_MultiTexCoord2fARB }, + { 10726, _gloffset_MultiTexCoord3fvARB }, + { 11328, _gloffset_MultiTexCoord4sARB }, + { 12009, _gloffset_MultiTexCoord2dvARB }, + { 12416, _gloffset_MultiTexCoord1svARB }, + { 12817, _gloffset_MultiTexCoord3svARB }, + { 12878, _gloffset_MultiTexCoord4iARB }, + { 13679, _gloffset_MultiTexCoord3iARB }, + { 14549, _gloffset_MultiTexCoord1dARB }, + { 14781, _gloffset_MultiTexCoord3dvARB }, + { 16060, _gloffset_MultiTexCoord3ivARB }, + { 16105, _gloffset_MultiTexCoord2sARB }, + { 17603, _gloffset_MultiTexCoord4ivARB }, + { 19743, _gloffset_ClientActiveTextureARB }, + { 22106, _gloffset_MultiTexCoord2dARB }, + { 22543, _gloffset_MultiTexCoord4dvARB }, + { 22920, _gloffset_MultiTexCoord4fvARB }, + { 23924, _gloffset_MultiTexCoord3fARB }, + { 26541, _gloffset_MultiTexCoord4dARB }, + { 26807, _gloffset_MultiTexCoord1sARB }, + { 27011, _gloffset_MultiTexCoord1dvARB }, + { 27987, _gloffset_MultiTexCoord1ivARB }, + { 28080, _gloffset_MultiTexCoord2ivARB }, + { 28419, _gloffset_MultiTexCoord1iARB }, + { 29803, _gloffset_MultiTexCoord4svARB }, + { 30427, _gloffset_MultiTexCoord1fARB }, + { 30690, _gloffset_MultiTexCoord4fARB }, + { 33159, _gloffset_MultiTexCoord2fvARB }, { -1, -1 } }; #endif diff --git a/mesalib/src/mesa/main/renderbuffer.c b/mesalib/src/mesa/main/renderbuffer.c index e6d5fe4bf..fa884c0de 100644 --- a/mesalib/src/mesa/main/renderbuffer.c +++ b/mesalib/src/mesa/main/renderbuffer.c @@ -51,40 +51,187 @@ /* * Routines for get/put values in common buffer formats follow. - * Someday add support for arbitrary row stride to make them more - * flexible. */ -/********************************************************************** - * Functions for buffers of 1 X GLubyte values. - * Typically stencil. +/* Returns a bytes per pixel of the DataType in the get/put span + * functions for at least a subset of the available combinations a + * renderbuffer can have. + * + * It would be nice to see gl_renderbuffer start talking about a + * gl_format instead of a GLenum DataType. */ +static int +get_datatype_bytes(struct gl_renderbuffer *rb) +{ + int component_size; + switch (rb->DataType) { + case GL_FLOAT: + case GL_UNSIGNED_INT: + case GL_UNSIGNED_INT_24_8_EXT: + component_size = 4; + break; + case GL_UNSIGNED_SHORT: + component_size = 2; + break; + case GL_UNSIGNED_BYTE: + component_size = 1; + break; + default: + component_size = 1; + assert(0); + } + + switch (rb->_BaseFormat) { + case GL_DEPTH_COMPONENT: + case GL_DEPTH_STENCIL: + return component_size; + default: + return 4 * component_size; + } +} + +/* This is commonly used by most of the accessors. */ static void * -get_pointer_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLint x, GLint y) +get_pointer_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLint x, GLint y) { if (!rb->Data) return NULL; - ASSERT(rb->DataType == GL_UNSIGNED_BYTE); - /* Can't assert rb->Format since these funcs may be used for serveral - * different formats (GL_ALPHA8, GL_STENCIL_INDEX8, etc). - */ - return (GLubyte *) rb->Data + y * rb->Width + x; + + return ((char *) rb->Data + + (y * rb->RowStride + x) * _mesa_get_format_bytes(rb->Format)); } +/* GetRow() implementation for formats where DataType matches the rb->Format. + */ +static void +get_row_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, void *values) +{ + void *src = rb->GetPointer(ctx, rb, x, y); + memcpy(values, src, count * _mesa_get_format_bytes(rb->Format)); +} +/* Only used for float textures currently, but might also be used for + * RGBA8888, RGBA16, etc. + */ static void -get_row_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, void *values) +get_values_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], void *values) { - const GLubyte *src = (const GLubyte *) rb->Data + y * rb->Width + x; - ASSERT(rb->DataType == GL_UNSIGNED_BYTE); - memcpy(values, src, count * sizeof(GLubyte)); + int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat); + GLuint i; + + for (i = 0; i < count; i++) { + const void *src = rb->GetPointer(ctx, rb, x[i], y[i]); + char *dst = (char *) values + i * format_bytes; + memcpy(dst, src, format_bytes); + } +} + +/* For the GL_RED/GL_RG/GL_RGB format/DataType combinations (and + * GL_LUMINANCE/GL_INTENSITY?), the Put functions are a matter of + * storing those initial components of the value per pixel into the + * destination. + */ +static void +put_row_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, + const void *values, const GLubyte *mask) +{ + void *row = rb->GetPointer(ctx, rb, x, y); + int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat); + int datatype_bytes = get_datatype_bytes(rb); + unsigned int i; + + if (mask) { + for (i = 0; i < count; i++) { + char *dst = (char *) row + i * format_bytes; + const char *src = (const char *) values + i * datatype_bytes; + + if (mask[i]) { + memcpy(dst, src, format_bytes); + } + } + } + else { + for (i = 0; i < count; i++) { + char *dst = (char *) row + i * format_bytes; + const char *src = (const char *) values + i * datatype_bytes; + memcpy(dst, src, format_bytes); + } + } +} + +static void +put_mono_row_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, + const void *value, const GLubyte *mask) +{ + void *row = rb->GetPointer(ctx, rb, x, y); + int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat); + unsigned int i; + + if (mask) { + for (i = 0; i < count; i++) { + char *dst = (char *) row + i * format_bytes; + if (mask[i]) { + memcpy(dst, value, format_bytes); + } + } + } + else { + for (i = 0; i < count; i++) { + char *dst = (char *) row + i * format_bytes; + memcpy(dst, value, format_bytes); + } + } +} + + +static void +put_values_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *values, const GLubyte *mask) +{ + int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat); + int datatype_bytes = get_datatype_bytes(rb); + unsigned int i; + + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + void *dst = rb->GetPointer(ctx, rb, x[i], y[i]); + const char *src = (const char *) values + i * datatype_bytes; + memcpy(dst, src, format_bytes); + } + } } static void +put_mono_values_generic(struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat); + unsigned int i; + + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + void *dst = rb->GetPointer(ctx, rb, x[i], y[i]); + memcpy(dst, value, format_bytes); + } + } +} + +/********************************************************************** + * Functions for buffers of 1 X GLubyte values. + * Typically stencil. + */ + +static void get_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, const GLint x[], const GLint y[], void *values) { @@ -92,7 +239,7 @@ get_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint coun GLuint i; ASSERT(rb->DataType == GL_UNSIGNED_BYTE); for (i = 0; i < count; i++) { - const GLubyte *src = (GLubyte *) rb->Data + y[i] * rb->Width + x[i]; + const GLubyte *src = (GLubyte *) rb->Data + y[i] * rb->RowStride + x[i]; dst[i] = *src; } } @@ -103,7 +250,7 @@ put_row_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, GLint x, GLint y, const void *values, const GLubyte *mask) { const GLubyte *src = (const GLubyte *) values; - GLubyte *dst = (GLubyte *) rb->Data + y * rb->Width + x; + GLubyte *dst = (GLubyte *) rb->Data + y * rb->RowStride + x; ASSERT(rb->DataType == GL_UNSIGNED_BYTE); if (mask) { GLuint i; @@ -124,7 +271,7 @@ put_mono_row_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint co GLint x, GLint y, const void *value, const GLubyte *mask) { const GLubyte val = *((const GLubyte *) value); - GLubyte *dst = (GLubyte *) rb->Data + y * rb->Width + x; + GLubyte *dst = (GLubyte *) rb->Data + y * rb->RowStride + x; ASSERT(rb->DataType == GL_UNSIGNED_BYTE); if (mask) { GLuint i; @@ -153,7 +300,7 @@ put_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint coun ASSERT(rb->DataType == GL_UNSIGNED_BYTE); for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLubyte *dst = (GLubyte *) rb->Data + y[i] * rb->Width + x[i]; + GLubyte *dst = (GLubyte *) rb->Data + y[i] * rb->RowStride + x[i]; *dst = src[i]; } } @@ -170,7 +317,7 @@ put_mono_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint ASSERT(rb->DataType == GL_UNSIGNED_BYTE); for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLubyte *dst = (GLubyte *) rb->Data + y[i] * rb->Width + x[i]; + GLubyte *dst = (GLubyte *) rb->Data + y[i] * rb->RowStride + x[i]; *dst = val; } } @@ -182,28 +329,6 @@ put_mono_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint * Typically depth/Z. */ -static void * -get_pointer_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLint x, GLint y) -{ - if (!rb->Data) - return NULL; - ASSERT(rb->DataType == GL_UNSIGNED_SHORT); - ASSERT(rb->Width > 0); - return (GLushort *) rb->Data + y * rb->Width + x; -} - - -static void -get_row_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, void *values) -{ - const void *src = rb->GetPointer(ctx, rb, x, y); - ASSERT(rb->DataType == GL_UNSIGNED_SHORT); - memcpy(values, src, count * sizeof(GLushort)); -} - - static void get_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, const GLint x[], const GLint y[], void *values) @@ -212,7 +337,7 @@ get_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou GLuint i; ASSERT(rb->DataType == GL_UNSIGNED_SHORT); for (i = 0; i < count; i++) { - const GLushort *src = (GLushort *) rb->Data + y[i] * rb->Width + x[i]; + const GLushort *src = (GLushort *) rb->Data + y[i] * rb->RowStride + x[i]; dst[i] = *src; } } @@ -223,7 +348,7 @@ put_row_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, GLint x, GLint y, const void *values, const GLubyte *mask) { const GLushort *src = (const GLushort *) values; - GLushort *dst = (GLushort *) rb->Data + y * rb->Width + x; + GLushort *dst = (GLushort *) rb->Data + y * rb->RowStride + x; ASSERT(rb->DataType == GL_UNSIGNED_SHORT); if (mask) { GLuint i; @@ -244,7 +369,7 @@ put_mono_row_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint c GLint x, GLint y, const void *value, const GLubyte *mask) { const GLushort val = *((const GLushort *) value); - GLushort *dst = (GLushort *) rb->Data + y * rb->Width + x; + GLushort *dst = (GLushort *) rb->Data + y * rb->RowStride + x; ASSERT(rb->DataType == GL_UNSIGNED_SHORT); if (mask) { GLuint i; @@ -273,7 +398,7 @@ put_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou ASSERT(rb->DataType == GL_UNSIGNED_SHORT); for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLushort *dst = (GLushort *) rb->Data + y[i] * rb->Width + x[i]; + GLushort *dst = (GLushort *) rb->Data + y[i] * rb->RowStride + x[i]; *dst = src[i]; } } @@ -291,7 +416,7 @@ put_mono_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint i; for (i = 0; i < count; i++) { if (mask[i]) { - GLushort *dst = (GLushort *) rb->Data + y[i] * rb->Width + x[i]; + GLushort *dst = (GLushort *) rb->Data + y[i] * rb->RowStride + x[i]; *dst = val; } } @@ -299,7 +424,7 @@ put_mono_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, else { GLuint i; for (i = 0; i < count; i++) { - GLushort *dst = (GLushort *) rb->Data + y[i] * rb->Width + x[i]; + GLushort *dst = (GLushort *) rb->Data + y[i] * rb->RowStride + x[i]; *dst = val; } } @@ -311,29 +436,6 @@ put_mono_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, * Typically depth/Z or color index. */ -static void * -get_pointer_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLint x, GLint y) -{ - if (!rb->Data) - return NULL; - ASSERT(rb->DataType == GL_UNSIGNED_INT || - rb->DataType == GL_UNSIGNED_INT_24_8_EXT); - return (GLuint *) rb->Data + y * rb->Width + x; -} - - -static void -get_row_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, void *values) -{ - const void *src = rb->GetPointer(ctx, rb, x, y); - ASSERT(rb->DataType == GL_UNSIGNED_INT || - rb->DataType == GL_UNSIGNED_INT_24_8_EXT); - memcpy(values, src, count * sizeof(GLuint)); -} - - static void get_values_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, const GLint x[], const GLint y[], void *values) @@ -343,7 +445,7 @@ get_values_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count ASSERT(rb->DataType == GL_UNSIGNED_INT || rb->DataType == GL_UNSIGNED_INT_24_8_EXT); for (i = 0; i < count; i++) { - const GLuint *src = (GLuint *) rb->Data + y[i] * rb->Width + x[i]; + const GLuint *src = (GLuint *) rb->Data + y[i] * rb->RowStride + x[i]; dst[i] = *src; } } @@ -354,7 +456,7 @@ put_row_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, GLint x, GLint y, const void *values, const GLubyte *mask) { const GLuint *src = (const GLuint *) values; - GLuint *dst = (GLuint *) rb->Data + y * rb->Width + x; + GLuint *dst = (GLuint *) rb->Data + y * rb->RowStride + x; ASSERT(rb->DataType == GL_UNSIGNED_INT || rb->DataType == GL_UNSIGNED_INT_24_8_EXT); if (mask) { @@ -376,7 +478,7 @@ put_mono_row_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou GLint x, GLint y, const void *value, const GLubyte *mask) { const GLuint val = *((const GLuint *) value); - GLuint *dst = (GLuint *) rb->Data + y * rb->Width + x; + GLuint *dst = (GLuint *) rb->Data + y * rb->RowStride + x; ASSERT(rb->DataType == GL_UNSIGNED_INT || rb->DataType == GL_UNSIGNED_INT_24_8_EXT); if (mask) { @@ -407,7 +509,7 @@ put_values_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count rb->DataType == GL_UNSIGNED_INT_24_8_EXT); for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLuint *dst = (GLuint *) rb->Data + y[i] * rb->Width + x[i]; + GLuint *dst = (GLuint *) rb->Data + y[i] * rb->RowStride + x[i]; *dst = src[i]; } } @@ -425,7 +527,7 @@ put_mono_values_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint rb->DataType == GL_UNSIGNED_INT_24_8_EXT); for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLuint *dst = (GLuint *) rb->Data + y[i] * rb->Width + x[i]; + GLuint *dst = (GLuint *) rb->Data + y[i] * rb->RowStride + x[i]; *dst = val; } } @@ -455,7 +557,8 @@ static void get_row_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, GLint x, GLint y, void *values) { - const GLubyte *src = (const GLubyte *) rb->Data + 3 * (y * rb->Width + x); + const GLubyte *src = ((const GLubyte *) rb->Data) + + 3 * (y * rb->RowStride + x); GLubyte *dst = (GLubyte *) values; GLuint i; ASSERT(rb->Format == MESA_FORMAT_RGB888); @@ -479,7 +582,7 @@ get_values_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou ASSERT(rb->DataType == GL_UNSIGNED_BYTE); for (i = 0; i < count; i++) { const GLubyte *src - = (GLubyte *) rb->Data + 3 * (y[i] * rb->Width + x[i]); + = (GLubyte *) rb->Data + 3 * (y[i] * rb->RowStride + x[i]); dst[i * 4 + 0] = src[0]; dst[i * 4 + 1] = src[1]; dst[i * 4 + 2] = src[2]; @@ -494,7 +597,7 @@ put_row_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, { /* note: incoming values are RGB+A! */ const GLubyte *src = (const GLubyte *) values; - GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->Width + x); + GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->RowStride + x); GLuint i; ASSERT(rb->Format == MESA_FORMAT_RGB888); ASSERT(rb->DataType == GL_UNSIGNED_BYTE); @@ -514,7 +617,7 @@ put_row_rgb_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint co { /* note: incoming values are RGB+A! */ const GLubyte *src = (const GLubyte *) values; - GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->Width + x); + GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->RowStride + x); GLuint i; ASSERT(rb->Format == MESA_FORMAT_RGB888); ASSERT(rb->DataType == GL_UNSIGNED_BYTE); @@ -536,7 +639,7 @@ put_mono_row_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint c const GLubyte val0 = ((const GLubyte *) value)[0]; const GLubyte val1 = ((const GLubyte *) value)[1]; const GLubyte val2 = ((const GLubyte *) value)[2]; - GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->Width + x); + GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->RowStride + x); ASSERT(rb->Format == MESA_FORMAT_RGB888); ASSERT(rb->DataType == GL_UNSIGNED_BYTE); if (!mask && val0 == val1 && val1 == val2) { @@ -568,7 +671,7 @@ put_values_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou ASSERT(rb->DataType == GL_UNSIGNED_BYTE); for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLubyte *dst = (GLubyte *) rb->Data + 3 * (y[i] * rb->Width + x[i]); + GLubyte *dst = (GLubyte *) rb->Data + 3 * (y[i] * rb->RowStride + x[i]); dst[0] = src[i * 4 + 0]; dst[1] = src[i * 4 + 1]; dst[2] = src[i * 4 + 2]; @@ -591,7 +694,8 @@ put_mono_values_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, ASSERT(rb->DataType == GL_UNSIGNED_BYTE); for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLubyte *dst = (GLubyte *) rb->Data + 3 * (y[i] * rb->Width + x[i]); + GLubyte *dst = ((GLubyte *) rb->Data) + + 3 * (y[i] * rb->RowStride + x[i]); dst[0] = val0; dst[1] = val1; dst[2] = val2; @@ -605,29 +709,6 @@ put_mono_values_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, * Typically color buffers. */ -static void * -get_pointer_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLint x, GLint y) -{ - if (!rb->Data) - return NULL; - ASSERT(rb->DataType == GL_UNSIGNED_BYTE); - ASSERT(rb->Format == MESA_FORMAT_RGBA8888); - return (GLubyte *) rb->Data + 4 * (y * rb->Width + x); -} - - -static void -get_row_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, void *values) -{ - const GLubyte *src = (const GLubyte *) rb->Data + 4 * (y * rb->Width + x); - ASSERT(rb->DataType == GL_UNSIGNED_BYTE); - ASSERT(rb->Format == MESA_FORMAT_RGBA8888); - memcpy(values, src, 4 * count * sizeof(GLubyte)); -} - - static void get_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, const GLint x[], const GLint y[], void *values) @@ -638,7 +719,7 @@ get_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou ASSERT(rb->DataType == GL_UNSIGNED_BYTE); ASSERT(rb->Format == MESA_FORMAT_RGBA8888); for (i = 0; i < count; i++) { - const GLuint *src = (GLuint *) rb->Data + (y[i] * rb->Width + x[i]); + const GLuint *src = (GLuint *) rb->Data + (y[i] * rb->RowStride + x[i]); dst[i] = *src; } } @@ -650,7 +731,7 @@ put_row_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, { /* treat 4*GLubyte as 1*GLuint */ const GLuint *src = (const GLuint *) values; - GLuint *dst = (GLuint *) rb->Data + (y * rb->Width + x); + GLuint *dst = (GLuint *) rb->Data + (y * rb->RowStride + x); ASSERT(rb->DataType == GL_UNSIGNED_BYTE); ASSERT(rb->Format == MESA_FORMAT_RGBA8888); if (mask) { @@ -673,7 +754,7 @@ put_row_rgb_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint co { /* Store RGB values in RGBA buffer */ const GLubyte *src = (const GLubyte *) values; - GLubyte *dst = (GLubyte *) rb->Data + 4 * (y * rb->Width + x); + GLubyte *dst = (GLubyte *) rb->Data + 4 * (y * rb->RowStride + x); GLuint i; ASSERT(rb->DataType == GL_UNSIGNED_BYTE); ASSERT(rb->Format == MESA_FORMAT_RGBA8888); @@ -694,7 +775,7 @@ put_mono_row_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint c { /* treat 4*GLubyte as 1*GLuint */ const GLuint val = *((const GLuint *) value); - GLuint *dst = (GLuint *) rb->Data + (y * rb->Width + x); + GLuint *dst = (GLuint *) rb->Data + (y * rb->RowStride + x); ASSERT(rb->DataType == GL_UNSIGNED_BYTE); ASSERT(rb->Format == MESA_FORMAT_RGBA8888); if (!mask && val == 0) { @@ -733,7 +814,7 @@ put_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou ASSERT(rb->Format == MESA_FORMAT_RGBA8888); for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLuint *dst = (GLuint *) rb->Data + (y[i] * rb->Width + x[i]); + GLuint *dst = (GLuint *) rb->Data + (y[i] * rb->RowStride + x[i]); *dst = src[i]; } } @@ -752,7 +833,7 @@ put_mono_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, ASSERT(rb->Format == MESA_FORMAT_RGBA8888); for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLuint *dst = (GLuint *) rb->Data + (y[i] * rb->Width + x[i]); + GLuint *dst = (GLuint *) rb->Data + (y[i] * rb->RowStride + x[i]); *dst = val; } } @@ -764,27 +845,6 @@ put_mono_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, * Typically accum buffer. */ -static void * -get_pointer_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLint x, GLint y) -{ - if (!rb->Data) - return NULL; - ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); - return (GLushort *) rb->Data + 4 * (y * rb->Width + x); -} - - -static void -get_row_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, - GLint x, GLint y, void *values) -{ - const GLshort *src = (const GLshort *) rb->Data + 4 * (y * rb->Width + x); - ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); - memcpy(values, src, 4 * count * sizeof(GLshort)); -} - - static void get_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, const GLint x[], const GLint y[], void *values) @@ -794,7 +854,7 @@ get_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint co ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); for (i = 0; i < count; i++) { const GLushort *src - = (GLushort *) rb->Data + 4 * (y[i] * rb->Width + x[i]); + = (GLushort *) rb->Data + 4 * (y[i] * rb->RowStride + x[i]); dst[i] = *src; } } @@ -805,7 +865,7 @@ put_row_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count GLint x, GLint y, const void *values, const GLubyte *mask) { const GLushort *src = (const GLushort *) values; - GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->Width + x); + GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->RowStride + x); ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); if (mask) { GLuint i; @@ -830,7 +890,7 @@ put_row_rgb_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint c { /* Put RGB values in RGBA buffer */ const GLushort *src = (const GLushort *) values; - GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->Width + x); + GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->RowStride + x); ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); if (mask) { GLuint i; @@ -857,7 +917,7 @@ put_mono_row_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint const GLushort val1 = ((const GLushort *) value)[1]; const GLushort val2 = ((const GLushort *) value)[2]; const GLushort val3 = ((const GLushort *) value)[3]; - GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->Width + x); + GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->RowStride + x); ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); if (!mask && val0 == 0 && val1 == 0 && val2 == 0 && val3 == 0) { /* common case for clearing accum buffer */ @@ -887,7 +947,8 @@ put_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint co ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLushort *dst = (GLushort *) rb->Data + 4 * (y[i] * rb->Width + x[i]); + GLushort *dst = + ((GLushort *) rb->Data) + 4 * (y[i] * rb->RowStride + x[i]); dst[0] = src[i * 4 + 0]; dst[1] = src[i * 4 + 1]; dst[2] = src[i * 4 + 2]; @@ -910,7 +971,8 @@ put_mono_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT); for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLushort *dst = (GLushort *) rb->Data + 4 * (y[i] * rb->Width + x[i]); + GLushort *dst = ((GLushort *) rb->Data) + + 4 * (y[i] * rb->RowStride + x[i]); dst[0] = val0; dst[1] = val1; dst[2] = val2; @@ -919,39 +981,410 @@ put_mono_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, } } +/********************************************************************** + * Functions for MESA_FORMAT_R8. + */ +static void +get_row_r8(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + const GLubyte *src = rb->GetPointer(ctx, rb, x, y); + GLuint *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + dst[i] = 0xff000000 | src[i]; + } +} + +static void +get_values_r8(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + GLuint *dst = (GLuint *) values; + GLuint i; + + for (i = 0; i < count; i++) { + const GLubyte *src = rb->GetPointer(ctx, rb, x[i], y[i]); + dst[i] = 0xff000000 | *src; + } +} + +/********************************************************************** + * Functions for MESA_FORMAT_RG88. + */ +static void +get_row_rg88(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + const GLushort *src = rb->GetPointer(ctx, rb, x, y); + GLuint *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + dst[i] = 0xff000000 | src[i]; + } +} + +static void +get_values_rg88(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], void *values) +{ + GLuint *dst = (GLuint *) values; + GLuint i; + + for (i = 0; i < count; i++) { + const GLshort *src = rb->GetPointer(ctx, rb, x[i], y[i]); + dst[i] = 0xff000000 | *src; + } +} + +/********************************************************************** + * Functions for MESA_FORMAT_R16. + */ +static void +get_row_r16(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + const GLushort *src = rb->GetPointer(ctx, rb, x, y); + GLushort *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + dst[i * 4 + RCOMP] = src[i]; + dst[i * 4 + GCOMP] = 0; + dst[i * 4 + BCOMP] = 0; + dst[i * 4 + ACOMP] = 0xffff; + } +} + +static void +get_values_r16(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, + const GLint x[], const GLint y[], void *values) +{ + GLushort *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + const GLushort *src = rb->GetPointer(ctx, rb, x[i], y[i]); + dst[i * 4 + RCOMP] = *src; + dst[i * 4 + GCOMP] = 0; + dst[i * 4 + BCOMP] = 0; + dst[i * 4 + ACOMP] = 0xffff; + } +} + +/********************************************************************** + * Functions for MESA_FORMAT_RG1616. + */ +static void +get_row_rg1616(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, + GLint x, GLint y, void *values) +{ + const GLushort *src = rb->GetPointer(ctx, rb, x, y); + GLushort *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + dst[i * 4 + RCOMP] = src[i * 2]; + dst[i * 4 + GCOMP] = src[i * 2 + 1]; + dst[i * 4 + BCOMP] = 0; + dst[i * 4 + ACOMP] = 0xffff; + } +} + +static void +get_values_rg1616(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], void *values) +{ + GLushort *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + const GLshort *src = rb->GetPointer(ctx, rb, x[i], y[i]); + dst[i * 4 + RCOMP] = src[0]; + dst[i * 4 + GCOMP] = src[1]; + dst[i * 4 + BCOMP] = 0; + dst[i * 4 + ACOMP] = 0xffff; + } +} + +/********************************************************************** + * Functions for MESA_FORMAT_INTENSITY_FLOAT32. + */ +static void +get_row_i_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, void *values) +{ + const GLfloat *src = rb->GetPointer(ctx, rb, x, y); + GLfloat *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + dst[i * 4 + RCOMP] = + dst[i * 4 + GCOMP] = + dst[i * 4 + BCOMP] = + dst[i * 4 + ACOMP] = src[i]; + } +} +static void +get_values_i_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + void *values) +{ + GLfloat *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + const GLfloat *src = rb->GetPointer(ctx, rb, x[i], y[i]); + dst[i * 4 + RCOMP] = + dst[i * 4 + GCOMP] = + dst[i * 4 + BCOMP] = + dst[i * 4 + ACOMP] = src[0]; + } +} + +/********************************************************************** + * Functions for MESA_FORMAT_LUMINANCE_FLOAT32. + */ +static void +get_row_l_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, void *values) +{ + const GLfloat *src = rb->GetPointer(ctx, rb, x, y); + GLfloat *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + dst[i * 4 + RCOMP] = + dst[i * 4 + GCOMP] = + dst[i * 4 + BCOMP] = src[i]; + dst[i * 4 + ACOMP] = 1.0; + } +} + +static void +get_values_l_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + void *values) +{ + GLfloat *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + const GLfloat *src = rb->GetPointer(ctx, rb, x[i], y[i]); + dst[i * 4 + RCOMP] = + dst[i * 4 + GCOMP] = + dst[i * 4 + BCOMP] = src[0]; + dst[i * 4 + ACOMP] = 1.0; + } +} + +/********************************************************************** + * Functions for MESA_FORMAT_ALPHA_FLOAT32. + */ +static void +get_row_a_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, void *values) +{ + const GLfloat *src = rb->GetPointer(ctx, rb, x, y); + GLfloat *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + dst[i * 4 + RCOMP] = 0.0; + dst[i * 4 + GCOMP] = 0.0; + dst[i * 4 + BCOMP] = 0.0; + dst[i * 4 + ACOMP] = src[i]; + } +} + +static void +get_values_a_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + void *values) +{ + GLfloat *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + const GLfloat *src = rb->GetPointer(ctx, rb, x[i], y[i]); + dst[i * 4 + RCOMP] = 0.0; + dst[i * 4 + GCOMP] = 0.0; + dst[i * 4 + BCOMP] = 0.0; + dst[i * 4 + ACOMP] = src[0]; + } +} + +static void +put_row_a_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, + const void *values, const GLubyte *mask) +{ + float *dst = rb->GetPointer(ctx, rb, x, y); + const float *src = values; + unsigned int i; + + if (mask) { + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i] = src[i * 4 + ACOMP]; + } + } + } + else { + for (i = 0; i < count; i++) { + dst[i] = src[i * 4 + ACOMP]; + } + } +} + +static void +put_mono_row_a_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, + const void *value, const GLubyte *mask) +{ + float *dst = rb->GetPointer(ctx, rb, x, y); + const float *src = value; + unsigned int i; + + if (mask) { + for (i = 0; i < count; i++) { + if (mask[i]) { + dst[i] = src[ACOMP]; + } + } + } + else { + for (i = 0; i < count; i++) { + dst[i] = src[ACOMP]; + } + } +} + +static void +put_values_a_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *values, const GLubyte *mask) +{ + const float *src = values; + unsigned int i; + + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + float *dst = rb->GetPointer(ctx, rb, x[i], y[i]); + + *dst = src[i * 4 + ACOMP]; + } + } +} + +static void +put_mono_values_a_float32(struct gl_context *ctx, + struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + const void *value, const GLubyte *mask) +{ + const float *src = value; + unsigned int i; + + for (i = 0; i < count; i++) { + if (!mask || mask[i]) { + float *dst = rb->GetPointer(ctx, rb, x[i], y[i]); + *dst = src[ACOMP]; + } + } +} + +/********************************************************************** + * Functions for MESA_FORMAT_R_FLOAT32. + */ +static void +get_row_r_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, void *values) +{ + const GLfloat *src = rb->GetPointer(ctx, rb, x, y); + GLfloat *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + dst[i * 4 + RCOMP] = src[i]; + dst[i * 4 + GCOMP] = 0.0; + dst[i * 4 + BCOMP] = 0.0; + dst[i * 4 + ACOMP] = 1.0; + } +} + +static void +get_values_r_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + void *values) +{ + GLfloat *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + const GLfloat *src = rb->GetPointer(ctx, rb, x[i], y[i]); + dst[i * 4 + RCOMP] = src[0]; + dst[i * 4 + GCOMP] = 0.0; + dst[i * 4 + BCOMP] = 0.0; + dst[i * 4 + ACOMP] = 1.0; + } +} + +/********************************************************************** + * Functions for MESA_FORMAT_RG_FLOAT32. + */ +static void +get_row_rg_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, void *values) +{ + const GLfloat *src = rb->GetPointer(ctx, rb, x, y); + GLfloat *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + dst[i * 4 + RCOMP] = src[i * 2 + 0]; + dst[i * 4 + GCOMP] = src[i * 2 + 1]; + dst[i * 4 + BCOMP] = 0.0; + dst[i * 4 + ACOMP] = 1.0; + } +} + +static void +get_values_rg_float32(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], + void *values) +{ + GLfloat *dst = values; + GLuint i; + + for (i = 0; i < count; i++) { + const GLfloat *src = rb->GetPointer(ctx, rb, x[i], y[i]); + dst[i * 4 + RCOMP] = src[0]; + dst[i * 4 + GCOMP] = src[1]; + dst[i * 4 + BCOMP] = 0.0; + dst[i * 4 + ACOMP] = 1.0; + } +} /** - * This is a software fallback for the gl_renderbuffer->AllocStorage - * function. - * Device drivers will typically override this function for the buffers - * which it manages (typically color buffers, Z and stencil). - * Other buffers (like software accumulation and aux buffers) which the driver - * doesn't manage can be handled with this function. - * - * This one multi-purpose function can allocate stencil, depth, accum, color - * or color-index buffers! + * This is the default software fallback for gl_renderbuffer's span + * access functions. * - * This function also plugs in the appropriate GetPointer, Get/PutRow and - * Get/PutValues functions. + * The assumptions are that rb->Data will be a pointer to (0,0), that pixels + * are packed in the type of rb->Format, and that subsequent rows appear + * rb->RowStride pixels later. */ -GLboolean -_mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb, - GLenum internalFormat, - GLuint width, GLuint height) +void +_mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) { - GLuint pixelSize; + rb->GetPointer = get_pointer_generic; + rb->GetRow = get_row_generic; - switch (internalFormat) { - 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: - rb->Format = MESA_FORMAT_RGB888; + switch (rb->Format) { + case MESA_FORMAT_RGB888: rb->DataType = GL_UNSIGNED_BYTE; rb->GetPointer = get_pointer_ubyte3; rb->GetRow = get_row_ubyte3; @@ -961,135 +1394,271 @@ _mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer * rb->PutMonoRow = put_mono_row_ubyte3; rb->PutValues = put_values_ubyte3; rb->PutMonoValues = put_mono_values_ubyte3; - pixelSize = 3 * sizeof(GLubyte); break; - case GL_RGBA: - case GL_RGBA2: - case GL_RGBA4: - case GL_RGB5_A1: - case GL_RGBA8: -#if 1 - case GL_RGB10_A2: - case GL_RGBA12: -#endif - rb->Format = MESA_FORMAT_RGBA8888; + + case MESA_FORMAT_RGBA8888: rb->DataType = GL_UNSIGNED_BYTE; - rb->GetPointer = get_pointer_ubyte4; - rb->GetRow = get_row_ubyte4; rb->GetValues = get_values_ubyte4; rb->PutRow = put_row_ubyte4; rb->PutRowRGB = put_row_rgb_ubyte4; rb->PutMonoRow = put_mono_row_ubyte4; rb->PutValues = put_values_ubyte4; rb->PutMonoValues = put_mono_values_ubyte4; - pixelSize = 4 * sizeof(GLubyte); break; - case GL_RGBA16: - case GL_RGBA16_SNORM: - /* for accum buffer */ - rb->Format = MESA_FORMAT_SIGNED_RGBA_16; + + case MESA_FORMAT_R8: + rb->DataType = GL_UNSIGNED_BYTE; + rb->GetValues = get_values_r8; + rb->GetRow = get_row_r8; + rb->PutRow = put_row_generic; + rb->PutRowRGB = put_row_generic; + rb->PutMonoRow = put_mono_row_generic; + rb->PutValues = put_values_generic; + rb->PutMonoValues = put_mono_values_generic; + break; + + case MESA_FORMAT_RG88: + rb->DataType = GL_UNSIGNED_BYTE; + rb->GetValues = get_values_rg88; + rb->GetRow = get_row_rg88; + rb->PutRow = put_row_generic; + rb->PutRowRGB = put_row_generic; + rb->PutMonoRow = put_mono_row_generic; + rb->PutValues = put_values_generic; + rb->PutMonoValues = put_mono_values_generic; + break; + + case MESA_FORMAT_R16: + rb->DataType = GL_UNSIGNED_SHORT; + rb->GetValues = get_values_r16; + rb->GetRow = get_row_r16; + rb->PutRow = put_row_generic; + rb->PutRowRGB = put_row_generic; + rb->PutMonoRow = put_mono_row_generic; + rb->PutValues = put_values_generic; + rb->PutMonoValues = put_mono_values_generic; + break; + + case MESA_FORMAT_RG1616: + rb->DataType = GL_UNSIGNED_SHORT; + rb->GetValues = get_values_rg1616; + rb->GetRow = get_row_rg1616; + rb->PutRow = put_row_generic; + rb->PutRowRGB = put_row_generic; + rb->PutMonoRow = put_mono_row_generic; + rb->PutValues = put_values_generic; + rb->PutMonoValues = put_mono_values_generic; + break; + + case MESA_FORMAT_SIGNED_RGBA_16: rb->DataType = GL_SHORT; - rb->GetPointer = get_pointer_ushort4; - rb->GetRow = get_row_ushort4; rb->GetValues = get_values_ushort4; rb->PutRow = put_row_ushort4; rb->PutRowRGB = put_row_rgb_ushort4; rb->PutMonoRow = put_mono_row_ushort4; rb->PutValues = put_values_ushort4; rb->PutMonoValues = put_mono_values_ushort4; - pixelSize = 4 * sizeof(GLushort); break; + #if 0 - case GL_ALPHA8: - rb->Format = MESA_FORMAT_A8; + case MESA_FORMAT_A8: rb->DataType = GL_UNSIGNED_BYTE; - rb->GetPointer = get_pointer_alpha8; - rb->GetRow = get_row_alpha8; rb->GetValues = get_values_alpha8; rb->PutRow = put_row_alpha8; rb->PutRowRGB = NULL; rb->PutMonoRow = put_mono_row_alpha8; rb->PutValues = put_values_alpha8; rb->PutMonoValues = put_mono_values_alpha8; - pixelSize = sizeof(GLubyte); break; #endif - case GL_STENCIL_INDEX: - case GL_STENCIL_INDEX1_EXT: - case GL_STENCIL_INDEX4_EXT: - case GL_STENCIL_INDEX8_EXT: - case GL_STENCIL_INDEX16_EXT: - rb->Format = MESA_FORMAT_S8; + + case MESA_FORMAT_S8: rb->DataType = GL_UNSIGNED_BYTE; - rb->GetPointer = get_pointer_ubyte; - rb->GetRow = get_row_ubyte; rb->GetValues = get_values_ubyte; rb->PutRow = put_row_ubyte; rb->PutRowRGB = NULL; rb->PutMonoRow = put_mono_row_ubyte; rb->PutValues = put_values_ubyte; rb->PutMonoValues = put_mono_values_ubyte; - pixelSize = sizeof(GLubyte); break; - case GL_DEPTH_COMPONENT: - case GL_DEPTH_COMPONENT16: - rb->Format = MESA_FORMAT_Z16; + + case MESA_FORMAT_Z16: rb->DataType = GL_UNSIGNED_SHORT; - rb->GetPointer = get_pointer_ushort; - rb->GetRow = get_row_ushort; rb->GetValues = get_values_ushort; rb->PutRow = put_row_ushort; rb->PutRowRGB = NULL; rb->PutMonoRow = put_mono_row_ushort; rb->PutValues = put_values_ushort; rb->PutMonoValues = put_mono_values_ushort; - pixelSize = sizeof(GLushort); break; - case GL_DEPTH_COMPONENT24: + + case MESA_FORMAT_Z32: + case MESA_FORMAT_X8_Z24: + case MESA_FORMAT_Z24_X8: rb->DataType = GL_UNSIGNED_INT; - rb->GetPointer = get_pointer_uint; - rb->GetRow = get_row_uint; rb->GetValues = get_values_uint; rb->PutRow = put_row_uint; rb->PutRowRGB = NULL; rb->PutMonoRow = put_mono_row_uint; rb->PutValues = put_values_uint; rb->PutMonoValues = put_mono_values_uint; - rb->Format = MESA_FORMAT_X8_Z24; - pixelSize = sizeof(GLuint); break; - case GL_DEPTH_COMPONENT32: - rb->DataType = GL_UNSIGNED_INT; - rb->GetPointer = get_pointer_uint; - rb->GetRow = get_row_uint; + + case MESA_FORMAT_Z24_S8: + case MESA_FORMAT_S8_Z24: + rb->DataType = GL_UNSIGNED_INT_24_8_EXT; rb->GetValues = get_values_uint; rb->PutRow = put_row_uint; rb->PutRowRGB = NULL; rb->PutMonoRow = put_mono_row_uint; rb->PutValues = put_values_uint; rb->PutMonoValues = put_mono_values_uint; + break; + + case MESA_FORMAT_RGBA_FLOAT32: + rb->GetRow = get_row_generic; + rb->GetValues = get_values_generic; + rb->PutRow = put_row_generic; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_generic; + rb->PutValues = put_values_generic; + rb->PutMonoValues = put_mono_values_generic; + break; + + case MESA_FORMAT_INTENSITY_FLOAT32: + rb->GetRow = get_row_i_float32; + rb->GetValues = get_values_i_float32; + rb->PutRow = put_row_generic; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_generic; + rb->PutValues = put_values_generic; + rb->PutMonoValues = put_mono_values_generic; + break; + + case MESA_FORMAT_LUMINANCE_FLOAT32: + rb->GetRow = get_row_l_float32; + rb->GetValues = get_values_l_float32; + rb->PutRow = put_row_generic; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_generic; + rb->PutValues = put_values_generic; + rb->PutMonoValues = put_mono_values_generic; + break; + + case MESA_FORMAT_ALPHA_FLOAT32: + rb->GetRow = get_row_a_float32; + rb->GetValues = get_values_a_float32; + rb->PutRow = put_row_a_float32; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_a_float32; + rb->PutValues = put_values_a_float32; + rb->PutMonoValues = put_mono_values_a_float32; + break; + + case MESA_FORMAT_RG_FLOAT32: + rb->GetRow = get_row_rg_float32; + rb->GetValues = get_values_rg_float32; + rb->PutRow = put_row_generic; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_generic; + rb->PutValues = put_values_generic; + rb->PutMonoValues = put_mono_values_generic; + break; + + case MESA_FORMAT_R_FLOAT32: + rb->GetRow = get_row_r_float32; + rb->GetValues = get_values_r_float32; + rb->PutRow = put_row_generic; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_generic; + rb->PutValues = put_values_generic; + rb->PutMonoValues = put_mono_values_generic; + break; + + default: + break; + } +} + +/** + * This is a software fallback for the gl_renderbuffer->AllocStorage + * function. + * Device drivers will typically override this function for the buffers + * which it manages (typically color buffers, Z and stencil). + * Other buffers (like software accumulation and aux buffers) which the driver + * doesn't manage can be handled with this function. + * + * This one multi-purpose function can allocate stencil, depth, accum, color + * or color-index buffers! + * + * This function also plugs in the appropriate GetPointer, Get/PutRow and + * Get/PutValues functions. + */ +GLboolean +_mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLenum internalFormat, + GLuint width, GLuint height) +{ + switch (internalFormat) { + 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: + rb->Format = MESA_FORMAT_RGB888; + break; + case GL_RGBA: + case GL_RGBA2: + case GL_RGBA4: + case GL_RGB5_A1: + case GL_RGBA8: +#if 1 + case GL_RGB10_A2: + case GL_RGBA12: +#endif + rb->Format = MESA_FORMAT_RGBA8888; + break; + case GL_RGBA16: + case GL_RGBA16_SNORM: + /* for accum buffer */ + rb->Format = MESA_FORMAT_SIGNED_RGBA_16; + break; +#if 0 + case GL_ALPHA8: + rb->Format = MESA_FORMAT_A8; + break; +#endif + case GL_STENCIL_INDEX: + case GL_STENCIL_INDEX1_EXT: + case GL_STENCIL_INDEX4_EXT: + case GL_STENCIL_INDEX8_EXT: + case GL_STENCIL_INDEX16_EXT: + rb->Format = MESA_FORMAT_S8; + break; + case GL_DEPTH_COMPONENT: + case GL_DEPTH_COMPONENT16: + rb->Format = MESA_FORMAT_Z16; + break; + case GL_DEPTH_COMPONENT24: + rb->Format = MESA_FORMAT_X8_Z24; + break; + case GL_DEPTH_COMPONENT32: rb->Format = MESA_FORMAT_Z32; - pixelSize = sizeof(GLuint); break; case GL_DEPTH_STENCIL_EXT: case GL_DEPTH24_STENCIL8_EXT: rb->Format = MESA_FORMAT_Z24_S8; - rb->DataType = GL_UNSIGNED_INT_24_8_EXT; - rb->GetPointer = get_pointer_uint; - rb->GetRow = get_row_uint; - rb->GetValues = get_values_uint; - rb->PutRow = put_row_uint; - rb->PutRowRGB = NULL; - rb->PutMonoRow = put_mono_row_uint; - rb->PutValues = put_values_uint; - rb->PutMonoValues = put_mono_values_uint; - pixelSize = sizeof(GLuint); break; default: /* unsupported format */ return GL_FALSE; } + _mesa_set_renderbuffer_accessors(rb); + ASSERT(rb->DataType); ASSERT(rb->GetPointer); ASSERT(rb->GetRow); @@ -1105,16 +1674,19 @@ _mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer * rb->Data = NULL; } + rb->RowStride = width; + if (width > 0 && height > 0) { /* allocate new buffer storage */ - rb->Data = malloc(width * height * pixelSize); + rb->Data = malloc(width * height * _mesa_get_format_bytes(rb->Format)); if (rb->Data == NULL) { rb->Width = 0; rb->Height = 0; + rb->RowStride = 0; _mesa_error(ctx, GL_OUT_OF_MEMORY, "software renderbuffer allocation (%d x %d x %d)", - width, height, pixelSize); + width, height, _mesa_get_format_bytes(rb->Format)); return GL_FALSE; } } @@ -1185,6 +1757,7 @@ alloc_storage_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, arb->Width = width; arb->Height = height; + arb->RowStride = width; return GL_TRUE; } @@ -1220,7 +1793,7 @@ get_row_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, GLuint count GLint x, GLint y, void *values) { /* NOTE: 'values' is RGBA format! */ - const GLubyte *src = (const GLubyte *) arb->Data + y * arb->Width + x; + const GLubyte *src = (const GLubyte *) arb->Data + y * arb->RowStride + x; GLubyte *dst = (GLubyte *) values; GLuint i; ASSERT(arb != arb->Wrapped); @@ -1246,7 +1819,7 @@ get_values_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, GLuint co arb->Wrapped->GetValues(ctx, arb->Wrapped, count, x, y, values); /* second, fill in alpha values from this buffer! */ for (i = 0; i < count; i++) { - const GLubyte *src = (GLubyte *) arb->Data + y[i] * arb->Width + x[i]; + const GLubyte *src = (GLubyte *) arb->Data + y[i] * arb->RowStride + x[i]; dst[i * 4 + 3] = *src; } } @@ -1257,7 +1830,7 @@ put_row_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, GLuint count GLint x, GLint y, const void *values, const GLubyte *mask) { const GLubyte *src = (const GLubyte *) values; - GLubyte *dst = (GLubyte *) arb->Data + y * arb->Width + x; + GLubyte *dst = (GLubyte *) arb->Data + y * arb->RowStride + x; GLuint i; ASSERT(arb != arb->Wrapped); ASSERT(arb->DataType == GL_UNSIGNED_BYTE); @@ -1277,7 +1850,7 @@ put_row_rgb_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, GLuint c GLint x, GLint y, const void *values, const GLubyte *mask) { const GLubyte *src = (const GLubyte *) values; - GLubyte *dst = (GLubyte *) arb->Data + y * arb->Width + x; + GLubyte *dst = (GLubyte *) arb->Data + y * arb->RowStride + x; GLuint i; ASSERT(arb != arb->Wrapped); ASSERT(arb->DataType == GL_UNSIGNED_BYTE); @@ -1297,7 +1870,7 @@ put_mono_row_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, GLuint GLint x, GLint y, const void *value, const GLubyte *mask) { const GLubyte val = ((const GLubyte *) value)[3]; - GLubyte *dst = (GLubyte *) arb->Data + y * arb->Width + x; + GLubyte *dst = (GLubyte *) arb->Data + y * arb->RowStride + x; ASSERT(arb != arb->Wrapped); ASSERT(arb->DataType == GL_UNSIGNED_BYTE); /* first, pass the call to the wrapped RGB buffer */ @@ -1331,7 +1904,7 @@ put_values_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, GLuint co /* second, store alpha in our buffer */ for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLubyte *dst = (GLubyte *) arb->Data + y[i] * arb->Width + x[i]; + GLubyte *dst = (GLubyte *) arb->Data + y[i] * arb->RowStride + x[i]; *dst = src[i * 4 + 3]; } } @@ -1352,7 +1925,7 @@ put_mono_values_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, /* second, store alpha in our buffer */ for (i = 0; i < count; i++) { if (!mask || mask[i]) { - GLubyte *dst = (GLubyte *) arb->Data + y[i] * arb->Width + x[i]; + GLubyte *dst = (GLubyte *) arb->Data + y[i] * arb->RowStride + x[i]; *dst = val; } } @@ -1366,8 +1939,9 @@ copy_buffer_alpha8(struct gl_renderbuffer* dst, struct gl_renderbuffer* src) ASSERT(src->Format == MESA_FORMAT_A8); ASSERT(dst->Width == src->Width); ASSERT(dst->Height == src->Height); + ASSERT(dst->RowStride == src->RowStride); - memcpy(dst->Data, src->Data, dst->Width * dst->Height * sizeof(GLubyte)); + memcpy(dst->Data, src->Data, dst->RowStride * dst->Height * sizeof(GLubyte)); } @@ -1395,7 +1969,6 @@ _mesa_init_renderbuffer(struct gl_renderbuffer *rb, GLuint name) { _glthread_INIT_MUTEX(rb->Mutex); - rb->Magic = RB_MAGIC; rb->ClassID = 0; rb->Name = name; rb->RefCount = 0; @@ -1970,9 +2543,7 @@ _mesa_reference_renderbuffer(struct gl_renderbuffer **ptr, GLboolean deleteFlag = GL_FALSE; struct gl_renderbuffer *oldRb = *ptr; - assert(oldRb->Magic == RB_MAGIC); _glthread_LOCK_MUTEX(oldRb->Mutex); - assert(oldRb->Magic == RB_MAGIC); ASSERT(oldRb->RefCount > 0); oldRb->RefCount--; /*printf("RB DECR %p (%d) to %d\n", (void*) oldRb, oldRb->Name, oldRb->RefCount);*/ @@ -1980,7 +2551,6 @@ _mesa_reference_renderbuffer(struct gl_renderbuffer **ptr, _glthread_UNLOCK_MUTEX(oldRb->Mutex); if (deleteFlag) { - oldRb->Magic = 0; /* now invalid memory! */ oldRb->Delete(oldRb); } @@ -1989,7 +2559,6 @@ _mesa_reference_renderbuffer(struct gl_renderbuffer **ptr, assert(!*ptr); if (rb) { - assert(rb->Magic == RB_MAGIC); /* reference new renderbuffer */ _glthread_LOCK_MUTEX(rb->Mutex); rb->RefCount++; diff --git a/mesalib/src/mesa/main/renderbuffer.h b/mesalib/src/mesa/main/renderbuffer.h index 12a06a58a..39d9b3035 100644 --- a/mesalib/src/mesa/main/renderbuffer.h +++ b/mesalib/src/mesa/main/renderbuffer.h @@ -1,113 +1,115 @@ -/*
- * Mesa 3-D graphics library
- * Version: 6.5
- *
- * Copyright (C) 1999-2005 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#ifndef RENDERBUFFER_H
-#define RENDERBUFFER_H
-
-#include "glheader.h"
-#include "mtypes.h"
-
-struct gl_context;
-struct gl_framebuffer;
-struct gl_renderbuffer;
-
-extern void
-_mesa_init_renderbuffer(struct gl_renderbuffer *rb, GLuint name);
-
-extern struct gl_renderbuffer *
-_mesa_new_renderbuffer(struct gl_context *ctx, GLuint name);
-
-extern void
-_mesa_delete_renderbuffer(struct gl_renderbuffer *rb);
-
-
-extern struct gl_renderbuffer *
-_mesa_new_soft_renderbuffer(struct gl_context *ctx, GLuint name);
-
-
-extern GLboolean
-_mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
- GLenum internalFormat,
- GLuint width, GLuint height);
-
-extern GLboolean
-_mesa_add_color_renderbuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
- GLuint rgbBits, GLuint alphaBits,
- GLboolean frontLeft, GLboolean backLeft,
- GLboolean frontRight, GLboolean backRight);
-
-extern GLboolean
-_mesa_add_alpha_renderbuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
- GLuint alphaBits,
- GLboolean frontLeft, GLboolean backLeft,
- GLboolean frontRight, GLboolean backRight);
-
-extern void
-_mesa_copy_soft_alpha_renderbuffers(struct gl_context *ctx, struct gl_framebuffer *fb);
-
-extern GLboolean
-_mesa_add_depth_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
- GLuint depthBits);
-
-extern GLboolean
-_mesa_add_stencil_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
- GLuint stencilBits);
-
-
-extern GLboolean
-_mesa_add_accum_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
- GLuint redBits, GLuint greenBits,
- GLuint blueBits, GLuint alphaBits);
-
-extern GLboolean
-_mesa_add_aux_renderbuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
- GLuint bits, GLuint numBuffers);
-
-extern void
-_mesa_add_soft_renderbuffers(struct gl_framebuffer *fb,
- GLboolean color,
- GLboolean depth,
- GLboolean stencil,
- GLboolean accum,
- GLboolean alpha,
- GLboolean aux);
-
-extern void
-_mesa_add_renderbuffer(struct gl_framebuffer *fb,
- gl_buffer_index bufferName, struct gl_renderbuffer *rb);
-
-extern void
-_mesa_remove_renderbuffer(struct gl_framebuffer *fb,
- gl_buffer_index bufferName);
-
-extern void
-_mesa_reference_renderbuffer(struct gl_renderbuffer **ptr,
- struct gl_renderbuffer *rb);
-
-extern struct gl_renderbuffer *
-_mesa_new_depthstencil_renderbuffer(struct gl_context *ctx, GLuint name);
-
-
-#endif /* RENDERBUFFER_H */
+/* + * Mesa 3-D graphics library + * Version: 6.5 + * + * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef RENDERBUFFER_H +#define RENDERBUFFER_H + +#include "glheader.h" +#include "mtypes.h" + +struct gl_context; +struct gl_framebuffer; +struct gl_renderbuffer; + +extern void +_mesa_init_renderbuffer(struct gl_renderbuffer *rb, GLuint name); + +extern struct gl_renderbuffer * +_mesa_new_renderbuffer(struct gl_context *ctx, GLuint name); + +extern void +_mesa_delete_renderbuffer(struct gl_renderbuffer *rb); + + +extern struct gl_renderbuffer * +_mesa_new_soft_renderbuffer(struct gl_context *ctx, GLuint name); + +extern void +_mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb); + +extern GLboolean +_mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLenum internalFormat, + GLuint width, GLuint height); + +extern GLboolean +_mesa_add_color_renderbuffers(struct gl_context *ctx, struct gl_framebuffer *fb, + GLuint rgbBits, GLuint alphaBits, + GLboolean frontLeft, GLboolean backLeft, + GLboolean frontRight, GLboolean backRight); + +extern GLboolean +_mesa_add_alpha_renderbuffers(struct gl_context *ctx, struct gl_framebuffer *fb, + GLuint alphaBits, + GLboolean frontLeft, GLboolean backLeft, + GLboolean frontRight, GLboolean backRight); + +extern void +_mesa_copy_soft_alpha_renderbuffers(struct gl_context *ctx, struct gl_framebuffer *fb); + +extern GLboolean +_mesa_add_depth_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb, + GLuint depthBits); + +extern GLboolean +_mesa_add_stencil_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb, + GLuint stencilBits); + + +extern GLboolean +_mesa_add_accum_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb, + GLuint redBits, GLuint greenBits, + GLuint blueBits, GLuint alphaBits); + +extern GLboolean +_mesa_add_aux_renderbuffers(struct gl_context *ctx, struct gl_framebuffer *fb, + GLuint bits, GLuint numBuffers); + +extern void +_mesa_add_soft_renderbuffers(struct gl_framebuffer *fb, + GLboolean color, + GLboolean depth, + GLboolean stencil, + GLboolean accum, + GLboolean alpha, + GLboolean aux); + +extern void +_mesa_add_renderbuffer(struct gl_framebuffer *fb, + gl_buffer_index bufferName, struct gl_renderbuffer *rb); + +extern void +_mesa_remove_renderbuffer(struct gl_framebuffer *fb, + gl_buffer_index bufferName); + +extern void +_mesa_reference_renderbuffer(struct gl_renderbuffer **ptr, + struct gl_renderbuffer *rb); + +extern struct gl_renderbuffer * +_mesa_new_depthstencil_renderbuffer(struct gl_context *ctx, GLuint name); + + +#endif /* RENDERBUFFER_H */ diff --git a/mesalib/src/mesa/main/samplerobj.c b/mesalib/src/mesa/main/samplerobj.c index 2d3879c06..4a28c917c 100644 --- a/mesalib/src/mesa/main/samplerobj.c +++ b/mesalib/src/mesa/main/samplerobj.c @@ -481,7 +481,7 @@ set_sampler_min_lod(struct gl_context *ctx, struct gl_sampler_object *samp, static GLuint set_sampler_max_lod(struct gl_context *ctx, struct gl_sampler_object *samp, - GLint param) + GLfloat param) { if (samp->MaxLod == param) return GL_FALSE; diff --git a/mesalib/src/mesa/main/samplerobj.h b/mesalib/src/mesa/main/samplerobj.h index ed495c376..a839010b7 100644 --- a/mesalib/src/mesa/main/samplerobj.h +++ b/mesalib/src/mesa/main/samplerobj.h @@ -28,6 +28,14 @@ struct dd_function_table; +static INLINE struct gl_sampler_object * +_mesa_get_samplerobj(struct gl_context *ctx, GLuint unit) +{ + if (ctx->Texture.Unit[unit].Sampler) + return ctx->Texture.Unit[unit].Sampler; + else + return &ctx->Texture.Unit[unit]._Current->Sampler; +} extern void _mesa_reference_sampler_object(struct gl_context *ctx, diff --git a/mesalib/src/mesa/main/texformat.c b/mesalib/src/mesa/main/texformat.c index 97b905fd3..cbebec9aa 100644 --- a/mesalib/src/mesa/main/texformat.c +++ b/mesalib/src/mesa/main/texformat.c @@ -327,36 +327,52 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat, switch (internalFormat) { case GL_ALPHA16F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); break; case GL_ALPHA32F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); break; case GL_LUMINANCE16F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); break; case GL_LUMINANCE32F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); break; case GL_LUMINANCE_ALPHA16F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); break; case GL_LUMINANCE_ALPHA32F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); break; case GL_INTENSITY16F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); break; case GL_INTENSITY32F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); break; case GL_RGB16F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); break; case GL_RGB32F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); break; case GL_RGBA16F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); break; case GL_RGBA32F_ARB: RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); @@ -605,7 +621,11 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat, switch (internalFormat) { case GL_R8: case GL_RED: + RETURN_IF_SUPPORTED(MESA_FORMAT_R8); + break; + case GL_COMPRESSED_RED: + RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1); RETURN_IF_SUPPORTED(MESA_FORMAT_R8); break; @@ -615,7 +635,11 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat, case GL_RG: case GL_RG8: + RETURN_IF_SUPPORTED(MESA_FORMAT_RG88); + break; + case GL_COMPRESSED_RG: + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2); RETURN_IF_SUPPORTED(MESA_FORMAT_RG88); break; @@ -631,13 +655,23 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat, if (ctx->Extensions.ARB_texture_rg && ctx->Extensions.ARB_texture_float) { switch (internalFormat) { case GL_R16F: - return MESA_FORMAT_R_FLOAT16; + RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); + break; case GL_R32F: - return MESA_FORMAT_R_FLOAT32; + RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); + break; case GL_RG16F: - return MESA_FORMAT_RG_FLOAT16; + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16); + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); + break; case GL_RG32F: - return MESA_FORMAT_RG_FLOAT32; + RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32); + RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32); + break; default: ; /* fallthrough */ diff --git a/mesalib/src/mesa/main/texgetimage.c b/mesalib/src/mesa/main/texgetimage.c index 0436f09e1..467baa20a 100644 --- a/mesalib/src/mesa/main/texgetimage.c +++ b/mesalib/src/mesa/main/texgetimage.c @@ -1,920 +1,948 @@ -/*
- * Mesa 3-D graphics library
- * Version: 7.7
- *
- * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
- * Copyright (c) 2009 VMware, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/**
- * Code for glGetTexImage() and glGetCompressedTexImage().
- */
-
-
-#include "glheader.h"
-#include "bufferobj.h"
-#include "enums.h"
-#include "context.h"
-#include "formats.h"
-#include "image.h"
-#include "mfeatures.h"
-#include "mtypes.h"
-#include "pack.h"
-#include "pbo.h"
-#include "texgetimage.h"
-#include "teximage.h"
-
-
-
-/**
- * Can the given type represent negative values?
- */
-static INLINE GLboolean
-type_with_negative_values(GLenum type)
-{
- switch (type) {
- case GL_BYTE:
- case GL_SHORT:
- case GL_INT:
- case GL_FLOAT:
- case GL_HALF_FLOAT_ARB:
- return GL_TRUE;
- default:
- return GL_FALSE;
- }
-}
-
-
-/**
- * glGetTexImage for color index pixels.
- */
-static void
-get_tex_color_index(struct gl_context *ctx, GLuint dimensions,
- GLenum format, GLenum type, GLvoid *pixels,
- const struct gl_texture_image *texImage)
-{
- const GLint width = texImage->Width;
- const GLint height = texImage->Height;
- const GLint depth = texImage->Depth;
- const GLint rowstride = texImage->RowStride;
- const GLuint indexBits =
- _mesa_get_format_bits(texImage->TexFormat, GL_TEXTURE_INDEX_SIZE_EXT);
- const GLbitfield transferOps = 0x0;
- GLint img, row, col;
-
- for (img = 0; img < depth; img++) {
- for (row = 0; row < height; row++) {
- GLuint indexRow[MAX_WIDTH] = { 0 };
- void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels,
- width, height, format, type,
- img, row, 0);
- assert(dest);
-
- if (indexBits == 8) {
- const GLubyte *src = (const GLubyte *) texImage->Data;
- src += rowstride * (img * height + row);
- for (col = 0; col < width; col++) {
- indexRow[col] = src[col];
- }
- }
- else if (indexBits == 16) {
- const GLushort *src = (const GLushort *) texImage->Data;
- src += rowstride * (img * height + row);
- for (col = 0; col < width; col++) {
- indexRow[col] = src[col];
- }
- }
- else {
- _mesa_problem(ctx, "Color index problem in _mesa_GetTexImage");
- }
- _mesa_pack_index_span(ctx, width, type, dest,
- indexRow, &ctx->Pack, transferOps);
- }
- }
-}
-
-
-/**
- * glGetTexImage for depth/Z pixels.
- */
-static void
-get_tex_depth(struct gl_context *ctx, GLuint dimensions,
- GLenum format, GLenum type, GLvoid *pixels,
- const struct gl_texture_image *texImage)
-{
- const GLint width = texImage->Width;
- const GLint height = texImage->Height;
- const GLint depth = texImage->Depth;
- GLint img, row, col;
- GLfloat *depthRow = (GLfloat *) malloc(width * sizeof(GLfloat));
-
- if (!depthRow) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGetTexImage");
- return;
- }
-
- for (img = 0; img < depth; img++) {
- for (row = 0; row < height; row++) {
- void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels,
- width, height, format, type,
- img, row, 0);
- assert(dest);
-
- for (col = 0; col < width; col++) {
- texImage->FetchTexelf(texImage, col, row, img, depthRow + col);
- }
- _mesa_pack_depth_span(ctx, width, dest, type, depthRow, &ctx->Pack);
- }
- }
-
- free(depthRow);
-}
-
-
-/**
- * glGetTexImage for depth/stencil pixels.
- */
-static void
-get_tex_depth_stencil(struct gl_context *ctx, GLuint dimensions,
- GLenum format, GLenum type, GLvoid *pixels,
- const struct gl_texture_image *texImage)
-{
- const GLint width = texImage->Width;
- const GLint height = texImage->Height;
- const GLint depth = texImage->Depth;
- const GLint rowstride = texImage->RowStride;
- const GLuint *src = (const GLuint *) texImage->Data;
- GLint img, row;
-
- for (img = 0; img < depth; img++) {
- for (row = 0; row < height; row++) {
- void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels,
- width, height, format, type,
- img, row, 0);
- memcpy(dest, src, width * sizeof(GLuint));
- if (ctx->Pack.SwapBytes) {
- _mesa_swap4((GLuint *) dest, width);
- }
-
- src += rowstride;
- }
- }
-}
-
-
-/**
- * glGetTexImage for YCbCr pixels.
- */
-static void
-get_tex_ycbcr(struct gl_context *ctx, GLuint dimensions,
- GLenum format, GLenum type, GLvoid *pixels,
- const struct gl_texture_image *texImage)
-{
- const GLint width = texImage->Width;
- const GLint height = texImage->Height;
- const GLint depth = texImage->Depth;
- const GLint rowstride = texImage->RowStride;
- const GLushort *src = (const GLushort *) texImage->Data;
- GLint img, row;
-
- for (img = 0; img < depth; img++) {
- for (row = 0; row < height; row++) {
- void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels,
- width, height, format, type,
- img, row, 0);
- memcpy(dest, src, width * sizeof(GLushort));
-
- /* check for byte swapping */
- if ((texImage->TexFormat == MESA_FORMAT_YCBCR
- && type == GL_UNSIGNED_SHORT_8_8_REV_MESA) ||
- (texImage->TexFormat == MESA_FORMAT_YCBCR_REV
- && type == GL_UNSIGNED_SHORT_8_8_MESA)) {
- if (!ctx->Pack.SwapBytes)
- _mesa_swap2((GLushort *) dest, width);
- }
- else if (ctx->Pack.SwapBytes) {
- _mesa_swap2((GLushort *) dest, width);
- }
-
- src += rowstride;
- }
- }
-}
-
-
-#if FEATURE_EXT_texture_sRGB
-
-
-/**
- * Convert a float value from linear space to a
- * non-linear sRGB value in [0, 255].
- * Not terribly efficient.
- */
-static INLINE GLfloat
-linear_to_nonlinear(GLfloat cl)
-{
- /* can't have values outside [0, 1] */
- GLfloat cs;
- if (cl < 0.0031308f) {
- cs = 12.92f * cl;
- }
- else {
- cs = (GLfloat)(1.055 * pow(cl, 0.41666) - 0.055);
- }
- return cs;
-}
-
-
-/**
- * glGetTexImagefor sRGB pixels;
- */
-static void
-get_tex_srgb(struct gl_context *ctx, GLuint dimensions,
- GLenum format, GLenum type, GLvoid *pixels,
- const struct gl_texture_image *texImage)
-{
- const GLint width = texImage->Width;
- const GLint height = texImage->Height;
- const GLint depth = texImage->Depth;
- const GLbitfield transferOps = 0x0;
- GLint img, row;
- GLfloat (*rgba)[4] = (GLfloat (*)[4]) malloc(4 * width * sizeof(GLfloat));
-
- if (!rgba) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGetTexImage");
- return;
- }
-
- for (img = 0; img < depth; img++) {
- for (row = 0; row < height; row++) {
- void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels,
- width, height, format, type,
- img, row, 0);
-
- GLint col;
-
- /* convert row to RGBA format */
- for (col = 0; col < width; col++) {
- texImage->FetchTexelf(texImage, col, row, img, rgba[col]);
- if (texImage->_BaseFormat == GL_LUMINANCE) {
- rgba[col][RCOMP] = linear_to_nonlinear(rgba[col][RCOMP]);
- rgba[col][GCOMP] = 0.0;
- rgba[col][BCOMP] = 0.0;
- }
- else if (texImage->_BaseFormat == GL_LUMINANCE_ALPHA) {
- rgba[col][RCOMP] = linear_to_nonlinear(rgba[col][RCOMP]);
- rgba[col][GCOMP] = 0.0;
- rgba[col][BCOMP] = 0.0;
- }
- else if (texImage->_BaseFormat == GL_RGB ||
- texImage->_BaseFormat == GL_RGBA) {
- rgba[col][RCOMP] = linear_to_nonlinear(rgba[col][RCOMP]);
- rgba[col][GCOMP] = linear_to_nonlinear(rgba[col][GCOMP]);
- rgba[col][BCOMP] = linear_to_nonlinear(rgba[col][BCOMP]);
- }
- }
- _mesa_pack_rgba_span_float(ctx, width, (GLfloat (*)[4]) rgba,
- format, type, dest,
- &ctx->Pack, transferOps);
- }
- }
-
- free(rgba);
-}
-
-
-#else /* FEATURE_EXT_texture_sRGB */
-
-
-static INLINE void
-get_tex_srgb(struct gl_context *ctx, GLuint dimensions,
- GLenum format, GLenum type, GLvoid *pixels,
- const struct gl_texture_image *texImage)
-{
- ASSERT_NO_FEATURE();
-}
-
-
-#endif /* FEATURE_EXT_texture_sRGB */
-
-
-/**
- * glGetTexImagefor RGBA, Luminance, etc. pixels.
- * This is the slow way since we use texture sampling.
- */
-static void
-get_tex_rgba(struct gl_context *ctx, GLuint dimensions,
- GLenum format, GLenum type, GLvoid *pixels,
- const struct gl_texture_image *texImage)
-{
- const GLint width = texImage->Width;
- const GLint height = texImage->Height;
- const GLint depth = texImage->Depth;
- /* Normally, no pixel transfer ops are performed during glGetTexImage.
- * The only possible exception is component clamping to [0,1].
- */
- GLbitfield transferOps = 0x0;
- GLint img, row;
- GLfloat (*rgba)[4] = (GLfloat (*)[4]) malloc(4 * width * sizeof(GLfloat));
-
- if (!rgba) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGetTexImage");
- return;
- }
-
- for (img = 0; img < depth; img++) {
- for (row = 0; row < height; row++) {
- void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels,
- width, height, format, type,
- img, row, 0);
- GLint col;
- GLenum dataType = _mesa_get_format_datatype(texImage->TexFormat);
-
- /* clamp does not apply to GetTexImage (final conversion)?
- * Looks like we need clamp though when going from format
- * containing negative values to unsigned format.
- */
- if (format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA) {
- transferOps |= IMAGE_CLAMP_BIT;
- }
- else if (!type_with_negative_values(type) &&
- (dataType == GL_FLOAT ||
- dataType == GL_SIGNED_NORMALIZED)) {
- transferOps |= IMAGE_CLAMP_BIT;
- }
-
- for (col = 0; col < width; col++) {
- texImage->FetchTexelf(texImage, col, row, img, rgba[col]);
- if (texImage->_BaseFormat == GL_ALPHA) {
- rgba[col][RCOMP] = 0.0F;
- rgba[col][GCOMP] = 0.0F;
- rgba[col][BCOMP] = 0.0F;
- }
- else if (texImage->_BaseFormat == GL_LUMINANCE) {
- rgba[col][GCOMP] = 0.0F;
- rgba[col][BCOMP] = 0.0F;
- rgba[col][ACOMP] = 1.0F;
- }
- else if (texImage->_BaseFormat == GL_LUMINANCE_ALPHA) {
- rgba[col][GCOMP] = 0.0F;
- rgba[col][BCOMP] = 0.0F;
- }
- else if (texImage->_BaseFormat == GL_INTENSITY) {
- rgba[col][GCOMP] = 0.0F;
- rgba[col][BCOMP] = 0.0F;
- rgba[col][ACOMP] = 1.0F;
- }
- }
- _mesa_pack_rgba_span_float(ctx, width, (GLfloat (*)[4]) rgba,
- format, type, dest,
- &ctx->Pack, transferOps);
- }
- }
-
- free(rgba);
-}
-
-
-/**
- * Try to do glGetTexImage() with simple memcpy().
- * \return GL_TRUE if done, GL_FALSE otherwise
- */
-static GLboolean
-get_tex_memcpy(struct gl_context *ctx, GLenum format, GLenum type, GLvoid *pixels,
- const struct gl_texture_object *texObj,
- const struct gl_texture_image *texImage)
-{
- GLboolean memCopy = GL_FALSE;
-
- /* Texture image should have been mapped already */
- assert(texImage->Data);
-
- /*
- * Check if the src/dst formats are compatible.
- * Also note that GL's pixel transfer ops don't apply to glGetTexImage()
- * so we don't have to worry about those.
- * XXX more format combinations could be supported here.
- */
- if ((texObj->Target == GL_TEXTURE_1D ||
- texObj->Target == GL_TEXTURE_2D ||
- texObj->Target == GL_TEXTURE_RECTANGLE ||
- (texObj->Target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X &&
- texObj->Target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z))) {
- if (texImage->TexFormat == MESA_FORMAT_ARGB8888 &&
- format == GL_BGRA &&
- type == GL_UNSIGNED_BYTE &&
- !ctx->Pack.SwapBytes &&
- _mesa_little_endian()) {
- memCopy = GL_TRUE;
- }
- else if (texImage->TexFormat == MESA_FORMAT_AL88 &&
- format == GL_LUMINANCE_ALPHA &&
- type == GL_UNSIGNED_BYTE &&
- !ctx->Pack.SwapBytes &&
- _mesa_little_endian()) {
- memCopy = GL_TRUE;
- }
- else if (texImage->TexFormat == MESA_FORMAT_L8 &&
- format == GL_LUMINANCE &&
- type == GL_UNSIGNED_BYTE) {
- memCopy = GL_TRUE;
- }
- else if (texImage->TexFormat == MESA_FORMAT_L16 &&
- format == GL_LUMINANCE &&
- type == GL_UNSIGNED_SHORT) {
- memCopy = GL_TRUE;
- }
- else if (texImage->TexFormat == MESA_FORMAT_A8 &&
- format == GL_ALPHA &&
- type == GL_UNSIGNED_BYTE) {
- memCopy = GL_TRUE;
- }
- else if (texImage->TexFormat == MESA_FORMAT_A16 &&
- format == GL_ALPHA &&
- type == GL_UNSIGNED_SHORT) {
- memCopy = GL_TRUE;
- }
- }
-
- if (memCopy) {
- const GLuint bpp = _mesa_get_format_bytes(texImage->TexFormat);
- const GLuint bytesPerRow = texImage->Width * bpp;
- GLubyte *dst =
- _mesa_image_address2d(&ctx->Pack, pixels, texImage->Width,
- texImage->Height, format, type, 0, 0);
- const GLint dstRowStride =
- _mesa_image_row_stride(&ctx->Pack, texImage->Width, format, type);
- const GLubyte *src = texImage->Data;
- const GLint srcRowStride = texImage->RowStride * bpp;
- GLuint row;
-
- if (bytesPerRow == dstRowStride && bytesPerRow == srcRowStride) {
- memcpy(dst, src, bytesPerRow * texImage->Height);
- }
- else {
- for (row = 0; row < texImage->Height; row++) {
- memcpy(dst, src, bytesPerRow);
- dst += dstRowStride;
- src += srcRowStride;
- }
- }
- }
-
- return memCopy;
-}
-
-
-/**
- * This is the software fallback for Driver.GetTexImage().
- * All error checking will have been done before this routine is called.
- * The texture image must be mapped.
- */
-void
-_mesa_get_teximage(struct gl_context *ctx, GLenum target, GLint level,
- GLenum format, GLenum type, GLvoid *pixels,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage)
-{
- GLuint dimensions;
-
- /* If we get here, the texture image should be mapped */
- assert(texImage->Data);
-
- switch (target) {
- case GL_TEXTURE_1D:
- dimensions = 1;
- break;
- case GL_TEXTURE_3D:
- dimensions = 3;
- break;
- default:
- dimensions = 2;
- }
-
- if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) {
- /* Packing texture image into a PBO.
- * Map the (potentially) VRAM-based buffer into our process space so
- * we can write into it with the code below.
- * A hardware driver might use a sophisticated blit to move the
- * texture data to the PBO if the PBO is in VRAM along with the texture.
- */
- GLubyte *buf = (GLubyte *)
- ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,
- GL_WRITE_ONLY_ARB, ctx->Pack.BufferObj);
- if (!buf) {
- /* out of memory or other unexpected error */
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGetTexImage(map PBO failed)");
- return;
- }
- /* <pixels> was an offset into the PBO.
- * Now make it a real, client-side pointer inside the mapped region.
- */
- pixels = ADD_POINTERS(buf, pixels);
- }
-
- if (get_tex_memcpy(ctx, format, type, pixels, texObj, texImage)) {
- /* all done */
- }
- else if (format == GL_COLOR_INDEX) {
- get_tex_color_index(ctx, dimensions, format, type, pixels, texImage);
- }
- else if (format == GL_DEPTH_COMPONENT) {
- get_tex_depth(ctx, dimensions, format, type, pixels, texImage);
- }
- else if (format == GL_DEPTH_STENCIL_EXT) {
- get_tex_depth_stencil(ctx, dimensions, format, type, pixels, texImage);
- }
- else if (format == GL_YCBCR_MESA) {
- get_tex_ycbcr(ctx, dimensions, format, type, pixels, texImage);
- }
- else if (_mesa_get_format_color_encoding(texImage->TexFormat) == GL_SRGB) {
- get_tex_srgb(ctx, dimensions, format, type, pixels, texImage);
- }
- else {
- get_tex_rgba(ctx, dimensions, format, type, pixels, texImage);
- }
-
- if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) {
- ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,
- ctx->Pack.BufferObj);
- }
-}
-
-
-
-/**
- * This is the software fallback for Driver.GetCompressedTexImage().
- * All error checking will have been done before this routine is called.
- */
-void
-_mesa_get_compressed_teximage(struct gl_context *ctx, GLenum target, GLint level,
- GLvoid *img,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage)
-{
- const GLuint row_stride = _mesa_format_row_stride(texImage->TexFormat,
- texImage->Width);
- const GLuint row_stride_stored = _mesa_format_row_stride(texImage->TexFormat,
- texImage->RowStride);
- GLuint i;
-
- if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) {
- /* pack texture image into a PBO */
- GLubyte *buf = (GLubyte *)
- ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,
- GL_WRITE_ONLY_ARB, ctx->Pack.BufferObj);
- if (!buf) {
- /* out of memory or other unexpected error */
- _mesa_error(ctx, GL_OUT_OF_MEMORY,
- "glGetCompresssedTexImage(map PBO failed)");
- return;
- }
- img = ADD_POINTERS(buf, img);
- }
-
- /* no pixelstore or pixel transfer, but respect stride */
-
- if (row_stride == row_stride_stored) {
- const GLuint size = _mesa_format_image_size(texImage->TexFormat,
- texImage->Width,
- texImage->Height,
- texImage->Depth);
- memcpy(img, texImage->Data, size);
- }
- else {
- GLuint bw, bh;
- _mesa_get_format_block_size(texImage->TexFormat, &bw, &bh);
- for (i = 0; i < (texImage->Height + bh - 1) / bh; i++) {
- memcpy((GLubyte *)img + i * row_stride,
- (GLubyte *)texImage->Data + i * row_stride_stored,
- row_stride);
- }
- }
-
- if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) {
- ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,
- ctx->Pack.BufferObj);
- }
-}
-
-
-
-/**
- * Do error checking for a glGetTexImage() call.
- * \return GL_TRUE if any error, GL_FALSE if no errors.
- */
-static GLboolean
-getteximage_error_check(struct gl_context *ctx, GLenum target, GLint level,
- GLenum format, GLenum type, GLvoid *pixels )
-{
- struct gl_texture_object *texObj;
- struct gl_texture_image *texImage;
- const GLint maxLevels = _mesa_max_texture_levels(ctx, target);
- GLenum baseFormat;
-
- if (maxLevels == 0) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(target=0x%x)", target);
- return GL_TRUE;
- }
-
- if (level < 0 || level >= maxLevels) {
- _mesa_error( ctx, GL_INVALID_VALUE, "glGetTexImage(level)" );
- return GL_TRUE;
- }
-
- if (_mesa_sizeof_packed_type(type) <= 0) {
- _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexImage(type)" );
- return GL_TRUE;
- }
-
- if (_mesa_components_in_format(format) <= 0 ||
- format == GL_STENCIL_INDEX) {
- _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexImage(format)" );
- return GL_TRUE;
- }
-
- if (!ctx->Extensions.EXT_paletted_texture && _mesa_is_index_format(format)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)");
- return GL_TRUE;
- }
-
- if (!ctx->Extensions.ARB_depth_texture && _mesa_is_depth_format(format)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)");
- return GL_TRUE;
- }
-
- if (!ctx->Extensions.MESA_ycbcr_texture && _mesa_is_ycbcr_format(format)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)");
- return GL_TRUE;
- }
-
- if (!ctx->Extensions.EXT_packed_depth_stencil
- && _mesa_is_depthstencil_format(format)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)");
- return GL_TRUE;
- }
-
- if (!ctx->Extensions.ATI_envmap_bumpmap
- && _mesa_is_dudv_format(format)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)");
- return GL_TRUE;
- }
-
- texObj = _mesa_get_current_tex_object(ctx, target);
-
- if (!texObj || _mesa_is_proxy_texture(target)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(target)");
- return GL_TRUE;
- }
-
- texImage = _mesa_select_tex_image(ctx, texObj, target, level);
- if (!texImage) {
- /* out of memory */
- return GL_TRUE;
- }
-
- baseFormat = _mesa_get_format_base_format(texImage->TexFormat);
-
- /* Make sure the requested image format is compatible with the
- * texture's format. Note that a color index texture can be converted
- * to RGBA so that combo is allowed.
- */
- if (_mesa_is_color_format(format)
- && !_mesa_is_color_format(baseFormat)
- && !_mesa_is_index_format(baseFormat)) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)");
- return GL_TRUE;
- }
- else if (_mesa_is_index_format(format)
- && !_mesa_is_index_format(baseFormat)) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)");
- return GL_TRUE;
- }
- else if (_mesa_is_depth_format(format)
- && !_mesa_is_depth_format(baseFormat)
- && !_mesa_is_depthstencil_format(baseFormat)) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)");
- return GL_TRUE;
- }
- else if (_mesa_is_ycbcr_format(format)
- && !_mesa_is_ycbcr_format(baseFormat)) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)");
- return GL_TRUE;
- }
- else if (_mesa_is_depthstencil_format(format)
- && !_mesa_is_depthstencil_format(baseFormat)) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)");
- return GL_TRUE;
- }
- else if (_mesa_is_dudv_format(format)
- && !_mesa_is_dudv_format(baseFormat)) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)");
- return GL_TRUE;
- }
-
- if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) {
- /* packing texture image into a PBO */
- const GLuint dimensions = (target == GL_TEXTURE_3D) ? 3 : 2;
- if (!_mesa_validate_pbo_access(dimensions, &ctx->Pack, texImage->Width,
- texImage->Height, texImage->Depth,
- format, type, pixels)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetTexImage(out of bounds PBO write)");
- return GL_TRUE;
- }
-
- /* PBO should not be mapped */
- if (_mesa_bufferobj_mapped(ctx->Pack.BufferObj)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetTexImage(PBO is mapped)");
- return GL_TRUE;
- }
- }
-
- return GL_FALSE;
-}
-
-
-
-/**
- * Get texture image. Called by glGetTexImage.
- *
- * \param target texture target.
- * \param level image level.
- * \param format pixel data format for returned image.
- * \param type pixel data type for returned image.
- * \param pixels returned pixel data.
- */
-void GLAPIENTRY
-_mesa_GetTexImage( GLenum target, GLint level, GLenum format,
- GLenum type, GLvoid *pixels )
-{
- struct gl_texture_object *texObj;
- struct gl_texture_image *texImage;
- GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- if (getteximage_error_check(ctx, target, level, format, type, pixels)) {
- return;
- }
-
- if (!_mesa_is_bufferobj(ctx->Pack.BufferObj) && !pixels) {
- /* not an error, do nothing */
- return;
- }
-
- texObj = _mesa_get_current_tex_object(ctx, target);
- texImage = _mesa_select_tex_image(ctx, texObj, target, level);
-
- if (MESA_VERBOSE & (VERBOSE_API | VERBOSE_TEXTURE)) {
- _mesa_debug(ctx, "glGetTexImage(tex %u) format = %s, w=%d, h=%d,"
- " dstFmt=0x%x, dstType=0x%x\n",
- texObj->Name,
- _mesa_get_format_name(texImage->TexFormat),
- texImage->Width, texImage->Height,
- format, type);
- }
-
- _mesa_lock_texture(ctx, texObj);
- {
- ctx->Driver.GetTexImage(ctx, target, level, format, type, pixels,
- texObj, texImage);
- }
- _mesa_unlock_texture(ctx, texObj);
-}
-
-
-
-/**
- * Do error checking for a glGetCompressedTexImage() call.
- * \return GL_TRUE if any error, GL_FALSE if no errors.
- */
-static GLboolean
-getcompressedteximage_error_check(struct gl_context *ctx, GLenum target,
- GLint level, GLvoid *img)
-{
- struct gl_texture_object *texObj;
- struct gl_texture_image *texImage;
- const GLint maxLevels = _mesa_max_texture_levels(ctx, target);
-
- if (maxLevels == 0) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetCompressedTexImage(target=0x%x)",
- target);
- return GL_TRUE;
- }
-
- if (level < 0 || level >= maxLevels) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glGetCompressedTexImageARB(bad level = %d)", level);
- return GL_TRUE;
- }
-
- if (_mesa_is_proxy_texture(target)) {
- _mesa_error(ctx, GL_INVALID_ENUM,
- "glGetCompressedTexImageARB(bad target = %s)",
- _mesa_lookup_enum_by_nr(target));
- return GL_TRUE;
- }
-
- texObj = _mesa_get_current_tex_object(ctx, target);
- if (!texObj) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glGetCompressedTexImageARB(target)");
- return GL_TRUE;
- }
-
- texImage = _mesa_select_tex_image(ctx, texObj, target, level);
-
- if (!texImage) {
- /* probably invalid mipmap level */
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glGetCompressedTexImageARB(level)");
- return GL_TRUE;
- }
-
- if (!_mesa_is_format_compressed(texImage->TexFormat)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetCompressedTexImageARB(texture is not compressed)");
- return GL_TRUE;
- }
-
- if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) {
- GLuint compressedSize;
-
- /* make sure PBO is not mapped */
- if (_mesa_bufferobj_mapped(ctx->Pack.BufferObj)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetCompressedTexImage(PBO is mapped)");
- return GL_TRUE;
- }
-
- compressedSize = _mesa_format_image_size(texImage->TexFormat,
- texImage->Width,
- texImage->Height,
- texImage->Depth);
-
- /* do bounds checking on PBO write */
- if ((const GLubyte *) img + compressedSize >
- (const GLubyte *) ctx->Pack.BufferObj->Size) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetCompressedTexImage(out of bounds PBO write)");
- return GL_TRUE;
- }
- }
-
- return GL_FALSE;
-}
-
-
-void GLAPIENTRY
-_mesa_GetCompressedTexImageARB(GLenum target, GLint level, GLvoid *img)
-{
- struct gl_texture_object *texObj;
- struct gl_texture_image *texImage;
- GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- if (getcompressedteximage_error_check(ctx, target, level, img)) {
- return;
- }
-
- if (_mesa_is_bufferobj(ctx->Pack.BufferObj) && !img) {
- /* not an error, do nothing */
- return;
- }
-
- texObj = _mesa_get_current_tex_object(ctx, target);
- texImage = _mesa_select_tex_image(ctx, texObj, target, level);
-
- if (MESA_VERBOSE & (VERBOSE_API | VERBOSE_TEXTURE)) {
- _mesa_debug(ctx,
- "glGetCompressedTexImage(tex %u) format = %s, w=%d, h=%d\n",
- texObj->Name,
- _mesa_get_format_name(texImage->TexFormat),
- texImage->Width, texImage->Height);
- }
-
- _mesa_lock_texture(ctx, texObj);
- {
- ctx->Driver.GetCompressedTexImage(ctx, target, level, img,
- texObj, texImage);
- }
- _mesa_unlock_texture(ctx, texObj);
-}
+/* + * Mesa 3-D graphics library + * Version: 7.7 + * + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * Copyright (c) 2009 VMware, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/** + * Code for glGetTexImage() and glGetCompressedTexImage(). + */ + + +#include "glheader.h" +#include "bufferobj.h" +#include "enums.h" +#include "context.h" +#include "formats.h" +#include "image.h" +#include "mfeatures.h" +#include "mtypes.h" +#include "pack.h" +#include "pbo.h" +#include "texgetimage.h" +#include "teximage.h" + + + +/** + * Can the given type represent negative values? + */ +static INLINE GLboolean +type_with_negative_values(GLenum type) +{ + switch (type) { + case GL_BYTE: + case GL_SHORT: + case GL_INT: + case GL_FLOAT: + case GL_HALF_FLOAT_ARB: + return GL_TRUE; + default: + return GL_FALSE; + } +} + + +/** + * glGetTexImage for color index pixels. + */ +static void +get_tex_color_index(struct gl_context *ctx, GLuint dimensions, + GLenum format, GLenum type, GLvoid *pixels, + const struct gl_texture_image *texImage) +{ + const GLint width = texImage->Width; + const GLint height = texImage->Height; + const GLint depth = texImage->Depth; + const GLint rowstride = texImage->RowStride; + const GLuint indexBits = + _mesa_get_format_bits(texImage->TexFormat, GL_TEXTURE_INDEX_SIZE_EXT); + const GLbitfield transferOps = 0x0; + GLint img, row, col; + + for (img = 0; img < depth; img++) { + for (row = 0; row < height; row++) { + GLuint indexRow[MAX_WIDTH] = { 0 }; + void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels, + width, height, format, type, + img, row, 0); + assert(dest); + + if (indexBits == 8) { + const GLubyte *src = (const GLubyte *) texImage->Data; + src += rowstride * (img * height + row); + for (col = 0; col < width; col++) { + indexRow[col] = src[col]; + } + } + else if (indexBits == 16) { + const GLushort *src = (const GLushort *) texImage->Data; + src += rowstride * (img * height + row); + for (col = 0; col < width; col++) { + indexRow[col] = src[col]; + } + } + else { + _mesa_problem(ctx, "Color index problem in _mesa_GetTexImage"); + } + _mesa_pack_index_span(ctx, width, type, dest, + indexRow, &ctx->Pack, transferOps); + } + } +} + + +/** + * glGetTexImage for depth/Z pixels. + */ +static void +get_tex_depth(struct gl_context *ctx, GLuint dimensions, + GLenum format, GLenum type, GLvoid *pixels, + const struct gl_texture_image *texImage) +{ + const GLint width = texImage->Width; + const GLint height = texImage->Height; + const GLint depth = texImage->Depth; + GLint img, row, col; + GLfloat *depthRow = (GLfloat *) malloc(width * sizeof(GLfloat)); + + if (!depthRow) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGetTexImage"); + return; + } + + for (img = 0; img < depth; img++) { + for (row = 0; row < height; row++) { + void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels, + width, height, format, type, + img, row, 0); + assert(dest); + + for (col = 0; col < width; col++) { + texImage->FetchTexelf(texImage, col, row, img, depthRow + col); + } + _mesa_pack_depth_span(ctx, width, dest, type, depthRow, &ctx->Pack); + } + } + + free(depthRow); +} + + +/** + * glGetTexImage for depth/stencil pixels. + */ +static void +get_tex_depth_stencil(struct gl_context *ctx, GLuint dimensions, + GLenum format, GLenum type, GLvoid *pixels, + const struct gl_texture_image *texImage) +{ + const GLint width = texImage->Width; + const GLint height = texImage->Height; + const GLint depth = texImage->Depth; + const GLint rowstride = texImage->RowStride; + const GLuint *src = (const GLuint *) texImage->Data; + GLint img, row; + + for (img = 0; img < depth; img++) { + for (row = 0; row < height; row++) { + void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels, + width, height, format, type, + img, row, 0); + memcpy(dest, src, width * sizeof(GLuint)); + if (ctx->Pack.SwapBytes) { + _mesa_swap4((GLuint *) dest, width); + } + + src += rowstride; + } + } +} + + +/** + * glGetTexImage for YCbCr pixels. + */ +static void +get_tex_ycbcr(struct gl_context *ctx, GLuint dimensions, + GLenum format, GLenum type, GLvoid *pixels, + const struct gl_texture_image *texImage) +{ + const GLint width = texImage->Width; + const GLint height = texImage->Height; + const GLint depth = texImage->Depth; + const GLint rowstride = texImage->RowStride; + const GLushort *src = (const GLushort *) texImage->Data; + GLint img, row; + + for (img = 0; img < depth; img++) { + for (row = 0; row < height; row++) { + void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels, + width, height, format, type, + img, row, 0); + memcpy(dest, src, width * sizeof(GLushort)); + + /* check for byte swapping */ + if ((texImage->TexFormat == MESA_FORMAT_YCBCR + && type == GL_UNSIGNED_SHORT_8_8_REV_MESA) || + (texImage->TexFormat == MESA_FORMAT_YCBCR_REV + && type == GL_UNSIGNED_SHORT_8_8_MESA)) { + if (!ctx->Pack.SwapBytes) + _mesa_swap2((GLushort *) dest, width); + } + else if (ctx->Pack.SwapBytes) { + _mesa_swap2((GLushort *) dest, width); + } + + src += rowstride; + } + } +} + + +#if FEATURE_EXT_texture_sRGB + + +/** + * Convert a float value from linear space to a + * non-linear sRGB value in [0, 255]. + * Not terribly efficient. + */ +static INLINE GLfloat +linear_to_nonlinear(GLfloat cl) +{ + /* can't have values outside [0, 1] */ + GLfloat cs; + if (cl < 0.0031308f) { + cs = 12.92f * cl; + } + else { + cs = (GLfloat)(1.055 * pow(cl, 0.41666) - 0.055); + } + return cs; +} + + +/** + * glGetTexImagefor sRGB pixels; + */ +static void +get_tex_srgb(struct gl_context *ctx, GLuint dimensions, + GLenum format, GLenum type, GLvoid *pixels, + const struct gl_texture_image *texImage) +{ + const GLint width = texImage->Width; + const GLint height = texImage->Height; + const GLint depth = texImage->Depth; + const GLbitfield transferOps = 0x0; + GLint img, row; + GLfloat (*rgba)[4] = (GLfloat (*)[4]) malloc(4 * width * sizeof(GLfloat)); + + if (!rgba) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGetTexImage"); + return; + } + + for (img = 0; img < depth; img++) { + for (row = 0; row < height; row++) { + void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels, + width, height, format, type, + img, row, 0); + + GLint col; + + /* convert row to RGBA format */ + for (col = 0; col < width; col++) { + texImage->FetchTexelf(texImage, col, row, img, rgba[col]); + if (texImage->_BaseFormat == GL_LUMINANCE) { + rgba[col][RCOMP] = linear_to_nonlinear(rgba[col][RCOMP]); + rgba[col][GCOMP] = 0.0; + rgba[col][BCOMP] = 0.0; + } + else if (texImage->_BaseFormat == GL_LUMINANCE_ALPHA) { + rgba[col][RCOMP] = linear_to_nonlinear(rgba[col][RCOMP]); + rgba[col][GCOMP] = 0.0; + rgba[col][BCOMP] = 0.0; + } + else if (texImage->_BaseFormat == GL_RGB || + texImage->_BaseFormat == GL_RGBA) { + rgba[col][RCOMP] = linear_to_nonlinear(rgba[col][RCOMP]); + rgba[col][GCOMP] = linear_to_nonlinear(rgba[col][GCOMP]); + rgba[col][BCOMP] = linear_to_nonlinear(rgba[col][BCOMP]); + } + } + _mesa_pack_rgba_span_float(ctx, width, (GLfloat (*)[4]) rgba, + format, type, dest, + &ctx->Pack, transferOps); + } + } + + free(rgba); +} + + +#else /* FEATURE_EXT_texture_sRGB */ + + +static INLINE void +get_tex_srgb(struct gl_context *ctx, GLuint dimensions, + GLenum format, GLenum type, GLvoid *pixels, + const struct gl_texture_image *texImage) +{ + ASSERT_NO_FEATURE(); +} + + +#endif /* FEATURE_EXT_texture_sRGB */ + + +/** + * glGetTexImagefor RGBA, Luminance, etc. pixels. + * This is the slow way since we use texture sampling. + */ +static void +get_tex_rgba(struct gl_context *ctx, GLuint dimensions, + GLenum format, GLenum type, GLvoid *pixels, + const struct gl_texture_image *texImage) +{ + const GLint width = texImage->Width; + const GLint height = texImage->Height; + const GLint depth = texImage->Depth; + /* Normally, no pixel transfer ops are performed during glGetTexImage. + * The only possible exception is component clamping to [0,1]. + */ + GLbitfield transferOps = 0x0; + GLint img, row; + GLfloat (*rgba)[4] = (GLfloat (*)[4]) malloc(4 * width * sizeof(GLfloat)); + + if (!rgba) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGetTexImage"); + return; + } + + for (img = 0; img < depth; img++) { + for (row = 0; row < height; row++) { + void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels, + width, height, format, type, + img, row, 0); + GLint col; + GLenum dataType = _mesa_get_format_datatype(texImage->TexFormat); + + /* clamp does not apply to GetTexImage (final conversion)? + * Looks like we need clamp though when going from format + * containing negative values to unsigned format. + */ + if (format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA) { + transferOps |= IMAGE_CLAMP_BIT; + } + else if (!type_with_negative_values(type) && + (dataType == GL_FLOAT || + dataType == GL_SIGNED_NORMALIZED)) { + transferOps |= IMAGE_CLAMP_BIT; + } + + for (col = 0; col < width; col++) { + texImage->FetchTexelf(texImage, col, row, img, rgba[col]); + if (texImage->_BaseFormat == GL_ALPHA) { + rgba[col][RCOMP] = 0.0F; + rgba[col][GCOMP] = 0.0F; + rgba[col][BCOMP] = 0.0F; + } + else if (texImage->_BaseFormat == GL_LUMINANCE) { + rgba[col][GCOMP] = 0.0F; + rgba[col][BCOMP] = 0.0F; + rgba[col][ACOMP] = 1.0F; + } + else if (texImage->_BaseFormat == GL_LUMINANCE_ALPHA) { + rgba[col][GCOMP] = 0.0F; + rgba[col][BCOMP] = 0.0F; + } + else if (texImage->_BaseFormat == GL_INTENSITY) { + rgba[col][GCOMP] = 0.0F; + rgba[col][BCOMP] = 0.0F; + rgba[col][ACOMP] = 1.0F; + } + } + _mesa_pack_rgba_span_float(ctx, width, (GLfloat (*)[4]) rgba, + format, type, dest, + &ctx->Pack, transferOps); + } + } + + free(rgba); +} + + +/** + * Try to do glGetTexImage() with simple memcpy(). + * \return GL_TRUE if done, GL_FALSE otherwise + */ +static GLboolean +get_tex_memcpy(struct gl_context *ctx, GLenum format, GLenum type, GLvoid *pixels, + const struct gl_texture_object *texObj, + const struct gl_texture_image *texImage) +{ + GLboolean memCopy = GL_FALSE; + + /* Texture image should have been mapped already */ + assert(texImage->Data); + + /* + * Check if the src/dst formats are compatible. + * Also note that GL's pixel transfer ops don't apply to glGetTexImage() + * so we don't have to worry about those. + * XXX more format combinations could be supported here. + */ + if ((texObj->Target == GL_TEXTURE_1D || + texObj->Target == GL_TEXTURE_2D || + texObj->Target == GL_TEXTURE_RECTANGLE || + (texObj->Target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X && + texObj->Target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z))) { + if (texImage->TexFormat == MESA_FORMAT_ARGB8888 && + format == GL_BGRA && + type == GL_UNSIGNED_BYTE && + !ctx->Pack.SwapBytes && + _mesa_little_endian()) { + memCopy = GL_TRUE; + } + else if (texImage->TexFormat == MESA_FORMAT_AL88 && + format == GL_LUMINANCE_ALPHA && + type == GL_UNSIGNED_BYTE && + !ctx->Pack.SwapBytes && + _mesa_little_endian()) { + memCopy = GL_TRUE; + } + else if (texImage->TexFormat == MESA_FORMAT_L8 && + format == GL_LUMINANCE && + type == GL_UNSIGNED_BYTE) { + memCopy = GL_TRUE; + } + else if (texImage->TexFormat == MESA_FORMAT_L16 && + format == GL_LUMINANCE && + type == GL_UNSIGNED_SHORT) { + memCopy = GL_TRUE; + } + else if (texImage->TexFormat == MESA_FORMAT_A8 && + format == GL_ALPHA && + type == GL_UNSIGNED_BYTE) { + memCopy = GL_TRUE; + } + else if (texImage->TexFormat == MESA_FORMAT_A16 && + format == GL_ALPHA && + type == GL_UNSIGNED_SHORT) { + memCopy = GL_TRUE; + } + } + + if (memCopy) { + const GLuint bpp = _mesa_get_format_bytes(texImage->TexFormat); + const GLuint bytesPerRow = texImage->Width * bpp; + GLubyte *dst = + _mesa_image_address2d(&ctx->Pack, pixels, texImage->Width, + texImage->Height, format, type, 0, 0); + const GLint dstRowStride = + _mesa_image_row_stride(&ctx->Pack, texImage->Width, format, type); + const GLubyte *src = texImage->Data; + const GLint srcRowStride = texImage->RowStride * bpp; + GLuint row; + + if (bytesPerRow == dstRowStride && bytesPerRow == srcRowStride) { + memcpy(dst, src, bytesPerRow * texImage->Height); + } + else { + for (row = 0; row < texImage->Height; row++) { + memcpy(dst, src, bytesPerRow); + dst += dstRowStride; + src += srcRowStride; + } + } + } + + return memCopy; +} + + +/** + * This is the software fallback for Driver.GetTexImage(). + * All error checking will have been done before this routine is called. + * The texture image must be mapped. + */ +void +_mesa_get_teximage(struct gl_context *ctx, GLenum target, GLint level, + GLenum format, GLenum type, GLvoid *pixels, + struct gl_texture_object *texObj, + struct gl_texture_image *texImage) +{ + GLuint dimensions; + + /* If we get here, the texture image should be mapped */ + assert(texImage->Data); + + switch (target) { + case GL_TEXTURE_1D: + dimensions = 1; + break; + case GL_TEXTURE_3D: + dimensions = 3; + break; + default: + dimensions = 2; + } + + if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) { + /* Packing texture image into a PBO. + * Map the (potentially) VRAM-based buffer into our process space so + * we can write into it with the code below. + * A hardware driver might use a sophisticated blit to move the + * texture data to the PBO if the PBO is in VRAM along with the texture. + */ + GLubyte *buf = (GLubyte *) + ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT, + GL_WRITE_ONLY_ARB, ctx->Pack.BufferObj); + if (!buf) { + /* out of memory or other unexpected error */ + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGetTexImage(map PBO failed)"); + return; + } + /* <pixels> was an offset into the PBO. + * Now make it a real, client-side pointer inside the mapped region. + */ + pixels = ADD_POINTERS(buf, pixels); + } + + if (get_tex_memcpy(ctx, format, type, pixels, texObj, texImage)) { + /* all done */ + } + else if (format == GL_COLOR_INDEX) { + get_tex_color_index(ctx, dimensions, format, type, pixels, texImage); + } + else if (format == GL_DEPTH_COMPONENT) { + get_tex_depth(ctx, dimensions, format, type, pixels, texImage); + } + else if (format == GL_DEPTH_STENCIL_EXT) { + get_tex_depth_stencil(ctx, dimensions, format, type, pixels, texImage); + } + else if (format == GL_YCBCR_MESA) { + get_tex_ycbcr(ctx, dimensions, format, type, pixels, texImage); + } + else if (_mesa_get_format_color_encoding(texImage->TexFormat) == GL_SRGB) { + get_tex_srgb(ctx, dimensions, format, type, pixels, texImage); + } + else { + get_tex_rgba(ctx, dimensions, format, type, pixels, texImage); + } + + if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) { + ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT, + ctx->Pack.BufferObj); + } +} + + + +/** + * This is the software fallback for Driver.GetCompressedTexImage(). + * All error checking will have been done before this routine is called. + */ +void +_mesa_get_compressed_teximage(struct gl_context *ctx, GLenum target, GLint level, + GLvoid *img, + struct gl_texture_object *texObj, + struct gl_texture_image *texImage) +{ + const GLuint row_stride = _mesa_format_row_stride(texImage->TexFormat, + texImage->Width); + const GLuint row_stride_stored = _mesa_format_row_stride(texImage->TexFormat, + texImage->RowStride); + GLuint i; + + if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) { + /* pack texture image into a PBO */ + GLubyte *buf = (GLubyte *) + ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT, + GL_WRITE_ONLY_ARB, ctx->Pack.BufferObj); + if (!buf) { + /* out of memory or other unexpected error */ + _mesa_error(ctx, GL_OUT_OF_MEMORY, + "glGetCompresssedTexImage(map PBO failed)"); + return; + } + img = ADD_POINTERS(buf, img); + } + + /* no pixelstore or pixel transfer, but respect stride */ + + if (row_stride == row_stride_stored) { + const GLuint size = _mesa_format_image_size(texImage->TexFormat, + texImage->Width, + texImage->Height, + texImage->Depth); + memcpy(img, texImage->Data, size); + } + else { + GLuint bw, bh; + _mesa_get_format_block_size(texImage->TexFormat, &bw, &bh); + for (i = 0; i < (texImage->Height + bh - 1) / bh; i++) { + memcpy((GLubyte *)img + i * row_stride, + (GLubyte *)texImage->Data + i * row_stride_stored, + row_stride); + } + } + + if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) { + ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT, + ctx->Pack.BufferObj); + } +} + + + +/** + * Do error checking for a glGetTexImage() call. + * \return GL_TRUE if any error, GL_FALSE if no errors. + */ +static GLboolean +getteximage_error_check(struct gl_context *ctx, GLenum target, GLint level, + GLenum format, GLenum type, GLsizei clientMemSize, + GLvoid *pixels ) +{ + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; + const GLint maxLevels = _mesa_max_texture_levels(ctx, target); + const GLuint dimensions = (target == GL_TEXTURE_3D) ? 3 : 2; + GLenum baseFormat; + + if (maxLevels == 0) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(target=0x%x)", target); + return GL_TRUE; + } + + if (level < 0 || level >= maxLevels) { + _mesa_error( ctx, GL_INVALID_VALUE, "glGetTexImage(level)" ); + return GL_TRUE; + } + + if (_mesa_sizeof_packed_type(type) <= 0) { + _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexImage(type)" ); + return GL_TRUE; + } + + if (_mesa_components_in_format(format) <= 0 || + format == GL_STENCIL_INDEX) { + _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexImage(format)" ); + return GL_TRUE; + } + + if (!ctx->Extensions.EXT_paletted_texture && _mesa_is_index_format(format)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)"); + return GL_TRUE; + } + + if (!ctx->Extensions.ARB_depth_texture && _mesa_is_depth_format(format)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)"); + return GL_TRUE; + } + + if (!ctx->Extensions.MESA_ycbcr_texture && _mesa_is_ycbcr_format(format)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)"); + return GL_TRUE; + } + + if (!ctx->Extensions.EXT_packed_depth_stencil + && _mesa_is_depthstencil_format(format)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)"); + return GL_TRUE; + } + + if (!ctx->Extensions.ATI_envmap_bumpmap + && _mesa_is_dudv_format(format)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)"); + return GL_TRUE; + } + + texObj = _mesa_get_current_tex_object(ctx, target); + + if (!texObj || _mesa_is_proxy_texture(target)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(target)"); + return GL_TRUE; + } + + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + if (!texImage) { + /* out of memory */ + return GL_TRUE; + } + + baseFormat = _mesa_get_format_base_format(texImage->TexFormat); + + /* Make sure the requested image format is compatible with the + * texture's format. Note that a color index texture can be converted + * to RGBA so that combo is allowed. + */ + if (_mesa_is_color_format(format) + && !_mesa_is_color_format(baseFormat) + && !_mesa_is_index_format(baseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); + return GL_TRUE; + } + else if (_mesa_is_index_format(format) + && !_mesa_is_index_format(baseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); + return GL_TRUE; + } + else if (_mesa_is_depth_format(format) + && !_mesa_is_depth_format(baseFormat) + && !_mesa_is_depthstencil_format(baseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); + return GL_TRUE; + } + else if (_mesa_is_ycbcr_format(format) + && !_mesa_is_ycbcr_format(baseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); + return GL_TRUE; + } + else if (_mesa_is_depthstencil_format(format) + && !_mesa_is_depthstencil_format(baseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); + return GL_TRUE; + } + else if (_mesa_is_dudv_format(format) + && !_mesa_is_dudv_format(baseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); + return GL_TRUE; + } + + if (!_mesa_validate_pbo_access(dimensions, &ctx->Pack, texImage->Width, + texImage->Height, texImage->Depth, + format, type, clientMemSize, pixels)) { + if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetTexImage(out of bounds PBO access)"); + } else { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetnTexImageARB(out of bounds access:" + " bufSize (%d) is too small)", clientMemSize); + } + return GL_TRUE; + } + + if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) { + /* PBO should not be mapped */ + if (_mesa_bufferobj_mapped(ctx->Pack.BufferObj)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetTexImage(PBO is mapped)"); + return GL_TRUE; + } + } + + return GL_FALSE; +} + + + +/** + * Get texture image. Called by glGetTexImage. + * + * \param target texture target. + * \param level image level. + * \param format pixel data format for returned image. + * \param type pixel data type for returned image. + * \param bufSize size of the pixels data buffer. + * \param pixels returned pixel data. + */ +void GLAPIENTRY +_mesa_GetnTexImageARB( GLenum target, GLint level, GLenum format, + GLenum type, GLsizei bufSize, GLvoid *pixels ) +{ + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + if (getteximage_error_check(ctx, target, level, format, type, + bufSize, pixels)) { + return; + } + + if (!_mesa_is_bufferobj(ctx->Pack.BufferObj) && !pixels) { + /* not an error, do nothing */ + return; + } + + texObj = _mesa_get_current_tex_object(ctx, target); + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + + if (MESA_VERBOSE & (VERBOSE_API | VERBOSE_TEXTURE)) { + _mesa_debug(ctx, "glGetTexImage(tex %u) format = %s, w=%d, h=%d," + " dstFmt=0x%x, dstType=0x%x\n", + texObj->Name, + _mesa_get_format_name(texImage->TexFormat), + texImage->Width, texImage->Height, + format, type); + } + + _mesa_lock_texture(ctx, texObj); + { + ctx->Driver.GetTexImage(ctx, target, level, format, type, pixels, + texObj, texImage); + } + _mesa_unlock_texture(ctx, texObj); +} + + +void GLAPIENTRY +_mesa_GetTexImage( GLenum target, GLint level, GLenum format, + GLenum type, GLvoid *pixels ) +{ + _mesa_GetnTexImageARB(target, level, format, type, INT_MAX, pixels); +} + + +/** + * Do error checking for a glGetCompressedTexImage() call. + * \return GL_TRUE if any error, GL_FALSE if no errors. + */ +static GLboolean +getcompressedteximage_error_check(struct gl_context *ctx, GLenum target, + GLint level, GLsizei clientMemSize, GLvoid *img) +{ + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; + const GLint maxLevels = _mesa_max_texture_levels(ctx, target); + GLuint compressedSize; + + if (maxLevels == 0) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetCompressedTexImage(target=0x%x)", + target); + return GL_TRUE; + } + + if (level < 0 || level >= maxLevels) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glGetCompressedTexImageARB(bad level = %d)", level); + return GL_TRUE; + } + + if (_mesa_is_proxy_texture(target)) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glGetCompressedTexImageARB(bad target = %s)", + _mesa_lookup_enum_by_nr(target)); + return GL_TRUE; + } + + texObj = _mesa_get_current_tex_object(ctx, target); + if (!texObj) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetCompressedTexImageARB(target)"); + return GL_TRUE; + } + + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + + if (!texImage) { + /* probably invalid mipmap level */ + _mesa_error(ctx, GL_INVALID_VALUE, + "glGetCompressedTexImageARB(level)"); + return GL_TRUE; + } + + if (!_mesa_is_format_compressed(texImage->TexFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetCompressedTexImageARB(texture is not compressed)"); + return GL_TRUE; + } + + compressedSize = _mesa_format_image_size(texImage->TexFormat, + texImage->Width, + texImage->Height, + texImage->Depth); + + if (!_mesa_is_bufferobj(ctx->Pack.BufferObj)) { + /* do bounds checking on writing to client memory */ + if (clientMemSize < compressedSize) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetnCompressedTexImageARB(out of bounds access:" + " bufSize (%d) is too small)", clientMemSize); + } + } else { + /* do bounds checking on PBO write */ + if ((const GLubyte *) img + compressedSize > + (const GLubyte *) ctx->Pack.BufferObj->Size) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetCompressedTexImage(out of bounds PBO access)"); + return GL_TRUE; + } + + /* make sure PBO is not mapped */ + if (_mesa_bufferobj_mapped(ctx->Pack.BufferObj)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetCompressedTexImage(PBO is mapped)"); + return GL_TRUE; + } + } + + return GL_FALSE; +} + + +void GLAPIENTRY +_mesa_GetnCompressedTexImageARB(GLenum target, GLint level, GLsizei bufSize, + GLvoid *img) +{ + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + if (getcompressedteximage_error_check(ctx, target, level, bufSize, img)) { + return; + } + + if (_mesa_is_bufferobj(ctx->Pack.BufferObj) && !img) { + /* not an error, do nothing */ + return; + } + + texObj = _mesa_get_current_tex_object(ctx, target); + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + + if (MESA_VERBOSE & (VERBOSE_API | VERBOSE_TEXTURE)) { + _mesa_debug(ctx, + "glGetCompressedTexImage(tex %u) format = %s, w=%d, h=%d\n", + texObj->Name, + _mesa_get_format_name(texImage->TexFormat), + texImage->Width, texImage->Height); + } + + _mesa_lock_texture(ctx, texObj); + { + ctx->Driver.GetCompressedTexImage(ctx, target, level, img, + texObj, texImage); + } + _mesa_unlock_texture(ctx, texObj); +} + +void GLAPIENTRY +_mesa_GetCompressedTexImageARB(GLenum target, GLint level, GLvoid *img) +{ + _mesa_GetnCompressedTexImageARB(target, level, INT_MAX, img); +} diff --git a/mesalib/src/mesa/main/texgetimage.h b/mesalib/src/mesa/main/texgetimage.h index d5a1ffcf5..8612705ca 100644 --- a/mesalib/src/mesa/main/texgetimage.h +++ b/mesalib/src/mesa/main/texgetimage.h @@ -1,60 +1,65 @@ -/*
- * Mesa 3-D graphics library
- * Version: 7.5
- *
- * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
- * Copyright (c) 2009 VMware, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#ifndef TEXGETIMAGE_H
-#define TEXGETIMAGE_H
-
-#include "glheader.h"
-
-struct gl_context;
-struct gl_texture_image;
-struct gl_texture_object;
-
-extern void
-_mesa_get_teximage(struct gl_context *ctx, GLenum target, GLint level,
- GLenum format, GLenum type, GLvoid *pixels,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage);
-
-
-extern void
-_mesa_get_compressed_teximage(struct gl_context *ctx, GLenum target, GLint level,
- GLvoid *img,
- struct gl_texture_object *texObj,
- struct gl_texture_image *texImage);
-
-
-
-extern void GLAPIENTRY
-_mesa_GetTexImage( GLenum target, GLint level,
- GLenum format, GLenum type, GLvoid *pixels );
-
-
-extern void GLAPIENTRY
-_mesa_GetCompressedTexImageARB(GLenum target, GLint lod, GLvoid *img);
-
-
-#endif /* TEXGETIMAGE_H */
+/* + * Mesa 3-D graphics library + * Version: 7.5 + * + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * Copyright (c) 2009 VMware, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef TEXGETIMAGE_H +#define TEXGETIMAGE_H + +#include "glheader.h" + +struct gl_context; +struct gl_texture_image; +struct gl_texture_object; + +extern void +_mesa_get_teximage(struct gl_context *ctx, GLenum target, GLint level, + GLenum format, GLenum type, GLvoid *pixels, + struct gl_texture_object *texObj, + struct gl_texture_image *texImage); + + +extern void +_mesa_get_compressed_teximage(struct gl_context *ctx, GLenum target, GLint level, + GLvoid *img, + struct gl_texture_object *texObj, + struct gl_texture_image *texImage); + + + +extern void GLAPIENTRY +_mesa_GetTexImage( GLenum target, GLint level, + GLenum format, GLenum type, GLvoid *pixels ); +extern void GLAPIENTRY +_mesa_GetnTexImageARB( GLenum target, GLint level, GLenum format, + GLenum type, GLsizei bufSize, GLvoid *pixels ); + +extern void GLAPIENTRY +_mesa_GetCompressedTexImageARB(GLenum target, GLint lod, GLvoid *img); + +extern void GLAPIENTRY +_mesa_GetnCompressedTexImageARB(GLenum target, GLint level, GLsizei bufSize, + GLvoid *img); + +#endif /* TEXGETIMAGE_H */ diff --git a/mesalib/src/mesa/main/teximage.c b/mesalib/src/mesa/main/teximage.c index a2df4e36e..8fb54c693 100644 --- a/mesalib/src/mesa/main/teximage.c +++ b/mesalib/src/mesa/main/teximage.c @@ -1,3831 +1,3849 @@ -/*
- * mesa 3-D graphics library
- * Version: 7.6
- *
- * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/**
- * \file teximage.c
- * Texture image-related functions.
- */
-
-
-#include "glheader.h"
-#include "bufferobj.h"
-#include "context.h"
-#include "enums.h"
-#include "fbobject.h"
-#include "framebuffer.h"
-#include "hash.h"
-#include "image.h"
-#include "imports.h"
-#include "macros.h"
-#include "mfeatures.h"
-#include "state.h"
-#include "texcompress.h"
-#include "texfetch.h"
-#include "teximage.h"
-#include "texstate.h"
-#include "texpal.h"
-#include "mtypes.h"
-
-
-/**
- * State changes which we care about for glCopyTex[Sub]Image() calls.
- * In particular, we care about pixel transfer state and buffer state
- * (such as glReadBuffer to make sure we read from the right renderbuffer).
- */
-#define NEW_COPY_TEX_STATE (_NEW_BUFFERS | _NEW_PIXEL)
-
-
-
-/**
- * We allocate texture memory on 512-byte boundaries so we can use MMX/SSE
- * elsewhere.
- */
-void *
-_mesa_alloc_texmemory(GLsizei bytes)
-{
- return _mesa_align_malloc(bytes, 512);
-}
-
-
-/**
- * Free texture memory allocated with _mesa_alloc_texmemory()
- */
-void
-_mesa_free_texmemory(void *m)
-{
- _mesa_align_free(m);
-}
-
-
-/*
- * Compute floor(log_base_2(n)).
- * If n < 0 return -1.
- */
-static int
-logbase2( int n )
-{
- GLint i = 1;
- GLint log2 = 0;
-
- if (n < 0)
- return -1;
-
- if (n == 0)
- return 0;
-
- while ( n > i ) {
- i *= 2;
- log2++;
- }
- if (i != n) {
- return log2 - 1;
- }
- else {
- return log2;
- }
-}
-
-
-
-/**
- * Return the simple base format for a given internal texture format.
- * For example, given GL_LUMINANCE12_ALPHA4, return GL_LUMINANCE_ALPHA.
- *
- * \param ctx GL context.
- * \param internalFormat the internal texture format token or 1, 2, 3, or 4.
- *
- * \return the corresponding \u base internal format (GL_ALPHA, GL_LUMINANCE,
- * GL_LUMANCE_ALPHA, GL_INTENSITY, GL_RGB, or GL_RGBA), or -1 if invalid enum.
- *
- * This is the format which is used during texture application (i.e. the
- * texture format and env mode determine the arithmetic used.
- *
- * XXX this could be static
- */
-GLint
-_mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )
-{
- switch (internalFormat) {
- case GL_ALPHA:
- case GL_ALPHA4:
- case GL_ALPHA8:
- case GL_ALPHA12:
- case GL_ALPHA16:
- return GL_ALPHA;
- case 1:
- case GL_LUMINANCE:
- case GL_LUMINANCE4:
- case GL_LUMINANCE8:
- case GL_LUMINANCE12:
- case GL_LUMINANCE16:
- return GL_LUMINANCE;
- case 2:
- case GL_LUMINANCE_ALPHA:
- case GL_LUMINANCE4_ALPHA4:
- case GL_LUMINANCE6_ALPHA2:
- case GL_LUMINANCE8_ALPHA8:
- case GL_LUMINANCE12_ALPHA4:
- case GL_LUMINANCE12_ALPHA12:
- case GL_LUMINANCE16_ALPHA16:
- return GL_LUMINANCE_ALPHA;
- case GL_INTENSITY:
- case GL_INTENSITY4:
- case GL_INTENSITY8:
- case GL_INTENSITY12:
- case GL_INTENSITY16:
- return GL_INTENSITY;
- case 3:
- 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 GL_RGB;
- case 4:
- case GL_RGBA:
- case GL_RGBA2:
- case GL_RGBA4:
- case GL_RGB5_A1:
- case GL_RGBA8:
- case GL_RGB10_A2:
- case GL_RGBA12:
- case GL_RGBA16:
- return GL_RGBA;
- default:
- ; /* fallthrough */
- }
-
- if (ctx->Extensions.EXT_texture_format_BGRA8888) {
- switch (internalFormat) {
- case GL_BGRA_EXT:
- return GL_RGBA;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.EXT_paletted_texture) {
- switch (internalFormat) {
- case GL_COLOR_INDEX:
- case GL_COLOR_INDEX1_EXT:
- case GL_COLOR_INDEX2_EXT:
- case GL_COLOR_INDEX4_EXT:
- case GL_COLOR_INDEX8_EXT:
- case GL_COLOR_INDEX12_EXT:
- case GL_COLOR_INDEX16_EXT:
- return GL_COLOR_INDEX;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.ARB_depth_texture) {
- switch (internalFormat) {
- case GL_DEPTH_COMPONENT:
- case GL_DEPTH_COMPONENT16:
- case GL_DEPTH_COMPONENT24:
- case GL_DEPTH_COMPONENT32:
- return GL_DEPTH_COMPONENT;
- default:
- ; /* fallthrough */
- }
- }
-
- switch (internalFormat) {
- case GL_COMPRESSED_ALPHA:
- return GL_ALPHA;
- case GL_COMPRESSED_LUMINANCE:
- return GL_LUMINANCE;
- case GL_COMPRESSED_LUMINANCE_ALPHA:
- return GL_LUMINANCE_ALPHA;
- case GL_COMPRESSED_INTENSITY:
- return GL_INTENSITY;
- case GL_COMPRESSED_RGB:
- return GL_RGB;
- case GL_COMPRESSED_RGBA:
- return GL_RGBA;
- default:
- ; /* fallthrough */
- }
-
- if (ctx->Extensions.TDFX_texture_compression_FXT1) {
- switch (internalFormat) {
- case GL_COMPRESSED_RGB_FXT1_3DFX:
- return GL_RGB;
- case GL_COMPRESSED_RGBA_FXT1_3DFX:
- return GL_RGBA;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.EXT_texture_compression_s3tc) {
- switch (internalFormat) {
- case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
- return GL_RGB;
- case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
- case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
- case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
- return GL_RGBA;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.S3_s3tc) {
- switch (internalFormat) {
- case GL_RGB_S3TC:
- case GL_RGB4_S3TC:
- return GL_RGB;
- case GL_RGBA_S3TC:
- case GL_RGBA4_S3TC:
- return GL_RGBA;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.MESA_ycbcr_texture) {
- if (internalFormat == GL_YCBCR_MESA)
- return GL_YCBCR_MESA;
- }
-
- if (ctx->Extensions.ARB_texture_float) {
- switch (internalFormat) {
- case GL_ALPHA16F_ARB:
- case GL_ALPHA32F_ARB:
- return GL_ALPHA;
- case GL_RGBA16F_ARB:
- case GL_RGBA32F_ARB:
- return GL_RGBA;
- case GL_RGB16F_ARB:
- case GL_RGB32F_ARB:
- return GL_RGB;
- case GL_INTENSITY16F_ARB:
- case GL_INTENSITY32F_ARB:
- return GL_INTENSITY;
- case GL_LUMINANCE16F_ARB:
- case GL_LUMINANCE32F_ARB:
- return GL_LUMINANCE;
- case GL_LUMINANCE_ALPHA16F_ARB:
- case GL_LUMINANCE_ALPHA32F_ARB:
- return GL_LUMINANCE_ALPHA;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.ATI_envmap_bumpmap) {
- switch (internalFormat) {
- case GL_DUDV_ATI:
- case GL_DU8DV8_ATI:
- return GL_DUDV_ATI;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.EXT_texture_snorm) {
- switch (internalFormat) {
- case GL_RED_SNORM:
- case GL_R8_SNORM:
- case GL_R16_SNORM:
- return GL_RED;
- case GL_RG_SNORM:
- case GL_RG8_SNORM:
- case GL_RG16_SNORM:
- return GL_RG;
- case GL_RGB_SNORM:
- case GL_RGB8_SNORM:
- case GL_RGB16_SNORM:
- return GL_RGB;
- case GL_RGBA_SNORM:
- case GL_RGBA8_SNORM:
- case GL_RGBA16_SNORM:
- return GL_RGBA;
- case GL_ALPHA_SNORM:
- case GL_ALPHA8_SNORM:
- case GL_ALPHA16_SNORM:
- return GL_ALPHA;
- case GL_LUMINANCE_SNORM:
- case GL_LUMINANCE8_SNORM:
- case GL_LUMINANCE16_SNORM:
- return GL_LUMINANCE;
- case GL_LUMINANCE_ALPHA_SNORM:
- case GL_LUMINANCE8_ALPHA8_SNORM:
- case GL_LUMINANCE16_ALPHA16_SNORM:
- return GL_LUMINANCE_ALPHA;
- case GL_INTENSITY_SNORM:
- case GL_INTENSITY8_SNORM:
- case GL_INTENSITY16_SNORM:
- return GL_INTENSITY;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.EXT_packed_depth_stencil) {
- switch (internalFormat) {
- case GL_DEPTH_STENCIL_EXT:
- case GL_DEPTH24_STENCIL8_EXT:
- return GL_DEPTH_STENCIL_EXT;
- default:
- ; /* fallthrough */
- }
- }
-
-#if FEATURE_EXT_texture_sRGB
- if (ctx->Extensions.EXT_texture_sRGB) {
- switch (internalFormat) {
- case GL_SRGB_EXT:
- case GL_SRGB8_EXT:
- case GL_COMPRESSED_SRGB_EXT:
- case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
- return GL_RGB;
- case GL_SRGB_ALPHA_EXT:
- case GL_SRGB8_ALPHA8_EXT:
- case GL_COMPRESSED_SRGB_ALPHA_EXT:
- case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
- case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
- case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
- return GL_RGBA;
- case GL_SLUMINANCE_ALPHA_EXT:
- case GL_SLUMINANCE8_ALPHA8_EXT:
- case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
- return GL_LUMINANCE_ALPHA;
- case GL_SLUMINANCE_EXT:
- case GL_SLUMINANCE8_EXT:
- case GL_COMPRESSED_SLUMINANCE_EXT:
- return GL_LUMINANCE;
- default:
- ; /* fallthrough */
- }
- }
-#endif /* FEATURE_EXT_texture_sRGB */
-
- if (ctx->Extensions.EXT_texture_integer) {
- switch (internalFormat) {
- case GL_RGBA8UI_EXT:
- case GL_RGBA16UI_EXT:
- case GL_RGBA32UI_EXT:
- case GL_RGBA8I_EXT:
- case GL_RGBA16I_EXT:
- case GL_RGBA32I_EXT:
- return GL_RGBA;
- case GL_RGB8UI_EXT:
- case GL_RGB16UI_EXT:
- case GL_RGB32UI_EXT:
- case GL_RGB8I_EXT:
- case GL_RGB16I_EXT:
- case GL_RGB32I_EXT:
- return GL_RGB;
- case GL_ALPHA8UI_EXT:
- case GL_ALPHA16UI_EXT:
- case GL_ALPHA32UI_EXT:
- case GL_ALPHA8I_EXT:
- case GL_ALPHA16I_EXT:
- case GL_ALPHA32I_EXT:
- return GL_ALPHA;
- case GL_INTENSITY8UI_EXT:
- case GL_INTENSITY16UI_EXT:
- case GL_INTENSITY32UI_EXT:
- case GL_INTENSITY8I_EXT:
- case GL_INTENSITY16I_EXT:
- case GL_INTENSITY32I_EXT:
- return GL_INTENSITY;
- case GL_LUMINANCE8UI_EXT:
- case GL_LUMINANCE16UI_EXT:
- case GL_LUMINANCE32UI_EXT:
- case GL_LUMINANCE8I_EXT:
- case GL_LUMINANCE16I_EXT:
- case GL_LUMINANCE32I_EXT:
- return GL_LUMINANCE;
- case GL_LUMINANCE_ALPHA8UI_EXT:
- case GL_LUMINANCE_ALPHA16UI_EXT:
- case GL_LUMINANCE_ALPHA32UI_EXT:
- case GL_LUMINANCE_ALPHA8I_EXT:
- case GL_LUMINANCE_ALPHA16I_EXT:
- case GL_LUMINANCE_ALPHA32I_EXT:
- return GL_LUMINANCE_ALPHA;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.ARB_texture_rg) {
- switch (internalFormat) {
- case GL_R16F:
- /* R16F depends on both ARB_half_float_pixel and ARB_texture_float.
- */
- if (!ctx->Extensions.ARB_half_float_pixel)
- break;
- /* FALLTHROUGH */
- case GL_R32F:
- if (!ctx->Extensions.ARB_texture_float)
- break;
- return GL_RED;
- case GL_R8I:
- case GL_R8UI:
- case GL_R16I:
- case GL_R16UI:
- case GL_R32I:
- case GL_R32UI:
- if (!ctx->Extensions.EXT_texture_integer)
- break;
- /* FALLTHROUGH */
- case GL_R8:
- case GL_R16:
- case GL_RED:
- case GL_COMPRESSED_RED:
- return GL_RED;
-
- case GL_RG16F:
- /* RG16F depends on both ARB_half_float_pixel and ARB_texture_float.
- */
- if (!ctx->Extensions.ARB_half_float_pixel)
- break;
- /* FALLTHROUGH */
- case GL_RG32F:
- if (!ctx->Extensions.ARB_texture_float)
- break;
- return GL_RG;
- case GL_RG8I:
- case GL_RG8UI:
- case GL_RG16I:
- case GL_RG16UI:
- case GL_RG32I:
- case GL_RG32UI:
- if (!ctx->Extensions.EXT_texture_integer)
- break;
- /* FALLTHROUGH */
- case GL_RG:
- case GL_RG8:
- case GL_RG16:
- case GL_COMPRESSED_RG:
- return GL_RG;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.EXT_texture_shared_exponent) {
- switch (internalFormat) {
- case GL_RGB9_E5_EXT:
- return GL_RGB;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.EXT_packed_float) {
- switch (internalFormat) {
- case GL_R11F_G11F_B10F_EXT:
- return GL_RGB;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.ARB_depth_buffer_float) {
- switch (internalFormat) {
- case GL_DEPTH_COMPONENT32F:
- return GL_DEPTH_COMPONENT;
- case GL_DEPTH32F_STENCIL8:
- return GL_DEPTH_STENCIL;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.ARB_texture_compression_rgtc) {
- switch (internalFormat) {
- case GL_COMPRESSED_RED_RGTC1:
- case GL_COMPRESSED_SIGNED_RED_RGTC1:
- return GL_RED;
- case GL_COMPRESSED_RG_RGTC2:
- case GL_COMPRESSED_SIGNED_RG_RGTC2:
- return GL_RG;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.EXT_texture_compression_latc) {
- switch (internalFormat) {
- case GL_COMPRESSED_LUMINANCE_LATC1_EXT:
- case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT:
- return GL_LUMINANCE;
- case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT:
- case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT:
- return GL_LUMINANCE_ALPHA;
- default:
- ; /* fallthrough */
- }
- }
-
- if (ctx->Extensions.ATI_texture_compression_3dc) {
- switch (internalFormat) {
- case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI:
- return GL_LUMINANCE_ALPHA;
- default:
- ; /* fallthrough */
- }
- }
-
- return -1; /* error */
-}
-
-
-/**
- * For cube map faces, return a face index in [0,5].
- * For other targets return 0;
- */
-GLuint
-_mesa_tex_target_to_face(GLenum target)
-{
- if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB &&
- target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB)
- return (GLuint) target - (GLuint) GL_TEXTURE_CUBE_MAP_POSITIVE_X;
- else
- return 0;
-}
-
-
-
-/**
- * Store a gl_texture_image pointer in a gl_texture_object structure
- * according to the target and level parameters.
- *
- * \param tObj texture object.
- * \param target texture target.
- * \param level image level.
- * \param texImage texture image.
- *
- * This was basically prompted by the introduction of cube maps.
- */
-void
-_mesa_set_tex_image(struct gl_texture_object *tObj,
- GLenum target, GLint level,
- struct gl_texture_image *texImage)
-{
- const GLuint face = _mesa_tex_target_to_face(target);
-
- ASSERT(tObj);
- ASSERT(texImage);
- ASSERT(target != GL_TEXTURE_RECTANGLE_NV || level == 0);
-
- tObj->Image[face][level] = texImage;
-
- /* Set the 'back' pointer */
- texImage->TexObject = tObj;
-}
-
-
-/**
- * Allocate a texture image structure.
- *
- * Called via ctx->Driver.NewTextureImage() unless overriden by a device
- * driver.
- *
- * \return a pointer to gl_texture_image struct with all fields initialized to
- * zero.
- */
-struct gl_texture_image *
-_mesa_new_texture_image( struct gl_context *ctx )
-{
- (void) ctx;
- return CALLOC_STRUCT(gl_texture_image);
-}
-
-
-/**
- * Free texture image data.
- * This function is a fallback called via ctx->Driver.FreeTexImageData().
- *
- * \param texImage texture image.
- *
- * Free the texture image data if it's not marked as client data.
- */
-void
-_mesa_free_texture_image_data(struct gl_context *ctx,
- struct gl_texture_image *texImage)
-{
- (void) ctx;
-
- if (texImage->Data && !texImage->IsClientData) {
- /* free the old texture data */
- _mesa_free_texmemory(texImage->Data);
- }
-
- texImage->Data = NULL;
-}
-
-
-/**
- * Free texture image.
- *
- * \param texImage texture image.
- *
- * Free the texture image structure and the associated image data.
- */
-void
-_mesa_delete_texture_image(struct gl_context *ctx,
- struct gl_texture_image *texImage)
-{
- /* Free texImage->Data and/or any other driver-specific texture
- * image storage.
- */
- ASSERT(ctx->Driver.FreeTexImageData);
- ctx->Driver.FreeTexImageData( ctx, texImage );
-
- ASSERT(texImage->Data == NULL);
- if (texImage->ImageOffsets)
- free(texImage->ImageOffsets);
- free(texImage);
-}
-
-
-/**
- * Test if a target is a proxy target.
- *
- * \param target texture target.
- *
- * \return GL_TRUE if the target is a proxy target, GL_FALSE otherwise.
- */
-GLboolean
-_mesa_is_proxy_texture(GLenum target)
-{
- /* NUM_TEXTURE_TARGETS should match number of terms below,
- * except there's no proxy for GL_TEXTURE_BUFFER.
- */
- assert(NUM_TEXTURE_TARGETS == 8);
-
- return (target == GL_PROXY_TEXTURE_1D ||
- target == GL_PROXY_TEXTURE_2D ||
- target == GL_PROXY_TEXTURE_3D ||
- target == GL_PROXY_TEXTURE_CUBE_MAP_ARB ||
- target == GL_PROXY_TEXTURE_RECTANGLE_NV ||
- target == GL_PROXY_TEXTURE_1D_ARRAY_EXT ||
- target == GL_PROXY_TEXTURE_2D_ARRAY_EXT);
-}
-
-
-/**
- * Return the proxy target which corresponds to the given texture target
- */
-static GLenum
-get_proxy_target(GLenum target)
-{
- switch (target) {
- case GL_TEXTURE_1D:
- case GL_PROXY_TEXTURE_1D:
- return GL_PROXY_TEXTURE_1D;
- case GL_TEXTURE_2D:
- case GL_PROXY_TEXTURE_2D:
- return GL_PROXY_TEXTURE_2D;
- case GL_TEXTURE_3D:
- case GL_PROXY_TEXTURE_3D:
- return GL_PROXY_TEXTURE_3D;
- case GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB:
- case GL_TEXTURE_CUBE_MAP_ARB:
- case GL_PROXY_TEXTURE_CUBE_MAP_ARB:
- return GL_PROXY_TEXTURE_CUBE_MAP_ARB;
- case GL_TEXTURE_RECTANGLE_NV:
- case GL_PROXY_TEXTURE_RECTANGLE_NV:
- return GL_PROXY_TEXTURE_RECTANGLE_NV;
- case GL_TEXTURE_1D_ARRAY_EXT:
- case GL_PROXY_TEXTURE_1D_ARRAY_EXT:
- return GL_PROXY_TEXTURE_1D_ARRAY_EXT;
- case GL_TEXTURE_2D_ARRAY_EXT:
- case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
- return GL_PROXY_TEXTURE_2D_ARRAY_EXT;
- default:
- _mesa_problem(NULL, "unexpected target in get_proxy_target()");
- return 0;
- }
-}
-
-
-/**
- * Get the texture object that corresponds to the target of the given
- * texture unit.
- *
- * \param ctx GL context.
- * \param texUnit texture unit.
- * \param target texture target.
- *
- * \return pointer to the texture object on success, or NULL on failure.
- *
- * \sa gl_texture_unit.
- */
-struct gl_texture_object *
-_mesa_select_tex_object(struct gl_context *ctx,
- const struct gl_texture_unit *texUnit,
- GLenum target)
-{
- const GLboolean arrayTex = (ctx->Extensions.MESA_texture_array ||
- ctx->Extensions.EXT_texture_array);
-
- switch (target) {
- case GL_TEXTURE_1D:
- return texUnit->CurrentTex[TEXTURE_1D_INDEX];
- case GL_PROXY_TEXTURE_1D:
- return ctx->Texture.ProxyTex[TEXTURE_1D_INDEX];
- case GL_TEXTURE_2D:
- return texUnit->CurrentTex[TEXTURE_2D_INDEX];
- case GL_PROXY_TEXTURE_2D:
- return ctx->Texture.ProxyTex[TEXTURE_2D_INDEX];
- case GL_TEXTURE_3D:
- return texUnit->CurrentTex[TEXTURE_3D_INDEX];
- case GL_PROXY_TEXTURE_3D:
- return ctx->Texture.ProxyTex[TEXTURE_3D_INDEX];
- case GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB:
- case GL_TEXTURE_CUBE_MAP_ARB:
- return ctx->Extensions.ARB_texture_cube_map
- ? texUnit->CurrentTex[TEXTURE_CUBE_INDEX] : NULL;
- case GL_PROXY_TEXTURE_CUBE_MAP_ARB:
- return ctx->Extensions.ARB_texture_cube_map
- ? ctx->Texture.ProxyTex[TEXTURE_CUBE_INDEX] : NULL;
- case GL_TEXTURE_RECTANGLE_NV:
- return ctx->Extensions.NV_texture_rectangle
- ? texUnit->CurrentTex[TEXTURE_RECT_INDEX] : NULL;
- case GL_PROXY_TEXTURE_RECTANGLE_NV:
- return ctx->Extensions.NV_texture_rectangle
- ? ctx->Texture.ProxyTex[TEXTURE_RECT_INDEX] : NULL;
- case GL_TEXTURE_1D_ARRAY_EXT:
- return arrayTex ? texUnit->CurrentTex[TEXTURE_1D_ARRAY_INDEX] : NULL;
- case GL_PROXY_TEXTURE_1D_ARRAY_EXT:
- return arrayTex ? ctx->Texture.ProxyTex[TEXTURE_1D_ARRAY_INDEX] : NULL;
- case GL_TEXTURE_2D_ARRAY_EXT:
- return arrayTex ? texUnit->CurrentTex[TEXTURE_2D_ARRAY_INDEX] : NULL;
- 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
- ? texUnit->CurrentTex[TEXTURE_BUFFER_INDEX] : NULL;
- default:
- _mesa_problem(NULL, "bad target in _mesa_select_tex_object()");
- return NULL;
- }
-}
-
-
-/**
- * Return pointer to texture object for given target on current texture unit.
- */
-struct gl_texture_object *
-_mesa_get_current_tex_object(struct gl_context *ctx, GLenum target)
-{
- struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx);
- return _mesa_select_tex_object(ctx, texUnit, target);
-}
-
-
-/**
- * Get a texture image pointer from a texture object, given a texture
- * target and mipmap level. The target and level parameters should
- * have already been error-checked.
- *
- * \param ctx GL context.
- * \param texObj texture unit.
- * \param target texture target.
- * \param level image level.
- *
- * \return pointer to the texture image structure, or NULL on failure.
- */
-struct gl_texture_image *
-_mesa_select_tex_image(struct gl_context *ctx,
- const struct gl_texture_object *texObj,
- GLenum target, GLint level)
-{
- const GLuint face = _mesa_tex_target_to_face(target);
-
- ASSERT(texObj);
- ASSERT(level >= 0);
- ASSERT(level < MAX_TEXTURE_LEVELS);
-
- return texObj->Image[face][level];
-}
-
-
-/**
- * Like _mesa_select_tex_image() but if the image doesn't exist, allocate
- * it and install it. Only return NULL if passed a bad parameter or run
- * out of memory.
- */
-struct gl_texture_image *
-_mesa_get_tex_image(struct gl_context *ctx, struct gl_texture_object *texObj,
- GLenum target, GLint level)
-{
- struct gl_texture_image *texImage;
-
- if (!texObj)
- return NULL;
-
- texImage = _mesa_select_tex_image(ctx, texObj, target, level);
- if (!texImage) {
- texImage = ctx->Driver.NewTextureImage(ctx);
- if (!texImage) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "texture image allocation");
- return NULL;
- }
-
- _mesa_set_tex_image(texObj, target, level, texImage);
- }
-
- return texImage;
-}
-
-
-/**
- * Return pointer to the specified proxy texture image.
- * Note that proxy textures are per-context, not per-texture unit.
- * \return pointer to texture image or NULL if invalid target, invalid
- * level, or out of memory.
- */
-struct gl_texture_image *
-_mesa_get_proxy_tex_image(struct gl_context *ctx, GLenum target, GLint level)
-{
- struct gl_texture_image *texImage;
- GLuint texIndex;
-
- if (level < 0 )
- return NULL;
-
- switch (target) {
- case GL_PROXY_TEXTURE_1D:
- if (level >= ctx->Const.MaxTextureLevels)
- return NULL;
- texIndex = TEXTURE_1D_INDEX;
- break;
- case GL_PROXY_TEXTURE_2D:
- if (level >= ctx->Const.MaxTextureLevels)
- return NULL;
- texIndex = TEXTURE_2D_INDEX;
- break;
- case GL_PROXY_TEXTURE_3D:
- if (level >= ctx->Const.Max3DTextureLevels)
- return NULL;
- texIndex = TEXTURE_3D_INDEX;
- break;
- case GL_PROXY_TEXTURE_CUBE_MAP:
- if (level >= ctx->Const.MaxCubeTextureLevels)
- return NULL;
- texIndex = TEXTURE_CUBE_INDEX;
- break;
- case GL_PROXY_TEXTURE_RECTANGLE_NV:
- if (level > 0)
- return NULL;
- texIndex = TEXTURE_RECT_INDEX;
- break;
- case GL_PROXY_TEXTURE_1D_ARRAY_EXT:
- if (level >= ctx->Const.MaxTextureLevels)
- return NULL;
- texIndex = TEXTURE_1D_ARRAY_INDEX;
- break;
- case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
- if (level >= ctx->Const.MaxTextureLevels)
- return NULL;
- texIndex = TEXTURE_2D_ARRAY_INDEX;
- break;
- default:
- return NULL;
- }
-
- texImage = ctx->Texture.ProxyTex[texIndex]->Image[0][level];
- if (!texImage) {
- texImage = ctx->Driver.NewTextureImage(ctx);
- if (!texImage) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "proxy texture allocation");
- return NULL;
- }
- ctx->Texture.ProxyTex[texIndex]->Image[0][level] = texImage;
- /* Set the 'back' pointer */
- texImage->TexObject = ctx->Texture.ProxyTex[texIndex];
- }
- return texImage;
-}
-
-
-/**
- * Get the maximum number of allowed mipmap levels.
- *
- * \param ctx GL context.
- * \param target texture target.
- *
- * \return the maximum number of allowed mipmap levels for the given
- * texture target, or zero if passed a bad target.
- *
- * \sa gl_constants.
- */
-GLint
-_mesa_max_texture_levels(struct gl_context *ctx, GLenum target)
-{
- switch (target) {
- case GL_TEXTURE_1D:
- case GL_PROXY_TEXTURE_1D:
- case GL_TEXTURE_2D:
- case GL_PROXY_TEXTURE_2D:
- return ctx->Const.MaxTextureLevels;
- case GL_TEXTURE_3D:
- case GL_PROXY_TEXTURE_3D:
- return ctx->Const.Max3DTextureLevels;
- case GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB:
- case GL_TEXTURE_CUBE_MAP_ARB:
- case GL_PROXY_TEXTURE_CUBE_MAP_ARB:
- return ctx->Extensions.ARB_texture_cube_map
- ? ctx->Const.MaxCubeTextureLevels : 0;
- case GL_TEXTURE_RECTANGLE_NV:
- case GL_PROXY_TEXTURE_RECTANGLE_NV:
- return ctx->Extensions.NV_texture_rectangle ? 1 : 0;
- case GL_TEXTURE_1D_ARRAY_EXT:
- case GL_PROXY_TEXTURE_1D_ARRAY_EXT:
- case GL_TEXTURE_2D_ARRAY_EXT:
- case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
- return (ctx->Extensions.MESA_texture_array ||
- ctx->Extensions.EXT_texture_array)
- ? ctx->Const.MaxTextureLevels : 0;
- case GL_TEXTURE_BUFFER:
- /* fall-through */
- default:
- return 0; /* bad target */
- }
-}
-
-
-/**
- * Return number of dimensions per mipmap level for the given texture target.
- */
-GLint
-_mesa_get_texture_dimensions(GLenum target)
-{
- switch (target) {
- case GL_TEXTURE_1D:
- case GL_PROXY_TEXTURE_1D:
- return 1;
- case GL_TEXTURE_2D:
- case GL_TEXTURE_RECTANGLE:
- case GL_TEXTURE_CUBE_MAP:
- case GL_PROXY_TEXTURE_2D:
- case GL_PROXY_TEXTURE_RECTANGLE:
- case GL_PROXY_TEXTURE_CUBE_MAP:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
- case GL_TEXTURE_1D_ARRAY:
- case GL_PROXY_TEXTURE_1D_ARRAY:
- return 2;
- case GL_TEXTURE_3D:
- case GL_PROXY_TEXTURE_3D:
- case GL_TEXTURE_2D_ARRAY:
- case GL_PROXY_TEXTURE_2D_ARRAY:
- return 3;
- case GL_TEXTURE_BUFFER:
- /* fall-through */
- default:
- _mesa_problem(NULL, "invalid target 0x%x in get_texture_dimensions()",
- target);
- return 2;
- }
-}
-
-
-
-
-#if 000 /* not used anymore */
-/*
- * glTexImage[123]D can accept a NULL image pointer. In this case we
- * create a texture image with unspecified image contents per the OpenGL
- * spec.
- */
-static GLubyte *
-make_null_texture(GLint width, GLint height, GLint depth, GLenum format)
-{
- const GLint components = _mesa_components_in_format(format);
- const GLint numPixels = width * height * depth;
- GLubyte *data = (GLubyte *) MALLOC(numPixels * components * sizeof(GLubyte));
-
-#ifdef DEBUG
- /*
- * Let's see if anyone finds this. If glTexImage2D() is called with
- * a NULL image pointer then load the texture image with something
- * interesting instead of leaving it indeterminate.
- */
- if (data) {
- static const char message[8][32] = {
- " X X XXXXX XXX X ",
- " XX XX X X X X X ",
- " X X X X X X X ",
- " X X XXXX XXX XXXXX ",
- " X X X X X X ",
- " X X X X X X X ",
- " X X XXXXX XXX X X ",
- " "
- };
-
- GLubyte *imgPtr = data;
- GLint h, i, j, k;
- for (h = 0; h < depth; h++) {
- for (i = 0; i < height; i++) {
- GLint srcRow = 7 - (i % 8);
- for (j = 0; j < width; j++) {
- GLint srcCol = j % 32;
- GLubyte texel = (message[srcRow][srcCol]=='X') ? 255 : 70;
- for (k = 0; k < components; k++) {
- *imgPtr++ = texel;
- }
- }
- }
- }
- }
-#endif
-
- return data;
-}
-#endif
-
-
-
-/**
- * Reset the fields of a gl_texture_image struct to zero.
- *
- * \param img texture image structure.
- *
- * This is called when a proxy texture test fails, we set all the
- * image members (except DriverData) to zero.
- * It's also used in glTexImage[123]D as a safeguard to be sure all
- * required fields get initialized properly by the Driver.TexImage[123]D
- * functions.
- */
-static void
-clear_teximage_fields(struct gl_texture_image *img)
-{
- ASSERT(img);
- img->_BaseFormat = 0;
- img->InternalFormat = 0;
- img->Border = 0;
- img->Width = 0;
- img->Height = 0;
- img->Depth = 0;
- img->RowStride = 0;
- if (img->ImageOffsets) {
- free(img->ImageOffsets);
- img->ImageOffsets = NULL;
- }
- img->Width2 = 0;
- img->Height2 = 0;
- img->Depth2 = 0;
- img->WidthLog2 = 0;
- img->HeightLog2 = 0;
- img->DepthLog2 = 0;
- img->Data = NULL;
- img->TexFormat = MESA_FORMAT_NONE;
- img->FetchTexelc = NULL;
- img->FetchTexelf = NULL;
-}
-
-
-/**
- * Initialize basic fields of the gl_texture_image struct.
- *
- * \param ctx GL context.
- * \param target texture target (GL_TEXTURE_1D, GL_TEXTURE_RECTANGLE, etc).
- * \param img texture image structure to be initialized.
- * \param width image width.
- * \param height image height.
- * \param depth image depth.
- * \param border image border.
- * \param internalFormat internal format.
- * \param format the actual hardware format (one of MESA_FORMAT_*)
- *
- * Fills in the fields of \p img with the given information.
- * Note: width, height and depth include the border.
- */
-void
-_mesa_init_teximage_fields(struct gl_context *ctx, GLenum target,
- struct gl_texture_image *img,
- GLsizei width, GLsizei height, GLsizei depth,
- GLint border, GLenum internalFormat,
- gl_format format)
-{
- GLint i, dims;
-
- ASSERT(img);
- ASSERT(width >= 0);
- ASSERT(height >= 0);
- ASSERT(depth >= 0);
-
- img->_BaseFormat = _mesa_base_tex_format( ctx, internalFormat );
- ASSERT(img->_BaseFormat > 0);
- img->InternalFormat = internalFormat;
- img->Border = border;
- img->Width = width;
- img->Height = height;
- img->Depth = depth;
-
- img->Width2 = width - 2 * border; /* == 1 << img->WidthLog2; */
- img->WidthLog2 = logbase2(img->Width2);
-
- if (height == 1) { /* 1-D texture */
- img->Height2 = 1;
- img->HeightLog2 = 0;
- }
- else {
- img->Height2 = height - 2 * border; /* == 1 << img->HeightLog2; */
- img->HeightLog2 = logbase2(img->Height2);
- }
-
- if (depth == 1) { /* 2-D texture */
- img->Depth2 = 1;
- img->DepthLog2 = 0;
- }
- else {
- img->Depth2 = depth - 2 * border; /* == 1 << img->DepthLog2; */
- img->DepthLog2 = logbase2(img->Depth2);
- }
-
- img->MaxLog2 = MAX2(img->WidthLog2, img->HeightLog2);
-
- if ((width == 1 || _mesa_is_pow_two(img->Width2)) &&
- (height == 1 || _mesa_is_pow_two(img->Height2)) &&
- (depth == 1 || _mesa_is_pow_two(img->Depth2)))
- img->_IsPowerOfTwo = GL_TRUE;
- else
- img->_IsPowerOfTwo = GL_FALSE;
-
- /* RowStride and ImageOffsets[] describe how to address texels in 'Data' */
- img->RowStride = width;
- /* Allocate the ImageOffsets array and initialize to typical values.
- * We allocate the array for 1D/2D textures too in order to avoid special-
- * case code in the texstore routines.
- */
- if (img->ImageOffsets)
- free(img->ImageOffsets);
- img->ImageOffsets = (GLuint *) malloc(depth * sizeof(GLuint));
- for (i = 0; i < depth; i++) {
- img->ImageOffsets[i] = i * width * height;
- }
-
- /* Compute Width/Height/DepthScale for mipmap lod computation */
- if (target == GL_TEXTURE_RECTANGLE_NV) {
- /* scale = 1.0 since texture coords directly map to texels */
- img->WidthScale = 1.0;
- img->HeightScale = 1.0;
- img->DepthScale = 1.0;
- }
- else {
- img->WidthScale = (GLfloat) img->Width;
- img->HeightScale = (GLfloat) img->Height;
- img->DepthScale = (GLfloat) img->Depth;
- }
-
- img->TexFormat = format;
-
- dims = _mesa_get_texture_dimensions(target);
-
- _mesa_set_fetch_functions(img, dims);
-}
-
-
-/**
- * Free and clear fields of the gl_texture_image struct.
- *
- * \param ctx GL context.
- * \param texImage texture image structure to be cleared.
- *
- * After the call, \p texImage will have no data associated with it. Its
- * fields are cleared so that its parent object will test incomplete.
- */
-void
-_mesa_clear_texture_image(struct gl_context *ctx,
- struct gl_texture_image *texImage)
-{
- ctx->Driver.FreeTexImageData(ctx, texImage);
- clear_teximage_fields(texImage);
-}
-
-
-/**
- * This is the fallback for Driver.TestProxyTexImage(). Test the texture
- * level, width, height and depth against the ctx->Const limits for textures.
- *
- * A hardware driver might override this function if, for example, the
- * max 3D texture size is 512x512x64 (i.e. not a cube).
- *
- * Note that width, height, depth == 0 is not an error. However, a
- * texture with zero width/height/depth will be considered "incomplete"
- * and texturing will effectively be disabled.
- *
- * \param target one of GL_PROXY_TEXTURE_1D, GL_PROXY_TEXTURE_2D,
- * GL_PROXY_TEXTURE_3D, GL_PROXY_TEXTURE_RECTANGLE_NV,
- * GL_PROXY_TEXTURE_CUBE_MAP_ARB.
- * \param level as passed to glTexImage
- * \param internalFormat as passed to glTexImage
- * \param format as passed to glTexImage
- * \param type as passed to glTexImage
- * \param width as passed to glTexImage
- * \param height as passed to glTexImage
- * \param depth as passed to glTexImage
- * \param border as passed to glTexImage
- * \return GL_TRUE if the image is acceptable, GL_FALSE if not acceptable.
- */
-GLboolean
-_mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, GLint level,
- GLint internalFormat, GLenum format, GLenum type,
- GLint width, GLint height, GLint depth, GLint border)
-{
- GLint maxSize;
-
- (void) internalFormat;
- (void) format;
- (void) type;
-
- switch (target) {
- case GL_PROXY_TEXTURE_1D:
- maxSize = 1 << (ctx->Const.MaxTextureLevels - 1);
- if (width < 2 * border || width > 2 + maxSize)
- return GL_FALSE;
- if (level >= ctx->Const.MaxTextureLevels)
- return GL_FALSE;
- if (!ctx->Extensions.ARB_texture_non_power_of_two) {
- if (width > 0 && !_mesa_is_pow_two(width - 2 * border))
- return GL_FALSE;
- }
- return GL_TRUE;
-
- case GL_PROXY_TEXTURE_2D:
- maxSize = 1 << (ctx->Const.MaxTextureLevels - 1);
- if (width < 2 * border || width > 2 + maxSize)
- return GL_FALSE;
- if (height < 2 * border || height > 2 + maxSize)
- return GL_FALSE;
- if (level >= ctx->Const.MaxTextureLevels)
- return GL_FALSE;
- if (!ctx->Extensions.ARB_texture_non_power_of_two) {
- if (width > 0 && !_mesa_is_pow_two(width - 2 * border))
- return GL_FALSE;
- if (height > 0 && !_mesa_is_pow_two(height - 2 * border))
- return GL_FALSE;
- }
- return GL_TRUE;
-
- case GL_PROXY_TEXTURE_3D:
- maxSize = 1 << (ctx->Const.Max3DTextureLevels - 1);
- if (width < 2 * border || width > 2 + maxSize)
- return GL_FALSE;
- if (height < 2 * border || height > 2 + maxSize)
- return GL_FALSE;
- if (depth < 2 * border || depth > 2 + maxSize)
- return GL_FALSE;
- if (level >= ctx->Const.Max3DTextureLevels)
- return GL_FALSE;
- if (!ctx->Extensions.ARB_texture_non_power_of_two) {
- if (width > 0 && !_mesa_is_pow_two(width - 2 * border))
- return GL_FALSE;
- if (height > 0 && !_mesa_is_pow_two(height - 2 * border))
- return GL_FALSE;
- if (depth > 0 && !_mesa_is_pow_two(depth - 2 * border))
- return GL_FALSE;
- }
- return GL_TRUE;
-
- case GL_PROXY_TEXTURE_RECTANGLE_NV:
- maxSize = ctx->Const.MaxTextureRectSize;
- if (width < 0 || width > maxSize)
- return GL_FALSE;
- if (height < 0 || height > maxSize)
- return GL_FALSE;
- if (level != 0)
- return GL_FALSE;
- return GL_TRUE;
-
- case GL_PROXY_TEXTURE_CUBE_MAP_ARB:
- maxSize = 1 << (ctx->Const.MaxCubeTextureLevels - 1);
- if (width < 2 * border || width > 2 + maxSize)
- return GL_FALSE;
- if (height < 2 * border || height > 2 + maxSize)
- return GL_FALSE;
- if (level >= ctx->Const.MaxCubeTextureLevels)
- return GL_FALSE;
- if (!ctx->Extensions.ARB_texture_non_power_of_two) {
- if (width > 0 && !_mesa_is_pow_two(width - 2 * border))
- return GL_FALSE;
- if (height > 0 && !_mesa_is_pow_two(height - 2 * border))
- return GL_FALSE;
- }
- return GL_TRUE;
-
- case GL_PROXY_TEXTURE_1D_ARRAY_EXT:
- maxSize = 1 << (ctx->Const.MaxTextureLevels - 1);
- if (width < 2 * border || width > 2 + maxSize)
- return GL_FALSE;
- if (height < 1 || height > ctx->Const.MaxArrayTextureLayers)
- return GL_FALSE;
- if (level >= ctx->Const.MaxTextureLevels)
- return GL_FALSE;
- if (!ctx->Extensions.ARB_texture_non_power_of_two) {
- if (width > 0 && !_mesa_is_pow_two(width - 2 * border))
- return GL_FALSE;
- }
- return GL_TRUE;
-
- case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
- maxSize = 1 << (ctx->Const.MaxTextureLevels - 1);
- if (width < 2 * border || width > 2 + maxSize)
- return GL_FALSE;
- if (height < 2 * border || height > 2 + maxSize)
- return GL_FALSE;
- if (depth < 1 || depth > ctx->Const.MaxArrayTextureLayers)
- return GL_FALSE;
- if (level >= ctx->Const.MaxTextureLevels)
- return GL_FALSE;
- if (!ctx->Extensions.ARB_texture_non_power_of_two) {
- if (width > 0 && !_mesa_is_pow_two(width - 2 * border))
- return GL_FALSE;
- if (height > 0 && !_mesa_is_pow_two(height - 2 * border))
- return GL_FALSE;
- }
- return GL_TRUE;
-
- default:
- _mesa_problem(ctx, "Invalid target in _mesa_test_proxy_teximage");
- return GL_FALSE;
- }
-}
-
-
-/**
- * Check if the memory used by the texture would exceed the driver's limit.
- * This lets us support a max 3D texture size of 8K (for example) but
- * prevents allocating a full 8K x 8K x 8K texture.
- * XXX this could be rolled into the proxy texture size test (above) but
- * we don't have the actual texture internal format at that point.
- */
-static GLboolean
-legal_texture_size(struct gl_context *ctx, gl_format format,
- GLint width, GLint height, GLint depth)
-{
- uint64_t bytes = _mesa_format_image_size64(format, width, height, depth);
- uint64_t mbytes = bytes / (1024 * 1024); /* convert to MB */
- return mbytes <= (uint64_t) ctx->Const.MaxTextureMbytes;
-}
-
-
-
-/**
- * Helper function to determine whether a target and specific compression
- * format are supported.
- */
-static GLboolean
-target_can_be_compressed(const struct gl_context *ctx, GLenum target,
- GLenum intFormat)
-{
- (void) intFormat; /* not used yet */
-
- switch (target) {
- case GL_TEXTURE_2D:
- case GL_PROXY_TEXTURE_2D:
- return GL_TRUE; /* true for any compressed format so far */
- case GL_PROXY_TEXTURE_CUBE_MAP:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
- return ctx->Extensions.ARB_texture_cube_map;
- case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
- case GL_TEXTURE_2D_ARRAY_EXT:
- return (ctx->Extensions.MESA_texture_array ||
- ctx->Extensions.EXT_texture_array);
- default:
- return GL_FALSE;
- }
-}
-
-
-/**
- * Check if the given texture target value is legal for a
- * glTexImage1/2/3D call.
- */
-static GLboolean
-legal_teximage_target(struct gl_context *ctx, GLuint dims, GLenum target)
-{
- switch (dims) {
- case 1:
- switch (target) {
- case GL_TEXTURE_1D:
- case GL_PROXY_TEXTURE_1D:
- return GL_TRUE;
- default:
- return GL_FALSE;
- }
- case 2:
- switch (target) {
- case GL_TEXTURE_2D:
- case GL_PROXY_TEXTURE_2D:
- return GL_TRUE;
- case GL_PROXY_TEXTURE_CUBE_MAP:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
- return ctx->Extensions.ARB_texture_cube_map;
- case GL_TEXTURE_RECTANGLE_NV:
- case GL_PROXY_TEXTURE_RECTANGLE_NV:
- return ctx->Extensions.NV_texture_rectangle;
- case GL_TEXTURE_1D_ARRAY_EXT:
- case GL_PROXY_TEXTURE_1D_ARRAY_EXT:
- return (ctx->Extensions.MESA_texture_array ||
- ctx->Extensions.EXT_texture_array);
- default:
- return GL_FALSE;
- }
- case 3:
- switch (target) {
- case GL_TEXTURE_3D:
- case GL_PROXY_TEXTURE_3D:
- return GL_TRUE;
- case GL_TEXTURE_2D_ARRAY_EXT:
- case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
- return (ctx->Extensions.MESA_texture_array ||
- ctx->Extensions.EXT_texture_array);
- default:
- return GL_FALSE;
- }
- default:
- _mesa_problem(ctx, "invalid dims=%u in legal_teximage_target()", dims);
- return GL_FALSE;
- }
-}
-
-
-/**
- * Check if the given texture target value is legal for a
- * glTexSubImage, glCopyTexSubImage or glCopyTexImage call.
- * The difference compared to legal_teximage_target() above is that
- * proxy targets are not supported.
- */
-static GLboolean
-legal_texsubimage_target(struct gl_context *ctx, GLuint dims, GLenum target)
-{
- switch (dims) {
- case 1:
- return target == GL_TEXTURE_1D;
- case 2:
- switch (target) {
- case GL_TEXTURE_2D:
- return GL_TRUE;
- case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
- case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
- case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
- return ctx->Extensions.ARB_texture_cube_map;
- case GL_TEXTURE_RECTANGLE_NV:
- return ctx->Extensions.NV_texture_rectangle;
- case GL_TEXTURE_1D_ARRAY_EXT:
- return (ctx->Extensions.MESA_texture_array ||
- ctx->Extensions.EXT_texture_array);
- default:
- return GL_FALSE;
- }
- case 3:
- switch (target) {
- case GL_TEXTURE_3D:
- return GL_TRUE;
- case GL_TEXTURE_2D_ARRAY_EXT:
- return (ctx->Extensions.MESA_texture_array ||
- ctx->Extensions.EXT_texture_array);
- default:
- return GL_FALSE;
- }
- default:
- _mesa_problem(ctx, "invalid dims=%u in legal_texsubimage_target()",
- dims);
- return GL_FALSE;
- }
-}
-
-
-/**
- * Test the glTexImage[123]D() parameters for errors.
- *
- * \param ctx GL context.
- * \param dimensions texture image dimensions (must be 1, 2 or 3).
- * \param target texture target given by the user.
- * \param level image level given by the user.
- * \param internalFormat internal format given by the user.
- * \param format pixel data format given by the user.
- * \param type pixel data type given by the user.
- * \param width image width given by the user.
- * \param height image height given by the user.
- * \param depth image depth given by the user.
- * \param border image border given by the user.
- *
- * \return GL_TRUE if an error was detected, or GL_FALSE if no errors.
- *
- * Verifies each of the parameters against the constants specified in
- * __struct gl_contextRec::Const and the supported extensions, and according
- * to the OpenGL specification.
- */
-static GLboolean
-texture_error_check( struct gl_context *ctx,
- GLuint dimensions, GLenum target,
- GLint level, GLint internalFormat,
- GLenum format, GLenum type,
- GLint width, GLint height,
- GLint depth, GLint border )
-{
- const GLenum proxyTarget = get_proxy_target(target);
- const GLboolean isProxy = target == proxyTarget;
- GLboolean sizeOK = GL_TRUE;
- GLboolean colorFormat, indexFormat;
-
- /* Basic level check (more checking in ctx->Driver.TestProxyTexImage) */
- if (level < 0 || level >= MAX_TEXTURE_LEVELS) {
- if (!isProxy) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glTexImage%dD(level=%d)", dimensions, level);
- }
- return GL_TRUE;
- }
-
- /* Check border */
- if (border < 0 || border > 1 ||
- ((target == GL_TEXTURE_RECTANGLE_NV ||
- target == GL_PROXY_TEXTURE_RECTANGLE_NV) && border != 0)) {
- if (!isProxy) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glTexImage%dD(border=%d)", dimensions, border);
- }
- return GL_TRUE;
- }
-
- if (width < 0 || height < 0 || depth < 0) {
- if (!isProxy) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glTexImage%dD(width, height or depth < 0)", dimensions);
- }
- return GL_TRUE;
- }
-
- /* Do this simple check before calling the TestProxyTexImage() function */
- if (proxyTarget == GL_PROXY_TEXTURE_CUBE_MAP_ARB) {
- sizeOK = (width == height);
- }
-
- /*
- * Use the proxy texture driver hook to see if the size/level/etc are
- * legal.
- */
- sizeOK = sizeOK && ctx->Driver.TestProxyTexImage(ctx, proxyTarget, level,
- internalFormat, format,
- type, width, height,
- depth, border);
- if (!sizeOK) {
- if (!isProxy) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glTexImage%dD(level=%d, width=%d, height=%d, depth=%d)",
- dimensions, level, width, height, depth);
- }
- return GL_TRUE;
- }
-
- /* Check internalFormat */
- if (_mesa_base_tex_format(ctx, internalFormat) < 0) {
- if (!isProxy) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glTexImage%dD(internalFormat=%s)",
- dimensions, _mesa_lookup_enum_by_nr(internalFormat));
- }
- return GL_TRUE;
- }
-
- /* Check incoming image format and type */
- if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
- /* Normally, GL_INVALID_OPERATION is generated by a format/type
- * mismatch (see the 1.2 spec page 94, sec 3.6.4.). But with the
- * GL_EXT_texture_integer extension, some combinations should generate
- * GL_INVALID_ENUM instead (grr!).
- */
- if (!isProxy) {
- GLenum error = _mesa_is_integer_format(format)
- ? GL_INVALID_ENUM : GL_INVALID_OPERATION;
- _mesa_error(ctx, error,
- "glTexImage%dD(incompatible format 0x%x, type 0x%x)",
- dimensions, format, type);
- }
- return GL_TRUE;
- }
-
- /* make sure internal format and format basically agree */
- colorFormat = _mesa_is_color_format(format);
- indexFormat = _mesa_is_index_format(format);
- if ((_mesa_is_color_format(internalFormat) && !colorFormat && !indexFormat) ||
- (_mesa_is_index_format(internalFormat) && !indexFormat) ||
- (_mesa_is_depth_format(internalFormat) != _mesa_is_depth_format(format)) ||
- (_mesa_is_ycbcr_format(internalFormat) != _mesa_is_ycbcr_format(format)) ||
- (_mesa_is_depthstencil_format(internalFormat) != _mesa_is_depthstencil_format(format)) ||
- (_mesa_is_dudv_format(internalFormat) != _mesa_is_dudv_format(format))) {
- if (!isProxy)
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTexImage%dD(incompatible internalFormat 0x%x, format 0x%x)",
- dimensions, internalFormat, format);
- return GL_TRUE;
- }
-
- /* additional checks for ycbcr textures */
- if (internalFormat == GL_YCBCR_MESA) {
- ASSERT(ctx->Extensions.MESA_ycbcr_texture);
- if (type != GL_UNSIGNED_SHORT_8_8_MESA &&
- type != GL_UNSIGNED_SHORT_8_8_REV_MESA) {
- char message[100];
- _mesa_snprintf(message, sizeof(message),
- "glTexImage%dD(format/type YCBCR mismatch", dimensions);
- _mesa_error(ctx, GL_INVALID_ENUM, "%s", message);
- return GL_TRUE; /* error */
- }
- if (target != GL_TEXTURE_2D &&
- target != GL_PROXY_TEXTURE_2D &&
- target != GL_TEXTURE_RECTANGLE_NV &&
- target != GL_PROXY_TEXTURE_RECTANGLE_NV) {
- if (!isProxy)
- _mesa_error(ctx, GL_INVALID_ENUM, "glTexImage(target)");
- return GL_TRUE;
- }
- if (border != 0) {
- if (!isProxy) {
- char message[100];
- _mesa_snprintf(message, sizeof(message),
- "glTexImage%dD(format=GL_YCBCR_MESA and border=%d)",
- dimensions, border);
- _mesa_error(ctx, GL_INVALID_VALUE, "%s", message);
- }
- return GL_TRUE;
- }
- }
-
- /* additional checks for depth textures */
- if (_mesa_base_tex_format(ctx, internalFormat) == GL_DEPTH_COMPONENT) {
- /* Only 1D, 2D and rectangular textures supported, not 3D or cubes */
- if (target != GL_TEXTURE_1D &&
- target != GL_PROXY_TEXTURE_1D &&
- target != GL_TEXTURE_2D &&
- target != GL_PROXY_TEXTURE_2D &&
- target != GL_TEXTURE_RECTANGLE_ARB &&
- target != GL_PROXY_TEXTURE_RECTANGLE_ARB) {
- if (!isProxy)
- _mesa_error(ctx, GL_INVALID_ENUM,
- "glTexImage(target/internalFormat)");
- return GL_TRUE;
- }
- }
-
- /* additional checks for compressed textures */
- if (_mesa_is_compressed_format(ctx, internalFormat)) {
- if (!target_can_be_compressed(ctx, target, internalFormat)) {
- if (!isProxy)
- _mesa_error(ctx, GL_INVALID_ENUM,
- "glTexImage%dD(target)", dimensions);
- return GL_TRUE;
- }
- if (border != 0) {
- if (!isProxy) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTexImage%dD(border!=0)", dimensions);
- }
- return GL_TRUE;
- }
- }
-
- /* additional checks for integer textures */
- if (ctx->Extensions.EXT_texture_integer &&
- (_mesa_is_integer_format(format) !=
- _mesa_is_integer_format(internalFormat))) {
- if (!isProxy) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTexImage%dD(integer/non-integer format mismatch)",
- dimensions);
- }
- return GL_TRUE;
- }
-
- /* if we get here, the parameters are OK */
- return GL_FALSE;
-}
-
-
-/**
- * Test glTexSubImage[123]D() parameters for errors.
- *
- * \param ctx GL context.
- * \param dimensions texture image dimensions (must be 1, 2 or 3).
- * \param target texture target given by the user.
- * \param level image level given by the user.
- * \param xoffset sub-image x offset given by the user.
- * \param yoffset sub-image y offset given by the user.
- * \param zoffset sub-image z offset given by the user.
- * \param format pixel data format given by the user.
- * \param type pixel data type given by the user.
- * \param width image width given by the user.
- * \param height image height given by the user.
- * \param depth image depth given by the user.
- *
- * \return GL_TRUE if an error was detected, or GL_FALSE if no errors.
- *
- * Verifies each of the parameters against the constants specified in
- * __struct gl_contextRec::Const and the supported extensions, and according
- * to the OpenGL specification.
- */
-static GLboolean
-subtexture_error_check( struct gl_context *ctx, GLuint dimensions,
- GLenum target, GLint level,
- GLint xoffset, GLint yoffset, GLint zoffset,
- GLint width, GLint height, GLint depth,
- GLenum format, GLenum type )
-{
- /* Basic level check */
- if (level < 0 || level >= MAX_TEXTURE_LEVELS) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glTexSubImage2D(level=%d)", level);
- return GL_TRUE;
- }
-
- /* Check for negative sizes */
- if (width < 0) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glTexSubImage%dD(width=%d)", dimensions, width);
- return GL_TRUE;
- }
- if (height < 0 && dimensions > 1) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glTexSubImage%dD(height=%d)", dimensions, height);
- return GL_TRUE;
- }
- if (depth < 0 && dimensions > 2) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glTexSubImage%dD(depth=%d)", dimensions, depth);
- return GL_TRUE;
- }
-
- if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
- /* As with the glTexImage2D check above, the error code here
- * depends on texture integer.
- */
- GLenum error = _mesa_is_integer_format(format)
- ? GL_INVALID_OPERATION : GL_INVALID_ENUM;
- _mesa_error(ctx, error,
- "glTexSubImage%dD(incompatible format 0x%x, type 0x%x)",
- dimensions, format, type);
- return GL_TRUE;
- }
-
- return GL_FALSE;
-}
-
-
-/**
- * Do second part of glTexSubImage which depends on the destination texture.
- * \return GL_TRUE if error recorded, GL_FALSE otherwise
- */
-static GLboolean
-subtexture_error_check2( struct gl_context *ctx, GLuint dimensions,
- GLenum target, GLint level,
- GLint xoffset, GLint yoffset, GLint zoffset,
- GLint width, GLint height, GLint depth,
- GLenum format, GLenum type,
- const struct gl_texture_image *destTex )
-{
- if (!destTex) {
- /* undefined image level */
- _mesa_error(ctx, GL_INVALID_OPERATION, "glTexSubImage%dD", dimensions);
- return GL_TRUE;
- }
-
- if (xoffset < -((GLint)destTex->Border)) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage%dD(xoffset)",
- dimensions);
- return GL_TRUE;
- }
- if (xoffset + width > (GLint) (destTex->Width + destTex->Border)) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage%dD(xoffset+width)",
- dimensions);
- return GL_TRUE;
- }
- if (dimensions > 1) {
- if (yoffset < -((GLint)destTex->Border)) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage%dD(yoffset)",
- dimensions);
- return GL_TRUE;
- }
- if (yoffset + height > (GLint) (destTex->Height + destTex->Border)) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage%dD(yoffset+height)",
- dimensions);
- return GL_TRUE;
- }
- }
- if (dimensions > 2) {
- if (zoffset < -((GLint)destTex->Border)) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage3D(zoffset)");
- return GL_TRUE;
- }
- if (zoffset + depth > (GLint) (destTex->Depth + destTex->Border)) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage3D(zoffset+depth)");
- return GL_TRUE;
- }
- }
-
- if (_mesa_is_format_compressed(destTex->TexFormat)) {
- GLuint bw, bh;
-
- /* do tests which depend on compression block size */
- _mesa_get_format_block_size(destTex->TexFormat, &bw, &bh);
-
- /* offset must be multiple of block size */
- if ((xoffset % bw != 0) || (yoffset % bh != 0)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTexSubImage%dD(xoffset = %d, yoffset = %d)",
- dimensions, xoffset, yoffset);
- return GL_TRUE;
- }
- /* size must be multiple of bw by bh or equal to whole texture size */
- if ((width % bw != 0) && (GLuint) width != destTex->Width) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTexSubImage%dD(width = %d)", dimensions, width);
- return GL_TRUE;
- }
- if ((height % bh != 0) && (GLuint) height != destTex->Height) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTexSubImage%dD(height = %d)", dimensions, height);
- return GL_TRUE;
- }
- }
-
- return GL_FALSE;
-}
-
-
-/**
- * Test glCopyTexImage[12]D() parameters for errors.
- *
- * \param ctx GL context.
- * \param dimensions texture image dimensions (must be 1, 2 or 3).
- * \param target texture target given by the user.
- * \param level image level given by the user.
- * \param internalFormat internal format given by the user.
- * \param width image width given by the user.
- * \param height image height given by the user.
- * \param border texture border.
- *
- * \return GL_TRUE if an error was detected, or GL_FALSE if no errors.
- *
- * Verifies each of the parameters against the constants specified in
- * __struct gl_contextRec::Const and the supported extensions, and according
- * to the OpenGL specification.
- */
-static GLboolean
-copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
- GLenum target, GLint level, GLint internalFormat,
- GLint width, GLint height, GLint border )
-{
- const GLenum proxyTarget = get_proxy_target(target);
- const GLenum type = GL_FLOAT;
- GLboolean sizeOK;
- GLint format;
-
- /* check target */
- if (!legal_texsubimage_target(ctx, dimensions, target)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glCopyTexImage%uD(target=%s)",
- dimensions, _mesa_lookup_enum_by_nr(target));
- return GL_TRUE;
- }
-
- /* Basic level check (more checking in ctx->Driver.TestProxyTexImage) */
- if (level < 0 || level >= MAX_TEXTURE_LEVELS) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexImage%dD(level=%d)", dimensions, level);
- return GL_TRUE;
- }
-
- /* Check that the source buffer is complete */
- if (ctx->ReadBuffer->Name) {
- if (ctx->ReadBuffer->_Status == 0) {
- _mesa_test_framebuffer_completeness(ctx, ctx->ReadBuffer);
- }
- if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
- _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
- "glCopyTexImage%dD(invalid readbuffer)", dimensions);
- return GL_TRUE;
- }
- }
-
- /* Check border */
- if (border < 0 || border > 1 ||
- ((target == GL_TEXTURE_RECTANGLE_NV ||
- target == GL_PROXY_TEXTURE_RECTANGLE_NV) && border != 0)) {
- return GL_TRUE;
- }
-
- format = _mesa_base_tex_format(ctx, internalFormat);
- if (format < 0) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexImage%dD(internalFormat)", dimensions);
- return GL_TRUE;
- }
-
- if (!_mesa_source_buffer_exists(ctx, format)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCopyTexImage%dD(missing readbuffer)", dimensions);
- return GL_TRUE;
- }
-
- /* Do size, level checking */
- sizeOK = (proxyTarget == GL_PROXY_TEXTURE_CUBE_MAP_ARB)
- ? (width == height) : 1;
-
- sizeOK = sizeOK && ctx->Driver.TestProxyTexImage(ctx, proxyTarget, level,
- internalFormat, format,
- type, width, height,
- 1, border);
-
- if (!sizeOK) {
- if (dimensions == 1) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexImage1D(width=%d)", width);
- }
- else {
- ASSERT(dimensions == 2);
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexImage2D(width=%d, height=%d)", width, height);
- }
- return GL_TRUE;
- }
-
- if (_mesa_is_compressed_format(ctx, internalFormat)) {
- if (!target_can_be_compressed(ctx, target, internalFormat)) {
- _mesa_error(ctx, GL_INVALID_ENUM,
- "glCopyTexImage%dD(target)", dimensions);
- return GL_TRUE;
- }
- if (border != 0) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCopyTexImage%dD(border!=0)", dimensions);
- return GL_TRUE;
- }
- }
- else if (_mesa_is_depth_format(internalFormat)) {
- /* make sure we have depth/stencil buffers */
- if (!ctx->ReadBuffer->_DepthBuffer) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCopyTexImage%dD(no depth)", dimensions);
- return GL_TRUE;
- }
- }
- else if (_mesa_is_depthstencil_format(internalFormat)) {
- /* make sure we have depth/stencil buffers */
- if (!ctx->ReadBuffer->_DepthBuffer || !ctx->ReadBuffer->_StencilBuffer) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCopyTexImage%dD(no depth/stencil buffer)", dimensions);
- return GL_TRUE;
- }
- }
-
- /* if we get here, the parameters are OK */
- return GL_FALSE;
-}
-
-
-/**
- * Test glCopyTexSubImage[12]D() parameters for errors.
- * Note that this is the first part of error checking.
- * See also copytexsubimage_error_check2() below for the second part.
- *
- * \param ctx GL context.
- * \param dimensions texture image dimensions (must be 1, 2 or 3).
- * \param target texture target given by the user.
- * \param level image level given by the user.
- *
- * \return GL_TRUE if an error was detected, or GL_FALSE if no errors.
- */
-static GLboolean
-copytexsubimage_error_check1( struct gl_context *ctx, GLuint dimensions,
- GLenum target, GLint level)
-{
- /* Check that the source buffer is complete */
- if (ctx->ReadBuffer->Name) {
- if (ctx->ReadBuffer->_Status == 0) {
- _mesa_test_framebuffer_completeness(ctx, ctx->ReadBuffer);
- }
- if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
- _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
- "glCopyTexImage%dD(invalid readbuffer)", dimensions);
- return GL_TRUE;
- }
- }
-
- /* check target (proxies not allowed) */
- if (!legal_texsubimage_target(ctx, dimensions, target)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glCopyTexSubImage%uD(target=%s)",
- dimensions, _mesa_lookup_enum_by_nr(target));
- return GL_TRUE;
- }
-
- /* Check level */
- if (level < 0 || level >= MAX_TEXTURE_LEVELS) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexSubImage%dD(level=%d)", dimensions, level);
- return GL_TRUE;
- }
-
- return GL_FALSE;
-}
-
-
-/**
- * Second part of error checking for glCopyTexSubImage[12]D().
- * \param xoffset sub-image x offset given by the user.
- * \param yoffset sub-image y offset given by the user.
- * \param zoffset sub-image z offset given by the user.
- * \param width image width given by the user.
- * \param height image height given by the user.
- */
-static GLboolean
-copytexsubimage_error_check2( struct gl_context *ctx, GLuint dimensions,
- GLenum target, GLint level,
- GLint xoffset, GLint yoffset, GLint zoffset,
- GLsizei width, GLsizei height,
- const struct gl_texture_image *teximage )
-{
- /* check that dest tex image exists */
- if (!teximage) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCopyTexSubImage%dD(undefined texture level: %d)",
- dimensions, level);
- return GL_TRUE;
- }
-
- /* Check size */
- if (width < 0) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexSubImage%dD(width=%d)", dimensions, width);
- return GL_TRUE;
- }
- if (dimensions > 1 && height < 0) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexSubImage%dD(height=%d)", dimensions, height);
- return GL_TRUE;
- }
-
- /* check x/y offsets */
- if (xoffset < -((GLint)teximage->Border)) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexSubImage%dD(xoffset=%d)", dimensions, xoffset);
- return GL_TRUE;
- }
- if (xoffset + width > (GLint) (teximage->Width + teximage->Border)) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexSubImage%dD(xoffset+width)", dimensions);
- return GL_TRUE;
- }
- if (dimensions > 1) {
- if (yoffset < -((GLint)teximage->Border)) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexSubImage%dD(yoffset=%d)", dimensions, yoffset);
- return GL_TRUE;
- }
- /* NOTE: we're adding the border here, not subtracting! */
- if (yoffset + height > (GLint) (teximage->Height + teximage->Border)) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexSubImage%dD(yoffset+height)", dimensions);
- return GL_TRUE;
- }
- }
-
- /* check z offset */
- if (dimensions > 2) {
- if (zoffset < -((GLint)teximage->Border)) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexSubImage%dD(zoffset)", dimensions);
- return GL_TRUE;
- }
- if (zoffset > (GLint) (teximage->Depth + teximage->Border)) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexSubImage%dD(zoffset+depth)", dimensions);
- return GL_TRUE;
- }
- }
-
- if (_mesa_is_format_compressed(teximage->TexFormat)) {
- /* offset must be multiple of 4 */
- if ((xoffset & 3) || (yoffset & 3)) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexSubImage%dD(xoffset or yoffset)", dimensions);
- return GL_TRUE;
- }
- /* size must be multiple of 4 */
- if ((width & 3) != 0 && (GLuint) width != teximage->Width) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexSubImage%dD(width)", dimensions);
- return GL_TRUE;
- }
- if ((height & 3) != 0 && (GLuint) height != teximage->Height) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCopyTexSubImage%dD(height)", dimensions);
- return GL_TRUE;
- }
- }
-
- if (teximage->InternalFormat == GL_YCBCR_MESA) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glCopyTexSubImage2D");
- return GL_TRUE;
- }
-
- if (!_mesa_source_buffer_exists(ctx, teximage->_BaseFormat)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCopyTexSubImage%dD(missing readbuffer, format=0x%x)",
- dimensions, teximage->_BaseFormat);
- return GL_TRUE;
- }
-
- if (teximage->_BaseFormat == GL_DEPTH_COMPONENT) {
- if (!ctx->ReadBuffer->_DepthBuffer) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCopyTexSubImage%dD(no depth buffer)",
- dimensions);
- return GL_TRUE;
- }
- }
- else if (teximage->_BaseFormat == GL_DEPTH_STENCIL_EXT) {
- if (!ctx->ReadBuffer->_DepthBuffer || !ctx->ReadBuffer->_StencilBuffer) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCopyTexSubImage%dD(no depth/stencil buffer)",
- dimensions);
- return GL_TRUE;
- }
- }
-
- /* If copying into an integer texture, the source buffer must also be
- * integer-valued.
- */
- if (_mesa_is_format_integer_color(teximage->TexFormat)) {
- struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
- if (!_mesa_is_format_integer_color(rb->Format)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCopyTexSubImage%dD(source buffer is not integer format)",
- dimensions);
- return GL_TRUE;
- }
- }
-
- /* if we get here, the parameters are OK */
- return GL_FALSE;
-}
-
-
-/** Callback info for walking over FBO hash table */
-struct cb_info
-{
- struct gl_context *ctx;
- struct gl_texture_object *texObj;
- GLuint level, face;
-};
-
-
-/**
- * Check render to texture callback. Called from _mesa_HashWalk().
- */
-static void
-check_rtt_cb(GLuint key, void *data, void *userData)
-{
- struct gl_framebuffer *fb = (struct gl_framebuffer *) data;
- const struct cb_info *info = (struct cb_info *) userData;
- struct gl_context *ctx = info->ctx;
- const struct gl_texture_object *texObj = info->texObj;
- const GLuint level = info->level, face = info->face;
-
- /* If this is a user-created FBO */
- if (fb->Name) {
- GLuint i;
- /* check if any of the FBO's attachments point to 'texObj' */
- for (i = 0; i < BUFFER_COUNT; i++) {
- struct gl_renderbuffer_attachment *att = fb->Attachment + i;
- if (att->Type == GL_TEXTURE &&
- att->Texture == texObj &&
- att->TextureLevel == level &&
- att->CubeMapFace == face) {
- ASSERT(_mesa_get_attachment_teximage(att));
- /* Tell driver about the new renderbuffer texture */
- ctx->Driver.RenderTexture(ctx, ctx->DrawBuffer, att);
- /* Mark fb status as indeterminate to force re-validation */
- fb->_Status = 0;
- }
- }
- }
-}
-
-
-/**
- * When a texture image is specified we have to check if it's bound to
- * any framebuffer objects (render to texture) in order to detect changes
- * in size or format since that effects FBO completeness.
- * Any FBOs rendering into the texture must be re-validated.
- */
-static void
-update_fbo_texture(struct gl_context *ctx, struct gl_texture_object *texObj,
- GLuint face, GLuint level)
-{
- /* Only check this texture if it's been marked as RenderToTexture */
- if (texObj->_RenderToTexture) {
- struct cb_info info;
- info.ctx = ctx;
- info.texObj = texObj;
- info.level = level;
- info.face = face;
- _mesa_HashWalk(ctx->Shared->FrameBuffers, check_rtt_cb, &info);
- }
-}
-
-
-/**
- * If the texture object's GenerateMipmap flag is set and we've
- * changed the texture base level image, regenerate the rest of the
- * mipmap levels now.
- */
-static INLINE void
-check_gen_mipmap(struct gl_context *ctx, GLenum target,
- struct gl_texture_object *texObj, GLint level)
-{
- ASSERT(target != GL_TEXTURE_CUBE_MAP);
- if (texObj->GenerateMipmap &&
- level == texObj->BaseLevel &&
- level < texObj->MaxLevel) {
- ASSERT(ctx->Driver.GenerateMipmap);
- ctx->Driver.GenerateMipmap(ctx, target, texObj);
- }
-}
-
-
-/** Debug helper: override the user-requested internal format */
-static GLenum
-override_internal_format(GLenum internalFormat, GLint width, GLint height)
-{
-#if 0
- if (internalFormat == GL_RGBA16F_ARB ||
- internalFormat == GL_RGBA32F_ARB) {
- printf("Convert rgba float tex to int %d x %d\n", width, height);
- return GL_RGBA;
- }
- else if (internalFormat == GL_RGB16F_ARB ||
- internalFormat == GL_RGB32F_ARB) {
- printf("Convert rgb float tex to int %d x %d\n", width, height);
- return GL_RGB;
- }
- else if (internalFormat == GL_LUMINANCE_ALPHA16F_ARB ||
- internalFormat == GL_LUMINANCE_ALPHA32F_ARB) {
- printf("Convert luminance float tex to int %d x %d\n", width, height);
- return GL_LUMINANCE_ALPHA;
- }
- else if (internalFormat == GL_LUMINANCE16F_ARB ||
- internalFormat == GL_LUMINANCE32F_ARB) {
- printf("Convert luminance float tex to int %d x %d\n", width, height);
- return GL_LUMINANCE;
- }
- else if (internalFormat == GL_ALPHA16F_ARB ||
- internalFormat == GL_ALPHA32F_ARB) {
- printf("Convert luminance float tex to int %d x %d\n", width, height);
- return GL_ALPHA;
- }
- /*
- else if (internalFormat == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT) {
- internalFormat = GL_RGBA;
- }
- */
- else {
- return internalFormat;
- }
-#else
- return internalFormat;
-#endif
-}
-
-
-/**
- * Choose the actual hardware format for a texture image.
- * Try to use the same format as the previous image level when possible.
- * Otherwise, ask the driver for the best format.
- * It's important to try to choose a consistant format for all levels
- * for efficient texture memory layout/allocation. In particular, this
- * comes up during automatic mipmap generation.
- */
-gl_format
-_mesa_choose_texture_format(struct gl_context *ctx,
- struct gl_texture_object *texObj,
- GLenum target, GLint level,
- GLenum internalFormat, GLenum format, GLenum type)
-{
- gl_format f;
-
- /* see if we've already chosen a format for the previous level */
- if (level > 0) {
- struct gl_texture_image *prevImage =
- _mesa_select_tex_image(ctx, texObj, target, level - 1);
- /* See if the prev level is defined and has an internal format which
- * matches the new internal format.
- */
- if (prevImage &&
- prevImage->Width > 0 &&
- prevImage->InternalFormat == internalFormat) {
- /* use the same format */
- ASSERT(prevImage->TexFormat != MESA_FORMAT_NONE);
- return prevImage->TexFormat;
- }
- }
-
- /* choose format from scratch */
- f = ctx->Driver.ChooseTextureFormat(ctx, internalFormat, format, type);
- ASSERT(f != MESA_FORMAT_NONE);
- return f;
-}
-
-
-/**
- * Common code to implement all the glTexImage1D/2D/3D functions.
- */
-static void
-teximage(struct gl_context *ctx, GLuint dims,
- GLenum target, GLint level, GLint internalFormat,
- GLsizei width, GLsizei height, GLsizei depth,
- GLint border, GLenum format, GLenum type,
- const GLvoid *pixels)
-{
- GLboolean error;
-
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
- _mesa_debug(ctx, "glTexImage%uD %s %d %s %d %d %d %d %s %s %p\n",
- dims,
- _mesa_lookup_enum_by_nr(target), level,
- _mesa_lookup_enum_by_nr(internalFormat),
- width, height, depth, border,
- _mesa_lookup_enum_by_nr(format),
- _mesa_lookup_enum_by_nr(type), pixels);
-
- internalFormat = override_internal_format(internalFormat, width, height);
-
- /* target error checking */
- if (!legal_teximage_target(ctx, dims, target)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glTexImage%uD(target=%s)",
- dims, _mesa_lookup_enum_by_nr(target));
- return;
- }
-
- /* general error checking */
- error = texture_error_check(ctx, dims, target, level, internalFormat,
- format, type, width, height, depth, border);
-
- if (_mesa_is_proxy_texture(target)) {
- /* Proxy texture: just clear or set state depending on error checking */
- struct gl_texture_image *texImage =
- _mesa_get_proxy_tex_image(ctx, target, level);
-
- if (error) {
- /* when error, clear all proxy texture image parameters */
- if (texImage)
- clear_teximage_fields(texImage);
- }
- else {
- /* no error, set the tex image parameters */
- struct gl_texture_object *texObj =
- _mesa_get_current_tex_object(ctx, target);
- gl_format texFormat = _mesa_choose_texture_format(ctx, texObj,
- target, level,
- internalFormat,
- format, type);
-
- if (legal_texture_size(ctx, texFormat, width, height, depth)) {
- _mesa_init_teximage_fields(ctx, target, texImage, width, height,
- depth, border, internalFormat,
- texFormat);
- }
- else if (texImage) {
- clear_teximage_fields(texImage);
- }
- }
- }
- else {
- /* non-proxy target */
- const GLuint face = _mesa_tex_target_to_face(target);
- struct gl_texture_object *texObj;
- struct gl_texture_image *texImage;
-
- if (error) {
- return; /* error was recorded */
- }
-
- if (ctx->NewState & _NEW_PIXEL)
- _mesa_update_state(ctx);
-
- texObj = _mesa_get_current_tex_object(ctx, target);
-
- _mesa_lock_texture(ctx, texObj);
- {
- texImage = _mesa_get_tex_image(ctx, texObj, target, level);
-
- if (!texImage) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage%uD", dims);
- }
- else {
- gl_format texFormat;
-
- if (texImage->Data) {
- ctx->Driver.FreeTexImageData( ctx, texImage );
- }
-
- ASSERT(texImage->Data == NULL);
- texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
- internalFormat, format,
- type);
-
- if (legal_texture_size(ctx, texFormat, width, height, depth)) {
- _mesa_init_teximage_fields(ctx, target, texImage,
- width, height, depth,
- border, internalFormat, texFormat);
-
- /* Give the texture to the driver. <pixels> may be null. */
- ASSERT(ctx->Driver.TexImage3D);
- switch (dims) {
- case 1:
- ctx->Driver.TexImage1D(ctx, target, level, internalFormat,
- width, border, format,
- type, pixels, &ctx->Unpack, texObj,
- texImage);
- break;
- case 2:
- ctx->Driver.TexImage2D(ctx, target, level, internalFormat,
- width, height, border, format,
- type, pixels, &ctx->Unpack, texObj,
- texImage);
- break;
- case 3:
- ctx->Driver.TexImage3D(ctx, target, level, internalFormat,
- width, height, depth, border, format,
- type, pixels, &ctx->Unpack, texObj,
- texImage);
- break;
- default:
- _mesa_problem(ctx, "invalid dims=%u in teximage()", dims);
- }
-
- check_gen_mipmap(ctx, target, texObj, level);
-
- update_fbo_texture(ctx, texObj, face, level);
-
- /* state update */
- texObj->_Complete = GL_FALSE;
- ctx->NewState |= _NEW_TEXTURE;
- }
- else {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage%uD", dims);
- }
- }
- }
- _mesa_unlock_texture(ctx, texObj);
- }
-}
-
-
-/*
- * Called from the API. Note that width includes the border.
- */
-void GLAPIENTRY
-_mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
- GLsizei width, GLint border, GLenum format,
- GLenum type, const GLvoid *pixels )
-{
- GET_CURRENT_CONTEXT(ctx);
- teximage(ctx, 1, target, level, internalFormat, width, 1, 1,
- border, format, type, pixels);
-}
-
-
-void GLAPIENTRY
-_mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
- GLsizei width, GLsizei height, GLint border,
- GLenum format, GLenum type,
- const GLvoid *pixels )
-{
- GET_CURRENT_CONTEXT(ctx);
- teximage(ctx, 2, target, level, internalFormat, width, height, 1,
- border, format, type, pixels);
-}
-
-
-/*
- * Called by the API or display list executor.
- * Note that width and height include the border.
- */
-void GLAPIENTRY
-_mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
- GLsizei width, GLsizei height, GLsizei depth,
- GLint border, GLenum format, GLenum type,
- const GLvoid *pixels )
-{
- GET_CURRENT_CONTEXT(ctx);
- teximage(ctx, 3, target, level, internalFormat, width, height, depth,
- border, format, type, pixels);
-}
-
-
-void GLAPIENTRY
-_mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalFormat,
- GLsizei width, GLsizei height, GLsizei depth,
- GLint border, GLenum format, GLenum type,
- const GLvoid *pixels )
-{
- _mesa_TexImage3D(target, level, (GLint) internalFormat, width, height,
- depth, border, format, type, pixels);
-}
-
-
-#if FEATURE_OES_EGL_image
-void GLAPIENTRY
-_mesa_EGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image)
-{
- struct gl_texture_object *texObj;
- struct gl_texture_image *texImage;
- GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- if (!ctx->Extensions.OES_EGL_image) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glEGLImageTargetTexture2DOES(unsupported)");
- return;
- }
-
- if (target != GL_TEXTURE_2D) {
- _mesa_error(ctx, GL_INVALID_ENUM,
- "glEGLImageTargetTexture2D(target=%d)", target);
- return;
- }
-
- if (ctx->NewState & _NEW_PIXEL)
- _mesa_update_state(ctx);
-
- texObj = _mesa_get_current_tex_object(ctx, target);
- _mesa_lock_texture(ctx, texObj);
-
- texImage = _mesa_get_tex_image(ctx, texObj, target, 0);
- if (!texImage) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glEGLImageTargetTexture2D");
- } else {
- if (texImage->Data)
- ctx->Driver.FreeTexImageData( ctx, texImage );
-
- ASSERT(texImage->Data == NULL);
- ctx->Driver.EGLImageTargetTexture2D(ctx, target,
- texObj, texImage, image);
-
- /* state update */
- texObj->_Complete = GL_FALSE;
- ctx->NewState |= _NEW_TEXTURE;
- }
- _mesa_unlock_texture(ctx, texObj);
-
-}
-#endif
-
-
-
-/**
- * Implement all the glTexSubImage1/2/3D() functions.
- */
-static void
-texsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level,
- GLint xoffset, GLint yoffset, GLint zoffset,
- GLsizei width, GLsizei height, GLsizei depth,
- GLenum format, GLenum type, const GLvoid *pixels )
-{
- struct gl_texture_object *texObj;
- struct gl_texture_image *texImage;
-
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
- _mesa_debug(ctx, "glTexSubImage%uD %s %d %d %d %d %d %d %d %s %s %p\n",
- dims,
- _mesa_lookup_enum_by_nr(target), level,
- xoffset, yoffset, zoffset, width, height, depth,
- _mesa_lookup_enum_by_nr(format),
- _mesa_lookup_enum_by_nr(type), pixels);
-
- /* check target (proxies not allowed) */
- if (!legal_texsubimage_target(ctx, dims, target)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glTexSubImage%uD(target=%s)",
- dims, _mesa_lookup_enum_by_nr(target));
- return;
- }
-
- if (ctx->NewState & _NEW_PIXEL)
- _mesa_update_state(ctx);
-
- if (subtexture_error_check(ctx, dims, target, level, xoffset, yoffset, zoffset,
- width, height, depth, format, type)) {
- return; /* error was detected */
- }
-
- texObj = _mesa_get_current_tex_object(ctx, target);
-
- _mesa_lock_texture(ctx, texObj);
- {
- texImage = _mesa_select_tex_image(ctx, texObj, target, level);
-
- if (subtexture_error_check2(ctx, dims, target, level,
- xoffset, yoffset, zoffset,
- width, height, depth,
- format, type, texImage)) {
- /* error was recorded */
- }
- else if (width > 0 && height > 0 && height > 0) {
- /* If we have a border, offset=-1 is legal. Bias by border width. */
- switch (dims) {
- case 3:
- zoffset += texImage->Border;
- /* fall-through */
- case 2:
- yoffset += texImage->Border;
- /* fall-through */
- case 1:
- xoffset += texImage->Border;
- }
-
- switch (dims) {
- case 1:
- ctx->Driver.TexSubImage1D(ctx, target, level,
- xoffset, width,
- format, type, pixels,
- &ctx->Unpack, texObj, texImage );
- break;
- case 2:
- ctx->Driver.TexSubImage2D(ctx, target, level,
- xoffset, yoffset, width, height,
- format, type, pixels,
- &ctx->Unpack, texObj, texImage );
- break;
- case 3:
- ctx->Driver.TexSubImage3D(ctx, target, level,
- xoffset, yoffset, zoffset,
- width, height, depth,
- format, type, pixels,
- &ctx->Unpack, texObj, texImage );
- break;
- default:
- _mesa_problem(ctx, "unexpected dims in subteximage()");
- }
-
- check_gen_mipmap(ctx, target, texObj, level);
-
- ctx->NewState |= _NEW_TEXTURE;
- }
- }
- _mesa_unlock_texture(ctx, texObj);
-}
-
-
-void GLAPIENTRY
-_mesa_TexSubImage1D( GLenum target, GLint level,
- GLint xoffset, GLsizei width,
- GLenum format, GLenum type,
- const GLvoid *pixels )
-{
- GET_CURRENT_CONTEXT(ctx);
- texsubimage(ctx, 1, target, level,
- xoffset, 0, 0,
- width, 1, 1,
- format, type, pixels);
-}
-
-
-void GLAPIENTRY
-_mesa_TexSubImage2D( GLenum target, GLint level,
- GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type,
- const GLvoid *pixels )
-{
- GET_CURRENT_CONTEXT(ctx);
- texsubimage(ctx, 2, target, level,
- xoffset, yoffset, 0,
- width, height, 1,
- format, type, pixels);
-}
-
-
-
-void GLAPIENTRY
-_mesa_TexSubImage3D( GLenum target, GLint level,
- GLint xoffset, GLint yoffset, GLint zoffset,
- GLsizei width, GLsizei height, GLsizei depth,
- GLenum format, GLenum type,
- const GLvoid *pixels )
-{
- GET_CURRENT_CONTEXT(ctx);
- texsubimage(ctx, 3, target, level,
- xoffset, yoffset, zoffset,
- width, height, depth,
- format, type, pixels);
-}
-
-
-
-/**
- * Implement the glCopyTexImage1/2D() functions.
- */
-static void
-copyteximage(struct gl_context *ctx, GLuint dims,
- GLenum target, GLint level, GLenum internalFormat,
- GLint x, GLint y, GLsizei width, GLsizei height, GLint border )
-{
- struct gl_texture_object *texObj;
- struct gl_texture_image *texImage;
- const GLuint face = _mesa_tex_target_to_face(target);
-
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
- _mesa_debug(ctx, "glCopyTexImage%uD %s %d %s %d %d %d %d %d\n",
- dims,
- _mesa_lookup_enum_by_nr(target), level,
- _mesa_lookup_enum_by_nr(internalFormat),
- x, y, width, height, border);
-
- if (ctx->NewState & NEW_COPY_TEX_STATE)
- _mesa_update_state(ctx);
-
- if (copytexture_error_check(ctx, dims, target, level, internalFormat,
- width, height, border))
- return;
-
- texObj = _mesa_get_current_tex_object(ctx, target);
-
- _mesa_lock_texture(ctx, texObj);
- {
- texImage = _mesa_get_tex_image(ctx, texObj, target, level);
-
- if (!texImage) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexImage%uD", dims);
- }
- else {
- gl_format texFormat;
-
- if (texImage->Data) {
- ctx->Driver.FreeTexImageData( ctx, texImage );
- }
-
- ASSERT(texImage->Data == NULL);
-
- texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
- internalFormat, GL_NONE,
- GL_NONE);
-
- if (legal_texture_size(ctx, texFormat, width, height, 1)) {
- _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1,
- border, internalFormat, texFormat);
-
- ASSERT(ctx->Driver.CopyTexImage2D);
- if (dims == 1)
- ctx->Driver.CopyTexImage1D(ctx, target, level, internalFormat,
- x, y, width, border);
- else
- ctx->Driver.CopyTexImage2D(ctx, target, level, internalFormat,
- x, y, width, height, border);
-
- check_gen_mipmap(ctx, target, texObj, level);
-
- update_fbo_texture(ctx, texObj, face, level);
-
- /* state update */
- texObj->_Complete = GL_FALSE;
- ctx->NewState |= _NEW_TEXTURE;
- }
- else {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexImage%uD", dims);
- }
- }
- }
- _mesa_unlock_texture(ctx, texObj);
-}
-
-
-
-void GLAPIENTRY
-_mesa_CopyTexImage1D( GLenum target, GLint level,
- GLenum internalFormat,
- GLint x, GLint y,
- GLsizei width, GLint border )
-{
- GET_CURRENT_CONTEXT(ctx);
- copyteximage(ctx, 1, target, level, internalFormat, x, y, width, 1, border);
-}
-
-
-
-void GLAPIENTRY
-_mesa_CopyTexImage2D( GLenum target, GLint level, GLenum internalFormat,
- GLint x, GLint y, GLsizei width, GLsizei height,
- GLint border )
-{
- GET_CURRENT_CONTEXT(ctx);
- copyteximage(ctx, 2, target, level, internalFormat,
- x, y, width, height, border);
-}
-
-
-
-/**
- * Implementation for glCopyTexSubImage1/2/3D() functions.
- */
-static void
-copytexsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level,
- GLint xoffset, GLint yoffset, GLint zoffset,
- GLint x, GLint y, GLsizei width, GLsizei height)
-{
- struct gl_texture_object *texObj;
- struct gl_texture_image *texImage;
-
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
- _mesa_debug(ctx, "glCopyTexSubImage%uD %s %d %d %d %d %d %d %d %d\n",
- dims,
- _mesa_lookup_enum_by_nr(target),
- level, xoffset, yoffset, zoffset, x, y, width, height);
-
- if (ctx->NewState & NEW_COPY_TEX_STATE)
- _mesa_update_state(ctx);
-
- if (copytexsubimage_error_check1(ctx, dims, target, level))
- return;
-
- texObj = _mesa_get_current_tex_object(ctx, target);
-
- _mesa_lock_texture(ctx, texObj);
- {
- texImage = _mesa_select_tex_image(ctx, texObj, target, level);
-
- if (copytexsubimage_error_check2(ctx, dims, target, level, xoffset, yoffset,
- zoffset, width, height, texImage)) {
- /* error was recored */
- }
- else {
- /* If we have a border, offset=-1 is legal. Bias by border width. */
- switch (dims) {
- case 3:
- zoffset += texImage->Border;
- /* fall-through */
- case 2:
- yoffset += texImage->Border;
- /* fall-through */
- case 1:
- xoffset += texImage->Border;
- }
-
- if (_mesa_clip_copytexsubimage(ctx, &xoffset, &yoffset, &x, &y,
- &width, &height)) {
- switch (dims) {
- case 1:
- ctx->Driver.CopyTexSubImage1D(ctx, target, level,
- xoffset, x, y, width);
- break;
- case 2:
- ctx->Driver.CopyTexSubImage2D(ctx, target, level,
- xoffset, yoffset,
- x, y, width, height);
- break;
- case 3:
- ctx->Driver.CopyTexSubImage3D(ctx, target, level,
- xoffset, yoffset, zoffset,
- x, y, width, height);
- break;
- default:
- _mesa_problem(ctx, "bad dims in copytexsubimage()");
- }
-
- check_gen_mipmap(ctx, target, texObj, level);
-
- ctx->NewState |= _NEW_TEXTURE;
- }
- }
- }
- _mesa_unlock_texture(ctx, texObj);
-}
-
-
-void GLAPIENTRY
-_mesa_CopyTexSubImage1D( GLenum target, GLint level,
- GLint xoffset, GLint x, GLint y, GLsizei width )
-{
- GET_CURRENT_CONTEXT(ctx);
- copytexsubimage(ctx, 1, target, level, xoffset, 0, 0, x, y, width, 1);
-}
-
-
-
-void GLAPIENTRY
-_mesa_CopyTexSubImage2D( GLenum target, GLint level,
- GLint xoffset, GLint yoffset,
- GLint x, GLint y, GLsizei width, GLsizei height )
-{
- GET_CURRENT_CONTEXT(ctx);
- copytexsubimage(ctx, 2, target, level, xoffset, yoffset, 0, x, y,
- width, height);
-}
-
-
-
-void GLAPIENTRY
-_mesa_CopyTexSubImage3D( GLenum target, GLint level,
- GLint xoffset, GLint yoffset, GLint zoffset,
- GLint x, GLint y, GLsizei width, GLsizei height )
-{
- GET_CURRENT_CONTEXT(ctx);
- copytexsubimage(ctx, 3, target, level, xoffset, yoffset, zoffset,
- x, y, width, height);
-}
-
-
-
-
-/**********************************************************************/
-/****** Compressed Textures ******/
-/**********************************************************************/
-
-
-/**
- * Return expected size of a compressed texture.
- */
-static GLuint
-compressed_tex_size(GLsizei width, GLsizei height, GLsizei depth,
- GLenum glformat)
-{
- gl_format mesaFormat = _mesa_glenum_to_compressed_format(glformat);
- return _mesa_format_image_size(mesaFormat, width, height, depth);
-}
-
-
-/*
- * Return compressed texture block size, in pixels.
- */
-static void
-get_compressed_block_size(GLenum glformat, GLuint *bw, GLuint *bh)
-{
- gl_format mesaFormat = _mesa_glenum_to_compressed_format(glformat);
- _mesa_get_format_block_size(mesaFormat, bw, bh);
-}
-
-
-/**
- * Error checking for glCompressedTexImage[123]D().
- * \return error code or GL_NO_ERROR.
- */
-static GLenum
-compressed_texture_error_check(struct gl_context *ctx, GLint dimensions,
- GLenum target, GLint level,
- GLenum internalFormat, GLsizei width,
- GLsizei height, GLsizei depth, GLint border,
- GLsizei imageSize)
-{
- const GLenum proxyTarget = get_proxy_target(target);
- const GLint maxLevels = _mesa_max_texture_levels(ctx, target);
- GLint expectedSize;
-
- /* check level */
- if (level < 0 || level >= maxLevels)
- return GL_INVALID_VALUE;
-
- if (!target_can_be_compressed(ctx, target, internalFormat)) {
- return GL_INVALID_ENUM;
- }
-
- /* This will detect any invalid internalFormat value */
- if (!_mesa_is_compressed_format(ctx, internalFormat))
- return GL_INVALID_ENUM;
-
- /* This should really never fail */
- if (_mesa_base_tex_format(ctx, internalFormat) < 0)
- return GL_INVALID_ENUM;
-
- /* No compressed formats support borders at this time */
- if (border != 0)
- return GL_INVALID_VALUE;
-
- /* For cube map, width must equal height */
- if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB &&
- target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB && width != height)
- return GL_INVALID_VALUE;
-
- /* check image size against compression block size */
- {
- gl_format texFormat =
- ctx->Driver.ChooseTextureFormat(ctx, internalFormat,
- GL_NONE, GL_NONE);
- GLuint bw, bh;
-
- _mesa_get_format_block_size(texFormat, &bw, &bh);
- if ((width > bw && width % bw > 0) ||
- (height > bh && height % bh > 0)) {
- /*
- * Per GL_ARB_texture_compression: GL_INVALID_OPERATION is
- * generated [...] if any parameter combinations are not
- * supported by the specific compressed internal format.
- */
- return GL_INVALID_OPERATION;
- }
- }
-
- /* check image sizes */
- if (!ctx->Driver.TestProxyTexImage(ctx, proxyTarget, level,
- internalFormat, GL_NONE, GL_NONE,
- width, height, depth, border)) {
- /* See error comment above */
- return GL_INVALID_OPERATION;
- }
-
- /* check image size in bytes */
- expectedSize = compressed_tex_size(width, height, depth, internalFormat);
- if (expectedSize != imageSize) {
- /* Per GL_ARB_texture_compression: GL_INVALID_VALUE is generated [...]
- * if <imageSize> is not consistent with the format, dimensions, and
- * contents of the specified image.
- */
- return GL_INVALID_VALUE;
- }
-
- return GL_NO_ERROR;
-}
-
-
-/**
- * Error checking for glCompressedTexSubImage[123]D().
- * \warning There are some bad assumptions here about the size of compressed
- * texture tiles (multiple of 4) used to test the validity of the
- * offset and size parameters.
- * \return error code or GL_NO_ERROR.
- */
-static GLenum
-compressed_subtexture_error_check(struct gl_context *ctx, GLint dimensions,
- GLenum target, GLint level,
- GLint xoffset, GLint yoffset, GLint zoffset,
- GLsizei width, GLsizei height, GLsizei depth,
- GLenum format, GLsizei imageSize)
-{
- GLint expectedSize, maxLevels = 0, maxTextureSize;
- GLuint bw, bh;
- (void) zoffset;
-
- if (dimensions == 1) {
- /* 1D compressed textures not allowed */
- return GL_INVALID_ENUM;
- }
- else if (dimensions == 2) {
- if (target == GL_PROXY_TEXTURE_2D) {
- maxLevels = ctx->Const.MaxTextureLevels;
- }
- else if (target == GL_TEXTURE_2D) {
- maxLevels = ctx->Const.MaxTextureLevels;
- }
- else if (target == GL_PROXY_TEXTURE_CUBE_MAP_ARB) {
- if (!ctx->Extensions.ARB_texture_cube_map)
- return GL_INVALID_ENUM; /*target*/
- maxLevels = ctx->Const.MaxCubeTextureLevels;
- }
- else if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB &&
- target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB) {
- if (!ctx->Extensions.ARB_texture_cube_map)
- return GL_INVALID_ENUM; /*target*/
- maxLevels = ctx->Const.MaxCubeTextureLevels;
- }
- else {
- return GL_INVALID_ENUM; /*target*/
- }
- }
- else if (dimensions == 3) {
- /* 3D compressed textures not allowed */
- return GL_INVALID_ENUM;
- }
-
- maxTextureSize = 1 << (maxLevels - 1);
-
- /* this will catch any invalid compressed format token */
- if (!_mesa_is_compressed_format(ctx, format))
- return GL_INVALID_ENUM;
-
- if (width < 1 || width > maxTextureSize)
- return GL_INVALID_VALUE;
-
- if ((height < 1 || height > maxTextureSize)
- && dimensions > 1)
- return GL_INVALID_VALUE;
-
- if (level < 0 || level >= maxLevels)
- return GL_INVALID_VALUE;
-
- /*
- * do checks which depend on compression block size
- */
- get_compressed_block_size(format, &bw, &bh);
-
- if ((xoffset % bw != 0) || (yoffset % bh != 0))
- return GL_INVALID_VALUE;
-
- if ((width % bw != 0) && width != 2 && width != 1)
- return GL_INVALID_VALUE;
-
- if ((height % bh != 0) && height != 2 && height != 1)
- return GL_INVALID_VALUE;
-
- expectedSize = compressed_tex_size(width, height, depth, format);
- if (expectedSize != imageSize)
- return GL_INVALID_VALUE;
-
- return GL_NO_ERROR;
-}
-
-
-/**
- * Do second part of glCompressedTexSubImage error checking.
- * \return GL_TRUE if error found, GL_FALSE otherwise.
- */
-static GLboolean
-compressed_subtexture_error_check2(struct gl_context *ctx, GLuint dims,
- GLsizei width, GLsizei height,
- GLsizei depth, GLenum format,
- struct gl_texture_image *texImage)
-{
-
- if ((GLint) format != texImage->InternalFormat) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCompressedTexSubImage%uD(format=0x%x)", dims, format);
- return GL_TRUE;
- }
-
- if (((width == 1 || width == 2) &&
- width != (GLsizei) texImage->Width) ||
- (width > (GLsizei) texImage->Width)) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCompressedTexSubImage%uD(width=%d)", dims, width);
- return GL_TRUE;
- }
-
- if (dims >= 2) {
- if (((height == 1 || height == 2) &&
- height != (GLsizei) texImage->Height) ||
- (height > (GLsizei) texImage->Height)) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCompressedTexSubImage%uD(height=%d)", dims, height);
- return GL_TRUE;
- }
- }
-
- if (dims >= 3) {
- if (((depth == 1 || depth == 2) &&
- depth != (GLsizei) texImage->Depth) ||
- (depth > (GLsizei) texImage->Depth)) {
- _mesa_error(ctx, GL_INVALID_VALUE,
- "glCompressedTexSubImage%uD(depth=%d)", dims, depth);
- return GL_TRUE;
- }
- }
-
- return GL_FALSE;
-}
-
-
-/**
- * Implementation of the glCompressedTexImage1/2/3D() functions.
- */
-static void
-compressedteximage(struct gl_context *ctx, GLuint dims,
- GLenum target, GLint level,
- GLenum internalFormat, GLsizei width,
- GLsizei height, GLsizei depth, GLint border,
- GLsizei imageSize, const GLvoid *data)
-{
- GLenum error;
-
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
- _mesa_debug(ctx,
- "glCompressedTexImage%uDARB %s %d %s %d %d %d %d %d %p\n",
- dims,
- _mesa_lookup_enum_by_nr(target), level,
- _mesa_lookup_enum_by_nr(internalFormat),
- width, height, depth, border, imageSize, data);
-
- /* check target */
- if (!legal_teximage_target(ctx, dims, target)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glCompressedTexImage%uD(target=%s)",
- dims, _mesa_lookup_enum_by_nr(target));
- return;
- }
-
- error = compressed_texture_error_check(ctx, dims, target, level,
- internalFormat, width, height, depth,
- border, imageSize);
-
-#if FEATURE_ES
- /* XXX this is kind of a hack */
- if (error) {
- _mesa_error(ctx, error, "glTexImage2D");
- return;
- }
-
- if (dims == 2) {
- switch (internalFormat) {
- case GL_PALETTE4_RGB8_OES:
- case GL_PALETTE4_RGBA8_OES:
- case GL_PALETTE4_R5_G6_B5_OES:
- case GL_PALETTE4_RGBA4_OES:
- case GL_PALETTE4_RGB5_A1_OES:
- case GL_PALETTE8_RGB8_OES:
- case GL_PALETTE8_RGBA8_OES:
- case GL_PALETTE8_R5_G6_B5_OES:
- case GL_PALETTE8_RGBA4_OES:
- case GL_PALETTE8_RGB5_A1_OES:
- _mesa_cpal_compressed_teximage2d(target, level, internalFormat,
- width, height, imageSize, data);
- return;
- }
- }
-#endif
-
- if (_mesa_is_proxy_texture(target)) {
- /* Proxy texture: just check for errors and update proxy state */
- struct gl_texture_image *texImage;
-
- if (!error) {
- struct gl_texture_object *texObj =
- _mesa_get_current_tex_object(ctx, target);
- gl_format texFormat =
- _mesa_choose_texture_format(ctx, texObj, target, level,
- internalFormat, GL_NONE, GL_NONE);
- if (!legal_texture_size(ctx, texFormat, width, height, depth)) {
- error = GL_OUT_OF_MEMORY;
- }
- }
-
- texImage = _mesa_get_proxy_tex_image(ctx, target, level);
- if (texImage) {
- if (error) {
- /* if error, clear all proxy texture image parameters */
- clear_teximage_fields(texImage);
- }
- else {
- /* no error: store the teximage parameters */
- _mesa_init_teximage_fields(ctx, target, texImage, width, height,
- depth, border, internalFormat,
- MESA_FORMAT_NONE);
- }
- }
- }
- else {
- /* non-proxy target */
- struct gl_texture_object *texObj;
- struct gl_texture_image *texImage;
-
- if (error) {
- _mesa_error(ctx, error, "glCompressedTexImage%uD", dims);
- return;
- }
-
- texObj = _mesa_get_current_tex_object(ctx, target);
-
- _mesa_lock_texture(ctx, texObj);
- {
- texImage = _mesa_get_tex_image(ctx, texObj, target, level);
- if (!texImage) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY,
- "glCompressedTexImage%uD", dims);
- }
- else {
- gl_format texFormat;
-
- if (texImage->Data) {
- ctx->Driver.FreeTexImageData( ctx, texImage );
- }
- ASSERT(texImage->Data == NULL);
-
- texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
- internalFormat, GL_NONE,
- GL_NONE);
-
- if (legal_texture_size(ctx, texFormat, width, height, depth)) {
- _mesa_init_teximage_fields(ctx, target, texImage,
- width, height, depth,
- border, internalFormat, texFormat);
-
- switch (dims) {
- case 1:
- ASSERT(ctx->Driver.CompressedTexImage1D);
- ctx->Driver.CompressedTexImage1D(ctx, target, level,
- internalFormat,
- width,
- border, imageSize, data,
- texObj, texImage);
- break;
- case 2:
- ASSERT(ctx->Driver.CompressedTexImage2D);
- ctx->Driver.CompressedTexImage2D(ctx, target, level,
- internalFormat,
- width, height,
- border, imageSize, data,
- texObj, texImage);
- break;
- case 3:
- ASSERT(ctx->Driver.CompressedTexImage3D);
- ctx->Driver.CompressedTexImage3D(ctx, target, level,
- internalFormat,
- width, height, depth,
- border, imageSize, data,
- texObj, texImage);
- break;
- default:
- _mesa_problem(ctx, "bad dims in compressedteximage");
- }
-
- check_gen_mipmap(ctx, target, texObj, level);
-
- /* state update */
- texObj->_Complete = GL_FALSE;
- ctx->NewState |= _NEW_TEXTURE;
- }
- else {
- _mesa_error(ctx, GL_OUT_OF_MEMORY,
- "glCompressedTexImage%uD", dims);
- }
- }
- }
- _mesa_unlock_texture(ctx, texObj);
- }
-}
-
-
-void GLAPIENTRY
-_mesa_CompressedTexImage1DARB(GLenum target, GLint level,
- GLenum internalFormat, GLsizei width,
- GLint border, GLsizei imageSize,
- const GLvoid *data)
-{
- GET_CURRENT_CONTEXT(ctx);
- compressedteximage(ctx, 1, target, level, internalFormat,
- width, 1, 1, border, imageSize, data);
-}
-
-
-void GLAPIENTRY
-_mesa_CompressedTexImage2DARB(GLenum target, GLint level,
- GLenum internalFormat, GLsizei width,
- GLsizei height, GLint border, GLsizei imageSize,
- const GLvoid *data)
-{
- GET_CURRENT_CONTEXT(ctx);
- compressedteximage(ctx, 2, target, level, internalFormat,
- width, height, 1, border, imageSize, data);
-}
-
-
-void GLAPIENTRY
-_mesa_CompressedTexImage3DARB(GLenum target, GLint level,
- GLenum internalFormat, GLsizei width,
- GLsizei height, GLsizei depth, GLint border,
- GLsizei imageSize, const GLvoid *data)
-{
- GET_CURRENT_CONTEXT(ctx);
- compressedteximage(ctx, 3, target, level, internalFormat,
- width, height, depth, border, imageSize, data);
-}
-
-
-/**
- * Common helper for glCompressedTexSubImage1/2/3D().
- */
-static void
-compressed_tex_sub_image(GLuint dims, GLenum target, GLint level,
- GLint xoffset, GLint yoffset, GLint zoffset,
- GLsizei width, GLsizei height, GLsizei depth,
- GLenum format, GLsizei imageSize, const GLvoid *data)
-{
- struct gl_texture_object *texObj;
- struct gl_texture_image *texImage;
- GLenum error;
- GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- error = compressed_subtexture_error_check(ctx, dims, target, level,
- xoffset, 0, 0, /* pos */
- width, height, depth, /* size */
- format, imageSize);
- if (error) {
- _mesa_error(ctx, error, "glCompressedTexSubImage%uD", dims);
- return;
- }
-
- texObj = _mesa_get_current_tex_object(ctx, target);
-
- _mesa_lock_texture(ctx, texObj);
- {
- texImage = _mesa_select_tex_image(ctx, texObj, target, level);
- assert(texImage);
-
- if (compressed_subtexture_error_check2(ctx, dims, width, height, depth,
- format, texImage)) {
- /* error was recorded */
- }
- else if (width > 0 && height > 0 && depth > 0) {
- switch (dims) {
- case 1:
- if (ctx->Driver.CompressedTexSubImage1D) {
- ctx->Driver.CompressedTexSubImage1D(ctx, target, level,
- xoffset, width,
- format, imageSize, data,
- texObj, texImage);
- }
- break;
- case 2:
- if (ctx->Driver.CompressedTexSubImage2D) {
- ctx->Driver.CompressedTexSubImage2D(ctx, target, level,
- xoffset, yoffset,
- width, height,
- format, imageSize, data,
- texObj, texImage);
- }
- break;
- case 3:
- if (ctx->Driver.CompressedTexSubImage3D) {
- ctx->Driver.CompressedTexSubImage3D(ctx, target, level,
- xoffset, yoffset, zoffset,
- width, height, depth,
- format, imageSize, data,
- texObj, texImage);
- }
- break;
- default:
- ;
- }
-
- check_gen_mipmap(ctx, target, texObj, level);
-
- ctx->NewState |= _NEW_TEXTURE;
- }
- }
- _mesa_unlock_texture(ctx, texObj);
-}
-
-
-void GLAPIENTRY
-_mesa_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset,
- GLsizei width, GLenum format,
- GLsizei imageSize, const GLvoid *data)
-{
- compressed_tex_sub_image(1, target, level, xoffset, 0, 0, width, 1, 1,
- format, imageSize, data);
-}
-
-
-void GLAPIENTRY
-_mesa_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset,
- GLint yoffset, GLsizei width, GLsizei height,
- GLenum format, GLsizei imageSize,
- const GLvoid *data)
-{
- compressed_tex_sub_image(2, target, level, xoffset, yoffset, 0,
- width, height, 1, format, imageSize, data);
-}
-
-
-void GLAPIENTRY
-_mesa_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset,
- GLint yoffset, GLint zoffset, GLsizei width,
- GLsizei height, GLsizei depth, GLenum format,
- GLsizei imageSize, const GLvoid *data)
-{
- compressed_tex_sub_image(3, target, level, xoffset, yoffset, zoffset,
- width, height, depth, format, imageSize, data);
-}
-
-
-/**
- * Helper for glTexBuffer(). Check if internalFormat is legal. If so,
- * return the basic data type and number of components for the format.
- * \param return GL_TRUE if internalFormat is legal, GL_FALSE otherwise
- */
-static GLboolean
-get_sized_format_info(const struct gl_context *ctx, GLenum internalFormat,
- GLenum *datatype, GLuint *components)
-{
- switch (internalFormat) {
- case GL_ALPHA8:
- *datatype = GL_UNSIGNED_BYTE;
- *components = 1;
- break;
- case GL_ALPHA16:
- *datatype = GL_UNSIGNED_SHORT;
- *components = 1;
- break;
- case GL_ALPHA16F_ARB:
- *datatype = GL_HALF_FLOAT;
- *components = 1;
- break;
- case GL_ALPHA32F_ARB:
- *datatype = GL_FLOAT;
- *components = 1;
- break;
- case GL_ALPHA8I_EXT:
- *datatype = GL_BYTE;
- *components = 1;
- break;
- case GL_ALPHA16I_EXT:
- *datatype = GL_SHORT;
- *components = 1;
- break;
- case GL_ALPHA32I_EXT:
- *datatype = GL_INT;
- *components = 1;
- break;
- case GL_ALPHA8UI_EXT:
- *datatype = GL_UNSIGNED_BYTE;
- *components = 1;
- break;
- case GL_ALPHA16UI_EXT:
- *datatype = GL_UNSIGNED_SHORT;
- *components = 1;
- break;
- case GL_ALPHA32UI_EXT:
- *datatype = GL_UNSIGNED_INT;
- *components = 1;
- break;
- case GL_LUMINANCE8:
- *datatype = GL_UNSIGNED_BYTE;
- *components = 1;
- break;
- case GL_LUMINANCE16:
- *datatype = GL_UNSIGNED_SHORT;
- *components = 1;
- break;
- case GL_LUMINANCE16F_ARB:
- *datatype = GL_HALF_FLOAT;
- *components = 1;
- break;
- case GL_LUMINANCE32F_ARB:
- *datatype = GL_FLOAT;
- *components = 1;
- break;
- case GL_LUMINANCE8I_EXT:
- *datatype = GL_BYTE;
- *components = 1;
- break;
- case GL_LUMINANCE16I_EXT:
- *datatype = GL_SHORT;
- *components = 1;
- break;
- case GL_LUMINANCE32I_EXT:
- *datatype = GL_INT;
- *components = 1;
- break;
- case GL_LUMINANCE8UI_EXT:
- *datatype = GL_UNSIGNED_BYTE;
- *components = 1;
- break;
- case GL_LUMINANCE16UI_EXT:
- *datatype = GL_UNSIGNED_SHORT;
- *components = 1;
- break;
- case GL_LUMINANCE32UI_EXT:
- *datatype = GL_UNSIGNED_INT;
- *components = 1;
- break;
- case GL_LUMINANCE8_ALPHA8:
- *datatype = GL_UNSIGNED_BYTE;
- *components = 2;
- break;
- case GL_LUMINANCE16_ALPHA16:
- *datatype = GL_UNSIGNED_SHORT;
- *components = 2;
- break;
- case GL_LUMINANCE_ALPHA16F_ARB:
- *datatype = GL_HALF_FLOAT;
- *components = 2;
- break;
- case GL_LUMINANCE_ALPHA32F_ARB:
- *datatype = GL_FLOAT;
- *components = 2;
- break;
- case GL_LUMINANCE_ALPHA8I_EXT:
- *datatype = GL_BYTE;
- *components = 2;
- break;
- case GL_LUMINANCE_ALPHA16I_EXT:
- *datatype = GL_SHORT;
- *components = 2;
- break;
- case GL_LUMINANCE_ALPHA32I_EXT:
- *datatype = GL_INT;
- *components = 2;
- break;
- case GL_LUMINANCE_ALPHA8UI_EXT:
- *datatype = GL_UNSIGNED_BYTE;
- *components = 2;
- break;
- case GL_LUMINANCE_ALPHA16UI_EXT:
- *datatype = GL_UNSIGNED_SHORT;
- *components = 2;
- break;
- case GL_LUMINANCE_ALPHA32UI_EXT:
- *datatype = GL_UNSIGNED_INT;
- *components = 2;
- break;
- case GL_INTENSITY8:
- *datatype = GL_UNSIGNED_BYTE;
- *components = 1;
- break;
- case GL_INTENSITY16:
- *datatype = GL_UNSIGNED_SHORT;
- *components = 1;
- break;
- case GL_INTENSITY16F_ARB:
- *datatype = GL_HALF_FLOAT;
- *components = 1;
- break;
- case GL_INTENSITY32F_ARB:
- *datatype = GL_FLOAT;
- *components = 1;
- break;
- case GL_INTENSITY8I_EXT:
- *datatype = GL_BYTE;
- *components = 1;
- break;
- case GL_INTENSITY16I_EXT:
- *datatype = GL_SHORT;
- *components = 1;
- break;
- case GL_INTENSITY32I_EXT:
- *datatype = GL_INT;
- *components = 1;
- break;
- case GL_INTENSITY8UI_EXT:
- *datatype = GL_UNSIGNED_BYTE;
- *components = 1;
- break;
- case GL_INTENSITY16UI_EXT:
- *datatype = GL_UNSIGNED_SHORT;
- *components = 1;
- break;
- case GL_INTENSITY32UI_EXT:
- *datatype = GL_UNSIGNED_INT;
- *components = 1;
- break;
- case GL_RGBA8:
- *datatype = GL_UNSIGNED_BYTE;
- *components = 4;
- break;
- case GL_RGBA16:
- *datatype = GL_UNSIGNED_SHORT;
- *components = 4;
- break;
- case GL_RGBA16F_ARB:
- *datatype = GL_HALF_FLOAT;
- *components = 4;
- break;
- case GL_RGBA32F_ARB:
- *datatype = GL_FLOAT;
- *components = 4;
- break;
- case GL_RGBA8I_EXT:
- *datatype = GL_BYTE;
- *components = 4;
- break;
- case GL_RGBA16I_EXT:
- *datatype = GL_SHORT;
- *components = 4;
- break;
- case GL_RGBA32I_EXT:
- *datatype = GL_INT;
- *components = 4;
- break;
- case GL_RGBA8UI_EXT:
- *datatype = GL_UNSIGNED_BYTE;
- *components = 4;
- break;
- case GL_RGBA16UI_EXT:
- *datatype = GL_UNSIGNED_SHORT;
- *components = 4;
- break;
- case GL_RGBA32UI_EXT:
- *datatype = GL_UNSIGNED_INT;
- *components = 4;
- break;
- default:
- return GL_FALSE;
- }
-
- if (*datatype == GL_FLOAT && !ctx->Extensions.ARB_texture_float)
- return GL_FALSE;
-
- if (*datatype == GL_HALF_FLOAT && !ctx->Extensions.ARB_half_float_pixel)
- return GL_FALSE;
-
- return GL_TRUE;
-}
-
-
-/** GL_ARB_texture_buffer_object */
-void GLAPIENTRY
-_mesa_TexBuffer(GLenum target, GLenum internalFormat, GLuint buffer)
-{
- struct gl_texture_object *texObj;
- struct gl_buffer_object *bufObj;
- GLenum dataType;
- GLuint comps;
-
- GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- if (!ctx->Extensions.ARB_texture_buffer_object) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glTexBuffer");
- return;
- }
-
- if (target != GL_TEXTURE_BUFFER_ARB) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glTexBuffer(target)");
- return;
- }
-
- if (!get_sized_format_info(ctx, internalFormat, &dataType, &comps)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glTexBuffer(internalFormat 0x%x)",
- internalFormat);
- return;
- }
-
- bufObj = _mesa_lookup_bufferobj(ctx, buffer);
- if (buffer && !bufObj) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glTexBuffer(buffer %u)", buffer);
- return;
- }
-
- texObj = _mesa_get_current_tex_object(ctx, target);
-
- _mesa_lock_texture(ctx, texObj);
- {
- _mesa_reference_buffer_object(ctx, &texObj->BufferObject, bufObj);
- texObj->BufferObjectFormat = internalFormat;
- }
- _mesa_unlock_texture(ctx, texObj);
-}
+/* + * mesa 3-D graphics library + * Version: 7.6 + * + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * Copyright (C) 2009 VMware, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/** + * \file teximage.c + * Texture image-related functions. + */ + + +#include "glheader.h" +#include "bufferobj.h" +#include "context.h" +#include "enums.h" +#include "fbobject.h" +#include "framebuffer.h" +#include "hash.h" +#include "image.h" +#include "imports.h" +#include "macros.h" +#include "mfeatures.h" +#include "state.h" +#include "texcompress.h" +#include "texfetch.h" +#include "teximage.h" +#include "texstate.h" +#include "texpal.h" +#include "mtypes.h" + + +/** + * State changes which we care about for glCopyTex[Sub]Image() calls. + * In particular, we care about pixel transfer state and buffer state + * (such as glReadBuffer to make sure we read from the right renderbuffer). + */ +#define NEW_COPY_TEX_STATE (_NEW_BUFFERS | _NEW_PIXEL) + + + +/** + * We allocate texture memory on 512-byte boundaries so we can use MMX/SSE + * elsewhere. + */ +void * +_mesa_alloc_texmemory(GLsizei bytes) +{ + return _mesa_align_malloc(bytes, 512); +} + + +/** + * Free texture memory allocated with _mesa_alloc_texmemory() + */ +void +_mesa_free_texmemory(void *m) +{ + _mesa_align_free(m); +} + + +/* + * Compute floor(log_base_2(n)). + * If n < 0 return -1. + */ +static int +logbase2( int n ) +{ + GLint i = 1; + GLint log2 = 0; + + if (n < 0) + return -1; + + if (n == 0) + return 0; + + while ( n > i ) { + i *= 2; + log2++; + } + if (i != n) { + return log2 - 1; + } + else { + return log2; + } +} + + + +/** + * Return the simple base format for a given internal texture format. + * For example, given GL_LUMINANCE12_ALPHA4, return GL_LUMINANCE_ALPHA. + * + * \param ctx GL context. + * \param internalFormat the internal texture format token or 1, 2, 3, or 4. + * + * \return the corresponding \u base internal format (GL_ALPHA, GL_LUMINANCE, + * GL_LUMANCE_ALPHA, GL_INTENSITY, GL_RGB, or GL_RGBA), or -1 if invalid enum. + * + * This is the format which is used during texture application (i.e. the + * texture format and env mode determine the arithmetic used. + * + * XXX this could be static + */ +GLint +_mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat ) +{ + switch (internalFormat) { + case GL_ALPHA: + case GL_ALPHA4: + case GL_ALPHA8: + case GL_ALPHA12: + case GL_ALPHA16: + return GL_ALPHA; + case 1: + case GL_LUMINANCE: + case GL_LUMINANCE4: + case GL_LUMINANCE8: + case GL_LUMINANCE12: + case GL_LUMINANCE16: + return GL_LUMINANCE; + case 2: + case GL_LUMINANCE_ALPHA: + case GL_LUMINANCE4_ALPHA4: + case GL_LUMINANCE6_ALPHA2: + case GL_LUMINANCE8_ALPHA8: + case GL_LUMINANCE12_ALPHA4: + case GL_LUMINANCE12_ALPHA12: + case GL_LUMINANCE16_ALPHA16: + return GL_LUMINANCE_ALPHA; + case GL_INTENSITY: + case GL_INTENSITY4: + case GL_INTENSITY8: + case GL_INTENSITY12: + case GL_INTENSITY16: + return GL_INTENSITY; + case 3: + 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 GL_RGB; + case 4: + case GL_RGBA: + case GL_RGBA2: + case GL_RGBA4: + case GL_RGB5_A1: + case GL_RGBA8: + case GL_RGB10_A2: + case GL_RGBA12: + case GL_RGBA16: + return GL_RGBA; + default: + ; /* fallthrough */ + } + + if (ctx->Extensions.EXT_texture_format_BGRA8888) { + switch (internalFormat) { + case GL_BGRA_EXT: + return GL_RGBA; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.EXT_paletted_texture) { + switch (internalFormat) { + case GL_COLOR_INDEX: + case GL_COLOR_INDEX1_EXT: + case GL_COLOR_INDEX2_EXT: + case GL_COLOR_INDEX4_EXT: + case GL_COLOR_INDEX8_EXT: + case GL_COLOR_INDEX12_EXT: + case GL_COLOR_INDEX16_EXT: + return GL_COLOR_INDEX; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.ARB_depth_texture) { + switch (internalFormat) { + case GL_DEPTH_COMPONENT: + case GL_DEPTH_COMPONENT16: + case GL_DEPTH_COMPONENT24: + case GL_DEPTH_COMPONENT32: + return GL_DEPTH_COMPONENT; + default: + ; /* fallthrough */ + } + } + + switch (internalFormat) { + case GL_COMPRESSED_ALPHA: + return GL_ALPHA; + case GL_COMPRESSED_LUMINANCE: + return GL_LUMINANCE; + case GL_COMPRESSED_LUMINANCE_ALPHA: + return GL_LUMINANCE_ALPHA; + case GL_COMPRESSED_INTENSITY: + return GL_INTENSITY; + case GL_COMPRESSED_RGB: + return GL_RGB; + case GL_COMPRESSED_RGBA: + return GL_RGBA; + default: + ; /* fallthrough */ + } + + if (ctx->Extensions.TDFX_texture_compression_FXT1) { + switch (internalFormat) { + case GL_COMPRESSED_RGB_FXT1_3DFX: + return GL_RGB; + case GL_COMPRESSED_RGBA_FXT1_3DFX: + return GL_RGBA; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.EXT_texture_compression_s3tc) { + switch (internalFormat) { + case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: + return GL_RGB; + case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: + case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: + case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: + return GL_RGBA; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.S3_s3tc) { + switch (internalFormat) { + case GL_RGB_S3TC: + case GL_RGB4_S3TC: + return GL_RGB; + case GL_RGBA_S3TC: + case GL_RGBA4_S3TC: + return GL_RGBA; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.MESA_ycbcr_texture) { + if (internalFormat == GL_YCBCR_MESA) + return GL_YCBCR_MESA; + } + + if (ctx->Extensions.ARB_texture_float) { + switch (internalFormat) { + case GL_ALPHA16F_ARB: + case GL_ALPHA32F_ARB: + return GL_ALPHA; + case GL_RGBA16F_ARB: + case GL_RGBA32F_ARB: + return GL_RGBA; + case GL_RGB16F_ARB: + case GL_RGB32F_ARB: + return GL_RGB; + case GL_INTENSITY16F_ARB: + case GL_INTENSITY32F_ARB: + return GL_INTENSITY; + case GL_LUMINANCE16F_ARB: + case GL_LUMINANCE32F_ARB: + return GL_LUMINANCE; + case GL_LUMINANCE_ALPHA16F_ARB: + case GL_LUMINANCE_ALPHA32F_ARB: + return GL_LUMINANCE_ALPHA; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.ATI_envmap_bumpmap) { + switch (internalFormat) { + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + return GL_DUDV_ATI; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.EXT_texture_snorm) { + switch (internalFormat) { + case GL_RED_SNORM: + case GL_R8_SNORM: + case GL_R16_SNORM: + return GL_RED; + case GL_RG_SNORM: + case GL_RG8_SNORM: + case GL_RG16_SNORM: + return GL_RG; + case GL_RGB_SNORM: + case GL_RGB8_SNORM: + case GL_RGB16_SNORM: + return GL_RGB; + case GL_RGBA_SNORM: + case GL_RGBA8_SNORM: + case GL_RGBA16_SNORM: + return GL_RGBA; + case GL_ALPHA_SNORM: + case GL_ALPHA8_SNORM: + case GL_ALPHA16_SNORM: + return GL_ALPHA; + case GL_LUMINANCE_SNORM: + case GL_LUMINANCE8_SNORM: + case GL_LUMINANCE16_SNORM: + return GL_LUMINANCE; + case GL_LUMINANCE_ALPHA_SNORM: + case GL_LUMINANCE8_ALPHA8_SNORM: + case GL_LUMINANCE16_ALPHA16_SNORM: + return GL_LUMINANCE_ALPHA; + case GL_INTENSITY_SNORM: + case GL_INTENSITY8_SNORM: + case GL_INTENSITY16_SNORM: + return GL_INTENSITY; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.EXT_packed_depth_stencil) { + switch (internalFormat) { + case GL_DEPTH_STENCIL_EXT: + case GL_DEPTH24_STENCIL8_EXT: + return GL_DEPTH_STENCIL_EXT; + default: + ; /* fallthrough */ + } + } + +#if FEATURE_EXT_texture_sRGB + if (ctx->Extensions.EXT_texture_sRGB) { + switch (internalFormat) { + case GL_SRGB_EXT: + case GL_SRGB8_EXT: + case GL_COMPRESSED_SRGB_EXT: + case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: + return GL_RGB; + case GL_SRGB_ALPHA_EXT: + case GL_SRGB8_ALPHA8_EXT: + case GL_COMPRESSED_SRGB_ALPHA_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: + return GL_RGBA; + case GL_SLUMINANCE_ALPHA_EXT: + case GL_SLUMINANCE8_ALPHA8_EXT: + case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: + return GL_LUMINANCE_ALPHA; + case GL_SLUMINANCE_EXT: + case GL_SLUMINANCE8_EXT: + case GL_COMPRESSED_SLUMINANCE_EXT: + return GL_LUMINANCE; + default: + ; /* fallthrough */ + } + } +#endif /* FEATURE_EXT_texture_sRGB */ + + if (ctx->Extensions.EXT_texture_integer) { + switch (internalFormat) { + case GL_RGBA8UI_EXT: + case GL_RGBA16UI_EXT: + case GL_RGBA32UI_EXT: + case GL_RGBA8I_EXT: + case GL_RGBA16I_EXT: + case GL_RGBA32I_EXT: + return GL_RGBA; + case GL_RGB8UI_EXT: + case GL_RGB16UI_EXT: + case GL_RGB32UI_EXT: + case GL_RGB8I_EXT: + case GL_RGB16I_EXT: + case GL_RGB32I_EXT: + return GL_RGB; + case GL_ALPHA8UI_EXT: + case GL_ALPHA16UI_EXT: + case GL_ALPHA32UI_EXT: + case GL_ALPHA8I_EXT: + case GL_ALPHA16I_EXT: + case GL_ALPHA32I_EXT: + return GL_ALPHA; + case GL_INTENSITY8UI_EXT: + case GL_INTENSITY16UI_EXT: + case GL_INTENSITY32UI_EXT: + case GL_INTENSITY8I_EXT: + case GL_INTENSITY16I_EXT: + case GL_INTENSITY32I_EXT: + return GL_INTENSITY; + case GL_LUMINANCE8UI_EXT: + case GL_LUMINANCE16UI_EXT: + case GL_LUMINANCE32UI_EXT: + case GL_LUMINANCE8I_EXT: + case GL_LUMINANCE16I_EXT: + case GL_LUMINANCE32I_EXT: + return GL_LUMINANCE; + case GL_LUMINANCE_ALPHA8UI_EXT: + case GL_LUMINANCE_ALPHA16UI_EXT: + case GL_LUMINANCE_ALPHA32UI_EXT: + case GL_LUMINANCE_ALPHA8I_EXT: + case GL_LUMINANCE_ALPHA16I_EXT: + case GL_LUMINANCE_ALPHA32I_EXT: + return GL_LUMINANCE_ALPHA; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.ARB_texture_rg) { + switch (internalFormat) { + case GL_R16F: + /* R16F depends on both ARB_half_float_pixel and ARB_texture_float. + */ + if (!ctx->Extensions.ARB_half_float_pixel) + break; + /* FALLTHROUGH */ + case GL_R32F: + if (!ctx->Extensions.ARB_texture_float) + break; + return GL_RED; + case GL_R8I: + case GL_R8UI: + case GL_R16I: + case GL_R16UI: + case GL_R32I: + case GL_R32UI: + if (!ctx->Extensions.EXT_texture_integer) + break; + /* FALLTHROUGH */ + case GL_R8: + case GL_R16: + case GL_RED: + case GL_COMPRESSED_RED: + return GL_RED; + + case GL_RG16F: + /* RG16F depends on both ARB_half_float_pixel and ARB_texture_float. + */ + if (!ctx->Extensions.ARB_half_float_pixel) + break; + /* FALLTHROUGH */ + case GL_RG32F: + if (!ctx->Extensions.ARB_texture_float) + break; + return GL_RG; + case GL_RG8I: + case GL_RG8UI: + case GL_RG16I: + case GL_RG16UI: + case GL_RG32I: + case GL_RG32UI: + if (!ctx->Extensions.EXT_texture_integer) + break; + /* FALLTHROUGH */ + case GL_RG: + case GL_RG8: + case GL_RG16: + case GL_COMPRESSED_RG: + return GL_RG; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.EXT_texture_shared_exponent) { + switch (internalFormat) { + case GL_RGB9_E5_EXT: + return GL_RGB; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.EXT_packed_float) { + switch (internalFormat) { + case GL_R11F_G11F_B10F_EXT: + return GL_RGB; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.ARB_depth_buffer_float) { + switch (internalFormat) { + case GL_DEPTH_COMPONENT32F: + return GL_DEPTH_COMPONENT; + case GL_DEPTH32F_STENCIL8: + return GL_DEPTH_STENCIL; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.ARB_texture_compression_rgtc) { + switch (internalFormat) { + case GL_COMPRESSED_RED_RGTC1: + case GL_COMPRESSED_SIGNED_RED_RGTC1: + return GL_RED; + case GL_COMPRESSED_RG_RGTC2: + case GL_COMPRESSED_SIGNED_RG_RGTC2: + return GL_RG; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.EXT_texture_compression_latc) { + switch (internalFormat) { + case GL_COMPRESSED_LUMINANCE_LATC1_EXT: + case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: + return GL_LUMINANCE; + case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: + case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: + return GL_LUMINANCE_ALPHA; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.ATI_texture_compression_3dc) { + switch (internalFormat) { + case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: + return GL_LUMINANCE_ALPHA; + default: + ; /* fallthrough */ + } + } + + return -1; /* error */ +} + + +/** + * For cube map faces, return a face index in [0,5]. + * For other targets return 0; + */ +GLuint +_mesa_tex_target_to_face(GLenum target) +{ + if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB && + target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB) + return (GLuint) target - (GLuint) GL_TEXTURE_CUBE_MAP_POSITIVE_X; + else + return 0; +} + + + +/** + * Store a gl_texture_image pointer in a gl_texture_object structure + * according to the target and level parameters. + * + * \param tObj texture object. + * \param target texture target. + * \param level image level. + * \param texImage texture image. + * + * This was basically prompted by the introduction of cube maps. + */ +void +_mesa_set_tex_image(struct gl_texture_object *tObj, + GLenum target, GLint level, + struct gl_texture_image *texImage) +{ + const GLuint face = _mesa_tex_target_to_face(target); + + ASSERT(tObj); + ASSERT(texImage); + ASSERT(target != GL_TEXTURE_RECTANGLE_NV || level == 0); + + tObj->Image[face][level] = texImage; + + /* Set the 'back' pointer */ + texImage->TexObject = tObj; +} + + +/** + * Allocate a texture image structure. + * + * Called via ctx->Driver.NewTextureImage() unless overriden by a device + * driver. + * + * \return a pointer to gl_texture_image struct with all fields initialized to + * zero. + */ +struct gl_texture_image * +_mesa_new_texture_image( struct gl_context *ctx ) +{ + (void) ctx; + return CALLOC_STRUCT(gl_texture_image); +} + + +/** + * Free texture image data. + * This function is a fallback called via ctx->Driver.FreeTexImageData(). + * + * \param texImage texture image. + * + * Free the texture image data if it's not marked as client data. + */ +void +_mesa_free_texture_image_data(struct gl_context *ctx, + struct gl_texture_image *texImage) +{ + (void) ctx; + + if (texImage->Data && !texImage->IsClientData) { + /* free the old texture data */ + _mesa_free_texmemory(texImage->Data); + } + + texImage->Data = NULL; +} + + +/** + * Free texture image. + * + * \param texImage texture image. + * + * Free the texture image structure and the associated image data. + */ +void +_mesa_delete_texture_image(struct gl_context *ctx, + struct gl_texture_image *texImage) +{ + /* Free texImage->Data and/or any other driver-specific texture + * image storage. + */ + ASSERT(ctx->Driver.FreeTexImageData); + ctx->Driver.FreeTexImageData( ctx, texImage ); + + ASSERT(texImage->Data == NULL); + if (texImage->ImageOffsets) + free(texImage->ImageOffsets); + free(texImage); +} + + +/** + * Test if a target is a proxy target. + * + * \param target texture target. + * + * \return GL_TRUE if the target is a proxy target, GL_FALSE otherwise. + */ +GLboolean +_mesa_is_proxy_texture(GLenum target) +{ + /* NUM_TEXTURE_TARGETS should match number of terms below, + * except there's no proxy for GL_TEXTURE_BUFFER. + */ + assert(NUM_TEXTURE_TARGETS == 8); + + return (target == GL_PROXY_TEXTURE_1D || + target == GL_PROXY_TEXTURE_2D || + target == GL_PROXY_TEXTURE_3D || + target == GL_PROXY_TEXTURE_CUBE_MAP_ARB || + target == GL_PROXY_TEXTURE_RECTANGLE_NV || + target == GL_PROXY_TEXTURE_1D_ARRAY_EXT || + target == GL_PROXY_TEXTURE_2D_ARRAY_EXT); +} + + +/** + * Return the proxy target which corresponds to the given texture target + */ +static GLenum +get_proxy_target(GLenum target) +{ + switch (target) { + case GL_TEXTURE_1D: + case GL_PROXY_TEXTURE_1D: + return GL_PROXY_TEXTURE_1D; + case GL_TEXTURE_2D: + case GL_PROXY_TEXTURE_2D: + return GL_PROXY_TEXTURE_2D; + case GL_TEXTURE_3D: + case GL_PROXY_TEXTURE_3D: + return GL_PROXY_TEXTURE_3D; + case GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB: + case GL_TEXTURE_CUBE_MAP_ARB: + case GL_PROXY_TEXTURE_CUBE_MAP_ARB: + return GL_PROXY_TEXTURE_CUBE_MAP_ARB; + case GL_TEXTURE_RECTANGLE_NV: + case GL_PROXY_TEXTURE_RECTANGLE_NV: + return GL_PROXY_TEXTURE_RECTANGLE_NV; + case GL_TEXTURE_1D_ARRAY_EXT: + case GL_PROXY_TEXTURE_1D_ARRAY_EXT: + return GL_PROXY_TEXTURE_1D_ARRAY_EXT; + case GL_TEXTURE_2D_ARRAY_EXT: + case GL_PROXY_TEXTURE_2D_ARRAY_EXT: + return GL_PROXY_TEXTURE_2D_ARRAY_EXT; + default: + _mesa_problem(NULL, "unexpected target in get_proxy_target()"); + return 0; + } +} + + +/** + * Get the texture object that corresponds to the target of the given + * texture unit. + * + * \param ctx GL context. + * \param texUnit texture unit. + * \param target texture target. + * + * \return pointer to the texture object on success, or NULL on failure. + * + * \sa gl_texture_unit. + */ +struct gl_texture_object * +_mesa_select_tex_object(struct gl_context *ctx, + const struct gl_texture_unit *texUnit, + GLenum target) +{ + const GLboolean arrayTex = (ctx->Extensions.MESA_texture_array || + ctx->Extensions.EXT_texture_array); + + switch (target) { + case GL_TEXTURE_1D: + return texUnit->CurrentTex[TEXTURE_1D_INDEX]; + case GL_PROXY_TEXTURE_1D: + return ctx->Texture.ProxyTex[TEXTURE_1D_INDEX]; + case GL_TEXTURE_2D: + return texUnit->CurrentTex[TEXTURE_2D_INDEX]; + case GL_PROXY_TEXTURE_2D: + return ctx->Texture.ProxyTex[TEXTURE_2D_INDEX]; + case GL_TEXTURE_3D: + return texUnit->CurrentTex[TEXTURE_3D_INDEX]; + case GL_PROXY_TEXTURE_3D: + return ctx->Texture.ProxyTex[TEXTURE_3D_INDEX]; + case GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB: + case GL_TEXTURE_CUBE_MAP_ARB: + return ctx->Extensions.ARB_texture_cube_map + ? texUnit->CurrentTex[TEXTURE_CUBE_INDEX] : NULL; + case GL_PROXY_TEXTURE_CUBE_MAP_ARB: + return ctx->Extensions.ARB_texture_cube_map + ? ctx->Texture.ProxyTex[TEXTURE_CUBE_INDEX] : NULL; + case GL_TEXTURE_RECTANGLE_NV: + return ctx->Extensions.NV_texture_rectangle + ? texUnit->CurrentTex[TEXTURE_RECT_INDEX] : NULL; + case GL_PROXY_TEXTURE_RECTANGLE_NV: + return ctx->Extensions.NV_texture_rectangle + ? ctx->Texture.ProxyTex[TEXTURE_RECT_INDEX] : NULL; + case GL_TEXTURE_1D_ARRAY_EXT: + return arrayTex ? texUnit->CurrentTex[TEXTURE_1D_ARRAY_INDEX] : NULL; + case GL_PROXY_TEXTURE_1D_ARRAY_EXT: + return arrayTex ? ctx->Texture.ProxyTex[TEXTURE_1D_ARRAY_INDEX] : NULL; + case GL_TEXTURE_2D_ARRAY_EXT: + return arrayTex ? texUnit->CurrentTex[TEXTURE_2D_ARRAY_INDEX] : NULL; + 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 + ? texUnit->CurrentTex[TEXTURE_BUFFER_INDEX] : NULL; + default: + _mesa_problem(NULL, "bad target in _mesa_select_tex_object()"); + return NULL; + } +} + + +/** + * Return pointer to texture object for given target on current texture unit. + */ +struct gl_texture_object * +_mesa_get_current_tex_object(struct gl_context *ctx, GLenum target) +{ + struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx); + return _mesa_select_tex_object(ctx, texUnit, target); +} + + +/** + * Get a texture image pointer from a texture object, given a texture + * target and mipmap level. The target and level parameters should + * have already been error-checked. + * + * \param ctx GL context. + * \param texObj texture unit. + * \param target texture target. + * \param level image level. + * + * \return pointer to the texture image structure, or NULL on failure. + */ +struct gl_texture_image * +_mesa_select_tex_image(struct gl_context *ctx, + const struct gl_texture_object *texObj, + GLenum target, GLint level) +{ + const GLuint face = _mesa_tex_target_to_face(target); + + ASSERT(texObj); + ASSERT(level >= 0); + ASSERT(level < MAX_TEXTURE_LEVELS); + + return texObj->Image[face][level]; +} + + +/** + * Like _mesa_select_tex_image() but if the image doesn't exist, allocate + * it and install it. Only return NULL if passed a bad parameter or run + * out of memory. + */ +struct gl_texture_image * +_mesa_get_tex_image(struct gl_context *ctx, struct gl_texture_object *texObj, + GLenum target, GLint level) +{ + struct gl_texture_image *texImage; + + if (!texObj) + return NULL; + + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + if (!texImage) { + texImage = ctx->Driver.NewTextureImage(ctx); + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "texture image allocation"); + return NULL; + } + + _mesa_set_tex_image(texObj, target, level, texImage); + } + + return texImage; +} + + +/** + * Return pointer to the specified proxy texture image. + * Note that proxy textures are per-context, not per-texture unit. + * \return pointer to texture image or NULL if invalid target, invalid + * level, or out of memory. + */ +struct gl_texture_image * +_mesa_get_proxy_tex_image(struct gl_context *ctx, GLenum target, GLint level) +{ + struct gl_texture_image *texImage; + GLuint texIndex; + + if (level < 0 ) + return NULL; + + switch (target) { + case GL_PROXY_TEXTURE_1D: + if (level >= ctx->Const.MaxTextureLevels) + return NULL; + texIndex = TEXTURE_1D_INDEX; + break; + case GL_PROXY_TEXTURE_2D: + if (level >= ctx->Const.MaxTextureLevels) + return NULL; + texIndex = TEXTURE_2D_INDEX; + break; + case GL_PROXY_TEXTURE_3D: + if (level >= ctx->Const.Max3DTextureLevels) + return NULL; + texIndex = TEXTURE_3D_INDEX; + break; + case GL_PROXY_TEXTURE_CUBE_MAP: + if (level >= ctx->Const.MaxCubeTextureLevels) + return NULL; + texIndex = TEXTURE_CUBE_INDEX; + break; + case GL_PROXY_TEXTURE_RECTANGLE_NV: + if (level > 0) + return NULL; + texIndex = TEXTURE_RECT_INDEX; + break; + case GL_PROXY_TEXTURE_1D_ARRAY_EXT: + if (level >= ctx->Const.MaxTextureLevels) + return NULL; + texIndex = TEXTURE_1D_ARRAY_INDEX; + break; + case GL_PROXY_TEXTURE_2D_ARRAY_EXT: + if (level >= ctx->Const.MaxTextureLevels) + return NULL; + texIndex = TEXTURE_2D_ARRAY_INDEX; + break; + default: + return NULL; + } + + texImage = ctx->Texture.ProxyTex[texIndex]->Image[0][level]; + if (!texImage) { + texImage = ctx->Driver.NewTextureImage(ctx); + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "proxy texture allocation"); + return NULL; + } + ctx->Texture.ProxyTex[texIndex]->Image[0][level] = texImage; + /* Set the 'back' pointer */ + texImage->TexObject = ctx->Texture.ProxyTex[texIndex]; + } + return texImage; +} + + +/** + * Get the maximum number of allowed mipmap levels. + * + * \param ctx GL context. + * \param target texture target. + * + * \return the maximum number of allowed mipmap levels for the given + * texture target, or zero if passed a bad target. + * + * \sa gl_constants. + */ +GLint +_mesa_max_texture_levels(struct gl_context *ctx, GLenum target) +{ + switch (target) { + case GL_TEXTURE_1D: + case GL_PROXY_TEXTURE_1D: + case GL_TEXTURE_2D: + case GL_PROXY_TEXTURE_2D: + return ctx->Const.MaxTextureLevels; + case GL_TEXTURE_3D: + case GL_PROXY_TEXTURE_3D: + return ctx->Const.Max3DTextureLevels; + case GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB: + case GL_TEXTURE_CUBE_MAP_ARB: + case GL_PROXY_TEXTURE_CUBE_MAP_ARB: + return ctx->Extensions.ARB_texture_cube_map + ? ctx->Const.MaxCubeTextureLevels : 0; + case GL_TEXTURE_RECTANGLE_NV: + case GL_PROXY_TEXTURE_RECTANGLE_NV: + return ctx->Extensions.NV_texture_rectangle ? 1 : 0; + case GL_TEXTURE_1D_ARRAY_EXT: + case GL_PROXY_TEXTURE_1D_ARRAY_EXT: + case GL_TEXTURE_2D_ARRAY_EXT: + case GL_PROXY_TEXTURE_2D_ARRAY_EXT: + return (ctx->Extensions.MESA_texture_array || + ctx->Extensions.EXT_texture_array) + ? ctx->Const.MaxTextureLevels : 0; + case GL_TEXTURE_BUFFER: + /* fall-through */ + default: + return 0; /* bad target */ + } +} + + +/** + * Return number of dimensions per mipmap level for the given texture target. + */ +GLint +_mesa_get_texture_dimensions(GLenum target) +{ + switch (target) { + case GL_TEXTURE_1D: + case GL_PROXY_TEXTURE_1D: + return 1; + case GL_TEXTURE_2D: + case GL_TEXTURE_RECTANGLE: + case GL_TEXTURE_CUBE_MAP: + case GL_PROXY_TEXTURE_2D: + case GL_PROXY_TEXTURE_RECTANGLE: + case GL_PROXY_TEXTURE_CUBE_MAP: + case GL_TEXTURE_CUBE_MAP_POSITIVE_X: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: + case GL_TEXTURE_1D_ARRAY: + case GL_PROXY_TEXTURE_1D_ARRAY: + return 2; + case GL_TEXTURE_3D: + case GL_PROXY_TEXTURE_3D: + case GL_TEXTURE_2D_ARRAY: + case GL_PROXY_TEXTURE_2D_ARRAY: + return 3; + case GL_TEXTURE_BUFFER: + /* fall-through */ + default: + _mesa_problem(NULL, "invalid target 0x%x in get_texture_dimensions()", + target); + return 2; + } +} + + + + +#if 000 /* not used anymore */ +/* + * glTexImage[123]D can accept a NULL image pointer. In this case we + * create a texture image with unspecified image contents per the OpenGL + * spec. + */ +static GLubyte * +make_null_texture(GLint width, GLint height, GLint depth, GLenum format) +{ + const GLint components = _mesa_components_in_format(format); + const GLint numPixels = width * height * depth; + GLubyte *data = (GLubyte *) MALLOC(numPixels * components * sizeof(GLubyte)); + +#ifdef DEBUG + /* + * Let's see if anyone finds this. If glTexImage2D() is called with + * a NULL image pointer then load the texture image with something + * interesting instead of leaving it indeterminate. + */ + if (data) { + static const char message[8][32] = { + " X X XXXXX XXX X ", + " XX XX X X X X X ", + " X X X X X X X ", + " X X XXXX XXX XXXXX ", + " X X X X X X ", + " X X X X X X X ", + " X X XXXXX XXX X X ", + " " + }; + + GLubyte *imgPtr = data; + GLint h, i, j, k; + for (h = 0; h < depth; h++) { + for (i = 0; i < height; i++) { + GLint srcRow = 7 - (i % 8); + for (j = 0; j < width; j++) { + GLint srcCol = j % 32; + GLubyte texel = (message[srcRow][srcCol]=='X') ? 255 : 70; + for (k = 0; k < components; k++) { + *imgPtr++ = texel; + } + } + } + } + } +#endif + + return data; +} +#endif + + + +/** + * Reset the fields of a gl_texture_image struct to zero. + * + * \param img texture image structure. + * + * This is called when a proxy texture test fails, we set all the + * image members (except DriverData) to zero. + * It's also used in glTexImage[123]D as a safeguard to be sure all + * required fields get initialized properly by the Driver.TexImage[123]D + * functions. + */ +static void +clear_teximage_fields(struct gl_texture_image *img) +{ + ASSERT(img); + img->_BaseFormat = 0; + img->InternalFormat = 0; + img->Border = 0; + img->Width = 0; + img->Height = 0; + img->Depth = 0; + img->RowStride = 0; + if (img->ImageOffsets) { + free(img->ImageOffsets); + img->ImageOffsets = NULL; + } + img->Width2 = 0; + img->Height2 = 0; + img->Depth2 = 0; + img->WidthLog2 = 0; + img->HeightLog2 = 0; + img->DepthLog2 = 0; + img->Data = NULL; + img->TexFormat = MESA_FORMAT_NONE; + img->FetchTexelc = NULL; + img->FetchTexelf = NULL; +} + + +/** + * Initialize basic fields of the gl_texture_image struct. + * + * \param ctx GL context. + * \param target texture target (GL_TEXTURE_1D, GL_TEXTURE_RECTANGLE, etc). + * \param img texture image structure to be initialized. + * \param width image width. + * \param height image height. + * \param depth image depth. + * \param border image border. + * \param internalFormat internal format. + * \param format the actual hardware format (one of MESA_FORMAT_*) + * + * Fills in the fields of \p img with the given information. + * Note: width, height and depth include the border. + */ +void +_mesa_init_teximage_fields(struct gl_context *ctx, GLenum target, + struct gl_texture_image *img, + GLsizei width, GLsizei height, GLsizei depth, + GLint border, GLenum internalFormat, + gl_format format) +{ + GLint i, dims; + + ASSERT(img); + ASSERT(width >= 0); + ASSERT(height >= 0); + ASSERT(depth >= 0); + + img->_BaseFormat = _mesa_base_tex_format( ctx, internalFormat ); + ASSERT(img->_BaseFormat > 0); + img->InternalFormat = internalFormat; + img->Border = border; + img->Width = width; + img->Height = height; + img->Depth = depth; + + img->Width2 = width - 2 * border; /* == 1 << img->WidthLog2; */ + img->WidthLog2 = logbase2(img->Width2); + + if (height == 1) { /* 1-D texture */ + img->Height2 = 1; + img->HeightLog2 = 0; + } + else { + img->Height2 = height - 2 * border; /* == 1 << img->HeightLog2; */ + img->HeightLog2 = logbase2(img->Height2); + } + + if (depth == 1) { /* 2-D texture */ + img->Depth2 = 1; + img->DepthLog2 = 0; + } + else { + img->Depth2 = depth - 2 * border; /* == 1 << img->DepthLog2; */ + img->DepthLog2 = logbase2(img->Depth2); + } + + img->MaxLog2 = MAX2(img->WidthLog2, img->HeightLog2); + + if ((width == 1 || _mesa_is_pow_two(img->Width2)) && + (height == 1 || _mesa_is_pow_two(img->Height2)) && + (depth == 1 || _mesa_is_pow_two(img->Depth2))) + img->_IsPowerOfTwo = GL_TRUE; + else + img->_IsPowerOfTwo = GL_FALSE; + + /* RowStride and ImageOffsets[] describe how to address texels in 'Data' */ + img->RowStride = width; + /* Allocate the ImageOffsets array and initialize to typical values. + * We allocate the array for 1D/2D textures too in order to avoid special- + * case code in the texstore routines. + */ + if (img->ImageOffsets) + free(img->ImageOffsets); + img->ImageOffsets = (GLuint *) malloc(depth * sizeof(GLuint)); + for (i = 0; i < depth; i++) { + img->ImageOffsets[i] = i * width * height; + } + + /* Compute Width/Height/DepthScale for mipmap lod computation */ + if (target == GL_TEXTURE_RECTANGLE_NV) { + /* scale = 1.0 since texture coords directly map to texels */ + img->WidthScale = 1.0; + img->HeightScale = 1.0; + img->DepthScale = 1.0; + } + else { + img->WidthScale = (GLfloat) img->Width; + img->HeightScale = (GLfloat) img->Height; + img->DepthScale = (GLfloat) img->Depth; + } + + img->TexFormat = format; + + dims = _mesa_get_texture_dimensions(target); + + _mesa_set_fetch_functions(img, dims); +} + + +/** + * Free and clear fields of the gl_texture_image struct. + * + * \param ctx GL context. + * \param texImage texture image structure to be cleared. + * + * After the call, \p texImage will have no data associated with it. Its + * fields are cleared so that its parent object will test incomplete. + */ +void +_mesa_clear_texture_image(struct gl_context *ctx, + struct gl_texture_image *texImage) +{ + ctx->Driver.FreeTexImageData(ctx, texImage); + clear_teximage_fields(texImage); +} + + +/** + * This is the fallback for Driver.TestProxyTexImage(). Test the texture + * level, width, height and depth against the ctx->Const limits for textures. + * + * A hardware driver might override this function if, for example, the + * max 3D texture size is 512x512x64 (i.e. not a cube). + * + * Note that width, height, depth == 0 is not an error. However, a + * texture with zero width/height/depth will be considered "incomplete" + * and texturing will effectively be disabled. + * + * \param target one of GL_PROXY_TEXTURE_1D, GL_PROXY_TEXTURE_2D, + * GL_PROXY_TEXTURE_3D, GL_PROXY_TEXTURE_RECTANGLE_NV, + * GL_PROXY_TEXTURE_CUBE_MAP_ARB. + * \param level as passed to glTexImage + * \param internalFormat as passed to glTexImage + * \param format as passed to glTexImage + * \param type as passed to glTexImage + * \param width as passed to glTexImage + * \param height as passed to glTexImage + * \param depth as passed to glTexImage + * \param border as passed to glTexImage + * \return GL_TRUE if the image is acceptable, GL_FALSE if not acceptable. + */ +GLboolean +_mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, GLint level, + GLint internalFormat, GLenum format, GLenum type, + GLint width, GLint height, GLint depth, GLint border) +{ + GLint maxSize; + + (void) internalFormat; + (void) format; + (void) type; + + switch (target) { + case GL_PROXY_TEXTURE_1D: + maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); + if (width < 2 * border || width > 2 + maxSize) + return GL_FALSE; + if (level >= ctx->Const.MaxTextureLevels) + return GL_FALSE; + if (!ctx->Extensions.ARB_texture_non_power_of_two) { + if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) + return GL_FALSE; + } + return GL_TRUE; + + case GL_PROXY_TEXTURE_2D: + maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); + if (width < 2 * border || width > 2 + maxSize) + return GL_FALSE; + if (height < 2 * border || height > 2 + maxSize) + return GL_FALSE; + if (level >= ctx->Const.MaxTextureLevels) + return GL_FALSE; + if (!ctx->Extensions.ARB_texture_non_power_of_two) { + if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) + return GL_FALSE; + if (height > 0 && !_mesa_is_pow_two(height - 2 * border)) + return GL_FALSE; + } + return GL_TRUE; + + case GL_PROXY_TEXTURE_3D: + maxSize = 1 << (ctx->Const.Max3DTextureLevels - 1); + if (width < 2 * border || width > 2 + maxSize) + return GL_FALSE; + if (height < 2 * border || height > 2 + maxSize) + return GL_FALSE; + if (depth < 2 * border || depth > 2 + maxSize) + return GL_FALSE; + if (level >= ctx->Const.Max3DTextureLevels) + return GL_FALSE; + if (!ctx->Extensions.ARB_texture_non_power_of_two) { + if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) + return GL_FALSE; + if (height > 0 && !_mesa_is_pow_two(height - 2 * border)) + return GL_FALSE; + if (depth > 0 && !_mesa_is_pow_two(depth - 2 * border)) + return GL_FALSE; + } + return GL_TRUE; + + case GL_PROXY_TEXTURE_RECTANGLE_NV: + maxSize = ctx->Const.MaxTextureRectSize; + if (width < 0 || width > maxSize) + return GL_FALSE; + if (height < 0 || height > maxSize) + return GL_FALSE; + if (level != 0) + return GL_FALSE; + return GL_TRUE; + + case GL_PROXY_TEXTURE_CUBE_MAP_ARB: + maxSize = 1 << (ctx->Const.MaxCubeTextureLevels - 1); + if (width < 2 * border || width > 2 + maxSize) + return GL_FALSE; + if (height < 2 * border || height > 2 + maxSize) + return GL_FALSE; + if (level >= ctx->Const.MaxCubeTextureLevels) + return GL_FALSE; + if (!ctx->Extensions.ARB_texture_non_power_of_two) { + if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) + return GL_FALSE; + if (height > 0 && !_mesa_is_pow_two(height - 2 * border)) + return GL_FALSE; + } + return GL_TRUE; + + case GL_PROXY_TEXTURE_1D_ARRAY_EXT: + maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); + if (width < 2 * border || width > 2 + maxSize) + return GL_FALSE; + if (height < 1 || height > ctx->Const.MaxArrayTextureLayers) + return GL_FALSE; + if (level >= ctx->Const.MaxTextureLevels) + return GL_FALSE; + if (!ctx->Extensions.ARB_texture_non_power_of_two) { + if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) + return GL_FALSE; + } + return GL_TRUE; + + case GL_PROXY_TEXTURE_2D_ARRAY_EXT: + maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); + if (width < 2 * border || width > 2 + maxSize) + return GL_FALSE; + if (height < 2 * border || height > 2 + maxSize) + return GL_FALSE; + if (depth < 1 || depth > ctx->Const.MaxArrayTextureLayers) + return GL_FALSE; + if (level >= ctx->Const.MaxTextureLevels) + return GL_FALSE; + if (!ctx->Extensions.ARB_texture_non_power_of_two) { + if (width > 0 && !_mesa_is_pow_two(width - 2 * border)) + return GL_FALSE; + if (height > 0 && !_mesa_is_pow_two(height - 2 * border)) + return GL_FALSE; + } + return GL_TRUE; + + default: + _mesa_problem(ctx, "Invalid target in _mesa_test_proxy_teximage"); + return GL_FALSE; + } +} + + +/** + * Check if the memory used by the texture would exceed the driver's limit. + * This lets us support a max 3D texture size of 8K (for example) but + * prevents allocating a full 8K x 8K x 8K texture. + * XXX this could be rolled into the proxy texture size test (above) but + * we don't have the actual texture internal format at that point. + */ +static GLboolean +legal_texture_size(struct gl_context *ctx, gl_format format, + GLint width, GLint height, GLint depth) +{ + uint64_t bytes = _mesa_format_image_size64(format, width, height, depth); + uint64_t mbytes = bytes / (1024 * 1024); /* convert to MB */ + return mbytes <= (uint64_t) ctx->Const.MaxTextureMbytes; +} + + + +/** + * Helper function to determine whether a target and specific compression + * format are supported. + */ +static GLboolean +target_can_be_compressed(const struct gl_context *ctx, GLenum target, + GLenum intFormat) +{ + (void) intFormat; /* not used yet */ + + switch (target) { + case GL_TEXTURE_2D: + case GL_PROXY_TEXTURE_2D: + return GL_TRUE; /* true for any compressed format so far */ + case GL_PROXY_TEXTURE_CUBE_MAP: + case GL_TEXTURE_CUBE_MAP_POSITIVE_X: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: + return ctx->Extensions.ARB_texture_cube_map; + case GL_PROXY_TEXTURE_2D_ARRAY_EXT: + case GL_TEXTURE_2D_ARRAY_EXT: + return (ctx->Extensions.MESA_texture_array || + ctx->Extensions.EXT_texture_array); + default: + return GL_FALSE; + } +} + + +/** + * Check if the given texture target value is legal for a + * glTexImage1/2/3D call. + */ +static GLboolean +legal_teximage_target(struct gl_context *ctx, GLuint dims, GLenum target) +{ + switch (dims) { + case 1: + switch (target) { + case GL_TEXTURE_1D: + case GL_PROXY_TEXTURE_1D: + return GL_TRUE; + default: + return GL_FALSE; + } + case 2: + switch (target) { + case GL_TEXTURE_2D: + case GL_PROXY_TEXTURE_2D: + return GL_TRUE; + case GL_PROXY_TEXTURE_CUBE_MAP: + case GL_TEXTURE_CUBE_MAP_POSITIVE_X: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: + return ctx->Extensions.ARB_texture_cube_map; + case GL_TEXTURE_RECTANGLE_NV: + case GL_PROXY_TEXTURE_RECTANGLE_NV: + return ctx->Extensions.NV_texture_rectangle; + case GL_TEXTURE_1D_ARRAY_EXT: + case GL_PROXY_TEXTURE_1D_ARRAY_EXT: + return (ctx->Extensions.MESA_texture_array || + ctx->Extensions.EXT_texture_array); + default: + return GL_FALSE; + } + case 3: + switch (target) { + case GL_TEXTURE_3D: + case GL_PROXY_TEXTURE_3D: + return GL_TRUE; + case GL_TEXTURE_2D_ARRAY_EXT: + case GL_PROXY_TEXTURE_2D_ARRAY_EXT: + return (ctx->Extensions.MESA_texture_array || + ctx->Extensions.EXT_texture_array); + default: + return GL_FALSE; + } + default: + _mesa_problem(ctx, "invalid dims=%u in legal_teximage_target()", dims); + return GL_FALSE; + } +} + + +/** + * Check if the given texture target value is legal for a + * glTexSubImage, glCopyTexSubImage or glCopyTexImage call. + * The difference compared to legal_teximage_target() above is that + * proxy targets are not supported. + */ +static GLboolean +legal_texsubimage_target(struct gl_context *ctx, GLuint dims, GLenum target) +{ + switch (dims) { + case 1: + return target == GL_TEXTURE_1D; + case 2: + switch (target) { + case GL_TEXTURE_2D: + return GL_TRUE; + case GL_TEXTURE_CUBE_MAP_POSITIVE_X: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: + case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: + return ctx->Extensions.ARB_texture_cube_map; + case GL_TEXTURE_RECTANGLE_NV: + return ctx->Extensions.NV_texture_rectangle; + case GL_TEXTURE_1D_ARRAY_EXT: + return (ctx->Extensions.MESA_texture_array || + ctx->Extensions.EXT_texture_array); + default: + return GL_FALSE; + } + case 3: + switch (target) { + case GL_TEXTURE_3D: + return GL_TRUE; + case GL_TEXTURE_2D_ARRAY_EXT: + return (ctx->Extensions.MESA_texture_array || + ctx->Extensions.EXT_texture_array); + default: + return GL_FALSE; + } + default: + _mesa_problem(ctx, "invalid dims=%u in legal_texsubimage_target()", + dims); + return GL_FALSE; + } +} + + +/** + * Test the glTexImage[123]D() parameters for errors. + * + * \param ctx GL context. + * \param dimensions texture image dimensions (must be 1, 2 or 3). + * \param target texture target given by the user. + * \param level image level given by the user. + * \param internalFormat internal format given by the user. + * \param format pixel data format given by the user. + * \param type pixel data type given by the user. + * \param width image width given by the user. + * \param height image height given by the user. + * \param depth image depth given by the user. + * \param border image border given by the user. + * + * \return GL_TRUE if an error was detected, or GL_FALSE if no errors. + * + * Verifies each of the parameters against the constants specified in + * __struct gl_contextRec::Const and the supported extensions, and according + * to the OpenGL specification. + */ +static GLboolean +texture_error_check( struct gl_context *ctx, + GLuint dimensions, GLenum target, + GLint level, GLint internalFormat, + GLenum format, GLenum type, + GLint width, GLint height, + GLint depth, GLint border ) +{ + const GLenum proxyTarget = get_proxy_target(target); + const GLboolean isProxy = target == proxyTarget; + GLboolean sizeOK = GL_TRUE; + GLboolean colorFormat, indexFormat; + + /* Basic level check (more checking in ctx->Driver.TestProxyTexImage) */ + if (level < 0 || level >= MAX_TEXTURE_LEVELS) { + if (!isProxy) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glTexImage%dD(level=%d)", dimensions, level); + } + return GL_TRUE; + } + + /* Check border */ + if (border < 0 || border > 1 || + ((target == GL_TEXTURE_RECTANGLE_NV || + target == GL_PROXY_TEXTURE_RECTANGLE_NV) && border != 0)) { + if (!isProxy) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glTexImage%dD(border=%d)", dimensions, border); + } + return GL_TRUE; + } + + if (width < 0 || height < 0 || depth < 0) { + if (!isProxy) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glTexImage%dD(width, height or depth < 0)", dimensions); + } + return GL_TRUE; + } + + /* Do this simple check before calling the TestProxyTexImage() function */ + if (proxyTarget == GL_PROXY_TEXTURE_CUBE_MAP_ARB) { + sizeOK = (width == height); + } + + /* + * Use the proxy texture driver hook to see if the size/level/etc are + * legal. + */ + sizeOK = sizeOK && ctx->Driver.TestProxyTexImage(ctx, proxyTarget, level, + internalFormat, format, + type, width, height, + depth, border); + if (!sizeOK) { + if (!isProxy) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glTexImage%dD(level=%d, width=%d, height=%d, depth=%d)", + dimensions, level, width, height, depth); + } + return GL_TRUE; + } + + /* Check internalFormat */ + if (_mesa_base_tex_format(ctx, internalFormat) < 0) { + if (!isProxy) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glTexImage%dD(internalFormat=%s)", + dimensions, _mesa_lookup_enum_by_nr(internalFormat)); + } + return GL_TRUE; + } + + /* Check incoming image format and type */ + if (!_mesa_is_legal_format_and_type(ctx, format, type)) { + /* Normally, GL_INVALID_OPERATION is generated by a format/type + * mismatch (see the 1.2 spec page 94, sec 3.6.4.). But with the + * GL_EXT_texture_integer extension, some combinations should generate + * GL_INVALID_ENUM instead (grr!). + */ + if (!isProxy) { + GLenum error = _mesa_is_integer_format(format) + ? GL_INVALID_ENUM : GL_INVALID_OPERATION; + _mesa_error(ctx, error, + "glTexImage%dD(incompatible format 0x%x, type 0x%x)", + dimensions, format, type); + } + return GL_TRUE; + } + + /* make sure internal format and format basically agree */ + colorFormat = _mesa_is_color_format(format); + indexFormat = _mesa_is_index_format(format); + if ((_mesa_is_color_format(internalFormat) && !colorFormat && !indexFormat) || + (_mesa_is_index_format(internalFormat) && !indexFormat) || + (_mesa_is_depth_format(internalFormat) != _mesa_is_depth_format(format)) || + (_mesa_is_ycbcr_format(internalFormat) != _mesa_is_ycbcr_format(format)) || + (_mesa_is_depthstencil_format(internalFormat) != _mesa_is_depthstencil_format(format)) || + (_mesa_is_dudv_format(internalFormat) != _mesa_is_dudv_format(format))) { + if (!isProxy) + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexImage%dD(incompatible internalFormat 0x%x, format 0x%x)", + dimensions, internalFormat, format); + return GL_TRUE; + } + + /* additional checks for ycbcr textures */ + if (internalFormat == GL_YCBCR_MESA) { + ASSERT(ctx->Extensions.MESA_ycbcr_texture); + if (type != GL_UNSIGNED_SHORT_8_8_MESA && + type != GL_UNSIGNED_SHORT_8_8_REV_MESA) { + char message[100]; + _mesa_snprintf(message, sizeof(message), + "glTexImage%dD(format/type YCBCR mismatch", dimensions); + _mesa_error(ctx, GL_INVALID_ENUM, "%s", message); + return GL_TRUE; /* error */ + } + if (target != GL_TEXTURE_2D && + target != GL_PROXY_TEXTURE_2D && + target != GL_TEXTURE_RECTANGLE_NV && + target != GL_PROXY_TEXTURE_RECTANGLE_NV) { + if (!isProxy) + _mesa_error(ctx, GL_INVALID_ENUM, "glTexImage(target)"); + return GL_TRUE; + } + if (border != 0) { + if (!isProxy) { + char message[100]; + _mesa_snprintf(message, sizeof(message), + "glTexImage%dD(format=GL_YCBCR_MESA and border=%d)", + dimensions, border); + _mesa_error(ctx, GL_INVALID_VALUE, "%s", message); + } + return GL_TRUE; + } + } + + /* additional checks for depth textures */ + if (_mesa_base_tex_format(ctx, internalFormat) == GL_DEPTH_COMPONENT) { + /* Only 1D, 2D and rectangular textures supported, not 3D or cubes */ + if (target != GL_TEXTURE_1D && + target != GL_PROXY_TEXTURE_1D && + target != GL_TEXTURE_2D && + target != GL_PROXY_TEXTURE_2D && + target != GL_TEXTURE_RECTANGLE_ARB && + target != GL_PROXY_TEXTURE_RECTANGLE_ARB) { + if (!isProxy) + _mesa_error(ctx, GL_INVALID_ENUM, + "glTexImage(target/internalFormat)"); + return GL_TRUE; + } + } + + /* additional checks for compressed textures */ + if (_mesa_is_compressed_format(ctx, internalFormat)) { + if (!target_can_be_compressed(ctx, target, internalFormat)) { + if (!isProxy) + _mesa_error(ctx, GL_INVALID_ENUM, + "glTexImage%dD(target)", dimensions); + return GL_TRUE; + } + if (border != 0) { + if (!isProxy) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexImage%dD(border!=0)", dimensions); + } + return GL_TRUE; + } + } + + /* additional checks for integer textures */ + if (ctx->Extensions.EXT_texture_integer && + (_mesa_is_integer_format(format) != + _mesa_is_integer_format(internalFormat))) { + if (!isProxy) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexImage%dD(integer/non-integer format mismatch)", + dimensions); + } + return GL_TRUE; + } + + /* if we get here, the parameters are OK */ + return GL_FALSE; +} + + +/** + * Test glTexSubImage[123]D() parameters for errors. + * + * \param ctx GL context. + * \param dimensions texture image dimensions (must be 1, 2 or 3). + * \param target texture target given by the user. + * \param level image level given by the user. + * \param xoffset sub-image x offset given by the user. + * \param yoffset sub-image y offset given by the user. + * \param zoffset sub-image z offset given by the user. + * \param format pixel data format given by the user. + * \param type pixel data type given by the user. + * \param width image width given by the user. + * \param height image height given by the user. + * \param depth image depth given by the user. + * + * \return GL_TRUE if an error was detected, or GL_FALSE if no errors. + * + * Verifies each of the parameters against the constants specified in + * __struct gl_contextRec::Const and the supported extensions, and according + * to the OpenGL specification. + */ +static GLboolean +subtexture_error_check( struct gl_context *ctx, GLuint dimensions, + GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLint width, GLint height, GLint depth, + GLenum format, GLenum type ) +{ + /* Basic level check */ + if (level < 0 || level >= MAX_TEXTURE_LEVELS) { + _mesa_error(ctx, GL_INVALID_ENUM, "glTexSubImage2D(level=%d)", level); + return GL_TRUE; + } + + /* Check for negative sizes */ + if (width < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glTexSubImage%dD(width=%d)", dimensions, width); + return GL_TRUE; + } + if (height < 0 && dimensions > 1) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glTexSubImage%dD(height=%d)", dimensions, height); + return GL_TRUE; + } + if (depth < 0 && dimensions > 2) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glTexSubImage%dD(depth=%d)", dimensions, depth); + return GL_TRUE; + } + + if (!_mesa_is_legal_format_and_type(ctx, format, type)) { + /* As with the glTexImage2D check above, the error code here + * depends on texture integer. + */ + GLenum error = _mesa_is_integer_format(format) + ? GL_INVALID_OPERATION : GL_INVALID_ENUM; + _mesa_error(ctx, error, + "glTexSubImage%dD(incompatible format 0x%x, type 0x%x)", + dimensions, format, type); + return GL_TRUE; + } + + return GL_FALSE; +} + + +/** + * Do second part of glTexSubImage which depends on the destination texture. + * \return GL_TRUE if error recorded, GL_FALSE otherwise + */ +static GLboolean +subtexture_error_check2( struct gl_context *ctx, GLuint dimensions, + GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLint width, GLint height, GLint depth, + GLenum format, GLenum type, + const struct gl_texture_image *destTex ) +{ + if (!destTex) { + /* undefined image level */ + _mesa_error(ctx, GL_INVALID_OPERATION, "glTexSubImage%dD", dimensions); + return GL_TRUE; + } + + if (xoffset < -((GLint)destTex->Border)) { + _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage%dD(xoffset)", + dimensions); + return GL_TRUE; + } + if (xoffset + width > (GLint) (destTex->Width + destTex->Border)) { + _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage%dD(xoffset+width)", + dimensions); + return GL_TRUE; + } + if (dimensions > 1) { + if (yoffset < -((GLint)destTex->Border)) { + _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage%dD(yoffset)", + dimensions); + return GL_TRUE; + } + if (yoffset + height > (GLint) (destTex->Height + destTex->Border)) { + _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage%dD(yoffset+height)", + dimensions); + return GL_TRUE; + } + } + if (dimensions > 2) { + if (zoffset < -((GLint)destTex->Border)) { + _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage3D(zoffset)"); + return GL_TRUE; + } + if (zoffset + depth > (GLint) (destTex->Depth + destTex->Border)) { + _mesa_error(ctx, GL_INVALID_VALUE, "glTexSubImage3D(zoffset+depth)"); + return GL_TRUE; + } + } + + if (_mesa_is_format_compressed(destTex->TexFormat)) { + GLuint bw, bh; + + /* do tests which depend on compression block size */ + _mesa_get_format_block_size(destTex->TexFormat, &bw, &bh); + + /* offset must be multiple of block size */ + if ((xoffset % bw != 0) || (yoffset % bh != 0)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexSubImage%dD(xoffset = %d, yoffset = %d)", + dimensions, xoffset, yoffset); + return GL_TRUE; + } + /* size must be multiple of bw by bh or equal to whole texture size */ + if ((width % bw != 0) && (GLuint) width != destTex->Width) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexSubImage%dD(width = %d)", dimensions, width); + return GL_TRUE; + } + if ((height % bh != 0) && (GLuint) height != destTex->Height) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glTexSubImage%dD(height = %d)", dimensions, height); + return GL_TRUE; + } + } + + return GL_FALSE; +} + + +/** + * Test glCopyTexImage[12]D() parameters for errors. + * + * \param ctx GL context. + * \param dimensions texture image dimensions (must be 1, 2 or 3). + * \param target texture target given by the user. + * \param level image level given by the user. + * \param internalFormat internal format given by the user. + * \param width image width given by the user. + * \param height image height given by the user. + * \param border texture border. + * + * \return GL_TRUE if an error was detected, or GL_FALSE if no errors. + * + * Verifies each of the parameters against the constants specified in + * __struct gl_contextRec::Const and the supported extensions, and according + * to the OpenGL specification. + */ +static GLboolean +copytexture_error_check( struct gl_context *ctx, GLuint dimensions, + GLenum target, GLint level, GLint internalFormat, + GLint width, GLint height, GLint border ) +{ + const GLenum proxyTarget = get_proxy_target(target); + const GLenum type = GL_FLOAT; + GLboolean sizeOK; + GLint format; + + /* check target */ + if (!legal_texsubimage_target(ctx, dimensions, target)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glCopyTexImage%uD(target=%s)", + dimensions, _mesa_lookup_enum_by_nr(target)); + return GL_TRUE; + } + + /* Basic level check (more checking in ctx->Driver.TestProxyTexImage) */ + if (level < 0 || level >= MAX_TEXTURE_LEVELS) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexImage%dD(level=%d)", dimensions, level); + return GL_TRUE; + } + + /* Check that the source buffer is complete */ + if (ctx->ReadBuffer->Name) { + if (ctx->ReadBuffer->_Status == 0) { + _mesa_test_framebuffer_completeness(ctx, ctx->ReadBuffer); + } + if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glCopyTexImage%dD(invalid readbuffer)", dimensions); + return GL_TRUE; + } + } + + /* Check border */ + if (border < 0 || border > 1 || + ((target == GL_TEXTURE_RECTANGLE_NV || + target == GL_PROXY_TEXTURE_RECTANGLE_NV) && border != 0)) { + return GL_TRUE; + } + + format = _mesa_base_tex_format(ctx, internalFormat); + if (format < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexImage%dD(internalFormat)", dimensions); + return GL_TRUE; + } + + if (!_mesa_source_buffer_exists(ctx, format)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexImage%dD(missing readbuffer)", dimensions); + return GL_TRUE; + } + + /* Do size, level checking */ + sizeOK = (proxyTarget == GL_PROXY_TEXTURE_CUBE_MAP_ARB) + ? (width == height) : 1; + + sizeOK = sizeOK && ctx->Driver.TestProxyTexImage(ctx, proxyTarget, level, + internalFormat, format, + type, width, height, + 1, border); + + if (!sizeOK) { + if (dimensions == 1) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexImage1D(width=%d)", width); + } + else { + ASSERT(dimensions == 2); + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexImage2D(width=%d, height=%d)", width, height); + } + return GL_TRUE; + } + + if (_mesa_is_compressed_format(ctx, internalFormat)) { + if (!target_can_be_compressed(ctx, target, internalFormat)) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glCopyTexImage%dD(target)", dimensions); + return GL_TRUE; + } + if (border != 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexImage%dD(border!=0)", dimensions); + return GL_TRUE; + } + } + else if (_mesa_is_depth_format(internalFormat)) { + /* make sure we have depth/stencil buffers */ + if (!ctx->ReadBuffer->_DepthBuffer) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexImage%dD(no depth)", dimensions); + return GL_TRUE; + } + } + else if (_mesa_is_depthstencil_format(internalFormat)) { + /* make sure we have depth/stencil buffers */ + if (!ctx->ReadBuffer->_DepthBuffer || !ctx->ReadBuffer->_StencilBuffer) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexImage%dD(no depth/stencil buffer)", dimensions); + return GL_TRUE; + } + } + + /* if we get here, the parameters are OK */ + return GL_FALSE; +} + + +/** + * Test glCopyTexSubImage[12]D() parameters for errors. + * Note that this is the first part of error checking. + * See also copytexsubimage_error_check2() below for the second part. + * + * \param ctx GL context. + * \param dimensions texture image dimensions (must be 1, 2 or 3). + * \param target texture target given by the user. + * \param level image level given by the user. + * + * \return GL_TRUE if an error was detected, or GL_FALSE if no errors. + */ +static GLboolean +copytexsubimage_error_check1( struct gl_context *ctx, GLuint dimensions, + GLenum target, GLint level) +{ + /* Check that the source buffer is complete */ + if (ctx->ReadBuffer->Name) { + if (ctx->ReadBuffer->_Status == 0) { + _mesa_test_framebuffer_completeness(ctx, ctx->ReadBuffer); + } + if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glCopyTexImage%dD(invalid readbuffer)", dimensions); + return GL_TRUE; + } + } + + /* check target (proxies not allowed) */ + if (!legal_texsubimage_target(ctx, dimensions, target)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glCopyTexSubImage%uD(target=%s)", + dimensions, _mesa_lookup_enum_by_nr(target)); + return GL_TRUE; + } + + /* Check level */ + if (level < 0 || level >= MAX_TEXTURE_LEVELS) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexSubImage%dD(level=%d)", dimensions, level); + return GL_TRUE; + } + + return GL_FALSE; +} + + +/** + * Second part of error checking for glCopyTexSubImage[12]D(). + * \param xoffset sub-image x offset given by the user. + * \param yoffset sub-image y offset given by the user. + * \param zoffset sub-image z offset given by the user. + * \param width image width given by the user. + * \param height image height given by the user. + */ +static GLboolean +copytexsubimage_error_check2( struct gl_context *ctx, GLuint dimensions, + GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, + const struct gl_texture_image *teximage ) +{ + /* check that dest tex image exists */ + if (!teximage) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexSubImage%dD(undefined texture level: %d)", + dimensions, level); + return GL_TRUE; + } + + /* Check size */ + if (width < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexSubImage%dD(width=%d)", dimensions, width); + return GL_TRUE; + } + if (dimensions > 1 && height < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexSubImage%dD(height=%d)", dimensions, height); + return GL_TRUE; + } + + /* check x/y offsets */ + if (xoffset < -((GLint)teximage->Border)) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexSubImage%dD(xoffset=%d)", dimensions, xoffset); + return GL_TRUE; + } + if (xoffset + width > (GLint) (teximage->Width + teximage->Border)) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexSubImage%dD(xoffset+width)", dimensions); + return GL_TRUE; + } + if (dimensions > 1) { + if (yoffset < -((GLint)teximage->Border)) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexSubImage%dD(yoffset=%d)", dimensions, yoffset); + return GL_TRUE; + } + /* NOTE: we're adding the border here, not subtracting! */ + if (yoffset + height > (GLint) (teximage->Height + teximage->Border)) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexSubImage%dD(yoffset+height)", dimensions); + return GL_TRUE; + } + } + + /* check z offset */ + if (dimensions > 2) { + if (zoffset < -((GLint)teximage->Border)) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexSubImage%dD(zoffset)", dimensions); + return GL_TRUE; + } + if (zoffset > (GLint) (teximage->Depth + teximage->Border)) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexSubImage%dD(zoffset+depth)", dimensions); + return GL_TRUE; + } + } + + if (_mesa_is_format_compressed(teximage->TexFormat)) { + /* offset must be multiple of 4 */ + if ((xoffset & 3) || (yoffset & 3)) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexSubImage%dD(xoffset or yoffset)", dimensions); + return GL_TRUE; + } + /* size must be multiple of 4 */ + if ((width & 3) != 0 && (GLuint) width != teximage->Width) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexSubImage%dD(width)", dimensions); + return GL_TRUE; + } + if ((height & 3) != 0 && (GLuint) height != teximage->Height) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCopyTexSubImage%dD(height)", dimensions); + return GL_TRUE; + } + } + + if (teximage->InternalFormat == GL_YCBCR_MESA) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glCopyTexSubImage2D"); + return GL_TRUE; + } + + if (!_mesa_source_buffer_exists(ctx, teximage->_BaseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexSubImage%dD(missing readbuffer, format=0x%x)", + dimensions, teximage->_BaseFormat); + return GL_TRUE; + } + + if (teximage->_BaseFormat == GL_DEPTH_COMPONENT) { + if (!ctx->ReadBuffer->_DepthBuffer) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexSubImage%dD(no depth buffer)", + dimensions); + return GL_TRUE; + } + } + else if (teximage->_BaseFormat == GL_DEPTH_STENCIL_EXT) { + if (!ctx->ReadBuffer->_DepthBuffer || !ctx->ReadBuffer->_StencilBuffer) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexSubImage%dD(no depth/stencil buffer)", + dimensions); + return GL_TRUE; + } + } + + /* If copying into an integer texture, the source buffer must also be + * integer-valued. + */ + if (_mesa_is_format_integer_color(teximage->TexFormat)) { + struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer; + if (!_mesa_is_format_integer_color(rb->Format)) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCopyTexSubImage%dD(source buffer is not integer format)", + dimensions); + return GL_TRUE; + } + } + + /* if we get here, the parameters are OK */ + return GL_FALSE; +} + + +/** Callback info for walking over FBO hash table */ +struct cb_info +{ + struct gl_context *ctx; + struct gl_texture_object *texObj; + GLuint level, face; +}; + + +/** + * Check render to texture callback. Called from _mesa_HashWalk(). + */ +static void +check_rtt_cb(GLuint key, void *data, void *userData) +{ + struct gl_framebuffer *fb = (struct gl_framebuffer *) data; + const struct cb_info *info = (struct cb_info *) userData; + struct gl_context *ctx = info->ctx; + const struct gl_texture_object *texObj = info->texObj; + const GLuint level = info->level, face = info->face; + + /* If this is a user-created FBO */ + if (fb->Name) { + GLuint i; + /* check if any of the FBO's attachments point to 'texObj' */ + for (i = 0; i < BUFFER_COUNT; i++) { + struct gl_renderbuffer_attachment *att = fb->Attachment + i; + if (att->Type == GL_TEXTURE && + att->Texture == texObj && + att->TextureLevel == level && + att->CubeMapFace == face) { + ASSERT(_mesa_get_attachment_teximage(att)); + /* Tell driver about the new renderbuffer texture */ + ctx->Driver.RenderTexture(ctx, ctx->DrawBuffer, att); + /* Mark fb status as indeterminate to force re-validation */ + fb->_Status = 0; + } + } + } +} + + +/** + * When a texture image is specified we have to check if it's bound to + * any framebuffer objects (render to texture) in order to detect changes + * in size or format since that effects FBO completeness. + * Any FBOs rendering into the texture must be re-validated. + */ +static void +update_fbo_texture(struct gl_context *ctx, struct gl_texture_object *texObj, + GLuint face, GLuint level) +{ + /* Only check this texture if it's been marked as RenderToTexture */ + if (texObj->_RenderToTexture) { + struct cb_info info; + info.ctx = ctx; + info.texObj = texObj; + info.level = level; + info.face = face; + _mesa_HashWalk(ctx->Shared->FrameBuffers, check_rtt_cb, &info); + } +} + + +/** + * If the texture object's GenerateMipmap flag is set and we've + * changed the texture base level image, regenerate the rest of the + * mipmap levels now. + */ +static INLINE void +check_gen_mipmap(struct gl_context *ctx, GLenum target, + struct gl_texture_object *texObj, GLint level) +{ + ASSERT(target != GL_TEXTURE_CUBE_MAP); + if (texObj->GenerateMipmap && + level == texObj->BaseLevel && + level < texObj->MaxLevel) { + ASSERT(ctx->Driver.GenerateMipmap); + ctx->Driver.GenerateMipmap(ctx, target, texObj); + } +} + + +/** Debug helper: override the user-requested internal format */ +static GLenum +override_internal_format(GLenum internalFormat, GLint width, GLint height) +{ +#if 0 + if (internalFormat == GL_RGBA16F_ARB || + internalFormat == GL_RGBA32F_ARB) { + printf("Convert rgba float tex to int %d x %d\n", width, height); + return GL_RGBA; + } + else if (internalFormat == GL_RGB16F_ARB || + internalFormat == GL_RGB32F_ARB) { + printf("Convert rgb float tex to int %d x %d\n", width, height); + return GL_RGB; + } + else if (internalFormat == GL_LUMINANCE_ALPHA16F_ARB || + internalFormat == GL_LUMINANCE_ALPHA32F_ARB) { + printf("Convert luminance float tex to int %d x %d\n", width, height); + return GL_LUMINANCE_ALPHA; + } + else if (internalFormat == GL_LUMINANCE16F_ARB || + internalFormat == GL_LUMINANCE32F_ARB) { + printf("Convert luminance float tex to int %d x %d\n", width, height); + return GL_LUMINANCE; + } + else if (internalFormat == GL_ALPHA16F_ARB || + internalFormat == GL_ALPHA32F_ARB) { + printf("Convert luminance float tex to int %d x %d\n", width, height); + return GL_ALPHA; + } + /* + else if (internalFormat == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT) { + internalFormat = GL_RGBA; + } + */ + else { + return internalFormat; + } +#else + return internalFormat; +#endif +} + + +/** + * Choose the actual hardware format for a texture image. + * Try to use the same format as the previous image level when possible. + * Otherwise, ask the driver for the best format. + * It's important to try to choose a consistant format for all levels + * for efficient texture memory layout/allocation. In particular, this + * comes up during automatic mipmap generation. + */ +gl_format +_mesa_choose_texture_format(struct gl_context *ctx, + struct gl_texture_object *texObj, + GLenum target, GLint level, + GLenum internalFormat, GLenum format, GLenum type) +{ + gl_format f; + + /* see if we've already chosen a format for the previous level */ + if (level > 0) { + struct gl_texture_image *prevImage = + _mesa_select_tex_image(ctx, texObj, target, level - 1); + /* See if the prev level is defined and has an internal format which + * matches the new internal format. + */ + if (prevImage && + prevImage->Width > 0 && + prevImage->InternalFormat == internalFormat) { + /* use the same format */ + ASSERT(prevImage->TexFormat != MESA_FORMAT_NONE); + return prevImage->TexFormat; + } + } + + /* choose format from scratch */ + f = ctx->Driver.ChooseTextureFormat(ctx, internalFormat, format, type); + ASSERT(f != MESA_FORMAT_NONE); + return f; +} + + +/** + * Common code to implement all the glTexImage1D/2D/3D functions. + */ +static void +teximage(struct gl_context *ctx, GLuint dims, + GLenum target, GLint level, GLint internalFormat, + GLsizei width, GLsizei height, GLsizei depth, + GLint border, GLenum format, GLenum type, + const GLvoid *pixels) +{ + GLboolean error; + + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE)) + _mesa_debug(ctx, "glTexImage%uD %s %d %s %d %d %d %d %s %s %p\n", + dims, + _mesa_lookup_enum_by_nr(target), level, + _mesa_lookup_enum_by_nr(internalFormat), + width, height, depth, border, + _mesa_lookup_enum_by_nr(format), + _mesa_lookup_enum_by_nr(type), pixels); + + internalFormat = override_internal_format(internalFormat, width, height); + + /* target error checking */ + if (!legal_teximage_target(ctx, dims, target)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glTexImage%uD(target=%s)", + dims, _mesa_lookup_enum_by_nr(target)); + return; + } + + /* general error checking */ + error = texture_error_check(ctx, dims, target, level, internalFormat, + format, type, width, height, depth, border); + + if (_mesa_is_proxy_texture(target)) { + /* Proxy texture: just clear or set state depending on error checking */ + struct gl_texture_image *texImage = + _mesa_get_proxy_tex_image(ctx, target, level); + + if (error) { + /* when error, clear all proxy texture image parameters */ + if (texImage) + clear_teximage_fields(texImage); + } + else { + /* no error, set the tex image parameters */ + struct gl_texture_object *texObj = + _mesa_get_current_tex_object(ctx, target); + gl_format texFormat = _mesa_choose_texture_format(ctx, texObj, + target, level, + internalFormat, + format, type); + + if (legal_texture_size(ctx, texFormat, width, height, depth)) { + _mesa_init_teximage_fields(ctx, target, texImage, width, height, + depth, border, internalFormat, + texFormat); + } + else if (texImage) { + clear_teximage_fields(texImage); + } + } + } + else { + /* non-proxy target */ + const GLuint face = _mesa_tex_target_to_face(target); + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; + + if (error) { + return; /* error was recorded */ + } + + if (ctx->NewState & _NEW_PIXEL) + _mesa_update_state(ctx); + + texObj = _mesa_get_current_tex_object(ctx, target); + + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_get_tex_image(ctx, texObj, target, level); + + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage%uD", dims); + } + else { + gl_format texFormat; + + if (texImage->Data) { + ctx->Driver.FreeTexImageData( ctx, texImage ); + } + + ASSERT(texImage->Data == NULL); + texFormat = _mesa_choose_texture_format(ctx, texObj, target, level, + internalFormat, format, + type); + + if (legal_texture_size(ctx, texFormat, width, height, depth)) { + _mesa_init_teximage_fields(ctx, target, texImage, + width, height, depth, + border, internalFormat, texFormat); + + /* Give the texture to the driver. <pixels> may be null. */ + ASSERT(ctx->Driver.TexImage3D); + switch (dims) { + case 1: + ctx->Driver.TexImage1D(ctx, target, level, internalFormat, + width, border, format, + type, pixels, &ctx->Unpack, texObj, + texImage); + break; + case 2: + ctx->Driver.TexImage2D(ctx, target, level, internalFormat, + width, height, border, format, + type, pixels, &ctx->Unpack, texObj, + texImage); + break; + case 3: + ctx->Driver.TexImage3D(ctx, target, level, internalFormat, + width, height, depth, border, format, + type, pixels, &ctx->Unpack, texObj, + texImage); + break; + default: + _mesa_problem(ctx, "invalid dims=%u in teximage()", dims); + } + + check_gen_mipmap(ctx, target, texObj, level); + + update_fbo_texture(ctx, texObj, face, level); + + /* state update */ + texObj->_Complete = GL_FALSE; + ctx->NewState |= _NEW_TEXTURE; + } + else { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage%uD", dims); + } + } + } + _mesa_unlock_texture(ctx, texObj); + } +} + + +/* + * Called from the API. Note that width includes the border. + */ +void GLAPIENTRY +_mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat, + GLsizei width, GLint border, GLenum format, + GLenum type, const GLvoid *pixels ) +{ + GET_CURRENT_CONTEXT(ctx); + teximage(ctx, 1, target, level, internalFormat, width, 1, 1, + border, format, type, pixels); +} + + +void GLAPIENTRY +_mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat, + GLsizei width, GLsizei height, GLint border, + GLenum format, GLenum type, + const GLvoid *pixels ) +{ + GET_CURRENT_CONTEXT(ctx); + teximage(ctx, 2, target, level, internalFormat, width, height, 1, + border, format, type, pixels); +} + + +/* + * Called by the API or display list executor. + * Note that width and height include the border. + */ +void GLAPIENTRY +_mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat, + GLsizei width, GLsizei height, GLsizei depth, + GLint border, GLenum format, GLenum type, + const GLvoid *pixels ) +{ + GET_CURRENT_CONTEXT(ctx); + teximage(ctx, 3, target, level, internalFormat, width, height, depth, + border, format, type, pixels); +} + + +void GLAPIENTRY +_mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalFormat, + GLsizei width, GLsizei height, GLsizei depth, + GLint border, GLenum format, GLenum type, + const GLvoid *pixels ) +{ + _mesa_TexImage3D(target, level, (GLint) internalFormat, width, height, + depth, border, format, type, pixels); +} + + +#if FEATURE_OES_EGL_image +void GLAPIENTRY +_mesa_EGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image) +{ + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + if (!ctx->Extensions.OES_EGL_image) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glEGLImageTargetTexture2DOES(unsupported)"); + return; + } + + if (target != GL_TEXTURE_2D) { + _mesa_error(ctx, GL_INVALID_ENUM, + "glEGLImageTargetTexture2D(target=%d)", target); + return; + } + + if (ctx->NewState & _NEW_PIXEL) + _mesa_update_state(ctx); + + texObj = _mesa_get_current_tex_object(ctx, target); + _mesa_lock_texture(ctx, texObj); + + texImage = _mesa_get_tex_image(ctx, texObj, target, 0); + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glEGLImageTargetTexture2D"); + } else { + if (texImage->Data) + ctx->Driver.FreeTexImageData( ctx, texImage ); + + ASSERT(texImage->Data == NULL); + ctx->Driver.EGLImageTargetTexture2D(ctx, target, + texObj, texImage, image); + + /* state update */ + texObj->_Complete = GL_FALSE; + ctx->NewState |= _NEW_TEXTURE; + } + _mesa_unlock_texture(ctx, texObj); + +} +#endif + + + +/** + * Implement all the glTexSubImage1/2/3D() functions. + */ +static void +texsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLenum type, const GLvoid *pixels ) +{ + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; + + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE)) + _mesa_debug(ctx, "glTexSubImage%uD %s %d %d %d %d %d %d %d %s %s %p\n", + dims, + _mesa_lookup_enum_by_nr(target), level, + xoffset, yoffset, zoffset, width, height, depth, + _mesa_lookup_enum_by_nr(format), + _mesa_lookup_enum_by_nr(type), pixels); + + /* check target (proxies not allowed) */ + if (!legal_texsubimage_target(ctx, dims, target)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glTexSubImage%uD(target=%s)", + dims, _mesa_lookup_enum_by_nr(target)); + return; + } + + if (ctx->NewState & _NEW_PIXEL) + _mesa_update_state(ctx); + + if (subtexture_error_check(ctx, dims, target, level, xoffset, yoffset, zoffset, + width, height, depth, format, type)) { + return; /* error was detected */ + } + + texObj = _mesa_get_current_tex_object(ctx, target); + + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + + if (subtexture_error_check2(ctx, dims, target, level, + xoffset, yoffset, zoffset, + width, height, depth, + format, type, texImage)) { + /* error was recorded */ + } + else if (width > 0 && height > 0 && height > 0) { + /* If we have a border, offset=-1 is legal. Bias by border width. */ + switch (dims) { + case 3: + zoffset += texImage->Border; + /* fall-through */ + case 2: + yoffset += texImage->Border; + /* fall-through */ + case 1: + xoffset += texImage->Border; + } + + switch (dims) { + case 1: + ctx->Driver.TexSubImage1D(ctx, target, level, + xoffset, width, + format, type, pixels, + &ctx->Unpack, texObj, texImage ); + break; + case 2: + ctx->Driver.TexSubImage2D(ctx, target, level, + xoffset, yoffset, width, height, + format, type, pixels, + &ctx->Unpack, texObj, texImage ); + break; + case 3: + ctx->Driver.TexSubImage3D(ctx, target, level, + xoffset, yoffset, zoffset, + width, height, depth, + format, type, pixels, + &ctx->Unpack, texObj, texImage ); + break; + default: + _mesa_problem(ctx, "unexpected dims in subteximage()"); + } + + check_gen_mipmap(ctx, target, texObj, level); + + ctx->NewState |= _NEW_TEXTURE; + } + } + _mesa_unlock_texture(ctx, texObj); +} + + +void GLAPIENTRY +_mesa_TexSubImage1D( GLenum target, GLint level, + GLint xoffset, GLsizei width, + GLenum format, GLenum type, + const GLvoid *pixels ) +{ + GET_CURRENT_CONTEXT(ctx); + texsubimage(ctx, 1, target, level, + xoffset, 0, 0, + width, 1, 1, + format, type, pixels); +} + + +void GLAPIENTRY +_mesa_TexSubImage2D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + const GLvoid *pixels ) +{ + GET_CURRENT_CONTEXT(ctx); + texsubimage(ctx, 2, target, level, + xoffset, yoffset, 0, + width, height, 1, + format, type, pixels); +} + + + +void GLAPIENTRY +_mesa_TexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLenum type, + const GLvoid *pixels ) +{ + GET_CURRENT_CONTEXT(ctx); + texsubimage(ctx, 3, target, level, + xoffset, yoffset, zoffset, + width, height, depth, + format, type, pixels); +} + + + +/** + * Implement the glCopyTexImage1/2D() functions. + */ +static void +copyteximage(struct gl_context *ctx, GLuint dims, + GLenum target, GLint level, GLenum internalFormat, + GLint x, GLint y, GLsizei width, GLsizei height, GLint border ) +{ + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; + const GLuint face = _mesa_tex_target_to_face(target); + + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE)) + _mesa_debug(ctx, "glCopyTexImage%uD %s %d %s %d %d %d %d %d\n", + dims, + _mesa_lookup_enum_by_nr(target), level, + _mesa_lookup_enum_by_nr(internalFormat), + x, y, width, height, border); + + if (ctx->NewState & NEW_COPY_TEX_STATE) + _mesa_update_state(ctx); + + if (copytexture_error_check(ctx, dims, target, level, internalFormat, + width, height, border)) + return; + + texObj = _mesa_get_current_tex_object(ctx, target); + + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_get_tex_image(ctx, texObj, target, level); + + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexImage%uD", dims); + } + else { + gl_format texFormat; + + if (texImage->Data) { + ctx->Driver.FreeTexImageData( ctx, texImage ); + } + + ASSERT(texImage->Data == NULL); + + texFormat = _mesa_choose_texture_format(ctx, texObj, target, level, + internalFormat, GL_NONE, + GL_NONE); + + if (legal_texture_size(ctx, texFormat, width, height, 1)) { + _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1, + border, internalFormat, texFormat); + + ASSERT(ctx->Driver.CopyTexImage2D); + if (dims == 1) + ctx->Driver.CopyTexImage1D(ctx, target, level, internalFormat, + x, y, width, border); + else + ctx->Driver.CopyTexImage2D(ctx, target, level, internalFormat, + x, y, width, height, border); + + check_gen_mipmap(ctx, target, texObj, level); + + update_fbo_texture(ctx, texObj, face, level); + + /* state update */ + texObj->_Complete = GL_FALSE; + ctx->NewState |= _NEW_TEXTURE; + } + else { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyTexImage%uD", dims); + } + } + } + _mesa_unlock_texture(ctx, texObj); +} + + + +void GLAPIENTRY +_mesa_CopyTexImage1D( GLenum target, GLint level, + GLenum internalFormat, + GLint x, GLint y, + GLsizei width, GLint border ) +{ + GET_CURRENT_CONTEXT(ctx); + copyteximage(ctx, 1, target, level, internalFormat, x, y, width, 1, border); +} + + + +void GLAPIENTRY +_mesa_CopyTexImage2D( GLenum target, GLint level, GLenum internalFormat, + GLint x, GLint y, GLsizei width, GLsizei height, + GLint border ) +{ + GET_CURRENT_CONTEXT(ctx); + copyteximage(ctx, 2, target, level, internalFormat, + x, y, width, height, border); +} + + + +/** + * Implementation for glCopyTexSubImage1/2/3D() functions. + */ +static void +copytexsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLint x, GLint y, GLsizei width, GLsizei height) +{ + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; + + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE)) + _mesa_debug(ctx, "glCopyTexSubImage%uD %s %d %d %d %d %d %d %d %d\n", + dims, + _mesa_lookup_enum_by_nr(target), + level, xoffset, yoffset, zoffset, x, y, width, height); + + if (ctx->NewState & NEW_COPY_TEX_STATE) + _mesa_update_state(ctx); + + if (copytexsubimage_error_check1(ctx, dims, target, level)) + return; + + texObj = _mesa_get_current_tex_object(ctx, target); + + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + + if (copytexsubimage_error_check2(ctx, dims, target, level, xoffset, yoffset, + zoffset, width, height, texImage)) { + /* error was recored */ + } + else { + /* If we have a border, offset=-1 is legal. Bias by border width. */ + switch (dims) { + case 3: + zoffset += texImage->Border; + /* fall-through */ + case 2: + yoffset += texImage->Border; + /* fall-through */ + case 1: + xoffset += texImage->Border; + } + + if (_mesa_clip_copytexsubimage(ctx, &xoffset, &yoffset, &x, &y, + &width, &height)) { + switch (dims) { + case 1: + ctx->Driver.CopyTexSubImage1D(ctx, target, level, + xoffset, x, y, width); + break; + case 2: + ctx->Driver.CopyTexSubImage2D(ctx, target, level, + xoffset, yoffset, + x, y, width, height); + break; + case 3: + ctx->Driver.CopyTexSubImage3D(ctx, target, level, + xoffset, yoffset, zoffset, + x, y, width, height); + break; + default: + _mesa_problem(ctx, "bad dims in copytexsubimage()"); + } + + check_gen_mipmap(ctx, target, texObj, level); + + ctx->NewState |= _NEW_TEXTURE; + } + } + } + _mesa_unlock_texture(ctx, texObj); +} + + +void GLAPIENTRY +_mesa_CopyTexSubImage1D( GLenum target, GLint level, + GLint xoffset, GLint x, GLint y, GLsizei width ) +{ + GET_CURRENT_CONTEXT(ctx); + copytexsubimage(ctx, 1, target, level, xoffset, 0, 0, x, y, width, 1); +} + + + +void GLAPIENTRY +_mesa_CopyTexSubImage2D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint x, GLint y, GLsizei width, GLsizei height ) +{ + GET_CURRENT_CONTEXT(ctx); + copytexsubimage(ctx, 2, target, level, xoffset, yoffset, 0, x, y, + width, height); +} + + + +void GLAPIENTRY +_mesa_CopyTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLint x, GLint y, GLsizei width, GLsizei height ) +{ + GET_CURRENT_CONTEXT(ctx); + copytexsubimage(ctx, 3, target, level, xoffset, yoffset, zoffset, + x, y, width, height); +} + + + + +/**********************************************************************/ +/****** Compressed Textures ******/ +/**********************************************************************/ + + +/** + * Return expected size of a compressed texture. + */ +static GLuint +compressed_tex_size(GLsizei width, GLsizei height, GLsizei depth, + GLenum glformat) +{ + gl_format mesaFormat = _mesa_glenum_to_compressed_format(glformat); + return _mesa_format_image_size(mesaFormat, width, height, depth); +} + + +/* + * Return compressed texture block size, in pixels. + */ +static void +get_compressed_block_size(GLenum glformat, GLuint *bw, GLuint *bh) +{ + gl_format mesaFormat = _mesa_glenum_to_compressed_format(glformat); + _mesa_get_format_block_size(mesaFormat, bw, bh); +} + + +/** + * Error checking for glCompressedTexImage[123]D(). + * \param reason returns reason for error, if any + * \return error code or GL_NO_ERROR. + */ +static GLenum +compressed_texture_error_check(struct gl_context *ctx, GLint dimensions, + GLenum target, GLint level, + GLenum internalFormat, GLsizei width, + GLsizei height, GLsizei depth, GLint border, + GLsizei imageSize, char **reason) +{ + const GLenum proxyTarget = get_proxy_target(target); + const GLint maxLevels = _mesa_max_texture_levels(ctx, target); + GLint expectedSize; + + *reason = ""; /* no error */ + + /* check level */ + if (level < 0 || level >= maxLevels) { + *reason = "level"; + return GL_INVALID_VALUE; + } + + if (!target_can_be_compressed(ctx, target, internalFormat)) { + *reason = "target"; + return GL_INVALID_ENUM; + } + + /* This will detect any invalid internalFormat value */ + if (!_mesa_is_compressed_format(ctx, internalFormat)) { + *reason = "internalFormat"; + return GL_INVALID_ENUM; + } + + /* This should really never fail */ + if (_mesa_base_tex_format(ctx, internalFormat) < 0) { + *reason = "internalFormat"; + return GL_INVALID_ENUM; + } + + /* No compressed formats support borders at this time */ + if (border != 0) { + *reason = "border != 0"; + return GL_INVALID_VALUE; + } + + /* For cube map, width must equal height */ + if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB && + target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB && width != height) { + *reason = "width != height"; + return GL_INVALID_VALUE; + } + + /* check image size against compression block size */ + { + gl_format texFormat = + ctx->Driver.ChooseTextureFormat(ctx, internalFormat, + GL_NONE, GL_NONE); + GLuint bw, bh; + + _mesa_get_format_block_size(texFormat, &bw, &bh); + if ((width > bw && width % bw > 0) || + (height > bh && height % bh > 0)) { + /* + * Per GL_ARB_texture_compression: GL_INVALID_OPERATION is + * generated [...] if any parameter combinations are not + * supported by the specific compressed internal format. + */ + *reason = "invalid width or height for compression format"; + return GL_INVALID_OPERATION; + } + } + + /* check image sizes */ + if (!ctx->Driver.TestProxyTexImage(ctx, proxyTarget, level, + internalFormat, GL_NONE, GL_NONE, + width, height, depth, border)) { + /* See error comment above */ + *reason = "invalid width, height or format"; + return GL_INVALID_OPERATION; + } + + /* check image size in bytes */ + expectedSize = compressed_tex_size(width, height, depth, internalFormat); + if (expectedSize != imageSize) { + /* Per GL_ARB_texture_compression: GL_INVALID_VALUE is generated [...] + * if <imageSize> is not consistent with the format, dimensions, and + * contents of the specified image. + */ + *reason = "imageSize inconsistant with width/height/format"; + return GL_INVALID_VALUE; + } + + return GL_NO_ERROR; +} + + +/** + * Error checking for glCompressedTexSubImage[123]D(). + * \warning There are some bad assumptions here about the size of compressed + * texture tiles (multiple of 4) used to test the validity of the + * offset and size parameters. + * \return error code or GL_NO_ERROR. + */ +static GLenum +compressed_subtexture_error_check(struct gl_context *ctx, GLint dimensions, + GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLsizei imageSize) +{ + GLint expectedSize, maxLevels = 0, maxTextureSize; + GLuint bw, bh; + (void) zoffset; + + if (dimensions == 1) { + /* 1D compressed textures not allowed */ + return GL_INVALID_ENUM; + } + else if (dimensions == 2) { + if (target == GL_PROXY_TEXTURE_2D) { + maxLevels = ctx->Const.MaxTextureLevels; + } + else if (target == GL_TEXTURE_2D) { + maxLevels = ctx->Const.MaxTextureLevels; + } + else if (target == GL_PROXY_TEXTURE_CUBE_MAP_ARB) { + if (!ctx->Extensions.ARB_texture_cube_map) + return GL_INVALID_ENUM; /*target*/ + maxLevels = ctx->Const.MaxCubeTextureLevels; + } + else if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB && + target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB) { + if (!ctx->Extensions.ARB_texture_cube_map) + return GL_INVALID_ENUM; /*target*/ + maxLevels = ctx->Const.MaxCubeTextureLevels; + } + else { + return GL_INVALID_ENUM; /*target*/ + } + } + else if (dimensions == 3) { + /* 3D compressed textures not allowed */ + return GL_INVALID_ENUM; + } + + maxTextureSize = 1 << (maxLevels - 1); + + /* this will catch any invalid compressed format token */ + if (!_mesa_is_compressed_format(ctx, format)) + return GL_INVALID_ENUM; + + if (width < 1 || width > maxTextureSize) + return GL_INVALID_VALUE; + + if ((height < 1 || height > maxTextureSize) + && dimensions > 1) + return GL_INVALID_VALUE; + + if (level < 0 || level >= maxLevels) + return GL_INVALID_VALUE; + + /* + * do checks which depend on compression block size + */ + get_compressed_block_size(format, &bw, &bh); + + if ((xoffset % bw != 0) || (yoffset % bh != 0)) + return GL_INVALID_VALUE; + + if ((width % bw != 0) && width != 2 && width != 1) + return GL_INVALID_VALUE; + + if ((height % bh != 0) && height != 2 && height != 1) + return GL_INVALID_VALUE; + + expectedSize = compressed_tex_size(width, height, depth, format); + if (expectedSize != imageSize) + return GL_INVALID_VALUE; + + return GL_NO_ERROR; +} + + +/** + * Do second part of glCompressedTexSubImage error checking. + * \return GL_TRUE if error found, GL_FALSE otherwise. + */ +static GLboolean +compressed_subtexture_error_check2(struct gl_context *ctx, GLuint dims, + GLsizei width, GLsizei height, + GLsizei depth, GLenum format, + struct gl_texture_image *texImage) +{ + + if ((GLint) format != texImage->InternalFormat) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glCompressedTexSubImage%uD(format=0x%x)", dims, format); + return GL_TRUE; + } + + if (((width == 1 || width == 2) && + width != (GLsizei) texImage->Width) || + (width > (GLsizei) texImage->Width)) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCompressedTexSubImage%uD(width=%d)", dims, width); + return GL_TRUE; + } + + if (dims >= 2) { + if (((height == 1 || height == 2) && + height != (GLsizei) texImage->Height) || + (height > (GLsizei) texImage->Height)) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCompressedTexSubImage%uD(height=%d)", dims, height); + return GL_TRUE; + } + } + + if (dims >= 3) { + if (((depth == 1 || depth == 2) && + depth != (GLsizei) texImage->Depth) || + (depth > (GLsizei) texImage->Depth)) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glCompressedTexSubImage%uD(depth=%d)", dims, depth); + return GL_TRUE; + } + } + + return GL_FALSE; +} + + +/** + * Implementation of the glCompressedTexImage1/2/3D() functions. + */ +static void +compressedteximage(struct gl_context *ctx, GLuint dims, + GLenum target, GLint level, + GLenum internalFormat, GLsizei width, + GLsizei height, GLsizei depth, GLint border, + GLsizei imageSize, const GLvoid *data) +{ + GLenum error; + char *reason = ""; + + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE)) + _mesa_debug(ctx, + "glCompressedTexImage%uDARB %s %d %s %d %d %d %d %d %p\n", + dims, + _mesa_lookup_enum_by_nr(target), level, + _mesa_lookup_enum_by_nr(internalFormat), + width, height, depth, border, imageSize, data); + + /* check target */ + if (!legal_teximage_target(ctx, dims, target)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glCompressedTexImage%uD(target=%s)", + dims, _mesa_lookup_enum_by_nr(target)); + return; + } + + error = compressed_texture_error_check(ctx, dims, target, level, + internalFormat, width, height, depth, + border, imageSize, &reason); + + if (error) { + _mesa_error(ctx, error, "glTexImage2D(%s)", reason); + return; + } + +#if FEATURE_ES + /* XXX this is kind of a hack */ + if (dims == 2) { + switch (internalFormat) { + case GL_PALETTE4_RGB8_OES: + case GL_PALETTE4_RGBA8_OES: + case GL_PALETTE4_R5_G6_B5_OES: + case GL_PALETTE4_RGBA4_OES: + case GL_PALETTE4_RGB5_A1_OES: + case GL_PALETTE8_RGB8_OES: + case GL_PALETTE8_RGBA8_OES: + case GL_PALETTE8_R5_G6_B5_OES: + case GL_PALETTE8_RGBA4_OES: + case GL_PALETTE8_RGB5_A1_OES: + _mesa_cpal_compressed_teximage2d(target, level, internalFormat, + width, height, imageSize, data); + return; + } + } +#endif + + if (_mesa_is_proxy_texture(target)) { + /* Proxy texture: just check for errors and update proxy state */ + struct gl_texture_image *texImage; + + if (!error) { + struct gl_texture_object *texObj = + _mesa_get_current_tex_object(ctx, target); + gl_format texFormat = + _mesa_choose_texture_format(ctx, texObj, target, level, + internalFormat, GL_NONE, GL_NONE); + if (!legal_texture_size(ctx, texFormat, width, height, depth)) { + error = GL_OUT_OF_MEMORY; + } + } + + texImage = _mesa_get_proxy_tex_image(ctx, target, level); + if (texImage) { + if (error) { + /* if error, clear all proxy texture image parameters */ + clear_teximage_fields(texImage); + } + else { + /* no error: store the teximage parameters */ + _mesa_init_teximage_fields(ctx, target, texImage, width, height, + depth, border, internalFormat, + MESA_FORMAT_NONE); + } + } + } + else { + /* non-proxy target */ + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; + + if (error) { + _mesa_error(ctx, error, "glCompressedTexImage%uD", dims); + return; + } + + texObj = _mesa_get_current_tex_object(ctx, target); + + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_get_tex_image(ctx, texObj, target, level); + if (!texImage) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, + "glCompressedTexImage%uD", dims); + } + else { + gl_format texFormat; + + if (texImage->Data) { + ctx->Driver.FreeTexImageData( ctx, texImage ); + } + ASSERT(texImage->Data == NULL); + + texFormat = _mesa_choose_texture_format(ctx, texObj, target, level, + internalFormat, GL_NONE, + GL_NONE); + + if (legal_texture_size(ctx, texFormat, width, height, depth)) { + _mesa_init_teximage_fields(ctx, target, texImage, + width, height, depth, + border, internalFormat, texFormat); + + switch (dims) { + case 1: + ASSERT(ctx->Driver.CompressedTexImage1D); + ctx->Driver.CompressedTexImage1D(ctx, target, level, + internalFormat, + width, + border, imageSize, data, + texObj, texImage); + break; + case 2: + ASSERT(ctx->Driver.CompressedTexImage2D); + ctx->Driver.CompressedTexImage2D(ctx, target, level, + internalFormat, + width, height, + border, imageSize, data, + texObj, texImage); + break; + case 3: + ASSERT(ctx->Driver.CompressedTexImage3D); + ctx->Driver.CompressedTexImage3D(ctx, target, level, + internalFormat, + width, height, depth, + border, imageSize, data, + texObj, texImage); + break; + default: + _mesa_problem(ctx, "bad dims in compressedteximage"); + } + + check_gen_mipmap(ctx, target, texObj, level); + + /* state update */ + texObj->_Complete = GL_FALSE; + ctx->NewState |= _NEW_TEXTURE; + } + else { + _mesa_error(ctx, GL_OUT_OF_MEMORY, + "glCompressedTexImage%uD", dims); + } + } + } + _mesa_unlock_texture(ctx, texObj); + } +} + + +void GLAPIENTRY +_mesa_CompressedTexImage1DARB(GLenum target, GLint level, + GLenum internalFormat, GLsizei width, + GLint border, GLsizei imageSize, + const GLvoid *data) +{ + GET_CURRENT_CONTEXT(ctx); + compressedteximage(ctx, 1, target, level, internalFormat, + width, 1, 1, border, imageSize, data); +} + + +void GLAPIENTRY +_mesa_CompressedTexImage2DARB(GLenum target, GLint level, + GLenum internalFormat, GLsizei width, + GLsizei height, GLint border, GLsizei imageSize, + const GLvoid *data) +{ + GET_CURRENT_CONTEXT(ctx); + compressedteximage(ctx, 2, target, level, internalFormat, + width, height, 1, border, imageSize, data); +} + + +void GLAPIENTRY +_mesa_CompressedTexImage3DARB(GLenum target, GLint level, + GLenum internalFormat, GLsizei width, + GLsizei height, GLsizei depth, GLint border, + GLsizei imageSize, const GLvoid *data) +{ + GET_CURRENT_CONTEXT(ctx); + compressedteximage(ctx, 3, target, level, internalFormat, + width, height, depth, border, imageSize, data); +} + + +/** + * Common helper for glCompressedTexSubImage1/2/3D(). + */ +static void +compressed_tex_sub_image(GLuint dims, GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLsizei imageSize, const GLvoid *data) +{ + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; + GLenum error; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + error = compressed_subtexture_error_check(ctx, dims, target, level, + xoffset, 0, 0, /* pos */ + width, height, depth, /* size */ + format, imageSize); + if (error) { + _mesa_error(ctx, error, "glCompressedTexSubImage%uD", dims); + return; + } + + texObj = _mesa_get_current_tex_object(ctx, target); + + _mesa_lock_texture(ctx, texObj); + { + texImage = _mesa_select_tex_image(ctx, texObj, target, level); + assert(texImage); + + if (compressed_subtexture_error_check2(ctx, dims, width, height, depth, + format, texImage)) { + /* error was recorded */ + } + else if (width > 0 && height > 0 && depth > 0) { + switch (dims) { + case 1: + if (ctx->Driver.CompressedTexSubImage1D) { + ctx->Driver.CompressedTexSubImage1D(ctx, target, level, + xoffset, width, + format, imageSize, data, + texObj, texImage); + } + break; + case 2: + if (ctx->Driver.CompressedTexSubImage2D) { + ctx->Driver.CompressedTexSubImage2D(ctx, target, level, + xoffset, yoffset, + width, height, + format, imageSize, data, + texObj, texImage); + } + break; + case 3: + if (ctx->Driver.CompressedTexSubImage3D) { + ctx->Driver.CompressedTexSubImage3D(ctx, target, level, + xoffset, yoffset, zoffset, + width, height, depth, + format, imageSize, data, + texObj, texImage); + } + break; + default: + ; + } + + check_gen_mipmap(ctx, target, texObj, level); + + ctx->NewState |= _NEW_TEXTURE; + } + } + _mesa_unlock_texture(ctx, texObj); +} + + +void GLAPIENTRY +_mesa_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset, + GLsizei width, GLenum format, + GLsizei imageSize, const GLvoid *data) +{ + compressed_tex_sub_image(1, target, level, xoffset, 0, 0, width, 1, 1, + format, imageSize, data); +} + + +void GLAPIENTRY +_mesa_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLsizei width, GLsizei height, + GLenum format, GLsizei imageSize, + const GLvoid *data) +{ + compressed_tex_sub_image(2, target, level, xoffset, yoffset, 0, + width, height, 1, format, imageSize, data); +} + + +void GLAPIENTRY +_mesa_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, GLenum format, + GLsizei imageSize, const GLvoid *data) +{ + compressed_tex_sub_image(3, target, level, xoffset, yoffset, zoffset, + width, height, depth, format, imageSize, data); +} + + +/** + * Helper for glTexBuffer(). Check if internalFormat is legal. If so, + * return the basic data type and number of components for the format. + * \param return GL_TRUE if internalFormat is legal, GL_FALSE otherwise + */ +static GLboolean +get_sized_format_info(const struct gl_context *ctx, GLenum internalFormat, + GLenum *datatype, GLuint *components) +{ + switch (internalFormat) { + case GL_ALPHA8: + *datatype = GL_UNSIGNED_BYTE; + *components = 1; + break; + case GL_ALPHA16: + *datatype = GL_UNSIGNED_SHORT; + *components = 1; + break; + case GL_ALPHA16F_ARB: + *datatype = GL_HALF_FLOAT; + *components = 1; + break; + case GL_ALPHA32F_ARB: + *datatype = GL_FLOAT; + *components = 1; + break; + case GL_ALPHA8I_EXT: + *datatype = GL_BYTE; + *components = 1; + break; + case GL_ALPHA16I_EXT: + *datatype = GL_SHORT; + *components = 1; + break; + case GL_ALPHA32I_EXT: + *datatype = GL_INT; + *components = 1; + break; + case GL_ALPHA8UI_EXT: + *datatype = GL_UNSIGNED_BYTE; + *components = 1; + break; + case GL_ALPHA16UI_EXT: + *datatype = GL_UNSIGNED_SHORT; + *components = 1; + break; + case GL_ALPHA32UI_EXT: + *datatype = GL_UNSIGNED_INT; + *components = 1; + break; + case GL_LUMINANCE8: + *datatype = GL_UNSIGNED_BYTE; + *components = 1; + break; + case GL_LUMINANCE16: + *datatype = GL_UNSIGNED_SHORT; + *components = 1; + break; + case GL_LUMINANCE16F_ARB: + *datatype = GL_HALF_FLOAT; + *components = 1; + break; + case GL_LUMINANCE32F_ARB: + *datatype = GL_FLOAT; + *components = 1; + break; + case GL_LUMINANCE8I_EXT: + *datatype = GL_BYTE; + *components = 1; + break; + case GL_LUMINANCE16I_EXT: + *datatype = GL_SHORT; + *components = 1; + break; + case GL_LUMINANCE32I_EXT: + *datatype = GL_INT; + *components = 1; + break; + case GL_LUMINANCE8UI_EXT: + *datatype = GL_UNSIGNED_BYTE; + *components = 1; + break; + case GL_LUMINANCE16UI_EXT: + *datatype = GL_UNSIGNED_SHORT; + *components = 1; + break; + case GL_LUMINANCE32UI_EXT: + *datatype = GL_UNSIGNED_INT; + *components = 1; + break; + case GL_LUMINANCE8_ALPHA8: + *datatype = GL_UNSIGNED_BYTE; + *components = 2; + break; + case GL_LUMINANCE16_ALPHA16: + *datatype = GL_UNSIGNED_SHORT; + *components = 2; + break; + case GL_LUMINANCE_ALPHA16F_ARB: + *datatype = GL_HALF_FLOAT; + *components = 2; + break; + case GL_LUMINANCE_ALPHA32F_ARB: + *datatype = GL_FLOAT; + *components = 2; + break; + case GL_LUMINANCE_ALPHA8I_EXT: + *datatype = GL_BYTE; + *components = 2; + break; + case GL_LUMINANCE_ALPHA16I_EXT: + *datatype = GL_SHORT; + *components = 2; + break; + case GL_LUMINANCE_ALPHA32I_EXT: + *datatype = GL_INT; + *components = 2; + break; + case GL_LUMINANCE_ALPHA8UI_EXT: + *datatype = GL_UNSIGNED_BYTE; + *components = 2; + break; + case GL_LUMINANCE_ALPHA16UI_EXT: + *datatype = GL_UNSIGNED_SHORT; + *components = 2; + break; + case GL_LUMINANCE_ALPHA32UI_EXT: + *datatype = GL_UNSIGNED_INT; + *components = 2; + break; + case GL_INTENSITY8: + *datatype = GL_UNSIGNED_BYTE; + *components = 1; + break; + case GL_INTENSITY16: + *datatype = GL_UNSIGNED_SHORT; + *components = 1; + break; + case GL_INTENSITY16F_ARB: + *datatype = GL_HALF_FLOAT; + *components = 1; + break; + case GL_INTENSITY32F_ARB: + *datatype = GL_FLOAT; + *components = 1; + break; + case GL_INTENSITY8I_EXT: + *datatype = GL_BYTE; + *components = 1; + break; + case GL_INTENSITY16I_EXT: + *datatype = GL_SHORT; + *components = 1; + break; + case GL_INTENSITY32I_EXT: + *datatype = GL_INT; + *components = 1; + break; + case GL_INTENSITY8UI_EXT: + *datatype = GL_UNSIGNED_BYTE; + *components = 1; + break; + case GL_INTENSITY16UI_EXT: + *datatype = GL_UNSIGNED_SHORT; + *components = 1; + break; + case GL_INTENSITY32UI_EXT: + *datatype = GL_UNSIGNED_INT; + *components = 1; + break; + case GL_RGBA8: + *datatype = GL_UNSIGNED_BYTE; + *components = 4; + break; + case GL_RGBA16: + *datatype = GL_UNSIGNED_SHORT; + *components = 4; + break; + case GL_RGBA16F_ARB: + *datatype = GL_HALF_FLOAT; + *components = 4; + break; + case GL_RGBA32F_ARB: + *datatype = GL_FLOAT; + *components = 4; + break; + case GL_RGBA8I_EXT: + *datatype = GL_BYTE; + *components = 4; + break; + case GL_RGBA16I_EXT: + *datatype = GL_SHORT; + *components = 4; + break; + case GL_RGBA32I_EXT: + *datatype = GL_INT; + *components = 4; + break; + case GL_RGBA8UI_EXT: + *datatype = GL_UNSIGNED_BYTE; + *components = 4; + break; + case GL_RGBA16UI_EXT: + *datatype = GL_UNSIGNED_SHORT; + *components = 4; + break; + case GL_RGBA32UI_EXT: + *datatype = GL_UNSIGNED_INT; + *components = 4; + break; + default: + return GL_FALSE; + } + + if (*datatype == GL_FLOAT && !ctx->Extensions.ARB_texture_float) + return GL_FALSE; + + if (*datatype == GL_HALF_FLOAT && !ctx->Extensions.ARB_half_float_pixel) + return GL_FALSE; + + return GL_TRUE; +} + + +/** GL_ARB_texture_buffer_object */ +void GLAPIENTRY +_mesa_TexBuffer(GLenum target, GLenum internalFormat, GLuint buffer) +{ + struct gl_texture_object *texObj; + struct gl_buffer_object *bufObj; + GLenum dataType; + GLuint comps; + + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + if (!ctx->Extensions.ARB_texture_buffer_object) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glTexBuffer"); + return; + } + + if (target != GL_TEXTURE_BUFFER_ARB) { + _mesa_error(ctx, GL_INVALID_ENUM, "glTexBuffer(target)"); + return; + } + + if (!get_sized_format_info(ctx, internalFormat, &dataType, &comps)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glTexBuffer(internalFormat 0x%x)", + internalFormat); + return; + } + + bufObj = _mesa_lookup_bufferobj(ctx, buffer); + if (buffer && !bufObj) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glTexBuffer(buffer %u)", buffer); + return; + } + + texObj = _mesa_get_current_tex_object(ctx, target); + + _mesa_lock_texture(ctx, texObj); + { + _mesa_reference_buffer_object(ctx, &texObj->BufferObject, bufObj); + texObj->BufferObjectFormat = internalFormat; + } + _mesa_unlock_texture(ctx, texObj); +} diff --git a/mesalib/src/mesa/main/texstore.c b/mesalib/src/mesa/main/texstore.c index 9a690529a..c4fe82a0b 100644 --- a/mesalib/src/mesa/main/texstore.c +++ b/mesalib/src/mesa/main/texstore.c @@ -63,7 +63,6 @@ #include "pack.h" #include "pbo.h" #include "imports.h" -#include "pack.h" #include "texcompress.h" #include "texcompress_fxt1.h" #include "texcompress_rgtc.h" @@ -3551,6 +3550,7 @@ _mesa_texstore_rgba_float32(TEXSTORE_PARAMS) if (!ctx->_ImageTransferState && !srcPacking->SwapBytes && baseInternalFormat == srcFormat && + baseInternalFormat == baseFormat && srcType == GL_FLOAT) { /* simple memcpy path */ memcpy_texture(ctx, dims, @@ -3625,6 +3625,7 @@ _mesa_texstore_rgba_float16(TEXSTORE_PARAMS) if (!ctx->_ImageTransferState && !srcPacking->SwapBytes && baseInternalFormat == srcFormat && + baseInternalFormat == baseFormat && srcType == GL_HALF_FLOAT_ARB) { /* simple memcpy path */ memcpy_texture(ctx, dims, diff --git a/mesalib/src/mesa/main/uniforms.c b/mesalib/src/mesa/main/uniforms.c index f984ce3bc..12fe7b5e2 100644 --- a/mesalib/src/mesa/main/uniforms.c +++ b/mesalib/src/mesa/main/uniforms.c @@ -412,11 +412,10 @@ split_location_offset(GLint *location, GLint *offset) */ static void _mesa_get_uniformfv(struct gl_context *ctx, GLuint program, GLint location, - GLfloat *params) + GLsizei bufSize, GLfloat *params) { struct gl_program *prog; - GLint paramPos; - GLint offset; + GLint paramPos, offset; split_location_offset(&location, &offset); @@ -426,9 +425,18 @@ _mesa_get_uniformfv(struct gl_context *ctx, GLuint program, GLint location, const struct gl_program_parameter *p = &prog->Parameters->Parameters[paramPos]; GLint rows, cols, i, j, k; + GLsizei numBytes; get_uniform_rows_cols(p, &rows, &cols); + numBytes = rows * cols * sizeof *params; + if (bufSize < numBytes) { + _mesa_error( ctx, GL_INVALID_OPERATION, + "glGetnUniformfvARB(out of bounds: bufSize is %d," + " but %d bytes are required)", bufSize, numBytes ); + return; + } + k = 0; for (i = 0; i < rows; i++) { const int base = paramPos + offset + i; @@ -447,11 +455,10 @@ _mesa_get_uniformfv(struct gl_context *ctx, GLuint program, GLint location, */ static void _mesa_get_uniformiv(struct gl_context *ctx, GLuint program, GLint location, - GLint *params) + GLsizei bufSize, GLint *params) { struct gl_program *prog; - GLint paramPos; - GLint offset; + GLint paramPos, offset; split_location_offset(&location, &offset); @@ -461,9 +468,18 @@ _mesa_get_uniformiv(struct gl_context *ctx, GLuint program, GLint location, const struct gl_program_parameter *p = &prog->Parameters->Parameters[paramPos]; GLint rows, cols, i, j, k; + GLsizei numBytes; get_uniform_rows_cols(p, &rows, &cols); + numBytes = rows * cols * sizeof *params; + if (bufSize < numBytes) { + _mesa_error( ctx, GL_INVALID_OPERATION, + "glGetnUniformivARB(out of bounds: bufSize is %d," + " but %d bytes are required)", bufSize, numBytes ); + return; + } + k = 0; for (i = 0; i < rows; i++) { const int base = paramPos + offset + i; @@ -483,11 +499,10 @@ _mesa_get_uniformiv(struct gl_context *ctx, GLuint program, GLint location, */ static void _mesa_get_uniformuiv(struct gl_context *ctx, GLuint program, GLint location, - GLuint *params) + GLsizei bufSize, GLuint *params) { struct gl_program *prog; - GLint paramPos; - GLint offset; + GLint paramPos, offset; split_location_offset(&location, &offset); @@ -497,9 +512,18 @@ _mesa_get_uniformuiv(struct gl_context *ctx, GLuint program, GLint location, const struct gl_program_parameter *p = &prog->Parameters->Parameters[paramPos]; GLint rows, cols, i, j, k; + GLsizei numBytes; get_uniform_rows_cols(p, &rows, &cols); + numBytes = rows * cols * sizeof *params; + if (bufSize < numBytes) { + _mesa_error( ctx, GL_INVALID_OPERATION, + "glGetnUniformuivARB(out of bounds: bufSize is %d," + " but %d bytes are required)", bufSize, numBytes ); + return; + } + k = 0; for (i = 0; i < rows; i++) { const int base = paramPos + offset + i; @@ -513,6 +537,19 @@ _mesa_get_uniformuiv(struct gl_context *ctx, GLuint program, GLint location, /** + * Called via glGetUniformdv(). + * New in GL_ARB_gpu_shader_fp64, OpenGL 4.0 + */ +static void +_mesa_get_uniformdv(struct gl_context *ctx, GLuint program, GLint location, + GLsizei bufSize, GLdouble *params) +{ + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformdvARB" + "(GL_ARB_gpu_shader_fp64 not implemented)"); +} + + +/** * Called via glGetUniformLocation(). * * The return value will encode two values, the uniform location and an @@ -1350,29 +1387,65 @@ _mesa_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, void GLAPIENTRY -_mesa_GetUniformfvARB(GLhandleARB program, GLint location, GLfloat *params) +_mesa_GetnUniformfvARB(GLhandleARB program, GLint location, + GLsizei bufSize, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); - _mesa_get_uniformfv(ctx, program, location, params); + _mesa_get_uniformfv(ctx, program, location, bufSize, params); +} + +void GLAPIENTRY +_mesa_GetUniformfvARB(GLhandleARB program, GLint location, GLfloat *params) +{ + _mesa_GetnUniformfvARB(program, location, INT_MAX, params); } void GLAPIENTRY -_mesa_GetUniformivARB(GLhandleARB program, GLint location, GLint *params) +_mesa_GetnUniformivARB(GLhandleARB program, GLint location, + GLsizei bufSize, GLint *params) { GET_CURRENT_CONTEXT(ctx); - _mesa_get_uniformiv(ctx, program, location, params); + _mesa_get_uniformiv(ctx, program, location, bufSize, params); +} + +void GLAPIENTRY +_mesa_GetUniformivARB(GLhandleARB program, GLint location, GLint *params) +{ + _mesa_GetnUniformivARB(program, location, INT_MAX, params); } /* GL3 */ void GLAPIENTRY +_mesa_GetnUniformuivARB(GLhandleARB program, GLint location, + GLsizei bufSize, GLuint *params) +{ + GET_CURRENT_CONTEXT(ctx); + _mesa_get_uniformuiv(ctx, program, location, bufSize, params); +} + +void GLAPIENTRY _mesa_GetUniformuiv(GLhandleARB program, GLint location, GLuint *params) { + _mesa_GetnUniformuivARB(program, location, INT_MAX, params); +} + + +/* GL4 */ +void GLAPIENTRY +_mesa_GetnUniformdvARB(GLhandleARB program, GLint location, + GLsizei bufSize, GLdouble *params) +{ GET_CURRENT_CONTEXT(ctx); - _mesa_get_uniformuiv(ctx, program, location, params); + _mesa_get_uniformdv(ctx, program, location, bufSize, params); } +void GLAPIENTRY +_mesa_GetUniformdv(GLhandleARB program, GLint location, GLdouble *params) +{ + _mesa_GetnUniformdvARB(program, location, INT_MAX, params); +} GLint GLAPIENTRY @@ -1454,6 +1527,11 @@ _mesa_init_shader_uniform_dispatch(struct _glapi_table *exec) SET_Uniform4uivEXT(exec, _mesa_Uniform4uiv); SET_GetUniformuivEXT(exec, _mesa_GetUniformuiv); + /* GL_ARB_robustness */ + SET_GetnUniformfvARB(exec, _mesa_GetnUniformfvARB); + SET_GetnUniformivARB(exec, _mesa_GetnUniformivARB); + SET_GetnUniformuivARB(exec, _mesa_GetnUniformuivARB); + SET_GetnUniformdvARB(exec, _mesa_GetnUniformdvARB); /* GL 4.0 */ #endif /* FEATURE_GL */ } diff --git a/mesalib/src/mesa/main/uniforms.h b/mesalib/src/mesa/main/uniforms.h index 3a85144fa..b024cb30b 100644 --- a/mesalib/src/mesa/main/uniforms.h +++ b/mesalib/src/mesa/main/uniforms.h @@ -1,193 +1,208 @@ -/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 2010 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#ifndef UNIFORMS_H
-#define UNIFORMS_H
-
-#include "glheader.h"
-#include "program/prog_parameter.h"
-
-struct gl_program;
-struct _glapi_table;
-
-extern void GLAPIENTRY
-_mesa_Uniform1fARB(GLint, GLfloat);
-
-extern void GLAPIENTRY
-_mesa_Uniform2fARB(GLint, GLfloat, GLfloat);
-
-extern void GLAPIENTRY
-_mesa_Uniform3fARB(GLint, GLfloat, GLfloat, GLfloat);
-
-extern void GLAPIENTRY
-_mesa_Uniform4fARB(GLint, GLfloat, GLfloat, GLfloat, GLfloat);
-
-extern void GLAPIENTRY
-_mesa_Uniform1iARB(GLint, GLint);
-
-extern void GLAPIENTRY
-_mesa_Uniform2iARB(GLint, GLint, GLint);
-
-extern void GLAPIENTRY
-_mesa_Uniform3iARB(GLint, GLint, GLint, GLint);
-
-extern void GLAPIENTRY
-_mesa_Uniform4iARB(GLint, GLint, GLint, GLint, GLint);
-
-extern void GLAPIENTRY
-_mesa_Uniform1fvARB(GLint, GLsizei, const GLfloat *);
-
-extern void GLAPIENTRY
-_mesa_Uniform2fvARB(GLint, GLsizei, const GLfloat *);
-
-extern void GLAPIENTRY
-_mesa_Uniform3fvARB(GLint, GLsizei, const GLfloat *);
-
-extern void GLAPIENTRY
-_mesa_Uniform4fvARB(GLint, GLsizei, const GLfloat *);
-
-extern void GLAPIENTRY
-_mesa_Uniform1ivARB(GLint, GLsizei, const GLint *);
-
-extern void GLAPIENTRY
-_mesa_Uniform2ivARB(GLint, GLsizei, const GLint *);
-
-extern void GLAPIENTRY
-_mesa_Uniform3ivARB(GLint, GLsizei, const GLint *);
-
-extern void GLAPIENTRY
-_mesa_Uniform4ivARB(GLint, GLsizei, const GLint *);
-
-extern void GLAPIENTRY
-_mesa_Uniform1ui(GLint location, GLuint v0);
-
-extern void GLAPIENTRY
-_mesa_Uniform2ui(GLint location, GLuint v0, GLuint v1);
-
-extern void GLAPIENTRY
-_mesa_Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2);
-
-extern void GLAPIENTRY
-_mesa_Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
-
-extern void GLAPIENTRY
-_mesa_Uniform1uiv(GLint location, GLsizei count, const GLuint *value);
-
-extern void GLAPIENTRY
-_mesa_Uniform2uiv(GLint location, GLsizei count, const GLuint *value);
-
-extern void GLAPIENTRY
-_mesa_Uniform3uiv(GLint location, GLsizei count, const GLuint *value);
-
-extern void GLAPIENTRY
-_mesa_Uniform4uiv(GLint location, GLsizei count, const GLuint *value);
-
-
-extern void GLAPIENTRY
-_mesa_UniformMatrix2fvARB(GLint, GLsizei, GLboolean, const GLfloat *);
-
-extern void GLAPIENTRY
-_mesa_UniformMatrix3fvARB(GLint, GLsizei, GLboolean, const GLfloat *);
-
-extern void GLAPIENTRY
-_mesa_UniformMatrix4fvARB(GLint, GLsizei, GLboolean, const GLfloat *);
-
-extern void GLAPIENTRY
-_mesa_UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose,
- const GLfloat *value);
-
-extern void GLAPIENTRY
-_mesa_UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose,
- const GLfloat *value);
-
-extern void GLAPIENTRY
-_mesa_UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose,
- const GLfloat *value);
-
-extern void GLAPIENTRY
-_mesa_UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose,
- const GLfloat *value);
-
-extern void GLAPIENTRY
-_mesa_UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose,
- const GLfloat *value);
-
-extern void GLAPIENTRY
-_mesa_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose,
- const GLfloat *value);
-
-
-extern void GLAPIENTRY
-_mesa_GetActiveUniformARB(GLhandleARB, GLuint, GLsizei, GLsizei *,
- GLint *, GLenum *, GLcharARB *);
-
-extern void GLAPIENTRY
-_mesa_GetUniformfvARB(GLhandleARB, GLint, GLfloat *);
-
-extern void GLAPIENTRY
-_mesa_GetUniformivARB(GLhandleARB, GLint, GLint *);
-
-extern void GLAPIENTRY
-_mesa_GetUniformuiv(GLhandleARB program, GLint location, GLuint *params);
-
-extern GLint GLAPIENTRY
-_mesa_GetUniformLocationARB(GLhandleARB, const GLcharARB *);
-
-GLint
-_mesa_get_uniform_location(struct gl_context *ctx, struct gl_shader_program *shProg,
- const GLchar *name);
-
-void
-_mesa_uniform(struct gl_context *ctx, struct gl_shader_program *shader_program,
- GLint location, GLsizei count,
- const GLvoid *values, GLenum type);
-
-void
-_mesa_uniform_matrix(struct gl_context *ctx, struct gl_shader_program *shProg,
- GLint cols, GLint rows,
- GLint location, GLsizei count,
- GLboolean transpose, const GLfloat *values);
-
-extern void
-_mesa_update_shader_textures_used(struct gl_program *prog);
-
-
-extern void
-_mesa_init_shader_uniform_dispatch(struct _glapi_table *exec);
-
-struct gl_builtin_uniform_element {
- const char *field;
- int tokens[STATE_LENGTH];
- int swizzle;
-};
-
-struct gl_builtin_uniform_desc {
- const char *name;
- struct gl_builtin_uniform_element *elements;
- unsigned int num_elements;
-};
-
-extern const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[];
-
-#endif /* UNIFORMS_H */
+/* + * Mesa 3-D graphics library + * + * Copyright (C) 2010 VMware, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef UNIFORMS_H +#define UNIFORMS_H + +#include "glheader.h" +#include "program/prog_parameter.h" + +struct gl_program; +struct _glapi_table; + +extern void GLAPIENTRY +_mesa_Uniform1fARB(GLint, GLfloat); + +extern void GLAPIENTRY +_mesa_Uniform2fARB(GLint, GLfloat, GLfloat); + +extern void GLAPIENTRY +_mesa_Uniform3fARB(GLint, GLfloat, GLfloat, GLfloat); + +extern void GLAPIENTRY +_mesa_Uniform4fARB(GLint, GLfloat, GLfloat, GLfloat, GLfloat); + +extern void GLAPIENTRY +_mesa_Uniform1iARB(GLint, GLint); + +extern void GLAPIENTRY +_mesa_Uniform2iARB(GLint, GLint, GLint); + +extern void GLAPIENTRY +_mesa_Uniform3iARB(GLint, GLint, GLint, GLint); + +extern void GLAPIENTRY +_mesa_Uniform4iARB(GLint, GLint, GLint, GLint, GLint); + +extern void GLAPIENTRY +_mesa_Uniform1fvARB(GLint, GLsizei, const GLfloat *); + +extern void GLAPIENTRY +_mesa_Uniform2fvARB(GLint, GLsizei, const GLfloat *); + +extern void GLAPIENTRY +_mesa_Uniform3fvARB(GLint, GLsizei, const GLfloat *); + +extern void GLAPIENTRY +_mesa_Uniform4fvARB(GLint, GLsizei, const GLfloat *); + +extern void GLAPIENTRY +_mesa_Uniform1ivARB(GLint, GLsizei, const GLint *); + +extern void GLAPIENTRY +_mesa_Uniform2ivARB(GLint, GLsizei, const GLint *); + +extern void GLAPIENTRY +_mesa_Uniform3ivARB(GLint, GLsizei, const GLint *); + +extern void GLAPIENTRY +_mesa_Uniform4ivARB(GLint, GLsizei, const GLint *); + +extern void GLAPIENTRY +_mesa_Uniform1ui(GLint location, GLuint v0); + +extern void GLAPIENTRY +_mesa_Uniform2ui(GLint location, GLuint v0, GLuint v1); + +extern void GLAPIENTRY +_mesa_Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2); + +extern void GLAPIENTRY +_mesa_Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); + +extern void GLAPIENTRY +_mesa_Uniform1uiv(GLint location, GLsizei count, const GLuint *value); + +extern void GLAPIENTRY +_mesa_Uniform2uiv(GLint location, GLsizei count, const GLuint *value); + +extern void GLAPIENTRY +_mesa_Uniform3uiv(GLint location, GLsizei count, const GLuint *value); + +extern void GLAPIENTRY +_mesa_Uniform4uiv(GLint location, GLsizei count, const GLuint *value); + + +extern void GLAPIENTRY +_mesa_UniformMatrix2fvARB(GLint, GLsizei, GLboolean, const GLfloat *); + +extern void GLAPIENTRY +_mesa_UniformMatrix3fvARB(GLint, GLsizei, GLboolean, const GLfloat *); + +extern void GLAPIENTRY +_mesa_UniformMatrix4fvARB(GLint, GLsizei, GLboolean, const GLfloat *); + +extern void GLAPIENTRY +_mesa_UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, + const GLfloat *value); + +extern void GLAPIENTRY +_mesa_UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, + const GLfloat *value); + +extern void GLAPIENTRY +_mesa_UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, + const GLfloat *value); + +extern void GLAPIENTRY +_mesa_UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, + const GLfloat *value); + +extern void GLAPIENTRY +_mesa_UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, + const GLfloat *value); + +extern void GLAPIENTRY +_mesa_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, + const GLfloat *value); + + +extern void GLAPIENTRY +_mesa_GetActiveUniformARB(GLhandleARB, GLuint, GLsizei, GLsizei *, + GLint *, GLenum *, GLcharARB *); + +extern void GLAPIENTRY +_mesa_GetUniformfvARB(GLhandleARB, GLint, GLfloat *); + +extern void GLAPIENTRY +_mesa_GetnUniformfvARB(GLhandleARB, GLint, GLsizei, GLfloat *); + +extern void GLAPIENTRY +_mesa_GetUniformivARB(GLhandleARB, GLint, GLint *); + +extern void GLAPIENTRY +_mesa_GetnUniformivARB(GLhandleARB, GLint, GLsizei, GLint *); + +extern void GLAPIENTRY +_mesa_GetUniformuiv(GLhandleARB, GLint, GLuint *); + +extern void GLAPIENTRY +_mesa_GetnUniformuivARB(GLhandleARB, GLint, GLsizei, GLuint *); + +extern void GLAPIENTRY +_mesa_GetUniformdv(GLhandleARB, GLint, GLdouble *); + +extern void GLAPIENTRY +_mesa_GetnUniformdvARB(GLhandleARB, GLint, GLsizei, GLdouble *); + +extern GLint GLAPIENTRY +_mesa_GetUniformLocationARB(GLhandleARB, const GLcharARB *); + +GLint +_mesa_get_uniform_location(struct gl_context *ctx, struct gl_shader_program *shProg, + const GLchar *name); + +void +_mesa_uniform(struct gl_context *ctx, struct gl_shader_program *shader_program, + GLint location, GLsizei count, + const GLvoid *values, GLenum type); + +void +_mesa_uniform_matrix(struct gl_context *ctx, struct gl_shader_program *shProg, + GLint cols, GLint rows, + GLint location, GLsizei count, + GLboolean transpose, const GLfloat *values); + +extern void +_mesa_update_shader_textures_used(struct gl_program *prog); + + +extern void +_mesa_init_shader_uniform_dispatch(struct _glapi_table *exec); + +struct gl_builtin_uniform_element { + const char *field; + int tokens[STATE_LENGTH]; + int swizzle; +}; + +struct gl_builtin_uniform_desc { + const char *name; + struct gl_builtin_uniform_element *elements; + unsigned int num_elements; +}; + +extern const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[]; + +#endif /* UNIFORMS_H */ diff --git a/mesalib/src/mesa/program/arbprogparse.c b/mesalib/src/mesa/program/arbprogparse.c index 7f778c3c3..dffc8abf7 100644 --- a/mesalib/src/mesa/program/arbprogparse.c +++ b/mesalib/src/mesa/program/arbprogparse.c @@ -116,20 +116,11 @@ _mesa_parse_arb_fragment_program(struct gl_context* ctx, GLenum target, program->Base.SamplersUsed |= (1 << i); } program->Base.ShadowSamplers = prog.ShadowSamplers; - switch (state.option.Fog) { - case OPTION_FOG_EXP: program->FogOption = GL_EXP; break; - case OPTION_FOG_EXP2: program->FogOption = GL_EXP2; break; - case OPTION_FOG_LINEAR: program->FogOption = GL_LINEAR; break; - default: program->FogOption = GL_NONE; break; - } program->OriginUpperLeft = state.option.OriginUpperLeft; program->PixelCenterInteger = state.option.PixelCenterInteger; program->UsesKill = state.fragment.UsesKill; - if (program->FogOption) - program->Base.InputsRead |= FRAG_BIT_FOGC; - if (program->Base.Instructions) free(program->Base.Instructions); program->Base.Instructions = prog.Instructions; @@ -143,12 +134,15 @@ _mesa_parse_arb_fragment_program(struct gl_context* ctx, GLenum target, * there's no hardware that wants to do fog in a discrete stage separate * from the fragment shader. */ - if (program->FogOption != GL_NONE) { + if (state.option.Fog != OPTION_NONE) { + static const GLenum fog_modes[4] = { + GL_NONE, GL_EXP, GL_EXP2, GL_LINEAR + }; + /* XXX: we should somehow recompile this to remove clamping if disabled * On the ATI driver, this is unclampled if fragment clamping is disabled */ - _mesa_append_fog_code(ctx, program, GL_TRUE); - program->FogOption = GL_NONE; + _mesa_append_fog_code(ctx, program, fog_modes[state.option.Fog], GL_TRUE); } #if DEBUG_FP diff --git a/mesalib/src/mesa/program/hash_table.c b/mesalib/src/mesa/program/hash_table.c index f7ef366c1..877a9e2ff 100644 --- a/mesalib/src/mesa/program/hash_table.c +++ b/mesalib/src/mesa/program/hash_table.c @@ -160,6 +160,25 @@ hash_table_remove(struct hash_table *ht, const void *key) } } +void +hash_table_call_foreach(struct hash_table *ht, + void (*callback)(const void *key, + void *data, + void *closure), + void *closure) +{ + int bucket; + + for (bucket = 0; bucket < ht->num_buckets; bucket++) { + struct node *node, *temp; + foreach_s(node, temp, &ht->buckets[bucket]) { + struct hash_node *hn = (struct hash_node *) node; + + callback(hn->key, hn->data, closure); + } + } +} + unsigned hash_table_string_hash(const void *key) { diff --git a/mesalib/src/mesa/program/hash_table.h b/mesalib/src/mesa/program/hash_table.h index f1c4fdcd1..e715bb1cc 100644 --- a/mesalib/src/mesa/program/hash_table.h +++ b/mesalib/src/mesa/program/hash_table.h @@ -144,6 +144,13 @@ hash_table_pointer_hash(const void *key); int hash_table_pointer_compare(const void *key1, const void *key2); +void +hash_table_call_foreach(struct hash_table *ht, + void (*callback)(const void *key, + void *data, + void *closure), + void *closure); + #ifdef __cplusplus } #endif diff --git a/mesalib/src/mesa/program/prog_optimize.c b/mesalib/src/mesa/program/prog_optimize.c index 164297a34..11debc485 100644 --- a/mesalib/src/mesa/program/prog_optimize.c +++ b/mesalib/src/mesa/program/prog_optimize.c @@ -74,6 +74,17 @@ get_src_arg_mask(const struct prog_instruction *inst, case OPCODE_MAD: case OPCODE_MUL: case OPCODE_SUB: + case OPCODE_CMP: + case OPCODE_FLR: + case OPCODE_FRC: + case OPCODE_LRP: + case OPCODE_SEQ: + case OPCODE_SGE: + case OPCODE_SGT: + case OPCODE_SLE: + case OPCODE_SLT: + case OPCODE_SNE: + case OPCODE_SSG: channel_mask = inst->DstReg.WriteMask & dst_mask; break; case OPCODE_RCP: @@ -1235,6 +1246,83 @@ print_it(struct gl_context *ctx, struct gl_program *program, const char *txt) { } #endif +/** + * This pass replaces CMP T0, T1 T2 T0 with MOV T0, T2 when the CMP + * instruction is the first instruction to write to register T0. The are + * several lowering passes done in GLSL IR (e.g. branches and + * relative addressing) that create a large number of conditional assignments + * that ir_to_mesa converts to CMP instructions like the one mentioned above. + * + * Here is why this conversion is safe: + * CMP T0, T1 T2 T0 can be expanded to: + * if (T1 < 0.0) + * MOV T0, T2; + * else + * MOV T0, T0; + * + * If (T1 < 0.0) evaluates to true then our replacement MOV T0, T2 is the same + * as the original program. If (T1 < 0.0) evaluates to false, executing + * MOV T0, T0 will store a garbage value in T0 since T0 is uninitialized. + * Therefore, it doesn't matter that we are replacing MOV T0, T0 with MOV T0, T2 + * because any instruction that was going to read from T0 after this was going + * to read a garbage value anyway. + */ +static void +_mesa_simplify_cmp(struct gl_program * program) +{ + GLuint tempWrites[REG_ALLOCATE_MAX_PROGRAM_TEMPS]; + GLuint outputWrites[MAX_PROGRAM_OUTPUTS]; + GLuint i; + + if (dbg) { + printf("Optimize: Begin reads without writes\n"); + _mesa_print_program(program); + } + + for (i = 0; i < REG_ALLOCATE_MAX_PROGRAM_TEMPS; i++) { + tempWrites[i] = 0; + } + + for (i = 0; i < MAX_PROGRAM_OUTPUTS; i++) { + outputWrites[i] = 0; + } + + for (i = 0; i < program->NumInstructions; i++) { + struct prog_instruction *inst = program->Instructions + i; + GLuint prevWriteMask; + + /* Give up if we encounter relative addressing or flow control. */ + if (_mesa_is_flow_control_opcode(inst->Opcode) || inst->DstReg.RelAddr) { + return; + } + + if (inst->DstReg.File == PROGRAM_OUTPUT) { + assert(inst->DstReg.Index < MAX_PROGRAM_OUTPUTS); + prevWriteMask = outputWrites[inst->DstReg.Index]; + outputWrites[inst->DstReg.Index] |= inst->DstReg.WriteMask; + } else if (inst->DstReg.File == PROGRAM_TEMPORARY) { + assert(inst->DstReg.Index < REG_ALLOCATE_MAX_PROGRAM_TEMPS); + prevWriteMask = tempWrites[inst->DstReg.Index]; + tempWrites[inst->DstReg.Index] |= inst->DstReg.WriteMask; + } + + /* For a CMP to be considered a conditional write, the destination + * register and source register two must be the same. */ + if (inst->Opcode == OPCODE_CMP + && !(inst->DstReg.WriteMask & prevWriteMask) + && inst->SrcReg[2].File == inst->DstReg.File + && inst->SrcReg[2].Index == inst->DstReg.Index + && inst->DstReg.WriteMask == get_src_arg_mask(inst, 2, NO_MASK)) { + + inst->Opcode = OPCODE_MOV; + inst->SrcReg[0] = inst->SrcReg[1]; + } + } + if (dbg) { + printf("Optimize: End reads without writes\n"); + _mesa_print_program(program); + } +} /** * Apply optimizations to the given program to eliminate unnecessary @@ -1245,6 +1333,7 @@ _mesa_optimize_program(struct gl_context *ctx, struct gl_program *program) { GLboolean any_change; + _mesa_simplify_cmp(program); /* Stop when no modifications were output */ do { any_change = GL_FALSE; diff --git a/mesalib/src/mesa/program/program.c b/mesalib/src/mesa/program/program.c index 812c0dc50..78efca9f1 100644 --- a/mesalib/src/mesa/program/program.c +++ b/mesalib/src/mesa/program/program.c @@ -1,1077 +1,1076 @@ -/*
- * Mesa 3-D graphics library
- * Version: 6.5.3
- *
- * Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file program.c
- * Vertex and fragment program support functions.
- * \author Brian Paul
- */
-
-
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/hash.h"
-#include "main/mfeatures.h"
-#include "program.h"
-#include "prog_cache.h"
-#include "prog_parameter.h"
-#include "prog_instruction.h"
-
-
-/**
- * A pointer to this dummy program is put into the hash table when
- * glGenPrograms is called.
- */
-struct gl_program _mesa_DummyProgram;
-
-
-/**
- * Init context's vertex/fragment program state
- */
-void
-_mesa_init_program(struct gl_context *ctx)
-{
- GLuint i;
-
- /*
- * If this assertion fails, we need to increase the field
- * size for register indexes (see INST_INDEX_BITS).
- */
- ASSERT(ctx->Const.VertexProgram.MaxUniformComponents / 4
- <= (1 << INST_INDEX_BITS));
- ASSERT(ctx->Const.FragmentProgram.MaxUniformComponents / 4
- <= (1 << INST_INDEX_BITS));
-
- ASSERT(ctx->Const.VertexProgram.MaxTemps <= (1 << INST_INDEX_BITS));
- ASSERT(ctx->Const.VertexProgram.MaxLocalParams <= (1 << INST_INDEX_BITS));
- ASSERT(ctx->Const.FragmentProgram.MaxTemps <= (1 << INST_INDEX_BITS));
- ASSERT(ctx->Const.FragmentProgram.MaxLocalParams <= (1 << INST_INDEX_BITS));
-
- ASSERT(ctx->Const.VertexProgram.MaxUniformComponents <= 4 * MAX_UNIFORMS);
- ASSERT(ctx->Const.FragmentProgram.MaxUniformComponents <= 4 * MAX_UNIFORMS);
-
- ASSERT(ctx->Const.VertexProgram.MaxAddressOffset <= (1 << INST_INDEX_BITS));
- ASSERT(ctx->Const.FragmentProgram.MaxAddressOffset <= (1 << INST_INDEX_BITS));
-
- /* If this fails, increase prog_instruction::TexSrcUnit size */
- ASSERT(MAX_TEXTURE_UNITS <= (1 << 5));
-
- /* If this fails, increase prog_instruction::TexSrcTarget size */
- ASSERT(NUM_TEXTURE_TARGETS <= (1 << 3));
-
- ctx->Program.ErrorPos = -1;
- ctx->Program.ErrorString = _mesa_strdup("");
-
-#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program
- ctx->VertexProgram.Enabled = GL_FALSE;
-#if FEATURE_es2_glsl
- ctx->VertexProgram.PointSizeEnabled =
- (ctx->API == API_OPENGLES2) ? GL_TRUE : GL_FALSE;
-#else
- ctx->VertexProgram.PointSizeEnabled = GL_FALSE;
-#endif
- ctx->VertexProgram.TwoSideEnabled = GL_FALSE;
- _mesa_reference_vertprog(ctx, &ctx->VertexProgram.Current,
- ctx->Shared->DefaultVertexProgram);
- assert(ctx->VertexProgram.Current);
- for (i = 0; i < MAX_NV_VERTEX_PROGRAM_PARAMS / 4; i++) {
- ctx->VertexProgram.TrackMatrix[i] = GL_NONE;
- ctx->VertexProgram.TrackMatrixTransform[i] = GL_IDENTITY_NV;
- }
- ctx->VertexProgram.Cache = _mesa_new_program_cache();
-#endif
-
-#if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program
- ctx->FragmentProgram.Enabled = GL_FALSE;
- _mesa_reference_fragprog(ctx, &ctx->FragmentProgram.Current,
- ctx->Shared->DefaultFragmentProgram);
- assert(ctx->FragmentProgram.Current);
- ctx->FragmentProgram.Cache = _mesa_new_program_cache();
-#endif
-
-#if FEATURE_ARB_geometry_shader4
- ctx->GeometryProgram.Enabled = GL_FALSE;
- /* right now by default we don't have a geometry program */
- _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current,
- NULL);
- ctx->GeometryProgram.Cache = _mesa_new_program_cache();
-#endif
-
- /* XXX probably move this stuff */
-#if FEATURE_ATI_fragment_shader
- ctx->ATIFragmentShader.Enabled = GL_FALSE;
- ctx->ATIFragmentShader.Current = ctx->Shared->DefaultFragmentShader;
- assert(ctx->ATIFragmentShader.Current);
- ctx->ATIFragmentShader.Current->RefCount++;
-#endif
-}
-
-
-/**
- * Free a context's vertex/fragment program state
- */
-void
-_mesa_free_program_data(struct gl_context *ctx)
-{
-#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program
- _mesa_reference_vertprog(ctx, &ctx->VertexProgram.Current, NULL);
- _mesa_delete_program_cache(ctx, ctx->VertexProgram.Cache);
-#endif
-#if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program
- _mesa_reference_fragprog(ctx, &ctx->FragmentProgram.Current, NULL);
- _mesa_delete_program_cache(ctx, ctx->FragmentProgram.Cache);
-#endif
-#if FEATURE_ARB_geometry_shader4
- _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current, NULL);
- _mesa_delete_program_cache(ctx, ctx->GeometryProgram.Cache);
-#endif
- /* XXX probably move this stuff */
-#if FEATURE_ATI_fragment_shader
- if (ctx->ATIFragmentShader.Current) {
- ctx->ATIFragmentShader.Current->RefCount--;
- if (ctx->ATIFragmentShader.Current->RefCount <= 0) {
- free(ctx->ATIFragmentShader.Current);
- }
- }
-#endif
- free((void *) ctx->Program.ErrorString);
-}
-
-
-/**
- * Update the default program objects in the given context to reference those
- * specified in the shared state and release those referencing the old
- * shared state.
- */
-void
-_mesa_update_default_objects_program(struct gl_context *ctx)
-{
-#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program
- _mesa_reference_vertprog(ctx, &ctx->VertexProgram.Current,
- (struct gl_vertex_program *)
- ctx->Shared->DefaultVertexProgram);
- assert(ctx->VertexProgram.Current);
-#endif
-
-#if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program
- _mesa_reference_fragprog(ctx, &ctx->FragmentProgram.Current,
- (struct gl_fragment_program *)
- ctx->Shared->DefaultFragmentProgram);
- assert(ctx->FragmentProgram.Current);
-#endif
-
-#if FEATURE_ARB_geometry_shader4
- _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current,
- (struct gl_geometry_program *)
- ctx->Shared->DefaultGeometryProgram);
-#endif
-
- /* XXX probably move this stuff */
-#if FEATURE_ATI_fragment_shader
- if (ctx->ATIFragmentShader.Current) {
- ctx->ATIFragmentShader.Current->RefCount--;
- if (ctx->ATIFragmentShader.Current->RefCount <= 0) {
- free(ctx->ATIFragmentShader.Current);
- }
- }
- ctx->ATIFragmentShader.Current = (struct ati_fragment_shader *) ctx->Shared->DefaultFragmentShader;
- assert(ctx->ATIFragmentShader.Current);
- ctx->ATIFragmentShader.Current->RefCount++;
-#endif
-}
-
-
-/**
- * Set the vertex/fragment program error state (position and error string).
- * This is generally called from within the parsers.
- */
-void
-_mesa_set_program_error(struct gl_context *ctx, GLint pos, const char *string)
-{
- ctx->Program.ErrorPos = pos;
- free((void *) ctx->Program.ErrorString);
- if (!string)
- string = "";
- ctx->Program.ErrorString = _mesa_strdup(string);
-}
-
-
-/**
- * Find the line number and column for 'pos' within 'string'.
- * Return a copy of the line which contains 'pos'. Free the line with
- * free().
- * \param string the program string
- * \param pos the position within the string
- * \param line returns the line number corresponding to 'pos'.
- * \param col returns the column number corresponding to 'pos'.
- * \return copy of the line containing 'pos'.
- */
-const GLubyte *
-_mesa_find_line_column(const GLubyte *string, const GLubyte *pos,
- GLint *line, GLint *col)
-{
- const GLubyte *lineStart = string;
- const GLubyte *p = string;
- GLubyte *s;
- int len;
-
- *line = 1;
-
- while (p != pos) {
- if (*p == (GLubyte) '\n') {
- (*line)++;
- lineStart = p + 1;
- }
- p++;
- }
-
- *col = (pos - lineStart) + 1;
-
- /* return copy of this line */
- while (*p != 0 && *p != '\n')
- p++;
- len = p - lineStart;
- s = (GLubyte *) malloc(len + 1);
- memcpy(s, lineStart, len);
- s[len] = 0;
-
- return s;
-}
-
-
-/**
- * Initialize a new vertex/fragment program object.
- */
-static struct gl_program *
-_mesa_init_program_struct( struct gl_context *ctx, struct gl_program *prog,
- GLenum target, GLuint id)
-{
- (void) ctx;
- if (prog) {
- GLuint i;
- memset(prog, 0, sizeof(*prog));
- prog->Id = id;
- prog->Target = target;
- prog->Resident = GL_TRUE;
- prog->RefCount = 1;
- prog->Format = GL_PROGRAM_FORMAT_ASCII_ARB;
-
- /* default mapping from samplers to texture units */
- for (i = 0; i < MAX_SAMPLERS; i++)
- prog->SamplerUnits[i] = i;
- }
-
- return prog;
-}
-
-
-/**
- * Initialize a new fragment program object.
- */
-struct gl_program *
-_mesa_init_fragment_program( struct gl_context *ctx, struct gl_fragment_program *prog,
- GLenum target, GLuint id)
-{
- if (prog)
- return _mesa_init_program_struct( ctx, &prog->Base, target, id );
- else
- return NULL;
-}
-
-
-/**
- * Initialize a new vertex program object.
- */
-struct gl_program *
-_mesa_init_vertex_program( struct gl_context *ctx, struct gl_vertex_program *prog,
- GLenum target, GLuint id)
-{
- if (prog)
- return _mesa_init_program_struct( ctx, &prog->Base, target, id );
- else
- return NULL;
-}
-
-
-/**
- * Initialize a new geometry program object.
- */
-struct gl_program *
-_mesa_init_geometry_program( struct gl_context *ctx, struct gl_geometry_program *prog,
- GLenum target, GLuint id)
-{
- if (prog)
- return _mesa_init_program_struct( ctx, &prog->Base, target, id );
- else
- return NULL;
-}
-
-
-/**
- * Allocate and initialize a new fragment/vertex program object but
- * don't put it into the program hash table. Called via
- * ctx->Driver.NewProgram. May be overridden (ie. replaced) by a
- * device driver function to implement OO deriviation with additional
- * types not understood by this function.
- *
- * \param ctx context
- * \param id program id/number
- * \param target program target/type
- * \return pointer to new program object
- */
-struct gl_program *
-_mesa_new_program(struct gl_context *ctx, GLenum target, GLuint id)
-{
- struct gl_program *prog;
- switch (target) {
- case GL_VERTEX_PROGRAM_ARB: /* == GL_VERTEX_PROGRAM_NV */
- case GL_VERTEX_STATE_PROGRAM_NV:
- prog = _mesa_init_vertex_program(ctx, CALLOC_STRUCT(gl_vertex_program),
- target, id );
- break;
- case GL_FRAGMENT_PROGRAM_NV:
- case GL_FRAGMENT_PROGRAM_ARB:
- prog =_mesa_init_fragment_program(ctx,
- CALLOC_STRUCT(gl_fragment_program),
- target, id );
- break;
- case MESA_GEOMETRY_PROGRAM:
- prog = _mesa_init_geometry_program(ctx,
- CALLOC_STRUCT(gl_geometry_program),
- target, id);
- break;
- default:
- _mesa_problem(ctx, "bad target in _mesa_new_program");
- prog = NULL;
- }
- return prog;
-}
-
-
-/**
- * Delete a program and remove it from the hash table, ignoring the
- * reference count.
- * Called via ctx->Driver.DeleteProgram. May be wrapped (OO deriviation)
- * by a device driver function.
- */
-void
-_mesa_delete_program(struct gl_context *ctx, struct gl_program *prog)
-{
- (void) ctx;
- ASSERT(prog);
- ASSERT(prog->RefCount==0);
-
- if (prog == &_mesa_DummyProgram)
- return;
-
- if (prog->String)
- free(prog->String);
-
- _mesa_free_instructions(prog->Instructions, prog->NumInstructions);
-
- if (prog->Parameters) {
- _mesa_free_parameter_list(prog->Parameters);
- }
- if (prog->Varying) {
- _mesa_free_parameter_list(prog->Varying);
- }
- if (prog->Attributes) {
- _mesa_free_parameter_list(prog->Attributes);
- }
-
- free(prog);
-}
-
-
-/**
- * Return the gl_program object for a given ID.
- * Basically just a wrapper for _mesa_HashLookup() to avoid a lot of
- * casts elsewhere.
- */
-struct gl_program *
-_mesa_lookup_program(struct gl_context *ctx, GLuint id)
-{
- if (id)
- return (struct gl_program *) _mesa_HashLookup(ctx->Shared->Programs, id);
- else
- return NULL;
-}
-
-
-/**
- * Reference counting for vertex/fragment programs
- */
-void
-_mesa_reference_program(struct gl_context *ctx,
- struct gl_program **ptr,
- struct gl_program *prog)
-{
- assert(ptr);
- if (*ptr && prog) {
- /* sanity check */
- if ((*ptr)->Target == GL_VERTEX_PROGRAM_ARB)
- ASSERT(prog->Target == GL_VERTEX_PROGRAM_ARB);
- else if ((*ptr)->Target == GL_FRAGMENT_PROGRAM_ARB)
- ASSERT(prog->Target == GL_FRAGMENT_PROGRAM_ARB ||
- prog->Target == GL_FRAGMENT_PROGRAM_NV);
- else if ((*ptr)->Target == MESA_GEOMETRY_PROGRAM)
- ASSERT(prog->Target == MESA_GEOMETRY_PROGRAM);
- }
- if (*ptr == prog) {
- return; /* no change */
- }
- if (*ptr) {
- GLboolean deleteFlag;
-
- /*_glthread_LOCK_MUTEX((*ptr)->Mutex);*/
-#if 0
- printf("Program %p ID=%u Target=%s Refcount-- to %d\n",
- *ptr, (*ptr)->Id,
- ((*ptr)->Target == GL_VERTEX_PROGRAM_ARB ? "VP" :
- ((*ptr)->Target == MESA_GEOMETRY_PROGRAM ? "GP" : "FP")),
- (*ptr)->RefCount - 1);
-#endif
- ASSERT((*ptr)->RefCount > 0);
- (*ptr)->RefCount--;
-
- deleteFlag = ((*ptr)->RefCount == 0);
- /*_glthread_UNLOCK_MUTEX((*ptr)->Mutex);*/
-
- if (deleteFlag) {
- ASSERT(ctx);
- ctx->Driver.DeleteProgram(ctx, *ptr);
- }
-
- *ptr = NULL;
- }
-
- assert(!*ptr);
- if (prog) {
- /*_glthread_LOCK_MUTEX(prog->Mutex);*/
- prog->RefCount++;
-#if 0
- printf("Program %p ID=%u Target=%s Refcount++ to %d\n",
- prog, prog->Id,
- (prog->Target == GL_VERTEX_PROGRAM_ARB ? "VP" :
- (prog->Target == MESA_GEOMETRY_PROGRAM ? "GP" : "FP")),
- prog->RefCount);
-#endif
- /*_glthread_UNLOCK_MUTEX(prog->Mutex);*/
- }
-
- *ptr = prog;
-}
-
-
-/**
- * Return a copy of a program.
- * XXX Problem here if the program object is actually OO-derivation
- * made by a device driver.
- */
-struct gl_program *
-_mesa_clone_program(struct gl_context *ctx, const struct gl_program *prog)
-{
- struct gl_program *clone;
-
- clone = ctx->Driver.NewProgram(ctx, prog->Target, prog->Id);
- if (!clone)
- return NULL;
-
- assert(clone->Target == prog->Target);
- assert(clone->RefCount == 1);
-
- clone->String = (GLubyte *) _mesa_strdup((char *) prog->String);
- clone->Format = prog->Format;
- clone->Instructions = _mesa_alloc_instructions(prog->NumInstructions);
- if (!clone->Instructions) {
- _mesa_reference_program(ctx, &clone, NULL);
- return NULL;
- }
- _mesa_copy_instructions(clone->Instructions, prog->Instructions,
- prog->NumInstructions);
- clone->InputsRead = prog->InputsRead;
- clone->OutputsWritten = prog->OutputsWritten;
- clone->SamplersUsed = prog->SamplersUsed;
- clone->ShadowSamplers = prog->ShadowSamplers;
- memcpy(clone->TexturesUsed, prog->TexturesUsed, sizeof(prog->TexturesUsed));
-
- if (prog->Parameters)
- clone->Parameters = _mesa_clone_parameter_list(prog->Parameters);
- memcpy(clone->LocalParams, prog->LocalParams, sizeof(clone->LocalParams));
- if (prog->Varying)
- clone->Varying = _mesa_clone_parameter_list(prog->Varying);
- if (prog->Attributes)
- clone->Attributes = _mesa_clone_parameter_list(prog->Attributes);
- memcpy(clone->LocalParams, prog->LocalParams, sizeof(clone->LocalParams));
- clone->IndirectRegisterFiles = prog->IndirectRegisterFiles;
- clone->NumInstructions = prog->NumInstructions;
- clone->NumTemporaries = prog->NumTemporaries;
- clone->NumParameters = prog->NumParameters;
- clone->NumAttributes = prog->NumAttributes;
- clone->NumAddressRegs = prog->NumAddressRegs;
- clone->NumNativeInstructions = prog->NumNativeInstructions;
- clone->NumNativeTemporaries = prog->NumNativeTemporaries;
- clone->NumNativeParameters = prog->NumNativeParameters;
- clone->NumNativeAttributes = prog->NumNativeAttributes;
- clone->NumNativeAddressRegs = prog->NumNativeAddressRegs;
- clone->NumAluInstructions = prog->NumAluInstructions;
- clone->NumTexInstructions = prog->NumTexInstructions;
- clone->NumTexIndirections = prog->NumTexIndirections;
- clone->NumNativeAluInstructions = prog->NumNativeAluInstructions;
- clone->NumNativeTexInstructions = prog->NumNativeTexInstructions;
- clone->NumNativeTexIndirections = prog->NumNativeTexIndirections;
-
- switch (prog->Target) {
- case GL_VERTEX_PROGRAM_ARB:
- {
- const struct gl_vertex_program *vp
- = (const struct gl_vertex_program *) prog;
- struct gl_vertex_program *vpc = (struct gl_vertex_program *) clone;
- vpc->IsPositionInvariant = vp->IsPositionInvariant;
- vpc->IsNVProgram = vp->IsNVProgram;
- }
- break;
- case GL_FRAGMENT_PROGRAM_ARB:
- {
- const struct gl_fragment_program *fp
- = (const struct gl_fragment_program *) prog;
- struct gl_fragment_program *fpc = (struct gl_fragment_program *) clone;
- fpc->FogOption = fp->FogOption;
- fpc->UsesKill = fp->UsesKill;
- fpc->OriginUpperLeft = fp->OriginUpperLeft;
- fpc->PixelCenterInteger = fp->PixelCenterInteger;
- }
- break;
- case MESA_GEOMETRY_PROGRAM:
- {
- const struct gl_geometry_program *gp
- = (const struct gl_geometry_program *) prog;
- struct gl_geometry_program *gpc = (struct gl_geometry_program *) clone;
- gpc->VerticesOut = gp->VerticesOut;
- gpc->InputType = gp->InputType;
- gpc->OutputType = gp->OutputType;
- }
- break;
- default:
- _mesa_problem(NULL, "Unexpected target in _mesa_clone_program");
- }
-
- return clone;
-}
-
-
-/**
- * Insert 'count' NOP instructions at 'start' in the given program.
- * Adjust branch targets accordingly.
- */
-GLboolean
-_mesa_insert_instructions(struct gl_program *prog, GLuint start, GLuint count)
-{
- const GLuint origLen = prog->NumInstructions;
- const GLuint newLen = origLen + count;
- struct prog_instruction *newInst;
- GLuint i;
-
- /* adjust branches */
- for (i = 0; i < prog->NumInstructions; i++) {
- struct prog_instruction *inst = prog->Instructions + i;
- if (inst->BranchTarget > 0) {
- if ((GLuint)inst->BranchTarget >= start) {
- inst->BranchTarget += count;
- }
- }
- }
-
- /* Alloc storage for new instructions */
- newInst = _mesa_alloc_instructions(newLen);
- if (!newInst) {
- return GL_FALSE;
- }
-
- /* Copy 'start' instructions into new instruction buffer */
- _mesa_copy_instructions(newInst, prog->Instructions, start);
-
- /* init the new instructions */
- _mesa_init_instructions(newInst + start, count);
-
- /* Copy the remaining/tail instructions to new inst buffer */
- _mesa_copy_instructions(newInst + start + count,
- prog->Instructions + start,
- origLen - start);
-
- /* free old instructions */
- _mesa_free_instructions(prog->Instructions, origLen);
-
- /* install new instructions */
- prog->Instructions = newInst;
- prog->NumInstructions = newLen;
-
- return GL_TRUE;
-}
-
-/**
- * Delete 'count' instructions at 'start' in the given program.
- * Adjust branch targets accordingly.
- */
-GLboolean
-_mesa_delete_instructions(struct gl_program *prog, GLuint start, GLuint count)
-{
- const GLuint origLen = prog->NumInstructions;
- const GLuint newLen = origLen - count;
- struct prog_instruction *newInst;
- GLuint i;
-
- /* adjust branches */
- for (i = 0; i < prog->NumInstructions; i++) {
- struct prog_instruction *inst = prog->Instructions + i;
- if (inst->BranchTarget > 0) {
- if (inst->BranchTarget > (GLint) start) {
- inst->BranchTarget -= count;
- }
- }
- }
-
- /* Alloc storage for new instructions */
- newInst = _mesa_alloc_instructions(newLen);
- if (!newInst) {
- return GL_FALSE;
- }
-
- /* Copy 'start' instructions into new instruction buffer */
- _mesa_copy_instructions(newInst, prog->Instructions, start);
-
- /* Copy the remaining/tail instructions to new inst buffer */
- _mesa_copy_instructions(newInst + start,
- prog->Instructions + start + count,
- newLen - start);
-
- /* free old instructions */
- _mesa_free_instructions(prog->Instructions, origLen);
-
- /* install new instructions */
- prog->Instructions = newInst;
- prog->NumInstructions = newLen;
-
- return GL_TRUE;
-}
-
-
-/**
- * Search instructions for registers that match (oldFile, oldIndex),
- * replacing them with (newFile, newIndex).
- */
-static void
-replace_registers(struct prog_instruction *inst, GLuint numInst,
- GLuint oldFile, GLuint oldIndex,
- GLuint newFile, GLuint newIndex)
-{
- GLuint i, j;
- for (i = 0; i < numInst; i++) {
- /* src regs */
- for (j = 0; j < _mesa_num_inst_src_regs(inst[i].Opcode); j++) {
- if (inst[i].SrcReg[j].File == oldFile &&
- inst[i].SrcReg[j].Index == oldIndex) {
- inst[i].SrcReg[j].File = newFile;
- inst[i].SrcReg[j].Index = newIndex;
- }
- }
- /* dst reg */
- if (inst[i].DstReg.File == oldFile && inst[i].DstReg.Index == oldIndex) {
- inst[i].DstReg.File = newFile;
- inst[i].DstReg.Index = newIndex;
- }
- }
-}
-
-
-/**
- * Search instructions for references to program parameters. When found,
- * increment the parameter index by 'offset'.
- * Used when combining programs.
- */
-static void
-adjust_param_indexes(struct prog_instruction *inst, GLuint numInst,
- GLuint offset)
-{
- GLuint i, j;
- for (i = 0; i < numInst; i++) {
- for (j = 0; j < _mesa_num_inst_src_regs(inst[i].Opcode); j++) {
- GLuint f = inst[i].SrcReg[j].File;
- if (f == PROGRAM_CONSTANT ||
- f == PROGRAM_UNIFORM ||
- f == PROGRAM_STATE_VAR) {
- inst[i].SrcReg[j].Index += offset;
- }
- }
- }
-}
-
-
-/**
- * Combine two programs into one. Fix instructions so the outputs of
- * the first program go to the inputs of the second program.
- */
-struct gl_program *
-_mesa_combine_programs(struct gl_context *ctx,
- const struct gl_program *progA,
- const struct gl_program *progB)
-{
- struct prog_instruction *newInst;
- struct gl_program *newProg;
- const GLuint lenA = progA->NumInstructions - 1; /* omit END instr */
- const GLuint lenB = progB->NumInstructions;
- const GLuint numParamsA = _mesa_num_parameters(progA->Parameters);
- const GLuint newLength = lenA + lenB;
- GLboolean usedTemps[MAX_PROGRAM_TEMPS];
- GLuint firstTemp = 0;
- GLbitfield inputsB;
- GLuint i;
-
- ASSERT(progA->Target == progB->Target);
-
- newInst = _mesa_alloc_instructions(newLength);
- if (!newInst)
- return GL_FALSE;
-
- _mesa_copy_instructions(newInst, progA->Instructions, lenA);
- _mesa_copy_instructions(newInst + lenA, progB->Instructions, lenB);
-
- /* adjust branch / instruction addresses for B's instructions */
- for (i = 0; i < lenB; i++) {
- newInst[lenA + i].BranchTarget += lenA;
- }
-
- newProg = ctx->Driver.NewProgram(ctx, progA->Target, 0);
- newProg->Instructions = newInst;
- newProg->NumInstructions = newLength;
-
- /* find used temp regs (we may need new temps below) */
- _mesa_find_used_registers(newProg, PROGRAM_TEMPORARY,
- usedTemps, MAX_PROGRAM_TEMPS);
-
- if (newProg->Target == GL_FRAGMENT_PROGRAM_ARB) {
- struct gl_fragment_program *fprogA, *fprogB, *newFprog;
- GLbitfield progB_inputsRead = progB->InputsRead;
- GLint progB_colorFile, progB_colorIndex;
-
- fprogA = (struct gl_fragment_program *) progA;
- fprogB = (struct gl_fragment_program *) progB;
- newFprog = (struct gl_fragment_program *) newProg;
-
- newFprog->UsesKill = fprogA->UsesKill || fprogB->UsesKill;
-
- /* We'll do a search and replace for instances
- * of progB_colorFile/progB_colorIndex below...
- */
- progB_colorFile = PROGRAM_INPUT;
- progB_colorIndex = FRAG_ATTRIB_COL0;
-
- /*
- * The fragment program may get color from a state var rather than
- * a fragment input (vertex output) if it's constant.
- * See the texenvprogram.c code.
- * So, search the program's parameter list now to see if the program
- * gets color from a state var instead of a conventional fragment
- * input register.
- */
- for (i = 0; i < progB->Parameters->NumParameters; i++) {
- struct gl_program_parameter *p = &progB->Parameters->Parameters[i];
- if (p->Type == PROGRAM_STATE_VAR &&
- p->StateIndexes[0] == STATE_INTERNAL &&
- p->StateIndexes[1] == STATE_CURRENT_ATTRIB &&
- (int) p->StateIndexes[2] == (int) VERT_ATTRIB_COLOR0) {
- progB_inputsRead |= FRAG_BIT_COL0;
- progB_colorFile = PROGRAM_STATE_VAR;
- progB_colorIndex = i;
- break;
- }
- }
-
- /* Connect color outputs of fprogA to color inputs of fprogB, via a
- * new temporary register.
- */
- if ((progA->OutputsWritten & BITFIELD64_BIT(FRAG_RESULT_COLOR)) &&
- (progB_inputsRead & FRAG_BIT_COL0)) {
- GLint tempReg = _mesa_find_free_register(usedTemps, MAX_PROGRAM_TEMPS,
- firstTemp);
- if (tempReg < 0) {
- _mesa_problem(ctx, "No free temp regs found in "
- "_mesa_combine_programs(), using 31");
- tempReg = 31;
- }
- firstTemp = tempReg + 1;
-
- /* replace writes to result.color[0] with tempReg */
- replace_registers(newInst, lenA,
- PROGRAM_OUTPUT, FRAG_RESULT_COLOR,
- PROGRAM_TEMPORARY, tempReg);
- /* replace reads from the input color with tempReg */
- replace_registers(newInst + lenA, lenB,
- progB_colorFile, progB_colorIndex, /* search for */
- PROGRAM_TEMPORARY, tempReg /* replace with */ );
- }
-
- /* compute combined program's InputsRead */
- inputsB = progB_inputsRead;
- if (progA->OutputsWritten & BITFIELD64_BIT(FRAG_RESULT_COLOR)) {
- inputsB &= ~(1 << FRAG_ATTRIB_COL0);
- }
- newProg->InputsRead = progA->InputsRead | inputsB;
- newProg->OutputsWritten = progB->OutputsWritten;
- newProg->SamplersUsed = progA->SamplersUsed | progB->SamplersUsed;
- }
- else {
- /* vertex program */
- assert(0); /* XXX todo */
- }
-
- /*
- * Merge parameters (uniforms, constants, etc)
- */
- newProg->Parameters = _mesa_combine_parameter_lists(progA->Parameters,
- progB->Parameters);
-
- adjust_param_indexes(newInst + lenA, lenB, numParamsA);
-
-
- return newProg;
-}
-
-
-/**
- * Populate the 'used' array with flags indicating which registers (TEMPs,
- * INPUTs, OUTPUTs, etc, are used by the given program.
- * \param file type of register to scan for
- * \param used returns true/false flags for in use / free
- * \param usedSize size of the 'used' array
- */
-void
-_mesa_find_used_registers(const struct gl_program *prog,
- gl_register_file file,
- GLboolean used[], GLuint usedSize)
-{
- GLuint i, j;
-
- memset(used, 0, usedSize);
-
- for (i = 0; i < prog->NumInstructions; i++) {
- const struct prog_instruction *inst = prog->Instructions + i;
- const GLuint n = _mesa_num_inst_src_regs(inst->Opcode);
-
- if (inst->DstReg.File == file) {
- ASSERT(inst->DstReg.Index < usedSize);
- if(inst->DstReg.Index < usedSize)
- used[inst->DstReg.Index] = GL_TRUE;
- }
-
- for (j = 0; j < n; j++) {
- if (inst->SrcReg[j].File == file) {
- ASSERT(inst->SrcReg[j].Index < usedSize);
- if(inst->SrcReg[j].Index < usedSize)
- used[inst->SrcReg[j].Index] = GL_TRUE;
- }
- }
- }
-}
-
-
-/**
- * Scan the given 'used' register flag array for the first entry
- * that's >= firstReg.
- * \param used vector of flags indicating registers in use (as returned
- * by _mesa_find_used_registers())
- * \param usedSize size of the 'used' array
- * \param firstReg first register to start searching at
- * \return index of unused register, or -1 if none.
- */
-GLint
-_mesa_find_free_register(const GLboolean used[],
- GLuint usedSize, GLuint firstReg)
-{
- GLuint i;
-
- assert(firstReg < usedSize);
-
- for (i = firstReg; i < usedSize; i++)
- if (!used[i])
- return i;
-
- return -1;
-}
-
-
-
-/**
- * Check if the given register index is valid (doesn't exceed implementation-
- * dependent limits).
- * \return GL_TRUE if OK, GL_FALSE if bad index
- */
-GLboolean
-_mesa_valid_register_index(const struct gl_context *ctx,
- gl_shader_type shaderType,
- gl_register_file file, GLint index)
-{
- const struct gl_program_constants *c;
-
- switch (shaderType) {
- case MESA_SHADER_VERTEX:
- c = &ctx->Const.VertexProgram;
- break;
- case MESA_SHADER_FRAGMENT:
- c = &ctx->Const.FragmentProgram;
- break;
- case MESA_SHADER_GEOMETRY:
- c = &ctx->Const.GeometryProgram;
- break;
- default:
- _mesa_problem(ctx,
- "unexpected shader type in _mesa_valid_register_index()");
- return GL_FALSE;
- }
-
- switch (file) {
- case PROGRAM_UNDEFINED:
- return GL_TRUE; /* XXX or maybe false? */
-
- case PROGRAM_TEMPORARY:
- return index >= 0 && index < c->MaxTemps;
-
- case PROGRAM_ENV_PARAM:
- return index >= 0 && index < c->MaxEnvParams;
-
- case PROGRAM_LOCAL_PARAM:
- return index >= 0 && index < c->MaxLocalParams;
-
- case PROGRAM_NAMED_PARAM:
- return index >= 0 && index < c->MaxParameters;
-
- case PROGRAM_UNIFORM:
- case PROGRAM_STATE_VAR:
- /* aka constant buffer */
- return index >= 0 && index < c->MaxUniformComponents / 4;
-
- case PROGRAM_CONSTANT:
- /* constant buffer w/ possible relative negative addressing */
- return (index > (int) c->MaxUniformComponents / -4 &&
- index < c->MaxUniformComponents / 4);
-
- case PROGRAM_INPUT:
- if (index < 0)
- return GL_FALSE;
-
- switch (shaderType) {
- case MESA_SHADER_VERTEX:
- return index < VERT_ATTRIB_GENERIC0 + c->MaxAttribs;
- case MESA_SHADER_FRAGMENT:
- return index < FRAG_ATTRIB_VAR0 + ctx->Const.MaxVarying;
- case MESA_SHADER_GEOMETRY:
- return index < GEOM_ATTRIB_VAR0 + ctx->Const.MaxVarying;
- default:
- return GL_FALSE;
- }
-
- case PROGRAM_OUTPUT:
- if (index < 0)
- return GL_FALSE;
-
- switch (shaderType) {
- case MESA_SHADER_VERTEX:
- return index < VERT_RESULT_VAR0 + ctx->Const.MaxVarying;
- case MESA_SHADER_FRAGMENT:
- return index < FRAG_RESULT_DATA0 + ctx->Const.MaxDrawBuffers;
- case MESA_SHADER_GEOMETRY:
- return index < GEOM_RESULT_VAR0 + ctx->Const.MaxVarying;
- default:
- return GL_FALSE;
- }
-
- case PROGRAM_ADDRESS:
- return index >= 0 && index < c->MaxAddressRegs;
-
- default:
- _mesa_problem(ctx,
- "unexpected register file in _mesa_valid_register_index()");
- return GL_FALSE;
- }
-}
-
-
-
-/**
- * "Post-process" a GPU program. This is intended to be used for debugging.
- * Example actions include no-op'ing instructions or changing instruction
- * behaviour.
- */
-void
-_mesa_postprocess_program(struct gl_context *ctx, struct gl_program *prog)
-{
- static const GLfloat white[4] = { 0.5, 0.5, 0.5, 0.5 };
- GLuint i;
- GLuint whiteSwizzle;
- GLint whiteIndex = _mesa_add_unnamed_constant(prog->Parameters,
- white, 4, &whiteSwizzle);
-
- (void) whiteIndex;
-
- for (i = 0; i < prog->NumInstructions; i++) {
- struct prog_instruction *inst = prog->Instructions + i;
- const GLuint n = _mesa_num_inst_src_regs(inst->Opcode);
-
- (void) n;
-
- if (_mesa_is_tex_instruction(inst->Opcode)) {
-#if 0
- /* replace TEX/TXP/TXB with MOV */
- inst->Opcode = OPCODE_MOV;
- inst->DstReg.WriteMask = WRITEMASK_XYZW;
- inst->SrcReg[0].Swizzle = SWIZZLE_XYZW;
- inst->SrcReg[0].Negate = NEGATE_NONE;
-#endif
-
-#if 0
- /* disable shadow texture mode */
- inst->TexShadow = 0;
-#endif
- }
-
- if (inst->Opcode == OPCODE_TXP) {
-#if 0
- inst->Opcode = OPCODE_MOV;
- inst->DstReg.WriteMask = WRITEMASK_XYZW;
- inst->SrcReg[0].File = PROGRAM_CONSTANT;
- inst->SrcReg[0].Index = whiteIndex;
- inst->SrcReg[0].Swizzle = SWIZZLE_XYZW;
- inst->SrcReg[0].Negate = NEGATE_NONE;
-#endif
-#if 0
- inst->TexShadow = 0;
-#endif
-#if 0
- inst->Opcode = OPCODE_TEX;
- inst->TexShadow = 0;
-#endif
- }
-
- }
-}
+/* + * Mesa 3-D graphics library + * Version: 6.5.3 + * + * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file program.c + * Vertex and fragment program support functions. + * \author Brian Paul + */ + + +#include "main/glheader.h" +#include "main/context.h" +#include "main/hash.h" +#include "main/mfeatures.h" +#include "program.h" +#include "prog_cache.h" +#include "prog_parameter.h" +#include "prog_instruction.h" + + +/** + * A pointer to this dummy program is put into the hash table when + * glGenPrograms is called. + */ +struct gl_program _mesa_DummyProgram; + + +/** + * Init context's vertex/fragment program state + */ +void +_mesa_init_program(struct gl_context *ctx) +{ + GLuint i; + + /* + * If this assertion fails, we need to increase the field + * size for register indexes (see INST_INDEX_BITS). + */ + ASSERT(ctx->Const.VertexProgram.MaxUniformComponents / 4 + <= (1 << INST_INDEX_BITS)); + ASSERT(ctx->Const.FragmentProgram.MaxUniformComponents / 4 + <= (1 << INST_INDEX_BITS)); + + ASSERT(ctx->Const.VertexProgram.MaxTemps <= (1 << INST_INDEX_BITS)); + ASSERT(ctx->Const.VertexProgram.MaxLocalParams <= (1 << INST_INDEX_BITS)); + ASSERT(ctx->Const.FragmentProgram.MaxTemps <= (1 << INST_INDEX_BITS)); + ASSERT(ctx->Const.FragmentProgram.MaxLocalParams <= (1 << INST_INDEX_BITS)); + + ASSERT(ctx->Const.VertexProgram.MaxUniformComponents <= 4 * MAX_UNIFORMS); + ASSERT(ctx->Const.FragmentProgram.MaxUniformComponents <= 4 * MAX_UNIFORMS); + + ASSERT(ctx->Const.VertexProgram.MaxAddressOffset <= (1 << INST_INDEX_BITS)); + ASSERT(ctx->Const.FragmentProgram.MaxAddressOffset <= (1 << INST_INDEX_BITS)); + + /* If this fails, increase prog_instruction::TexSrcUnit size */ + ASSERT(MAX_TEXTURE_UNITS <= (1 << 5)); + + /* If this fails, increase prog_instruction::TexSrcTarget size */ + ASSERT(NUM_TEXTURE_TARGETS <= (1 << 3)); + + ctx->Program.ErrorPos = -1; + ctx->Program.ErrorString = _mesa_strdup(""); + +#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program + ctx->VertexProgram.Enabled = GL_FALSE; +#if FEATURE_es2_glsl + ctx->VertexProgram.PointSizeEnabled = + (ctx->API == API_OPENGLES2) ? GL_TRUE : GL_FALSE; +#else + ctx->VertexProgram.PointSizeEnabled = GL_FALSE; +#endif + ctx->VertexProgram.TwoSideEnabled = GL_FALSE; + _mesa_reference_vertprog(ctx, &ctx->VertexProgram.Current, + ctx->Shared->DefaultVertexProgram); + assert(ctx->VertexProgram.Current); + for (i = 0; i < MAX_NV_VERTEX_PROGRAM_PARAMS / 4; i++) { + ctx->VertexProgram.TrackMatrix[i] = GL_NONE; + ctx->VertexProgram.TrackMatrixTransform[i] = GL_IDENTITY_NV; + } + ctx->VertexProgram.Cache = _mesa_new_program_cache(); +#endif + +#if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program + ctx->FragmentProgram.Enabled = GL_FALSE; + _mesa_reference_fragprog(ctx, &ctx->FragmentProgram.Current, + ctx->Shared->DefaultFragmentProgram); + assert(ctx->FragmentProgram.Current); + ctx->FragmentProgram.Cache = _mesa_new_program_cache(); +#endif + +#if FEATURE_ARB_geometry_shader4 + ctx->GeometryProgram.Enabled = GL_FALSE; + /* right now by default we don't have a geometry program */ + _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current, + NULL); + ctx->GeometryProgram.Cache = _mesa_new_program_cache(); +#endif + + /* XXX probably move this stuff */ +#if FEATURE_ATI_fragment_shader + ctx->ATIFragmentShader.Enabled = GL_FALSE; + ctx->ATIFragmentShader.Current = ctx->Shared->DefaultFragmentShader; + assert(ctx->ATIFragmentShader.Current); + ctx->ATIFragmentShader.Current->RefCount++; +#endif +} + + +/** + * Free a context's vertex/fragment program state + */ +void +_mesa_free_program_data(struct gl_context *ctx) +{ +#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program + _mesa_reference_vertprog(ctx, &ctx->VertexProgram.Current, NULL); + _mesa_delete_program_cache(ctx, ctx->VertexProgram.Cache); +#endif +#if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program + _mesa_reference_fragprog(ctx, &ctx->FragmentProgram.Current, NULL); + _mesa_delete_program_cache(ctx, ctx->FragmentProgram.Cache); +#endif +#if FEATURE_ARB_geometry_shader4 + _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current, NULL); + _mesa_delete_program_cache(ctx, ctx->GeometryProgram.Cache); +#endif + /* XXX probably move this stuff */ +#if FEATURE_ATI_fragment_shader + if (ctx->ATIFragmentShader.Current) { + ctx->ATIFragmentShader.Current->RefCount--; + if (ctx->ATIFragmentShader.Current->RefCount <= 0) { + free(ctx->ATIFragmentShader.Current); + } + } +#endif + free((void *) ctx->Program.ErrorString); +} + + +/** + * Update the default program objects in the given context to reference those + * specified in the shared state and release those referencing the old + * shared state. + */ +void +_mesa_update_default_objects_program(struct gl_context *ctx) +{ +#if FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program + _mesa_reference_vertprog(ctx, &ctx->VertexProgram.Current, + (struct gl_vertex_program *) + ctx->Shared->DefaultVertexProgram); + assert(ctx->VertexProgram.Current); +#endif + +#if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program + _mesa_reference_fragprog(ctx, &ctx->FragmentProgram.Current, + (struct gl_fragment_program *) + ctx->Shared->DefaultFragmentProgram); + assert(ctx->FragmentProgram.Current); +#endif + +#if FEATURE_ARB_geometry_shader4 + _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current, + (struct gl_geometry_program *) + ctx->Shared->DefaultGeometryProgram); +#endif + + /* XXX probably move this stuff */ +#if FEATURE_ATI_fragment_shader + if (ctx->ATIFragmentShader.Current) { + ctx->ATIFragmentShader.Current->RefCount--; + if (ctx->ATIFragmentShader.Current->RefCount <= 0) { + free(ctx->ATIFragmentShader.Current); + } + } + ctx->ATIFragmentShader.Current = (struct ati_fragment_shader *) ctx->Shared->DefaultFragmentShader; + assert(ctx->ATIFragmentShader.Current); + ctx->ATIFragmentShader.Current->RefCount++; +#endif +} + + +/** + * Set the vertex/fragment program error state (position and error string). + * This is generally called from within the parsers. + */ +void +_mesa_set_program_error(struct gl_context *ctx, GLint pos, const char *string) +{ + ctx->Program.ErrorPos = pos; + free((void *) ctx->Program.ErrorString); + if (!string) + string = ""; + ctx->Program.ErrorString = _mesa_strdup(string); +} + + +/** + * Find the line number and column for 'pos' within 'string'. + * Return a copy of the line which contains 'pos'. Free the line with + * free(). + * \param string the program string + * \param pos the position within the string + * \param line returns the line number corresponding to 'pos'. + * \param col returns the column number corresponding to 'pos'. + * \return copy of the line containing 'pos'. + */ +const GLubyte * +_mesa_find_line_column(const GLubyte *string, const GLubyte *pos, + GLint *line, GLint *col) +{ + const GLubyte *lineStart = string; + const GLubyte *p = string; + GLubyte *s; + int len; + + *line = 1; + + while (p != pos) { + if (*p == (GLubyte) '\n') { + (*line)++; + lineStart = p + 1; + } + p++; + } + + *col = (pos - lineStart) + 1; + + /* return copy of this line */ + while (*p != 0 && *p != '\n') + p++; + len = p - lineStart; + s = (GLubyte *) malloc(len + 1); + memcpy(s, lineStart, len); + s[len] = 0; + + return s; +} + + +/** + * Initialize a new vertex/fragment program object. + */ +static struct gl_program * +_mesa_init_program_struct( struct gl_context *ctx, struct gl_program *prog, + GLenum target, GLuint id) +{ + (void) ctx; + if (prog) { + GLuint i; + memset(prog, 0, sizeof(*prog)); + prog->Id = id; + prog->Target = target; + prog->Resident = GL_TRUE; + prog->RefCount = 1; + prog->Format = GL_PROGRAM_FORMAT_ASCII_ARB; + + /* default mapping from samplers to texture units */ + for (i = 0; i < MAX_SAMPLERS; i++) + prog->SamplerUnits[i] = i; + } + + return prog; +} + + +/** + * Initialize a new fragment program object. + */ +struct gl_program * +_mesa_init_fragment_program( struct gl_context *ctx, struct gl_fragment_program *prog, + GLenum target, GLuint id) +{ + if (prog) + return _mesa_init_program_struct( ctx, &prog->Base, target, id ); + else + return NULL; +} + + +/** + * Initialize a new vertex program object. + */ +struct gl_program * +_mesa_init_vertex_program( struct gl_context *ctx, struct gl_vertex_program *prog, + GLenum target, GLuint id) +{ + if (prog) + return _mesa_init_program_struct( ctx, &prog->Base, target, id ); + else + return NULL; +} + + +/** + * Initialize a new geometry program object. + */ +struct gl_program * +_mesa_init_geometry_program( struct gl_context *ctx, struct gl_geometry_program *prog, + GLenum target, GLuint id) +{ + if (prog) + return _mesa_init_program_struct( ctx, &prog->Base, target, id ); + else + return NULL; +} + + +/** + * Allocate and initialize a new fragment/vertex program object but + * don't put it into the program hash table. Called via + * ctx->Driver.NewProgram. May be overridden (ie. replaced) by a + * device driver function to implement OO deriviation with additional + * types not understood by this function. + * + * \param ctx context + * \param id program id/number + * \param target program target/type + * \return pointer to new program object + */ +struct gl_program * +_mesa_new_program(struct gl_context *ctx, GLenum target, GLuint id) +{ + struct gl_program *prog; + switch (target) { + case GL_VERTEX_PROGRAM_ARB: /* == GL_VERTEX_PROGRAM_NV */ + case GL_VERTEX_STATE_PROGRAM_NV: + prog = _mesa_init_vertex_program(ctx, CALLOC_STRUCT(gl_vertex_program), + target, id ); + break; + case GL_FRAGMENT_PROGRAM_NV: + case GL_FRAGMENT_PROGRAM_ARB: + prog =_mesa_init_fragment_program(ctx, + CALLOC_STRUCT(gl_fragment_program), + target, id ); + break; + case MESA_GEOMETRY_PROGRAM: + prog = _mesa_init_geometry_program(ctx, + CALLOC_STRUCT(gl_geometry_program), + target, id); + break; + default: + _mesa_problem(ctx, "bad target in _mesa_new_program"); + prog = NULL; + } + return prog; +} + + +/** + * Delete a program and remove it from the hash table, ignoring the + * reference count. + * Called via ctx->Driver.DeleteProgram. May be wrapped (OO deriviation) + * by a device driver function. + */ +void +_mesa_delete_program(struct gl_context *ctx, struct gl_program *prog) +{ + (void) ctx; + ASSERT(prog); + ASSERT(prog->RefCount==0); + + if (prog == &_mesa_DummyProgram) + return; + + if (prog->String) + free(prog->String); + + _mesa_free_instructions(prog->Instructions, prog->NumInstructions); + + if (prog->Parameters) { + _mesa_free_parameter_list(prog->Parameters); + } + if (prog->Varying) { + _mesa_free_parameter_list(prog->Varying); + } + if (prog->Attributes) { + _mesa_free_parameter_list(prog->Attributes); + } + + free(prog); +} + + +/** + * Return the gl_program object for a given ID. + * Basically just a wrapper for _mesa_HashLookup() to avoid a lot of + * casts elsewhere. + */ +struct gl_program * +_mesa_lookup_program(struct gl_context *ctx, GLuint id) +{ + if (id) + return (struct gl_program *) _mesa_HashLookup(ctx->Shared->Programs, id); + else + return NULL; +} + + +/** + * Reference counting for vertex/fragment programs + */ +void +_mesa_reference_program(struct gl_context *ctx, + struct gl_program **ptr, + struct gl_program *prog) +{ + assert(ptr); + if (*ptr && prog) { + /* sanity check */ + if ((*ptr)->Target == GL_VERTEX_PROGRAM_ARB) + ASSERT(prog->Target == GL_VERTEX_PROGRAM_ARB); + else if ((*ptr)->Target == GL_FRAGMENT_PROGRAM_ARB) + ASSERT(prog->Target == GL_FRAGMENT_PROGRAM_ARB || + prog->Target == GL_FRAGMENT_PROGRAM_NV); + else if ((*ptr)->Target == MESA_GEOMETRY_PROGRAM) + ASSERT(prog->Target == MESA_GEOMETRY_PROGRAM); + } + if (*ptr == prog) { + return; /* no change */ + } + if (*ptr) { + GLboolean deleteFlag; + + /*_glthread_LOCK_MUTEX((*ptr)->Mutex);*/ +#if 0 + printf("Program %p ID=%u Target=%s Refcount-- to %d\n", + *ptr, (*ptr)->Id, + ((*ptr)->Target == GL_VERTEX_PROGRAM_ARB ? "VP" : + ((*ptr)->Target == MESA_GEOMETRY_PROGRAM ? "GP" : "FP")), + (*ptr)->RefCount - 1); +#endif + ASSERT((*ptr)->RefCount > 0); + (*ptr)->RefCount--; + + deleteFlag = ((*ptr)->RefCount == 0); + /*_glthread_UNLOCK_MUTEX((*ptr)->Mutex);*/ + + if (deleteFlag) { + ASSERT(ctx); + ctx->Driver.DeleteProgram(ctx, *ptr); + } + + *ptr = NULL; + } + + assert(!*ptr); + if (prog) { + /*_glthread_LOCK_MUTEX(prog->Mutex);*/ + prog->RefCount++; +#if 0 + printf("Program %p ID=%u Target=%s Refcount++ to %d\n", + prog, prog->Id, + (prog->Target == GL_VERTEX_PROGRAM_ARB ? "VP" : + (prog->Target == MESA_GEOMETRY_PROGRAM ? "GP" : "FP")), + prog->RefCount); +#endif + /*_glthread_UNLOCK_MUTEX(prog->Mutex);*/ + } + + *ptr = prog; +} + + +/** + * Return a copy of a program. + * XXX Problem here if the program object is actually OO-derivation + * made by a device driver. + */ +struct gl_program * +_mesa_clone_program(struct gl_context *ctx, const struct gl_program *prog) +{ + struct gl_program *clone; + + clone = ctx->Driver.NewProgram(ctx, prog->Target, prog->Id); + if (!clone) + return NULL; + + assert(clone->Target == prog->Target); + assert(clone->RefCount == 1); + + clone->String = (GLubyte *) _mesa_strdup((char *) prog->String); + clone->Format = prog->Format; + clone->Instructions = _mesa_alloc_instructions(prog->NumInstructions); + if (!clone->Instructions) { + _mesa_reference_program(ctx, &clone, NULL); + return NULL; + } + _mesa_copy_instructions(clone->Instructions, prog->Instructions, + prog->NumInstructions); + clone->InputsRead = prog->InputsRead; + clone->OutputsWritten = prog->OutputsWritten; + clone->SamplersUsed = prog->SamplersUsed; + clone->ShadowSamplers = prog->ShadowSamplers; + memcpy(clone->TexturesUsed, prog->TexturesUsed, sizeof(prog->TexturesUsed)); + + if (prog->Parameters) + clone->Parameters = _mesa_clone_parameter_list(prog->Parameters); + memcpy(clone->LocalParams, prog->LocalParams, sizeof(clone->LocalParams)); + if (prog->Varying) + clone->Varying = _mesa_clone_parameter_list(prog->Varying); + if (prog->Attributes) + clone->Attributes = _mesa_clone_parameter_list(prog->Attributes); + memcpy(clone->LocalParams, prog->LocalParams, sizeof(clone->LocalParams)); + clone->IndirectRegisterFiles = prog->IndirectRegisterFiles; + clone->NumInstructions = prog->NumInstructions; + clone->NumTemporaries = prog->NumTemporaries; + clone->NumParameters = prog->NumParameters; + clone->NumAttributes = prog->NumAttributes; + clone->NumAddressRegs = prog->NumAddressRegs; + clone->NumNativeInstructions = prog->NumNativeInstructions; + clone->NumNativeTemporaries = prog->NumNativeTemporaries; + clone->NumNativeParameters = prog->NumNativeParameters; + clone->NumNativeAttributes = prog->NumNativeAttributes; + clone->NumNativeAddressRegs = prog->NumNativeAddressRegs; + clone->NumAluInstructions = prog->NumAluInstructions; + clone->NumTexInstructions = prog->NumTexInstructions; + clone->NumTexIndirections = prog->NumTexIndirections; + clone->NumNativeAluInstructions = prog->NumNativeAluInstructions; + clone->NumNativeTexInstructions = prog->NumNativeTexInstructions; + clone->NumNativeTexIndirections = prog->NumNativeTexIndirections; + + switch (prog->Target) { + case GL_VERTEX_PROGRAM_ARB: + { + const struct gl_vertex_program *vp + = (const struct gl_vertex_program *) prog; + struct gl_vertex_program *vpc = (struct gl_vertex_program *) clone; + vpc->IsPositionInvariant = vp->IsPositionInvariant; + vpc->IsNVProgram = vp->IsNVProgram; + } + break; + case GL_FRAGMENT_PROGRAM_ARB: + { + const struct gl_fragment_program *fp + = (const struct gl_fragment_program *) prog; + struct gl_fragment_program *fpc = (struct gl_fragment_program *) clone; + fpc->UsesKill = fp->UsesKill; + fpc->OriginUpperLeft = fp->OriginUpperLeft; + fpc->PixelCenterInteger = fp->PixelCenterInteger; + } + break; + case MESA_GEOMETRY_PROGRAM: + { + const struct gl_geometry_program *gp + = (const struct gl_geometry_program *) prog; + struct gl_geometry_program *gpc = (struct gl_geometry_program *) clone; + gpc->VerticesOut = gp->VerticesOut; + gpc->InputType = gp->InputType; + gpc->OutputType = gp->OutputType; + } + break; + default: + _mesa_problem(NULL, "Unexpected target in _mesa_clone_program"); + } + + return clone; +} + + +/** + * Insert 'count' NOP instructions at 'start' in the given program. + * Adjust branch targets accordingly. + */ +GLboolean +_mesa_insert_instructions(struct gl_program *prog, GLuint start, GLuint count) +{ + const GLuint origLen = prog->NumInstructions; + const GLuint newLen = origLen + count; + struct prog_instruction *newInst; + GLuint i; + + /* adjust branches */ + for (i = 0; i < prog->NumInstructions; i++) { + struct prog_instruction *inst = prog->Instructions + i; + if (inst->BranchTarget > 0) { + if ((GLuint)inst->BranchTarget >= start) { + inst->BranchTarget += count; + } + } + } + + /* Alloc storage for new instructions */ + newInst = _mesa_alloc_instructions(newLen); + if (!newInst) { + return GL_FALSE; + } + + /* Copy 'start' instructions into new instruction buffer */ + _mesa_copy_instructions(newInst, prog->Instructions, start); + + /* init the new instructions */ + _mesa_init_instructions(newInst + start, count); + + /* Copy the remaining/tail instructions to new inst buffer */ + _mesa_copy_instructions(newInst + start + count, + prog->Instructions + start, + origLen - start); + + /* free old instructions */ + _mesa_free_instructions(prog->Instructions, origLen); + + /* install new instructions */ + prog->Instructions = newInst; + prog->NumInstructions = newLen; + + return GL_TRUE; +} + +/** + * Delete 'count' instructions at 'start' in the given program. + * Adjust branch targets accordingly. + */ +GLboolean +_mesa_delete_instructions(struct gl_program *prog, GLuint start, GLuint count) +{ + const GLuint origLen = prog->NumInstructions; + const GLuint newLen = origLen - count; + struct prog_instruction *newInst; + GLuint i; + + /* adjust branches */ + for (i = 0; i < prog->NumInstructions; i++) { + struct prog_instruction *inst = prog->Instructions + i; + if (inst->BranchTarget > 0) { + if (inst->BranchTarget > (GLint) start) { + inst->BranchTarget -= count; + } + } + } + + /* Alloc storage for new instructions */ + newInst = _mesa_alloc_instructions(newLen); + if (!newInst) { + return GL_FALSE; + } + + /* Copy 'start' instructions into new instruction buffer */ + _mesa_copy_instructions(newInst, prog->Instructions, start); + + /* Copy the remaining/tail instructions to new inst buffer */ + _mesa_copy_instructions(newInst + start, + prog->Instructions + start + count, + newLen - start); + + /* free old instructions */ + _mesa_free_instructions(prog->Instructions, origLen); + + /* install new instructions */ + prog->Instructions = newInst; + prog->NumInstructions = newLen; + + return GL_TRUE; +} + + +/** + * Search instructions for registers that match (oldFile, oldIndex), + * replacing them with (newFile, newIndex). + */ +static void +replace_registers(struct prog_instruction *inst, GLuint numInst, + GLuint oldFile, GLuint oldIndex, + GLuint newFile, GLuint newIndex) +{ + GLuint i, j; + for (i = 0; i < numInst; i++) { + /* src regs */ + for (j = 0; j < _mesa_num_inst_src_regs(inst[i].Opcode); j++) { + if (inst[i].SrcReg[j].File == oldFile && + inst[i].SrcReg[j].Index == oldIndex) { + inst[i].SrcReg[j].File = newFile; + inst[i].SrcReg[j].Index = newIndex; + } + } + /* dst reg */ + if (inst[i].DstReg.File == oldFile && inst[i].DstReg.Index == oldIndex) { + inst[i].DstReg.File = newFile; + inst[i].DstReg.Index = newIndex; + } + } +} + + +/** + * Search instructions for references to program parameters. When found, + * increment the parameter index by 'offset'. + * Used when combining programs. + */ +static void +adjust_param_indexes(struct prog_instruction *inst, GLuint numInst, + GLuint offset) +{ + GLuint i, j; + for (i = 0; i < numInst; i++) { + for (j = 0; j < _mesa_num_inst_src_regs(inst[i].Opcode); j++) { + GLuint f = inst[i].SrcReg[j].File; + if (f == PROGRAM_CONSTANT || + f == PROGRAM_UNIFORM || + f == PROGRAM_STATE_VAR) { + inst[i].SrcReg[j].Index += offset; + } + } + } +} + + +/** + * Combine two programs into one. Fix instructions so the outputs of + * the first program go to the inputs of the second program. + */ +struct gl_program * +_mesa_combine_programs(struct gl_context *ctx, + const struct gl_program *progA, + const struct gl_program *progB) +{ + struct prog_instruction *newInst; + struct gl_program *newProg; + const GLuint lenA = progA->NumInstructions - 1; /* omit END instr */ + const GLuint lenB = progB->NumInstructions; + const GLuint numParamsA = _mesa_num_parameters(progA->Parameters); + const GLuint newLength = lenA + lenB; + GLboolean usedTemps[MAX_PROGRAM_TEMPS]; + GLuint firstTemp = 0; + GLbitfield inputsB; + GLuint i; + + ASSERT(progA->Target == progB->Target); + + newInst = _mesa_alloc_instructions(newLength); + if (!newInst) + return GL_FALSE; + + _mesa_copy_instructions(newInst, progA->Instructions, lenA); + _mesa_copy_instructions(newInst + lenA, progB->Instructions, lenB); + + /* adjust branch / instruction addresses for B's instructions */ + for (i = 0; i < lenB; i++) { + newInst[lenA + i].BranchTarget += lenA; + } + + newProg = ctx->Driver.NewProgram(ctx, progA->Target, 0); + newProg->Instructions = newInst; + newProg->NumInstructions = newLength; + + /* find used temp regs (we may need new temps below) */ + _mesa_find_used_registers(newProg, PROGRAM_TEMPORARY, + usedTemps, MAX_PROGRAM_TEMPS); + + if (newProg->Target == GL_FRAGMENT_PROGRAM_ARB) { + struct gl_fragment_program *fprogA, *fprogB, *newFprog; + GLbitfield progB_inputsRead = progB->InputsRead; + GLint progB_colorFile, progB_colorIndex; + + fprogA = (struct gl_fragment_program *) progA; + fprogB = (struct gl_fragment_program *) progB; + newFprog = (struct gl_fragment_program *) newProg; + + newFprog->UsesKill = fprogA->UsesKill || fprogB->UsesKill; + + /* We'll do a search and replace for instances + * of progB_colorFile/progB_colorIndex below... + */ + progB_colorFile = PROGRAM_INPUT; + progB_colorIndex = FRAG_ATTRIB_COL0; + + /* + * The fragment program may get color from a state var rather than + * a fragment input (vertex output) if it's constant. + * See the texenvprogram.c code. + * So, search the program's parameter list now to see if the program + * gets color from a state var instead of a conventional fragment + * input register. + */ + for (i = 0; i < progB->Parameters->NumParameters; i++) { + struct gl_program_parameter *p = &progB->Parameters->Parameters[i]; + if (p->Type == PROGRAM_STATE_VAR && + p->StateIndexes[0] == STATE_INTERNAL && + p->StateIndexes[1] == STATE_CURRENT_ATTRIB && + (int) p->StateIndexes[2] == (int) VERT_ATTRIB_COLOR0) { + progB_inputsRead |= FRAG_BIT_COL0; + progB_colorFile = PROGRAM_STATE_VAR; + progB_colorIndex = i; + break; + } + } + + /* Connect color outputs of fprogA to color inputs of fprogB, via a + * new temporary register. + */ + if ((progA->OutputsWritten & BITFIELD64_BIT(FRAG_RESULT_COLOR)) && + (progB_inputsRead & FRAG_BIT_COL0)) { + GLint tempReg = _mesa_find_free_register(usedTemps, MAX_PROGRAM_TEMPS, + firstTemp); + if (tempReg < 0) { + _mesa_problem(ctx, "No free temp regs found in " + "_mesa_combine_programs(), using 31"); + tempReg = 31; + } + firstTemp = tempReg + 1; + + /* replace writes to result.color[0] with tempReg */ + replace_registers(newInst, lenA, + PROGRAM_OUTPUT, FRAG_RESULT_COLOR, + PROGRAM_TEMPORARY, tempReg); + /* replace reads from the input color with tempReg */ + replace_registers(newInst + lenA, lenB, + progB_colorFile, progB_colorIndex, /* search for */ + PROGRAM_TEMPORARY, tempReg /* replace with */ ); + } + + /* compute combined program's InputsRead */ + inputsB = progB_inputsRead; + if (progA->OutputsWritten & BITFIELD64_BIT(FRAG_RESULT_COLOR)) { + inputsB &= ~(1 << FRAG_ATTRIB_COL0); + } + newProg->InputsRead = progA->InputsRead | inputsB; + newProg->OutputsWritten = progB->OutputsWritten; + newProg->SamplersUsed = progA->SamplersUsed | progB->SamplersUsed; + } + else { + /* vertex program */ + assert(0); /* XXX todo */ + } + + /* + * Merge parameters (uniforms, constants, etc) + */ + newProg->Parameters = _mesa_combine_parameter_lists(progA->Parameters, + progB->Parameters); + + adjust_param_indexes(newInst + lenA, lenB, numParamsA); + + + return newProg; +} + + +/** + * Populate the 'used' array with flags indicating which registers (TEMPs, + * INPUTs, OUTPUTs, etc, are used by the given program. + * \param file type of register to scan for + * \param used returns true/false flags for in use / free + * \param usedSize size of the 'used' array + */ +void +_mesa_find_used_registers(const struct gl_program *prog, + gl_register_file file, + GLboolean used[], GLuint usedSize) +{ + GLuint i, j; + + memset(used, 0, usedSize); + + for (i = 0; i < prog->NumInstructions; i++) { + const struct prog_instruction *inst = prog->Instructions + i; + const GLuint n = _mesa_num_inst_src_regs(inst->Opcode); + + if (inst->DstReg.File == file) { + ASSERT(inst->DstReg.Index < usedSize); + if(inst->DstReg.Index < usedSize) + used[inst->DstReg.Index] = GL_TRUE; + } + + for (j = 0; j < n; j++) { + if (inst->SrcReg[j].File == file) { + ASSERT(inst->SrcReg[j].Index < usedSize); + if(inst->SrcReg[j].Index < usedSize) + used[inst->SrcReg[j].Index] = GL_TRUE; + } + } + } +} + + +/** + * Scan the given 'used' register flag array for the first entry + * that's >= firstReg. + * \param used vector of flags indicating registers in use (as returned + * by _mesa_find_used_registers()) + * \param usedSize size of the 'used' array + * \param firstReg first register to start searching at + * \return index of unused register, or -1 if none. + */ +GLint +_mesa_find_free_register(const GLboolean used[], + GLuint usedSize, GLuint firstReg) +{ + GLuint i; + + assert(firstReg < usedSize); + + for (i = firstReg; i < usedSize; i++) + if (!used[i]) + return i; + + return -1; +} + + + +/** + * Check if the given register index is valid (doesn't exceed implementation- + * dependent limits). + * \return GL_TRUE if OK, GL_FALSE if bad index + */ +GLboolean +_mesa_valid_register_index(const struct gl_context *ctx, + gl_shader_type shaderType, + gl_register_file file, GLint index) +{ + const struct gl_program_constants *c; + + switch (shaderType) { + case MESA_SHADER_VERTEX: + c = &ctx->Const.VertexProgram; + break; + case MESA_SHADER_FRAGMENT: + c = &ctx->Const.FragmentProgram; + break; + case MESA_SHADER_GEOMETRY: + c = &ctx->Const.GeometryProgram; + break; + default: + _mesa_problem(ctx, + "unexpected shader type in _mesa_valid_register_index()"); + return GL_FALSE; + } + + switch (file) { + case PROGRAM_UNDEFINED: + return GL_TRUE; /* XXX or maybe false? */ + + case PROGRAM_TEMPORARY: + return index >= 0 && index < c->MaxTemps; + + case PROGRAM_ENV_PARAM: + return index >= 0 && index < c->MaxEnvParams; + + case PROGRAM_LOCAL_PARAM: + return index >= 0 && index < c->MaxLocalParams; + + case PROGRAM_NAMED_PARAM: + return index >= 0 && index < c->MaxParameters; + + case PROGRAM_UNIFORM: + case PROGRAM_STATE_VAR: + /* aka constant buffer */ + return index >= 0 && index < c->MaxUniformComponents / 4; + + case PROGRAM_CONSTANT: + /* constant buffer w/ possible relative negative addressing */ + return (index > (int) c->MaxUniformComponents / -4 && + index < c->MaxUniformComponents / 4); + + case PROGRAM_INPUT: + if (index < 0) + return GL_FALSE; + + switch (shaderType) { + case MESA_SHADER_VERTEX: + return index < VERT_ATTRIB_GENERIC0 + c->MaxAttribs; + case MESA_SHADER_FRAGMENT: + return index < FRAG_ATTRIB_VAR0 + ctx->Const.MaxVarying; + case MESA_SHADER_GEOMETRY: + return index < GEOM_ATTRIB_VAR0 + ctx->Const.MaxVarying; + default: + return GL_FALSE; + } + + case PROGRAM_OUTPUT: + if (index < 0) + return GL_FALSE; + + switch (shaderType) { + case MESA_SHADER_VERTEX: + return index < VERT_RESULT_VAR0 + ctx->Const.MaxVarying; + case MESA_SHADER_FRAGMENT: + return index < FRAG_RESULT_DATA0 + ctx->Const.MaxDrawBuffers; + case MESA_SHADER_GEOMETRY: + return index < GEOM_RESULT_VAR0 + ctx->Const.MaxVarying; + default: + return GL_FALSE; + } + + case PROGRAM_ADDRESS: + return index >= 0 && index < c->MaxAddressRegs; + + default: + _mesa_problem(ctx, + "unexpected register file in _mesa_valid_register_index()"); + return GL_FALSE; + } +} + + + +/** + * "Post-process" a GPU program. This is intended to be used for debugging. + * Example actions include no-op'ing instructions or changing instruction + * behaviour. + */ +void +_mesa_postprocess_program(struct gl_context *ctx, struct gl_program *prog) +{ + static const GLfloat white[4] = { 0.5, 0.5, 0.5, 0.5 }; + GLuint i; + GLuint whiteSwizzle; + GLint whiteIndex = _mesa_add_unnamed_constant(prog->Parameters, + white, 4, &whiteSwizzle); + + (void) whiteIndex; + + for (i = 0; i < prog->NumInstructions; i++) { + struct prog_instruction *inst = prog->Instructions + i; + const GLuint n = _mesa_num_inst_src_regs(inst->Opcode); + + (void) n; + + if (_mesa_is_tex_instruction(inst->Opcode)) { +#if 0 + /* replace TEX/TXP/TXB with MOV */ + inst->Opcode = OPCODE_MOV; + inst->DstReg.WriteMask = WRITEMASK_XYZW; + inst->SrcReg[0].Swizzle = SWIZZLE_XYZW; + inst->SrcReg[0].Negate = NEGATE_NONE; +#endif + +#if 0 + /* disable shadow texture mode */ + inst->TexShadow = 0; +#endif + } + + if (inst->Opcode == OPCODE_TXP) { +#if 0 + inst->Opcode = OPCODE_MOV; + inst->DstReg.WriteMask = WRITEMASK_XYZW; + inst->SrcReg[0].File = PROGRAM_CONSTANT; + inst->SrcReg[0].Index = whiteIndex; + inst->SrcReg[0].Swizzle = SWIZZLE_XYZW; + inst->SrcReg[0].Negate = NEGATE_NONE; +#endif +#if 0 + inst->TexShadow = 0; +#endif +#if 0 + inst->Opcode = OPCODE_TEX; + inst->TexShadow = 0; +#endif + } + + } +} diff --git a/mesalib/src/mesa/program/program_parse.y b/mesalib/src/mesa/program/program_parse.y index b35bc5a7c..85c783dd6 100644 --- a/mesalib/src/mesa/program/program_parse.y +++ b/mesalib/src/mesa/program/program_parse.y @@ -2060,9 +2060,14 @@ resultColBinding: COLOR optResultFaceType optResultColorType optResultFaceType: { - $$ = (state->mode == ARB_vertex) - ? VERT_RESULT_COL0 - : FRAG_RESULT_COLOR; + if (state->mode == ARB_vertex) { + $$ = VERT_RESULT_COL0; + } else { + if (state->option.DrawBuffers) + $$ = FRAG_RESULT_DATA0; + else + $$ = FRAG_RESULT_COLOR; + } } | '[' INTEGER ']' { diff --git a/mesalib/src/mesa/program/programopt.c b/mesalib/src/mesa/program/programopt.c index 5ad9571f7..a239da2c6 100644 --- a/mesalib/src/mesa/program/programopt.c +++ b/mesalib/src/mesa/program/programopt.c @@ -230,15 +230,25 @@ _mesa_insert_mvp_code(struct gl_context *ctx, struct gl_vertex_program *vprog) /** - * Append extra instructions onto the given fragment program to implement - * the fog mode specified by fprog->FogOption. - * The fragment.fogcoord input is used to compute the fog blend factor. + * Append instructions to implement fog * - * XXX with a little work, this function could be adapted to add fog code + * The \c fragment.fogcoord input is used to compute the fog blend factor. + * + * \param ctx The GL context + * \param fprog Fragment program that fog instructions will be appended to. + * \param fog_mode Fog mode. One of \c GL_EXP, \c GL_EXP2, or \c GL_LINEAR. + * \param saturate True if writes to color outputs should be clamped to [0, 1] + * + * \note + * This function sets \c FRAG_BIT_FOGC in \c fprog->Base.InputsRead. + * + * \todo With a little work, this function could be adapted to add fog code * to vertex programs too. */ void -_mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog, GLboolean saturate) +_mesa_append_fog_code(struct gl_context *ctx, + struct gl_fragment_program *fprog, GLenum fog_mode, + GLboolean saturate) { static const gl_state_index fogPStateOpt[STATE_LENGTH] = { STATE_INTERNAL, STATE_FOG_PARAMS_OPTIMIZED, 0, 0, 0 }; @@ -251,9 +261,9 @@ _mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog, GLint fogPRefOpt, fogColorRef; /* state references */ GLuint colorTemp, fogFactorTemp; /* temporary registerss */ - if (fprog->FogOption == GL_NONE) { + if (fog_mode == GL_NONE) { _mesa_problem(ctx, "_mesa_append_fog_code() called for fragment program" - " with FogOption == GL_NONE"); + " with fog_mode == GL_NONE"); return; } @@ -301,7 +311,7 @@ _mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog, /* emit instructions to compute fog blending factor */ /* this is always clamped to [0, 1] regardless of fragment clamping */ - if (fprog->FogOption == GL_LINEAR) { + if (fog_mode == GL_LINEAR) { /* MAD fogFactorTemp.x, fragment.fogcoord.x, fogPRefOpt.x, fogPRefOpt.y; */ inst->Opcode = OPCODE_MAD; inst->DstReg.File = PROGRAM_TEMPORARY; @@ -320,7 +330,7 @@ _mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog, inst++; } else { - ASSERT(fprog->FogOption == GL_EXP || fprog->FogOption == GL_EXP2); + ASSERT(fog_mode == GL_EXP || fog_mode == GL_EXP2); /* fogPRefOpt.z = d/ln(2), fogPRefOpt.w = d/sqrt(ln(2) */ /* EXP: MUL fogFactorTemp.x, fogPRefOpt.z, fragment.fogcoord.x; */ /* EXP2: MUL fogFactorTemp.x, fogPRefOpt.w, fragment.fogcoord.x; */ @@ -331,12 +341,12 @@ _mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog, inst->SrcReg[0].File = PROGRAM_STATE_VAR; inst->SrcReg[0].Index = fogPRefOpt; inst->SrcReg[0].Swizzle - = (fprog->FogOption == GL_EXP) ? SWIZZLE_ZZZZ : SWIZZLE_WWWW; + = (fog_mode == GL_EXP) ? SWIZZLE_ZZZZ : SWIZZLE_WWWW; inst->SrcReg[1].File = PROGRAM_INPUT; inst->SrcReg[1].Index = FRAG_ATTRIB_FOGC; inst->SrcReg[1].Swizzle = SWIZZLE_XXXX; inst++; - if (fprog->FogOption == GL_EXP2) { + if (fog_mode == GL_EXP2) { /* MUL fogFactorTemp.x, fogFactorTemp.x, fogFactorTemp.x; */ inst->Opcode = OPCODE_MUL; inst->DstReg.File = PROGRAM_TEMPORARY; @@ -397,7 +407,6 @@ _mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog, fprog->Base.Instructions = newInst; fprog->Base.NumInstructions = inst - newInst; fprog->Base.InputsRead |= FRAG_BIT_FOGC; - /* XXX do this? fprog->FogOption = GL_NONE; */ } diff --git a/mesalib/src/mesa/program/programopt.h b/mesalib/src/mesa/program/programopt.h index 79631aa58..b9205823c 100644 --- a/mesalib/src/mesa/program/programopt.h +++ b/mesalib/src/mesa/program/programopt.h @@ -32,7 +32,9 @@ extern void _mesa_insert_mvp_code(struct gl_context *ctx, struct gl_vertex_program *vprog); extern void -_mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog, GLboolean saturate); +_mesa_append_fog_code(struct gl_context *ctx, + struct gl_fragment_program *fprog, GLenum fog_mode, + GLboolean saturate); extern void _mesa_count_texture_indirections(struct gl_program *prog); diff --git a/mesalib/src/mesa/state_tracker/st_atom_sampler.c b/mesalib/src/mesa/state_tracker/st_atom_sampler.c index 808aa73a0..56da010b3 100644 --- a/mesalib/src/mesa/state_tracker/st_atom_sampler.c +++ b/mesalib/src/mesa/state_tracker/st_atom_sampler.c @@ -33,6 +33,8 @@ #include "main/macros.h" +#include "main/mtypes.h" +#include "main/samplerobj.h" #include "st_context.h" #include "st_cb_texture.h" @@ -154,7 +156,7 @@ update_samplers(struct st_context *st) teximg = texobj->Image[0][texobj->BaseLevel]; - msamp = st_get_mesa_sampler(st->ctx, texUnit); + msamp = _mesa_get_samplerobj(st->ctx, texUnit); sampler->wrap_s = gl_wrap_xlate(msamp->WrapS); sampler->wrap_t = gl_wrap_xlate(msamp->WrapT); diff --git a/mesalib/src/mesa/state_tracker/st_atom_texture.c b/mesalib/src/mesa/state_tracker/st_atom_texture.c index 19ad2e8cc..9d437ad08 100644 --- a/mesalib/src/mesa/state_tracker/st_atom_texture.c +++ b/mesalib/src/mesa/state_tracker/st_atom_texture.c @@ -33,6 +33,8 @@ #include "main/macros.h" +#include "main/mtypes.h" +#include "main/samplerobj.h" #include "program/prog_instruction.h" #include "st_context.h" @@ -209,7 +211,7 @@ update_textures(struct st_context *st) else texUnit = vprog->Base.SamplerUnits[su]; - samp = st_get_mesa_sampler(st->ctx, texUnit); + samp = _mesa_get_samplerobj(st->ctx, texUnit); texObj = st->ctx->Texture.Unit[texUnit]._Current; diff --git a/mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c b/mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c index 953cb446e..1e489b29d 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c +++ b/mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c @@ -1,472 +1,457 @@ -/**************************************************************************
- *
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-
-/**
- * Functions for pixel buffer objects and vertex/element buffer objects.
- */
-
-
-#include "main/imports.h"
-#include "main/mtypes.h"
-#include "main/arrayobj.h"
-#include "main/bufferobj.h"
-
-#include "st_context.h"
-#include "st_cb_bufferobjects.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_defines.h"
-#include "util/u_inlines.h"
-
-
-/**
- * There is some duplication between mesa's bufferobjects and our
- * bufmgr buffers. Both have an integer handle and a hashtable to
- * lookup an opaque structure. It would be nice if the handles and
- * internal structure where somehow shared.
- */
-static struct gl_buffer_object *
-st_bufferobj_alloc(struct gl_context *ctx, GLuint name, GLenum target)
-{
- struct st_buffer_object *st_obj = ST_CALLOC_STRUCT(st_buffer_object);
-
- if (!st_obj)
- return NULL;
-
- _mesa_initialize_buffer_object(&st_obj->Base, name, target);
-
- return &st_obj->Base;
-}
-
-
-
-/**
- * Deallocate/free a vertex/pixel buffer object.
- * Called via glDeleteBuffersARB().
- */
-static void
-st_bufferobj_free(struct gl_context *ctx, struct gl_buffer_object *obj)
-{
- struct st_buffer_object *st_obj = st_buffer_object(obj);
-
- assert(obj->RefCount == 0);
- assert(st_obj->transfer == NULL);
-
- if (st_obj->buffer)
- pipe_resource_reference(&st_obj->buffer, NULL);
-
- free(st_obj);
-}
-
-
-
-/**
- * Replace data in a subrange of buffer object. If the data range
- * specified by size + offset extends beyond the end of the buffer or
- * if data is NULL, no copy is performed.
- * Called via glBufferSubDataARB().
- */
-static void
-st_bufferobj_subdata(struct gl_context *ctx,
- GLenum target,
- GLintptrARB offset,
- GLsizeiptrARB size,
- const GLvoid * data, struct gl_buffer_object *obj)
-{
- struct st_buffer_object *st_obj = st_buffer_object(obj);
-
- /* we may be called from VBO code, so double-check params here */
- ASSERT(offset >= 0);
- ASSERT(size >= 0);
- ASSERT(offset + size <= obj->Size);
-
- if (!size)
- return;
-
- /*
- * According to ARB_vertex_buffer_object specification, if data is null,
- * then the contents of the buffer object's data store is undefined. We just
- * ignore, and leave it unchanged.
- */
- if (!data)
- return;
-
- /* Now that transfers are per-context, we don't have to figure out
- * flushing here. Usually drivers won't need to flush in this case
- * even if the buffer is currently referenced by hardware - they
- * just queue the upload as dma rather than mapping the underlying
- * buffer directly.
- */
- pipe_buffer_write(st_context(ctx)->pipe,
- st_obj->buffer,
- offset, size, data);
-}
-
-
-/**
- * Called via glGetBufferSubDataARB().
- */
-static void
-st_bufferobj_get_subdata(struct gl_context *ctx,
- GLenum target,
- GLintptrARB offset,
- GLsizeiptrARB size,
- GLvoid * data, struct gl_buffer_object *obj)
-{
- struct st_buffer_object *st_obj = st_buffer_object(obj);
-
- /* we may be called from VBO code, so double-check params here */
- ASSERT(offset >= 0);
- ASSERT(size >= 0);
- ASSERT(offset + size <= obj->Size);
-
- if (!size)
- return;
-
- pipe_buffer_read(st_context(ctx)->pipe, st_obj->buffer,
- offset, size, data);
-}
-
-
-/**
- * Allocate space for and store data in a buffer object. Any data that was
- * previously stored in the buffer object is lost. If data is NULL,
- * memory will be allocated, but no copy will occur.
- * Called via ctx->Driver.BufferData().
- * \return GL_TRUE for success, GL_FALSE if out of memory
- */
-static GLboolean
-st_bufferobj_data(struct gl_context *ctx,
- GLenum target,
- GLsizeiptrARB size,
- const GLvoid * data,
- GLenum usage,
- struct gl_buffer_object *obj)
-{
- struct st_context *st = st_context(ctx);
- struct pipe_context *pipe = st->pipe;
- struct st_buffer_object *st_obj = st_buffer_object(obj);
- unsigned bind, pipe_usage;
-
- st_obj->Base.Size = size;
- st_obj->Base.Usage = usage;
-
- switch(target) {
- case GL_PIXEL_PACK_BUFFER_ARB:
- case GL_PIXEL_UNPACK_BUFFER_ARB:
- bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW;
- break;
- case GL_ARRAY_BUFFER_ARB:
- bind = PIPE_BIND_VERTEX_BUFFER;
- break;
- case GL_ELEMENT_ARRAY_BUFFER_ARB:
- bind = PIPE_BIND_INDEX_BUFFER;
- break;
- default:
- bind = 0;
- }
-
- switch (usage) {
- case GL_STATIC_DRAW:
- case GL_STATIC_READ:
- case GL_STATIC_COPY:
- pipe_usage = PIPE_USAGE_STATIC;
- break;
- case GL_DYNAMIC_DRAW:
- case GL_DYNAMIC_READ:
- case GL_DYNAMIC_COPY:
- pipe_usage = PIPE_USAGE_DYNAMIC;
- break;
- case GL_STREAM_DRAW:
- case GL_STREAM_READ:
- case GL_STREAM_COPY:
- pipe_usage = PIPE_USAGE_STREAM;
- break;
- default:
- pipe_usage = PIPE_USAGE_DEFAULT;
- }
-
- pipe_resource_reference( &st_obj->buffer, NULL );
-
- if (size != 0) {
- st_obj->buffer = pipe_buffer_create(pipe->screen, bind,
- pipe_usage, size);
-
- if (!st_obj->buffer) {
- return GL_FALSE;
- }
-
- if (data)
- pipe_buffer_write(st_context(ctx)->pipe, st_obj->buffer, 0,
- size, data);
- return GL_TRUE;
- }
-
- return GL_TRUE;
-}
-
-
-/**
- * Dummy data whose's pointer is used for zero size buffers or ranges.
- */
-static long st_bufferobj_zero_length = 0;
-
-
-
-/**
- * Called via glMapBufferARB().
- */
-static void *
-st_bufferobj_map(struct gl_context *ctx, GLenum target, GLenum access,
- struct gl_buffer_object *obj)
-{
- struct st_buffer_object *st_obj = st_buffer_object(obj);
- uint flags;
-
- switch (access) {
- case GL_WRITE_ONLY:
- flags = PIPE_TRANSFER_WRITE;
- break;
- case GL_READ_ONLY:
- flags = PIPE_TRANSFER_READ;
- break;
- case GL_READ_WRITE:
- default:
- flags = PIPE_TRANSFER_READ_WRITE;
- break;
- }
-
- /* Handle zero-size buffers here rather than in drivers */
- if (obj->Size == 0) {
- obj->Pointer = &st_bufferobj_zero_length;
- }
- else {
- obj->Pointer = pipe_buffer_map(st_context(ctx)->pipe,
- st_obj->buffer,
- flags,
- &st_obj->transfer);
- }
-
- if (obj->Pointer) {
- obj->Offset = 0;
- obj->Length = obj->Size;
- }
- return obj->Pointer;
-}
-
-
-/**
- * Called via glMapBufferRange().
- */
-static void *
-st_bufferobj_map_range(struct gl_context *ctx, GLenum target,
- GLintptr offset, GLsizeiptr length, GLbitfield access,
- struct gl_buffer_object *obj)
-{
- struct pipe_context *pipe = st_context(ctx)->pipe;
- struct st_buffer_object *st_obj = st_buffer_object(obj);
- enum pipe_transfer_usage flags = 0x0;
-
- if (access & GL_MAP_WRITE_BIT)
- flags |= PIPE_TRANSFER_WRITE;
-
- if (access & GL_MAP_READ_BIT)
- flags |= PIPE_TRANSFER_READ;
-
- if (access & GL_MAP_FLUSH_EXPLICIT_BIT)
- flags |= PIPE_TRANSFER_FLUSH_EXPLICIT;
-
- if (access & GL_MAP_INVALIDATE_BUFFER_BIT) {
- flags |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE;
- }
- else if (access & GL_MAP_INVALIDATE_RANGE_BIT) {
- if (offset == 0 && length == obj->Size)
- flags |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE;
- else
- flags |= PIPE_TRANSFER_DISCARD_RANGE;
- }
-
- if (access & GL_MAP_UNSYNCHRONIZED_BIT)
- flags |= PIPE_TRANSFER_UNSYNCHRONIZED;
-
- /* ... other flags ...
- */
-
- if (access & MESA_MAP_NOWAIT_BIT)
- flags |= PIPE_TRANSFER_DONTBLOCK;
-
- assert(offset >= 0);
- assert(length >= 0);
- assert(offset < obj->Size);
- assert(offset + length <= obj->Size);
-
- /*
- * We go out of way here to hide the degenerate yet valid case of zero
- * length range from the pipe driver.
- */
- if (!length) {
- obj->Pointer = &st_bufferobj_zero_length;
- }
- else {
- obj->Pointer = pipe_buffer_map_range(pipe,
- st_obj->buffer,
- offset, length,
- flags,
- &st_obj->transfer);
- if (obj->Pointer) {
- obj->Pointer = (ubyte *) obj->Pointer + offset;
- }
- }
-
- if (obj->Pointer) {
- obj->Offset = offset;
- obj->Length = length;
- obj->AccessFlags = access;
- }
-
- return obj->Pointer;
-}
-
-
-static void
-st_bufferobj_flush_mapped_range(struct gl_context *ctx, GLenum target,
- GLintptr offset, GLsizeiptr length,
- struct gl_buffer_object *obj)
-{
- struct pipe_context *pipe = st_context(ctx)->pipe;
- struct st_buffer_object *st_obj = st_buffer_object(obj);
-
- /* Subrange is relative to mapped range */
- assert(offset >= 0);
- assert(length >= 0);
- assert(offset + length <= obj->Length);
- assert(obj->Pointer);
-
- if (!length)
- return;
-
- pipe_buffer_flush_mapped_range(pipe, st_obj->transfer,
- obj->Offset + offset, length);
-}
-
-
-/**
- * Called via glUnmapBufferARB().
- */
-static GLboolean
-st_bufferobj_unmap(struct gl_context *ctx, GLenum target, struct gl_buffer_object *obj)
-{
- struct pipe_context *pipe = st_context(ctx)->pipe;
- struct st_buffer_object *st_obj = st_buffer_object(obj);
-
- if (obj->Length)
- pipe_buffer_unmap(pipe, st_obj->transfer);
-
- st_obj->transfer = NULL;
- obj->Pointer = NULL;
- obj->Offset = 0;
- obj->Length = 0;
- return GL_TRUE;
-}
-
-
-/**
- * Called via glCopyBufferSubData().
- */
-static void
-st_copy_buffer_subdata(struct gl_context *ctx,
- struct gl_buffer_object *src,
- struct gl_buffer_object *dst,
- GLintptr readOffset, GLintptr writeOffset,
- GLsizeiptr size)
-{
- struct pipe_context *pipe = st_context(ctx)->pipe;
- struct st_buffer_object *srcObj = st_buffer_object(src);
- struct st_buffer_object *dstObj = st_buffer_object(dst);
- struct pipe_transfer *src_transfer;
- struct pipe_transfer *dst_transfer;
- ubyte *srcPtr, *dstPtr;
-
- if(!size)
- return;
-
- /* buffer should not already be mapped */
- assert(!src->Pointer);
- assert(!dst->Pointer);
-
- srcPtr = (ubyte *) pipe_buffer_map_range(pipe,
- srcObj->buffer,
- readOffset, size,
- PIPE_TRANSFER_READ,
- &src_transfer);
-
- dstPtr = (ubyte *) pipe_buffer_map_range(pipe,
- dstObj->buffer,
- writeOffset, size,
- PIPE_TRANSFER_WRITE,
- &dst_transfer);
-
- if (srcPtr && dstPtr)
- memcpy(dstPtr + writeOffset, srcPtr + readOffset, size);
-
- pipe_buffer_unmap(pipe, src_transfer);
- pipe_buffer_unmap(pipe, dst_transfer);
-}
-
-
-/* TODO: if buffer wasn't created with appropriate usage flags, need
- * to recreate it now and copy contents -- or possibly create a
- * gallium entrypoint to extend the usage flags and let the driver
- * decide if a copy is necessary.
- */
-void
-st_bufferobj_validate_usage(struct st_context *st,
- struct st_buffer_object *obj,
- unsigned usage)
-{
-}
-
-
-void
-st_init_bufferobject_functions(struct dd_function_table *functions)
-{
- functions->NewBufferObject = st_bufferobj_alloc;
- functions->DeleteBuffer = st_bufferobj_free;
- functions->BufferData = st_bufferobj_data;
- functions->BufferSubData = st_bufferobj_subdata;
- functions->GetBufferSubData = st_bufferobj_get_subdata;
- functions->MapBuffer = st_bufferobj_map;
- functions->MapBufferRange = st_bufferobj_map_range;
- functions->FlushMappedBufferRange = st_bufferobj_flush_mapped_range;
- functions->UnmapBuffer = st_bufferobj_unmap;
- functions->CopyBufferSubData = st_copy_buffer_subdata;
-
- /* For GL_APPLE_vertex_array_object */
- functions->NewArrayObject = _mesa_new_array_object;
- functions->DeleteArrayObject = _mesa_delete_array_object;
-}
+/************************************************************************** + * + * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + + +/** + * Functions for pixel buffer objects and vertex/element buffer objects. + */ + + +#include "main/imports.h" +#include "main/mtypes.h" +#include "main/arrayobj.h" +#include "main/bufferobj.h" + +#include "st_context.h" +#include "st_cb_bufferobjects.h" + +#include "pipe/p_context.h" +#include "pipe/p_defines.h" +#include "util/u_inlines.h" + + +/** + * There is some duplication between mesa's bufferobjects and our + * bufmgr buffers. Both have an integer handle and a hashtable to + * lookup an opaque structure. It would be nice if the handles and + * internal structure where somehow shared. + */ +static struct gl_buffer_object * +st_bufferobj_alloc(struct gl_context *ctx, GLuint name, GLenum target) +{ + struct st_buffer_object *st_obj = ST_CALLOC_STRUCT(st_buffer_object); + + if (!st_obj) + return NULL; + + _mesa_initialize_buffer_object(&st_obj->Base, name, target); + + return &st_obj->Base; +} + + + +/** + * Deallocate/free a vertex/pixel buffer object. + * Called via glDeleteBuffersARB(). + */ +static void +st_bufferobj_free(struct gl_context *ctx, struct gl_buffer_object *obj) +{ + struct st_buffer_object *st_obj = st_buffer_object(obj); + + assert(obj->RefCount == 0); + assert(st_obj->transfer == NULL); + + if (st_obj->buffer) + pipe_resource_reference(&st_obj->buffer, NULL); + + free(st_obj); +} + + + +/** + * Replace data in a subrange of buffer object. If the data range + * specified by size + offset extends beyond the end of the buffer or + * if data is NULL, no copy is performed. + * Called via glBufferSubDataARB(). + */ +static void +st_bufferobj_subdata(struct gl_context *ctx, + GLenum target, + GLintptrARB offset, + GLsizeiptrARB size, + const GLvoid * data, struct gl_buffer_object *obj) +{ + struct st_buffer_object *st_obj = st_buffer_object(obj); + + /* we may be called from VBO code, so double-check params here */ + ASSERT(offset >= 0); + ASSERT(size >= 0); + ASSERT(offset + size <= obj->Size); + + if (!size) + return; + + /* + * According to ARB_vertex_buffer_object specification, if data is null, + * then the contents of the buffer object's data store is undefined. We just + * ignore, and leave it unchanged. + */ + if (!data) + return; + + /* Now that transfers are per-context, we don't have to figure out + * flushing here. Usually drivers won't need to flush in this case + * even if the buffer is currently referenced by hardware - they + * just queue the upload as dma rather than mapping the underlying + * buffer directly. + */ + pipe_buffer_write(st_context(ctx)->pipe, + st_obj->buffer, + offset, size, data); +} + + +/** + * Called via glGetBufferSubDataARB(). + */ +static void +st_bufferobj_get_subdata(struct gl_context *ctx, + GLenum target, + GLintptrARB offset, + GLsizeiptrARB size, + GLvoid * data, struct gl_buffer_object *obj) +{ + struct st_buffer_object *st_obj = st_buffer_object(obj); + + /* we may be called from VBO code, so double-check params here */ + ASSERT(offset >= 0); + ASSERT(size >= 0); + ASSERT(offset + size <= obj->Size); + + if (!size) + return; + + pipe_buffer_read(st_context(ctx)->pipe, st_obj->buffer, + offset, size, data); +} + + +/** + * Allocate space for and store data in a buffer object. Any data that was + * previously stored in the buffer object is lost. If data is NULL, + * memory will be allocated, but no copy will occur. + * Called via ctx->Driver.BufferData(). + * \return GL_TRUE for success, GL_FALSE if out of memory + */ +static GLboolean +st_bufferobj_data(struct gl_context *ctx, + GLenum target, + GLsizeiptrARB size, + const GLvoid * data, + GLenum usage, + struct gl_buffer_object *obj) +{ + struct st_context *st = st_context(ctx); + struct pipe_context *pipe = st->pipe; + struct st_buffer_object *st_obj = st_buffer_object(obj); + unsigned bind, pipe_usage; + + st_obj->Base.Size = size; + st_obj->Base.Usage = usage; + + switch(target) { + case GL_PIXEL_PACK_BUFFER_ARB: + case GL_PIXEL_UNPACK_BUFFER_ARB: + bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW; + break; + case GL_ARRAY_BUFFER_ARB: + bind = PIPE_BIND_VERTEX_BUFFER; + break; + case GL_ELEMENT_ARRAY_BUFFER_ARB: + bind = PIPE_BIND_INDEX_BUFFER; + break; + default: + bind = 0; + } + + switch (usage) { + case GL_STATIC_DRAW: + case GL_STATIC_READ: + case GL_STATIC_COPY: + pipe_usage = PIPE_USAGE_STATIC; + break; + case GL_DYNAMIC_DRAW: + case GL_DYNAMIC_READ: + case GL_DYNAMIC_COPY: + pipe_usage = PIPE_USAGE_DYNAMIC; + break; + case GL_STREAM_DRAW: + case GL_STREAM_READ: + case GL_STREAM_COPY: + pipe_usage = PIPE_USAGE_STREAM; + break; + default: + pipe_usage = PIPE_USAGE_DEFAULT; + } + + pipe_resource_reference( &st_obj->buffer, NULL ); + + if (size != 0) { + st_obj->buffer = pipe_buffer_create(pipe->screen, bind, + pipe_usage, size); + + if (!st_obj->buffer) { + return GL_FALSE; + } + + if (data) + pipe_buffer_write(st_context(ctx)->pipe, st_obj->buffer, 0, + size, data); + return GL_TRUE; + } + + return GL_TRUE; +} + + +/** + * Dummy data whose's pointer is used for zero size buffers or ranges. + */ +static long st_bufferobj_zero_length = 0; + + + +/** + * Called via glMapBufferARB(). + */ +static void * +st_bufferobj_map(struct gl_context *ctx, GLenum target, GLenum access, + struct gl_buffer_object *obj) +{ + struct st_buffer_object *st_obj = st_buffer_object(obj); + uint flags; + + switch (access) { + case GL_WRITE_ONLY: + flags = PIPE_TRANSFER_WRITE; + break; + case GL_READ_ONLY: + flags = PIPE_TRANSFER_READ; + break; + case GL_READ_WRITE: + default: + flags = PIPE_TRANSFER_READ_WRITE; + break; + } + + /* Handle zero-size buffers here rather than in drivers */ + if (obj->Size == 0) { + obj->Pointer = &st_bufferobj_zero_length; + } + else { + obj->Pointer = pipe_buffer_map(st_context(ctx)->pipe, + st_obj->buffer, + flags, + &st_obj->transfer); + } + + if (obj->Pointer) { + obj->Offset = 0; + obj->Length = obj->Size; + } + return obj->Pointer; +} + + +/** + * Called via glMapBufferRange(). + */ +static void * +st_bufferobj_map_range(struct gl_context *ctx, GLenum target, + GLintptr offset, GLsizeiptr length, GLbitfield access, + struct gl_buffer_object *obj) +{ + struct pipe_context *pipe = st_context(ctx)->pipe; + struct st_buffer_object *st_obj = st_buffer_object(obj); + enum pipe_transfer_usage flags = 0x0; + + if (access & GL_MAP_WRITE_BIT) + flags |= PIPE_TRANSFER_WRITE; + + if (access & GL_MAP_READ_BIT) + flags |= PIPE_TRANSFER_READ; + + if (access & GL_MAP_FLUSH_EXPLICIT_BIT) + flags |= PIPE_TRANSFER_FLUSH_EXPLICIT; + + if (access & GL_MAP_INVALIDATE_BUFFER_BIT) { + flags |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE; + } + else if (access & GL_MAP_INVALIDATE_RANGE_BIT) { + if (offset == 0 && length == obj->Size) + flags |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE; + else + flags |= PIPE_TRANSFER_DISCARD_RANGE; + } + + if (access & GL_MAP_UNSYNCHRONIZED_BIT) + flags |= PIPE_TRANSFER_UNSYNCHRONIZED; + + /* ... other flags ... + */ + + if (access & MESA_MAP_NOWAIT_BIT) + flags |= PIPE_TRANSFER_DONTBLOCK; + + assert(offset >= 0); + assert(length >= 0); + assert(offset < obj->Size); + assert(offset + length <= obj->Size); + + /* + * We go out of way here to hide the degenerate yet valid case of zero + * length range from the pipe driver. + */ + if (!length) { + obj->Pointer = &st_bufferobj_zero_length; + } + else { + obj->Pointer = pipe_buffer_map_range(pipe, + st_obj->buffer, + offset, length, + flags, + &st_obj->transfer); + if (obj->Pointer) { + obj->Pointer = (ubyte *) obj->Pointer + offset; + } + } + + if (obj->Pointer) { + obj->Offset = offset; + obj->Length = length; + obj->AccessFlags = access; + } + + return obj->Pointer; +} + + +static void +st_bufferobj_flush_mapped_range(struct gl_context *ctx, GLenum target, + GLintptr offset, GLsizeiptr length, + struct gl_buffer_object *obj) +{ + struct pipe_context *pipe = st_context(ctx)->pipe; + struct st_buffer_object *st_obj = st_buffer_object(obj); + + /* Subrange is relative to mapped range */ + assert(offset >= 0); + assert(length >= 0); + assert(offset + length <= obj->Length); + assert(obj->Pointer); + + if (!length) + return; + + pipe_buffer_flush_mapped_range(pipe, st_obj->transfer, + obj->Offset + offset, length); +} + + +/** + * Called via glUnmapBufferARB(). + */ +static GLboolean +st_bufferobj_unmap(struct gl_context *ctx, GLenum target, struct gl_buffer_object *obj) +{ + struct pipe_context *pipe = st_context(ctx)->pipe; + struct st_buffer_object *st_obj = st_buffer_object(obj); + + if (obj->Length) + pipe_buffer_unmap(pipe, st_obj->transfer); + + st_obj->transfer = NULL; + obj->Pointer = NULL; + obj->Offset = 0; + obj->Length = 0; + return GL_TRUE; +} + + +/** + * Called via glCopyBufferSubData(). + */ +static void +st_copy_buffer_subdata(struct gl_context *ctx, + struct gl_buffer_object *src, + struct gl_buffer_object *dst, + GLintptr readOffset, GLintptr writeOffset, + GLsizeiptr size) +{ + struct pipe_context *pipe = st_context(ctx)->pipe; + struct st_buffer_object *srcObj = st_buffer_object(src); + struct st_buffer_object *dstObj = st_buffer_object(dst); + struct pipe_box box; + + if(!size) + return; + + /* buffer should not already be mapped */ + assert(!src->Pointer); + assert(!dst->Pointer); + + u_box_1d(readOffset, size, &box); + + pipe->resource_copy_region(pipe, dstObj->buffer, 0, writeOffset, 0, 0, + srcObj->buffer, 0, &box); +} + + +/* TODO: if buffer wasn't created with appropriate usage flags, need + * to recreate it now and copy contents -- or possibly create a + * gallium entrypoint to extend the usage flags and let the driver + * decide if a copy is necessary. + */ +void +st_bufferobj_validate_usage(struct st_context *st, + struct st_buffer_object *obj, + unsigned usage) +{ +} + + +void +st_init_bufferobject_functions(struct dd_function_table *functions) +{ + functions->NewBufferObject = st_bufferobj_alloc; + functions->DeleteBuffer = st_bufferobj_free; + functions->BufferData = st_bufferobj_data; + functions->BufferSubData = st_bufferobj_subdata; + functions->GetBufferSubData = st_bufferobj_get_subdata; + functions->MapBuffer = st_bufferobj_map; + functions->MapBufferRange = st_bufferobj_map_range; + functions->FlushMappedBufferRange = st_bufferobj_flush_mapped_range; + functions->UnmapBuffer = st_bufferobj_unmap; + functions->CopyBufferSubData = st_copy_buffer_subdata; + + /* For GL_APPLE_vertex_array_object */ + functions->NewArrayObject = _mesa_new_array_object; + functions->DeleteArrayObject = _mesa_delete_array_object; +} diff --git a/mesalib/src/mesa/state_tracker/st_cb_readpixels.c b/mesalib/src/mesa/state_tracker/st_cb_readpixels.c index fdb7770e4..2a63799bd 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_readpixels.c +++ b/mesalib/src/mesa/state_tracker/st_cb_readpixels.c @@ -198,6 +198,7 @@ st_fast_readpixels(struct gl_context *ctx, struct st_renderbuffer *strb, const struct gl_pixelstore_attrib *pack, GLvoid *dest) { + GLubyte alphaORoperand; enum combination { A8R8G8B8_UNORM_TO_RGBA_UBYTE, A8R8G8B8_UNORM_TO_RGB_UBYTE, @@ -208,20 +209,26 @@ st_fast_readpixels(struct gl_context *ctx, struct st_renderbuffer *strb, if (ctx->_ImageTransferState) return GL_FALSE; - if (strb->format == PIPE_FORMAT_B8G8R8A8_UNORM && - format == GL_RGBA && type == GL_UNSIGNED_BYTE) { + if (strb->format == PIPE_FORMAT_B8G8R8A8_UNORM) { + alphaORoperand = 0; + } + else if (strb->format == PIPE_FORMAT_B8G8R8X8_UNORM ) { + alphaORoperand = 0xff; + } + else { + return GL_FALSE; + } + + if (format == GL_RGBA && type == GL_UNSIGNED_BYTE) { combo = A8R8G8B8_UNORM_TO_RGBA_UBYTE; } - else if (strb->format == PIPE_FORMAT_B8G8R8A8_UNORM && - format == GL_RGB && type == GL_UNSIGNED_BYTE) { + else if (format == GL_RGB && type == GL_UNSIGNED_BYTE) { combo = A8R8G8B8_UNORM_TO_RGB_UBYTE; } - else if (strb->format == PIPE_FORMAT_B8G8R8A8_UNORM && - format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8_REV) { + else if (format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8_REV) { combo = A8R8G8B8_UNORM_TO_BGRA_UINT; } - else if (strb->format == PIPE_FORMAT_B8G8R8A8_UNORM && - format == GL_RGBA && type == GL_UNSIGNED_INT_8_8_8_8) { + else if (format == GL_RGBA && type == GL_UNSIGNED_INT_8_8_8_8) { combo = A8R8G8B8_UNORM_TO_RGBA_UINT; } else { @@ -283,7 +290,7 @@ st_fast_readpixels(struct gl_context *ctx, struct st_renderbuffer *strb, dst[col*4+0] = (pixel >> 16) & 0xff; dst[col*4+1] = (pixel >> 8) & 0xff; dst[col*4+2] = (pixel >> 0) & 0xff; - dst[col*4+3] = (pixel >> 24) & 0xff; + dst[col*4+3] = ((pixel >> 24) & 0xff) | alphaORoperand; } dst += dstStride; y += dy; @@ -306,6 +313,12 @@ st_fast_readpixels(struct gl_context *ctx, struct st_renderbuffer *strb, for (row = 0; row < height; row++) { const GLubyte *src = map + y * trans->stride; memcpy(dst, src, 4 * width); + if (alphaORoperand) { + assert(alphaORoperand == 0xff); + for (col = 0; col < width; col++) { + dst[col*4+3] = 0xff; + } + } dst += dstStride; y += dy; } @@ -315,7 +328,7 @@ st_fast_readpixels(struct gl_context *ctx, struct st_renderbuffer *strb, const GLubyte *src = map + y * trans->stride; for (col = 0; col < width; col++) { GLuint pixel = ((GLuint *) src)[col]; - dst[col*4+0] = (pixel >> 24) & 0xff; + dst[col*4+0] = ((pixel >> 24) & 0xff) | alphaORoperand; dst[col*4+1] = (pixel >> 0) & 0xff; dst[col*4+2] = (pixel >> 8) & 0xff; dst[col*4+3] = (pixel >> 16) & 0xff; diff --git a/mesalib/src/mesa/state_tracker/st_cb_texture.c b/mesalib/src/mesa/state_tracker/st_cb_texture.c index 43c24ae95..a27c30e51 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_texture.c +++ b/mesalib/src/mesa/state_tracker/st_cb_texture.c @@ -1686,7 +1686,7 @@ copy_image_data_to_texture(struct st_context *st, /* debug checks */ { const struct gl_texture_image *dstImage = - stObj->base.Image[stImage->face][stImage->level]; + stObj->base.Image[stImage->face][dstLevel]; assert(dstImage); assert(dstImage->Width == stImage->base.Width); assert(dstImage->Height == stImage->base.Height); @@ -1843,7 +1843,12 @@ st_finalize_texture(struct gl_context *ctx, /* Need to import images in main memory or held in other textures. */ if (stImage && stObj->pt != stImage->pt) { - copy_image_data_to_texture(st, stObj, level, stImage); + if (level == 0 || (stImage->base.Width == u_minify(stObj->width0, level) && + stImage->base.Height == u_minify(stObj->height0, level) && + stImage->base.Depth == u_minify(stObj->depth0, level))) { + /* src image fits expected dest mipmap level size */ + copy_image_data_to_texture(st, stObj, level, stImage); + } } } } diff --git a/mesalib/src/mesa/state_tracker/st_texture.h b/mesalib/src/mesa/state_tracker/st_texture.h index 903e30df5..d50c3c9af 100644 --- a/mesalib/src/mesa/state_tracker/st_texture.h +++ b/mesalib/src/mesa/state_tracker/st_texture.h @@ -163,21 +163,6 @@ st_get_texture_sampler_view(struct st_texture_object *stObj, } -/** - * Get pointer to the active sampler object for the given texture unit. - * This will either be a user-defined sampler object or the texture - * object's own sampler state. - */ -static INLINE struct gl_sampler_object * -st_get_mesa_sampler(const struct gl_context *ctx, GLuint unit) -{ - if (ctx->Texture.Unit[unit].Sampler) - return ctx->Texture.Unit[unit].Sampler; - else - return &ctx->Texture.Unit[unit]._Current->Sampler; -} - - extern struct pipe_resource * st_texture_create(struct st_context *st, enum pipe_texture_target target, diff --git a/mesalib/src/mesa/swrast/s_accum.c b/mesalib/src/mesa/swrast/s_accum.c index 560a1d143..0ec907d79 100644 --- a/mesalib/src/mesa/swrast/s_accum.c +++ b/mesalib/src/mesa/swrast/s_accum.c @@ -1,594 +1,598 @@ -/*
- * Mesa 3-D graphics library
- * Version: 6.5.2
- *
- * Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/macros.h"
-#include "main/imports.h"
-
-#include "s_accum.h"
-#include "s_context.h"
-#include "s_masking.h"
-#include "s_span.h"
-
-
-/* XXX this would have to change for accum buffers with more or less
- * than 16 bits per color channel.
- */
-#define ACCUM_SCALE16 32767.0F
-
-
-/*
- * Accumulation buffer notes
- *
- * Normally, accumulation buffer values are GLshorts with values in
- * [-32767, 32767] which represent floating point colors in [-1, 1],
- * as defined by the OpenGL specification.
- *
- * We optimize for the common case used for full-scene antialiasing:
- * // start with accum buffer cleared to zero
- * glAccum(GL_LOAD, w); // or GL_ACCUM the first image
- * glAccum(GL_ACCUM, w);
- * ...
- * glAccum(GL_ACCUM, w);
- * glAccum(GL_RETURN, 1.0);
- * That is, we start with an empty accumulation buffer and accumulate
- * n images, each with weight w = 1/n.
- * In this scenario, we can simply store unscaled integer values in
- * the accum buffer instead of scaled integers. We'll also keep track
- * of the w value so when we do GL_RETURN we simply divide the accumulated
- * values by n (n=1/w).
- * This lets us avoid _many_ int->float->int conversions.
- */
-
-
-#if CHAN_BITS == 8
-/* enable the optimization */
-#define USE_OPTIMIZED_ACCUM 1
-#else
-#define USE_OPTIMIZED_ACCUM 0
-#endif
-
-
-/**
- * This is called when we fall out of optimized/unscaled accum buffer mode.
- * That is, we convert each unscaled accum buffer value into a scaled value
- * representing the range[-1, 1].
- */
-static void
-rescale_accum( struct gl_context *ctx )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- struct gl_renderbuffer *rb
- = ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer;
- const GLfloat s = swrast->_IntegerAccumScaler * (32767.0F / CHAN_MAXF);
-
- assert(rb);
- assert(rb->_BaseFormat == GL_RGBA);
- /* add other types in future? */
- assert(rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT);
- assert(swrast->_IntegerAccumMode);
-
- if (rb->GetPointer(ctx, rb, 0, 0)) {
- /* directly-addressable memory */
- GLuint y;
- for (y = 0; y < rb->Height; y++) {
- GLuint i;
- GLshort *acc = (GLshort *) rb->GetPointer(ctx, rb, 0, y);
- for (i = 0; i < 4 * rb->Width; i++) {
- acc[i] = (GLshort) (acc[i] * s);
- }
- }
- }
- else {
- /* use get/put row funcs */
- GLuint y;
- for (y = 0; y < rb->Height; y++) {
- GLshort accRow[MAX_WIDTH * 4];
- GLuint i;
- rb->GetRow(ctx, rb, rb->Width, 0, y, accRow);
- for (i = 0; i < 4 * rb->Width; i++) {
- accRow[i] = (GLshort) (accRow[i] * s);
- }
- rb->PutRow(ctx, rb, rb->Width, 0, y, accRow, NULL);
- }
- }
-
- swrast->_IntegerAccumMode = GL_FALSE;
-}
-
-
-
-/**
- * Clear the accumulation Buffer.
- */
-void
-_swrast_clear_accum_buffer( struct gl_context *ctx, struct gl_renderbuffer *rb )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- GLuint x, y, width, height;
-
- /* No accumulation buffer! Not an error. */
- if (!rb || !rb->Data)
- return;
-
- assert(rb->_BaseFormat == GL_RGBA);
- /* add other types in future? */
- assert(rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT);
-
- /* bounds, with scissor */
- x = ctx->DrawBuffer->_Xmin;
- y = ctx->DrawBuffer->_Ymin;
- width = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
- height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
-
- if (rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT) {
- const GLfloat accScale = 32767.0;
- GLshort clearVal[4];
- GLuint i;
-
- clearVal[0] = (GLshort) (ctx->Accum.ClearColor[0] * accScale);
- clearVal[1] = (GLshort) (ctx->Accum.ClearColor[1] * accScale);
- clearVal[2] = (GLshort) (ctx->Accum.ClearColor[2] * accScale);
- clearVal[3] = (GLshort) (ctx->Accum.ClearColor[3] * accScale);
-
- for (i = 0; i < height; i++) {
- rb->PutMonoRow(ctx, rb, width, x, y + i, clearVal, NULL);
- }
- }
- else {
- /* someday support other sizes */
- }
-
- /* update optimized accum state vars */
- if (ctx->Accum.ClearColor[0] == 0.0 && ctx->Accum.ClearColor[1] == 0.0 &&
- ctx->Accum.ClearColor[2] == 0.0 && ctx->Accum.ClearColor[3] == 0.0) {
-#if USE_OPTIMIZED_ACCUM
- swrast->_IntegerAccumMode = GL_TRUE;
-#else
- swrast->_IntegerAccumMode = GL_FALSE;
-#endif
- swrast->_IntegerAccumScaler = 0.0; /* denotes empty accum buffer */
- }
- else {
- swrast->_IntegerAccumMode = GL_FALSE;
- }
-}
-
-
-static void
-accum_add(struct gl_context *ctx, GLfloat value,
- GLint xpos, GLint ypos, GLint width, GLint height )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- struct gl_renderbuffer *rb
- = ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer;
-
- assert(rb);
-
- /* Leave optimized accum buffer mode */
- if (swrast->_IntegerAccumMode)
- rescale_accum(ctx);
-
- if (rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT) {
- const GLshort incr = (GLshort) (value * ACCUM_SCALE16);
- if (rb->GetPointer(ctx, rb, 0, 0)) {
- GLint i, j;
- for (i = 0; i < height; i++) {
- GLshort *acc = (GLshort *) rb->GetPointer(ctx, rb, xpos, ypos + i);
- for (j = 0; j < 4 * width; j++) {
- acc[j] += incr;
- }
- }
- }
- else {
- GLint i, j;
- for (i = 0; i < height; i++) {
- GLshort accRow[4 * MAX_WIDTH];
- rb->GetRow(ctx, rb, width, xpos, ypos + i, accRow);
- for (j = 0; j < 4 * width; j++) {
- accRow[j] += incr;
- }
- rb->PutRow(ctx, rb, width, xpos, ypos + i, accRow, NULL);
- }
- }
- }
- else {
- /* other types someday */
- }
-}
-
-
-static void
-accum_mult(struct gl_context *ctx, GLfloat mult,
- GLint xpos, GLint ypos, GLint width, GLint height )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- struct gl_renderbuffer *rb
- = ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer;
-
- assert(rb);
-
- /* Leave optimized accum buffer mode */
- if (swrast->_IntegerAccumMode)
- rescale_accum(ctx);
-
- if (rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT) {
- if (rb->GetPointer(ctx, rb, 0, 0)) {
- GLint i, j;
- for (i = 0; i < height; i++) {
- GLshort *acc = (GLshort *) rb->GetPointer(ctx, rb, xpos, ypos + i);
- for (j = 0; j < 4 * width; j++) {
- acc[j] = (GLshort) (acc[j] * mult);
- }
- }
- }
- else {
- GLint i, j;
- for (i = 0; i < height; i++) {
- GLshort accRow[4 * MAX_WIDTH];
- rb->GetRow(ctx, rb, width, xpos, ypos + i, accRow);
- for (j = 0; j < 4 * width; j++) {
- accRow[j] = (GLshort) (accRow[j] * mult);
- }
- rb->PutRow(ctx, rb, width, xpos, ypos + i, accRow, NULL);
- }
- }
- }
- else {
- /* other types someday */
- }
-}
-
-
-
-static void
-accum_accum(struct gl_context *ctx, GLfloat value,
- GLint xpos, GLint ypos, GLint width, GLint height )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- struct gl_renderbuffer *rb
- = ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer;
- const GLboolean directAccess = (rb->GetPointer(ctx, rb, 0, 0) != NULL);
-
- assert(rb);
-
- if (!ctx->ReadBuffer->_ColorReadBuffer) {
- /* no read buffer - OK */
- return;
- }
-
- /* May have to leave optimized accum buffer mode */
- if (swrast->_IntegerAccumScaler == 0.0 && value > 0.0 && value <= 1.0)
- swrast->_IntegerAccumScaler = value;
- if (swrast->_IntegerAccumMode && value != swrast->_IntegerAccumScaler)
- rescale_accum(ctx);
-
- if (rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT) {
- const GLfloat scale = value * ACCUM_SCALE16 / CHAN_MAXF;
- GLshort accumRow[4 * MAX_WIDTH];
- GLchan rgba[MAX_WIDTH][4];
- GLint i;
-
- for (i = 0; i < height; i++) {
- GLshort *acc;
- if (directAccess) {
- acc = (GLshort *) rb->GetPointer(ctx, rb, xpos, ypos + i);
- }
- else {
- rb->GetRow(ctx, rb, width, xpos, ypos + i, accumRow);
- acc = accumRow;
- }
-
- /* read colors from color buffer */
- _swrast_read_rgba_span(ctx, ctx->ReadBuffer->_ColorReadBuffer, width,
- xpos, ypos + i, CHAN_TYPE, rgba);
-
- /* do accumulation */
- if (swrast->_IntegerAccumMode) {
- /* simply add integer color values into accum buffer */
- GLint j;
- for (j = 0; j < width; j++) {
- acc[j * 4 + 0] += rgba[j][RCOMP];
- acc[j * 4 + 1] += rgba[j][GCOMP];
- acc[j * 4 + 2] += rgba[j][BCOMP];
- acc[j * 4 + 3] += rgba[j][ACOMP];
- }
- }
- else {
- /* scaled integer (or float) accum buffer */
- GLint j;
- for (j = 0; j < width; j++) {
- acc[j * 4 + 0] += (GLshort) ((GLfloat) rgba[j][RCOMP] * scale);
- acc[j * 4 + 1] += (GLshort) ((GLfloat) rgba[j][GCOMP] * scale);
- acc[j * 4 + 2] += (GLshort) ((GLfloat) rgba[j][BCOMP] * scale);
- acc[j * 4 + 3] += (GLshort) ((GLfloat) rgba[j][ACOMP] * scale);
- }
- }
-
- if (!directAccess) {
- rb->PutRow(ctx, rb, width, xpos, ypos + i, accumRow, NULL);
- }
- }
- }
- else {
- /* other types someday */
- }
-}
-
-
-
-static void
-accum_load(struct gl_context *ctx, GLfloat value,
- GLint xpos, GLint ypos, GLint width, GLint height )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- struct gl_renderbuffer *rb
- = ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer;
- const GLboolean directAccess = (rb->GetPointer(ctx, rb, 0, 0) != NULL);
-
- assert(rb);
-
- if (!ctx->ReadBuffer->_ColorReadBuffer) {
- /* no read buffer - OK */
- return;
- }
-
- /* This is a change to go into optimized accum buffer mode */
- if (value > 0.0 && value <= 1.0) {
-#if USE_OPTIMIZED_ACCUM
- swrast->_IntegerAccumMode = GL_TRUE;
-#else
- swrast->_IntegerAccumMode = GL_FALSE;
-#endif
- swrast->_IntegerAccumScaler = value;
- }
- else {
- swrast->_IntegerAccumMode = GL_FALSE;
- swrast->_IntegerAccumScaler = 0.0;
- }
-
- if (rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT) {
- const GLfloat scale = value * ACCUM_SCALE16 / CHAN_MAXF;
- GLshort accumRow[4 * MAX_WIDTH];
- GLchan rgba[MAX_WIDTH][4];
- GLint i;
-
- for (i = 0; i < height; i++) {
- GLshort *acc;
- if (directAccess) {
- acc = (GLshort *) rb->GetPointer(ctx, rb, xpos, ypos + i);
- }
- else {
- rb->GetRow(ctx, rb, width, xpos, ypos + i, accumRow);
- acc = accumRow;
- }
-
- /* read colors from color buffer */
- _swrast_read_rgba_span(ctx, ctx->ReadBuffer->_ColorReadBuffer, width,
- xpos, ypos + i, CHAN_TYPE, rgba);
-
- /* do load */
- if (swrast->_IntegerAccumMode) {
- /* just copy values in */
- GLint j;
- assert(swrast->_IntegerAccumScaler > 0.0);
- assert(swrast->_IntegerAccumScaler <= 1.0);
- for (j = 0; j < width; j++) {
- acc[j * 4 + 0] = rgba[j][RCOMP];
- acc[j * 4 + 1] = rgba[j][GCOMP];
- acc[j * 4 + 2] = rgba[j][BCOMP];
- acc[j * 4 + 3] = rgba[j][ACOMP];
- }
- }
- else {
- /* scaled integer (or float) accum buffer */
- GLint j;
- for (j = 0; j < width; j++) {
- acc[j * 4 + 0] = (GLshort) ((GLfloat) rgba[j][RCOMP] * scale);
- acc[j * 4 + 1] = (GLshort) ((GLfloat) rgba[j][GCOMP] * scale);
- acc[j * 4 + 2] = (GLshort) ((GLfloat) rgba[j][BCOMP] * scale);
- acc[j * 4 + 3] = (GLshort) ((GLfloat) rgba[j][ACOMP] * scale);
- }
- }
-
- if (!directAccess) {
- rb->PutRow(ctx, rb, width, xpos, ypos + i, accumRow, NULL);
- }
- }
- }
-}
-
-
-static void
-accum_return(struct gl_context *ctx, GLfloat value,
- GLint xpos, GLint ypos, GLint width, GLint height )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- struct gl_framebuffer *fb = ctx->DrawBuffer;
- struct gl_renderbuffer *accumRb = fb->Attachment[BUFFER_ACCUM].Renderbuffer;
- const GLboolean directAccess
- = (accumRb->GetPointer(ctx, accumRb, 0, 0) != NULL);
-
- static GLchan multTable[32768];
- static GLfloat prevMult = 0.0;
- const GLfloat mult = swrast->_IntegerAccumScaler;
- const GLint max = MIN2((GLint) (256 / mult), 32767);
-
- /* May have to leave optimized accum buffer mode */
- if (swrast->_IntegerAccumMode && value != 1.0)
- rescale_accum(ctx);
-
- if (swrast->_IntegerAccumMode && swrast->_IntegerAccumScaler > 0) {
- /* build lookup table to avoid many floating point multiplies */
- GLint j;
- assert(swrast->_IntegerAccumScaler <= 1.0);
- if (mult != prevMult) {
- for (j = 0; j < max; j++)
- multTable[j] = IROUND((GLfloat) j * mult);
- prevMult = mult;
- }
- }
-
- if (accumRb->DataType == GL_SHORT ||
- accumRb->DataType == GL_UNSIGNED_SHORT) {
- const GLfloat scale = value * CHAN_MAXF / ACCUM_SCALE16;
- GLuint buffer;
- GLint i;
-
- /* XXX maybe transpose the 'i' and 'buffer' loops??? */
- for (i = 0; i < height; i++) {
- GLshort accumRow[4 * MAX_WIDTH];
- GLshort *acc;
- SWspan span;
-
- /* init color span */
- INIT_SPAN(span, GL_BITMAP);
- span.end = width;
- span.arrayMask = SPAN_RGBA;
- span.x = xpos;
- span.y = ypos + i;
-
- if (directAccess) {
- acc = (GLshort *) accumRb->GetPointer(ctx, accumRb, xpos, ypos +i);
- }
- else {
- accumRb->GetRow(ctx, accumRb, width, xpos, ypos + i, accumRow);
- acc = accumRow;
- }
-
- /* get the colors to return */
- if (swrast->_IntegerAccumMode) {
- GLint j;
- for (j = 0; j < width; j++) {
- ASSERT(acc[j * 4 + 0] < max);
- ASSERT(acc[j * 4 + 1] < max);
- ASSERT(acc[j * 4 + 2] < max);
- ASSERT(acc[j * 4 + 3] < max);
- span.array->rgba[j][RCOMP] = multTable[acc[j * 4 + 0]];
- span.array->rgba[j][GCOMP] = multTable[acc[j * 4 + 1]];
- span.array->rgba[j][BCOMP] = multTable[acc[j * 4 + 2]];
- span.array->rgba[j][ACOMP] = multTable[acc[j * 4 + 3]];
- }
- }
- else {
- /* scaled integer (or float) accum buffer */
- GLint j;
- for (j = 0; j < width; j++) {
-#if CHAN_BITS==32
- GLchan r = acc[j * 4 + 0] * scale;
- GLchan g = acc[j * 4 + 1] * scale;
- GLchan b = acc[j * 4 + 2] * scale;
- GLchan a = acc[j * 4 + 3] * scale;
-#else
- GLint r = IROUND( (GLfloat) (acc[j * 4 + 0]) * scale );
- GLint g = IROUND( (GLfloat) (acc[j * 4 + 1]) * scale );
- GLint b = IROUND( (GLfloat) (acc[j * 4 + 2]) * scale );
- GLint a = IROUND( (GLfloat) (acc[j * 4 + 3]) * scale );
-#endif
- span.array->rgba[j][RCOMP] = CLAMP( r, 0, CHAN_MAX );
- span.array->rgba[j][GCOMP] = CLAMP( g, 0, CHAN_MAX );
- span.array->rgba[j][BCOMP] = CLAMP( b, 0, CHAN_MAX );
- span.array->rgba[j][ACOMP] = CLAMP( a, 0, CHAN_MAX );
- }
- }
-
- /* store colors */
- for (buffer = 0; buffer < fb->_NumColorDrawBuffers; buffer++) {
- struct gl_renderbuffer *rb = fb->_ColorDrawBuffers[buffer];
- const GLboolean masking = (!ctx->Color.ColorMask[buffer][RCOMP] ||
- !ctx->Color.ColorMask[buffer][GCOMP] ||
- !ctx->Color.ColorMask[buffer][BCOMP] ||
- !ctx->Color.ColorMask[buffer][ACOMP]);
- if (masking) {
- _swrast_mask_rgba_span(ctx, rb, &span, buffer);
- }
- rb->PutRow(ctx, rb, width, xpos, ypos + i, span.array->rgba, NULL);
- }
- }
- }
- else {
- /* other types someday */
- }
-}
-
-
-
-/**
- * Software fallback for glAccum.
- */
-void
-_swrast_Accum(struct gl_context *ctx, GLenum op, GLfloat value)
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- GLint xpos, ypos, width, height;
-
- if (swrast->NewState)
- _swrast_validate_derived( ctx );
-
- if (!ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer) {
- _mesa_warning(ctx, "Calling glAccum() without an accumulation buffer");
- return;
- }
-
- swrast_render_start(ctx);
-
- /* Compute region after calling swrast_render_start() so that we know the
- * drawbuffer's size/bounds are up to date.
- */
- xpos = ctx->DrawBuffer->_Xmin;
- ypos = ctx->DrawBuffer->_Ymin;
- width = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin;
- height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin;
-
- switch (op) {
- case GL_ADD:
- if (value != 0.0F) {
- accum_add(ctx, value, xpos, ypos, width, height);
- }
- break;
- case GL_MULT:
- if (value != 1.0F) {
- accum_mult(ctx, value, xpos, ypos, width, height);
- }
- break;
- case GL_ACCUM:
- if (value != 0.0F) {
- accum_accum(ctx, value, xpos, ypos, width, height);
- }
- break;
- case GL_LOAD:
- accum_load(ctx, value, xpos, ypos, width, height);
- break;
- case GL_RETURN:
- accum_return(ctx, value, xpos, ypos, width, height);
- break;
- default:
- _mesa_problem(ctx, "invalid mode in _swrast_Accum()");
- break;
- }
-
- swrast_render_finish(ctx);
-}
+/* + * Mesa 3-D graphics library + * Version: 6.5.2 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#include "main/glheader.h" +#include "main/condrender.h" +#include "main/context.h" +#include "main/macros.h" +#include "main/imports.h" + +#include "s_accum.h" +#include "s_context.h" +#include "s_masking.h" +#include "s_span.h" + + +/* XXX this would have to change for accum buffers with more or less + * than 16 bits per color channel. + */ +#define ACCUM_SCALE16 32767.0F + + +/* + * Accumulation buffer notes + * + * Normally, accumulation buffer values are GLshorts with values in + * [-32767, 32767] which represent floating point colors in [-1, 1], + * as defined by the OpenGL specification. + * + * We optimize for the common case used for full-scene antialiasing: + * // start with accum buffer cleared to zero + * glAccum(GL_LOAD, w); // or GL_ACCUM the first image + * glAccum(GL_ACCUM, w); + * ... + * glAccum(GL_ACCUM, w); + * glAccum(GL_RETURN, 1.0); + * That is, we start with an empty accumulation buffer and accumulate + * n images, each with weight w = 1/n. + * In this scenario, we can simply store unscaled integer values in + * the accum buffer instead of scaled integers. We'll also keep track + * of the w value so when we do GL_RETURN we simply divide the accumulated + * values by n (n=1/w). + * This lets us avoid _many_ int->float->int conversions. + */ + + +#if CHAN_BITS == 8 +/* enable the optimization */ +#define USE_OPTIMIZED_ACCUM 1 +#else +#define USE_OPTIMIZED_ACCUM 0 +#endif + + +/** + * This is called when we fall out of optimized/unscaled accum buffer mode. + * That is, we convert each unscaled accum buffer value into a scaled value + * representing the range[-1, 1]. + */ +static void +rescale_accum( struct gl_context *ctx ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + struct gl_renderbuffer *rb + = ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer; + const GLfloat s = swrast->_IntegerAccumScaler * (32767.0F / CHAN_MAXF); + + assert(rb); + assert(rb->_BaseFormat == GL_RGBA); + /* add other types in future? */ + assert(rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT); + assert(swrast->_IntegerAccumMode); + + if (rb->GetPointer(ctx, rb, 0, 0)) { + /* directly-addressable memory */ + GLuint y; + for (y = 0; y < rb->Height; y++) { + GLuint i; + GLshort *acc = (GLshort *) rb->GetPointer(ctx, rb, 0, y); + for (i = 0; i < 4 * rb->Width; i++) { + acc[i] = (GLshort) (acc[i] * s); + } + } + } + else { + /* use get/put row funcs */ + GLuint y; + for (y = 0; y < rb->Height; y++) { + GLshort accRow[MAX_WIDTH * 4]; + GLuint i; + rb->GetRow(ctx, rb, rb->Width, 0, y, accRow); + for (i = 0; i < 4 * rb->Width; i++) { + accRow[i] = (GLshort) (accRow[i] * s); + } + rb->PutRow(ctx, rb, rb->Width, 0, y, accRow, NULL); + } + } + + swrast->_IntegerAccumMode = GL_FALSE; +} + + + +/** + * Clear the accumulation Buffer. + */ +void +_swrast_clear_accum_buffer( struct gl_context *ctx, struct gl_renderbuffer *rb ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + GLuint x, y, width, height; + + /* No accumulation buffer! Not an error. */ + if (!rb || !rb->Data) + return; + + assert(rb->_BaseFormat == GL_RGBA); + /* add other types in future? */ + assert(rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT); + + /* bounds, with scissor */ + x = ctx->DrawBuffer->_Xmin; + y = ctx->DrawBuffer->_Ymin; + width = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin; + height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin; + + if (rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT) { + const GLfloat accScale = 32767.0; + GLshort clearVal[4]; + GLuint i; + + clearVal[0] = (GLshort) (ctx->Accum.ClearColor[0] * accScale); + clearVal[1] = (GLshort) (ctx->Accum.ClearColor[1] * accScale); + clearVal[2] = (GLshort) (ctx->Accum.ClearColor[2] * accScale); + clearVal[3] = (GLshort) (ctx->Accum.ClearColor[3] * accScale); + + for (i = 0; i < height; i++) { + rb->PutMonoRow(ctx, rb, width, x, y + i, clearVal, NULL); + } + } + else { + /* someday support other sizes */ + } + + /* update optimized accum state vars */ + if (ctx->Accum.ClearColor[0] == 0.0 && ctx->Accum.ClearColor[1] == 0.0 && + ctx->Accum.ClearColor[2] == 0.0 && ctx->Accum.ClearColor[3] == 0.0) { +#if USE_OPTIMIZED_ACCUM + swrast->_IntegerAccumMode = GL_TRUE; +#else + swrast->_IntegerAccumMode = GL_FALSE; +#endif + swrast->_IntegerAccumScaler = 0.0; /* denotes empty accum buffer */ + } + else { + swrast->_IntegerAccumMode = GL_FALSE; + } +} + + +static void +accum_add(struct gl_context *ctx, GLfloat value, + GLint xpos, GLint ypos, GLint width, GLint height ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + struct gl_renderbuffer *rb + = ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer; + + assert(rb); + + /* Leave optimized accum buffer mode */ + if (swrast->_IntegerAccumMode) + rescale_accum(ctx); + + if (rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT) { + const GLshort incr = (GLshort) (value * ACCUM_SCALE16); + if (rb->GetPointer(ctx, rb, 0, 0)) { + GLint i, j; + for (i = 0; i < height; i++) { + GLshort *acc = (GLshort *) rb->GetPointer(ctx, rb, xpos, ypos + i); + for (j = 0; j < 4 * width; j++) { + acc[j] += incr; + } + } + } + else { + GLint i, j; + for (i = 0; i < height; i++) { + GLshort accRow[4 * MAX_WIDTH]; + rb->GetRow(ctx, rb, width, xpos, ypos + i, accRow); + for (j = 0; j < 4 * width; j++) { + accRow[j] += incr; + } + rb->PutRow(ctx, rb, width, xpos, ypos + i, accRow, NULL); + } + } + } + else { + /* other types someday */ + } +} + + +static void +accum_mult(struct gl_context *ctx, GLfloat mult, + GLint xpos, GLint ypos, GLint width, GLint height ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + struct gl_renderbuffer *rb + = ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer; + + assert(rb); + + /* Leave optimized accum buffer mode */ + if (swrast->_IntegerAccumMode) + rescale_accum(ctx); + + if (rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT) { + if (rb->GetPointer(ctx, rb, 0, 0)) { + GLint i, j; + for (i = 0; i < height; i++) { + GLshort *acc = (GLshort *) rb->GetPointer(ctx, rb, xpos, ypos + i); + for (j = 0; j < 4 * width; j++) { + acc[j] = (GLshort) (acc[j] * mult); + } + } + } + else { + GLint i, j; + for (i = 0; i < height; i++) { + GLshort accRow[4 * MAX_WIDTH]; + rb->GetRow(ctx, rb, width, xpos, ypos + i, accRow); + for (j = 0; j < 4 * width; j++) { + accRow[j] = (GLshort) (accRow[j] * mult); + } + rb->PutRow(ctx, rb, width, xpos, ypos + i, accRow, NULL); + } + } + } + else { + /* other types someday */ + } +} + + + +static void +accum_accum(struct gl_context *ctx, GLfloat value, + GLint xpos, GLint ypos, GLint width, GLint height ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + struct gl_renderbuffer *rb + = ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer; + const GLboolean directAccess = (rb->GetPointer(ctx, rb, 0, 0) != NULL); + + assert(rb); + + if (!ctx->ReadBuffer->_ColorReadBuffer) { + /* no read buffer - OK */ + return; + } + + /* May have to leave optimized accum buffer mode */ + if (swrast->_IntegerAccumScaler == 0.0 && value > 0.0 && value <= 1.0) + swrast->_IntegerAccumScaler = value; + if (swrast->_IntegerAccumMode && value != swrast->_IntegerAccumScaler) + rescale_accum(ctx); + + if (rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT) { + const GLfloat scale = value * ACCUM_SCALE16 / CHAN_MAXF; + GLshort accumRow[4 * MAX_WIDTH]; + GLchan rgba[MAX_WIDTH][4]; + GLint i; + + for (i = 0; i < height; i++) { + GLshort *acc; + if (directAccess) { + acc = (GLshort *) rb->GetPointer(ctx, rb, xpos, ypos + i); + } + else { + rb->GetRow(ctx, rb, width, xpos, ypos + i, accumRow); + acc = accumRow; + } + + /* read colors from color buffer */ + _swrast_read_rgba_span(ctx, ctx->ReadBuffer->_ColorReadBuffer, width, + xpos, ypos + i, CHAN_TYPE, rgba); + + /* do accumulation */ + if (swrast->_IntegerAccumMode) { + /* simply add integer color values into accum buffer */ + GLint j; + for (j = 0; j < width; j++) { + acc[j * 4 + 0] += rgba[j][RCOMP]; + acc[j * 4 + 1] += rgba[j][GCOMP]; + acc[j * 4 + 2] += rgba[j][BCOMP]; + acc[j * 4 + 3] += rgba[j][ACOMP]; + } + } + else { + /* scaled integer (or float) accum buffer */ + GLint j; + for (j = 0; j < width; j++) { + acc[j * 4 + 0] += (GLshort) ((GLfloat) rgba[j][RCOMP] * scale); + acc[j * 4 + 1] += (GLshort) ((GLfloat) rgba[j][GCOMP] * scale); + acc[j * 4 + 2] += (GLshort) ((GLfloat) rgba[j][BCOMP] * scale); + acc[j * 4 + 3] += (GLshort) ((GLfloat) rgba[j][ACOMP] * scale); + } + } + + if (!directAccess) { + rb->PutRow(ctx, rb, width, xpos, ypos + i, accumRow, NULL); + } + } + } + else { + /* other types someday */ + } +} + + + +static void +accum_load(struct gl_context *ctx, GLfloat value, + GLint xpos, GLint ypos, GLint width, GLint height ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + struct gl_renderbuffer *rb + = ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer; + const GLboolean directAccess = (rb->GetPointer(ctx, rb, 0, 0) != NULL); + + assert(rb); + + if (!ctx->ReadBuffer->_ColorReadBuffer) { + /* no read buffer - OK */ + return; + } + + /* This is a change to go into optimized accum buffer mode */ + if (value > 0.0 && value <= 1.0) { +#if USE_OPTIMIZED_ACCUM + swrast->_IntegerAccumMode = GL_TRUE; +#else + swrast->_IntegerAccumMode = GL_FALSE; +#endif + swrast->_IntegerAccumScaler = value; + } + else { + swrast->_IntegerAccumMode = GL_FALSE; + swrast->_IntegerAccumScaler = 0.0; + } + + if (rb->DataType == GL_SHORT || rb->DataType == GL_UNSIGNED_SHORT) { + const GLfloat scale = value * ACCUM_SCALE16 / CHAN_MAXF; + GLshort accumRow[4 * MAX_WIDTH]; + GLchan rgba[MAX_WIDTH][4]; + GLint i; + + for (i = 0; i < height; i++) { + GLshort *acc; + if (directAccess) { + acc = (GLshort *) rb->GetPointer(ctx, rb, xpos, ypos + i); + } + else { + rb->GetRow(ctx, rb, width, xpos, ypos + i, accumRow); + acc = accumRow; + } + + /* read colors from color buffer */ + _swrast_read_rgba_span(ctx, ctx->ReadBuffer->_ColorReadBuffer, width, + xpos, ypos + i, CHAN_TYPE, rgba); + + /* do load */ + if (swrast->_IntegerAccumMode) { + /* just copy values in */ + GLint j; + assert(swrast->_IntegerAccumScaler > 0.0); + assert(swrast->_IntegerAccumScaler <= 1.0); + for (j = 0; j < width; j++) { + acc[j * 4 + 0] = rgba[j][RCOMP]; + acc[j * 4 + 1] = rgba[j][GCOMP]; + acc[j * 4 + 2] = rgba[j][BCOMP]; + acc[j * 4 + 3] = rgba[j][ACOMP]; + } + } + else { + /* scaled integer (or float) accum buffer */ + GLint j; + for (j = 0; j < width; j++) { + acc[j * 4 + 0] = (GLshort) ((GLfloat) rgba[j][RCOMP] * scale); + acc[j * 4 + 1] = (GLshort) ((GLfloat) rgba[j][GCOMP] * scale); + acc[j * 4 + 2] = (GLshort) ((GLfloat) rgba[j][BCOMP] * scale); + acc[j * 4 + 3] = (GLshort) ((GLfloat) rgba[j][ACOMP] * scale); + } + } + + if (!directAccess) { + rb->PutRow(ctx, rb, width, xpos, ypos + i, accumRow, NULL); + } + } + } +} + + +static void +accum_return(struct gl_context *ctx, GLfloat value, + GLint xpos, GLint ypos, GLint width, GLint height ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + struct gl_framebuffer *fb = ctx->DrawBuffer; + struct gl_renderbuffer *accumRb = fb->Attachment[BUFFER_ACCUM].Renderbuffer; + const GLboolean directAccess + = (accumRb->GetPointer(ctx, accumRb, 0, 0) != NULL); + + static GLchan multTable[32768]; + static GLfloat prevMult = 0.0; + const GLfloat mult = swrast->_IntegerAccumScaler; + const GLint max = MIN2((GLint) (256 / mult), 32767); + + /* May have to leave optimized accum buffer mode */ + if (swrast->_IntegerAccumMode && value != 1.0) + rescale_accum(ctx); + + if (swrast->_IntegerAccumMode && swrast->_IntegerAccumScaler > 0) { + /* build lookup table to avoid many floating point multiplies */ + GLint j; + assert(swrast->_IntegerAccumScaler <= 1.0); + if (mult != prevMult) { + for (j = 0; j < max; j++) + multTable[j] = IROUND((GLfloat) j * mult); + prevMult = mult; + } + } + + if (accumRb->DataType == GL_SHORT || + accumRb->DataType == GL_UNSIGNED_SHORT) { + const GLfloat scale = value * CHAN_MAXF / ACCUM_SCALE16; + GLuint buffer; + GLint i; + + /* XXX maybe transpose the 'i' and 'buffer' loops??? */ + for (i = 0; i < height; i++) { + GLshort accumRow[4 * MAX_WIDTH]; + GLshort *acc; + SWspan span; + + /* init color span */ + INIT_SPAN(span, GL_BITMAP); + span.end = width; + span.arrayMask = SPAN_RGBA; + span.x = xpos; + span.y = ypos + i; + + if (directAccess) { + acc = (GLshort *) accumRb->GetPointer(ctx, accumRb, xpos, ypos +i); + } + else { + accumRb->GetRow(ctx, accumRb, width, xpos, ypos + i, accumRow); + acc = accumRow; + } + + /* get the colors to return */ + if (swrast->_IntegerAccumMode) { + GLint j; + for (j = 0; j < width; j++) { + ASSERT(acc[j * 4 + 0] < max); + ASSERT(acc[j * 4 + 1] < max); + ASSERT(acc[j * 4 + 2] < max); + ASSERT(acc[j * 4 + 3] < max); + span.array->rgba[j][RCOMP] = multTable[acc[j * 4 + 0]]; + span.array->rgba[j][GCOMP] = multTable[acc[j * 4 + 1]]; + span.array->rgba[j][BCOMP] = multTable[acc[j * 4 + 2]]; + span.array->rgba[j][ACOMP] = multTable[acc[j * 4 + 3]]; + } + } + else { + /* scaled integer (or float) accum buffer */ + GLint j; + for (j = 0; j < width; j++) { +#if CHAN_BITS==32 + GLchan r = acc[j * 4 + 0] * scale; + GLchan g = acc[j * 4 + 1] * scale; + GLchan b = acc[j * 4 + 2] * scale; + GLchan a = acc[j * 4 + 3] * scale; +#else + GLint r = IROUND( (GLfloat) (acc[j * 4 + 0]) * scale ); + GLint g = IROUND( (GLfloat) (acc[j * 4 + 1]) * scale ); + GLint b = IROUND( (GLfloat) (acc[j * 4 + 2]) * scale ); + GLint a = IROUND( (GLfloat) (acc[j * 4 + 3]) * scale ); +#endif + span.array->rgba[j][RCOMP] = CLAMP( r, 0, CHAN_MAX ); + span.array->rgba[j][GCOMP] = CLAMP( g, 0, CHAN_MAX ); + span.array->rgba[j][BCOMP] = CLAMP( b, 0, CHAN_MAX ); + span.array->rgba[j][ACOMP] = CLAMP( a, 0, CHAN_MAX ); + } + } + + /* store colors */ + for (buffer = 0; buffer < fb->_NumColorDrawBuffers; buffer++) { + struct gl_renderbuffer *rb = fb->_ColorDrawBuffers[buffer]; + const GLboolean masking = (!ctx->Color.ColorMask[buffer][RCOMP] || + !ctx->Color.ColorMask[buffer][GCOMP] || + !ctx->Color.ColorMask[buffer][BCOMP] || + !ctx->Color.ColorMask[buffer][ACOMP]); + if (masking) { + _swrast_mask_rgba_span(ctx, rb, &span, buffer); + } + rb->PutRow(ctx, rb, width, xpos, ypos + i, span.array->rgba, NULL); + } + } + } + else { + /* other types someday */ + } +} + + + +/** + * Software fallback for glAccum. + */ +void +_swrast_Accum(struct gl_context *ctx, GLenum op, GLfloat value) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + GLint xpos, ypos, width, height; + + if (swrast->NewState) + _swrast_validate_derived( ctx ); + + if (!ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer) { + _mesa_warning(ctx, "Calling glAccum() without an accumulation buffer"); + return; + } + + if (!_mesa_check_conditional_render(ctx)) + return; + + swrast_render_start(ctx); + + /* Compute region after calling swrast_render_start() so that we know the + * drawbuffer's size/bounds are up to date. + */ + xpos = ctx->DrawBuffer->_Xmin; + ypos = ctx->DrawBuffer->_Ymin; + width = ctx->DrawBuffer->_Xmax - ctx->DrawBuffer->_Xmin; + height = ctx->DrawBuffer->_Ymax - ctx->DrawBuffer->_Ymin; + + switch (op) { + case GL_ADD: + if (value != 0.0F) { + accum_add(ctx, value, xpos, ypos, width, height); + } + break; + case GL_MULT: + if (value != 1.0F) { + accum_mult(ctx, value, xpos, ypos, width, height); + } + break; + case GL_ACCUM: + if (value != 0.0F) { + accum_accum(ctx, value, xpos, ypos, width, height); + } + break; + case GL_LOAD: + accum_load(ctx, value, xpos, ypos, width, height); + break; + case GL_RETURN: + accum_return(ctx, value, xpos, ypos, width, height); + break; + default: + _mesa_problem(ctx, "invalid mode in _swrast_Accum()"); + break; + } + + swrast_render_finish(ctx); +} diff --git a/mesalib/src/mesa/swrast/s_context.c b/mesalib/src/mesa/swrast/s_context.c index b0c9880b1..def1531d7 100644 --- a/mesalib/src/mesa/swrast/s_context.c +++ b/mesalib/src/mesa/swrast/s_context.c @@ -1,957 +1,949 @@ -/*
- * Mesa 3-D graphics library
- * Version: 7.1
- *
- * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- * Keith Whitwell <keith@tungstengraphics.com>
- * Brian Paul
- */
-
-#include "main/imports.h"
-#include "main/bufferobj.h"
-#include "main/colormac.h"
-#include "main/mtypes.h"
-#include "main/teximage.h"
-#include "program/prog_parameter.h"
-#include "program/prog_statevars.h"
-#include "swrast.h"
-#include "s_blend.h"
-#include "s_context.h"
-#include "s_lines.h"
-#include "s_points.h"
-#include "s_span.h"
-#include "s_triangle.h"
-#include "s_texfilter.h"
-
-
-/**
- * Recompute the value of swrast->_RasterMask, etc. according to
- * the current context. The _RasterMask field can be easily tested by
- * drivers to determine certain basic GL state (does the primitive need
- * stenciling, logic-op, fog, etc?).
- */
-static void
-_swrast_update_rasterflags( struct gl_context *ctx )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- GLbitfield rasterMask = 0;
- GLuint i;
-
- if (ctx->Color.AlphaEnabled) rasterMask |= ALPHATEST_BIT;
- if (ctx->Color.BlendEnabled) rasterMask |= BLEND_BIT;
- if (ctx->Depth.Test) rasterMask |= DEPTH_BIT;
- if (swrast->_FogEnabled) rasterMask |= FOG_BIT;
- if (ctx->Scissor.Enabled) rasterMask |= CLIP_BIT;
- if (ctx->Stencil._Enabled) rasterMask |= STENCIL_BIT;
- for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
- if (!ctx->Color.ColorMask[i][0] ||
- !ctx->Color.ColorMask[i][1] ||
- !ctx->Color.ColorMask[i][2] ||
- !ctx->Color.ColorMask[i][3]) {
- rasterMask |= MASKING_BIT;
- break;
- }
- }
- if (ctx->Color._LogicOpEnabled) rasterMask |= LOGIC_OP_BIT;
- if (ctx->Texture._EnabledUnits) rasterMask |= TEXTURE_BIT;
- if ( ctx->Viewport.X < 0
- || ctx->Viewport.X + ctx->Viewport.Width > (GLint) ctx->DrawBuffer->Width
- || ctx->Viewport.Y < 0
- || ctx->Viewport.Y + ctx->Viewport.Height > (GLint) ctx->DrawBuffer->Height) {
- rasterMask |= CLIP_BIT;
- }
-
- if (ctx->Query.CurrentOcclusionObject)
- rasterMask |= OCCLUSION_BIT;
-
-
- /* If we're not drawing to exactly one color buffer set the
- * MULTI_DRAW_BIT flag. Also set it if we're drawing to no
- * buffers or the RGBA or CI mask disables all writes.
- */
- if (ctx->DrawBuffer->_NumColorDrawBuffers != 1) {
- /* more than one color buffer designated for writing (or zero buffers) */
- rasterMask |= MULTI_DRAW_BIT;
- }
-
- for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
- if (ctx->Color.ColorMask[i][0] +
- ctx->Color.ColorMask[i][1] +
- ctx->Color.ColorMask[i][2] +
- ctx->Color.ColorMask[i][3] == 0) {
- rasterMask |= MULTI_DRAW_BIT; /* all RGBA channels disabled */
- break;
- }
- }
-
-
- if (ctx->FragmentProgram._Current) {
- rasterMask |= FRAGPROG_BIT;
- }
-
- if (ctx->ATIFragmentShader._Enabled) {
- rasterMask |= ATIFRAGSHADER_BIT;
- }
-
-#if CHAN_TYPE == GL_FLOAT
- if (ctx->Color.ClampFragmentColor == GL_TRUE) {
- rasterMask |= CLAMPING_BIT;
- }
-#endif
-
- SWRAST_CONTEXT(ctx)->_RasterMask = rasterMask;
-}
-
-
-/**
- * Examine polygon cull state to compute the _BackfaceCullSign field.
- * _BackfaceCullSign will be 0 if no culling, -1 if culling back-faces,
- * and 1 if culling front-faces. The Polygon FrontFace state also
- * factors in.
- */
-static void
-_swrast_update_polygon( struct gl_context *ctx )
-{
- GLfloat backface_sign;
-
- if (ctx->Polygon.CullFlag) {
- switch (ctx->Polygon.CullFaceMode) {
- case GL_BACK:
- backface_sign = -1.0F;
- break;
- case GL_FRONT:
- backface_sign = 1.0F;
- break;
- case GL_FRONT_AND_BACK:
- /* fallthrough */
- default:
- backface_sign = 0.0F;
- }
- }
- else {
- backface_sign = 0.0F;
- }
-
- SWRAST_CONTEXT(ctx)->_BackfaceCullSign = backface_sign;
-
- /* This is for front/back-face determination, but not for culling */
- SWRAST_CONTEXT(ctx)->_BackfaceSign
- = (ctx->Polygon.FrontFace == GL_CW) ? -1.0F : 1.0F;
-}
-
-
-
-/**
- * Update the _PreferPixelFog field to indicate if we need to compute
- * fog blend factors (from the fog coords) per-fragment.
- */
-static void
-_swrast_update_fog_hint( struct gl_context *ctx )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- swrast->_PreferPixelFog = (!swrast->AllowVertexFog ||
- ctx->FragmentProgram._Current ||
- (ctx->Hint.Fog == GL_NICEST &&
- swrast->AllowPixelFog));
-}
-
-
-
-/**
- * Update the swrast->_TextureCombinePrimary flag.
- */
-static void
-_swrast_update_texture_env( struct gl_context *ctx )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- GLuint i;
-
- swrast->_TextureCombinePrimary = GL_FALSE;
-
- for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
- const struct gl_tex_env_combine_state *combine =
- ctx->Texture.Unit[i]._CurrentCombine;
- GLuint term;
- for (term = 0; term < combine->_NumArgsRGB; term++) {
- if (combine->SourceRGB[term] == GL_PRIMARY_COLOR) {
- swrast->_TextureCombinePrimary = GL_TRUE;
- return;
- }
- if (combine->SourceA[term] == GL_PRIMARY_COLOR) {
- swrast->_TextureCombinePrimary = GL_TRUE;
- return;
- }
- }
- }
-}
-
-
-/**
- * Determine if we can defer texturing/shading until after Z/stencil
- * testing. This potentially allows us to skip texturing/shading for
- * lots of fragments.
- */
-static void
-_swrast_update_deferred_texture(struct gl_context *ctx)
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- if (ctx->Color.AlphaEnabled) {
- /* alpha test depends on post-texture/shader colors */
- swrast->_DeferredTexture = GL_FALSE;
- }
- else {
- const struct gl_fragment_program *fprog
- = ctx->FragmentProgram._Current;
- if (fprog && (fprog->Base.OutputsWritten & (1 << FRAG_RESULT_DEPTH))) {
- /* Z comes from fragment program/shader */
- swrast->_DeferredTexture = GL_FALSE;
- }
- else if (fprog && fprog->UsesKill) {
- swrast->_DeferredTexture = GL_FALSE;
- }
- else if (ctx->Query.CurrentOcclusionObject) {
- /* occlusion query depends on shader discard/kill results */
- swrast->_DeferredTexture = GL_FALSE;
- }
- else {
- swrast->_DeferredTexture = GL_TRUE;
- }
- }
-}
-
-
-/**
- * Update swrast->_FogColor and swrast->_FogEnable values.
- */
-static void
-_swrast_update_fog_state( struct gl_context *ctx )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- const struct gl_fragment_program *fp = ctx->FragmentProgram._Current;
-
- /* determine if fog is needed, and if so, which fog mode */
- swrast->_FogEnabled = GL_FALSE;
- if (fp && fp->Base.Target == GL_FRAGMENT_PROGRAM_ARB) {
- if (fp->FogOption != GL_NONE) {
- swrast->_FogEnabled = GL_TRUE;
- swrast->_FogMode = fp->FogOption;
- }
- }
- else if (ctx->Fog.Enabled) {
- swrast->_FogEnabled = GL_TRUE;
- swrast->_FogMode = ctx->Fog.Mode;
- }
-}
-
-
-/**
- * Update state for running fragment programs. Basically, load the
- * program parameters with current state values.
- */
-static void
-_swrast_update_fragment_program(struct gl_context *ctx, GLbitfield newState)
-{
- const struct gl_fragment_program *fp = ctx->FragmentProgram._Current;
- if (fp) {
- _mesa_load_state_parameters(ctx, fp->Base.Parameters);
- }
-}
-
-
-/**
- * See if we can do early diffuse+specular (primary+secondary) color
- * add per vertex instead of per-fragment.
- */
-static void
-_swrast_update_specular_vertex_add(struct gl_context *ctx)
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- GLboolean separateSpecular = ctx->Fog.ColorSumEnabled ||
- (ctx->Light.Enabled &&
- ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR);
-
- swrast->SpecularVertexAdd = (separateSpecular
- && ctx->Texture._EnabledUnits == 0x0
- && !ctx->FragmentProgram._Current
- && !ctx->ATIFragmentShader._Enabled);
-}
-
-
-#define _SWRAST_NEW_DERIVED (_SWRAST_NEW_RASTERMASK | \
- _NEW_PROGRAM_CONSTANTS | \
- _NEW_TEXTURE | \
- _NEW_HINT | \
- _NEW_POLYGON )
-
-/* State referenced by _swrast_choose_triangle, _swrast_choose_line.
- */
-#define _SWRAST_NEW_TRIANGLE (_SWRAST_NEW_DERIVED | \
- _NEW_RENDERMODE| \
- _NEW_POLYGON| \
- _NEW_DEPTH| \
- _NEW_STENCIL| \
- _NEW_COLOR| \
- _NEW_TEXTURE| \
- _SWRAST_NEW_RASTERMASK| \
- _NEW_LIGHT| \
- _NEW_FOG | \
- _DD_NEW_SEPARATE_SPECULAR)
-
-#define _SWRAST_NEW_LINE (_SWRAST_NEW_DERIVED | \
- _NEW_RENDERMODE| \
- _NEW_LINE| \
- _NEW_TEXTURE| \
- _NEW_LIGHT| \
- _NEW_FOG| \
- _NEW_DEPTH | \
- _DD_NEW_SEPARATE_SPECULAR)
-
-#define _SWRAST_NEW_POINT (_SWRAST_NEW_DERIVED | \
- _NEW_RENDERMODE | \
- _NEW_POINT | \
- _NEW_TEXTURE | \
- _NEW_LIGHT | \
- _NEW_FOG | \
- _DD_NEW_SEPARATE_SPECULAR)
-
-#define _SWRAST_NEW_TEXTURE_SAMPLE_FUNC _NEW_TEXTURE
-
-#define _SWRAST_NEW_TEXTURE_ENV_MODE _NEW_TEXTURE
-
-#define _SWRAST_NEW_BLEND_FUNC _NEW_COLOR
-
-
-
-/**
- * Stub for swrast->Triangle to select a true triangle function
- * after a state change.
- */
-static void
-_swrast_validate_triangle( struct gl_context *ctx,
- const SWvertex *v0,
- const SWvertex *v1,
- const SWvertex *v2 )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
- _swrast_validate_derived( ctx );
- swrast->choose_triangle( ctx );
- ASSERT(swrast->Triangle);
-
- if (swrast->SpecularVertexAdd) {
- /* separate specular color, but no texture */
- swrast->SpecTriangle = swrast->Triangle;
- swrast->Triangle = _swrast_add_spec_terms_triangle;
- }
-
- swrast->Triangle( ctx, v0, v1, v2 );
-}
-
-/**
- * Called via swrast->Line. Examine current GL state and choose a software
- * line routine. Then call it.
- */
-static void
-_swrast_validate_line( struct gl_context *ctx, const SWvertex *v0, const SWvertex *v1 )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
- _swrast_validate_derived( ctx );
- swrast->choose_line( ctx );
- ASSERT(swrast->Line);
-
- if (swrast->SpecularVertexAdd) {
- swrast->SpecLine = swrast->Line;
- swrast->Line = _swrast_add_spec_terms_line;
- }
-
- swrast->Line( ctx, v0, v1 );
-}
-
-/**
- * Called via swrast->Point. Examine current GL state and choose a software
- * point routine. Then call it.
- */
-static void
-_swrast_validate_point( struct gl_context *ctx, const SWvertex *v0 )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
- _swrast_validate_derived( ctx );
- swrast->choose_point( ctx );
-
- if (swrast->SpecularVertexAdd) {
- swrast->SpecPoint = swrast->Point;
- swrast->Point = _swrast_add_spec_terms_point;
- }
-
- swrast->Point( ctx, v0 );
-}
-
-
-/**
- * Called via swrast->BlendFunc. Examine GL state to choose a blending
- * function, then call it.
- */
-static void _ASMAPI
-_swrast_validate_blend_func(struct gl_context *ctx, GLuint n, const GLubyte mask[],
- GLvoid *src, const GLvoid *dst,
- GLenum chanType )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
- _swrast_validate_derived( ctx ); /* why is this needed? */
- _swrast_choose_blend_func( ctx, chanType );
-
- swrast->BlendFunc( ctx, n, mask, src, dst, chanType );
-}
-
-
-/**
- * Make sure we have texture image data for all the textures we may need
- * for subsequent rendering.
- */
-static void
-_swrast_validate_texture_images(struct gl_context *ctx)
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- GLuint u;
-
- if (!swrast->ValidateTextureImage || !ctx->Texture._EnabledUnits) {
- /* no textures enabled, or no way to validate images! */
- return;
- }
-
- for (u = 0; u < ctx->Const.MaxTextureImageUnits; u++) {
- if (ctx->Texture.Unit[u]._ReallyEnabled) {
- struct gl_texture_object *texObj = ctx->Texture.Unit[u]._Current;
- ASSERT(texObj);
- if (texObj) {
- GLuint numFaces = (texObj->Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
- GLuint face;
- for (face = 0; face < numFaces; face++) {
- GLint lvl;
- for (lvl = texObj->BaseLevel; lvl <= texObj->_MaxLevel; lvl++) {
- struct gl_texture_image *texImg = texObj->Image[face][lvl];
- if (texImg && !texImg->Data) {
- swrast->ValidateTextureImage(ctx, texObj, face, lvl);
- ASSERT(texObj->Image[face][lvl]->Data);
- }
- }
- }
- }
- }
- }
-}
-
-
-/**
- * Free the texture image data attached to all currently enabled
- * textures. Meant to be called by device drivers when transitioning
- * from software to hardware rendering.
- */
-void
-_swrast_eject_texture_images(struct gl_context *ctx)
-{
- GLuint u;
-
- if (!ctx->Texture._EnabledUnits) {
- /* no textures enabled */
- return;
- }
-
- for (u = 0; u < ctx->Const.MaxTextureImageUnits; u++) {
- if (ctx->Texture.Unit[u]._ReallyEnabled) {
- struct gl_texture_object *texObj = ctx->Texture.Unit[u]._Current;
- ASSERT(texObj);
- if (texObj) {
- GLuint numFaces = (texObj->Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
- GLuint face;
- for (face = 0; face < numFaces; face++) {
- GLint lvl;
- for (lvl = texObj->BaseLevel; lvl <= texObj->_MaxLevel; lvl++) {
- struct gl_texture_image *texImg = texObj->Image[face][lvl];
- if (texImg && texImg->Data) {
- _mesa_free_texmemory(texImg->Data);
- texImg->Data = NULL;
- }
- }
- }
- }
- }
- }
-}
-
-
-
-static void
-_swrast_sleep( struct gl_context *ctx, GLbitfield new_state )
-{
- (void) ctx; (void) new_state;
-}
-
-
-static void
-_swrast_invalidate_state( struct gl_context *ctx, GLbitfield new_state )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- GLuint i;
-
- swrast->NewState |= new_state;
-
- /* After 10 statechanges without any swrast functions being called,
- * put the module to sleep.
- */
- if (++swrast->StateChanges > 10) {
- swrast->InvalidateState = _swrast_sleep;
- swrast->NewState = ~0;
- new_state = ~0;
- }
-
- if (new_state & swrast->InvalidateTriangleMask)
- swrast->Triangle = _swrast_validate_triangle;
-
- if (new_state & swrast->InvalidateLineMask)
- swrast->Line = _swrast_validate_line;
-
- if (new_state & swrast->InvalidatePointMask)
- swrast->Point = _swrast_validate_point;
-
- if (new_state & _SWRAST_NEW_BLEND_FUNC)
- swrast->BlendFunc = _swrast_validate_blend_func;
-
- if (new_state & _SWRAST_NEW_TEXTURE_SAMPLE_FUNC)
- for (i = 0 ; i < ctx->Const.MaxTextureImageUnits ; i++)
- swrast->TextureSample[i] = NULL;
-}
-
-
-void
-_swrast_update_texture_samplers(struct gl_context *ctx)
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- GLuint u;
-
- if (!swrast)
- return; /* pipe hack */
-
- for (u = 0; u < ctx->Const.MaxTextureImageUnits; u++) {
- const struct gl_texture_object *tObj = ctx->Texture.Unit[u]._Current;
- /* Note: If tObj is NULL, the sample function will be a simple
- * function that just returns opaque black (0,0,0,1).
- */
- swrast->TextureSample[u] = _swrast_choose_texture_sample_func(ctx, tObj);
- }
-}
-
-
-/**
- * Update swrast->_ActiveAttribs, swrast->_NumActiveAttribs,
- * swrast->_ActiveAtttribMask.
- */
-static void
-_swrast_update_active_attribs(struct gl_context *ctx)
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- GLuint attribsMask;
-
- /*
- * Compute _ActiveAttribsMask = which fragment attributes are needed.
- */
- if (ctx->FragmentProgram._Current) {
- /* fragment program/shader */
- attribsMask = ctx->FragmentProgram._Current->Base.InputsRead;
- attribsMask &= ~FRAG_BIT_WPOS; /* WPOS is always handled specially */
- }
- else if (ctx->ATIFragmentShader._Enabled) {
- attribsMask = ~0; /* XXX fix me */
- }
- else {
- /* fixed function */
- attribsMask = 0x0;
-
-#if CHAN_TYPE == GL_FLOAT
- attribsMask |= FRAG_BIT_COL0;
-#endif
-
- if (ctx->Fog.ColorSumEnabled ||
- (ctx->Light.Enabled &&
- ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)) {
- attribsMask |= FRAG_BIT_COL1;
- }
-
- if (swrast->_FogEnabled)
- attribsMask |= FRAG_BIT_FOGC;
-
- attribsMask |= (ctx->Texture._EnabledUnits << FRAG_ATTRIB_TEX0);
- }
-
- swrast->_ActiveAttribMask = attribsMask;
-
- /* Update _ActiveAttribs[] list */
- {
- GLuint i, num = 0;
- for (i = 0; i < FRAG_ATTRIB_MAX; i++) {
- if (attribsMask & (1 << i)) {
- swrast->_ActiveAttribs[num++] = i;
- /* how should this attribute be interpolated? */
- if (i == FRAG_ATTRIB_COL0 || i == FRAG_ATTRIB_COL1)
- swrast->_InterpMode[i] = ctx->Light.ShadeModel;
- else
- swrast->_InterpMode[i] = GL_SMOOTH;
- }
- }
- swrast->_NumActiveAttribs = num;
- }
-}
-
-
-void
-_swrast_validate_derived( struct gl_context *ctx )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
- if (swrast->NewState) {
- if (swrast->NewState & _NEW_POLYGON)
- _swrast_update_polygon( ctx );
-
- if (swrast->NewState & (_NEW_HINT | _NEW_PROGRAM))
- _swrast_update_fog_hint( ctx );
-
- if (swrast->NewState & _SWRAST_NEW_TEXTURE_ENV_MODE)
- _swrast_update_texture_env( ctx );
-
- if (swrast->NewState & (_NEW_FOG | _NEW_PROGRAM))
- _swrast_update_fog_state( ctx );
-
- if (swrast->NewState & (_NEW_PROGRAM_CONSTANTS | _NEW_PROGRAM))
- _swrast_update_fragment_program( ctx, swrast->NewState );
-
- if (swrast->NewState & (_NEW_TEXTURE | _NEW_PROGRAM)) {
- _swrast_update_texture_samplers( ctx );
- _swrast_validate_texture_images(ctx);
- }
-
- if (swrast->NewState & (_NEW_COLOR | _NEW_PROGRAM))
- _swrast_update_deferred_texture(ctx);
-
- if (swrast->NewState & _SWRAST_NEW_RASTERMASK)
- _swrast_update_rasterflags( ctx );
-
- if (swrast->NewState & (_NEW_DEPTH |
- _NEW_FOG |
- _NEW_LIGHT |
- _NEW_PROGRAM |
- _NEW_TEXTURE))
- _swrast_update_active_attribs(ctx);
-
- if (swrast->NewState & (_NEW_FOG |
- _NEW_PROGRAM |
- _NEW_LIGHT |
- _NEW_TEXTURE))
- _swrast_update_specular_vertex_add(ctx);
-
- swrast->NewState = 0;
- swrast->StateChanges = 0;
- swrast->InvalidateState = _swrast_invalidate_state;
- }
-}
-
-#define SWRAST_DEBUG 0
-
-/* Public entrypoints: See also s_accum.c, s_bitmap.c, etc.
- */
-void
-_swrast_Quad( struct gl_context *ctx,
- const SWvertex *v0, const SWvertex *v1,
- const SWvertex *v2, const SWvertex *v3 )
-{
- if (SWRAST_DEBUG) {
- _mesa_debug(ctx, "_swrast_Quad\n");
- _swrast_print_vertex( ctx, v0 );
- _swrast_print_vertex( ctx, v1 );
- _swrast_print_vertex( ctx, v2 );
- _swrast_print_vertex( ctx, v3 );
- }
- SWRAST_CONTEXT(ctx)->Triangle( ctx, v0, v1, v3 );
- SWRAST_CONTEXT(ctx)->Triangle( ctx, v1, v2, v3 );
-}
-
-void
-_swrast_Triangle( struct gl_context *ctx, const SWvertex *v0,
- const SWvertex *v1, const SWvertex *v2 )
-{
- if (SWRAST_DEBUG) {
- _mesa_debug(ctx, "_swrast_Triangle\n");
- _swrast_print_vertex( ctx, v0 );
- _swrast_print_vertex( ctx, v1 );
- _swrast_print_vertex( ctx, v2 );
- }
- SWRAST_CONTEXT(ctx)->Triangle( ctx, v0, v1, v2 );
-}
-
-void
-_swrast_Line( struct gl_context *ctx, const SWvertex *v0, const SWvertex *v1 )
-{
- if (SWRAST_DEBUG) {
- _mesa_debug(ctx, "_swrast_Line\n");
- _swrast_print_vertex( ctx, v0 );
- _swrast_print_vertex( ctx, v1 );
- }
- SWRAST_CONTEXT(ctx)->Line( ctx, v0, v1 );
-}
-
-void
-_swrast_Point( struct gl_context *ctx, const SWvertex *v0 )
-{
- if (SWRAST_DEBUG) {
- _mesa_debug(ctx, "_swrast_Point\n");
- _swrast_print_vertex( ctx, v0 );
- }
- SWRAST_CONTEXT(ctx)->Point( ctx, v0 );
-}
-
-void
-_swrast_InvalidateState( struct gl_context *ctx, GLbitfield new_state )
-{
- if (SWRAST_DEBUG) {
- _mesa_debug(ctx, "_swrast_InvalidateState\n");
- }
- SWRAST_CONTEXT(ctx)->InvalidateState( ctx, new_state );
-}
-
-void
-_swrast_ResetLineStipple( struct gl_context *ctx )
-{
- if (SWRAST_DEBUG) {
- _mesa_debug(ctx, "_swrast_ResetLineStipple\n");
- }
- SWRAST_CONTEXT(ctx)->StippleCounter = 0;
-}
-
-void
-_swrast_SetFacing(struct gl_context *ctx, GLuint facing)
-{
- SWRAST_CONTEXT(ctx)->PointLineFacing = facing;
-}
-
-void
-_swrast_allow_vertex_fog( struct gl_context *ctx, GLboolean value )
-{
- if (SWRAST_DEBUG) {
- _mesa_debug(ctx, "_swrast_allow_vertex_fog %d\n", value);
- }
- SWRAST_CONTEXT(ctx)->InvalidateState( ctx, _NEW_HINT );
- SWRAST_CONTEXT(ctx)->AllowVertexFog = value;
-}
-
-void
-_swrast_allow_pixel_fog( struct gl_context *ctx, GLboolean value )
-{
- if (SWRAST_DEBUG) {
- _mesa_debug(ctx, "_swrast_allow_pixel_fog %d\n", value);
- }
- SWRAST_CONTEXT(ctx)->InvalidateState( ctx, _NEW_HINT );
- SWRAST_CONTEXT(ctx)->AllowPixelFog = value;
-}
-
-
-GLboolean
-_swrast_CreateContext( struct gl_context *ctx )
-{
- GLuint i;
- SWcontext *swrast = (SWcontext *)CALLOC(sizeof(SWcontext));
-
- if (SWRAST_DEBUG) {
- _mesa_debug(ctx, "_swrast_CreateContext\n");
- }
-
- if (!swrast)
- return GL_FALSE;
-
- swrast->NewState = ~0;
-
- swrast->choose_point = _swrast_choose_point;
- swrast->choose_line = _swrast_choose_line;
- swrast->choose_triangle = _swrast_choose_triangle;
-
- swrast->InvalidatePointMask = _SWRAST_NEW_POINT;
- swrast->InvalidateLineMask = _SWRAST_NEW_LINE;
- swrast->InvalidateTriangleMask = _SWRAST_NEW_TRIANGLE;
-
- swrast->Point = _swrast_validate_point;
- swrast->Line = _swrast_validate_line;
- swrast->Triangle = _swrast_validate_triangle;
- swrast->InvalidateState = _swrast_sleep;
- swrast->BlendFunc = _swrast_validate_blend_func;
-
- swrast->AllowVertexFog = GL_TRUE;
- swrast->AllowPixelFog = GL_TRUE;
-
- /* Optimized Accum buffer */
- swrast->_IntegerAccumMode = GL_FALSE;
- swrast->_IntegerAccumScaler = 0.0;
-
- for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++)
- swrast->TextureSample[i] = NULL;
-
- swrast->SpanArrays = MALLOC_STRUCT(sw_span_arrays);
- if (!swrast->SpanArrays) {
- FREE(swrast);
- return GL_FALSE;
- }
- swrast->SpanArrays->ChanType = CHAN_TYPE;
-#if CHAN_TYPE == GL_UNSIGNED_BYTE
- swrast->SpanArrays->rgba = swrast->SpanArrays->rgba8;
-#elif CHAN_TYPE == GL_UNSIGNED_SHORT
- swrast->SpanArrays->rgba = swrast->SpanArrays->rgba16;
-#else
- swrast->SpanArrays->rgba = swrast->SpanArrays->attribs[FRAG_ATTRIB_COL0];
-#endif
-
- /* init point span buffer */
- swrast->PointSpan.primitive = GL_POINT;
- swrast->PointSpan.end = 0;
- swrast->PointSpan.facing = 0;
- swrast->PointSpan.array = swrast->SpanArrays;
-
- swrast->TexelBuffer = (GLfloat *) MALLOC(ctx->Const.MaxTextureImageUnits *
- MAX_WIDTH * 4 * sizeof(GLfloat));
- if (!swrast->TexelBuffer) {
- FREE(swrast->SpanArrays);
- FREE(swrast);
- return GL_FALSE;
- }
-
- ctx->swrast_context = swrast;
-
- return GL_TRUE;
-}
-
-void
-_swrast_DestroyContext( struct gl_context *ctx )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
-
- if (SWRAST_DEBUG) {
- _mesa_debug(ctx, "_swrast_DestroyContext\n");
- }
-
- FREE( swrast->SpanArrays );
- if (swrast->ZoomedArrays)
- FREE( swrast->ZoomedArrays );
- FREE( swrast->TexelBuffer );
- FREE( swrast );
-
- ctx->swrast_context = 0;
-}
-
-
-struct swrast_device_driver *
-_swrast_GetDeviceDriverReference( struct gl_context *ctx )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- return &swrast->Driver;
-}
-
-void
-_swrast_flush( struct gl_context *ctx )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- /* flush any pending fragments from rendering points */
- if (swrast->PointSpan.end > 0) {
- _swrast_write_rgba_span(ctx, &(swrast->PointSpan));
- swrast->PointSpan.end = 0;
- }
-}
-
-void
-_swrast_render_primitive( struct gl_context *ctx, GLenum prim )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- if (swrast->Primitive == GL_POINTS && prim != GL_POINTS) {
- _swrast_flush(ctx);
- }
- swrast->Primitive = prim;
-}
-
-
-void
-_swrast_render_start( struct gl_context *ctx )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- if (swrast->Driver.SpanRenderStart)
- swrast->Driver.SpanRenderStart( ctx );
- swrast->PointSpan.end = 0;
-}
-
-void
-_swrast_render_finish( struct gl_context *ctx )
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- if (swrast->Driver.SpanRenderFinish)
- swrast->Driver.SpanRenderFinish( ctx );
-
- _swrast_flush(ctx);
-}
-
-
-#define SWRAST_DEBUG_VERTICES 0
-
-void
-_swrast_print_vertex( struct gl_context *ctx, const SWvertex *v )
-{
- GLuint i;
-
- if (SWRAST_DEBUG_VERTICES) {
- _mesa_debug(ctx, "win %f %f %f %f\n",
- v->attrib[FRAG_ATTRIB_WPOS][0],
- v->attrib[FRAG_ATTRIB_WPOS][1],
- v->attrib[FRAG_ATTRIB_WPOS][2],
- v->attrib[FRAG_ATTRIB_WPOS][3]);
-
- for (i = 0 ; i < ctx->Const.MaxTextureCoordUnits ; i++)
- if (ctx->Texture.Unit[i]._ReallyEnabled)
- _mesa_debug(ctx, "texcoord[%d] %f %f %f %f\n", i,
- v->attrib[FRAG_ATTRIB_TEX0 + i][0],
- v->attrib[FRAG_ATTRIB_TEX0 + i][1],
- v->attrib[FRAG_ATTRIB_TEX0 + i][2],
- v->attrib[FRAG_ATTRIB_TEX0 + i][3]);
-
-#if CHAN_TYPE == GL_FLOAT
- _mesa_debug(ctx, "color %f %f %f %f\n",
- v->color[0], v->color[1], v->color[2], v->color[3]);
-#else
- _mesa_debug(ctx, "color %d %d %d %d\n",
- v->color[0], v->color[1], v->color[2], v->color[3]);
-#endif
- _mesa_debug(ctx, "spec %g %g %g %g\n",
- v->attrib[FRAG_ATTRIB_COL1][0],
- v->attrib[FRAG_ATTRIB_COL1][1],
- v->attrib[FRAG_ATTRIB_COL1][2],
- v->attrib[FRAG_ATTRIB_COL1][3]);
- _mesa_debug(ctx, "fog %f\n", v->attrib[FRAG_ATTRIB_FOGC][0]);
- _mesa_debug(ctx, "index %f\n", v->attrib[FRAG_ATTRIB_CI][0]);
- _mesa_debug(ctx, "pointsize %f\n", v->pointSize);
- _mesa_debug(ctx, "\n");
- }
-}
+/* + * Mesa 3-D graphics library + * Version: 7.1 + * + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Keith Whitwell <keith@tungstengraphics.com> + * Brian Paul + */ + +#include "main/imports.h" +#include "main/bufferobj.h" +#include "main/colormac.h" +#include "main/mtypes.h" +#include "main/teximage.h" +#include "program/prog_parameter.h" +#include "program/prog_statevars.h" +#include "swrast.h" +#include "s_blend.h" +#include "s_context.h" +#include "s_lines.h" +#include "s_points.h" +#include "s_span.h" +#include "s_triangle.h" +#include "s_texfilter.h" + + +/** + * Recompute the value of swrast->_RasterMask, etc. according to + * the current context. The _RasterMask field can be easily tested by + * drivers to determine certain basic GL state (does the primitive need + * stenciling, logic-op, fog, etc?). + */ +static void +_swrast_update_rasterflags( struct gl_context *ctx ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + GLbitfield rasterMask = 0; + GLuint i; + + if (ctx->Color.AlphaEnabled) rasterMask |= ALPHATEST_BIT; + if (ctx->Color.BlendEnabled) rasterMask |= BLEND_BIT; + if (ctx->Depth.Test) rasterMask |= DEPTH_BIT; + if (swrast->_FogEnabled) rasterMask |= FOG_BIT; + if (ctx->Scissor.Enabled) rasterMask |= CLIP_BIT; + if (ctx->Stencil._Enabled) rasterMask |= STENCIL_BIT; + for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) { + if (!ctx->Color.ColorMask[i][0] || + !ctx->Color.ColorMask[i][1] || + !ctx->Color.ColorMask[i][2] || + !ctx->Color.ColorMask[i][3]) { + rasterMask |= MASKING_BIT; + break; + } + } + if (ctx->Color._LogicOpEnabled) rasterMask |= LOGIC_OP_BIT; + if (ctx->Texture._EnabledUnits) rasterMask |= TEXTURE_BIT; + if ( ctx->Viewport.X < 0 + || ctx->Viewport.X + ctx->Viewport.Width > (GLint) ctx->DrawBuffer->Width + || ctx->Viewport.Y < 0 + || ctx->Viewport.Y + ctx->Viewport.Height > (GLint) ctx->DrawBuffer->Height) { + rasterMask |= CLIP_BIT; + } + + if (ctx->Query.CurrentOcclusionObject) + rasterMask |= OCCLUSION_BIT; + + + /* If we're not drawing to exactly one color buffer set the + * MULTI_DRAW_BIT flag. Also set it if we're drawing to no + * buffers or the RGBA or CI mask disables all writes. + */ + if (ctx->DrawBuffer->_NumColorDrawBuffers != 1) { + /* more than one color buffer designated for writing (or zero buffers) */ + rasterMask |= MULTI_DRAW_BIT; + } + + for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) { + if (ctx->Color.ColorMask[i][0] + + ctx->Color.ColorMask[i][1] + + ctx->Color.ColorMask[i][2] + + ctx->Color.ColorMask[i][3] == 0) { + rasterMask |= MULTI_DRAW_BIT; /* all RGBA channels disabled */ + break; + } + } + + + if (ctx->FragmentProgram._Current) { + rasterMask |= FRAGPROG_BIT; + } + + if (ctx->ATIFragmentShader._Enabled) { + rasterMask |= ATIFRAGSHADER_BIT; + } + +#if CHAN_TYPE == GL_FLOAT + if (ctx->Color.ClampFragmentColor == GL_TRUE) { + rasterMask |= CLAMPING_BIT; + } +#endif + + SWRAST_CONTEXT(ctx)->_RasterMask = rasterMask; +} + + +/** + * Examine polygon cull state to compute the _BackfaceCullSign field. + * _BackfaceCullSign will be 0 if no culling, -1 if culling back-faces, + * and 1 if culling front-faces. The Polygon FrontFace state also + * factors in. + */ +static void +_swrast_update_polygon( struct gl_context *ctx ) +{ + GLfloat backface_sign; + + if (ctx->Polygon.CullFlag) { + switch (ctx->Polygon.CullFaceMode) { + case GL_BACK: + backface_sign = -1.0F; + break; + case GL_FRONT: + backface_sign = 1.0F; + break; + case GL_FRONT_AND_BACK: + /* fallthrough */ + default: + backface_sign = 0.0F; + } + } + else { + backface_sign = 0.0F; + } + + SWRAST_CONTEXT(ctx)->_BackfaceCullSign = backface_sign; + + /* This is for front/back-face determination, but not for culling */ + SWRAST_CONTEXT(ctx)->_BackfaceSign + = (ctx->Polygon.FrontFace == GL_CW) ? -1.0F : 1.0F; +} + + + +/** + * Update the _PreferPixelFog field to indicate if we need to compute + * fog blend factors (from the fog coords) per-fragment. + */ +static void +_swrast_update_fog_hint( struct gl_context *ctx ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + swrast->_PreferPixelFog = (!swrast->AllowVertexFog || + ctx->FragmentProgram._Current || + (ctx->Hint.Fog == GL_NICEST && + swrast->AllowPixelFog)); +} + + + +/** + * Update the swrast->_TextureCombinePrimary flag. + */ +static void +_swrast_update_texture_env( struct gl_context *ctx ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + GLuint i; + + swrast->_TextureCombinePrimary = GL_FALSE; + + for (i = 0; i < ctx->Const.MaxTextureUnits; i++) { + const struct gl_tex_env_combine_state *combine = + ctx->Texture.Unit[i]._CurrentCombine; + GLuint term; + for (term = 0; term < combine->_NumArgsRGB; term++) { + if (combine->SourceRGB[term] == GL_PRIMARY_COLOR) { + swrast->_TextureCombinePrimary = GL_TRUE; + return; + } + if (combine->SourceA[term] == GL_PRIMARY_COLOR) { + swrast->_TextureCombinePrimary = GL_TRUE; + return; + } + } + } +} + + +/** + * Determine if we can defer texturing/shading until after Z/stencil + * testing. This potentially allows us to skip texturing/shading for + * lots of fragments. + */ +static void +_swrast_update_deferred_texture(struct gl_context *ctx) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + if (ctx->Color.AlphaEnabled) { + /* alpha test depends on post-texture/shader colors */ + swrast->_DeferredTexture = GL_FALSE; + } + else { + const struct gl_fragment_program *fprog + = ctx->FragmentProgram._Current; + if (fprog && (fprog->Base.OutputsWritten & (1 << FRAG_RESULT_DEPTH))) { + /* Z comes from fragment program/shader */ + swrast->_DeferredTexture = GL_FALSE; + } + else if (fprog && fprog->UsesKill) { + swrast->_DeferredTexture = GL_FALSE; + } + else if (ctx->Query.CurrentOcclusionObject) { + /* occlusion query depends on shader discard/kill results */ + swrast->_DeferredTexture = GL_FALSE; + } + else { + swrast->_DeferredTexture = GL_TRUE; + } + } +} + + +/** + * Update swrast->_FogColor and swrast->_FogEnable values. + */ +static void +_swrast_update_fog_state( struct gl_context *ctx ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + const struct gl_fragment_program *fp = ctx->FragmentProgram._Current; + + assert((fp == NULL) || (fp->Base.Target == GL_FRAGMENT_PROGRAM_ARB)); + + /* determine if fog is needed, and if so, which fog mode */ + swrast->_FogEnabled = (fp == NULL && ctx->Fog.Enabled); +} + + +/** + * Update state for running fragment programs. Basically, load the + * program parameters with current state values. + */ +static void +_swrast_update_fragment_program(struct gl_context *ctx, GLbitfield newState) +{ + const struct gl_fragment_program *fp = ctx->FragmentProgram._Current; + if (fp) { + _mesa_load_state_parameters(ctx, fp->Base.Parameters); + } +} + + +/** + * See if we can do early diffuse+specular (primary+secondary) color + * add per vertex instead of per-fragment. + */ +static void +_swrast_update_specular_vertex_add(struct gl_context *ctx) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + GLboolean separateSpecular = ctx->Fog.ColorSumEnabled || + (ctx->Light.Enabled && + ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR); + + swrast->SpecularVertexAdd = (separateSpecular + && ctx->Texture._EnabledUnits == 0x0 + && !ctx->FragmentProgram._Current + && !ctx->ATIFragmentShader._Enabled); +} + + +#define _SWRAST_NEW_DERIVED (_SWRAST_NEW_RASTERMASK | \ + _NEW_PROGRAM_CONSTANTS | \ + _NEW_TEXTURE | \ + _NEW_HINT | \ + _NEW_POLYGON ) + +/* State referenced by _swrast_choose_triangle, _swrast_choose_line. + */ +#define _SWRAST_NEW_TRIANGLE (_SWRAST_NEW_DERIVED | \ + _NEW_RENDERMODE| \ + _NEW_POLYGON| \ + _NEW_DEPTH| \ + _NEW_STENCIL| \ + _NEW_COLOR| \ + _NEW_TEXTURE| \ + _SWRAST_NEW_RASTERMASK| \ + _NEW_LIGHT| \ + _NEW_FOG | \ + _DD_NEW_SEPARATE_SPECULAR) + +#define _SWRAST_NEW_LINE (_SWRAST_NEW_DERIVED | \ + _NEW_RENDERMODE| \ + _NEW_LINE| \ + _NEW_TEXTURE| \ + _NEW_LIGHT| \ + _NEW_FOG| \ + _NEW_DEPTH | \ + _DD_NEW_SEPARATE_SPECULAR) + +#define _SWRAST_NEW_POINT (_SWRAST_NEW_DERIVED | \ + _NEW_RENDERMODE | \ + _NEW_POINT | \ + _NEW_TEXTURE | \ + _NEW_LIGHT | \ + _NEW_FOG | \ + _DD_NEW_SEPARATE_SPECULAR) + +#define _SWRAST_NEW_TEXTURE_SAMPLE_FUNC _NEW_TEXTURE + +#define _SWRAST_NEW_TEXTURE_ENV_MODE _NEW_TEXTURE + +#define _SWRAST_NEW_BLEND_FUNC _NEW_COLOR + + + +/** + * Stub for swrast->Triangle to select a true triangle function + * after a state change. + */ +static void +_swrast_validate_triangle( struct gl_context *ctx, + const SWvertex *v0, + const SWvertex *v1, + const SWvertex *v2 ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + + _swrast_validate_derived( ctx ); + swrast->choose_triangle( ctx ); + ASSERT(swrast->Triangle); + + if (swrast->SpecularVertexAdd) { + /* separate specular color, but no texture */ + swrast->SpecTriangle = swrast->Triangle; + swrast->Triangle = _swrast_add_spec_terms_triangle; + } + + swrast->Triangle( ctx, v0, v1, v2 ); +} + +/** + * Called via swrast->Line. Examine current GL state and choose a software + * line routine. Then call it. + */ +static void +_swrast_validate_line( struct gl_context *ctx, const SWvertex *v0, const SWvertex *v1 ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + + _swrast_validate_derived( ctx ); + swrast->choose_line( ctx ); + ASSERT(swrast->Line); + + if (swrast->SpecularVertexAdd) { + swrast->SpecLine = swrast->Line; + swrast->Line = _swrast_add_spec_terms_line; + } + + swrast->Line( ctx, v0, v1 ); +} + +/** + * Called via swrast->Point. Examine current GL state and choose a software + * point routine. Then call it. + */ +static void +_swrast_validate_point( struct gl_context *ctx, const SWvertex *v0 ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + + _swrast_validate_derived( ctx ); + swrast->choose_point( ctx ); + + if (swrast->SpecularVertexAdd) { + swrast->SpecPoint = swrast->Point; + swrast->Point = _swrast_add_spec_terms_point; + } + + swrast->Point( ctx, v0 ); +} + + +/** + * Called via swrast->BlendFunc. Examine GL state to choose a blending + * function, then call it. + */ +static void _ASMAPI +_swrast_validate_blend_func(struct gl_context *ctx, GLuint n, const GLubyte mask[], + GLvoid *src, const GLvoid *dst, + GLenum chanType ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + + _swrast_validate_derived( ctx ); /* why is this needed? */ + _swrast_choose_blend_func( ctx, chanType ); + + swrast->BlendFunc( ctx, n, mask, src, dst, chanType ); +} + + +/** + * Make sure we have texture image data for all the textures we may need + * for subsequent rendering. + */ +static void +_swrast_validate_texture_images(struct gl_context *ctx) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + GLuint u; + + if (!swrast->ValidateTextureImage || !ctx->Texture._EnabledUnits) { + /* no textures enabled, or no way to validate images! */ + return; + } + + for (u = 0; u < ctx->Const.MaxTextureImageUnits; u++) { + if (ctx->Texture.Unit[u]._ReallyEnabled) { + struct gl_texture_object *texObj = ctx->Texture.Unit[u]._Current; + ASSERT(texObj); + if (texObj) { + GLuint numFaces = (texObj->Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1; + GLuint face; + for (face = 0; face < numFaces; face++) { + GLint lvl; + for (lvl = texObj->BaseLevel; lvl <= texObj->_MaxLevel; lvl++) { + struct gl_texture_image *texImg = texObj->Image[face][lvl]; + if (texImg && !texImg->Data) { + swrast->ValidateTextureImage(ctx, texObj, face, lvl); + ASSERT(texObj->Image[face][lvl]->Data); + } + } + } + } + } + } +} + + +/** + * Free the texture image data attached to all currently enabled + * textures. Meant to be called by device drivers when transitioning + * from software to hardware rendering. + */ +void +_swrast_eject_texture_images(struct gl_context *ctx) +{ + GLuint u; + + if (!ctx->Texture._EnabledUnits) { + /* no textures enabled */ + return; + } + + for (u = 0; u < ctx->Const.MaxTextureImageUnits; u++) { + if (ctx->Texture.Unit[u]._ReallyEnabled) { + struct gl_texture_object *texObj = ctx->Texture.Unit[u]._Current; + ASSERT(texObj); + if (texObj) { + GLuint numFaces = (texObj->Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1; + GLuint face; + for (face = 0; face < numFaces; face++) { + GLint lvl; + for (lvl = texObj->BaseLevel; lvl <= texObj->_MaxLevel; lvl++) { + struct gl_texture_image *texImg = texObj->Image[face][lvl]; + if (texImg && texImg->Data) { + _mesa_free_texmemory(texImg->Data); + texImg->Data = NULL; + } + } + } + } + } + } +} + + + +static void +_swrast_sleep( struct gl_context *ctx, GLbitfield new_state ) +{ + (void) ctx; (void) new_state; +} + + +static void +_swrast_invalidate_state( struct gl_context *ctx, GLbitfield new_state ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + GLuint i; + + swrast->NewState |= new_state; + + /* After 10 statechanges without any swrast functions being called, + * put the module to sleep. + */ + if (++swrast->StateChanges > 10) { + swrast->InvalidateState = _swrast_sleep; + swrast->NewState = ~0; + new_state = ~0; + } + + if (new_state & swrast->InvalidateTriangleMask) + swrast->Triangle = _swrast_validate_triangle; + + if (new_state & swrast->InvalidateLineMask) + swrast->Line = _swrast_validate_line; + + if (new_state & swrast->InvalidatePointMask) + swrast->Point = _swrast_validate_point; + + if (new_state & _SWRAST_NEW_BLEND_FUNC) + swrast->BlendFunc = _swrast_validate_blend_func; + + if (new_state & _SWRAST_NEW_TEXTURE_SAMPLE_FUNC) + for (i = 0 ; i < ctx->Const.MaxTextureImageUnits ; i++) + swrast->TextureSample[i] = NULL; +} + + +void +_swrast_update_texture_samplers(struct gl_context *ctx) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + GLuint u; + + if (!swrast) + return; /* pipe hack */ + + for (u = 0; u < ctx->Const.MaxTextureImageUnits; u++) { + const struct gl_texture_object *tObj = ctx->Texture.Unit[u]._Current; + /* Note: If tObj is NULL, the sample function will be a simple + * function that just returns opaque black (0,0,0,1). + */ + swrast->TextureSample[u] = _swrast_choose_texture_sample_func(ctx, tObj); + } +} + + +/** + * Update swrast->_ActiveAttribs, swrast->_NumActiveAttribs, + * swrast->_ActiveAtttribMask. + */ +static void +_swrast_update_active_attribs(struct gl_context *ctx) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + GLuint attribsMask; + + /* + * Compute _ActiveAttribsMask = which fragment attributes are needed. + */ + if (ctx->FragmentProgram._Current) { + /* fragment program/shader */ + attribsMask = ctx->FragmentProgram._Current->Base.InputsRead; + attribsMask &= ~FRAG_BIT_WPOS; /* WPOS is always handled specially */ + } + else if (ctx->ATIFragmentShader._Enabled) { + attribsMask = ~0; /* XXX fix me */ + } + else { + /* fixed function */ + attribsMask = 0x0; + +#if CHAN_TYPE == GL_FLOAT + attribsMask |= FRAG_BIT_COL0; +#endif + + if (ctx->Fog.ColorSumEnabled || + (ctx->Light.Enabled && + ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)) { + attribsMask |= FRAG_BIT_COL1; + } + + if (swrast->_FogEnabled) + attribsMask |= FRAG_BIT_FOGC; + + attribsMask |= (ctx->Texture._EnabledUnits << FRAG_ATTRIB_TEX0); + } + + swrast->_ActiveAttribMask = attribsMask; + + /* Update _ActiveAttribs[] list */ + { + GLuint i, num = 0; + for (i = 0; i < FRAG_ATTRIB_MAX; i++) { + if (attribsMask & (1 << i)) { + swrast->_ActiveAttribs[num++] = i; + /* how should this attribute be interpolated? */ + if (i == FRAG_ATTRIB_COL0 || i == FRAG_ATTRIB_COL1) + swrast->_InterpMode[i] = ctx->Light.ShadeModel; + else + swrast->_InterpMode[i] = GL_SMOOTH; + } + } + swrast->_NumActiveAttribs = num; + } +} + + +void +_swrast_validate_derived( struct gl_context *ctx ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + + if (swrast->NewState) { + if (swrast->NewState & _NEW_POLYGON) + _swrast_update_polygon( ctx ); + + if (swrast->NewState & (_NEW_HINT | _NEW_PROGRAM)) + _swrast_update_fog_hint( ctx ); + + if (swrast->NewState & _SWRAST_NEW_TEXTURE_ENV_MODE) + _swrast_update_texture_env( ctx ); + + if (swrast->NewState & (_NEW_FOG | _NEW_PROGRAM)) + _swrast_update_fog_state( ctx ); + + if (swrast->NewState & (_NEW_PROGRAM_CONSTANTS | _NEW_PROGRAM)) + _swrast_update_fragment_program( ctx, swrast->NewState ); + + if (swrast->NewState & (_NEW_TEXTURE | _NEW_PROGRAM)) { + _swrast_update_texture_samplers( ctx ); + _swrast_validate_texture_images(ctx); + } + + if (swrast->NewState & (_NEW_COLOR | _NEW_PROGRAM)) + _swrast_update_deferred_texture(ctx); + + if (swrast->NewState & _SWRAST_NEW_RASTERMASK) + _swrast_update_rasterflags( ctx ); + + if (swrast->NewState & (_NEW_DEPTH | + _NEW_FOG | + _NEW_LIGHT | + _NEW_PROGRAM | + _NEW_TEXTURE)) + _swrast_update_active_attribs(ctx); + + if (swrast->NewState & (_NEW_FOG | + _NEW_PROGRAM | + _NEW_LIGHT | + _NEW_TEXTURE)) + _swrast_update_specular_vertex_add(ctx); + + swrast->NewState = 0; + swrast->StateChanges = 0; + swrast->InvalidateState = _swrast_invalidate_state; + } +} + +#define SWRAST_DEBUG 0 + +/* Public entrypoints: See also s_accum.c, s_bitmap.c, etc. + */ +void +_swrast_Quad( struct gl_context *ctx, + const SWvertex *v0, const SWvertex *v1, + const SWvertex *v2, const SWvertex *v3 ) +{ + if (SWRAST_DEBUG) { + _mesa_debug(ctx, "_swrast_Quad\n"); + _swrast_print_vertex( ctx, v0 ); + _swrast_print_vertex( ctx, v1 ); + _swrast_print_vertex( ctx, v2 ); + _swrast_print_vertex( ctx, v3 ); + } + SWRAST_CONTEXT(ctx)->Triangle( ctx, v0, v1, v3 ); + SWRAST_CONTEXT(ctx)->Triangle( ctx, v1, v2, v3 ); +} + +void +_swrast_Triangle( struct gl_context *ctx, const SWvertex *v0, + const SWvertex *v1, const SWvertex *v2 ) +{ + if (SWRAST_DEBUG) { + _mesa_debug(ctx, "_swrast_Triangle\n"); + _swrast_print_vertex( ctx, v0 ); + _swrast_print_vertex( ctx, v1 ); + _swrast_print_vertex( ctx, v2 ); + } + SWRAST_CONTEXT(ctx)->Triangle( ctx, v0, v1, v2 ); +} + +void +_swrast_Line( struct gl_context *ctx, const SWvertex *v0, const SWvertex *v1 ) +{ + if (SWRAST_DEBUG) { + _mesa_debug(ctx, "_swrast_Line\n"); + _swrast_print_vertex( ctx, v0 ); + _swrast_print_vertex( ctx, v1 ); + } + SWRAST_CONTEXT(ctx)->Line( ctx, v0, v1 ); +} + +void +_swrast_Point( struct gl_context *ctx, const SWvertex *v0 ) +{ + if (SWRAST_DEBUG) { + _mesa_debug(ctx, "_swrast_Point\n"); + _swrast_print_vertex( ctx, v0 ); + } + SWRAST_CONTEXT(ctx)->Point( ctx, v0 ); +} + +void +_swrast_InvalidateState( struct gl_context *ctx, GLbitfield new_state ) +{ + if (SWRAST_DEBUG) { + _mesa_debug(ctx, "_swrast_InvalidateState\n"); + } + SWRAST_CONTEXT(ctx)->InvalidateState( ctx, new_state ); +} + +void +_swrast_ResetLineStipple( struct gl_context *ctx ) +{ + if (SWRAST_DEBUG) { + _mesa_debug(ctx, "_swrast_ResetLineStipple\n"); + } + SWRAST_CONTEXT(ctx)->StippleCounter = 0; +} + +void +_swrast_SetFacing(struct gl_context *ctx, GLuint facing) +{ + SWRAST_CONTEXT(ctx)->PointLineFacing = facing; +} + +void +_swrast_allow_vertex_fog( struct gl_context *ctx, GLboolean value ) +{ + if (SWRAST_DEBUG) { + _mesa_debug(ctx, "_swrast_allow_vertex_fog %d\n", value); + } + SWRAST_CONTEXT(ctx)->InvalidateState( ctx, _NEW_HINT ); + SWRAST_CONTEXT(ctx)->AllowVertexFog = value; +} + +void +_swrast_allow_pixel_fog( struct gl_context *ctx, GLboolean value ) +{ + if (SWRAST_DEBUG) { + _mesa_debug(ctx, "_swrast_allow_pixel_fog %d\n", value); + } + SWRAST_CONTEXT(ctx)->InvalidateState( ctx, _NEW_HINT ); + SWRAST_CONTEXT(ctx)->AllowPixelFog = value; +} + + +GLboolean +_swrast_CreateContext( struct gl_context *ctx ) +{ + GLuint i; + SWcontext *swrast = (SWcontext *)CALLOC(sizeof(SWcontext)); + + if (SWRAST_DEBUG) { + _mesa_debug(ctx, "_swrast_CreateContext\n"); + } + + if (!swrast) + return GL_FALSE; + + swrast->NewState = ~0; + + swrast->choose_point = _swrast_choose_point; + swrast->choose_line = _swrast_choose_line; + swrast->choose_triangle = _swrast_choose_triangle; + + swrast->InvalidatePointMask = _SWRAST_NEW_POINT; + swrast->InvalidateLineMask = _SWRAST_NEW_LINE; + swrast->InvalidateTriangleMask = _SWRAST_NEW_TRIANGLE; + + swrast->Point = _swrast_validate_point; + swrast->Line = _swrast_validate_line; + swrast->Triangle = _swrast_validate_triangle; + swrast->InvalidateState = _swrast_sleep; + swrast->BlendFunc = _swrast_validate_blend_func; + + swrast->AllowVertexFog = GL_TRUE; + swrast->AllowPixelFog = GL_TRUE; + + /* Optimized Accum buffer */ + swrast->_IntegerAccumMode = GL_FALSE; + swrast->_IntegerAccumScaler = 0.0; + + for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++) + swrast->TextureSample[i] = NULL; + + swrast->SpanArrays = MALLOC_STRUCT(sw_span_arrays); + if (!swrast->SpanArrays) { + FREE(swrast); + return GL_FALSE; + } + swrast->SpanArrays->ChanType = CHAN_TYPE; +#if CHAN_TYPE == GL_UNSIGNED_BYTE + swrast->SpanArrays->rgba = swrast->SpanArrays->rgba8; +#elif CHAN_TYPE == GL_UNSIGNED_SHORT + swrast->SpanArrays->rgba = swrast->SpanArrays->rgba16; +#else + swrast->SpanArrays->rgba = swrast->SpanArrays->attribs[FRAG_ATTRIB_COL0]; +#endif + + /* init point span buffer */ + swrast->PointSpan.primitive = GL_POINT; + swrast->PointSpan.end = 0; + swrast->PointSpan.facing = 0; + swrast->PointSpan.array = swrast->SpanArrays; + + swrast->TexelBuffer = (GLfloat *) MALLOC(ctx->Const.MaxTextureImageUnits * + MAX_WIDTH * 4 * sizeof(GLfloat)); + if (!swrast->TexelBuffer) { + FREE(swrast->SpanArrays); + FREE(swrast); + return GL_FALSE; + } + + ctx->swrast_context = swrast; + + return GL_TRUE; +} + +void +_swrast_DestroyContext( struct gl_context *ctx ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + + if (SWRAST_DEBUG) { + _mesa_debug(ctx, "_swrast_DestroyContext\n"); + } + + FREE( swrast->SpanArrays ); + if (swrast->ZoomedArrays) + FREE( swrast->ZoomedArrays ); + FREE( swrast->TexelBuffer ); + FREE( swrast ); + + ctx->swrast_context = 0; +} + + +struct swrast_device_driver * +_swrast_GetDeviceDriverReference( struct gl_context *ctx ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + return &swrast->Driver; +} + +void +_swrast_flush( struct gl_context *ctx ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + /* flush any pending fragments from rendering points */ + if (swrast->PointSpan.end > 0) { + _swrast_write_rgba_span(ctx, &(swrast->PointSpan)); + swrast->PointSpan.end = 0; + } +} + +void +_swrast_render_primitive( struct gl_context *ctx, GLenum prim ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + if (swrast->Primitive == GL_POINTS && prim != GL_POINTS) { + _swrast_flush(ctx); + } + swrast->Primitive = prim; +} + + +void +_swrast_render_start( struct gl_context *ctx ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + if (swrast->Driver.SpanRenderStart) + swrast->Driver.SpanRenderStart( ctx ); + swrast->PointSpan.end = 0; +} + +void +_swrast_render_finish( struct gl_context *ctx ) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + if (swrast->Driver.SpanRenderFinish) + swrast->Driver.SpanRenderFinish( ctx ); + + _swrast_flush(ctx); +} + + +#define SWRAST_DEBUG_VERTICES 0 + +void +_swrast_print_vertex( struct gl_context *ctx, const SWvertex *v ) +{ + GLuint i; + + if (SWRAST_DEBUG_VERTICES) { + _mesa_debug(ctx, "win %f %f %f %f\n", + v->attrib[FRAG_ATTRIB_WPOS][0], + v->attrib[FRAG_ATTRIB_WPOS][1], + v->attrib[FRAG_ATTRIB_WPOS][2], + v->attrib[FRAG_ATTRIB_WPOS][3]); + + for (i = 0 ; i < ctx->Const.MaxTextureCoordUnits ; i++) + if (ctx->Texture.Unit[i]._ReallyEnabled) + _mesa_debug(ctx, "texcoord[%d] %f %f %f %f\n", i, + v->attrib[FRAG_ATTRIB_TEX0 + i][0], + v->attrib[FRAG_ATTRIB_TEX0 + i][1], + v->attrib[FRAG_ATTRIB_TEX0 + i][2], + v->attrib[FRAG_ATTRIB_TEX0 + i][3]); + +#if CHAN_TYPE == GL_FLOAT + _mesa_debug(ctx, "color %f %f %f %f\n", + v->color[0], v->color[1], v->color[2], v->color[3]); +#else + _mesa_debug(ctx, "color %d %d %d %d\n", + v->color[0], v->color[1], v->color[2], v->color[3]); +#endif + _mesa_debug(ctx, "spec %g %g %g %g\n", + v->attrib[FRAG_ATTRIB_COL1][0], + v->attrib[FRAG_ATTRIB_COL1][1], + v->attrib[FRAG_ATTRIB_COL1][2], + v->attrib[FRAG_ATTRIB_COL1][3]); + _mesa_debug(ctx, "fog %f\n", v->attrib[FRAG_ATTRIB_FOGC][0]); + _mesa_debug(ctx, "index %f\n", v->attrib[FRAG_ATTRIB_CI][0]); + _mesa_debug(ctx, "pointsize %f\n", v->pointSize); + _mesa_debug(ctx, "\n"); + } +} diff --git a/mesalib/src/mesa/swrast/s_context.h b/mesalib/src/mesa/swrast/s_context.h index 7535832ab..8d7458c2d 100644 --- a/mesalib/src/mesa/swrast/s_context.h +++ b/mesalib/src/mesa/swrast/s_context.h @@ -1,349 +1,348 @@ -/*
- * Mesa 3-D graphics library
- * Version: 6.5.3
- *
- * Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/**
- * \file swrast/s_context.h
- * \brief Software rasterization context and private types.
- * \author Keith Whitwell <keith@tungstengraphics.com>
- */
-
-/**
- * \mainpage swrast module
- *
- * This module, software rasterization, contains the software fallback
- * routines for drawing points, lines, triangles, bitmaps and images.
- * All rendering boils down to writing spans (arrays) of pixels with
- * particular colors. The span-writing routines must be implemented
- * by the device driver.
- */
-
-
-#ifndef S_CONTEXT_H
-#define S_CONTEXT_H
-
-#include "main/compiler.h"
-#include "main/mtypes.h"
-#include "program/prog_execute.h"
-#include "swrast.h"
-#include "s_span.h"
-
-
-typedef void (*texture_sample_func)(struct gl_context *ctx,
- const struct gl_texture_object *tObj,
- GLuint n, const GLfloat texcoords[][4],
- const GLfloat lambda[], GLfloat rgba[][4]);
-
-typedef void (_ASMAPIP blend_func)( struct gl_context *ctx, GLuint n,
- const GLubyte mask[],
- GLvoid *src, const GLvoid *dst,
- GLenum chanType);
-
-typedef void (*swrast_point_func)( struct gl_context *ctx, const SWvertex *);
-
-typedef void (*swrast_line_func)( struct gl_context *ctx,
- const SWvertex *, const SWvertex *);
-
-typedef void (*swrast_tri_func)( struct gl_context *ctx, const SWvertex *,
- const SWvertex *, const SWvertex *);
-
-
-typedef void (*validate_texture_image_func)(struct gl_context *ctx,
- struct gl_texture_object *texObj,
- GLuint face, GLuint level);
-
-
-/**
- * \defgroup Bitmasks
- * Bitmasks to indicate which rasterization options are enabled
- * (RasterMask)
- */
-/*@{*/
-#define ALPHATEST_BIT 0x001 /**< Alpha-test pixels */
-#define BLEND_BIT 0x002 /**< Blend pixels */
-#define DEPTH_BIT 0x004 /**< Depth-test pixels */
-#define FOG_BIT 0x008 /**< Fog pixels */
-#define LOGIC_OP_BIT 0x010 /**< Apply logic op in software */
-#define CLIP_BIT 0x020 /**< Scissor or window clip pixels */
-#define STENCIL_BIT 0x040 /**< Stencil pixels */
-#define MASKING_BIT 0x080 /**< Do glColorMask or glIndexMask */
-#define MULTI_DRAW_BIT 0x400 /**< Write to more than one color- */
- /**< buffer or no buffers. */
-#define OCCLUSION_BIT 0x800 /**< GL_HP_occlusion_test enabled */
-#define TEXTURE_BIT 0x1000 /**< Texturing really enabled */
-#define FRAGPROG_BIT 0x2000 /**< Fragment program enabled */
-#define ATIFRAGSHADER_BIT 0x4000 /**< ATI Fragment shader enabled */
-#define CLAMPING_BIT 0x8000 /**< Clamp colors to [0,1] */
-/*@}*/
-
-#define _SWRAST_NEW_RASTERMASK (_NEW_BUFFERS| \
- _NEW_SCISSOR| \
- _NEW_COLOR| \
- _NEW_DEPTH| \
- _NEW_FOG| \
- _NEW_PROGRAM| \
- _NEW_STENCIL| \
- _NEW_TEXTURE| \
- _NEW_VIEWPORT| \
- _NEW_DEPTH)
-
-
-/**
- * \struct SWcontext
- * \brief Per-context state that's private to the software rasterizer module.
- */
-typedef struct
-{
- /** Driver interface:
- */
- struct swrast_device_driver Driver;
-
- /** Configuration mechanisms to make software rasterizer match
- * characteristics of the hardware rasterizer (if present):
- */
- GLboolean AllowVertexFog;
- GLboolean AllowPixelFog;
-
- /** Derived values, invalidated on statechanges, updated from
- * _swrast_validate_derived():
- */
- GLbitfield _RasterMask;
- GLfloat _BackfaceSign; /** +1 or -1 */
- GLfloat _BackfaceCullSign; /** +1, 0, or -1 */
- GLboolean _PreferPixelFog; /* Compute fog blend factor per fragment? */
- GLboolean _TextureCombinePrimary;
- GLboolean _FogEnabled;
- GLboolean _DeferredTexture;
- GLenum _FogMode; /* either GL_FOG_MODE or fragment program's fog mode */
-
- /** List/array of the fragment attributes to interpolate */
- GLuint _ActiveAttribs[FRAG_ATTRIB_MAX];
- /** Same info, but as a bitmask */
- GLbitfield _ActiveAttribMask;
- /** Number of fragment attributes to interpolate */
- GLuint _NumActiveAttribs;
- /** Indicates how each attrib is to be interpolated (lines/tris) */
- GLenum _InterpMode[FRAG_ATTRIB_MAX]; /* GL_FLAT or GL_SMOOTH (for now) */
-
- /* Accum buffer temporaries.
- */
- GLboolean _IntegerAccumMode; /**< Storing unscaled integers? */
- GLfloat _IntegerAccumScaler; /**< Implicit scale factor */
-
- /* Working values:
- */
- GLuint StippleCounter; /**< Line stipple counter */
- GLuint PointLineFacing;
- GLbitfield NewState;
- GLuint StateChanges;
- GLenum Primitive; /* current primitive being drawn (ala glBegin) */
- GLboolean SpecularVertexAdd; /**< Add specular/secondary color per vertex */
-
- void (*InvalidateState)( struct gl_context *ctx, GLbitfield new_state );
-
- /**
- * When the NewState mask intersects these masks, we invalidate the
- * Point/Line/Triangle function pointers below.
- */
- /*@{*/
- GLbitfield InvalidatePointMask;
- GLbitfield InvalidateLineMask;
- GLbitfield InvalidateTriangleMask;
- /*@}*/
-
- /**
- * Device drivers plug in functions for these callbacks.
- * Will be called when the GL state change mask intersects the above masks.
- */
- /*@{*/
- void (*choose_point)( struct gl_context * );
- void (*choose_line)( struct gl_context * );
- void (*choose_triangle)( struct gl_context * );
- /*@}*/
-
- /**
- * Current point, line and triangle drawing functions.
- */
- /*@{*/
- swrast_point_func Point;
- swrast_line_func Line;
- swrast_tri_func Triangle;
- /*@}*/
-
- /**
- * Placeholders for when separate specular (or secondary color) is
- * enabled but texturing is not.
- */
- /*@{*/
- swrast_point_func SpecPoint;
- swrast_line_func SpecLine;
- swrast_tri_func SpecTriangle;
- /*@}*/
-
- /**
- * Typically, we'll allocate a sw_span structure as a local variable
- * and set its 'array' pointer to point to this object. The reason is
- * this object is big and causes problems when allocated on the stack
- * on some systems.
- */
- SWspanarrays *SpanArrays;
- SWspanarrays *ZoomedArrays; /**< For pixel zooming */
-
- /**
- * Used to buffer N GL_POINTS, instead of rendering one by one.
- */
- SWspan PointSpan;
-
- /** Internal hooks, kept up to date by the same mechanism as above.
- */
- blend_func BlendFunc;
- texture_sample_func TextureSample[MAX_TEXTURE_IMAGE_UNITS];
-
- /** Buffer for saving the sampled texture colors.
- * Needed for GL_ARB_texture_env_crossbar implementation.
- */
- GLfloat *TexelBuffer;
-
- validate_texture_image_func ValidateTextureImage;
-
- /** State used during execution of fragment programs */
- struct gl_program_machine FragProgMachine;
-
-} SWcontext;
-
-
-extern void
-_swrast_validate_derived( struct gl_context *ctx );
-
-extern void
-_swrast_update_texture_samplers(struct gl_context *ctx);
-
-
-/** Return SWcontext for the given struct gl_context */
-static INLINE SWcontext *
-SWRAST_CONTEXT(struct gl_context *ctx)
-{
- return (SWcontext *) ctx->swrast_context;
-}
-
-/** const version of above */
-static INLINE const SWcontext *
-CONST_SWRAST_CONTEXT(const struct gl_context *ctx)
-{
- return (const SWcontext *) ctx->swrast_context;
-}
-
-
-/**
- * Called prior to framebuffer reading/writing.
- * For drivers that rely on swrast for fallback rendering, this is the
- * driver's opportunity to map renderbuffers and textures.
- */
-static INLINE void
-swrast_render_start(struct gl_context *ctx)
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- if (swrast->Driver.SpanRenderStart)
- swrast->Driver.SpanRenderStart(ctx);
-}
-
-
-/** Called after framebuffer reading/writing */
-static INLINE void
-swrast_render_finish(struct gl_context *ctx)
-{
- SWcontext *swrast = SWRAST_CONTEXT(ctx);
- if (swrast->Driver.SpanRenderFinish)
- swrast->Driver.SpanRenderFinish(ctx);
-}
-
-
-
-/**
- * Size of an RGBA pixel, in bytes, for given datatype.
- */
-#define RGBA_PIXEL_SIZE(TYPE) \
- ((TYPE == GL_UNSIGNED_BYTE) ? 4 * sizeof(GLubyte) : \
- ((TYPE == GL_UNSIGNED_SHORT) ? 4 * sizeof(GLushort) \
- : 4 * sizeof(GLfloat)))
-
-
-
-/*
- * Fixed point arithmetic macros
- */
-#ifndef FIXED_FRAC_BITS
-#define FIXED_FRAC_BITS 11
-#endif
-
-#define FIXED_SHIFT FIXED_FRAC_BITS
-#define FIXED_ONE (1 << FIXED_SHIFT)
-#define FIXED_HALF (1 << (FIXED_SHIFT-1))
-#define FIXED_FRAC_MASK (FIXED_ONE - 1)
-#define FIXED_INT_MASK (~FIXED_FRAC_MASK)
-#define FIXED_EPSILON 1
-#define FIXED_SCALE ((float) FIXED_ONE)
-#define FIXED_DBL_SCALE ((double) FIXED_ONE)
-#define FloatToFixed(X) (IROUND((X) * FIXED_SCALE))
-#define FixedToDouble(X) ((X) * (1.0 / FIXED_DBL_SCALE))
-#define IntToFixed(I) ((I) << FIXED_SHIFT)
-#define FixedToInt(X) ((X) >> FIXED_SHIFT)
-#define FixedToUns(X) (((unsigned int)(X)) >> FIXED_SHIFT)
-#define FixedCeil(X) (((X) + FIXED_ONE - FIXED_EPSILON) & FIXED_INT_MASK)
-#define FixedFloor(X) ((X) & FIXED_INT_MASK)
-#define FixedToFloat(X) ((X) * (1.0F / FIXED_SCALE))
-#define PosFloatToFixed(X) FloatToFixed(X)
-#define SignedFloatToFixed(X) FloatToFixed(X)
-
-
-
-/*
- * XXX these macros are just bandages for now in order to make
- * CHAN_BITS==32 compile cleanly.
- * These should probably go elsewhere at some point.
- */
-#if CHAN_TYPE == GL_FLOAT
-#define ChanToFixed(X) (X)
-#define FixedToChan(X) (X)
-#else
-#define ChanToFixed(X) IntToFixed(X)
-#define FixedToChan(X) FixedToInt(X)
-#endif
-
-
-/**
- * For looping over fragment attributes in the pointe, line
- * triangle rasterizers.
- */
-#define ATTRIB_LOOP_BEGIN \
- { \
- GLuint a; \
- for (a = 0; a < swrast->_NumActiveAttribs; a++) { \
- const GLuint attr = swrast->_ActiveAttribs[a];
-
-#define ATTRIB_LOOP_END } }
-
-
-
-#endif
+/* + * Mesa 3-D graphics library + * Version: 6.5.3 + * + * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/** + * \file swrast/s_context.h + * \brief Software rasterization context and private types. + * \author Keith Whitwell <keith@tungstengraphics.com> + */ + +/** + * \mainpage swrast module + * + * This module, software rasterization, contains the software fallback + * routines for drawing points, lines, triangles, bitmaps and images. + * All rendering boils down to writing spans (arrays) of pixels with + * particular colors. The span-writing routines must be implemented + * by the device driver. + */ + + +#ifndef S_CONTEXT_H +#define S_CONTEXT_H + +#include "main/compiler.h" +#include "main/mtypes.h" +#include "program/prog_execute.h" +#include "swrast.h" +#include "s_span.h" + + +typedef void (*texture_sample_func)(struct gl_context *ctx, + const struct gl_texture_object *tObj, + GLuint n, const GLfloat texcoords[][4], + const GLfloat lambda[], GLfloat rgba[][4]); + +typedef void (_ASMAPIP blend_func)( struct gl_context *ctx, GLuint n, + const GLubyte mask[], + GLvoid *src, const GLvoid *dst, + GLenum chanType); + +typedef void (*swrast_point_func)( struct gl_context *ctx, const SWvertex *); + +typedef void (*swrast_line_func)( struct gl_context *ctx, + const SWvertex *, const SWvertex *); + +typedef void (*swrast_tri_func)( struct gl_context *ctx, const SWvertex *, + const SWvertex *, const SWvertex *); + + +typedef void (*validate_texture_image_func)(struct gl_context *ctx, + struct gl_texture_object *texObj, + GLuint face, GLuint level); + + +/** + * \defgroup Bitmasks + * Bitmasks to indicate which rasterization options are enabled + * (RasterMask) + */ +/*@{*/ +#define ALPHATEST_BIT 0x001 /**< Alpha-test pixels */ +#define BLEND_BIT 0x002 /**< Blend pixels */ +#define DEPTH_BIT 0x004 /**< Depth-test pixels */ +#define FOG_BIT 0x008 /**< Fog pixels */ +#define LOGIC_OP_BIT 0x010 /**< Apply logic op in software */ +#define CLIP_BIT 0x020 /**< Scissor or window clip pixels */ +#define STENCIL_BIT 0x040 /**< Stencil pixels */ +#define MASKING_BIT 0x080 /**< Do glColorMask or glIndexMask */ +#define MULTI_DRAW_BIT 0x400 /**< Write to more than one color- */ + /**< buffer or no buffers. */ +#define OCCLUSION_BIT 0x800 /**< GL_HP_occlusion_test enabled */ +#define TEXTURE_BIT 0x1000 /**< Texturing really enabled */ +#define FRAGPROG_BIT 0x2000 /**< Fragment program enabled */ +#define ATIFRAGSHADER_BIT 0x4000 /**< ATI Fragment shader enabled */ +#define CLAMPING_BIT 0x8000 /**< Clamp colors to [0,1] */ +/*@}*/ + +#define _SWRAST_NEW_RASTERMASK (_NEW_BUFFERS| \ + _NEW_SCISSOR| \ + _NEW_COLOR| \ + _NEW_DEPTH| \ + _NEW_FOG| \ + _NEW_PROGRAM| \ + _NEW_STENCIL| \ + _NEW_TEXTURE| \ + _NEW_VIEWPORT| \ + _NEW_DEPTH) + + +/** + * \struct SWcontext + * \brief Per-context state that's private to the software rasterizer module. + */ +typedef struct +{ + /** Driver interface: + */ + struct swrast_device_driver Driver; + + /** Configuration mechanisms to make software rasterizer match + * characteristics of the hardware rasterizer (if present): + */ + GLboolean AllowVertexFog; + GLboolean AllowPixelFog; + + /** Derived values, invalidated on statechanges, updated from + * _swrast_validate_derived(): + */ + GLbitfield _RasterMask; + GLfloat _BackfaceSign; /** +1 or -1 */ + GLfloat _BackfaceCullSign; /** +1, 0, or -1 */ + GLboolean _PreferPixelFog; /* Compute fog blend factor per fragment? */ + GLboolean _TextureCombinePrimary; + GLboolean _FogEnabled; + GLboolean _DeferredTexture; + + /** List/array of the fragment attributes to interpolate */ + GLuint _ActiveAttribs[FRAG_ATTRIB_MAX]; + /** Same info, but as a bitmask */ + GLbitfield _ActiveAttribMask; + /** Number of fragment attributes to interpolate */ + GLuint _NumActiveAttribs; + /** Indicates how each attrib is to be interpolated (lines/tris) */ + GLenum _InterpMode[FRAG_ATTRIB_MAX]; /* GL_FLAT or GL_SMOOTH (for now) */ + + /* Accum buffer temporaries. + */ + GLboolean _IntegerAccumMode; /**< Storing unscaled integers? */ + GLfloat _IntegerAccumScaler; /**< Implicit scale factor */ + + /* Working values: + */ + GLuint StippleCounter; /**< Line stipple counter */ + GLuint PointLineFacing; + GLbitfield NewState; + GLuint StateChanges; + GLenum Primitive; /* current primitive being drawn (ala glBegin) */ + GLboolean SpecularVertexAdd; /**< Add specular/secondary color per vertex */ + + void (*InvalidateState)( struct gl_context *ctx, GLbitfield new_state ); + + /** + * When the NewState mask intersects these masks, we invalidate the + * Point/Line/Triangle function pointers below. + */ + /*@{*/ + GLbitfield InvalidatePointMask; + GLbitfield InvalidateLineMask; + GLbitfield InvalidateTriangleMask; + /*@}*/ + + /** + * Device drivers plug in functions for these callbacks. + * Will be called when the GL state change mask intersects the above masks. + */ + /*@{*/ + void (*choose_point)( struct gl_context * ); + void (*choose_line)( struct gl_context * ); + void (*choose_triangle)( struct gl_context * ); + /*@}*/ + + /** + * Current point, line and triangle drawing functions. + */ + /*@{*/ + swrast_point_func Point; + swrast_line_func Line; + swrast_tri_func Triangle; + /*@}*/ + + /** + * Placeholders for when separate specular (or secondary color) is + * enabled but texturing is not. + */ + /*@{*/ + swrast_point_func SpecPoint; + swrast_line_func SpecLine; + swrast_tri_func SpecTriangle; + /*@}*/ + + /** + * Typically, we'll allocate a sw_span structure as a local variable + * and set its 'array' pointer to point to this object. The reason is + * this object is big and causes problems when allocated on the stack + * on some systems. + */ + SWspanarrays *SpanArrays; + SWspanarrays *ZoomedArrays; /**< For pixel zooming */ + + /** + * Used to buffer N GL_POINTS, instead of rendering one by one. + */ + SWspan PointSpan; + + /** Internal hooks, kept up to date by the same mechanism as above. + */ + blend_func BlendFunc; + texture_sample_func TextureSample[MAX_TEXTURE_IMAGE_UNITS]; + + /** Buffer for saving the sampled texture colors. + * Needed for GL_ARB_texture_env_crossbar implementation. + */ + GLfloat *TexelBuffer; + + validate_texture_image_func ValidateTextureImage; + + /** State used during execution of fragment programs */ + struct gl_program_machine FragProgMachine; + +} SWcontext; + + +extern void +_swrast_validate_derived( struct gl_context *ctx ); + +extern void +_swrast_update_texture_samplers(struct gl_context *ctx); + + +/** Return SWcontext for the given struct gl_context */ +static INLINE SWcontext * +SWRAST_CONTEXT(struct gl_context *ctx) +{ + return (SWcontext *) ctx->swrast_context; +} + +/** const version of above */ +static INLINE const SWcontext * +CONST_SWRAST_CONTEXT(const struct gl_context *ctx) +{ + return (const SWcontext *) ctx->swrast_context; +} + + +/** + * Called prior to framebuffer reading/writing. + * For drivers that rely on swrast for fallback rendering, this is the + * driver's opportunity to map renderbuffers and textures. + */ +static INLINE void +swrast_render_start(struct gl_context *ctx) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + if (swrast->Driver.SpanRenderStart) + swrast->Driver.SpanRenderStart(ctx); +} + + +/** Called after framebuffer reading/writing */ +static INLINE void +swrast_render_finish(struct gl_context *ctx) +{ + SWcontext *swrast = SWRAST_CONTEXT(ctx); + if (swrast->Driver.SpanRenderFinish) + swrast->Driver.SpanRenderFinish(ctx); +} + + + +/** + * Size of an RGBA pixel, in bytes, for given datatype. + */ +#define RGBA_PIXEL_SIZE(TYPE) \ + ((TYPE == GL_UNSIGNED_BYTE) ? 4 * sizeof(GLubyte) : \ + ((TYPE == GL_UNSIGNED_SHORT) ? 4 * sizeof(GLushort) \ + : 4 * sizeof(GLfloat))) + + + +/* + * Fixed point arithmetic macros + */ +#ifndef FIXED_FRAC_BITS +#define FIXED_FRAC_BITS 11 +#endif + +#define FIXED_SHIFT FIXED_FRAC_BITS +#define FIXED_ONE (1 << FIXED_SHIFT) +#define FIXED_HALF (1 << (FIXED_SHIFT-1)) +#define FIXED_FRAC_MASK (FIXED_ONE - 1) +#define FIXED_INT_MASK (~FIXED_FRAC_MASK) +#define FIXED_EPSILON 1 +#define FIXED_SCALE ((float) FIXED_ONE) +#define FIXED_DBL_SCALE ((double) FIXED_ONE) +#define FloatToFixed(X) (IROUND((X) * FIXED_SCALE)) +#define FixedToDouble(X) ((X) * (1.0 / FIXED_DBL_SCALE)) +#define IntToFixed(I) ((I) << FIXED_SHIFT) +#define FixedToInt(X) ((X) >> FIXED_SHIFT) +#define FixedToUns(X) (((unsigned int)(X)) >> FIXED_SHIFT) +#define FixedCeil(X) (((X) + FIXED_ONE - FIXED_EPSILON) & FIXED_INT_MASK) +#define FixedFloor(X) ((X) & FIXED_INT_MASK) +#define FixedToFloat(X) ((X) * (1.0F / FIXED_SCALE)) +#define PosFloatToFixed(X) FloatToFixed(X) +#define SignedFloatToFixed(X) FloatToFixed(X) + + + +/* + * XXX these macros are just bandages for now in order to make + * CHAN_BITS==32 compile cleanly. + * These should probably go elsewhere at some point. + */ +#if CHAN_TYPE == GL_FLOAT +#define ChanToFixed(X) (X) +#define FixedToChan(X) (X) +#else +#define ChanToFixed(X) IntToFixed(X) +#define FixedToChan(X) FixedToInt(X) +#endif + + +/** + * For looping over fragment attributes in the pointe, line + * triangle rasterizers. + */ +#define ATTRIB_LOOP_BEGIN \ + { \ + GLuint a; \ + for (a = 0; a < swrast->_NumActiveAttribs; a++) { \ + const GLuint attr = swrast->_ActiveAttribs[a]; + +#define ATTRIB_LOOP_END } } + + + +#endif diff --git a/mesalib/src/mesa/swrast/s_fog.c b/mesalib/src/mesa/swrast/s_fog.c index 5acb5f4d1..ea59de160 100644 --- a/mesalib/src/mesa/swrast/s_fog.c +++ b/mesalib/src/mesa/swrast/s_fog.c @@ -1,244 +1,244 @@ -/*
- * Mesa 3-D graphics library
- * Version: 6.5.2
- *
- * Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#include "main/glheader.h"
-#include "main/colormac.h"
-#include "main/macros.h"
-
-#include "s_context.h"
-#include "s_fog.h"
-
-
-/**
- * Used to convert current raster distance to a fog factor in [0,1].
- */
-GLfloat
-_swrast_z_to_fogfactor(struct gl_context *ctx, GLfloat z)
-{
- GLfloat d, f;
-
- switch (ctx->Fog.Mode) {
- case GL_LINEAR:
- if (ctx->Fog.Start == ctx->Fog.End)
- d = 1.0F;
- else
- d = 1.0F / (ctx->Fog.End - ctx->Fog.Start);
- f = (ctx->Fog.End - z) * d;
- return CLAMP(f, 0.0F, 1.0F);
- case GL_EXP:
- d = ctx->Fog.Density;
- f = EXPF(-d * z);
- f = CLAMP(f, 0.0F, 1.0F);
- return f;
- case GL_EXP2:
- d = ctx->Fog.Density;
- f = EXPF(-(d * d * z * z));
- f = CLAMP(f, 0.0F, 1.0F);
- return f;
- default:
- _mesa_problem(ctx, "Bad fog mode in _swrast_z_to_fogfactor");
- return 0.0;
- }
-}
-
-
-#define LINEAR_FOG(f, coord) f = (fogEnd - coord) * fogScale
-
-#define EXP_FOG(f, coord) f = EXPF(density * coord)
-
-#define EXP2_FOG(f, coord) \
-do { \
- GLfloat tmp = negDensitySquared * coord * coord; \
- if (tmp < FLT_MIN_10_EXP) \
- tmp = FLT_MIN_10_EXP; \
- f = EXPF(tmp); \
- } while(0)
-
-
-#define BLEND_FOG(f, coord) f = coord
-
-
-
-/**
- * Template code for computing fog blend factor and applying it to colors.
- * \param TYPE either GLubyte, GLushort or GLfloat.
- * \param COMPUTE_F code to compute the fog blend factor, f.
- */
-#define FOG_LOOP(TYPE, FOG_FUNC) \
-if (span->arrayAttribs & FRAG_BIT_FOGC) { \
- GLuint i; \
- for (i = 0; i < span->end; i++) { \
- const GLfloat fogCoord = span->array->attribs[FRAG_ATTRIB_FOGC][i][0]; \
- const GLfloat c = FABSF(fogCoord); \
- GLfloat f, oneMinusF; \
- FOG_FUNC(f, c); \
- f = CLAMP(f, 0.0F, 1.0F); \
- oneMinusF = 1.0F - f; \
- rgba[i][RCOMP] = (TYPE) (f * rgba[i][RCOMP] + oneMinusF * rFog); \
- rgba[i][GCOMP] = (TYPE) (f * rgba[i][GCOMP] + oneMinusF * gFog); \
- rgba[i][BCOMP] = (TYPE) (f * rgba[i][BCOMP] + oneMinusF * bFog); \
- } \
-} \
-else { \
- const GLfloat fogStep = span->attrStepX[FRAG_ATTRIB_FOGC][0]; \
- GLfloat fogCoord = span->attrStart[FRAG_ATTRIB_FOGC][0]; \
- const GLfloat wStep = span->attrStepX[FRAG_ATTRIB_WPOS][3]; \
- GLfloat w = span->attrStart[FRAG_ATTRIB_WPOS][3]; \
- GLuint i; \
- for (i = 0; i < span->end; i++) { \
- const GLfloat c = FABSF(fogCoord) / w; \
- GLfloat f, oneMinusF; \
- FOG_FUNC(f, c); \
- f = CLAMP(f, 0.0F, 1.0F); \
- oneMinusF = 1.0F - f; \
- rgba[i][RCOMP] = (TYPE) (f * rgba[i][RCOMP] + oneMinusF * rFog); \
- rgba[i][GCOMP] = (TYPE) (f * rgba[i][GCOMP] + oneMinusF * gFog); \
- rgba[i][BCOMP] = (TYPE) (f * rgba[i][BCOMP] + oneMinusF * bFog); \
- fogCoord += fogStep; \
- w += wStep; \
- } \
-}
-
-/**
- * Apply fog to a span of RGBA pixels.
- * The fog value are either in the span->array->fog array or interpolated from
- * the fog/fogStep values.
- * They fog values are either fog coordinates (Z) or fog blend factors.
- * _PreferPixelFog should be in sync with that state!
- */
-void
-_swrast_fog_rgba_span( const struct gl_context *ctx, SWspan *span )
-{
- const SWcontext *swrast = CONST_SWRAST_CONTEXT(ctx);
- GLfloat rFog, gFog, bFog;
-
- ASSERT(swrast->_FogEnabled);
- ASSERT(span->arrayMask & SPAN_RGBA);
-
- /* compute (scaled) fog color */
- if (span->array->ChanType == GL_UNSIGNED_BYTE) {
- rFog = ctx->Fog.Color[RCOMP] * 255.0F;
- gFog = ctx->Fog.Color[GCOMP] * 255.0F;
- bFog = ctx->Fog.Color[BCOMP] * 255.0F;
- }
- else if (span->array->ChanType == GL_UNSIGNED_SHORT) {
- rFog = ctx->Fog.Color[RCOMP] * 65535.0F;
- gFog = ctx->Fog.Color[GCOMP] * 65535.0F;
- bFog = ctx->Fog.Color[BCOMP] * 65535.0F;
- }
- else {
- rFog = ctx->Fog.Color[RCOMP];
- gFog = ctx->Fog.Color[GCOMP];
- bFog = ctx->Fog.Color[BCOMP];
- }
-
- if (swrast->_PreferPixelFog) {
- /* The span's fog values are fog coordinates, now compute blend factors
- * and blend the fragment colors with the fog color.
- */
- switch (swrast->_FogMode) {
- case GL_LINEAR:
- {
- const GLfloat fogEnd = ctx->Fog.End;
- const GLfloat fogScale = (ctx->Fog.Start == ctx->Fog.End)
- ? 1.0F : 1.0F / (ctx->Fog.End - ctx->Fog.Start);
- if (span->array->ChanType == GL_UNSIGNED_BYTE) {
- GLubyte (*rgba)[4] = span->array->rgba8;
- FOG_LOOP(GLubyte, LINEAR_FOG);
- }
- else if (span->array->ChanType == GL_UNSIGNED_SHORT) {
- GLushort (*rgba)[4] = span->array->rgba16;
- FOG_LOOP(GLushort, LINEAR_FOG);
- }
- else {
- GLfloat (*rgba)[4] = span->array->attribs[FRAG_ATTRIB_COL0];
- ASSERT(span->array->ChanType == GL_FLOAT);
- FOG_LOOP(GLfloat, LINEAR_FOG);
- }
- }
- break;
-
- case GL_EXP:
- {
- const GLfloat density = -ctx->Fog.Density;
- if (span->array->ChanType == GL_UNSIGNED_BYTE) {
- GLubyte (*rgba)[4] = span->array->rgba8;
- FOG_LOOP(GLubyte, EXP_FOG);
- }
- else if (span->array->ChanType == GL_UNSIGNED_SHORT) {
- GLushort (*rgba)[4] = span->array->rgba16;
- FOG_LOOP(GLushort, EXP_FOG);
- }
- else {
- GLfloat (*rgba)[4] = span->array->attribs[FRAG_ATTRIB_COL0];
- ASSERT(span->array->ChanType == GL_FLOAT);
- FOG_LOOP(GLfloat, EXP_FOG);
- }
- }
- break;
-
- case GL_EXP2:
- {
- const GLfloat negDensitySquared = -ctx->Fog.Density * ctx->Fog.Density;
- if (span->array->ChanType == GL_UNSIGNED_BYTE) {
- GLubyte (*rgba)[4] = span->array->rgba8;
- FOG_LOOP(GLubyte, EXP2_FOG);
- }
- else if (span->array->ChanType == GL_UNSIGNED_SHORT) {
- GLushort (*rgba)[4] = span->array->rgba16;
- FOG_LOOP(GLushort, EXP2_FOG);
- }
- else {
- GLfloat (*rgba)[4] = span->array->attribs[FRAG_ATTRIB_COL0];
- ASSERT(span->array->ChanType == GL_FLOAT);
- FOG_LOOP(GLfloat, EXP2_FOG);
- }
- }
- break;
-
- default:
- _mesa_problem(ctx, "Bad fog mode in _swrast_fog_rgba_span");
- return;
- }
- }
- else {
- /* The span's fog start/step/array values are blend factors in [0,1].
- * They were previously computed per-vertex.
- */
- if (span->array->ChanType == GL_UNSIGNED_BYTE) {
- GLubyte (*rgba)[4] = span->array->rgba8;
- FOG_LOOP(GLubyte, BLEND_FOG);
- }
- else if (span->array->ChanType == GL_UNSIGNED_SHORT) {
- GLushort (*rgba)[4] = span->array->rgba16;
- FOG_LOOP(GLushort, BLEND_FOG);
- }
- else {
- GLfloat (*rgba)[4] = span->array->attribs[FRAG_ATTRIB_COL0];
- ASSERT(span->array->ChanType == GL_FLOAT);
- FOG_LOOP(GLfloat, BLEND_FOG);
- }
- }
-}
+/* + * Mesa 3-D graphics library + * Version: 6.5.2 + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#include "main/glheader.h" +#include "main/colormac.h" +#include "main/macros.h" + +#include "s_context.h" +#include "s_fog.h" + + +/** + * Used to convert current raster distance to a fog factor in [0,1]. + */ +GLfloat +_swrast_z_to_fogfactor(struct gl_context *ctx, GLfloat z) +{ + GLfloat d, f; + + switch (ctx->Fog.Mode) { + case GL_LINEAR: + if (ctx->Fog.Start == ctx->Fog.End) + d = 1.0F; + else + d = 1.0F / (ctx->Fog.End - ctx->Fog.Start); + f = (ctx->Fog.End - z) * d; + return CLAMP(f, 0.0F, 1.0F); + case GL_EXP: + d = ctx->Fog.Density; + f = EXPF(-d * z); + f = CLAMP(f, 0.0F, 1.0F); + return f; + case GL_EXP2: + d = ctx->Fog.Density; + f = EXPF(-(d * d * z * z)); + f = CLAMP(f, 0.0F, 1.0F); + return f; + default: + _mesa_problem(ctx, "Bad fog mode in _swrast_z_to_fogfactor"); + return 0.0; + } +} + + +#define LINEAR_FOG(f, coord) f = (fogEnd - coord) * fogScale + +#define EXP_FOG(f, coord) f = EXPF(density * coord) + +#define EXP2_FOG(f, coord) \ +do { \ + GLfloat tmp = negDensitySquared * coord * coord; \ + if (tmp < FLT_MIN_10_EXP) \ + tmp = FLT_MIN_10_EXP; \ + f = EXPF(tmp); \ + } while(0) + + +#define BLEND_FOG(f, coord) f = coord + + + +/** + * Template code for computing fog blend factor and applying it to colors. + * \param TYPE either GLubyte, GLushort or GLfloat. + * \param COMPUTE_F code to compute the fog blend factor, f. + */ +#define FOG_LOOP(TYPE, FOG_FUNC) \ +if (span->arrayAttribs & FRAG_BIT_FOGC) { \ + GLuint i; \ + for (i = 0; i < span->end; i++) { \ + const GLfloat fogCoord = span->array->attribs[FRAG_ATTRIB_FOGC][i][0]; \ + const GLfloat c = FABSF(fogCoord); \ + GLfloat f, oneMinusF; \ + FOG_FUNC(f, c); \ + f = CLAMP(f, 0.0F, 1.0F); \ + oneMinusF = 1.0F - f; \ + rgba[i][RCOMP] = (TYPE) (f * rgba[i][RCOMP] + oneMinusF * rFog); \ + rgba[i][GCOMP] = (TYPE) (f * rgba[i][GCOMP] + oneMinusF * gFog); \ + rgba[i][BCOMP] = (TYPE) (f * rgba[i][BCOMP] + oneMinusF * bFog); \ + } \ +} \ +else { \ + const GLfloat fogStep = span->attrStepX[FRAG_ATTRIB_FOGC][0]; \ + GLfloat fogCoord = span->attrStart[FRAG_ATTRIB_FOGC][0]; \ + const GLfloat wStep = span->attrStepX[FRAG_ATTRIB_WPOS][3]; \ + GLfloat w = span->attrStart[FRAG_ATTRIB_WPOS][3]; \ + GLuint i; \ + for (i = 0; i < span->end; i++) { \ + const GLfloat c = FABSF(fogCoord) / w; \ + GLfloat f, oneMinusF; \ + FOG_FUNC(f, c); \ + f = CLAMP(f, 0.0F, 1.0F); \ + oneMinusF = 1.0F - f; \ + rgba[i][RCOMP] = (TYPE) (f * rgba[i][RCOMP] + oneMinusF * rFog); \ + rgba[i][GCOMP] = (TYPE) (f * rgba[i][GCOMP] + oneMinusF * gFog); \ + rgba[i][BCOMP] = (TYPE) (f * rgba[i][BCOMP] + oneMinusF * bFog); \ + fogCoord += fogStep; \ + w += wStep; \ + } \ +} + +/** + * Apply fog to a span of RGBA pixels. + * The fog value are either in the span->array->fog array or interpolated from + * the fog/fogStep values. + * They fog values are either fog coordinates (Z) or fog blend factors. + * _PreferPixelFog should be in sync with that state! + */ +void +_swrast_fog_rgba_span( const struct gl_context *ctx, SWspan *span ) +{ + const SWcontext *swrast = CONST_SWRAST_CONTEXT(ctx); + GLfloat rFog, gFog, bFog; + + ASSERT(swrast->_FogEnabled); + ASSERT(span->arrayMask & SPAN_RGBA); + + /* compute (scaled) fog color */ + if (span->array->ChanType == GL_UNSIGNED_BYTE) { + rFog = ctx->Fog.Color[RCOMP] * 255.0F; + gFog = ctx->Fog.Color[GCOMP] * 255.0F; + bFog = ctx->Fog.Color[BCOMP] * 255.0F; + } + else if (span->array->ChanType == GL_UNSIGNED_SHORT) { + rFog = ctx->Fog.Color[RCOMP] * 65535.0F; + gFog = ctx->Fog.Color[GCOMP] * 65535.0F; + bFog = ctx->Fog.Color[BCOMP] * 65535.0F; + } + else { + rFog = ctx->Fog.Color[RCOMP]; + gFog = ctx->Fog.Color[GCOMP]; + bFog = ctx->Fog.Color[BCOMP]; + } + + if (swrast->_PreferPixelFog) { + /* The span's fog values are fog coordinates, now compute blend factors + * and blend the fragment colors with the fog color. + */ + switch (ctx->Fog.Mode) { + case GL_LINEAR: + { + const GLfloat fogEnd = ctx->Fog.End; + const GLfloat fogScale = (ctx->Fog.Start == ctx->Fog.End) + ? 1.0F : 1.0F / (ctx->Fog.End - ctx->Fog.Start); + if (span->array->ChanType == GL_UNSIGNED_BYTE) { + GLubyte (*rgba)[4] = span->array->rgba8; + FOG_LOOP(GLubyte, LINEAR_FOG); + } + else if (span->array->ChanType == GL_UNSIGNED_SHORT) { + GLushort (*rgba)[4] = span->array->rgba16; + FOG_LOOP(GLushort, LINEAR_FOG); + } + else { + GLfloat (*rgba)[4] = span->array->attribs[FRAG_ATTRIB_COL0]; + ASSERT(span->array->ChanType == GL_FLOAT); + FOG_LOOP(GLfloat, LINEAR_FOG); + } + } + break; + + case GL_EXP: + { + const GLfloat density = -ctx->Fog.Density; + if (span->array->ChanType == GL_UNSIGNED_BYTE) { + GLubyte (*rgba)[4] = span->array->rgba8; + FOG_LOOP(GLubyte, EXP_FOG); + } + else if (span->array->ChanType == GL_UNSIGNED_SHORT) { + GLushort (*rgba)[4] = span->array->rgba16; + FOG_LOOP(GLushort, EXP_FOG); + } + else { + GLfloat (*rgba)[4] = span->array->attribs[FRAG_ATTRIB_COL0]; + ASSERT(span->array->ChanType == GL_FLOAT); + FOG_LOOP(GLfloat, EXP_FOG); + } + } + break; + + case GL_EXP2: + { + const GLfloat negDensitySquared = -ctx->Fog.Density * ctx->Fog.Density; + if (span->array->ChanType == GL_UNSIGNED_BYTE) { + GLubyte (*rgba)[4] = span->array->rgba8; + FOG_LOOP(GLubyte, EXP2_FOG); + } + else if (span->array->ChanType == GL_UNSIGNED_SHORT) { + GLushort (*rgba)[4] = span->array->rgba16; + FOG_LOOP(GLushort, EXP2_FOG); + } + else { + GLfloat (*rgba)[4] = span->array->attribs[FRAG_ATTRIB_COL0]; + ASSERT(span->array->ChanType == GL_FLOAT); + FOG_LOOP(GLfloat, EXP2_FOG); + } + } + break; + + default: + _mesa_problem(ctx, "Bad fog mode in _swrast_fog_rgba_span"); + return; + } + } + else { + /* The span's fog start/step/array values are blend factors in [0,1]. + * They were previously computed per-vertex. + */ + if (span->array->ChanType == GL_UNSIGNED_BYTE) { + GLubyte (*rgba)[4] = span->array->rgba8; + FOG_LOOP(GLubyte, BLEND_FOG); + } + else if (span->array->ChanType == GL_UNSIGNED_SHORT) { + GLushort (*rgba)[4] = span->array->rgba16; + FOG_LOOP(GLushort, BLEND_FOG); + } + else { + GLfloat (*rgba)[4] = span->array->attribs[FRAG_ATTRIB_COL0]; + ASSERT(span->array->ChanType == GL_FLOAT); + FOG_LOOP(GLfloat, BLEND_FOG); + } + } +} diff --git a/mesalib/src/mesa/swrast/s_readpix.c b/mesalib/src/mesa/swrast/s_readpix.c index 5c8d7e9c5..214f2ea1a 100644 --- a/mesalib/src/mesa/swrast/s_readpix.c +++ b/mesalib/src/mesa/swrast/s_readpix.c @@ -191,7 +191,13 @@ fast_read_rgba_pixels( struct gl_context *ctx, if (!rb) return GL_FALSE; - ASSERT(rb->_BaseFormat == GL_RGBA || rb->_BaseFormat == GL_RGB || + ASSERT(rb->_BaseFormat == GL_RGBA || + rb->_BaseFormat == GL_RGB || + rb->_BaseFormat == GL_RG || + rb->_BaseFormat == GL_RED || + rb->_BaseFormat == GL_LUMINANCE || + rb->_BaseFormat == GL_INTENSITY || + rb->_BaseFormat == GL_LUMINANCE_ALPHA || rb->_BaseFormat == GL_ALPHA); /* clipping should have already been done */ @@ -312,12 +318,12 @@ read_rgba_pixels( struct gl_context *ctx, if (!rb) return; - if (type == GL_FLOAT && ((ctx->Color.ClampReadColor == GL_TRUE) || - (ctx->Color.ClampReadColor == GL_FIXED_ONLY_ARB && - rb->DataType != GL_FLOAT))) + if ((ctx->Color._ClampReadColor == GL_TRUE || type != GL_FLOAT) && + !_mesa_is_integer_format(format)) { transferOps |= IMAGE_CLAMP_BIT; + } - /* Try optimized path first */ + /* Try the optimized path first. */ if (fast_read_rgba_pixels(ctx, x, y, width, height, format, type, pixels, packing, transferOps)) { return; /* done! */ @@ -341,9 +347,9 @@ read_rgba_pixels( struct gl_context *ctx, _swrast_read_rgba_span(ctx, rb, width, x, y, GL_FLOAT, rgba); /* apply fudge factor for shallow color buffers */ - if (fb->Visual.redBits < 8 || - fb->Visual.greenBits < 8 || - fb->Visual.blueBits < 8) { + if ((fb->Visual.redBits < 8 && fb->Visual.redBits != 0) || + (fb->Visual.greenBits < 8 && fb->Visual.greenBits != 0) || + (fb->Visual.blueBits < 8 && fb->Visual.blueBits != 0)) { adjust_colors(fb, width, rgba); } diff --git a/mesalib/src/mesa/swrast/s_span.c b/mesalib/src/mesa/swrast/s_span.c index 9cfecc9e3..f0524e061 100644 --- a/mesalib/src/mesa/swrast/s_span.c +++ b/mesalib/src/mesa/swrast/s_span.c @@ -1348,7 +1348,13 @@ _swrast_read_rgba_span( struct gl_context *ctx, struct gl_renderbuffer *rb, ASSERT(rb); ASSERT(rb->GetRow); - ASSERT(rb->_BaseFormat == GL_RGB || rb->_BaseFormat == GL_RGBA || + ASSERT(rb->_BaseFormat == GL_RGBA || + rb->_BaseFormat == GL_RGB || + rb->_BaseFormat == GL_RG || + rb->_BaseFormat == GL_RED || + rb->_BaseFormat == GL_LUMINANCE || + rb->_BaseFormat == GL_INTENSITY || + rb->_BaseFormat == GL_LUMINANCE_ALPHA || rb->_BaseFormat == GL_ALPHA); if (rb->DataType == dstType) { diff --git a/mesalib/src/mesa/tnl/t_context.c b/mesalib/src/mesa/tnl/t_context.c index 9faa54fdf..a6da8cafe 100644 --- a/mesalib/src/mesa/tnl/t_context.c +++ b/mesalib/src/mesa/tnl/t_context.c @@ -1,224 +1,220 @@ -/*
- * Mesa 3-D graphics library
- * Version: 7.2
- *
- * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors:
- * Keith Whitwell <keith@tungstengraphics.com>
- */
-
-
-#include "main/glheader.h"
-#include "main/imports.h"
-#include "main/context.h"
-#include "main/macros.h"
-#include "main/mtypes.h"
-#include "main/light.h"
-#include "math/m_translate.h"
-#include "math/m_xform.h"
-#include "main/state.h"
-
-#include "tnl.h"
-#include "t_context.h"
-#include "t_pipeline.h"
-
-#include "vbo/vbo.h"
-
-GLboolean
-_tnl_CreateContext( struct gl_context *ctx )
-{
- TNLcontext *tnl;
-
- /* Create the TNLcontext structure
- */
- ctx->swtnl_context = tnl = (TNLcontext *) CALLOC( sizeof(TNLcontext) );
-
- if (!tnl) {
- return GL_FALSE;
- }
-
- /* Initialize the VB.
- */
- tnl->vb.Size = ctx->Const.MaxArrayLockSize + MAX_CLIPPED_VERTICES;
-
-
- /* Initialize tnl state.
- */
- if (ctx->VertexProgram._MaintainTnlProgram) {
- _tnl_install_pipeline( ctx, _tnl_vp_pipeline );
- } else {
- _tnl_install_pipeline( ctx, _tnl_default_pipeline );
- }
-
- tnl->NeedNdcCoords = GL_TRUE;
- tnl->AllowVertexFog = GL_TRUE;
- tnl->AllowPixelFog = GL_TRUE;
-
- /* Set a few default values in the driver struct.
- */
- tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
- tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
- tnl->Driver.NotifyMaterialChange = _mesa_validate_all_lighting_tables;
-
- tnl->nr_blocks = 0;
-
- /* plug in the VBO drawing function */
- vbo_set_draw_func(ctx, _tnl_vbo_draw_prims);
-
- _math_init_transformation();
- _math_init_translate();
-
- return GL_TRUE;
-}
-
-
-void
-_tnl_DestroyContext( struct gl_context *ctx )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
-
- _tnl_destroy_pipeline( ctx );
-
- FREE(tnl);
- ctx->swtnl_context = NULL;
-}
-
-
-void
-_tnl_InvalidateState( struct gl_context *ctx, GLuint new_state )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- const struct gl_vertex_program *vp = ctx->VertexProgram._Current;
- const struct gl_fragment_program *fp = ctx->FragmentProgram._Current;
- GLuint i;
-
- if (new_state & (_NEW_HINT | _NEW_PROGRAM)) {
- ASSERT(tnl->AllowVertexFog || tnl->AllowPixelFog);
- tnl->_DoVertexFog = ((tnl->AllowVertexFog && (ctx->Hint.Fog != GL_NICEST))
- || !tnl->AllowPixelFog) && !fp;
- }
-
- tnl->pipeline.new_state |= new_state;
-
- /* Calculate tnl->render_inputs. This bitmask indicates which vertex
- * attributes need to be emitted to the rasterizer.
- */
- RENDERINPUTS_ZERO( tnl->render_inputs_bitset );
- RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_POS );
-
- if (!fp || (fp->Base.InputsRead & FRAG_BIT_COL0)) {
- RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_COLOR0 );
- }
-
- if (_mesa_need_secondary_color(ctx))
- RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_COLOR1 );
-
- for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) {
- if (ctx->Texture._EnabledCoordUnits & (1 << i) ||
- (fp && fp->Base.InputsRead & FRAG_BIT_TEX(i))) {
- RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_TEX(i) );
- }
- }
-
- if (ctx->Fog.Enabled) {
- /* fixed-function fog */
- RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_FOG );
- }
- else if (fp) {
- if (fp->FogOption != GL_NONE || (fp->Base.InputsRead & FRAG_BIT_FOGC)) {
- /* fragment program needs fog coord */
- RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_FOG );
- }
- }
-
- if (ctx->Polygon.FrontMode != GL_FILL ||
- ctx->Polygon.BackMode != GL_FILL)
- RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_EDGEFLAG );
-
- if (ctx->RenderMode == GL_FEEDBACK)
- RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_TEX0 );
-
- if (ctx->Point._Attenuated ||
- (ctx->VertexProgram._Enabled && ctx->VertexProgram.PointSizeEnabled))
- RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_POINTSIZE );
-
- /* check for varying vars which are written by the vertex program */
- if (vp) {
- GLuint i;
- for (i = 0; i < MAX_VARYING; i++) {
- if (vp->Base.OutputsWritten & BITFIELD64_BIT(VERT_RESULT_VAR0 + i)) {
- RENDERINPUTS_SET(tnl->render_inputs_bitset,
- _TNL_ATTRIB_GENERIC(i));
- }
- }
- }
-}
-
-
-void
-_tnl_wakeup( struct gl_context *ctx )
-{
- /* Assume we haven't been getting state updates either:
- */
- _tnl_InvalidateState( ctx, ~0 );
-
-#if 0
- if (ctx->Light.ColorMaterialEnabled) {
- _mesa_update_color_material( ctx,
- ctx->Current.Attrib[VERT_ATTRIB_COLOR0] );
- }
-#endif
-}
-
-
-
-
-/**
- * Drivers call this function to tell the TCL module whether or not
- * it wants Normalized Device Coords (NDC) computed. I.e. whether
- * we should "Divide-by-W". Software renders will want that.
- */
-void
-_tnl_need_projected_coords( struct gl_context *ctx, GLboolean mode )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- tnl->NeedNdcCoords = mode;
-}
-
-void
-_tnl_allow_vertex_fog( struct gl_context *ctx, GLboolean value )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- tnl->AllowVertexFog = value;
- tnl->_DoVertexFog = ((tnl->AllowVertexFog && (ctx->Hint.Fog != GL_NICEST))
- || !tnl->AllowPixelFog) && !ctx->FragmentProgram._Current;
-
-}
-
-void
-_tnl_allow_pixel_fog( struct gl_context *ctx, GLboolean value )
-{
- TNLcontext *tnl = TNL_CONTEXT(ctx);
- tnl->AllowPixelFog = value;
- tnl->_DoVertexFog = ((tnl->AllowVertexFog && (ctx->Hint.Fog != GL_NICEST))
- || !tnl->AllowPixelFog) && !ctx->FragmentProgram._Current;
-}
-
+/* + * Mesa 3-D graphics library + * Version: 7.2 + * + * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Authors: + * Keith Whitwell <keith@tungstengraphics.com> + */ + + +#include "main/glheader.h" +#include "main/imports.h" +#include "main/context.h" +#include "main/macros.h" +#include "main/mtypes.h" +#include "main/light.h" +#include "math/m_translate.h" +#include "math/m_xform.h" +#include "main/state.h" + +#include "tnl.h" +#include "t_context.h" +#include "t_pipeline.h" + +#include "vbo/vbo.h" + +GLboolean +_tnl_CreateContext( struct gl_context *ctx ) +{ + TNLcontext *tnl; + + /* Create the TNLcontext structure + */ + ctx->swtnl_context = tnl = (TNLcontext *) CALLOC( sizeof(TNLcontext) ); + + if (!tnl) { + return GL_FALSE; + } + + /* Initialize the VB. + */ + tnl->vb.Size = ctx->Const.MaxArrayLockSize + MAX_CLIPPED_VERTICES; + + + /* Initialize tnl state. + */ + if (ctx->VertexProgram._MaintainTnlProgram) { + _tnl_install_pipeline( ctx, _tnl_vp_pipeline ); + } else { + _tnl_install_pipeline( ctx, _tnl_default_pipeline ); + } + + tnl->NeedNdcCoords = GL_TRUE; + tnl->AllowVertexFog = GL_TRUE; + tnl->AllowPixelFog = GL_TRUE; + + /* Set a few default values in the driver struct. + */ + tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts; + tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts; + tnl->Driver.NotifyMaterialChange = _mesa_validate_all_lighting_tables; + + tnl->nr_blocks = 0; + + /* plug in the VBO drawing function */ + vbo_set_draw_func(ctx, _tnl_vbo_draw_prims); + + _math_init_transformation(); + _math_init_translate(); + + return GL_TRUE; +} + + +void +_tnl_DestroyContext( struct gl_context *ctx ) +{ + TNLcontext *tnl = TNL_CONTEXT(ctx); + + _tnl_destroy_pipeline( ctx ); + + FREE(tnl); + ctx->swtnl_context = NULL; +} + + +void +_tnl_InvalidateState( struct gl_context *ctx, GLuint new_state ) +{ + TNLcontext *tnl = TNL_CONTEXT(ctx); + const struct gl_vertex_program *vp = ctx->VertexProgram._Current; + const struct gl_fragment_program *fp = ctx->FragmentProgram._Current; + GLuint i; + + if (new_state & (_NEW_HINT | _NEW_PROGRAM)) { + ASSERT(tnl->AllowVertexFog || tnl->AllowPixelFog); + tnl->_DoVertexFog = ((tnl->AllowVertexFog && (ctx->Hint.Fog != GL_NICEST)) + || !tnl->AllowPixelFog) && !fp; + } + + tnl->pipeline.new_state |= new_state; + + /* Calculate tnl->render_inputs. This bitmask indicates which vertex + * attributes need to be emitted to the rasterizer. + */ + RENDERINPUTS_ZERO( tnl->render_inputs_bitset ); + RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_POS ); + + if (!fp || (fp->Base.InputsRead & FRAG_BIT_COL0)) { + RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_COLOR0 ); + } + + if (_mesa_need_secondary_color(ctx)) + RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_COLOR1 ); + + for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) { + if (ctx->Texture._EnabledCoordUnits & (1 << i) || + (fp && fp->Base.InputsRead & FRAG_BIT_TEX(i))) { + RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_TEX(i) ); + } + } + + if (ctx->Fog.Enabled + || (fp != NULL && (fp->Base.InputsRead & FRAG_BIT_FOGC) != 0)) { + /* Either fixed-function fog or a fragment program needs fog coord. + */ + RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_FOG ); + } + + if (ctx->Polygon.FrontMode != GL_FILL || + ctx->Polygon.BackMode != GL_FILL) + RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_EDGEFLAG ); + + if (ctx->RenderMode == GL_FEEDBACK) + RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_TEX0 ); + + if (ctx->Point._Attenuated || + (ctx->VertexProgram._Enabled && ctx->VertexProgram.PointSizeEnabled)) + RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_POINTSIZE ); + + /* check for varying vars which are written by the vertex program */ + if (vp) { + GLuint i; + for (i = 0; i < MAX_VARYING; i++) { + if (vp->Base.OutputsWritten & BITFIELD64_BIT(VERT_RESULT_VAR0 + i)) { + RENDERINPUTS_SET(tnl->render_inputs_bitset, + _TNL_ATTRIB_GENERIC(i)); + } + } + } +} + + +void +_tnl_wakeup( struct gl_context *ctx ) +{ + /* Assume we haven't been getting state updates either: + */ + _tnl_InvalidateState( ctx, ~0 ); + +#if 0 + if (ctx->Light.ColorMaterialEnabled) { + _mesa_update_color_material( ctx, + ctx->Current.Attrib[VERT_ATTRIB_COLOR0] ); + } +#endif +} + + + + +/** + * Drivers call this function to tell the TCL module whether or not + * it wants Normalized Device Coords (NDC) computed. I.e. whether + * we should "Divide-by-W". Software renders will want that. + */ +void +_tnl_need_projected_coords( struct gl_context *ctx, GLboolean mode ) +{ + TNLcontext *tnl = TNL_CONTEXT(ctx); + tnl->NeedNdcCoords = mode; +} + +void +_tnl_allow_vertex_fog( struct gl_context *ctx, GLboolean value ) +{ + TNLcontext *tnl = TNL_CONTEXT(ctx); + tnl->AllowVertexFog = value; + tnl->_DoVertexFog = ((tnl->AllowVertexFog && (ctx->Hint.Fog != GL_NICEST)) + || !tnl->AllowPixelFog) && !ctx->FragmentProgram._Current; + +} + +void +_tnl_allow_pixel_fog( struct gl_context *ctx, GLboolean value ) +{ + TNLcontext *tnl = TNL_CONTEXT(ctx); + tnl->AllowPixelFog = value; + tnl->_DoVertexFog = ((tnl->AllowVertexFog && (ctx->Hint.Fog != GL_NICEST)) + || !tnl->AllowPixelFog) && !ctx->FragmentProgram._Current; +} + diff --git a/mesalib/src/mesa/vbo/vbo_exec_array.c b/mesalib/src/mesa/vbo/vbo_exec_array.c index a189ab76b..a49cd5017 100644 --- a/mesalib/src/mesa/vbo/vbo_exec_array.c +++ b/mesalib/src/mesa/vbo/vbo_exec_array.c @@ -1,1341 +1,1337 @@ -/**************************************************************************
- *
- * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
- * Copyright 2009 VMware, Inc.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/state.h"
-#include "main/api_validate.h"
-#include "main/varray.h"
-#include "main/bufferobj.h"
-#include "main/enums.h"
-#include "main/macros.h"
-
-#include "vbo_context.h"
-
-
-/**
- * All vertex buffers should be in an unmapped state when we're about
- * to draw. This debug function checks that.
- */
-static void
-check_buffers_are_unmapped(const struct gl_client_array **inputs)
-{
-#ifdef DEBUG
- GLuint i;
-
- for (i = 0; i < VERT_ATTRIB_MAX; i++) {
- if (inputs[i]) {
- struct gl_buffer_object *obj = inputs[i]->BufferObj;
- assert(!_mesa_bufferobj_mapped(obj));
- (void) obj;
- }
- }
-#endif
-}
-
-
-/**
- * A debug function that may be called from other parts of Mesa as
- * needed during debugging.
- */
-void
-vbo_check_buffers_are_unmapped(struct gl_context *ctx)
-{
- struct vbo_context *vbo = vbo_context(ctx);
- struct vbo_exec_context *exec = &vbo->exec;
- /* check the current vertex arrays */
- check_buffers_are_unmapped(exec->array.inputs);
- /* check the current glBegin/glVertex/glEnd-style VBO */
- assert(!_mesa_bufferobj_mapped(exec->vtx.bufferobj));
-}
-
-
-
-/**
- * Compute min and max elements by scanning the index buffer for
- * glDraw[Range]Elements() calls.
- * If primitive restart is enabled, we need to ignore restart
- * indexes when computing min/max.
- */
-void
-vbo_get_minmax_index(struct gl_context *ctx,
- const struct _mesa_prim *prim,
- const struct _mesa_index_buffer *ib,
- GLuint *min_index, GLuint *max_index)
-{
- const GLboolean restart = ctx->Array.PrimitiveRestart;
- const GLuint restartIndex = ctx->Array.RestartIndex;
- const GLuint count = prim->count;
- const void *indices;
- GLuint i;
-
- if (_mesa_is_bufferobj(ib->obj)) {
- const GLvoid *map =
- ctx->Driver.MapBuffer(ctx, GL_ELEMENT_ARRAY_BUFFER_ARB,
- GL_READ_ONLY, ib->obj);
- indices = ADD_POINTERS(map, ib->ptr);
- } else {
- indices = ib->ptr;
- }
-
- switch (ib->type) {
- case GL_UNSIGNED_INT: {
- const GLuint *ui_indices = (const GLuint *)indices;
- GLuint max_ui = 0;
- GLuint min_ui = ~0U;
- if (restart) {
- for (i = 0; i < count; i++) {
- if (ui_indices[i] != restartIndex) {
- if (ui_indices[i] > max_ui) max_ui = ui_indices[i];
- if (ui_indices[i] < min_ui) min_ui = ui_indices[i];
- }
- }
- }
- else {
- for (i = 0; i < count; i++) {
- if (ui_indices[i] > max_ui) max_ui = ui_indices[i];
- if (ui_indices[i] < min_ui) min_ui = ui_indices[i];
- }
- }
- *min_index = min_ui;
- *max_index = max_ui;
- break;
- }
- case GL_UNSIGNED_SHORT: {
- const GLushort *us_indices = (const GLushort *)indices;
- GLuint max_us = 0;
- GLuint min_us = ~0U;
- if (restart) {
- for (i = 0; i < count; i++) {
- if (us_indices[i] != restartIndex) {
- if (us_indices[i] > max_us) max_us = us_indices[i];
- if (us_indices[i] < min_us) min_us = us_indices[i];
- }
- }
- }
- else {
- for (i = 0; i < count; i++) {
- if (us_indices[i] > max_us) max_us = us_indices[i];
- if (us_indices[i] < min_us) min_us = us_indices[i];
- }
- }
- *min_index = min_us;
- *max_index = max_us;
- break;
- }
- case GL_UNSIGNED_BYTE: {
- const GLubyte *ub_indices = (const GLubyte *)indices;
- GLuint max_ub = 0;
- GLuint min_ub = ~0U;
- if (restart) {
- for (i = 0; i < count; i++) {
- if (ub_indices[i] != restartIndex) {
- if (ub_indices[i] > max_ub) max_ub = ub_indices[i];
- if (ub_indices[i] < min_ub) min_ub = ub_indices[i];
- }
- }
- }
- else {
- for (i = 0; i < count; i++) {
- if (ub_indices[i] > max_ub) max_ub = ub_indices[i];
- if (ub_indices[i] < min_ub) min_ub = ub_indices[i];
- }
- }
- *min_index = min_ub;
- *max_index = max_ub;
- break;
- }
- default:
- assert(0);
- break;
- }
-
- if (_mesa_is_bufferobj(ib->obj)) {
- ctx->Driver.UnmapBuffer(ctx, GL_ELEMENT_ARRAY_BUFFER_ARB, ib->obj);
- }
-}
-
-
-/**
- * Check that element 'j' of the array has reasonable data.
- * Map VBO if needed.
- * For debugging purposes; not normally used.
- */
-static void
-check_array_data(struct gl_context *ctx, struct gl_client_array *array,
- GLuint attrib, GLuint j)
-{
- if (array->Enabled) {
- const void *data = array->Ptr;
- if (_mesa_is_bufferobj(array->BufferObj)) {
- if (!array->BufferObj->Pointer) {
- /* need to map now */
- array->BufferObj->Pointer =
- ctx->Driver.MapBuffer(ctx, GL_ARRAY_BUFFER_ARB,
- GL_READ_ONLY, array->BufferObj);
- }
- data = ADD_POINTERS(data, array->BufferObj->Pointer);
- }
- switch (array->Type) {
- case GL_FLOAT:
- {
- GLfloat *f = (GLfloat *) ((GLubyte *) data + array->StrideB * j);
- GLint k;
- for (k = 0; k < array->Size; k++) {
- if (IS_INF_OR_NAN(f[k]) ||
- f[k] >= 1.0e20 || f[k] <= -1.0e10) {
- printf("Bad array data:\n");
- printf(" Element[%u].%u = %f\n", j, k, f[k]);
- printf(" Array %u at %p\n", attrib, (void* ) array);
- printf(" Type 0x%x, Size %d, Stride %d\n",
- array->Type, array->Size, array->Stride);
- printf(" Address/offset %p in Buffer Object %u\n",
- array->Ptr, array->BufferObj->Name);
- f[k] = 1.0; /* XXX replace the bad value! */
- }
- /*assert(!IS_INF_OR_NAN(f[k]));*/
- }
- }
- break;
- default:
- ;
- }
- }
-}
-
-
-/**
- * Unmap the buffer object referenced by given array, if mapped.
- */
-static void
-unmap_array_buffer(struct gl_context *ctx, struct gl_client_array *array)
-{
- if (array->Enabled &&
- _mesa_is_bufferobj(array->BufferObj) &&
- _mesa_bufferobj_mapped(array->BufferObj)) {
- ctx->Driver.UnmapBuffer(ctx, GL_ARRAY_BUFFER_ARB, array->BufferObj);
- }
-}
-
-
-/**
- * Examine the array's data for NaNs, etc.
- * For debug purposes; not normally used.
- */
-static void
-check_draw_elements_data(struct gl_context *ctx, GLsizei count, GLenum elemType,
- const void *elements, GLint basevertex)
-{
- struct gl_array_object *arrayObj = ctx->Array.ArrayObj;
- const void *elemMap;
- GLint i, k;
-
- if (_mesa_is_bufferobj(ctx->Array.ElementArrayBufferObj)) {
- elemMap = ctx->Driver.MapBuffer(ctx,
- GL_ELEMENT_ARRAY_BUFFER_ARB,
- GL_READ_ONLY,
- ctx->Array.ElementArrayBufferObj);
- elements = ADD_POINTERS(elements, elemMap);
- }
-
- for (i = 0; i < count; i++) {
- GLuint j;
-
- /* j = element[i] */
- switch (elemType) {
- case GL_UNSIGNED_BYTE:
- j = ((const GLubyte *) elements)[i];
- break;
- case GL_UNSIGNED_SHORT:
- j = ((const GLushort *) elements)[i];
- break;
- case GL_UNSIGNED_INT:
- j = ((const GLuint *) elements)[i];
- break;
- default:
- assert(0);
- }
-
- /* check element j of each enabled array */
- check_array_data(ctx, &arrayObj->Vertex, VERT_ATTRIB_POS, j);
- check_array_data(ctx, &arrayObj->Normal, VERT_ATTRIB_NORMAL, j);
- check_array_data(ctx, &arrayObj->Color, VERT_ATTRIB_COLOR0, j);
- check_array_data(ctx, &arrayObj->SecondaryColor, VERT_ATTRIB_COLOR1, j);
- for (k = 0; k < Elements(arrayObj->TexCoord); k++) {
- check_array_data(ctx, &arrayObj->TexCoord[k], VERT_ATTRIB_TEX0 + k, j);
- }
- for (k = 0; k < Elements(arrayObj->VertexAttrib); k++) {
- check_array_data(ctx, &arrayObj->VertexAttrib[k],
- VERT_ATTRIB_GENERIC0 + k, j);
- }
- }
-
- if (_mesa_is_bufferobj(ctx->Array.ElementArrayBufferObj)) {
- ctx->Driver.UnmapBuffer(ctx, GL_ELEMENT_ARRAY_BUFFER_ARB,
- ctx->Array.ElementArrayBufferObj);
- }
-
- unmap_array_buffer(ctx, &arrayObj->Vertex);
- unmap_array_buffer(ctx, &arrayObj->Normal);
- unmap_array_buffer(ctx, &arrayObj->Color);
- for (k = 0; k < Elements(arrayObj->TexCoord); k++) {
- unmap_array_buffer(ctx, &arrayObj->TexCoord[k]);
- }
- for (k = 0; k < Elements(arrayObj->VertexAttrib); k++) {
- unmap_array_buffer(ctx, &arrayObj->VertexAttrib[k]);
- }
-}
-
-
-/**
- * Check array data, looking for NaNs, etc.
- */
-static void
-check_draw_arrays_data(struct gl_context *ctx, GLint start, GLsizei count)
-{
- /* TO DO */
-}
-
-
-/**
- * Print info/data for glDrawArrays(), for debugging.
- */
-static void
-print_draw_arrays(struct gl_context *ctx,
- GLenum mode, GLint start, GLsizei count)
-{
- struct vbo_context *vbo = vbo_context(ctx);
- struct vbo_exec_context *exec = &vbo->exec;
- int i;
-
- printf("vbo_exec_DrawArrays(mode 0x%x, start %d, count %d):\n",
- mode, start, count);
-
- for (i = 0; i < 32; i++) {
- GLuint bufName = exec->array.inputs[i]->BufferObj->Name;
- GLint stride = exec->array.inputs[i]->Stride;
- printf("attr %2d: size %d stride %d enabled %d "
- "ptr %p Bufobj %u\n",
- i,
- exec->array.inputs[i]->Size,
- stride,
- /*exec->array.inputs[i]->Enabled,*/
- exec->array.legacy_array[i]->Enabled,
- exec->array.inputs[i]->Ptr,
- bufName);
-
- if (bufName) {
- struct gl_buffer_object *buf = _mesa_lookup_bufferobj(ctx, bufName);
- GLubyte *p = ctx->Driver.MapBuffer(ctx, GL_ARRAY_BUFFER_ARB,
- GL_READ_ONLY_ARB, buf);
- int offset = (int) (GLintptr) exec->array.inputs[i]->Ptr;
- float *f = (float *) (p + offset);
- int *k = (int *) f;
- int i;
- int n = (count * stride) / 4;
- if (n > 32)
- n = 32;
- printf(" Data at offset %d:\n", offset);
- for (i = 0; i < n; i++) {
- printf(" float[%d] = 0x%08x %f\n", i, k[i], f[i]);
- }
- ctx->Driver.UnmapBuffer(ctx, GL_ARRAY_BUFFER_ARB, buf);
- }
- }
-}
-
-
-/**
- * Bind the VBO executor to the current vertex array object prior
- * to drawing.
- *
- * Just translate the arrayobj into a sane layout.
- */
-static void
-bind_array_obj(struct gl_context *ctx)
-{
- struct vbo_context *vbo = vbo_context(ctx);
- struct vbo_exec_context *exec = &vbo->exec;
- struct gl_array_object *arrayObj = ctx->Array.ArrayObj;
- GLuint i;
-
- /* TODO: Fix the ArrayObj struct to keep legacy arrays in an array
- * rather than as individual named arrays. Then this function can
- * go away.
- */
- exec->array.legacy_array[VERT_ATTRIB_POS] = &arrayObj->Vertex;
- exec->array.legacy_array[VERT_ATTRIB_WEIGHT] = &arrayObj->Weight;
- exec->array.legacy_array[VERT_ATTRIB_NORMAL] = &arrayObj->Normal;
- exec->array.legacy_array[VERT_ATTRIB_COLOR0] = &arrayObj->Color;
- exec->array.legacy_array[VERT_ATTRIB_COLOR1] = &arrayObj->SecondaryColor;
- exec->array.legacy_array[VERT_ATTRIB_FOG] = &arrayObj->FogCoord;
- exec->array.legacy_array[VERT_ATTRIB_COLOR_INDEX] = &arrayObj->Index;
- if (arrayObj->PointSize.Enabled) {
- /* this aliases COLOR_INDEX */
- exec->array.legacy_array[VERT_ATTRIB_POINT_SIZE] = &arrayObj->PointSize;
- }
- exec->array.legacy_array[VERT_ATTRIB_EDGEFLAG] = &arrayObj->EdgeFlag;
-
- for (i = 0; i < Elements(arrayObj->TexCoord); i++)
- exec->array.legacy_array[VERT_ATTRIB_TEX0 + i] = &arrayObj->TexCoord[i];
-
- for (i = 0; i < Elements(arrayObj->VertexAttrib); i++) {
- assert(i < Elements(exec->array.generic_array));
- exec->array.generic_array[i] = &arrayObj->VertexAttrib[i];
- }
-
- exec->array.array_obj = arrayObj->Name;
-}
-
-
-/**
- * Set the vbo->exec->inputs[] pointers to point to the enabled
- * vertex arrays. This depends on the current vertex program/shader
- * being executed because of whether or not generic vertex arrays
- * alias the conventional vertex arrays.
- * For arrays that aren't enabled, we set the input[attrib] pointer
- * to point at a zero-stride current value "array".
- */
-static void
-recalculate_input_bindings(struct gl_context *ctx)
-{
- struct vbo_context *vbo = vbo_context(ctx);
- struct vbo_exec_context *exec = &vbo->exec;
- const struct gl_client_array **inputs = &exec->array.inputs[0];
- GLbitfield const_inputs = 0x0;
- GLuint i;
-
- exec->array.program_mode = get_program_mode(ctx);
- exec->array.enabled_flags = ctx->Array.ArrayObj->_Enabled;
-
- switch (exec->array.program_mode) {
- case VP_NONE:
- /* When no vertex program is active (or the vertex program is generated
- * from fixed-function state). We put the material values into the
- * generic slots. This is the only situation where material values
- * are available as per-vertex attributes.
- */
- for (i = 0; i <= VERT_ATTRIB_TEX7; i++) {
- if (exec->array.legacy_array[i]->Enabled)
- inputs[i] = exec->array.legacy_array[i];
- else {
- inputs[i] = &vbo->legacy_currval[i];
- const_inputs |= 1 << i;
- }
- }
-
- for (i = 0; i < MAT_ATTRIB_MAX; i++) {
- inputs[VERT_ATTRIB_GENERIC0 + i] = &vbo->mat_currval[i];
- const_inputs |= 1 << (VERT_ATTRIB_GENERIC0 + i);
- }
-
- /* Could use just about anything, just to fill in the empty
- * slots:
- */
- for (i = MAT_ATTRIB_MAX; i < VERT_ATTRIB_MAX - VERT_ATTRIB_GENERIC0; i++) {
- inputs[VERT_ATTRIB_GENERIC0 + i] = &vbo->generic_currval[i];
- const_inputs |= 1 << (VERT_ATTRIB_GENERIC0 + i);
- }
-
- /* There is no need to make _NEW_ARRAY dirty here for the TnL program,
- * because it already takes care of invalidating the state necessary
- * to revalidate vertex arrays. Not marking the state as dirty also
- * improves performance (quite significantly in some apps).
- */
- if (!ctx->VertexProgram._MaintainTnlProgram)
- ctx->NewState |= _NEW_ARRAY;
- break;
-
- case VP_NV:
- /* NV_vertex_program - attribute arrays alias and override
- * conventional, legacy arrays. No materials, and the generic
- * slots are vacant.
- */
- for (i = 0; i <= VERT_ATTRIB_TEX7; i++) {
- if (exec->array.generic_array[i]->Enabled)
- inputs[i] = exec->array.generic_array[i];
- else if (exec->array.legacy_array[i]->Enabled)
- inputs[i] = exec->array.legacy_array[i];
- else {
- inputs[i] = &vbo->legacy_currval[i];
- const_inputs |= 1 << i;
- }
- }
-
- /* Could use just about anything, just to fill in the empty
- * slots:
- */
- for (i = VERT_ATTRIB_GENERIC0; i < VERT_ATTRIB_MAX; i++) {
- inputs[i] = &vbo->generic_currval[i - VERT_ATTRIB_GENERIC0];
- const_inputs |= 1 << i;
- }
-
- ctx->NewState |= _NEW_ARRAY;
- break;
-
- case VP_ARB:
- /* GL_ARB_vertex_program or GLSL vertex shader - Only the generic[0]
- * attribute array aliases and overrides the legacy position array.
- *
- * Otherwise, legacy attributes available in the legacy slots,
- * generic attributes in the generic slots and materials are not
- * available as per-vertex attributes.
- */
- if (exec->array.generic_array[0]->Enabled)
- inputs[0] = exec->array.generic_array[0];
- else if (exec->array.legacy_array[0]->Enabled)
- inputs[0] = exec->array.legacy_array[0];
- else {
- inputs[0] = &vbo->legacy_currval[0];
- const_inputs |= 1 << 0;
- }
-
- for (i = 1; i <= VERT_ATTRIB_TEX7; i++) {
- if (exec->array.legacy_array[i]->Enabled)
- inputs[i] = exec->array.legacy_array[i];
- else {
- inputs[i] = &vbo->legacy_currval[i];
- const_inputs |= 1 << i;
- }
- }
-
- for (i = 0; i < MAX_VERTEX_GENERIC_ATTRIBS; i++) {
- if (exec->array.generic_array[i]->Enabled)
- inputs[VERT_ATTRIB_GENERIC0 + i] = exec->array.generic_array[i];
- else {
- inputs[VERT_ATTRIB_GENERIC0 + i] = &vbo->generic_currval[i];
- const_inputs |= 1 << (VERT_ATTRIB_GENERIC0 + i);
- }
- }
-
- ctx->NewState |= _NEW_ARRAY;
- break;
- }
-
- _mesa_set_varying_vp_inputs( ctx, ~const_inputs );
-}
-
-
-/**
- * Examine the enabled vertex arrays to set the exec->array.inputs[] values.
- * These will point to the arrays to actually use for drawing. Some will
- * be user-provided arrays, other will be zero-stride const-valued arrays.
- * Note that this might set the _NEW_ARRAY dirty flag so state validation
- * must be done after this call.
- */
-static void
-bind_arrays(struct gl_context *ctx)
-{
- if (!ctx->Array.RebindArrays) {
- return;
- }
-
- bind_array_obj(ctx);
- recalculate_input_bindings(ctx);
- ctx->Array.RebindArrays = GL_FALSE;
-}
-
-
-/**
- * Helper function called by the other DrawArrays() functions below.
- * This is where we handle primitive restart for drawing non-indexed
- * arrays. If primitive restart is enabled, it typically means
- * splitting one DrawArrays() into two.
- */
-static void
-vbo_draw_arrays(struct gl_context *ctx, GLenum mode, GLint start,
- GLsizei count, GLuint numInstances)
-{
- struct vbo_context *vbo = vbo_context(ctx);
- struct vbo_exec_context *exec = &vbo->exec;
- struct _mesa_prim prim[2];
-
- bind_arrays(ctx);
-
- /* Again... because we may have changed the bitmask of per-vertex varying
- * attributes. If we regenerate the fixed-function vertex program now
- * we may be able to prune down the number of vertex attributes which we
- * need in the shader.
- */
- if (ctx->NewState)
- _mesa_update_state(ctx);
-
- prim[0].begin = 1;
- prim[0].end = 1;
- prim[0].weak = 0;
- prim[0].pad = 0;
- prim[0].mode = mode;
- prim[0].start = 0; /* filled in below */
- prim[0].count = 0; /* filled in below */
- prim[0].indexed = 0;
- prim[0].basevertex = 0;
- prim[0].num_instances = numInstances;
-
- /* Implement the primitive restart index */
- if (ctx->Array.PrimitiveRestart && ctx->Array.RestartIndex < count) {
- GLuint primCount = 0;
-
- if (ctx->Array.RestartIndex == start) {
- /* special case: RestartIndex at beginning */
- if (count > 1) {
- prim[0].start = start + 1;
- prim[0].count = count - 1;
- primCount = 1;
- }
- }
- else if (ctx->Array.RestartIndex == start + count - 1) {
- /* special case: RestartIndex at end */
- if (count > 1) {
- prim[0].start = start;
- prim[0].count = count - 1;
- primCount = 1;
- }
- }
- else {
- /* general case: RestartIndex in middle, split into two prims */
- prim[0].start = start;
- prim[0].count = ctx->Array.RestartIndex - start;
-
- prim[1] = prim[0];
- prim[1].start = ctx->Array.RestartIndex + 1;
- prim[1].count = count - prim[1].start;
-
- primCount = 2;
- }
-
- if (primCount > 0) {
- /* draw one or two prims */
- check_buffers_are_unmapped(exec->array.inputs);
- vbo->draw_prims(ctx, exec->array.inputs, prim, primCount, NULL,
- GL_TRUE, start, start + count - 1);
- }
- }
- else {
- /* no prim restart */
- prim[0].start = start;
- prim[0].count = count;
-
- check_buffers_are_unmapped(exec->array.inputs);
- vbo->draw_prims(ctx, exec->array.inputs, prim, 1, NULL,
- GL_TRUE, start, start + count - 1);
- }
-}
-
-
-
-/**
- * Called from glDrawArrays when in immediate mode (not display list mode).
- */
-static void GLAPIENTRY
-vbo_exec_DrawArrays(GLenum mode, GLint start, GLsizei count)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- if (MESA_VERBOSE & VERBOSE_DRAW)
- _mesa_debug(ctx, "glDrawArrays(%s, %d, %d)\n",
- _mesa_lookup_enum_by_nr(mode), start, count);
-
- if (!_mesa_validate_DrawArrays( ctx, mode, start, count ))
- return;
-
- FLUSH_CURRENT( ctx, 0 );
-
- if (!_mesa_valid_to_render(ctx, "glDrawArrays")) {
- return;
- }
-
- if (0)
- check_draw_arrays_data(ctx, start, count);
-
- vbo_draw_arrays(ctx, mode, start, count, 1);
-
- if (0)
- print_draw_arrays(ctx, mode, start, count);
-}
-
-
-/**
- * Called from glDrawArraysInstanced when in immediate mode (not
- * display list mode).
- */
-static void GLAPIENTRY
-vbo_exec_DrawArraysInstanced(GLenum mode, GLint start, GLsizei count,
- GLsizei numInstances)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- if (MESA_VERBOSE & VERBOSE_DRAW)
- _mesa_debug(ctx, "glDrawArraysInstanced(%s, %d, %d, %d)\n",
- _mesa_lookup_enum_by_nr(mode), start, count, numInstances);
-
- if (!_mesa_validate_DrawArraysInstanced(ctx, mode, start, count, numInstances))
- return;
-
- FLUSH_CURRENT( ctx, 0 );
-
- if (!_mesa_valid_to_render(ctx, "glDrawArraysInstanced")) {
- return;
- }
-
- if (0)
- check_draw_arrays_data(ctx, start, count);
-
- vbo_draw_arrays(ctx, mode, start, count, numInstances);
-
- if (0)
- print_draw_arrays(ctx, mode, start, count);
-}
-
-
-/**
- * Map GL_ELEMENT_ARRAY_BUFFER and print contents.
- * For debugging.
- */
-static void
-dump_element_buffer(struct gl_context *ctx, GLenum type)
-{
- const GLvoid *map = ctx->Driver.MapBuffer(ctx,
- GL_ELEMENT_ARRAY_BUFFER_ARB,
- GL_READ_ONLY,
- ctx->Array.ElementArrayBufferObj);
- switch (type) {
- case GL_UNSIGNED_BYTE:
- {
- const GLubyte *us = (const GLubyte *) map;
- GLint i;
- for (i = 0; i < ctx->Array.ElementArrayBufferObj->Size; i++) {
- printf("%02x ", us[i]);
- if (i % 32 == 31)
- printf("\n");
- }
- printf("\n");
- }
- break;
- case GL_UNSIGNED_SHORT:
- {
- const GLushort *us = (const GLushort *) map;
- GLint i;
- for (i = 0; i < ctx->Array.ElementArrayBufferObj->Size / 2; i++) {
- printf("%04x ", us[i]);
- if (i % 16 == 15)
- printf("\n");
- }
- printf("\n");
- }
- break;
- case GL_UNSIGNED_INT:
- {
- const GLuint *us = (const GLuint *) map;
- GLint i;
- for (i = 0; i < ctx->Array.ElementArrayBufferObj->Size / 4; i++) {
- printf("%08x ", us[i]);
- if (i % 8 == 7)
- printf("\n");
- }
- printf("\n");
- }
- break;
- default:
- ;
- }
-
- ctx->Driver.UnmapBuffer(ctx, GL_ELEMENT_ARRAY_BUFFER_ARB,
- ctx->Array.ElementArrayBufferObj);
-}
-
-
-/**
- * Inner support for both _mesa_DrawElements and _mesa_DrawRangeElements.
- * Do the rendering for a glDrawElements or glDrawRangeElements call after
- * we've validated buffer bounds, etc.
- */
-static void
-vbo_validated_drawrangeelements(struct gl_context *ctx, GLenum mode,
- GLboolean index_bounds_valid,
- GLuint start, GLuint end,
- GLsizei count, GLenum type,
- const GLvoid *indices,
- GLint basevertex, GLint numInstances)
-{
- struct vbo_context *vbo = vbo_context(ctx);
- struct vbo_exec_context *exec = &vbo->exec;
- struct _mesa_index_buffer ib;
- struct _mesa_prim prim[1];
-
- FLUSH_CURRENT( ctx, 0 );
-
- if (!_mesa_valid_to_render(ctx, "glDraw[Range]Elements")) {
- return;
- }
-
- bind_arrays( ctx );
-
- /* check for dirty state again */
- if (ctx->NewState)
- _mesa_update_state( ctx );
-
- ib.count = count;
- ib.type = type;
- ib.obj = ctx->Array.ElementArrayBufferObj;
- ib.ptr = indices;
-
- prim[0].begin = 1;
- prim[0].end = 1;
- prim[0].weak = 0;
- prim[0].pad = 0;
- prim[0].mode = mode;
- prim[0].start = 0;
- prim[0].count = count;
- prim[0].indexed = 1;
- prim[0].basevertex = basevertex;
- prim[0].num_instances = numInstances;
-
- /* Need to give special consideration to rendering a range of
- * indices starting somewhere above zero. Typically the
- * application is issuing multiple DrawRangeElements() to draw
- * successive primitives layed out linearly in the vertex arrays.
- * Unless the vertex arrays are all in a VBO (or locked as with
- * CVA), the OpenGL semantics imply that we need to re-read or
- * re-upload the vertex data on each draw call.
- *
- * In the case of hardware tnl, we want to avoid starting the
- * upload at zero, as it will mean every draw call uploads an
- * increasing amount of not-used vertex data. Worse - in the
- * software tnl module, all those vertices might be transformed and
- * lit but never rendered.
- *
- * If we just upload or transform the vertices in start..end,
- * however, the indices will be incorrect.
- *
- * At this level, we don't know exactly what the requirements of
- * the backend are going to be, though it will likely boil down to
- * either:
- *
- * 1) Do nothing, everything is in a VBO and is processed once
- * only.
- *
- * 2) Adjust the indices and vertex arrays so that start becomes
- * zero.
- *
- * Rather than doing anything here, I'll provide a helper function
- * for the latter case elsewhere.
- */
-
- check_buffers_are_unmapped(exec->array.inputs);
- vbo->draw_prims( ctx, exec->array.inputs, prim, 1, &ib,
- index_bounds_valid, start, end );
-}
-
-
-/**
- * Called by glDrawRangeElementsBaseVertex() in immediate mode.
- */
-static void GLAPIENTRY
-vbo_exec_DrawRangeElementsBaseVertex(GLenum mode,
- GLuint start, GLuint end,
- GLsizei count, GLenum type,
- const GLvoid *indices,
- GLint basevertex)
-{
- static GLuint warnCount = 0;
- GET_CURRENT_CONTEXT(ctx);
-
- if (MESA_VERBOSE & VERBOSE_DRAW)
- _mesa_debug(ctx,
- "glDrawRangeElementsBaseVertex(%s, %u, %u, %d, %s, %p, %d)\n",
- _mesa_lookup_enum_by_nr(mode), start, end, count,
- _mesa_lookup_enum_by_nr(type), indices, basevertex);
-
- if (!_mesa_validate_DrawRangeElements( ctx, mode, start, end, count,
- type, indices, basevertex ))
- return;
-
- /* NOTE: It's important that 'end' is a reasonable value.
- * in _tnl_draw_prims(), we use end to determine how many vertices
- * to transform. If it's too large, we can unnecessarily split prims
- * or we can read/write out of memory in several different places!
- */
-
- /* Catch/fix some potential user errors */
- if (type == GL_UNSIGNED_BYTE) {
- start = MIN2(start, 0xff);
- end = MIN2(end, 0xff);
- }
- else if (type == GL_UNSIGNED_SHORT) {
- start = MIN2(start, 0xffff);
- end = MIN2(end, 0xffff);
- }
-
- if (end >= ctx->Array.ArrayObj->_MaxElement) {
- /* the max element is out of bounds of one or more enabled arrays */
- warnCount++;
-
- if (warnCount < 10) {
- _mesa_warning(ctx, "glDraw[Range]Elements(start %u, end %u, count %d, "
- "type 0x%x, indices=%p)\n"
- "\tend is out of bounds (max=%u) "
- "Element Buffer %u (size %d)\n"
- "\tThis should probably be fixed in the application.",
- start, end, count, type, indices,
- ctx->Array.ArrayObj->_MaxElement - 1,
- ctx->Array.ElementArrayBufferObj->Name,
- (int) ctx->Array.ElementArrayBufferObj->Size);
- }
-
- if (0)
- dump_element_buffer(ctx, type);
-
- if (0)
- _mesa_print_arrays(ctx);
-
-#ifdef DEBUG
- /* 'end' was out of bounds, but now let's check the actual array
- * indexes to see if any of them are out of bounds.
- */
- {
- GLuint max = _mesa_max_buffer_index(ctx, count, type, indices,
- ctx->Array.ElementArrayBufferObj);
- if (max >= ctx->Array.ArrayObj->_MaxElement) {
- if (warnCount < 10) {
- _mesa_warning(ctx, "glDraw[Range]Elements(start %u, end %u, "
- "count %d, type 0x%x, indices=%p)\n"
- "\tindex=%u is out of bounds (max=%u) "
- "Element Buffer %u (size %d)\n"
- "\tSkipping the glDrawRangeElements() call",
- start, end, count, type, indices, max,
- ctx->Array.ArrayObj->_MaxElement - 1,
- ctx->Array.ElementArrayBufferObj->Name,
- (int) ctx->Array.ElementArrayBufferObj->Size);
- }
- }
- /* XXX we could also find the min index and compare to 'start'
- * to see if start is correct. But it's more likely to get the
- * upper bound wrong.
- */
- }
-#endif
-
- /* Set 'end' to the max possible legal value */
- assert(ctx->Array.ArrayObj->_MaxElement >= 1);
- end = ctx->Array.ArrayObj->_MaxElement - 1;
-
- if (end < start) {
- return;
- }
- }
-
- if (0) {
- printf("glDraw[Range]Elements{,BaseVertex}"
- "(start %u, end %u, type 0x%x, count %d) ElemBuf %u, "
- "base %d\n",
- start, end, type, count,
- ctx->Array.ElementArrayBufferObj->Name,
- basevertex);
- }
-
-#if 0
- check_draw_elements_data(ctx, count, type, indices);
-#else
- (void) check_draw_elements_data;
-#endif
-
- vbo_validated_drawrangeelements(ctx, mode, GL_TRUE, start, end,
- count, type, indices, basevertex, 1);
-}
-
-
-/**
- * Called by glDrawRangeElements() in immediate mode.
- */
-static void GLAPIENTRY
-vbo_exec_DrawRangeElements(GLenum mode, GLuint start, GLuint end,
- GLsizei count, GLenum type, const GLvoid *indices)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- if (MESA_VERBOSE & VERBOSE_DRAW)
- _mesa_debug(ctx,
- "glDrawRangeElements(%s, %u, %u, %d, %s, %p)\n",
- _mesa_lookup_enum_by_nr(mode), start, end, count,
- _mesa_lookup_enum_by_nr(type), indices);
-
- vbo_exec_DrawRangeElementsBaseVertex(mode, start, end, count, type,
- indices, 0);
-}
-
-
-/**
- * Called by glDrawElements() in immediate mode.
- */
-static void GLAPIENTRY
-vbo_exec_DrawElements(GLenum mode, GLsizei count, GLenum type,
- const GLvoid *indices)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- if (MESA_VERBOSE & VERBOSE_DRAW)
- _mesa_debug(ctx, "glDrawElements(%s, %u, %s, %p)\n",
- _mesa_lookup_enum_by_nr(mode), count,
- _mesa_lookup_enum_by_nr(type), indices);
-
- if (!_mesa_validate_DrawElements( ctx, mode, count, type, indices, 0 ))
- return;
-
- vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0,
- count, type, indices, 0, 1);
-}
-
-
-/**
- * Called by glDrawElementsBaseVertex() in immediate mode.
- */
-static void GLAPIENTRY
-vbo_exec_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type,
- const GLvoid *indices, GLint basevertex)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- if (MESA_VERBOSE & VERBOSE_DRAW)
- _mesa_debug(ctx, "glDrawElementsBaseVertex(%s, %d, %s, %p, %d)\n",
- _mesa_lookup_enum_by_nr(mode), count,
- _mesa_lookup_enum_by_nr(type), indices, basevertex);
-
- if (!_mesa_validate_DrawElements( ctx, mode, count, type, indices,
- basevertex ))
- return;
-
- vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0,
- count, type, indices, basevertex, 1);
-}
-
-
-/**
- * Called by glDrawElementsInstanced() in immediate mode.
- */
-static void GLAPIENTRY
-vbo_exec_DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type,
- const GLvoid *indices, GLsizei numInstances)
-{
- GET_CURRENT_CONTEXT(ctx);
-
- if (MESA_VERBOSE & VERBOSE_DRAW)
- _mesa_debug(ctx, "glDrawElementsInstanced(%s, %d, %s, %p, %d)\n",
- _mesa_lookup_enum_by_nr(mode), count,
- _mesa_lookup_enum_by_nr(type), indices, numInstances);
-
- if (!_mesa_validate_DrawElementsInstanced(ctx, mode, count, type, indices,
- numInstances))
- return;
-
- vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0,
- count, type, indices, 0, numInstances);
-}
-
-
-/**
- * Inner support for both _mesa_MultiDrawElements() and
- * _mesa_MultiDrawRangeElements().
- * This does the actual rendering after we've checked array indexes, etc.
- */
-static void
-vbo_validated_multidrawelements(struct gl_context *ctx, GLenum mode,
- const GLsizei *count, GLenum type,
- const GLvoid **indices, GLsizei primcount,
- const GLint *basevertex)
-{
- struct vbo_context *vbo = vbo_context(ctx);
- struct vbo_exec_context *exec = &vbo->exec;
- struct _mesa_index_buffer ib;
- struct _mesa_prim *prim;
- unsigned int index_type_size = 0;
- uintptr_t min_index_ptr, max_index_ptr;
- GLboolean fallback = GL_FALSE;
- int i;
-
- if (primcount == 0)
- return;
-
- FLUSH_CURRENT( ctx, 0 );
-
- if (!_mesa_valid_to_render(ctx, "glMultiDrawElements")) {
- return;
- }
-
- prim = calloc(1, primcount * sizeof(*prim));
- if (prim == NULL) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glMultiDrawElements");
- return;
- }
-
- /* Decide if we can do this all as one set of primitives sharing the
- * same index buffer, or if we have to reset the index pointer per
- * primitive.
- */
- bind_arrays( ctx );
-
- /* check for dirty state again */
- if (ctx->NewState)
- _mesa_update_state( ctx );
-
- switch (type) {
- case GL_UNSIGNED_INT:
- index_type_size = 4;
- break;
- case GL_UNSIGNED_SHORT:
- index_type_size = 2;
- break;
- case GL_UNSIGNED_BYTE:
- index_type_size = 1;
- break;
- default:
- assert(0);
- }
-
- min_index_ptr = (uintptr_t)indices[0];
- max_index_ptr = 0;
- for (i = 0; i < primcount; i++) {
- min_index_ptr = MIN2(min_index_ptr, (uintptr_t)indices[i]);
- max_index_ptr = MAX2(max_index_ptr, (uintptr_t)indices[i] +
- index_type_size * count[i]);
- }
-
- /* Check if we can handle this thing as a bunch of index offsets from the
- * same index pointer. If we can't, then we have to fall back to doing
- * a draw_prims per primitive.
- * Check that the difference between each prim's indexes is a multiple of
- * the index/element size.
- */
- if (index_type_size != 1) {
- for (i = 0; i < primcount; i++) {
- if ((((uintptr_t)indices[i] - min_index_ptr) % index_type_size) != 0) {
- fallback = GL_TRUE;
- break;
- }
- }
- }
-
- /* If the index buffer isn't in a VBO, then treating the application's
- * subranges of the index buffer as one large index buffer may lead to
- * us reading unmapped memory.
- */
- if (!_mesa_is_bufferobj(ctx->Array.ElementArrayBufferObj))
- fallback = GL_TRUE;
-
- if (!fallback) {
- ib.count = (max_index_ptr - min_index_ptr) / index_type_size;
- ib.type = type;
- ib.obj = ctx->Array.ElementArrayBufferObj;
- ib.ptr = (void *)min_index_ptr;
-
- for (i = 0; i < primcount; i++) {
- prim[i].begin = (i == 0);
- prim[i].end = (i == primcount - 1);
- prim[i].weak = 0;
- prim[i].pad = 0;
- prim[i].mode = mode;
- prim[i].start = ((uintptr_t)indices[i] - min_index_ptr) / index_type_size;
- prim[i].count = count[i];
- prim[i].indexed = 1;
- prim[i].num_instances = 1;
- if (basevertex != NULL)
- prim[i].basevertex = basevertex[i];
- else
- prim[i].basevertex = 0;
- }
-
- check_buffers_are_unmapped(exec->array.inputs);
- vbo->draw_prims(ctx, exec->array.inputs, prim, primcount, &ib,
- GL_FALSE, ~0, ~0);
- } else {
- /* render one prim at a time */
- for (i = 0; i < primcount; i++) {
- ib.count = count[i];
- ib.type = type;
- ib.obj = ctx->Array.ElementArrayBufferObj;
- ib.ptr = indices[i];
-
- prim[0].begin = 1;
- prim[0].end = 1;
- prim[0].weak = 0;
- prim[0].pad = 0;
- prim[0].mode = mode;
- prim[0].start = 0;
- prim[0].count = count[i];
- prim[0].indexed = 1;
- prim[0].num_instances = 1;
- if (basevertex != NULL)
- prim[0].basevertex = basevertex[i];
- else
- prim[0].basevertex = 0;
-
- check_buffers_are_unmapped(exec->array.inputs);
- vbo->draw_prims(ctx, exec->array.inputs, prim, 1, &ib,
- GL_FALSE, ~0, ~0);
- }
- }
-
- free(prim);
-}
-
-
-static void GLAPIENTRY
-vbo_exec_MultiDrawElements(GLenum mode,
- const GLsizei *count, GLenum type,
- const GLvoid **indices,
- GLsizei primcount)
-{
- GET_CURRENT_CONTEXT(ctx);
- GLint i;
-
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- for (i = 0; i < primcount; i++) {
- if (!_mesa_validate_DrawElements(ctx, mode, count[i], type, indices[i],
- 0))
- return;
- }
-
- vbo_validated_multidrawelements(ctx, mode, count, type, indices, primcount,
- NULL);
-}
-
-
-static void GLAPIENTRY
-vbo_exec_MultiDrawElementsBaseVertex(GLenum mode,
- const GLsizei *count, GLenum type,
- const GLvoid **indices,
- GLsizei primcount,
- const GLsizei *basevertex)
-{
- GET_CURRENT_CONTEXT(ctx);
- GLint i;
-
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
-
- for (i = 0; i < primcount; i++) {
- if (!_mesa_validate_DrawElements(ctx, mode, count[i], type, indices[i],
- basevertex[i]))
- return;
- }
-
- vbo_validated_multidrawelements(ctx, mode, count, type, indices, primcount,
- basevertex);
-}
-
-
-/**
- * Plug in the immediate-mode vertex array drawing commands into the
- * givven vbo_exec_context object.
- */
-void
-vbo_exec_array_init( struct vbo_exec_context *exec )
-{
- exec->vtxfmt.DrawArrays = vbo_exec_DrawArrays;
- exec->vtxfmt.DrawElements = vbo_exec_DrawElements;
- exec->vtxfmt.DrawRangeElements = vbo_exec_DrawRangeElements;
- exec->vtxfmt.MultiDrawElementsEXT = vbo_exec_MultiDrawElements;
- exec->vtxfmt.DrawElementsBaseVertex = vbo_exec_DrawElementsBaseVertex;
- exec->vtxfmt.DrawRangeElementsBaseVertex = vbo_exec_DrawRangeElementsBaseVertex;
- exec->vtxfmt.MultiDrawElementsBaseVertex = vbo_exec_MultiDrawElementsBaseVertex;
- exec->vtxfmt.DrawArraysInstanced = vbo_exec_DrawArraysInstanced;
- exec->vtxfmt.DrawElementsInstanced = vbo_exec_DrawElementsInstanced;
-}
-
-
-void
-vbo_exec_array_destroy( struct vbo_exec_context *exec )
-{
- /* nothing to do */
-}
-
-
-
-/**
- * The following functions are only used for OpenGL ES 1/2 support.
- * And some aren't even supported (yet) in ES 1/2.
- */
-
-
-void GLAPIENTRY
-_mesa_DrawArrays(GLenum mode, GLint first, GLsizei count)
-{
- vbo_exec_DrawArrays(mode, first, count);
-}
-
-
-void GLAPIENTRY
-_mesa_DrawElements(GLenum mode, GLsizei count, GLenum type,
- const GLvoid *indices)
-{
- vbo_exec_DrawElements(mode, count, type, indices);
-}
-
-
-void GLAPIENTRY
-_mesa_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type,
- const GLvoid *indices, GLint basevertex)
-{
- vbo_exec_DrawElementsBaseVertex(mode, count, type, indices, basevertex);
-}
-
-
-void GLAPIENTRY
-_mesa_DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count,
- GLenum type, const GLvoid *indices)
-{
- vbo_exec_DrawRangeElements(mode, start, end, count, type, indices);
-}
-
-
-void GLAPIENTRY
-_mesa_DrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end,
- GLsizei count, GLenum type,
- const GLvoid *indices, GLint basevertex)
-{
- vbo_exec_DrawRangeElementsBaseVertex(mode, start, end, count, type,
- indices, basevertex);
-}
-
-
-void GLAPIENTRY
-_mesa_MultiDrawElementsEXT(GLenum mode, const GLsizei *count, GLenum type,
- const GLvoid **indices, GLsizei primcount)
-{
- vbo_exec_MultiDrawElements(mode, count, type, indices, primcount);
-}
-
-
-void GLAPIENTRY
-_mesa_MultiDrawElementsBaseVertex(GLenum mode,
- const GLsizei *count, GLenum type,
- const GLvoid **indices, GLsizei primcount,
- const GLint *basevertex)
-{
- vbo_exec_MultiDrawElementsBaseVertex(mode, count, type, indices,
- primcount, basevertex);
-}
+/************************************************************************** + * + * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. + * Copyright 2009 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +#include "main/glheader.h" +#include "main/context.h" +#include "main/state.h" +#include "main/api_validate.h" +#include "main/varray.h" +#include "main/bufferobj.h" +#include "main/enums.h" +#include "main/macros.h" + +#include "vbo_context.h" + + +/** + * All vertex buffers should be in an unmapped state when we're about + * to draw. This debug function checks that. + */ +static void +check_buffers_are_unmapped(const struct gl_client_array **inputs) +{ +#ifdef DEBUG + GLuint i; + + for (i = 0; i < VERT_ATTRIB_MAX; i++) { + if (inputs[i]) { + struct gl_buffer_object *obj = inputs[i]->BufferObj; + assert(!_mesa_bufferobj_mapped(obj)); + (void) obj; + } + } +#endif +} + + +/** + * A debug function that may be called from other parts of Mesa as + * needed during debugging. + */ +void +vbo_check_buffers_are_unmapped(struct gl_context *ctx) +{ + struct vbo_context *vbo = vbo_context(ctx); + struct vbo_exec_context *exec = &vbo->exec; + /* check the current vertex arrays */ + check_buffers_are_unmapped(exec->array.inputs); + /* check the current glBegin/glVertex/glEnd-style VBO */ + assert(!_mesa_bufferobj_mapped(exec->vtx.bufferobj)); +} + + + +/** + * Compute min and max elements by scanning the index buffer for + * glDraw[Range]Elements() calls. + * If primitive restart is enabled, we need to ignore restart + * indexes when computing min/max. + */ +void +vbo_get_minmax_index(struct gl_context *ctx, + const struct _mesa_prim *prim, + const struct _mesa_index_buffer *ib, + GLuint *min_index, GLuint *max_index) +{ + const GLboolean restart = ctx->Array.PrimitiveRestart; + const GLuint restartIndex = ctx->Array.RestartIndex; + const GLuint count = prim->count; + const void *indices; + GLuint i; + + if (_mesa_is_bufferobj(ib->obj)) { + const GLvoid *map = + ctx->Driver.MapBuffer(ctx, GL_ELEMENT_ARRAY_BUFFER_ARB, + GL_READ_ONLY, ib->obj); + indices = ADD_POINTERS(map, ib->ptr); + } else { + indices = ib->ptr; + } + + switch (ib->type) { + case GL_UNSIGNED_INT: { + const GLuint *ui_indices = (const GLuint *)indices; + GLuint max_ui = 0; + GLuint min_ui = ~0U; + if (restart) { + for (i = 0; i < count; i++) { + if (ui_indices[i] != restartIndex) { + if (ui_indices[i] > max_ui) max_ui = ui_indices[i]; + if (ui_indices[i] < min_ui) min_ui = ui_indices[i]; + } + } + } + else { + for (i = 0; i < count; i++) { + if (ui_indices[i] > max_ui) max_ui = ui_indices[i]; + if (ui_indices[i] < min_ui) min_ui = ui_indices[i]; + } + } + *min_index = min_ui; + *max_index = max_ui; + break; + } + case GL_UNSIGNED_SHORT: { + const GLushort *us_indices = (const GLushort *)indices; + GLuint max_us = 0; + GLuint min_us = ~0U; + if (restart) { + for (i = 0; i < count; i++) { + if (us_indices[i] != restartIndex) { + if (us_indices[i] > max_us) max_us = us_indices[i]; + if (us_indices[i] < min_us) min_us = us_indices[i]; + } + } + } + else { + for (i = 0; i < count; i++) { + if (us_indices[i] > max_us) max_us = us_indices[i]; + if (us_indices[i] < min_us) min_us = us_indices[i]; + } + } + *min_index = min_us; + *max_index = max_us; + break; + } + case GL_UNSIGNED_BYTE: { + const GLubyte *ub_indices = (const GLubyte *)indices; + GLuint max_ub = 0; + GLuint min_ub = ~0U; + if (restart) { + for (i = 0; i < count; i++) { + if (ub_indices[i] != restartIndex) { + if (ub_indices[i] > max_ub) max_ub = ub_indices[i]; + if (ub_indices[i] < min_ub) min_ub = ub_indices[i]; + } + } + } + else { + for (i = 0; i < count; i++) { + if (ub_indices[i] > max_ub) max_ub = ub_indices[i]; + if (ub_indices[i] < min_ub) min_ub = ub_indices[i]; + } + } + *min_index = min_ub; + *max_index = max_ub; + break; + } + default: + assert(0); + break; + } + + if (_mesa_is_bufferobj(ib->obj)) { + ctx->Driver.UnmapBuffer(ctx, GL_ELEMENT_ARRAY_BUFFER_ARB, ib->obj); + } +} + + +/** + * Check that element 'j' of the array has reasonable data. + * Map VBO if needed. + * For debugging purposes; not normally used. + */ +static void +check_array_data(struct gl_context *ctx, struct gl_client_array *array, + GLuint attrib, GLuint j) +{ + if (array->Enabled) { + const void *data = array->Ptr; + if (_mesa_is_bufferobj(array->BufferObj)) { + if (!array->BufferObj->Pointer) { + /* need to map now */ + array->BufferObj->Pointer = + ctx->Driver.MapBuffer(ctx, GL_ARRAY_BUFFER_ARB, + GL_READ_ONLY, array->BufferObj); + } + data = ADD_POINTERS(data, array->BufferObj->Pointer); + } + switch (array->Type) { + case GL_FLOAT: + { + GLfloat *f = (GLfloat *) ((GLubyte *) data + array->StrideB * j); + GLint k; + for (k = 0; k < array->Size; k++) { + if (IS_INF_OR_NAN(f[k]) || + f[k] >= 1.0e20 || f[k] <= -1.0e10) { + printf("Bad array data:\n"); + printf(" Element[%u].%u = %f\n", j, k, f[k]); + printf(" Array %u at %p\n", attrib, (void* ) array); + printf(" Type 0x%x, Size %d, Stride %d\n", + array->Type, array->Size, array->Stride); + printf(" Address/offset %p in Buffer Object %u\n", + array->Ptr, array->BufferObj->Name); + f[k] = 1.0; /* XXX replace the bad value! */ + } + /*assert(!IS_INF_OR_NAN(f[k]));*/ + } + } + break; + default: + ; + } + } +} + + +/** + * Unmap the buffer object referenced by given array, if mapped. + */ +static void +unmap_array_buffer(struct gl_context *ctx, struct gl_client_array *array) +{ + if (array->Enabled && + _mesa_is_bufferobj(array->BufferObj) && + _mesa_bufferobj_mapped(array->BufferObj)) { + ctx->Driver.UnmapBuffer(ctx, GL_ARRAY_BUFFER_ARB, array->BufferObj); + } +} + + +/** + * Examine the array's data for NaNs, etc. + * For debug purposes; not normally used. + */ +static void +check_draw_elements_data(struct gl_context *ctx, GLsizei count, GLenum elemType, + const void *elements, GLint basevertex) +{ + struct gl_array_object *arrayObj = ctx->Array.ArrayObj; + const void *elemMap; + GLint i, k; + + if (_mesa_is_bufferobj(ctx->Array.ElementArrayBufferObj)) { + elemMap = ctx->Driver.MapBuffer(ctx, + GL_ELEMENT_ARRAY_BUFFER_ARB, + GL_READ_ONLY, + ctx->Array.ElementArrayBufferObj); + elements = ADD_POINTERS(elements, elemMap); + } + + for (i = 0; i < count; i++) { + GLuint j; + + /* j = element[i] */ + switch (elemType) { + case GL_UNSIGNED_BYTE: + j = ((const GLubyte *) elements)[i]; + break; + case GL_UNSIGNED_SHORT: + j = ((const GLushort *) elements)[i]; + break; + case GL_UNSIGNED_INT: + j = ((const GLuint *) elements)[i]; + break; + default: + assert(0); + } + + /* check element j of each enabled array */ + check_array_data(ctx, &arrayObj->Vertex, VERT_ATTRIB_POS, j); + check_array_data(ctx, &arrayObj->Normal, VERT_ATTRIB_NORMAL, j); + check_array_data(ctx, &arrayObj->Color, VERT_ATTRIB_COLOR0, j); + check_array_data(ctx, &arrayObj->SecondaryColor, VERT_ATTRIB_COLOR1, j); + for (k = 0; k < Elements(arrayObj->TexCoord); k++) { + check_array_data(ctx, &arrayObj->TexCoord[k], VERT_ATTRIB_TEX0 + k, j); + } + for (k = 0; k < Elements(arrayObj->VertexAttrib); k++) { + check_array_data(ctx, &arrayObj->VertexAttrib[k], + VERT_ATTRIB_GENERIC0 + k, j); + } + } + + if (_mesa_is_bufferobj(ctx->Array.ElementArrayBufferObj)) { + ctx->Driver.UnmapBuffer(ctx, GL_ELEMENT_ARRAY_BUFFER_ARB, + ctx->Array.ElementArrayBufferObj); + } + + unmap_array_buffer(ctx, &arrayObj->Vertex); + unmap_array_buffer(ctx, &arrayObj->Normal); + unmap_array_buffer(ctx, &arrayObj->Color); + for (k = 0; k < Elements(arrayObj->TexCoord); k++) { + unmap_array_buffer(ctx, &arrayObj->TexCoord[k]); + } + for (k = 0; k < Elements(arrayObj->VertexAttrib); k++) { + unmap_array_buffer(ctx, &arrayObj->VertexAttrib[k]); + } +} + + +/** + * Check array data, looking for NaNs, etc. + */ +static void +check_draw_arrays_data(struct gl_context *ctx, GLint start, GLsizei count) +{ + /* TO DO */ +} + + +/** + * Print info/data for glDrawArrays(), for debugging. + */ +static void +print_draw_arrays(struct gl_context *ctx, + GLenum mode, GLint start, GLsizei count) +{ + struct vbo_context *vbo = vbo_context(ctx); + struct vbo_exec_context *exec = &vbo->exec; + int i; + + printf("vbo_exec_DrawArrays(mode 0x%x, start %d, count %d):\n", + mode, start, count); + + for (i = 0; i < 32; i++) { + GLuint bufName = exec->array.inputs[i]->BufferObj->Name; + GLint stride = exec->array.inputs[i]->Stride; + printf("attr %2d: size %d stride %d enabled %d " + "ptr %p Bufobj %u\n", + i, + exec->array.inputs[i]->Size, + stride, + /*exec->array.inputs[i]->Enabled,*/ + exec->array.legacy_array[i]->Enabled, + exec->array.inputs[i]->Ptr, + bufName); + + if (bufName) { + struct gl_buffer_object *buf = _mesa_lookup_bufferobj(ctx, bufName); + GLubyte *p = ctx->Driver.MapBuffer(ctx, GL_ARRAY_BUFFER_ARB, + GL_READ_ONLY_ARB, buf); + int offset = (int) (GLintptr) exec->array.inputs[i]->Ptr; + float *f = (float *) (p + offset); + int *k = (int *) f; + int i; + int n = (count * stride) / 4; + if (n > 32) + n = 32; + printf(" Data at offset %d:\n", offset); + for (i = 0; i < n; i++) { + printf(" float[%d] = 0x%08x %f\n", i, k[i], f[i]); + } + ctx->Driver.UnmapBuffer(ctx, GL_ARRAY_BUFFER_ARB, buf); + } + } +} + + +/** + * Bind the VBO executor to the current vertex array object prior + * to drawing. + * + * Just translate the arrayobj into a sane layout. + */ +static void +bind_array_obj(struct gl_context *ctx) +{ + struct vbo_context *vbo = vbo_context(ctx); + struct vbo_exec_context *exec = &vbo->exec; + struct gl_array_object *arrayObj = ctx->Array.ArrayObj; + GLuint i; + + /* TODO: Fix the ArrayObj struct to keep legacy arrays in an array + * rather than as individual named arrays. Then this function can + * go away. + */ + exec->array.legacy_array[VERT_ATTRIB_POS] = &arrayObj->Vertex; + exec->array.legacy_array[VERT_ATTRIB_WEIGHT] = &arrayObj->Weight; + exec->array.legacy_array[VERT_ATTRIB_NORMAL] = &arrayObj->Normal; + exec->array.legacy_array[VERT_ATTRIB_COLOR0] = &arrayObj->Color; + exec->array.legacy_array[VERT_ATTRIB_COLOR1] = &arrayObj->SecondaryColor; + exec->array.legacy_array[VERT_ATTRIB_FOG] = &arrayObj->FogCoord; + exec->array.legacy_array[VERT_ATTRIB_COLOR_INDEX] = &arrayObj->Index; + if (arrayObj->PointSize.Enabled) { + /* this aliases COLOR_INDEX */ + exec->array.legacy_array[VERT_ATTRIB_POINT_SIZE] = &arrayObj->PointSize; + } + exec->array.legacy_array[VERT_ATTRIB_EDGEFLAG] = &arrayObj->EdgeFlag; + + for (i = 0; i < Elements(arrayObj->TexCoord); i++) + exec->array.legacy_array[VERT_ATTRIB_TEX0 + i] = &arrayObj->TexCoord[i]; + + for (i = 0; i < Elements(arrayObj->VertexAttrib); i++) { + assert(i < Elements(exec->array.generic_array)); + exec->array.generic_array[i] = &arrayObj->VertexAttrib[i]; + } + + exec->array.array_obj = arrayObj->Name; +} + + +/** + * Set the vbo->exec->inputs[] pointers to point to the enabled + * vertex arrays. This depends on the current vertex program/shader + * being executed because of whether or not generic vertex arrays + * alias the conventional vertex arrays. + * For arrays that aren't enabled, we set the input[attrib] pointer + * to point at a zero-stride current value "array". + */ +static void +recalculate_input_bindings(struct gl_context *ctx) +{ + struct vbo_context *vbo = vbo_context(ctx); + struct vbo_exec_context *exec = &vbo->exec; + const struct gl_client_array **inputs = &exec->array.inputs[0]; + GLbitfield const_inputs = 0x0; + GLuint i; + + exec->array.program_mode = get_program_mode(ctx); + exec->array.enabled_flags = ctx->Array.ArrayObj->_Enabled; + + switch (exec->array.program_mode) { + case VP_NONE: + /* When no vertex program is active (or the vertex program is generated + * from fixed-function state). We put the material values into the + * generic slots. This is the only situation where material values + * are available as per-vertex attributes. + */ + for (i = 0; i <= VERT_ATTRIB_TEX7; i++) { + if (exec->array.legacy_array[i]->Enabled) + inputs[i] = exec->array.legacy_array[i]; + else { + inputs[i] = &vbo->legacy_currval[i]; + const_inputs |= 1 << i; + } + } + + for (i = 0; i < MAT_ATTRIB_MAX; i++) { + inputs[VERT_ATTRIB_GENERIC0 + i] = &vbo->mat_currval[i]; + const_inputs |= 1 << (VERT_ATTRIB_GENERIC0 + i); + } + + /* Could use just about anything, just to fill in the empty + * slots: + */ + for (i = MAT_ATTRIB_MAX; i < VERT_ATTRIB_MAX - VERT_ATTRIB_GENERIC0; i++) { + inputs[VERT_ATTRIB_GENERIC0 + i] = &vbo->generic_currval[i]; + const_inputs |= 1 << (VERT_ATTRIB_GENERIC0 + i); + } + + /* There is no need to make _NEW_ARRAY dirty here for the TnL program, + * because it already takes care of invalidating the state necessary + * to revalidate vertex arrays. Not marking the state as dirty also + * improves performance (quite significantly in some apps). + */ + if (!ctx->VertexProgram._MaintainTnlProgram) + ctx->NewState |= _NEW_ARRAY; + break; + + case VP_NV: + /* NV_vertex_program - attribute arrays alias and override + * conventional, legacy arrays. No materials, and the generic + * slots are vacant. + */ + for (i = 0; i <= VERT_ATTRIB_TEX7; i++) { + if (exec->array.generic_array[i]->Enabled) + inputs[i] = exec->array.generic_array[i]; + else if (exec->array.legacy_array[i]->Enabled) + inputs[i] = exec->array.legacy_array[i]; + else { + inputs[i] = &vbo->legacy_currval[i]; + const_inputs |= 1 << i; + } + } + + /* Could use just about anything, just to fill in the empty + * slots: + */ + for (i = VERT_ATTRIB_GENERIC0; i < VERT_ATTRIB_MAX; i++) { + inputs[i] = &vbo->generic_currval[i - VERT_ATTRIB_GENERIC0]; + const_inputs |= 1 << i; + } + + ctx->NewState |= _NEW_ARRAY; + break; + + case VP_ARB: + /* GL_ARB_vertex_program or GLSL vertex shader - Only the generic[0] + * attribute array aliases and overrides the legacy position array. + * + * Otherwise, legacy attributes available in the legacy slots, + * generic attributes in the generic slots and materials are not + * available as per-vertex attributes. + */ + if (exec->array.generic_array[0]->Enabled) + inputs[0] = exec->array.generic_array[0]; + else if (exec->array.legacy_array[0]->Enabled) + inputs[0] = exec->array.legacy_array[0]; + else { + inputs[0] = &vbo->legacy_currval[0]; + const_inputs |= 1 << 0; + } + + for (i = 1; i <= VERT_ATTRIB_TEX7; i++) { + if (exec->array.legacy_array[i]->Enabled) + inputs[i] = exec->array.legacy_array[i]; + else { + inputs[i] = &vbo->legacy_currval[i]; + const_inputs |= 1 << i; + } + } + + for (i = 0; i < MAX_VERTEX_GENERIC_ATTRIBS; i++) { + if (exec->array.generic_array[i]->Enabled) + inputs[VERT_ATTRIB_GENERIC0 + i] = exec->array.generic_array[i]; + else { + inputs[VERT_ATTRIB_GENERIC0 + i] = &vbo->generic_currval[i]; + const_inputs |= 1 << (VERT_ATTRIB_GENERIC0 + i); + } + } + + ctx->NewState |= _NEW_ARRAY; + break; + } + + _mesa_set_varying_vp_inputs( ctx, ~const_inputs ); +} + + +/** + * Examine the enabled vertex arrays to set the exec->array.inputs[] values. + * These will point to the arrays to actually use for drawing. Some will + * be user-provided arrays, other will be zero-stride const-valued arrays. + * Note that this might set the _NEW_ARRAY dirty flag so state validation + * must be done after this call. + */ +static void +bind_arrays(struct gl_context *ctx) +{ + if (!ctx->Array.RebindArrays) { + return; + } + + bind_array_obj(ctx); + recalculate_input_bindings(ctx); + ctx->Array.RebindArrays = GL_FALSE; +} + + +/** + * Helper function called by the other DrawArrays() functions below. + * This is where we handle primitive restart for drawing non-indexed + * arrays. If primitive restart is enabled, it typically means + * splitting one DrawArrays() into two. + */ +static void +vbo_draw_arrays(struct gl_context *ctx, GLenum mode, GLint start, + GLsizei count, GLuint numInstances) +{ + struct vbo_context *vbo = vbo_context(ctx); + struct vbo_exec_context *exec = &vbo->exec; + struct _mesa_prim prim[2]; + + bind_arrays(ctx); + + /* Again... because we may have changed the bitmask of per-vertex varying + * attributes. If we regenerate the fixed-function vertex program now + * we may be able to prune down the number of vertex attributes which we + * need in the shader. + */ + if (ctx->NewState) + _mesa_update_state(ctx); + + /* init most fields to zero */ + memset(prim, 0, sizeof(prim)); + prim[0].begin = 1; + prim[0].end = 1; + prim[0].mode = mode; + prim[0].num_instances = numInstances; + + /* Implement the primitive restart index */ + if (ctx->Array.PrimitiveRestart && ctx->Array.RestartIndex < count) { + GLuint primCount = 0; + + if (ctx->Array.RestartIndex == start) { + /* special case: RestartIndex at beginning */ + if (count > 1) { + prim[0].start = start + 1; + prim[0].count = count - 1; + primCount = 1; + } + } + else if (ctx->Array.RestartIndex == start + count - 1) { + /* special case: RestartIndex at end */ + if (count > 1) { + prim[0].start = start; + prim[0].count = count - 1; + primCount = 1; + } + } + else { + /* general case: RestartIndex in middle, split into two prims */ + prim[0].start = start; + prim[0].count = ctx->Array.RestartIndex - start; + + prim[1] = prim[0]; + prim[1].start = ctx->Array.RestartIndex + 1; + prim[1].count = count - prim[1].start; + + primCount = 2; + } + + if (primCount > 0) { + /* draw one or two prims */ + check_buffers_are_unmapped(exec->array.inputs); + vbo->draw_prims(ctx, exec->array.inputs, prim, primCount, NULL, + GL_TRUE, start, start + count - 1); + } + } + else { + /* no prim restart */ + prim[0].start = start; + prim[0].count = count; + + check_buffers_are_unmapped(exec->array.inputs); + vbo->draw_prims(ctx, exec->array.inputs, prim, 1, NULL, + GL_TRUE, start, start + count - 1); + } +} + + + +/** + * Called from glDrawArrays when in immediate mode (not display list mode). + */ +static void GLAPIENTRY +vbo_exec_DrawArrays(GLenum mode, GLint start, GLsizei count) +{ + GET_CURRENT_CONTEXT(ctx); + + if (MESA_VERBOSE & VERBOSE_DRAW) + _mesa_debug(ctx, "glDrawArrays(%s, %d, %d)\n", + _mesa_lookup_enum_by_nr(mode), start, count); + + if (!_mesa_validate_DrawArrays( ctx, mode, start, count )) + return; + + FLUSH_CURRENT( ctx, 0 ); + + if (!_mesa_valid_to_render(ctx, "glDrawArrays")) { + return; + } + + if (0) + check_draw_arrays_data(ctx, start, count); + + vbo_draw_arrays(ctx, mode, start, count, 1); + + if (0) + print_draw_arrays(ctx, mode, start, count); +} + + +/** + * Called from glDrawArraysInstanced when in immediate mode (not + * display list mode). + */ +static void GLAPIENTRY +vbo_exec_DrawArraysInstanced(GLenum mode, GLint start, GLsizei count, + GLsizei numInstances) +{ + GET_CURRENT_CONTEXT(ctx); + + if (MESA_VERBOSE & VERBOSE_DRAW) + _mesa_debug(ctx, "glDrawArraysInstanced(%s, %d, %d, %d)\n", + _mesa_lookup_enum_by_nr(mode), start, count, numInstances); + + if (!_mesa_validate_DrawArraysInstanced(ctx, mode, start, count, numInstances)) + return; + + FLUSH_CURRENT( ctx, 0 ); + + if (!_mesa_valid_to_render(ctx, "glDrawArraysInstanced")) { + return; + } + + if (0) + check_draw_arrays_data(ctx, start, count); + + vbo_draw_arrays(ctx, mode, start, count, numInstances); + + if (0) + print_draw_arrays(ctx, mode, start, count); +} + + +/** + * Map GL_ELEMENT_ARRAY_BUFFER and print contents. + * For debugging. + */ +static void +dump_element_buffer(struct gl_context *ctx, GLenum type) +{ + const GLvoid *map = ctx->Driver.MapBuffer(ctx, + GL_ELEMENT_ARRAY_BUFFER_ARB, + GL_READ_ONLY, + ctx->Array.ElementArrayBufferObj); + switch (type) { + case GL_UNSIGNED_BYTE: + { + const GLubyte *us = (const GLubyte *) map; + GLint i; + for (i = 0; i < ctx->Array.ElementArrayBufferObj->Size; i++) { + printf("%02x ", us[i]); + if (i % 32 == 31) + printf("\n"); + } + printf("\n"); + } + break; + case GL_UNSIGNED_SHORT: + { + const GLushort *us = (const GLushort *) map; + GLint i; + for (i = 0; i < ctx->Array.ElementArrayBufferObj->Size / 2; i++) { + printf("%04x ", us[i]); + if (i % 16 == 15) + printf("\n"); + } + printf("\n"); + } + break; + case GL_UNSIGNED_INT: + { + const GLuint *us = (const GLuint *) map; + GLint i; + for (i = 0; i < ctx->Array.ElementArrayBufferObj->Size / 4; i++) { + printf("%08x ", us[i]); + if (i % 8 == 7) + printf("\n"); + } + printf("\n"); + } + break; + default: + ; + } + + ctx->Driver.UnmapBuffer(ctx, GL_ELEMENT_ARRAY_BUFFER_ARB, + ctx->Array.ElementArrayBufferObj); +} + + +/** + * Inner support for both _mesa_DrawElements and _mesa_DrawRangeElements. + * Do the rendering for a glDrawElements or glDrawRangeElements call after + * we've validated buffer bounds, etc. + */ +static void +vbo_validated_drawrangeelements(struct gl_context *ctx, GLenum mode, + GLboolean index_bounds_valid, + GLuint start, GLuint end, + GLsizei count, GLenum type, + const GLvoid *indices, + GLint basevertex, GLint numInstances) +{ + struct vbo_context *vbo = vbo_context(ctx); + struct vbo_exec_context *exec = &vbo->exec; + struct _mesa_index_buffer ib; + struct _mesa_prim prim[1]; + + FLUSH_CURRENT( ctx, 0 ); + + if (!_mesa_valid_to_render(ctx, "glDraw[Range]Elements")) { + return; + } + + bind_arrays( ctx ); + + /* check for dirty state again */ + if (ctx->NewState) + _mesa_update_state( ctx ); + + ib.count = count; + ib.type = type; + ib.obj = ctx->Array.ElementArrayBufferObj; + ib.ptr = indices; + + prim[0].begin = 1; + prim[0].end = 1; + prim[0].weak = 0; + prim[0].pad = 0; + prim[0].mode = mode; + prim[0].start = 0; + prim[0].count = count; + prim[0].indexed = 1; + prim[0].basevertex = basevertex; + prim[0].num_instances = numInstances; + + /* Need to give special consideration to rendering a range of + * indices starting somewhere above zero. Typically the + * application is issuing multiple DrawRangeElements() to draw + * successive primitives layed out linearly in the vertex arrays. + * Unless the vertex arrays are all in a VBO (or locked as with + * CVA), the OpenGL semantics imply that we need to re-read or + * re-upload the vertex data on each draw call. + * + * In the case of hardware tnl, we want to avoid starting the + * upload at zero, as it will mean every draw call uploads an + * increasing amount of not-used vertex data. Worse - in the + * software tnl module, all those vertices might be transformed and + * lit but never rendered. + * + * If we just upload or transform the vertices in start..end, + * however, the indices will be incorrect. + * + * At this level, we don't know exactly what the requirements of + * the backend are going to be, though it will likely boil down to + * either: + * + * 1) Do nothing, everything is in a VBO and is processed once + * only. + * + * 2) Adjust the indices and vertex arrays so that start becomes + * zero. + * + * Rather than doing anything here, I'll provide a helper function + * for the latter case elsewhere. + */ + + check_buffers_are_unmapped(exec->array.inputs); + vbo->draw_prims( ctx, exec->array.inputs, prim, 1, &ib, + index_bounds_valid, start, end ); +} + + +/** + * Called by glDrawRangeElementsBaseVertex() in immediate mode. + */ +static void GLAPIENTRY +vbo_exec_DrawRangeElementsBaseVertex(GLenum mode, + GLuint start, GLuint end, + GLsizei count, GLenum type, + const GLvoid *indices, + GLint basevertex) +{ + static GLuint warnCount = 0; + GET_CURRENT_CONTEXT(ctx); + + if (MESA_VERBOSE & VERBOSE_DRAW) + _mesa_debug(ctx, + "glDrawRangeElementsBaseVertex(%s, %u, %u, %d, %s, %p, %d)\n", + _mesa_lookup_enum_by_nr(mode), start, end, count, + _mesa_lookup_enum_by_nr(type), indices, basevertex); + + if (!_mesa_validate_DrawRangeElements( ctx, mode, start, end, count, + type, indices, basevertex )) + return; + + /* NOTE: It's important that 'end' is a reasonable value. + * in _tnl_draw_prims(), we use end to determine how many vertices + * to transform. If it's too large, we can unnecessarily split prims + * or we can read/write out of memory in several different places! + */ + + /* Catch/fix some potential user errors */ + if (type == GL_UNSIGNED_BYTE) { + start = MIN2(start, 0xff); + end = MIN2(end, 0xff); + } + else if (type == GL_UNSIGNED_SHORT) { + start = MIN2(start, 0xffff); + end = MIN2(end, 0xffff); + } + + if (end >= ctx->Array.ArrayObj->_MaxElement) { + /* the max element is out of bounds of one or more enabled arrays */ + warnCount++; + + if (warnCount < 10) { + _mesa_warning(ctx, "glDraw[Range]Elements(start %u, end %u, count %d, " + "type 0x%x, indices=%p)\n" + "\tend is out of bounds (max=%u) " + "Element Buffer %u (size %d)\n" + "\tThis should probably be fixed in the application.", + start, end, count, type, indices, + ctx->Array.ArrayObj->_MaxElement - 1, + ctx->Array.ElementArrayBufferObj->Name, + (int) ctx->Array.ElementArrayBufferObj->Size); + } + + if (0) + dump_element_buffer(ctx, type); + + if (0) + _mesa_print_arrays(ctx); + +#ifdef DEBUG + /* 'end' was out of bounds, but now let's check the actual array + * indexes to see if any of them are out of bounds. + */ + { + GLuint max = _mesa_max_buffer_index(ctx, count, type, indices, + ctx->Array.ElementArrayBufferObj); + if (max >= ctx->Array.ArrayObj->_MaxElement) { + if (warnCount < 10) { + _mesa_warning(ctx, "glDraw[Range]Elements(start %u, end %u, " + "count %d, type 0x%x, indices=%p)\n" + "\tindex=%u is out of bounds (max=%u) " + "Element Buffer %u (size %d)\n" + "\tSkipping the glDrawRangeElements() call", + start, end, count, type, indices, max, + ctx->Array.ArrayObj->_MaxElement - 1, + ctx->Array.ElementArrayBufferObj->Name, + (int) ctx->Array.ElementArrayBufferObj->Size); + } + } + /* XXX we could also find the min index and compare to 'start' + * to see if start is correct. But it's more likely to get the + * upper bound wrong. + */ + } +#endif + + /* Set 'end' to the max possible legal value */ + assert(ctx->Array.ArrayObj->_MaxElement >= 1); + end = ctx->Array.ArrayObj->_MaxElement - 1; + + if (end < start) { + return; + } + } + + if (0) { + printf("glDraw[Range]Elements{,BaseVertex}" + "(start %u, end %u, type 0x%x, count %d) ElemBuf %u, " + "base %d\n", + start, end, type, count, + ctx->Array.ElementArrayBufferObj->Name, + basevertex); + } + +#if 0 + check_draw_elements_data(ctx, count, type, indices); +#else + (void) check_draw_elements_data; +#endif + + vbo_validated_drawrangeelements(ctx, mode, GL_TRUE, start, end, + count, type, indices, basevertex, 1); +} + + +/** + * Called by glDrawRangeElements() in immediate mode. + */ +static void GLAPIENTRY +vbo_exec_DrawRangeElements(GLenum mode, GLuint start, GLuint end, + GLsizei count, GLenum type, const GLvoid *indices) +{ + GET_CURRENT_CONTEXT(ctx); + + if (MESA_VERBOSE & VERBOSE_DRAW) + _mesa_debug(ctx, + "glDrawRangeElements(%s, %u, %u, %d, %s, %p)\n", + _mesa_lookup_enum_by_nr(mode), start, end, count, + _mesa_lookup_enum_by_nr(type), indices); + + vbo_exec_DrawRangeElementsBaseVertex(mode, start, end, count, type, + indices, 0); +} + + +/** + * Called by glDrawElements() in immediate mode. + */ +static void GLAPIENTRY +vbo_exec_DrawElements(GLenum mode, GLsizei count, GLenum type, + const GLvoid *indices) +{ + GET_CURRENT_CONTEXT(ctx); + + if (MESA_VERBOSE & VERBOSE_DRAW) + _mesa_debug(ctx, "glDrawElements(%s, %u, %s, %p)\n", + _mesa_lookup_enum_by_nr(mode), count, + _mesa_lookup_enum_by_nr(type), indices); + + if (!_mesa_validate_DrawElements( ctx, mode, count, type, indices, 0 )) + return; + + vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0, + count, type, indices, 0, 1); +} + + +/** + * Called by glDrawElementsBaseVertex() in immediate mode. + */ +static void GLAPIENTRY +vbo_exec_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, + const GLvoid *indices, GLint basevertex) +{ + GET_CURRENT_CONTEXT(ctx); + + if (MESA_VERBOSE & VERBOSE_DRAW) + _mesa_debug(ctx, "glDrawElementsBaseVertex(%s, %d, %s, %p, %d)\n", + _mesa_lookup_enum_by_nr(mode), count, + _mesa_lookup_enum_by_nr(type), indices, basevertex); + + if (!_mesa_validate_DrawElements( ctx, mode, count, type, indices, + basevertex )) + return; + + vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0, + count, type, indices, basevertex, 1); +} + + +/** + * Called by glDrawElementsInstanced() in immediate mode. + */ +static void GLAPIENTRY +vbo_exec_DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, + const GLvoid *indices, GLsizei numInstances) +{ + GET_CURRENT_CONTEXT(ctx); + + if (MESA_VERBOSE & VERBOSE_DRAW) + _mesa_debug(ctx, "glDrawElementsInstanced(%s, %d, %s, %p, %d)\n", + _mesa_lookup_enum_by_nr(mode), count, + _mesa_lookup_enum_by_nr(type), indices, numInstances); + + if (!_mesa_validate_DrawElementsInstanced(ctx, mode, count, type, indices, + numInstances)) + return; + + vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0, + count, type, indices, 0, numInstances); +} + + +/** + * Inner support for both _mesa_MultiDrawElements() and + * _mesa_MultiDrawRangeElements(). + * This does the actual rendering after we've checked array indexes, etc. + */ +static void +vbo_validated_multidrawelements(struct gl_context *ctx, GLenum mode, + const GLsizei *count, GLenum type, + const GLvoid **indices, GLsizei primcount, + const GLint *basevertex) +{ + struct vbo_context *vbo = vbo_context(ctx); + struct vbo_exec_context *exec = &vbo->exec; + struct _mesa_index_buffer ib; + struct _mesa_prim *prim; + unsigned int index_type_size = 0; + uintptr_t min_index_ptr, max_index_ptr; + GLboolean fallback = GL_FALSE; + int i; + + if (primcount == 0) + return; + + FLUSH_CURRENT( ctx, 0 ); + + if (!_mesa_valid_to_render(ctx, "glMultiDrawElements")) { + return; + } + + prim = calloc(1, primcount * sizeof(*prim)); + if (prim == NULL) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glMultiDrawElements"); + return; + } + + /* Decide if we can do this all as one set of primitives sharing the + * same index buffer, or if we have to reset the index pointer per + * primitive. + */ + bind_arrays( ctx ); + + /* check for dirty state again */ + if (ctx->NewState) + _mesa_update_state( ctx ); + + switch (type) { + case GL_UNSIGNED_INT: + index_type_size = 4; + break; + case GL_UNSIGNED_SHORT: + index_type_size = 2; + break; + case GL_UNSIGNED_BYTE: + index_type_size = 1; + break; + default: + assert(0); + } + + min_index_ptr = (uintptr_t)indices[0]; + max_index_ptr = 0; + for (i = 0; i < primcount; i++) { + min_index_ptr = MIN2(min_index_ptr, (uintptr_t)indices[i]); + max_index_ptr = MAX2(max_index_ptr, (uintptr_t)indices[i] + + index_type_size * count[i]); + } + + /* Check if we can handle this thing as a bunch of index offsets from the + * same index pointer. If we can't, then we have to fall back to doing + * a draw_prims per primitive. + * Check that the difference between each prim's indexes is a multiple of + * the index/element size. + */ + if (index_type_size != 1) { + for (i = 0; i < primcount; i++) { + if ((((uintptr_t)indices[i] - min_index_ptr) % index_type_size) != 0) { + fallback = GL_TRUE; + break; + } + } + } + + /* If the index buffer isn't in a VBO, then treating the application's + * subranges of the index buffer as one large index buffer may lead to + * us reading unmapped memory. + */ + if (!_mesa_is_bufferobj(ctx->Array.ElementArrayBufferObj)) + fallback = GL_TRUE; + + if (!fallback) { + ib.count = (max_index_ptr - min_index_ptr) / index_type_size; + ib.type = type; + ib.obj = ctx->Array.ElementArrayBufferObj; + ib.ptr = (void *)min_index_ptr; + + for (i = 0; i < primcount; i++) { + prim[i].begin = (i == 0); + prim[i].end = (i == primcount - 1); + prim[i].weak = 0; + prim[i].pad = 0; + prim[i].mode = mode; + prim[i].start = ((uintptr_t)indices[i] - min_index_ptr) / index_type_size; + prim[i].count = count[i]; + prim[i].indexed = 1; + prim[i].num_instances = 1; + if (basevertex != NULL) + prim[i].basevertex = basevertex[i]; + else + prim[i].basevertex = 0; + } + + check_buffers_are_unmapped(exec->array.inputs); + vbo->draw_prims(ctx, exec->array.inputs, prim, primcount, &ib, + GL_FALSE, ~0, ~0); + } else { + /* render one prim at a time */ + for (i = 0; i < primcount; i++) { + ib.count = count[i]; + ib.type = type; + ib.obj = ctx->Array.ElementArrayBufferObj; + ib.ptr = indices[i]; + + prim[0].begin = 1; + prim[0].end = 1; + prim[0].weak = 0; + prim[0].pad = 0; + prim[0].mode = mode; + prim[0].start = 0; + prim[0].count = count[i]; + prim[0].indexed = 1; + prim[0].num_instances = 1; + if (basevertex != NULL) + prim[0].basevertex = basevertex[i]; + else + prim[0].basevertex = 0; + + check_buffers_are_unmapped(exec->array.inputs); + vbo->draw_prims(ctx, exec->array.inputs, prim, 1, &ib, + GL_FALSE, ~0, ~0); + } + } + + free(prim); +} + + +static void GLAPIENTRY +vbo_exec_MultiDrawElements(GLenum mode, + const GLsizei *count, GLenum type, + const GLvoid **indices, + GLsizei primcount) +{ + GET_CURRENT_CONTEXT(ctx); + GLint i; + + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + for (i = 0; i < primcount; i++) { + if (!_mesa_validate_DrawElements(ctx, mode, count[i], type, indices[i], + 0)) + return; + } + + vbo_validated_multidrawelements(ctx, mode, count, type, indices, primcount, + NULL); +} + + +static void GLAPIENTRY +vbo_exec_MultiDrawElementsBaseVertex(GLenum mode, + const GLsizei *count, GLenum type, + const GLvoid **indices, + GLsizei primcount, + const GLsizei *basevertex) +{ + GET_CURRENT_CONTEXT(ctx); + GLint i; + + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + for (i = 0; i < primcount; i++) { + if (!_mesa_validate_DrawElements(ctx, mode, count[i], type, indices[i], + basevertex[i])) + return; + } + + vbo_validated_multidrawelements(ctx, mode, count, type, indices, primcount, + basevertex); +} + + +/** + * Plug in the immediate-mode vertex array drawing commands into the + * givven vbo_exec_context object. + */ +void +vbo_exec_array_init( struct vbo_exec_context *exec ) +{ + exec->vtxfmt.DrawArrays = vbo_exec_DrawArrays; + exec->vtxfmt.DrawElements = vbo_exec_DrawElements; + exec->vtxfmt.DrawRangeElements = vbo_exec_DrawRangeElements; + exec->vtxfmt.MultiDrawElementsEXT = vbo_exec_MultiDrawElements; + exec->vtxfmt.DrawElementsBaseVertex = vbo_exec_DrawElementsBaseVertex; + exec->vtxfmt.DrawRangeElementsBaseVertex = vbo_exec_DrawRangeElementsBaseVertex; + exec->vtxfmt.MultiDrawElementsBaseVertex = vbo_exec_MultiDrawElementsBaseVertex; + exec->vtxfmt.DrawArraysInstanced = vbo_exec_DrawArraysInstanced; + exec->vtxfmt.DrawElementsInstanced = vbo_exec_DrawElementsInstanced; +} + + +void +vbo_exec_array_destroy( struct vbo_exec_context *exec ) +{ + /* nothing to do */ +} + + + +/** + * The following functions are only used for OpenGL ES 1/2 support. + * And some aren't even supported (yet) in ES 1/2. + */ + + +void GLAPIENTRY +_mesa_DrawArrays(GLenum mode, GLint first, GLsizei count) +{ + vbo_exec_DrawArrays(mode, first, count); +} + + +void GLAPIENTRY +_mesa_DrawElements(GLenum mode, GLsizei count, GLenum type, + const GLvoid *indices) +{ + vbo_exec_DrawElements(mode, count, type, indices); +} + + +void GLAPIENTRY +_mesa_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, + const GLvoid *indices, GLint basevertex) +{ + vbo_exec_DrawElementsBaseVertex(mode, count, type, indices, basevertex); +} + + +void GLAPIENTRY +_mesa_DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, + GLenum type, const GLvoid *indices) +{ + vbo_exec_DrawRangeElements(mode, start, end, count, type, indices); +} + + +void GLAPIENTRY +_mesa_DrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, + GLsizei count, GLenum type, + const GLvoid *indices, GLint basevertex) +{ + vbo_exec_DrawRangeElementsBaseVertex(mode, start, end, count, type, + indices, basevertex); +} + + +void GLAPIENTRY +_mesa_MultiDrawElementsEXT(GLenum mode, const GLsizei *count, GLenum type, + const GLvoid **indices, GLsizei primcount) +{ + vbo_exec_MultiDrawElements(mode, count, type, indices, primcount); +} + + +void GLAPIENTRY +_mesa_MultiDrawElementsBaseVertex(GLenum mode, + const GLsizei *count, GLenum type, + const GLvoid **indices, GLsizei primcount, + const GLint *basevertex) +{ + vbo_exec_MultiDrawElementsBaseVertex(mode, count, type, indices, + primcount, basevertex); +} |