diff options
author | Dave Airlie <airlied@redhat.com> | 2009-03-20 10:52:17 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-03-20 10:52:17 +1000 |
commit | 407e8ae5b167b0193e1e5b1266a5d61ed836dfb5 (patch) | |
tree | 2d9d05a5c3122f41a13aa8bd9ae921c1176e6b0d /src/mesa | |
parent | bdaa0341caffc353fd26bbd91865c2d86eed11c1 (diff) | |
parent | 114bb54324f22cb53bcd14607234d0acd74d37bd (diff) |
Merge remote branch 'main/master' into radeon-rewrite
Conflicts:
src/mesa/drivers/dri/r300/r300_cmdbuf.c
src/mesa/drivers/dri/r300/r300_state.c
src/mesa/drivers/dri/r300/r300_swtcl.c
src/mesa/drivers/dri/r300/radeon_ioctl.c
src/mesa/drivers/dri/radeon/radeon_screen.c
Diffstat (limited to 'src/mesa')
324 files changed, 13180 insertions, 11305 deletions
diff --git a/src/mesa/Makefile b/src/mesa/Makefile index 78b71d4676..4ff28dae9b 100644 --- a/src/mesa/Makefile +++ b/src/mesa/Makefile @@ -48,7 +48,7 @@ libglapi.a: $(GLAPI_OBJECTS) ###################################################################### # Device drivers driver_subdirs: libmesa.a libglapi.a - (cd drivers && $(MAKE)) + @ (cd drivers && $(MAKE)) ###################################################################### diff --git a/src/mesa/SConscript b/src/mesa/SConscript index a878d31dbb..d1b9e93c0c 100644 --- a/src/mesa/SConscript +++ b/src/mesa/SConscript @@ -16,6 +16,7 @@ if env['platform'] != 'winddk': env.Append(CPPDEFINES = [ '_GDI32_', # prevent gl* being declared __declspec(dllimport) in MS headers 'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers + 'WIN32_THREADS', # use Win32 thread API ]) # @@ -39,6 +40,7 @@ if env['platform'] != 'winddk': 'main/colortab.c', 'main/context.c', 'main/convolve.c', + 'main/cpuinfo.c', 'main/debug.c', 'main/depth.c', 'main/depthstencil.c', @@ -79,6 +81,7 @@ if env['platform'] != 'winddk': 'main/renderbuffer.c', 'main/scissor.c', 'main/shaders.c', + 'main/shared.c', 'main/state.c', 'main/stencil.c', 'main/texcompress.c', @@ -95,6 +98,7 @@ if env['platform'] != 'winddk': 'main/texstate.c', 'main/texstore.c', 'main/varray.c', + 'main/viewport.c', 'main/vtxfmt.c', ] @@ -163,6 +167,7 @@ if env['platform'] != 'winddk': 'state_tracker/st_cb_readpixels.c', 'state_tracker/st_cb_strings.c', 'state_tracker/st_cb_texture.c', + 'state_tracker/st_cb_viewport.c', 'state_tracker/st_context.c', 'state_tracker/st_debug.c', 'state_tracker/st_draw.c', @@ -186,10 +191,10 @@ if env['platform'] != 'winddk': 'shader/nvvertparse.c', 'shader/program.c', 'shader/prog_cache.c', - 'shader/prog_debug.c', 'shader/prog_execute.c', 'shader/prog_instruction.c', 'shader/prog_noise.c', + 'shader/prog_optimize.c', 'shader/prog_parameter.c', 'shader/prog_print.c', 'shader/prog_statevars.c', @@ -250,7 +255,7 @@ if env['platform'] != 'winddk': ]) mesa_sources += [ 'x86/common_x86.c', - 'x86/x86.c', + 'x86/x86_xform.c', 'x86/3dnow.c', 'x86/sse.c', 'x86/common_x86_asm.S', diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c index 986f751bdc..44adaf8682 100644 --- a/src/mesa/drivers/common/driverfuncs.c +++ b/src/mesa/drivers/common/driverfuncs.c @@ -134,9 +134,6 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->BindProgram = NULL; driver->NewProgram = _mesa_new_program; driver->DeleteProgram = _mesa_delete_program; -#if FEATURE_MESA_program_debug - driver->GetProgramRegister = _mesa_get_program_register; -#endif /* FEATURE_MESA_program_debug */ /* simple state commands */ driver->AlphaFunc = NULL; @@ -308,7 +305,7 @@ _mesa_init_driver_state(GLcontext *ctx) 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_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); diff --git a/src/mesa/drivers/dri/common/extension_helper.h b/src/mesa/drivers/dri/common/extension_helper.h index 0d641f25f7..8dcaaee307 100644 --- a/src/mesa/drivers/dri/common/extension_helper.h +++ b/src/mesa/drivers/dri/common/extension_helper.h @@ -2640,6 +2640,13 @@ static const char GetProgramStringARB_names[] = ""; #endif +#if defined(need_GL_ATI_envmap_bumpmap) +static const char TexBumpParameterfvATI_names[] = + "ip\0" /* Parameter signature */ + "glTexBumpParameterfvATI\0" + ""; +#endif + #if defined(need_GL_VERSION_2_0) || defined(need_GL_ARB_shader_objects) static const char CompileShaderARB_names[] = "i\0" /* Parameter signature */ @@ -2980,6 +2987,13 @@ static const char GetVertexAttribdvARB_names[] = ""; #endif +#if defined(need_GL_ATI_envmap_bumpmap) +static const char TexBumpParameterivATI_names[] = + "ip\0" /* Parameter signature */ + "glTexBumpParameterivATI\0" + ""; +#endif + #if defined(need_GL_EXT_convolution) static const char GetSeparableFilter_names[] = "iiippp\0" /* Parameter signature */ @@ -3891,6 +3905,13 @@ static const char VertexAttrib4dARB_names[] = ""; #endif +#if defined(need_GL_ATI_envmap_bumpmap) +static const char GetTexBumpParameterfvATI_names[] = + "ip\0" /* Parameter signature */ + "glGetTexBumpParameterfvATI\0" + ""; +#endif + #if defined(need_GL_NV_fragment_program) static const char ProgramNamedParameter4dNV_names[] = "iipdddd\0" /* Parameter signature */ @@ -4834,6 +4855,13 @@ static const char VertexAttribs1svNV_names[] = ""; #endif +#if defined(need_GL_ATI_envmap_bumpmap) +static const char GetTexBumpParameterivATI_names[] = + "ip\0" /* Parameter signature */ + "glGetTexBumpParameterivATI\0" + ""; +#endif + #if defined(need_GL_EXT_coordinate_frame) static const char Binormal3bEXT_names[] = "iii\0" /* Parameter signature */ @@ -5198,6 +5226,16 @@ static const struct dri_extension_function GL_ATI_draw_buffers_functions[] = { }; #endif +#if defined(need_GL_ATI_envmap_bumpmap) +static const struct dri_extension_function GL_ATI_envmap_bumpmap_functions[] = { + { TexBumpParameterfvATI_names, TexBumpParameterfvATI_remap_index, -1 }, + { TexBumpParameterivATI_names, TexBumpParameterivATI_remap_index, -1 }, + { GetTexBumpParameterfvATI_names, GetTexBumpParameterfvATI_remap_index, -1 }, + { GetTexBumpParameterivATI_names, GetTexBumpParameterivATI_remap_index, -1 }, + { NULL, 0, 0 } +}; +#endif + #if defined(need_GL_ATI_fragment_shader) static const struct dri_extension_function GL_ATI_fragment_shader_functions[] = { { ColorFragmentOp2ATI_names, ColorFragmentOp2ATI_remap_index, -1 }, diff --git a/src/mesa/drivers/dri/common/texmem.c b/src/mesa/drivers/dri/common/texmem.c index ff174a251d..b64618a03c 100644 --- a/src/mesa/drivers/dri/common/texmem.c +++ b/src/mesa/drivers/dri/common/texmem.c @@ -1063,31 +1063,31 @@ void driInitTextureObjects( GLcontext *ctx, driTextureObject * swapped, ctx->Texture.CurrentUnit = i; if ( (targets & DRI_TEXMGR_DO_TEXTURE_1D) != 0 ) { - texObj = ctx->Texture.Unit[i].Current1D; + texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_1D_INDEX]; ctx->Driver.BindTexture( ctx, GL_TEXTURE_1D, texObj ); move_to_tail( swapped, (driTextureObject *) texObj->DriverData ); } if ( (targets & DRI_TEXMGR_DO_TEXTURE_2D) != 0 ) { - texObj = ctx->Texture.Unit[i].Current2D; + texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_2D_INDEX]; ctx->Driver.BindTexture( ctx, GL_TEXTURE_2D, texObj ); move_to_tail( swapped, (driTextureObject *) texObj->DriverData ); } if ( (targets & DRI_TEXMGR_DO_TEXTURE_3D) != 0 ) { - texObj = ctx->Texture.Unit[i].Current3D; + texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_3D_INDEX]; ctx->Driver.BindTexture( ctx, GL_TEXTURE_3D, texObj ); move_to_tail( swapped, (driTextureObject *) texObj->DriverData ); } if ( (targets & DRI_TEXMGR_DO_TEXTURE_CUBE) != 0 ) { - texObj = ctx->Texture.Unit[i].CurrentCubeMap; + texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_CUBE_INDEX]; ctx->Driver.BindTexture( ctx, GL_TEXTURE_CUBE_MAP_ARB, texObj ); move_to_tail( swapped, (driTextureObject *) texObj->DriverData ); } if ( (targets & DRI_TEXMGR_DO_TEXTURE_RECT) != 0 ) { - texObj = ctx->Texture.Unit[i].CurrentRect; + texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_RECT_INDEX]; ctx->Driver.BindTexture( ctx, GL_TEXTURE_RECTANGLE_NV, texObj ); move_to_tail( swapped, (driTextureObject *) texObj->DriverData ); } diff --git a/src/mesa/drivers/dri/common/utils.c b/src/mesa/drivers/dri/common/utils.c index 6b44ed9a67..c9acd81be7 100644 --- a/src/mesa/drivers/dri/common/utils.c +++ b/src/mesa/drivers/dri/common/utils.c @@ -32,19 +32,14 @@ #include <string.h> #include <stdlib.h> #include "main/mtypes.h" +#include "main/cpuinfo.h" #include "main/extensions.h" #include "glapi/dispatch.h" #include "utils.h" -int driDispatchRemapTable[ driDispatchRemapTable_size ]; -#if defined(USE_X86_ASM) -#include "x86/common_x86_asm.h" -#endif +int driDispatchRemapTable[ driDispatchRemapTable_size ]; -#if defined(USE_PPC_ASM) -#include "ppc/common_ppc_features.h" -#endif unsigned driParseDebugString( const char * debug, @@ -93,12 +88,8 @@ unsigned driGetRendererString( char * buffer, const char * hardware_name, const char * driver_date, GLuint agp_mode ) { -#define MAX_INFO 4 - const char * cpu[MAX_INFO]; - unsigned next = 0; - unsigned i; - unsigned offset; - + unsigned offset; + char *cpu; offset = sprintf( buffer, "Mesa DRI %s %s", hardware_name, driver_date ); @@ -118,59 +109,10 @@ driGetRendererString( char * buffer, const char * hardware_name, /* Append any CPU-specific information. */ -#ifdef USE_X86_ASM - if ( _mesa_x86_cpu_features ) { - cpu[next] = " x86"; - next++; - } -# ifdef USE_MMX_ASM - if ( cpu_has_mmx ) { - cpu[next] = (cpu_has_mmxext) ? "/MMX+" : "/MMX"; - next++; - } -# endif -# ifdef USE_3DNOW_ASM - if ( cpu_has_3dnow ) { - cpu[next] = (cpu_has_3dnowext) ? "/3DNow!+" : "/3DNow!"; - next++; - } -# endif -# ifdef USE_SSE_ASM - if ( cpu_has_xmm ) { - cpu[next] = (cpu_has_xmm2) ? "/SSE2" : "/SSE"; - next++; - } -# endif - -#elif defined(USE_SPARC_ASM) - - cpu[0] = " SPARC"; - next = 1; - -#elif defined(USE_PPC_ASM) - if ( _mesa_ppc_cpu_features ) { - cpu[next] = (cpu_has_64) ? " PowerPC 64" : " PowerPC"; - next++; - } - -# ifdef USE_VMX_ASM - if ( cpu_has_vmx ) { - cpu[next] = "/Altivec"; - next++; - } -# endif - - if ( ! cpu_has_fpu ) { - cpu[next] = "/No FPU"; - next++; - } -#endif - - for ( i = 0 ; i < next ; i++ ) { - const size_t len = strlen( cpu[i] ); - - strncpy( & buffer[ offset ], cpu[i], len ); - offset += len; + cpu = _mesa_get_cpu_string(); + if (cpu) { + offset += sprintf(buffer + offset, " %s", cpu); + _mesa_free(cpu); } return offset; diff --git a/src/mesa/drivers/dri/common/xmlpool/options.h b/src/mesa/drivers/dri/common/xmlpool/options.h index d5f4fc3491..d76595578c 100644 --- a/src/mesa/drivers/dri/common/xmlpool/options.h +++ b/src/mesa/drivers/dri/common/xmlpool/options.h @@ -546,3 +546,23 @@ DRI_CONF_OPT_BEGIN(nv_vertex_program,bool,def) \ DRI_CONF_DESC(fr,"Activer l'extension GL_NV_vertex_program") \ DRI_CONF_DESC(sv,"Aktivera tillägget GL_NV_vertex_program") \ DRI_CONF_OPT_END + +#define DRI_CONF_ALWAYS_FLUSH_BATCH(def) \ +DRI_CONF_OPT_BEGIN(always_flush_batch,bool,def) \ + DRI_CONF_DESC(en,"Enable flushing batchbuffer after each draw call") \ + DRI_CONF_DESC(de,"Enable flushing batchbuffer after each draw call") \ + DRI_CONF_DESC(es,"Enable flushing batchbuffer after each draw call") \ + DRI_CONF_DESC(nl,"Enable flushing batchbuffer after each draw call") \ + DRI_CONF_DESC(fr,"Enable flushing batchbuffer after each draw call") \ + DRI_CONF_DESC(sv,"Enable flushing batchbuffer after each draw call") \ +DRI_CONF_OPT_END + +#define DRI_CONF_ALWAYS_FLUSH_CACHE(def) \ +DRI_CONF_OPT_BEGIN(always_flush_cache,bool,def) \ + DRI_CONF_DESC(en,"Enable flushing GPU caches with each draw call") \ + DRI_CONF_DESC(de,"Enable flushing GPU caches with each draw call") \ + DRI_CONF_DESC(es,"Enable flushing GPU caches with each draw call") \ + DRI_CONF_DESC(nl,"Enable flushing GPU caches with each draw call") \ + DRI_CONF_DESC(fr,"Enable flushing GPU caches with each draw call") \ + DRI_CONF_DESC(sv,"Enable flushing GPU caches with each draw call") \ +DRI_CONF_OPT_END diff --git a/src/mesa/drivers/dri/common/xmlpool/t_options.h b/src/mesa/drivers/dri/common/xmlpool/t_options.h index 4df1916aad..5fd6ec65bf 100644 --- a/src/mesa/drivers/dri/common/xmlpool/t_options.h +++ b/src/mesa/drivers/dri/common/xmlpool/t_options.h @@ -237,3 +237,13 @@ DRI_CONF_OPT_END DRI_CONF_OPT_BEGIN(nv_vertex_program,bool,def) \ DRI_CONF_DESC(en,gettext("Enable extension GL_NV_vertex_program")) \ DRI_CONF_OPT_END + +#define DRI_CONF_ALWAYS_FLUSH_BATCH(def) \ +DRI_CONF_OPT_BEGIN(always_flush_batch,bool,def) \ + DRI_CONF_DESC(en,gettext("Enable flushing batchbuffer after each draw call")) \ +DRI_CONF_OPT_END + +#define DRI_CONF_ALWAYS_FLUSH_CACHE(def) \ +DRI_CONF_OPT_BEGIN(always_flush_cache,bool,def) \ + DRI_CONF_DESC(en,gettext("Enable flushing GPU caches with each draw call")) \ +DRI_CONF_OPT_END diff --git a/src/mesa/drivers/dri/fb/fb_dri.c b/src/mesa/drivers/dri/fb/fb_dri.c index f1194d7ce8..571b8922d5 100644 --- a/src/mesa/drivers/dri/fb/fb_dri.c +++ b/src/mesa/drivers/dri/fb/fb_dri.c @@ -480,7 +480,7 @@ fbCreateBuffer( __DRIscreenPrivate *driScrnPriv, static void fbDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } diff --git a/src/mesa/drivers/dri/ffb/ffb_state.c b/src/mesa/drivers/dri/ffb/ffb_state.c index ee0fe4e0db..5eb8f417ff 100644 --- a/src/mesa/drivers/dri/ffb/ffb_state.c +++ b/src/mesa/drivers/dri/ffb/ffb_state.c @@ -275,7 +275,7 @@ ffbDDStencilFuncSeparate(GLcontext *ctx, GLenum face, GLenum func, /* We will properly update sw/hw state when stenciling is * enabled. */ - if (! ctx->Stencil.Enabled) + if (! ctx->Stencil._Enabled) return; stencilctl = fmesa->stencilctl; @@ -333,7 +333,7 @@ ffbDDStencilOpSeparate(GLcontext *ctx, GLenum face, GLenum fail, /* We will properly update sw/hw state when stenciling is * enabled. */ - if (! ctx->Stencil.Enabled) + if (! ctx->Stencil._Enabled) return; stencilctl = fmesa->stencilctl; diff --git a/src/mesa/drivers/dri/ffb/ffb_xmesa.c b/src/mesa/drivers/dri/ffb/ffb_xmesa.c index 00bdcec7a6..3b9f5c6759 100644 --- a/src/mesa/drivers/dri/ffb/ffb_xmesa.c +++ b/src/mesa/drivers/dri/ffb/ffb_xmesa.c @@ -394,7 +394,7 @@ ffbCreateBuffer(__DRIscreenPrivate *driScrnPriv, static void ffbDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } diff --git a/src/mesa/drivers/dri/gamma/gamma_tex.c b/src/mesa/drivers/dri/gamma/gamma_tex.c index 2ffb790f28..ca33c1740f 100644 --- a/src/mesa/drivers/dri/gamma/gamma_tex.c +++ b/src/mesa/drivers/dri/gamma/gamma_tex.c @@ -400,19 +400,19 @@ void gammaInitTextureObjects( GLcontext *ctx ) ctx->Texture.CurrentUnit = 0; - texObj = ctx->Texture.Unit[0].Current1D; + texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_1D_INDEX]; gammaBindTexture( ctx, GL_TEXTURE_1D, texObj ); - texObj = ctx->Texture.Unit[0].Current2D; + texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; gammaBindTexture( ctx, GL_TEXTURE_2D, texObj ); #if 0 ctx->Texture.CurrentUnit = 1; - texObj = ctx->Texture.Unit[1].Current1D; + texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_1D_INDEX]; gammaBindTexture( ctx, GL_TEXTURE_1D, texObj ); - texObj = ctx->Texture.Unit[1].Current2D; + texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_2D_INDEX]; gammaBindTexture( ctx, GL_TEXTURE_2D, texObj ); #endif diff --git a/src/mesa/drivers/dri/gamma/gamma_xmesa.c b/src/mesa/drivers/dri/gamma/gamma_xmesa.c index 2a28902e1e..7b5b53589c 100644 --- a/src/mesa/drivers/dri/gamma/gamma_xmesa.c +++ b/src/mesa/drivers/dri/gamma/gamma_xmesa.c @@ -96,7 +96,7 @@ gammaCreateBuffer( __DRIscreenPrivate *driScrnPriv, static void gammaDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } static void diff --git a/src/mesa/drivers/dri/i810/i810screen.c b/src/mesa/drivers/dri/i810/i810screen.c index 9a5a39c1db..6e49f3466c 100644 --- a/src/mesa/drivers/dri/i810/i810screen.c +++ b/src/mesa/drivers/dri/i810/i810screen.c @@ -341,7 +341,7 @@ i810CreateBuffer( __DRIscreenPrivate *driScrnPriv, static void i810DestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } const struct __DriverAPIRec driDriverAPI = { diff --git a/src/mesa/drivers/dri/i915/i830_context.c b/src/mesa/drivers/dri/i915/i830_context.c index fdce8af31f..9c540cb2bb 100644 --- a/src/mesa/drivers/dri/i915/i830_context.c +++ b/src/mesa/drivers/dri/i915/i830_context.c @@ -73,6 +73,8 @@ i830CreateContext(const __GLcontextModes * mesaVis, return GL_FALSE; } + _math_matrix_ctr(&intel->ViewportMatrix); + /* Initialize swrast, tnl driver tables: */ intelInitSpanFuncs(ctx); intelInitTriFuncs(ctx); diff --git a/src/mesa/drivers/dri/i915/i830_vtbl.c b/src/mesa/drivers/dri/i915/i830_vtbl.c index 8fc8aa5f90..1a94921078 100644 --- a/src/mesa/drivers/dri/i915/i830_vtbl.c +++ b/src/mesa/drivers/dri/i915/i830_vtbl.c @@ -422,10 +422,10 @@ i830_emit_state(struct intel_context *intel) struct i830_hw_state *state = i830->current; int i, count; GLuint dirty; - GET_CURRENT_CONTEXT(ctx); - BATCH_LOCALS; dri_bo *aper_array[3 + I830_TEX_UNITS]; int aper_count; + GET_CURRENT_CONTEXT(ctx); + BATCH_LOCALS; /* We don't hold the lock at this point, so want to make sure that * there won't be a buffer wrap between the state emits and the primitive diff --git a/src/mesa/drivers/dri/i915/i915_context.c b/src/mesa/drivers/dri/i915/i915_context.c index 6e2d41e19a..7549029a1b 100644 --- a/src/mesa/drivers/dri/i915/i915_context.c +++ b/src/mesa/drivers/dri/i915/i915_context.c @@ -119,6 +119,8 @@ i915CreateContext(const __GLcontextModes * mesaVis, return GL_FALSE; } + _math_matrix_ctr(&intel->ViewportMatrix); + /* Initialize swrast, tnl driver tables: */ intelInitSpanFuncs(ctx); intelInitTriFuncs(ctx); diff --git a/src/mesa/drivers/dri/i915/i915_fragprog.c b/src/mesa/drivers/dri/i915/i915_fragprog.c index f091d600c3..52f09a4b1b 100644 --- a/src/mesa/drivers/dri/i915/i915_fragprog.c +++ b/src/mesa/drivers/dri/i915/i915_fragprog.c @@ -180,9 +180,9 @@ get_result_vector(struct i915_fragment_program *p, switch (inst->DstReg.File) { case PROGRAM_OUTPUT: switch (inst->DstReg.Index) { - case FRAG_RESULT_COLR: + case FRAG_RESULT_COLOR: return UREG(REG_TYPE_OC, 0); - case FRAG_RESULT_DEPR: + case FRAG_RESULT_DEPTH: p->depth_written = 1; return UREG(REG_TYPE_OD, 0); default: diff --git a/src/mesa/drivers/dri/i915/intel_tris.c b/src/mesa/drivers/dri/i915/intel_tris.c index e80996580c..1d39278cbf 100644 --- a/src/mesa/drivers/dri/i915/intel_tris.c +++ b/src/mesa/drivers/dri/i915/intel_tris.c @@ -89,8 +89,8 @@ intel_flush_inline_primitive(struct intel_context *intel) static void intel_start_inline(struct intel_context *intel, uint32_t prim) { - BATCH_LOCALS; uint32_t batch_flags = LOOP_CLIPRECTS; + BATCH_LOCALS; intel->vtbl.emit_state(intel); @@ -201,10 +201,10 @@ uint32_t *intel_get_prim_space(struct intel_context *intel, unsigned int count) /** Dispatches the accumulated primitive to the batchbuffer. */ void intel_flush_prim(struct intel_context *intel) { - BATCH_LOCALS; dri_bo *aper_array[2]; dri_bo *vb_bo; unsigned int offset, count; + BATCH_LOCALS; /* Must be called after an intel_start_prim. */ assert(intel->prim.primitive != ~0); @@ -989,7 +989,7 @@ intelChooseRenderState(GLcontext * ctx) intel->draw_tri = intel_fallback_tri; if (flags & DD_TRI_SMOOTH) { - if (intel->strict_conformance) + if (intel->conformance_mode > 0) intel->draw_tri = intel_fallback_tri; } @@ -1001,7 +1001,7 @@ intelChooseRenderState(GLcontext * ctx) } if (flags & DD_POINT_SMOOTH) { - if (intel->strict_conformance) + if (intel->conformance_mode > 0) intel->draw_point = intel_fallback_point; } diff --git a/src/mesa/drivers/dri/i965/brw_cc.c b/src/mesa/drivers/dri/i965/brw_cc.c index 82370162f5..c724218cf5 100644 --- a/src/mesa/drivers/dri/i965/brw_cc.c +++ b/src/mesa/drivers/dri/i965/brw_cc.c @@ -88,7 +88,7 @@ cc_unit_populate_key(struct brw_context *brw, struct brw_cc_unit_key *key) memset(key, 0, sizeof(*key)); - key->stencil = ctx->Stencil.Enabled; + key->stencil = ctx->Stencil._Enabled; key->stencil_two_side = ctx->Stencil._TestTwoSide; if (key->stencil) { diff --git a/src/mesa/drivers/dri/i965/brw_clip_line.c b/src/mesa/drivers/dri/i965/brw_clip_line.c index c45d48dff8..d830e49e50 100644 --- a/src/mesa/drivers/dri/i965/brw_clip_line.c +++ b/src/mesa/drivers/dri/i965/brw_clip_line.c @@ -181,34 +181,54 @@ static void clip_and_emit_line( struct brw_clip_compile *c ) brw_DP4(p, vec4(c->reg.dp1), deref_4f(vtx1, c->offset[VERT_RESULT_HPOS]), c->reg.plane_equation); is_negative = brw_IF(p, BRW_EXECUTE_1); { - brw_ADD(p, c->reg.t, c->reg.dp1, negate(c->reg.dp0)); - brw_math_invert(p, c->reg.t, c->reg.t); - brw_MUL(p, c->reg.t, c->reg.t, c->reg.dp1); - - brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_G, c->reg.t, c->reg.t1 ); - brw_MOV(p, c->reg.t1, c->reg.t); - brw_set_predicate_control(p, BRW_PREDICATE_NONE); + /* + * Both can be negative on GM965/G965 due to RHW workaround + * if so, this object should be rejected. + */ + if (!BRW_IS_G4X(p->brw)) { + brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_LE, c->reg.dp0, brw_imm_f(0.0)); + is_neg2 = brw_IF(p, BRW_EXECUTE_1); + { + brw_clip_kill_thread(c); + } + brw_ENDIF(p, is_neg2); + } + + brw_ADD(p, c->reg.t, c->reg.dp1, negate(c->reg.dp0)); + brw_math_invert(p, c->reg.t, c->reg.t); + brw_MUL(p, c->reg.t, c->reg.t, c->reg.dp1); + + brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_G, c->reg.t, c->reg.t1 ); + brw_MOV(p, c->reg.t1, c->reg.t); + brw_set_predicate_control(p, BRW_PREDICATE_NONE); } is_negative = brw_ELSE(p, is_negative); { - /* Coming back in. We know that both cannot be negative - * because the line would have been culled in that case. - */ + /* Coming back in. We know that both cannot be negative + * because the line would have been culled in that case. + */ + + /* If both are positive, do nothing */ + /* Only on GM965/G965 */ + if (!BRW_IS_G4X(p->brw)) { + brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_L, c->reg.dp0, brw_imm_f(0.0)); + is_neg2 = brw_IF(p, BRW_EXECUTE_1); + } - /* If both are positive, do nothing */ - brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_L, c->reg.dp0, brw_imm_f(0.0)); - is_neg2 = brw_IF(p, BRW_EXECUTE_1); { - brw_ADD(p, c->reg.t, c->reg.dp0, negate(c->reg.dp1)); - brw_math_invert(p, c->reg.t, c->reg.t); - brw_MUL(p, c->reg.t, c->reg.t, c->reg.dp0); - - brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_G, c->reg.t, c->reg.t0 ); - brw_MOV(p, c->reg.t0, c->reg.t); - brw_set_predicate_control(p, BRW_PREDICATE_NONE); - } - brw_ENDIF(p, is_neg2); - } + brw_ADD(p, c->reg.t, c->reg.dp0, negate(c->reg.dp1)); + brw_math_invert(p, c->reg.t, c->reg.t); + brw_MUL(p, c->reg.t, c->reg.t, c->reg.dp0); + + brw_CMP(p, vec1(brw_null_reg()), BRW_CONDITIONAL_G, c->reg.t, c->reg.t0 ); + brw_MOV(p, c->reg.t0, c->reg.t); + brw_set_predicate_control(p, BRW_PREDICATE_NONE); + } + + if (!BRW_IS_G4X(p->brw)) { + brw_ENDIF(p, is_neg2); + } + } brw_ENDIF(p, is_negative); } brw_ENDIF(p, plane_active); diff --git a/src/mesa/drivers/dri/i965/brw_clip_tri.c b/src/mesa/drivers/dri/i965/brw_clip_tri.c index 1dbba37fe7..7fd37bd05f 100644 --- a/src/mesa/drivers/dri/i965/brw_clip_tri.c +++ b/src/mesa/drivers/dri/i965/brw_clip_tri.c @@ -455,6 +455,8 @@ static void brw_clip_test( struct brw_clip_compile *c ) struct brw_indirect vt2 = brw_indirect(2, 0); struct brw_compile *p = &c->func; + struct brw_instruction *is_outside; + struct brw_reg tmp0 = c->reg.loopcount; /* handy temporary */ brw_MOV(p, get_addr_reg(vt0), brw_address(c->reg.vertex[0])); brw_MOV(p, get_addr_reg(vt1), brw_address(c->reg.vertex[1])); @@ -462,53 +464,87 @@ static void brw_clip_test( struct brw_clip_compile *c ) brw_MOV(p, v0, deref_4f(vt0, c->offset[VERT_RESULT_HPOS])); brw_MOV(p, v1, deref_4f(vt1, c->offset[VERT_RESULT_HPOS])); brw_MOV(p, v2, deref_4f(vt2, c->offset[VERT_RESULT_HPOS])); + brw_AND(p, c->reg.planemask, c->reg.planemask, brw_imm_ud(~0x3f)); /* test nearz, xmin, ymin plane */ - brw_CMP(p, t1, BRW_CONDITIONAL_LE, negate(v0), get_element(v0, 3)); + /* clip.xyz < -clip.w */ + brw_CMP(p, t1, BRW_CONDITIONAL_L, v0, negate(get_element(v0, 3))); brw_set_predicate_control(p, BRW_PREDICATE_NONE); - brw_CMP(p, t2, BRW_CONDITIONAL_LE, negate(v1), get_element(v1, 3)); + brw_CMP(p, t2, BRW_CONDITIONAL_L, v1, negate(get_element(v1, 3))); brw_set_predicate_control(p, BRW_PREDICATE_NONE); - brw_CMP(p, t3, BRW_CONDITIONAL_LE, negate(v2), get_element(v2, 3)); + brw_CMP(p, t3, BRW_CONDITIONAL_L, v2, negate(get_element(v2, 3))); brw_set_predicate_control(p, BRW_PREDICATE_NONE); + + /* All vertices are outside of a plane, rejected */ + brw_AND(p, t, t1, t2); + brw_AND(p, t, t, t3); + brw_OR(p, tmp0, get_element(t, 0), get_element(t, 1)); + brw_OR(p, tmp0, tmp0, get_element(t, 2)); + brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ); + brw_AND(p, brw_null_reg(), tmp0, brw_imm_ud(0x1)); + is_outside = brw_IF(p, BRW_EXECUTE_1); + { + brw_clip_kill_thread(c); + } + brw_ENDIF(p, is_outside); + brw_set_predicate_control(p, BRW_PREDICATE_NONE); + + /* some vertices are inside a plane, some are outside,need to clip */ brw_XOR(p, t, t1, t2); brw_XOR(p, t1, t2, t3); brw_OR(p, t, t, t1); - - brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ, - get_element(t, 0), brw_imm_ud(0)); + brw_AND(p, t, t, brw_imm_ud(0x1)); + brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ, + get_element(t, 0), brw_imm_ud(0)); brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud((1<<5))); brw_set_predicate_control(p, BRW_PREDICATE_NONE); - brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ, - get_element(t, 1), brw_imm_ud(0)); + brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ, + get_element(t, 1), brw_imm_ud(0)); brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud((1<<3))); brw_set_predicate_control(p, BRW_PREDICATE_NONE); - brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ, - get_element(t, 2), brw_imm_ud(0)); + brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ, + get_element(t, 2), brw_imm_ud(0)); brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud((1<<1))); brw_set_predicate_control(p, BRW_PREDICATE_NONE); /* test farz, xmax, ymax plane */ - brw_CMP(p, t1, BRW_CONDITIONAL_L, v0, get_element(v0, 3)); + /* clip.xyz > clip.w */ + brw_CMP(p, t1, BRW_CONDITIONAL_G, v0, get_element(v0, 3)); brw_set_predicate_control(p, BRW_PREDICATE_NONE); - brw_CMP(p, t2, BRW_CONDITIONAL_L, v1, get_element(v1, 3)); + brw_CMP(p, t2, BRW_CONDITIONAL_G, v1, get_element(v1, 3)); brw_set_predicate_control(p, BRW_PREDICATE_NONE); - brw_CMP(p, t3, BRW_CONDITIONAL_L, v2, get_element(v2, 3)); + brw_CMP(p, t3, BRW_CONDITIONAL_G, v2, get_element(v2, 3)); brw_set_predicate_control(p, BRW_PREDICATE_NONE); + /* All vertices are outside of a plane, rejected */ + brw_AND(p, t, t1, t2); + brw_AND(p, t, t, t3); + brw_OR(p, tmp0, get_element(t, 0), get_element(t, 1)); + brw_OR(p, tmp0, tmp0, get_element(t, 2)); + brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ); + brw_AND(p, brw_null_reg(), tmp0, brw_imm_ud(0x1)); + is_outside = brw_IF(p, BRW_EXECUTE_1); + { + brw_clip_kill_thread(c); + } + brw_ENDIF(p, is_outside); + brw_set_predicate_control(p, BRW_PREDICATE_NONE); + + /* some vertices are inside a plane, some are outside,need to clip */ brw_XOR(p, t, t1, t2); brw_XOR(p, t1, t2, t3); brw_OR(p, t, t, t1); - - brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ, - get_element(t, 0), brw_imm_ud(0)); + brw_AND(p, t, t, brw_imm_ud(0x1)); + brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ, + get_element(t, 0), brw_imm_ud(0)); brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud((1<<4))); brw_set_predicate_control(p, BRW_PREDICATE_NONE); - brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ, - get_element(t, 1), brw_imm_ud(0)); + brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ, + get_element(t, 1), brw_imm_ud(0)); brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud((1<<2))); brw_set_predicate_control(p, BRW_PREDICATE_NONE); - brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ, - get_element(t, 2), brw_imm_ud(0)); + brw_CMP(p, brw_null_reg(), BRW_CONDITIONAL_NZ, + get_element(t, 2), brw_imm_ud(0)); brw_OR(p, c->reg.planemask, c->reg.planemask, brw_imm_ud((1<<0))); brw_set_predicate_control(p, BRW_PREDICATE_NONE); diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index eaac6224f6..d96ff29310 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -121,6 +121,9 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis, /* if conformance mode is set, swrast can handle any size AA point */ ctx->Const.MaxPointSizeAA = 255.0; + /* We want the GLSL compiler to emit code that uses condition codes */ + ctx->Shader.EmitCondCodes = GL_TRUE; + /* ctx->Const.MaxNativeVertexProgramTemps = 32; */ brw_init_state( brw ); diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index df90c2027f..48ed4325be 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -46,7 +46,7 @@ * * CURBE - constant URB entry. An urb region (entry) used to hold * constant values which the fixed function units can be instructed to - * preload into the GRF when spawining a thread. + * preload into the GRF when spawning a thread. * * VUE - vertex URB entry. An urb entry holding a vertex and usually * a vertex header. The header contains control information and @@ -63,7 +63,7 @@ * special and may be overwritten. * * MRF - message register file. Threads communicate (and terminate) - * by sending messages. Message parameters are placed in contigous + * by sending messages. Message parameters are placed in contiguous * MRF registers. All program output is via these messages. URB * entries are populated by sending a message to the shared URB * function containing the new data, together with a control word, @@ -154,21 +154,22 @@ struct brw_state_flags { GLuint cache; }; + +/** Subclass of Mesa vertex program */ struct brw_vertex_program { struct gl_vertex_program program; GLuint id; }; - +/** Subclass of Mesa fragment program */ struct brw_fragment_program { struct gl_fragment_program program; - GLuint id; + GLuint id; /**< serial no. to identify frag progs, never re-used */ + GLboolean isGLSL; /**< really, any IF/LOOP/CONT/BREAK instructions */ }; - - /* Data about a particular attempt to compile a program. Note that * there can be many of these, each in a different GL state * corresponding to a different brw_wm_prog_key struct, with different @@ -418,8 +419,8 @@ struct brw_context struct brw_tracked_state **atoms; GLuint nr_atoms; - GLuint nr_draw_regions; - struct intel_region *draw_regions[MAX_DRAW_BUFFERS]; + GLuint nr_color_regions; + struct intel_region *color_regions[MAX_DRAW_BUFFERS]; struct intel_region *depth_region; /** @@ -627,8 +628,6 @@ struct brw_context * brw_vtbl.c */ void brwInitVtbl( struct brw_context *brw ); -void brw_do_flush( struct brw_context *brw, - GLuint flags ); /*====================================================================== * brw_context.c @@ -670,7 +669,9 @@ void brwInitFragProgFuncs( struct dd_function_table *functions ); */ void brw_upload_urb_fence(struct brw_context *brw); -void brw_upload_constant_buffer_state(struct brw_context *brw); +/* brw_curbe.c + */ +void brw_upload_cs_urb_state(struct brw_context *brw); /*====================================================================== @@ -683,6 +684,32 @@ brw_context( GLcontext *ctx ) return (struct brw_context *)ctx; } +static INLINE struct brw_vertex_program * +brw_vertex_program(struct gl_vertex_program *p) +{ + return (struct brw_vertex_program *) p; +} + +static INLINE const struct brw_vertex_program * +brw_vertex_program_const(const struct gl_vertex_program *p) +{ + return (const struct brw_vertex_program *) p; +} + +static INLINE struct brw_fragment_program * +brw_fragment_program(struct gl_fragment_program *p) +{ + return (struct brw_fragment_program *) p; +} + +static INLINE const struct brw_fragment_program * +brw_fragment_program_const(const struct gl_fragment_program *p) +{ + return (const struct brw_fragment_program *) p; +} + + + #define DO_SETUP_BITS ((1<<(FRAG_ATTRIB_MAX)) - 1) #endif diff --git a/src/mesa/drivers/dri/i965/brw_curbe.c b/src/mesa/drivers/dri/i965/brw_curbe.c index 4eaaa5f871..545dedd34b 100644 --- a/src/mesa/drivers/dri/i965/brw_curbe.c +++ b/src/mesa/drivers/dri/i965/brw_curbe.c @@ -53,7 +53,7 @@ static void calculate_curbe_offsets( struct brw_context *brw ) GLuint nr_fp_regs = (brw->wm.prog_data->nr_params + 15) / 16; /* BRW_NEW_VERTEX_PROGRAM */ - struct brw_vertex_program *vp = (struct brw_vertex_program *)brw->vertex_program; + const struct brw_vertex_program *vp = brw_vertex_program_const(brw->vertex_program); GLuint nr_vp_regs = (vp->program.Base.Parameters->NumParameters * 4 + 15) / 16; GLuint nr_clip_regs = 0; GLuint total_regs; @@ -138,24 +138,24 @@ const struct brw_tracked_state brw_curbe_offsets = { * fixed-function hardware in a double-buffering scheme to avoid a * pipeline stall each time the contents of the curbe is changed. */ -void brw_upload_constant_buffer_state(struct brw_context *brw) +void brw_upload_cs_urb_state(struct brw_context *brw) { - struct brw_constant_buffer_state cbs; - memset(&cbs, 0, sizeof(cbs)); + struct brw_cs_urb_state cs_urb; + memset(&cs_urb, 0, sizeof(cs_urb)); /* It appears that this is the state packet for the CS unit, ie. the * urb entries detailed here are housed in the CS range from the * URB_FENCE command. */ - cbs.header.opcode = CMD_CONST_BUFFER_STATE; - cbs.header.length = sizeof(cbs)/4 - 2; + cs_urb.header.opcode = CMD_CS_URB_STATE; + cs_urb.header.length = sizeof(cs_urb)/4 - 2; /* BRW_NEW_URB_FENCE */ - cbs.bits0.nr_urb_entries = brw->urb.nr_cs_entries; - cbs.bits0.urb_entry_size = brw->urb.csize - 1; + cs_urb.bits0.nr_urb_entries = brw->urb.nr_cs_entries; + cs_urb.bits0.urb_entry_size = brw->urb.csize - 1; assert(brw->urb.nr_cs_entries); - BRW_CACHED_BATCH_STRUCT(brw, &cbs); + BRW_CACHED_BATCH_STRUCT(brw, &cs_urb); } static GLfloat fixed_plane[6][4] = { @@ -174,10 +174,12 @@ static GLfloat fixed_plane[6][4] = { static void prepare_constant_buffer(struct brw_context *brw) { GLcontext *ctx = &brw->intel.ctx; - struct brw_vertex_program *vp = (struct brw_vertex_program *)brw->vertex_program; - struct brw_fragment_program *fp = (struct brw_fragment_program *)brw->fragment_program; - GLuint sz = brw->curbe.total_size; - GLuint bufsz = sz * 16 * sizeof(GLfloat); + const struct brw_vertex_program *vp = + brw_vertex_program_const(brw->vertex_program); + const struct brw_fragment_program *fp = + brw_fragment_program_const(brw->fragment_program); + const GLuint sz = brw->curbe.total_size; + const GLuint bufsz = sz * 16 * sizeof(GLfloat); GLfloat *buf; GLuint i; @@ -189,27 +191,25 @@ static void prepare_constant_buffer(struct brw_context *brw) brw->curbe.tracked_state.dirty.mesa |= fp->program.Base.Parameters->StateFlags; if (sz == 0) { - if (brw->curbe.last_buf) { free(brw->curbe.last_buf); brw->curbe.last_buf = NULL; brw->curbe.last_bufsz = 0; } - return; } - buf = (GLfloat *)malloc(bufsz); - - memset(buf, 0, bufsz); + buf = (GLfloat *) _mesa_calloc(bufsz); + /* fragment shader constants */ if (brw->curbe.wm_size) { GLuint offset = brw->curbe.wm_start * 16; _mesa_load_state_parameters(ctx, fp->program.Base.Parameters); + /* copy float constants */ for (i = 0; i < brw->wm.prog_data->nr_params; i++) - buf[offset + i] = brw->wm.prog_data->param[i][0]; + buf[offset + i] = *brw->wm.prog_data->param[i]; } @@ -244,7 +244,7 @@ static void prepare_constant_buffer(struct brw_context *brw) } } - + /* vertex shader constants */ if (brw->curbe.vs_size) { GLuint offset = brw->curbe.vs_start * 16; GLuint nr = vp->program.Base.Parameters->NumParameters; @@ -252,10 +252,11 @@ static void prepare_constant_buffer(struct brw_context *brw) _mesa_load_state_parameters(ctx, vp->program.Base.Parameters); for (i = 0; i < nr; i++) { - buf[offset + i * 4 + 0] = vp->program.Base.Parameters->ParameterValues[i][0]; - buf[offset + i * 4 + 1] = vp->program.Base.Parameters->ParameterValues[i][1]; - buf[offset + i * 4 + 2] = vp->program.Base.Parameters->ParameterValues[i][2]; - buf[offset + i * 4 + 3] = vp->program.Base.Parameters->ParameterValues[i][3]; + const GLfloat *value = vp->program.Base.Parameters->ParameterValues[i]; + buf[offset + i * 4 + 0] = value[0]; + buf[offset + i * 4 + 1] = value[1]; + buf[offset + i * 4 + 2] = value[2]; + buf[offset + i * 4 + 3] = value[3]; } } @@ -274,11 +275,14 @@ static void prepare_constant_buffer(struct brw_context *brw) brw->curbe.last_buf && bufsz == brw->curbe.last_bufsz && memcmp(buf, brw->curbe.last_buf, bufsz) == 0) { - free(buf); + /* constants have not changed */ + _mesa_free(buf); } else { + /* constants have changed */ if (brw->curbe.last_buf) - free(brw->curbe.last_buf); + _mesa_free(brw->curbe.last_buf); + brw->curbe.last_buf = buf; brw->curbe.last_bufsz = bufsz; diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h index 39c32255f8..590b064c7e 100644 --- a/src/mesa/drivers/dri/i965/brw_defines.h +++ b/src/mesa/drivers/dri/i965/brw_defines.h @@ -734,7 +734,7 @@ #define CMD_URB_FENCE 0x6000 -#define CMD_CONST_BUFFER_STATE 0x6001 +#define CMD_CS_URB_STATE 0x6001 #define CMD_CONST_BUFFER 0x6002 #define CMD_STATE_BASE_ADDRESS 0x6101 diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c index 99fd587e9f..5342622a73 100644 --- a/src/mesa/drivers/dri/i965/brw_draw.c +++ b/src/mesa/drivers/dri/i965/brw_draw.c @@ -127,6 +127,7 @@ static void brw_emit_prim(struct brw_context *brw, uint32_t hw_prim) { struct brw_3d_primitive prim_packet; + struct intel_context *intel = &brw->intel; if (INTEL_DEBUG & DEBUG_PRIMS) _mesa_printf("PRIM: %s %d %d\n", _mesa_lookup_enum_by_nr(prim->mode), @@ -146,10 +147,27 @@ static void brw_emit_prim(struct brw_context *brw, /* Can't wrap here, since we rely on the validated state. */ brw->no_batch_wrap = GL_TRUE; + + /* If we're set to always flush, do it before and after the primitive emit. + * We want to catch both missed flushes that hurt instruction/state cache + * and missed flushes of the render cache as it heads to other parts of + * the besides the draw code. + */ + if (intel->always_flush_cache) { + BEGIN_BATCH(1, IGNORE_CLIPRECTS); + OUT_BATCH(intel->vtbl.flush_cmd()); + ADVANCE_BATCH(); + } if (prim_packet.verts_per_instance) { intel_batchbuffer_data( brw->intel.batch, &prim_packet, sizeof(prim_packet), LOOP_CLIPRECTS); } + if (intel->always_flush_cache) { + BEGIN_BATCH(1, IGNORE_CLIPRECTS); + OUT_BATCH(intel->vtbl.flush_cmd()); + ADVANCE_BATCH(); + } + brw->no_batch_wrap = GL_FALSE; } @@ -194,9 +212,16 @@ static GLboolean check_fallbacks( struct brw_context *brw, GLcontext *ctx = &brw->intel.ctx; GLuint i; - if (!brw->intel.strict_conformance) + /* If we don't require strict OpenGL conformance, never + * use fallbacks. If we're forcing fallbacks, always + * use fallfacks. + */ + if (brw->intel.conformance_mode == 0) return GL_FALSE; + if (brw->intel.conformance_mode == 2) + return GL_TRUE; + if (ctx->Polygon.SmoothFlag) { for (i = 0; i < nr_prims; i++) if (reduced_prim[prim[i].mode] == GL_TRIANGLES) @@ -220,7 +245,7 @@ static GLboolean check_fallbacks( struct brw_context *brw, /* GS doesn't get enough information to know when to reset * the stipple counter?!? */ - if (prim[i].mode == GL_LINE_LOOP) + if (prim[i].mode == GL_LINE_LOOP || prim[i].mode == GL_LINE_STRIP) return GL_TRUE; if (prim[i].mode == GL_POLYGON && @@ -230,13 +255,46 @@ static GLboolean check_fallbacks( struct brw_context *brw, } } - if (ctx->Point.SmoothFlag) { for (i = 0; i < nr_prims; i++) if (prim[i].mode == GL_POINTS) return GL_TRUE; } + + /* BRW hardware doesn't handle GL_CLAMP texturing correctly; + * brw_wm_sampler_state:translate_wrap_mode() treats GL_CLAMP + * as GL_CLAMP_TO_EDGE instead. If we're using GL_CLAMP, and + * we want strict conformance, force the fallback. + * Right now, we only do this for 2D textures. + */ + { + int u; + for (u = 0; u < ctx->Const.MaxTextureCoordUnits; u++) { + struct gl_texture_unit *texUnit = &ctx->Texture.Unit[u]; + if (texUnit->Enabled) { + if (texUnit->Enabled & TEXTURE_1D_BIT) { + if (texUnit->CurrentTex[TEXTURE_1D_INDEX]->WrapS == GL_CLAMP) { + return GL_TRUE; + } + } + if (texUnit->Enabled & TEXTURE_2D_BIT) { + if (texUnit->CurrentTex[TEXTURE_2D_INDEX]->WrapS == GL_CLAMP || + texUnit->CurrentTex[TEXTURE_2D_INDEX]->WrapT == GL_CLAMP) { + return GL_TRUE; + } + } + if (texUnit->Enabled & TEXTURE_3D_BIT) { + if (texUnit->CurrentTex[TEXTURE_3D_INDEX]->WrapS == GL_CLAMP || + texUnit->CurrentTex[TEXTURE_3D_INDEX]->WrapT == GL_CLAMP || + texUnit->CurrentTex[TEXTURE_3D_INDEX]->WrapR == GL_CLAMP) { + return GL_TRUE; + } + } + } + } + } + /* Nothing stopping us from the fast path now */ return GL_FALSE; } @@ -261,11 +319,18 @@ static GLboolean brw_try_draw_prims( GLcontext *ctx, if (ctx->NewState) _mesa_update_state( ctx ); + /* We have to validate the textures *before* checking for fallbacks; + * otherwise, the software fallback won't be able to rely on the + * texture state, the firstLevel and lastLevel fields won't be + * set in the intel texture object (they'll both be 0), and the + * software fallback will segfault if it attempts to access any + * texture level other than level 0. + */ + brw_validate_textures( brw ); + if (check_fallbacks(brw, prim, nr_prims)) return GL_FALSE; - brw_validate_textures( brw ); - /* Bind all inputs, derive varying and size information: */ brw_merge_inputs( brw, arrays ); @@ -346,6 +411,8 @@ static GLboolean brw_try_draw_prims( GLcontext *ctx, retval = GL_TRUE; } + if (intel->always_flush_batch) + intel_batchbuffer_flush(intel->batch); out: UNLOCK_HARDWARE(intel); diff --git a/src/mesa/drivers/dri/i965/brw_eu.c b/src/mesa/drivers/dri/i965/brw_eu.c index b3ae4eef33..c53efba599 100644 --- a/src/mesa/drivers/dri/i965/brw_eu.c +++ b/src/mesa/drivers/dri/i965/brw_eu.c @@ -129,3 +129,126 @@ const GLuint *brw_get_program( struct brw_compile *p, return (const GLuint *)p->store; } + + +/** + * Subroutine calls require special attention. + * Mesa instructions may be expanded into multiple hardware instructions + * so the prog_instruction::BranchTarget field can't be used as an index + * into the hardware instructions. + * + * The BranchTarget field isn't needed, however. Mesa's GLSL compiler + * emits CAL and BGNSUB instructions with labels that can be used to map + * subroutine calls to actual subroutine code blocks. + * + * The structures and function here implement patching of CAL instructions + * so they jump to the right subroutine code... + */ + + +/** + * For each OPCODE_BGNSUB we create one of these. + */ +struct brw_glsl_label +{ + const char *name; /**< the label string */ + GLuint position; /**< the position of the brw instruction for this label */ + struct brw_glsl_label *next; /**< next in linked list */ +}; + + +/** + * For each OPCODE_CAL we create one of these. + */ +struct brw_glsl_call +{ + GLuint call_inst_pos; /**< location of the CAL instruction */ + const char *sub_name; /**< name of subroutine to call */ + struct brw_glsl_call *next; /**< next in linked list */ +}; + + +/** + * Called for each OPCODE_BGNSUB. + */ +void +brw_save_label(struct brw_compile *c, const char *name, GLuint position) +{ + struct brw_glsl_label *label = CALLOC_STRUCT(brw_glsl_label); + label->name = name; + label->position = position; + label->next = c->first_label; + c->first_label = label; +} + + +/** + * Called for each OPCODE_CAL. + */ +void +brw_save_call(struct brw_compile *c, const char *name, GLuint call_pos) +{ + struct brw_glsl_call *call = CALLOC_STRUCT(brw_glsl_call); + call->call_inst_pos = call_pos; + call->sub_name = name; + call->next = c->first_call; + c->first_call = call; +} + + +/** + * Lookup a label, return label's position/offset. + */ +static GLuint +brw_lookup_label(struct brw_compile *c, const char *name) +{ + const struct brw_glsl_label *label; + for (label = c->first_label; label; label = label->next) { + if (strcmp(name, label->name) == 0) { + return label->position; + } + } + abort(); /* should never happen */ + return ~0; +} + + +/** + * When we're done generating code, this function is called to resolve + * subroutine calls. + */ +void +brw_resolve_cals(struct brw_compile *c) +{ + const struct brw_glsl_call *call; + + for (call = c->first_call; call; call = call->next) { + const GLuint sub_loc = brw_lookup_label(c, call->sub_name); + struct brw_instruction *brw_call_inst = &c->store[call->call_inst_pos]; + struct brw_instruction *brw_sub_inst = &c->store[sub_loc]; + GLint offset = brw_sub_inst - brw_call_inst; + + /* patch brw_inst1 to point to brw_inst2 */ + brw_set_src1(brw_call_inst, brw_imm_d(offset * 16)); + } + + /* free linked list of calls */ + { + struct brw_glsl_call *call, *next; + for (call = c->first_call; call; call = next) { + next = call->next; + _mesa_free(call); + } + c->first_call = NULL; + } + + /* free linked list of labels */ + { + struct brw_glsl_label *label, *next; + for (label = c->first_label; label; label = next) { + next = label->next; + _mesa_free(label); + } + c->first_label = NULL; + } +} diff --git a/src/mesa/drivers/dri/i965/brw_eu.h b/src/mesa/drivers/dri/i965/brw_eu.h index 9e2b39af9b..eb99c21711 100644 --- a/src/mesa/drivers/dri/i965/brw_eu.h +++ b/src/mesa/drivers/dri/i965/brw_eu.h @@ -91,8 +91,13 @@ struct brw_indirect { }; +struct brw_glsl_label; +struct brw_glsl_call; + + + #define BRW_EU_MAX_INSN_STACK 5 -#define BRW_EU_MAX_INSN 1200 +#define BRW_EU_MAX_INSN 4000 struct brw_compile { struct brw_instruction store[BRW_EU_MAX_INSN]; @@ -106,9 +111,22 @@ struct brw_compile { GLuint flag_value; GLboolean single_program_flow; struct brw_context *brw; + + struct brw_glsl_label *first_label; /**< linked list of labels */ + struct brw_glsl_call *first_call; /**< linked list of CALs */ }; +void +brw_save_label(struct brw_compile *c, const char *name, GLuint position); + +void +brw_save_call(struct brw_compile *c, const char *name, GLuint call_pos); + +void +brw_resolve_cals(struct brw_compile *c); + + static INLINE int type_sz( GLuint type ) { @@ -152,6 +170,13 @@ static INLINE struct brw_reg brw_reg( GLuint file, GLuint writemask ) { struct brw_reg reg; + if (type == BRW_GENERAL_REGISTER_FILE) + assert(nr < 128); + else if (type == BRW_MESSAGE_REGISTER_FILE) + assert(nr < 9); + else if (type == BRW_ARCHITECTURE_REGISTER_FILE) + assert(nr <= BRW_ARF_IP); + reg.type = type; reg.file = file; reg.nr = nr; diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c index 4e099b5945..6dce1ca48e 100644 --- a/src/mesa/drivers/dri/i965/brw_eu_emit.c +++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c @@ -55,6 +55,9 @@ static void guess_execution_size( struct brw_instruction *insn, static void brw_set_dest( struct brw_instruction *insn, struct brw_reg dest ) { + if (dest.type != BRW_ARCHITECTURE_REGISTER_FILE) + assert(dest.nr < 128); + insn->bits1.da1.dest_reg_file = dest.file; insn->bits1.da1.dest_reg_type = dest.type; insn->bits1.da1.dest_address_mode = dest.address_mode; @@ -96,10 +99,13 @@ static void brw_set_dest( struct brw_instruction *insn, } static void brw_set_src0( struct brw_instruction *insn, - struct brw_reg reg ) + struct brw_reg reg ) { assert(reg.file != BRW_MESSAGE_REGISTER_FILE); + if (reg.type != BRW_ARCHITECTURE_REGISTER_FILE) + assert(reg.nr < 128); + insn->bits1.da1.src0_reg_file = reg.file; insn->bits1.da1.src0_reg_type = reg.type; insn->bits2.da1.src0_abs = reg.abs; @@ -169,10 +175,12 @@ static void brw_set_src0( struct brw_instruction *insn, void brw_set_src1( struct brw_instruction *insn, - struct brw_reg reg ) + struct brw_reg reg ) { assert(reg.file != BRW_MESSAGE_REGISTER_FILE); + assert(reg.nr < 128); + insn->bits1.da1.src1_reg_file = reg.file; insn->bits1.da1.src1_reg_type = reg.type; insn->bits3.da1.src1_abs = reg.abs; @@ -323,13 +331,13 @@ static void brw_set_dp_read_message( struct brw_instruction *insn, } static void brw_set_sampler_message(struct brw_context *brw, - struct brw_instruction *insn, - GLuint binding_table_index, - GLuint sampler, - GLuint msg_type, - GLuint response_length, - GLuint msg_length, - GLboolean eot) + struct brw_instruction *insn, + GLuint binding_table_index, + GLuint sampler, + GLuint msg_type, + GLuint response_length, + GLuint msg_length, + GLboolean eot) { brw_set_src1(insn, brw_imm_d(0)); @@ -407,7 +415,7 @@ static struct brw_instruction *brw_alu2(struct brw_compile *p, * Convenience routines. */ #define ALU1(OP) \ -struct brw_instruction *brw_##OP(struct brw_compile *p, \ +struct brw_instruction *brw_##OP(struct brw_compile *p, \ struct brw_reg dest, \ struct brw_reg src0) \ { \ @@ -415,7 +423,7 @@ struct brw_instruction *brw_##OP(struct brw_compile *p, \ } #define ALU2(OP) \ -struct brw_instruction *brw_##OP(struct brw_compile *p, \ +struct brw_instruction *brw_##OP(struct brw_compile *p, \ struct brw_reg dest, \ struct brw_reg src0, \ struct brw_reg src1) \ @@ -469,9 +477,9 @@ void brw_NOP(struct brw_compile *p) */ struct brw_instruction *brw_JMPI(struct brw_compile *p, - struct brw_reg dest, - struct brw_reg src0, - struct brw_reg src1) + struct brw_reg dest, + struct brw_reg src0, + struct brw_reg src1) { struct brw_instruction *insn = brw_alu2(p, BRW_OPCODE_JMPI, dest, src0, src1); @@ -674,7 +682,7 @@ struct brw_instruction *brw_DO(struct brw_compile *p, GLuint execute_size) struct brw_instruction *brw_WHILE(struct brw_compile *p, - struct brw_instruction *do_insn) + struct brw_instruction *do_insn) { struct brw_instruction *insn; @@ -931,13 +939,13 @@ void brw_dp_READ_16( struct brw_compile *p, void brw_fb_WRITE(struct brw_compile *p, - struct brw_reg dest, - GLuint msg_reg_nr, - struct brw_reg src0, - GLuint binding_table_index, - GLuint msg_length, - GLuint response_length, - GLboolean eot) + struct brw_reg dest, + GLuint msg_reg_nr, + struct brw_reg src0, + GLuint binding_table_index, + GLuint msg_length, + GLuint response_length, + GLboolean eot) { struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND); @@ -973,8 +981,8 @@ void brw_SAMPLE(struct brw_compile *p, { GLboolean need_stall = 0; - if(writemask == 0) { -/* _mesa_printf("%s: zero writemask??\n", __FUNCTION__); */ + if (writemask == 0) { + /*_mesa_printf("%s: zero writemask??\n", __FUNCTION__); */ return; } @@ -1006,7 +1014,7 @@ void brw_SAMPLE(struct brw_compile *p, if (newmask != writemask) { need_stall = 1; -/* _mesa_printf("need stall %x %x\n", newmask , writemask); */ + /* _mesa_printf("need stall %x %x\n", newmask , writemask); */ } else { struct brw_reg m1 = brw_message_reg(msg_reg_nr); @@ -1047,8 +1055,7 @@ void brw_SAMPLE(struct brw_compile *p, eot); } - if (need_stall) - { + if (need_stall) { struct brw_reg reg = vec8(offset(dest, response_length-1)); /* mov (8) r9.0<1>:f r9.0<8;8,1>:f { Align1 } diff --git a/src/mesa/drivers/dri/i965/brw_fallback.c b/src/mesa/drivers/dri/i965/brw_fallback.c index e63098fdd4..299357409c 100644 --- a/src/mesa/drivers/dri/i965/brw_fallback.c +++ b/src/mesa/drivers/dri/i965/brw_fallback.c @@ -75,8 +75,8 @@ static GLboolean do_check_fallback(struct brw_context *brw) /* _NEW_STENCIL */ - if (ctx->Stencil.Enabled && - !brw->intel.hw_stencil) { + if (ctx->Stencil._Enabled && + (ctx->DrawBuffer->Name == 0 && !brw->intel.hw_stencil)) { DBG("FALLBACK: stencil\n"); return GL_TRUE; } diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c index 9dcdad7b4e..5c94a49f60 100644 --- a/src/mesa/drivers/dri/i965/brw_misc_state.c +++ b/src/mesa/drivers/dri/i965/brw_misc_state.c @@ -178,7 +178,7 @@ static void upload_psp_urb_cbs(struct brw_context *brw ) { upload_pipelined_state_pointers(brw); brw_upload_urb_fence(brw); - brw_upload_constant_buffer_state(brw); + brw_upload_cs_urb_state(brw); } const struct brw_tracked_state brw_psp_urb_cbs = { @@ -290,8 +290,21 @@ static void upload_polygon_stipple(struct brw_context *brw) bps.header.opcode = CMD_POLY_STIPPLE_PATTERN; bps.header.length = sizeof(bps)/4-2; - for (i = 0; i < 32; i++) - bps.stipple[i] = ctx->PolygonStipple[31 - i]; /* invert */ + /* Polygon stipple is provided in OpenGL order, i.e. bottom + * row first. If we're rendering to a window (i.e. the + * default frame buffer object, 0), then we need to invert + * it to match our pixel layout. But if we're rendering + * to a FBO (i.e. any named frame buffer object), we *don't* + * need to invert - we already match the layout. + */ + if (ctx->DrawBuffer->Name == 0) { + for (i = 0; i < 32; i++) + bps.stipple[i] = ctx->PolygonStipple[31 - i]; /* invert */ + } + else { + for (i = 0; i < 32; i++) + bps.stipple[i] = ctx->PolygonStipple[i]; /* don't invert */ + } BRW_CACHED_BATCH_STRUCT(brw, &bps); } @@ -319,8 +332,22 @@ static void upload_polygon_stipple_offset(struct brw_context *brw) bpso.header.opcode = CMD_POLY_STIPPLE_OFFSET; bpso.header.length = sizeof(bpso)/4-2; - bpso.bits0.x_offset = (32 - (dPriv->x & 31)) & 31; - bpso.bits0.y_offset = (32 - ((dPriv->y + dPriv->h) & 31)) & 31; + /* If we're drawing to a system window (ctx->DrawBuffer->Name == 0), + * we have to invert the Y axis in order to match the OpenGL + * pixel coordinate system, and our offset must be matched + * to the window position. If we're drawing to a FBO + * (ctx->DrawBuffer->Name != 0), then our native pixel coordinate + * system works just fine, and there's no window system to + * worry about. + */ + if (brw->intel.ctx.DrawBuffer->Name == 0) { + bpso.bits0.x_offset = (32 - (dPriv->x & 31)) & 31; + bpso.bits0.y_offset = (32 - ((dPriv->y + dPriv->h) & 31)) & 31; + } + else { + bpso.bits0.y_offset = 0; + bpso.bits0.x_offset = 0; + } BRW_CACHED_BATCH_STRUCT(brw, &bpso); } diff --git a/src/mesa/drivers/dri/i965/brw_program.c b/src/mesa/drivers/dri/i965/brw_program.c index 0c86911044..d90bd82038 100644 --- a/src/mesa/drivers/dri/i965/brw_program.c +++ b/src/mesa/drivers/dri/i965/brw_program.c @@ -38,6 +38,7 @@ #include "brw_context.h" #include "brw_util.h" +#include "brw_wm.h" static void brwBindProgram( GLcontext *ctx, GLenum target, @@ -94,7 +95,6 @@ static struct gl_program *brwNewProgram( GLcontext *ctx, static void brwDeleteProgram( GLcontext *ctx, struct gl_program *prog ) { - _mesa_delete_program( ctx, prog ); } @@ -110,30 +110,35 @@ static void brwProgramStringNotify( GLcontext *ctx, GLenum target, struct gl_program *prog ) { + struct brw_context *brw = brw_context(ctx); if (target == GL_FRAGMENT_PROGRAM_ARB) { struct gl_fragment_program *fprog = (struct gl_fragment_program *) prog; - struct brw_context *brw = brw_context(ctx); - struct brw_fragment_program *p = (struct brw_fragment_program *)prog; - struct brw_fragment_program *fp = (struct brw_fragment_program *)brw->fragment_program; + struct brw_fragment_program *newFP = brw_fragment_program(fprog); + const struct brw_fragment_program *curFP = + brw_fragment_program_const(brw->fragment_program); + if (fprog->FogOption) { _mesa_append_fog_code(ctx, fprog); fprog->FogOption = GL_NONE; } - if (p == fp) + if (newFP == curFP) brw->state.dirty.brw |= BRW_NEW_FRAGMENT_PROGRAM; - p->id = brw->program_id++; + newFP->id = brw->program_id++; + newFP->isGLSL = brw_wm_is_glsl(fprog); } else if (target == GL_VERTEX_PROGRAM_ARB) { - struct brw_context *brw = brw_context(ctx); - struct brw_vertex_program *p = (struct brw_vertex_program *)prog; - struct brw_vertex_program *vp = (struct brw_vertex_program *)brw->vertex_program; - if (p == vp) + struct gl_vertex_program *vprog = (struct gl_vertex_program *) prog; + struct brw_vertex_program *newVP = brw_vertex_program(vprog); + const struct brw_vertex_program *curVP = + brw_vertex_program_const(brw->vertex_program); + + if (newVP == curVP) brw->state.dirty.brw |= BRW_NEW_VERTEX_PROGRAM; - if (p->program.IsPositionInvariant) { - _mesa_insert_mvp_code(ctx, &p->program); + if (newVP->program.IsPositionInvariant) { + _mesa_insert_mvp_code(ctx, &newVP->program); } - p->id = brw->program_id++; + newVP->id = brw->program_id++; /* Also tell tnl about it: */ diff --git a/src/mesa/drivers/dri/i965/brw_sf.c b/src/mesa/drivers/dri/i965/brw_sf.c index 8c1711538a..c3c85978f4 100644 --- a/src/mesa/drivers/dri/i965/brw_sf.c +++ b/src/mesa/drivers/dri/i965/brw_sf.c @@ -167,8 +167,14 @@ static void upload_sf_prog(struct brw_context *brw) key.do_twoside_color = (ctx->Light.Enabled && ctx->Light.Model.TwoSide); /* _NEW_POLYGON */ - if (key.do_twoside_color) - key.frontface_ccw = (ctx->Polygon.FrontFace == GL_CCW); + if (key.do_twoside_color) { + /* If we're rendering to a FBO, we have to invert the polygon + * face orientation, just as we invert the viewport in + * sf_unit_create_from_key(). ctx->DrawBuffer->Name will be + * nonzero if we're rendering to such an FBO. + */ + key.frontface_ccw = (ctx->Polygon.FrontFace == GL_CCW) ^ (ctx->DrawBuffer->Name != 0); + } dri_bo_unreference(brw->sf.prog_bo); brw->sf.prog_bo = brw_search_cache(&brw->cache, BRW_SF_PROG, diff --git a/src/mesa/drivers/dri/i965/brw_sf_state.c b/src/mesa/drivers/dri/i965/brw_sf_state.c index e96d5354b3..93a9686f71 100644 --- a/src/mesa/drivers/dri/i965/brw_sf_state.c +++ b/src/mesa/drivers/dri/i965/brw_sf_state.c @@ -44,6 +44,7 @@ static void upload_sf_vp(struct brw_context *brw) struct brw_sf_viewport sfv; GLfloat y_scale, y_bias; const GLboolean render_to_fbo = (ctx->DrawBuffer->Name != 0); + const GLfloat *v = ctx->Viewport._WindowMap.m; memset(&sfv, 0, sizeof(sfv)); @@ -58,8 +59,6 @@ static void upload_sf_vp(struct brw_context *brw) /* _NEW_VIEWPORT */ - const GLfloat *v = ctx->Viewport._WindowMap.m; - sfv.viewport.m00 = v[MAT_SX]; sfv.viewport.m11 = v[MAT_SY] * y_scale; sfv.viewport.m22 = v[MAT_SZ] * depth_scale; diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index df839c5b30..81b0a45998 100644 --- a/src/mesa/drivers/dri/i965/brw_state.h +++ b/src/mesa/drivers/dri/i965/brw_state.h @@ -52,7 +52,6 @@ const struct brw_tracked_state brw_cc_vp; const struct brw_tracked_state brw_check_fallback; const struct brw_tracked_state brw_clip_prog; const struct brw_tracked_state brw_clip_unit; -const struct brw_tracked_state brw_constant_buffer_state; const struct brw_tracked_state brw_constant_buffer; const struct brw_tracked_state brw_curbe_offsets; const struct brw_tracked_state brw_invarient_state; diff --git a/src/mesa/drivers/dri/i965/brw_state_batch.c b/src/mesa/drivers/dri/i965/brw_state_batch.c index dc87859f3f..811940edc0 100644 --- a/src/mesa/drivers/dri/i965/brw_state_batch.c +++ b/src/mesa/drivers/dri/i965/brw_state_batch.c @@ -97,8 +97,6 @@ void brw_clear_batch_cache_flush( struct brw_context *brw ) { clear_batch_cache(brw); -/* brw_do_flush(brw, BRW_FLUSH_STATE_CACHE|BRW_FLUSH_READ_CACHE); */ - brw->state.dirty.mesa |= ~0; brw->state.dirty.brw |= ~0; brw->state.dirty.cache |= ~0; diff --git a/src/mesa/drivers/dri/i965/brw_state_dump.c b/src/mesa/drivers/dri/i965/brw_state_dump.c index b28c57c2bc..5d332d010c 100644 --- a/src/mesa/drivers/dri/i965/brw_state_dump.c +++ b/src/mesa/drivers/dri/i965/brw_state_dump.c @@ -162,6 +162,14 @@ static void brw_debug_prog(const char *name, dri_bo *prog) fprintf(stderr, "%8s: 0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n", name, (unsigned int)prog->offset + i * 4 * 4, data[i * 4], data[i * 4 + 1], data[i * 4 + 2], data[i * 4 + 3]); + /* Stop at the end of the program. It'd be nice to keep track of the actual + * intended program size instead of guessing like this. + */ + if (data[i * 4 + 0] == 0 && + data[i * 4 + 1] == 0 && + data[i * 4 + 2] == 0 && + data[i * 4 + 3] == 0) + break; } dri_bo_unmap(prog); diff --git a/src/mesa/drivers/dri/i965/brw_structs.h b/src/mesa/drivers/dri/i965/brw_structs.h index d97ff27f0a..89e2981203 100644 --- a/src/mesa/drivers/dri/i965/brw_structs.h +++ b/src/mesa/drivers/dri/i965/brw_structs.h @@ -439,7 +439,7 @@ struct brw_urb_fence } bits1; }; -struct brw_constant_buffer_state /* previously brw_command_streamer */ +struct brw_cs_urb_state { struct header header; diff --git a/src/mesa/drivers/dri/i965/brw_vs_constval.c b/src/mesa/drivers/dri/i965/brw_vs_constval.c index 9977677fd7..d29eb17f8c 100644 --- a/src/mesa/drivers/dri/i965/brw_vs_constval.c +++ b/src/mesa/drivers/dri/i965/brw_vs_constval.c @@ -170,8 +170,8 @@ static void calc_wm_input_sizes( struct brw_context *brw ) { GLcontext *ctx = &brw->intel.ctx; /* BRW_NEW_VERTEX_PROGRAM */ - struct brw_vertex_program *vp = - (struct brw_vertex_program *)brw->vertex_program; + const struct brw_vertex_program *vp = + brw_vertex_program_const(brw->vertex_program); /* BRW_NEW_INPUT_DIMENSIONS */ struct tracker t; GLuint insn; diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c index 24b7dc30fe..3807dff991 100644 --- a/src/mesa/drivers/dri/i965/brw_vs_emit.c +++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c @@ -156,6 +156,12 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c ) c->prog_data.urb_entry_size = (c->nr_outputs+2+3)/4; c->prog_data.total_grf = reg; + + if (INTEL_DEBUG & DEBUG_VS) { + _mesa_printf("%s NumAddrRegs %d\n", __FUNCTION__, c->vp->program.Base.NumAddressRegs); + _mesa_printf("%s NumTemps %d\n", __FUNCTION__, c->vp->program.Base.NumTemporaries); + _mesa_printf("%s reg = %d\n", __FUNCTION__, reg); + } } @@ -658,7 +664,7 @@ static void emit_nrm( struct brw_vs_compile *c, /* TODO: relative addressing! */ static struct brw_reg get_reg( struct brw_vs_compile *c, - GLuint file, + gl_register_file file, GLuint index ) { @@ -954,36 +960,27 @@ static void emit_vertex_write( struct brw_vs_compile *c) } +/** + * Called after code generation to resolve subroutine calls and the + * END instruction. + * \param end_inst points to brw code for END instruction + * \param last_inst points to last instruction emitted before vertex write + */ static void -post_vs_emit( struct brw_vs_compile *c, struct brw_instruction *end_inst ) +post_vs_emit( struct brw_vs_compile *c, + struct brw_instruction *end_inst, + struct brw_instruction *last_inst ) { - GLuint nr_insns = c->vp->program.Base.NumInstructions; - GLuint insn, target_insn; - struct prog_instruction *inst1, *inst2; - struct brw_instruction *brw_inst1, *brw_inst2; - int offset; - for (insn = 0; insn < nr_insns; insn++) { - inst1 = &c->vp->program.Base.Instructions[insn]; - brw_inst1 = inst1->Data; - switch (inst1->Opcode) { - case OPCODE_CAL: - case OPCODE_BRA: - target_insn = inst1->BranchTarget; - inst2 = &c->vp->program.Base.Instructions[target_insn]; - brw_inst2 = inst2->Data; - offset = brw_inst2 - brw_inst1; - brw_set_src1(brw_inst1, brw_imm_d(offset*16)); - break; - case OPCODE_END: - offset = end_inst - brw_inst1; - brw_set_src1(brw_inst1, brw_imm_d(offset*16)); - break; - default: - break; - } - } + GLint offset; + + brw_resolve_cals(&c->func); + + /* patch up the END code to jump past subroutines, etc */ + offset = last_inst - end_inst; + brw_set_src1(end_inst, brw_imm_d(offset * 16)); } + /* Emit the fragment program instructions here. */ void brw_vs_emit(struct brw_vs_compile *c ) @@ -992,7 +989,8 @@ void brw_vs_emit(struct brw_vs_compile *c ) struct brw_compile *p = &c->func; GLuint nr_insns = c->vp->program.Base.NumInstructions; GLuint insn, if_insn = 0; - struct brw_instruction *end_inst; + GLuint end_offset = 0; + struct brw_instruction *end_inst, *last_inst; struct brw_instruction *if_inst[MAX_IFSN]; struct brw_indirect stack_index = brw_indirect(0, 0); @@ -1035,7 +1033,6 @@ void brw_vs_emit(struct brw_vs_compile *c ) /* Get argument regs. SWZ is special and does this itself. */ - inst->Data = &p->store[p->nr_insn]; if (inst->Opcode != OPCODE_SWZ) for (i = 0; i < 3; i++) { struct prog_src_register *src = &inst->SrcReg[i]; @@ -1203,7 +1200,7 @@ void brw_vs_emit(struct brw_vs_compile *c ) brw_set_access_mode(p, BRW_ALIGN_16); brw_ADD(p, get_addr_reg(stack_index), get_addr_reg(stack_index), brw_imm_d(4)); - inst->Data = &p->store[p->nr_insn]; + brw_save_call(p, inst->Comment, p->nr_insn); brw_ADD(p, brw_ip_reg(), brw_ip_reg(), brw_imm_d(1*16)); break; case OPCODE_RET: @@ -1212,14 +1209,23 @@ void brw_vs_emit(struct brw_vs_compile *c ) brw_set_access_mode(p, BRW_ALIGN_1); brw_MOV(p, brw_ip_reg(), deref_1d(stack_index, 0)); brw_set_access_mode(p, BRW_ALIGN_16); + break; case OPCODE_END: + end_offset = p->nr_insn; + /* this instruction will get patched later to jump past subroutine + * code, etc. + */ brw_ADD(p, brw_ip_reg(), brw_ip_reg(), brw_imm_d(1*16)); break; case OPCODE_PRINT: + /* no-op */ + break; case OPCODE_BGNSUB: + brw_save_label(p, inst->Comment, p->nr_insn); + break; case OPCODE_ENDSUB: - /* no-op instructions */ - break; + /* no-op */ + break; default: _mesa_problem(NULL, "Unsupported opcode %i (%s) in vertex shader", inst->Opcode, inst->Opcode < MAX_OPCODE ? @@ -1257,9 +1263,11 @@ void brw_vs_emit(struct brw_vs_compile *c ) release_tmps(c); } - end_inst = &p->store[p->nr_insn]; + end_inst = &p->store[end_offset]; + last_inst = &p->store[p->nr_insn]; + + /* The END instruction will be patched to jump to this code */ emit_vertex_write(c); - post_vs_emit(c, end_inst); - for (insn = 0; insn < nr_insns; insn++) - c->vp->program.Base.Instructions[insn].Data = NULL; + + post_vs_emit(c, end_inst, last_inst); } diff --git a/src/mesa/drivers/dri/i965/brw_vtbl.c b/src/mesa/drivers/dri/i965/brw_vtbl.c index b501a59ccd..960bbb311e 100644 --- a/src/mesa/drivers/dri/i965/brw_vtbl.c +++ b/src/mesa/drivers/dri/i965/brw_vtbl.c @@ -67,11 +67,13 @@ static void brw_destroy_context( struct intel_context *intel ) brw_destroy_state(brw); brw_draw_destroy( brw ); + _mesa_free(brw->wm.compile_data); + brw_FrameBufferTexDestroy( brw ); - for (i = 0; i < brw->state.nr_draw_regions; i++) - intel_region_release(&brw->state.draw_regions[i]); - brw->state.nr_draw_regions = 0; + for (i = 0; i < brw->state.nr_color_regions; i++) + intel_region_release(&brw->state.color_regions[i]); + brw->state.nr_color_regions = 0; intel_region_release(&brw->state.depth_region); dri_bo_release(&brw->curbe.curbe_bo); @@ -90,6 +92,7 @@ static void brw_destroy_context( struct intel_context *intel ) dri_bo_release(&brw->wm.bind_bo); for (i = 0; i < BRW_WM_MAX_SURF; i++) dri_bo_release(&brw->wm.surf_bo[i]); + dri_bo_release(&brw->wm.sampler_bo); dri_bo_release(&brw->wm.prog_bo); dri_bo_release(&brw->wm.state_bo); dri_bo_release(&brw->cc.prog_bo); @@ -102,25 +105,25 @@ static void brw_destroy_context( struct intel_context *intel ) * called from intelDrawBuffer() */ static void brw_set_draw_region( struct intel_context *intel, - struct intel_region *draw_regions[], + struct intel_region *color_regions[], struct intel_region *depth_region, - GLuint num_regions) + GLuint num_color_regions) { struct brw_context *brw = brw_context(&intel->ctx); - int i; + GLuint i; /* release old color/depth regions */ if (brw->state.depth_region != depth_region) brw->state.dirty.brw |= BRW_NEW_DEPTH_BUFFER; - for (i = 0; i < brw->state.nr_draw_regions; i++) - intel_region_release(&brw->state.draw_regions[i]); + for (i = 0; i < brw->state.nr_color_regions; i++) + intel_region_release(&brw->state.color_regions[i]); intel_region_release(&brw->state.depth_region); /* reference new color/depth regions */ - for (i = 0; i < num_regions; i++) - intel_region_reference(&brw->state.draw_regions[i], draw_regions[i]); + for (i = 0; i < num_color_regions; i++) + intel_region_reference(&brw->state.color_regions[i], color_regions[i]); intel_region_reference(&brw->state.depth_region, depth_region); - brw->state.nr_draw_regions = num_regions; + brw->state.nr_color_regions = num_color_regions; } @@ -181,23 +184,6 @@ static void brw_note_unlock( struct intel_context *intel ) } -void brw_do_flush( struct brw_context *brw, GLuint flags ) -{ - struct brw_mi_flush flush; - memset(&flush, 0, sizeof(flush)); - flush.opcode = CMD_MI_FLUSH; - flush.flags = flags; - BRW_BATCH_STRUCT(brw, &flush); -} - - -static void brw_emit_flush( struct intel_context *intel, GLuint unused ) -{ - brw_do_flush(brw_context(&intel->ctx), - BRW_FLUSH_STATE_CACHE|BRW_FLUSH_READ_CACHE); -} - - /* called from intelWaitForIdle() and intelFlush() * * For now, just flush everything. Could be smarter later. @@ -234,6 +220,5 @@ void brwInitVtbl( struct brw_context *brw ) brw->intel.vtbl.destroy = brw_destroy_context; brw->intel.vtbl.set_draw_region = brw_set_draw_region; brw->intel.vtbl.flush_cmd = brw_flush_cmd; - brw->intel.vtbl.emit_flush = brw_emit_flush; brw->intel.vtbl.debug_batch = brw_debug_batch; } diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c index ea708a0681..1645ca0b70 100644 --- a/src/mesa/drivers/dri/i965/brw_wm.c +++ b/src/mesa/drivers/dri/i965/brw_wm.c @@ -80,6 +80,53 @@ GLuint brw_wm_is_scalar_result( GLuint opcode ) } +/** + * Do GPU code generation for non-GLSL shader. non-GLSL shaders have + * no flow control instructions so we can more readily do SSA-style + * optimizations. + */ +static void +brw_wm_non_glsl_emit(struct brw_context *brw, struct brw_wm_compile *c) +{ + /* Augment fragment program. Add instructions for pre- and + * post-fragment-program tasks such as interpolation and fogging. + */ + brw_wm_pass_fp(c); + + /* Translate to intermediate representation. Build register usage + * chains. + */ + brw_wm_pass0(c); + + /* Dead code removal. + */ + brw_wm_pass1(c); + + /* Register allocation. + */ + c->grf_limit = BRW_WM_MAX_GRF / 2; + + brw_wm_pass2(c); + + c->prog_data.total_grf = c->max_wm_grf; + if (c->last_scratch) { + c->prog_data.total_scratch = c->last_scratch + 0x40; + } + else { + c->prog_data.total_scratch = 0; + } + + /* Emit GEN4 code. + */ + brw_wm_emit(c); +} + + +/** + * All Mesa program -> GPU code generation goes through this function. + * Depending on the instructions used (i.e. flow control instructions) + * we'll use one of two code generators. + */ static void do_wm_prog( struct brw_context *brw, struct brw_fragment_program *fp, struct brw_wm_prog_key *key) @@ -90,52 +137,32 @@ static void do_wm_prog( struct brw_context *brw, c = brw->wm.compile_data; if (c == NULL) { - brw->wm.compile_data = calloc(1, sizeof(*brw->wm.compile_data)); - c = brw->wm.compile_data; + brw->wm.compile_data = calloc(1, sizeof(*brw->wm.compile_data)); + c = brw->wm.compile_data; } else { - memset(c, 0, sizeof(*brw->wm.compile_data)); + memset(c, 0, sizeof(*brw->wm.compile_data)); } memcpy(&c->key, key, sizeof(*key)); c->fp = fp; c->env_param = brw->intel.ctx.FragmentProgram.Parameters; - brw_init_compile(brw, &c->func); - if (brw_wm_is_glsl(&c->fp->program)) { - brw_wm_glsl_emit(brw, c); - } else { - /* Augment fragment program. Add instructions for pre- and - * post-fragment-program tasks such as interpolation and fogging. - */ - brw_wm_pass_fp(c); - - /* Translate to intermediate representation. Build register usage - * chains. - */ - brw_wm_pass0(c); - - /* Dead code removal. - */ - brw_wm_pass1(c); - - /* Register allocation. - */ - c->grf_limit = BRW_WM_MAX_GRF/2; - - brw_wm_pass2(c); - - c->prog_data.total_grf = c->max_wm_grf; - if (c->last_scratch) { - c->prog_data.total_scratch = - c->last_scratch + 0x40; - } else { - c->prog_data.total_scratch = 0; - } - - /* Emit GEN4 code. - */ - brw_wm_emit(c); + brw_init_compile(brw, &c->func); + + /* temporary sanity check assertion */ + ASSERT(fp->isGLSL == brw_wm_is_glsl(&c->fp->program)); + + /* + * Shader which use GLSL features such as flow control are handled + * differently from "simple" shaders. + */ + if (fp->isGLSL) { + brw_wm_glsl_emit(brw, c); } + else { + brw_wm_non_glsl_emit(brw, c); + } + if (INTEL_DEBUG & DEBUG_WM) fprintf(stderr, "\n"); @@ -159,7 +186,7 @@ static void brw_wm_populate_key( struct brw_context *brw, { GLcontext *ctx = &brw->intel.ctx; /* BRW_NEW_FRAGMENT_PROGRAM */ - struct brw_fragment_program *fp = + const struct brw_fragment_program *fp = (struct brw_fragment_program *)brw->fragment_program; GLuint lookup = 0; GLuint line_aa; @@ -174,7 +201,7 @@ static void brw_wm_populate_key( struct brw_context *brw, ctx->Color.AlphaEnabled) lookup |= IZ_PS_KILL_ALPHATEST_BIT; - if (fp->program.Base.OutputsWritten & (1<<FRAG_RESULT_DEPR)) + if (fp->program.Base.OutputsWritten & (1<<FRAG_RESULT_DEPTH)) lookup |= IZ_PS_COMPUTES_DEPTH_BIT; /* _NEW_DEPTH */ @@ -186,7 +213,7 @@ static void brw_wm_populate_key( struct brw_context *brw, lookup |= IZ_DEPTH_WRITE_ENABLE_BIT; /* _NEW_STENCIL */ - if (ctx->Stencil.Enabled) { + if (ctx->Stencil._Enabled) { lookup |= IZ_STENCIL_TEST_ENABLE_BIT; if (ctx->Stencil.WriteMask[0] || @@ -278,10 +305,8 @@ static void brw_wm_populate_key( struct brw_context *brw, key->drawable_height = brw->intel.driDrawable->h; } - /* Extra info: - */ + /* The unique fragment program ID */ key->program_string_id = fp->id; - } @@ -305,8 +330,6 @@ static void brw_prepare_wm_prog(struct brw_context *brw) } -/* See brw_wm.c: - */ const struct brw_tracked_state brw_wm_prog = { .dirty = { .mesa = (_NEW_COLOR | diff --git a/src/mesa/drivers/dri/i965/brw_wm.h b/src/mesa/drivers/dri/i965/brw_wm.h index 0f46a25b1a..7f0e5702f2 100644 --- a/src/mesa/drivers/dri/i965/brw_wm.h +++ b/src/mesa/drivers/dri/i965/brw_wm.h @@ -143,13 +143,12 @@ struct brw_wm_instruction { GLuint writemask:4; GLuint tex_unit:4; /* texture unit for TEX, TXD, TXP instructions */ GLuint tex_idx:3; /* TEXTURE_1D,2D,3D,CUBE,RECT_INDEX source target */ + GLuint tex_shadow:1; /* do shadow comparison? */ GLuint eot:1; /* End of thread indicator for FB_WRITE*/ GLuint target:10; /* target binding table index for FB_WRITE*/ }; -#define PROGRAM_INTERNAL_PARAM - #define BRW_WM_MAX_INSN (MAX_NV_FRAGMENT_PROGRAM_INSTRUCTIONS*3 + FRAG_ATTRIB_MAX + 3) #define BRW_WM_MAX_GRF 128 /* hardware limit */ #define BRW_WM_MAX_VREG (BRW_WM_MAX_INSN * 4) @@ -240,13 +239,15 @@ struct brw_wm_compile { GLuint max_wm_grf; GLuint last_scratch; + /** Mapping from Mesa registers to hardware registers */ struct { GLboolean inited; struct brw_reg reg; } wm_regs[PROGRAM_PAYLOAD+1][256][4]; + struct brw_reg stack; struct brw_reg emit_mask_reg; - GLuint reg_index; + GLuint reg_index; /**< Index of next free GRF register */ GLuint tmp_regs[BRW_WM_MAX_GRF]; GLuint tmp_index; GLuint tmp_max; @@ -281,4 +282,6 @@ void brw_wm_lookup_iz( GLuint line_aa, GLboolean brw_wm_is_glsl(const struct gl_fragment_program *fp); void brw_wm_glsl_emit(struct brw_context *brw, struct brw_wm_compile *c); + + #endif diff --git a/src/mesa/drivers/dri/i965/brw_wm_emit.c b/src/mesa/drivers/dri/i965/brw_wm_emit.c index b5050a3e40..f2dca9caa6 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_emit.c +++ b/src/mesa/drivers/dri/i965/brw_wm_emit.c @@ -671,7 +671,6 @@ static void emit_tex( struct brw_wm_compile *c, { struct brw_compile *p = &c->func; GLuint msgLength, responseLength; - GLboolean shadow = (c->key.shadowtex_mask & (1<<inst->tex_unit)) ? 1 : 0; GLuint i, nr; GLuint emit; @@ -693,7 +692,7 @@ static void emit_tex( struct brw_wm_compile *c, break; } - if (shadow) { + if (inst->tex_shadow) { nr = 4; emit |= WRITEMASK_W; } @@ -718,7 +717,7 @@ static void emit_tex( struct brw_wm_compile *c, inst->tex_unit + MAX_DRAW_BUFFERS, /* surface */ inst->tex_unit, /* sampler */ inst->writemask, - (shadow ? + (inst->tex_shadow ? BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_COMPARE : BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE), responseLength, @@ -886,6 +885,9 @@ static void emit_aa( struct brw_wm_compile *c, /* Post-fragment-program processing. Send the results to the * framebuffer. + * \param arg0 the fragment color + * \param arg1 the pass-through depth value + * \param arg2 the shader-computed depth value */ static void emit_fb_write( struct brw_wm_compile *c, struct brw_reg *arg0, diff --git a/src/mesa/drivers/dri/i965/brw_wm_fp.c b/src/mesa/drivers/dri/i965/brw_wm_fp.c index ea3f3fc678..533be3858e 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_fp.c +++ b/src/mesa/drivers/dri/i965/brw_wm_fp.c @@ -129,7 +129,7 @@ static struct prog_dst_register dst_reg(GLuint file, GLuint idx) reg.Index = idx; reg.WriteMask = WRITEMASK_XYZW; reg.RelAddr = 0; - reg.CondMask = 0; + reg.CondMask = COND_TR; reg.CondSwizzle = 0; reg.CondSrc = 0; reg.pad = 0; @@ -183,16 +183,16 @@ static struct prog_instruction *emit_insn(struct brw_wm_compile *c, { struct prog_instruction *inst = get_fp_inst(c); *inst = *inst0; - inst->Data = (void *)inst0; return inst; } -static struct prog_instruction * emit_op(struct brw_wm_compile *c, +static struct prog_instruction * emit_tex_op(struct brw_wm_compile *c, GLuint op, struct prog_dst_register dest, GLuint saturate, GLuint tex_src_unit, GLuint tex_src_target, + GLuint tex_shadow, struct prog_src_register src0, struct prog_src_register src1, struct prog_src_register src2 ) @@ -206,6 +206,7 @@ static struct prog_instruction * emit_op(struct brw_wm_compile *c, inst->SaturateMode = saturate; inst->TexSrcUnit = tex_src_unit; inst->TexSrcTarget = tex_src_target; + inst->TexShadow = tex_shadow; inst->SrcReg[0] = src0; inst->SrcReg[1] = src1; inst->SrcReg[2] = src2; @@ -213,6 +214,20 @@ static struct prog_instruction * emit_op(struct brw_wm_compile *c, } +static struct prog_instruction * emit_op(struct brw_wm_compile *c, + GLuint op, + struct prog_dst_register dest, + GLuint saturate, + struct prog_src_register src0, + struct prog_src_register src1, + struct prog_src_register src2 ) +{ + return emit_tex_op(c, op, dest, saturate, + 0, 0, 0, /* tex unit, target, shadow */ + src0, src1, src2); +} + + /*********************************************************************** @@ -234,7 +249,7 @@ static struct prog_src_register get_pixel_xy( struct brw_wm_compile *c ) emit_op(c, WM_PIXELXY, dst_mask(pixel_xy, WRITEMASK_XY), - 0, 0, 0, + 0, payload_r0_depth, src_undef(), src_undef()); @@ -257,7 +272,7 @@ static struct prog_src_register get_delta_xy( struct brw_wm_compile *c ) emit_op(c, WM_DELTAXY, dst_mask(delta_xy, WRITEMASK_XY), - 0, 0, 0, + 0, pixel_xy, payload_r0_depth, src_undef()); @@ -274,14 +289,13 @@ static struct prog_src_register get_pixel_w( struct brw_wm_compile *c ) struct prog_dst_register pixel_w = get_temp(c); struct prog_src_register deltas = get_delta_xy(c); struct prog_src_register interp_wpos = src_reg(PROGRAM_PAYLOAD, FRAG_ATTRIB_WPOS); - - + /* deltas.xyw = DELTAS2 deltas.xy, payload.interp_wpos.x */ emit_op(c, WM_PIXELW, dst_mask(pixel_w, WRITEMASK_W), - 0, 0, 0, + 0, interp_wpos, deltas, src_undef()); @@ -316,7 +330,7 @@ static void emit_interp( struct brw_wm_compile *c, emit_op(c, WM_WPOSXY, dst_mask(dst, WRITEMASK_XY), - 0, 0, 0, + 0, get_pixel_xy(c), src_undef(), src_undef()); @@ -328,7 +342,7 @@ static void emit_interp( struct brw_wm_compile *c, emit_op(c, WM_LINTERP, dst, - 0, 0, 0, + 0, interp, deltas, arg2); @@ -339,7 +353,7 @@ static void emit_interp( struct brw_wm_compile *c, emit_op(c, WM_CINTERP, dst, - 0, 0, 0, + 0, interp, src_undef(), src_undef()); @@ -348,7 +362,7 @@ static void emit_interp( struct brw_wm_compile *c, emit_op(c, WM_LINTERP, dst, - 0, 0, 0, + 0, interp, deltas, src_undef()); @@ -358,7 +372,7 @@ static void emit_interp( struct brw_wm_compile *c, emit_op(c, WM_PINTERP, dst, - 0, 0, 0, + 0, interp, deltas, get_pixel_w(c)); @@ -378,7 +392,7 @@ static void emit_ddx( struct brw_wm_compile *c, emit_op(c, OPCODE_DDX, inst->DstReg, - 0, 0, 0, + 0, interp, get_pixel_w(c), src_undef()); @@ -394,7 +408,7 @@ static void emit_ddy( struct brw_wm_compile *c, emit_op(c, OPCODE_DDY, inst->DstReg, - 0, 0, 0, + 0, interp, get_pixel_w(c), src_undef()); @@ -489,13 +503,12 @@ static void precalc_dst( struct brw_wm_compile *c, emit_op(c, OPCODE_MUL, dst_mask(dst, WRITEMASK_Y), - inst->SaturateMode, 0, 0, + inst->SaturateMode, src0, src1, src_undef()); } - if (dst.WriteMask & WRITEMASK_XZ) { struct prog_instruction *swz; GLuint z = GET_SWZ(src0.Swizzle, Z); @@ -505,7 +518,7 @@ static void precalc_dst( struct brw_wm_compile *c, swz = emit_op(c, OPCODE_SWZ, dst_mask(dst, WRITEMASK_XZ), - inst->SaturateMode, 0, 0, + inst->SaturateMode, src_swizzle(src0, SWIZZLE_ONE, z, z, z), src_undef(), src_undef()); @@ -518,7 +531,7 @@ static void precalc_dst( struct brw_wm_compile *c, emit_op(c, OPCODE_MOV, dst_mask(dst, WRITEMASK_W), - inst->SaturateMode, 0, 0, + inst->SaturateMode, src1, src_undef(), src_undef()); @@ -540,7 +553,7 @@ static void precalc_lit( struct brw_wm_compile *c, swz = emit_op(c, OPCODE_SWZ, dst_mask(dst, WRITEMASK_XW), - 0, 0, 0, + 0, src_swizzle1(src0, SWIZZLE_ONE), src_undef(), src_undef()); @@ -548,12 +561,11 @@ static void precalc_lit( struct brw_wm_compile *c, swz->SrcReg[0].NegateBase = 0; } - if (dst.WriteMask & WRITEMASK_YZ) { emit_op(c, OPCODE_LIT, dst_mask(dst, WRITEMASK_YZ), - inst->SaturateMode, 0, 0, + inst->SaturateMode, src0, src_undef(), src_undef()); @@ -589,7 +601,7 @@ static void precalc_tex( struct brw_wm_compile *c, /* tmpcoord = src0 (i.e.: coord = src0) */ out = emit_op(c, OPCODE_MOV, tmpcoord, - 0, 0, 0, + 0, src0, src_undef(), src_undef()); @@ -599,7 +611,7 @@ static void precalc_tex( struct brw_wm_compile *c, /* tmp0 = MAX(coord.X, coord.Y) */ emit_op(c, OPCODE_MAX, tmp0, - 0, 0, 0, + 0, src_swizzle1(coord, X), src_swizzle1(coord, Y), src_undef()); @@ -607,7 +619,7 @@ static void precalc_tex( struct brw_wm_compile *c, /* tmp1 = MAX(tmp0, coord.Z) */ emit_op(c, OPCODE_MAX, tmp1, - 0, 0, 0, + 0, tmp0src, src_swizzle1(coord, Z), src_undef()); @@ -615,7 +627,7 @@ static void precalc_tex( struct brw_wm_compile *c, /* tmp0 = 1 / tmp1 */ emit_op(c, OPCODE_RCP, tmp0, - 0, 0, 0, + 0, tmp1src, src_undef(), src_undef()); @@ -623,7 +635,7 @@ static void precalc_tex( struct brw_wm_compile *c, /* tmpCoord = src0 * tmp0 */ emit_op(c, OPCODE_MUL, tmpcoord, - 0, 0, 0, + 0, src0, tmp0src, src_undef()); @@ -646,7 +658,7 @@ static void precalc_tex( struct brw_wm_compile *c, emit_op(c, OPCODE_MUL, tmpcoord, - 0, 0, 0, + 0, inst->SrcReg[0], scale, src_undef()); @@ -686,22 +698,23 @@ static void precalc_tex( struct brw_wm_compile *c, /* tmp = TEX ... */ - emit_op(c, - OPCODE_TEX, - tmp, - inst->SaturateMode, - unit, - inst->TexSrcTarget, - coord, - src_undef(), - src_undef()); + emit_tex_op(c, + OPCODE_TEX, + tmp, + inst->SaturateMode, + unit, + inst->TexSrcTarget, + inst->TexShadow, + coord, + src_undef(), + src_undef()); /* tmp.xyz = ADD TMP, C0 */ emit_op(c, OPCODE_ADD, dst_mask(tmp, WRITEMASK_XYZ), - 0, 0, 0, + 0, tmpsrc, C0, src_undef()); @@ -712,7 +725,7 @@ static void precalc_tex( struct brw_wm_compile *c, emit_op(c, OPCODE_MUL, dst_mask(tmp, WRITEMASK_Y), - 0, 0, 0, + 0, tmpsrc, src_swizzle1(C0, W), src_undef()); @@ -727,7 +740,7 @@ static void precalc_tex( struct brw_wm_compile *c, emit_op(c, OPCODE_MAD, dst_mask(dst, WRITEMASK_XYZ), - 0, 0, 0, + 0, swap_uv?src_swizzle(tmpsrc, Z,Z,X,X):src_swizzle(tmpsrc, X,X,Z,Z), C1, src_swizzle1(tmpsrc, Y)); @@ -737,7 +750,7 @@ static void precalc_tex( struct brw_wm_compile *c, emit_op(c, OPCODE_MAD, dst_mask(dst, WRITEMASK_Y), - 0, 0, 0, + 0, src_swizzle1(tmpsrc, Z), src_swizzle1(C1, W), src_swizzle1(src_reg_from_dst(dst), Y)); @@ -746,15 +759,16 @@ static void precalc_tex( struct brw_wm_compile *c, } else { /* ordinary RGBA tex instruction */ - emit_op(c, - OPCODE_TEX, - inst->DstReg, - inst->SaturateMode, - unit, - inst->TexSrcTarget, - coord, - src_undef(), - src_undef()); + emit_tex_op(c, + OPCODE_TEX, + inst->DstReg, + inst->SaturateMode, + unit, + inst->TexSrcTarget, + inst->TexShadow, + coord, + src_undef(), + src_undef()); } /* For GL_EXT_texture_swizzle: */ @@ -764,7 +778,6 @@ static void precalc_tex( struct brw_wm_compile *c, emit_op(c, OPCODE_SWZ, inst->DstReg, SATURATE_OFF, /* saturate already done above */ - 0, 0, /* tex unit, target N/A */ src_swizzle4(tmpsrc, c->key.tex_swizzles[unit]), src_undef(), src_undef()); @@ -813,7 +826,7 @@ static void precalc_txp( struct brw_wm_compile *c, emit_op(c, OPCODE_RCP, dst_mask(tmp, WRITEMASK_W), - 0, 0, 0, + 0, src_swizzle1(src0, GET_SWZ(src0.Swizzle, W)), src_undef(), src_undef()); @@ -823,7 +836,7 @@ static void precalc_txp( struct brw_wm_compile *c, emit_op(c, OPCODE_MUL, dst_mask(tmp, WRITEMASK_XYZ), - 0, 0, 0, + 0, src0, src_swizzle1(src_reg_from_dst(tmp), W), src_undef()); @@ -849,42 +862,41 @@ static void precalc_txp( struct brw_wm_compile *c, static void emit_fb_write( struct brw_wm_compile *c ) { struct prog_src_register payload_r0_depth = src_reg(PROGRAM_PAYLOAD, PAYLOAD_DEPTH); - struct prog_src_register outdepth = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_DEPR); + struct prog_src_register outdepth = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_DEPTH); struct prog_src_register outcolor; GLuint i; struct prog_instruction *inst, *last_inst; struct brw_context *brw = c->func.brw; - /* inst->Sampler is not used by backend, - use it for fb write target and eot */ - - if (brw->state.nr_draw_regions > 1) { - for (i = 0 ; i < brw->state.nr_draw_regions; i++) { - outcolor = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_DATA0 + i); - last_inst = inst = emit_op(c, - WM_FB_WRITE, dst_mask(dst_undef(),0), 0, 0, 0, - outcolor, payload_r0_depth, outdepth); - inst->Sampler = (i<<1); - if (c->fp_fragcolor_emitted) { - outcolor = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_COLR); - last_inst = inst = emit_op(c, WM_FB_WRITE, dst_mask(dst_undef(),0), - 0, 0, 0, outcolor, payload_r0_depth, outdepth); - inst->Sampler = (i<<1); - } - } - last_inst->Sampler |= 1; //eot + /* The inst->Aux field is used for FB write target and the EOT marker */ + + if (brw->state.nr_color_regions > 1) { + for (i = 0 ; i < brw->state.nr_color_regions; i++) { + outcolor = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_DATA0 + i); + last_inst = inst = emit_op(c, + WM_FB_WRITE, dst_mask(dst_undef(),0), 0, + outcolor, payload_r0_depth, outdepth); + inst->Aux = (i<<1); + if (c->fp_fragcolor_emitted) { + outcolor = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_COLOR); + last_inst = inst = emit_op(c, WM_FB_WRITE, dst_mask(dst_undef(),0), + 0, outcolor, payload_r0_depth, outdepth); + inst->Aux = (i<<1); + } + } + last_inst->Aux |= 1; //eot } else { /* if gl_FragData[0] is written, use it, else use gl_FragColor */ if (c->fp->program.Base.OutputsWritten & (1 << FRAG_RESULT_DATA0)) outcolor = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_DATA0); else - outcolor = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_COLR); + outcolor = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_COLOR); - inst = emit_op(c, WM_FB_WRITE, dst_mask(dst_undef(),0), - 0, 0, 0, outcolor, payload_r0_depth, outdepth); - inst->Sampler = 1|(0<<1); + inst = emit_op(c, WM_FB_WRITE, dst_mask(dst_undef(),0), + 0, outcolor, payload_r0_depth, outdepth); + inst->Aux = 1|(0<<1); } } @@ -915,9 +927,9 @@ static void validate_dst_regs( struct brw_wm_compile *c, const struct prog_instruction *inst ) { if (inst->DstReg.File == PROGRAM_OUTPUT) { - GLuint idx = inst->DstReg.Index; - if (idx == FRAG_RESULT_COLR) - c->fp_fragcolor_emitted = 1; + GLuint idx = inst->DstReg.Index; + if (idx == FRAG_RESULT_COLOR) + c->fp_fragcolor_emitted = 1; } } @@ -937,11 +949,15 @@ static void print_insns( const struct prog_instruction *insn, 3); } else - _mesa_printf("UNKNOWN\n"); - + _mesa_printf("965 Opcode %d\n", insn->Opcode); } } + +/** + * Initial pass for fragment program code generation. + * This function is used by both the GLSL and non-GLSL paths. + */ void brw_wm_pass_fp( struct brw_wm_compile *c ) { struct brw_fragment_program *fp = c->fp; @@ -958,15 +974,19 @@ void brw_wm_pass_fp( struct brw_wm_compile *c ) c->pixel_w = src_undef(); c->nr_fp_insns = 0; - /* Emit preamble instructions: + /* Emit preamble instructions. This is where special instructions such as + * WM_CINTERP, WM_LINTERP, WM_PINTERP and WM_WPOSXY are emitted to + * compute shader inputs from varying vars. */ - - for (insn = 0; insn < fp->program.Base.NumInstructions; insn++) { const struct prog_instruction *inst = &fp->program.Base.Instructions[insn]; validate_src_regs(c, inst); validate_dst_regs(c, inst); } + + /* Loop over all instructions doing assorted simplifications and + * transformations. + */ for (insn = 0; insn < fp->program.Base.NumInstructions; insn++) { const struct prog_instruction *inst = &fp->program.Base.Instructions[insn]; struct prog_instruction *out; @@ -975,7 +995,6 @@ void brw_wm_pass_fp( struct brw_wm_compile *c ) * necessary: */ - switch (inst->Opcode) { case OPCODE_SWZ: out = emit_insn(c, inst); @@ -1055,9 +1074,9 @@ void brw_wm_pass_fp( struct brw_wm_compile *c ) } if (INTEL_DEBUG & DEBUG_WM) { - _mesa_printf("pass_fp:\n"); - print_insns( c->prog_instructions, c->nr_fp_insns ); - _mesa_printf("\n"); + _mesa_printf("pass_fp:\n"); + print_insns( c->prog_instructions, c->nr_fp_insns ); + _mesa_printf("\n"); } } diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c b/src/mesa/drivers/dri/i965/brw_wm_glsl.c index 8fd776ac39..4cf092226c 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c +++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c @@ -8,12 +8,17 @@ enum _subroutine { SUB_NOISE1, SUB_NOISE2, SUB_NOISE3, SUB_NOISE4 }; -/* Only guess, need a flag in gl_fragment_program later */ + +/** + * Determine if the given fragment program uses GLSL features such + * as flow conditionals, loops, subroutines. + * Some GLSL shaders may use these features, others might not. + */ GLboolean brw_wm_is_glsl(const struct gl_fragment_program *fp) { int i; for (i = 0; i < fp->Base.NumInstructions; i++) { - struct prog_instruction *inst = &fp->Base.Instructions[i]; + const struct prog_instruction *inst = &fp->Base.Instructions[i]; switch (inst->Opcode) { case OPCODE_IF: case OPCODE_TRUNC: @@ -36,6 +41,10 @@ GLboolean brw_wm_is_glsl(const struct gl_fragment_program *fp) return GL_FALSE; } + +/** + * Record the mapping of a Mesa register to a hardware register. + */ static void set_reg(struct brw_wm_compile *c, int file, int index, int component, struct brw_reg reg) { @@ -43,6 +52,10 @@ static void set_reg(struct brw_wm_compile *c, int file, int index, c->wm_regs[file][index][component].inited = GL_TRUE; } +/** + * Examine instruction's write mask to find index of first component + * enabled for writing. + */ static int get_scalar_dst_index(struct prog_instruction *inst) { int i; @@ -62,6 +75,10 @@ static struct brw_reg alloc_tmp(struct brw_wm_compile *c) return reg; } +/** + * Save current temp register info. + * There must be a matching call to release_tmps(). + */ static int mark_tmps(struct brw_wm_compile *c) { return c->tmp_index; @@ -77,8 +94,22 @@ static void release_tmps(struct brw_wm_compile *c, int mark) c->tmp_index = mark; } +/** + * Convert Mesa src register to brw register. + * + * Since we're running in SOA mode each Mesa register corresponds to four + * hardware registers. We allocate the hardware registers as needed here. + * + * \param file register file, one of PROGRAM_x + * \param index register number + * \param component src component (X=0, Y=1, Z=2, W=3) + * \param nr not used?!? + * \param neg negate value? + * \param abs take absolute value? + */ static struct brw_reg -get_reg(struct brw_wm_compile *c, int file, int index, int component, int nr, GLuint neg, GLuint abs) +get_reg(struct brw_wm_compile *c, int file, int index, int component, + int nr, GLuint neg, GLuint abs) { struct brw_reg reg; switch (file) { @@ -89,21 +120,46 @@ get_reg(struct brw_wm_compile *c, int file, int index, int component, int nr, GL break; case PROGRAM_UNDEFINED: return brw_null_reg(); - default: + case PROGRAM_TEMPORARY: + case PROGRAM_INPUT: + case PROGRAM_OUTPUT: + case PROGRAM_PAYLOAD: break; + default: + _mesa_problem(NULL, "Unexpected file in get_reg()"); + return brw_null_reg(); } - if(c->wm_regs[file][index][component].inited) + /* see if we've already allocated a HW register for this Mesa register */ + if (c->wm_regs[file][index][component].inited) { + /* yes, re-use */ reg = c->wm_regs[file][index][component].reg; - else + } + else { + /* no, allocate new register */ reg = brw_vec8_grf(c->reg_index, 0); + } - if(!c->wm_regs[file][index][component].inited) { + /* if this is a new register allocation, record it in the table */ + if (!c->wm_regs[file][index][component].inited) { set_reg(c, file, index, component, reg); c->reg_index++; } - if (neg & (1<< component)) { + if (c->reg_index >= BRW_WM_MAX_GRF - 12) { + /* ran out of temporary registers! */ +#if 1 + /* This is a big hack for now. + * Return bad register index, just don't hang the GPU. + */ + _mesa_fprintf(stderr, "out of regs %d\n", c->reg_index); + c->reg_index = BRW_WM_MAX_GRF - 13; +#else + return brw_null_reg(); +#endif + } + + if (neg & (1 << component)) { reg = negate(reg); } if (abs) @@ -111,6 +167,12 @@ get_reg(struct brw_wm_compile *c, int file, int index, int component, int nr, GL return reg; } + +/** + * Preallocate registers. This sets up the Mesa to hardware register + * mapping for certain registers, such as constants (uniforms/state vars) + * and shader inputs. + */ static void prealloc_reg(struct brw_wm_compile *c) { int i, j; @@ -119,29 +181,42 @@ static void prealloc_reg(struct brw_wm_compile *c) GLuint inputs = FRAG_BIT_WPOS | c->fp_interp_emitted | c->fp_deriv_emitted; for (i = 0; i < 4; i++) { - reg = (i < c->key.nr_depth_regs) - ? brw_vec8_grf(i*2, 0) : brw_vec8_grf(0, 0); + if (i < c->key.nr_depth_regs) + reg = brw_vec8_grf(i * 2, 0); + else + reg = brw_vec8_grf(0, 0); set_reg(c, PROGRAM_PAYLOAD, PAYLOAD_DEPTH, i, reg); } - c->reg_index += 2*c->key.nr_depth_regs; + c->reg_index += 2 * c->key.nr_depth_regs; + + /* constants */ { - int nr_params = c->fp->program.Base.Parameters->NumParameters; - struct gl_program_parameter_list *plist = + const int nr_params = c->fp->program.Base.Parameters->NumParameters; + const struct gl_program_parameter_list *plist = c->fp->program.Base.Parameters; int index = 0; - c->prog_data.nr_params = 4*nr_params; + + /* number of float constants */ + c->prog_data.nr_params = 4 * nr_params; + + /* loop over program constants (float[4]) */ for (i = 0; i < nr_params; i++) { - for (j = 0; j < 4; j++, index++) { - reg = brw_vec1_grf(c->reg_index + index/8, - index%8); - c->prog_data.param[index] = - &plist->ParameterValues[i][j]; - set_reg(c, PROGRAM_STATE_VAR, i, j, reg); + /* loop over XYZW channels */ + for (j = 0; j < 4; j++, index++) { + reg = brw_vec1_grf(c->reg_index + index / 8, index % 8); + /* Save pointer to parameter/constant value. + * Constants will be copied in prepare_constant_buffer() + */ + c->prog_data.param[index] = &plist->ParameterValues[i][j]; + set_reg(c, PROGRAM_STATE_VAR, i, j, reg); } } - c->nr_creg = 2*((4*nr_params+15)/16); + /* number of constant regs used (each reg is float[8]) */ + c->nr_creg = 2 * ((4 * nr_params + 15) / 16); c->reg_index += c->nr_creg; } + + /* fragment shader inputs */ for (i = 0; i < FRAG_ATTRIB_MAX; i++) { if (inputs & (1<<i)) { nr_interp_regs++; @@ -149,9 +224,9 @@ static void prealloc_reg(struct brw_wm_compile *c) for (j = 0; j < 4; j++) set_reg(c, PROGRAM_PAYLOAD, i, j, reg); c->reg_index += 2; - } } + c->prog_data.first_curbe_grf = c->key.nr_depth_regs * 2; c->prog_data.urb_read_length = nr_interp_regs * 2; c->prog_data.curb_read_length = c->nr_creg; @@ -161,6 +236,10 @@ static void prealloc_reg(struct brw_wm_compile *c) c->reg_index += 2; } + +/** + * Convert Mesa dst register to brw register. + */ static struct brw_reg get_dst_reg(struct brw_wm_compile *c, struct prog_instruction *inst, int component, int nr) { @@ -168,6 +247,10 @@ static struct brw_reg get_dst_reg(struct brw_wm_compile *c, 0, 0); } + +/** + * Convert Mesa src register to brw register. + */ static struct brw_reg get_src_reg(struct brw_wm_compile *c, struct prog_src_register *src, int index, int nr) { @@ -176,13 +259,15 @@ static struct brw_reg get_src_reg(struct brw_wm_compile *c, src->NegateBase, src->Abs); } -/* Subroutines are minimal support for resusable instruction sequences. - They are implemented as simply as possible to minimise overhead: there - is no explicit support for communication between the caller and callee - other than saving the return address in a temporary register, nor is - there any automatic local storage. This implies that great care is - required before attempting reentrancy or any kind of nested - subroutine invocations. */ +/** + * Subroutines are minimal support for resusable instruction sequences. + * They are implemented as simply as possible to minimise overhead: there + * is no explicit support for communication between the caller and callee + * other than saving the return address in a temporary register, nor is + * there any automatic local storage. This implies that great care is + * required before attempting reentrancy or any kind of nested + * subroutine invocations. + */ static void invoke_subroutine( struct brw_wm_compile *c, enum _subroutine subroutine, void (*emit)( struct brw_wm_compile * ) ) @@ -319,11 +404,10 @@ static void emit_pixel_xy(struct brw_wm_compile *c, stride(suboffset(r1_uw, 5), 2, 4, 0), brw_imm_v(0x11001100)); } - } static void emit_delta_xy(struct brw_wm_compile *c, - struct prog_instruction *inst) + struct prog_instruction *inst) { struct brw_reg r1 = brw_vec1_grf(1, 0); struct brw_reg dst0, dst1, src0, src1; @@ -351,10 +435,8 @@ static void emit_delta_xy(struct brw_wm_compile *c, negate(suboffset(r1,1))); } - } - static void fire_fb_write( struct brw_wm_compile *c, GLuint base_reg, GLuint nr, @@ -397,33 +479,59 @@ static void emit_fb_write(struct brw_wm_compile *c, */ if (c->key.aa_dest_stencil_reg) nr += 1; - { - brw_push_insn_state(p); - for (channel = 0; channel < 4; channel++) { - src0 = get_src_reg(c, &inst->SrcReg[0], channel, 1); - /* mov (8) m2.0<1>:ud r28.0<8;8,1>:ud { Align1 } */ - /* mov (8) m6.0<1>:ud r29.0<8;8,1>:ud { Align1 SecHalf } */ - brw_MOV(p, brw_message_reg(nr + channel), src0); - } - /* skip over the regs populated above: */ - nr += 8; - brw_pop_insn_state(p); + + brw_push_insn_state(p); + for (channel = 0; channel < 4; channel++) { + src0 = get_src_reg(c, &inst->SrcReg[0], channel, 1); + /* mov (8) m2.0<1>:ud r28.0<8;8,1>:ud { Align1 } */ + /* mov (8) m6.0<1>:ud r29.0<8;8,1>:ud { Align1 SecHalf } */ + brw_MOV(p, brw_message_reg(nr + channel), src0); } + /* skip over the regs populated above: */ + nr += 8; + brw_pop_insn_state(p); - if (c->key.source_depth_to_render_target) - { - if (c->key.computes_depth) { - src0 = get_src_reg(c, &inst->SrcReg[2], 2, 1); - brw_MOV(p, brw_message_reg(nr), src0); - } else { - src0 = get_src_reg(c, &inst->SrcReg[1], 1, 1); - brw_MOV(p, brw_message_reg(nr), src0); - } - - nr += 2; + if (c->key.source_depth_to_render_target) { + if (c->key.computes_depth) { + src0 = get_src_reg(c, &inst->SrcReg[2], 2, 1); + brw_MOV(p, brw_message_reg(nr), src0); + } + else { + src0 = get_src_reg(c, &inst->SrcReg[1], 1, 1); + brw_MOV(p, brw_message_reg(nr), src0); + } + + nr += 2; + } + + if (c->key.dest_depth_reg) { + GLuint comp = c->key.dest_depth_reg / 2; + GLuint off = c->key.dest_depth_reg % 2; + + assert(comp == 1); + assert(off == 0); +#if 0 + /* XXX do we need this code? comp always 1, off always 0, it seems */ + if (off != 0) { + brw_push_insn_state(p); + brw_set_compression_control(p, BRW_COMPRESSION_NONE); + + brw_MOV(p, brw_message_reg(nr), offset(arg1[comp],1)); + /* 2nd half? */ + brw_MOV(p, brw_message_reg(nr+1), arg1[comp+1]); + brw_pop_insn_state(p); + } + else +#endif + { + struct brw_reg src = get_src_reg(c, &inst->SrcReg[1], 1, 1); + brw_MOV(p, brw_message_reg(nr), src); + } + nr += 2; } - target = inst->Sampler >> 1; - eot = inst->Sampler & 1; + + target = inst->Aux >> 1; + eot = inst->Aux & 1; fire_fb_write(c, 0, nr, target, eot); } @@ -465,12 +573,12 @@ static void emit_linterp(struct brw_wm_compile *c, struct brw_reg interp[4]; struct brw_reg dst, delta0, delta1; struct brw_reg src0; + GLuint nr, i; src0 = get_src_reg(c, &inst->SrcReg[0], 0, 1); delta0 = get_src_reg(c, &inst->SrcReg[1], 0, 1); delta1 = get_src_reg(c, &inst->SrcReg[1], 1, 1); - GLuint nr = src0.nr; - int i; + nr = src0.nr; interp[0] = brw_vec1_grf(nr, 0); interp[1] = brw_vec1_grf(nr, 4); @@ -494,10 +602,10 @@ static void emit_cinterp(struct brw_wm_compile *c, struct brw_reg interp[4]; struct brw_reg dst, src0; + GLuint nr, i; src0 = get_src_reg(c, &inst->SrcReg[0], 0, 1); - GLuint nr = src0.nr; - int i; + nr = src0.nr; interp[0] = brw_vec1_grf(nr, 0); interp[1] = brw_vec1_grf(nr, 4); @@ -521,13 +629,13 @@ static void emit_pinterp(struct brw_wm_compile *c, struct brw_reg interp[4]; struct brw_reg dst, delta0, delta1; struct brw_reg src0, w; + GLuint nr, i; src0 = get_src_reg(c, &inst->SrcReg[0], 0, 1); delta0 = get_src_reg(c, &inst->SrcReg[1], 0, 1); delta1 = get_src_reg(c, &inst->SrcReg[1], 1, 1); w = get_src_reg(c, &inst->SrcReg[2], 3, 1); - GLuint nr = src0.nr; - int i; + nr = src0.nr; interp[0] = brw_vec1_grf(nr, 0); interp[1] = brw_vec1_grf(nr, 4); @@ -627,23 +735,46 @@ static void emit_dph(struct brw_wm_compile *c, brw_set_saturate(p, 0); } +/** + * Emit a scalar instruction, like RCP, RSQ, LOG, EXP. + * Note that the result of the function is smeared across the dest + * register's X, Y, Z and W channels (subject to writemasking of course). + */ static void emit_math1(struct brw_wm_compile *c, struct prog_instruction *inst, GLuint func) { struct brw_compile *p = &c->func; - struct brw_reg src0, dst; + struct brw_reg src0, dst, tmp; + const int mark = mark_tmps( c ); + int i; + + tmp = alloc_tmp(c); + /* Get first component of source register */ src0 = get_src_reg(c, &inst->SrcReg[0], 0, 1); - dst = get_dst_reg(c, inst, get_scalar_dst_index(inst), 1); + + /* tmp = func(src0) */ brw_MOV(p, brw_message_reg(2), src0); brw_math(p, - dst, - func, - (inst->SaturateMode != SATURATE_OFF) ? BRW_MATH_SATURATE_SATURATE : BRW_MATH_SATURATE_NONE, - 2, - brw_null_reg(), - BRW_MATH_DATA_VECTOR, - BRW_MATH_PRECISION_FULL); + tmp, + func, + (inst->SaturateMode != SATURATE_OFF) ? BRW_MATH_SATURATE_SATURATE : BRW_MATH_SATURATE_NONE, + 2, + brw_null_reg(), + BRW_MATH_DATA_VECTOR, + BRW_MATH_PRECISION_FULL); + + /*tmp.dw1.bits.swizzle = SWIZZLE_XXXX;*/ + + /* replicate tmp value across enabled dest channels */ + for (i = 0; i < 4; i++) { + if (inst->DstReg.WriteMask & (1 << i)) { + dst = get_dst_reg(c, inst, i, 1); + brw_MOV(p, dst, tmp); + } + } + + release_tmps(c, mark); } static void emit_rcp(struct brw_wm_compile *c, @@ -1045,23 +1176,23 @@ static void emit_ddy(struct brw_wm_compile *c, brw_set_saturate(p, 0); } -static __inline struct brw_reg high_words( struct brw_reg reg ) +static INLINE struct brw_reg high_words( struct brw_reg reg ) { return stride( suboffset( retype( reg, BRW_REGISTER_TYPE_W ), 1 ), 0, 8, 2 ); } -static __inline struct brw_reg low_words( struct brw_reg reg ) +static INLINE struct brw_reg low_words( struct brw_reg reg ) { return stride( retype( reg, BRW_REGISTER_TYPE_W ), 0, 8, 2 ); } -static __inline struct brw_reg even_bytes( struct brw_reg reg ) +static INLINE struct brw_reg even_bytes( struct brw_reg reg ) { return stride( retype( reg, BRW_REGISTER_TYPE_B ), 0, 16, 2 ); } -static __inline struct brw_reg odd_bytes( struct brw_reg reg ) +static INLINE struct brw_reg odd_bytes( struct brw_reg reg ) { return stride( suboffset( retype( reg, BRW_REGISTER_TYPE_B ), 1 ), 0, 16, 2 ); @@ -1366,9 +1497,11 @@ static void emit_noise2( struct brw_wm_compile *c, release_tmps( c, mark ); } -/* The three-dimensional case is much like the one- and two- versions above, - but since the number of corners is rapidly growing we now pack 16 16-bit - hashes into each register to extract more parallelism from the EUs. */ +/** + * The three-dimensional case is much like the one- and two- versions above, + * but since the number of corners is rapidly growing we now pack 16 16-bit + * hashes into each register to extract more parallelism from the EUs. + */ static void noise3_sub( struct brw_wm_compile *c ) { struct brw_compile *p = &c->func; @@ -1670,13 +1803,15 @@ static void emit_noise3( struct brw_wm_compile *c, release_tmps( c, mark ); } -/* For the four-dimensional case, the little micro-optimisation benefits - we obtain by unrolling all the loops aren't worth the massive bloat it - now causes. Instead, we loop twice around performing a similar operation - to noise3, once for the w=0 cube and once for the w=1, with a bit more - code to glue it all together. */ -static void noise4_sub( struct brw_wm_compile *c ) { - +/** + * For the four-dimensional case, the little micro-optimisation benefits + * we obtain by unrolling all the loops aren't worth the massive bloat it + * now causes. Instead, we loop twice around performing a similar operation + * to noise3, once for the w=0 cube and once for the w=1, with a bit more + * code to glue it all together. + */ +static void noise4_sub( struct brw_wm_compile *c ) +{ struct brw_compile *p = &c->func; struct brw_reg param[ 4 ], x0y0, x0y1, x1y0, x1y1, /* gradients at four of the corners */ @@ -2244,28 +2379,12 @@ static void emit_tex(struct brw_wm_compile *c, brw_MOV(p, dst[3], brw_imm_f(1.0)); } +/** + * Resolve subroutine calls after code emit is done. + */ static void post_wm_emit( struct brw_wm_compile *c ) { - GLuint nr_insns = c->fp->program.Base.NumInstructions; - GLuint insn, target_insn; - struct prog_instruction *inst1, *inst2; - struct brw_instruction *brw_inst1, *brw_inst2; - int offset; - for (insn = 0; insn < nr_insns; insn++) { - inst1 = &c->fp->program.Base.Instructions[insn]; - brw_inst1 = inst1->Data; - switch (inst1->Opcode) { - case OPCODE_CAL: - target_insn = inst1->BranchTarget; - inst2 = &c->fp->program.Base.Instructions[target_insn]; - brw_inst2 = inst2->Data; - offset = brw_inst2 - brw_inst1; - brw_set_src1(brw_inst1, brw_imm_d(offset*16)); - break; - default: - break; - } - } + brw_resolve_cals(&c->func); } static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c) @@ -2285,10 +2404,6 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c) for (i = 0; i < c->nr_fp_insns; i++) { struct prog_instruction *inst = &c->prog_instructions[i]; - struct prog_instruction *orig_inst; - - if ((orig_inst = inst->Data) != 0) - orig_inst->Data = current_insn(p); if (inst->CondUpdate) brw_set_conditionalmod(p, BRW_CONDITIONAL_NZ); @@ -2446,7 +2561,10 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c) brw_ENDIF(p, if_inst[--if_insn]); break; case OPCODE_BGNSUB: + brw_save_label(p, inst->Comment, p->nr_insn); + break; case OPCODE_ENDSUB: + /* no-op */ break; case OPCODE_CAL: brw_push_insn_state(p); @@ -2456,8 +2574,7 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c) brw_set_access_mode(p, BRW_ALIGN_16); brw_ADD(p, get_addr_reg(stack_index), get_addr_reg(stack_index), brw_imm_d(4)); - orig_inst = inst->Data; - orig_inst->Data = &p->store[p->nr_insn]; + brw_save_call(&c->func, inst->Comment, p->nr_insn); brw_ADD(p, brw_ip_reg(), brw_ip_reg(), brw_imm_d(1*16)); brw_pop_insn_state(p); break; @@ -2510,14 +2627,34 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c) brw_set_predicate_control(p, BRW_PREDICATE_NONE); } post_wm_emit(c); - for (i = 0; i < c->fp->program.Base.NumInstructions; i++) - c->fp->program.Base.Instructions[i].Data = NULL; + + if (c->reg_index >= BRW_WM_MAX_GRF) { + _mesa_problem(NULL, "Ran out of registers in brw_wm_emit_glsl()"); + /* XXX we need to do some proper error recovery here */ + } } + +/** + * Do GPU code generation for shaders that use GLSL features such as + * flow control. Other shaders will be compiled with the + */ void brw_wm_glsl_emit(struct brw_context *brw, struct brw_wm_compile *c) { + if (INTEL_DEBUG & DEBUG_WM) { + _mesa_printf("brw_wm_glsl_emit:\n"); + } + + /* initial instruction translation/simplification */ brw_wm_pass_fp(c); + + /* actual code generation */ brw_wm_emit_glsl(brw, c); + + if (INTEL_DEBUG & DEBUG_WM) { + brw_wm_print_program(c, "brw_wm_glsl_emit done"); + } + c->prog_data.total_grf = c->reg_index; c->prog_data.total_scratch = 0; } diff --git a/src/mesa/drivers/dri/i965/brw_wm_pass0.c b/src/mesa/drivers/dri/i965/brw_wm_pass0.c index 590cd946ec..2debd0678a 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_pass0.c +++ b/src/mesa/drivers/dri/i965/brw_wm_pass0.c @@ -334,8 +334,9 @@ static struct brw_wm_ref *get_new_ref( struct brw_wm_compile *c, } -static struct brw_wm_instruction *translate_insn( struct brw_wm_compile *c, - const struct prog_instruction *inst ) +static void +translate_insn(struct brw_wm_compile *c, + const struct prog_instruction *inst) { struct brw_wm_instruction *out = get_instruction(c); GLuint writemask = inst->DstReg.WriteMask; @@ -348,8 +349,9 @@ static struct brw_wm_instruction *translate_insn( struct brw_wm_compile *c, out->saturate = (inst->SaturateMode != SATURATE_OFF); out->tex_unit = inst->TexSrcUnit; out->tex_idx = inst->TexSrcTarget; - out->eot = inst->Sampler & 1; - out->target = inst->Sampler>>1; + out->tex_shadow = inst->TexShadow; + out->eot = inst->Aux & 1; + out->target = inst->Aux >> 1; /* Args: */ @@ -365,8 +367,6 @@ static struct brw_wm_instruction *translate_insn( struct brw_wm_compile *c, pass0_set_dst_scalar(c, out, inst, writemask); else pass0_set_dst(c, out, inst, writemask); - - return out; } diff --git a/src/mesa/drivers/dri/i965/brw_wm_pass1.c b/src/mesa/drivers/dri/i965/brw_wm_pass1.c index 6eaed8a665..cf031899dd 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_pass1.c +++ b/src/mesa/drivers/dri/i965/brw_wm_pass1.c @@ -210,9 +210,10 @@ void brw_wm_pass1( struct brw_wm_compile *c ) break; case OPCODE_TEX: + case OPCODE_TXP: read0 = get_texcoord_mask(inst->tex_idx); - if (c->key.shadowtex_mask & (1<<inst->tex_unit)) + if (inst->tex_shadow) read0 |= WRITEMASK_Z; break; @@ -267,7 +268,6 @@ void brw_wm_pass1( struct brw_wm_compile *c ) break; case OPCODE_DST: - case OPCODE_TXP: default: break; } diff --git a/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c b/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c index b6dac0d698..68a9296a71 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_sampler_state.c @@ -95,6 +95,7 @@ struct wm_sampler_key { int sampler_count; struct wm_sampler_entry { + GLenum tex_target; GLenum wrap_r, wrap_s, wrap_t; float maxlod, minlod; float lod_bias; @@ -168,19 +169,20 @@ static void brw_update_sampler_state(struct wm_sampler_entry *key, } } - sampler->ss1.r_wrap_mode = translate_wrap_mode(key->wrap_r); - sampler->ss1.s_wrap_mode = translate_wrap_mode(key->wrap_s); - sampler->ss1.t_wrap_mode = translate_wrap_mode(key->wrap_t); - - /* Fulsim complains if I don't do this. Hardware doesn't mind: - */ -#if 0 - if (texObj->Target == GL_TEXTURE_CUBE_MAP_ARB) { + if (key->tex_target == GL_TEXTURE_CUBE_MAP && + (key->minfilter != GL_NEAREST || key->magfilter != GL_NEAREST)) { + /* If we're using anything but nearest sampling for a cube map, we + * need to set this wrap mode to avoid GPU lock-ups. + */ sampler->ss1.r_wrap_mode = BRW_TEXCOORDMODE_CUBE; sampler->ss1.s_wrap_mode = BRW_TEXCOORDMODE_CUBE; sampler->ss1.t_wrap_mode = BRW_TEXCOORDMODE_CUBE; } -#endif + else { + sampler->ss1.r_wrap_mode = translate_wrap_mode(key->wrap_r); + sampler->ss1.s_wrap_mode = translate_wrap_mode(key->wrap_s); + sampler->ss1.t_wrap_mode = translate_wrap_mode(key->wrap_t); + } /* Set shadow function: */ @@ -234,6 +236,8 @@ brw_wm_sampler_populate_key(struct brw_context *brw, struct gl_texture_image *firstImage = texObj->Image[0][intelObj->firstLevel]; + entry->tex_target = texObj->Target; + entry->wrap_r = texObj->WrapR; entry->wrap_s = texObj->WrapS; entry->wrap_t = texObj->WrapT; diff --git a/src/mesa/drivers/dri/i965/brw_wm_state.c b/src/mesa/drivers/dri/i965/brw_wm_state.c index 3c3b3473d6..63fc8a004f 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_state.c @@ -62,6 +62,7 @@ wm_unit_populate_key(struct brw_context *brw, struct brw_wm_unit_key *key) { GLcontext *ctx = &brw->intel.ctx; const struct gl_fragment_program *fp = brw->fragment_program; + const struct brw_fragment_program *bfp = (struct brw_fragment_program *) fp; struct intel_context *intel = &brw->intel; memset(key, 0, sizeof(*key)); @@ -103,11 +104,14 @@ wm_unit_populate_key(struct brw_context *brw, struct brw_wm_unit_key *key) /* as far as we can tell */ key->computes_depth = - (fp->Base.OutputsWritten & (1 << FRAG_RESULT_DEPR)) != 0; + (fp->Base.OutputsWritten & (1 << FRAG_RESULT_DEPTH)) != 0; /* _NEW_COLOR */ key->uses_kill = fp->UsesKill || ctx->Color.AlphaEnabled; - key->is_glsl = brw_wm_is_glsl(fp); + key->is_glsl = bfp->isGLSL; + + /* temporary sanity check assertion */ + ASSERT(bfp->isGLSL == brw_wm_is_glsl(fp)); /* XXX: This needs a flag to indicate when it changes. */ key->stats_wm = intel->stats_wm; diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c index d70f9c646c..9b320480b6 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -139,7 +139,18 @@ static GLuint translate_tex_format( GLuint mesa_format, GLenum depth_mode ) return BRW_SURFACEFORMAT_BC1_UNORM_SRGB; case MESA_FORMAT_S8_Z24: - return BRW_SURFACEFORMAT_I24X8_UNORM; + /* XXX: these different surface formats don't seem to + * make any difference for shadow sampler/compares. + */ + if (depth_mode == GL_INTENSITY) + return BRW_SURFACEFORMAT_I24X8_UNORM; + else if (depth_mode == GL_ALPHA) + return BRW_SURFACEFORMAT_A24X8_UNORM; + else + return BRW_SURFACEFORMAT_L24X8_UNORM; + + case MESA_FORMAT_DUDV8: + return BRW_SURFACEFORMAT_R8G8_SNORM; default: assert(0); @@ -381,8 +392,7 @@ brw_update_region_surface(struct brw_context *brw, struct intel_region *region, * a more restrictive relocation to emit. */ dri_bo_emit_reloc(brw->wm.surf_bo[unit], - I915_GEM_DOMAIN_RENDER | - I915_GEM_DOMAIN_SAMPLER, + I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0, offsetof(struct brw_surface_state, ss1), @@ -447,13 +457,13 @@ static void prepare_wm_surfaces(struct brw_context *brw ) GLuint i; int old_nr_surfaces; - if (brw->state.nr_draw_regions > 1) { - for (i = 0; i < brw->state.nr_draw_regions; i++) { - brw_update_region_surface(brw, brw->state.draw_regions[i], i, + if (brw->state.nr_color_regions > 1) { + for (i = 0; i < brw->state.nr_color_regions; i++) { + brw_update_region_surface(brw, brw->state.color_regions[i], i, GL_FALSE); } - }else { - brw_update_region_surface(brw, brw->state.draw_regions[0], 0, GL_TRUE); + } else { + brw_update_region_surface(brw, brw->state.color_regions[0], 0, GL_TRUE); } old_nr_surfaces = brw->wm.nr_surfaces; diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.c b/src/mesa/drivers/dri/intel/intel_batchbuffer.c index 9d9937289a..29dc05c518 100644 --- a/src/mesa/drivers/dri/intel/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.c @@ -207,7 +207,7 @@ _intel_batchbuffer_flush(struct intel_batchbuffer *batch, const char *file, used); /* Emit a flush if the bufmgr doesn't do it for us. */ - if (!intel->ttm) { + if (intel->always_flush_cache || !intel->ttm) { *(GLuint *) (batch->ptr) = intel->vtbl.flush_cmd(); batch->ptr += 4; used = batch->ptr - batch->map; diff --git a/src/mesa/drivers/dri/intel/intel_blit.c b/src/mesa/drivers/dri/intel/intel_blit.c index 208f90c0ab..4e033082b4 100644 --- a/src/mesa/drivers/dri/intel/intel_blit.c +++ b/src/mesa/drivers/dri/intel/intel_blit.c @@ -332,6 +332,8 @@ intelEmitCopyBlit(struct intel_context *intel, switch (cpp) { case 1: + CMD = XY_SRC_COPY_BLT_CMD; + break; case 2: case 3: BR13 |= (1 << 24); @@ -562,7 +564,6 @@ intelClearWithBlit(GLcontext *ctx, GLbitfield mask) } } } - intel_batchbuffer_emit_mi_flush(intel->batch); } UNLOCK_HARDWARE(intel); diff --git a/src/mesa/drivers/dri/intel/intel_buffer_objects.c b/src/mesa/drivers/dri/intel/intel_buffer_objects.c index 60d7bb3770..b7c7eeb368 100644 --- a/src/mesa/drivers/dri/intel/intel_buffer_objects.c +++ b/src/mesa/drivers/dri/intel/intel_buffer_objects.c @@ -35,9 +35,6 @@ #include "intel_batchbuffer.h" #include "intel_regions.h" -static GLboolean intel_bufferobj_unmap(GLcontext * ctx, - GLenum target, - struct gl_buffer_object *obj); /** Allocates a new dri_bo to store the data for the buffer object. */ static void @@ -103,12 +100,7 @@ intel_bufferobj_free(GLcontext * ctx, struct gl_buffer_object *obj) struct intel_buffer_object *intel_obj = intel_buffer_object(obj); assert(intel_obj); - - /* Buffer objects are automatically unmapped when deleting according - * to the spec. - */ - if (obj->Pointer) - intel_bufferobj_unmap(ctx, 0, obj); + assert(!obj->Pointer); /* Mesa should have unmapped it */ if (intel_obj->region) { intel_bufferobj_release_region(intel, intel_obj); @@ -141,11 +133,7 @@ intel_bufferobj_data(GLcontext * ctx, intel_obj->Base.Size = size; intel_obj->Base.Usage = usage; - /* Buffer objects are automatically unmapped when creating new data buffers - * according to the spec. - */ - if (obj->Pointer) - intel_bufferobj_unmap(ctx, 0, obj); + assert(!obj->Pointer); /* Mesa should have unmapped it */ if (intel_obj->region) intel_bufferobj_release_region(intel, intel_obj); diff --git a/src/mesa/drivers/dri/intel/intel_buffers.c b/src/mesa/drivers/dri/intel/intel_buffers.c index 7f2144abd4..0929a2c223 100644 --- a/src/mesa/drivers/dri/intel/intel_buffers.c +++ b/src/mesa/drivers/dri/intel/intel_buffers.c @@ -263,7 +263,7 @@ intel_draw_buffer(GLcontext * ctx, struct gl_framebuffer *fb) } } else { - /* XXX FBO: instead of FALSE, pass ctx->Stencil.Enabled ??? */ + /* XXX FBO: instead of FALSE, pass ctx->Stencil._Enabled ??? */ FALLBACK(intel, INTEL_FALLBACK_STENCIL_BUFFER, GL_FALSE); } @@ -274,9 +274,14 @@ intel_draw_buffer(GLcontext * ctx, struct gl_framebuffer *fb) ctx->Driver.Enable(ctx, GL_DEPTH_TEST, (ctx->Depth.Test && fb->Visual.depthBits > 0)); ctx->Driver.Enable(ctx, GL_STENCIL_TEST, - (ctx->Stencil.Enabled && fb->Visual.stencilBits > 0)); + (ctx->Stencil._Enabled && fb->Visual.stencilBits > 0)); } else { + /* Mesa's Stencil._Enabled field is updated when + * _NEW_BUFFERS | _NEW_STENCIL, but i965 code assumes that the value + * only changes with _NEW_STENCIL (which seems sensible). So flag it + * here since this is the _NEW_BUFFERS path. + */ ctx->NewState |= (_NEW_DEPTH | _NEW_STENCIL); } diff --git a/src/mesa/drivers/dri/intel/intel_chipset.h b/src/mesa/drivers/dri/intel/intel_chipset.h index d1b4941601..4593d90df3 100644 --- a/src/mesa/drivers/dri/intel/intel_chipset.h +++ b/src/mesa/drivers/dri/intel/intel_chipset.h @@ -46,6 +46,13 @@ #define PCI_CHIP_G33_G 0x29C2 #define PCI_CHIP_Q33_G 0x29D2 +#define PCI_CHIP_IGD_GM 0xA011 +#define PCI_CHIP_IGD_G 0xA001 + +#define IS_IGDGM(devid) (devid == PCI_CHIP_IGD_GM) +#define IS_IGDG(devid) (devid == PCI_CHIP_IGD_G) +#define IS_IGD(devid) (IS_IGDG(devid) || IS_IGDGM(devid)) + #define PCI_CHIP_I965_G 0x29A2 #define PCI_CHIP_I965_Q 0x2992 #define PCI_CHIP_I965_G_1 0x2982 @@ -66,7 +73,7 @@ devid == PCI_CHIP_I945_GME || \ devid == PCI_CHIP_I965_GM || \ devid == PCI_CHIP_I965_GME || \ - devid == PCI_CHIP_GM45_GM) + devid == PCI_CHIP_GM45_GM || IS_IGD(devid)) #define IS_G45(devid) (devid == PCI_CHIP_IGD_E_G || \ devid == PCI_CHIP_Q45_G || \ @@ -84,7 +91,7 @@ devid == PCI_CHIP_I945_GME || \ devid == PCI_CHIP_G33_G || \ devid == PCI_CHIP_Q33_G || \ - devid == PCI_CHIP_Q35_G) + devid == PCI_CHIP_Q35_G || IS_IGD(devid)) #define IS_965(devid) (devid == PCI_CHIP_I965_G || \ devid == PCI_CHIP_I965_Q || \ diff --git a/src/mesa/drivers/dri/intel/intel_clear.c b/src/mesa/drivers/dri/intel/intel_clear.c index b229136316..28281b3861 100644 --- a/src/mesa/drivers/dri/intel/intel_clear.c +++ b/src/mesa/drivers/dri/intel/intel_clear.c @@ -54,6 +54,17 @@ #define FILE_DEBUG_FLAG DEBUG_BLIT +#define TRI_CLEAR_COLOR_BITS (BUFFER_BIT_BACK_LEFT | \ + BUFFER_BIT_FRONT_LEFT | \ + BUFFER_BIT_COLOR0 | \ + BUFFER_BIT_COLOR1 | \ + BUFFER_BIT_COLOR2 | \ + BUFFER_BIT_COLOR3 | \ + BUFFER_BIT_COLOR4 | \ + BUFFER_BIT_COLOR5 | \ + BUFFER_BIT_COLOR6 | \ + BUFFER_BIT_COLOR7) + /** * Perform glClear where mask contains only color, depth, and/or stencil. * @@ -72,11 +83,11 @@ intel_clear_tris(GLcontext *ctx, GLbitfield mask) struct gl_framebuffer *fb = ctx->DrawBuffer; int i; GLboolean saved_fp_enable = GL_FALSE, saved_vp_enable = GL_FALSE; - GLboolean saved_shader_program = 0; + GLuint saved_shader_program = 0; unsigned int saved_active_texture; - assert((mask & ~(BUFFER_BIT_BACK_LEFT | BUFFER_BIT_FRONT_LEFT | - BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL)) == 0); + assert((mask & ~(TRI_CLEAR_COLOR_BITS | BUFFER_BIT_DEPTH | + BUFFER_BIT_STENCIL)) == 0); _mesa_PushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT | @@ -170,11 +181,11 @@ intel_clear_tris(GLcontext *ctx, GLbitfield mask) while (mask != 0) { GLuint this_mask = 0; + GLuint color_bit; - if (mask & BUFFER_BIT_BACK_LEFT) - this_mask = BUFFER_BIT_BACK_LEFT; - else if (mask & BUFFER_BIT_FRONT_LEFT) - this_mask = BUFFER_BIT_FRONT_LEFT; + color_bit = _mesa_ffs(mask & TRI_CLEAR_COLOR_BITS); + if (color_bit != 0) + this_mask |= (1 << (color_bit - 1)); /* Clear depth/stencil in the same pass as color. */ this_mask |= (mask & (BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL)); @@ -186,6 +197,9 @@ intel_clear_tris(GLcontext *ctx, GLbitfield mask) _mesa_DrawBuffer(GL_FRONT_LEFT); else if (this_mask & BUFFER_BIT_BACK_LEFT) _mesa_DrawBuffer(GL_BACK_LEFT); + else if (color_bit != 0) + _mesa_DrawBuffer(GL_COLOR_ATTACHMENT0 + + (color_bit - BUFFER_COLOR0 - 1)); else _mesa_ColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); @@ -233,13 +247,10 @@ static const char *buffer_names[] = { [BUFFER_BACK_LEFT] = "back", [BUFFER_FRONT_RIGHT] = "front right", [BUFFER_BACK_RIGHT] = "back right", - [BUFFER_AUX0] = "aux0", - [BUFFER_AUX1] = "aux1", - [BUFFER_AUX2] = "aux2", - [BUFFER_AUX3] = "aux3", [BUFFER_DEPTH] = "depth", [BUFFER_STENCIL] = "stencil", [BUFFER_ACCUM] = "accum", + [BUFFER_AUX0] = "aux0", [BUFFER_COLOR0] = "color0", [BUFFER_COLOR1] = "color1", [BUFFER_COLOR2] = "color2", @@ -313,8 +324,11 @@ intelClear(GLcontext *ctx, GLbitfield mask) * buffer with it. */ if (mask & (BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL)) { - tri_mask |= blit_mask & BUFFER_BIT_BACK_LEFT; - blit_mask &= ~BUFFER_BIT_BACK_LEFT; + int color_bit = _mesa_ffs(mask & TRI_CLEAR_COLOR_BITS); + if (color_bit != 0) { + tri_mask |= blit_mask & (1 << (color_bit - 1)); + blit_mask &= ~(1 << (color_bit - 1)); + } } /* SW fallback clearing */ diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c index d7ccfa0605..888bb3f18f 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -123,6 +123,10 @@ intelGetString(GLcontext * ctx, GLenum name) case PCI_CHIP_Q33_G: chipset = "Intel(R) Q33"; break; + case PCI_CHIP_IGD_GM: + case PCI_CHIP_IGD_G: + chipset = "Intel(R) IGD"; + break; case PCI_CHIP_I965_Q: chipset = "Intel(R) 965Q"; break; @@ -502,10 +506,16 @@ intelInitContext(struct intel_context *intel, * start. */ if (getenv("INTEL_STRICT_CONFORMANCE")) { - intel->strict_conformance = 1; + unsigned int value = atoi(getenv("INTEL_STRICT_CONFORMANCE")); + if (value > 0) { + intel->conformance_mode = value; + } + else { + intel->conformance_mode = 1; + } } - if (intel->strict_conformance) { + if (intel->conformance_mode > 0) { ctx->Const.MinLineWidth = 1.0; ctx->Const.MinLineWidthAA = 1.0; ctx->Const.MaxLineWidth = 1.0; @@ -573,8 +583,6 @@ intelInitContext(struct intel_context *intel, intel->do_usleeps = (fthrottle_mode == DRI_CONF_FTHROTTLE_USLEEPS); - _math_matrix_ctr(&intel->ViewportMatrix); - if (IS_965(intelScreen->deviceID) && !intel->intelScreen->irq_active) { _mesa_printf("IRQs not active. Exiting\n"); exit(1); @@ -610,6 +618,16 @@ intelInitContext(struct intel_context *intel, intel->no_rast = 1; } + if (driQueryOptionb(&intel->optionCache, "always_flush_batch")) { + fprintf(stderr, "flushing batchbuffer before/after each draw call\n"); + intel->always_flush_batch = 1; + } + + if (driQueryOptionb(&intel->optionCache, "always_flush_cache")) { + fprintf(stderr, "flushing GPU caches before/after each draw call\n"); + intel->always_flush_cache = 1; + } + /* Disable all hardware rendering (skip emitting batches and fences/waits * to the kernel) */ diff --git a/src/mesa/drivers/dri/intel/intel_context.h b/src/mesa/drivers/dri/intel/intel_context.h index 18dc43c4a4..e520ecf220 100644 --- a/src/mesa/drivers/dri/intel/intel_context.h +++ b/src/mesa/drivers/dri/intel/intel_context.h @@ -100,7 +100,6 @@ struct intel_context GLuint num_regions); GLuint (*flush_cmd) (void); - void (*emit_flush) (struct intel_context *intel, GLuint unused); void (*reduced_primitive_state) (struct intel_context * intel, GLenum rprim); @@ -229,7 +228,14 @@ struct intel_context GLboolean hw_stipple; GLboolean depth_buffer_is_float; GLboolean no_rast; - GLboolean strict_conformance; + GLboolean always_flush_batch; + GLboolean always_flush_cache; + + /* 0 - nonconformant, best performance; + * 1 - fallback to sw for known conformance bugs + * 2 - always fallback to sw + */ + GLuint conformance_mode; /* State for intelvb.c and inteltris.c. */ diff --git a/src/mesa/drivers/dri/intel/intel_decode.c b/src/mesa/drivers/dri/intel/intel_decode.c index 136221c37f..f2e2e61935 100644 --- a/src/mesa/drivers/dri/intel/intel_decode.c +++ b/src/mesa/drivers/dri/intel/intel_decode.c @@ -1595,7 +1595,7 @@ decode_3d_965(uint32_t *data, int count, uint32_t hw_offset, int *failures) "3DPRIMITIVE: %s %s\n", get_965_prim_type(data[0]), (data[0] & (1 << 15)) ? "random" : "sequential"); - instr_out(data, hw_offset, 1, "primitive count\n"); + instr_out(data, hw_offset, 1, "vertex count\n"); instr_out(data, hw_offset, 2, "start vertex\n"); instr_out(data, hw_offset, 3, "instance count\n"); instr_out(data, hw_offset, 4, "start instance\n"); diff --git a/src/mesa/drivers/dri/intel/intel_depthtmp.h b/src/mesa/drivers/dri/intel/intel_depthtmp.h new file mode 100644 index 0000000000..16d7708453 --- /dev/null +++ b/src/mesa/drivers/dri/intel/intel_depthtmp.h @@ -0,0 +1,54 @@ +/* + * Copyright © 2009 Intel Corporation + * + * 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 (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 NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS 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: + * Eric Anholt <eric@anholt.net> + * + */ + +/** + * Wrapper around the depthtmp.h macrofest to generate spans code for + * all the tiling styles. + */ + +#define VALUE_TYPE INTEL_VALUE_TYPE +#define WRITE_DEPTH(_x, _y, d) INTEL_WRITE_DEPTH(NO_TILE(_x, _y), d) +#define READ_DEPTH(d, _x, _y) d = INTEL_READ_DEPTH(NO_TILE(_x, _y)) +#define TAG(x) INTEL_TAG(intel##x) +#include "depthtmp.h" + +#define VALUE_TYPE INTEL_VALUE_TYPE +#define WRITE_DEPTH(_x, _y, d) INTEL_WRITE_DEPTH(X_TILE(_x, _y), d) +#define READ_DEPTH(d, _x, _y) d = INTEL_READ_DEPTH(X_TILE(_x, _y)) +#define TAG(x) INTEL_TAG(intel_XTile_##x) +#include "depthtmp.h" + +#define VALUE_TYPE INTEL_VALUE_TYPE +#define WRITE_DEPTH(_x, _y, d) INTEL_WRITE_DEPTH(Y_TILE(_x, _y), d) +#define READ_DEPTH(d, _x, _y) d = INTEL_READ_DEPTH(Y_TILE(_x, _y)) +#define TAG(x) INTEL_TAG(intel_YTile_##x) +#include "depthtmp.h" + +#undef INTEL_VALUE_TYPE +#undef INTEL_WRITE_DEPTH +#undef INTEL_READ_DEPTH +#undef INTEL_TAG diff --git a/src/mesa/drivers/dri/intel/intel_extensions.c b/src/mesa/drivers/dri/intel/intel_extensions.c index 28223ca141..8dd0b2461b 100644 --- a/src/mesa/drivers/dri/intel/intel_extensions.c +++ b/src/mesa/drivers/dri/intel/intel_extensions.c @@ -49,6 +49,7 @@ #define need_GL_EXT_secondary_color #define need_GL_EXT_stencil_two_side #define need_GL_ATI_separate_stencil +#define need_GL_ATI_envmap_bumpmap #define need_GL_NV_point_sprite #define need_GL_NV_vertex_program #define need_GL_VERSION_2_0 @@ -129,11 +130,7 @@ static const struct dri_extension brw_extensions[] = { { "GL_ARB_point_sprite", NULL }, { "GL_ARB_shader_objects", GL_ARB_shader_objects_functions }, { "GL_ARB_shading_language_100", GL_VERSION_2_0_functions }, -#if 0 - /* Support for GLSL 1.20 is currently broken in core Mesa. - */ { "GL_ARB_shading_language_120", GL_VERSION_2_1_functions }, -#endif { "GL_ARB_shadow", NULL }, { "GL_ARB_texture_non_power_of_two", NULL }, { "GL_ARB_vertex_shader", GL_ARB_vertex_shader_functions }, @@ -142,6 +139,7 @@ static const struct dri_extension brw_extensions[] = { { "GL_EXT_texture_sRGB", NULL }, { "GL_EXT_texture_swizzle", NULL }, { "GL_EXT_vertex_array_bgra", NULL }, + { "GL_ATI_envmap_bumpmap", GL_ATI_envmap_bumpmap_functions }, { "GL_ATI_separate_stencil", GL_ATI_separate_stencil_functions }, { "GL_ATI_texture_env_combine3", NULL }, { "GL_NV_texture_env_combine4", NULL }, diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c index 54d6044ad3..a401f730ba 100644 --- a/src/mesa/drivers/dri/intel/intel_fbo.c +++ b/src/mesa/drivers/dri/intel/intel_fbo.c @@ -210,7 +210,8 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb, DBG("Allocating %d x %d Intel RBO (pitch %d)\n", width, height, pitch); - irb->region = intel_region_alloc(intel, cpp, width, height, pitch); + irb->region = intel_region_alloc(intel, cpp, width, height, pitch, + GL_TRUE); if (!irb->region) return GL_FALSE; /* out of memory? */ @@ -322,6 +323,15 @@ intel_create_renderbuffer(GLenum intFormat) irb->Base.BlueBits = 5; irb->Base.DataType = GL_UNSIGNED_BYTE; break; + case GL_RGB8: + irb->Base._ActualFormat = GL_RGB8; + irb->Base._BaseFormat = GL_RGB; + irb->Base.RedBits = 8; + irb->Base.GreenBits = 8; + irb->Base.BlueBits = 8; + irb->Base.AlphaBits = 0; + irb->Base.DataType = GL_UNSIGNED_BYTE; + break; case GL_RGBA8: irb->Base._ActualFormat = GL_RGBA8; irb->Base._BaseFormat = GL_RGBA; @@ -602,19 +612,16 @@ static void intel_finish_render_texture(GLcontext * ctx, struct gl_renderbuffer_attachment *att) { - struct intel_renderbuffer *irb = intel_renderbuffer(att->Renderbuffer); - - DBG("End render texture (tid %x) tex %u\n", _glthread_GetID(), att->Texture->Name); - - if (irb) { - /* just release the region */ - intel_region_release(&irb->region); - } - else if (att->Renderbuffer) { - /* software fallback */ - _mesa_finish_render_texture(ctx, att); - /* XXX FBO: Need to unmap the buffer (or in intelSpanRenderStart???) */ - } + /* no-op + * Previously we released the renderbuffer's intel_region but + * that's not necessary and actually caused problems when trying + * to do a glRead/CopyPixels from the renderbuffer later. + * The region will be released later if the texture is replaced + * or the renderbuffer deleted. + * + * The intention of this driver hook is more of a "done rendering + * to texture, please re-twiddle/etc if necessary". + */ } @@ -624,6 +631,7 @@ intel_finish_render_texture(GLcontext * ctx, static void intel_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb) { + struct intel_context *intel = intel_context(ctx); const struct intel_renderbuffer *depthRb = intel_get_renderbuffer(fb, BUFFER_DEPTH); const struct intel_renderbuffer *stencilRb = @@ -635,6 +643,35 @@ intel_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb) */ fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; } + + /* check that texture color buffers are a format we can render into */ + { + const struct gl_texture_format *supportedFormat; + GLuint i; + + /* The texture format we can render into seems to depend on the + * screen depth. There currently seems to be a problem when + * rendering into a rgb565 texture when the screen is abgr8888. + */ + + if (intel->ctx.Visual.rgbBits >= 24) + supportedFormat = &_mesa_texformat_argb8888; + else + supportedFormat = &_mesa_texformat_rgb565; + + for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) { + const struct gl_texture_object *texObj = + fb->Attachment[BUFFER_COLOR0 + i].Texture; + if (texObj) { + const struct gl_texture_image *texImg = + texObj->Image[0][texObj->BaseLevel]; + if (texImg && texImg->TexFormat != supportedFormat) { + fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; + break; + } + } + } + } } diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c index bf1c3f03f0..6e1e034e53 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c @@ -103,7 +103,8 @@ intel_miptree_create(struct intel_context *intel, GLuint last_level, GLuint width0, GLuint height0, - GLuint depth0, GLuint cpp, GLuint compress_byte) + GLuint depth0, GLuint cpp, GLuint compress_byte, + GLboolean expect_accelerated_upload) { struct intel_mipmap_tree *mt; @@ -120,7 +121,8 @@ intel_miptree_create(struct intel_context *intel, mt->cpp, mt->pitch, mt->total_height, - mt->pitch); + mt->pitch, + expect_accelerated_upload); if (!mt->region) { free(mt); diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h index c9537dbb9a..4060b9df78 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h @@ -133,7 +133,8 @@ struct intel_mipmap_tree *intel_miptree_create(struct intel_context *intel, GLuint height0, GLuint depth0, GLuint cpp, - GLuint compress_byte); + GLuint compress_byte, + GLboolean expect_accelerated_upload); struct intel_mipmap_tree * intel_miptree_create_for_region(struct intel_context *intel, diff --git a/src/mesa/drivers/dri/intel/intel_pixel.c b/src/mesa/drivers/dri/intel/intel_pixel.c index 5e32288844..7041ff389a 100644 --- a/src/mesa/drivers/dri/intel/intel_pixel.c +++ b/src/mesa/drivers/dri/intel/intel_pixel.c @@ -30,6 +30,7 @@ #include "main/context.h" #include "main/enable.h" #include "main/matrix.h" +#include "main/viewport.h" #include "swrast/swrast.h" #include "shader/arbprogram.h" #include "shader/program.h" @@ -112,7 +113,7 @@ intel_check_blit_fragment_ops(GLcontext * ctx, GLboolean src_alpha_is_one) return GL_FALSE; } - if (ctx->Stencil.Enabled) { + if (ctx->Stencil._Enabled) { DBG("fallback due to image stencil\n"); return GL_FALSE; } diff --git a/src/mesa/drivers/dri/intel/intel_pixel_copy.c b/src/mesa/drivers/dri/intel/intel_pixel_copy.c index 7c7aa6097c..d50dd68092 100644 --- a/src/mesa/drivers/dri/intel/intel_pixel_copy.c +++ b/src/mesa/drivers/dri/intel/intel_pixel_copy.c @@ -87,7 +87,7 @@ intel_check_copypixel_blit_fragment_ops(GLcontext * ctx) ctx->Color.AlphaEnabled || ctx->Depth.Test || ctx->Fog.Enabled || - ctx->Stencil.Enabled || + ctx->Stencil._Enabled || !ctx->Color.ColorMask[0] || !ctx->Color.ColorMask[1] || !ctx->Color.ColorMask[2] || diff --git a/src/mesa/drivers/dri/intel/intel_pixel_draw.c b/src/mesa/drivers/dri/intel/intel_pixel_draw.c index 7be7ea82b3..e8d5ac8569 100644 --- a/src/mesa/drivers/dri/intel/intel_pixel_draw.c +++ b/src/mesa/drivers/dri/intel/intel_pixel_draw.c @@ -233,7 +233,7 @@ intel_stencil_drawpixels(GLcontext * ctx, } /* We don't support stencil testing/ops here */ - if (ctx->Stencil.Enabled) + if (ctx->Stencil._Enabled) return GL_FALSE; /* We use FBOs for our wrapping of the depthbuffer into a color diff --git a/src/mesa/drivers/dri/intel/intel_regions.c b/src/mesa/drivers/dri/intel/intel_regions.c index ec85c4131a..0aa5b8c02c 100644 --- a/src/mesa/drivers/dri/intel/intel_regions.c +++ b/src/mesa/drivers/dri/intel/intel_regions.c @@ -109,12 +109,18 @@ intel_region_alloc_internal(struct intel_context *intel, struct intel_region * intel_region_alloc(struct intel_context *intel, - GLuint cpp, GLuint width, GLuint height, GLuint pitch) + GLuint cpp, GLuint width, GLuint height, GLuint pitch, + GLboolean expect_accelerated_upload) { dri_bo *buffer; - buffer = dri_bo_alloc(intel->bufmgr, "region", - pitch * cpp * height, 64); + if (expect_accelerated_upload) { + buffer = drm_intel_bo_alloc_for_render(intel->bufmgr, "region", + pitch * cpp * height, 64); + } else { + buffer = drm_intel_bo_alloc(intel->bufmgr, "region", + pitch * cpp * height, 64); + } return intel_region_alloc_internal(intel, cpp, width, height, pitch, buffer); } @@ -460,7 +466,8 @@ intel_recreate_static(struct intel_context *intel, else region->cpp = intel->ctx.Visual.rgbBits / 8; region->pitch = intelScreen->pitch; - region->height = intelScreen->height; /* needed? */ + region->width = intelScreen->width; + region->height = intelScreen->height; if (region->buffer != NULL) { dri_bo_unreference(region->buffer); diff --git a/src/mesa/drivers/dri/intel/intel_regions.h b/src/mesa/drivers/dri/intel/intel_regions.h index 4b120ba4ce..45e2bf4e77 100644 --- a/src/mesa/drivers/dri/intel/intel_regions.h +++ b/src/mesa/drivers/dri/intel/intel_regions.h @@ -74,7 +74,8 @@ struct intel_region */ struct intel_region *intel_region_alloc(struct intel_context *intel, GLuint cpp, GLuint width, - GLuint height, GLuint pitch); + GLuint height, GLuint pitch, + GLboolean expect_accelerated_upload); struct intel_region * intel_region_alloc_for_handle(struct intel_context *intel, diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c index a52271158c..e8c074712c 100644 --- a/src/mesa/drivers/dri/intel/intel_screen.c +++ b/src/mesa/drivers/dri/intel/intel_screen.c @@ -71,10 +71,12 @@ PUBLIC const char __driConfigOptions[] = DRI_CONF_SECTION_END DRI_CONF_SECTION_DEBUG DRI_CONF_NO_RAST(false) + DRI_CONF_ALWAYS_FLUSH_BATCH(false) + DRI_CONF_ALWAYS_FLUSH_CACHE(false) DRI_CONF_SECTION_END DRI_CONF_END; -const GLuint __driNConfigOptions = 6; +const GLuint __driNConfigOptions = 8; #ifdef USE_NEW_INTERFACE static PFNGLXCREATECONTEXTMODES create_context_modes = NULL; @@ -302,6 +304,7 @@ intelDestroyScreen(__DRIscreenPrivate * sPriv) dri_bufmgr_destroy(intelScreen->bufmgr); intelUnmapScreenRegions(intelScreen); + driDestroyOptionCache(&intelScreen->optionCache); FREE(intelScreen); sPriv->private = NULL; @@ -322,7 +325,7 @@ intelCreateBuffer(__DRIscreenPrivate * driScrnPriv, else { GLboolean swStencil = (mesaVis->stencilBits > 0 && mesaVis->depthBits != 24); - GLenum rgbFormat = (mesaVis->redBits == 5 ? GL_RGB5 : GL_RGBA8); + GLenum rgbFormat; struct intel_framebuffer *intel_fb = CALLOC_STRUCT(intel_framebuffer); @@ -331,6 +334,13 @@ intelCreateBuffer(__DRIscreenPrivate * driScrnPriv, _mesa_initialize_framebuffer(&intel_fb->Base, mesaVis); + if (mesaVis->redBits == 5) + rgbFormat = GL_RGB5; + else if (mesaVis->alphaBits == 0) + rgbFormat = GL_RGB8; + else + rgbFormat = GL_RGBA8; + /* setup the hardware-based renderbuffers */ intel_fb->color_rb[0] = intel_create_renderbuffer(rgbFormat); _mesa_add_renderbuffer(&intel_fb->Base, BUFFER_FRONT_LEFT, @@ -384,7 +394,7 @@ intelCreateBuffer(__DRIscreenPrivate * driScrnPriv, static void intelDestroyBuffer(__DRIdrawablePrivate * driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } @@ -757,13 +767,34 @@ __DRIconfig **intelInitScreen2(__DRIscreenPrivate *psp) fb_format[2] = GL_BGRA; fb_type[2] = GL_UNSIGNED_INT_8_8_8_8_REV; + depth_bits[0] = 0; + stencil_bits[0] = 0; + for (color = 0; color < ARRAY_SIZE(fb_format); color++) { __DRIconfig **new_configs; + int depth_factor; + /* With DRI2 right now, GetBuffers always returns a depth/stencil buffer + * with the same cpp as the drawable. So we can't support depth cpp != + * color cpp currently. + */ + if (fb_type[color] == GL_UNSIGNED_SHORT_5_6_5) { + depth_bits[1] = 16; + stencil_bits[1] = 0; + + depth_factor = 2; + } else { + depth_bits[1] = 24; + stencil_bits[1] = 0; + depth_bits[2] = 24; + stencil_bits[2] = 8; + + depth_factor = 3; + } new_configs = driCreateConfigs(fb_format[color], fb_type[color], depth_bits, stencil_bits, - ARRAY_SIZE(depth_bits), + depth_factor, back_buffer_modes, ARRAY_SIZE(back_buffer_modes), msaa_samples_array, diff --git a/src/mesa/drivers/dri/intel/intel_span.c b/src/mesa/drivers/dri/intel/intel_span.c index bdd2fd9e85..c3a873f1ab 100644 --- a/src/mesa/drivers/dri/intel/intel_span.c +++ b/src/mesa/drivers/dri/intel/intel_span.c @@ -131,6 +131,18 @@ pwrite_8(struct intel_renderbuffer *irb, uint32_t offset, uint8_t val) dri_bo_subdata(irb->region->buffer, offset, 1, &val); } +static uint32_t +z24s8_to_s8z24(uint32_t val) +{ + return (val << 24) | (val >> 8); +} + +static uint32_t +s8z24_to_z24s8(uint32_t val) +{ + return (val >> 24) | (val << 8); +} + static uint32_t no_tile_swizzle(struct intel_renderbuffer *irb, int x, int y) { @@ -293,101 +305,29 @@ static uint32_t y_tile_swizzle(struct intel_renderbuffer *irb, #define X_TILE(_X, _Y) x_tile_swizzle(irb, (_X) + x_off, (_Y) + y_off) #define Y_TILE(_X, _Y) y_tile_swizzle(irb, (_X) + x_off, (_Y) + y_off) -/* 16 bit, RGB565 color spanline and pixel functions - */ -#define SPANTMP_PIXEL_FMT GL_RGB -#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5 - -#define TAG(x) intel##x##_RGB565 -#define TAG2(x,y) intel##x##_RGB565##y -#define GET_VALUE(X, Y) pread_16(irb, NO_TILE(X, Y)) -#define PUT_VALUE(X, Y, V) pwrite_16(irb, NO_TILE(X, Y), V) -#include "spantmp2.h" - -/* 32 bit, ARGB8888 color spanline and pixel functions - */ -#define SPANTMP_PIXEL_FMT GL_BGRA -#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV - -#define TAG(x) intel##x##_ARGB8888 -#define TAG2(x,y) intel##x##_ARGB8888##y -#define GET_VALUE(X, Y) pread_32(irb, NO_TILE(X, Y)) -#define PUT_VALUE(X, Y, V) pwrite_32(irb, NO_TILE(X, Y), V) -#include "spantmp2.h" - -/* 32 bit, xRGB8888 color spanline and pixel functions - */ -#define SPANTMP_PIXEL_FMT GL_BGRA -#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV - -#define TAG(x) intel##x##_xRGB8888 -#define TAG2(x,y) intel##x##_xRGB8888##y -#define GET_VALUE(X, Y) pread_xrgb8888(irb, NO_TILE(X, Y)) -#define PUT_VALUE(X, Y, V) pwrite_xrgb8888(irb, NO_TILE(X, Y), V) -#include "spantmp2.h" - -/* 16 bit RGB565 color tile spanline and pixel functions - */ - -#define SPANTMP_PIXEL_FMT GL_RGB -#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5 - -#define TAG(x) intel_XTile_##x##_RGB565 -#define TAG2(x,y) intel_XTile_##x##_RGB565##y -#define GET_VALUE(X, Y) pread_16(irb, X_TILE(X, Y)) -#define PUT_VALUE(X, Y, V) pwrite_16(irb, X_TILE(X, Y), V) -#include "spantmp2.h" - -#define SPANTMP_PIXEL_FMT GL_RGB -#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5 - -#define TAG(x) intel_YTile_##x##_RGB565 -#define TAG2(x,y) intel_YTile_##x##_RGB565##y -#define GET_VALUE(X, Y) pread_16(irb, Y_TILE(X, Y)) -#define PUT_VALUE(X, Y, V) pwrite_16(irb, Y_TILE(X, Y), V) -#include "spantmp2.h" - -/* 32 bit ARGB888 color tile spanline and pixel functions - */ - -#define SPANTMP_PIXEL_FMT GL_BGRA -#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV - -#define TAG(x) intel_XTile_##x##_ARGB8888 -#define TAG2(x,y) intel_XTile_##x##_ARGB8888##y -#define GET_VALUE(X, Y) pread_32(irb, X_TILE(X, Y)) -#define PUT_VALUE(X, Y, V) pwrite_32(irb, X_TILE(X, Y), V) -#include "spantmp2.h" - -#define SPANTMP_PIXEL_FMT GL_BGRA -#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV - -#define TAG(x) intel_YTile_##x##_ARGB8888 -#define TAG2(x,y) intel_YTile_##x##_ARGB8888##y -#define GET_VALUE(X, Y) pread_32(irb, Y_TILE(X, Y)) -#define PUT_VALUE(X, Y, V) pwrite_32(irb, Y_TILE(X, Y), V) -#include "spantmp2.h" - -/* 32 bit xRGB888 color tile spanline and pixel functions - */ - -#define SPANTMP_PIXEL_FMT GL_BGRA -#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV - -#define TAG(x) intel_XTile_##x##_xRGB8888 -#define TAG2(x,y) intel_XTile_##x##_xRGB8888##y -#define GET_VALUE(X, Y) pread_xrgb8888(irb, X_TILE(X, Y)) -#define PUT_VALUE(X, Y, V) pwrite_xrgb8888(irb, X_TILE(X, Y), V) -#include "spantmp2.h" - -#define SPANTMP_PIXEL_FMT GL_BGRA -#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV - -#define TAG(x) intel_YTile_##x##_xRGB8888 -#define TAG2(x,y) intel_YTile_##x##_xRGB8888##y -#define GET_VALUE(X, Y) pread_xrgb8888(irb, Y_TILE(X, Y)) -#define PUT_VALUE(X, Y, V) pwrite_xrgb8888(irb, Y_TILE(X, Y), V) -#include "spantmp2.h" +/* r5g6b5 color span and pixel functions */ +#define INTEL_PIXEL_FMT GL_RGB +#define INTEL_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5 +#define INTEL_READ_VALUE(offset) pread_16(irb, offset) +#define INTEL_WRITE_VALUE(offset, v) pwrite_16(irb, offset, v) +#define INTEL_TAG(x) x##_RGB565 +#include "intel_spantmp.h" + +/* a8r8g8b8 color span and pixel functions */ +#define INTEL_PIXEL_FMT GL_BGRA +#define INTEL_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV +#define INTEL_READ_VALUE(offset) pread_32(irb, offset) +#define INTEL_WRITE_VALUE(offset, v) pwrite_32(irb, offset, v) +#define INTEL_TAG(x) x##_ARGB8888 +#include "intel_spantmp.h" + +/* x8r8g8b8 color span and pixel functions */ +#define INTEL_PIXEL_FMT GL_BGRA +#define INTEL_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV +#define INTEL_READ_VALUE(offset) pread_xrgb8888(irb, offset) +#define INTEL_WRITE_VALUE(offset, v) pwrite_xrgb8888(irb, offset, v) +#define INTEL_TAG(x) x##_xRGB8888 +#include "intel_spantmp.h" #define LOCAL_DEPTH_VARS \ struct intel_context *intel = intel_context(ctx); \ @@ -402,98 +342,26 @@ static uint32_t y_tile_swizzle(struct intel_renderbuffer *irb, #define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS -/** - ** 16-bit depthbuffer functions. - **/ -#define VALUE_TYPE GLushort -#define WRITE_DEPTH(_x, _y, d) pwrite_16(irb, NO_TILE(_x, _y), d) -#define READ_DEPTH(d, _x, _y) d = pread_16(irb, NO_TILE(_x, _y)) -#define TAG(x) intel##x##_z16 -#include "depthtmp.h" +/* z16 depthbuffer functions. */ +#define INTEL_VALUE_TYPE GLushort +#define INTEL_WRITE_DEPTH(offset, d) pwrite_16(irb, offset, d) +#define INTEL_READ_DEPTH(offset) pread_16(irb, offset) +#define INTEL_TAG(name) name##_z16 +#include "intel_depthtmp.h" +/* z24 depthbuffer functions. */ +#define INTEL_VALUE_TYPE GLuint +#define INTEL_WRITE_DEPTH(offset, d) pwrite_32(irb, offset, d) +#define INTEL_READ_DEPTH(offset) pread_32(irb, offset) +#define INTEL_TAG(name) name##_z24 +#include "intel_depthtmp.h" -/** - ** 16-bit x tile depthbuffer functions. - **/ -#define VALUE_TYPE GLushort -#define WRITE_DEPTH(_x, _y, d) pwrite_16(irb, X_TILE(_x, _y), d) -#define READ_DEPTH(d, _x, _y) d = pread_16(irb, X_TILE(_x, _y)) -#define TAG(x) intel_XTile_##x##_z16 -#include "depthtmp.h" - -/** - ** 16-bit y tile depthbuffer functions. - **/ -#define VALUE_TYPE GLushort -#define WRITE_DEPTH(_x, _y, d) pwrite_16(irb, Y_TILE(_x, _y), d) -#define READ_DEPTH(d, _x, _y) d = pread_16(irb, Y_TILE(_x, _y)) -#define TAG(x) intel_YTile_##x##_z16 -#include "depthtmp.h" - - -/** - ** 24/8-bit interleaved depth/stencil functions - ** Note: we're actually reading back combined depth+stencil values. - ** The wrappers in main/depthstencil.c are used to extract the depth - ** and stencil values. - **/ -#define VALUE_TYPE GLuint - -/* Change ZZZS -> SZZZ */ -#define WRITE_DEPTH(_x, _y, d) \ - pwrite_32(irb, NO_TILE(_x, _y), ((d) >> 8) | ((d) << 24)) - -/* Change SZZZ -> ZZZS */ -#define READ_DEPTH( d, _x, _y ) { \ - GLuint tmp = pread_32(irb, NO_TILE(_x, _y)); \ - d = (tmp << 8) | (tmp >> 24); \ -} - -#define TAG(x) intel##x##_z24_s8 -#include "depthtmp.h" - - -/** - ** 24/8-bit x-tile interleaved depth/stencil functions - ** Note: we're actually reading back combined depth+stencil values. - ** The wrappers in main/depthstencil.c are used to extract the depth - ** and stencil values. - **/ -#define VALUE_TYPE GLuint - -/* Change ZZZS -> SZZZ */ -#define WRITE_DEPTH(_x, _y, d) \ - pwrite_32(irb, X_TILE(_x, _y), ((d) >> 8) | ((d) << 24)) - -/* Change SZZZ -> ZZZS */ -#define READ_DEPTH( d, _x, _y ) { \ - GLuint tmp = pread_32(irb, X_TILE(_x, _y)); \ - d = (tmp << 8) | (tmp >> 24); \ -} - -#define TAG(x) intel_XTile_##x##_z24_s8 -#include "depthtmp.h" - -/** - ** 24/8-bit y-tile interleaved depth/stencil functions - ** Note: we're actually reading back combined depth+stencil values. - ** The wrappers in main/depthstencil.c are used to extract the depth - ** and stencil values. - **/ -#define VALUE_TYPE GLuint - -/* Change ZZZS -> SZZZ */ -#define WRITE_DEPTH(_x, _y, d) \ - pwrite_32(irb, Y_TILE(_x, _y), ((d) >> 8) | ((d) << 24)) - -/* Change SZZZ -> ZZZS */ -#define READ_DEPTH( d, _x, _y ) { \ - GLuint tmp = pread_32(irb, Y_TILE(_x, _y)); \ - d = (tmp << 8) | (tmp >> 24); \ -} - -#define TAG(x) intel_YTile_##x##_z24_s8 -#include "depthtmp.h" +/* z24s8 depthbuffer functions. */ +#define INTEL_VALUE_TYPE GLuint +#define INTEL_WRITE_DEPTH(offset, d) pwrite_32(irb, offset, z24s8_to_s8z24(d)) +#define INTEL_READ_DEPTH(offset) s8z24_to_z24s8(pread_32(irb, offset)) +#define INTEL_TAG(name) name##_z24_s8 +#include "intel_depthtmp.h" /** @@ -752,8 +620,21 @@ intel_set_span_functions(struct intel_context *intel, break; } } - else if (rb->_ActualFormat == GL_DEPTH_COMPONENT24 || /* XXX FBO remove */ - rb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT) { + else if (rb->_ActualFormat == GL_DEPTH_COMPONENT24) { + switch (tiling) { + case I915_TILING_NONE: + default: + intelInitDepthPointers_z24(rb); + break; + case I915_TILING_X: + intel_XTile_InitDepthPointers_z24(rb); + break; + case I915_TILING_Y: + intel_YTile_InitDepthPointers_z24(rb); + break; + } + } + else if (rb->_ActualFormat == GL_DEPTH24_STENCIL8_EXT) { switch (tiling) { case I915_TILING_NONE: default: diff --git a/src/mesa/drivers/dri/intel/intel_spantmp.h b/src/mesa/drivers/dri/intel/intel_spantmp.h new file mode 100644 index 0000000000..ead0b1c168 --- /dev/null +++ b/src/mesa/drivers/dri/intel/intel_spantmp.h @@ -0,0 +1,61 @@ +/* + * Copyright © 2009 Intel Corporation + * + * 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 (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 NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS 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: + * Eric Anholt <eric@anholt.net> + * + */ + +/** + * Wrapper around the spantmp.h macrofest to generate spans code for + * all the tiling styles. + */ + +#define SPANTMP_PIXEL_FMT INTEL_PIXEL_FMT +#define SPANTMP_PIXEL_TYPE INTEL_PIXEL_TYPE +#define PUT_VALUE(_x, _y, v) INTEL_WRITE_VALUE(NO_TILE(_x, _y), v) +#define GET_VALUE(_x, _y) INTEL_READ_VALUE(NO_TILE(_x, _y)) +#define TAG(x) INTEL_TAG(intel##x) +#define TAG2(x, y) INTEL_TAG(intel##x)##y +#include "spantmp2.h" + +#define SPANTMP_PIXEL_FMT INTEL_PIXEL_FMT +#define SPANTMP_PIXEL_TYPE INTEL_PIXEL_TYPE +#define PUT_VALUE(_x, _y, v) INTEL_WRITE_VALUE(X_TILE(_x, _y), v) +#define GET_VALUE(_x, _y) INTEL_READ_VALUE(X_TILE(_x, _y)) +#define TAG(x) INTEL_TAG(intel_XTile_##x) +#define TAG2(x, y) INTEL_TAG(intel_XTile_##x)##y +#include "spantmp2.h" + +#define SPANTMP_PIXEL_FMT INTEL_PIXEL_FMT +#define SPANTMP_PIXEL_TYPE INTEL_PIXEL_TYPE +#define PUT_VALUE(_x, _y, v) INTEL_WRITE_VALUE(X_TILE(_x, _y), v) +#define GET_VALUE(_x, _y) INTEL_READ_VALUE(X_TILE(_x, _y)) +#define TAG(x) INTEL_TAG(intel_YTile_##x) +#define TAG2(x, y) INTEL_TAG(intel_YTile_##x)##y +#include "spantmp2.h" + +#undef INTEL_PIXEL_FMT +#undef INTEL_PIXEL_TYPE +#undef INTEL_WRITE_VALUE +#undef INTEL_READ_VALUE +#undef INTEL_TAG diff --git a/src/mesa/drivers/dri/intel/intel_tex_format.c b/src/mesa/drivers/dri/intel/intel_tex_format.c index 2715a540d0..8732354e7a 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_format.c +++ b/src/mesa/drivers/dri/intel/intel_tex_format.c @@ -3,11 +3,15 @@ #include "main/texformat.h" #include "main/enums.h" -/* It works out that this function is fine for all the supported + +/** + * Choose hardware texture format given the user's glTexImage parameters. + * + * It works out that this function is fine for all the supported * hardware. However, there is still a need to map the formats onto * hardware descriptors. - */ -/* Note that the i915 can actually support many more formats than + * + * Note that the i915 can actually support many more formats than * these if we take the step of simply swizzling the colors * immediately after sampling... */ @@ -18,6 +22,11 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat, struct intel_context *intel = intel_context(ctx); const GLboolean do32bpt = (intel->ctx.Visual.rgbBits >= 24); +#if 0 + printf("%s intFmt=0x%x format=0x%x type=0x%x\n", + __FUNCTION__, internalFormat, format, type); +#endif + switch (internalFormat) { case 4: case GL_RGBA: @@ -165,6 +174,10 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat, case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: return &_mesa_texformat_srgb_dxt1; + + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + return &_mesa_texformat_dudv8; #endif default: diff --git a/src/mesa/drivers/dri/intel/intel_tex_image.c b/src/mesa/drivers/dri/intel/intel_tex_image.c index 866022d0ce..943636c37b 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_image.c +++ b/src/mesa/drivers/dri/intel/intel_tex_image.c @@ -62,7 +62,8 @@ logbase2(int n) static void guess_and_alloc_mipmap_tree(struct intel_context *intel, struct intel_texture_object *intelObj, - struct intel_texture_image *intelImage) + struct intel_texture_image *intelImage, + GLboolean expect_accelerated_upload) { GLuint firstLevel; GLuint lastLevel; @@ -136,7 +137,8 @@ guess_and_alloc_mipmap_tree(struct intel_context *intel, height, depth, intelImage->base.TexFormat->TexelBytes, - comp_byte); + comp_byte, + expect_accelerated_upload); DBG("%s - success\n", __FUNCTION__); } @@ -385,7 +387,7 @@ intelTexImage(GLcontext * ctx, } if (!intelObj->mt) { - guess_and_alloc_mipmap_tree(intel, intelObj, intelImage); + guess_and_alloc_mipmap_tree(intel, intelObj, intelImage, pixels == NULL); if (!intelObj->mt) { DBG("guess_and_alloc_mipmap_tree: failed\n"); } @@ -415,7 +417,7 @@ intelTexImage(GLcontext * ctx, level, level, width, height, depth, intelImage->base.TexFormat->TexelBytes, - comp_byte); + comp_byte, pixels == NULL); } @@ -753,16 +755,21 @@ intelSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv) _mesa_lock_texture(&intel->ctx, texObj); + texImage = _mesa_get_tex_image(&intel->ctx, texObj, target, level); + intelImage = intel_texture_image(texImage); + + if (intelImage->mt) { + intel_miptree_release(intel, &intelImage->mt); + assert(!texImage->Data); + } if (intelObj->mt) intel_miptree_release(intel, &intelObj->mt); intelObj->mt = mt; - texImage = _mesa_get_tex_image(&intel->ctx, texObj, target, level); _mesa_init_teximage_fields(&intel->ctx, target, texImage, rb->region->width, rb->region->height, 1, 0, internalFormat); - intelImage = intel_texture_image(texImage); intelImage->face = target_to_face(target); intelImage->level = level; texImage->TexFormat = intelChooseTextureFormat(&intel->ctx, internalFormat, diff --git a/src/mesa/drivers/dri/intel/intel_tex_validate.c b/src/mesa/drivers/dri/intel/intel_tex_validate.c index 820683d42e..05a375e1f3 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_validate.c +++ b/src/mesa/drivers/dri/intel/intel_tex_validate.c @@ -206,7 +206,8 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit) firstImage->base.Height, firstImage->base.Depth, cpp, - comp_byte); + comp_byte, + GL_TRUE); } /* Pull in any images not in the object's tree: diff --git a/src/mesa/drivers/dri/mach64/mach64_screen.c b/src/mesa/drivers/dri/mach64/mach64_screen.c index 43e59594dd..6440027ca4 100644 --- a/src/mesa/drivers/dri/mach64/mach64_screen.c +++ b/src/mesa/drivers/dri/mach64/mach64_screen.c @@ -374,7 +374,7 @@ mach64CreateBuffer( __DRIscreenPrivate *driScrnPriv, static void mach64DestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } diff --git a/src/mesa/drivers/dri/mga/mga_texstate.c b/src/mesa/drivers/dri/mga/mga_texstate.c index d4c5b6fd97..ad765d1dd7 100644 --- a/src/mesa/drivers/dri/mga/mga_texstate.c +++ b/src/mesa/drivers/dri/mga/mga_texstate.c @@ -206,8 +206,8 @@ static void mgaUpdateTextureEnvG200( GLcontext *ctx, GLuint unit ) mgaTextureObjectPtr t = (mgaTextureObjectPtr) tObj->DriverData; GLenum format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat; - if (tObj != ctx->Texture.Unit[0].Current2D && - tObj != ctx->Texture.Unit[0].CurrentRect) + if (tObj != ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX] && + tObj != ctx->Texture.Unit[0].CurrentTex[TEXTURE_RECT_INDEX]) return; @@ -635,8 +635,8 @@ static void mgaUpdateTextureEnvG400( GLcontext *ctx, GLuint unit ) mgaTextureObjectPtr t = (mgaTextureObjectPtr) tObj->DriverData; GLenum format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat; - if (tObj != ctx->Texture.Unit[source].Current2D && - tObj != ctx->Texture.Unit[source].CurrentRect) + if (tObj != ctx->Texture.Unit[source].CurrentTex[TEXTURE_2D_INDEX] && + tObj != ctx->Texture.Unit[source].CurrentTex[TEXTURE_RECT_INDEX]) return; switch (ctx->Texture.Unit[source].EnvMode) { diff --git a/src/mesa/drivers/dri/mga/mga_xmesa.c b/src/mesa/drivers/dri/mga/mga_xmesa.c index 926534d6df..0dc76fea50 100644 --- a/src/mesa/drivers/dri/mga/mga_xmesa.c +++ b/src/mesa/drivers/dri/mga/mga_xmesa.c @@ -816,7 +816,7 @@ mgaCreateBuffer( __DRIscreenPrivate *driScrnPriv, static void mgaDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } static void diff --git a/src/mesa/drivers/dri/mga/mgapixel.c b/src/mesa/drivers/dri/mga/mgapixel.c index 9f90047ba5..977dfa0b76 100644 --- a/src/mesa/drivers/dri/mga/mgapixel.c +++ b/src/mesa/drivers/dri/mga/mgapixel.c @@ -133,7 +133,7 @@ check_color_per_fragment_ops( const GLcontext *ctx ) ctx->Depth.Test || ctx->Fog.Enabled || ctx->Scissor.Enabled || - ctx->Stencil.Enabled || + ctx->Stencil._Enabled || !ctx->Color.ColorMask[0] || !ctx->Color.ColorMask[1] || !ctx->Color.ColorMask[2] || diff --git a/src/mesa/drivers/dri/r128/r128_screen.c b/src/mesa/drivers/dri/r128/r128_screen.c index 7cda4ca5d3..f5bcc2f290 100644 --- a/src/mesa/drivers/dri/r128/r128_screen.c +++ b/src/mesa/drivers/dri/r128/r128_screen.c @@ -353,7 +353,7 @@ r128CreateBuffer( __DRIscreenPrivate *driScrnPriv, static void r128DestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } diff --git a/src/mesa/drivers/dri/r200/r200_pixel.c b/src/mesa/drivers/dri/r200/r200_pixel.c index a6c655866a..354daef07f 100644 --- a/src/mesa/drivers/dri/r200/r200_pixel.c +++ b/src/mesa/drivers/dri/r200/r200_pixel.c @@ -87,7 +87,7 @@ check_color_per_fragment_ops( const GLcontext *ctx ) ctx->Depth.Test || ctx->Fog.Enabled || ctx->Scissor.Enabled || - ctx->Stencil.Enabled || + ctx->Stencil._Enabled || !ctx->Color.ColorMask[0] || !ctx->Color.ColorMask[1] || !ctx->Color.ColorMask[2] || diff --git a/src/mesa/drivers/dri/r200/r200_texstate.c b/src/mesa/drivers/dri/r200/r200_texstate.c index 058e0ee5be..e9cee1a637 100644 --- a/src/mesa/drivers/dri/r200/r200_texstate.c +++ b/src/mesa/drivers/dri/r200/r200_texstate.c @@ -1234,26 +1234,26 @@ static GLboolean r200_validate_texgen( GLcontext *ctx, GLuint unit ) fprintf(stderr, "%s unit %d\n", __FUNCTION__, unit); if (texUnit->TexGenEnabled & S_BIT) { - mode = texUnit->GenModeS; + mode = texUnit->GenS.Mode; } else { tgcm |= R200_TEXGEN_COMP_S << (unit * 4); } if (texUnit->TexGenEnabled & T_BIT) { - if (texUnit->GenModeT != mode) + if (texUnit->GenT.Mode != mode) mixed_fallback = GL_TRUE; } else { tgcm |= R200_TEXGEN_COMP_T << (unit * 4); } if (texUnit->TexGenEnabled & R_BIT) { - if (texUnit->GenModeR != mode) + if (texUnit->GenR.Mode != mode) mixed_fallback = GL_TRUE; } else { tgcm |= R200_TEXGEN_COMP_R << (unit * 4); } if (texUnit->TexGenEnabled & Q_BIT) { - if (texUnit->GenModeQ != mode) + if (texUnit->GenQ.Mode != mode) mixed_fallback = GL_TRUE; } else { tgcm |= R200_TEXGEN_COMP_Q << (unit * 4); @@ -1262,8 +1262,8 @@ static GLboolean r200_validate_texgen( GLcontext *ctx, GLuint unit ) if (mixed_fallback) { if (R200_DEBUG & DEBUG_FALLBACKS) fprintf(stderr, "fallback mixed texgen, 0x%x (0x%x 0x%x 0x%x 0x%x)\n", - texUnit->TexGenEnabled, texUnit->GenModeS, texUnit->GenModeT, - texUnit->GenModeR, texUnit->GenModeQ); + texUnit->TexGenEnabled, texUnit->GenS.Mode, texUnit->GenT.Mode, + texUnit->GenR.Mode, texUnit->GenQ.Mode); return GL_FALSE; } @@ -1281,8 +1281,10 @@ static GLboolean r200_validate_texgen( GLcontext *ctx, GLuint unit ) switch (mode) { case GL_OBJECT_LINEAR: { GLuint needtgenable = r200_need_dis_texgen( texUnit->TexGenEnabled, - texUnit->ObjectPlaneS, texUnit->ObjectPlaneT, - texUnit->ObjectPlaneR, texUnit->ObjectPlaneQ ); + texUnit->GenS.ObjectPlane, + texUnit->GenT.ObjectPlane, + texUnit->GenR.ObjectPlane, + texUnit->GenQ.ObjectPlane ); if (needtgenable & (S_BIT | T_BIT)) { if (R200_DEBUG & DEBUG_FALLBACKS) fprintf(stderr, "fallback mixed texgen / obj plane, 0x%x\n", @@ -1298,17 +1300,19 @@ static GLboolean r200_validate_texgen( GLcontext *ctx, GLuint unit ) tgi |= R200_TEXGEN_INPUT_OBJ << inputshift; set_texgen_matrix( rmesa, unit, - (texUnit->TexGenEnabled & S_BIT) ? texUnit->ObjectPlaneS : I, - (texUnit->TexGenEnabled & T_BIT) ? texUnit->ObjectPlaneT : I + 4, - (texUnit->TexGenEnabled & R_BIT) ? texUnit->ObjectPlaneR : I + 8, - (texUnit->TexGenEnabled & Q_BIT) ? texUnit->ObjectPlaneQ : I + 12); + (texUnit->TexGenEnabled & S_BIT) ? texUnit->GenS.ObjectPlane : I, + (texUnit->TexGenEnabled & T_BIT) ? texUnit->GenT.ObjectPlane : I + 4, + (texUnit->TexGenEnabled & R_BIT) ? texUnit->GenR.ObjectPlane : I + 8, + (texUnit->TexGenEnabled & Q_BIT) ? texUnit->GenQ.ObjectPlane : I + 12); } break; case GL_EYE_LINEAR: { GLuint needtgenable = r200_need_dis_texgen( texUnit->TexGenEnabled, - texUnit->EyePlaneS, texUnit->EyePlaneT, - texUnit->EyePlaneR, texUnit->EyePlaneQ ); + texUnit->GenS.EyePlane, + texUnit->GenT.EyePlane, + texUnit->GenR.EyePlane, + texUnit->GenQ.EyePlane ); if (needtgenable & (S_BIT | T_BIT)) { if (R200_DEBUG & DEBUG_FALLBACKS) fprintf(stderr, "fallback mixed texgen / eye plane, 0x%x\n", @@ -1323,10 +1327,10 @@ static GLboolean r200_validate_texgen( GLcontext *ctx, GLuint unit ) } tgi |= R200_TEXGEN_INPUT_EYE << inputshift; set_texgen_matrix( rmesa, unit, - (texUnit->TexGenEnabled & S_BIT) ? texUnit->EyePlaneS : I, - (texUnit->TexGenEnabled & T_BIT) ? texUnit->EyePlaneT : I + 4, - (texUnit->TexGenEnabled & R_BIT) ? texUnit->EyePlaneR : I + 8, - (texUnit->TexGenEnabled & Q_BIT) ? texUnit->EyePlaneQ : I + 12); + (texUnit->TexGenEnabled & S_BIT) ? texUnit->GenS.EyePlane : I, + (texUnit->TexGenEnabled & T_BIT) ? texUnit->GenT.EyePlane : I + 4, + (texUnit->TexGenEnabled & R_BIT) ? texUnit->GenR.EyePlane : I + 8, + (texUnit->TexGenEnabled & Q_BIT) ? texUnit->GenQ.EyePlane : I + 12); } break; @@ -1362,7 +1366,7 @@ static GLboolean r200_validate_texgen( GLcontext *ctx, GLuint unit ) */ if (R200_DEBUG & DEBUG_FALLBACKS) fprintf(stderr, "fallback unsupported texgen, %d\n", - texUnit->GenModeS); + texUnit->GenS.Mode); return GL_FALSE; } diff --git a/src/mesa/drivers/dri/r200/r200_vertprog.c b/src/mesa/drivers/dri/r200/r200_vertprog.c index 888f91db73..aadd1443ad 100644 --- a/src/mesa/drivers/dri/r200/r200_vertprog.c +++ b/src/mesa/drivers/dri/r200/r200_vertprog.c @@ -202,7 +202,7 @@ static unsigned long t_dst(struct prog_dst_register *dst) } } -static unsigned long t_src_class(enum register_file file) +static unsigned long t_src_class(gl_register_file file) { switch(file){ diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.c index 488fd44740..5bae37e1b1 100644 --- a/src/mesa/drivers/dri/r300/r300_context.c +++ b/src/mesa/drivers/dri/r300/r300_context.c @@ -82,7 +82,7 @@ int hw_tcl_on = 1; #define need_GL_EXT_blend_equation_separate #define need_GL_EXT_blend_func_separate #define need_GL_EXT_blend_minmax -//#define need_GL_EXT_fog_coord +#define need_GL_EXT_fog_coord #define need_GL_EXT_gpu_program_parameters #define need_GL_EXT_secondary_color #define need_GL_EXT_stencil_two_side @@ -110,7 +110,7 @@ const struct dri_extension card_extensions[] = { {"GL_EXT_blend_func_separate", GL_EXT_blend_func_separate_functions}, {"GL_EXT_blend_minmax", GL_EXT_blend_minmax_functions}, {"GL_EXT_blend_subtract", NULL}, -// {"GL_EXT_fog_coord", GL_EXT_fog_coord_functions }, + {"GL_EXT_fog_coord", GL_EXT_fog_coord_functions }, {"GL_EXT_gpu_program_parameters", GL_EXT_gpu_program_parameters_functions}, {"GL_EXT_secondary_color", GL_EXT_secondary_color_functions}, {"GL_EXT_shadow_funcs", NULL}, diff --git a/src/mesa/drivers/dri/r300/r300_emit.c b/src/mesa/drivers/dri/r300/r300_emit.c index 1512e906e8..4bf0e7a189 100644 --- a/src/mesa/drivers/dri/r300/r300_emit.c +++ b/src/mesa/drivers/dri/r300/r300_emit.c @@ -177,14 +177,23 @@ GLuint r300VAPOutputCntl0(GLcontext * ctx, GLuint OutputsWritten) GLuint r300VAPOutputCntl1(GLcontext * ctx, GLuint OutputsWritten) { - GLuint i, ret = 0; + GLuint i, ret = 0, first_free_texcoord = 0; for (i = 0; i < ctx->Const.MaxTextureUnits; i++) { if (OutputsWritten & (1 << (VERT_RESULT_TEX0 + i))) { ret |= (4 << (3 * i)); + ++first_free_texcoord; } } + if (OutputsWritten & (1 << VERT_RESULT_FOGC)) { + if (first_free_texcoord > 8) { + fprintf(stderr, "\tout of free texcoords to write fog coord\n"); + _mesa_exit(-1); + } + ret |= 4 << (3 * first_free_texcoord); + } + return ret; } diff --git a/src/mesa/drivers/dri/r300/r300_fragprog.c b/src/mesa/drivers/dri/r300/r300_fragprog.c index 8d030c63fb..32182bb667 100644 --- a/src/mesa/drivers/dri/r300/r300_fragprog.c +++ b/src/mesa/drivers/dri/r300/r300_fragprog.c @@ -356,8 +356,8 @@ static void insert_WPOS_trailer(struct r300_fragment_program_compiler *compiler) static void nqssadce_init(struct nqssadce_state* s) { - s->Outputs[FRAG_RESULT_COLR].Sourced = WRITEMASK_XYZW; - s->Outputs[FRAG_RESULT_DEPR].Sourced = WRITEMASK_W; + s->Outputs[FRAG_RESULT_COLOR].Sourced = WRITEMASK_XYZW; + s->Outputs[FRAG_RESULT_DEPTH].Sourced = WRITEMASK_W; } diff --git a/src/mesa/drivers/dri/r300/r300_reg.h b/src/mesa/drivers/dri/r300/r300_reg.h index 5f344be116..ed552d09bb 100644 --- a/src/mesa/drivers/dri/r300/r300_reg.h +++ b/src/mesa/drivers/dri/r300/r300_reg.h @@ -1224,6 +1224,10 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. #define R500_RS_INST_COL_ADDR_SHIFT 18 #define R500_RS_INST_TEX_ADJ (1 << 25) #define R500_RS_INST_W_CN (1 << 26) +#define R500_RS_INST_TEX_ID(x) ((x) << R500_RS_INST_TEX_ID_SHIFT) +#define R500_RS_INST_TEX_ADDR(x) ((x) << R500_RS_INST_TEX_ADDR_SHIFT) +#define R500_RS_INST_COL_ID(x) ((x) << R500_RS_INST_COL_ID_SHIFT) +#define R500_RS_INST_COL_ADDR(x) ((x) << R500_RS_INST_COL_ADDR_SHIFT) /* These DWORDs control how vertex data is routed into fragment program * registers, after interpolators. @@ -1239,9 +1243,11 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. # define R300_RS_INST_TEX_ID(x) ((x) << 0) # define R300_RS_INST_TEX_CN_WRITE (1 << 3) # define R300_RS_INST_TEX_ADDR_SHIFT 6 +# define R300_RS_INST_TEX_ADDR(x) ((x) << R300_RS_INST_TEX_ADDR_SHIFT) # define R300_RS_INST_COL_ID(x) ((x) << 11) # define R300_RS_INST_COL_CN_WRITE (1 << 14) # define R300_RS_INST_COL_ADDR_SHIFT 17 +# define R300_RS_INST_COL_ADDR(x) ((x) << R300_RS_INST_COL_ADDR_SHIFT) # define R300_RS_INST_TEX_ADJ (1 << 22) # define R300_RS_COL_BIAS_UNUSED_SHIFT 23 diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c index 17e7b5227a..f423029ee6 100644 --- a/src/mesa/drivers/dri/r300/r300_state.c +++ b/src/mesa/drivers/dri/r300/r300_state.c @@ -728,134 +728,6 @@ static void r300ColorMask(GLcontext * ctx, } /* ============================================================= - * Fog - */ -static void r300Fogfv(GLcontext * ctx, GLenum pname, const GLfloat * param) -{ - r300ContextPtr r300 = R300_CONTEXT(ctx); - union { - int i; - float f; - } fogScale, fogStart; - - (void)param; - - fogScale.i = r300->hw.fogp.cmd[R300_FOGP_SCALE]; - fogStart.i = r300->hw.fogp.cmd[R300_FOGP_START]; - - switch (pname) { - case GL_FOG_MODE: - switch (ctx->Fog.Mode) { - case GL_LINEAR: - R300_STATECHANGE(r300, fogs); - r300->hw.fogs.cmd[R300_FOGS_STATE] = - (r300->hw.fogs. - cmd[R300_FOGS_STATE] & ~R300_FG_FOG_BLEND_FN_MASK) | - R300_FG_FOG_BLEND_FN_LINEAR; - - if (ctx->Fog.Start == ctx->Fog.End) { - fogScale.f = -1.0; - fogStart.f = 1.0; - } else { - fogScale.f = - 1.0 / (ctx->Fog.End - ctx->Fog.Start); - fogStart.f = - -ctx->Fog.Start / (ctx->Fog.End - - ctx->Fog.Start); - } - break; - case GL_EXP: - R300_STATECHANGE(r300, fogs); - r300->hw.fogs.cmd[R300_FOGS_STATE] = - (r300->hw.fogs. - cmd[R300_FOGS_STATE] & ~R300_FG_FOG_BLEND_FN_MASK) | - R300_FG_FOG_BLEND_FN_EXP; - fogScale.f = 0.0933 * ctx->Fog.Density; - fogStart.f = 0.0; - break; - case GL_EXP2: - R300_STATECHANGE(r300, fogs); - r300->hw.fogs.cmd[R300_FOGS_STATE] = - (r300->hw.fogs. - cmd[R300_FOGS_STATE] & ~R300_FG_FOG_BLEND_FN_MASK) | - R300_FG_FOG_BLEND_FN_EXP2; - fogScale.f = 0.3 * ctx->Fog.Density; - fogStart.f = 0.0; - break; - default: - return; - } - break; - case GL_FOG_DENSITY: - switch (ctx->Fog.Mode) { - case GL_EXP: - fogScale.f = 0.0933 * ctx->Fog.Density; - fogStart.f = 0.0; - break; - case GL_EXP2: - fogScale.f = 0.3 * ctx->Fog.Density; - fogStart.f = 0.0; - default: - break; - } - break; - case GL_FOG_START: - case GL_FOG_END: - if (ctx->Fog.Mode == GL_LINEAR) { - if (ctx->Fog.Start == ctx->Fog.End) { - fogScale.f = -1.0; - fogStart.f = 1.0; - } else { - fogScale.f = - 1.0 / (ctx->Fog.End - ctx->Fog.Start); - fogStart.f = - -ctx->Fog.Start / (ctx->Fog.End - - ctx->Fog.Start); - } - } - break; - case GL_FOG_COLOR: - R300_STATECHANGE(r300, fogc); - r300->hw.fogc.cmd[R300_FOGC_R] = - (GLuint) (ctx->Fog.Color[0] * 1023.0F) & 0x3FF; - r300->hw.fogc.cmd[R300_FOGC_G] = - (GLuint) (ctx->Fog.Color[1] * 1023.0F) & 0x3FF; - r300->hw.fogc.cmd[R300_FOGC_B] = - (GLuint) (ctx->Fog.Color[2] * 1023.0F) & 0x3FF; - break; - case GL_FOG_COORD_SRC: - break; - default: - return; - } - - if (fogScale.i != r300->hw.fogp.cmd[R300_FOGP_SCALE] || - fogStart.i != r300->hw.fogp.cmd[R300_FOGP_START]) { - R300_STATECHANGE(r300, fogp); - r300->hw.fogp.cmd[R300_FOGP_SCALE] = fogScale.i; - r300->hw.fogp.cmd[R300_FOGP_START] = fogStart.i; - } -} - -static void r300SetFogState(GLcontext * ctx, GLboolean state) -{ - r300ContextPtr r300 = R300_CONTEXT(ctx); - - R300_STATECHANGE(r300, fogs); - if (state) { - r300->hw.fogs.cmd[R300_FOGS_STATE] |= R300_FG_FOG_BLEND_ENABLE; - - r300Fogfv(ctx, GL_FOG_MODE, NULL); - r300Fogfv(ctx, GL_FOG_DENSITY, &ctx->Fog.Density); - r300Fogfv(ctx, GL_FOG_START, &ctx->Fog.Start); - r300Fogfv(ctx, GL_FOG_END, &ctx->Fog.End); - r300Fogfv(ctx, GL_FOG_COLOR, ctx->Fog.Color); - } else { - r300->hw.fogs.cmd[R300_FOGS_STATE] &= ~R300_FG_FOG_BLEND_ENABLE; - } -} - -/* ============================================================= * Point state */ static void r300PointSize(GLcontext * ctx, GLfloat size) @@ -1140,7 +1012,7 @@ r300FetchStateParameter(GLcontext * ctx, case STATE_R300_TEXRECT_FACTOR:{ struct gl_texture_object *t = - ctx->Texture.Unit[state[2]].CurrentRect; + ctx->Texture.Unit[state[2]].CurrentTex[TEXTURE_RECT_INDEX]; if (t && t->Image[0][t->BaseLevel]) { struct gl_texture_image *image = @@ -1531,18 +1403,14 @@ union r300_outputs_written { static void r300SetupRSUnit(GLcontext * ctx) { r300ContextPtr r300 = R300_CONTEXT(ctx); - /* I'm still unsure if these are needed */ - GLuint interp_col[8]; TNLcontext *tnl = TNL_CONTEXT(ctx); struct vertex_buffer *VB = &tnl->vb; union r300_outputs_written OutputsWritten; GLuint InputsRead; int fp_reg, high_rr; - int col_interp_nr; - int rs_tex_count = 0, rs_col_count = 0; - int i, count; - - memset(interp_col, 0, sizeof(interp_col)); + int col_ip, tex_ip; + int rs_tex_count = 0; + int i, count, col_fmt; if (hw_tcl_on) OutputsWritten.vp_outputs = CURRENT_VERTEX_SHADER(ctx)->key.OutputsWritten; @@ -1560,51 +1428,66 @@ static void r300SetupRSUnit(GLcontext * ctx) R300_STATECHANGE(r300, rc); R300_STATECHANGE(r300, rr); - fp_reg = col_interp_nr = high_rr = 0; + fp_reg = col_ip = tex_ip = col_fmt = 0; - r300->hw.rr.cmd[R300_RR_INST_1] = 0; - - if (InputsRead & FRAG_BIT_WPOS) { - for (i = 0; i < ctx->Const.MaxTextureUnits; i++) - if (!(InputsRead & (FRAG_BIT_TEX0 << i))) - break; + r300->hw.rc.cmd[1] = 0; + r300->hw.rc.cmd[2] = 0; + for (i=0; i<R300_RR_CMDSIZE-1; ++i) + r300->hw.rr.cmd[R300_RR_INST_0 + i] = 0; - if (i == ctx->Const.MaxTextureUnits) { - fprintf(stderr, "\tno free texcoord found...\n"); - _mesa_exit(-1); - } + for (i=0; i<R300_RI_CMDSIZE-1; ++i) + r300->hw.ri.cmd[R300_RI_INTERP_0 + i] = 0; - InputsRead |= (FRAG_BIT_TEX0 << i); - InputsRead &= ~FRAG_BIT_WPOS; - } if (InputsRead & FRAG_BIT_COL0) { - count = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->size; - interp_col[0] |= R300_RS_COL_PTR(rs_col_count); - if (count == 3) - interp_col[0] |= R300_RS_COL_FMT(R300_RS_COL_FMT_RGB1); - rs_col_count += count; + if (R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_COL0, _TNL_ATTRIB_COLOR0)) { + count = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->size; + if (count == 4) + col_fmt = R300_RS_COL_FMT_RGBA; + else if (count == 3) + col_fmt = R300_RS_COL_FMT_RGB1; + else + col_fmt = R300_RS_COL_FMT_0001; + + r300->hw.ri.cmd[R300_RI_INTERP_0 + col_ip] = R300_RS_COL_PTR(col_ip) | R300_RS_COL_FMT(col_fmt); + r300->hw.rr.cmd[R300_RR_INST_0 + col_ip] = R300_RS_INST_COL_ID(col_ip) | R300_RS_INST_COL_CN_WRITE | R300_RS_INST_COL_ADDR(fp_reg); + InputsRead &= ~FRAG_BIT_COL0; + ++col_ip; + ++fp_reg; + } else { + WARN_ONCE("fragprog wants col0, vp doesn't provide it\n"); + } } - else - interp_col[0] = R300_RS_COL_FMT(R300_RS_COL_FMT_0001); if (InputsRead & FRAG_BIT_COL1) { - count = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->size; - if (count == 3) - interp_col[1] |= R300_RS_COL_FMT(R300_RS_COL_FMT_RGB0); - interp_col[1] |= R300_RS_COL_PTR(1); - rs_col_count += count; - } - - if (InputsRead & FRAG_BIT_FOGC) { - /* XXX FIX THIS - * Just turn off the bit for now. - * Need to do something similar to the color/texcoord inputs. - */ - InputsRead &= ~FRAG_BIT_FOGC; + if (R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_COL1, _TNL_ATTRIB_COLOR1)) { + count = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->size; + if (count == 4) + col_fmt = R300_RS_COL_FMT_RGBA; + else if (count == 3) + col_fmt = R300_RS_COL_FMT_RGB1; + else + col_fmt = R300_RS_COL_FMT_0001; + + r300->hw.ri.cmd[R300_RI_INTERP_0 + col_ip] = R300_RS_COL_PTR(col_ip) | R300_RS_COL_FMT(col_fmt); + r300->hw.rr.cmd[R300_RR_INST_0 + col_ip] = R300_RS_INST_COL_ID(col_ip) | R300_RS_INST_COL_CN_WRITE | R300_RS_INST_COL_ADDR(fp_reg); + InputsRead &= ~FRAG_BIT_COL1; + ++col_ip; + ++fp_reg; + } else { + WARN_ONCE("fragprog wants col1, vp doesn't provide it\n"); + } } for (i = 0; i < ctx->Const.MaxTextureUnits; i++) { + if (! ( InputsRead & FRAG_BIT_TEX(i) ) ) + continue; + + if (!R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_TEX0 + i, _TNL_ATTRIB_TEX(i))) { + WARN_ONCE("fragprog wants coords for tex%d, vp doesn't provide them!\n", i); + continue; + } + int swiz; /* with TCL we always seem to route 4 components */ @@ -1613,7 +1496,6 @@ static void r300SetupRSUnit(GLcontext * ctx) else count = VB->AttribPtr[_TNL_ATTRIB_TEX(i)]->size; - r300->hw.ri.cmd[R300_RI_INTERP_0 + i] = interp_col[i] | rs_tex_count; switch(count) { case 4: swiz = R300_RS_SEL_S(0) | R300_RS_SEL_T(1) | R300_RS_SEL_R(2) | R300_RS_SEL_Q(3); break; case 3: swiz = R300_RS_SEL_S(0) | R300_RS_SEL_T(1) | R300_RS_SEL_R(2) | R300_RS_SEL_Q(R300_RS_SEL_K1); break; @@ -1622,63 +1504,48 @@ static void r300SetupRSUnit(GLcontext * ctx) case 2: swiz = R300_RS_SEL_S(0) | R300_RS_SEL_T(1) | R300_RS_SEL_R(R300_RS_SEL_K0) | R300_RS_SEL_Q(R300_RS_SEL_K1); break; }; - r300->hw.ri.cmd[R300_RI_INTERP_0 + i] |= swiz; - - r300->hw.rr.cmd[R300_RR_INST_0 + fp_reg] = 0; - if (InputsRead & (FRAG_BIT_TEX0 << i)) { - - rs_tex_count += count; - - //assert(r300->state.texture.tc_count != 0); - r300->hw.rr.cmd[R300_RR_INST_0 + fp_reg] |= R300_RS_INST_TEX_CN_WRITE | i /* source INTERP */ - | (fp_reg << R300_RS_INST_TEX_ADDR_SHIFT); - high_rr = fp_reg; - - /* Passing invalid data here can lock the GPU. */ - if (R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_TEX0 + i, _TNL_ATTRIB_TEX(i))) { - InputsRead &= ~(FRAG_BIT_TEX0 << i); - fp_reg++; - } else { - WARN_ONCE("fragprog wants coords for tex%d, vp doesn't provide them!\n", i); - } - } + r300->hw.ri.cmd[R300_RI_INTERP_0 + tex_ip] |= swiz | R300_RS_TEX_PTR(rs_tex_count); + r300->hw.rr.cmd[R300_RR_INST_0 + tex_ip] |= R300_RS_INST_TEX_ID(tex_ip) | R300_RS_INST_TEX_CN_WRITE | R300_RS_INST_TEX_ADDR(fp_reg); + InputsRead &= ~(FRAG_BIT_TEX0 << i); + rs_tex_count += count; + ++tex_ip; + ++fp_reg; } - if (InputsRead & FRAG_BIT_COL0) { - if (R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_COL0, _TNL_ATTRIB_COLOR0)) { - r300->hw.rr.cmd[R300_RR_INST_0] |= R300_RS_INST_COL_ID(0) | R300_RS_INST_COL_CN_WRITE | (fp_reg++ << R300_RS_INST_COL_ADDR_SHIFT); - InputsRead &= ~FRAG_BIT_COL0; - col_interp_nr++; + if (InputsRead & FRAG_BIT_FOGC) { + if (R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_FOGC, _TNL_ATTRIB_FOG)) { + r300->hw.ri.cmd[R300_RI_INTERP_0 + tex_ip] |= R300_RS_SEL_S(0) | R300_RS_SEL_T(1) | R300_RS_SEL_R(2) | R300_RS_SEL_Q(3) | R300_RS_TEX_PTR(rs_tex_count); + r300->hw.rr.cmd[R300_RR_INST_0 + tex_ip] |= R300_RS_INST_TEX_ID(tex_ip) | R300_RS_INST_TEX_CN_WRITE | R300_RS_INST_TEX_ADDR(fp_reg); + InputsRead &= ~FRAG_BIT_FOGC; + rs_tex_count += 4; + ++tex_ip; + ++fp_reg; } else { - WARN_ONCE("fragprog wants col0, vp doesn't provide it\n"); + WARN_ONCE("fragprog wants fogc, vp doesn't provide it\n"); } } - if (InputsRead & FRAG_BIT_COL1) { - if (R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_COL1, _TNL_ATTRIB_COLOR1)) { - r300->hw.rr.cmd[R300_RR_INST_1] |= R300_RS_INST_COL_ID(1) | R300_RS_INST_COL_CN_WRITE | (fp_reg++ << R300_RS_INST_COL_ADDR_SHIFT); - InputsRead &= ~FRAG_BIT_COL1; - if (high_rr < 1) - high_rr = 1; - col_interp_nr++; - } else { - WARN_ONCE("fragprog wants col1, vp doesn't provide it\n"); - } + if (InputsRead & FRAG_BIT_WPOS) { + r300->hw.ri.cmd[R300_RI_INTERP_0 + tex_ip] |= R300_RS_SEL_S(0) | R300_RS_SEL_T(1) | R300_RS_SEL_R(2) | R300_RS_SEL_Q(3) | R300_RS_TEX_PTR(rs_tex_count); + r300->hw.rr.cmd[R300_RR_INST_0 + tex_ip] |= R300_RS_INST_TEX_ID(tex_ip) | R300_RS_INST_TEX_CN_WRITE | R300_RS_INST_TEX_ADDR(fp_reg); + InputsRead &= ~FRAG_BIT_WPOS; + rs_tex_count += 4; + ++tex_ip; + ++fp_reg; } + InputsRead &= ~FRAG_BIT_WPOS; - /* Need at least one. This might still lock as the values are undefined... */ - if (rs_tex_count == 0 && col_interp_nr == 0) { - r300->hw.rr.cmd[R300_RR_INST_0] |= R300_RS_INST_COL_ID(0) | R300_RS_INST_COL_CN_WRITE | (fp_reg++ << R300_RS_INST_COL_ADDR_SHIFT); - col_interp_nr++; + /* Setup default color if no color or tex was set */ + if (rs_tex_count == 0 && col_ip == 0) { + r300->hw.rr.cmd[R300_RR_INST_0] = R300_RS_INST_COL_ID(0) | R300_RS_INST_COL_CN_WRITE | R300_RS_INST_COL_ADDR(0) | R300_RS_COL_FMT(R300_RS_COL_FMT_0001); + ++col_ip; } - r300->hw.rc.cmd[1] = 0 | (rs_tex_count << R300_IT_COUNT_SHIFT) - | (col_interp_nr << R300_IC_COUNT_SHIFT) - | R300_HIRES_EN; + high_rr = (col_ip > tex_ip) ? col_ip : tex_ip; + r300->hw.rc.cmd[1] |= (rs_tex_count << R300_IT_COUNT_SHIFT) | (col_ip << R300_IC_COUNT_SHIFT) | R300_HIRES_EN; + r300->hw.rc.cmd[2] |= high_rr - 1; - assert(high_rr >= 0); - r300->hw.rr.cmd[R300_RR_CMD_0] = cmdpacket0(r300->radeon.radeonScreen, R300_RS_INST_0, high_rr + 1); - r300->hw.rc.cmd[2] = high_rr; + r300->hw.rr.cmd[R300_RR_CMD_0] = cmdpacket0(r300->radeon.radeonScreen, R300_RS_INST_0, high_rr); if (InputsRead) WARN_ONCE("Don't know how to satisfy InputsRead=0x%08x\n", InputsRead); @@ -1687,18 +1554,15 @@ static void r300SetupRSUnit(GLcontext * ctx) static void r500SetupRSUnit(GLcontext * ctx) { r300ContextPtr r300 = R300_CONTEXT(ctx); - /* I'm still unsure if these are needed */ - GLuint interp_col[8]; - union r300_outputs_written OutputsWritten; TNLcontext *tnl = TNL_CONTEXT(ctx); struct vertex_buffer *VB = &tnl->vb; + union r300_outputs_written OutputsWritten; GLuint InputsRead; int fp_reg, high_rr; - int rs_col_count = 0; - int in_texcoords, col_interp_nr; - int i, count; + int col_ip, tex_ip; + int rs_tex_count = 0; + int i, count, col_fmt; - memset(interp_col, 0, sizeof(interp_col)); if (hw_tcl_on) OutputsWritten.vp_outputs = CURRENT_VERTEX_SHADER(ctx)->key.OutputsWritten; else @@ -1715,130 +1579,151 @@ static void r500SetupRSUnit(GLcontext * ctx) R300_STATECHANGE(r300, rc); R300_STATECHANGE(r300, rr); - fp_reg = col_interp_nr = high_rr = in_texcoords = 0; - - r300->hw.rr.cmd[R300_RR_INST_1] = 0; + fp_reg = col_ip = tex_ip = col_fmt = 0; - if (InputsRead & FRAG_BIT_WPOS) { - for (i = 0; i < ctx->Const.MaxTextureUnits; i++) - if (!(InputsRead & (FRAG_BIT_TEX0 << i))) - break; + r300->hw.rc.cmd[1] = 0; + r300->hw.rc.cmd[2] = 0; + for (i=0; i<R300_RR_CMDSIZE-1; ++i) + r300->hw.rr.cmd[R300_RR_INST_0 + i] = 0; - if (i == ctx->Const.MaxTextureUnits) { - fprintf(stderr, "\tno free texcoord found...\n"); - _mesa_exit(-1); - } + for (i=0; i<R500_RI_CMDSIZE-1; ++i) + r300->hw.ri.cmd[R300_RI_INTERP_0 + i] = 0; - InputsRead |= (FRAG_BIT_TEX0 << i); - InputsRead &= ~FRAG_BIT_WPOS; - } if (InputsRead & FRAG_BIT_COL0) { - count = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->size; - interp_col[0] |= R500_RS_COL_PTR(rs_col_count); - if (count == 3) - interp_col[0] |= R500_RS_COL_FMT(R300_RS_COL_FMT_RGB1); - rs_col_count += count; + if (R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_COL0, _TNL_ATTRIB_COLOR0)) { + count = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->size; + if (count == 4) + col_fmt = R300_RS_COL_FMT_RGBA; + else if (count == 3) + col_fmt = R300_RS_COL_FMT_RGB1; + else + col_fmt = R300_RS_COL_FMT_0001; + + r300->hw.ri.cmd[R300_RI_INTERP_0 + col_ip] = R500_RS_COL_PTR(col_ip) | R500_RS_COL_FMT(col_fmt); + r300->hw.rr.cmd[R300_RR_INST_0 + col_ip] = R500_RS_INST_COL_ID(col_ip) | R500_RS_INST_COL_CN_WRITE | R500_RS_INST_COL_ADDR(fp_reg); + InputsRead &= ~FRAG_BIT_COL0; + ++col_ip; + ++fp_reg; + } else { + WARN_ONCE("fragprog wants col0, vp doesn't provide it\n"); + } } - else - interp_col[0] = R500_RS_COL_FMT(R300_RS_COL_FMT_0001); if (InputsRead & FRAG_BIT_COL1) { - count = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->size; - interp_col[1] |= R500_RS_COL_PTR(1); - if (count == 3) - interp_col[1] |= R500_RS_COL_FMT(R300_RS_COL_FMT_RGB0); - rs_col_count += count; + if (R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_COL1, _TNL_ATTRIB_COLOR1)) { + count = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->size; + if (count == 4) + col_fmt = R300_RS_COL_FMT_RGBA; + else if (count == 3) + col_fmt = R300_RS_COL_FMT_RGB1; + else + col_fmt = R300_RS_COL_FMT_0001; + + r300->hw.ri.cmd[R300_RI_INTERP_0 + col_ip] = R500_RS_COL_PTR(col_ip) | R500_RS_COL_FMT(col_fmt); + r300->hw.rr.cmd[R300_RR_INST_0 + col_ip] = R500_RS_INST_COL_ID(col_ip) | R500_RS_INST_COL_CN_WRITE | R500_RS_INST_COL_ADDR(fp_reg); + InputsRead &= ~FRAG_BIT_COL1; + ++col_ip; + ++fp_reg; + } else { + WARN_ONCE("fragprog wants col1, vp doesn't provide it\n"); + } } + for (i = 0; i < ctx->Const.MaxTextureUnits; i++) { - GLuint swiz = 0; + if (! ( InputsRead & FRAG_BIT_TEX(i) ) ) + continue; - /* with TCL we always seem to route 4 components */ - if (InputsRead & (FRAG_BIT_TEX0 << i)) { - - if (hw_tcl_on) - count = 4; - else - count = VB->AttribPtr[_TNL_ATTRIB_TEX(i)]->size; - - /* always have on texcoord */ - swiz |= in_texcoords++ << R500_RS_IP_TEX_PTR_S_SHIFT; - if (count >= 2) - swiz |= in_texcoords++ << R500_RS_IP_TEX_PTR_T_SHIFT; - else - swiz |= R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_T_SHIFT; - - if (count >= 3) - swiz |= in_texcoords++ << R500_RS_IP_TEX_PTR_R_SHIFT; - else - swiz |= R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_R_SHIFT; - - if (count == 4) - swiz |= in_texcoords++ << R500_RS_IP_TEX_PTR_Q_SHIFT; - else - swiz |= R500_RS_IP_PTR_K1 << R500_RS_IP_TEX_PTR_Q_SHIFT; - - } else - swiz = (R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_S_SHIFT) | - (R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_T_SHIFT) | - (R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_R_SHIFT) | - (R500_RS_IP_PTR_K1 << R500_RS_IP_TEX_PTR_Q_SHIFT); - - r300->hw.ri.cmd[R300_RI_INTERP_0 + i] = interp_col[i] | swiz; - - r300->hw.rr.cmd[R300_RR_INST_0 + fp_reg] = 0; - if (InputsRead & (FRAG_BIT_TEX0 << i)) { - //assert(r300->state.texture.tc_count != 0); - r300->hw.rr.cmd[R300_RR_INST_0 + fp_reg] |= R500_RS_INST_TEX_CN_WRITE | i /* source INTERP */ - | (fp_reg << R500_RS_INST_TEX_ADDR_SHIFT); - high_rr = fp_reg; - - /* Passing invalid data here can lock the GPU. */ - if (R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_TEX0 + i, _TNL_ATTRIB_TEX(i))) { - InputsRead &= ~(FRAG_BIT_TEX0 << i); - fp_reg++; - } else { - WARN_ONCE("fragprog wants coords for tex%d, vp doesn't provide them!\n", i); - } + if (!R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_TEX0 + i, _TNL_ATTRIB_TEX(i))) { + WARN_ONCE("fragprog wants coords for tex%d, vp doesn't provide them!\n", i); + continue; } - } - if (InputsRead & FRAG_BIT_COL0) { - if (R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_COL0, _TNL_ATTRIB_COLOR0)) { - r300->hw.rr.cmd[R300_RR_INST_0] |= R500_RS_INST_COL_CN_WRITE | (fp_reg++ << R500_RS_INST_COL_ADDR_SHIFT); - InputsRead &= ~FRAG_BIT_COL0; - col_interp_nr++; + int swiz = 0; + + /* with TCL we always seem to route 4 components */ + if (hw_tcl_on) + count = 4; + else + count = VB->AttribPtr[_TNL_ATTRIB_TEX(i)]->size; + + if (count == 4) { + swiz |= (rs_tex_count + 0) << R500_RS_IP_TEX_PTR_S_SHIFT; + swiz |= (rs_tex_count + 1) << R500_RS_IP_TEX_PTR_T_SHIFT; + swiz |= (rs_tex_count + 2) << R500_RS_IP_TEX_PTR_R_SHIFT; + swiz |= (rs_tex_count + 3) << R500_RS_IP_TEX_PTR_Q_SHIFT; + } else if (count == 3) { + swiz |= (rs_tex_count + 0) << R500_RS_IP_TEX_PTR_S_SHIFT; + swiz |= (rs_tex_count + 1) << R500_RS_IP_TEX_PTR_T_SHIFT; + swiz |= (rs_tex_count + 2) << R500_RS_IP_TEX_PTR_R_SHIFT; + swiz |= R500_RS_IP_PTR_K1 << R500_RS_IP_TEX_PTR_Q_SHIFT; + } else if (count == 2) { + swiz |= (rs_tex_count + 0) << R500_RS_IP_TEX_PTR_S_SHIFT; + swiz |= (rs_tex_count + 1) << R500_RS_IP_TEX_PTR_T_SHIFT; + swiz |= R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_R_SHIFT; + swiz |= R500_RS_IP_PTR_K1 << R500_RS_IP_TEX_PTR_Q_SHIFT; + } else if (count == 1) { + swiz |= (rs_tex_count + 0) << R500_RS_IP_TEX_PTR_S_SHIFT; + swiz |= R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_T_SHIFT; + swiz |= R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_R_SHIFT; + swiz |= R500_RS_IP_PTR_K1 << R500_RS_IP_TEX_PTR_Q_SHIFT; } else { - WARN_ONCE("fragprog wants col0, vp doesn't provide it\n"); + swiz |= R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_S_SHIFT; + swiz |= R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_T_SHIFT; + swiz |= R500_RS_IP_PTR_K0 << R500_RS_IP_TEX_PTR_R_SHIFT; + swiz |= R500_RS_IP_PTR_K1 << R500_RS_IP_TEX_PTR_Q_SHIFT; } + + r300->hw.ri.cmd[R300_RI_INTERP_0 + tex_ip] |= swiz; + r300->hw.rr.cmd[R300_RR_INST_0 + tex_ip] |= R500_RS_INST_TEX_ID(tex_ip) | R500_RS_INST_TEX_CN_WRITE | R500_RS_INST_TEX_ADDR(fp_reg); + InputsRead &= ~(FRAG_BIT_TEX0 << i); + rs_tex_count += count; + ++tex_ip; + ++fp_reg; } - if (InputsRead & FRAG_BIT_COL1) { - if (R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_COL1, _TNL_ATTRIB_COLOR1)) { - r300->hw.rr.cmd[R300_RR_INST_1] |= (1 << 12) | R500_RS_INST_COL_CN_WRITE | (fp_reg++ << R500_RS_INST_COL_ADDR_SHIFT); - InputsRead &= ~FRAG_BIT_COL1; - if (high_rr < 1) - high_rr = 1; - col_interp_nr++; + if (InputsRead & FRAG_BIT_FOGC) { + if (R300_OUTPUTS_WRITTEN_TEST(OutputsWritten, VERT_RESULT_FOGC, _TNL_ATTRIB_FOG)) { + r300->hw.ri.cmd[R300_RI_INTERP_0 + tex_ip] |= ((rs_tex_count + 0) << R500_RS_IP_TEX_PTR_S_SHIFT) | + ((rs_tex_count + 1) << R500_RS_IP_TEX_PTR_T_SHIFT) | + ((rs_tex_count + 2) << R500_RS_IP_TEX_PTR_R_SHIFT) | + ((rs_tex_count + 3) << R500_RS_IP_TEX_PTR_Q_SHIFT); + + r300->hw.rr.cmd[R300_RR_INST_0 + tex_ip] |= R500_RS_INST_TEX_ID(tex_ip) | R500_RS_INST_TEX_CN_WRITE | R500_RS_INST_TEX_ADDR(fp_reg); + InputsRead &= ~FRAG_BIT_FOGC; + rs_tex_count += 4; + ++tex_ip; + ++fp_reg; } else { - WARN_ONCE("fragprog wants col1, vp doesn't provide it\n"); + WARN_ONCE("fragprog wants fogc, vp doesn't provide it\n"); } } - /* Need at least one. This might still lock as the values are undefined... */ - if (in_texcoords == 0 && col_interp_nr == 0) { - r300->hw.rr.cmd[R300_RR_INST_0] |= 0 | R500_RS_INST_COL_CN_WRITE | (fp_reg++ << R500_RS_INST_COL_ADDR_SHIFT); - col_interp_nr++; + if (InputsRead & FRAG_BIT_WPOS) { + r300->hw.ri.cmd[R300_RI_INTERP_0 + tex_ip] |= ((rs_tex_count + 0) << R500_RS_IP_TEX_PTR_S_SHIFT) | + ((rs_tex_count + 1) << R500_RS_IP_TEX_PTR_T_SHIFT) | + ((rs_tex_count + 2) << R500_RS_IP_TEX_PTR_R_SHIFT) | + ((rs_tex_count + 3) << R500_RS_IP_TEX_PTR_Q_SHIFT); + + r300->hw.rr.cmd[R300_RR_INST_0 + tex_ip] |= R500_RS_INST_TEX_ID(tex_ip) | R500_RS_INST_TEX_CN_WRITE | R500_RS_INST_TEX_ADDR(fp_reg); + InputsRead &= ~FRAG_BIT_WPOS; + rs_tex_count += 4; + ++tex_ip; + ++fp_reg; } - r300->hw.rc.cmd[1] = 0 | (in_texcoords << R300_IT_COUNT_SHIFT) - | (col_interp_nr << R300_IC_COUNT_SHIFT) - | R300_HIRES_EN; + /* Setup default color if no color or tex was set */ + if (rs_tex_count == 0 && col_ip == 0) { + r300->hw.rr.cmd[R300_RR_INST_0] |= R500_RS_INST_COL_ID(0) | R500_RS_INST_COL_CN_WRITE | R500_RS_INST_COL_ADDR(0) | R500_RS_COL_FMT(R300_RS_COL_FMT_0001); + ++col_ip; + } + + high_rr = (col_ip > tex_ip) ? col_ip : tex_ip; + r300->hw.rc.cmd[1] |= (rs_tex_count << R300_IT_COUNT_SHIFT) | (col_ip << R300_IC_COUNT_SHIFT) | R300_HIRES_EN; + r300->hw.rc.cmd[2] |= 0xC0 | (high_rr - 1); - assert(high_rr >= 0); - r300->hw.rr.cmd[R300_RR_CMD_0] = cmdpacket0(r300->radeon.radeonScreen, R500_RS_INST_0, high_rr + 1); - r300->hw.rc.cmd[2] = 0xC0 | high_rr; + r300->hw.rr.cmd[R300_RR_CMD_0] = cmdpacket0(r300->radeon.radeonScreen, R500_RS_INST_0, high_rr); if (InputsRead) WARN_ONCE("Don't know how to satisfy InputsRead=0x%08x\n", InputsRead); @@ -2078,7 +1963,7 @@ static void r300Enable(GLcontext * ctx, GLenum cap, GLboolean state) /* empty */ break; case GL_FOG: - r300SetFogState(ctx, state); + /* empty */ break; case GL_ALPHA_TEST: r300SetAlphaState(ctx); @@ -2149,7 +2034,7 @@ static void r300ResetHwState(r300ContextPtr r300) r300DepthFunc(ctx, ctx->Depth.Func); /* stencil */ - r300Enable(ctx, GL_STENCIL_TEST, ctx->Stencil.Enabled); + r300Enable(ctx, GL_STENCIL_TEST, ctx->Stencil._Enabled); r300StencilMaskSeparate(ctx, 0, ctx->Stencil.WriteMask[0]); r300StencilFuncSeparate(ctx, 0, ctx->Stencil.Function[0], ctx->Stencil.Ref[0], ctx->Stencil.ValueMask[0]); @@ -2236,11 +2121,9 @@ static void r300ResetHwState(r300ContextPtr r300) break; } - /* XXX: set to 0 when fog is disabled? */ - r300->hw.gb_misc.cmd[R300_GB_MISC_SELECT] = R300_GB_FOG_SELECT_1_1_W; - /* XXX: Enable anti-aliasing? */ r300->hw.gb_misc.cmd[R300_GB_MISC_AA_CONFIG] = GB_AA_CONFIG_AA_DISABLE; + r300->hw.gb_misc.cmd[R300_GB_MISC_SELECT] = 0; r300->hw.ga_point_s0.cmd[1] = r300PackFloat32(0.0); r300->hw.ga_point_s0.cmd[2] = r300PackFloat32(0.0); @@ -2289,17 +2172,11 @@ static void r300ResetHwState(r300ContextPtr r300) R500_C0_SEL_B | R500_C1_SEL_G | R500_C2_SEL_R | R500_C3_SEL_A; r300->hw.us_out_fmt.cmd[4] = R500_OUT_FMT_UNUSED | R500_C0_SEL_B | R500_C1_SEL_G | R500_C2_SEL_R | R500_C3_SEL_A; - r300->hw.us_out_fmt.cmd[5] = R300_W_FMT_W24; + r300->hw.us_out_fmt.cmd[5] = R300_W_FMT_W0 | R300_W_SRC_US; - r300Enable(ctx, GL_FOG, ctx->Fog.Enabled); - r300Fogfv(ctx, GL_FOG_MODE, NULL); - r300Fogfv(ctx, GL_FOG_DENSITY, &ctx->Fog.Density); - r300Fogfv(ctx, GL_FOG_START, &ctx->Fog.Start); - r300Fogfv(ctx, GL_FOG_END, &ctx->Fog.End); - r300Fogfv(ctx, GL_FOG_COLOR, ctx->Fog.Color); - r300Fogfv(ctx, GL_FOG_COORDINATE_SOURCE_EXT, NULL); - - r300->hw.fg_depth_src.cmd[1] = 0; + /* disable fog unit */ + r300->hw.fogs.cmd[R300_FOGS_STATE] = 0; + r300->hw.fg_depth_src.cmd[1] = R300_FG_DEPTH_SRC_SCAN; r300->hw.rb3d_cctl.cmd[1] = 0; @@ -2524,16 +2401,6 @@ static void r500SetupPixelShader(r300ContextPtr rmesa) } code = &fp->code; - if (fp->mesa_program.FogOption != GL_NONE) { - /* Enable HW fog. Try not to squish GL context. - * (Anybody sane remembered to set glFog() opts first!) */ - r300SetFogState(ctx, GL_TRUE); - ctx->Fog.Mode = fp->mesa_program.FogOption; - r300Fogfv(ctx, GL_FOG_MODE, NULL); - } else - /* Make sure HW is matching GL context. */ - r300SetFogState(ctx, ctx->Fog.Enabled); - r300SetupTextures(ctx); R300_STATECHANGE(rmesa, fp); @@ -2581,9 +2448,22 @@ void r300UpdateShaderStates(r300ContextPtr rmesa) r300SetEarlyZState(ctx); - GLuint fgdepthsrc = R300_FG_DEPTH_SRC_SCAN; - if (current_fragment_program_writes_depth(ctx)) + /* w_fmt value is set to get best performance + * see p.130 R5xx 3D acceleration guide v1.3 */ + GLuint w_fmt, fgdepthsrc; + if (current_fragment_program_writes_depth(ctx)) { fgdepthsrc = R300_FG_DEPTH_SRC_SHADER; + w_fmt = R300_W_FMT_W24 | R300_W_SRC_US; + } else { + fgdepthsrc = R300_FG_DEPTH_SRC_SCAN; + w_fmt = R300_W_FMT_W0 | R300_W_SRC_US; + } + + if (w_fmt != rmesa->hw.us_out_fmt.cmd[5]) { + R300_STATECHANGE(rmesa, us_out_fmt); + rmesa->hw.us_out_fmt.cmd[5] = w_fmt; + } + if (fgdepthsrc != rmesa->hw.fg_depth_src.cmd[1]) { R300_STATECHANGE(rmesa, fg_depth_src); rmesa->hw.fg_depth_src.cmd[1] = fgdepthsrc; @@ -2690,7 +2570,6 @@ void r300InitStateFuncs(struct dd_function_table *functions) functions->DepthFunc = r300DepthFunc; functions->DepthMask = r300DepthMask; functions->CullFace = r300CullFace; - functions->Fogfv = r300Fogfv; functions->FrontFace = r300FrontFace; functions->ShadeModel = r300ShadeModel; functions->LogicOpcode = r300LogicOpcode; diff --git a/src/mesa/drivers/dri/r300/r300_swtcl.c b/src/mesa/drivers/dri/r300/r300_swtcl.c index 153582ce48..f57516acf4 100644 --- a/src/mesa/drivers/dri/r300/r300_swtcl.c +++ b/src/mesa/drivers/dri/r300/r300_swtcl.c @@ -82,14 +82,15 @@ static void r300SetVertexFormat( GLcontext *ctx ) struct vertex_buffer *VB = &tnl->vb; DECLARE_RENDERINPUTS(index_bitset); GLuint InputsRead = 0, OutputsWritten = 0; - int vap_fmt_0 = 0; + int vap_fmt_1 = 0; int offset = 0; int vte = 0; + int fog_id; GLint inputs[VERT_ATTRIB_MAX]; GLint tab[VERT_ATTRIB_MAX]; int swizzle[VERT_ATTRIB_MAX][4]; GLuint i, nr; - GLuint sz, vap_fmt_1 = 0; + GLuint sz; DECLARE_RENDERINPUTS(render_inputs_bitset); RENDERINPUTS_COPY(render_inputs_bitset, tnl->render_inputs_bitset); @@ -125,13 +126,12 @@ static void r300SetVertexFormat( GLcontext *ctx ) offset = 4; EMIT_PAD(4 * sizeof(float)); } - +/* if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_POINTSIZE )) { EMIT_ATTR( _TNL_ATTRIB_POINTSIZE, EMIT_1F ); - vap_fmt_0 |= R300_VAP_OUTPUT_VTX_FMT_0__PT_SIZE_PRESENT; offset += 1; } - +*/ if (RENDERINPUTS_TEST(index_bitset, _TNL_ATTRIB_COLOR0)) { sz = VB->AttribPtr[VERT_ATTRIB_COLOR0]->size; rmesa->swtcl.coloroffset = offset; @@ -150,6 +150,33 @@ static void r300SetVertexFormat( GLcontext *ctx ) OutputsWritten |= 1 << VERT_RESULT_COL1; } + fog_id = -1; + if (RENDERINPUTS_TEST(index_bitset, _TNL_ATTRIB_FOG)) { + /* find first free tex coord slot */ + if (RENDERINPUTS_TEST_RANGE( index_bitset, _TNL_FIRST_TEX, _TNL_LAST_TEX )) { + int i; + for (i = 0; i < ctx->Const.MaxTextureUnits; i++) { + if (!RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_TEX(i) )) { + fog_id = i; + break; + } + } + } else { + fog_id = 0; + } + + if (fog_id == -1) { + fprintf(stderr, "\tout of free texcoords to do fog\n"); + _mesa_exit(-1); + } + + sz = VB->AttribPtr[VERT_ATTRIB_FOG]->size; + EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1F + sz - 1); + InputsRead |= 1 << VERT_ATTRIB_FOG; + OutputsWritten |= 1 << VERT_RESULT_FOGC; + vap_fmt_1 |= sz << (3 * fog_id); + } + if (RENDERINPUTS_TEST_RANGE( index_bitset, _TNL_FIRST_TEX, _TNL_LAST_TEX )) { int i; @@ -164,6 +191,37 @@ static void r300SetVertexFormat( GLcontext *ctx ) } } + /* RS can't put fragment position on the pixel stack, so stuff it in texcoord if needed */ + if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_POS) && (ctx->FragmentProgram._Current->Base.InputsRead & FRAG_BIT_WPOS)) { + int first_free_tex = -1; + if (fog_id >= 0) { + first_free_tex = fog_id+1; + } else { + if (RENDERINPUTS_TEST_RANGE( index_bitset, _TNL_FIRST_TEX, _TNL_LAST_TEX )) { + int i; + for (i = 0; i < ctx->Const.MaxTextureUnits; i++) { + if (!RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_TEX(i) )) { + first_free_tex = i; + break; + } + } + } else { + first_free_tex = 0; + } + } + + if (first_free_tex == -1) { + fprintf(stderr, "\tout of free texcoords to write w pos\n"); + _mesa_exit(-1); + } + + sz = VB->AttribPtr[VERT_ATTRIB_POS]->size; + InputsRead |= 1 << (VERT_ATTRIB_TEX0 + first_free_tex); + OutputsWritten |= 1 << (VERT_RESULT_TEX0 + first_free_tex); + EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_1F + sz - 1 ); + vap_fmt_1 |= sz << (3 * first_free_tex); + } + for (i = 0, nr = 0; i < VERT_ATTRIB_MAX; i++) { if (InputsRead & (1 << i)) { inputs[i] = nr++; @@ -179,6 +237,8 @@ static void r300SetVertexFormat( GLcontext *ctx ) inputs[VERT_ATTRIB_COLOR0] = 2; if (InputsRead & (1 << VERT_ATTRIB_COLOR1)) inputs[VERT_ATTRIB_COLOR1] = 3; + if (InputsRead & (1 << VERT_ATTRIB_FOG)) + inputs[VERT_ATTRIB_FOG] = 6 + fog_id; for (i = VERT_ATTRIB_TEX0; i <= VERT_ATTRIB_TEX7; i++) if (InputsRead & (1 << i)) inputs[i] = 6 + (i - VERT_ATTRIB_TEX0); @@ -224,6 +284,7 @@ static void r300SetVertexFormat( GLcontext *ctx ) r300VAPInputRoute1(&rmesa->hw.vir[1].cmd[R300_VIR_CNTL_0], swizzle, nr); } + R300_STATECHANGE(rmesa, vic); rmesa->hw.vic.cmd[R300_VIC_CNTL_0] = r300VAPInputCntl0(ctx, InputsRead); rmesa->hw.vic.cmd[R300_VIC_CNTL_1] = r300VAPInputCntl1(ctx, InputsRead); @@ -520,9 +581,12 @@ static void r300RenderStart(GLcontext *ctx) r300UpdateShaderStates(rmesa); r300EmitCacheFlush(rmesa); + + /* investigate if we can put back flush optimisation if needed */ if (rmesa->radeon.dma.flush != NULL) { rmesa->radeon.dma.flush(ctx); } + } static void r300RenderFinish(GLcontext *ctx) @@ -652,5 +716,4 @@ void r300_swtcl_flush(GLcontext *ctx, uint32_t current_offset) rmesa->radeon.swtcl.numverts); r300EmitCacheFlush(rmesa); COMMIT_BATCH(); - } diff --git a/src/mesa/drivers/dri/r300/r300_vertprog.c b/src/mesa/drivers/dri/r300/r300_vertprog.c index c4e325e6a7..50806575ce 100644 --- a/src/mesa/drivers/dri/r300/r300_vertprog.c +++ b/src/mesa/drivers/dri/r300/r300_vertprog.c @@ -126,7 +126,7 @@ static unsigned long t_dst_mask(GLuint mask) return mask & VSF_FLAG_ALL; } -static unsigned long t_dst_class(enum register_file file) +static unsigned long t_dst_class(gl_register_file file) { switch (file) { @@ -161,7 +161,7 @@ static unsigned long t_dst_index(struct r300_vertex_program *vp, return dst->Index; } -static unsigned long t_src_class(enum register_file file) +static unsigned long t_src_class(gl_register_file file) { switch (file) { case PROGRAM_TEMPORARY: @@ -993,17 +993,16 @@ static void t_inputs_outputs(struct r300_vertex_program *vp) vp->outputs[VERT_RESULT_COL0] + 3; cur_reg = vp->outputs[VERT_RESULT_BFC1] + 1; } -#if 0 - if (vp->key.OutputsWritten & (1 << VERT_RESULT_FOGC)) { - vp->outputs[VERT_RESULT_FOGC] = cur_reg++; - } -#endif for (i = VERT_RESULT_TEX0; i <= VERT_RESULT_TEX7; i++) { if (vp->key.OutputsWritten & (1 << i)) { vp->outputs[i] = cur_reg++; } } + + if (vp->key.OutputsWritten & (1 << VERT_RESULT_FOGC)) { + vp->outputs[VERT_RESULT_FOGC] = cur_reg++; + } } static void r300TranslateVertexShader(struct r300_vertex_program *vp, @@ -1271,7 +1270,6 @@ static void position_invariant(struct gl_program *prog) else vpi[i].Opcode = OPCODE_MAD; - vpi[i].StringPos = 0; vpi[i].Data = 0; if (i == 3) diff --git a/src/mesa/drivers/dri/r300/r500_fragprog.c b/src/mesa/drivers/dri/r300/r500_fragprog.c index 926ddd5964..07a2a7b17c 100644 --- a/src/mesa/drivers/dri/r300/r500_fragprog.c +++ b/src/mesa/drivers/dri/r300/r500_fragprog.c @@ -298,8 +298,8 @@ static void insert_WPOS_trailer(struct r500_fragment_program_compiler *compiler) static void nqssadce_init(struct nqssadce_state* s) { - s->Outputs[FRAG_RESULT_COLR].Sourced = WRITEMASK_XYZW; - s->Outputs[FRAG_RESULT_DEPR].Sourced = WRITEMASK_W; + s->Outputs[FRAG_RESULT_COLOR].Sourced = WRITEMASK_XYZW; + s->Outputs[FRAG_RESULT_DEPTH].Sourced = WRITEMASK_W; } static GLboolean is_native_swizzle(GLuint opcode, struct prog_src_register reg) diff --git a/src/mesa/drivers/dri/r300/radeon_nqssadce.c b/src/mesa/drivers/dri/r300/radeon_nqssadce.c index 97ce016c99..a083c3d243 100644 --- a/src/mesa/drivers/dri/r300/radeon_nqssadce.c +++ b/src/mesa/drivers/dri/r300/radeon_nqssadce.c @@ -191,7 +191,7 @@ static void process_instruction(struct nqssadce_state* s) if (inst->Opcode != OPCODE_KIL) { if (s->Descr->RewriteDepthOut) { - if (inst->DstReg.File == PROGRAM_OUTPUT && inst->DstReg.Index == FRAG_RESULT_DEPR) + if (inst->DstReg.File == PROGRAM_OUTPUT && inst->DstReg.Index == FRAG_RESULT_DEPTH) rewrite_depth_out(inst); } diff --git a/src/mesa/drivers/dri/r300/radeon_program_pair.c b/src/mesa/drivers/dri/r300/radeon_program_pair.c index 8a945d8537..49aa90dd94 100644 --- a/src/mesa/drivers/dri/r300/radeon_program_pair.c +++ b/src/mesa/drivers/dri/r300/radeon_program_pair.c @@ -451,19 +451,7 @@ static void allocate_input_registers(struct pair_state *s) int i; GLuint hwindex = 0; - /* Texcoords come first */ - for (i = 0; i < s->Ctx->Const.MaxTextureUnits; i++) { - if (InputsRead & (FRAG_BIT_TEX0 << i)) - alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_TEX0+i, hwindex++); - } - InputsRead &= ~FRAG_BITS_TEX_ANY; - - /* fragment position treated as a texcoord */ - if (InputsRead & FRAG_BIT_WPOS) - alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_WPOS, hwindex++); - InputsRead &= ~FRAG_BIT_WPOS; - - /* Then primary colour */ + /* Primary colour */ if (InputsRead & FRAG_BIT_COL0) alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_COL0, hwindex++); InputsRead &= ~FRAG_BIT_COL0; @@ -473,11 +461,23 @@ static void allocate_input_registers(struct pair_state *s) alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_COL1, hwindex++); InputsRead &= ~FRAG_BIT_COL1; - /* Fog coordinate */ + /* Texcoords */ + for (i = 0; i < s->Ctx->Const.MaxTextureUnits; i++) { + if (InputsRead & (FRAG_BIT_TEX0 << i)) + alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_TEX0+i, hwindex++); + } + InputsRead &= ~FRAG_BITS_TEX_ANY; + + /* Fogcoords treated as a texcoord */ if (InputsRead & FRAG_BIT_FOGC) alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_FOGC, hwindex++); InputsRead &= ~FRAG_BIT_FOGC; + /* fragment position treated as a texcoord */ + if (InputsRead & FRAG_BIT_WPOS) + alloc_hw_reg(s, PROGRAM_INPUT, FRAG_ATTRIB_WPOS, hwindex++); + InputsRead &= ~FRAG_BIT_WPOS; + /* Anything else */ if (InputsRead) error("Don't know how to handle inputs 0x%x\n", InputsRead); @@ -778,10 +778,10 @@ static void fill_dest_into_pair(struct pair_state *s, struct radeon_pair_instruc struct prog_instruction *inst = s->Program->Instructions + ip; if (inst->DstReg.File == PROGRAM_OUTPUT) { - if (inst->DstReg.Index == FRAG_RESULT_COLR) { + if (inst->DstReg.Index == FRAG_RESULT_COLOR) { pair->RGB.OutputWriteMask |= inst->DstReg.WriteMask & WRITEMASK_XYZ; pair->Alpha.OutputWriteMask |= GET_BIT(inst->DstReg.WriteMask, 3); - } else if (inst->DstReg.Index == FRAG_RESULT_DEPR) { + } else if (inst->DstReg.Index == FRAG_RESULT_DEPTH) { pair->Alpha.DepthWriteMask |= GET_BIT(inst->DstReg.WriteMask, 3); } } else { diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c b/src/mesa/drivers/dri/radeon/radeon_common.c index 5c34ca89fa..840233ff89 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common.c +++ b/src/mesa/drivers/dri/radeon/radeon_common.c @@ -245,7 +245,7 @@ static uint32_t radeonGetLastFrame(radeonContextPtr radeon) { drm_radeon_getparam_t gp; int ret; - uint32_t frame; + uint32_t frame = 0; gp.param = RADEON_PARAM_LAST_FRAME; gp.value = (int *)&frame; diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c b/src/mesa/drivers/dri/radeon/radeon_screen.c index 02101978ac..1d4f008cbc 100644 --- a/src/mesa/drivers/dri/radeon/radeon_screen.c +++ b/src/mesa/drivers/dri/radeon/radeon_screen.c @@ -732,7 +732,7 @@ radeonCreateScreen( __DRIscreenPrivate *sPriv ) unsigned char *RADEONMMIO = NULL; int i; int ret; - uint32_t temp; + uint32_t temp = 0; if (sPriv->devPrivSize != sizeof(RADEONDRIRec)) { fprintf(stderr,"\nERROR! sizeof(RADEONDRIRec) does not match passed size from device driver\n"); @@ -1359,7 +1359,7 @@ radeonDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) radeon_bo_unref(rb->bo); rb->bo = NULL; } - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } #if RADEON_COMMON && defined(RADEON_COMMON_FOR_R300) diff --git a/src/mesa/drivers/dri/radeon/radeon_texstate.c b/src/mesa/drivers/dri/radeon/radeon_texstate.c index b9adab18d4..0ece1acbeb 100644 --- a/src/mesa/drivers/dri/radeon/radeon_texstate.c +++ b/src/mesa/drivers/dri/radeon/radeon_texstate.c @@ -915,11 +915,11 @@ static GLboolean radeon_validate_texgen( GLcontext *ctx, GLuint unit ) */ else if ( (texUnit->TexGenEnabled & S_BIT) && (texUnit->TexGenEnabled & T_BIT) && - (texUnit->GenModeS == texUnit->GenModeT) ) { + (texUnit->GenS.Mode == texUnit->GenT.Mode) ) { if ( ((texUnit->TexGenEnabled & R_BIT) && - (texUnit->GenModeS != texUnit->GenModeR)) || + (texUnit->GenS.Mode != texUnit->GenR.Mode)) || ((texUnit->TexGenEnabled & Q_BIT) && - (texUnit->GenModeS != texUnit->GenModeQ)) ) { + (texUnit->GenS.Mode != texUnit->GenQ.Mode)) ) { /* Mixed modes, fallback: */ if (RADEON_DEBUG & DEBUG_FALLBACKS) @@ -943,23 +943,23 @@ static GLboolean radeon_validate_texgen( GLcontext *ctx, GLuint unit ) rmesa->hw.tcl.cmd[TCL_OUTPUT_VTXFMT] |= RADEON_Q_BIT(unit); } - switch (texUnit->GenModeS) { + switch (texUnit->GenS.Mode) { case GL_OBJECT_LINEAR: rmesa->TexGenEnabled |= RADEON_TEXGEN_INPUT_OBJ << inputshift; set_texgen_matrix( rmesa, unit, - texUnit->ObjectPlaneS, - texUnit->ObjectPlaneT, - texUnit->ObjectPlaneR, - texUnit->ObjectPlaneQ); + texUnit->GenS.ObjectPlane, + texUnit->GenT.ObjectPlane, + texUnit->GenR.ObjectPlane, + texUnit->GenQ.ObjectPlane); break; case GL_EYE_LINEAR: rmesa->TexGenEnabled |= RADEON_TEXGEN_INPUT_EYE << inputshift; set_texgen_matrix( rmesa, unit, - texUnit->EyePlaneS, - texUnit->EyePlaneT, - texUnit->EyePlaneR, - texUnit->EyePlaneQ); + texUnit->GenS.EyePlane, + texUnit->GenT.EyePlane, + texUnit->GenR.EyePlane, + texUnit->GenQ.EyePlane); break; case GL_REFLECTION_MAP_NV: diff --git a/src/mesa/drivers/dri/radeon/server/radeon_reg.h b/src/mesa/drivers/dri/radeon/server/radeon_reg.h index 0df634b84d..866807462a 100644 --- a/src/mesa/drivers/dri/radeon/server/radeon_reg.h +++ b/src/mesa/drivers/dri/radeon/server/radeon_reg.h @@ -1500,7 +1500,7 @@ # define RADEON_ALPHA_ARG_C_T1_ALPHA (6 << 8) # define RADEON_ALPHA_ARG_C_T2_ALPHA (7 << 8) # define RADEON_ALPHA_ARG_C_T3_ALPHA (8 << 8) -# define RADEON_DOT_ALPHA_DONT_REPLICATE (1 << 9) +# define RADEON_DOT_ALPHA_DONT_REPLICATE (1 << 12) # define RADEON_ALPHA_ARG_MASK 0xf #define RADEON_PP_TFACTOR_0 0x1c68 diff --git a/src/mesa/drivers/dri/s3v/s3v_tex.c b/src/mesa/drivers/dri/s3v/s3v_tex.c index 8bf2ea9878..db66026363 100644 --- a/src/mesa/drivers/dri/s3v/s3v_tex.c +++ b/src/mesa/drivers/dri/s3v/s3v_tex.c @@ -502,20 +502,20 @@ static void s3vInitTextureObjects( GLcontext *ctx ) #if 1 ctx->Texture.CurrentUnit = 0; - texObj = ctx->Texture.Unit[0].Current1D; + texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_1D_INDEX]; s3vBindTexture( ctx, GL_TEXTURE_1D, texObj ); - texObj = ctx->Texture.Unit[0].Current2D; + texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; s3vBindTexture( ctx, GL_TEXTURE_2D, texObj ); #endif #if 0 ctx->Texture.CurrentUnit = 1; - texObj = ctx->Texture.Unit[1].Current1D; + texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_1D_INDEX]; s3vBindTexture( ctx, GL_TEXTURE_1D, texObj ); - texObj = ctx->Texture.Unit[1].Current2D; + texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_2D_INDEX]; s3vBindTexture( ctx, GL_TEXTURE_2D, texObj ); #endif diff --git a/src/mesa/drivers/dri/s3v/s3v_xmesa.c b/src/mesa/drivers/dri/s3v/s3v_xmesa.c index b18c8763c3..85f1481769 100644 --- a/src/mesa/drivers/dri/s3v/s3v_xmesa.c +++ b/src/mesa/drivers/dri/s3v/s3v_xmesa.c @@ -4,11 +4,12 @@ #include "s3v_context.h" #include "s3v_vb.h" +#include "s3v_dri.h" #include "main/context.h" #include "main/matrix.h" -#include "s3v_dri.h" #include "main/framebuffer.h" #include "main/renderbuffer.h" +#include "main/viewport.h" #include "swrast/swrast.h" #include "swrast_setup/swrast_setup.h" @@ -131,7 +132,7 @@ s3vCreateBuffer( __DRIscreenPrivate *driScrnPriv, static void s3vDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } static void diff --git a/src/mesa/drivers/dri/savage/savage_xmesa.c b/src/mesa/drivers/dri/savage/savage_xmesa.c index 326d595352..a94f1c076c 100644 --- a/src/mesa/drivers/dri/savage/savage_xmesa.c +++ b/src/mesa/drivers/dri/savage/savage_xmesa.c @@ -678,7 +678,7 @@ savageCreateBuffer( __DRIscreenPrivate *driScrnPriv, static void savageDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } #if 0 diff --git a/src/mesa/drivers/dri/savage/savagestate.c b/src/mesa/drivers/dri/savage/savagestate.c index 73d85ed57b..84e1b52585 100644 --- a/src/mesa/drivers/dri/savage/savagestate.c +++ b/src/mesa/drivers/dri/savage/savagestate.c @@ -514,7 +514,7 @@ static void savageDDDepthFunc_s4(GLcontext *ctx, GLenum func) imesa->regs.s4.drawLocalCtrl.ni.flushPdZbufWrites = GL_TRUE; imesa->regs.s4.zBufCtrl.ni.zBufEn = GL_TRUE; } - else if (imesa->glCtx->Stencil.Enabled && imesa->hw_stencil) + else if (imesa->glCtx->Stencil._Enabled && imesa->hw_stencil) { /* Need to keep Z on for Stencil. */ imesa->regs.s4.zBufCtrl.ni.zCmpFunc = CF_Always; @@ -1092,7 +1092,7 @@ static void savageDDEnable_s4(GLcontext *ctx, GLenum cap, GLboolean state) FALLBACK (ctx, SAVAGE_FALLBACK_STENCIL, state); else { imesa->regs.s4.stencilCtrl.ni.stencilEn = state; - if (ctx->Stencil.Enabled && + if (ctx->Stencil._Enabled && imesa->regs.s4.zBufCtrl.ni.zBufEn != GL_TRUE) { /* Stencil buffer requires Z enabled. */ diff --git a/src/mesa/drivers/dri/sis/sis_screen.c b/src/mesa/drivers/dri/sis/sis_screen.c index 9eb27fef08..b5f04ae28d 100644 --- a/src/mesa/drivers/dri/sis/sis_screen.c +++ b/src/mesa/drivers/dri/sis/sis_screen.c @@ -221,7 +221,7 @@ sisCreateBuffer( __DRIscreenPrivate *driScrnPriv, static void sisDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } static void sisCopyBuffer( __DRIdrawablePrivate *dPriv ) diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c index 2e7f11327e..fbfa49c99d 100644 --- a/src/mesa/drivers/dri/swrast/swrast.c +++ b/src/mesa/drivers/dri/swrast/swrast.c @@ -476,7 +476,7 @@ driDestroyDrawable(__DRIdrawable *buf) _mesa_free(buf->row); fb->DeletePending = GL_TRUE; - _mesa_unreference_framebuffer(&fb); + _mesa_reference_framebuffer(&fb, NULL); } } diff --git a/src/mesa/drivers/dri/tdfx/tdfx_context.c b/src/mesa/drivers/dri/tdfx/tdfx_context.c index 20046fcb3a..68b5027561 100644 --- a/src/mesa/drivers/dri/tdfx/tdfx_context.c +++ b/src/mesa/drivers/dri/tdfx/tdfx_context.c @@ -67,7 +67,6 @@ #define need_GL_EXT_fog_coord #define need_GL_EXT_paletted_texture /* #define need_GL_EXT_secondary_color */ -/* #define need_GL_MESA_program_debug */ /* #define need_GL_NV_vertex_program */ #include "extension_helper.h" @@ -102,9 +101,6 @@ const struct dri_extension card_extensions[] = { "GL_NV_vertex_program", GL_NV_vertex_program_functions } { "GL_NV_vertex_program1_1", NULL }, #endif -#ifdef need_GL_MESA_program_debug - { "GL_MESA_program_debug", GL_MESA_program_debug_functions }, -#endif { NULL, NULL } }; diff --git a/src/mesa/drivers/dri/tdfx/tdfx_pixels.c b/src/mesa/drivers/dri/tdfx/tdfx_pixels.c index 9ab9c05f2b..18729d5ae0 100644 --- a/src/mesa/drivers/dri/tdfx/tdfx_pixels.c +++ b/src/mesa/drivers/dri/tdfx/tdfx_pixels.c @@ -610,7 +610,7 @@ tdfx_drawpixels_R8G8B8A8(GLcontext * ctx, GLint x, GLint y, ctx->Depth.Test || ctx->Fog.Enabled || ctx->Scissor.Enabled || - ctx->Stencil.Enabled || + ctx->Stencil._Enabled || !ctx->Color.ColorMask[0] || !ctx->Color.ColorMask[1] || !ctx->Color.ColorMask[2] || diff --git a/src/mesa/drivers/dri/tdfx/tdfx_render.c b/src/mesa/drivers/dri/tdfx/tdfx_render.c index cf840c57a7..2cd8e12d95 100644 --- a/src/mesa/drivers/dri/tdfx/tdfx_render.c +++ b/src/mesa/drivers/dri/tdfx/tdfx_render.c @@ -740,7 +740,7 @@ void tdfxEmitHwStateLocked( tdfxContextPtr fxMesa ) } if ( fxMesa->dirty & TDFX_UPLOAD_STENCIL ) { - if (fxMesa->glCtx->Stencil.Enabled) { + if (fxMesa->glCtx->Stencil._Enabled) { fxMesa->Glide.grEnable(GR_STENCIL_MODE_EXT); fxMesa->Glide.grStencilOp(fxMesa->Stencil.FailFunc, fxMesa->Stencil.ZFailFunc, diff --git a/src/mesa/drivers/dri/tdfx/tdfx_screen.c b/src/mesa/drivers/dri/tdfx/tdfx_screen.c index 5f2f5cfff5..58bd48b294 100644 --- a/src/mesa/drivers/dri/tdfx/tdfx_screen.c +++ b/src/mesa/drivers/dri/tdfx/tdfx_screen.c @@ -232,7 +232,7 @@ tdfxCreateBuffer( __DRIscreenPrivate *driScrnPriv, static void tdfxDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } diff --git a/src/mesa/drivers/dri/tdfx/tdfx_state.c b/src/mesa/drivers/dri/tdfx/tdfx_state.c index a2d7bcd97d..591df8a905 100644 --- a/src/mesa/drivers/dri/tdfx/tdfx_state.c +++ b/src/mesa/drivers/dri/tdfx/tdfx_state.c @@ -459,7 +459,7 @@ static void tdfxUpdateStencil( GLcontext *ctx ) } if (fxMesa->haveHwStencil) { - if (ctx->Stencil.Enabled) { + if (ctx->Stencil._Enabled) { fxMesa->Stencil.Function = ctx->Stencil.Function[0] - GL_NEVER + GR_CMP_NEVER; fxMesa->Stencil.RefValue = ctx->Stencil.Ref[0] & 0xff; fxMesa->Stencil.ValueMask = ctx->Stencil.ValueMask[0] & 0xff; diff --git a/src/mesa/drivers/dri/trident/trident_context.c b/src/mesa/drivers/dri/trident/trident_context.c index aefd8a243f..b5126b07ea 100644 --- a/src/mesa/drivers/dri/trident/trident_context.c +++ b/src/mesa/drivers/dri/trident/trident_context.c @@ -41,6 +41,7 @@ #include "main/extensions.h" #include "main/framebuffer.h" #include "main/renderbuffer.h" +#include "main/viewport.h" #if defined(USE_X86_ASM) #include "x86/common_x86_asm.h" #endif @@ -281,7 +282,7 @@ tridentCreateBuffer( __DRIscreenPrivate *driScrnPriv, static void tridentDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } static void diff --git a/src/mesa/drivers/dri/unichrome/via_screen.c b/src/mesa/drivers/dri/unichrome/via_screen.c index e9f566161c..3dbb570571 100644 --- a/src/mesa/drivers/dri/unichrome/via_screen.c +++ b/src/mesa/drivers/dri/unichrome/via_screen.c @@ -316,7 +316,7 @@ viaCreateBuffer(__DRIscreenPrivate *driScrnPriv, static void viaDestroyBuffer(__DRIdrawablePrivate *driDrawPriv) { - _mesa_unreference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate))); + _mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL); } static const __DRIconfig ** diff --git a/src/mesa/drivers/dri/unichrome/via_state.c b/src/mesa/drivers/dri/unichrome/via_state.c index 1cef01ab03..840e4e42da 100644 --- a/src/mesa/drivers/dri/unichrome/via_state.c +++ b/src/mesa/drivers/dri/unichrome/via_state.c @@ -1342,7 +1342,7 @@ static void viaChooseStencilState(GLcontext *ctx) { struct via_context *vmesa = VIA_CONTEXT(ctx); - if (ctx->Stencil.Enabled) { + if (ctx->Stencil._Enabled) { GLuint temp; vmesa->regEnable |= HC_HenST_MASK; diff --git a/src/mesa/drivers/ggi/default/stubs.c b/src/mesa/drivers/ggi/default/stubs.c index 7b442b6d20..62722972b2 100644 --- a/src/mesa/drivers/ggi/default/stubs.c +++ b/src/mesa/drivers/ggi/default/stubs.c @@ -472,7 +472,7 @@ static void GGItriangle_flat_depth(GLcontext *ctx, const SWvertex *v0, const SWv static swrast_tri_func ggimesa_stubs_get_triangle_func(GLcontext *ctx) { - if (ctx->Stencil.Enabled) return NULL; + if (ctx->Stencil._Enabled) return NULL; if (ctx->Polygon.SmoothFlag) return NULL; if (ctx->Polygon.StippleFlag) return NULL; if (ctx->Texture._ReallyEnabled) return NULL; diff --git a/src/mesa/drivers/glide/fxdd.c b/src/mesa/drivers/glide/fxdd.c index 338cd37382..2bc60399ea 100644 --- a/src/mesa/drivers/glide/fxdd.c +++ b/src/mesa/drivers/glide/fxdd.c @@ -1922,7 +1922,6 @@ fxDDInitExtensions(GLcontext * ctx) _mesa_enable_extension(ctx, "GL_ARB_vertex_program"); _mesa_enable_extension(ctx, "GL_NV_vertex_program"); _mesa_enable_extension(ctx, "GL_NV_vertex_program1_1"); - _mesa_enable_extension(ctx, "GL_MESA_program_debug"); } #if 0 /* this requires _tnl_vertex_cull_stage in the pipeline */ @@ -1948,7 +1947,7 @@ fx_check_IsInHardware(GLcontext * ctx) return FX_FALLBACK_RENDER_MODE; } - if (ctx->Stencil.Enabled && !fxMesa->haveHwStencil) { + if (ctx->Stencil._Enabled && !fxMesa->haveHwStencil) { return FX_FALLBACK_STENCIL; } diff --git a/src/mesa/drivers/glslcompiler/glslcompiler.c b/src/mesa/drivers/glslcompiler/glslcompiler.c index 918ec41856..e4527abdec 100644 --- a/src/mesa/drivers/glslcompiler/glslcompiler.c +++ b/src/mesa/drivers/glslcompiler/glslcompiler.c @@ -72,6 +72,8 @@ struct options { const char *VertFile; const char *FragFile; const char *OutputFile; + GLboolean Params; + struct gl_sl_pragmas Pragmas; }; static struct options Options; @@ -147,6 +149,9 @@ CreateContext(void) TNL_CONTEXT(ctx)->Driver.RunPipeline = _tnl_run_pipeline; _swsetup_Wakeup( ctx ); + /* Override the context's default pragma settings */ + ctx->Shader.DefaultPragmas = Options.Pragmas; + _mesa_make_current(ctx, buf, buf); return GL_TRUE; @@ -228,6 +233,8 @@ PrintShaderInstructions(GLuint shader, FILE *f) struct gl_shader *sh = _mesa_lookup_shader(ctx, shader); struct gl_program *prog = sh->Program; _mesa_fprint_program_opt(stdout, prog, Options.Mode, Options.LineNumbers); + if (Options.Params) + _mesa_print_program_parameters(ctx, prog); } @@ -253,11 +260,15 @@ Usage(void) printf("Usage:\n"); printf(" --vs FILE vertex shader input filename\n"); printf(" --fs FILE fragment shader input filename\n"); - printf(" --arb emit ARB-style instructions (the default)\n"); + printf(" --arb emit ARB-style instructions\n"); printf(" --nv emit NV-style instructions\n"); - printf(" --debug emit debug-style instructions\n"); - printf(" --number, -n emit line numbers\n"); + printf(" --debug force #pragma debug(on)\n"); + printf(" --nodebug force #pragma debug(off)\n"); + printf(" --opt force #pragma optimize(on)\n"); + printf(" --noopt force #pragma optimize(off)\n"); + printf(" --number, -n emit line numbers (if --arb or --nv)\n"); printf(" --output, -o FILE output filename\n"); + printf(" --params also emit program parameter info\n"); printf(" --help display this information\n"); } @@ -268,10 +279,15 @@ ParseOptions(int argc, char *argv[]) int i; Options.LineNumbers = GL_FALSE; - Options.Mode = PROG_PRINT_ARB; + Options.Mode = PROG_PRINT_DEBUG; Options.VertFile = NULL; Options.FragFile = NULL; Options.OutputFile = NULL; + Options.Params = GL_FALSE; + Options.Pragmas.IgnoreOptimize = GL_FALSE; + Options.Pragmas.IgnoreDebug = GL_FALSE; + Options.Pragmas.Debug = GL_FALSE; + Options.Pragmas.Optimize = GL_TRUE; if (argc == 1) { Usage(); @@ -294,7 +310,20 @@ ParseOptions(int argc, char *argv[]) Options.Mode = PROG_PRINT_NV; } else if (strcmp(argv[i], "--debug") == 0) { - Options.Mode = PROG_PRINT_DEBUG; + Options.Pragmas.IgnoreDebug = GL_TRUE; + Options.Pragmas.Debug = GL_TRUE; + } + else if (strcmp(argv[i], "--nodebug") == 0) { + Options.Pragmas.IgnoreDebug = GL_TRUE; + Options.Pragmas.Debug = GL_FALSE; + } + else if (strcmp(argv[i], "--opt") == 0) { + Options.Pragmas.IgnoreOptimize = GL_TRUE; + Options.Pragmas.Optimize = GL_TRUE; + } + else if (strcmp(argv[i], "--noopt") == 0) { + Options.Pragmas.IgnoreOptimize = GL_TRUE; + Options.Pragmas.Optimize = GL_FALSE; } else if (strcmp(argv[i], "--number") == 0 || strcmp(argv[i], "-n") == 0) { @@ -305,6 +334,9 @@ ParseOptions(int argc, char *argv[]) Options.OutputFile = argv[i + 1]; i++; } + else if (strcmp(argv[i], "--params") == 0) { + Options.Params = GL_TRUE; + } else if (strcmp(argv[i], "--help") == 0) { Usage(); exit(0); @@ -315,6 +347,11 @@ ParseOptions(int argc, char *argv[]) exit(1); } } + + if (Options.Mode == PROG_PRINT_DEBUG) { + /* always print line numbers when emitting debug-style output */ + Options.LineNumbers = GL_TRUE; + } } @@ -323,13 +360,13 @@ main(int argc, char *argv[]) { GLuint shader = 0; + ParseOptions(argc, argv); + if (!CreateContext()) { fprintf(stderr, "%s: Failed to create compiler context\n", Prog); exit(1); } - ParseOptions(argc, argv); - if (Options.VertFile) { shader = CompileShader(Options.VertFile, GL_VERTEX_SHADER); } diff --git a/src/mesa/drivers/windows/gdi/mesa.def b/src/mesa/drivers/windows/gdi/mesa.def index b386e34aad..ede43ef4c0 100644 --- a/src/mesa/drivers/windows/gdi/mesa.def +++ b/src/mesa/drivers/windows/gdi/mesa.def @@ -940,7 +940,7 @@ EXPORTS _mesa_store_texsubimage3d _mesa_strcmp _mesa_test_proxy_teximage - _mesa_unreference_framebuffer + _mesa_reference_framebuffer _mesa_update_framebuffer_visual _mesa_use_program _mesa_Viewport diff --git a/src/mesa/drivers/windows/gdi/wmesa.c b/src/mesa/drivers/windows/gdi/wmesa.c index 80746950c7..d1103f3167 100644 --- a/src/mesa/drivers/windows/gdi/wmesa.c +++ b/src/mesa/drivers/windows/gdi/wmesa.c @@ -62,7 +62,7 @@ wmesa_free_framebuffer(HDC hdc) else prev->next = pwfb->next; fb = &pwfb->Base; - _mesa_unreference_framebuffer(&fb); + _mesa_reference_framebuffer(&fb, NULL); } } diff --git a/src/mesa/drivers/x11/Makefile b/src/mesa/drivers/x11/Makefile index d2780e62c9..5e427d2d5c 100644 --- a/src/mesa/drivers/x11/Makefile +++ b/src/mesa/drivers/x11/Makefile @@ -41,7 +41,8 @@ OBJECTS = $(SOURCES:.c=.o) INCLUDE_DIRS = \ -I$(TOP)/include \ -I$(TOP)/src/mesa \ - -I$(TOP)/src/mesa/main + -I$(TOP)/src/mesa/main \ + $(X11_INCLUDES) CORE_MESA = $(TOP)/src/mesa/libmesa.a $(TOP)/src/mesa/libglapi.a diff --git a/src/mesa/drivers/x11/glxapi.c b/src/mesa/drivers/x11/glxapi.c index c2ccce6f52..02eea25a71 100644 --- a/src/mesa/drivers/x11/glxapi.c +++ b/src/mesa/drivers/x11/glxapi.c @@ -35,6 +35,7 @@ #include <stdio.h> #include <string.h> #include "main/glheader.h" +#include "main/compiler.h" #include "glapi/glapi.h" #include "glxapi.h" @@ -1374,7 +1375,12 @@ _glxapi_get_proc_address(const char *funcName) { GLuint i; for (i = 0; GLX_functions[i].Name; i++) { +#ifdef MANGLE + /* skip the "m" prefix on the name */ + if (strcmp(GLX_functions[i].Name, funcName+1) == 0) +#else if (strcmp(GLX_functions[i].Name, funcName) == 0) +#endif return GLX_functions[i].Address; } return NULL; diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c index 2a8c3a4fd3..6ae5b6fd58 100644 --- a/src/mesa/drivers/x11/xm_api.c +++ b/src/mesa/drivers/x11/xm_api.c @@ -1584,6 +1584,14 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list ) return NULL; } + /* Enable this to exercise fixed function -> shader translation + * with software rendering. + */ + if (0) { + mesaCtx->VertexProgram._MaintainTnlProgram = GL_TRUE; + mesaCtx->FragmentProgram._MaintainTexEnvProgram = GL_TRUE; + } + _mesa_enable_sw_extensions(mesaCtx); _mesa_enable_1_3_extensions(mesaCtx); _mesa_enable_1_4_extensions(mesaCtx); @@ -2410,11 +2418,8 @@ xbuffer_to_renderbuffer(int buffer) case GLX_AUX0_EXT: return BUFFER_AUX0; case GLX_AUX1_EXT: - return BUFFER_AUX1; case GLX_AUX2_EXT: - return BUFFER_AUX2; case GLX_AUX3_EXT: - return BUFFER_AUX3; case GLX_AUX4_EXT: case GLX_AUX5_EXT: case GLX_AUX6_EXT: @@ -2461,13 +2466,13 @@ XMesaBindTexImage(XMesaDisplay *dpy, XMesaBuffer drawable, int buffer, #if 0 switch (drawable->TextureTarget) { case GLX_TEXTURE_1D_EXT: - texObj = texUnit->Current1D; + texObj = texUnit->CurrentTex[TEXTURE_1D_INDEX]; break; case GLX_TEXTURE_2D_EXT: - texObj = texUnit->Current2D; + texObj = texUnit->CurrentTex[TEXTURE_2D_INDEX]; break; case GLX_TEXTURE_RECTANGLE_EXT: - texObj = texUnit->CurrentRect; + texObj = texUnit->CurrentTex[TEXTURE_RECT_INDEX]; break; default: return; /* BadMatch error */ diff --git a/src/mesa/drivers/x11/xm_buffer.c b/src/mesa/drivers/x11/xm_buffer.c index 7ad67bc34d..821e2a8e08 100644 --- a/src/mesa/drivers/x11/xm_buffer.c +++ b/src/mesa/drivers/x11/xm_buffer.c @@ -229,6 +229,7 @@ alloc_back_buffer(XMesaBuffer b, GLuint width, GLuint height) } b->backxrb->ximage = NULL; + b->backxrb->drawable = b->backxrb->pixmap; } } diff --git a/src/mesa/drivers/x11/xm_span.c b/src/mesa/drivers/x11/xm_span.c index 57b5749448..309cefcb8e 100644 --- a/src/mesa/drivers/x11/xm_span.c +++ b/src/mesa/drivers/x11/xm_span.c @@ -471,8 +471,26 @@ static void put_row_8R8G8B_pixmap( PUT_ROW_ARGS ) if (mask) { for (i=0;i<n;i++,x++) { if (mask[i]) { +#if 1 + /* + * XXX Something funny is going on here. + * If we're drawing into a window that uses a depth 32 TrueColor + * visual, we see the right pixels on screen, but when we read + * them back with XGetImage() we get random colors. + * The alternative code below which uses XPutImage() instead + * seems to mostly fix the problem, but not always. + * We don't normally create windows with this visual, but glean + * does and we're seeing some failures there. + */ XMesaSetForeground( dpy, gc, PACK_8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] )); XMesaDrawPoint( dpy, buffer, gc, (int) x, (int) y ); +#else + /* This code works more often, but not always */ + XMesaImage *rowimg = XMESA_BUFFER(ctx->DrawBuffer)->rowimage; + GLuint *ptr4 = (GLuint *) rowimg->data; + *ptr4 = PACK_8R8G8B( rgba[i][RCOMP], rgba[i][GCOMP], rgba[i][BCOMP] ); + XMesaPutImage( dpy, buffer, gc, rowimg, 0, 0, x, y, 1, 1 ); +#endif } } } diff --git a/src/mesa/glapi/dispatch.h b/src/mesa/glapi/dispatch.h index d7f21692ed..45b2fa077a 100644 --- a/src/mesa/glapi/dispatch.h +++ b/src/mesa/glapi/dispatch.h @@ -2214,6 +2214,18 @@ #define CALL_VertexAttribs4ubvNV(disp, parameters) (*((disp)->VertexAttribs4ubvNV)) parameters #define GET_VertexAttribs4ubvNV(disp) ((disp)->VertexAttribs4ubvNV) #define SET_VertexAttribs4ubvNV(disp, fn) ((disp)->VertexAttribs4ubvNV = fn) +#define CALL_GetTexBumpParameterfvATI(disp, parameters) (*((disp)->GetTexBumpParameterfvATI)) parameters +#define GET_GetTexBumpParameterfvATI(disp) ((disp)->GetTexBumpParameterfvATI) +#define SET_GetTexBumpParameterfvATI(disp, fn) ((disp)->GetTexBumpParameterfvATI = fn) +#define CALL_GetTexBumpParameterivATI(disp, parameters) (*((disp)->GetTexBumpParameterivATI)) parameters +#define GET_GetTexBumpParameterivATI(disp) ((disp)->GetTexBumpParameterivATI) +#define SET_GetTexBumpParameterivATI(disp, fn) ((disp)->GetTexBumpParameterivATI = fn) +#define CALL_TexBumpParameterfvATI(disp, parameters) (*((disp)->TexBumpParameterfvATI)) parameters +#define GET_TexBumpParameterfvATI(disp) ((disp)->TexBumpParameterfvATI) +#define SET_TexBumpParameterfvATI(disp, fn) ((disp)->TexBumpParameterfvATI = fn) +#define CALL_TexBumpParameterivATI(disp, parameters) (*((disp)->TexBumpParameterivATI)) parameters +#define GET_TexBumpParameterivATI(disp) ((disp)->TexBumpParameterivATI) +#define SET_TexBumpParameterivATI(disp, fn) ((disp)->TexBumpParameterivATI = fn) #define CALL_AlphaFragmentOp1ATI(disp, parameters) (*((disp)->AlphaFragmentOp1ATI)) parameters #define GET_AlphaFragmentOp1ATI(disp) ((disp)->AlphaFragmentOp1ATI) #define SET_AlphaFragmentOp1ATI(disp, fn) ((disp)->AlphaFragmentOp1ATI = fn) @@ -2376,7 +2388,7 @@ #else -#define driDispatchRemapTable_size 363 +#define driDispatchRemapTable_size 367 extern int driDispatchRemapTable[ driDispatchRemapTable_size ]; #define AttachShader_remap_index 0 @@ -2689,59 +2701,63 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ]; #define VertexAttribs4fvNV_remap_index 307 #define VertexAttribs4svNV_remap_index 308 #define VertexAttribs4ubvNV_remap_index 309 -#define AlphaFragmentOp1ATI_remap_index 310 -#define AlphaFragmentOp2ATI_remap_index 311 -#define AlphaFragmentOp3ATI_remap_index 312 -#define BeginFragmentShaderATI_remap_index 313 -#define BindFragmentShaderATI_remap_index 314 -#define ColorFragmentOp1ATI_remap_index 315 -#define ColorFragmentOp2ATI_remap_index 316 -#define ColorFragmentOp3ATI_remap_index 317 -#define DeleteFragmentShaderATI_remap_index 318 -#define EndFragmentShaderATI_remap_index 319 -#define GenFragmentShadersATI_remap_index 320 -#define PassTexCoordATI_remap_index 321 -#define SampleMapATI_remap_index 322 -#define SetFragmentShaderConstantATI_remap_index 323 -#define PointParameteriNV_remap_index 324 -#define PointParameterivNV_remap_index 325 -#define ActiveStencilFaceEXT_remap_index 326 -#define BindVertexArrayAPPLE_remap_index 327 -#define DeleteVertexArraysAPPLE_remap_index 328 -#define GenVertexArraysAPPLE_remap_index 329 -#define IsVertexArrayAPPLE_remap_index 330 -#define GetProgramNamedParameterdvNV_remap_index 331 -#define GetProgramNamedParameterfvNV_remap_index 332 -#define ProgramNamedParameter4dNV_remap_index 333 -#define ProgramNamedParameter4dvNV_remap_index 334 -#define ProgramNamedParameter4fNV_remap_index 335 -#define ProgramNamedParameter4fvNV_remap_index 336 -#define DepthBoundsEXT_remap_index 337 -#define BlendEquationSeparateEXT_remap_index 338 -#define BindFramebufferEXT_remap_index 339 -#define BindRenderbufferEXT_remap_index 340 -#define CheckFramebufferStatusEXT_remap_index 341 -#define DeleteFramebuffersEXT_remap_index 342 -#define DeleteRenderbuffersEXT_remap_index 343 -#define FramebufferRenderbufferEXT_remap_index 344 -#define FramebufferTexture1DEXT_remap_index 345 -#define FramebufferTexture2DEXT_remap_index 346 -#define FramebufferTexture3DEXT_remap_index 347 -#define GenFramebuffersEXT_remap_index 348 -#define GenRenderbuffersEXT_remap_index 349 -#define GenerateMipmapEXT_remap_index 350 -#define GetFramebufferAttachmentParameterivEXT_remap_index 351 -#define GetRenderbufferParameterivEXT_remap_index 352 -#define IsFramebufferEXT_remap_index 353 -#define IsRenderbufferEXT_remap_index 354 -#define RenderbufferStorageEXT_remap_index 355 -#define BlitFramebufferEXT_remap_index 356 -#define FramebufferTextureLayerEXT_remap_index 357 -#define StencilFuncSeparateATI_remap_index 358 -#define ProgramEnvParameters4fvEXT_remap_index 359 -#define ProgramLocalParameters4fvEXT_remap_index 360 -#define GetQueryObjecti64vEXT_remap_index 361 -#define GetQueryObjectui64vEXT_remap_index 362 +#define GetTexBumpParameterfvATI_remap_index 310 +#define GetTexBumpParameterivATI_remap_index 311 +#define TexBumpParameterfvATI_remap_index 312 +#define TexBumpParameterivATI_remap_index 313 +#define AlphaFragmentOp1ATI_remap_index 314 +#define AlphaFragmentOp2ATI_remap_index 315 +#define AlphaFragmentOp3ATI_remap_index 316 +#define BeginFragmentShaderATI_remap_index 317 +#define BindFragmentShaderATI_remap_index 318 +#define ColorFragmentOp1ATI_remap_index 319 +#define ColorFragmentOp2ATI_remap_index 320 +#define ColorFragmentOp3ATI_remap_index 321 +#define DeleteFragmentShaderATI_remap_index 322 +#define EndFragmentShaderATI_remap_index 323 +#define GenFragmentShadersATI_remap_index 324 +#define PassTexCoordATI_remap_index 325 +#define SampleMapATI_remap_index 326 +#define SetFragmentShaderConstantATI_remap_index 327 +#define PointParameteriNV_remap_index 328 +#define PointParameterivNV_remap_index 329 +#define ActiveStencilFaceEXT_remap_index 330 +#define BindVertexArrayAPPLE_remap_index 331 +#define DeleteVertexArraysAPPLE_remap_index 332 +#define GenVertexArraysAPPLE_remap_index 333 +#define IsVertexArrayAPPLE_remap_index 334 +#define GetProgramNamedParameterdvNV_remap_index 335 +#define GetProgramNamedParameterfvNV_remap_index 336 +#define ProgramNamedParameter4dNV_remap_index 337 +#define ProgramNamedParameter4dvNV_remap_index 338 +#define ProgramNamedParameter4fNV_remap_index 339 +#define ProgramNamedParameter4fvNV_remap_index 340 +#define DepthBoundsEXT_remap_index 341 +#define BlendEquationSeparateEXT_remap_index 342 +#define BindFramebufferEXT_remap_index 343 +#define BindRenderbufferEXT_remap_index 344 +#define CheckFramebufferStatusEXT_remap_index 345 +#define DeleteFramebuffersEXT_remap_index 346 +#define DeleteRenderbuffersEXT_remap_index 347 +#define FramebufferRenderbufferEXT_remap_index 348 +#define FramebufferTexture1DEXT_remap_index 349 +#define FramebufferTexture2DEXT_remap_index 350 +#define FramebufferTexture3DEXT_remap_index 351 +#define GenFramebuffersEXT_remap_index 352 +#define GenRenderbuffersEXT_remap_index 353 +#define GenerateMipmapEXT_remap_index 354 +#define GetFramebufferAttachmentParameterivEXT_remap_index 355 +#define GetRenderbufferParameterivEXT_remap_index 356 +#define IsFramebufferEXT_remap_index 357 +#define IsRenderbufferEXT_remap_index 358 +#define RenderbufferStorageEXT_remap_index 359 +#define BlitFramebufferEXT_remap_index 360 +#define FramebufferTextureLayerEXT_remap_index 361 +#define StencilFuncSeparateATI_remap_index 362 +#define ProgramEnvParameters4fvEXT_remap_index 363 +#define ProgramLocalParameters4fvEXT_remap_index 364 +#define GetQueryObjecti64vEXT_remap_index 365 +#define GetQueryObjectui64vEXT_remap_index 366 #define CALL_AttachShader(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint)), driDispatchRemapTable[AttachShader_remap_index], parameters) #define GET_AttachShader(disp) GET_by_offset(disp, driDispatchRemapTable[AttachShader_remap_index]) @@ -3673,6 +3689,18 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ]; #define CALL_VertexAttribs4ubvNV(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLsizei, const GLubyte *)), driDispatchRemapTable[VertexAttribs4ubvNV_remap_index], parameters) #define GET_VertexAttribs4ubvNV(disp) GET_by_offset(disp, driDispatchRemapTable[VertexAttribs4ubvNV_remap_index]) #define SET_VertexAttribs4ubvNV(disp, fn) SET_by_offset(disp, driDispatchRemapTable[VertexAttribs4ubvNV_remap_index], fn) +#define CALL_GetTexBumpParameterfvATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLfloat *)), driDispatchRemapTable[GetTexBumpParameterfvATI_remap_index], parameters) +#define GET_GetTexBumpParameterfvATI(disp) GET_by_offset(disp, driDispatchRemapTable[GetTexBumpParameterfvATI_remap_index]) +#define SET_GetTexBumpParameterfvATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetTexBumpParameterfvATI_remap_index], fn) +#define CALL_GetTexBumpParameterivATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint *)), driDispatchRemapTable[GetTexBumpParameterivATI_remap_index], parameters) +#define GET_GetTexBumpParameterivATI(disp) GET_by_offset(disp, driDispatchRemapTable[GetTexBumpParameterivATI_remap_index]) +#define SET_GetTexBumpParameterivATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[GetTexBumpParameterivATI_remap_index], fn) +#define CALL_TexBumpParameterfvATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLfloat *)), driDispatchRemapTable[TexBumpParameterfvATI_remap_index], parameters) +#define GET_TexBumpParameterfvATI(disp) GET_by_offset(disp, driDispatchRemapTable[TexBumpParameterfvATI_remap_index]) +#define SET_TexBumpParameterfvATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TexBumpParameterfvATI_remap_index], fn) +#define CALL_TexBumpParameterivATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, const GLint *)), driDispatchRemapTable[TexBumpParameterivATI_remap_index], parameters) +#define GET_TexBumpParameterivATI(disp) GET_by_offset(disp, driDispatchRemapTable[TexBumpParameterivATI_remap_index]) +#define SET_TexBumpParameterivATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[TexBumpParameterivATI_remap_index], fn) #define CALL_AlphaFragmentOp1ATI(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint, GLuint, GLuint, GLuint, GLuint)), driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index], parameters) #define GET_AlphaFragmentOp1ATI(disp) GET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index]) #define SET_AlphaFragmentOp1ATI(disp, fn) SET_by_offset(disp, driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index], fn) diff --git a/src/mesa/glapi/glX_proto_recv.py b/src/mesa/glapi/glX_proto_recv.py index 923c1958f0..f423c6db08 100644 --- a/src/mesa/glapi/glX_proto_recv.py +++ b/src/mesa/glapi/glX_proto_recv.py @@ -277,7 +277,7 @@ class PrintGlxDispatchFunctions(glX_proto_common.glx_print_proto): if param.is_image(): offset = f.offset_of( param.name ) - print '%s %s const %s = (%s) %s(pc + %s);' % (indent, type_string, param.name, type_string, cond, offset) + print '%s %s const %s = (%s) (%s(pc + %s));' % (indent, type_string, param.name, type_string, cond, offset) if param.depth: print '%s __GLXpixel3DHeader * const hdr = (__GLXpixel3DHeader *)(pc);' % (indent) diff --git a/src/mesa/glapi/gl_API.xml b/src/mesa/glapi/gl_API.xml index 8212fc2477..cc3e3ae6bf 100644 --- a/src/mesa/glapi/gl_API.xml +++ b/src/mesa/glapi/gl_API.xml @@ -11681,6 +11681,56 @@ <enum name="DEPTH_STENCIL_TO_BGRA_NV" value="0x886F"/> </category> +<category name="GL_ATI_envmap_bumpmap" number="244"> + <enum name="BUMP_ROT_MATRIX_ATI" count="4" value="0x8775"> + <size name="TexBumpParameterfv"/> + <size name="TexBumpParameteriv"/> + <size name="GetTexBumpParameterfv" mode="get"/> + <size name="GetTexBumpParameteriv" mode="get"/> + </enum> + <enum name="BUMP_ROT_MATRIX_SIZE_ATI" count="1" value="0x8776"> + <size name="GetTexBumpParameterfv" mode="get"/> + <size name="GetTexBumpParameteriv" mode="get"/> + </enum> + <enum name="BUMP_NUM_TEX_UNITS_ATI" count="1" value="0x8777"> + <size name="GetTexBumpParameterfv" mode="get"/> + <size name="GetTexBumpParameteriv" mode="get"/> + </enum> + <enum name="BUMP_TEX_UNITS_ATI" count="-1" value="0x8778"> + <size name="GetTexBumpParameterfv" mode="get"/> + <size name="GetTexBumpParameteriv" mode="get"/> + </enum> + <enum name="DUDV_ATI" value="0x8779"/> + <enum name="DU8DV8_ATI" value="0x877A"/> + <enum name="BUMP_ENVMAP_ATI" value="0x877B"/> + <enum name="BUMP_TARGET_ATI" count="1" value="0x877C"> + <size name="TexEnviv"/> + <size name="TexEnvfv"/> + <size name="GetTexEnviv" mode="get"/> + <size name="GetTexEnvfv" mode="get"/> + </enum> + <function name="TexBumpParameterfvATI" offset="assign"> + <param name="pname" type="GLenum"/> + <param name="param" type="const GLfloat *" variable_param="pname"/> + <glx ignore="true"/> + </function> + <function name="TexBumpParameterivATI" offset="assign"> + <param name="pname" type="GLenum"/> + <param name="param" type="const GLint *" variable_param="pname"/> + <glx ignore="true"/> + </function> + <function name="GetTexBumpParameterfvATI" offset="assign"> + <param name="pname" type="GLenum"/> + <param name="param" type="GLfloat *" variable_param="pname"/> + <glx ignore="true"/> + </function> + <function name="GetTexBumpParameterivATI" offset="assign"> + <param name="pname" type="GLenum"/> + <param name="param" type="GLint *" variable_param="pname"/> + <glx ignore="true"/> + </function> +</category> + <category name="GL_ATI_fragment_shader" number="245"> <function name="GenFragmentShadersATI" offset="assign"> <return type="GLuint"/> diff --git a/src/mesa/glapi/gl_SPARC_asm.py b/src/mesa/glapi/gl_SPARC_asm.py index 178c00a227..33e752df38 100644 --- a/src/mesa/glapi/gl_SPARC_asm.py +++ b/src/mesa/glapi/gl_SPARC_asm.py @@ -39,80 +39,202 @@ class PrintGenericStubs(gl_XML.gl_print_base): def printRealHeader(self): - print '#include "glapioffsets.h"' + print '#include "glapi/glapioffsets.h"' print '' print '#ifdef __arch64__' - print '# define GL_STUB(fn,off)\t\t\t\t\\' - print 'fn:\t\t\t\t\t\\' - print '\tsethi\t%hi(0xDEADBEEF), %g4 ;\t\t\t\\' - print '\tsethi\t%hi(0xDEADBEEF), %g1 ;\t\t\t\\' - print '\tor\t%g4, %lo(0xDEADBEEF), %g4 ;\t\t\\' - print '\tor\t%g1, %lo(0xDEADBEEF), %g1 ;\t\t\\' - print '\tsllx\t%g4, 32, %g4 ;\t\t\t\t\\' - print '\tldx\t[%g1 + %g4], %g1 ;\t\t\t\\' - print '\tsethi\t%hi(8 * off), %g4 ;\t\t\t\\' - print '\tor\t%g4, %lo(8 * off), %g4 ;\t\t\\' - print '\tldx\t[%g1 + %g4], %g5 ;\t\t\t\\' - print '\tjmpl\t%g5, %g0 ;\t\t\t\t\\' - print '\tnop' + print '#define GL_OFF(N)\t((N) * 8)' + print '#define GL_LL\t\tldx' + print '#define GL_TIE_LD(SYM)\t%tie_ldx(SYM)' + print '#define GL_STACK_SIZE\t128' print '#else' - print '# define GL_STUB(fn,off)\t\t\t\t\\' - print 'fn:\t\t\t\t\t\\' - print '\tsethi\t%hi(0xDEADBEEF), %g1 ;\t\t\t\\' - print '\tld\t[%g1 + %lo(0xDEADBEEF)], %g1 ;\t\t\\' - print '\tld\t[%g1 + (4 * off)], %g5 ;\t\t\\' - print '\tjmpl\t%g5, %g0 ;\t\t\t\t\\' - print '\tnop' + print '#define GL_OFF(N)\t((N) * 4)' + print '#define GL_LL\t\tld' + print '#define GL_TIE_LD(SYM)\t%tie_ld(SYM)' + print '#define GL_STACK_SIZE\t64' print '#endif' print '' - print '#define GL_STUB_ALIAS(fn,alias) fn = alias' + print '#define GLOBL_FN(x) .globl x ; .type x, @function' + print '#define HIDDEN(x) .hidden x' print '' - print '.text' - print '.align 32' - print '\t\t.globl __glapi_sparc_icache_flush ; .type __glapi_sparc_icache_flush,#function' + print '\t.register %g2, #scratch' + print '\t.register %g3, #scratch' + print '' + print '\t.text' + print '' + print '\tGLOBL_FN(__glapi_sparc_icache_flush)' + print '\tHIDDEN(__glapi_sparc_icache_flush)' + print '\t.type\t__glapi_sparc_icache_flush, @function' print '__glapi_sparc_icache_flush: /* %o0 = insn_addr */' print '\tflush\t%o0' print '\tretl' - print '\tnop' + print '\t nop' + print '' + print '\t.align\t32' + print '' + print '\t.type\t__glapi_sparc_get_pc, @function' + print '__glapi_sparc_get_pc:' + print '\tretl' + print '\t add\t%o7, %g2, %g2' + print '\t.size\t__glapi_sparc_get_pc, .-__glapi_sparc_get_pc' + print '' + print '#ifdef GLX_USE_TLS' + print '' + print '\tGLOBL_FN(__glapi_sparc_get_dispatch)' + print '\tHIDDEN(__glapi_sparc_get_dispatch)' + print '__glapi_sparc_get_dispatch:' + print '\tmov\t%o7, %g1' + print '\tsethi\t%hi(_GLOBAL_OFFSET_TABLE_-4), %g2' + print '\tcall\t__glapi_sparc_get_pc' + print '\tadd\t%g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2' + print '\tmov\t%g1, %o7' + print '\tsethi\t%tie_hi22(_glapi_tls_Dispatch), %g1' + print '\tadd\t%g1, %tie_lo10(_glapi_tls_Dispatch), %g1' + print '\tGL_LL\t[%g2 + %g1], %g2, GL_TIE_LD(_glapi_tls_Dispatch)' + print '\tretl' + print '\t mov\t%g2, %o0' + print '' + print '\t.data' + print '\t.align\t32' + print '' + print '\t/* --> sethi %hi(_glapi_tls_Dispatch), %g1 */' + print '\t/* --> or %g1, %lo(_glapi_tls_Dispatch), %g1 */' + print '\tGLOBL_FN(__glapi_sparc_tls_stub)' + print '\tHIDDEN(__glapi_sparc_tls_stub)' + print '__glapi_sparc_tls_stub: /* Call offset in %g3 */' + print '\tmov\t%o7, %g1' + print '\tsethi\t%hi(_GLOBAL_OFFSET_TABLE_-4), %g2' + print '\tcall\t__glapi_sparc_get_pc' + print '\tadd\t%g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2' + print '\tmov\t%g1, %o7' + print '\tsrl\t%g3, 10, %g3' + print '\tsethi\t%tie_hi22(_glapi_tls_Dispatch), %g1' + print '\tadd\t%g1, %tie_lo10(_glapi_tls_Dispatch), %g1' + print '\tGL_LL\t[%g2 + %g1], %g2, GL_TIE_LD(_glapi_tls_Dispatch)' + print '\tGL_LL\t[%g7+%g2], %g1' + print '\tGL_LL\t[%g1 + %g3], %g1' + print '\tjmp\t%g1' + print '\t nop' + print '\t.size\t__glapi_sparc_tls_stub, .-__glapi_sparc_tls_stub' + print '' + print '#define GL_STUB(fn, off)\t\t\t\t\\' + print '\tGLOBL_FN(fn);\t\t\t\t\t\\' + print 'fn:\tba\t__glapi_sparc_tls_stub;\t\t\t\\' + print '\t sethi\tGL_OFF(off), %g3;\t\t\t\\' + print '\t.size\tfn,.-fn;' + print '' + print '#elif defined(PTHREADS)' + print '' + print '\t/* 64-bit 0x00 --> sethi %hh(_glapi_Dispatch), %g1 */' + print '\t/* 64-bit 0x04 --> sethi %lm(_glapi_Dispatch), %g2 */' + print '\t/* 64-bit 0x08 --> or %g1, %hm(_glapi_Dispatch), %g1 */' + print '\t/* 64-bit 0x0c --> sllx %g1, 32, %g1 */' + print '\t/* 64-bit 0x10 --> add %g1, %g2, %g1 */' + print '\t/* 64-bit 0x14 --> ldx [%g1 + %lo(_glapi_Dispatch)], %g1 */' + print '' + print '\t/* 32-bit 0x00 --> sethi %hi(_glapi_Dispatch), %g1 */' + print '\t/* 32-bit 0x04 --> ld [%g1 + %lo(_glapi_Dispatch)], %g1 */' + print '' + print '\t.data' + print '\t.align\t32' + print '' + print '\tGLOBL_FN(__glapi_sparc_pthread_stub)' + print '\tHIDDEN(__glapi_sparc_pthread_stub)' + print '__glapi_sparc_pthread_stub: /* Call offset in %g3 */' + print '\tmov\t%o7, %g1' + print '\tsethi\t%hi(_GLOBAL_OFFSET_TABLE_-4), %g2' + print '\tcall\t__glapi_sparc_get_pc' + print '\t add\t%g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2' + print '\tmov\t%g1, %o7' + print '\tsethi\t%hi(_glapi_Dispatch), %g1' + print '\tor\t%g1, %lo(_glapi_Dispatch), %g1' + print '\tsrl\t%g3, 10, %g3' + print '\tGL_LL\t[%g2+%g1], %g2' + print '\tGL_LL\t[%g2], %g1' + print '\tcmp\t%g1, 0' + print '\tbe\t2f' + print '\t nop' + print '1:\tGL_LL\t[%g1 + %g3], %g1' + print '\tjmp\t%g1' + print '\t nop' + print '2:\tsave\t%sp, GL_STACK_SIZE, %sp' + print '\tmov\t%g3, %l0' + print '\tcall\t_glapi_get_dispatch' + print '\t nop' + print '\tmov\t%o0, %g1' + print '\tmov\t%l0, %g3' + print '\tba\t1b' + print '\t restore %g0, %g0, %g0' + print '\t.size\t__glapi_sparc_pthread_stub, .-__glapi_sparc_pthread_stub' + print '' + print '#define GL_STUB(fn, off)\t\t\t\\' + print '\tGLOBL_FN(fn);\t\t\t\t\\' + print 'fn:\tba\t__glapi_sparc_pthread_stub;\t\\' + print '\t sethi\tGL_OFF(off), %g3;\t\t\\' + print '\t.size\tfn,.-fn;' + print '' + print '#else /* Non-threaded version. */' print '' - print '.data' - print '.align 64' + print '\t.type __glapi_sparc_nothread_stub, @function' + print '__glapi_sparc_nothread_stub: /* Call offset in %g3 */' + print '\tmov\t%o7, %g1' + print '\tsethi\t%hi(_GLOBAL_OFFSET_TABLE_-4), %g2' + print '\tcall\t__glapi_sparc_get_pc' + print '\t add\t%g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2' + print '\tmov\t%g1, %o7' + print '\tsrl\t%g3, 10, %g3' + print '\tsethi\t%hi(_glapi_Dispatch), %g1' + print '\tor\t%g1, %lo(_glapi_Dispatch), %g1' + print '\tGL_LL\t[%g2+%g1], %g2' + print '\tGL_LL\t[%g2], %g1' + print '\tGL_LL\t[%g1 + %g3], %g1' + print '\tjmp\t%g1' + print '\t nop' + print '\t.size\t__glapi_sparc_nothread_stub, .-__glapi_sparc_nothread_stub' + print '' + print '#define GL_STUB(fn, off)\t\t\t\\' + print '\tGLOBL_FN(fn);\t\t\t\t\\' + print 'fn:\tba\t__glapi_sparc_nothread_stub;\t\\' + print '\t sethi\tGL_OFF(off), %g3;\t\t\\' + print '\t.size\tfn,.-fn;' + print '' + print '#endif' + print '' + print '#define GL_STUB_ALIAS(fn, alias) \\' + print ' .globl fn; \\' + print ' .set fn, alias' + print '' + print '\t.text' + print '\t.align\t32' + print '' + print '\t.globl\tgl_dispatch_functions_start' + print '\tHIDDEN(gl_dispatch_functions_start)' + print 'gl_dispatch_functions_start:' print '' return + def printRealFooter(self): + print '' + print '\t.globl\tgl_dispatch_functions_end' + print '\tHIDDEN(gl_dispatch_functions_end)' + print 'gl_dispatch_functions_end:' + return def printBody(self, api): for f in api.functionIterateByOffset(): - if f.is_static_entry_point(f.name): - name = f.name - else: - name = "_dispatch_stub_%u" % (f.offset) + name = f.dispatch_name() - print '\t\t.globl gl%s ; .type gl%s,#function' % (name, name) + print '\tGL_STUB(gl%s, _gloffset_%s)' % (name, f.name) - print '\t\t.globl _mesa_sparc_glapi_begin ; .type _mesa_sparc_glapi_begin,#function' - print '_mesa_sparc_glapi_begin:' - print '' + if not f.is_static_entry_point(f.name): + print '\tHIDDEN(gl%s)' % (name) for f in api.functionIterateByOffset(): - if f.is_static_entry_point(f.name): - name = f.name - else: - name = "_dispatch_stub_%u" % (f.offset) - - print '\tGL_STUB(gl%s, _gloffset_%s)' % (name, name) + name = f.dispatch_name() - print '' - print '\t\t.globl _mesa_sparc_glapi_end ; .type _mesa_sparc_glapi_end,#function' - print '_mesa_sparc_glapi_end:' - print '' - - - for f in api.functionIterateByOffset(): - for n in f.entry_points: - if n != f.name: - if f.is_static_entry_point(n): - text = '\t.globl gl%s ; .type gl%s,#function ; gl%s = gl%s' % (n, n, n, f.name) + if f.is_static_entry_point(f.name): + for n in f.entry_points: + if n != f.name: + text = '\tGL_STUB_ALIAS(gl%s, gl%s)' % (n, f.name) if f.has_different_protocol(n): print '#ifndef GLX_INDIRECT_RENDERING' diff --git a/src/mesa/glapi/gl_enums.py b/src/mesa/glapi/gl_enums.py index 67fec7968a..b32e012663 100644 --- a/src/mesa/glapi/gl_enums.py +++ b/src/mesa/glapi/gl_enums.py @@ -43,6 +43,7 @@ class PrintGlEnums(gl_XML.gl_print_base): def printRealHeader(self): print '#include "glheader.h"' + print '#include "mfeatures.h"' print '#include "enums.h"' print '#include "imports.h"' print '' @@ -55,8 +56,6 @@ class PrintGlEnums(gl_XML.gl_print_base): def print_code(self): print """ -#define Elements(x) sizeof(x)/sizeof(*x) - typedef int (*cfunc)(const void *, const void *); /** diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c index 9b5144a88b..2b105d0f17 100644 --- a/src/mesa/glapi/glapi.c +++ b/src/mesa/glapi/glapi.c @@ -61,6 +61,8 @@ #endif +#include "main/compiler.h" + #include <stdlib.h> #include <string.h> #ifdef DEBUG @@ -316,6 +318,14 @@ extern const GLubyte gl_dispatch_functions_start[]; # endif #endif +#ifdef USE_SPARC_ASM +#ifdef GLX_USE_TLS +extern unsigned int __glapi_sparc_tls_stub; +#else +extern unsigned int __glapi_sparc_pthread_stub; +#endif +#endif + #if !defined(DISPATCH_FUNCTION_SIZE) && !defined(XFree86Server) && !defined(XGLServer) # define NEED_FUNCTION_POINTER #endif @@ -342,6 +352,129 @@ init_glapi_relocs( void ) curr_func += DISPATCH_FUNCTION_SIZE; } #endif +#ifdef USE_SPARC_ASM + extern void __glapi_sparc_icache_flush(unsigned int *); + static const unsigned int template[] = { +#ifdef GLX_USE_TLS + 0x05000000, /* sethi %hi(_glapi_tls_Dispatch), %g2 */ + 0x8730e00a, /* srl %g3, 10, %g3 */ + 0x8410a000, /* or %g2, %lo(_glapi_tls_Dispatch), %g2 */ +#ifdef __arch64__ + 0xc259c002, /* ldx [%g7 + %g2], %g1 */ + 0xc2584003, /* ldx [%g1 + %g3], %g1 */ +#else + 0xc201c002, /* ld [%g7 + %g2], %g1 */ + 0xc2004003, /* ld [%g1 + %g3], %g1 */ +#endif + 0x81c04000, /* jmp %g1 */ + 0x01000000, /* nop */ +#else +#ifdef __arch64__ + 0x03000000, /* 64-bit 0x00 --> sethi %hh(_glapi_Dispatch), %g1 */ + 0x05000000, /* 64-bit 0x04 --> sethi %lm(_glapi_Dispatch), %g2 */ + 0x82106000, /* 64-bit 0x08 --> or %g1, %hm(_glapi_Dispatch), %g1 */ + 0x8730e00a, /* 64-bit 0x0c --> srl %g3, 10, %g3 */ + 0x83287020, /* 64-bit 0x10 --> sllx %g1, 32, %g1 */ + 0x82004002, /* 64-bit 0x14 --> add %g1, %g2, %g1 */ + 0xc2586000, /* 64-bit 0x18 --> ldx [%g1 + %lo(_glapi_Dispatch)], %g1 */ +#else + 0x03000000, /* 32-bit 0x00 --> sethi %hi(_glapi_Dispatch), %g1 */ + 0x8730e00a, /* 32-bit 0x04 --> srl %g3, 10, %g3 */ + 0xc2006000, /* 32-bit 0x08 --> ld [%g1 + %lo(_glapi_Dispatch)], %g1 */ +#endif + 0x80a06000, /* --> cmp %g1, 0 */ + 0x02800005, /* --> be +4*5 */ + 0x01000000, /* --> nop */ +#ifdef __arch64__ + 0xc2584003, /* 64-bit --> ldx [%g1 + %g3], %g1 */ +#else + 0xc2004003, /* 32-bit --> ld [%g1 + %g3], %g1 */ +#endif + 0x81c04000, /* --> jmp %g1 */ + 0x01000000, /* --> nop */ +#ifdef __arch64__ + 0x9de3bf80, /* 64-bit --> save %sp, -128, %sp */ +#else + 0x9de3bfc0, /* 32-bit --> save %sp, -64, %sp */ +#endif + 0xa0100003, /* --> mov %g3, %l0 */ + 0x40000000, /* --> call _glapi_get_dispatch */ + 0x01000000, /* --> nop */ + 0x82100008, /* --> mov %o0, %g1 */ + 0x86100010, /* --> mov %l0, %g3 */ + 0x10bffff7, /* --> ba -4*9 */ + 0x81e80000, /* --> restore */ +#endif + }; +#ifdef GLX_USE_TLS + extern unsigned long __glapi_sparc_get_dispatch(void); + unsigned int *code = &__glapi_sparc_tls_stub; + unsigned long dispatch = __glapi_sparc_get_dispatch(); +#else + unsigned int *code = &__glapi_sparc_pthread_stub; + unsigned long dispatch = (unsigned long) &_glapi_Dispatch; + unsigned long call_dest = (unsigned long ) &_glapi_get_dispatch; + int idx; +#endif + +#if defined(GLX_USE_TLS) + code[0] = template[0] | (dispatch >> 10); + code[1] = template[1]; + __glapi_sparc_icache_flush(&code[0]); + code[2] = template[2] | (dispatch & 0x3ff); + code[3] = template[3]; + __glapi_sparc_icache_flush(&code[2]); + code[4] = template[4]; + code[5] = template[5]; + __glapi_sparc_icache_flush(&code[4]); + code[6] = template[6]; + __glapi_sparc_icache_flush(&code[6]); +#else +#if defined(__arch64__) + code[0] = template[0] | (dispatch >> (32 + 10)); + code[1] = template[1] | ((dispatch & 0xffffffff) >> 10); + __glapi_sparc_icache_flush(&code[0]); + code[2] = template[2] | ((dispatch >> 32) & 0x3ff); + code[3] = template[3]; + __glapi_sparc_icache_flush(&code[2]); + code[4] = template[4]; + code[5] = template[5]; + __glapi_sparc_icache_flush(&code[4]); + code[6] = template[6] | (dispatch & 0x3ff); + idx = 7; +#else + code[0] = template[0] | (dispatch >> 10); + code[1] = template[1]; + __glapi_sparc_icache_flush(&code[0]); + code[2] = template[2] | (dispatch & 0x3ff); + idx = 3; +#endif + code[idx + 0] = template[idx + 0]; + __glapi_sparc_icache_flush(&code[idx - 1]); + code[idx + 1] = template[idx + 1]; + code[idx + 2] = template[idx + 2]; + __glapi_sparc_icache_flush(&code[idx + 1]); + code[idx + 3] = template[idx + 3]; + code[idx + 4] = template[idx + 4]; + __glapi_sparc_icache_flush(&code[idx + 3]); + code[idx + 5] = template[idx + 5]; + code[idx + 6] = template[idx + 6]; + __glapi_sparc_icache_flush(&code[idx + 5]); + code[idx + 7] = template[idx + 7]; + code[idx + 8] = template[idx + 8] | + (((call_dest - ((unsigned long) &code[idx + 8])) + >> 2) & 0x3fffffff); + __glapi_sparc_icache_flush(&code[idx + 7]); + code[idx + 9] = template[idx + 9]; + code[idx + 10] = template[idx + 10]; + __glapi_sparc_icache_flush(&code[idx + 9]); + code[idx + 11] = template[idx + 11]; + code[idx + 12] = template[idx + 12]; + __glapi_sparc_icache_flush(&code[idx + 11]); + code[idx + 13] = template[idx + 13]; + __glapi_sparc_icache_flush(&code[idx + 13]); +#endif +#endif } #endif /* defined(PTHREADS) || defined(GLX_USE_TLS) */ diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c index 6d40b495c7..ed443c12c8 100644 --- a/src/mesa/glapi/glapi_getproc.c +++ b/src/mesa/glapi/glapi_getproc.c @@ -23,7 +23,7 @@ */ /** - * \file glapi_getproc. + * \file glapi_getproc.c * * Code for implementing glXGetProcAddress(), etc. * This was originally in glapi.c but refactored out. @@ -33,6 +33,7 @@ #include <stdlib.h> #include <string.h> #include "main/glheader.h" +#include "main/compiler.h" #include "glapi.h" #include "glapioffsets.h" #include "glapitable.h" @@ -87,7 +88,13 @@ find_entry( const char * n ) GLuint i; for (i = 0; static_functions[i].Name_offset >= 0; i++) { const char *testName = gl_string_table + static_functions[i].Name_offset; - if (strcmp(testName, n) == 0) { +#ifdef MANGLE + /* skip the "m" prefix on the name */ + if (strcmp(testName, n + 1) == 0) +#else + if (strcmp(testName, n) == 0) +#endif + { return &static_functions[i]; } } @@ -252,53 +259,30 @@ generate_entrypoint(GLuint functionOffset) } return (_glapi_proc) code; -#elif defined(USE_SPARC_ASM) - -#ifdef __arch64__ - static const unsigned int insn_template[] = { - 0x05000000, /* sethi %uhi(_glapi_Dispatch), %g2 */ - 0x03000000, /* sethi %hi(_glapi_Dispatch), %g1 */ - 0x8410a000, /* or %g2, %ulo(_glapi_Dispatch), %g2 */ - 0x82106000, /* or %g1, %lo(_glapi_Dispatch), %g1 */ - 0x8528b020, /* sllx %g2, 32, %g2 */ - 0xc2584002, /* ldx [%g1 + %g2], %g1 */ - 0x05000000, /* sethi %hi(8 * glapioffset), %g2 */ - 0x8410a000, /* or %g2, %lo(8 * glapioffset), %g2 */ - 0xc6584002, /* ldx [%g1 + %g2], %g3 */ - 0x81c0c000, /* jmpl %g3, %g0 */ - 0x01000000 /* nop */ +#elif defined(USE_SPARC_ASM) && (defined(PTHREADS) || defined(GLX_USE_TLS)) + static const unsigned int template[] = { + 0x07000000, /* sethi %hi(0), %g3 */ + 0x8210000f, /* mov %o7, %g1 */ + 0x40000000, /* call */ + 0x9e100001, /* mov %g1, %o7 */ }; +#ifdef GLX_USE_TLS + extern unsigned int __glapi_sparc_tls_stub; + unsigned long call_dest = (unsigned long ) &__glapi_sparc_tls_stub; #else - static const unsigned int insn_template[] = { - 0x03000000, /* sethi %hi(_glapi_Dispatch), %g1 */ - 0xc2006000, /* ld [%g1 + %lo(_glapi_Dispatch)], %g1 */ - 0xc6006000, /* ld [%g1 + %lo(4*glapioffset)], %g3 */ - 0x81c0c000, /* jmpl %g3, %g0 */ - 0x01000000 /* nop */ - }; -#endif /* __arch64__ */ - unsigned int *code = (unsigned int *) malloc(sizeof(insn_template)); - unsigned long glapi_addr = (unsigned long) &_glapi_Dispatch; + extern unsigned int __glapi_sparc_pthread_stub; + unsigned long call_dest = (unsigned long ) &__glapi_sparc_pthread_stub; +#endif + unsigned int *code = (unsigned int *) malloc(sizeof(template)); if (code) { - memcpy(code, insn_template, sizeof(insn_template)); - -#ifdef __arch64__ - code[0] |= (glapi_addr >> (32 + 10)); - code[1] |= ((glapi_addr & 0xffffffff) >> 10); - __glapi_sparc_icache_flush(&code[0]); - code[2] |= ((glapi_addr >> 32) & ((1 << 10) - 1)); - code[3] |= (glapi_addr & ((1 << 10) - 1)); - __glapi_sparc_icache_flush(&code[2]); - code[6] |= ((functionOffset * 8) >> 10); - code[7] |= ((functionOffset * 8) & ((1 << 10) - 1)); - __glapi_sparc_icache_flush(&code[6]); -#else - code[0] |= (glapi_addr >> 10); - code[1] |= (glapi_addr & ((1 << 10) - 1)); + code[0] = template[0] | (functionOffset & 0x3fffff); + code[1] = template[1]; __glapi_sparc_icache_flush(&code[0]); - code[2] |= (functionOffset * 4); + code[2] = template[2] | + (((call_dest - ((unsigned long) &code[2])) + >> 2) & 0x3fffffff); + code[3] = template[3]; __glapi_sparc_icache_flush(&code[2]); -#endif /* __arch64__ */ } return (_glapi_proc) code; #else @@ -330,21 +314,10 @@ fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset) #endif #elif defined(USE_SPARC_ASM) - - /* XXX this hasn't been tested! */ unsigned int *code = (unsigned int *) entrypoint; -#ifdef __arch64__ - code[6] = 0x05000000; /* sethi %hi(8 * glapioffset), %g2 */ - code[7] = 0x8410a000; /* or %g2, %lo(8 * glapioffset), %g2 */ - code[6] |= ((offset * 8) >> 10); - code[7] |= ((offset * 8) & ((1 << 10) - 1)); - __glapi_sparc_icache_flush(&code[6]); -#else /* __arch64__ */ - code[2] = 0xc6006000; /* ld [%g1 + %lo(4*glapioffset)], %g3 */ - code[2] |= (offset * 4); - __glapi_sparc_icache_flush(&code[2]); -#endif /* __arch64__ */ - + code[0] &= ~0x3fffff; + code[0] |= (offset * sizeof(void *)) & 0x3fffff; + __glapi_sparc_icache_flush(&code[0]); #else /* an unimplemented architecture */ diff --git a/src/mesa/glapi/glapioffsets.h b/src/mesa/glapi/glapioffsets.h index f412234ac5..14f305f025 100644 --- a/src/mesa/glapi/glapioffsets.h +++ b/src/mesa/glapi/glapioffsets.h @@ -750,60 +750,64 @@ #define _gloffset_VertexAttribs4fvNV 715 #define _gloffset_VertexAttribs4svNV 716 #define _gloffset_VertexAttribs4ubvNV 717 -#define _gloffset_AlphaFragmentOp1ATI 718 -#define _gloffset_AlphaFragmentOp2ATI 719 -#define _gloffset_AlphaFragmentOp3ATI 720 -#define _gloffset_BeginFragmentShaderATI 721 -#define _gloffset_BindFragmentShaderATI 722 -#define _gloffset_ColorFragmentOp1ATI 723 -#define _gloffset_ColorFragmentOp2ATI 724 -#define _gloffset_ColorFragmentOp3ATI 725 -#define _gloffset_DeleteFragmentShaderATI 726 -#define _gloffset_EndFragmentShaderATI 727 -#define _gloffset_GenFragmentShadersATI 728 -#define _gloffset_PassTexCoordATI 729 -#define _gloffset_SampleMapATI 730 -#define _gloffset_SetFragmentShaderConstantATI 731 -#define _gloffset_PointParameteriNV 732 -#define _gloffset_PointParameterivNV 733 -#define _gloffset_ActiveStencilFaceEXT 734 -#define _gloffset_BindVertexArrayAPPLE 735 -#define _gloffset_DeleteVertexArraysAPPLE 736 -#define _gloffset_GenVertexArraysAPPLE 737 -#define _gloffset_IsVertexArrayAPPLE 738 -#define _gloffset_GetProgramNamedParameterdvNV 739 -#define _gloffset_GetProgramNamedParameterfvNV 740 -#define _gloffset_ProgramNamedParameter4dNV 741 -#define _gloffset_ProgramNamedParameter4dvNV 742 -#define _gloffset_ProgramNamedParameter4fNV 743 -#define _gloffset_ProgramNamedParameter4fvNV 744 -#define _gloffset_DepthBoundsEXT 745 -#define _gloffset_BlendEquationSeparateEXT 746 -#define _gloffset_BindFramebufferEXT 747 -#define _gloffset_BindRenderbufferEXT 748 -#define _gloffset_CheckFramebufferStatusEXT 749 -#define _gloffset_DeleteFramebuffersEXT 750 -#define _gloffset_DeleteRenderbuffersEXT 751 -#define _gloffset_FramebufferRenderbufferEXT 752 -#define _gloffset_FramebufferTexture1DEXT 753 -#define _gloffset_FramebufferTexture2DEXT 754 -#define _gloffset_FramebufferTexture3DEXT 755 -#define _gloffset_GenFramebuffersEXT 756 -#define _gloffset_GenRenderbuffersEXT 757 -#define _gloffset_GenerateMipmapEXT 758 -#define _gloffset_GetFramebufferAttachmentParameterivEXT 759 -#define _gloffset_GetRenderbufferParameterivEXT 760 -#define _gloffset_IsFramebufferEXT 761 -#define _gloffset_IsRenderbufferEXT 762 -#define _gloffset_RenderbufferStorageEXT 763 -#define _gloffset_BlitFramebufferEXT 764 -#define _gloffset_FramebufferTextureLayerEXT 765 -#define _gloffset_StencilFuncSeparateATI 766 -#define _gloffset_ProgramEnvParameters4fvEXT 767 -#define _gloffset_ProgramLocalParameters4fvEXT 768 -#define _gloffset_GetQueryObjecti64vEXT 769 -#define _gloffset_GetQueryObjectui64vEXT 770 -#define _gloffset_FIRST_DYNAMIC 771 +#define _gloffset_GetTexBumpParameterfvATI 718 +#define _gloffset_GetTexBumpParameterivATI 719 +#define _gloffset_TexBumpParameterfvATI 720 +#define _gloffset_TexBumpParameterivATI 721 +#define _gloffset_AlphaFragmentOp1ATI 722 +#define _gloffset_AlphaFragmentOp2ATI 723 +#define _gloffset_AlphaFragmentOp3ATI 724 +#define _gloffset_BeginFragmentShaderATI 725 +#define _gloffset_BindFragmentShaderATI 726 +#define _gloffset_ColorFragmentOp1ATI 727 +#define _gloffset_ColorFragmentOp2ATI 728 +#define _gloffset_ColorFragmentOp3ATI 729 +#define _gloffset_DeleteFragmentShaderATI 730 +#define _gloffset_EndFragmentShaderATI 731 +#define _gloffset_GenFragmentShadersATI 732 +#define _gloffset_PassTexCoordATI 733 +#define _gloffset_SampleMapATI 734 +#define _gloffset_SetFragmentShaderConstantATI 735 +#define _gloffset_PointParameteriNV 736 +#define _gloffset_PointParameterivNV 737 +#define _gloffset_ActiveStencilFaceEXT 738 +#define _gloffset_BindVertexArrayAPPLE 739 +#define _gloffset_DeleteVertexArraysAPPLE 740 +#define _gloffset_GenVertexArraysAPPLE 741 +#define _gloffset_IsVertexArrayAPPLE 742 +#define _gloffset_GetProgramNamedParameterdvNV 743 +#define _gloffset_GetProgramNamedParameterfvNV 744 +#define _gloffset_ProgramNamedParameter4dNV 745 +#define _gloffset_ProgramNamedParameter4dvNV 746 +#define _gloffset_ProgramNamedParameter4fNV 747 +#define _gloffset_ProgramNamedParameter4fvNV 748 +#define _gloffset_DepthBoundsEXT 749 +#define _gloffset_BlendEquationSeparateEXT 750 +#define _gloffset_BindFramebufferEXT 751 +#define _gloffset_BindRenderbufferEXT 752 +#define _gloffset_CheckFramebufferStatusEXT 753 +#define _gloffset_DeleteFramebuffersEXT 754 +#define _gloffset_DeleteRenderbuffersEXT 755 +#define _gloffset_FramebufferRenderbufferEXT 756 +#define _gloffset_FramebufferTexture1DEXT 757 +#define _gloffset_FramebufferTexture2DEXT 758 +#define _gloffset_FramebufferTexture3DEXT 759 +#define _gloffset_GenFramebuffersEXT 760 +#define _gloffset_GenRenderbuffersEXT 761 +#define _gloffset_GenerateMipmapEXT 762 +#define _gloffset_GetFramebufferAttachmentParameterivEXT 763 +#define _gloffset_GetRenderbufferParameterivEXT 764 +#define _gloffset_IsFramebufferEXT 765 +#define _gloffset_IsRenderbufferEXT 766 +#define _gloffset_RenderbufferStorageEXT 767 +#define _gloffset_BlitFramebufferEXT 768 +#define _gloffset_FramebufferTextureLayerEXT 769 +#define _gloffset_StencilFuncSeparateATI 770 +#define _gloffset_ProgramEnvParameters4fvEXT 771 +#define _gloffset_ProgramLocalParameters4fvEXT 772 +#define _gloffset_GetQueryObjecti64vEXT 773 +#define _gloffset_GetQueryObjectui64vEXT 774 +#define _gloffset_FIRST_DYNAMIC 775 #else @@ -1117,6 +1121,10 @@ #define _gloffset_VertexAttribs4fvNV driDispatchRemapTable[VertexAttribs4fvNV_remap_index] #define _gloffset_VertexAttribs4svNV driDispatchRemapTable[VertexAttribs4svNV_remap_index] #define _gloffset_VertexAttribs4ubvNV driDispatchRemapTable[VertexAttribs4ubvNV_remap_index] +#define _gloffset_GetTexBumpParameterfvATI driDispatchRemapTable[GetTexBumpParameterfvATI_remap_index] +#define _gloffset_GetTexBumpParameterivATI driDispatchRemapTable[GetTexBumpParameterivATI_remap_index] +#define _gloffset_TexBumpParameterfvATI driDispatchRemapTable[TexBumpParameterfvATI_remap_index] +#define _gloffset_TexBumpParameterivATI driDispatchRemapTable[TexBumpParameterivATI_remap_index] #define _gloffset_AlphaFragmentOp1ATI driDispatchRemapTable[AlphaFragmentOp1ATI_remap_index] #define _gloffset_AlphaFragmentOp2ATI driDispatchRemapTable[AlphaFragmentOp2ATI_remap_index] #define _gloffset_AlphaFragmentOp3ATI driDispatchRemapTable[AlphaFragmentOp3ATI_remap_index] diff --git a/src/mesa/glapi/glapitable.h b/src/mesa/glapi/glapitable.h index 2ae9bf6738..9ecb036461 100644 --- a/src/mesa/glapi/glapitable.h +++ b/src/mesa/glapi/glapitable.h @@ -758,59 +758,63 @@ struct _glapi_table void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 715 */ void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 716 */ void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 717 */ - void (GLAPIENTRYP AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 718 */ - void (GLAPIENTRYP AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 719 */ - void (GLAPIENTRYP AlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 720 */ - void (GLAPIENTRYP BeginFragmentShaderATI)(void); /* 721 */ - void (GLAPIENTRYP BindFragmentShaderATI)(GLuint id); /* 722 */ - void (GLAPIENTRYP ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 723 */ - void (GLAPIENTRYP ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 724 */ - void (GLAPIENTRYP ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 725 */ - void (GLAPIENTRYP DeleteFragmentShaderATI)(GLuint id); /* 726 */ - void (GLAPIENTRYP EndFragmentShaderATI)(void); /* 727 */ - GLuint (GLAPIENTRYP GenFragmentShadersATI)(GLuint range); /* 728 */ - void (GLAPIENTRYP PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); /* 729 */ - void (GLAPIENTRYP SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); /* 730 */ - void (GLAPIENTRYP SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); /* 731 */ - void (GLAPIENTRYP PointParameteriNV)(GLenum pname, GLint param); /* 732 */ - void (GLAPIENTRYP PointParameterivNV)(GLenum pname, const GLint * params); /* 733 */ - void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 734 */ - void (GLAPIENTRYP BindVertexArrayAPPLE)(GLuint array); /* 735 */ - void (GLAPIENTRYP DeleteVertexArraysAPPLE)(GLsizei n, const GLuint * arrays); /* 736 */ - void (GLAPIENTRYP GenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); /* 737 */ - GLboolean (GLAPIENTRYP IsVertexArrayAPPLE)(GLuint array); /* 738 */ - void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 739 */ - void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 740 */ - void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 741 */ - void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 742 */ - void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 743 */ - void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 744 */ - void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 745 */ - void (GLAPIENTRYP BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA); /* 746 */ - void (GLAPIENTRYP BindFramebufferEXT)(GLenum target, GLuint framebuffer); /* 747 */ - void (GLAPIENTRYP BindRenderbufferEXT)(GLenum target, GLuint renderbuffer); /* 748 */ - GLenum (GLAPIENTRYP CheckFramebufferStatusEXT)(GLenum target); /* 749 */ - void (GLAPIENTRYP DeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers); /* 750 */ - void (GLAPIENTRYP DeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers); /* 751 */ - void (GLAPIENTRYP FramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); /* 752 */ - void (GLAPIENTRYP FramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 753 */ - void (GLAPIENTRYP FramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 754 */ - void (GLAPIENTRYP FramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); /* 755 */ - void (GLAPIENTRYP GenFramebuffersEXT)(GLsizei n, GLuint * framebuffers); /* 756 */ - void (GLAPIENTRYP GenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers); /* 757 */ - void (GLAPIENTRYP GenerateMipmapEXT)(GLenum target); /* 758 */ - void (GLAPIENTRYP GetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params); /* 759 */ - void (GLAPIENTRYP GetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 760 */ - GLboolean (GLAPIENTRYP IsFramebufferEXT)(GLuint framebuffer); /* 761 */ - GLboolean (GLAPIENTRYP IsRenderbufferEXT)(GLuint renderbuffer); /* 762 */ - void (GLAPIENTRYP RenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); /* 763 */ - void (GLAPIENTRYP BlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); /* 764 */ - void (GLAPIENTRYP FramebufferTextureLayerEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); /* 765 */ - void (GLAPIENTRYP StencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); /* 766 */ - void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 767 */ - void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 768 */ - void (GLAPIENTRYP GetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64EXT * params); /* 769 */ - void (GLAPIENTRYP GetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64EXT * params); /* 770 */ + void (GLAPIENTRYP GetTexBumpParameterfvATI)(GLenum pname, GLfloat * param); /* 718 */ + void (GLAPIENTRYP GetTexBumpParameterivATI)(GLenum pname, GLint * param); /* 719 */ + void (GLAPIENTRYP TexBumpParameterfvATI)(GLenum pname, const GLfloat * param); /* 720 */ + void (GLAPIENTRYP TexBumpParameterivATI)(GLenum pname, const GLint * param); /* 721 */ + void (GLAPIENTRYP AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 722 */ + void (GLAPIENTRYP AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 723 */ + void (GLAPIENTRYP AlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 724 */ + void (GLAPIENTRYP BeginFragmentShaderATI)(void); /* 725 */ + void (GLAPIENTRYP BindFragmentShaderATI)(GLuint id); /* 726 */ + void (GLAPIENTRYP ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 727 */ + void (GLAPIENTRYP ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 728 */ + void (GLAPIENTRYP ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 729 */ + void (GLAPIENTRYP DeleteFragmentShaderATI)(GLuint id); /* 730 */ + void (GLAPIENTRYP EndFragmentShaderATI)(void); /* 731 */ + GLuint (GLAPIENTRYP GenFragmentShadersATI)(GLuint range); /* 732 */ + void (GLAPIENTRYP PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); /* 733 */ + void (GLAPIENTRYP SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); /* 734 */ + void (GLAPIENTRYP SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); /* 735 */ + void (GLAPIENTRYP PointParameteriNV)(GLenum pname, GLint param); /* 736 */ + void (GLAPIENTRYP PointParameterivNV)(GLenum pname, const GLint * params); /* 737 */ + void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 738 */ + void (GLAPIENTRYP BindVertexArrayAPPLE)(GLuint array); /* 739 */ + void (GLAPIENTRYP DeleteVertexArraysAPPLE)(GLsizei n, const GLuint * arrays); /* 740 */ + void (GLAPIENTRYP GenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); /* 741 */ + GLboolean (GLAPIENTRYP IsVertexArrayAPPLE)(GLuint array); /* 742 */ + void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 743 */ + void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 744 */ + void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 745 */ + void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 746 */ + void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 747 */ + void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 748 */ + void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 749 */ + void (GLAPIENTRYP BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA); /* 750 */ + void (GLAPIENTRYP BindFramebufferEXT)(GLenum target, GLuint framebuffer); /* 751 */ + void (GLAPIENTRYP BindRenderbufferEXT)(GLenum target, GLuint renderbuffer); /* 752 */ + GLenum (GLAPIENTRYP CheckFramebufferStatusEXT)(GLenum target); /* 753 */ + void (GLAPIENTRYP DeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers); /* 754 */ + void (GLAPIENTRYP DeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers); /* 755 */ + void (GLAPIENTRYP FramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); /* 756 */ + void (GLAPIENTRYP FramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 757 */ + void (GLAPIENTRYP FramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 758 */ + void (GLAPIENTRYP FramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); /* 759 */ + void (GLAPIENTRYP GenFramebuffersEXT)(GLsizei n, GLuint * framebuffers); /* 760 */ + void (GLAPIENTRYP GenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers); /* 761 */ + void (GLAPIENTRYP GenerateMipmapEXT)(GLenum target); /* 762 */ + void (GLAPIENTRYP GetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params); /* 763 */ + void (GLAPIENTRYP GetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 764 */ + GLboolean (GLAPIENTRYP IsFramebufferEXT)(GLuint framebuffer); /* 765 */ + GLboolean (GLAPIENTRYP IsRenderbufferEXT)(GLuint renderbuffer); /* 766 */ + void (GLAPIENTRYP RenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); /* 767 */ + void (GLAPIENTRYP BlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); /* 768 */ + void (GLAPIENTRYP FramebufferTextureLayerEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); /* 769 */ + void (GLAPIENTRYP StencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); /* 770 */ + void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 771 */ + void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 772 */ + void (GLAPIENTRYP GetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64EXT * params); /* 773 */ + void (GLAPIENTRYP GetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64EXT * params); /* 774 */ }; #endif /* !defined( _GLAPI_TABLE_H_ ) */ diff --git a/src/mesa/glapi/glapitemp.h b/src/mesa/glapi/glapitemp.h index 960d70e081..7ccd9707c3 100644 --- a/src/mesa/glapi/glapitemp.h +++ b/src/mesa/glapi/glapitemp.h @@ -5187,6 +5187,26 @@ KEYWORD1 void KEYWORD2 NAME(VertexAttribs4ubvNV)(GLuint index, GLsizei n, const DISPATCH(VertexAttribs4ubvNV, (index, n, v), (F, "glVertexAttribs4ubvNV(%d, %d, %p);\n", index, n, (const void *) v)); } +KEYWORD1 void KEYWORD2 NAME(GetTexBumpParameterfvATI)(GLenum pname, GLfloat * param) +{ + DISPATCH(GetTexBumpParameterfvATI, (pname, param), (F, "glGetTexBumpParameterfvATI(0x%x, %p);\n", pname, (const void *) param)); +} + +KEYWORD1 void KEYWORD2 NAME(GetTexBumpParameterivATI)(GLenum pname, GLint * param) +{ + DISPATCH(GetTexBumpParameterivATI, (pname, param), (F, "glGetTexBumpParameterivATI(0x%x, %p);\n", pname, (const void *) param)); +} + +KEYWORD1 void KEYWORD2 NAME(TexBumpParameterfvATI)(GLenum pname, const GLfloat * param) +{ + DISPATCH(TexBumpParameterfvATI, (pname, param), (F, "glTexBumpParameterfvATI(0x%x, %p);\n", pname, (const void *) param)); +} + +KEYWORD1 void KEYWORD2 NAME(TexBumpParameterivATI)(GLenum pname, const GLint * param) +{ + DISPATCH(TexBumpParameterivATI, (pname, param), (F, "glTexBumpParameterivATI(0x%x, %p);\n", pname, (const void *) param)); +} + KEYWORD1 void KEYWORD2 NAME(AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) { DISPATCH(AlphaFragmentOp1ATI, (op, dst, dstMod, arg1, arg1Rep, arg1Mod), (F, "glAlphaFragmentOp1ATI(0x%x, %d, %d, %d, %d, %d);\n", op, dst, dstMod, arg1, arg1Rep, arg1Mod)); @@ -5277,37 +5297,37 @@ KEYWORD1 void KEYWORD2 NAME(PointParameterivNV)(GLenum pname, const GLint * para DISPATCH(PointParameterivNV, (pname, params), (F, "glPointParameterivNV(0x%x, %p);\n", pname, (const void *) params)); } -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_734)(GLenum face); +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_738)(GLenum face); -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_734)(GLenum face) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_738)(GLenum face) { DISPATCH(ActiveStencilFaceEXT, (face), (F, "glActiveStencilFaceEXT(0x%x);\n", face)); } -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_735)(GLuint array); +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_739)(GLuint array); -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_735)(GLuint array) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_739)(GLuint array) { DISPATCH(BindVertexArrayAPPLE, (array), (F, "glBindVertexArrayAPPLE(%d);\n", array)); } -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_736)(GLsizei n, const GLuint * arrays); +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_740)(GLsizei n, const GLuint * arrays); -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_736)(GLsizei n, const GLuint * arrays) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_740)(GLsizei n, const GLuint * arrays) { DISPATCH(DeleteVertexArraysAPPLE, (n, arrays), (F, "glDeleteVertexArraysAPPLE(%d, %p);\n", n, (const void *) arrays)); } -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_737)(GLsizei n, GLuint * arrays); +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_741)(GLsizei n, GLuint * arrays); -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_737)(GLsizei n, GLuint * arrays) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_741)(GLsizei n, GLuint * arrays) { DISPATCH(GenVertexArraysAPPLE, (n, arrays), (F, "glGenVertexArraysAPPLE(%d, %p);\n", n, (const void *) arrays)); } -KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_738)(GLuint array); +KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_742)(GLuint array); -KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_738)(GLuint array) +KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_742)(GLuint array) { RETURN_DISPATCH(IsVertexArrayAPPLE, (array), (F, "glIsVertexArrayAPPLE(%d);\n", array)); } @@ -5342,9 +5362,9 @@ KEYWORD1 void KEYWORD2 NAME(ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, DISPATCH(ProgramNamedParameter4fvNV, (id, len, name, v), (F, "glProgramNamedParameter4fvNV(%d, %d, %p, %p);\n", id, len, (const void *) name, (const void *) v)); } -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_745)(GLclampd zmin, GLclampd zmax); +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_749)(GLclampd zmin, GLclampd zmax); -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_745)(GLclampd zmin, GLclampd zmax) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_749)(GLclampd zmin, GLclampd zmax) { DISPATCH(DepthBoundsEXT, (zmin, zmax), (F, "glDepthBoundsEXT(%f, %f);\n", zmin, zmax)); } @@ -5354,9 +5374,9 @@ KEYWORD1 void KEYWORD2 NAME(BlendEquationSeparate)(GLenum modeRGB, GLenum modeA) DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparate(0x%x, 0x%x);\n", modeRGB, modeA)); } -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_746)(GLenum modeRGB, GLenum modeA); +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_750)(GLenum modeRGB, GLenum modeA); -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_746)(GLenum modeRGB, GLenum modeA) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_750)(GLenum modeRGB, GLenum modeA) { DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateEXT(0x%x, 0x%x);\n", modeRGB, modeA)); } @@ -5536,9 +5556,9 @@ KEYWORD1 void KEYWORD2 NAME(BlitFramebuffer)(GLint srcX0, GLint srcY0, GLint src DISPATCH(BlitFramebufferEXT, (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter), (F, "glBlitFramebuffer(%d, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x);\n", srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)); } -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_764)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_768)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_764)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_768)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { DISPATCH(BlitFramebufferEXT, (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter), (F, "glBlitFramebufferEXT(%d, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x);\n", srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)); } @@ -5553,37 +5573,37 @@ KEYWORD1 void KEYWORD2 NAME(FramebufferTextureLayerEXT)(GLenum target, GLenum at DISPATCH(FramebufferTextureLayerEXT, (target, attachment, texture, level, layer), (F, "glFramebufferTextureLayerEXT(0x%x, 0x%x, %d, %d, %d);\n", target, attachment, texture, level, layer)); } -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_766)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_770)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_766)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_770)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) { DISPATCH(StencilFuncSeparateATI, (frontfunc, backfunc, ref, mask), (F, "glStencilFuncSeparateATI(0x%x, 0x%x, %d, %d);\n", frontfunc, backfunc, ref, mask)); } -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_767)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_771)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_767)(GLenum target, GLuint index, GLsizei count, const GLfloat * params) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_771)(GLenum target, GLuint index, GLsizei count, const GLfloat * params) { DISPATCH(ProgramEnvParameters4fvEXT, (target, index, count, params), (F, "glProgramEnvParameters4fvEXT(0x%x, %d, %d, %p);\n", target, index, count, (const void *) params)); } -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_768)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_772)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_768)(GLenum target, GLuint index, GLsizei count, const GLfloat * params) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_772)(GLenum target, GLuint index, GLsizei count, const GLfloat * params) { DISPATCH(ProgramLocalParameters4fvEXT, (target, index, count, params), (F, "glProgramLocalParameters4fvEXT(0x%x, %d, %d, %p);\n", target, index, count, (const void *) params)); } -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_769)(GLuint id, GLenum pname, GLint64EXT * params); +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_773)(GLuint id, GLenum pname, GLint64EXT * params); -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_769)(GLuint id, GLenum pname, GLint64EXT * params) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_773)(GLuint id, GLenum pname, GLint64EXT * params) { DISPATCH(GetQueryObjecti64vEXT, (id, pname, params), (F, "glGetQueryObjecti64vEXT(%d, 0x%x, %p);\n", id, pname, (const void *) params)); } -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_770)(GLuint id, GLenum pname, GLuint64EXT * params); +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_774)(GLuint id, GLenum pname, GLuint64EXT * params); -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_770)(GLuint id, GLenum pname, GLuint64EXT * params) +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_774)(GLuint id, GLenum pname, GLuint64EXT * params) { DISPATCH(GetQueryObjectui64vEXT, (id, pname, params), (F, "glGetQueryObjectui64vEXT(%d, 0x%x, %p);\n", id, pname, (const void *) params)); } @@ -6320,6 +6340,10 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = { TABLE_ENTRY(VertexAttribs4fvNV), TABLE_ENTRY(VertexAttribs4svNV), TABLE_ENTRY(VertexAttribs4ubvNV), + TABLE_ENTRY(GetTexBumpParameterfvATI), + TABLE_ENTRY(GetTexBumpParameterivATI), + TABLE_ENTRY(TexBumpParameterfvATI), + TABLE_ENTRY(TexBumpParameterivATI), TABLE_ENTRY(AlphaFragmentOp1ATI), TABLE_ENTRY(AlphaFragmentOp2ATI), TABLE_ENTRY(AlphaFragmentOp3ATI), @@ -6336,19 +6360,19 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = { TABLE_ENTRY(SetFragmentShaderConstantATI), TABLE_ENTRY(PointParameteriNV), TABLE_ENTRY(PointParameterivNV), - TABLE_ENTRY(_dispatch_stub_734), - TABLE_ENTRY(_dispatch_stub_735), - TABLE_ENTRY(_dispatch_stub_736), - TABLE_ENTRY(_dispatch_stub_737), TABLE_ENTRY(_dispatch_stub_738), + TABLE_ENTRY(_dispatch_stub_739), + TABLE_ENTRY(_dispatch_stub_740), + TABLE_ENTRY(_dispatch_stub_741), + TABLE_ENTRY(_dispatch_stub_742), TABLE_ENTRY(GetProgramNamedParameterdvNV), TABLE_ENTRY(GetProgramNamedParameterfvNV), TABLE_ENTRY(ProgramNamedParameter4dNV), TABLE_ENTRY(ProgramNamedParameter4dvNV), TABLE_ENTRY(ProgramNamedParameter4fNV), TABLE_ENTRY(ProgramNamedParameter4fvNV), - TABLE_ENTRY(_dispatch_stub_745), - TABLE_ENTRY(_dispatch_stub_746), + TABLE_ENTRY(_dispatch_stub_749), + TABLE_ENTRY(_dispatch_stub_750), TABLE_ENTRY(BindFramebufferEXT), TABLE_ENTRY(BindRenderbufferEXT), TABLE_ENTRY(CheckFramebufferStatusEXT), @@ -6366,13 +6390,13 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = { TABLE_ENTRY(IsFramebufferEXT), TABLE_ENTRY(IsRenderbufferEXT), TABLE_ENTRY(RenderbufferStorageEXT), - TABLE_ENTRY(_dispatch_stub_764), - TABLE_ENTRY(FramebufferTextureLayerEXT), - TABLE_ENTRY(_dispatch_stub_766), - TABLE_ENTRY(_dispatch_stub_767), TABLE_ENTRY(_dispatch_stub_768), - TABLE_ENTRY(_dispatch_stub_769), + TABLE_ENTRY(FramebufferTextureLayerEXT), TABLE_ENTRY(_dispatch_stub_770), + TABLE_ENTRY(_dispatch_stub_771), + TABLE_ENTRY(_dispatch_stub_772), + TABLE_ENTRY(_dispatch_stub_773), + TABLE_ENTRY(_dispatch_stub_774), /* A whole bunch of no-op functions. These might be called * when someone tries to call a dynamically-registered * extension function without a current rendering context. diff --git a/src/mesa/glapi/glprocs.h b/src/mesa/glapi/glprocs.h index ba652bc3c6..021a64efcd 100644 --- a/src/mesa/glapi/glprocs.h +++ b/src/mesa/glapi/glprocs.h @@ -770,6 +770,10 @@ static const char gl_string_table[] = "glVertexAttribs4fvNV\0" "glVertexAttribs4svNV\0" "glVertexAttribs4ubvNV\0" + "glGetTexBumpParameterfvATI\0" + "glGetTexBumpParameterivATI\0" + "glTexBumpParameterfvATI\0" + "glTexBumpParameterivATI\0" "glAlphaFragmentOp1ATI\0" "glAlphaFragmentOp2ATI\0" "glAlphaFragmentOp3ATI\0" @@ -1158,19 +1162,19 @@ static const char gl_string_table[] = #define gl_dispatch_stub_655 mgl_dispatch_stub_655 #define gl_dispatch_stub_656 mgl_dispatch_stub_656 #define gl_dispatch_stub_657 mgl_dispatch_stub_657 -#define gl_dispatch_stub_734 mgl_dispatch_stub_734 -#define gl_dispatch_stub_735 mgl_dispatch_stub_735 -#define gl_dispatch_stub_736 mgl_dispatch_stub_736 -#define gl_dispatch_stub_737 mgl_dispatch_stub_737 #define gl_dispatch_stub_738 mgl_dispatch_stub_738 -#define gl_dispatch_stub_745 mgl_dispatch_stub_745 -#define gl_dispatch_stub_746 mgl_dispatch_stub_746 -#define gl_dispatch_stub_764 mgl_dispatch_stub_764 -#define gl_dispatch_stub_766 mgl_dispatch_stub_766 -#define gl_dispatch_stub_767 mgl_dispatch_stub_767 +#define gl_dispatch_stub_739 mgl_dispatch_stub_739 +#define gl_dispatch_stub_740 mgl_dispatch_stub_740 +#define gl_dispatch_stub_741 mgl_dispatch_stub_741 +#define gl_dispatch_stub_742 mgl_dispatch_stub_742 +#define gl_dispatch_stub_749 mgl_dispatch_stub_749 +#define gl_dispatch_stub_750 mgl_dispatch_stub_750 #define gl_dispatch_stub_768 mgl_dispatch_stub_768 -#define gl_dispatch_stub_769 mgl_dispatch_stub_769 #define gl_dispatch_stub_770 mgl_dispatch_stub_770 +#define gl_dispatch_stub_771 mgl_dispatch_stub_771 +#define gl_dispatch_stub_772 mgl_dispatch_stub_772 +#define gl_dispatch_stub_773 mgl_dispatch_stub_773 +#define gl_dispatch_stub_774 mgl_dispatch_stub_774 #endif /* USE_MGL_NAMESPACE */ @@ -1209,19 +1213,19 @@ extern void gl_dispatch_stub_654(void); extern void gl_dispatch_stub_655(void); extern void gl_dispatch_stub_656(void); extern void gl_dispatch_stub_657(void); -extern void gl_dispatch_stub_734(void); -extern void gl_dispatch_stub_735(void); -extern void gl_dispatch_stub_736(void); -extern void gl_dispatch_stub_737(void); extern void gl_dispatch_stub_738(void); -extern void gl_dispatch_stub_745(void); -extern void gl_dispatch_stub_746(void); -extern void gl_dispatch_stub_764(void); -extern void gl_dispatch_stub_766(void); -extern void gl_dispatch_stub_767(void); +extern void gl_dispatch_stub_739(void); +extern void gl_dispatch_stub_740(void); +extern void gl_dispatch_stub_741(void); +extern void gl_dispatch_stub_742(void); +extern void gl_dispatch_stub_749(void); +extern void gl_dispatch_stub_750(void); extern void gl_dispatch_stub_768(void); -extern void gl_dispatch_stub_769(void); extern void gl_dispatch_stub_770(void); +extern void gl_dispatch_stub_771(void); +extern void gl_dispatch_stub_772(void); +extern void gl_dispatch_stub_773(void); +extern void gl_dispatch_stub_774(void); #endif /* defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) */ static const glprocs_table_t static_functions[] = { @@ -1943,357 +1947,361 @@ static const glprocs_table_t static_functions[] = { NAME_FUNC_OFFSET(12202, glVertexAttribs4fvNV, glVertexAttribs4fvNV, NULL, _gloffset_VertexAttribs4fvNV), NAME_FUNC_OFFSET(12223, glVertexAttribs4svNV, glVertexAttribs4svNV, NULL, _gloffset_VertexAttribs4svNV), NAME_FUNC_OFFSET(12244, glVertexAttribs4ubvNV, glVertexAttribs4ubvNV, NULL, _gloffset_VertexAttribs4ubvNV), - NAME_FUNC_OFFSET(12266, glAlphaFragmentOp1ATI, glAlphaFragmentOp1ATI, NULL, _gloffset_AlphaFragmentOp1ATI), - NAME_FUNC_OFFSET(12288, glAlphaFragmentOp2ATI, glAlphaFragmentOp2ATI, NULL, _gloffset_AlphaFragmentOp2ATI), - NAME_FUNC_OFFSET(12310, glAlphaFragmentOp3ATI, glAlphaFragmentOp3ATI, NULL, _gloffset_AlphaFragmentOp3ATI), - NAME_FUNC_OFFSET(12332, glBeginFragmentShaderATI, glBeginFragmentShaderATI, NULL, _gloffset_BeginFragmentShaderATI), - NAME_FUNC_OFFSET(12357, glBindFragmentShaderATI, glBindFragmentShaderATI, NULL, _gloffset_BindFragmentShaderATI), - NAME_FUNC_OFFSET(12381, glColorFragmentOp1ATI, glColorFragmentOp1ATI, NULL, _gloffset_ColorFragmentOp1ATI), - NAME_FUNC_OFFSET(12403, glColorFragmentOp2ATI, glColorFragmentOp2ATI, NULL, _gloffset_ColorFragmentOp2ATI), - NAME_FUNC_OFFSET(12425, glColorFragmentOp3ATI, glColorFragmentOp3ATI, NULL, _gloffset_ColorFragmentOp3ATI), - NAME_FUNC_OFFSET(12447, glDeleteFragmentShaderATI, glDeleteFragmentShaderATI, NULL, _gloffset_DeleteFragmentShaderATI), - NAME_FUNC_OFFSET(12473, glEndFragmentShaderATI, glEndFragmentShaderATI, NULL, _gloffset_EndFragmentShaderATI), - NAME_FUNC_OFFSET(12496, glGenFragmentShadersATI, glGenFragmentShadersATI, NULL, _gloffset_GenFragmentShadersATI), - NAME_FUNC_OFFSET(12520, glPassTexCoordATI, glPassTexCoordATI, NULL, _gloffset_PassTexCoordATI), - NAME_FUNC_OFFSET(12538, glSampleMapATI, glSampleMapATI, NULL, _gloffset_SampleMapATI), - NAME_FUNC_OFFSET(12553, glSetFragmentShaderConstantATI, glSetFragmentShaderConstantATI, NULL, _gloffset_SetFragmentShaderConstantATI), - NAME_FUNC_OFFSET(12584, glPointParameteriNV, glPointParameteriNV, NULL, _gloffset_PointParameteriNV), - NAME_FUNC_OFFSET(12604, glPointParameterivNV, glPointParameterivNV, NULL, _gloffset_PointParameterivNV), - NAME_FUNC_OFFSET(12625, gl_dispatch_stub_734, gl_dispatch_stub_734, NULL, _gloffset_ActiveStencilFaceEXT), - NAME_FUNC_OFFSET(12648, gl_dispatch_stub_735, gl_dispatch_stub_735, NULL, _gloffset_BindVertexArrayAPPLE), - NAME_FUNC_OFFSET(12671, gl_dispatch_stub_736, gl_dispatch_stub_736, NULL, _gloffset_DeleteVertexArraysAPPLE), - NAME_FUNC_OFFSET(12697, gl_dispatch_stub_737, gl_dispatch_stub_737, NULL, _gloffset_GenVertexArraysAPPLE), - NAME_FUNC_OFFSET(12720, gl_dispatch_stub_738, gl_dispatch_stub_738, NULL, _gloffset_IsVertexArrayAPPLE), - NAME_FUNC_OFFSET(12741, glGetProgramNamedParameterdvNV, glGetProgramNamedParameterdvNV, NULL, _gloffset_GetProgramNamedParameterdvNV), - NAME_FUNC_OFFSET(12772, glGetProgramNamedParameterfvNV, glGetProgramNamedParameterfvNV, NULL, _gloffset_GetProgramNamedParameterfvNV), - NAME_FUNC_OFFSET(12803, glProgramNamedParameter4dNV, glProgramNamedParameter4dNV, NULL, _gloffset_ProgramNamedParameter4dNV), - NAME_FUNC_OFFSET(12831, glProgramNamedParameter4dvNV, glProgramNamedParameter4dvNV, NULL, _gloffset_ProgramNamedParameter4dvNV), - NAME_FUNC_OFFSET(12860, glProgramNamedParameter4fNV, glProgramNamedParameter4fNV, NULL, _gloffset_ProgramNamedParameter4fNV), - NAME_FUNC_OFFSET(12888, glProgramNamedParameter4fvNV, glProgramNamedParameter4fvNV, NULL, _gloffset_ProgramNamedParameter4fvNV), - NAME_FUNC_OFFSET(12917, gl_dispatch_stub_745, gl_dispatch_stub_745, NULL, _gloffset_DepthBoundsEXT), - NAME_FUNC_OFFSET(12934, gl_dispatch_stub_746, gl_dispatch_stub_746, NULL, _gloffset_BlendEquationSeparateEXT), - NAME_FUNC_OFFSET(12961, glBindFramebufferEXT, glBindFramebufferEXT, NULL, _gloffset_BindFramebufferEXT), - NAME_FUNC_OFFSET(12982, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, _gloffset_BindRenderbufferEXT), - NAME_FUNC_OFFSET(13004, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, _gloffset_CheckFramebufferStatusEXT), - NAME_FUNC_OFFSET(13032, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, _gloffset_DeleteFramebuffersEXT), - NAME_FUNC_OFFSET(13056, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, _gloffset_DeleteRenderbuffersEXT), - NAME_FUNC_OFFSET(13081, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, _gloffset_FramebufferRenderbufferEXT), - NAME_FUNC_OFFSET(13110, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, _gloffset_FramebufferTexture1DEXT), - NAME_FUNC_OFFSET(13136, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, _gloffset_FramebufferTexture2DEXT), - NAME_FUNC_OFFSET(13162, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, _gloffset_FramebufferTexture3DEXT), - NAME_FUNC_OFFSET(13188, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, _gloffset_GenFramebuffersEXT), - NAME_FUNC_OFFSET(13209, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, _gloffset_GenRenderbuffersEXT), - NAME_FUNC_OFFSET(13231, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, _gloffset_GenerateMipmapEXT), - NAME_FUNC_OFFSET(13251, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, _gloffset_GetFramebufferAttachmentParameterivEXT), - NAME_FUNC_OFFSET(13292, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, _gloffset_GetRenderbufferParameterivEXT), - NAME_FUNC_OFFSET(13324, glIsFramebufferEXT, glIsFramebufferEXT, NULL, _gloffset_IsFramebufferEXT), - NAME_FUNC_OFFSET(13343, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, _gloffset_IsRenderbufferEXT), - NAME_FUNC_OFFSET(13363, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, _gloffset_RenderbufferStorageEXT), - NAME_FUNC_OFFSET(13388, gl_dispatch_stub_764, gl_dispatch_stub_764, NULL, _gloffset_BlitFramebufferEXT), - NAME_FUNC_OFFSET(13409, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, _gloffset_FramebufferTextureLayerEXT), - NAME_FUNC_OFFSET(13438, gl_dispatch_stub_766, gl_dispatch_stub_766, NULL, _gloffset_StencilFuncSeparateATI), - NAME_FUNC_OFFSET(13463, gl_dispatch_stub_767, gl_dispatch_stub_767, NULL, _gloffset_ProgramEnvParameters4fvEXT), - NAME_FUNC_OFFSET(13492, gl_dispatch_stub_768, gl_dispatch_stub_768, NULL, _gloffset_ProgramLocalParameters4fvEXT), - NAME_FUNC_OFFSET(13523, gl_dispatch_stub_769, gl_dispatch_stub_769, NULL, _gloffset_GetQueryObjecti64vEXT), - NAME_FUNC_OFFSET(13547, gl_dispatch_stub_770, gl_dispatch_stub_770, NULL, _gloffset_GetQueryObjectui64vEXT), - NAME_FUNC_OFFSET(13572, glArrayElement, glArrayElement, NULL, _gloffset_ArrayElement), - NAME_FUNC_OFFSET(13590, glBindTexture, glBindTexture, NULL, _gloffset_BindTexture), - NAME_FUNC_OFFSET(13607, glDrawArrays, glDrawArrays, NULL, _gloffset_DrawArrays), - NAME_FUNC_OFFSET(13623, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, _gloffset_AreTexturesResident), - NAME_FUNC_OFFSET(13648, glCopyTexImage1D, glCopyTexImage1D, NULL, _gloffset_CopyTexImage1D), - NAME_FUNC_OFFSET(13668, glCopyTexImage2D, glCopyTexImage2D, NULL, _gloffset_CopyTexImage2D), - NAME_FUNC_OFFSET(13688, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, _gloffset_CopyTexSubImage1D), - NAME_FUNC_OFFSET(13711, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, _gloffset_CopyTexSubImage2D), - NAME_FUNC_OFFSET(13734, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, _gloffset_DeleteTextures), - NAME_FUNC_OFFSET(13754, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, _gloffset_GenTextures), - NAME_FUNC_OFFSET(13771, glGetPointerv, glGetPointerv, NULL, _gloffset_GetPointerv), - NAME_FUNC_OFFSET(13788, glIsTexture, glIsTextureEXT, glIsTextureEXT, _gloffset_IsTexture), - NAME_FUNC_OFFSET(13803, glPrioritizeTextures, glPrioritizeTextures, NULL, _gloffset_PrioritizeTextures), - NAME_FUNC_OFFSET(13827, glTexSubImage1D, glTexSubImage1D, NULL, _gloffset_TexSubImage1D), - NAME_FUNC_OFFSET(13846, glTexSubImage2D, glTexSubImage2D, NULL, _gloffset_TexSubImage2D), - NAME_FUNC_OFFSET(13865, glBlendColor, glBlendColor, NULL, _gloffset_BlendColor), - NAME_FUNC_OFFSET(13881, glBlendEquation, glBlendEquation, NULL, _gloffset_BlendEquation), - NAME_FUNC_OFFSET(13900, glDrawRangeElements, glDrawRangeElements, NULL, _gloffset_DrawRangeElements), - NAME_FUNC_OFFSET(13923, glColorTable, glColorTable, NULL, _gloffset_ColorTable), - NAME_FUNC_OFFSET(13939, glColorTable, glColorTable, NULL, _gloffset_ColorTable), - NAME_FUNC_OFFSET(13955, glColorTableParameterfv, glColorTableParameterfv, NULL, _gloffset_ColorTableParameterfv), - NAME_FUNC_OFFSET(13982, glColorTableParameteriv, glColorTableParameteriv, NULL, _gloffset_ColorTableParameteriv), - NAME_FUNC_OFFSET(14009, glCopyColorTable, glCopyColorTable, NULL, _gloffset_CopyColorTable), - NAME_FUNC_OFFSET(14029, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable), - NAME_FUNC_OFFSET(14048, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable), - NAME_FUNC_OFFSET(14067, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv), - NAME_FUNC_OFFSET(14097, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv), - NAME_FUNC_OFFSET(14127, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv), - NAME_FUNC_OFFSET(14157, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv), - NAME_FUNC_OFFSET(14187, glColorSubTable, glColorSubTable, NULL, _gloffset_ColorSubTable), - NAME_FUNC_OFFSET(14206, glCopyColorSubTable, glCopyColorSubTable, NULL, _gloffset_CopyColorSubTable), - NAME_FUNC_OFFSET(14229, glConvolutionFilter1D, glConvolutionFilter1D, NULL, _gloffset_ConvolutionFilter1D), - NAME_FUNC_OFFSET(14254, glConvolutionFilter2D, glConvolutionFilter2D, NULL, _gloffset_ConvolutionFilter2D), - NAME_FUNC_OFFSET(14279, glConvolutionParameterf, glConvolutionParameterf, NULL, _gloffset_ConvolutionParameterf), - NAME_FUNC_OFFSET(14306, glConvolutionParameterfv, glConvolutionParameterfv, NULL, _gloffset_ConvolutionParameterfv), - NAME_FUNC_OFFSET(14334, glConvolutionParameteri, glConvolutionParameteri, NULL, _gloffset_ConvolutionParameteri), - NAME_FUNC_OFFSET(14361, glConvolutionParameteriv, glConvolutionParameteriv, NULL, _gloffset_ConvolutionParameteriv), - NAME_FUNC_OFFSET(14389, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, _gloffset_CopyConvolutionFilter1D), - NAME_FUNC_OFFSET(14418, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, _gloffset_CopyConvolutionFilter2D), - NAME_FUNC_OFFSET(14447, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, _gloffset_GetConvolutionFilter), - NAME_FUNC_OFFSET(14473, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, _gloffset_GetConvolutionParameterfv), - NAME_FUNC_OFFSET(14504, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, _gloffset_GetConvolutionParameteriv), - NAME_FUNC_OFFSET(14535, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, _gloffset_GetSeparableFilter), - NAME_FUNC_OFFSET(14559, glSeparableFilter2D, glSeparableFilter2D, NULL, _gloffset_SeparableFilter2D), - NAME_FUNC_OFFSET(14582, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, _gloffset_GetHistogram), - NAME_FUNC_OFFSET(14600, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, _gloffset_GetHistogramParameterfv), - NAME_FUNC_OFFSET(14629, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, _gloffset_GetHistogramParameteriv), - NAME_FUNC_OFFSET(14658, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, _gloffset_GetMinmax), - NAME_FUNC_OFFSET(14673, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, _gloffset_GetMinmaxParameterfv), - NAME_FUNC_OFFSET(14699, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, _gloffset_GetMinmaxParameteriv), - NAME_FUNC_OFFSET(14725, glHistogram, glHistogram, NULL, _gloffset_Histogram), - NAME_FUNC_OFFSET(14740, glMinmax, glMinmax, NULL, _gloffset_Minmax), - NAME_FUNC_OFFSET(14752, glResetHistogram, glResetHistogram, NULL, _gloffset_ResetHistogram), - NAME_FUNC_OFFSET(14772, glResetMinmax, glResetMinmax, NULL, _gloffset_ResetMinmax), - NAME_FUNC_OFFSET(14789, glTexImage3D, glTexImage3D, NULL, _gloffset_TexImage3D), - NAME_FUNC_OFFSET(14805, glTexSubImage3D, glTexSubImage3D, NULL, _gloffset_TexSubImage3D), - NAME_FUNC_OFFSET(14824, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, _gloffset_CopyTexSubImage3D), - NAME_FUNC_OFFSET(14847, glActiveTextureARB, glActiveTextureARB, NULL, _gloffset_ActiveTextureARB), - NAME_FUNC_OFFSET(14863, glClientActiveTextureARB, glClientActiveTextureARB, NULL, _gloffset_ClientActiveTextureARB), - NAME_FUNC_OFFSET(14885, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, _gloffset_MultiTexCoord1dARB), - NAME_FUNC_OFFSET(14903, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, _gloffset_MultiTexCoord1dvARB), - NAME_FUNC_OFFSET(14922, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, _gloffset_MultiTexCoord1fARB), - NAME_FUNC_OFFSET(14940, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, _gloffset_MultiTexCoord1fvARB), - NAME_FUNC_OFFSET(14959, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, _gloffset_MultiTexCoord1iARB), - NAME_FUNC_OFFSET(14977, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, _gloffset_MultiTexCoord1ivARB), - NAME_FUNC_OFFSET(14996, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, _gloffset_MultiTexCoord1sARB), - NAME_FUNC_OFFSET(15014, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, _gloffset_MultiTexCoord1svARB), - NAME_FUNC_OFFSET(15033, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, _gloffset_MultiTexCoord2dARB), - NAME_FUNC_OFFSET(15051, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, _gloffset_MultiTexCoord2dvARB), - NAME_FUNC_OFFSET(15070, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, _gloffset_MultiTexCoord2fARB), - NAME_FUNC_OFFSET(15088, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, _gloffset_MultiTexCoord2fvARB), - NAME_FUNC_OFFSET(15107, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, _gloffset_MultiTexCoord2iARB), - NAME_FUNC_OFFSET(15125, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, _gloffset_MultiTexCoord2ivARB), - NAME_FUNC_OFFSET(15144, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, _gloffset_MultiTexCoord2sARB), - NAME_FUNC_OFFSET(15162, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, _gloffset_MultiTexCoord2svARB), - NAME_FUNC_OFFSET(15181, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, _gloffset_MultiTexCoord3dARB), - NAME_FUNC_OFFSET(15199, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, _gloffset_MultiTexCoord3dvARB), - NAME_FUNC_OFFSET(15218, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, _gloffset_MultiTexCoord3fARB), - NAME_FUNC_OFFSET(15236, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, _gloffset_MultiTexCoord3fvARB), - NAME_FUNC_OFFSET(15255, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, _gloffset_MultiTexCoord3iARB), - NAME_FUNC_OFFSET(15273, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, _gloffset_MultiTexCoord3ivARB), - NAME_FUNC_OFFSET(15292, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, _gloffset_MultiTexCoord3sARB), - NAME_FUNC_OFFSET(15310, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, _gloffset_MultiTexCoord3svARB), - NAME_FUNC_OFFSET(15329, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, _gloffset_MultiTexCoord4dARB), - NAME_FUNC_OFFSET(15347, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, _gloffset_MultiTexCoord4dvARB), - NAME_FUNC_OFFSET(15366, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, _gloffset_MultiTexCoord4fARB), - NAME_FUNC_OFFSET(15384, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, _gloffset_MultiTexCoord4fvARB), - NAME_FUNC_OFFSET(15403, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, _gloffset_MultiTexCoord4iARB), - NAME_FUNC_OFFSET(15421, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, _gloffset_MultiTexCoord4ivARB), - NAME_FUNC_OFFSET(15440, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, _gloffset_MultiTexCoord4sARB), - NAME_FUNC_OFFSET(15458, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, _gloffset_MultiTexCoord4svARB), - NAME_FUNC_OFFSET(15477, glStencilOpSeparate, glStencilOpSeparate, NULL, _gloffset_StencilOpSeparate), - NAME_FUNC_OFFSET(15500, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, _gloffset_LoadTransposeMatrixdARB), - NAME_FUNC_OFFSET(15523, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, _gloffset_LoadTransposeMatrixfARB), - NAME_FUNC_OFFSET(15546, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, _gloffset_MultTransposeMatrixdARB), - NAME_FUNC_OFFSET(15569, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, _gloffset_MultTransposeMatrixfARB), - NAME_FUNC_OFFSET(15592, glSampleCoverageARB, glSampleCoverageARB, NULL, _gloffset_SampleCoverageARB), - NAME_FUNC_OFFSET(15609, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, _gloffset_CompressedTexImage1DARB), - NAME_FUNC_OFFSET(15632, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, _gloffset_CompressedTexImage2DARB), - NAME_FUNC_OFFSET(15655, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, _gloffset_CompressedTexImage3DARB), - NAME_FUNC_OFFSET(15678, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, _gloffset_CompressedTexSubImage1DARB), - NAME_FUNC_OFFSET(15704, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, _gloffset_CompressedTexSubImage2DARB), - NAME_FUNC_OFFSET(15730, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, _gloffset_CompressedTexSubImage3DARB), - NAME_FUNC_OFFSET(15756, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, _gloffset_GetCompressedTexImageARB), - NAME_FUNC_OFFSET(15780, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, _gloffset_DisableVertexAttribArrayARB), - NAME_FUNC_OFFSET(15807, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, _gloffset_EnableVertexAttribArrayARB), - NAME_FUNC_OFFSET(15833, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, _gloffset_GetVertexAttribdvARB), - NAME_FUNC_OFFSET(15853, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, _gloffset_GetVertexAttribfvARB), - NAME_FUNC_OFFSET(15873, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, _gloffset_GetVertexAttribivARB), - NAME_FUNC_OFFSET(15893, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, _gloffset_ProgramEnvParameter4dARB), - NAME_FUNC_OFFSET(15916, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, _gloffset_ProgramEnvParameter4dvARB), - NAME_FUNC_OFFSET(15940, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, _gloffset_ProgramEnvParameter4fARB), - NAME_FUNC_OFFSET(15963, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, _gloffset_ProgramEnvParameter4fvARB), - NAME_FUNC_OFFSET(15987, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, _gloffset_VertexAttrib1dARB), - NAME_FUNC_OFFSET(16004, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, _gloffset_VertexAttrib1dvARB), - NAME_FUNC_OFFSET(16022, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, _gloffset_VertexAttrib1fARB), - NAME_FUNC_OFFSET(16039, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, _gloffset_VertexAttrib1fvARB), - NAME_FUNC_OFFSET(16057, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, _gloffset_VertexAttrib1sARB), - NAME_FUNC_OFFSET(16074, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, _gloffset_VertexAttrib1svARB), - NAME_FUNC_OFFSET(16092, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, _gloffset_VertexAttrib2dARB), - NAME_FUNC_OFFSET(16109, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, _gloffset_VertexAttrib2dvARB), - NAME_FUNC_OFFSET(16127, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, _gloffset_VertexAttrib2fARB), - NAME_FUNC_OFFSET(16144, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, _gloffset_VertexAttrib2fvARB), - NAME_FUNC_OFFSET(16162, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, _gloffset_VertexAttrib2sARB), - NAME_FUNC_OFFSET(16179, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, _gloffset_VertexAttrib2svARB), - NAME_FUNC_OFFSET(16197, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, _gloffset_VertexAttrib3dARB), - NAME_FUNC_OFFSET(16214, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, _gloffset_VertexAttrib3dvARB), - NAME_FUNC_OFFSET(16232, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, _gloffset_VertexAttrib3fARB), - NAME_FUNC_OFFSET(16249, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, _gloffset_VertexAttrib3fvARB), - NAME_FUNC_OFFSET(16267, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, _gloffset_VertexAttrib3sARB), - NAME_FUNC_OFFSET(16284, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, _gloffset_VertexAttrib3svARB), - NAME_FUNC_OFFSET(16302, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, _gloffset_VertexAttrib4NbvARB), - NAME_FUNC_OFFSET(16321, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, _gloffset_VertexAttrib4NivARB), - NAME_FUNC_OFFSET(16340, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, _gloffset_VertexAttrib4NsvARB), - NAME_FUNC_OFFSET(16359, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, _gloffset_VertexAttrib4NubARB), - NAME_FUNC_OFFSET(16378, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, _gloffset_VertexAttrib4NubvARB), - NAME_FUNC_OFFSET(16398, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, _gloffset_VertexAttrib4NuivARB), - NAME_FUNC_OFFSET(16418, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, _gloffset_VertexAttrib4NusvARB), - NAME_FUNC_OFFSET(16438, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, _gloffset_VertexAttrib4bvARB), - NAME_FUNC_OFFSET(16456, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, _gloffset_VertexAttrib4dARB), - NAME_FUNC_OFFSET(16473, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, _gloffset_VertexAttrib4dvARB), - NAME_FUNC_OFFSET(16491, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, _gloffset_VertexAttrib4fARB), - NAME_FUNC_OFFSET(16508, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, _gloffset_VertexAttrib4fvARB), - NAME_FUNC_OFFSET(16526, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, _gloffset_VertexAttrib4ivARB), - NAME_FUNC_OFFSET(16544, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, _gloffset_VertexAttrib4sARB), - NAME_FUNC_OFFSET(16561, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, _gloffset_VertexAttrib4svARB), - NAME_FUNC_OFFSET(16579, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, _gloffset_VertexAttrib4ubvARB), - NAME_FUNC_OFFSET(16598, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, _gloffset_VertexAttrib4uivARB), - NAME_FUNC_OFFSET(16617, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, _gloffset_VertexAttrib4usvARB), - NAME_FUNC_OFFSET(16636, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, _gloffset_VertexAttribPointerARB), - NAME_FUNC_OFFSET(16658, glBindBufferARB, glBindBufferARB, NULL, _gloffset_BindBufferARB), - NAME_FUNC_OFFSET(16671, glBufferDataARB, glBufferDataARB, NULL, _gloffset_BufferDataARB), - NAME_FUNC_OFFSET(16684, glBufferSubDataARB, glBufferSubDataARB, NULL, _gloffset_BufferSubDataARB), - NAME_FUNC_OFFSET(16700, glDeleteBuffersARB, glDeleteBuffersARB, NULL, _gloffset_DeleteBuffersARB), - NAME_FUNC_OFFSET(16716, glGenBuffersARB, glGenBuffersARB, NULL, _gloffset_GenBuffersARB), - NAME_FUNC_OFFSET(16729, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, _gloffset_GetBufferParameterivARB), - NAME_FUNC_OFFSET(16752, glGetBufferPointervARB, glGetBufferPointervARB, NULL, _gloffset_GetBufferPointervARB), - NAME_FUNC_OFFSET(16772, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, _gloffset_GetBufferSubDataARB), - NAME_FUNC_OFFSET(16791, glIsBufferARB, glIsBufferARB, NULL, _gloffset_IsBufferARB), - NAME_FUNC_OFFSET(16802, glMapBufferARB, glMapBufferARB, NULL, _gloffset_MapBufferARB), - NAME_FUNC_OFFSET(16814, glUnmapBufferARB, glUnmapBufferARB, NULL, _gloffset_UnmapBufferARB), - NAME_FUNC_OFFSET(16828, glBeginQueryARB, glBeginQueryARB, NULL, _gloffset_BeginQueryARB), - NAME_FUNC_OFFSET(16841, glDeleteQueriesARB, glDeleteQueriesARB, NULL, _gloffset_DeleteQueriesARB), - NAME_FUNC_OFFSET(16857, glEndQueryARB, glEndQueryARB, NULL, _gloffset_EndQueryARB), - NAME_FUNC_OFFSET(16868, glGenQueriesARB, glGenQueriesARB, NULL, _gloffset_GenQueriesARB), - NAME_FUNC_OFFSET(16881, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, _gloffset_GetQueryObjectivARB), - NAME_FUNC_OFFSET(16900, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, _gloffset_GetQueryObjectuivARB), - NAME_FUNC_OFFSET(16920, glGetQueryivARB, glGetQueryivARB, NULL, _gloffset_GetQueryivARB), - NAME_FUNC_OFFSET(16933, glIsQueryARB, glIsQueryARB, NULL, _gloffset_IsQueryARB), - NAME_FUNC_OFFSET(16943, glCompileShaderARB, glCompileShaderARB, NULL, _gloffset_CompileShaderARB), - NAME_FUNC_OFFSET(16959, glGetActiveUniformARB, glGetActiveUniformARB, NULL, _gloffset_GetActiveUniformARB), - NAME_FUNC_OFFSET(16978, glGetShaderSourceARB, glGetShaderSourceARB, NULL, _gloffset_GetShaderSourceARB), - NAME_FUNC_OFFSET(16996, glGetUniformLocationARB, glGetUniformLocationARB, NULL, _gloffset_GetUniformLocationARB), - NAME_FUNC_OFFSET(17017, glGetUniformfvARB, glGetUniformfvARB, NULL, _gloffset_GetUniformfvARB), - NAME_FUNC_OFFSET(17032, glGetUniformivARB, glGetUniformivARB, NULL, _gloffset_GetUniformivARB), - NAME_FUNC_OFFSET(17047, glLinkProgramARB, glLinkProgramARB, NULL, _gloffset_LinkProgramARB), - NAME_FUNC_OFFSET(17061, glShaderSourceARB, glShaderSourceARB, NULL, _gloffset_ShaderSourceARB), - NAME_FUNC_OFFSET(17076, glUniform1fARB, glUniform1fARB, NULL, _gloffset_Uniform1fARB), - NAME_FUNC_OFFSET(17088, glUniform1fvARB, glUniform1fvARB, NULL, _gloffset_Uniform1fvARB), - NAME_FUNC_OFFSET(17101, glUniform1iARB, glUniform1iARB, NULL, _gloffset_Uniform1iARB), - NAME_FUNC_OFFSET(17113, glUniform1ivARB, glUniform1ivARB, NULL, _gloffset_Uniform1ivARB), - NAME_FUNC_OFFSET(17126, glUniform2fARB, glUniform2fARB, NULL, _gloffset_Uniform2fARB), - NAME_FUNC_OFFSET(17138, glUniform2fvARB, glUniform2fvARB, NULL, _gloffset_Uniform2fvARB), - NAME_FUNC_OFFSET(17151, glUniform2iARB, glUniform2iARB, NULL, _gloffset_Uniform2iARB), - NAME_FUNC_OFFSET(17163, glUniform2ivARB, glUniform2ivARB, NULL, _gloffset_Uniform2ivARB), - NAME_FUNC_OFFSET(17176, glUniform3fARB, glUniform3fARB, NULL, _gloffset_Uniform3fARB), - NAME_FUNC_OFFSET(17188, glUniform3fvARB, glUniform3fvARB, NULL, _gloffset_Uniform3fvARB), - NAME_FUNC_OFFSET(17201, glUniform3iARB, glUniform3iARB, NULL, _gloffset_Uniform3iARB), - NAME_FUNC_OFFSET(17213, glUniform3ivARB, glUniform3ivARB, NULL, _gloffset_Uniform3ivARB), - NAME_FUNC_OFFSET(17226, glUniform4fARB, glUniform4fARB, NULL, _gloffset_Uniform4fARB), - NAME_FUNC_OFFSET(17238, glUniform4fvARB, glUniform4fvARB, NULL, _gloffset_Uniform4fvARB), - NAME_FUNC_OFFSET(17251, glUniform4iARB, glUniform4iARB, NULL, _gloffset_Uniform4iARB), - NAME_FUNC_OFFSET(17263, glUniform4ivARB, glUniform4ivARB, NULL, _gloffset_Uniform4ivARB), - NAME_FUNC_OFFSET(17276, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, _gloffset_UniformMatrix2fvARB), - NAME_FUNC_OFFSET(17295, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, _gloffset_UniformMatrix3fvARB), - NAME_FUNC_OFFSET(17314, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, _gloffset_UniformMatrix4fvARB), - NAME_FUNC_OFFSET(17333, glUseProgramObjectARB, glUseProgramObjectARB, NULL, _gloffset_UseProgramObjectARB), - NAME_FUNC_OFFSET(17346, glValidateProgramARB, glValidateProgramARB, NULL, _gloffset_ValidateProgramARB), - NAME_FUNC_OFFSET(17364, glBindAttribLocationARB, glBindAttribLocationARB, NULL, _gloffset_BindAttribLocationARB), - NAME_FUNC_OFFSET(17385, glGetActiveAttribARB, glGetActiveAttribARB, NULL, _gloffset_GetActiveAttribARB), - NAME_FUNC_OFFSET(17403, glGetAttribLocationARB, glGetAttribLocationARB, NULL, _gloffset_GetAttribLocationARB), - NAME_FUNC_OFFSET(17423, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB), - NAME_FUNC_OFFSET(17437, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB), - NAME_FUNC_OFFSET(17454, gl_dispatch_stub_569, gl_dispatch_stub_569, NULL, _gloffset_SampleMaskSGIS), - NAME_FUNC_OFFSET(17470, gl_dispatch_stub_570, gl_dispatch_stub_570, NULL, _gloffset_SamplePatternSGIS), - NAME_FUNC_OFFSET(17489, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT), - NAME_FUNC_OFFSET(17507, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT), - NAME_FUNC_OFFSET(17528, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT), - NAME_FUNC_OFFSET(17550, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT), - NAME_FUNC_OFFSET(17569, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT), - NAME_FUNC_OFFSET(17591, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT), - NAME_FUNC_OFFSET(17614, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, _gloffset_SecondaryColor3bEXT), - NAME_FUNC_OFFSET(17633, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, _gloffset_SecondaryColor3bvEXT), - NAME_FUNC_OFFSET(17653, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, _gloffset_SecondaryColor3dEXT), - NAME_FUNC_OFFSET(17672, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, _gloffset_SecondaryColor3dvEXT), - NAME_FUNC_OFFSET(17692, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, _gloffset_SecondaryColor3fEXT), - NAME_FUNC_OFFSET(17711, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, _gloffset_SecondaryColor3fvEXT), - NAME_FUNC_OFFSET(17731, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, _gloffset_SecondaryColor3iEXT), - NAME_FUNC_OFFSET(17750, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, _gloffset_SecondaryColor3ivEXT), - NAME_FUNC_OFFSET(17770, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, _gloffset_SecondaryColor3sEXT), - NAME_FUNC_OFFSET(17789, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, _gloffset_SecondaryColor3svEXT), - NAME_FUNC_OFFSET(17809, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, _gloffset_SecondaryColor3ubEXT), - NAME_FUNC_OFFSET(17829, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, _gloffset_SecondaryColor3ubvEXT), - NAME_FUNC_OFFSET(17850, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, _gloffset_SecondaryColor3uiEXT), - NAME_FUNC_OFFSET(17870, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, _gloffset_SecondaryColor3uivEXT), - NAME_FUNC_OFFSET(17891, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, _gloffset_SecondaryColor3usEXT), - NAME_FUNC_OFFSET(17911, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, _gloffset_SecondaryColor3usvEXT), - NAME_FUNC_OFFSET(17932, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, _gloffset_SecondaryColorPointerEXT), - NAME_FUNC_OFFSET(17956, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, _gloffset_MultiDrawArraysEXT), - NAME_FUNC_OFFSET(17974, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, _gloffset_MultiDrawElementsEXT), - NAME_FUNC_OFFSET(17994, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, _gloffset_FogCoordPointerEXT), - NAME_FUNC_OFFSET(18012, glFogCoorddEXT, glFogCoorddEXT, NULL, _gloffset_FogCoorddEXT), - NAME_FUNC_OFFSET(18024, glFogCoorddvEXT, glFogCoorddvEXT, NULL, _gloffset_FogCoorddvEXT), - NAME_FUNC_OFFSET(18037, glFogCoordfEXT, glFogCoordfEXT, NULL, _gloffset_FogCoordfEXT), - NAME_FUNC_OFFSET(18049, glFogCoordfvEXT, glFogCoordfvEXT, NULL, _gloffset_FogCoordfvEXT), - NAME_FUNC_OFFSET(18062, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT), - NAME_FUNC_OFFSET(18082, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT), - NAME_FUNC_OFFSET(18106, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA), - NAME_FUNC_OFFSET(18120, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA), - NAME_FUNC_OFFSET(18137, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA), - NAME_FUNC_OFFSET(18152, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA), - NAME_FUNC_OFFSET(18170, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA), - NAME_FUNC_OFFSET(18184, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA), - NAME_FUNC_OFFSET(18201, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA), - NAME_FUNC_OFFSET(18216, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA), - NAME_FUNC_OFFSET(18234, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA), - NAME_FUNC_OFFSET(18248, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA), - NAME_FUNC_OFFSET(18265, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA), - NAME_FUNC_OFFSET(18280, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA), - NAME_FUNC_OFFSET(18298, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA), - NAME_FUNC_OFFSET(18312, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA), - NAME_FUNC_OFFSET(18329, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA), - NAME_FUNC_OFFSET(18344, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA), - NAME_FUNC_OFFSET(18362, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA), - NAME_FUNC_OFFSET(18376, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA), - NAME_FUNC_OFFSET(18393, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA), - NAME_FUNC_OFFSET(18408, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA), - NAME_FUNC_OFFSET(18426, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA), - NAME_FUNC_OFFSET(18440, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA), - NAME_FUNC_OFFSET(18457, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA), - NAME_FUNC_OFFSET(18472, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA), - NAME_FUNC_OFFSET(18490, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA), - NAME_FUNC_OFFSET(18504, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA), - NAME_FUNC_OFFSET(18521, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA), - NAME_FUNC_OFFSET(18536, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA), - NAME_FUNC_OFFSET(18554, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA), - NAME_FUNC_OFFSET(18568, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA), - NAME_FUNC_OFFSET(18585, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA), - NAME_FUNC_OFFSET(18600, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA), - NAME_FUNC_OFFSET(18618, glBindProgramNV, glBindProgramNV, NULL, _gloffset_BindProgramNV), - NAME_FUNC_OFFSET(18635, glDeleteProgramsNV, glDeleteProgramsNV, NULL, _gloffset_DeleteProgramsNV), - NAME_FUNC_OFFSET(18655, glGenProgramsNV, glGenProgramsNV, NULL, _gloffset_GenProgramsNV), - NAME_FUNC_OFFSET(18672, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV), - NAME_FUNC_OFFSET(18698, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV), - NAME_FUNC_OFFSET(18727, glIsProgramNV, glIsProgramNV, NULL, _gloffset_IsProgramNV), - NAME_FUNC_OFFSET(18742, glPointParameteriNV, glPointParameteriNV, NULL, _gloffset_PointParameteriNV), - NAME_FUNC_OFFSET(18760, glPointParameterivNV, glPointParameterivNV, NULL, _gloffset_PointParameterivNV), - NAME_FUNC_OFFSET(18779, gl_dispatch_stub_746, gl_dispatch_stub_746, NULL, _gloffset_BlendEquationSeparateEXT), - NAME_FUNC_OFFSET(18803, gl_dispatch_stub_746, gl_dispatch_stub_746, NULL, _gloffset_BlendEquationSeparateEXT), - NAME_FUNC_OFFSET(18830, glBindFramebufferEXT, glBindFramebufferEXT, NULL, _gloffset_BindFramebufferEXT), - NAME_FUNC_OFFSET(18848, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, _gloffset_BindRenderbufferEXT), - NAME_FUNC_OFFSET(18867, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, _gloffset_CheckFramebufferStatusEXT), - NAME_FUNC_OFFSET(18892, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, _gloffset_DeleteFramebuffersEXT), - NAME_FUNC_OFFSET(18913, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, _gloffset_DeleteRenderbuffersEXT), - NAME_FUNC_OFFSET(18935, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, _gloffset_FramebufferRenderbufferEXT), - NAME_FUNC_OFFSET(18961, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, _gloffset_FramebufferTexture1DEXT), - NAME_FUNC_OFFSET(18984, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, _gloffset_FramebufferTexture2DEXT), - NAME_FUNC_OFFSET(19007, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, _gloffset_FramebufferTexture3DEXT), - NAME_FUNC_OFFSET(19030, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, _gloffset_GenFramebuffersEXT), - NAME_FUNC_OFFSET(19048, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, _gloffset_GenRenderbuffersEXT), - NAME_FUNC_OFFSET(19067, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, _gloffset_GenerateMipmapEXT), - NAME_FUNC_OFFSET(19084, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, _gloffset_GetFramebufferAttachmentParameterivEXT), - NAME_FUNC_OFFSET(19122, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, _gloffset_GetRenderbufferParameterivEXT), - NAME_FUNC_OFFSET(19151, glIsFramebufferEXT, glIsFramebufferEXT, NULL, _gloffset_IsFramebufferEXT), - NAME_FUNC_OFFSET(19167, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, _gloffset_IsRenderbufferEXT), - NAME_FUNC_OFFSET(19184, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, _gloffset_RenderbufferStorageEXT), - NAME_FUNC_OFFSET(19206, gl_dispatch_stub_764, gl_dispatch_stub_764, NULL, _gloffset_BlitFramebufferEXT), - NAME_FUNC_OFFSET(19224, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, _gloffset_FramebufferTextureLayerEXT), + NAME_FUNC_OFFSET(12266, glGetTexBumpParameterfvATI, glGetTexBumpParameterfvATI, NULL, _gloffset_GetTexBumpParameterfvATI), + NAME_FUNC_OFFSET(12293, glGetTexBumpParameterivATI, glGetTexBumpParameterivATI, NULL, _gloffset_GetTexBumpParameterivATI), + NAME_FUNC_OFFSET(12320, glTexBumpParameterfvATI, glTexBumpParameterfvATI, NULL, _gloffset_TexBumpParameterfvATI), + NAME_FUNC_OFFSET(12344, glTexBumpParameterivATI, glTexBumpParameterivATI, NULL, _gloffset_TexBumpParameterivATI), + NAME_FUNC_OFFSET(12368, glAlphaFragmentOp1ATI, glAlphaFragmentOp1ATI, NULL, _gloffset_AlphaFragmentOp1ATI), + NAME_FUNC_OFFSET(12390, glAlphaFragmentOp2ATI, glAlphaFragmentOp2ATI, NULL, _gloffset_AlphaFragmentOp2ATI), + NAME_FUNC_OFFSET(12412, glAlphaFragmentOp3ATI, glAlphaFragmentOp3ATI, NULL, _gloffset_AlphaFragmentOp3ATI), + NAME_FUNC_OFFSET(12434, glBeginFragmentShaderATI, glBeginFragmentShaderATI, NULL, _gloffset_BeginFragmentShaderATI), + NAME_FUNC_OFFSET(12459, glBindFragmentShaderATI, glBindFragmentShaderATI, NULL, _gloffset_BindFragmentShaderATI), + NAME_FUNC_OFFSET(12483, glColorFragmentOp1ATI, glColorFragmentOp1ATI, NULL, _gloffset_ColorFragmentOp1ATI), + NAME_FUNC_OFFSET(12505, glColorFragmentOp2ATI, glColorFragmentOp2ATI, NULL, _gloffset_ColorFragmentOp2ATI), + NAME_FUNC_OFFSET(12527, glColorFragmentOp3ATI, glColorFragmentOp3ATI, NULL, _gloffset_ColorFragmentOp3ATI), + NAME_FUNC_OFFSET(12549, glDeleteFragmentShaderATI, glDeleteFragmentShaderATI, NULL, _gloffset_DeleteFragmentShaderATI), + NAME_FUNC_OFFSET(12575, glEndFragmentShaderATI, glEndFragmentShaderATI, NULL, _gloffset_EndFragmentShaderATI), + NAME_FUNC_OFFSET(12598, glGenFragmentShadersATI, glGenFragmentShadersATI, NULL, _gloffset_GenFragmentShadersATI), + NAME_FUNC_OFFSET(12622, glPassTexCoordATI, glPassTexCoordATI, NULL, _gloffset_PassTexCoordATI), + NAME_FUNC_OFFSET(12640, glSampleMapATI, glSampleMapATI, NULL, _gloffset_SampleMapATI), + NAME_FUNC_OFFSET(12655, glSetFragmentShaderConstantATI, glSetFragmentShaderConstantATI, NULL, _gloffset_SetFragmentShaderConstantATI), + NAME_FUNC_OFFSET(12686, glPointParameteriNV, glPointParameteriNV, NULL, _gloffset_PointParameteriNV), + NAME_FUNC_OFFSET(12706, glPointParameterivNV, glPointParameterivNV, NULL, _gloffset_PointParameterivNV), + NAME_FUNC_OFFSET(12727, gl_dispatch_stub_738, gl_dispatch_stub_738, NULL, _gloffset_ActiveStencilFaceEXT), + NAME_FUNC_OFFSET(12750, gl_dispatch_stub_739, gl_dispatch_stub_739, NULL, _gloffset_BindVertexArrayAPPLE), + NAME_FUNC_OFFSET(12773, gl_dispatch_stub_740, gl_dispatch_stub_740, NULL, _gloffset_DeleteVertexArraysAPPLE), + NAME_FUNC_OFFSET(12799, gl_dispatch_stub_741, gl_dispatch_stub_741, NULL, _gloffset_GenVertexArraysAPPLE), + NAME_FUNC_OFFSET(12822, gl_dispatch_stub_742, gl_dispatch_stub_742, NULL, _gloffset_IsVertexArrayAPPLE), + NAME_FUNC_OFFSET(12843, glGetProgramNamedParameterdvNV, glGetProgramNamedParameterdvNV, NULL, _gloffset_GetProgramNamedParameterdvNV), + NAME_FUNC_OFFSET(12874, glGetProgramNamedParameterfvNV, glGetProgramNamedParameterfvNV, NULL, _gloffset_GetProgramNamedParameterfvNV), + NAME_FUNC_OFFSET(12905, glProgramNamedParameter4dNV, glProgramNamedParameter4dNV, NULL, _gloffset_ProgramNamedParameter4dNV), + NAME_FUNC_OFFSET(12933, glProgramNamedParameter4dvNV, glProgramNamedParameter4dvNV, NULL, _gloffset_ProgramNamedParameter4dvNV), + NAME_FUNC_OFFSET(12962, glProgramNamedParameter4fNV, glProgramNamedParameter4fNV, NULL, _gloffset_ProgramNamedParameter4fNV), + NAME_FUNC_OFFSET(12990, glProgramNamedParameter4fvNV, glProgramNamedParameter4fvNV, NULL, _gloffset_ProgramNamedParameter4fvNV), + NAME_FUNC_OFFSET(13019, gl_dispatch_stub_749, gl_dispatch_stub_749, NULL, _gloffset_DepthBoundsEXT), + NAME_FUNC_OFFSET(13036, gl_dispatch_stub_750, gl_dispatch_stub_750, NULL, _gloffset_BlendEquationSeparateEXT), + NAME_FUNC_OFFSET(13063, glBindFramebufferEXT, glBindFramebufferEXT, NULL, _gloffset_BindFramebufferEXT), + NAME_FUNC_OFFSET(13084, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, _gloffset_BindRenderbufferEXT), + NAME_FUNC_OFFSET(13106, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, _gloffset_CheckFramebufferStatusEXT), + NAME_FUNC_OFFSET(13134, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, _gloffset_DeleteFramebuffersEXT), + NAME_FUNC_OFFSET(13158, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, _gloffset_DeleteRenderbuffersEXT), + NAME_FUNC_OFFSET(13183, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, _gloffset_FramebufferRenderbufferEXT), + NAME_FUNC_OFFSET(13212, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, _gloffset_FramebufferTexture1DEXT), + NAME_FUNC_OFFSET(13238, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, _gloffset_FramebufferTexture2DEXT), + NAME_FUNC_OFFSET(13264, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, _gloffset_FramebufferTexture3DEXT), + NAME_FUNC_OFFSET(13290, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, _gloffset_GenFramebuffersEXT), + NAME_FUNC_OFFSET(13311, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, _gloffset_GenRenderbuffersEXT), + NAME_FUNC_OFFSET(13333, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, _gloffset_GenerateMipmapEXT), + NAME_FUNC_OFFSET(13353, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, _gloffset_GetFramebufferAttachmentParameterivEXT), + NAME_FUNC_OFFSET(13394, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, _gloffset_GetRenderbufferParameterivEXT), + NAME_FUNC_OFFSET(13426, glIsFramebufferEXT, glIsFramebufferEXT, NULL, _gloffset_IsFramebufferEXT), + NAME_FUNC_OFFSET(13445, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, _gloffset_IsRenderbufferEXT), + NAME_FUNC_OFFSET(13465, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, _gloffset_RenderbufferStorageEXT), + NAME_FUNC_OFFSET(13490, gl_dispatch_stub_768, gl_dispatch_stub_768, NULL, _gloffset_BlitFramebufferEXT), + NAME_FUNC_OFFSET(13511, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, _gloffset_FramebufferTextureLayerEXT), + NAME_FUNC_OFFSET(13540, gl_dispatch_stub_770, gl_dispatch_stub_770, NULL, _gloffset_StencilFuncSeparateATI), + NAME_FUNC_OFFSET(13565, gl_dispatch_stub_771, gl_dispatch_stub_771, NULL, _gloffset_ProgramEnvParameters4fvEXT), + NAME_FUNC_OFFSET(13594, gl_dispatch_stub_772, gl_dispatch_stub_772, NULL, _gloffset_ProgramLocalParameters4fvEXT), + NAME_FUNC_OFFSET(13625, gl_dispatch_stub_773, gl_dispatch_stub_773, NULL, _gloffset_GetQueryObjecti64vEXT), + NAME_FUNC_OFFSET(13649, gl_dispatch_stub_774, gl_dispatch_stub_774, NULL, _gloffset_GetQueryObjectui64vEXT), + NAME_FUNC_OFFSET(13674, glArrayElement, glArrayElement, NULL, _gloffset_ArrayElement), + NAME_FUNC_OFFSET(13692, glBindTexture, glBindTexture, NULL, _gloffset_BindTexture), + NAME_FUNC_OFFSET(13709, glDrawArrays, glDrawArrays, NULL, _gloffset_DrawArrays), + NAME_FUNC_OFFSET(13725, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, _gloffset_AreTexturesResident), + NAME_FUNC_OFFSET(13750, glCopyTexImage1D, glCopyTexImage1D, NULL, _gloffset_CopyTexImage1D), + NAME_FUNC_OFFSET(13770, glCopyTexImage2D, glCopyTexImage2D, NULL, _gloffset_CopyTexImage2D), + NAME_FUNC_OFFSET(13790, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, _gloffset_CopyTexSubImage1D), + NAME_FUNC_OFFSET(13813, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, _gloffset_CopyTexSubImage2D), + NAME_FUNC_OFFSET(13836, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, _gloffset_DeleteTextures), + NAME_FUNC_OFFSET(13856, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, _gloffset_GenTextures), + NAME_FUNC_OFFSET(13873, glGetPointerv, glGetPointerv, NULL, _gloffset_GetPointerv), + NAME_FUNC_OFFSET(13890, glIsTexture, glIsTextureEXT, glIsTextureEXT, _gloffset_IsTexture), + NAME_FUNC_OFFSET(13905, glPrioritizeTextures, glPrioritizeTextures, NULL, _gloffset_PrioritizeTextures), + NAME_FUNC_OFFSET(13929, glTexSubImage1D, glTexSubImage1D, NULL, _gloffset_TexSubImage1D), + NAME_FUNC_OFFSET(13948, glTexSubImage2D, glTexSubImage2D, NULL, _gloffset_TexSubImage2D), + NAME_FUNC_OFFSET(13967, glBlendColor, glBlendColor, NULL, _gloffset_BlendColor), + NAME_FUNC_OFFSET(13983, glBlendEquation, glBlendEquation, NULL, _gloffset_BlendEquation), + NAME_FUNC_OFFSET(14002, glDrawRangeElements, glDrawRangeElements, NULL, _gloffset_DrawRangeElements), + NAME_FUNC_OFFSET(14025, glColorTable, glColorTable, NULL, _gloffset_ColorTable), + NAME_FUNC_OFFSET(14041, glColorTable, glColorTable, NULL, _gloffset_ColorTable), + NAME_FUNC_OFFSET(14057, glColorTableParameterfv, glColorTableParameterfv, NULL, _gloffset_ColorTableParameterfv), + NAME_FUNC_OFFSET(14084, glColorTableParameteriv, glColorTableParameteriv, NULL, _gloffset_ColorTableParameteriv), + NAME_FUNC_OFFSET(14111, glCopyColorTable, glCopyColorTable, NULL, _gloffset_CopyColorTable), + NAME_FUNC_OFFSET(14131, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable), + NAME_FUNC_OFFSET(14150, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, _gloffset_GetColorTable), + NAME_FUNC_OFFSET(14169, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv), + NAME_FUNC_OFFSET(14199, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, _gloffset_GetColorTableParameterfv), + NAME_FUNC_OFFSET(14229, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv), + NAME_FUNC_OFFSET(14259, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, _gloffset_GetColorTableParameteriv), + NAME_FUNC_OFFSET(14289, glColorSubTable, glColorSubTable, NULL, _gloffset_ColorSubTable), + NAME_FUNC_OFFSET(14308, glCopyColorSubTable, glCopyColorSubTable, NULL, _gloffset_CopyColorSubTable), + NAME_FUNC_OFFSET(14331, glConvolutionFilter1D, glConvolutionFilter1D, NULL, _gloffset_ConvolutionFilter1D), + NAME_FUNC_OFFSET(14356, glConvolutionFilter2D, glConvolutionFilter2D, NULL, _gloffset_ConvolutionFilter2D), + NAME_FUNC_OFFSET(14381, glConvolutionParameterf, glConvolutionParameterf, NULL, _gloffset_ConvolutionParameterf), + NAME_FUNC_OFFSET(14408, glConvolutionParameterfv, glConvolutionParameterfv, NULL, _gloffset_ConvolutionParameterfv), + NAME_FUNC_OFFSET(14436, glConvolutionParameteri, glConvolutionParameteri, NULL, _gloffset_ConvolutionParameteri), + NAME_FUNC_OFFSET(14463, glConvolutionParameteriv, glConvolutionParameteriv, NULL, _gloffset_ConvolutionParameteriv), + NAME_FUNC_OFFSET(14491, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, _gloffset_CopyConvolutionFilter1D), + NAME_FUNC_OFFSET(14520, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, _gloffset_CopyConvolutionFilter2D), + NAME_FUNC_OFFSET(14549, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, _gloffset_GetConvolutionFilter), + NAME_FUNC_OFFSET(14575, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, _gloffset_GetConvolutionParameterfv), + NAME_FUNC_OFFSET(14606, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, _gloffset_GetConvolutionParameteriv), + NAME_FUNC_OFFSET(14637, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, _gloffset_GetSeparableFilter), + NAME_FUNC_OFFSET(14661, glSeparableFilter2D, glSeparableFilter2D, NULL, _gloffset_SeparableFilter2D), + NAME_FUNC_OFFSET(14684, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, _gloffset_GetHistogram), + NAME_FUNC_OFFSET(14702, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, _gloffset_GetHistogramParameterfv), + NAME_FUNC_OFFSET(14731, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, _gloffset_GetHistogramParameteriv), + NAME_FUNC_OFFSET(14760, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, _gloffset_GetMinmax), + NAME_FUNC_OFFSET(14775, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, _gloffset_GetMinmaxParameterfv), + NAME_FUNC_OFFSET(14801, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, _gloffset_GetMinmaxParameteriv), + NAME_FUNC_OFFSET(14827, glHistogram, glHistogram, NULL, _gloffset_Histogram), + NAME_FUNC_OFFSET(14842, glMinmax, glMinmax, NULL, _gloffset_Minmax), + NAME_FUNC_OFFSET(14854, glResetHistogram, glResetHistogram, NULL, _gloffset_ResetHistogram), + NAME_FUNC_OFFSET(14874, glResetMinmax, glResetMinmax, NULL, _gloffset_ResetMinmax), + NAME_FUNC_OFFSET(14891, glTexImage3D, glTexImage3D, NULL, _gloffset_TexImage3D), + NAME_FUNC_OFFSET(14907, glTexSubImage3D, glTexSubImage3D, NULL, _gloffset_TexSubImage3D), + NAME_FUNC_OFFSET(14926, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, _gloffset_CopyTexSubImage3D), + NAME_FUNC_OFFSET(14949, glActiveTextureARB, glActiveTextureARB, NULL, _gloffset_ActiveTextureARB), + NAME_FUNC_OFFSET(14965, glClientActiveTextureARB, glClientActiveTextureARB, NULL, _gloffset_ClientActiveTextureARB), + NAME_FUNC_OFFSET(14987, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, _gloffset_MultiTexCoord1dARB), + NAME_FUNC_OFFSET(15005, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, _gloffset_MultiTexCoord1dvARB), + NAME_FUNC_OFFSET(15024, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, _gloffset_MultiTexCoord1fARB), + NAME_FUNC_OFFSET(15042, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, _gloffset_MultiTexCoord1fvARB), + NAME_FUNC_OFFSET(15061, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, _gloffset_MultiTexCoord1iARB), + NAME_FUNC_OFFSET(15079, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, _gloffset_MultiTexCoord1ivARB), + NAME_FUNC_OFFSET(15098, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, _gloffset_MultiTexCoord1sARB), + NAME_FUNC_OFFSET(15116, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, _gloffset_MultiTexCoord1svARB), + NAME_FUNC_OFFSET(15135, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, _gloffset_MultiTexCoord2dARB), + NAME_FUNC_OFFSET(15153, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, _gloffset_MultiTexCoord2dvARB), + NAME_FUNC_OFFSET(15172, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, _gloffset_MultiTexCoord2fARB), + NAME_FUNC_OFFSET(15190, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, _gloffset_MultiTexCoord2fvARB), + NAME_FUNC_OFFSET(15209, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, _gloffset_MultiTexCoord2iARB), + NAME_FUNC_OFFSET(15227, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, _gloffset_MultiTexCoord2ivARB), + NAME_FUNC_OFFSET(15246, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, _gloffset_MultiTexCoord2sARB), + NAME_FUNC_OFFSET(15264, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, _gloffset_MultiTexCoord2svARB), + NAME_FUNC_OFFSET(15283, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, _gloffset_MultiTexCoord3dARB), + NAME_FUNC_OFFSET(15301, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, _gloffset_MultiTexCoord3dvARB), + NAME_FUNC_OFFSET(15320, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, _gloffset_MultiTexCoord3fARB), + NAME_FUNC_OFFSET(15338, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, _gloffset_MultiTexCoord3fvARB), + NAME_FUNC_OFFSET(15357, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, _gloffset_MultiTexCoord3iARB), + NAME_FUNC_OFFSET(15375, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, _gloffset_MultiTexCoord3ivARB), + NAME_FUNC_OFFSET(15394, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, _gloffset_MultiTexCoord3sARB), + NAME_FUNC_OFFSET(15412, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, _gloffset_MultiTexCoord3svARB), + NAME_FUNC_OFFSET(15431, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, _gloffset_MultiTexCoord4dARB), + NAME_FUNC_OFFSET(15449, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, _gloffset_MultiTexCoord4dvARB), + NAME_FUNC_OFFSET(15468, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, _gloffset_MultiTexCoord4fARB), + NAME_FUNC_OFFSET(15486, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, _gloffset_MultiTexCoord4fvARB), + NAME_FUNC_OFFSET(15505, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, _gloffset_MultiTexCoord4iARB), + NAME_FUNC_OFFSET(15523, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, _gloffset_MultiTexCoord4ivARB), + NAME_FUNC_OFFSET(15542, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, _gloffset_MultiTexCoord4sARB), + NAME_FUNC_OFFSET(15560, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, _gloffset_MultiTexCoord4svARB), + NAME_FUNC_OFFSET(15579, glStencilOpSeparate, glStencilOpSeparate, NULL, _gloffset_StencilOpSeparate), + NAME_FUNC_OFFSET(15602, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, _gloffset_LoadTransposeMatrixdARB), + NAME_FUNC_OFFSET(15625, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, _gloffset_LoadTransposeMatrixfARB), + NAME_FUNC_OFFSET(15648, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, _gloffset_MultTransposeMatrixdARB), + NAME_FUNC_OFFSET(15671, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, _gloffset_MultTransposeMatrixfARB), + NAME_FUNC_OFFSET(15694, glSampleCoverageARB, glSampleCoverageARB, NULL, _gloffset_SampleCoverageARB), + NAME_FUNC_OFFSET(15711, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, _gloffset_CompressedTexImage1DARB), + NAME_FUNC_OFFSET(15734, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, _gloffset_CompressedTexImage2DARB), + NAME_FUNC_OFFSET(15757, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, _gloffset_CompressedTexImage3DARB), + NAME_FUNC_OFFSET(15780, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, _gloffset_CompressedTexSubImage1DARB), + NAME_FUNC_OFFSET(15806, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, _gloffset_CompressedTexSubImage2DARB), + NAME_FUNC_OFFSET(15832, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, _gloffset_CompressedTexSubImage3DARB), + NAME_FUNC_OFFSET(15858, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, _gloffset_GetCompressedTexImageARB), + NAME_FUNC_OFFSET(15882, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, _gloffset_DisableVertexAttribArrayARB), + NAME_FUNC_OFFSET(15909, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, _gloffset_EnableVertexAttribArrayARB), + NAME_FUNC_OFFSET(15935, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, _gloffset_GetVertexAttribdvARB), + NAME_FUNC_OFFSET(15955, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, _gloffset_GetVertexAttribfvARB), + NAME_FUNC_OFFSET(15975, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, _gloffset_GetVertexAttribivARB), + NAME_FUNC_OFFSET(15995, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, _gloffset_ProgramEnvParameter4dARB), + NAME_FUNC_OFFSET(16018, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, _gloffset_ProgramEnvParameter4dvARB), + NAME_FUNC_OFFSET(16042, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, _gloffset_ProgramEnvParameter4fARB), + NAME_FUNC_OFFSET(16065, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, _gloffset_ProgramEnvParameter4fvARB), + NAME_FUNC_OFFSET(16089, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, _gloffset_VertexAttrib1dARB), + NAME_FUNC_OFFSET(16106, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, _gloffset_VertexAttrib1dvARB), + NAME_FUNC_OFFSET(16124, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, _gloffset_VertexAttrib1fARB), + NAME_FUNC_OFFSET(16141, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, _gloffset_VertexAttrib1fvARB), + NAME_FUNC_OFFSET(16159, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, _gloffset_VertexAttrib1sARB), + NAME_FUNC_OFFSET(16176, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, _gloffset_VertexAttrib1svARB), + NAME_FUNC_OFFSET(16194, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, _gloffset_VertexAttrib2dARB), + NAME_FUNC_OFFSET(16211, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, _gloffset_VertexAttrib2dvARB), + NAME_FUNC_OFFSET(16229, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, _gloffset_VertexAttrib2fARB), + NAME_FUNC_OFFSET(16246, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, _gloffset_VertexAttrib2fvARB), + NAME_FUNC_OFFSET(16264, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, _gloffset_VertexAttrib2sARB), + NAME_FUNC_OFFSET(16281, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, _gloffset_VertexAttrib2svARB), + NAME_FUNC_OFFSET(16299, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, _gloffset_VertexAttrib3dARB), + NAME_FUNC_OFFSET(16316, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, _gloffset_VertexAttrib3dvARB), + NAME_FUNC_OFFSET(16334, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, _gloffset_VertexAttrib3fARB), + NAME_FUNC_OFFSET(16351, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, _gloffset_VertexAttrib3fvARB), + NAME_FUNC_OFFSET(16369, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, _gloffset_VertexAttrib3sARB), + NAME_FUNC_OFFSET(16386, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, _gloffset_VertexAttrib3svARB), + NAME_FUNC_OFFSET(16404, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, _gloffset_VertexAttrib4NbvARB), + NAME_FUNC_OFFSET(16423, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, _gloffset_VertexAttrib4NivARB), + NAME_FUNC_OFFSET(16442, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, _gloffset_VertexAttrib4NsvARB), + NAME_FUNC_OFFSET(16461, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, _gloffset_VertexAttrib4NubARB), + NAME_FUNC_OFFSET(16480, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, _gloffset_VertexAttrib4NubvARB), + NAME_FUNC_OFFSET(16500, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, _gloffset_VertexAttrib4NuivARB), + NAME_FUNC_OFFSET(16520, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, _gloffset_VertexAttrib4NusvARB), + NAME_FUNC_OFFSET(16540, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, _gloffset_VertexAttrib4bvARB), + NAME_FUNC_OFFSET(16558, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, _gloffset_VertexAttrib4dARB), + NAME_FUNC_OFFSET(16575, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, _gloffset_VertexAttrib4dvARB), + NAME_FUNC_OFFSET(16593, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, _gloffset_VertexAttrib4fARB), + NAME_FUNC_OFFSET(16610, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, _gloffset_VertexAttrib4fvARB), + NAME_FUNC_OFFSET(16628, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, _gloffset_VertexAttrib4ivARB), + NAME_FUNC_OFFSET(16646, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, _gloffset_VertexAttrib4sARB), + NAME_FUNC_OFFSET(16663, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, _gloffset_VertexAttrib4svARB), + NAME_FUNC_OFFSET(16681, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, _gloffset_VertexAttrib4ubvARB), + NAME_FUNC_OFFSET(16700, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, _gloffset_VertexAttrib4uivARB), + NAME_FUNC_OFFSET(16719, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, _gloffset_VertexAttrib4usvARB), + NAME_FUNC_OFFSET(16738, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, _gloffset_VertexAttribPointerARB), + NAME_FUNC_OFFSET(16760, glBindBufferARB, glBindBufferARB, NULL, _gloffset_BindBufferARB), + NAME_FUNC_OFFSET(16773, glBufferDataARB, glBufferDataARB, NULL, _gloffset_BufferDataARB), + NAME_FUNC_OFFSET(16786, glBufferSubDataARB, glBufferSubDataARB, NULL, _gloffset_BufferSubDataARB), + NAME_FUNC_OFFSET(16802, glDeleteBuffersARB, glDeleteBuffersARB, NULL, _gloffset_DeleteBuffersARB), + NAME_FUNC_OFFSET(16818, glGenBuffersARB, glGenBuffersARB, NULL, _gloffset_GenBuffersARB), + NAME_FUNC_OFFSET(16831, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, _gloffset_GetBufferParameterivARB), + NAME_FUNC_OFFSET(16854, glGetBufferPointervARB, glGetBufferPointervARB, NULL, _gloffset_GetBufferPointervARB), + NAME_FUNC_OFFSET(16874, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, _gloffset_GetBufferSubDataARB), + NAME_FUNC_OFFSET(16893, glIsBufferARB, glIsBufferARB, NULL, _gloffset_IsBufferARB), + NAME_FUNC_OFFSET(16904, glMapBufferARB, glMapBufferARB, NULL, _gloffset_MapBufferARB), + NAME_FUNC_OFFSET(16916, glUnmapBufferARB, glUnmapBufferARB, NULL, _gloffset_UnmapBufferARB), + NAME_FUNC_OFFSET(16930, glBeginQueryARB, glBeginQueryARB, NULL, _gloffset_BeginQueryARB), + NAME_FUNC_OFFSET(16943, glDeleteQueriesARB, glDeleteQueriesARB, NULL, _gloffset_DeleteQueriesARB), + NAME_FUNC_OFFSET(16959, glEndQueryARB, glEndQueryARB, NULL, _gloffset_EndQueryARB), + NAME_FUNC_OFFSET(16970, glGenQueriesARB, glGenQueriesARB, NULL, _gloffset_GenQueriesARB), + NAME_FUNC_OFFSET(16983, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, _gloffset_GetQueryObjectivARB), + NAME_FUNC_OFFSET(17002, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, _gloffset_GetQueryObjectuivARB), + NAME_FUNC_OFFSET(17022, glGetQueryivARB, glGetQueryivARB, NULL, _gloffset_GetQueryivARB), + NAME_FUNC_OFFSET(17035, glIsQueryARB, glIsQueryARB, NULL, _gloffset_IsQueryARB), + NAME_FUNC_OFFSET(17045, glCompileShaderARB, glCompileShaderARB, NULL, _gloffset_CompileShaderARB), + NAME_FUNC_OFFSET(17061, glGetActiveUniformARB, glGetActiveUniformARB, NULL, _gloffset_GetActiveUniformARB), + NAME_FUNC_OFFSET(17080, glGetShaderSourceARB, glGetShaderSourceARB, NULL, _gloffset_GetShaderSourceARB), + NAME_FUNC_OFFSET(17098, glGetUniformLocationARB, glGetUniformLocationARB, NULL, _gloffset_GetUniformLocationARB), + NAME_FUNC_OFFSET(17119, glGetUniformfvARB, glGetUniformfvARB, NULL, _gloffset_GetUniformfvARB), + NAME_FUNC_OFFSET(17134, glGetUniformivARB, glGetUniformivARB, NULL, _gloffset_GetUniformivARB), + NAME_FUNC_OFFSET(17149, glLinkProgramARB, glLinkProgramARB, NULL, _gloffset_LinkProgramARB), + NAME_FUNC_OFFSET(17163, glShaderSourceARB, glShaderSourceARB, NULL, _gloffset_ShaderSourceARB), + NAME_FUNC_OFFSET(17178, glUniform1fARB, glUniform1fARB, NULL, _gloffset_Uniform1fARB), + NAME_FUNC_OFFSET(17190, glUniform1fvARB, glUniform1fvARB, NULL, _gloffset_Uniform1fvARB), + NAME_FUNC_OFFSET(17203, glUniform1iARB, glUniform1iARB, NULL, _gloffset_Uniform1iARB), + NAME_FUNC_OFFSET(17215, glUniform1ivARB, glUniform1ivARB, NULL, _gloffset_Uniform1ivARB), + NAME_FUNC_OFFSET(17228, glUniform2fARB, glUniform2fARB, NULL, _gloffset_Uniform2fARB), + NAME_FUNC_OFFSET(17240, glUniform2fvARB, glUniform2fvARB, NULL, _gloffset_Uniform2fvARB), + NAME_FUNC_OFFSET(17253, glUniform2iARB, glUniform2iARB, NULL, _gloffset_Uniform2iARB), + NAME_FUNC_OFFSET(17265, glUniform2ivARB, glUniform2ivARB, NULL, _gloffset_Uniform2ivARB), + NAME_FUNC_OFFSET(17278, glUniform3fARB, glUniform3fARB, NULL, _gloffset_Uniform3fARB), + NAME_FUNC_OFFSET(17290, glUniform3fvARB, glUniform3fvARB, NULL, _gloffset_Uniform3fvARB), + NAME_FUNC_OFFSET(17303, glUniform3iARB, glUniform3iARB, NULL, _gloffset_Uniform3iARB), + NAME_FUNC_OFFSET(17315, glUniform3ivARB, glUniform3ivARB, NULL, _gloffset_Uniform3ivARB), + NAME_FUNC_OFFSET(17328, glUniform4fARB, glUniform4fARB, NULL, _gloffset_Uniform4fARB), + NAME_FUNC_OFFSET(17340, glUniform4fvARB, glUniform4fvARB, NULL, _gloffset_Uniform4fvARB), + NAME_FUNC_OFFSET(17353, glUniform4iARB, glUniform4iARB, NULL, _gloffset_Uniform4iARB), + NAME_FUNC_OFFSET(17365, glUniform4ivARB, glUniform4ivARB, NULL, _gloffset_Uniform4ivARB), + NAME_FUNC_OFFSET(17378, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, _gloffset_UniformMatrix2fvARB), + NAME_FUNC_OFFSET(17397, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, _gloffset_UniformMatrix3fvARB), + NAME_FUNC_OFFSET(17416, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, _gloffset_UniformMatrix4fvARB), + NAME_FUNC_OFFSET(17435, glUseProgramObjectARB, glUseProgramObjectARB, NULL, _gloffset_UseProgramObjectARB), + NAME_FUNC_OFFSET(17448, glValidateProgramARB, glValidateProgramARB, NULL, _gloffset_ValidateProgramARB), + NAME_FUNC_OFFSET(17466, glBindAttribLocationARB, glBindAttribLocationARB, NULL, _gloffset_BindAttribLocationARB), + NAME_FUNC_OFFSET(17487, glGetActiveAttribARB, glGetActiveAttribARB, NULL, _gloffset_GetActiveAttribARB), + NAME_FUNC_OFFSET(17505, glGetAttribLocationARB, glGetAttribLocationARB, NULL, _gloffset_GetAttribLocationARB), + NAME_FUNC_OFFSET(17525, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB), + NAME_FUNC_OFFSET(17539, glDrawBuffersARB, glDrawBuffersARB, NULL, _gloffset_DrawBuffersARB), + NAME_FUNC_OFFSET(17556, gl_dispatch_stub_569, gl_dispatch_stub_569, NULL, _gloffset_SampleMaskSGIS), + NAME_FUNC_OFFSET(17572, gl_dispatch_stub_570, gl_dispatch_stub_570, NULL, _gloffset_SamplePatternSGIS), + NAME_FUNC_OFFSET(17591, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT), + NAME_FUNC_OFFSET(17609, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT), + NAME_FUNC_OFFSET(17630, glPointParameterfEXT, glPointParameterfEXT, NULL, _gloffset_PointParameterfEXT), + NAME_FUNC_OFFSET(17652, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT), + NAME_FUNC_OFFSET(17671, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT), + NAME_FUNC_OFFSET(17693, glPointParameterfvEXT, glPointParameterfvEXT, NULL, _gloffset_PointParameterfvEXT), + NAME_FUNC_OFFSET(17716, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, _gloffset_SecondaryColor3bEXT), + NAME_FUNC_OFFSET(17735, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, _gloffset_SecondaryColor3bvEXT), + NAME_FUNC_OFFSET(17755, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, _gloffset_SecondaryColor3dEXT), + NAME_FUNC_OFFSET(17774, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, _gloffset_SecondaryColor3dvEXT), + NAME_FUNC_OFFSET(17794, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, _gloffset_SecondaryColor3fEXT), + NAME_FUNC_OFFSET(17813, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, _gloffset_SecondaryColor3fvEXT), + NAME_FUNC_OFFSET(17833, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, _gloffset_SecondaryColor3iEXT), + NAME_FUNC_OFFSET(17852, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, _gloffset_SecondaryColor3ivEXT), + NAME_FUNC_OFFSET(17872, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, _gloffset_SecondaryColor3sEXT), + NAME_FUNC_OFFSET(17891, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, _gloffset_SecondaryColor3svEXT), + NAME_FUNC_OFFSET(17911, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, _gloffset_SecondaryColor3ubEXT), + NAME_FUNC_OFFSET(17931, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, _gloffset_SecondaryColor3ubvEXT), + NAME_FUNC_OFFSET(17952, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, _gloffset_SecondaryColor3uiEXT), + NAME_FUNC_OFFSET(17972, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, _gloffset_SecondaryColor3uivEXT), + NAME_FUNC_OFFSET(17993, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, _gloffset_SecondaryColor3usEXT), + NAME_FUNC_OFFSET(18013, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, _gloffset_SecondaryColor3usvEXT), + NAME_FUNC_OFFSET(18034, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, _gloffset_SecondaryColorPointerEXT), + NAME_FUNC_OFFSET(18058, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, _gloffset_MultiDrawArraysEXT), + NAME_FUNC_OFFSET(18076, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, _gloffset_MultiDrawElementsEXT), + NAME_FUNC_OFFSET(18096, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, _gloffset_FogCoordPointerEXT), + NAME_FUNC_OFFSET(18114, glFogCoorddEXT, glFogCoorddEXT, NULL, _gloffset_FogCoorddEXT), + NAME_FUNC_OFFSET(18126, glFogCoorddvEXT, glFogCoorddvEXT, NULL, _gloffset_FogCoorddvEXT), + NAME_FUNC_OFFSET(18139, glFogCoordfEXT, glFogCoordfEXT, NULL, _gloffset_FogCoordfEXT), + NAME_FUNC_OFFSET(18151, glFogCoordfvEXT, glFogCoordfvEXT, NULL, _gloffset_FogCoordfvEXT), + NAME_FUNC_OFFSET(18164, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT), + NAME_FUNC_OFFSET(18184, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, _gloffset_BlendFuncSeparateEXT), + NAME_FUNC_OFFSET(18208, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA), + NAME_FUNC_OFFSET(18222, glWindowPos2dMESA, glWindowPos2dMESA, NULL, _gloffset_WindowPos2dMESA), + NAME_FUNC_OFFSET(18239, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA), + NAME_FUNC_OFFSET(18254, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, _gloffset_WindowPos2dvMESA), + NAME_FUNC_OFFSET(18272, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA), + NAME_FUNC_OFFSET(18286, glWindowPos2fMESA, glWindowPos2fMESA, NULL, _gloffset_WindowPos2fMESA), + NAME_FUNC_OFFSET(18303, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA), + NAME_FUNC_OFFSET(18318, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, _gloffset_WindowPos2fvMESA), + NAME_FUNC_OFFSET(18336, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA), + NAME_FUNC_OFFSET(18350, glWindowPos2iMESA, glWindowPos2iMESA, NULL, _gloffset_WindowPos2iMESA), + NAME_FUNC_OFFSET(18367, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA), + NAME_FUNC_OFFSET(18382, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, _gloffset_WindowPos2ivMESA), + NAME_FUNC_OFFSET(18400, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA), + NAME_FUNC_OFFSET(18414, glWindowPos2sMESA, glWindowPos2sMESA, NULL, _gloffset_WindowPos2sMESA), + NAME_FUNC_OFFSET(18431, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA), + NAME_FUNC_OFFSET(18446, glWindowPos2svMESA, glWindowPos2svMESA, NULL, _gloffset_WindowPos2svMESA), + NAME_FUNC_OFFSET(18464, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA), + NAME_FUNC_OFFSET(18478, glWindowPos3dMESA, glWindowPos3dMESA, NULL, _gloffset_WindowPos3dMESA), + NAME_FUNC_OFFSET(18495, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA), + NAME_FUNC_OFFSET(18510, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, _gloffset_WindowPos3dvMESA), + NAME_FUNC_OFFSET(18528, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA), + NAME_FUNC_OFFSET(18542, glWindowPos3fMESA, glWindowPos3fMESA, NULL, _gloffset_WindowPos3fMESA), + NAME_FUNC_OFFSET(18559, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA), + NAME_FUNC_OFFSET(18574, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, _gloffset_WindowPos3fvMESA), + NAME_FUNC_OFFSET(18592, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA), + NAME_FUNC_OFFSET(18606, glWindowPos3iMESA, glWindowPos3iMESA, NULL, _gloffset_WindowPos3iMESA), + NAME_FUNC_OFFSET(18623, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA), + NAME_FUNC_OFFSET(18638, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, _gloffset_WindowPos3ivMESA), + NAME_FUNC_OFFSET(18656, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA), + NAME_FUNC_OFFSET(18670, glWindowPos3sMESA, glWindowPos3sMESA, NULL, _gloffset_WindowPos3sMESA), + NAME_FUNC_OFFSET(18687, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA), + NAME_FUNC_OFFSET(18702, glWindowPos3svMESA, glWindowPos3svMESA, NULL, _gloffset_WindowPos3svMESA), + NAME_FUNC_OFFSET(18720, glBindProgramNV, glBindProgramNV, NULL, _gloffset_BindProgramNV), + NAME_FUNC_OFFSET(18737, glDeleteProgramsNV, glDeleteProgramsNV, NULL, _gloffset_DeleteProgramsNV), + NAME_FUNC_OFFSET(18757, glGenProgramsNV, glGenProgramsNV, NULL, _gloffset_GenProgramsNV), + NAME_FUNC_OFFSET(18774, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV), + NAME_FUNC_OFFSET(18800, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, _gloffset_GetVertexAttribPointervNV), + NAME_FUNC_OFFSET(18829, glIsProgramNV, glIsProgramNV, NULL, _gloffset_IsProgramNV), + NAME_FUNC_OFFSET(18844, glPointParameteriNV, glPointParameteriNV, NULL, _gloffset_PointParameteriNV), + NAME_FUNC_OFFSET(18862, glPointParameterivNV, glPointParameterivNV, NULL, _gloffset_PointParameterivNV), + NAME_FUNC_OFFSET(18881, gl_dispatch_stub_750, gl_dispatch_stub_750, NULL, _gloffset_BlendEquationSeparateEXT), + NAME_FUNC_OFFSET(18905, gl_dispatch_stub_750, gl_dispatch_stub_750, NULL, _gloffset_BlendEquationSeparateEXT), + NAME_FUNC_OFFSET(18932, glBindFramebufferEXT, glBindFramebufferEXT, NULL, _gloffset_BindFramebufferEXT), + NAME_FUNC_OFFSET(18950, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, _gloffset_BindRenderbufferEXT), + NAME_FUNC_OFFSET(18969, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, _gloffset_CheckFramebufferStatusEXT), + NAME_FUNC_OFFSET(18994, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, _gloffset_DeleteFramebuffersEXT), + NAME_FUNC_OFFSET(19015, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, _gloffset_DeleteRenderbuffersEXT), + NAME_FUNC_OFFSET(19037, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, _gloffset_FramebufferRenderbufferEXT), + NAME_FUNC_OFFSET(19063, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, _gloffset_FramebufferTexture1DEXT), + NAME_FUNC_OFFSET(19086, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, _gloffset_FramebufferTexture2DEXT), + NAME_FUNC_OFFSET(19109, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, _gloffset_FramebufferTexture3DEXT), + NAME_FUNC_OFFSET(19132, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, _gloffset_GenFramebuffersEXT), + NAME_FUNC_OFFSET(19150, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, _gloffset_GenRenderbuffersEXT), + NAME_FUNC_OFFSET(19169, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, _gloffset_GenerateMipmapEXT), + NAME_FUNC_OFFSET(19186, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, _gloffset_GetFramebufferAttachmentParameterivEXT), + NAME_FUNC_OFFSET(19224, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, _gloffset_GetRenderbufferParameterivEXT), + NAME_FUNC_OFFSET(19253, glIsFramebufferEXT, glIsFramebufferEXT, NULL, _gloffset_IsFramebufferEXT), + NAME_FUNC_OFFSET(19269, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, _gloffset_IsRenderbufferEXT), + NAME_FUNC_OFFSET(19286, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, _gloffset_RenderbufferStorageEXT), + NAME_FUNC_OFFSET(19308, gl_dispatch_stub_768, gl_dispatch_stub_768, NULL, _gloffset_BlitFramebufferEXT), + NAME_FUNC_OFFSET(19326, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, _gloffset_FramebufferTextureLayerEXT), NAME_FUNC_OFFSET(-1, NULL, NULL, NULL, 0) }; diff --git a/src/mesa/glapi/glthread.c b/src/mesa/glapi/glthread.c index 56ddf7c25a..e3abb0f4ae 100644 --- a/src/mesa/glapi/glthread.c +++ b/src/mesa/glapi/glthread.c @@ -32,7 +32,7 @@ #include <dix-config.h> #endif -#include "main/glheader.h" +#include "main/compiler.h" #include "glthread.h" diff --git a/src/mesa/glapi/glthread.h b/src/mesa/glapi/glthread.h index ae2f79f37d..dfe09a9d59 100644 --- a/src/mesa/glapi/glthread.h +++ b/src/mesa/glapi/glthread.h @@ -265,9 +265,21 @@ typedef xmutex_rec _glthread_Mutex; */ #ifdef BEOS_THREADS +/* Problem with OS.h and this file on haiku */ +#ifndef __HAIKU__ #include <kernel/OS.h> +#endif + #include <support/TLS.h> +/* The only two typedefs required here + * this is cause of the OS.h problem + */ +#ifdef __HAIKU__ +typedef int32 thread_id; +typedef int32 sem_id; +#endif + typedef struct { int32 key; int initMagic; @@ -299,11 +311,11 @@ typedef benaphore _glthread_Mutex; * THREADS not defined */ -typedef GLuint _glthread_TSD; +typedef unsigned _glthread_TSD; -typedef GLuint _glthread_Thread; +typedef unsigned _glthread_Thread; -typedef GLuint _glthread_Mutex; +typedef unsigned _glthread_Mutex; #define _glthread_DECLARE_STATIC_MUTEX(name) static _glthread_Mutex name = 0 diff --git a/src/mesa/main/api_exec.c b/src/mesa/main/api_exec.c index f8ee0d59dd..6f66ff47a0 100644 --- a/src/mesa/main/api_exec.c +++ b/src/mesa/main/api_exec.c @@ -29,7 +29,7 @@ */ -#include "glheader.h" +#include "mfeatures.h" #if FEATURE_accum #include "accum.h" #endif @@ -116,6 +116,7 @@ #include "texstate.h" #include "mtypes.h" #include "varray.h" +#include "viewport.h" #if FEATURE_NV_vertex_program #include "shader/nvprogram.h" #endif @@ -838,6 +839,12 @@ _mesa_init_exec_table(struct _glapi_table *exec) SET_SetFragmentShaderConstantATI(exec, _mesa_SetFragmentShaderConstantATI); #endif + /* GL_ATI_envmap_bumpmap */ + SET_GetTexBumpParameterivATI(exec, _mesa_GetTexBumpParameterivATI); + SET_GetTexBumpParameterfvATI(exec, _mesa_GetTexBumpParameterfvATI); + SET_TexBumpParameterivATI(exec, _mesa_TexBumpParameterivATI); + SET_TexBumpParameterfvATI(exec, _mesa_TexBumpParameterfvATI); + #if FEATURE_EXT_framebuffer_object SET_IsRenderbufferEXT(exec, _mesa_IsRenderbufferEXT); SET_BindRenderbufferEXT(exec, _mesa_BindRenderbufferEXT); diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c index 5c8955d7c8..42d1e579e0 100644 --- a/src/mesa/main/api_validate.c +++ b/src/mesa/main/api_validate.c @@ -87,11 +87,20 @@ check_valid_to_render(GLcontext *ctx, char *function) return GL_FALSE; } - /* Always need vertex positions, unless a vertex program is in use */ - if (!ctx->VertexProgram._Current && - !ctx->Array.ArrayObj->Vertex.Enabled && +#if FEATURE_es2_glsl + /* For ES2, we can draw if any vertex array is enabled (and we should + * always have a vertex program/shader). + */ + if (ctx->Array.ArrayObj->_Enabled == 0x0 || !ctx->VertexProgram._Current) + return GL_FALSE; +#else + /* For regular OpenGL, only draw if we have vertex positions (regardless + * of whether or not we have a vertex program/shader). + */ + if (!ctx->Array.ArrayObj->Vertex.Enabled && !ctx->Array.ArrayObj->VertexAttrib[0].Enabled) return GL_FALSE; +#endif return GL_TRUE; } diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c index 218e0aeb6b..1d2c460488 100644 --- a/src/mesa/main/attrib.c +++ b/src/mesa/main/attrib.c @@ -55,8 +55,105 @@ #include "texparam.h" #include "texstate.h" #include "varray.h" +#include "viewport.h" #include "mtypes.h" -#include "math/m_xform.h" + + +/** + * glEnable()/glDisable() attribute group (GL_ENABLE_BIT). + */ +struct gl_enable_attrib +{ + GLboolean AlphaTest; + GLboolean AutoNormal; + GLboolean Blend; + GLbitfield ClipPlanes; + GLboolean ColorMaterial; + GLboolean ColorTable[COLORTABLE_MAX]; + GLboolean Convolution1D; + GLboolean Convolution2D; + GLboolean Separable2D; + GLboolean CullFace; + GLboolean DepthTest; + GLboolean Dither; + GLboolean Fog; + GLboolean Histogram; + GLboolean Light[MAX_LIGHTS]; + GLboolean Lighting; + GLboolean LineSmooth; + GLboolean LineStipple; + GLboolean IndexLogicOp; + GLboolean ColorLogicOp; + + GLboolean Map1Color4; + GLboolean Map1Index; + GLboolean Map1Normal; + GLboolean Map1TextureCoord1; + GLboolean Map1TextureCoord2; + GLboolean Map1TextureCoord3; + GLboolean Map1TextureCoord4; + GLboolean Map1Vertex3; + GLboolean Map1Vertex4; + GLboolean Map1Attrib[16]; /* GL_NV_vertex_program */ + GLboolean Map2Color4; + GLboolean Map2Index; + GLboolean Map2Normal; + GLboolean Map2TextureCoord1; + GLboolean Map2TextureCoord2; + GLboolean Map2TextureCoord3; + GLboolean Map2TextureCoord4; + GLboolean Map2Vertex3; + GLboolean Map2Vertex4; + GLboolean Map2Attrib[16]; /* GL_NV_vertex_program */ + + GLboolean MinMax; + GLboolean Normalize; + GLboolean PixelTexture; + GLboolean PointSmooth; + GLboolean PolygonOffsetPoint; + GLboolean PolygonOffsetLine; + GLboolean PolygonOffsetFill; + GLboolean PolygonSmooth; + GLboolean PolygonStipple; + GLboolean RescaleNormals; + GLboolean Scissor; + GLboolean Stencil; + GLboolean StencilTwoSide; /* GL_EXT_stencil_two_side */ + GLboolean MultisampleEnabled; /* GL_ARB_multisample */ + GLboolean SampleAlphaToCoverage; /* GL_ARB_multisample */ + GLboolean SampleAlphaToOne; /* GL_ARB_multisample */ + GLboolean SampleCoverage; /* GL_ARB_multisample */ + GLboolean SampleCoverageInvert; /* GL_ARB_multisample */ + GLboolean RasterPositionUnclipped; /* GL_IBM_rasterpos_clip */ + + GLbitfield Texture[MAX_TEXTURE_UNITS]; + GLbitfield TexGen[MAX_TEXTURE_UNITS]; + + /* SGI_texture_color_table */ + GLboolean TextureColorTable[MAX_TEXTURE_UNITS]; + + /* GL_ARB_vertex_program / GL_NV_vertex_program */ + GLboolean VertexProgram; + GLboolean VertexProgramPointSize; + GLboolean VertexProgramTwoSide; + + /* GL_ARB_point_sprite / GL_NV_point_sprite */ + GLboolean PointSprite; + GLboolean FragmentShaderATI; +}; + + +/** + * Node for the attribute stack. + */ +struct gl_attrib_node +{ + GLbitfield kind; + void *data; + struct gl_attrib_node *next; +}; + + /** * Special struct for saving/restoring texture state (GL_TEXTURE_BIT) @@ -365,7 +462,7 @@ _mesa_PushAttrib(GLbitfield mask) if (mask & GL_TEXTURE_BIT) { struct texture_state *texstate = CALLOC_STRUCT(texture_state); - GLuint u; + GLuint u, tex; if (!texstate) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glPushAttrib(GL_TEXTURE_BIT)"); @@ -381,38 +478,18 @@ _mesa_PushAttrib(GLbitfield mask) * accidentally get deleted while referenced in the attribute stack. */ for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { - _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_1D_INDEX], - ctx->Texture.Unit[u].Current1D); - _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_2D_INDEX], - ctx->Texture.Unit[u].Current2D); - _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_3D_INDEX], - ctx->Texture.Unit[u].Current3D); - _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_CUBE_INDEX], - ctx->Texture.Unit[u].CurrentCubeMap); - _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_RECT_INDEX], - ctx->Texture.Unit[u].CurrentRect); - _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_1D_ARRAY_INDEX], - ctx->Texture.Unit[u].Current1DArray); - _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_2D_ARRAY_INDEX], - ctx->Texture.Unit[u].Current2DArray); + for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { + _mesa_reference_texobj(&texstate->SavedTexRef[u][tex], + ctx->Texture.Unit[u].CurrentTex[tex]); + } } /* copy state/contents of the currently bound texture objects */ for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { - _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_1D_INDEX], - ctx->Texture.Unit[u].Current1D); - _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_2D_INDEX], - ctx->Texture.Unit[u].Current2D); - _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_3D_INDEX], - ctx->Texture.Unit[u].Current3D); - _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_CUBE_INDEX], - ctx->Texture.Unit[u].CurrentCubeMap); - _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_RECT_INDEX], - ctx->Texture.Unit[u].CurrentRect); - _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_1D_ARRAY_INDEX], - ctx->Texture.Unit[u].Current1DArray); - _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_2D_ARRAY_INDEX], - ctx->Texture.Unit[u].Current2DArray); + for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { + _mesa_copy_texture_object(&texstate->SavedObj[u][tex], + ctx->Texture.Unit[u].CurrentTex[tex]); + } } _mesa_unlock_context_textures(ctx); @@ -699,26 +776,26 @@ pop_texture_group(GLcontext *ctx, struct texture_state *texstate) } _mesa_TexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, unit->EnvMode); _mesa_TexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, unit->EnvColor); - _mesa_TexGeni(GL_S, GL_TEXTURE_GEN_MODE, unit->GenModeS); - _mesa_TexGeni(GL_T, GL_TEXTURE_GEN_MODE, unit->GenModeT); - _mesa_TexGeni(GL_R, GL_TEXTURE_GEN_MODE, unit->GenModeR); - _mesa_TexGeni(GL_Q, GL_TEXTURE_GEN_MODE, unit->GenModeQ); - _mesa_TexGenfv(GL_S, GL_OBJECT_PLANE, unit->ObjectPlaneS); - _mesa_TexGenfv(GL_T, GL_OBJECT_PLANE, unit->ObjectPlaneT); - _mesa_TexGenfv(GL_R, GL_OBJECT_PLANE, unit->ObjectPlaneR); - _mesa_TexGenfv(GL_Q, GL_OBJECT_PLANE, unit->ObjectPlaneQ); + _mesa_TexGeni(GL_S, GL_TEXTURE_GEN_MODE, unit->GenS.Mode); + _mesa_TexGeni(GL_T, GL_TEXTURE_GEN_MODE, unit->GenT.Mode); + _mesa_TexGeni(GL_R, GL_TEXTURE_GEN_MODE, unit->GenR.Mode); + _mesa_TexGeni(GL_Q, GL_TEXTURE_GEN_MODE, unit->GenQ.Mode); + _mesa_TexGenfv(GL_S, GL_OBJECT_PLANE, unit->GenS.ObjectPlane); + _mesa_TexGenfv(GL_T, GL_OBJECT_PLANE, unit->GenT.ObjectPlane); + _mesa_TexGenfv(GL_R, GL_OBJECT_PLANE, unit->GenR.ObjectPlane); + _mesa_TexGenfv(GL_Q, GL_OBJECT_PLANE, unit->GenQ.ObjectPlane); /* Eye plane done differently to avoid re-transformation */ { struct gl_texture_unit *destUnit = &ctx->Texture.Unit[u]; - COPY_4FV(destUnit->EyePlaneS, unit->EyePlaneS); - COPY_4FV(destUnit->EyePlaneT, unit->EyePlaneT); - COPY_4FV(destUnit->EyePlaneR, unit->EyePlaneR); - COPY_4FV(destUnit->EyePlaneQ, unit->EyePlaneQ); + COPY_4FV(destUnit->GenS.EyePlane, unit->GenS.EyePlane); + COPY_4FV(destUnit->GenT.EyePlane, unit->GenT.EyePlane); + COPY_4FV(destUnit->GenR.EyePlane, unit->GenR.EyePlane); + COPY_4FV(destUnit->GenQ.EyePlane, unit->GenQ.EyePlane); if (ctx->Driver.TexGen) { - ctx->Driver.TexGen(ctx, GL_S, GL_EYE_PLANE, unit->EyePlaneS); - ctx->Driver.TexGen(ctx, GL_T, GL_EYE_PLANE, unit->EyePlaneT); - ctx->Driver.TexGen(ctx, GL_R, GL_EYE_PLANE, unit->EyePlaneR); - ctx->Driver.TexGen(ctx, GL_Q, GL_EYE_PLANE, unit->EyePlaneQ); + ctx->Driver.TexGen(ctx, GL_S, GL_EYE_PLANE, unit->GenS.EyePlane); + ctx->Driver.TexGen(ctx, GL_T, GL_EYE_PLANE, unit->GenT.EyePlane); + ctx->Driver.TexGen(ctx, GL_R, GL_EYE_PLANE, unit->GenR.EyePlane); + ctx->Driver.TexGen(ctx, GL_Q, GL_EYE_PLANE, unit->GenQ.EyePlane); } } _mesa_set_enable(ctx, GL_TEXTURE_GEN_S, diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 016543da01..c8d160baa9 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -1,8 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 7.2 + * Version: 7.5 * * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. + * Copyright (C) 1999-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"), @@ -25,7 +26,7 @@ /** * \file bufferobj.c - * \brief Functions for the GL_ARB_vertex_buffer_object extension. + * \brief Functions for the GL_ARB_vertex/pixel_buffer_object extensions. * \author Brian Paul, Ian Romanick */ @@ -144,8 +145,7 @@ buffer_object_subdata_range_good( GLcontext * ctx, GLenum target, /** * Allocate and initialize a new buffer object. * - * This function is intended to be called via - * \c dd_function_table::NewBufferObject. + * Default callback for the \c dd_function_table::NewBufferObject() hook. */ struct gl_buffer_object * _mesa_new_buffer_object( GLcontext *ctx, GLuint name, GLenum target ) @@ -163,8 +163,7 @@ _mesa_new_buffer_object( GLcontext *ctx, GLuint name, GLenum target ) /** * Delete a buffer object. * - * This function is intended to be called via - * \c dd_function_table::DeleteBuffer. + * Default callback for the \c dd_function_table::DeleteBuffer() hook. */ void _mesa_delete_buffer_object( GLcontext *ctx, struct gl_buffer_object *bufObj ) @@ -271,9 +270,8 @@ _mesa_initialize_buffer_object( struct gl_buffer_object *obj, * previously stored in the buffer object is lost. If \c data is \c NULL, * memory will be allocated, but no copy will occur. * - * This function is intended to be called via - * \c dd_function_table::BufferData. This function need not set GL error - * codes. The input parameters will have been tested before calling. + * This is the default callback for \c dd_function_table::BufferData() + * Note that all GL error checking will have been done already. * * \param ctx GL context. * \param target Buffer object target on which to operate. @@ -312,9 +310,8 @@ _mesa_buffer_data( GLcontext *ctx, GLenum target, GLsizeiptrARB size, * specified by \c size + \c offset extends beyond the end of the buffer or * if \c data is \c NULL, no copy is performed. * - * This function is intended to be called by - * \c dd_function_table::BufferSubData. This function need not set GL error - * codes. The input parameters will have been tested before calling. + * This is the default callback for \c dd_function_table::BufferSubData() + * Note that all GL error checking will have been done already. * * \param ctx GL context. * \param target Buffer object target on which to operate. @@ -346,15 +343,14 @@ _mesa_buffer_subdata( GLcontext *ctx, GLenum target, GLintptrARB offset, * specified by \c size + \c offset extends beyond the end of the buffer or * if \c data is \c NULL, no copy is performed. * - * This function is intended to be called by - * \c dd_function_table::BufferGetSubData. This function need not set GL error - * codes. The input parameters will have been tested before calling. + * This is the default callback for \c dd_function_table::GetBufferSubData() + * Note that all GL error checking will have been done already. * * \param ctx GL context. * \param target Buffer object target on which to operate. - * \param offset Offset of the first byte to be modified. + * \param offset Offset of the first byte to be fetched. * \param size Size, in bytes, of the data range. - * \param data Pointer to the data to store in the buffer object. + * \param data Destination for data * \param bufObj Object to be used. * * \sa glBufferGetSubDataARB, dd_function_table::GetBufferSubData. @@ -373,9 +369,7 @@ _mesa_buffer_get_subdata( GLcontext *ctx, GLenum target, GLintptrARB offset, /** - * Fallback function called via ctx->Driver.MapBuffer(). - * Hardware drivers that really implement buffer objects should never use - * this function. + * Default callback for \c dd_function_tabel::MapBuffer(). * * The function parameters will have been already tested for errors. * @@ -407,9 +401,7 @@ _mesa_buffer_map( GLcontext *ctx, GLenum target, GLenum access, /** - * Fallback function called via ctx->Driver.MapBuffer(). - * Hardware drivers that really implement buffer objects should never use - * function. + * Default callback for \c dd_function_table::MapBuffer(). * * The input parameters will have been already tested for errors. * @@ -446,6 +438,7 @@ _mesa_init_buffer_objects( GLcontext *ctx ) ctx->Array.ElementArrayBufferObj = ctx->Array.NullBufferObj; } + /** * Bind the specified target to buffer for the specified context. */ @@ -796,11 +789,18 @@ _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids) for (i = 0; i < n; i++) { struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, ids[i]); if (bufObj) { - /* unbind any vertex pointers bound to this buffer */ GLuint j; ASSERT(bufObj->Name == ids[i]); + if (bufObj->Pointer) { + /* if mapped, unmap it now */ + ctx->Driver.UnmapBuffer(ctx, 0, bufObj); + bufObj->Access = DEFAULT_ACCESS; + bufObj->Pointer = NULL; + } + + /* unbind any vertex pointers bound to this buffer */ unbind(ctx, &ctx->Array.ArrayObj->Vertex.BufferObj, bufObj); unbind(ctx, &ctx->Array.ArrayObj->Normal.BufferObj, bufObj); unbind(ctx, &ctx->Array.ArrayObj->Color.BufferObj, bufObj); @@ -822,6 +822,7 @@ _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids) _mesa_BindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, 0 ); } + /* unbind any pixel pack/unpack pointers bound to this buffer */ if (ctx->Pack.BufferObj == bufObj) { _mesa_BindBufferARB( GL_PIXEL_PACK_BUFFER_EXT, 0 ); } @@ -951,8 +952,10 @@ _mesa_BufferDataARB(GLenum target, GLsizeiptrARB size, } if (bufObj->Pointer) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glBufferDataARB(buffer is mapped)" ); - return; + /* Unmap the existing buffer. We'll replace it now. Not an error. */ + ctx->Driver.UnmapBuffer(ctx, target, bufObj); + bufObj->Access = DEFAULT_ACCESS; + bufObj->Pointer = NULL; } ASSERT(ctx->Driver.BufferData); @@ -1068,10 +1071,7 @@ _mesa_UnmapBufferARB(GLenum target) return GL_FALSE; } - if (ctx->Driver.UnmapBuffer) { - status = ctx->Driver.UnmapBuffer( ctx, target, bufObj ); - } - + status = ctx->Driver.UnmapBuffer( ctx, target, bufObj ); bufObj->Access = DEFAULT_ACCESS; bufObj->Pointer = NULL; diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c index 818d068a12..c5f13345f0 100644 --- a/src/mesa/main/buffers.c +++ b/src/mesa/main/buffers.c @@ -120,11 +120,9 @@ draw_buffer_enum_to_bitmask(GLenum buffer) case GL_AUX0: return BUFFER_BIT_AUX0; case GL_AUX1: - return BUFFER_BIT_AUX1; case GL_AUX2: - return BUFFER_BIT_AUX2; case GL_AUX3: - return BUFFER_BIT_AUX3; + return 1 << BUFFER_COUNT; /* invalid, but not BAD_MASK */ case GL_COLOR_ATTACHMENT0_EXT: return BUFFER_BIT_COLOR0; case GL_COLOR_ATTACHMENT1_EXT: @@ -177,11 +175,9 @@ read_buffer_enum_to_index(GLenum buffer) case GL_AUX0: return BUFFER_AUX0; case GL_AUX1: - return BUFFER_AUX1; case GL_AUX2: - return BUFFER_AUX2; case GL_AUX3: - return BUFFER_AUX3; + return BUFFER_COUNT; /* invalid, but not -1 */ case GL_COLOR_ATTACHMENT0_EXT: return BUFFER_COLOR0; case GL_COLOR_ATTACHMENT1_EXT: @@ -290,7 +286,10 @@ _mesa_DrawBuffersARB(GLsizei n, const GLenum *buffers) GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); - if (n < 1 || n > (GLsizei) ctx->Const.MaxDrawBuffers) { + /* Turns out n==0 is a valid input that should not produce an error. + * The remaining code below correctly handles the n==0 case. + */ + if (n < 0 || n > (GLsizei) ctx->Const.MaxDrawBuffers) { _mesa_error(ctx, GL_INVALID_VALUE, "glDrawBuffersARB(n)"); return; } @@ -332,12 +331,14 @@ _mesa_DrawBuffersARB(GLsizei n, const GLenum *buffers) _mesa_drawbuffers(ctx, n, buffers, destMask); /* - * Call device driver function. + * Call device driver function. Note that n can be equal to 0, + * in which case we don't want to reference buffers[0], which + * may not be valid. */ if (ctx->Driver.DrawBuffers) ctx->Driver.DrawBuffers(ctx, n, buffers); else if (ctx->Driver.DrawBuffer) - ctx->Driver.DrawBuffer(ctx, buffers[0]); + ctx->Driver.DrawBuffer(ctx, n>0? buffers[0]:GL_NONE); } diff --git a/src/mesa/main/clip.c b/src/mesa/main/clip.c index 43ef55ee3b..96c80e6ef8 100644 --- a/src/mesa/main/clip.c +++ b/src/mesa/main/clip.c @@ -29,7 +29,6 @@ #include "macros.h" #include "mtypes.h" -#include "math/m_xform.h" #include "math/m_matrix.h" diff --git a/src/mesa/main/compiler.h b/src/mesa/main/compiler.h new file mode 100644 index 0000000000..39b19bb776 --- /dev/null +++ b/src/mesa/main/compiler.h @@ -0,0 +1,479 @@ +/* + * Mesa 3-D graphics library + * Version: 7.5 + * + * 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 compiler.h + * Compiler-related stuff. + */ + + +#ifndef COMPILER_H +#define COMPILER_H + + +#include <assert.h> +#include <ctype.h> +#if defined(__alpha__) && defined(CCPML) +#include <cpml.h> /* use Compaq's Fast Math Library on Alpha */ +#else +#include <math.h> +#endif +#include <limits.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#if defined(__linux__) && defined(__i386__) +#include <fpu_control.h> +#endif +#include <float.h> +#include <stdarg.h> + + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * Get standard integer types + */ +#if defined(_MSC_VER) + typedef __int8 int8_t; + typedef unsigned __int8 uint8_t; + typedef __int16 int16_t; + typedef unsigned __int16 uint16_t; +# ifndef __eglplatform_h_ + typedef __int32 int32_t; +# endif + typedef unsigned __int32 uint32_t; + typedef __int64 int64_t; + typedef unsigned __int64 uint64_t; + +# if defined(_WIN64) + typedef __int64 intptr_t; + typedef unsigned __int64 uintptr_t; +# else + typedef __int32 intptr_t; + typedef unsigned __int32 uintptr_t; +# endif + +# define INT64_C(__val) __val##i64 +# define UINT64_C(__val) __val##ui64 +#else +# include <stdint.h> +#endif + + +/** + * Sun compilers define __i386 instead of the gcc-style __i386__ + */ +#ifdef __SUNPRO_C +# if !defined(__i386__) && defined(__i386) +# define __i386__ +# elif !defined(__amd64__) && defined(__amd64) +# define __amd64__ +# elif !defined(__sparc__) && defined(__sparc) +# define __sparc__ +# endif +# if !defined(__volatile) +# define __volatile volatile +# endif +#endif + + +/** + * finite macro. + */ +#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) && !defined(BUILD_FOR_SNAP) +# define __WIN32__ +# define finite _finite +#endif +#if defined(__WATCOMC__) +# define finite _finite +# pragma disable_message(201) /* Disable unreachable code warnings */ +#endif + + +/** + * Disable assorted warnings + */ +#if !defined(OPENSTEP) && (defined(__WIN32__) && !defined(__CYGWIN__)) && !defined(BUILD_FOR_SNAP) +# if !defined(__GNUC__) /* mingw environment */ +# pragma warning( disable : 4068 ) /* unknown pragma */ +# pragma warning( disable : 4710 ) /* function 'foo' not inlined */ +# pragma warning( disable : 4711 ) /* function 'foo' selected for automatic inline expansion */ +# pragma warning( disable : 4127 ) /* conditional expression is constant */ +# if defined(MESA_MINWARN) +# pragma warning( disable : 4244 ) /* '=' : conversion from 'const double ' to 'float ', possible loss of data */ +# pragma warning( disable : 4018 ) /* '<' : signed/unsigned mismatch */ +# pragma warning( disable : 4305 ) /* '=' : truncation from 'const double ' to 'float ' */ +# pragma warning( disable : 4550 ) /* 'function' undefined; assuming extern returning int */ +# pragma warning( disable : 4761 ) /* integral size mismatch in argument; conversion supplied */ +# endif +# endif +#endif + + +/** + * Function inlining + */ +#if defined(__GNUC__) +# define INLINE __inline__ +#elif defined(__MSC__) +# define INLINE __inline +#elif defined(_MSC_VER) +# define INLINE __inline +#elif defined(__ICL) +# define INLINE __inline +#elif defined(__INTEL_COMPILER) +# define INLINE inline +#elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100) +# define INLINE __inline +#elif defined(__SUNPRO_C) && defined(__C99FEATURES__) +# define INLINE inline +# define __inline inline +# define __inline__ inline +#elif (__STDC_VERSION__ >= 199901L) /* C99 */ +# define INLINE inline +#else +# define INLINE +#endif + + +/** + * PUBLIC/USED macros + * + * If we build the library with gcc's -fvisibility=hidden flag, we'll + * use the PUBLIC macro to mark functions that are to be exported. + * + * We also need to define a USED attribute, so the optimizer doesn't + * inline a static function that we later use in an alias. - ajax + */ +#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303 +# define PUBLIC __attribute__((visibility("default"))) +# define USED __attribute__((used)) +#else +# define PUBLIC +# define USED +#endif + + +/** + * Some compilers don't like some of Mesa's const usage. In those places use + * CONST instead of const. Pass -DNO_CONST to compilers where this matters. + */ +#ifdef NO_CONST +# define CONST +#else +# define CONST const +#endif + + +/** + * __builtin_expect macros + */ +#if (!defined(__GNUC__) || __GNUC__ < 3) && (!defined(__IBMC__) || __IBMC__ < 900) +# define __builtin_expect(x, y) x +#endif + + +/** + * The __FUNCTION__ gcc variable is generally only used for debugging. + * If we're not using gcc, define __FUNCTION__ as a cpp symbol here. + * Don't define it if using a newer Windows compiler. + */ +#ifndef __FUNCTION__ +# if defined(__VMS) +# define __FUNCTION__ "VMS$NL:" +# elif ((!defined __GNUC__) || (__GNUC__ < 2)) && (!defined __xlC__) && \ + (!defined(_MSC_VER) || _MSC_VER < 1300) +# if (__STDC_VERSION__ >= 199901L) /* C99 */ || \ + (defined(__SUNPRO_C) && defined(__C99FEATURES__)) +# define __FUNCTION__ __func__ +# else +# define __FUNCTION__ "<unknown>" +# endif +# endif +#endif + + +/** + * Either define MESA_BIG_ENDIAN or MESA_LITTLE_ENDIAN. + * Do not use them unless absolutely necessary! + * Try to use a runtime test instead. + * For now, only used by some DRI hardware drivers for color/texel packing. + */ +#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && BYTE_ORDER == BIG_ENDIAN +#if defined(__linux__) +#include <byteswap.h> +#define CPU_TO_LE32( x ) bswap_32( x ) +#else /*__linux__*/ +#include <sys/endian.h> +#define CPU_TO_LE32( x ) bswap32( x ) +#endif /*__linux__*/ +#define MESA_BIG_ENDIAN 1 +#else +#define CPU_TO_LE32( x ) ( x ) +#define MESA_LITTLE_ENDIAN 1 +#endif +#define LE32_TO_CPU( x ) CPU_TO_LE32( x ) + + + +#if !defined(CAPI) && defined(WIN32) && !defined(BUILD_FOR_SNAP) +#define CAPI _cdecl +#endif + + +/** + * Create a macro so that asm functions can be linked into compilers other + * than GNU C + */ +#ifndef _ASMAPI +#if defined(WIN32) && !defined(BUILD_FOR_SNAP)/* was: !defined( __GNUC__ ) && !defined( VMS ) && !defined( __INTEL_COMPILER )*/ +#define _ASMAPI __cdecl +#else +#define _ASMAPI +#endif +#ifdef PTR_DECL_IN_FRONT +#define _ASMAPIP * _ASMAPI +#else +#define _ASMAPIP _ASMAPI * +#endif +#endif + +#ifdef USE_X86_ASM +#define _NORMAPI _ASMAPI +#define _NORMAPIP _ASMAPIP +#else +#define _NORMAPI +#define _NORMAPIP * +#endif + + +/* This is a macro on IRIX */ +#ifdef _P +#undef _P +#endif + + +/* Turn off macro checking systems used by other libraries */ +#ifdef CHECK +#undef CHECK +#endif + + +/** + * ASSERT macro + */ +#if !defined(_WIN32_WCE) +#if defined(BUILD_FOR_SNAP) && defined(CHECKED) +# define ASSERT(X) _CHECK(X) +#elif defined(DEBUG) +# define ASSERT(X) assert(X) +#else +# define ASSERT(X) +#endif +#endif + + +#ifndef NULL +#define NULL 0 +#endif + + +/** + * LONGSTRING macro + * gcc -pedantic warns about long string literals, LONGSTRING silences that. + */ +#if !defined(__GNUC__) || (__GNUC__ < 2) || \ + ((__GNUC__ == 2) && (__GNUC_MINOR__ <= 7)) +# define LONGSTRING +#else +# define LONGSTRING __extension__ +#endif + + +#ifndef M_PI +#define M_PI (3.1415926536) +#endif + +#ifndef M_E +#define M_E (2.7182818284590452354) +#endif + +#ifndef ONE_DIV_LN2 +#define ONE_DIV_LN2 (1.442695040888963456) +#endif + +#ifndef ONE_DIV_SQRT_LN2 +#define ONE_DIV_SQRT_LN2 (1.201122408786449815) +#endif + +#ifndef FLT_MAX_EXP +#define FLT_MAX_EXP 128 +#endif + + +/** + * USE_IEEE: Determine if we're using IEEE floating point + */ +#if defined(__i386__) || defined(__386__) || defined(__sparc__) || \ + defined(__s390x__) || defined(__powerpc__) || \ + defined(__x86_64__) || \ + defined(ia64) || defined(__ia64__) || \ + defined(__hppa__) || defined(hpux) || \ + defined(__mips) || defined(_MIPS_ARCH) || \ + defined(__arm__) || \ + defined(__sh__) || defined(__m32r__) || \ + (defined(__sun) && defined(_IEEE_754)) || \ + (defined(__alpha__) && (defined(__IEEE_FLOAT) || !defined(VMS))) +#define USE_IEEE +#define IEEE_ONE 0x3f800000 +#endif + + +/** + * START/END_FAST_MATH macros: + * + * START_FAST_MATH: Set x86 FPU to faster, 32-bit precision mode (and save + * original mode to a temporary). + * END_FAST_MATH: Restore x86 FPU to original mode. + */ +#if defined(__GNUC__) && defined(__i386__) +/* + * Set the x86 FPU control word to guarentee only 32 bits of precision + * are stored in registers. Allowing the FPU to store more introduces + * differences between situations where numbers are pulled out of memory + * vs. situations where the compiler is able to optimize register usage. + * + * In the worst case, we force the compiler to use a memory access to + * truncate the float, by specifying the 'volatile' keyword. + */ +/* Hardware default: All exceptions masked, extended double precision, + * round to nearest (IEEE compliant): + */ +#define DEFAULT_X86_FPU 0x037f +/* All exceptions masked, single precision, round to nearest: + */ +#define FAST_X86_FPU 0x003f +/* The fldcw instruction will cause any pending FP exceptions to be + * raised prior to entering the block, and we clear any pending + * exceptions before exiting the block. Hence, asm code has free + * reign over the FPU while in the fast math block. + */ +#if defined(NO_FAST_MATH) +#define START_FAST_MATH(x) \ +do { \ + static GLuint mask = DEFAULT_X86_FPU; \ + __asm__ ( "fnstcw %0" : "=m" (*&(x)) ); \ + __asm__ ( "fldcw %0" : : "m" (mask) ); \ +} while (0) +#else +#define START_FAST_MATH(x) \ +do { \ + static GLuint mask = FAST_X86_FPU; \ + __asm__ ( "fnstcw %0" : "=m" (*&(x)) ); \ + __asm__ ( "fldcw %0" : : "m" (mask) ); \ +} while (0) +#endif +/* Restore original FPU mode, and clear any exceptions that may have + * occurred in the FAST_MATH block. + */ +#define END_FAST_MATH(x) \ +do { \ + __asm__ ( "fnclex ; fldcw %0" : : "m" (*&(x)) ); \ +} while (0) + +#elif defined(__WATCOMC__) && defined(__386__) +#define DEFAULT_X86_FPU 0x037f /* See GCC comments above */ +#define FAST_X86_FPU 0x003f /* See GCC comments above */ +void _watcom_start_fast_math(unsigned short *x,unsigned short *mask); +#pragma aux _watcom_start_fast_math = \ + "fnstcw word ptr [eax]" \ + "fldcw word ptr [ecx]" \ + parm [eax] [ecx] \ + modify exact []; +void _watcom_end_fast_math(unsigned short *x); +#pragma aux _watcom_end_fast_math = \ + "fnclex" \ + "fldcw word ptr [eax]" \ + parm [eax] \ + modify exact []; +#if defined(NO_FAST_MATH) +#define START_FAST_MATH(x) \ +do { \ + static GLushort mask = DEFAULT_X86_FPU; \ + _watcom_start_fast_math(&x,&mask); \ +} while (0) +#else +#define START_FAST_MATH(x) \ +do { \ + static GLushort mask = FAST_X86_FPU; \ + _watcom_start_fast_math(&x,&mask); \ +} while (0) +#endif +#define END_FAST_MATH(x) _watcom_end_fast_math(&x) + +#elif defined(_MSC_VER) && defined(_M_IX86) +#define DEFAULT_X86_FPU 0x037f /* See GCC comments above */ +#define FAST_X86_FPU 0x003f /* See GCC comments above */ +#if defined(NO_FAST_MATH) +#define START_FAST_MATH(x) do {\ + static GLuint mask = DEFAULT_X86_FPU;\ + __asm fnstcw word ptr [x]\ + __asm fldcw word ptr [mask]\ +} while(0) +#else +#define START_FAST_MATH(x) do {\ + static GLuint mask = FAST_X86_FPU;\ + __asm fnstcw word ptr [x]\ + __asm fldcw word ptr [mask]\ +} while(0) +#endif +#define END_FAST_MATH(x) do {\ + __asm fnclex\ + __asm fldcw word ptr [x]\ +} while(0) + +#else +#define START_FAST_MATH(x) x = 0 +#define END_FAST_MATH(x) (void)(x) +#endif + + + +#define Elements(x) (sizeof(x)/sizeof(*(x))) + + + + +#ifdef __cplusplus +} +#endif + + +#endif /* COMPILER_H */ diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h index c3feffda98..fc31155b35 100644 --- a/src/mesa/main/config.h +++ b/src/mesa/main/config.h @@ -1,6 +1,6 @@ /* * Mesa 3-D graphics library - * Version: 7.3 + * Version: 7.5 * * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. * Copyright (C) 2008 VMware, Inc. All Rights Reserved. @@ -32,9 +32,6 @@ #define MESA_CONFIG_H_INCLUDED -#include "main/mfeatures.h" - - /** * \name OpenGL implementation limits */ @@ -71,7 +68,7 @@ #define MAX_PIXEL_MAP_TABLE 256 /** Maximum number of auxillary color buffers */ -#define MAX_AUX_BUFFERS 4 +#define MAX_AUX_BUFFERS 1 /** Maximum order (degree) of curves */ #ifdef AMIGA @@ -101,16 +98,16 @@ #define MAX_COLOR_TABLE_SIZE 256 /** Number of 1D/2D texture mipmap levels */ -#define MAX_TEXTURE_LEVELS 12 +#define MAX_TEXTURE_LEVELS 13 /** Number of 3D texture mipmap levels */ #define MAX_3D_TEXTURE_LEVELS 9 /** Number of cube texture mipmap levels - GL_ARB_texture_cube_map */ -#define MAX_CUBE_TEXTURE_LEVELS 12 +#define MAX_CUBE_TEXTURE_LEVELS 13 /** Maximum rectangular texture size - GL_NV_texture_rectangle */ -#define MAX_TEXTURE_RECT_SIZE 2048 +#define MAX_TEXTURE_RECT_SIZE 4096 /** Maximum number of layers in a 1D or 2D array texture - GL_MESA_texture_array */ #define MAX_ARRAY_TEXTURE_LAYERS 64 @@ -166,7 +163,7 @@ #define MAX_TEXTURE_MAX_ANISOTROPY 16.0 /** For GL_EXT_texture_lod_bias (typically MAX_TEXTURE_LEVELS - 1) */ -#define MAX_TEXTURE_LOD_BIAS 11.0 +#define MAX_TEXTURE_LOD_BIAS 12.0 /** For GL_ARB_vertex_program */ /*@{*/ @@ -189,7 +186,7 @@ #define MAX_PROGRAM_CALL_DEPTH 8 #define MAX_PROGRAM_TEMPS 128 #define MAX_PROGRAM_ADDRESS_REGS 2 -#define MAX_UNIFORMS 256 /**< number of vec4 uniforms */ +#define MAX_UNIFORMS 1024 /**< number of vec4 uniforms */ #define MAX_VARYING 8 /**< number of float[4] vectors */ #define MAX_SAMPLERS MAX_TEXTURE_IMAGE_UNITS #define MAX_PROGRAM_INPUTS 32 @@ -235,7 +232,8 @@ #define MAX_COLOR_ATTACHMENTS 8 /*@}*/ - +/** For GL_ATI_envmap_bump - support bump mapping on first 8 units */ +#define SUPPORTED_ATI_BUMP_UNITS 0xff /** * \name Mesa-specific parameters diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index c5b90d9cda..b24a3b4409 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -77,6 +77,7 @@ #include "glheader.h" +#include "mfeatures.h" #include "imports.h" #if FEATURE_accum #include "accum.h" @@ -93,6 +94,7 @@ #include "colortab.h" #endif #include "context.h" +#include "cpuinfo.h" #include "debug.h" #include "depth.h" #if FEATURE_dlist @@ -131,6 +133,7 @@ #include "rastpos.h" #endif #include "scissor.h" +#include "shared.h" #include "simple_list.h" #include "state.h" #include "stencil.h" @@ -141,6 +144,7 @@ #include "mtypes.h" #include "varray.h" #include "version.h" +#include "viewport.h" #include "vtxfmt.h" #include "glapi/glthread.h" #include "glapi/glapioffsets.h" @@ -175,7 +179,7 @@ GLfloat _mesa_ubyte_to_float_color_tab[256]; /** * Swap buffers notification callback. * - * \param gc GL context. + * \param ctx GL context. * * Called by window system just before swapping buffers. * We have to finish any pending rendering. @@ -183,6 +187,7 @@ GLfloat _mesa_ubyte_to_float_color_tab[256]; void _mesa_notifySwapBuffers(__GLcontext *ctx) { + FLUSH_VERTICES( ctx, 0 ); if (ctx->Driver.Flush) { ctx->Driver.Flush(ctx); } @@ -349,6 +354,36 @@ _mesa_destroy_visual( GLvisual *vis ) /**********************************************************************/ /*@{*/ + +/** + * This is lame. gdb only seems to recognize enum types that are + * actually used somewhere. We want to be able to print/use enum + * values such as TEXTURE_2D_INDEX in gdb. But we don't actually use + * the gl_texture_index type anywhere. Thus, this lame function. + */ +static void +dummy_enum_func(void) +{ + gl_buffer_index bi; + gl_colortable_index ci; + gl_face_index fi; + gl_frag_attrib fa; + gl_frag_result fr; + gl_texture_index ti; + gl_vert_attrib va; + gl_vert_result vr; + + (void) bi; + (void) ci; + (void) fi; + (void) fa; + (void) fr; + (void) ti; + (void) va; + (void) vr; +} + + /** * One-time initialization mutex lock. * @@ -382,15 +417,14 @@ one_time_init( GLcontext *ctx ) assert( sizeof(GLint) == 4 ); assert( sizeof(GLuint) == 4 ); + _mesa_get_cpu_features(); + _mesa_init_sqrt_table(); for (i = 0; i < 256; i++) { _mesa_ubyte_to_float_color_tab[i] = (float) i / 255.0F; } -#ifdef USE_SPARC_ASM - _mesa_init_sparc_glapi_relocs(); -#endif if (_mesa_getenv("MESA_DEBUG")) { _glapi_noop_enable_warnings(GL_TRUE); _glapi_set_warning_func( (_glapi_warning_func) _mesa_warning ); @@ -407,384 +441,8 @@ one_time_init( GLcontext *ctx ) alreadyCalled = GL_TRUE; } _glthread_UNLOCK_MUTEX(OneTimeLock); -} - - -/** - * Allocate and initialize a shared context state structure. - * Initializes the display list, texture objects and vertex programs hash - * tables, allocates the texture objects. If it runs out of memory, frees - * everything already allocated before returning NULL. - * - * \return pointer to a gl_shared_state structure on success, or NULL on - * failure. - */ -static GLboolean -alloc_shared_state( GLcontext *ctx ) -{ - struct gl_shared_state *ss = CALLOC_STRUCT(gl_shared_state); - if (!ss) - return GL_FALSE; - - ctx->Shared = ss; - - _glthread_INIT_MUTEX(ss->Mutex); - ss->DisplayList = _mesa_NewHashTable(); - ss->TexObjects = _mesa_NewHashTable(); - ss->Programs = _mesa_NewHashTable(); - -#if FEATURE_ARB_vertex_program - ss->DefaultVertexProgram = (struct gl_vertex_program *) - ctx->Driver.NewProgram(ctx, GL_VERTEX_PROGRAM_ARB, 0); - if (!ss->DefaultVertexProgram) - goto cleanup; -#endif -#if FEATURE_ARB_fragment_program - ss->DefaultFragmentProgram = (struct gl_fragment_program *) - ctx->Driver.NewProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, 0); - if (!ss->DefaultFragmentProgram) - goto cleanup; -#endif -#if FEATURE_ATI_fragment_shader - ss->ATIShaders = _mesa_NewHashTable(); - ss->DefaultFragmentShader = _mesa_new_ati_fragment_shader(ctx, 0); - if (!ss->DefaultFragmentShader) - goto cleanup; -#endif - -#if FEATURE_ARB_vertex_buffer_object || FEATURE_ARB_pixel_buffer_object - ss->BufferObjects = _mesa_NewHashTable(); -#endif - - ss->ArrayObjects = _mesa_NewHashTable(); - -#if FEATURE_ARB_shader_objects - ss->ShaderObjects = _mesa_NewHashTable(); -#endif - - ss->Default1D = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_1D); - if (!ss->Default1D) - goto cleanup; - - ss->Default2D = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_2D); - if (!ss->Default2D) - goto cleanup; - - ss->Default3D = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_3D); - if (!ss->Default3D) - goto cleanup; - - ss->DefaultCubeMap = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_CUBE_MAP_ARB); - if (!ss->DefaultCubeMap) - goto cleanup; - - ss->DefaultRect = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_RECTANGLE_NV); - if (!ss->DefaultRect) - goto cleanup; - - ss->Default1DArray = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_1D_ARRAY_EXT); - if (!ss->Default1DArray) - goto cleanup; - - ss->Default2DArray = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_2D_ARRAY_EXT); - if (!ss->Default2DArray) - goto cleanup; - - /* sanity check */ - assert(ss->Default1D->RefCount == 1); - - _glthread_INIT_MUTEX(ss->TexMutex); - ss->TextureStateStamp = 0; - -#if FEATURE_EXT_framebuffer_object - ss->FrameBuffers = _mesa_NewHashTable(); - if (!ss->FrameBuffers) - goto cleanup; - ss->RenderBuffers = _mesa_NewHashTable(); - if (!ss->RenderBuffers) - goto cleanup; -#endif - - return GL_TRUE; - -cleanup: - /* Ran out of memory at some point. Free everything and return NULL */ - if (ss->DisplayList) - _mesa_DeleteHashTable(ss->DisplayList); - if (ss->TexObjects) - _mesa_DeleteHashTable(ss->TexObjects); - if (ss->Programs) - _mesa_DeleteHashTable(ss->Programs); -#if FEATURE_ARB_vertex_program - _mesa_reference_vertprog(ctx, &ss->DefaultVertexProgram, NULL); -#endif -#if FEATURE_ARB_fragment_program - _mesa_reference_fragprog(ctx, &ss->DefaultFragmentProgram, NULL); -#endif -#if FEATURE_ATI_fragment_shader - if (ss->DefaultFragmentShader) - _mesa_delete_ati_fragment_shader(ctx, ss->DefaultFragmentShader); -#endif -#if FEATURE_ARB_vertex_buffer_object || FEATURE_ARB_pixel_buffer_object - if (ss->BufferObjects) - _mesa_DeleteHashTable(ss->BufferObjects); -#endif - - if (ss->ArrayObjects) - _mesa_DeleteHashTable (ss->ArrayObjects); - -#if FEATURE_ARB_shader_objects - if (ss->ShaderObjects) - _mesa_DeleteHashTable (ss->ShaderObjects); -#endif - -#if FEATURE_EXT_framebuffer_object - if (ss->FrameBuffers) - _mesa_DeleteHashTable(ss->FrameBuffers); - if (ss->RenderBuffers) - _mesa_DeleteHashTable(ss->RenderBuffers); -#endif - - if (ss->Default1D) - (*ctx->Driver.DeleteTexture)(ctx, ss->Default1D); - if (ss->Default2D) - (*ctx->Driver.DeleteTexture)(ctx, ss->Default2D); - if (ss->Default3D) - (*ctx->Driver.DeleteTexture)(ctx, ss->Default3D); - if (ss->DefaultCubeMap) - (*ctx->Driver.DeleteTexture)(ctx, ss->DefaultCubeMap); - if (ss->DefaultRect) - (*ctx->Driver.DeleteTexture)(ctx, ss->DefaultRect); - if (ss->Default1DArray) - (*ctx->Driver.DeleteTexture)(ctx, ss->Default1DArray); - if (ss->Default2DArray) - (*ctx->Driver.DeleteTexture)(ctx, ss->Default2DArray); - - _mesa_free(ss); - - return GL_FALSE; -} - - -/** - * Callback for deleting a display list. Called by _mesa_HashDeleteAll(). - */ -static void -delete_displaylist_cb(GLuint id, void *data, void *userData) -{ -#if FEATURE_dlist - struct gl_display_list *list = (struct gl_display_list *) data; - GLcontext *ctx = (GLcontext *) userData; - _mesa_delete_list(ctx, list); -#endif -} - -/** - * Callback for deleting a texture object. Called by _mesa_HashDeleteAll(). - */ -static void -delete_texture_cb(GLuint id, void *data, void *userData) -{ - struct gl_texture_object *texObj = (struct gl_texture_object *) data; - GLcontext *ctx = (GLcontext *) userData; - ctx->Driver.DeleteTexture(ctx, texObj); -} - -/** - * Callback for deleting a program object. Called by _mesa_HashDeleteAll(). - */ -static void -delete_program_cb(GLuint id, void *data, void *userData) -{ - struct gl_program *prog = (struct gl_program *) data; - GLcontext *ctx = (GLcontext *) userData; - ASSERT(prog->RefCount == 1); /* should only be referenced by hash table */ - prog->RefCount = 0; /* now going away */ - ctx->Driver.DeleteProgram(ctx, prog); -} - -#if FEATURE_ATI_fragment_shader -/** - * Callback for deleting an ATI fragment shader object. - * Called by _mesa_HashDeleteAll(). - */ -static void -delete_fragshader_cb(GLuint id, void *data, void *userData) -{ - struct ati_fragment_shader *shader = (struct ati_fragment_shader *) data; - GLcontext *ctx = (GLcontext *) userData; - _mesa_delete_ati_fragment_shader(ctx, shader); -} -#endif - -/** - * Callback for deleting a buffer object. Called by _mesa_HashDeleteAll(). - */ -static void -delete_bufferobj_cb(GLuint id, void *data, void *userData) -{ - struct gl_buffer_object *bufObj = (struct gl_buffer_object *) data; - GLcontext *ctx = (GLcontext *) userData; - ctx->Driver.DeleteBuffer(ctx, bufObj); -} - -/** - * Callback for deleting an array object. Called by _mesa_HashDeleteAll(). - */ -static void -delete_arrayobj_cb(GLuint id, void *data, void *userData) -{ - struct gl_array_object *arrayObj = (struct gl_array_object *) data; - GLcontext *ctx = (GLcontext *) userData; - _mesa_delete_array_object(ctx, arrayObj); -} - -/** - * Callback for freeing shader program data. Call it before delete_shader_cb - * to avoid memory access error. - */ -static void -free_shader_program_data_cb(GLuint id, void *data, void *userData) -{ - GLcontext *ctx = (GLcontext *) userData; - struct gl_shader_program *shProg = (struct gl_shader_program *) data; - - if (shProg->Type == GL_SHADER_PROGRAM_MESA) { - _mesa_free_shader_program_data(ctx, shProg); - } -} - -/** - * Callback for deleting shader and shader programs objects. - * Called by _mesa_HashDeleteAll(). - */ -static void -delete_shader_cb(GLuint id, void *data, void *userData) -{ - GLcontext *ctx = (GLcontext *) userData; - struct gl_shader *sh = (struct gl_shader *) data; - if (sh->Type == GL_FRAGMENT_SHADER || sh->Type == GL_VERTEX_SHADER) { - _mesa_free_shader(ctx, sh); - } - else { - struct gl_shader_program *shProg = (struct gl_shader_program *) data; - ASSERT(shProg->Type == GL_SHADER_PROGRAM_MESA); - _mesa_free_shader_program(ctx, shProg); - } -} - -/** - * Callback for deleting a framebuffer object. Called by _mesa_HashDeleteAll() - */ -static void -delete_framebuffer_cb(GLuint id, void *data, void *userData) -{ - struct gl_framebuffer *fb = (struct gl_framebuffer *) data; - /* The fact that the framebuffer is in the hashtable means its refcount - * is one, but we're removing from the hashtable now. So clear refcount. - */ - /*assert(fb->RefCount == 1);*/ - fb->RefCount = 0; - - /* NOTE: Delete should always be defined but there are two reports - * of it being NULL (bugs 13507, 14293). Work-around for now. - */ - if (fb->Delete) - fb->Delete(fb); -} - -/** - * Callback for deleting a renderbuffer object. Called by _mesa_HashDeleteAll() - */ -static void -delete_renderbuffer_cb(GLuint id, void *data, void *userData) -{ - struct gl_renderbuffer *rb = (struct gl_renderbuffer *) data; - rb->RefCount = 0; /* see comment for FBOs above */ - if (rb->Delete) - rb->Delete(rb); -} - - -/** - * Deallocate a shared state object and all children structures. - * - * \param ctx GL context. - * \param ss shared state pointer. - * - * Frees the display lists, the texture objects (calling the driver texture - * deletion callback to free its private data) and the vertex programs, as well - * as their hash tables. - * - * \sa alloc_shared_state(). - */ -static void -free_shared_state( GLcontext *ctx, struct gl_shared_state *ss ) -{ - /* - * Free display lists - */ - _mesa_HashDeleteAll(ss->DisplayList, delete_displaylist_cb, ctx); - _mesa_DeleteHashTable(ss->DisplayList); - -#if FEATURE_ARB_shader_objects - _mesa_HashWalk(ss->ShaderObjects, free_shader_program_data_cb, ctx); - _mesa_HashDeleteAll(ss->ShaderObjects, delete_shader_cb, ctx); - _mesa_DeleteHashTable(ss->ShaderObjects); -#endif - - _mesa_HashDeleteAll(ss->Programs, delete_program_cb, ctx); - _mesa_DeleteHashTable(ss->Programs); - -#if FEATURE_ARB_vertex_program - _mesa_reference_vertprog(ctx, &ss->DefaultVertexProgram, NULL); -#endif -#if FEATURE_ARB_fragment_program - _mesa_reference_fragprog(ctx, &ss->DefaultFragmentProgram, NULL); -#endif - -#if FEATURE_ATI_fragment_shader - _mesa_HashDeleteAll(ss->ATIShaders, delete_fragshader_cb, ctx); - _mesa_DeleteHashTable(ss->ATIShaders); - _mesa_delete_ati_fragment_shader(ctx, ss->DefaultFragmentShader); -#endif - -#if FEATURE_ARB_vertex_buffer_object || FEATURE_ARB_pixel_buffer_object - _mesa_HashDeleteAll(ss->BufferObjects, delete_bufferobj_cb, ctx); - _mesa_DeleteHashTable(ss->BufferObjects); -#endif - - _mesa_HashDeleteAll(ss->ArrayObjects, delete_arrayobj_cb, ctx); - _mesa_DeleteHashTable(ss->ArrayObjects); - -#if FEATURE_EXT_framebuffer_object - _mesa_HashDeleteAll(ss->FrameBuffers, delete_framebuffer_cb, ctx); - _mesa_DeleteHashTable(ss->FrameBuffers); - _mesa_HashDeleteAll(ss->RenderBuffers, delete_renderbuffer_cb, ctx); - _mesa_DeleteHashTable(ss->RenderBuffers); -#endif - - /* - * Free texture objects (after FBOs since some textures might have - * been bound to FBOs). - */ - ASSERT(ctx->Driver.DeleteTexture); - /* the default textures */ - ctx->Driver.DeleteTexture(ctx, ss->Default1D); - ctx->Driver.DeleteTexture(ctx, ss->Default2D); - ctx->Driver.DeleteTexture(ctx, ss->Default3D); - ctx->Driver.DeleteTexture(ctx, ss->DefaultCubeMap); - ctx->Driver.DeleteTexture(ctx, ss->DefaultRect); - ctx->Driver.DeleteTexture(ctx, ss->Default1DArray); - ctx->Driver.DeleteTexture(ctx, ss->Default2DArray); - /* all other textures */ - _mesa_HashDeleteAll(ss->TexObjects, delete_texture_cb, ctx); - _mesa_DeleteHashTable(ss->TexObjects); - - _glthread_DESTROY_MUTEX(ss->Mutex); - - _mesa_free(ss); + dummy_enum_func(); } @@ -863,6 +521,9 @@ _mesa_init_constants(GLcontext *ctx) assert(MAX_TEXTURE_LEVELS >= MAX_3D_TEXTURE_LEVELS); assert(MAX_TEXTURE_LEVELS >= MAX_CUBE_TEXTURE_LEVELS); + /* Max texture size should be <= max viewport size (render to texture) */ + assert((1 << (MAX_TEXTURE_LEVELS - 1)) <= MAX_WIDTH); + /* Constants, may be overriden (usually only reduced) by device drivers */ ctx->Const.MaxTextureLevels = MAX_TEXTURE_LEVELS; ctx->Const.Max3DTextureLevels = MAX_3D_TEXTURE_LEVELS; @@ -928,6 +589,9 @@ _mesa_init_constants(GLcontext *ctx) /* GL_ARB_framebuffer_object */ ctx->Const.MaxSamples = 0; + /* GL_ATI_envmap_bumpmap */ + ctx->Const.SupportedBumpUnits = SUPPORTED_ATI_BUMP_UNITS; + /* sanity checks */ ASSERT(ctx->Const.MaxTextureUnits == MIN2(ctx->Const.MaxTextureImageUnits, ctx->Const.MaxTextureCoordUnits)); @@ -959,13 +623,18 @@ check_context_limits(GLcontext *ctx) /* number of coord units cannot be greater than number of image units */ assert(ctx->Const.MaxTextureCoordUnits <= ctx->Const.MaxTextureImageUnits); - assert(ctx->Const.MaxViewportWidth <= MAX_WIDTH); - assert(ctx->Const.MaxViewportHeight <= MAX_WIDTH); + assert(ctx->Const.MaxTextureLevels <= MAX_TEXTURE_LEVELS); + assert(ctx->Const.Max3DTextureLevels <= MAX_3D_TEXTURE_LEVELS); + assert(ctx->Const.MaxCubeTextureLevels <= MAX_CUBE_TEXTURE_LEVELS); + assert(ctx->Const.MaxTextureRectSize <= MAX_TEXTURE_RECT_SIZE); /* make sure largest texture image is <= MAX_WIDTH in size */ - assert((1 << (ctx->Const.MaxTextureLevels -1 )) <= MAX_WIDTH); - assert((1 << (ctx->Const.MaxCubeTextureLevels -1 )) <= MAX_WIDTH); - assert((1 << (ctx->Const.Max3DTextureLevels -1 )) <= MAX_WIDTH); + assert((1 << (ctx->Const.MaxTextureLevels - 1)) <= MAX_WIDTH); + assert((1 << (ctx->Const.MaxCubeTextureLevels - 1)) <= MAX_WIDTH); + assert((1 << (ctx->Const.Max3DTextureLevels - 1)) <= MAX_WIDTH); + + assert(ctx->Const.MaxViewportWidth <= MAX_WIDTH); + assert(ctx->Const.MaxViewportHeight <= MAX_WIDTH); assert(ctx->Const.MaxDrawBuffers <= MAX_DRAW_BUFFERS); @@ -1159,6 +828,8 @@ _mesa_initialize_context(GLcontext *ctx, const struct dd_function_table *driverFunctions, void *driverContext) { + struct gl_shared_state *shared; + /*ASSERT(driverContext);*/ assert(driverFunctions->NewTextureObject); assert(driverFunctions->FreeTexImageData); @@ -1182,20 +853,22 @@ _mesa_initialize_context(GLcontext *ctx, if (share_list) { /* share state with another context */ - ctx->Shared = share_list->Shared; + shared = share_list->Shared; } else { /* allocate new, unshared state */ - if (!alloc_shared_state( ctx )) { + shared = _mesa_alloc_shared_state(ctx); + if (!shared) return GL_FALSE; - } } - _glthread_LOCK_MUTEX(ctx->Shared->Mutex); - ctx->Shared->RefCount++; - _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); + + _glthread_LOCK_MUTEX(shared->Mutex); + ctx->Shared = shared; + shared->RefCount++; + _glthread_UNLOCK_MUTEX(shared->Mutex); if (!init_attrib_groups( ctx )) { - free_shared_state(ctx, ctx->Shared); + _mesa_free_shared_state(ctx, ctx->Shared); return GL_FALSE; } @@ -1203,7 +876,7 @@ _mesa_initialize_context(GLcontext *ctx, ctx->Exec = alloc_dispatch_table(); ctx->Save = alloc_dispatch_table(); if (!ctx->Exec || !ctx->Save) { - free_shared_state(ctx, ctx->Shared); + _mesa_free_shared_state(ctx, ctx->Shared); if (ctx->Exec) _mesa_free(ctx->Exec); } @@ -1250,7 +923,7 @@ _mesa_initialize_context(GLcontext *ctx, * \param share_list another context to share display lists with or NULL * \param driverFunctions points to the dd_function_table into which the * driver has plugged in all its special functions. - * \param driverCtx points to the device driver's private context state + * \param driverContext points to the device driver's private context state * * \return pointer to a new __GLcontextRec or NULL if error. */ @@ -1290,6 +963,8 @@ _mesa_create_context(const GLvisual *visual, void _mesa_free_context_data( GLcontext *ctx ) { + GLint RefCount; + if (!_mesa_get_current_context()){ /* No current context, but we may need one in order to delete * texture objs, etc. So temporarily bind the context now. @@ -1341,12 +1016,12 @@ _mesa_free_context_data( GLcontext *ctx ) /* Shared context state (display lists, textures, etc) */ _glthread_LOCK_MUTEX(ctx->Shared->Mutex); - ctx->Shared->RefCount--; - assert(ctx->Shared->RefCount >= 0); + RefCount = --ctx->Shared->RefCount; _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex); - if (ctx->Shared->RefCount == 0) { + assert(RefCount >= 0); + if (RefCount == 0) { /* free shared state */ - free_shared_state( ctx, ctx->Shared ); + _mesa_free_shared_state( ctx, ctx->Shared ); } if (ctx->Extensions.String) @@ -1730,7 +1405,7 @@ _mesa_share_state(GLcontext *ctx, GLcontext *ctxToShare) oldSharedState->RefCount--; if (oldSharedState->RefCount == 0) { - free_shared_state(ctx, oldSharedState); + _mesa_free_shared_state(ctx, oldSharedState); } return GL_TRUE; diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h index 54f1af911d..ecc1cec779 100644 --- a/src/mesa/main/context.h +++ b/src/mesa/main/context.h @@ -49,11 +49,13 @@ #define CONTEXT_H -#include "glapi/glapi.h" #include "imports.h" #include "mtypes.h" +struct _glapi_table; + + /** \name Visual-related functions */ /*@{*/ diff --git a/src/mesa/main/cpuinfo.c b/src/mesa/main/cpuinfo.c new file mode 100644 index 0000000000..b4bfb40eb1 --- /dev/null +++ b/src/mesa/main/cpuinfo.c @@ -0,0 +1,109 @@ +/* + * Mesa 3-D graphics library + * Version: 7.5 + * + * 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. + */ + + +#include "main/imports.h" +#include "main/cpuinfo.h" + + +/** + * This function should be called before the various "cpu_has_foo" macros + * are used. + */ +void +_mesa_get_cpu_features(void) +{ +#ifdef USE_X86_ASM + _mesa_get_x86_features(); +#endif +} + + +/** + * Return a string describing the CPU architexture and extensions that + * Mesa is using (such as SSE or Altivec). + * \return information string, free it with _mesa_free() + */ +char * +_mesa_get_cpu_string(void) +{ +#define MAX_STRING 50 + char *buffer; + + buffer = (char *) _mesa_malloc(MAX_STRING); + if (!buffer) + return NULL; + + buffer[0] = 0; + +#ifdef USE_X86_ASM + + if (_mesa_x86_cpu_features) { + strcat(buffer, "x86"); + } + +# ifdef USE_MMX_ASM + if (cpu_has_mmx) { + strcat(buffer, (cpu_has_mmxext) ? "/MMX+" : "/MMX"); + } +# endif +# ifdef USE_3DNOW_ASM + if (cpu_has_3dnow) { + strcat(buffer, (cpu_has_3dnowext) ? "/3DNow!+" : "/3DNow!"); + } +# endif +# ifdef USE_SSE_ASM + if (cpu_has_xmm) { + strcat(buffer, (cpu_has_xmm2) ? "/SSE2" : "/SSE"); + } +# endif + +#elif defined(USE_SPARC_ASM) + + strcat(buffer, "SPARC"); + +#elif defined(USE_PPC_ASM) + + if (_mesa_ppc_cpu_features) { + strcat(buffer, (cpu_has_64) ? "PowerPC 64" : "PowerPC"); + } + +# ifdef USE_VMX_ASM + + if (cpu_has_vmx) { + strcat(buffer, "/Altivec"); + } + +# endif + + if (! cpu_has_fpu) { + strcat(buffer, "/No FPU"); + } + +#endif + + assert(_mesa_strlen(buffer) < MAX_STRING); + + return buffer; +} diff --git a/src/mesa/math/mathmod.h b/src/mesa/main/cpuinfo.h index fb0862b5b1..c41a90b075 100644 --- a/src/mesa/math/mathmod.h +++ b/src/mesa/main/cpuinfo.h @@ -1,9 +1,8 @@ - /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 7.5 * - * Copyright (C) 1999-2001 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"), @@ -24,16 +23,25 @@ */ -/** - * \mainpage Mesa Math Module - * - * This module contains math-related utility functions for transforming - * vertices, translating arrays of numbers from one data type to another, - * evaluating curved surfaces, etc. - */ +#ifndef CPUINFO_H +#define CPUINFO_H -#ifndef _MESA_MATH_H_ -#define _MESA_MATH_H_ +#if defined(USE_X86_ASM) +#include "x86/common_x86_asm.h" +#endif +#if defined(USE_PPC_ASM) +#include "ppc/common_ppc_features.h" #endif + + +extern void +_mesa_get_cpu_features(void); + + +extern char * +_mesa_get_cpu_string(void); + + +#endif /* CPUINFO_H */ diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index 411b6a7b21..d994401e55 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -36,6 +36,22 @@ struct gl_pixelstore_attrib; struct gl_display_list; +#if FEATURE_ARB_vertex_buffer_object +/* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return + * NULL) if buffer is unavailable for immediate mapping. + * + * Does GL_MAP_INVALIDATE_RANGE_BIT do this? It seems so, but it + * would require more book-keeping in the driver than seems necessary + * at this point. + * + * Does GL_MAP_INVALDIATE_BUFFER_BIT do this? Not really -- we don't + * want to provoke the driver to throw away the old storage, we will + * respect the contents of already referenced data. + */ +#define MESA_MAP_NOWAIT_BIT 0x0040 +#endif + + /** * Device driver function table. * Core Mesa uses these function pointers to call into device drivers. @@ -586,9 +602,6 @@ struct dd_function_table { /** Notify driver that a program string has been specified. */ void (*ProgramStringNotify)(GLcontext *ctx, GLenum target, struct gl_program *prog); - /** Get value of a program register during program execution. */ - void (*GetProgramRegister)(GLcontext *ctx, enum register_file file, - GLuint index, GLfloat val[4]); /** Query if program can be loaded onto hardware */ GLboolean (*IsProgramNative)(GLcontext *ctx, GLenum target, @@ -785,6 +798,16 @@ struct dd_function_table { void * (*MapBuffer)( GLcontext *ctx, GLenum target, GLenum access, struct gl_buffer_object *obj ); + /* May return NULL if MESA_MAP_NOWAIT_BIT is set in access: + */ + void * (*MapBufferRange)( GLcontext *ctx, GLenum target, + GLintptr offset, GLsizeiptr length, GLbitfield access, + struct gl_buffer_object *obj); + + void (*FlushMappedBufferRange) (GLcontext *ctx, GLenum target, + GLintptr offset, GLsizeiptr length, + struct gl_buffer_object *obj); + GLboolean (*UnmapBuffer)( GLcontext *ctx, GLenum target, struct gl_buffer_object *obj ); /*@}*/ @@ -954,6 +977,12 @@ struct dd_function_table { GLuint NeedFlush; GLuint SaveNeedFlush; + + /* Called prior to any of the GLvertexformat functions being + * called. Paired with Driver.FlushVertices(). + */ + void (*BeginVertices)( GLcontext *ctx ); + /** * If inside glBegin()/glEnd(), it should ASSERT(0). Otherwise, if * FLUSH_STORED_VERTICES bit in \p flags is set flushes any buffered diff --git a/src/mesa/main/debug.c b/src/mesa/main/debug.c index fcef093ac3..fdd10dd307 100644 --- a/src/mesa/main/debug.c +++ b/src/mesa/main/debug.c @@ -23,6 +23,7 @@ */ #include "mtypes.h" +#include "colormac.h" #include "context.h" #include "hash.h" #include "imports.h" @@ -274,6 +275,27 @@ write_texture_image(struct gl_texture_object *texObj) case MESA_FORMAT_ARGB8888: write_ppm(s, img->Data, img->Width, img->Height, 4, 2, 1, 0); break; + case MESA_FORMAT_RGB888: + write_ppm(s, img->Data, img->Width, img->Height, 3, 2, 1, 0); + break; + case MESA_FORMAT_RGB565: + { + GLubyte *buf2 = (GLubyte *) _mesa_malloc(img->Width * img->Height * 3); + GLint i; + for (i = 0; i < img->Width * img->Height; i++) { + GLint r, g, b; + GLushort s = ((GLushort *) img->Data)[i]; + r = UBYTE_TO_CHAN( ((s >> 8) & 0xf8) | ((s >> 13) & 0x7) ); + g = UBYTE_TO_CHAN( ((s >> 3) & 0xfc) | ((s >> 9) & 0x3) ); + b = UBYTE_TO_CHAN( ((s << 3) & 0xf8) | ((s >> 2) & 0x7) ); + buf2[i*3+1] = r; + buf2[i*3+2] = g; + buf2[i*3+3] = b; + } + write_ppm(s, buf2, img->Width, img->Height, 3, 2, 1, 0); + _mesa_free(buf2); + } + break; default: printf("XXXX unsupported mesa tex format %d in %s\n", img->TexFormat->MesaFormat, __FUNCTION__); diff --git a/src/mesa/main/dispatch.c b/src/mesa/main/dispatch.c index 34127cb248..bf1a013789 100644 --- a/src/mesa/main/dispatch.c +++ b/src/mesa/main/dispatch.c @@ -40,6 +40,7 @@ #ifndef GLX_USE_APPLEGL #include "main/glheader.h" +#include "main/compiler.h" #include "glapi/glapi.h" #include "glapi/glapitable.h" #include "glapi/glthread.h" diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index db1415bc06..8f7f703da9 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -33,6 +33,7 @@ #include "api_arrayelt.h" #include "api_loopback.h" #include "config.h" +#include "mfeatures.h" #include "attrib.h" #include "blend.h" #include "buffers.h" @@ -85,7 +86,6 @@ #endif #include "math/m_matrix.h" -#include "math/m_xform.h" #include "glapi/dispatch.h" @@ -320,6 +320,8 @@ typedef enum /* GL_ARB_draw_buffers */ OPCODE_DRAW_BUFFERS_ARB, /* GL_ATI_fragment_shader */ + OPCODE_TEX_BUMP_PARAMETER_ATI, + /* GL_ATI_fragment_shader */ OPCODE_BIND_FRAGMENT_SHADER_ATI, OPCODE_SET_FRAGMENT_SHADER_CONSTANTS_ATI, /* OpenGL 2.0 */ @@ -705,7 +707,7 @@ unpack_image(GLuint dimensions, GLsizei width, GLsizei height, GLsizei depth, /** * Allocate space for a display list instruction. * \param opcode the instruction opcode (OPCODE_* value) - * \param size instruction size in bytes, not counting opcode. + * \param bytes instruction size in bytes, not counting opcode. * \return pointer to the usable data area (not including the internal * opcode). */ @@ -4803,6 +4805,36 @@ save_DrawBuffersARB(GLsizei count, const GLenum * buffers) } } +static void GLAPIENTRY +save_TexBumpParameterfvATI(GLenum pname, const GLfloat *param) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + + n = ALLOC_INSTRUCTION(ctx, OPCODE_TEX_BUMP_PARAMETER_ATI, 5); + if (n) { + n[1].ui = pname; + n[2].f = param[0]; + n[3].f = param[1]; + n[4].f = param[2]; + n[5].f = param[3]; + } + if (ctx->ExecuteFlag) { + CALL_TexBumpParameterfvATI(ctx->Exec, (pname, param)); + } +} + +static void GLAPIENTRY +save_TexBumpParameterivATI(GLenum pname, const GLint *param) +{ + GLfloat p[4]; + p[0] = INT_TO_FLOAT(param[0]); + p[1] = INT_TO_FLOAT(param[1]); + p[2] = INT_TO_FLOAT(param[2]); + p[3] = INT_TO_FLOAT(param[3]); + save_TexBumpParameterfvATI(pname, p); +} + #if FEATURE_ATI_fragment_shader static void GLAPIENTRY save_BindFragmentShaderATI(GLuint id) @@ -6505,6 +6537,16 @@ execute_list(GLcontext *ctx, GLuint list) n[9].i, n[10].e)); break; #endif + case OPCODE_TEX_BUMP_PARAMETER_ATI: + { + GLfloat values[4]; + GLuint i, pname = n[1].ui; + + for (i = 0; i < 4; i++) + values[i] = n[1 + i].f; + CALL_TexBumpParameterfvATI(ctx->Exec, (pname, values)); + } + break; #if FEATURE_ATI_fragment_shader case OPCODE_BIND_FRAGMENT_SHADER_ATI: CALL_BindFragmentShaderATI(ctx->Exec, (n[1].i)); @@ -8043,6 +8085,10 @@ _mesa_init_dlist_table(struct _glapi_table *table) SET_VertexAttribPointerNV(table, _mesa_VertexAttribPointerNV); #endif + /* 244. GL_ATI_envmap_bumpmap */ + SET_TexBumpParameterivATI(table, save_TexBumpParameterivATI); + SET_TexBumpParameterfvATI(table, save_TexBumpParameterfvATI); + /* 245. GL_ATI_fragment_shader */ #if FEATURE_ATI_fragment_shader SET_BindFragmentShaderATI(table, save_BindFragmentShaderATI); diff --git a/src/mesa/main/dlopen.c b/src/mesa/main/dlopen.c index 8bc83c094f..414cfad8e2 100644 --- a/src/mesa/main/dlopen.c +++ b/src/mesa/main/dlopen.c @@ -28,13 +28,15 @@ */ -#include "glheader.h" -#include "imports.h" +#include "compiler.h" #include "dlopen.h" #if defined(_GNU_SOURCE) && !defined(__MINGW32__) #include <dlfcn.h> #endif +#if defined(_WIN32) +#include <windows.h> +#endif /** diff --git a/src/mesa/main/drawpix.c b/src/mesa/main/drawpix.c index 13cfa0e756..e9de0c097a 100644 --- a/src/mesa/main/drawpix.c +++ b/src/mesa/main/drawpix.c @@ -103,7 +103,7 @@ _mesa_DrawPixels( GLsizei width, GLsizei height, else if (ctx->RenderMode == GL_FEEDBACK) { /* Feedback the current raster pos info */ FLUSH_CURRENT( ctx, 0 ); - FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_DRAW_PIXEL_TOKEN ); + _mesa_feedback_token( ctx, (GLfloat) (GLint) GL_DRAW_PIXEL_TOKEN ); _mesa_feedback_vertex( ctx, ctx->Current.RasterPos, ctx->Current.RasterColor, @@ -166,7 +166,7 @@ _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height, } else if (ctx->RenderMode == GL_FEEDBACK) { FLUSH_CURRENT( ctx, 0 ); - FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_COPY_PIXEL_TOKEN ); + _mesa_feedback_token( ctx, (GLfloat) (GLint) GL_COPY_PIXEL_TOKEN ); _mesa_feedback_vertex( ctx, ctx->Current.RasterPos, ctx->Current.RasterColor, @@ -243,7 +243,7 @@ _mesa_Bitmap( GLsizei width, GLsizei height, #if _HAVE_FULL_GL else if (ctx->RenderMode == GL_FEEDBACK) { FLUSH_CURRENT(ctx, 0); - FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_BITMAP_TOKEN ); + _mesa_feedback_token( ctx, (GLfloat) (GLint) GL_BITMAP_TOKEN ); _mesa_feedback_vertex( ctx, ctx->Current.RasterPos, ctx->Current.RasterColor, @@ -311,7 +311,7 @@ _mesa_DrawDepthPixelsMESA( GLsizei width, GLsizei height, else if (ctx->RenderMode == GL_FEEDBACK) { /* Feedback the current raster pos info */ FLUSH_CURRENT( ctx, 0 ); - FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_DRAW_PIXEL_TOKEN ); + _mesa_feedback_token( ctx, (GLfloat) (GLint) GL_DRAW_PIXEL_TOKEN ); _mesa_feedback_vertex( ctx, ctx->Current.RasterPos, ctx->Current.RasterColor, diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c index 2b54fac694..f432be183c 100644 --- a/src/mesa/main/enable.c +++ b/src/mesa/main/enable.c @@ -37,7 +37,6 @@ #include "mtypes.h" #include "enums.h" #include "math/m_matrix.h" -#include "math/m_xform.h" #include "api_arrayelt.h" @@ -603,11 +602,6 @@ _mesa_set_enable(GLcontext *ctx, GLenum cap, GLboolean state) ctx->Texture.SharedPalette = state; break; case GL_STENCIL_TEST: - if (state && ctx->DrawBuffer->Visual.stencilBits == 0) { - _mesa_warning(ctx, - "glEnable(GL_STENCIL_TEST) but no stencil buffer"); - return; - } if (ctx->Stencil.Enabled == state) return; FLUSH_VERTICES(ctx, _NEW_STENCIL); @@ -950,18 +944,6 @@ _mesa_set_enable(GLcontext *ctx, GLenum cap, GLboolean state) ctx->Depth.BoundsTest = state; break; - /* GL_MESA_program_debug */ -#if FEATURE_MESA_program_debug - case GL_FRAGMENT_PROGRAM_CALLBACK_MESA: - CHECK_EXTENSION(MESA_program_debug, cap); - ctx->FragmentProgram.CallbackEnabled = state; - break; - case GL_VERTEX_PROGRAM_CALLBACK_MESA: - CHECK_EXTENSION(MESA_program_debug, cap); - ctx->VertexProgram.CallbackEnabled = state; - break; -#endif - #if FEATURE_ATI_fragment_shader case GL_FRAGMENT_SHADER_ATI: CHECK_EXTENSION(ATI_fragment_shader, cap); @@ -1404,16 +1386,6 @@ _mesa_IsEnabled( GLenum cap ) CHECK_EXTENSION(EXT_depth_bounds_test); return ctx->Depth.BoundsTest; - /* GL_MESA_program_debug */ -#if FEATURE_MESA_program_debug - case GL_FRAGMENT_PROGRAM_CALLBACK_MESA: - CHECK_EXTENSION(MESA_program_debug); - return ctx->FragmentProgram.CallbackEnabled; - case GL_VERTEX_PROGRAM_CALLBACK_MESA: - CHECK_EXTENSION(MESA_program_debug); - return ctx->VertexProgram.CallbackEnabled; -#endif - #if FEATURE_ATI_fragment_shader case GL_FRAGMENT_SHADER_ATI: CHECK_EXTENSION(ATI_fragment_shader); diff --git a/src/mesa/main/enums.c b/src/mesa/main/enums.c index a864f5a070..e63a04e915 100644 --- a/src/mesa/main/enums.c +++ b/src/mesa/main/enums.c @@ -26,6 +26,7 @@ */ #include "glheader.h" +#include "mfeatures.h" #include "enums.h" #include "imports.h" @@ -145,6 +146,12 @@ LONGSTRING static const char enum_string_table[] = "GL_BUFFER_SIZE_ARB\0" "GL_BUFFER_USAGE\0" "GL_BUFFER_USAGE_ARB\0" + "GL_BUMP_ENVMAP_ATI\0" + "GL_BUMP_NUM_TEX_UNITS_ATI\0" + "GL_BUMP_ROT_MATRIX_ATI\0" + "GL_BUMP_ROT_MATRIX_SIZE_ATI\0" + "GL_BUMP_TARGET_ATI\0" + "GL_BUMP_TEX_UNITS_ATI\0" "GL_BYTE\0" "GL_C3F_V3F\0" "GL_C4F_N3F_V3F\0" @@ -463,6 +470,8 @@ LONGSTRING static const char enum_string_table[] = "GL_DRAW_PIXEL_TOKEN\0" "GL_DST_ALPHA\0" "GL_DST_COLOR\0" + "GL_DU8DV8_ATI\0" + "GL_DUDV_ATI\0" "GL_DYNAMIC_COPY\0" "GL_DYNAMIC_COPY_ARB\0" "GL_DYNAMIC_DRAW\0" @@ -1847,7 +1856,7 @@ LONGSTRING static const char enum_string_table[] = "GL_ZOOM_Y\0" ; -static const enum_elt all_enums[1810] = +static const enum_elt all_enums[1818] = { { 0, 0x00000600 }, /* GL_2D */ { 6, 0x00001407 }, /* GL_2_BYTES */ @@ -1959,3022 +1968,3036 @@ static const enum_elt all_enums[1810] = { 1766, 0x00008764 }, /* GL_BUFFER_SIZE_ARB */ { 1785, 0x00008765 }, /* GL_BUFFER_USAGE */ { 1801, 0x00008765 }, /* GL_BUFFER_USAGE_ARB */ - { 1821, 0x00001400 }, /* GL_BYTE */ - { 1829, 0x00002A24 }, /* GL_C3F_V3F */ - { 1840, 0x00002A26 }, /* GL_C4F_N3F_V3F */ - { 1855, 0x00002A22 }, /* GL_C4UB_V2F */ - { 1867, 0x00002A23 }, /* GL_C4UB_V3F */ - { 1879, 0x00000901 }, /* GL_CCW */ - { 1886, 0x00002900 }, /* GL_CLAMP */ - { 1895, 0x0000812D }, /* GL_CLAMP_TO_BORDER */ - { 1914, 0x0000812D }, /* GL_CLAMP_TO_BORDER_ARB */ - { 1937, 0x0000812D }, /* GL_CLAMP_TO_BORDER_SGIS */ - { 1961, 0x0000812F }, /* GL_CLAMP_TO_EDGE */ - { 1978, 0x0000812F }, /* GL_CLAMP_TO_EDGE_SGIS */ - { 2000, 0x00001500 }, /* GL_CLEAR */ - { 2009, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE */ - { 2034, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE_ARB */ - { 2063, 0xFFFFFFFF }, /* GL_CLIENT_ALL_ATTRIB_BITS */ - { 2089, 0x00000BB1 }, /* GL_CLIENT_ATTRIB_STACK_DEPTH */ - { 2118, 0x00000001 }, /* GL_CLIENT_PIXEL_STORE_BIT */ - { 2144, 0x00000002 }, /* GL_CLIENT_VERTEX_ARRAY_BIT */ - { 2171, 0x00003000 }, /* GL_CLIP_PLANE0 */ - { 2186, 0x00003001 }, /* GL_CLIP_PLANE1 */ - { 2201, 0x00003002 }, /* GL_CLIP_PLANE2 */ - { 2216, 0x00003003 }, /* GL_CLIP_PLANE3 */ - { 2231, 0x00003004 }, /* GL_CLIP_PLANE4 */ - { 2246, 0x00003005 }, /* GL_CLIP_PLANE5 */ - { 2261, 0x000080F0 }, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */ - { 2294, 0x00000A00 }, /* GL_COEFF */ - { 2303, 0x00001800 }, /* GL_COLOR */ - { 2312, 0x00008076 }, /* GL_COLOR_ARRAY */ - { 2327, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING */ - { 2357, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING_ARB */ - { 2391, 0x00008090 }, /* GL_COLOR_ARRAY_POINTER */ - { 2414, 0x00008081 }, /* GL_COLOR_ARRAY_SIZE */ - { 2434, 0x00008083 }, /* GL_COLOR_ARRAY_STRIDE */ - { 2456, 0x00008082 }, /* GL_COLOR_ARRAY_TYPE */ - { 2476, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0 */ - { 2497, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0_EXT */ - { 2522, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1 */ - { 2543, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10 */ - { 2565, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10_EXT */ - { 2591, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11 */ - { 2613, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11_EXT */ - { 2639, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12 */ - { 2661, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12_EXT */ - { 2687, 0x00008CED }, /* GL_COLOR_ATTACHMENT13 */ - { 2709, 0x00008CED }, /* GL_COLOR_ATTACHMENT13_EXT */ - { 2735, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14 */ - { 2757, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14_EXT */ - { 2783, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15 */ - { 2805, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15_EXT */ - { 2831, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1_EXT */ - { 2856, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2 */ - { 2877, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2_EXT */ - { 2902, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3 */ - { 2923, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3_EXT */ - { 2948, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4 */ - { 2969, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4_EXT */ - { 2994, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5 */ - { 3015, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5_EXT */ - { 3040, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6 */ - { 3061, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6_EXT */ - { 3086, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7 */ - { 3107, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7_EXT */ - { 3132, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8 */ - { 3153, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8_EXT */ - { 3178, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9 */ - { 3199, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9_EXT */ - { 3224, 0x00004000 }, /* GL_COLOR_BUFFER_BIT */ - { 3244, 0x00000C22 }, /* GL_COLOR_CLEAR_VALUE */ - { 3265, 0x00001900 }, /* GL_COLOR_INDEX */ - { 3280, 0x00001603 }, /* GL_COLOR_INDEXES */ - { 3297, 0x00000BF2 }, /* GL_COLOR_LOGIC_OP */ - { 3315, 0x00000B57 }, /* GL_COLOR_MATERIAL */ - { 3333, 0x00000B55 }, /* GL_COLOR_MATERIAL_FACE */ - { 3356, 0x00000B56 }, /* GL_COLOR_MATERIAL_PARAMETER */ - { 3384, 0x000080B1 }, /* GL_COLOR_MATRIX */ - { 3400, 0x000080B1 }, /* GL_COLOR_MATRIX_SGI */ - { 3420, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH */ - { 3448, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH_SGI */ - { 3480, 0x00008458 }, /* GL_COLOR_SUM */ - { 3493, 0x00008458 }, /* GL_COLOR_SUM_ARB */ - { 3510, 0x000080D0 }, /* GL_COLOR_TABLE */ - { 3525, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE */ - { 3551, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_EXT */ - { 3581, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_SGI */ - { 3611, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS */ - { 3631, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS_SGI */ - { 3655, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE */ - { 3680, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_EXT */ - { 3709, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_SGI */ - { 3738, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT */ - { 3760, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_EXT */ - { 3786, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_SGI */ - { 3812, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE */ - { 3838, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_EXT */ - { 3868, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_SGI */ - { 3898, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE */ - { 3928, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_EXT */ - { 3962, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_SGI */ - { 3996, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE */ - { 4026, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_EXT */ - { 4060, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_SGI */ - { 4094, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE */ - { 4118, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_EXT */ - { 4146, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_SGI */ - { 4174, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE */ - { 4195, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE_SGI */ - { 4220, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH */ - { 4241, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_EXT */ - { 4266, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_SGI */ - { 4291, 0x00000C23 }, /* GL_COLOR_WRITEMASK */ - { 4310, 0x00008570 }, /* GL_COMBINE */ - { 4321, 0x00008503 }, /* GL_COMBINE4 */ - { 4333, 0x00008572 }, /* GL_COMBINE_ALPHA */ - { 4350, 0x00008572 }, /* GL_COMBINE_ALPHA_ARB */ - { 4371, 0x00008572 }, /* GL_COMBINE_ALPHA_EXT */ - { 4392, 0x00008570 }, /* GL_COMBINE_ARB */ - { 4407, 0x00008570 }, /* GL_COMBINE_EXT */ - { 4422, 0x00008571 }, /* GL_COMBINE_RGB */ - { 4437, 0x00008571 }, /* GL_COMBINE_RGB_ARB */ - { 4456, 0x00008571 }, /* GL_COMBINE_RGB_EXT */ - { 4475, 0x0000884E }, /* GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT */ - { 4511, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE */ - { 4535, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE_ARB */ - { 4563, 0x00001300 }, /* GL_COMPILE */ - { 4574, 0x00001301 }, /* GL_COMPILE_AND_EXECUTE */ - { 4597, 0x00008B81 }, /* GL_COMPILE_STATUS */ - { 4615, 0x000084E9 }, /* GL_COMPRESSED_ALPHA */ - { 4635, 0x000084E9 }, /* GL_COMPRESSED_ALPHA_ARB */ - { 4659, 0x000084EC }, /* GL_COMPRESSED_INTENSITY */ - { 4683, 0x000084EC }, /* GL_COMPRESSED_INTENSITY_ARB */ - { 4711, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE */ - { 4735, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA */ - { 4765, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA_ARB */ - { 4799, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE_ARB */ - { 4827, 0x000084ED }, /* GL_COMPRESSED_RGB */ - { 4845, 0x000084EE }, /* GL_COMPRESSED_RGBA */ - { 4864, 0x000084EE }, /* GL_COMPRESSED_RGBA_ARB */ - { 4887, 0x000086B1 }, /* GL_COMPRESSED_RGBA_FXT1_3DFX */ - { 4916, 0x000083F1 }, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */ - { 4949, 0x000083F2 }, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */ - { 4982, 0x000083F3 }, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */ - { 5015, 0x000084ED }, /* GL_COMPRESSED_RGB_ARB */ - { 5037, 0x000086B0 }, /* GL_COMPRESSED_RGB_FXT1_3DFX */ - { 5065, 0x000083F0 }, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */ - { 5097, 0x000086A3 }, /* GL_COMPRESSED_TEXTURE_FORMATS */ - { 5127, 0x00008576 }, /* GL_CONSTANT */ - { 5139, 0x00008003 }, /* GL_CONSTANT_ALPHA */ - { 5157, 0x00008003 }, /* GL_CONSTANT_ALPHA_EXT */ - { 5179, 0x00008576 }, /* GL_CONSTANT_ARB */ - { 5195, 0x00001207 }, /* GL_CONSTANT_ATTENUATION */ - { 5219, 0x00008151 }, /* GL_CONSTANT_BORDER_HP */ - { 5241, 0x00008001 }, /* GL_CONSTANT_COLOR */ - { 5259, 0x00008001 }, /* GL_CONSTANT_COLOR_EXT */ - { 5281, 0x00008576 }, /* GL_CONSTANT_EXT */ - { 5297, 0x00008010 }, /* GL_CONVOLUTION_1D */ - { 5315, 0x00008011 }, /* GL_CONVOLUTION_2D */ - { 5333, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR */ - { 5361, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR_HP */ - { 5392, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE */ - { 5419, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE_EXT */ - { 5450, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS */ - { 5477, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS_EXT */ - { 5508, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE */ - { 5536, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE_EXT */ - { 5568, 0x00008017 }, /* GL_CONVOLUTION_FORMAT */ - { 5590, 0x00008017 }, /* GL_CONVOLUTION_FORMAT_EXT */ - { 5616, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT */ - { 5638, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT_EXT */ - { 5664, 0x00008018 }, /* GL_CONVOLUTION_WIDTH */ - { 5685, 0x00008018 }, /* GL_CONVOLUTION_WIDTH_EXT */ - { 5710, 0x00008862 }, /* GL_COORD_REPLACE */ - { 5727, 0x00008862 }, /* GL_COORD_REPLACE_ARB */ - { 5748, 0x00008862 }, /* GL_COORD_REPLACE_NV */ - { 5768, 0x00001503 }, /* GL_COPY */ - { 5776, 0x0000150C }, /* GL_COPY_INVERTED */ - { 5793, 0x00000706 }, /* GL_COPY_PIXEL_TOKEN */ - { 5813, 0x00000B44 }, /* GL_CULL_FACE */ - { 5826, 0x00000B45 }, /* GL_CULL_FACE_MODE */ - { 5844, 0x000081AA }, /* GL_CULL_VERTEX_EXT */ - { 5863, 0x000081AC }, /* GL_CULL_VERTEX_EYE_POSITION_EXT */ - { 5895, 0x000081AB }, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */ - { 5930, 0x00008626 }, /* GL_CURRENT_ATTRIB_NV */ - { 5951, 0x00000001 }, /* GL_CURRENT_BIT */ - { 5966, 0x00000B00 }, /* GL_CURRENT_COLOR */ - { 5983, 0x00008453 }, /* GL_CURRENT_FOG_COORD */ - { 6004, 0x00008453 }, /* GL_CURRENT_FOG_COORDINATE */ - { 6030, 0x00000B01 }, /* GL_CURRENT_INDEX */ - { 6047, 0x00008641 }, /* GL_CURRENT_MATRIX_ARB */ - { 6069, 0x00008845 }, /* GL_CURRENT_MATRIX_INDEX_ARB */ - { 6097, 0x00008641 }, /* GL_CURRENT_MATRIX_NV */ - { 6118, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */ - { 6152, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */ - { 6185, 0x00000B02 }, /* GL_CURRENT_NORMAL */ - { 6203, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_ARB */ - { 6233, 0x00008B8D }, /* GL_CURRENT_PROGRAM */ - { 6252, 0x00008865 }, /* GL_CURRENT_QUERY */ - { 6269, 0x00008865 }, /* GL_CURRENT_QUERY_ARB */ - { 6290, 0x00000B04 }, /* GL_CURRENT_RASTER_COLOR */ - { 6314, 0x00000B09 }, /* GL_CURRENT_RASTER_DISTANCE */ - { 6341, 0x00000B05 }, /* GL_CURRENT_RASTER_INDEX */ - { 6365, 0x00000B07 }, /* GL_CURRENT_RASTER_POSITION */ - { 6392, 0x00000B08 }, /* GL_CURRENT_RASTER_POSITION_VALID */ - { 6425, 0x00000B06 }, /* GL_CURRENT_RASTER_TEXTURE_COORDS */ - { 6458, 0x00008459 }, /* GL_CURRENT_SECONDARY_COLOR */ - { 6485, 0x00000B03 }, /* GL_CURRENT_TEXTURE_COORDS */ - { 6511, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB */ - { 6536, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB_ARB */ - { 6565, 0x000086A8 }, /* GL_CURRENT_WEIGHT_ARB */ - { 6587, 0x00000900 }, /* GL_CW */ - { 6593, 0x0000875B }, /* GL_DEBUG_ASSERT_MESA */ - { 6614, 0x00008759 }, /* GL_DEBUG_OBJECT_MESA */ - { 6635, 0x0000875A }, /* GL_DEBUG_PRINT_MESA */ - { 6655, 0x00002101 }, /* GL_DECAL */ - { 6664, 0x00001E03 }, /* GL_DECR */ - { 6672, 0x00008508 }, /* GL_DECR_WRAP */ - { 6685, 0x00008508 }, /* GL_DECR_WRAP_EXT */ - { 6702, 0x00008B80 }, /* GL_DELETE_STATUS */ - { 6719, 0x00001801 }, /* GL_DEPTH */ - { 6728, 0x000088F0 }, /* GL_DEPTH24_STENCIL8 */ - { 6748, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT */ - { 6768, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_EXT */ - { 6792, 0x00000D1F }, /* GL_DEPTH_BIAS */ - { 6806, 0x00000D56 }, /* GL_DEPTH_BITS */ - { 6820, 0x00008891 }, /* GL_DEPTH_BOUNDS_EXT */ - { 6840, 0x00008890 }, /* GL_DEPTH_BOUNDS_TEST_EXT */ - { 6865, 0x00000100 }, /* GL_DEPTH_BUFFER_BIT */ - { 6885, 0x0000864F }, /* GL_DEPTH_CLAMP_NV */ - { 6903, 0x00000B73 }, /* GL_DEPTH_CLEAR_VALUE */ - { 6924, 0x00001902 }, /* GL_DEPTH_COMPONENT */ - { 6943, 0x000081A5 }, /* GL_DEPTH_COMPONENT16 */ - { 6964, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_ARB */ - { 6989, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_SGIX */ - { 7015, 0x000081A6 }, /* GL_DEPTH_COMPONENT24 */ - { 7036, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_ARB */ - { 7061, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_SGIX */ - { 7087, 0x000081A7 }, /* GL_DEPTH_COMPONENT32 */ - { 7108, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_ARB */ - { 7133, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_SGIX */ - { 7159, 0x00000B74 }, /* GL_DEPTH_FUNC */ - { 7173, 0x00000B70 }, /* GL_DEPTH_RANGE */ - { 7188, 0x00000D1E }, /* GL_DEPTH_SCALE */ - { 7203, 0x000084F9 }, /* GL_DEPTH_STENCIL */ - { 7220, 0x0000821A }, /* GL_DEPTH_STENCIL_ATTACHMENT */ - { 7248, 0x000084F9 }, /* GL_DEPTH_STENCIL_NV */ - { 7268, 0x0000886F }, /* GL_DEPTH_STENCIL_TO_BGRA_NV */ - { 7296, 0x0000886E }, /* GL_DEPTH_STENCIL_TO_RGBA_NV */ - { 7324, 0x00000B71 }, /* GL_DEPTH_TEST */ - { 7338, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE */ - { 7360, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE_ARB */ - { 7386, 0x00000B72 }, /* GL_DEPTH_WRITEMASK */ - { 7405, 0x00001201 }, /* GL_DIFFUSE */ - { 7416, 0x00000BD0 }, /* GL_DITHER */ - { 7426, 0x00000A02 }, /* GL_DOMAIN */ - { 7436, 0x00001100 }, /* GL_DONT_CARE */ - { 7449, 0x000086AE }, /* GL_DOT3_RGB */ - { 7461, 0x000086AF }, /* GL_DOT3_RGBA */ - { 7474, 0x000086AF }, /* GL_DOT3_RGBA_ARB */ - { 7491, 0x00008741 }, /* GL_DOT3_RGBA_EXT */ - { 7508, 0x000086AE }, /* GL_DOT3_RGB_ARB */ - { 7524, 0x00008740 }, /* GL_DOT3_RGB_EXT */ - { 7540, 0x0000140A }, /* GL_DOUBLE */ - { 7550, 0x00000C32 }, /* GL_DOUBLEBUFFER */ - { 7566, 0x00000C01 }, /* GL_DRAW_BUFFER */ - { 7581, 0x00008825 }, /* GL_DRAW_BUFFER0 */ - { 7597, 0x00008825 }, /* GL_DRAW_BUFFER0_ARB */ - { 7617, 0x00008825 }, /* GL_DRAW_BUFFER0_ATI */ - { 7637, 0x00008826 }, /* GL_DRAW_BUFFER1 */ - { 7653, 0x0000882F }, /* GL_DRAW_BUFFER10 */ - { 7670, 0x0000882F }, /* GL_DRAW_BUFFER10_ARB */ - { 7691, 0x0000882F }, /* GL_DRAW_BUFFER10_ATI */ - { 7712, 0x00008830 }, /* GL_DRAW_BUFFER11 */ - { 7729, 0x00008830 }, /* GL_DRAW_BUFFER11_ARB */ - { 7750, 0x00008830 }, /* GL_DRAW_BUFFER11_ATI */ - { 7771, 0x00008831 }, /* GL_DRAW_BUFFER12 */ - { 7788, 0x00008831 }, /* GL_DRAW_BUFFER12_ARB */ - { 7809, 0x00008831 }, /* GL_DRAW_BUFFER12_ATI */ - { 7830, 0x00008832 }, /* GL_DRAW_BUFFER13 */ - { 7847, 0x00008832 }, /* GL_DRAW_BUFFER13_ARB */ - { 7868, 0x00008832 }, /* GL_DRAW_BUFFER13_ATI */ - { 7889, 0x00008833 }, /* GL_DRAW_BUFFER14 */ - { 7906, 0x00008833 }, /* GL_DRAW_BUFFER14_ARB */ - { 7927, 0x00008833 }, /* GL_DRAW_BUFFER14_ATI */ - { 7948, 0x00008834 }, /* GL_DRAW_BUFFER15 */ - { 7965, 0x00008834 }, /* GL_DRAW_BUFFER15_ARB */ - { 7986, 0x00008834 }, /* GL_DRAW_BUFFER15_ATI */ - { 8007, 0x00008826 }, /* GL_DRAW_BUFFER1_ARB */ - { 8027, 0x00008826 }, /* GL_DRAW_BUFFER1_ATI */ - { 8047, 0x00008827 }, /* GL_DRAW_BUFFER2 */ - { 8063, 0x00008827 }, /* GL_DRAW_BUFFER2_ARB */ - { 8083, 0x00008827 }, /* GL_DRAW_BUFFER2_ATI */ - { 8103, 0x00008828 }, /* GL_DRAW_BUFFER3 */ - { 8119, 0x00008828 }, /* GL_DRAW_BUFFER3_ARB */ - { 8139, 0x00008828 }, /* GL_DRAW_BUFFER3_ATI */ - { 8159, 0x00008829 }, /* GL_DRAW_BUFFER4 */ - { 8175, 0x00008829 }, /* GL_DRAW_BUFFER4_ARB */ - { 8195, 0x00008829 }, /* GL_DRAW_BUFFER4_ATI */ - { 8215, 0x0000882A }, /* GL_DRAW_BUFFER5 */ - { 8231, 0x0000882A }, /* GL_DRAW_BUFFER5_ARB */ - { 8251, 0x0000882A }, /* GL_DRAW_BUFFER5_ATI */ - { 8271, 0x0000882B }, /* GL_DRAW_BUFFER6 */ - { 8287, 0x0000882B }, /* GL_DRAW_BUFFER6_ARB */ - { 8307, 0x0000882B }, /* GL_DRAW_BUFFER6_ATI */ - { 8327, 0x0000882C }, /* GL_DRAW_BUFFER7 */ - { 8343, 0x0000882C }, /* GL_DRAW_BUFFER7_ARB */ - { 8363, 0x0000882C }, /* GL_DRAW_BUFFER7_ATI */ - { 8383, 0x0000882D }, /* GL_DRAW_BUFFER8 */ - { 8399, 0x0000882D }, /* GL_DRAW_BUFFER8_ARB */ - { 8419, 0x0000882D }, /* GL_DRAW_BUFFER8_ATI */ - { 8439, 0x0000882E }, /* GL_DRAW_BUFFER9 */ - { 8455, 0x0000882E }, /* GL_DRAW_BUFFER9_ARB */ - { 8475, 0x0000882E }, /* GL_DRAW_BUFFER9_ATI */ - { 8495, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER */ - { 8515, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */ - { 8547, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER_EXT */ - { 8571, 0x00000705 }, /* GL_DRAW_PIXEL_TOKEN */ - { 8591, 0x00000304 }, /* GL_DST_ALPHA */ - { 8604, 0x00000306 }, /* GL_DST_COLOR */ - { 8617, 0x000088EA }, /* GL_DYNAMIC_COPY */ - { 8633, 0x000088EA }, /* GL_DYNAMIC_COPY_ARB */ - { 8653, 0x000088E8 }, /* GL_DYNAMIC_DRAW */ - { 8669, 0x000088E8 }, /* GL_DYNAMIC_DRAW_ARB */ - { 8689, 0x000088E9 }, /* GL_DYNAMIC_READ */ - { 8705, 0x000088E9 }, /* GL_DYNAMIC_READ_ARB */ - { 8725, 0x00000B43 }, /* GL_EDGE_FLAG */ - { 8738, 0x00008079 }, /* GL_EDGE_FLAG_ARRAY */ - { 8757, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */ - { 8791, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */ - { 8829, 0x00008093 }, /* GL_EDGE_FLAG_ARRAY_POINTER */ - { 8856, 0x0000808C }, /* GL_EDGE_FLAG_ARRAY_STRIDE */ - { 8882, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER */ - { 8906, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */ - { 8938, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */ - { 8974, 0x00001600 }, /* GL_EMISSION */ - { 8986, 0x00002000 }, /* GL_ENABLE_BIT */ - { 9000, 0x00000202 }, /* GL_EQUAL */ - { 9009, 0x00001509 }, /* GL_EQUIV */ - { 9018, 0x00010000 }, /* GL_EVAL_BIT */ - { 9030, 0x00000800 }, /* GL_EXP */ - { 9037, 0x00000801 }, /* GL_EXP2 */ - { 9045, 0x00001F03 }, /* GL_EXTENSIONS */ - { 9059, 0x00002400 }, /* GL_EYE_LINEAR */ - { 9073, 0x00002502 }, /* GL_EYE_PLANE */ - { 9086, 0x0000855C }, /* GL_EYE_PLANE_ABSOLUTE_NV */ - { 9111, 0x0000855B }, /* GL_EYE_RADIAL_NV */ - { 9128, 0x00000000 }, /* GL_FALSE */ - { 9137, 0x00001101 }, /* GL_FASTEST */ - { 9148, 0x00001C01 }, /* GL_FEEDBACK */ - { 9160, 0x00000DF0 }, /* GL_FEEDBACK_BUFFER_POINTER */ - { 9187, 0x00000DF1 }, /* GL_FEEDBACK_BUFFER_SIZE */ - { 9211, 0x00000DF2 }, /* GL_FEEDBACK_BUFFER_TYPE */ - { 9235, 0x00001B02 }, /* GL_FILL */ - { 9243, 0x00001D00 }, /* GL_FLAT */ - { 9251, 0x00001406 }, /* GL_FLOAT */ - { 9260, 0x00008B5A }, /* GL_FLOAT_MAT2 */ - { 9274, 0x00008B5A }, /* GL_FLOAT_MAT2_ARB */ - { 9292, 0x00008B5B }, /* GL_FLOAT_MAT3 */ - { 9306, 0x00008B5B }, /* GL_FLOAT_MAT3_ARB */ - { 9324, 0x00008B5C }, /* GL_FLOAT_MAT4 */ - { 9338, 0x00008B5C }, /* GL_FLOAT_MAT4_ARB */ - { 9356, 0x00008B50 }, /* GL_FLOAT_VEC2 */ - { 9370, 0x00008B50 }, /* GL_FLOAT_VEC2_ARB */ - { 9388, 0x00008B51 }, /* GL_FLOAT_VEC3 */ - { 9402, 0x00008B51 }, /* GL_FLOAT_VEC3_ARB */ - { 9420, 0x00008B52 }, /* GL_FLOAT_VEC4 */ - { 9434, 0x00008B52 }, /* GL_FLOAT_VEC4_ARB */ - { 9452, 0x00000B60 }, /* GL_FOG */ - { 9459, 0x00000080 }, /* GL_FOG_BIT */ - { 9470, 0x00000B66 }, /* GL_FOG_COLOR */ - { 9483, 0x00008451 }, /* GL_FOG_COORD */ - { 9496, 0x00008451 }, /* GL_FOG_COORDINATE */ - { 9514, 0x00008457 }, /* GL_FOG_COORDINATE_ARRAY */ - { 9538, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */ - { 9577, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */ - { 9620, 0x00008456 }, /* GL_FOG_COORDINATE_ARRAY_POINTER */ - { 9652, 0x00008455 }, /* GL_FOG_COORDINATE_ARRAY_STRIDE */ - { 9683, 0x00008454 }, /* GL_FOG_COORDINATE_ARRAY_TYPE */ - { 9712, 0x00008450 }, /* GL_FOG_COORDINATE_SOURCE */ - { 9737, 0x00008457 }, /* GL_FOG_COORD_ARRAY */ - { 9756, 0x0000889D }, /* GL_FOG_COORD_ARRAY_BUFFER_BINDING */ - { 9790, 0x00008456 }, /* GL_FOG_COORD_ARRAY_POINTER */ - { 9817, 0x00008455 }, /* GL_FOG_COORD_ARRAY_STRIDE */ - { 9843, 0x00008454 }, /* GL_FOG_COORD_ARRAY_TYPE */ - { 9867, 0x00008450 }, /* GL_FOG_COORD_SRC */ - { 9884, 0x00000B62 }, /* GL_FOG_DENSITY */ - { 9899, 0x0000855A }, /* GL_FOG_DISTANCE_MODE_NV */ - { 9923, 0x00000B64 }, /* GL_FOG_END */ - { 9934, 0x00000C54 }, /* GL_FOG_HINT */ - { 9946, 0x00000B61 }, /* GL_FOG_INDEX */ - { 9959, 0x00000B65 }, /* GL_FOG_MODE */ - { 9971, 0x00008198 }, /* GL_FOG_OFFSET_SGIX */ - { 9990, 0x00008199 }, /* GL_FOG_OFFSET_VALUE_SGIX */ - { 10015, 0x00000B63 }, /* GL_FOG_START */ - { 10028, 0x00008452 }, /* GL_FRAGMENT_DEPTH */ - { 10046, 0x00008804 }, /* GL_FRAGMENT_PROGRAM_ARB */ - { 10070, 0x00008B30 }, /* GL_FRAGMENT_SHADER */ - { 10089, 0x00008B30 }, /* GL_FRAGMENT_SHADER_ARB */ - { 10112, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */ - { 10147, 0x00008D40 }, /* GL_FRAMEBUFFER */ - { 10162, 0x00008215 }, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ - { 10199, 0x00008214 }, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ - { 10235, 0x00008210 }, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ - { 10276, 0x00008211 }, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ - { 10317, 0x00008216 }, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ - { 10354, 0x00008213 }, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ - { 10391, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ - { 10429, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */ - { 10471, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ - { 10509, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */ - { 10551, 0x00008212 }, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ - { 10586, 0x00008217 }, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ - { 10625, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */ - { 10674, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ - { 10722, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */ - { 10774, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ - { 10814, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ - { 10858, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ - { 10898, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */ - { 10942, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_EXT */ - { 10969, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE */ - { 10993, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_EXT */ - { 11021, 0x00008218 }, /* GL_FRAMEBUFFER_DEFAULT */ - { 11044, 0x00008D40 }, /* GL_FRAMEBUFFER_EXT */ - { 11063, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ - { 11100, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */ - { 11141, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */ - { 11182, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */ - { 11224, 0x00008CD8 }, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */ - { 11275, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */ - { 11313, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ - { 11358, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */ - { 11407, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ - { 11445, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */ - { 11487, 0x00008CDE }, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */ - { 11519, 0x00008219 }, /* GL_FRAMEBUFFER_UNDEFINED */ - { 11544, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED */ - { 11571, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */ - { 11602, 0x00000404 }, /* GL_FRONT */ - { 11611, 0x00000408 }, /* GL_FRONT_AND_BACK */ - { 11629, 0x00000B46 }, /* GL_FRONT_FACE */ - { 11643, 0x00000400 }, /* GL_FRONT_LEFT */ - { 11657, 0x00000401 }, /* GL_FRONT_RIGHT */ - { 11672, 0x00008006 }, /* GL_FUNC_ADD */ - { 11684, 0x00008006 }, /* GL_FUNC_ADD_EXT */ - { 11700, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT */ - { 11725, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_EXT */ - { 11754, 0x0000800A }, /* GL_FUNC_SUBTRACT */ - { 11771, 0x0000800A }, /* GL_FUNC_SUBTRACT_EXT */ - { 11792, 0x00008191 }, /* GL_GENERATE_MIPMAP */ - { 11811, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT */ - { 11835, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT_SGIS */ - { 11864, 0x00008191 }, /* GL_GENERATE_MIPMAP_SGIS */ - { 11888, 0x00000206 }, /* GL_GEQUAL */ - { 11898, 0x00008009 }, /* GL_GL_BLEND_EQUATION_RGB */ - { 11923, 0x00008C4A }, /* GL_GL_COMPRESSED_SLUMINANCE */ - { 11951, 0x00008C4B }, /* GL_GL_COMPRESSED_SLUMINANCE_ALPHA */ - { 11985, 0x00008C48 }, /* GL_GL_COMPRESSED_SRGB */ - { 12007, 0x00008C49 }, /* GL_GL_COMPRESSED_SRGB_ALPHA */ - { 12035, 0x0000845F }, /* GL_GL_CURRENT_RASTER_SECONDARY_COLOR */ - { 12072, 0x00008B65 }, /* GL_GL_FLOAT_MAT2x3 */ - { 12091, 0x00008B66 }, /* GL_GL_FLOAT_MAT2x4 */ - { 12110, 0x00008B67 }, /* GL_GL_FLOAT_MAT3x2 */ - { 12129, 0x00008B68 }, /* GL_GL_FLOAT_MAT3x4 */ - { 12148, 0x00008B69 }, /* GL_GL_FLOAT_MAT4x2 */ - { 12167, 0x00008B6A }, /* GL_GL_FLOAT_MAT4x3 */ - { 12186, 0x000088EB }, /* GL_GL_PIXEL_PACK_BUFFER */ - { 12210, 0x000088ED }, /* GL_GL_PIXEL_PACK_BUFFER_BINDING */ - { 12242, 0x000088EC }, /* GL_GL_PIXEL_UNPACK_BUFFER */ - { 12268, 0x000088EF }, /* GL_GL_PIXEL_UNPACK_BUFFER_BINDING */ - { 12302, 0x00008C46 }, /* GL_GL_SLUMINANCE */ - { 12319, 0x00008C47 }, /* GL_GL_SLUMINANCE8 */ - { 12337, 0x00008C45 }, /* GL_GL_SLUMINANCE8_ALPHA8 */ - { 12362, 0x00008C44 }, /* GL_GL_SLUMINANCE_ALPHA */ - { 12385, 0x00008C40 }, /* GL_GL_SRGB */ - { 12396, 0x00008C41 }, /* GL_GL_SRGB8 */ - { 12408, 0x00008C43 }, /* GL_GL_SRGB8_ALPHA8 */ - { 12427, 0x00008C42 }, /* GL_GL_SRGB_ALPHA */ - { 12444, 0x00000204 }, /* GL_GREATER */ - { 12455, 0x00001904 }, /* GL_GREEN */ - { 12464, 0x00000D19 }, /* GL_GREEN_BIAS */ - { 12478, 0x00000D53 }, /* GL_GREEN_BITS */ - { 12492, 0x00000D18 }, /* GL_GREEN_SCALE */ - { 12507, 0x00008000 }, /* GL_HINT_BIT */ - { 12519, 0x00008024 }, /* GL_HISTOGRAM */ - { 12532, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE */ - { 12556, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE_EXT */ - { 12584, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE */ - { 12607, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE_EXT */ - { 12634, 0x00008024 }, /* GL_HISTOGRAM_EXT */ - { 12651, 0x00008027 }, /* GL_HISTOGRAM_FORMAT */ - { 12671, 0x00008027 }, /* GL_HISTOGRAM_FORMAT_EXT */ - { 12695, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE */ - { 12719, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE_EXT */ - { 12747, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE */ - { 12775, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */ - { 12807, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE */ - { 12829, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE_EXT */ - { 12855, 0x0000802D }, /* GL_HISTOGRAM_SINK */ - { 12873, 0x0000802D }, /* GL_HISTOGRAM_SINK_EXT */ - { 12895, 0x00008026 }, /* GL_HISTOGRAM_WIDTH */ - { 12914, 0x00008026 }, /* GL_HISTOGRAM_WIDTH_EXT */ - { 12937, 0x0000862A }, /* GL_IDENTITY_NV */ - { 12952, 0x00008150 }, /* GL_IGNORE_BORDER_HP */ - { 12972, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */ - { 13012, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */ - { 13050, 0x00001E02 }, /* GL_INCR */ - { 13058, 0x00008507 }, /* GL_INCR_WRAP */ - { 13071, 0x00008507 }, /* GL_INCR_WRAP_EXT */ - { 13088, 0x00008222 }, /* GL_INDEX */ - { 13097, 0x00008077 }, /* GL_INDEX_ARRAY */ - { 13112, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING */ - { 13142, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */ - { 13176, 0x00008091 }, /* GL_INDEX_ARRAY_POINTER */ - { 13199, 0x00008086 }, /* GL_INDEX_ARRAY_STRIDE */ - { 13221, 0x00008085 }, /* GL_INDEX_ARRAY_TYPE */ - { 13241, 0x00000D51 }, /* GL_INDEX_BITS */ - { 13255, 0x00000C20 }, /* GL_INDEX_CLEAR_VALUE */ - { 13276, 0x00000BF1 }, /* GL_INDEX_LOGIC_OP */ - { 13294, 0x00000C30 }, /* GL_INDEX_MODE */ - { 13308, 0x00000D13 }, /* GL_INDEX_OFFSET */ - { 13324, 0x00000D12 }, /* GL_INDEX_SHIFT */ - { 13339, 0x00000C21 }, /* GL_INDEX_WRITEMASK */ - { 13358, 0x00008B84 }, /* GL_INFO_LOG_LENGTH */ - { 13377, 0x00001404 }, /* GL_INT */ - { 13384, 0x00008049 }, /* GL_INTENSITY */ - { 13397, 0x0000804C }, /* GL_INTENSITY12 */ - { 13412, 0x0000804C }, /* GL_INTENSITY12_EXT */ - { 13431, 0x0000804D }, /* GL_INTENSITY16 */ - { 13446, 0x0000804D }, /* GL_INTENSITY16_EXT */ - { 13465, 0x0000804A }, /* GL_INTENSITY4 */ - { 13479, 0x0000804A }, /* GL_INTENSITY4_EXT */ - { 13497, 0x0000804B }, /* GL_INTENSITY8 */ - { 13511, 0x0000804B }, /* GL_INTENSITY8_EXT */ - { 13529, 0x00008049 }, /* GL_INTENSITY_EXT */ - { 13546, 0x00008575 }, /* GL_INTERPOLATE */ - { 13561, 0x00008575 }, /* GL_INTERPOLATE_ARB */ - { 13580, 0x00008575 }, /* GL_INTERPOLATE_EXT */ - { 13599, 0x00008B53 }, /* GL_INT_VEC2 */ - { 13611, 0x00008B53 }, /* GL_INT_VEC2_ARB */ - { 13627, 0x00008B54 }, /* GL_INT_VEC3 */ - { 13639, 0x00008B54 }, /* GL_INT_VEC3_ARB */ - { 13655, 0x00008B55 }, /* GL_INT_VEC4 */ - { 13667, 0x00008B55 }, /* GL_INT_VEC4_ARB */ - { 13683, 0x00000500 }, /* GL_INVALID_ENUM */ - { 13699, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION */ - { 13732, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */ - { 13769, 0x00000502 }, /* GL_INVALID_OPERATION */ - { 13790, 0x00000501 }, /* GL_INVALID_VALUE */ - { 13807, 0x0000862B }, /* GL_INVERSE_NV */ - { 13821, 0x0000862D }, /* GL_INVERSE_TRANSPOSE_NV */ - { 13845, 0x0000150A }, /* GL_INVERT */ - { 13855, 0x00001E00 }, /* GL_KEEP */ - { 13863, 0x00000406 }, /* GL_LEFT */ - { 13871, 0x00000203 }, /* GL_LEQUAL */ - { 13881, 0x00000201 }, /* GL_LESS */ - { 13889, 0x00004000 }, /* GL_LIGHT0 */ - { 13899, 0x00004001 }, /* GL_LIGHT1 */ - { 13909, 0x00004002 }, /* GL_LIGHT2 */ - { 13919, 0x00004003 }, /* GL_LIGHT3 */ - { 13929, 0x00004004 }, /* GL_LIGHT4 */ - { 13939, 0x00004005 }, /* GL_LIGHT5 */ - { 13949, 0x00004006 }, /* GL_LIGHT6 */ - { 13959, 0x00004007 }, /* GL_LIGHT7 */ - { 13969, 0x00000B50 }, /* GL_LIGHTING */ - { 13981, 0x00000040 }, /* GL_LIGHTING_BIT */ - { 13997, 0x00000B53 }, /* GL_LIGHT_MODEL_AMBIENT */ - { 14020, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL */ - { 14049, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */ - { 14082, 0x00000B51 }, /* GL_LIGHT_MODEL_LOCAL_VIEWER */ - { 14110, 0x00000B52 }, /* GL_LIGHT_MODEL_TWO_SIDE */ - { 14134, 0x00001B01 }, /* GL_LINE */ - { 14142, 0x00002601 }, /* GL_LINEAR */ - { 14152, 0x00001208 }, /* GL_LINEAR_ATTENUATION */ - { 14174, 0x00008170 }, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */ - { 14204, 0x0000844F }, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */ - { 14235, 0x00002703 }, /* GL_LINEAR_MIPMAP_LINEAR */ - { 14259, 0x00002701 }, /* GL_LINEAR_MIPMAP_NEAREST */ - { 14284, 0x00000001 }, /* GL_LINES */ - { 14293, 0x00000004 }, /* GL_LINE_BIT */ - { 14305, 0x00000002 }, /* GL_LINE_LOOP */ - { 14318, 0x00000707 }, /* GL_LINE_RESET_TOKEN */ - { 14338, 0x00000B20 }, /* GL_LINE_SMOOTH */ - { 14353, 0x00000C52 }, /* GL_LINE_SMOOTH_HINT */ - { 14373, 0x00000B24 }, /* GL_LINE_STIPPLE */ - { 14389, 0x00000B25 }, /* GL_LINE_STIPPLE_PATTERN */ - { 14413, 0x00000B26 }, /* GL_LINE_STIPPLE_REPEAT */ - { 14436, 0x00000003 }, /* GL_LINE_STRIP */ - { 14450, 0x00000702 }, /* GL_LINE_TOKEN */ - { 14464, 0x00000B21 }, /* GL_LINE_WIDTH */ - { 14478, 0x00000B23 }, /* GL_LINE_WIDTH_GRANULARITY */ - { 14504, 0x00000B22 }, /* GL_LINE_WIDTH_RANGE */ - { 14524, 0x00008B82 }, /* GL_LINK_STATUS */ - { 14539, 0x00000B32 }, /* GL_LIST_BASE */ - { 14552, 0x00020000 }, /* GL_LIST_BIT */ - { 14564, 0x00000B33 }, /* GL_LIST_INDEX */ - { 14578, 0x00000B30 }, /* GL_LIST_MODE */ - { 14591, 0x00000101 }, /* GL_LOAD */ - { 14599, 0x00000BF1 }, /* GL_LOGIC_OP */ - { 14611, 0x00000BF0 }, /* GL_LOGIC_OP_MODE */ - { 14628, 0x00008CA1 }, /* GL_LOWER_LEFT */ - { 14642, 0x00001909 }, /* GL_LUMINANCE */ - { 14655, 0x00008041 }, /* GL_LUMINANCE12 */ - { 14670, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12 */ - { 14693, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12_EXT */ - { 14720, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4 */ - { 14742, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4_EXT */ - { 14768, 0x00008041 }, /* GL_LUMINANCE12_EXT */ - { 14787, 0x00008042 }, /* GL_LUMINANCE16 */ - { 14802, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16 */ - { 14825, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16_EXT */ - { 14852, 0x00008042 }, /* GL_LUMINANCE16_EXT */ - { 14871, 0x0000803F }, /* GL_LUMINANCE4 */ - { 14885, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4 */ - { 14906, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4_EXT */ - { 14931, 0x0000803F }, /* GL_LUMINANCE4_EXT */ - { 14949, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2 */ - { 14970, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2_EXT */ - { 14995, 0x00008040 }, /* GL_LUMINANCE8 */ - { 15009, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8 */ - { 15030, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8_EXT */ - { 15055, 0x00008040 }, /* GL_LUMINANCE8_EXT */ - { 15073, 0x0000190A }, /* GL_LUMINANCE_ALPHA */ - { 15092, 0x00000D90 }, /* GL_MAP1_COLOR_4 */ - { 15108, 0x00000DD0 }, /* GL_MAP1_GRID_DOMAIN */ - { 15128, 0x00000DD1 }, /* GL_MAP1_GRID_SEGMENTS */ - { 15150, 0x00000D91 }, /* GL_MAP1_INDEX */ - { 15164, 0x00000D92 }, /* GL_MAP1_NORMAL */ - { 15179, 0x00000D93 }, /* GL_MAP1_TEXTURE_COORD_1 */ - { 15203, 0x00000D94 }, /* GL_MAP1_TEXTURE_COORD_2 */ - { 15227, 0x00000D95 }, /* GL_MAP1_TEXTURE_COORD_3 */ - { 15251, 0x00000D96 }, /* GL_MAP1_TEXTURE_COORD_4 */ - { 15275, 0x00000D97 }, /* GL_MAP1_VERTEX_3 */ - { 15292, 0x00000D98 }, /* GL_MAP1_VERTEX_4 */ - { 15309, 0x00008660 }, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */ - { 15337, 0x0000866A }, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */ - { 15366, 0x0000866B }, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */ - { 15395, 0x0000866C }, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */ - { 15424, 0x0000866D }, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */ - { 15453, 0x0000866E }, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */ - { 15482, 0x0000866F }, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */ - { 15511, 0x00008661 }, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */ - { 15539, 0x00008662 }, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */ - { 15567, 0x00008663 }, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */ - { 15595, 0x00008664 }, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */ - { 15623, 0x00008665 }, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */ - { 15651, 0x00008666 }, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */ - { 15679, 0x00008667 }, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */ - { 15707, 0x00008668 }, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */ - { 15735, 0x00008669 }, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */ - { 15763, 0x00000DB0 }, /* GL_MAP2_COLOR_4 */ - { 15779, 0x00000DD2 }, /* GL_MAP2_GRID_DOMAIN */ - { 15799, 0x00000DD3 }, /* GL_MAP2_GRID_SEGMENTS */ - { 15821, 0x00000DB1 }, /* GL_MAP2_INDEX */ - { 15835, 0x00000DB2 }, /* GL_MAP2_NORMAL */ - { 15850, 0x00000DB3 }, /* GL_MAP2_TEXTURE_COORD_1 */ - { 15874, 0x00000DB4 }, /* GL_MAP2_TEXTURE_COORD_2 */ - { 15898, 0x00000DB5 }, /* GL_MAP2_TEXTURE_COORD_3 */ - { 15922, 0x00000DB6 }, /* GL_MAP2_TEXTURE_COORD_4 */ - { 15946, 0x00000DB7 }, /* GL_MAP2_VERTEX_3 */ - { 15963, 0x00000DB8 }, /* GL_MAP2_VERTEX_4 */ - { 15980, 0x00008670 }, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */ - { 16008, 0x0000867A }, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */ - { 16037, 0x0000867B }, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */ - { 16066, 0x0000867C }, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */ - { 16095, 0x0000867D }, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */ - { 16124, 0x0000867E }, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */ - { 16153, 0x0000867F }, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */ - { 16182, 0x00008671 }, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */ - { 16210, 0x00008672 }, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */ - { 16238, 0x00008673 }, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */ - { 16266, 0x00008674 }, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */ - { 16294, 0x00008675 }, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */ - { 16322, 0x00008676 }, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */ - { 16350, 0x00008677 }, /* GL_MAP2_VERTEX_ATTRIB7_4_NV */ - { 16378, 0x00008678 }, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */ - { 16406, 0x00008679 }, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */ - { 16434, 0x00000D10 }, /* GL_MAP_COLOR */ - { 16447, 0x00000D11 }, /* GL_MAP_STENCIL */ - { 16462, 0x000088C0 }, /* GL_MATRIX0_ARB */ - { 16477, 0x00008630 }, /* GL_MATRIX0_NV */ - { 16491, 0x000088CA }, /* GL_MATRIX10_ARB */ - { 16507, 0x000088CB }, /* GL_MATRIX11_ARB */ - { 16523, 0x000088CC }, /* GL_MATRIX12_ARB */ - { 16539, 0x000088CD }, /* GL_MATRIX13_ARB */ - { 16555, 0x000088CE }, /* GL_MATRIX14_ARB */ - { 16571, 0x000088CF }, /* GL_MATRIX15_ARB */ - { 16587, 0x000088D0 }, /* GL_MATRIX16_ARB */ - { 16603, 0x000088D1 }, /* GL_MATRIX17_ARB */ - { 16619, 0x000088D2 }, /* GL_MATRIX18_ARB */ - { 16635, 0x000088D3 }, /* GL_MATRIX19_ARB */ - { 16651, 0x000088C1 }, /* GL_MATRIX1_ARB */ - { 16666, 0x00008631 }, /* GL_MATRIX1_NV */ - { 16680, 0x000088D4 }, /* GL_MATRIX20_ARB */ - { 16696, 0x000088D5 }, /* GL_MATRIX21_ARB */ - { 16712, 0x000088D6 }, /* GL_MATRIX22_ARB */ - { 16728, 0x000088D7 }, /* GL_MATRIX23_ARB */ - { 16744, 0x000088D8 }, /* GL_MATRIX24_ARB */ - { 16760, 0x000088D9 }, /* GL_MATRIX25_ARB */ - { 16776, 0x000088DA }, /* GL_MATRIX26_ARB */ - { 16792, 0x000088DB }, /* GL_MATRIX27_ARB */ - { 16808, 0x000088DC }, /* GL_MATRIX28_ARB */ - { 16824, 0x000088DD }, /* GL_MATRIX29_ARB */ - { 16840, 0x000088C2 }, /* GL_MATRIX2_ARB */ - { 16855, 0x00008632 }, /* GL_MATRIX2_NV */ - { 16869, 0x000088DE }, /* GL_MATRIX30_ARB */ - { 16885, 0x000088DF }, /* GL_MATRIX31_ARB */ - { 16901, 0x000088C3 }, /* GL_MATRIX3_ARB */ - { 16916, 0x00008633 }, /* GL_MATRIX3_NV */ - { 16930, 0x000088C4 }, /* GL_MATRIX4_ARB */ - { 16945, 0x00008634 }, /* GL_MATRIX4_NV */ - { 16959, 0x000088C5 }, /* GL_MATRIX5_ARB */ - { 16974, 0x00008635 }, /* GL_MATRIX5_NV */ - { 16988, 0x000088C6 }, /* GL_MATRIX6_ARB */ - { 17003, 0x00008636 }, /* GL_MATRIX6_NV */ - { 17017, 0x000088C7 }, /* GL_MATRIX7_ARB */ - { 17032, 0x00008637 }, /* GL_MATRIX7_NV */ - { 17046, 0x000088C8 }, /* GL_MATRIX8_ARB */ - { 17061, 0x000088C9 }, /* GL_MATRIX9_ARB */ - { 17076, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_ARB */ - { 17102, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */ - { 17136, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */ - { 17167, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */ - { 17200, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */ - { 17231, 0x00000BA0 }, /* GL_MATRIX_MODE */ - { 17246, 0x00008840 }, /* GL_MATRIX_PALETTE_ARB */ - { 17268, 0x00008008 }, /* GL_MAX */ - { 17275, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE */ - { 17298, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */ - { 17330, 0x00000D35 }, /* GL_MAX_ATTRIB_STACK_DEPTH */ - { 17356, 0x00000D3B }, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */ - { 17389, 0x00008177 }, /* GL_MAX_CLIPMAP_DEPTH_SGIX */ - { 17415, 0x00008178 }, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */ - { 17449, 0x00000D32 }, /* GL_MAX_CLIP_PLANES */ - { 17468, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS_EXT */ - { 17497, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */ - { 17529, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */ - { 17565, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */ - { 17601, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */ - { 17641, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT */ - { 17667, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT_EXT */ - { 17697, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH */ - { 17722, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH_EXT */ - { 17751, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */ - { 17780, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */ - { 17813, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS */ - { 17833, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ARB */ - { 17857, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ATI */ - { 17881, 0x000080E9 }, /* GL_MAX_ELEMENTS_INDICES */ - { 17905, 0x000080E8 }, /* GL_MAX_ELEMENTS_VERTICES */ - { 17930, 0x00000D30 }, /* GL_MAX_EVAL_ORDER */ - { 17948, 0x00008008 }, /* GL_MAX_EXT */ - { 17959, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */ - { 17994, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */ - { 18033, 0x00000D31 }, /* GL_MAX_LIGHTS */ - { 18047, 0x00000B31 }, /* GL_MAX_LIST_NESTING */ - { 18067, 0x00008841 }, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */ - { 18105, 0x00000D36 }, /* GL_MAX_MODELVIEW_STACK_DEPTH */ - { 18134, 0x00000D37 }, /* GL_MAX_NAME_STACK_DEPTH */ - { 18158, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_ARB */ - { 18186, 0x00000D34 }, /* GL_MAX_PIXEL_MAP_TABLE */ - { 18209, 0x000088B1 }, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */ - { 18246, 0x0000880B }, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */ - { 18282, 0x000088AD }, /* GL_MAX_PROGRAM_ATTRIBS_ARB */ - { 18309, 0x000088F5 }, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */ - { 18338, 0x000088B5 }, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */ - { 18372, 0x000088F4 }, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ - { 18408, 0x000088F6 }, /* GL_MAX_PROGRAM_IF_DEPTH_NV */ - { 18435, 0x000088A1 }, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */ - { 18467, 0x000088B4 }, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */ - { 18503, 0x000088F8 }, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */ - { 18532, 0x000088F7 }, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */ - { 18561, 0x0000862F }, /* GL_MAX_PROGRAM_MATRICES_ARB */ - { 18589, 0x0000862E }, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */ - { 18627, 0x000088B3 }, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ - { 18671, 0x0000880E }, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ - { 18714, 0x000088AF }, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */ - { 18748, 0x000088A3 }, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ - { 18787, 0x000088AB }, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */ - { 18824, 0x000088A7 }, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */ - { 18862, 0x00008810 }, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ - { 18905, 0x0000880F }, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ - { 18948, 0x000088A9 }, /* GL_MAX_PROGRAM_PARAMETERS_ARB */ - { 18978, 0x000088A5 }, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */ - { 19009, 0x0000880D }, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */ - { 19045, 0x0000880C }, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */ - { 19081, 0x00000D38 }, /* GL_MAX_PROJECTION_STACK_DEPTH */ - { 19111, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */ - { 19145, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */ - { 19178, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_EXT */ - { 19207, 0x00008D57 }, /* GL_MAX_SAMPLES */ - { 19222, 0x00008504 }, /* GL_MAX_SHININESS_NV */ - { 19242, 0x00008505 }, /* GL_MAX_SPOT_EXPONENT_NV */ - { 19266, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS */ - { 19288, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS_ARB */ - { 19314, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS */ - { 19341, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */ - { 19372, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS */ - { 19396, 0x000084FF }, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */ - { 19430, 0x00000D33 }, /* GL_MAX_TEXTURE_SIZE */ - { 19450, 0x00000D39 }, /* GL_MAX_TEXTURE_STACK_DEPTH */ - { 19477, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS */ - { 19498, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS_ARB */ - { 19523, 0x0000862F }, /* GL_MAX_TRACK_MATRICES_NV */ - { 19548, 0x0000862E }, /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */ - { 19583, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS */ - { 19605, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS_ARB */ - { 19631, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS */ - { 19653, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS_ARB */ - { 19679, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */ - { 19713, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ - { 19751, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */ - { 19784, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */ - { 19821, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_ARB */ - { 19845, 0x00000D3A }, /* GL_MAX_VIEWPORT_DIMS */ - { 19866, 0x00008007 }, /* GL_MIN */ - { 19873, 0x0000802E }, /* GL_MINMAX */ - { 19883, 0x0000802E }, /* GL_MINMAX_EXT */ - { 19897, 0x0000802F }, /* GL_MINMAX_FORMAT */ - { 19914, 0x0000802F }, /* GL_MINMAX_FORMAT_EXT */ - { 19935, 0x00008030 }, /* GL_MINMAX_SINK */ - { 19950, 0x00008030 }, /* GL_MINMAX_SINK_EXT */ - { 19969, 0x00008007 }, /* GL_MIN_EXT */ - { 19980, 0x00008370 }, /* GL_MIRRORED_REPEAT */ - { 19999, 0x00008370 }, /* GL_MIRRORED_REPEAT_ARB */ - { 20022, 0x00008370 }, /* GL_MIRRORED_REPEAT_IBM */ - { 20045, 0x00008742 }, /* GL_MIRROR_CLAMP_ATI */ - { 20065, 0x00008742 }, /* GL_MIRROR_CLAMP_EXT */ - { 20085, 0x00008912 }, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */ - { 20115, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_ATI */ - { 20143, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */ - { 20171, 0x00001700 }, /* GL_MODELVIEW */ - { 20184, 0x00001700 }, /* GL_MODELVIEW0_ARB */ - { 20202, 0x0000872A }, /* GL_MODELVIEW10_ARB */ - { 20221, 0x0000872B }, /* GL_MODELVIEW11_ARB */ - { 20240, 0x0000872C }, /* GL_MODELVIEW12_ARB */ - { 20259, 0x0000872D }, /* GL_MODELVIEW13_ARB */ - { 20278, 0x0000872E }, /* GL_MODELVIEW14_ARB */ - { 20297, 0x0000872F }, /* GL_MODELVIEW15_ARB */ - { 20316, 0x00008730 }, /* GL_MODELVIEW16_ARB */ - { 20335, 0x00008731 }, /* GL_MODELVIEW17_ARB */ - { 20354, 0x00008732 }, /* GL_MODELVIEW18_ARB */ - { 20373, 0x00008733 }, /* GL_MODELVIEW19_ARB */ - { 20392, 0x0000850A }, /* GL_MODELVIEW1_ARB */ - { 20410, 0x00008734 }, /* GL_MODELVIEW20_ARB */ - { 20429, 0x00008735 }, /* GL_MODELVIEW21_ARB */ - { 20448, 0x00008736 }, /* GL_MODELVIEW22_ARB */ - { 20467, 0x00008737 }, /* GL_MODELVIEW23_ARB */ - { 20486, 0x00008738 }, /* GL_MODELVIEW24_ARB */ - { 20505, 0x00008739 }, /* GL_MODELVIEW25_ARB */ - { 20524, 0x0000873A }, /* GL_MODELVIEW26_ARB */ - { 20543, 0x0000873B }, /* GL_MODELVIEW27_ARB */ - { 20562, 0x0000873C }, /* GL_MODELVIEW28_ARB */ - { 20581, 0x0000873D }, /* GL_MODELVIEW29_ARB */ - { 20600, 0x00008722 }, /* GL_MODELVIEW2_ARB */ - { 20618, 0x0000873E }, /* GL_MODELVIEW30_ARB */ - { 20637, 0x0000873F }, /* GL_MODELVIEW31_ARB */ - { 20656, 0x00008723 }, /* GL_MODELVIEW3_ARB */ - { 20674, 0x00008724 }, /* GL_MODELVIEW4_ARB */ - { 20692, 0x00008725 }, /* GL_MODELVIEW5_ARB */ - { 20710, 0x00008726 }, /* GL_MODELVIEW6_ARB */ - { 20728, 0x00008727 }, /* GL_MODELVIEW7_ARB */ - { 20746, 0x00008728 }, /* GL_MODELVIEW8_ARB */ - { 20764, 0x00008729 }, /* GL_MODELVIEW9_ARB */ - { 20782, 0x00000BA6 }, /* GL_MODELVIEW_MATRIX */ - { 20802, 0x00008629 }, /* GL_MODELVIEW_PROJECTION_NV */ - { 20829, 0x00000BA3 }, /* GL_MODELVIEW_STACK_DEPTH */ - { 20854, 0x00002100 }, /* GL_MODULATE */ - { 20866, 0x00008744 }, /* GL_MODULATE_ADD_ATI */ - { 20886, 0x00008745 }, /* GL_MODULATE_SIGNED_ADD_ATI */ - { 20913, 0x00008746 }, /* GL_MODULATE_SUBTRACT_ATI */ - { 20938, 0x00000103 }, /* GL_MULT */ - { 20946, 0x0000809D }, /* GL_MULTISAMPLE */ - { 20961, 0x000086B2 }, /* GL_MULTISAMPLE_3DFX */ - { 20981, 0x0000809D }, /* GL_MULTISAMPLE_ARB */ - { 21000, 0x20000000 }, /* GL_MULTISAMPLE_BIT */ - { 21019, 0x20000000 }, /* GL_MULTISAMPLE_BIT_3DFX */ - { 21043, 0x20000000 }, /* GL_MULTISAMPLE_BIT_ARB */ - { 21066, 0x00008534 }, /* GL_MULTISAMPLE_FILTER_HINT_NV */ - { 21096, 0x00002A25 }, /* GL_N3F_V3F */ - { 21107, 0x00000D70 }, /* GL_NAME_STACK_DEPTH */ - { 21127, 0x0000150E }, /* GL_NAND */ - { 21135, 0x00002600 }, /* GL_NEAREST */ - { 21146, 0x0000844E }, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */ - { 21177, 0x0000844D }, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */ - { 21209, 0x00002702 }, /* GL_NEAREST_MIPMAP_LINEAR */ - { 21234, 0x00002700 }, /* GL_NEAREST_MIPMAP_NEAREST */ - { 21260, 0x00000200 }, /* GL_NEVER */ - { 21269, 0x00001102 }, /* GL_NICEST */ - { 21279, 0x00000000 }, /* GL_NONE */ - { 21287, 0x00001505 }, /* GL_NOOP */ - { 21295, 0x00001508 }, /* GL_NOR */ - { 21302, 0x00000BA1 }, /* GL_NORMALIZE */ - { 21315, 0x00008075 }, /* GL_NORMAL_ARRAY */ - { 21331, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING */ - { 21362, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */ - { 21397, 0x0000808F }, /* GL_NORMAL_ARRAY_POINTER */ - { 21421, 0x0000807F }, /* GL_NORMAL_ARRAY_STRIDE */ - { 21444, 0x0000807E }, /* GL_NORMAL_ARRAY_TYPE */ - { 21465, 0x00008511 }, /* GL_NORMAL_MAP */ - { 21479, 0x00008511 }, /* GL_NORMAL_MAP_ARB */ - { 21497, 0x00008511 }, /* GL_NORMAL_MAP_NV */ - { 21514, 0x00000205 }, /* GL_NOTEQUAL */ - { 21526, 0x00000000 }, /* GL_NO_ERROR */ - { 21538, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */ - { 21572, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */ - { 21610, 0x00008B89 }, /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */ - { 21642, 0x00008B8A }, /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */ - { 21684, 0x00008B86 }, /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */ - { 21714, 0x00008B87 }, /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */ - { 21754, 0x00008B85 }, /* GL_OBJECT_ATTACHED_OBJECTS_ARB */ - { 21785, 0x00008B81 }, /* GL_OBJECT_COMPILE_STATUS_ARB */ - { 21814, 0x00008B80 }, /* GL_OBJECT_DELETE_STATUS_ARB */ - { 21842, 0x00008B84 }, /* GL_OBJECT_INFO_LOG_LENGTH_ARB */ - { 21872, 0x00002401 }, /* GL_OBJECT_LINEAR */ - { 21889, 0x00008B82 }, /* GL_OBJECT_LINK_STATUS_ARB */ - { 21915, 0x00002501 }, /* GL_OBJECT_PLANE */ - { 21931, 0x00008B88 }, /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */ - { 21966, 0x00008B4F }, /* GL_OBJECT_SUBTYPE_ARB */ - { 21988, 0x00008B4E }, /* GL_OBJECT_TYPE_ARB */ - { 22007, 0x00008B83 }, /* GL_OBJECT_VALIDATE_STATUS_ARB */ - { 22037, 0x00008165 }, /* GL_OCCLUSION_TEST_HP */ - { 22058, 0x00008166 }, /* GL_OCCLUSION_TEST_RESULT_HP */ - { 22086, 0x00000001 }, /* GL_ONE */ - { 22093, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA */ - { 22121, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */ - { 22153, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR */ - { 22181, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */ - { 22213, 0x00000305 }, /* GL_ONE_MINUS_DST_ALPHA */ - { 22236, 0x00000307 }, /* GL_ONE_MINUS_DST_COLOR */ - { 22259, 0x00000303 }, /* GL_ONE_MINUS_SRC_ALPHA */ - { 22282, 0x00000301 }, /* GL_ONE_MINUS_SRC_COLOR */ - { 22305, 0x00008598 }, /* GL_OPERAND0_ALPHA */ - { 22323, 0x00008598 }, /* GL_OPERAND0_ALPHA_ARB */ - { 22345, 0x00008598 }, /* GL_OPERAND0_ALPHA_EXT */ - { 22367, 0x00008590 }, /* GL_OPERAND0_RGB */ - { 22383, 0x00008590 }, /* GL_OPERAND0_RGB_ARB */ - { 22403, 0x00008590 }, /* GL_OPERAND0_RGB_EXT */ - { 22423, 0x00008599 }, /* GL_OPERAND1_ALPHA */ - { 22441, 0x00008599 }, /* GL_OPERAND1_ALPHA_ARB */ - { 22463, 0x00008599 }, /* GL_OPERAND1_ALPHA_EXT */ - { 22485, 0x00008591 }, /* GL_OPERAND1_RGB */ - { 22501, 0x00008591 }, /* GL_OPERAND1_RGB_ARB */ - { 22521, 0x00008591 }, /* GL_OPERAND1_RGB_EXT */ - { 22541, 0x0000859A }, /* GL_OPERAND2_ALPHA */ - { 22559, 0x0000859A }, /* GL_OPERAND2_ALPHA_ARB */ - { 22581, 0x0000859A }, /* GL_OPERAND2_ALPHA_EXT */ - { 22603, 0x00008592 }, /* GL_OPERAND2_RGB */ - { 22619, 0x00008592 }, /* GL_OPERAND2_RGB_ARB */ - { 22639, 0x00008592 }, /* GL_OPERAND2_RGB_EXT */ - { 22659, 0x0000859B }, /* GL_OPERAND3_ALPHA_NV */ - { 22680, 0x00008593 }, /* GL_OPERAND3_RGB_NV */ - { 22699, 0x00001507 }, /* GL_OR */ - { 22705, 0x00000A01 }, /* GL_ORDER */ - { 22714, 0x0000150D }, /* GL_OR_INVERTED */ - { 22729, 0x0000150B }, /* GL_OR_REVERSE */ - { 22743, 0x00000505 }, /* GL_OUT_OF_MEMORY */ - { 22760, 0x00000D05 }, /* GL_PACK_ALIGNMENT */ - { 22778, 0x0000806C }, /* GL_PACK_IMAGE_HEIGHT */ - { 22799, 0x00008758 }, /* GL_PACK_INVERT_MESA */ - { 22819, 0x00000D01 }, /* GL_PACK_LSB_FIRST */ - { 22837, 0x00000D02 }, /* GL_PACK_ROW_LENGTH */ - { 22856, 0x0000806B }, /* GL_PACK_SKIP_IMAGES */ - { 22876, 0x00000D04 }, /* GL_PACK_SKIP_PIXELS */ - { 22896, 0x00000D03 }, /* GL_PACK_SKIP_ROWS */ - { 22914, 0x00000D00 }, /* GL_PACK_SWAP_BYTES */ - { 22933, 0x00008B92 }, /* GL_PALETTE4_R5_G6_B5_OES */ - { 22958, 0x00008B94 }, /* GL_PALETTE4_RGB5_A1_OES */ - { 22982, 0x00008B90 }, /* GL_PALETTE4_RGB8_OES */ - { 23003, 0x00008B93 }, /* GL_PALETTE4_RGBA4_OES */ - { 23025, 0x00008B91 }, /* GL_PALETTE4_RGBA8_OES */ - { 23047, 0x00008B97 }, /* GL_PALETTE8_R5_G6_B5_OES */ - { 23072, 0x00008B99 }, /* GL_PALETTE8_RGB5_A1_OES */ - { 23096, 0x00008B95 }, /* GL_PALETTE8_RGB8_OES */ - { 23117, 0x00008B98 }, /* GL_PALETTE8_RGBA4_OES */ - { 23139, 0x00008B96 }, /* GL_PALETTE8_RGBA8_OES */ - { 23161, 0x00000700 }, /* GL_PASS_THROUGH_TOKEN */ - { 23183, 0x00000C50 }, /* GL_PERSPECTIVE_CORRECTION_HINT */ - { 23214, 0x00000C79 }, /* GL_PIXEL_MAP_A_TO_A */ - { 23234, 0x00000CB9 }, /* GL_PIXEL_MAP_A_TO_A_SIZE */ - { 23259, 0x00000C78 }, /* GL_PIXEL_MAP_B_TO_B */ - { 23279, 0x00000CB8 }, /* GL_PIXEL_MAP_B_TO_B_SIZE */ - { 23304, 0x00000C77 }, /* GL_PIXEL_MAP_G_TO_G */ - { 23324, 0x00000CB7 }, /* GL_PIXEL_MAP_G_TO_G_SIZE */ - { 23349, 0x00000C75 }, /* GL_PIXEL_MAP_I_TO_A */ - { 23369, 0x00000CB5 }, /* GL_PIXEL_MAP_I_TO_A_SIZE */ - { 23394, 0x00000C74 }, /* GL_PIXEL_MAP_I_TO_B */ - { 23414, 0x00000CB4 }, /* GL_PIXEL_MAP_I_TO_B_SIZE */ - { 23439, 0x00000C73 }, /* GL_PIXEL_MAP_I_TO_G */ - { 23459, 0x00000CB3 }, /* GL_PIXEL_MAP_I_TO_G_SIZE */ - { 23484, 0x00000C70 }, /* GL_PIXEL_MAP_I_TO_I */ - { 23504, 0x00000CB0 }, /* GL_PIXEL_MAP_I_TO_I_SIZE */ - { 23529, 0x00000C72 }, /* GL_PIXEL_MAP_I_TO_R */ - { 23549, 0x00000CB2 }, /* GL_PIXEL_MAP_I_TO_R_SIZE */ - { 23574, 0x00000C76 }, /* GL_PIXEL_MAP_R_TO_R */ - { 23594, 0x00000CB6 }, /* GL_PIXEL_MAP_R_TO_R_SIZE */ - { 23619, 0x00000C71 }, /* GL_PIXEL_MAP_S_TO_S */ - { 23639, 0x00000CB1 }, /* GL_PIXEL_MAP_S_TO_S_SIZE */ - { 23664, 0x00000020 }, /* GL_PIXEL_MODE_BIT */ - { 23682, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */ - { 23715, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER_EXT */ - { 23740, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */ - { 23775, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER_EXT */ - { 23802, 0x00001B00 }, /* GL_POINT */ - { 23811, 0x00000000 }, /* GL_POINTS */ - { 23821, 0x00000002 }, /* GL_POINT_BIT */ - { 23834, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION */ - { 23864, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_ARB */ - { 23898, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_EXT */ - { 23932, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_SGIS */ - { 23967, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE */ - { 23996, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */ - { 24029, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */ - { 24062, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_SGIS */ - { 24096, 0x00000B11 }, /* GL_POINT_SIZE */ - { 24110, 0x00000B13 }, /* GL_POINT_SIZE_GRANULARITY */ - { 24136, 0x00008127 }, /* GL_POINT_SIZE_MAX */ - { 24154, 0x00008127 }, /* GL_POINT_SIZE_MAX_ARB */ - { 24176, 0x00008127 }, /* GL_POINT_SIZE_MAX_EXT */ - { 24198, 0x00008127 }, /* GL_POINT_SIZE_MAX_SGIS */ - { 24221, 0x00008126 }, /* GL_POINT_SIZE_MIN */ - { 24239, 0x00008126 }, /* GL_POINT_SIZE_MIN_ARB */ - { 24261, 0x00008126 }, /* GL_POINT_SIZE_MIN_EXT */ - { 24283, 0x00008126 }, /* GL_POINT_SIZE_MIN_SGIS */ - { 24306, 0x00000B12 }, /* GL_POINT_SIZE_RANGE */ - { 24326, 0x00000B10 }, /* GL_POINT_SMOOTH */ - { 24342, 0x00000C51 }, /* GL_POINT_SMOOTH_HINT */ - { 24363, 0x00008861 }, /* GL_POINT_SPRITE */ - { 24379, 0x00008861 }, /* GL_POINT_SPRITE_ARB */ - { 24399, 0x00008CA0 }, /* GL_POINT_SPRITE_COORD_ORIGIN */ - { 24428, 0x00008861 }, /* GL_POINT_SPRITE_NV */ - { 24447, 0x00008863 }, /* GL_POINT_SPRITE_R_MODE_NV */ - { 24473, 0x00000701 }, /* GL_POINT_TOKEN */ - { 24488, 0x00000009 }, /* GL_POLYGON */ - { 24499, 0x00000008 }, /* GL_POLYGON_BIT */ - { 24514, 0x00000B40 }, /* GL_POLYGON_MODE */ - { 24530, 0x00008039 }, /* GL_POLYGON_OFFSET_BIAS */ - { 24553, 0x00008038 }, /* GL_POLYGON_OFFSET_FACTOR */ - { 24578, 0x00008037 }, /* GL_POLYGON_OFFSET_FILL */ - { 24601, 0x00002A02 }, /* GL_POLYGON_OFFSET_LINE */ - { 24624, 0x00002A01 }, /* GL_POLYGON_OFFSET_POINT */ - { 24648, 0x00002A00 }, /* GL_POLYGON_OFFSET_UNITS */ - { 24672, 0x00000B41 }, /* GL_POLYGON_SMOOTH */ - { 24690, 0x00000C53 }, /* GL_POLYGON_SMOOTH_HINT */ - { 24713, 0x00000B42 }, /* GL_POLYGON_STIPPLE */ - { 24732, 0x00000010 }, /* GL_POLYGON_STIPPLE_BIT */ - { 24755, 0x00000703 }, /* GL_POLYGON_TOKEN */ - { 24772, 0x00001203 }, /* GL_POSITION */ - { 24784, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */ - { 24816, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */ - { 24852, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */ - { 24885, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */ - { 24922, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */ - { 24953, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */ - { 24988, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */ - { 25020, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */ - { 25056, 0x000080D2 }, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ - { 25089, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */ - { 25121, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */ - { 25157, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */ - { 25190, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */ - { 25227, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS */ - { 25257, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */ - { 25291, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE */ - { 25322, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */ - { 25357, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS */ - { 25388, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */ - { 25423, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE */ - { 25455, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */ - { 25491, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS */ - { 25521, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */ - { 25555, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE */ - { 25586, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */ - { 25621, 0x000080D1 }, /* GL_POST_CONVOLUTION_COLOR_TABLE */ - { 25653, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS */ - { 25684, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */ - { 25719, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE */ - { 25751, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */ - { 25787, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS */ - { 25816, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS_EXT */ - { 25849, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE */ - { 25879, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE_EXT */ - { 25913, 0x0000817B }, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */ - { 25952, 0x00008179 }, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */ - { 25985, 0x0000817C }, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */ - { 26025, 0x0000817A }, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */ - { 26059, 0x00008578 }, /* GL_PREVIOUS */ - { 26071, 0x00008578 }, /* GL_PREVIOUS_ARB */ - { 26087, 0x00008578 }, /* GL_PREVIOUS_EXT */ - { 26103, 0x00008577 }, /* GL_PRIMARY_COLOR */ - { 26120, 0x00008577 }, /* GL_PRIMARY_COLOR_ARB */ - { 26141, 0x00008577 }, /* GL_PRIMARY_COLOR_EXT */ - { 26162, 0x000088B0 }, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */ - { 26195, 0x00008805 }, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */ - { 26227, 0x000088AC }, /* GL_PROGRAM_ATTRIBS_ARB */ - { 26250, 0x00008677 }, /* GL_PROGRAM_BINDING_ARB */ - { 26273, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_ARB */ - { 26303, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_NV */ - { 26332, 0x00008874 }, /* GL_PROGRAM_ERROR_STRING_ARB */ - { 26360, 0x00008876 }, /* GL_PROGRAM_FORMAT_ARB */ - { 26382, 0x00008875 }, /* GL_PROGRAM_FORMAT_ASCII_ARB */ - { 26410, 0x000088A0 }, /* GL_PROGRAM_INSTRUCTIONS_ARB */ - { 26438, 0x00008627 }, /* GL_PROGRAM_LENGTH_ARB */ - { 26460, 0x00008627 }, /* GL_PROGRAM_LENGTH_NV */ - { 26481, 0x000088B2 }, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ - { 26521, 0x00008808 }, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ - { 26560, 0x000088AE }, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */ - { 26590, 0x000088A2 }, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ - { 26625, 0x000088AA }, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */ - { 26658, 0x000088A6 }, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */ - { 26692, 0x0000880A }, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ - { 26731, 0x00008809 }, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ - { 26770, 0x00008B40 }, /* GL_PROGRAM_OBJECT_ARB */ - { 26792, 0x000088A8 }, /* GL_PROGRAM_PARAMETERS_ARB */ - { 26818, 0x00008644 }, /* GL_PROGRAM_PARAMETER_NV */ - { 26842, 0x00008647 }, /* GL_PROGRAM_RESIDENT_NV */ - { 26865, 0x00008628 }, /* GL_PROGRAM_STRING_ARB */ - { 26887, 0x00008628 }, /* GL_PROGRAM_STRING_NV */ - { 26908, 0x00008646 }, /* GL_PROGRAM_TARGET_NV */ - { 26929, 0x000088A4 }, /* GL_PROGRAM_TEMPORARIES_ARB */ - { 26956, 0x00008807 }, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */ - { 26988, 0x00008806 }, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */ - { 27020, 0x000088B6 }, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */ - { 27055, 0x00001701 }, /* GL_PROJECTION */ - { 27069, 0x00000BA7 }, /* GL_PROJECTION_MATRIX */ - { 27090, 0x00000BA4 }, /* GL_PROJECTION_STACK_DEPTH */ - { 27116, 0x000080D3 }, /* GL_PROXY_COLOR_TABLE */ - { 27137, 0x00008025 }, /* GL_PROXY_HISTOGRAM */ - { 27156, 0x00008025 }, /* GL_PROXY_HISTOGRAM_EXT */ - { 27179, 0x000080D5 }, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */ - { 27218, 0x000080D4 }, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */ - { 27256, 0x00008063 }, /* GL_PROXY_TEXTURE_1D */ - { 27276, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */ - { 27306, 0x00008063 }, /* GL_PROXY_TEXTURE_1D_EXT */ - { 27330, 0x00008064 }, /* GL_PROXY_TEXTURE_2D */ - { 27350, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */ - { 27380, 0x00008064 }, /* GL_PROXY_TEXTURE_2D_EXT */ - { 27404, 0x00008070 }, /* GL_PROXY_TEXTURE_3D */ - { 27424, 0x000080BD }, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */ - { 27457, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP */ - { 27483, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */ - { 27513, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */ - { 27544, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_NV */ - { 27574, 0x00002003 }, /* GL_Q */ - { 27579, 0x00001209 }, /* GL_QUADRATIC_ATTENUATION */ - { 27604, 0x00000007 }, /* GL_QUADS */ - { 27613, 0x00008614 }, /* GL_QUAD_MESH_SUN */ - { 27630, 0x00000008 }, /* GL_QUAD_STRIP */ - { 27644, 0x00008864 }, /* GL_QUERY_COUNTER_BITS */ - { 27666, 0x00008864 }, /* GL_QUERY_COUNTER_BITS_ARB */ - { 27692, 0x00008866 }, /* GL_QUERY_RESULT */ - { 27708, 0x00008866 }, /* GL_QUERY_RESULT_ARB */ - { 27728, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE */ - { 27754, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE_ARB */ - { 27784, 0x00002002 }, /* GL_R */ - { 27789, 0x00002A10 }, /* GL_R3_G3_B2 */ - { 27801, 0x00019262 }, /* GL_RASTER_POSITION_UNCLIPPED_IBM */ - { 27834, 0x00000C02 }, /* GL_READ_BUFFER */ - { 27849, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER */ - { 27869, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING_EXT */ - { 27901, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER_EXT */ - { 27925, 0x000088B8 }, /* GL_READ_ONLY */ - { 27938, 0x000088B8 }, /* GL_READ_ONLY_ARB */ - { 27955, 0x000088BA }, /* GL_READ_WRITE */ - { 27969, 0x000088BA }, /* GL_READ_WRITE_ARB */ - { 27987, 0x00001903 }, /* GL_RED */ - { 27994, 0x00008016 }, /* GL_REDUCE */ - { 28004, 0x00008016 }, /* GL_REDUCE_EXT */ - { 28018, 0x00000D15 }, /* GL_RED_BIAS */ - { 28030, 0x00000D52 }, /* GL_RED_BITS */ - { 28042, 0x00000D14 }, /* GL_RED_SCALE */ - { 28055, 0x00008512 }, /* GL_REFLECTION_MAP */ - { 28073, 0x00008512 }, /* GL_REFLECTION_MAP_ARB */ - { 28095, 0x00008512 }, /* GL_REFLECTION_MAP_NV */ - { 28116, 0x00001C00 }, /* GL_RENDER */ - { 28126, 0x00008D41 }, /* GL_RENDERBUFFER */ - { 28142, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE */ - { 28169, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_EXT */ - { 28197, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE */ - { 28223, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE */ - { 28250, 0x00008D41 }, /* GL_RENDERBUFFER_EXT */ - { 28270, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE */ - { 28297, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT */ - { 28320, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_EXT */ - { 28347, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT */ - { 28379, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */ - { 28415, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE */ - { 28440, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES */ - { 28464, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE */ - { 28493, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH */ - { 28515, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_EXT */ - { 28541, 0x00001F01 }, /* GL_RENDERER */ - { 28553, 0x00000C40 }, /* GL_RENDER_MODE */ - { 28568, 0x00002901 }, /* GL_REPEAT */ - { 28578, 0x00001E01 }, /* GL_REPLACE */ - { 28589, 0x00008062 }, /* GL_REPLACE_EXT */ - { 28604, 0x00008153 }, /* GL_REPLICATE_BORDER_HP */ - { 28627, 0x0000803A }, /* GL_RESCALE_NORMAL */ - { 28645, 0x0000803A }, /* GL_RESCALE_NORMAL_EXT */ - { 28667, 0x00000102 }, /* GL_RETURN */ - { 28677, 0x00001907 }, /* GL_RGB */ - { 28684, 0x00008052 }, /* GL_RGB10 */ - { 28693, 0x00008059 }, /* GL_RGB10_A2 */ - { 28705, 0x00008059 }, /* GL_RGB10_A2_EXT */ - { 28721, 0x00008052 }, /* GL_RGB10_EXT */ - { 28734, 0x00008053 }, /* GL_RGB12 */ - { 28743, 0x00008053 }, /* GL_RGB12_EXT */ - { 28756, 0x00008054 }, /* GL_RGB16 */ - { 28765, 0x00008054 }, /* GL_RGB16_EXT */ - { 28778, 0x0000804E }, /* GL_RGB2_EXT */ - { 28790, 0x0000804F }, /* GL_RGB4 */ - { 28798, 0x0000804F }, /* GL_RGB4_EXT */ - { 28810, 0x000083A1 }, /* GL_RGB4_S3TC */ - { 28823, 0x00008050 }, /* GL_RGB5 */ - { 28831, 0x00008057 }, /* GL_RGB5_A1 */ - { 28842, 0x00008057 }, /* GL_RGB5_A1_EXT */ - { 28857, 0x00008050 }, /* GL_RGB5_EXT */ - { 28869, 0x00008051 }, /* GL_RGB8 */ - { 28877, 0x00008051 }, /* GL_RGB8_EXT */ - { 28889, 0x00001908 }, /* GL_RGBA */ - { 28897, 0x0000805A }, /* GL_RGBA12 */ - { 28907, 0x0000805A }, /* GL_RGBA12_EXT */ - { 28921, 0x0000805B }, /* GL_RGBA16 */ - { 28931, 0x0000805B }, /* GL_RGBA16_EXT */ - { 28945, 0x00008055 }, /* GL_RGBA2 */ - { 28954, 0x00008055 }, /* GL_RGBA2_EXT */ - { 28967, 0x00008056 }, /* GL_RGBA4 */ - { 28976, 0x000083A5 }, /* GL_RGBA4_DXT5_S3TC */ - { 28995, 0x00008056 }, /* GL_RGBA4_EXT */ - { 29008, 0x000083A3 }, /* GL_RGBA4_S3TC */ - { 29022, 0x00008058 }, /* GL_RGBA8 */ - { 29031, 0x00008058 }, /* GL_RGBA8_EXT */ - { 29044, 0x000083A4 }, /* GL_RGBA_DXT5_S3TC */ - { 29062, 0x00000C31 }, /* GL_RGBA_MODE */ - { 29075, 0x000083A2 }, /* GL_RGBA_S3TC */ - { 29088, 0x000083A0 }, /* GL_RGB_S3TC */ - { 29100, 0x00008573 }, /* GL_RGB_SCALE */ - { 29113, 0x00008573 }, /* GL_RGB_SCALE_ARB */ - { 29130, 0x00008573 }, /* GL_RGB_SCALE_EXT */ - { 29147, 0x00000407 }, /* GL_RIGHT */ - { 29156, 0x00002000 }, /* GL_S */ - { 29161, 0x00008B5D }, /* GL_SAMPLER_1D */ - { 29175, 0x00008B61 }, /* GL_SAMPLER_1D_SHADOW */ - { 29196, 0x00008B5E }, /* GL_SAMPLER_2D */ - { 29210, 0x00008B62 }, /* GL_SAMPLER_2D_SHADOW */ - { 29231, 0x00008B5F }, /* GL_SAMPLER_3D */ - { 29245, 0x00008B60 }, /* GL_SAMPLER_CUBE */ - { 29261, 0x000080A9 }, /* GL_SAMPLES */ - { 29272, 0x000086B4 }, /* GL_SAMPLES_3DFX */ - { 29288, 0x000080A9 }, /* GL_SAMPLES_ARB */ - { 29303, 0x00008914 }, /* GL_SAMPLES_PASSED */ - { 29321, 0x00008914 }, /* GL_SAMPLES_PASSED_ARB */ - { 29343, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE */ - { 29371, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */ - { 29403, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE */ - { 29426, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE_ARB */ - { 29453, 0x000080A8 }, /* GL_SAMPLE_BUFFERS */ - { 29471, 0x000086B3 }, /* GL_SAMPLE_BUFFERS_3DFX */ - { 29494, 0x000080A8 }, /* GL_SAMPLE_BUFFERS_ARB */ - { 29516, 0x000080A0 }, /* GL_SAMPLE_COVERAGE */ - { 29535, 0x000080A0 }, /* GL_SAMPLE_COVERAGE_ARB */ - { 29558, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT */ - { 29584, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT_ARB */ - { 29614, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE */ - { 29639, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE_ARB */ - { 29668, 0x00080000 }, /* GL_SCISSOR_BIT */ - { 29683, 0x00000C10 }, /* GL_SCISSOR_BOX */ - { 29698, 0x00000C11 }, /* GL_SCISSOR_TEST */ - { 29714, 0x0000845E }, /* GL_SECONDARY_COLOR_ARRAY */ - { 29739, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */ - { 29779, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */ - { 29823, 0x0000845D }, /* GL_SECONDARY_COLOR_ARRAY_POINTER */ - { 29856, 0x0000845A }, /* GL_SECONDARY_COLOR_ARRAY_SIZE */ - { 29886, 0x0000845C }, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */ - { 29918, 0x0000845B }, /* GL_SECONDARY_COLOR_ARRAY_TYPE */ - { 29948, 0x00001C02 }, /* GL_SELECT */ - { 29958, 0x00000DF3 }, /* GL_SELECTION_BUFFER_POINTER */ - { 29986, 0x00000DF4 }, /* GL_SELECTION_BUFFER_SIZE */ - { 30011, 0x00008012 }, /* GL_SEPARABLE_2D */ - { 30027, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR */ - { 30054, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR_EXT */ - { 30085, 0x0000150F }, /* GL_SET */ - { 30092, 0x00008B48 }, /* GL_SHADER_OBJECT_ARB */ - { 30113, 0x00008B88 }, /* GL_SHADER_SOURCE_LENGTH */ - { 30137, 0x00008B4F }, /* GL_SHADER_TYPE */ - { 30152, 0x00000B54 }, /* GL_SHADE_MODEL */ - { 30167, 0x00008B8C }, /* GL_SHADING_LANGUAGE_VERSION */ - { 30195, 0x000080BF }, /* GL_SHADOW_AMBIENT_SGIX */ - { 30218, 0x000081FB }, /* GL_SHARED_TEXTURE_PALETTE_EXT */ - { 30248, 0x00001601 }, /* GL_SHININESS */ - { 30261, 0x00001402 }, /* GL_SHORT */ - { 30270, 0x000081F9 }, /* GL_SINGLE_COLOR */ - { 30286, 0x000081F9 }, /* GL_SINGLE_COLOR_EXT */ - { 30306, 0x000085CC }, /* GL_SLICE_ACCUM_SUN */ - { 30325, 0x00001D01 }, /* GL_SMOOTH */ - { 30335, 0x00000B23 }, /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */ - { 30368, 0x00000B22 }, /* GL_SMOOTH_LINE_WIDTH_RANGE */ - { 30395, 0x00000B13 }, /* GL_SMOOTH_POINT_SIZE_GRANULARITY */ - { 30428, 0x00000B12 }, /* GL_SMOOTH_POINT_SIZE_RANGE */ - { 30455, 0x00008588 }, /* GL_SOURCE0_ALPHA */ - { 30472, 0x00008588 }, /* GL_SOURCE0_ALPHA_ARB */ - { 30493, 0x00008588 }, /* GL_SOURCE0_ALPHA_EXT */ - { 30514, 0x00008580 }, /* GL_SOURCE0_RGB */ - { 30529, 0x00008580 }, /* GL_SOURCE0_RGB_ARB */ - { 30548, 0x00008580 }, /* GL_SOURCE0_RGB_EXT */ - { 30567, 0x00008589 }, /* GL_SOURCE1_ALPHA */ - { 30584, 0x00008589 }, /* GL_SOURCE1_ALPHA_ARB */ - { 30605, 0x00008589 }, /* GL_SOURCE1_ALPHA_EXT */ - { 30626, 0x00008581 }, /* GL_SOURCE1_RGB */ - { 30641, 0x00008581 }, /* GL_SOURCE1_RGB_ARB */ - { 30660, 0x00008581 }, /* GL_SOURCE1_RGB_EXT */ - { 30679, 0x0000858A }, /* GL_SOURCE2_ALPHA */ - { 30696, 0x0000858A }, /* GL_SOURCE2_ALPHA_ARB */ - { 30717, 0x0000858A }, /* GL_SOURCE2_ALPHA_EXT */ - { 30738, 0x00008582 }, /* GL_SOURCE2_RGB */ - { 30753, 0x00008582 }, /* GL_SOURCE2_RGB_ARB */ - { 30772, 0x00008582 }, /* GL_SOURCE2_RGB_EXT */ - { 30791, 0x0000858B }, /* GL_SOURCE3_ALPHA_NV */ - { 30811, 0x00008583 }, /* GL_SOURCE3_RGB_NV */ - { 30829, 0x00001202 }, /* GL_SPECULAR */ - { 30841, 0x00002402 }, /* GL_SPHERE_MAP */ - { 30855, 0x00001206 }, /* GL_SPOT_CUTOFF */ - { 30870, 0x00001204 }, /* GL_SPOT_DIRECTION */ - { 30888, 0x00001205 }, /* GL_SPOT_EXPONENT */ - { 30905, 0x00008588 }, /* GL_SRC0_ALPHA */ - { 30919, 0x00008580 }, /* GL_SRC0_RGB */ - { 30931, 0x00008589 }, /* GL_SRC1_ALPHA */ - { 30945, 0x00008581 }, /* GL_SRC1_RGB */ - { 30957, 0x0000858A }, /* GL_SRC2_ALPHA */ - { 30971, 0x00008582 }, /* GL_SRC2_RGB */ - { 30983, 0x00000302 }, /* GL_SRC_ALPHA */ - { 30996, 0x00000308 }, /* GL_SRC_ALPHA_SATURATE */ - { 31018, 0x00000300 }, /* GL_SRC_COLOR */ - { 31031, 0x00008C40 }, /* GL_SRGB */ - { 31039, 0x00000503 }, /* GL_STACK_OVERFLOW */ - { 31057, 0x00000504 }, /* GL_STACK_UNDERFLOW */ - { 31076, 0x000088E6 }, /* GL_STATIC_COPY */ - { 31091, 0x000088E6 }, /* GL_STATIC_COPY_ARB */ - { 31110, 0x000088E4 }, /* GL_STATIC_DRAW */ - { 31125, 0x000088E4 }, /* GL_STATIC_DRAW_ARB */ - { 31144, 0x000088E5 }, /* GL_STATIC_READ */ - { 31159, 0x000088E5 }, /* GL_STATIC_READ_ARB */ - { 31178, 0x00001802 }, /* GL_STENCIL */ - { 31189, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT */ - { 31211, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_EXT */ - { 31237, 0x00008801 }, /* GL_STENCIL_BACK_FAIL */ - { 31258, 0x00008801 }, /* GL_STENCIL_BACK_FAIL_ATI */ - { 31283, 0x00008800 }, /* GL_STENCIL_BACK_FUNC */ - { 31304, 0x00008800 }, /* GL_STENCIL_BACK_FUNC_ATI */ - { 31329, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */ - { 31361, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */ - { 31397, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */ - { 31429, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */ - { 31465, 0x00008CA3 }, /* GL_STENCIL_BACK_REF */ - { 31485, 0x00008CA4 }, /* GL_STENCIL_BACK_VALUE_MASK */ - { 31512, 0x00008CA5 }, /* GL_STENCIL_BACK_WRITEMASK */ - { 31538, 0x00000D57 }, /* GL_STENCIL_BITS */ - { 31554, 0x00000400 }, /* GL_STENCIL_BUFFER_BIT */ - { 31576, 0x00000B91 }, /* GL_STENCIL_CLEAR_VALUE */ - { 31599, 0x00000B94 }, /* GL_STENCIL_FAIL */ - { 31615, 0x00000B92 }, /* GL_STENCIL_FUNC */ - { 31631, 0x00001901 }, /* GL_STENCIL_INDEX */ - { 31648, 0x00008D49 }, /* GL_STENCIL_INDEX16_EXT */ - { 31671, 0x00008D46 }, /* GL_STENCIL_INDEX1_EXT */ - { 31693, 0x00008D47 }, /* GL_STENCIL_INDEX4_EXT */ - { 31715, 0x00008D48 }, /* GL_STENCIL_INDEX8_EXT */ - { 31737, 0x00008D45 }, /* GL_STENCIL_INDEX_EXT */ - { 31758, 0x00000B95 }, /* GL_STENCIL_PASS_DEPTH_FAIL */ - { 31785, 0x00000B96 }, /* GL_STENCIL_PASS_DEPTH_PASS */ - { 31812, 0x00000B97 }, /* GL_STENCIL_REF */ - { 31827, 0x00000B90 }, /* GL_STENCIL_TEST */ - { 31843, 0x00008910 }, /* GL_STENCIL_TEST_TWO_SIDE_EXT */ - { 31872, 0x00000B93 }, /* GL_STENCIL_VALUE_MASK */ - { 31894, 0x00000B98 }, /* GL_STENCIL_WRITEMASK */ - { 31915, 0x00000C33 }, /* GL_STEREO */ - { 31925, 0x000088E2 }, /* GL_STREAM_COPY */ - { 31940, 0x000088E2 }, /* GL_STREAM_COPY_ARB */ - { 31959, 0x000088E0 }, /* GL_STREAM_DRAW */ - { 31974, 0x000088E0 }, /* GL_STREAM_DRAW_ARB */ - { 31993, 0x000088E1 }, /* GL_STREAM_READ */ - { 32008, 0x000088E1 }, /* GL_STREAM_READ_ARB */ - { 32027, 0x00000D50 }, /* GL_SUBPIXEL_BITS */ - { 32044, 0x000084E7 }, /* GL_SUBTRACT */ - { 32056, 0x000084E7 }, /* GL_SUBTRACT_ARB */ - { 32072, 0x00002001 }, /* GL_T */ - { 32077, 0x00002A2A }, /* GL_T2F_C3F_V3F */ - { 32092, 0x00002A2C }, /* GL_T2F_C4F_N3F_V3F */ - { 32111, 0x00002A29 }, /* GL_T2F_C4UB_V3F */ - { 32127, 0x00002A2B }, /* GL_T2F_N3F_V3F */ - { 32142, 0x00002A27 }, /* GL_T2F_V3F */ - { 32153, 0x00002A2D }, /* GL_T4F_C4F_N3F_V4F */ - { 32172, 0x00002A28 }, /* GL_T4F_V4F */ - { 32183, 0x00008031 }, /* GL_TABLE_TOO_LARGE_EXT */ - { 32206, 0x00001702 }, /* GL_TEXTURE */ - { 32217, 0x000084C0 }, /* GL_TEXTURE0 */ - { 32229, 0x000084C0 }, /* GL_TEXTURE0_ARB */ - { 32245, 0x000084C1 }, /* GL_TEXTURE1 */ - { 32257, 0x000084CA }, /* GL_TEXTURE10 */ - { 32270, 0x000084CA }, /* GL_TEXTURE10_ARB */ - { 32287, 0x000084CB }, /* GL_TEXTURE11 */ - { 32300, 0x000084CB }, /* GL_TEXTURE11_ARB */ - { 32317, 0x000084CC }, /* GL_TEXTURE12 */ - { 32330, 0x000084CC }, /* GL_TEXTURE12_ARB */ - { 32347, 0x000084CD }, /* GL_TEXTURE13 */ - { 32360, 0x000084CD }, /* GL_TEXTURE13_ARB */ - { 32377, 0x000084CE }, /* GL_TEXTURE14 */ - { 32390, 0x000084CE }, /* GL_TEXTURE14_ARB */ - { 32407, 0x000084CF }, /* GL_TEXTURE15 */ - { 32420, 0x000084CF }, /* GL_TEXTURE15_ARB */ - { 32437, 0x000084D0 }, /* GL_TEXTURE16 */ - { 32450, 0x000084D0 }, /* GL_TEXTURE16_ARB */ - { 32467, 0x000084D1 }, /* GL_TEXTURE17 */ - { 32480, 0x000084D1 }, /* GL_TEXTURE17_ARB */ - { 32497, 0x000084D2 }, /* GL_TEXTURE18 */ - { 32510, 0x000084D2 }, /* GL_TEXTURE18_ARB */ - { 32527, 0x000084D3 }, /* GL_TEXTURE19 */ - { 32540, 0x000084D3 }, /* GL_TEXTURE19_ARB */ - { 32557, 0x000084C1 }, /* GL_TEXTURE1_ARB */ - { 32573, 0x000084C2 }, /* GL_TEXTURE2 */ - { 32585, 0x000084D4 }, /* GL_TEXTURE20 */ - { 32598, 0x000084D4 }, /* GL_TEXTURE20_ARB */ - { 32615, 0x000084D5 }, /* GL_TEXTURE21 */ - { 32628, 0x000084D5 }, /* GL_TEXTURE21_ARB */ - { 32645, 0x000084D6 }, /* GL_TEXTURE22 */ - { 32658, 0x000084D6 }, /* GL_TEXTURE22_ARB */ - { 32675, 0x000084D7 }, /* GL_TEXTURE23 */ - { 32688, 0x000084D7 }, /* GL_TEXTURE23_ARB */ - { 32705, 0x000084D8 }, /* GL_TEXTURE24 */ - { 32718, 0x000084D8 }, /* GL_TEXTURE24_ARB */ - { 32735, 0x000084D9 }, /* GL_TEXTURE25 */ - { 32748, 0x000084D9 }, /* GL_TEXTURE25_ARB */ - { 32765, 0x000084DA }, /* GL_TEXTURE26 */ - { 32778, 0x000084DA }, /* GL_TEXTURE26_ARB */ - { 32795, 0x000084DB }, /* GL_TEXTURE27 */ - { 32808, 0x000084DB }, /* GL_TEXTURE27_ARB */ - { 32825, 0x000084DC }, /* GL_TEXTURE28 */ - { 32838, 0x000084DC }, /* GL_TEXTURE28_ARB */ - { 32855, 0x000084DD }, /* GL_TEXTURE29 */ - { 32868, 0x000084DD }, /* GL_TEXTURE29_ARB */ - { 32885, 0x000084C2 }, /* GL_TEXTURE2_ARB */ - { 32901, 0x000084C3 }, /* GL_TEXTURE3 */ - { 32913, 0x000084DE }, /* GL_TEXTURE30 */ - { 32926, 0x000084DE }, /* GL_TEXTURE30_ARB */ - { 32943, 0x000084DF }, /* GL_TEXTURE31 */ - { 32956, 0x000084DF }, /* GL_TEXTURE31_ARB */ - { 32973, 0x000084C3 }, /* GL_TEXTURE3_ARB */ - { 32989, 0x000084C4 }, /* GL_TEXTURE4 */ - { 33001, 0x000084C4 }, /* GL_TEXTURE4_ARB */ - { 33017, 0x000084C5 }, /* GL_TEXTURE5 */ - { 33029, 0x000084C5 }, /* GL_TEXTURE5_ARB */ - { 33045, 0x000084C6 }, /* GL_TEXTURE6 */ - { 33057, 0x000084C6 }, /* GL_TEXTURE6_ARB */ - { 33073, 0x000084C7 }, /* GL_TEXTURE7 */ - { 33085, 0x000084C7 }, /* GL_TEXTURE7_ARB */ - { 33101, 0x000084C8 }, /* GL_TEXTURE8 */ - { 33113, 0x000084C8 }, /* GL_TEXTURE8_ARB */ - { 33129, 0x000084C9 }, /* GL_TEXTURE9 */ - { 33141, 0x000084C9 }, /* GL_TEXTURE9_ARB */ - { 33157, 0x00000DE0 }, /* GL_TEXTURE_1D */ - { 33171, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY_EXT */ - { 33195, 0x00000DE1 }, /* GL_TEXTURE_2D */ - { 33209, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY_EXT */ - { 33233, 0x0000806F }, /* GL_TEXTURE_3D */ - { 33247, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE */ - { 33269, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE_EXT */ - { 33295, 0x0000813C }, /* GL_TEXTURE_BASE_LEVEL */ - { 33317, 0x00008068 }, /* GL_TEXTURE_BINDING_1D */ - { 33339, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */ - { 33371, 0x00008069 }, /* GL_TEXTURE_BINDING_2D */ - { 33393, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */ - { 33425, 0x0000806A }, /* GL_TEXTURE_BINDING_3D */ - { 33447, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP */ - { 33475, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */ - { 33507, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */ - { 33540, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_NV */ - { 33572, 0x00040000 }, /* GL_TEXTURE_BIT */ - { 33587, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE */ - { 33608, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE_EXT */ - { 33633, 0x00001005 }, /* GL_TEXTURE_BORDER */ - { 33651, 0x00001004 }, /* GL_TEXTURE_BORDER_COLOR */ - { 33675, 0x00008171 }, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */ - { 33706, 0x00008176 }, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */ - { 33736, 0x00008172 }, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */ - { 33766, 0x00008175 }, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */ - { 33801, 0x00008173 }, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */ - { 33832, 0x00008174 }, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */ - { 33870, 0x000080BC }, /* GL_TEXTURE_COLOR_TABLE_SGI */ - { 33897, 0x000081EF }, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */ - { 33929, 0x000080BF }, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */ - { 33963, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC */ - { 33987, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC_ARB */ - { 34015, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE */ - { 34039, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE_ARB */ - { 34067, 0x0000819B }, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */ - { 34100, 0x0000819A }, /* GL_TEXTURE_COMPARE_SGIX */ - { 34124, 0x00001003 }, /* GL_TEXTURE_COMPONENTS */ - { 34146, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED */ - { 34168, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED_ARB */ - { 34194, 0x000086A3 }, /* GL_TEXTURE_COMPRESSED_FORMATS_ARB */ - { 34228, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */ - { 34261, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */ - { 34298, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT */ - { 34326, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT_ARB */ - { 34358, 0x00008078 }, /* GL_TEXTURE_COORD_ARRAY */ - { 34381, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */ - { 34419, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */ - { 34461, 0x00008092 }, /* GL_TEXTURE_COORD_ARRAY_POINTER */ - { 34492, 0x00008088 }, /* GL_TEXTURE_COORD_ARRAY_SIZE */ - { 34520, 0x0000808A }, /* GL_TEXTURE_COORD_ARRAY_STRIDE */ - { 34550, 0x00008089 }, /* GL_TEXTURE_COORD_ARRAY_TYPE */ - { 34578, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP */ - { 34598, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_ARB */ - { 34622, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */ - { 34653, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */ - { 34688, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */ - { 34719, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */ - { 34754, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */ - { 34785, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */ - { 34820, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */ - { 34851, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */ - { 34886, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */ - { 34917, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */ - { 34952, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */ - { 34983, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */ - { 35018, 0x00008071 }, /* GL_TEXTURE_DEPTH */ - { 35035, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE */ - { 35057, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE_ARB */ - { 35083, 0x00002300 }, /* GL_TEXTURE_ENV */ - { 35098, 0x00002201 }, /* GL_TEXTURE_ENV_COLOR */ - { 35119, 0x00002200 }, /* GL_TEXTURE_ENV_MODE */ - { 35139, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL */ - { 35165, 0x00002500 }, /* GL_TEXTURE_GEN_MODE */ - { 35185, 0x00000C63 }, /* GL_TEXTURE_GEN_Q */ - { 35202, 0x00000C62 }, /* GL_TEXTURE_GEN_R */ - { 35219, 0x00000C60 }, /* GL_TEXTURE_GEN_S */ - { 35236, 0x00000C61 }, /* GL_TEXTURE_GEN_T */ - { 35253, 0x0000819D }, /* GL_TEXTURE_GEQUAL_R_SGIX */ - { 35278, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE */ - { 35300, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE_EXT */ - { 35326, 0x00001001 }, /* GL_TEXTURE_HEIGHT */ - { 35344, 0x000080ED }, /* GL_TEXTURE_INDEX_SIZE_EXT */ - { 35370, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE */ - { 35396, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE_EXT */ - { 35426, 0x00001003 }, /* GL_TEXTURE_INTERNAL_FORMAT */ - { 35453, 0x0000819C }, /* GL_TEXTURE_LEQUAL_R_SGIX */ - { 35478, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS */ - { 35498, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS_EXT */ - { 35522, 0x00008190 }, /* GL_TEXTURE_LOD_BIAS_R_SGIX */ - { 35549, 0x0000818E }, /* GL_TEXTURE_LOD_BIAS_S_SGIX */ - { 35576, 0x0000818F }, /* GL_TEXTURE_LOD_BIAS_T_SGIX */ - { 35603, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE */ - { 35629, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE_EXT */ - { 35659, 0x00002800 }, /* GL_TEXTURE_MAG_FILTER */ - { 35681, 0x00000BA8 }, /* GL_TEXTURE_MATRIX */ - { 35699, 0x000084FE }, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */ - { 35729, 0x0000836B }, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */ - { 35757, 0x00008369 }, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */ - { 35785, 0x0000836A }, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */ - { 35813, 0x0000813D }, /* GL_TEXTURE_MAX_LEVEL */ - { 35834, 0x0000813B }, /* GL_TEXTURE_MAX_LOD */ - { 35853, 0x00002801 }, /* GL_TEXTURE_MIN_FILTER */ - { 35875, 0x0000813A }, /* GL_TEXTURE_MIN_LOD */ - { 35894, 0x00008066 }, /* GL_TEXTURE_PRIORITY */ - { 35914, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_ARB */ - { 35939, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_NV */ - { 35963, 0x0000805C }, /* GL_TEXTURE_RED_SIZE */ - { 35983, 0x0000805C }, /* GL_TEXTURE_RED_SIZE_EXT */ - { 36007, 0x00008067 }, /* GL_TEXTURE_RESIDENT */ - { 36027, 0x00000BA5 }, /* GL_TEXTURE_STACK_DEPTH */ - { 36050, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE */ - { 36074, 0x00008065 }, /* GL_TEXTURE_TOO_LARGE_EXT */ - { 36099, 0x0000888F }, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */ - { 36133, 0x00001000 }, /* GL_TEXTURE_WIDTH */ - { 36150, 0x00008072 }, /* GL_TEXTURE_WRAP_R */ - { 36168, 0x00002802 }, /* GL_TEXTURE_WRAP_S */ - { 36186, 0x00002803 }, /* GL_TEXTURE_WRAP_T */ - { 36204, 0x000088BF }, /* GL_TIME_ELAPSED_EXT */ - { 36224, 0x00008648 }, /* GL_TRACK_MATRIX_NV */ - { 36243, 0x00008649 }, /* GL_TRACK_MATRIX_TRANSFORM_NV */ - { 36272, 0x00001000 }, /* GL_TRANSFORM_BIT */ - { 36289, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX */ - { 36315, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX_ARB */ - { 36345, 0x000088B7 }, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */ - { 36377, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX */ - { 36407, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */ - { 36441, 0x0000862C }, /* GL_TRANSPOSE_NV */ - { 36457, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX */ - { 36488, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */ - { 36523, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX */ - { 36551, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */ - { 36583, 0x00000004 }, /* GL_TRIANGLES */ - { 36596, 0x00000006 }, /* GL_TRIANGLE_FAN */ - { 36612, 0x00008615 }, /* GL_TRIANGLE_MESH_SUN */ - { 36633, 0x00000005 }, /* GL_TRIANGLE_STRIP */ - { 36651, 0x00000001 }, /* GL_TRUE */ - { 36659, 0x00000CF5 }, /* GL_UNPACK_ALIGNMENT */ - { 36679, 0x0000806E }, /* GL_UNPACK_IMAGE_HEIGHT */ - { 36702, 0x00000CF1 }, /* GL_UNPACK_LSB_FIRST */ - { 36722, 0x00000CF2 }, /* GL_UNPACK_ROW_LENGTH */ - { 36743, 0x0000806D }, /* GL_UNPACK_SKIP_IMAGES */ - { 36765, 0x00000CF4 }, /* GL_UNPACK_SKIP_PIXELS */ - { 36787, 0x00000CF3 }, /* GL_UNPACK_SKIP_ROWS */ - { 36807, 0x00000CF0 }, /* GL_UNPACK_SWAP_BYTES */ - { 36828, 0x00001401 }, /* GL_UNSIGNED_BYTE */ - { 36845, 0x00008362 }, /* GL_UNSIGNED_BYTE_2_3_3_REV */ - { 36872, 0x00008032 }, /* GL_UNSIGNED_BYTE_3_3_2 */ - { 36895, 0x00001405 }, /* GL_UNSIGNED_INT */ - { 36911, 0x00008036 }, /* GL_UNSIGNED_INT_10_10_10_2 */ - { 36938, 0x000084FA }, /* GL_UNSIGNED_INT_24_8 */ - { 36959, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_NV */ - { 36983, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV */ - { 37014, 0x00008035 }, /* GL_UNSIGNED_INT_8_8_8_8 */ - { 37038, 0x00008367 }, /* GL_UNSIGNED_INT_8_8_8_8_REV */ - { 37066, 0x00008C17 }, /* GL_UNSIGNED_NORMALIZED */ - { 37089, 0x00001403 }, /* GL_UNSIGNED_SHORT */ - { 37107, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */ - { 37137, 0x00008033 }, /* GL_UNSIGNED_SHORT_4_4_4_4 */ - { 37163, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */ - { 37193, 0x00008034 }, /* GL_UNSIGNED_SHORT_5_5_5_1 */ - { 37219, 0x00008363 }, /* GL_UNSIGNED_SHORT_5_6_5 */ - { 37243, 0x00008364 }, /* GL_UNSIGNED_SHORT_5_6_5_REV */ - { 37271, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_APPLE */ - { 37299, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_MESA */ - { 37326, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */ - { 37358, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_MESA */ - { 37389, 0x00008CA2 }, /* GL_UPPER_LEFT */ - { 37403, 0x00002A20 }, /* GL_V2F */ - { 37410, 0x00002A21 }, /* GL_V3F */ - { 37417, 0x00008B83 }, /* GL_VALIDATE_STATUS */ - { 37436, 0x00001F00 }, /* GL_VENDOR */ - { 37446, 0x00001F02 }, /* GL_VERSION */ - { 37457, 0x00008074 }, /* GL_VERTEX_ARRAY */ - { 37473, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING_APPLE */ - { 37503, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING */ - { 37534, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */ - { 37569, 0x0000808E }, /* GL_VERTEX_ARRAY_POINTER */ - { 37593, 0x0000807A }, /* GL_VERTEX_ARRAY_SIZE */ - { 37614, 0x0000807C }, /* GL_VERTEX_ARRAY_STRIDE */ - { 37637, 0x0000807B }, /* GL_VERTEX_ARRAY_TYPE */ - { 37658, 0x00008650 }, /* GL_VERTEX_ATTRIB_ARRAY0_NV */ - { 37685, 0x0000865A }, /* GL_VERTEX_ATTRIB_ARRAY10_NV */ - { 37713, 0x0000865B }, /* GL_VERTEX_ATTRIB_ARRAY11_NV */ - { 37741, 0x0000865C }, /* GL_VERTEX_ATTRIB_ARRAY12_NV */ - { 37769, 0x0000865D }, /* GL_VERTEX_ATTRIB_ARRAY13_NV */ - { 37797, 0x0000865E }, /* GL_VERTEX_ATTRIB_ARRAY14_NV */ - { 37825, 0x0000865F }, /* GL_VERTEX_ATTRIB_ARRAY15_NV */ - { 37853, 0x00008651 }, /* GL_VERTEX_ATTRIB_ARRAY1_NV */ - { 37880, 0x00008652 }, /* GL_VERTEX_ATTRIB_ARRAY2_NV */ - { 37907, 0x00008653 }, /* GL_VERTEX_ATTRIB_ARRAY3_NV */ - { 37934, 0x00008654 }, /* GL_VERTEX_ATTRIB_ARRAY4_NV */ - { 37961, 0x00008655 }, /* GL_VERTEX_ATTRIB_ARRAY5_NV */ - { 37988, 0x00008656 }, /* GL_VERTEX_ATTRIB_ARRAY6_NV */ - { 38015, 0x00008657 }, /* GL_VERTEX_ATTRIB_ARRAY7_NV */ - { 38042, 0x00008658 }, /* GL_VERTEX_ATTRIB_ARRAY8_NV */ - { 38069, 0x00008659 }, /* GL_VERTEX_ATTRIB_ARRAY9_NV */ - { 38096, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */ - { 38134, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */ - { 38176, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */ - { 38207, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */ - { 38242, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */ - { 38276, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */ - { 38314, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */ - { 38345, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */ - { 38380, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */ - { 38408, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */ - { 38440, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */ - { 38470, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */ - { 38504, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */ - { 38532, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */ - { 38564, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */ - { 38584, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */ - { 38606, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */ - { 38635, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */ - { 38656, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */ - { 38685, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */ - { 38718, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */ - { 38750, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */ - { 38777, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */ - { 38808, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */ - { 38838, 0x00008B31 }, /* GL_VERTEX_SHADER */ - { 38855, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */ - { 38876, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */ - { 38903, 0x00000BA2 }, /* GL_VIEWPORT */ - { 38915, 0x00000800 }, /* GL_VIEWPORT_BIT */ - { 38931, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */ - { 38951, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */ - { 38982, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */ - { 39017, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */ - { 39045, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */ - { 39070, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */ - { 39097, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */ - { 39122, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */ - { 39146, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */ - { 39165, 0x000088B9 }, /* GL_WRITE_ONLY */ - { 39179, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */ - { 39197, 0x00001506 }, /* GL_XOR */ - { 39204, 0x000085B9 }, /* GL_YCBCR_422_APPLE */ - { 39223, 0x00008757 }, /* GL_YCBCR_MESA */ - { 39237, 0x00000000 }, /* GL_ZERO */ - { 39245, 0x00000D16 }, /* GL_ZOOM_X */ - { 39255, 0x00000D17 }, /* GL_ZOOM_Y */ + { 1821, 0x0000877B }, /* GL_BUMP_ENVMAP_ATI */ + { 1840, 0x00008777 }, /* GL_BUMP_NUM_TEX_UNITS_ATI */ + { 1866, 0x00008775 }, /* GL_BUMP_ROT_MATRIX_ATI */ + { 1889, 0x00008776 }, /* GL_BUMP_ROT_MATRIX_SIZE_ATI */ + { 1917, 0x0000877C }, /* GL_BUMP_TARGET_ATI */ + { 1936, 0x00008778 }, /* GL_BUMP_TEX_UNITS_ATI */ + { 1958, 0x00001400 }, /* GL_BYTE */ + { 1966, 0x00002A24 }, /* GL_C3F_V3F */ + { 1977, 0x00002A26 }, /* GL_C4F_N3F_V3F */ + { 1992, 0x00002A22 }, /* GL_C4UB_V2F */ + { 2004, 0x00002A23 }, /* GL_C4UB_V3F */ + { 2016, 0x00000901 }, /* GL_CCW */ + { 2023, 0x00002900 }, /* GL_CLAMP */ + { 2032, 0x0000812D }, /* GL_CLAMP_TO_BORDER */ + { 2051, 0x0000812D }, /* GL_CLAMP_TO_BORDER_ARB */ + { 2074, 0x0000812D }, /* GL_CLAMP_TO_BORDER_SGIS */ + { 2098, 0x0000812F }, /* GL_CLAMP_TO_EDGE */ + { 2115, 0x0000812F }, /* GL_CLAMP_TO_EDGE_SGIS */ + { 2137, 0x00001500 }, /* GL_CLEAR */ + { 2146, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE */ + { 2171, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE_ARB */ + { 2200, 0xFFFFFFFF }, /* GL_CLIENT_ALL_ATTRIB_BITS */ + { 2226, 0x00000BB1 }, /* GL_CLIENT_ATTRIB_STACK_DEPTH */ + { 2255, 0x00000001 }, /* GL_CLIENT_PIXEL_STORE_BIT */ + { 2281, 0x00000002 }, /* GL_CLIENT_VERTEX_ARRAY_BIT */ + { 2308, 0x00003000 }, /* GL_CLIP_PLANE0 */ + { 2323, 0x00003001 }, /* GL_CLIP_PLANE1 */ + { 2338, 0x00003002 }, /* GL_CLIP_PLANE2 */ + { 2353, 0x00003003 }, /* GL_CLIP_PLANE3 */ + { 2368, 0x00003004 }, /* GL_CLIP_PLANE4 */ + { 2383, 0x00003005 }, /* GL_CLIP_PLANE5 */ + { 2398, 0x000080F0 }, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */ + { 2431, 0x00000A00 }, /* GL_COEFF */ + { 2440, 0x00001800 }, /* GL_COLOR */ + { 2449, 0x00008076 }, /* GL_COLOR_ARRAY */ + { 2464, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING */ + { 2494, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING_ARB */ + { 2528, 0x00008090 }, /* GL_COLOR_ARRAY_POINTER */ + { 2551, 0x00008081 }, /* GL_COLOR_ARRAY_SIZE */ + { 2571, 0x00008083 }, /* GL_COLOR_ARRAY_STRIDE */ + { 2593, 0x00008082 }, /* GL_COLOR_ARRAY_TYPE */ + { 2613, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0 */ + { 2634, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0_EXT */ + { 2659, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1 */ + { 2680, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10 */ + { 2702, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10_EXT */ + { 2728, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11 */ + { 2750, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11_EXT */ + { 2776, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12 */ + { 2798, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12_EXT */ + { 2824, 0x00008CED }, /* GL_COLOR_ATTACHMENT13 */ + { 2846, 0x00008CED }, /* GL_COLOR_ATTACHMENT13_EXT */ + { 2872, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14 */ + { 2894, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14_EXT */ + { 2920, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15 */ + { 2942, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15_EXT */ + { 2968, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1_EXT */ + { 2993, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2 */ + { 3014, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2_EXT */ + { 3039, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3 */ + { 3060, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3_EXT */ + { 3085, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4 */ + { 3106, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4_EXT */ + { 3131, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5 */ + { 3152, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5_EXT */ + { 3177, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6 */ + { 3198, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6_EXT */ + { 3223, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7 */ + { 3244, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7_EXT */ + { 3269, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8 */ + { 3290, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8_EXT */ + { 3315, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9 */ + { 3336, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9_EXT */ + { 3361, 0x00004000 }, /* GL_COLOR_BUFFER_BIT */ + { 3381, 0x00000C22 }, /* GL_COLOR_CLEAR_VALUE */ + { 3402, 0x00001900 }, /* GL_COLOR_INDEX */ + { 3417, 0x00001603 }, /* GL_COLOR_INDEXES */ + { 3434, 0x00000BF2 }, /* GL_COLOR_LOGIC_OP */ + { 3452, 0x00000B57 }, /* GL_COLOR_MATERIAL */ + { 3470, 0x00000B55 }, /* GL_COLOR_MATERIAL_FACE */ + { 3493, 0x00000B56 }, /* GL_COLOR_MATERIAL_PARAMETER */ + { 3521, 0x000080B1 }, /* GL_COLOR_MATRIX */ + { 3537, 0x000080B1 }, /* GL_COLOR_MATRIX_SGI */ + { 3557, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH */ + { 3585, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH_SGI */ + { 3617, 0x00008458 }, /* GL_COLOR_SUM */ + { 3630, 0x00008458 }, /* GL_COLOR_SUM_ARB */ + { 3647, 0x000080D0 }, /* GL_COLOR_TABLE */ + { 3662, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE */ + { 3688, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_EXT */ + { 3718, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_SGI */ + { 3748, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS */ + { 3768, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS_SGI */ + { 3792, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE */ + { 3817, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_EXT */ + { 3846, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_SGI */ + { 3875, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT */ + { 3897, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_EXT */ + { 3923, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_SGI */ + { 3949, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE */ + { 3975, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_EXT */ + { 4005, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_SGI */ + { 4035, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE */ + { 4065, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_EXT */ + { 4099, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_SGI */ + { 4133, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE */ + { 4163, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_EXT */ + { 4197, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_SGI */ + { 4231, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE */ + { 4255, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_EXT */ + { 4283, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_SGI */ + { 4311, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE */ + { 4332, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE_SGI */ + { 4357, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH */ + { 4378, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_EXT */ + { 4403, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_SGI */ + { 4428, 0x00000C23 }, /* GL_COLOR_WRITEMASK */ + { 4447, 0x00008570 }, /* GL_COMBINE */ + { 4458, 0x00008503 }, /* GL_COMBINE4 */ + { 4470, 0x00008572 }, /* GL_COMBINE_ALPHA */ + { 4487, 0x00008572 }, /* GL_COMBINE_ALPHA_ARB */ + { 4508, 0x00008572 }, /* GL_COMBINE_ALPHA_EXT */ + { 4529, 0x00008570 }, /* GL_COMBINE_ARB */ + { 4544, 0x00008570 }, /* GL_COMBINE_EXT */ + { 4559, 0x00008571 }, /* GL_COMBINE_RGB */ + { 4574, 0x00008571 }, /* GL_COMBINE_RGB_ARB */ + { 4593, 0x00008571 }, /* GL_COMBINE_RGB_EXT */ + { 4612, 0x0000884E }, /* GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT */ + { 4648, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE */ + { 4672, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE_ARB */ + { 4700, 0x00001300 }, /* GL_COMPILE */ + { 4711, 0x00001301 }, /* GL_COMPILE_AND_EXECUTE */ + { 4734, 0x00008B81 }, /* GL_COMPILE_STATUS */ + { 4752, 0x000084E9 }, /* GL_COMPRESSED_ALPHA */ + { 4772, 0x000084E9 }, /* GL_COMPRESSED_ALPHA_ARB */ + { 4796, 0x000084EC }, /* GL_COMPRESSED_INTENSITY */ + { 4820, 0x000084EC }, /* GL_COMPRESSED_INTENSITY_ARB */ + { 4848, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE */ + { 4872, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA */ + { 4902, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA_ARB */ + { 4936, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE_ARB */ + { 4964, 0x000084ED }, /* GL_COMPRESSED_RGB */ + { 4982, 0x000084EE }, /* GL_COMPRESSED_RGBA */ + { 5001, 0x000084EE }, /* GL_COMPRESSED_RGBA_ARB */ + { 5024, 0x000086B1 }, /* GL_COMPRESSED_RGBA_FXT1_3DFX */ + { 5053, 0x000083F1 }, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */ + { 5086, 0x000083F2 }, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */ + { 5119, 0x000083F3 }, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */ + { 5152, 0x000084ED }, /* GL_COMPRESSED_RGB_ARB */ + { 5174, 0x000086B0 }, /* GL_COMPRESSED_RGB_FXT1_3DFX */ + { 5202, 0x000083F0 }, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */ + { 5234, 0x000086A3 }, /* GL_COMPRESSED_TEXTURE_FORMATS */ + { 5264, 0x00008576 }, /* GL_CONSTANT */ + { 5276, 0x00008003 }, /* GL_CONSTANT_ALPHA */ + { 5294, 0x00008003 }, /* GL_CONSTANT_ALPHA_EXT */ + { 5316, 0x00008576 }, /* GL_CONSTANT_ARB */ + { 5332, 0x00001207 }, /* GL_CONSTANT_ATTENUATION */ + { 5356, 0x00008151 }, /* GL_CONSTANT_BORDER_HP */ + { 5378, 0x00008001 }, /* GL_CONSTANT_COLOR */ + { 5396, 0x00008001 }, /* GL_CONSTANT_COLOR_EXT */ + { 5418, 0x00008576 }, /* GL_CONSTANT_EXT */ + { 5434, 0x00008010 }, /* GL_CONVOLUTION_1D */ + { 5452, 0x00008011 }, /* GL_CONVOLUTION_2D */ + { 5470, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR */ + { 5498, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR_HP */ + { 5529, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE */ + { 5556, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE_EXT */ + { 5587, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS */ + { 5614, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS_EXT */ + { 5645, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE */ + { 5673, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE_EXT */ + { 5705, 0x00008017 }, /* GL_CONVOLUTION_FORMAT */ + { 5727, 0x00008017 }, /* GL_CONVOLUTION_FORMAT_EXT */ + { 5753, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT */ + { 5775, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT_EXT */ + { 5801, 0x00008018 }, /* GL_CONVOLUTION_WIDTH */ + { 5822, 0x00008018 }, /* GL_CONVOLUTION_WIDTH_EXT */ + { 5847, 0x00008862 }, /* GL_COORD_REPLACE */ + { 5864, 0x00008862 }, /* GL_COORD_REPLACE_ARB */ + { 5885, 0x00008862 }, /* GL_COORD_REPLACE_NV */ + { 5905, 0x00001503 }, /* GL_COPY */ + { 5913, 0x0000150C }, /* GL_COPY_INVERTED */ + { 5930, 0x00000706 }, /* GL_COPY_PIXEL_TOKEN */ + { 5950, 0x00000B44 }, /* GL_CULL_FACE */ + { 5963, 0x00000B45 }, /* GL_CULL_FACE_MODE */ + { 5981, 0x000081AA }, /* GL_CULL_VERTEX_EXT */ + { 6000, 0x000081AC }, /* GL_CULL_VERTEX_EYE_POSITION_EXT */ + { 6032, 0x000081AB }, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */ + { 6067, 0x00008626 }, /* GL_CURRENT_ATTRIB_NV */ + { 6088, 0x00000001 }, /* GL_CURRENT_BIT */ + { 6103, 0x00000B00 }, /* GL_CURRENT_COLOR */ + { 6120, 0x00008453 }, /* GL_CURRENT_FOG_COORD */ + { 6141, 0x00008453 }, /* GL_CURRENT_FOG_COORDINATE */ + { 6167, 0x00000B01 }, /* GL_CURRENT_INDEX */ + { 6184, 0x00008641 }, /* GL_CURRENT_MATRIX_ARB */ + { 6206, 0x00008845 }, /* GL_CURRENT_MATRIX_INDEX_ARB */ + { 6234, 0x00008641 }, /* GL_CURRENT_MATRIX_NV */ + { 6255, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */ + { 6289, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */ + { 6322, 0x00000B02 }, /* GL_CURRENT_NORMAL */ + { 6340, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_ARB */ + { 6370, 0x00008B8D }, /* GL_CURRENT_PROGRAM */ + { 6389, 0x00008865 }, /* GL_CURRENT_QUERY */ + { 6406, 0x00008865 }, /* GL_CURRENT_QUERY_ARB */ + { 6427, 0x00000B04 }, /* GL_CURRENT_RASTER_COLOR */ + { 6451, 0x00000B09 }, /* GL_CURRENT_RASTER_DISTANCE */ + { 6478, 0x00000B05 }, /* GL_CURRENT_RASTER_INDEX */ + { 6502, 0x00000B07 }, /* GL_CURRENT_RASTER_POSITION */ + { 6529, 0x00000B08 }, /* GL_CURRENT_RASTER_POSITION_VALID */ + { 6562, 0x00000B06 }, /* GL_CURRENT_RASTER_TEXTURE_COORDS */ + { 6595, 0x00008459 }, /* GL_CURRENT_SECONDARY_COLOR */ + { 6622, 0x00000B03 }, /* GL_CURRENT_TEXTURE_COORDS */ + { 6648, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB */ + { 6673, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB_ARB */ + { 6702, 0x000086A8 }, /* GL_CURRENT_WEIGHT_ARB */ + { 6724, 0x00000900 }, /* GL_CW */ + { 6730, 0x0000875B }, /* GL_DEBUG_ASSERT_MESA */ + { 6751, 0x00008759 }, /* GL_DEBUG_OBJECT_MESA */ + { 6772, 0x0000875A }, /* GL_DEBUG_PRINT_MESA */ + { 6792, 0x00002101 }, /* GL_DECAL */ + { 6801, 0x00001E03 }, /* GL_DECR */ + { 6809, 0x00008508 }, /* GL_DECR_WRAP */ + { 6822, 0x00008508 }, /* GL_DECR_WRAP_EXT */ + { 6839, 0x00008B80 }, /* GL_DELETE_STATUS */ + { 6856, 0x00001801 }, /* GL_DEPTH */ + { 6865, 0x000088F0 }, /* GL_DEPTH24_STENCIL8 */ + { 6885, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT */ + { 6905, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_EXT */ + { 6929, 0x00000D1F }, /* GL_DEPTH_BIAS */ + { 6943, 0x00000D56 }, /* GL_DEPTH_BITS */ + { 6957, 0x00008891 }, /* GL_DEPTH_BOUNDS_EXT */ + { 6977, 0x00008890 }, /* GL_DEPTH_BOUNDS_TEST_EXT */ + { 7002, 0x00000100 }, /* GL_DEPTH_BUFFER_BIT */ + { 7022, 0x0000864F }, /* GL_DEPTH_CLAMP_NV */ + { 7040, 0x00000B73 }, /* GL_DEPTH_CLEAR_VALUE */ + { 7061, 0x00001902 }, /* GL_DEPTH_COMPONENT */ + { 7080, 0x000081A5 }, /* GL_DEPTH_COMPONENT16 */ + { 7101, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_ARB */ + { 7126, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_SGIX */ + { 7152, 0x000081A6 }, /* GL_DEPTH_COMPONENT24 */ + { 7173, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_ARB */ + { 7198, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_SGIX */ + { 7224, 0x000081A7 }, /* GL_DEPTH_COMPONENT32 */ + { 7245, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_ARB */ + { 7270, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_SGIX */ + { 7296, 0x00000B74 }, /* GL_DEPTH_FUNC */ + { 7310, 0x00000B70 }, /* GL_DEPTH_RANGE */ + { 7325, 0x00000D1E }, /* GL_DEPTH_SCALE */ + { 7340, 0x000084F9 }, /* GL_DEPTH_STENCIL */ + { 7357, 0x0000821A }, /* GL_DEPTH_STENCIL_ATTACHMENT */ + { 7385, 0x000084F9 }, /* GL_DEPTH_STENCIL_NV */ + { 7405, 0x0000886F }, /* GL_DEPTH_STENCIL_TO_BGRA_NV */ + { 7433, 0x0000886E }, /* GL_DEPTH_STENCIL_TO_RGBA_NV */ + { 7461, 0x00000B71 }, /* GL_DEPTH_TEST */ + { 7475, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE */ + { 7497, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE_ARB */ + { 7523, 0x00000B72 }, /* GL_DEPTH_WRITEMASK */ + { 7542, 0x00001201 }, /* GL_DIFFUSE */ + { 7553, 0x00000BD0 }, /* GL_DITHER */ + { 7563, 0x00000A02 }, /* GL_DOMAIN */ + { 7573, 0x00001100 }, /* GL_DONT_CARE */ + { 7586, 0x000086AE }, /* GL_DOT3_RGB */ + { 7598, 0x000086AF }, /* GL_DOT3_RGBA */ + { 7611, 0x000086AF }, /* GL_DOT3_RGBA_ARB */ + { 7628, 0x00008741 }, /* GL_DOT3_RGBA_EXT */ + { 7645, 0x000086AE }, /* GL_DOT3_RGB_ARB */ + { 7661, 0x00008740 }, /* GL_DOT3_RGB_EXT */ + { 7677, 0x0000140A }, /* GL_DOUBLE */ + { 7687, 0x00000C32 }, /* GL_DOUBLEBUFFER */ + { 7703, 0x00000C01 }, /* GL_DRAW_BUFFER */ + { 7718, 0x00008825 }, /* GL_DRAW_BUFFER0 */ + { 7734, 0x00008825 }, /* GL_DRAW_BUFFER0_ARB */ + { 7754, 0x00008825 }, /* GL_DRAW_BUFFER0_ATI */ + { 7774, 0x00008826 }, /* GL_DRAW_BUFFER1 */ + { 7790, 0x0000882F }, /* GL_DRAW_BUFFER10 */ + { 7807, 0x0000882F }, /* GL_DRAW_BUFFER10_ARB */ + { 7828, 0x0000882F }, /* GL_DRAW_BUFFER10_ATI */ + { 7849, 0x00008830 }, /* GL_DRAW_BUFFER11 */ + { 7866, 0x00008830 }, /* GL_DRAW_BUFFER11_ARB */ + { 7887, 0x00008830 }, /* GL_DRAW_BUFFER11_ATI */ + { 7908, 0x00008831 }, /* GL_DRAW_BUFFER12 */ + { 7925, 0x00008831 }, /* GL_DRAW_BUFFER12_ARB */ + { 7946, 0x00008831 }, /* GL_DRAW_BUFFER12_ATI */ + { 7967, 0x00008832 }, /* GL_DRAW_BUFFER13 */ + { 7984, 0x00008832 }, /* GL_DRAW_BUFFER13_ARB */ + { 8005, 0x00008832 }, /* GL_DRAW_BUFFER13_ATI */ + { 8026, 0x00008833 }, /* GL_DRAW_BUFFER14 */ + { 8043, 0x00008833 }, /* GL_DRAW_BUFFER14_ARB */ + { 8064, 0x00008833 }, /* GL_DRAW_BUFFER14_ATI */ + { 8085, 0x00008834 }, /* GL_DRAW_BUFFER15 */ + { 8102, 0x00008834 }, /* GL_DRAW_BUFFER15_ARB */ + { 8123, 0x00008834 }, /* GL_DRAW_BUFFER15_ATI */ + { 8144, 0x00008826 }, /* GL_DRAW_BUFFER1_ARB */ + { 8164, 0x00008826 }, /* GL_DRAW_BUFFER1_ATI */ + { 8184, 0x00008827 }, /* GL_DRAW_BUFFER2 */ + { 8200, 0x00008827 }, /* GL_DRAW_BUFFER2_ARB */ + { 8220, 0x00008827 }, /* GL_DRAW_BUFFER2_ATI */ + { 8240, 0x00008828 }, /* GL_DRAW_BUFFER3 */ + { 8256, 0x00008828 }, /* GL_DRAW_BUFFER3_ARB */ + { 8276, 0x00008828 }, /* GL_DRAW_BUFFER3_ATI */ + { 8296, 0x00008829 }, /* GL_DRAW_BUFFER4 */ + { 8312, 0x00008829 }, /* GL_DRAW_BUFFER4_ARB */ + { 8332, 0x00008829 }, /* GL_DRAW_BUFFER4_ATI */ + { 8352, 0x0000882A }, /* GL_DRAW_BUFFER5 */ + { 8368, 0x0000882A }, /* GL_DRAW_BUFFER5_ARB */ + { 8388, 0x0000882A }, /* GL_DRAW_BUFFER5_ATI */ + { 8408, 0x0000882B }, /* GL_DRAW_BUFFER6 */ + { 8424, 0x0000882B }, /* GL_DRAW_BUFFER6_ARB */ + { 8444, 0x0000882B }, /* GL_DRAW_BUFFER6_ATI */ + { 8464, 0x0000882C }, /* GL_DRAW_BUFFER7 */ + { 8480, 0x0000882C }, /* GL_DRAW_BUFFER7_ARB */ + { 8500, 0x0000882C }, /* GL_DRAW_BUFFER7_ATI */ + { 8520, 0x0000882D }, /* GL_DRAW_BUFFER8 */ + { 8536, 0x0000882D }, /* GL_DRAW_BUFFER8_ARB */ + { 8556, 0x0000882D }, /* GL_DRAW_BUFFER8_ATI */ + { 8576, 0x0000882E }, /* GL_DRAW_BUFFER9 */ + { 8592, 0x0000882E }, /* GL_DRAW_BUFFER9_ARB */ + { 8612, 0x0000882E }, /* GL_DRAW_BUFFER9_ATI */ + { 8632, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER */ + { 8652, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */ + { 8684, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER_EXT */ + { 8708, 0x00000705 }, /* GL_DRAW_PIXEL_TOKEN */ + { 8728, 0x00000304 }, /* GL_DST_ALPHA */ + { 8741, 0x00000306 }, /* GL_DST_COLOR */ + { 8754, 0x0000877A }, /* GL_DU8DV8_ATI */ + { 8768, 0x00008779 }, /* GL_DUDV_ATI */ + { 8780, 0x000088EA }, /* GL_DYNAMIC_COPY */ + { 8796, 0x000088EA }, /* GL_DYNAMIC_COPY_ARB */ + { 8816, 0x000088E8 }, /* GL_DYNAMIC_DRAW */ + { 8832, 0x000088E8 }, /* GL_DYNAMIC_DRAW_ARB */ + { 8852, 0x000088E9 }, /* GL_DYNAMIC_READ */ + { 8868, 0x000088E9 }, /* GL_DYNAMIC_READ_ARB */ + { 8888, 0x00000B43 }, /* GL_EDGE_FLAG */ + { 8901, 0x00008079 }, /* GL_EDGE_FLAG_ARRAY */ + { 8920, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */ + { 8954, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */ + { 8992, 0x00008093 }, /* GL_EDGE_FLAG_ARRAY_POINTER */ + { 9019, 0x0000808C }, /* GL_EDGE_FLAG_ARRAY_STRIDE */ + { 9045, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER */ + { 9069, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */ + { 9101, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */ + { 9137, 0x00001600 }, /* GL_EMISSION */ + { 9149, 0x00002000 }, /* GL_ENABLE_BIT */ + { 9163, 0x00000202 }, /* GL_EQUAL */ + { 9172, 0x00001509 }, /* GL_EQUIV */ + { 9181, 0x00010000 }, /* GL_EVAL_BIT */ + { 9193, 0x00000800 }, /* GL_EXP */ + { 9200, 0x00000801 }, /* GL_EXP2 */ + { 9208, 0x00001F03 }, /* GL_EXTENSIONS */ + { 9222, 0x00002400 }, /* GL_EYE_LINEAR */ + { 9236, 0x00002502 }, /* GL_EYE_PLANE */ + { 9249, 0x0000855C }, /* GL_EYE_PLANE_ABSOLUTE_NV */ + { 9274, 0x0000855B }, /* GL_EYE_RADIAL_NV */ + { 9291, 0x00000000 }, /* GL_FALSE */ + { 9300, 0x00001101 }, /* GL_FASTEST */ + { 9311, 0x00001C01 }, /* GL_FEEDBACK */ + { 9323, 0x00000DF0 }, /* GL_FEEDBACK_BUFFER_POINTER */ + { 9350, 0x00000DF1 }, /* GL_FEEDBACK_BUFFER_SIZE */ + { 9374, 0x00000DF2 }, /* GL_FEEDBACK_BUFFER_TYPE */ + { 9398, 0x00001B02 }, /* GL_FILL */ + { 9406, 0x00001D00 }, /* GL_FLAT */ + { 9414, 0x00001406 }, /* GL_FLOAT */ + { 9423, 0x00008B5A }, /* GL_FLOAT_MAT2 */ + { 9437, 0x00008B5A }, /* GL_FLOAT_MAT2_ARB */ + { 9455, 0x00008B5B }, /* GL_FLOAT_MAT3 */ + { 9469, 0x00008B5B }, /* GL_FLOAT_MAT3_ARB */ + { 9487, 0x00008B5C }, /* GL_FLOAT_MAT4 */ + { 9501, 0x00008B5C }, /* GL_FLOAT_MAT4_ARB */ + { 9519, 0x00008B50 }, /* GL_FLOAT_VEC2 */ + { 9533, 0x00008B50 }, /* GL_FLOAT_VEC2_ARB */ + { 9551, 0x00008B51 }, /* GL_FLOAT_VEC3 */ + { 9565, 0x00008B51 }, /* GL_FLOAT_VEC3_ARB */ + { 9583, 0x00008B52 }, /* GL_FLOAT_VEC4 */ + { 9597, 0x00008B52 }, /* GL_FLOAT_VEC4_ARB */ + { 9615, 0x00000B60 }, /* GL_FOG */ + { 9622, 0x00000080 }, /* GL_FOG_BIT */ + { 9633, 0x00000B66 }, /* GL_FOG_COLOR */ + { 9646, 0x00008451 }, /* GL_FOG_COORD */ + { 9659, 0x00008451 }, /* GL_FOG_COORDINATE */ + { 9677, 0x00008457 }, /* GL_FOG_COORDINATE_ARRAY */ + { 9701, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */ + { 9740, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */ + { 9783, 0x00008456 }, /* GL_FOG_COORDINATE_ARRAY_POINTER */ + { 9815, 0x00008455 }, /* GL_FOG_COORDINATE_ARRAY_STRIDE */ + { 9846, 0x00008454 }, /* GL_FOG_COORDINATE_ARRAY_TYPE */ + { 9875, 0x00008450 }, /* GL_FOG_COORDINATE_SOURCE */ + { 9900, 0x00008457 }, /* GL_FOG_COORD_ARRAY */ + { 9919, 0x0000889D }, /* GL_FOG_COORD_ARRAY_BUFFER_BINDING */ + { 9953, 0x00008456 }, /* GL_FOG_COORD_ARRAY_POINTER */ + { 9980, 0x00008455 }, /* GL_FOG_COORD_ARRAY_STRIDE */ + { 10006, 0x00008454 }, /* GL_FOG_COORD_ARRAY_TYPE */ + { 10030, 0x00008450 }, /* GL_FOG_COORD_SRC */ + { 10047, 0x00000B62 }, /* GL_FOG_DENSITY */ + { 10062, 0x0000855A }, /* GL_FOG_DISTANCE_MODE_NV */ + { 10086, 0x00000B64 }, /* GL_FOG_END */ + { 10097, 0x00000C54 }, /* GL_FOG_HINT */ + { 10109, 0x00000B61 }, /* GL_FOG_INDEX */ + { 10122, 0x00000B65 }, /* GL_FOG_MODE */ + { 10134, 0x00008198 }, /* GL_FOG_OFFSET_SGIX */ + { 10153, 0x00008199 }, /* GL_FOG_OFFSET_VALUE_SGIX */ + { 10178, 0x00000B63 }, /* GL_FOG_START */ + { 10191, 0x00008452 }, /* GL_FRAGMENT_DEPTH */ + { 10209, 0x00008804 }, /* GL_FRAGMENT_PROGRAM_ARB */ + { 10233, 0x00008B30 }, /* GL_FRAGMENT_SHADER */ + { 10252, 0x00008B30 }, /* GL_FRAGMENT_SHADER_ARB */ + { 10275, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */ + { 10310, 0x00008D40 }, /* GL_FRAMEBUFFER */ + { 10325, 0x00008215 }, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ + { 10362, 0x00008214 }, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ + { 10398, 0x00008210 }, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ + { 10439, 0x00008211 }, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ + { 10480, 0x00008216 }, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ + { 10517, 0x00008213 }, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ + { 10554, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ + { 10592, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */ + { 10634, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ + { 10672, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */ + { 10714, 0x00008212 }, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ + { 10749, 0x00008217 }, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ + { 10788, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */ + { 10837, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ + { 10885, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */ + { 10937, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ + { 10977, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ + { 11021, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ + { 11061, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */ + { 11105, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_EXT */ + { 11132, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE */ + { 11156, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_EXT */ + { 11184, 0x00008218 }, /* GL_FRAMEBUFFER_DEFAULT */ + { 11207, 0x00008D40 }, /* GL_FRAMEBUFFER_EXT */ + { 11226, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ + { 11263, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */ + { 11304, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */ + { 11345, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */ + { 11387, 0x00008CD8 }, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */ + { 11438, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */ + { 11476, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ + { 11521, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */ + { 11570, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ + { 11608, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */ + { 11650, 0x00008CDE }, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */ + { 11682, 0x00008219 }, /* GL_FRAMEBUFFER_UNDEFINED */ + { 11707, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED */ + { 11734, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */ + { 11765, 0x00000404 }, /* GL_FRONT */ + { 11774, 0x00000408 }, /* GL_FRONT_AND_BACK */ + { 11792, 0x00000B46 }, /* GL_FRONT_FACE */ + { 11806, 0x00000400 }, /* GL_FRONT_LEFT */ + { 11820, 0x00000401 }, /* GL_FRONT_RIGHT */ + { 11835, 0x00008006 }, /* GL_FUNC_ADD */ + { 11847, 0x00008006 }, /* GL_FUNC_ADD_EXT */ + { 11863, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT */ + { 11888, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_EXT */ + { 11917, 0x0000800A }, /* GL_FUNC_SUBTRACT */ + { 11934, 0x0000800A }, /* GL_FUNC_SUBTRACT_EXT */ + { 11955, 0x00008191 }, /* GL_GENERATE_MIPMAP */ + { 11974, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT */ + { 11998, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT_SGIS */ + { 12027, 0x00008191 }, /* GL_GENERATE_MIPMAP_SGIS */ + { 12051, 0x00000206 }, /* GL_GEQUAL */ + { 12061, 0x00008009 }, /* GL_GL_BLEND_EQUATION_RGB */ + { 12086, 0x00008C4A }, /* GL_GL_COMPRESSED_SLUMINANCE */ + { 12114, 0x00008C4B }, /* GL_GL_COMPRESSED_SLUMINANCE_ALPHA */ + { 12148, 0x00008C48 }, /* GL_GL_COMPRESSED_SRGB */ + { 12170, 0x00008C49 }, /* GL_GL_COMPRESSED_SRGB_ALPHA */ + { 12198, 0x0000845F }, /* GL_GL_CURRENT_RASTER_SECONDARY_COLOR */ + { 12235, 0x00008B65 }, /* GL_GL_FLOAT_MAT2x3 */ + { 12254, 0x00008B66 }, /* GL_GL_FLOAT_MAT2x4 */ + { 12273, 0x00008B67 }, /* GL_GL_FLOAT_MAT3x2 */ + { 12292, 0x00008B68 }, /* GL_GL_FLOAT_MAT3x4 */ + { 12311, 0x00008B69 }, /* GL_GL_FLOAT_MAT4x2 */ + { 12330, 0x00008B6A }, /* GL_GL_FLOAT_MAT4x3 */ + { 12349, 0x000088EB }, /* GL_GL_PIXEL_PACK_BUFFER */ + { 12373, 0x000088ED }, /* GL_GL_PIXEL_PACK_BUFFER_BINDING */ + { 12405, 0x000088EC }, /* GL_GL_PIXEL_UNPACK_BUFFER */ + { 12431, 0x000088EF }, /* GL_GL_PIXEL_UNPACK_BUFFER_BINDING */ + { 12465, 0x00008C46 }, /* GL_GL_SLUMINANCE */ + { 12482, 0x00008C47 }, /* GL_GL_SLUMINANCE8 */ + { 12500, 0x00008C45 }, /* GL_GL_SLUMINANCE8_ALPHA8 */ + { 12525, 0x00008C44 }, /* GL_GL_SLUMINANCE_ALPHA */ + { 12548, 0x00008C40 }, /* GL_GL_SRGB */ + { 12559, 0x00008C41 }, /* GL_GL_SRGB8 */ + { 12571, 0x00008C43 }, /* GL_GL_SRGB8_ALPHA8 */ + { 12590, 0x00008C42 }, /* GL_GL_SRGB_ALPHA */ + { 12607, 0x00000204 }, /* GL_GREATER */ + { 12618, 0x00001904 }, /* GL_GREEN */ + { 12627, 0x00000D19 }, /* GL_GREEN_BIAS */ + { 12641, 0x00000D53 }, /* GL_GREEN_BITS */ + { 12655, 0x00000D18 }, /* GL_GREEN_SCALE */ + { 12670, 0x00008000 }, /* GL_HINT_BIT */ + { 12682, 0x00008024 }, /* GL_HISTOGRAM */ + { 12695, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE */ + { 12719, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE_EXT */ + { 12747, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE */ + { 12770, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE_EXT */ + { 12797, 0x00008024 }, /* GL_HISTOGRAM_EXT */ + { 12814, 0x00008027 }, /* GL_HISTOGRAM_FORMAT */ + { 12834, 0x00008027 }, /* GL_HISTOGRAM_FORMAT_EXT */ + { 12858, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE */ + { 12882, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE_EXT */ + { 12910, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE */ + { 12938, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */ + { 12970, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE */ + { 12992, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE_EXT */ + { 13018, 0x0000802D }, /* GL_HISTOGRAM_SINK */ + { 13036, 0x0000802D }, /* GL_HISTOGRAM_SINK_EXT */ + { 13058, 0x00008026 }, /* GL_HISTOGRAM_WIDTH */ + { 13077, 0x00008026 }, /* GL_HISTOGRAM_WIDTH_EXT */ + { 13100, 0x0000862A }, /* GL_IDENTITY_NV */ + { 13115, 0x00008150 }, /* GL_IGNORE_BORDER_HP */ + { 13135, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */ + { 13175, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */ + { 13213, 0x00001E02 }, /* GL_INCR */ + { 13221, 0x00008507 }, /* GL_INCR_WRAP */ + { 13234, 0x00008507 }, /* GL_INCR_WRAP_EXT */ + { 13251, 0x00008222 }, /* GL_INDEX */ + { 13260, 0x00008077 }, /* GL_INDEX_ARRAY */ + { 13275, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING */ + { 13305, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */ + { 13339, 0x00008091 }, /* GL_INDEX_ARRAY_POINTER */ + { 13362, 0x00008086 }, /* GL_INDEX_ARRAY_STRIDE */ + { 13384, 0x00008085 }, /* GL_INDEX_ARRAY_TYPE */ + { 13404, 0x00000D51 }, /* GL_INDEX_BITS */ + { 13418, 0x00000C20 }, /* GL_INDEX_CLEAR_VALUE */ + { 13439, 0x00000BF1 }, /* GL_INDEX_LOGIC_OP */ + { 13457, 0x00000C30 }, /* GL_INDEX_MODE */ + { 13471, 0x00000D13 }, /* GL_INDEX_OFFSET */ + { 13487, 0x00000D12 }, /* GL_INDEX_SHIFT */ + { 13502, 0x00000C21 }, /* GL_INDEX_WRITEMASK */ + { 13521, 0x00008B84 }, /* GL_INFO_LOG_LENGTH */ + { 13540, 0x00001404 }, /* GL_INT */ + { 13547, 0x00008049 }, /* GL_INTENSITY */ + { 13560, 0x0000804C }, /* GL_INTENSITY12 */ + { 13575, 0x0000804C }, /* GL_INTENSITY12_EXT */ + { 13594, 0x0000804D }, /* GL_INTENSITY16 */ + { 13609, 0x0000804D }, /* GL_INTENSITY16_EXT */ + { 13628, 0x0000804A }, /* GL_INTENSITY4 */ + { 13642, 0x0000804A }, /* GL_INTENSITY4_EXT */ + { 13660, 0x0000804B }, /* GL_INTENSITY8 */ + { 13674, 0x0000804B }, /* GL_INTENSITY8_EXT */ + { 13692, 0x00008049 }, /* GL_INTENSITY_EXT */ + { 13709, 0x00008575 }, /* GL_INTERPOLATE */ + { 13724, 0x00008575 }, /* GL_INTERPOLATE_ARB */ + { 13743, 0x00008575 }, /* GL_INTERPOLATE_EXT */ + { 13762, 0x00008B53 }, /* GL_INT_VEC2 */ + { 13774, 0x00008B53 }, /* GL_INT_VEC2_ARB */ + { 13790, 0x00008B54 }, /* GL_INT_VEC3 */ + { 13802, 0x00008B54 }, /* GL_INT_VEC3_ARB */ + { 13818, 0x00008B55 }, /* GL_INT_VEC4 */ + { 13830, 0x00008B55 }, /* GL_INT_VEC4_ARB */ + { 13846, 0x00000500 }, /* GL_INVALID_ENUM */ + { 13862, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION */ + { 13895, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */ + { 13932, 0x00000502 }, /* GL_INVALID_OPERATION */ + { 13953, 0x00000501 }, /* GL_INVALID_VALUE */ + { 13970, 0x0000862B }, /* GL_INVERSE_NV */ + { 13984, 0x0000862D }, /* GL_INVERSE_TRANSPOSE_NV */ + { 14008, 0x0000150A }, /* GL_INVERT */ + { 14018, 0x00001E00 }, /* GL_KEEP */ + { 14026, 0x00000406 }, /* GL_LEFT */ + { 14034, 0x00000203 }, /* GL_LEQUAL */ + { 14044, 0x00000201 }, /* GL_LESS */ + { 14052, 0x00004000 }, /* GL_LIGHT0 */ + { 14062, 0x00004001 }, /* GL_LIGHT1 */ + { 14072, 0x00004002 }, /* GL_LIGHT2 */ + { 14082, 0x00004003 }, /* GL_LIGHT3 */ + { 14092, 0x00004004 }, /* GL_LIGHT4 */ + { 14102, 0x00004005 }, /* GL_LIGHT5 */ + { 14112, 0x00004006 }, /* GL_LIGHT6 */ + { 14122, 0x00004007 }, /* GL_LIGHT7 */ + { 14132, 0x00000B50 }, /* GL_LIGHTING */ + { 14144, 0x00000040 }, /* GL_LIGHTING_BIT */ + { 14160, 0x00000B53 }, /* GL_LIGHT_MODEL_AMBIENT */ + { 14183, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL */ + { 14212, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */ + { 14245, 0x00000B51 }, /* GL_LIGHT_MODEL_LOCAL_VIEWER */ + { 14273, 0x00000B52 }, /* GL_LIGHT_MODEL_TWO_SIDE */ + { 14297, 0x00001B01 }, /* GL_LINE */ + { 14305, 0x00002601 }, /* GL_LINEAR */ + { 14315, 0x00001208 }, /* GL_LINEAR_ATTENUATION */ + { 14337, 0x00008170 }, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */ + { 14367, 0x0000844F }, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */ + { 14398, 0x00002703 }, /* GL_LINEAR_MIPMAP_LINEAR */ + { 14422, 0x00002701 }, /* GL_LINEAR_MIPMAP_NEAREST */ + { 14447, 0x00000001 }, /* GL_LINES */ + { 14456, 0x00000004 }, /* GL_LINE_BIT */ + { 14468, 0x00000002 }, /* GL_LINE_LOOP */ + { 14481, 0x00000707 }, /* GL_LINE_RESET_TOKEN */ + { 14501, 0x00000B20 }, /* GL_LINE_SMOOTH */ + { 14516, 0x00000C52 }, /* GL_LINE_SMOOTH_HINT */ + { 14536, 0x00000B24 }, /* GL_LINE_STIPPLE */ + { 14552, 0x00000B25 }, /* GL_LINE_STIPPLE_PATTERN */ + { 14576, 0x00000B26 }, /* GL_LINE_STIPPLE_REPEAT */ + { 14599, 0x00000003 }, /* GL_LINE_STRIP */ + { 14613, 0x00000702 }, /* GL_LINE_TOKEN */ + { 14627, 0x00000B21 }, /* GL_LINE_WIDTH */ + { 14641, 0x00000B23 }, /* GL_LINE_WIDTH_GRANULARITY */ + { 14667, 0x00000B22 }, /* GL_LINE_WIDTH_RANGE */ + { 14687, 0x00008B82 }, /* GL_LINK_STATUS */ + { 14702, 0x00000B32 }, /* GL_LIST_BASE */ + { 14715, 0x00020000 }, /* GL_LIST_BIT */ + { 14727, 0x00000B33 }, /* GL_LIST_INDEX */ + { 14741, 0x00000B30 }, /* GL_LIST_MODE */ + { 14754, 0x00000101 }, /* GL_LOAD */ + { 14762, 0x00000BF1 }, /* GL_LOGIC_OP */ + { 14774, 0x00000BF0 }, /* GL_LOGIC_OP_MODE */ + { 14791, 0x00008CA1 }, /* GL_LOWER_LEFT */ + { 14805, 0x00001909 }, /* GL_LUMINANCE */ + { 14818, 0x00008041 }, /* GL_LUMINANCE12 */ + { 14833, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12 */ + { 14856, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12_EXT */ + { 14883, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4 */ + { 14905, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4_EXT */ + { 14931, 0x00008041 }, /* GL_LUMINANCE12_EXT */ + { 14950, 0x00008042 }, /* GL_LUMINANCE16 */ + { 14965, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16 */ + { 14988, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16_EXT */ + { 15015, 0x00008042 }, /* GL_LUMINANCE16_EXT */ + { 15034, 0x0000803F }, /* GL_LUMINANCE4 */ + { 15048, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4 */ + { 15069, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4_EXT */ + { 15094, 0x0000803F }, /* GL_LUMINANCE4_EXT */ + { 15112, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2 */ + { 15133, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2_EXT */ + { 15158, 0x00008040 }, /* GL_LUMINANCE8 */ + { 15172, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8 */ + { 15193, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8_EXT */ + { 15218, 0x00008040 }, /* GL_LUMINANCE8_EXT */ + { 15236, 0x0000190A }, /* GL_LUMINANCE_ALPHA */ + { 15255, 0x00000D90 }, /* GL_MAP1_COLOR_4 */ + { 15271, 0x00000DD0 }, /* GL_MAP1_GRID_DOMAIN */ + { 15291, 0x00000DD1 }, /* GL_MAP1_GRID_SEGMENTS */ + { 15313, 0x00000D91 }, /* GL_MAP1_INDEX */ + { 15327, 0x00000D92 }, /* GL_MAP1_NORMAL */ + { 15342, 0x00000D93 }, /* GL_MAP1_TEXTURE_COORD_1 */ + { 15366, 0x00000D94 }, /* GL_MAP1_TEXTURE_COORD_2 */ + { 15390, 0x00000D95 }, /* GL_MAP1_TEXTURE_COORD_3 */ + { 15414, 0x00000D96 }, /* GL_MAP1_TEXTURE_COORD_4 */ + { 15438, 0x00000D97 }, /* GL_MAP1_VERTEX_3 */ + { 15455, 0x00000D98 }, /* GL_MAP1_VERTEX_4 */ + { 15472, 0x00008660 }, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */ + { 15500, 0x0000866A }, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */ + { 15529, 0x0000866B }, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */ + { 15558, 0x0000866C }, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */ + { 15587, 0x0000866D }, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */ + { 15616, 0x0000866E }, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */ + { 15645, 0x0000866F }, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */ + { 15674, 0x00008661 }, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */ + { 15702, 0x00008662 }, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */ + { 15730, 0x00008663 }, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */ + { 15758, 0x00008664 }, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */ + { 15786, 0x00008665 }, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */ + { 15814, 0x00008666 }, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */ + { 15842, 0x00008667 }, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */ + { 15870, 0x00008668 }, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */ + { 15898, 0x00008669 }, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */ + { 15926, 0x00000DB0 }, /* GL_MAP2_COLOR_4 */ + { 15942, 0x00000DD2 }, /* GL_MAP2_GRID_DOMAIN */ + { 15962, 0x00000DD3 }, /* GL_MAP2_GRID_SEGMENTS */ + { 15984, 0x00000DB1 }, /* GL_MAP2_INDEX */ + { 15998, 0x00000DB2 }, /* GL_MAP2_NORMAL */ + { 16013, 0x00000DB3 }, /* GL_MAP2_TEXTURE_COORD_1 */ + { 16037, 0x00000DB4 }, /* GL_MAP2_TEXTURE_COORD_2 */ + { 16061, 0x00000DB5 }, /* GL_MAP2_TEXTURE_COORD_3 */ + { 16085, 0x00000DB6 }, /* GL_MAP2_TEXTURE_COORD_4 */ + { 16109, 0x00000DB7 }, /* GL_MAP2_VERTEX_3 */ + { 16126, 0x00000DB8 }, /* GL_MAP2_VERTEX_4 */ + { 16143, 0x00008670 }, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */ + { 16171, 0x0000867A }, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */ + { 16200, 0x0000867B }, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */ + { 16229, 0x0000867C }, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */ + { 16258, 0x0000867D }, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */ + { 16287, 0x0000867E }, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */ + { 16316, 0x0000867F }, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */ + { 16345, 0x00008671 }, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */ + { 16373, 0x00008672 }, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */ + { 16401, 0x00008673 }, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */ + { 16429, 0x00008674 }, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */ + { 16457, 0x00008675 }, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */ + { 16485, 0x00008676 }, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */ + { 16513, 0x00008677 }, /* GL_MAP2_VERTEX_ATTRIB7_4_NV */ + { 16541, 0x00008678 }, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */ + { 16569, 0x00008679 }, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */ + { 16597, 0x00000D10 }, /* GL_MAP_COLOR */ + { 16610, 0x00000D11 }, /* GL_MAP_STENCIL */ + { 16625, 0x000088C0 }, /* GL_MATRIX0_ARB */ + { 16640, 0x00008630 }, /* GL_MATRIX0_NV */ + { 16654, 0x000088CA }, /* GL_MATRIX10_ARB */ + { 16670, 0x000088CB }, /* GL_MATRIX11_ARB */ + { 16686, 0x000088CC }, /* GL_MATRIX12_ARB */ + { 16702, 0x000088CD }, /* GL_MATRIX13_ARB */ + { 16718, 0x000088CE }, /* GL_MATRIX14_ARB */ + { 16734, 0x000088CF }, /* GL_MATRIX15_ARB */ + { 16750, 0x000088D0 }, /* GL_MATRIX16_ARB */ + { 16766, 0x000088D1 }, /* GL_MATRIX17_ARB */ + { 16782, 0x000088D2 }, /* GL_MATRIX18_ARB */ + { 16798, 0x000088D3 }, /* GL_MATRIX19_ARB */ + { 16814, 0x000088C1 }, /* GL_MATRIX1_ARB */ + { 16829, 0x00008631 }, /* GL_MATRIX1_NV */ + { 16843, 0x000088D4 }, /* GL_MATRIX20_ARB */ + { 16859, 0x000088D5 }, /* GL_MATRIX21_ARB */ + { 16875, 0x000088D6 }, /* GL_MATRIX22_ARB */ + { 16891, 0x000088D7 }, /* GL_MATRIX23_ARB */ + { 16907, 0x000088D8 }, /* GL_MATRIX24_ARB */ + { 16923, 0x000088D9 }, /* GL_MATRIX25_ARB */ + { 16939, 0x000088DA }, /* GL_MATRIX26_ARB */ + { 16955, 0x000088DB }, /* GL_MATRIX27_ARB */ + { 16971, 0x000088DC }, /* GL_MATRIX28_ARB */ + { 16987, 0x000088DD }, /* GL_MATRIX29_ARB */ + { 17003, 0x000088C2 }, /* GL_MATRIX2_ARB */ + { 17018, 0x00008632 }, /* GL_MATRIX2_NV */ + { 17032, 0x000088DE }, /* GL_MATRIX30_ARB */ + { 17048, 0x000088DF }, /* GL_MATRIX31_ARB */ + { 17064, 0x000088C3 }, /* GL_MATRIX3_ARB */ + { 17079, 0x00008633 }, /* GL_MATRIX3_NV */ + { 17093, 0x000088C4 }, /* GL_MATRIX4_ARB */ + { 17108, 0x00008634 }, /* GL_MATRIX4_NV */ + { 17122, 0x000088C5 }, /* GL_MATRIX5_ARB */ + { 17137, 0x00008635 }, /* GL_MATRIX5_NV */ + { 17151, 0x000088C6 }, /* GL_MATRIX6_ARB */ + { 17166, 0x00008636 }, /* GL_MATRIX6_NV */ + { 17180, 0x000088C7 }, /* GL_MATRIX7_ARB */ + { 17195, 0x00008637 }, /* GL_MATRIX7_NV */ + { 17209, 0x000088C8 }, /* GL_MATRIX8_ARB */ + { 17224, 0x000088C9 }, /* GL_MATRIX9_ARB */ + { 17239, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_ARB */ + { 17265, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */ + { 17299, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */ + { 17330, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */ + { 17363, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */ + { 17394, 0x00000BA0 }, /* GL_MATRIX_MODE */ + { 17409, 0x00008840 }, /* GL_MATRIX_PALETTE_ARB */ + { 17431, 0x00008008 }, /* GL_MAX */ + { 17438, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE */ + { 17461, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */ + { 17493, 0x00000D35 }, /* GL_MAX_ATTRIB_STACK_DEPTH */ + { 17519, 0x00000D3B }, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */ + { 17552, 0x00008177 }, /* GL_MAX_CLIPMAP_DEPTH_SGIX */ + { 17578, 0x00008178 }, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */ + { 17612, 0x00000D32 }, /* GL_MAX_CLIP_PLANES */ + { 17631, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS_EXT */ + { 17660, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */ + { 17692, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */ + { 17728, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */ + { 17764, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */ + { 17804, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT */ + { 17830, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT_EXT */ + { 17860, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH */ + { 17885, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH_EXT */ + { 17914, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */ + { 17943, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */ + { 17976, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS */ + { 17996, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ARB */ + { 18020, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ATI */ + { 18044, 0x000080E9 }, /* GL_MAX_ELEMENTS_INDICES */ + { 18068, 0x000080E8 }, /* GL_MAX_ELEMENTS_VERTICES */ + { 18093, 0x00000D30 }, /* GL_MAX_EVAL_ORDER */ + { 18111, 0x00008008 }, /* GL_MAX_EXT */ + { 18122, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */ + { 18157, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */ + { 18196, 0x00000D31 }, /* GL_MAX_LIGHTS */ + { 18210, 0x00000B31 }, /* GL_MAX_LIST_NESTING */ + { 18230, 0x00008841 }, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */ + { 18268, 0x00000D36 }, /* GL_MAX_MODELVIEW_STACK_DEPTH */ + { 18297, 0x00000D37 }, /* GL_MAX_NAME_STACK_DEPTH */ + { 18321, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_ARB */ + { 18349, 0x00000D34 }, /* GL_MAX_PIXEL_MAP_TABLE */ + { 18372, 0x000088B1 }, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */ + { 18409, 0x0000880B }, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */ + { 18445, 0x000088AD }, /* GL_MAX_PROGRAM_ATTRIBS_ARB */ + { 18472, 0x000088F5 }, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */ + { 18501, 0x000088B5 }, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */ + { 18535, 0x000088F4 }, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ + { 18571, 0x000088F6 }, /* GL_MAX_PROGRAM_IF_DEPTH_NV */ + { 18598, 0x000088A1 }, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */ + { 18630, 0x000088B4 }, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */ + { 18666, 0x000088F8 }, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */ + { 18695, 0x000088F7 }, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */ + { 18724, 0x0000862F }, /* GL_MAX_PROGRAM_MATRICES_ARB */ + { 18752, 0x0000862E }, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */ + { 18790, 0x000088B3 }, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ + { 18834, 0x0000880E }, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ + { 18877, 0x000088AF }, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */ + { 18911, 0x000088A3 }, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ + { 18950, 0x000088AB }, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */ + { 18987, 0x000088A7 }, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */ + { 19025, 0x00008810 }, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ + { 19068, 0x0000880F }, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ + { 19111, 0x000088A9 }, /* GL_MAX_PROGRAM_PARAMETERS_ARB */ + { 19141, 0x000088A5 }, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */ + { 19172, 0x0000880D }, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */ + { 19208, 0x0000880C }, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */ + { 19244, 0x00000D38 }, /* GL_MAX_PROJECTION_STACK_DEPTH */ + { 19274, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */ + { 19308, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */ + { 19341, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_EXT */ + { 19370, 0x00008D57 }, /* GL_MAX_SAMPLES */ + { 19385, 0x00008504 }, /* GL_MAX_SHININESS_NV */ + { 19405, 0x00008505 }, /* GL_MAX_SPOT_EXPONENT_NV */ + { 19429, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS */ + { 19451, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS_ARB */ + { 19477, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS */ + { 19504, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */ + { 19535, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS */ + { 19559, 0x000084FF }, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */ + { 19593, 0x00000D33 }, /* GL_MAX_TEXTURE_SIZE */ + { 19613, 0x00000D39 }, /* GL_MAX_TEXTURE_STACK_DEPTH */ + { 19640, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS */ + { 19661, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS_ARB */ + { 19686, 0x0000862F }, /* GL_MAX_TRACK_MATRICES_NV */ + { 19711, 0x0000862E }, /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */ + { 19746, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS */ + { 19768, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS_ARB */ + { 19794, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS */ + { 19816, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS_ARB */ + { 19842, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */ + { 19876, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ + { 19914, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */ + { 19947, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */ + { 19984, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_ARB */ + { 20008, 0x00000D3A }, /* GL_MAX_VIEWPORT_DIMS */ + { 20029, 0x00008007 }, /* GL_MIN */ + { 20036, 0x0000802E }, /* GL_MINMAX */ + { 20046, 0x0000802E }, /* GL_MINMAX_EXT */ + { 20060, 0x0000802F }, /* GL_MINMAX_FORMAT */ + { 20077, 0x0000802F }, /* GL_MINMAX_FORMAT_EXT */ + { 20098, 0x00008030 }, /* GL_MINMAX_SINK */ + { 20113, 0x00008030 }, /* GL_MINMAX_SINK_EXT */ + { 20132, 0x00008007 }, /* GL_MIN_EXT */ + { 20143, 0x00008370 }, /* GL_MIRRORED_REPEAT */ + { 20162, 0x00008370 }, /* GL_MIRRORED_REPEAT_ARB */ + { 20185, 0x00008370 }, /* GL_MIRRORED_REPEAT_IBM */ + { 20208, 0x00008742 }, /* GL_MIRROR_CLAMP_ATI */ + { 20228, 0x00008742 }, /* GL_MIRROR_CLAMP_EXT */ + { 20248, 0x00008912 }, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */ + { 20278, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_ATI */ + { 20306, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */ + { 20334, 0x00001700 }, /* GL_MODELVIEW */ + { 20347, 0x00001700 }, /* GL_MODELVIEW0_ARB */ + { 20365, 0x0000872A }, /* GL_MODELVIEW10_ARB */ + { 20384, 0x0000872B }, /* GL_MODELVIEW11_ARB */ + { 20403, 0x0000872C }, /* GL_MODELVIEW12_ARB */ + { 20422, 0x0000872D }, /* GL_MODELVIEW13_ARB */ + { 20441, 0x0000872E }, /* GL_MODELVIEW14_ARB */ + { 20460, 0x0000872F }, /* GL_MODELVIEW15_ARB */ + { 20479, 0x00008730 }, /* GL_MODELVIEW16_ARB */ + { 20498, 0x00008731 }, /* GL_MODELVIEW17_ARB */ + { 20517, 0x00008732 }, /* GL_MODELVIEW18_ARB */ + { 20536, 0x00008733 }, /* GL_MODELVIEW19_ARB */ + { 20555, 0x0000850A }, /* GL_MODELVIEW1_ARB */ + { 20573, 0x00008734 }, /* GL_MODELVIEW20_ARB */ + { 20592, 0x00008735 }, /* GL_MODELVIEW21_ARB */ + { 20611, 0x00008736 }, /* GL_MODELVIEW22_ARB */ + { 20630, 0x00008737 }, /* GL_MODELVIEW23_ARB */ + { 20649, 0x00008738 }, /* GL_MODELVIEW24_ARB */ + { 20668, 0x00008739 }, /* GL_MODELVIEW25_ARB */ + { 20687, 0x0000873A }, /* GL_MODELVIEW26_ARB */ + { 20706, 0x0000873B }, /* GL_MODELVIEW27_ARB */ + { 20725, 0x0000873C }, /* GL_MODELVIEW28_ARB */ + { 20744, 0x0000873D }, /* GL_MODELVIEW29_ARB */ + { 20763, 0x00008722 }, /* GL_MODELVIEW2_ARB */ + { 20781, 0x0000873E }, /* GL_MODELVIEW30_ARB */ + { 20800, 0x0000873F }, /* GL_MODELVIEW31_ARB */ + { 20819, 0x00008723 }, /* GL_MODELVIEW3_ARB */ + { 20837, 0x00008724 }, /* GL_MODELVIEW4_ARB */ + { 20855, 0x00008725 }, /* GL_MODELVIEW5_ARB */ + { 20873, 0x00008726 }, /* GL_MODELVIEW6_ARB */ + { 20891, 0x00008727 }, /* GL_MODELVIEW7_ARB */ + { 20909, 0x00008728 }, /* GL_MODELVIEW8_ARB */ + { 20927, 0x00008729 }, /* GL_MODELVIEW9_ARB */ + { 20945, 0x00000BA6 }, /* GL_MODELVIEW_MATRIX */ + { 20965, 0x00008629 }, /* GL_MODELVIEW_PROJECTION_NV */ + { 20992, 0x00000BA3 }, /* GL_MODELVIEW_STACK_DEPTH */ + { 21017, 0x00002100 }, /* GL_MODULATE */ + { 21029, 0x00008744 }, /* GL_MODULATE_ADD_ATI */ + { 21049, 0x00008745 }, /* GL_MODULATE_SIGNED_ADD_ATI */ + { 21076, 0x00008746 }, /* GL_MODULATE_SUBTRACT_ATI */ + { 21101, 0x00000103 }, /* GL_MULT */ + { 21109, 0x0000809D }, /* GL_MULTISAMPLE */ + { 21124, 0x000086B2 }, /* GL_MULTISAMPLE_3DFX */ + { 21144, 0x0000809D }, /* GL_MULTISAMPLE_ARB */ + { 21163, 0x20000000 }, /* GL_MULTISAMPLE_BIT */ + { 21182, 0x20000000 }, /* GL_MULTISAMPLE_BIT_3DFX */ + { 21206, 0x20000000 }, /* GL_MULTISAMPLE_BIT_ARB */ + { 21229, 0x00008534 }, /* GL_MULTISAMPLE_FILTER_HINT_NV */ + { 21259, 0x00002A25 }, /* GL_N3F_V3F */ + { 21270, 0x00000D70 }, /* GL_NAME_STACK_DEPTH */ + { 21290, 0x0000150E }, /* GL_NAND */ + { 21298, 0x00002600 }, /* GL_NEAREST */ + { 21309, 0x0000844E }, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */ + { 21340, 0x0000844D }, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */ + { 21372, 0x00002702 }, /* GL_NEAREST_MIPMAP_LINEAR */ + { 21397, 0x00002700 }, /* GL_NEAREST_MIPMAP_NEAREST */ + { 21423, 0x00000200 }, /* GL_NEVER */ + { 21432, 0x00001102 }, /* GL_NICEST */ + { 21442, 0x00000000 }, /* GL_NONE */ + { 21450, 0x00001505 }, /* GL_NOOP */ + { 21458, 0x00001508 }, /* GL_NOR */ + { 21465, 0x00000BA1 }, /* GL_NORMALIZE */ + { 21478, 0x00008075 }, /* GL_NORMAL_ARRAY */ + { 21494, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING */ + { 21525, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */ + { 21560, 0x0000808F }, /* GL_NORMAL_ARRAY_POINTER */ + { 21584, 0x0000807F }, /* GL_NORMAL_ARRAY_STRIDE */ + { 21607, 0x0000807E }, /* GL_NORMAL_ARRAY_TYPE */ + { 21628, 0x00008511 }, /* GL_NORMAL_MAP */ + { 21642, 0x00008511 }, /* GL_NORMAL_MAP_ARB */ + { 21660, 0x00008511 }, /* GL_NORMAL_MAP_NV */ + { 21677, 0x00000205 }, /* GL_NOTEQUAL */ + { 21689, 0x00000000 }, /* GL_NO_ERROR */ + { 21701, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */ + { 21735, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */ + { 21773, 0x00008B89 }, /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */ + { 21805, 0x00008B8A }, /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */ + { 21847, 0x00008B86 }, /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */ + { 21877, 0x00008B87 }, /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */ + { 21917, 0x00008B85 }, /* GL_OBJECT_ATTACHED_OBJECTS_ARB */ + { 21948, 0x00008B81 }, /* GL_OBJECT_COMPILE_STATUS_ARB */ + { 21977, 0x00008B80 }, /* GL_OBJECT_DELETE_STATUS_ARB */ + { 22005, 0x00008B84 }, /* GL_OBJECT_INFO_LOG_LENGTH_ARB */ + { 22035, 0x00002401 }, /* GL_OBJECT_LINEAR */ + { 22052, 0x00008B82 }, /* GL_OBJECT_LINK_STATUS_ARB */ + { 22078, 0x00002501 }, /* GL_OBJECT_PLANE */ + { 22094, 0x00008B88 }, /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */ + { 22129, 0x00008B4F }, /* GL_OBJECT_SUBTYPE_ARB */ + { 22151, 0x00008B4E }, /* GL_OBJECT_TYPE_ARB */ + { 22170, 0x00008B83 }, /* GL_OBJECT_VALIDATE_STATUS_ARB */ + { 22200, 0x00008165 }, /* GL_OCCLUSION_TEST_HP */ + { 22221, 0x00008166 }, /* GL_OCCLUSION_TEST_RESULT_HP */ + { 22249, 0x00000001 }, /* GL_ONE */ + { 22256, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA */ + { 22284, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */ + { 22316, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR */ + { 22344, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */ + { 22376, 0x00000305 }, /* GL_ONE_MINUS_DST_ALPHA */ + { 22399, 0x00000307 }, /* GL_ONE_MINUS_DST_COLOR */ + { 22422, 0x00000303 }, /* GL_ONE_MINUS_SRC_ALPHA */ + { 22445, 0x00000301 }, /* GL_ONE_MINUS_SRC_COLOR */ + { 22468, 0x00008598 }, /* GL_OPERAND0_ALPHA */ + { 22486, 0x00008598 }, /* GL_OPERAND0_ALPHA_ARB */ + { 22508, 0x00008598 }, /* GL_OPERAND0_ALPHA_EXT */ + { 22530, 0x00008590 }, /* GL_OPERAND0_RGB */ + { 22546, 0x00008590 }, /* GL_OPERAND0_RGB_ARB */ + { 22566, 0x00008590 }, /* GL_OPERAND0_RGB_EXT */ + { 22586, 0x00008599 }, /* GL_OPERAND1_ALPHA */ + { 22604, 0x00008599 }, /* GL_OPERAND1_ALPHA_ARB */ + { 22626, 0x00008599 }, /* GL_OPERAND1_ALPHA_EXT */ + { 22648, 0x00008591 }, /* GL_OPERAND1_RGB */ + { 22664, 0x00008591 }, /* GL_OPERAND1_RGB_ARB */ + { 22684, 0x00008591 }, /* GL_OPERAND1_RGB_EXT */ + { 22704, 0x0000859A }, /* GL_OPERAND2_ALPHA */ + { 22722, 0x0000859A }, /* GL_OPERAND2_ALPHA_ARB */ + { 22744, 0x0000859A }, /* GL_OPERAND2_ALPHA_EXT */ + { 22766, 0x00008592 }, /* GL_OPERAND2_RGB */ + { 22782, 0x00008592 }, /* GL_OPERAND2_RGB_ARB */ + { 22802, 0x00008592 }, /* GL_OPERAND2_RGB_EXT */ + { 22822, 0x0000859B }, /* GL_OPERAND3_ALPHA_NV */ + { 22843, 0x00008593 }, /* GL_OPERAND3_RGB_NV */ + { 22862, 0x00001507 }, /* GL_OR */ + { 22868, 0x00000A01 }, /* GL_ORDER */ + { 22877, 0x0000150D }, /* GL_OR_INVERTED */ + { 22892, 0x0000150B }, /* GL_OR_REVERSE */ + { 22906, 0x00000505 }, /* GL_OUT_OF_MEMORY */ + { 22923, 0x00000D05 }, /* GL_PACK_ALIGNMENT */ + { 22941, 0x0000806C }, /* GL_PACK_IMAGE_HEIGHT */ + { 22962, 0x00008758 }, /* GL_PACK_INVERT_MESA */ + { 22982, 0x00000D01 }, /* GL_PACK_LSB_FIRST */ + { 23000, 0x00000D02 }, /* GL_PACK_ROW_LENGTH */ + { 23019, 0x0000806B }, /* GL_PACK_SKIP_IMAGES */ + { 23039, 0x00000D04 }, /* GL_PACK_SKIP_PIXELS */ + { 23059, 0x00000D03 }, /* GL_PACK_SKIP_ROWS */ + { 23077, 0x00000D00 }, /* GL_PACK_SWAP_BYTES */ + { 23096, 0x00008B92 }, /* GL_PALETTE4_R5_G6_B5_OES */ + { 23121, 0x00008B94 }, /* GL_PALETTE4_RGB5_A1_OES */ + { 23145, 0x00008B90 }, /* GL_PALETTE4_RGB8_OES */ + { 23166, 0x00008B93 }, /* GL_PALETTE4_RGBA4_OES */ + { 23188, 0x00008B91 }, /* GL_PALETTE4_RGBA8_OES */ + { 23210, 0x00008B97 }, /* GL_PALETTE8_R5_G6_B5_OES */ + { 23235, 0x00008B99 }, /* GL_PALETTE8_RGB5_A1_OES */ + { 23259, 0x00008B95 }, /* GL_PALETTE8_RGB8_OES */ + { 23280, 0x00008B98 }, /* GL_PALETTE8_RGBA4_OES */ + { 23302, 0x00008B96 }, /* GL_PALETTE8_RGBA8_OES */ + { 23324, 0x00000700 }, /* GL_PASS_THROUGH_TOKEN */ + { 23346, 0x00000C50 }, /* GL_PERSPECTIVE_CORRECTION_HINT */ + { 23377, 0x00000C79 }, /* GL_PIXEL_MAP_A_TO_A */ + { 23397, 0x00000CB9 }, /* GL_PIXEL_MAP_A_TO_A_SIZE */ + { 23422, 0x00000C78 }, /* GL_PIXEL_MAP_B_TO_B */ + { 23442, 0x00000CB8 }, /* GL_PIXEL_MAP_B_TO_B_SIZE */ + { 23467, 0x00000C77 }, /* GL_PIXEL_MAP_G_TO_G */ + { 23487, 0x00000CB7 }, /* GL_PIXEL_MAP_G_TO_G_SIZE */ + { 23512, 0x00000C75 }, /* GL_PIXEL_MAP_I_TO_A */ + { 23532, 0x00000CB5 }, /* GL_PIXEL_MAP_I_TO_A_SIZE */ + { 23557, 0x00000C74 }, /* GL_PIXEL_MAP_I_TO_B */ + { 23577, 0x00000CB4 }, /* GL_PIXEL_MAP_I_TO_B_SIZE */ + { 23602, 0x00000C73 }, /* GL_PIXEL_MAP_I_TO_G */ + { 23622, 0x00000CB3 }, /* GL_PIXEL_MAP_I_TO_G_SIZE */ + { 23647, 0x00000C70 }, /* GL_PIXEL_MAP_I_TO_I */ + { 23667, 0x00000CB0 }, /* GL_PIXEL_MAP_I_TO_I_SIZE */ + { 23692, 0x00000C72 }, /* GL_PIXEL_MAP_I_TO_R */ + { 23712, 0x00000CB2 }, /* GL_PIXEL_MAP_I_TO_R_SIZE */ + { 23737, 0x00000C76 }, /* GL_PIXEL_MAP_R_TO_R */ + { 23757, 0x00000CB6 }, /* GL_PIXEL_MAP_R_TO_R_SIZE */ + { 23782, 0x00000C71 }, /* GL_PIXEL_MAP_S_TO_S */ + { 23802, 0x00000CB1 }, /* GL_PIXEL_MAP_S_TO_S_SIZE */ + { 23827, 0x00000020 }, /* GL_PIXEL_MODE_BIT */ + { 23845, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */ + { 23878, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER_EXT */ + { 23903, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */ + { 23938, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER_EXT */ + { 23965, 0x00001B00 }, /* GL_POINT */ + { 23974, 0x00000000 }, /* GL_POINTS */ + { 23984, 0x00000002 }, /* GL_POINT_BIT */ + { 23997, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION */ + { 24027, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_ARB */ + { 24061, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_EXT */ + { 24095, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_SGIS */ + { 24130, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE */ + { 24159, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */ + { 24192, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */ + { 24225, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_SGIS */ + { 24259, 0x00000B11 }, /* GL_POINT_SIZE */ + { 24273, 0x00000B13 }, /* GL_POINT_SIZE_GRANULARITY */ + { 24299, 0x00008127 }, /* GL_POINT_SIZE_MAX */ + { 24317, 0x00008127 }, /* GL_POINT_SIZE_MAX_ARB */ + { 24339, 0x00008127 }, /* GL_POINT_SIZE_MAX_EXT */ + { 24361, 0x00008127 }, /* GL_POINT_SIZE_MAX_SGIS */ + { 24384, 0x00008126 }, /* GL_POINT_SIZE_MIN */ + { 24402, 0x00008126 }, /* GL_POINT_SIZE_MIN_ARB */ + { 24424, 0x00008126 }, /* GL_POINT_SIZE_MIN_EXT */ + { 24446, 0x00008126 }, /* GL_POINT_SIZE_MIN_SGIS */ + { 24469, 0x00000B12 }, /* GL_POINT_SIZE_RANGE */ + { 24489, 0x00000B10 }, /* GL_POINT_SMOOTH */ + { 24505, 0x00000C51 }, /* GL_POINT_SMOOTH_HINT */ + { 24526, 0x00008861 }, /* GL_POINT_SPRITE */ + { 24542, 0x00008861 }, /* GL_POINT_SPRITE_ARB */ + { 24562, 0x00008CA0 }, /* GL_POINT_SPRITE_COORD_ORIGIN */ + { 24591, 0x00008861 }, /* GL_POINT_SPRITE_NV */ + { 24610, 0x00008863 }, /* GL_POINT_SPRITE_R_MODE_NV */ + { 24636, 0x00000701 }, /* GL_POINT_TOKEN */ + { 24651, 0x00000009 }, /* GL_POLYGON */ + { 24662, 0x00000008 }, /* GL_POLYGON_BIT */ + { 24677, 0x00000B40 }, /* GL_POLYGON_MODE */ + { 24693, 0x00008039 }, /* GL_POLYGON_OFFSET_BIAS */ + { 24716, 0x00008038 }, /* GL_POLYGON_OFFSET_FACTOR */ + { 24741, 0x00008037 }, /* GL_POLYGON_OFFSET_FILL */ + { 24764, 0x00002A02 }, /* GL_POLYGON_OFFSET_LINE */ + { 24787, 0x00002A01 }, /* GL_POLYGON_OFFSET_POINT */ + { 24811, 0x00002A00 }, /* GL_POLYGON_OFFSET_UNITS */ + { 24835, 0x00000B41 }, /* GL_POLYGON_SMOOTH */ + { 24853, 0x00000C53 }, /* GL_POLYGON_SMOOTH_HINT */ + { 24876, 0x00000B42 }, /* GL_POLYGON_STIPPLE */ + { 24895, 0x00000010 }, /* GL_POLYGON_STIPPLE_BIT */ + { 24918, 0x00000703 }, /* GL_POLYGON_TOKEN */ + { 24935, 0x00001203 }, /* GL_POSITION */ + { 24947, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */ + { 24979, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */ + { 25015, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */ + { 25048, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */ + { 25085, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */ + { 25116, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */ + { 25151, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */ + { 25183, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */ + { 25219, 0x000080D2 }, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ + { 25252, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */ + { 25284, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */ + { 25320, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */ + { 25353, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */ + { 25390, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS */ + { 25420, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */ + { 25454, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE */ + { 25485, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */ + { 25520, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS */ + { 25551, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */ + { 25586, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE */ + { 25618, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */ + { 25654, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS */ + { 25684, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */ + { 25718, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE */ + { 25749, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */ + { 25784, 0x000080D1 }, /* GL_POST_CONVOLUTION_COLOR_TABLE */ + { 25816, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS */ + { 25847, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */ + { 25882, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE */ + { 25914, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */ + { 25950, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS */ + { 25979, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS_EXT */ + { 26012, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE */ + { 26042, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE_EXT */ + { 26076, 0x0000817B }, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */ + { 26115, 0x00008179 }, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */ + { 26148, 0x0000817C }, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */ + { 26188, 0x0000817A }, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */ + { 26222, 0x00008578 }, /* GL_PREVIOUS */ + { 26234, 0x00008578 }, /* GL_PREVIOUS_ARB */ + { 26250, 0x00008578 }, /* GL_PREVIOUS_EXT */ + { 26266, 0x00008577 }, /* GL_PRIMARY_COLOR */ + { 26283, 0x00008577 }, /* GL_PRIMARY_COLOR_ARB */ + { 26304, 0x00008577 }, /* GL_PRIMARY_COLOR_EXT */ + { 26325, 0x000088B0 }, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */ + { 26358, 0x00008805 }, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */ + { 26390, 0x000088AC }, /* GL_PROGRAM_ATTRIBS_ARB */ + { 26413, 0x00008677 }, /* GL_PROGRAM_BINDING_ARB */ + { 26436, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_ARB */ + { 26466, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_NV */ + { 26495, 0x00008874 }, /* GL_PROGRAM_ERROR_STRING_ARB */ + { 26523, 0x00008876 }, /* GL_PROGRAM_FORMAT_ARB */ + { 26545, 0x00008875 }, /* GL_PROGRAM_FORMAT_ASCII_ARB */ + { 26573, 0x000088A0 }, /* GL_PROGRAM_INSTRUCTIONS_ARB */ + { 26601, 0x00008627 }, /* GL_PROGRAM_LENGTH_ARB */ + { 26623, 0x00008627 }, /* GL_PROGRAM_LENGTH_NV */ + { 26644, 0x000088B2 }, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ + { 26684, 0x00008808 }, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ + { 26723, 0x000088AE }, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */ + { 26753, 0x000088A2 }, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ + { 26788, 0x000088AA }, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */ + { 26821, 0x000088A6 }, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */ + { 26855, 0x0000880A }, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ + { 26894, 0x00008809 }, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ + { 26933, 0x00008B40 }, /* GL_PROGRAM_OBJECT_ARB */ + { 26955, 0x000088A8 }, /* GL_PROGRAM_PARAMETERS_ARB */ + { 26981, 0x00008644 }, /* GL_PROGRAM_PARAMETER_NV */ + { 27005, 0x00008647 }, /* GL_PROGRAM_RESIDENT_NV */ + { 27028, 0x00008628 }, /* GL_PROGRAM_STRING_ARB */ + { 27050, 0x00008628 }, /* GL_PROGRAM_STRING_NV */ + { 27071, 0x00008646 }, /* GL_PROGRAM_TARGET_NV */ + { 27092, 0x000088A4 }, /* GL_PROGRAM_TEMPORARIES_ARB */ + { 27119, 0x00008807 }, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */ + { 27151, 0x00008806 }, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */ + { 27183, 0x000088B6 }, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */ + { 27218, 0x00001701 }, /* GL_PROJECTION */ + { 27232, 0x00000BA7 }, /* GL_PROJECTION_MATRIX */ + { 27253, 0x00000BA4 }, /* GL_PROJECTION_STACK_DEPTH */ + { 27279, 0x000080D3 }, /* GL_PROXY_COLOR_TABLE */ + { 27300, 0x00008025 }, /* GL_PROXY_HISTOGRAM */ + { 27319, 0x00008025 }, /* GL_PROXY_HISTOGRAM_EXT */ + { 27342, 0x000080D5 }, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */ + { 27381, 0x000080D4 }, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */ + { 27419, 0x00008063 }, /* GL_PROXY_TEXTURE_1D */ + { 27439, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */ + { 27469, 0x00008063 }, /* GL_PROXY_TEXTURE_1D_EXT */ + { 27493, 0x00008064 }, /* GL_PROXY_TEXTURE_2D */ + { 27513, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */ + { 27543, 0x00008064 }, /* GL_PROXY_TEXTURE_2D_EXT */ + { 27567, 0x00008070 }, /* GL_PROXY_TEXTURE_3D */ + { 27587, 0x000080BD }, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */ + { 27620, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP */ + { 27646, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */ + { 27676, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */ + { 27707, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_NV */ + { 27737, 0x00002003 }, /* GL_Q */ + { 27742, 0x00001209 }, /* GL_QUADRATIC_ATTENUATION */ + { 27767, 0x00000007 }, /* GL_QUADS */ + { 27776, 0x00008614 }, /* GL_QUAD_MESH_SUN */ + { 27793, 0x00000008 }, /* GL_QUAD_STRIP */ + { 27807, 0x00008864 }, /* GL_QUERY_COUNTER_BITS */ + { 27829, 0x00008864 }, /* GL_QUERY_COUNTER_BITS_ARB */ + { 27855, 0x00008866 }, /* GL_QUERY_RESULT */ + { 27871, 0x00008866 }, /* GL_QUERY_RESULT_ARB */ + { 27891, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE */ + { 27917, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE_ARB */ + { 27947, 0x00002002 }, /* GL_R */ + { 27952, 0x00002A10 }, /* GL_R3_G3_B2 */ + { 27964, 0x00019262 }, /* GL_RASTER_POSITION_UNCLIPPED_IBM */ + { 27997, 0x00000C02 }, /* GL_READ_BUFFER */ + { 28012, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER */ + { 28032, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING_EXT */ + { 28064, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER_EXT */ + { 28088, 0x000088B8 }, /* GL_READ_ONLY */ + { 28101, 0x000088B8 }, /* GL_READ_ONLY_ARB */ + { 28118, 0x000088BA }, /* GL_READ_WRITE */ + { 28132, 0x000088BA }, /* GL_READ_WRITE_ARB */ + { 28150, 0x00001903 }, /* GL_RED */ + { 28157, 0x00008016 }, /* GL_REDUCE */ + { 28167, 0x00008016 }, /* GL_REDUCE_EXT */ + { 28181, 0x00000D15 }, /* GL_RED_BIAS */ + { 28193, 0x00000D52 }, /* GL_RED_BITS */ + { 28205, 0x00000D14 }, /* GL_RED_SCALE */ + { 28218, 0x00008512 }, /* GL_REFLECTION_MAP */ + { 28236, 0x00008512 }, /* GL_REFLECTION_MAP_ARB */ + { 28258, 0x00008512 }, /* GL_REFLECTION_MAP_NV */ + { 28279, 0x00001C00 }, /* GL_RENDER */ + { 28289, 0x00008D41 }, /* GL_RENDERBUFFER */ + { 28305, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE */ + { 28332, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_EXT */ + { 28360, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE */ + { 28386, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE */ + { 28413, 0x00008D41 }, /* GL_RENDERBUFFER_EXT */ + { 28433, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE */ + { 28460, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT */ + { 28483, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_EXT */ + { 28510, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT */ + { 28542, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */ + { 28578, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE */ + { 28603, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES */ + { 28627, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE */ + { 28656, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH */ + { 28678, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_EXT */ + { 28704, 0x00001F01 }, /* GL_RENDERER */ + { 28716, 0x00000C40 }, /* GL_RENDER_MODE */ + { 28731, 0x00002901 }, /* GL_REPEAT */ + { 28741, 0x00001E01 }, /* GL_REPLACE */ + { 28752, 0x00008062 }, /* GL_REPLACE_EXT */ + { 28767, 0x00008153 }, /* GL_REPLICATE_BORDER_HP */ + { 28790, 0x0000803A }, /* GL_RESCALE_NORMAL */ + { 28808, 0x0000803A }, /* GL_RESCALE_NORMAL_EXT */ + { 28830, 0x00000102 }, /* GL_RETURN */ + { 28840, 0x00001907 }, /* GL_RGB */ + { 28847, 0x00008052 }, /* GL_RGB10 */ + { 28856, 0x00008059 }, /* GL_RGB10_A2 */ + { 28868, 0x00008059 }, /* GL_RGB10_A2_EXT */ + { 28884, 0x00008052 }, /* GL_RGB10_EXT */ + { 28897, 0x00008053 }, /* GL_RGB12 */ + { 28906, 0x00008053 }, /* GL_RGB12_EXT */ + { 28919, 0x00008054 }, /* GL_RGB16 */ + { 28928, 0x00008054 }, /* GL_RGB16_EXT */ + { 28941, 0x0000804E }, /* GL_RGB2_EXT */ + { 28953, 0x0000804F }, /* GL_RGB4 */ + { 28961, 0x0000804F }, /* GL_RGB4_EXT */ + { 28973, 0x000083A1 }, /* GL_RGB4_S3TC */ + { 28986, 0x00008050 }, /* GL_RGB5 */ + { 28994, 0x00008057 }, /* GL_RGB5_A1 */ + { 29005, 0x00008057 }, /* GL_RGB5_A1_EXT */ + { 29020, 0x00008050 }, /* GL_RGB5_EXT */ + { 29032, 0x00008051 }, /* GL_RGB8 */ + { 29040, 0x00008051 }, /* GL_RGB8_EXT */ + { 29052, 0x00001908 }, /* GL_RGBA */ + { 29060, 0x0000805A }, /* GL_RGBA12 */ + { 29070, 0x0000805A }, /* GL_RGBA12_EXT */ + { 29084, 0x0000805B }, /* GL_RGBA16 */ + { 29094, 0x0000805B }, /* GL_RGBA16_EXT */ + { 29108, 0x00008055 }, /* GL_RGBA2 */ + { 29117, 0x00008055 }, /* GL_RGBA2_EXT */ + { 29130, 0x00008056 }, /* GL_RGBA4 */ + { 29139, 0x000083A5 }, /* GL_RGBA4_DXT5_S3TC */ + { 29158, 0x00008056 }, /* GL_RGBA4_EXT */ + { 29171, 0x000083A3 }, /* GL_RGBA4_S3TC */ + { 29185, 0x00008058 }, /* GL_RGBA8 */ + { 29194, 0x00008058 }, /* GL_RGBA8_EXT */ + { 29207, 0x000083A4 }, /* GL_RGBA_DXT5_S3TC */ + { 29225, 0x00000C31 }, /* GL_RGBA_MODE */ + { 29238, 0x000083A2 }, /* GL_RGBA_S3TC */ + { 29251, 0x000083A0 }, /* GL_RGB_S3TC */ + { 29263, 0x00008573 }, /* GL_RGB_SCALE */ + { 29276, 0x00008573 }, /* GL_RGB_SCALE_ARB */ + { 29293, 0x00008573 }, /* GL_RGB_SCALE_EXT */ + { 29310, 0x00000407 }, /* GL_RIGHT */ + { 29319, 0x00002000 }, /* GL_S */ + { 29324, 0x00008B5D }, /* GL_SAMPLER_1D */ + { 29338, 0x00008B61 }, /* GL_SAMPLER_1D_SHADOW */ + { 29359, 0x00008B5E }, /* GL_SAMPLER_2D */ + { 29373, 0x00008B62 }, /* GL_SAMPLER_2D_SHADOW */ + { 29394, 0x00008B5F }, /* GL_SAMPLER_3D */ + { 29408, 0x00008B60 }, /* GL_SAMPLER_CUBE */ + { 29424, 0x000080A9 }, /* GL_SAMPLES */ + { 29435, 0x000086B4 }, /* GL_SAMPLES_3DFX */ + { 29451, 0x000080A9 }, /* GL_SAMPLES_ARB */ + { 29466, 0x00008914 }, /* GL_SAMPLES_PASSED */ + { 29484, 0x00008914 }, /* GL_SAMPLES_PASSED_ARB */ + { 29506, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE */ + { 29534, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */ + { 29566, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE */ + { 29589, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE_ARB */ + { 29616, 0x000080A8 }, /* GL_SAMPLE_BUFFERS */ + { 29634, 0x000086B3 }, /* GL_SAMPLE_BUFFERS_3DFX */ + { 29657, 0x000080A8 }, /* GL_SAMPLE_BUFFERS_ARB */ + { 29679, 0x000080A0 }, /* GL_SAMPLE_COVERAGE */ + { 29698, 0x000080A0 }, /* GL_SAMPLE_COVERAGE_ARB */ + { 29721, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT */ + { 29747, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT_ARB */ + { 29777, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE */ + { 29802, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE_ARB */ + { 29831, 0x00080000 }, /* GL_SCISSOR_BIT */ + { 29846, 0x00000C10 }, /* GL_SCISSOR_BOX */ + { 29861, 0x00000C11 }, /* GL_SCISSOR_TEST */ + { 29877, 0x0000845E }, /* GL_SECONDARY_COLOR_ARRAY */ + { 29902, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */ + { 29942, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */ + { 29986, 0x0000845D }, /* GL_SECONDARY_COLOR_ARRAY_POINTER */ + { 30019, 0x0000845A }, /* GL_SECONDARY_COLOR_ARRAY_SIZE */ + { 30049, 0x0000845C }, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */ + { 30081, 0x0000845B }, /* GL_SECONDARY_COLOR_ARRAY_TYPE */ + { 30111, 0x00001C02 }, /* GL_SELECT */ + { 30121, 0x00000DF3 }, /* GL_SELECTION_BUFFER_POINTER */ + { 30149, 0x00000DF4 }, /* GL_SELECTION_BUFFER_SIZE */ + { 30174, 0x00008012 }, /* GL_SEPARABLE_2D */ + { 30190, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR */ + { 30217, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR_EXT */ + { 30248, 0x0000150F }, /* GL_SET */ + { 30255, 0x00008B48 }, /* GL_SHADER_OBJECT_ARB */ + { 30276, 0x00008B88 }, /* GL_SHADER_SOURCE_LENGTH */ + { 30300, 0x00008B4F }, /* GL_SHADER_TYPE */ + { 30315, 0x00000B54 }, /* GL_SHADE_MODEL */ + { 30330, 0x00008B8C }, /* GL_SHADING_LANGUAGE_VERSION */ + { 30358, 0x000080BF }, /* GL_SHADOW_AMBIENT_SGIX */ + { 30381, 0x000081FB }, /* GL_SHARED_TEXTURE_PALETTE_EXT */ + { 30411, 0x00001601 }, /* GL_SHININESS */ + { 30424, 0x00001402 }, /* GL_SHORT */ + { 30433, 0x000081F9 }, /* GL_SINGLE_COLOR */ + { 30449, 0x000081F9 }, /* GL_SINGLE_COLOR_EXT */ + { 30469, 0x000085CC }, /* GL_SLICE_ACCUM_SUN */ + { 30488, 0x00001D01 }, /* GL_SMOOTH */ + { 30498, 0x00000B23 }, /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */ + { 30531, 0x00000B22 }, /* GL_SMOOTH_LINE_WIDTH_RANGE */ + { 30558, 0x00000B13 }, /* GL_SMOOTH_POINT_SIZE_GRANULARITY */ + { 30591, 0x00000B12 }, /* GL_SMOOTH_POINT_SIZE_RANGE */ + { 30618, 0x00008588 }, /* GL_SOURCE0_ALPHA */ + { 30635, 0x00008588 }, /* GL_SOURCE0_ALPHA_ARB */ + { 30656, 0x00008588 }, /* GL_SOURCE0_ALPHA_EXT */ + { 30677, 0x00008580 }, /* GL_SOURCE0_RGB */ + { 30692, 0x00008580 }, /* GL_SOURCE0_RGB_ARB */ + { 30711, 0x00008580 }, /* GL_SOURCE0_RGB_EXT */ + { 30730, 0x00008589 }, /* GL_SOURCE1_ALPHA */ + { 30747, 0x00008589 }, /* GL_SOURCE1_ALPHA_ARB */ + { 30768, 0x00008589 }, /* GL_SOURCE1_ALPHA_EXT */ + { 30789, 0x00008581 }, /* GL_SOURCE1_RGB */ + { 30804, 0x00008581 }, /* GL_SOURCE1_RGB_ARB */ + { 30823, 0x00008581 }, /* GL_SOURCE1_RGB_EXT */ + { 30842, 0x0000858A }, /* GL_SOURCE2_ALPHA */ + { 30859, 0x0000858A }, /* GL_SOURCE2_ALPHA_ARB */ + { 30880, 0x0000858A }, /* GL_SOURCE2_ALPHA_EXT */ + { 30901, 0x00008582 }, /* GL_SOURCE2_RGB */ + { 30916, 0x00008582 }, /* GL_SOURCE2_RGB_ARB */ + { 30935, 0x00008582 }, /* GL_SOURCE2_RGB_EXT */ + { 30954, 0x0000858B }, /* GL_SOURCE3_ALPHA_NV */ + { 30974, 0x00008583 }, /* GL_SOURCE3_RGB_NV */ + { 30992, 0x00001202 }, /* GL_SPECULAR */ + { 31004, 0x00002402 }, /* GL_SPHERE_MAP */ + { 31018, 0x00001206 }, /* GL_SPOT_CUTOFF */ + { 31033, 0x00001204 }, /* GL_SPOT_DIRECTION */ + { 31051, 0x00001205 }, /* GL_SPOT_EXPONENT */ + { 31068, 0x00008588 }, /* GL_SRC0_ALPHA */ + { 31082, 0x00008580 }, /* GL_SRC0_RGB */ + { 31094, 0x00008589 }, /* GL_SRC1_ALPHA */ + { 31108, 0x00008581 }, /* GL_SRC1_RGB */ + { 31120, 0x0000858A }, /* GL_SRC2_ALPHA */ + { 31134, 0x00008582 }, /* GL_SRC2_RGB */ + { 31146, 0x00000302 }, /* GL_SRC_ALPHA */ + { 31159, 0x00000308 }, /* GL_SRC_ALPHA_SATURATE */ + { 31181, 0x00000300 }, /* GL_SRC_COLOR */ + { 31194, 0x00008C40 }, /* GL_SRGB */ + { 31202, 0x00000503 }, /* GL_STACK_OVERFLOW */ + { 31220, 0x00000504 }, /* GL_STACK_UNDERFLOW */ + { 31239, 0x000088E6 }, /* GL_STATIC_COPY */ + { 31254, 0x000088E6 }, /* GL_STATIC_COPY_ARB */ + { 31273, 0x000088E4 }, /* GL_STATIC_DRAW */ + { 31288, 0x000088E4 }, /* GL_STATIC_DRAW_ARB */ + { 31307, 0x000088E5 }, /* GL_STATIC_READ */ + { 31322, 0x000088E5 }, /* GL_STATIC_READ_ARB */ + { 31341, 0x00001802 }, /* GL_STENCIL */ + { 31352, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT */ + { 31374, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_EXT */ + { 31400, 0x00008801 }, /* GL_STENCIL_BACK_FAIL */ + { 31421, 0x00008801 }, /* GL_STENCIL_BACK_FAIL_ATI */ + { 31446, 0x00008800 }, /* GL_STENCIL_BACK_FUNC */ + { 31467, 0x00008800 }, /* GL_STENCIL_BACK_FUNC_ATI */ + { 31492, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */ + { 31524, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */ + { 31560, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */ + { 31592, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */ + { 31628, 0x00008CA3 }, /* GL_STENCIL_BACK_REF */ + { 31648, 0x00008CA4 }, /* GL_STENCIL_BACK_VALUE_MASK */ + { 31675, 0x00008CA5 }, /* GL_STENCIL_BACK_WRITEMASK */ + { 31701, 0x00000D57 }, /* GL_STENCIL_BITS */ + { 31717, 0x00000400 }, /* GL_STENCIL_BUFFER_BIT */ + { 31739, 0x00000B91 }, /* GL_STENCIL_CLEAR_VALUE */ + { 31762, 0x00000B94 }, /* GL_STENCIL_FAIL */ + { 31778, 0x00000B92 }, /* GL_STENCIL_FUNC */ + { 31794, 0x00001901 }, /* GL_STENCIL_INDEX */ + { 31811, 0x00008D49 }, /* GL_STENCIL_INDEX16_EXT */ + { 31834, 0x00008D46 }, /* GL_STENCIL_INDEX1_EXT */ + { 31856, 0x00008D47 }, /* GL_STENCIL_INDEX4_EXT */ + { 31878, 0x00008D48 }, /* GL_STENCIL_INDEX8_EXT */ + { 31900, 0x00008D45 }, /* GL_STENCIL_INDEX_EXT */ + { 31921, 0x00000B95 }, /* GL_STENCIL_PASS_DEPTH_FAIL */ + { 31948, 0x00000B96 }, /* GL_STENCIL_PASS_DEPTH_PASS */ + { 31975, 0x00000B97 }, /* GL_STENCIL_REF */ + { 31990, 0x00000B90 }, /* GL_STENCIL_TEST */ + { 32006, 0x00008910 }, /* GL_STENCIL_TEST_TWO_SIDE_EXT */ + { 32035, 0x00000B93 }, /* GL_STENCIL_VALUE_MASK */ + { 32057, 0x00000B98 }, /* GL_STENCIL_WRITEMASK */ + { 32078, 0x00000C33 }, /* GL_STEREO */ + { 32088, 0x000088E2 }, /* GL_STREAM_COPY */ + { 32103, 0x000088E2 }, /* GL_STREAM_COPY_ARB */ + { 32122, 0x000088E0 }, /* GL_STREAM_DRAW */ + { 32137, 0x000088E0 }, /* GL_STREAM_DRAW_ARB */ + { 32156, 0x000088E1 }, /* GL_STREAM_READ */ + { 32171, 0x000088E1 }, /* GL_STREAM_READ_ARB */ + { 32190, 0x00000D50 }, /* GL_SUBPIXEL_BITS */ + { 32207, 0x000084E7 }, /* GL_SUBTRACT */ + { 32219, 0x000084E7 }, /* GL_SUBTRACT_ARB */ + { 32235, 0x00002001 }, /* GL_T */ + { 32240, 0x00002A2A }, /* GL_T2F_C3F_V3F */ + { 32255, 0x00002A2C }, /* GL_T2F_C4F_N3F_V3F */ + { 32274, 0x00002A29 }, /* GL_T2F_C4UB_V3F */ + { 32290, 0x00002A2B }, /* GL_T2F_N3F_V3F */ + { 32305, 0x00002A27 }, /* GL_T2F_V3F */ + { 32316, 0x00002A2D }, /* GL_T4F_C4F_N3F_V4F */ + { 32335, 0x00002A28 }, /* GL_T4F_V4F */ + { 32346, 0x00008031 }, /* GL_TABLE_TOO_LARGE_EXT */ + { 32369, 0x00001702 }, /* GL_TEXTURE */ + { 32380, 0x000084C0 }, /* GL_TEXTURE0 */ + { 32392, 0x000084C0 }, /* GL_TEXTURE0_ARB */ + { 32408, 0x000084C1 }, /* GL_TEXTURE1 */ + { 32420, 0x000084CA }, /* GL_TEXTURE10 */ + { 32433, 0x000084CA }, /* GL_TEXTURE10_ARB */ + { 32450, 0x000084CB }, /* GL_TEXTURE11 */ + { 32463, 0x000084CB }, /* GL_TEXTURE11_ARB */ + { 32480, 0x000084CC }, /* GL_TEXTURE12 */ + { 32493, 0x000084CC }, /* GL_TEXTURE12_ARB */ + { 32510, 0x000084CD }, /* GL_TEXTURE13 */ + { 32523, 0x000084CD }, /* GL_TEXTURE13_ARB */ + { 32540, 0x000084CE }, /* GL_TEXTURE14 */ + { 32553, 0x000084CE }, /* GL_TEXTURE14_ARB */ + { 32570, 0x000084CF }, /* GL_TEXTURE15 */ + { 32583, 0x000084CF }, /* GL_TEXTURE15_ARB */ + { 32600, 0x000084D0 }, /* GL_TEXTURE16 */ + { 32613, 0x000084D0 }, /* GL_TEXTURE16_ARB */ + { 32630, 0x000084D1 }, /* GL_TEXTURE17 */ + { 32643, 0x000084D1 }, /* GL_TEXTURE17_ARB */ + { 32660, 0x000084D2 }, /* GL_TEXTURE18 */ + { 32673, 0x000084D2 }, /* GL_TEXTURE18_ARB */ + { 32690, 0x000084D3 }, /* GL_TEXTURE19 */ + { 32703, 0x000084D3 }, /* GL_TEXTURE19_ARB */ + { 32720, 0x000084C1 }, /* GL_TEXTURE1_ARB */ + { 32736, 0x000084C2 }, /* GL_TEXTURE2 */ + { 32748, 0x000084D4 }, /* GL_TEXTURE20 */ + { 32761, 0x000084D4 }, /* GL_TEXTURE20_ARB */ + { 32778, 0x000084D5 }, /* GL_TEXTURE21 */ + { 32791, 0x000084D5 }, /* GL_TEXTURE21_ARB */ + { 32808, 0x000084D6 }, /* GL_TEXTURE22 */ + { 32821, 0x000084D6 }, /* GL_TEXTURE22_ARB */ + { 32838, 0x000084D7 }, /* GL_TEXTURE23 */ + { 32851, 0x000084D7 }, /* GL_TEXTURE23_ARB */ + { 32868, 0x000084D8 }, /* GL_TEXTURE24 */ + { 32881, 0x000084D8 }, /* GL_TEXTURE24_ARB */ + { 32898, 0x000084D9 }, /* GL_TEXTURE25 */ + { 32911, 0x000084D9 }, /* GL_TEXTURE25_ARB */ + { 32928, 0x000084DA }, /* GL_TEXTURE26 */ + { 32941, 0x000084DA }, /* GL_TEXTURE26_ARB */ + { 32958, 0x000084DB }, /* GL_TEXTURE27 */ + { 32971, 0x000084DB }, /* GL_TEXTURE27_ARB */ + { 32988, 0x000084DC }, /* GL_TEXTURE28 */ + { 33001, 0x000084DC }, /* GL_TEXTURE28_ARB */ + { 33018, 0x000084DD }, /* GL_TEXTURE29 */ + { 33031, 0x000084DD }, /* GL_TEXTURE29_ARB */ + { 33048, 0x000084C2 }, /* GL_TEXTURE2_ARB */ + { 33064, 0x000084C3 }, /* GL_TEXTURE3 */ + { 33076, 0x000084DE }, /* GL_TEXTURE30 */ + { 33089, 0x000084DE }, /* GL_TEXTURE30_ARB */ + { 33106, 0x000084DF }, /* GL_TEXTURE31 */ + { 33119, 0x000084DF }, /* GL_TEXTURE31_ARB */ + { 33136, 0x000084C3 }, /* GL_TEXTURE3_ARB */ + { 33152, 0x000084C4 }, /* GL_TEXTURE4 */ + { 33164, 0x000084C4 }, /* GL_TEXTURE4_ARB */ + { 33180, 0x000084C5 }, /* GL_TEXTURE5 */ + { 33192, 0x000084C5 }, /* GL_TEXTURE5_ARB */ + { 33208, 0x000084C6 }, /* GL_TEXTURE6 */ + { 33220, 0x000084C6 }, /* GL_TEXTURE6_ARB */ + { 33236, 0x000084C7 }, /* GL_TEXTURE7 */ + { 33248, 0x000084C7 }, /* GL_TEXTURE7_ARB */ + { 33264, 0x000084C8 }, /* GL_TEXTURE8 */ + { 33276, 0x000084C8 }, /* GL_TEXTURE8_ARB */ + { 33292, 0x000084C9 }, /* GL_TEXTURE9 */ + { 33304, 0x000084C9 }, /* GL_TEXTURE9_ARB */ + { 33320, 0x00000DE0 }, /* GL_TEXTURE_1D */ + { 33334, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY_EXT */ + { 33358, 0x00000DE1 }, /* GL_TEXTURE_2D */ + { 33372, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY_EXT */ + { 33396, 0x0000806F }, /* GL_TEXTURE_3D */ + { 33410, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE */ + { 33432, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE_EXT */ + { 33458, 0x0000813C }, /* GL_TEXTURE_BASE_LEVEL */ + { 33480, 0x00008068 }, /* GL_TEXTURE_BINDING_1D */ + { 33502, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */ + { 33534, 0x00008069 }, /* GL_TEXTURE_BINDING_2D */ + { 33556, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */ + { 33588, 0x0000806A }, /* GL_TEXTURE_BINDING_3D */ + { 33610, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP */ + { 33638, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */ + { 33670, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */ + { 33703, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_NV */ + { 33735, 0x00040000 }, /* GL_TEXTURE_BIT */ + { 33750, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE */ + { 33771, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE_EXT */ + { 33796, 0x00001005 }, /* GL_TEXTURE_BORDER */ + { 33814, 0x00001004 }, /* GL_TEXTURE_BORDER_COLOR */ + { 33838, 0x00008171 }, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */ + { 33869, 0x00008176 }, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */ + { 33899, 0x00008172 }, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */ + { 33929, 0x00008175 }, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */ + { 33964, 0x00008173 }, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */ + { 33995, 0x00008174 }, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */ + { 34033, 0x000080BC }, /* GL_TEXTURE_COLOR_TABLE_SGI */ + { 34060, 0x000081EF }, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */ + { 34092, 0x000080BF }, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */ + { 34126, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC */ + { 34150, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC_ARB */ + { 34178, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE */ + { 34202, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE_ARB */ + { 34230, 0x0000819B }, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */ + { 34263, 0x0000819A }, /* GL_TEXTURE_COMPARE_SGIX */ + { 34287, 0x00001003 }, /* GL_TEXTURE_COMPONENTS */ + { 34309, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED */ + { 34331, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED_ARB */ + { 34357, 0x000086A3 }, /* GL_TEXTURE_COMPRESSED_FORMATS_ARB */ + { 34391, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */ + { 34424, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */ + { 34461, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT */ + { 34489, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT_ARB */ + { 34521, 0x00008078 }, /* GL_TEXTURE_COORD_ARRAY */ + { 34544, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */ + { 34582, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */ + { 34624, 0x00008092 }, /* GL_TEXTURE_COORD_ARRAY_POINTER */ + { 34655, 0x00008088 }, /* GL_TEXTURE_COORD_ARRAY_SIZE */ + { 34683, 0x0000808A }, /* GL_TEXTURE_COORD_ARRAY_STRIDE */ + { 34713, 0x00008089 }, /* GL_TEXTURE_COORD_ARRAY_TYPE */ + { 34741, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP */ + { 34761, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_ARB */ + { 34785, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */ + { 34816, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */ + { 34851, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */ + { 34882, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */ + { 34917, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */ + { 34948, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */ + { 34983, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */ + { 35014, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */ + { 35049, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */ + { 35080, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */ + { 35115, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */ + { 35146, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */ + { 35181, 0x00008071 }, /* GL_TEXTURE_DEPTH */ + { 35198, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE */ + { 35220, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE_ARB */ + { 35246, 0x00002300 }, /* GL_TEXTURE_ENV */ + { 35261, 0x00002201 }, /* GL_TEXTURE_ENV_COLOR */ + { 35282, 0x00002200 }, /* GL_TEXTURE_ENV_MODE */ + { 35302, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL */ + { 35328, 0x00002500 }, /* GL_TEXTURE_GEN_MODE */ + { 35348, 0x00000C63 }, /* GL_TEXTURE_GEN_Q */ + { 35365, 0x00000C62 }, /* GL_TEXTURE_GEN_R */ + { 35382, 0x00000C60 }, /* GL_TEXTURE_GEN_S */ + { 35399, 0x00000C61 }, /* GL_TEXTURE_GEN_T */ + { 35416, 0x0000819D }, /* GL_TEXTURE_GEQUAL_R_SGIX */ + { 35441, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE */ + { 35463, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE_EXT */ + { 35489, 0x00001001 }, /* GL_TEXTURE_HEIGHT */ + { 35507, 0x000080ED }, /* GL_TEXTURE_INDEX_SIZE_EXT */ + { 35533, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE */ + { 35559, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE_EXT */ + { 35589, 0x00001003 }, /* GL_TEXTURE_INTERNAL_FORMAT */ + { 35616, 0x0000819C }, /* GL_TEXTURE_LEQUAL_R_SGIX */ + { 35641, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS */ + { 35661, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS_EXT */ + { 35685, 0x00008190 }, /* GL_TEXTURE_LOD_BIAS_R_SGIX */ + { 35712, 0x0000818E }, /* GL_TEXTURE_LOD_BIAS_S_SGIX */ + { 35739, 0x0000818F }, /* GL_TEXTURE_LOD_BIAS_T_SGIX */ + { 35766, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE */ + { 35792, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE_EXT */ + { 35822, 0x00002800 }, /* GL_TEXTURE_MAG_FILTER */ + { 35844, 0x00000BA8 }, /* GL_TEXTURE_MATRIX */ + { 35862, 0x000084FE }, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */ + { 35892, 0x0000836B }, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */ + { 35920, 0x00008369 }, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */ + { 35948, 0x0000836A }, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */ + { 35976, 0x0000813D }, /* GL_TEXTURE_MAX_LEVEL */ + { 35997, 0x0000813B }, /* GL_TEXTURE_MAX_LOD */ + { 36016, 0x00002801 }, /* GL_TEXTURE_MIN_FILTER */ + { 36038, 0x0000813A }, /* GL_TEXTURE_MIN_LOD */ + { 36057, 0x00008066 }, /* GL_TEXTURE_PRIORITY */ + { 36077, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_ARB */ + { 36102, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_NV */ + { 36126, 0x0000805C }, /* GL_TEXTURE_RED_SIZE */ + { 36146, 0x0000805C }, /* GL_TEXTURE_RED_SIZE_EXT */ + { 36170, 0x00008067 }, /* GL_TEXTURE_RESIDENT */ + { 36190, 0x00000BA5 }, /* GL_TEXTURE_STACK_DEPTH */ + { 36213, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE */ + { 36237, 0x00008065 }, /* GL_TEXTURE_TOO_LARGE_EXT */ + { 36262, 0x0000888F }, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */ + { 36296, 0x00001000 }, /* GL_TEXTURE_WIDTH */ + { 36313, 0x00008072 }, /* GL_TEXTURE_WRAP_R */ + { 36331, 0x00002802 }, /* GL_TEXTURE_WRAP_S */ + { 36349, 0x00002803 }, /* GL_TEXTURE_WRAP_T */ + { 36367, 0x000088BF }, /* GL_TIME_ELAPSED_EXT */ + { 36387, 0x00008648 }, /* GL_TRACK_MATRIX_NV */ + { 36406, 0x00008649 }, /* GL_TRACK_MATRIX_TRANSFORM_NV */ + { 36435, 0x00001000 }, /* GL_TRANSFORM_BIT */ + { 36452, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX */ + { 36478, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX_ARB */ + { 36508, 0x000088B7 }, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */ + { 36540, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX */ + { 36570, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */ + { 36604, 0x0000862C }, /* GL_TRANSPOSE_NV */ + { 36620, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX */ + { 36651, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */ + { 36686, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX */ + { 36714, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */ + { 36746, 0x00000004 }, /* GL_TRIANGLES */ + { 36759, 0x00000006 }, /* GL_TRIANGLE_FAN */ + { 36775, 0x00008615 }, /* GL_TRIANGLE_MESH_SUN */ + { 36796, 0x00000005 }, /* GL_TRIANGLE_STRIP */ + { 36814, 0x00000001 }, /* GL_TRUE */ + { 36822, 0x00000CF5 }, /* GL_UNPACK_ALIGNMENT */ + { 36842, 0x0000806E }, /* GL_UNPACK_IMAGE_HEIGHT */ + { 36865, 0x00000CF1 }, /* GL_UNPACK_LSB_FIRST */ + { 36885, 0x00000CF2 }, /* GL_UNPACK_ROW_LENGTH */ + { 36906, 0x0000806D }, /* GL_UNPACK_SKIP_IMAGES */ + { 36928, 0x00000CF4 }, /* GL_UNPACK_SKIP_PIXELS */ + { 36950, 0x00000CF3 }, /* GL_UNPACK_SKIP_ROWS */ + { 36970, 0x00000CF0 }, /* GL_UNPACK_SWAP_BYTES */ + { 36991, 0x00001401 }, /* GL_UNSIGNED_BYTE */ + { 37008, 0x00008362 }, /* GL_UNSIGNED_BYTE_2_3_3_REV */ + { 37035, 0x00008032 }, /* GL_UNSIGNED_BYTE_3_3_2 */ + { 37058, 0x00001405 }, /* GL_UNSIGNED_INT */ + { 37074, 0x00008036 }, /* GL_UNSIGNED_INT_10_10_10_2 */ + { 37101, 0x000084FA }, /* GL_UNSIGNED_INT_24_8 */ + { 37122, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_NV */ + { 37146, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV */ + { 37177, 0x00008035 }, /* GL_UNSIGNED_INT_8_8_8_8 */ + { 37201, 0x00008367 }, /* GL_UNSIGNED_INT_8_8_8_8_REV */ + { 37229, 0x00008C17 }, /* GL_UNSIGNED_NORMALIZED */ + { 37252, 0x00001403 }, /* GL_UNSIGNED_SHORT */ + { 37270, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */ + { 37300, 0x00008033 }, /* GL_UNSIGNED_SHORT_4_4_4_4 */ + { 37326, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */ + { 37356, 0x00008034 }, /* GL_UNSIGNED_SHORT_5_5_5_1 */ + { 37382, 0x00008363 }, /* GL_UNSIGNED_SHORT_5_6_5 */ + { 37406, 0x00008364 }, /* GL_UNSIGNED_SHORT_5_6_5_REV */ + { 37434, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_APPLE */ + { 37462, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_MESA */ + { 37489, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */ + { 37521, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_MESA */ + { 37552, 0x00008CA2 }, /* GL_UPPER_LEFT */ + { 37566, 0x00002A20 }, /* GL_V2F */ + { 37573, 0x00002A21 }, /* GL_V3F */ + { 37580, 0x00008B83 }, /* GL_VALIDATE_STATUS */ + { 37599, 0x00001F00 }, /* GL_VENDOR */ + { 37609, 0x00001F02 }, /* GL_VERSION */ + { 37620, 0x00008074 }, /* GL_VERTEX_ARRAY */ + { 37636, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING_APPLE */ + { 37666, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING */ + { 37697, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */ + { 37732, 0x0000808E }, /* GL_VERTEX_ARRAY_POINTER */ + { 37756, 0x0000807A }, /* GL_VERTEX_ARRAY_SIZE */ + { 37777, 0x0000807C }, /* GL_VERTEX_ARRAY_STRIDE */ + { 37800, 0x0000807B }, /* GL_VERTEX_ARRAY_TYPE */ + { 37821, 0x00008650 }, /* GL_VERTEX_ATTRIB_ARRAY0_NV */ + { 37848, 0x0000865A }, /* GL_VERTEX_ATTRIB_ARRAY10_NV */ + { 37876, 0x0000865B }, /* GL_VERTEX_ATTRIB_ARRAY11_NV */ + { 37904, 0x0000865C }, /* GL_VERTEX_ATTRIB_ARRAY12_NV */ + { 37932, 0x0000865D }, /* GL_VERTEX_ATTRIB_ARRAY13_NV */ + { 37960, 0x0000865E }, /* GL_VERTEX_ATTRIB_ARRAY14_NV */ + { 37988, 0x0000865F }, /* GL_VERTEX_ATTRIB_ARRAY15_NV */ + { 38016, 0x00008651 }, /* GL_VERTEX_ATTRIB_ARRAY1_NV */ + { 38043, 0x00008652 }, /* GL_VERTEX_ATTRIB_ARRAY2_NV */ + { 38070, 0x00008653 }, /* GL_VERTEX_ATTRIB_ARRAY3_NV */ + { 38097, 0x00008654 }, /* GL_VERTEX_ATTRIB_ARRAY4_NV */ + { 38124, 0x00008655 }, /* GL_VERTEX_ATTRIB_ARRAY5_NV */ + { 38151, 0x00008656 }, /* GL_VERTEX_ATTRIB_ARRAY6_NV */ + { 38178, 0x00008657 }, /* GL_VERTEX_ATTRIB_ARRAY7_NV */ + { 38205, 0x00008658 }, /* GL_VERTEX_ATTRIB_ARRAY8_NV */ + { 38232, 0x00008659 }, /* GL_VERTEX_ATTRIB_ARRAY9_NV */ + { 38259, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */ + { 38297, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */ + { 38339, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */ + { 38370, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */ + { 38405, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */ + { 38439, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */ + { 38477, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */ + { 38508, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */ + { 38543, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */ + { 38571, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */ + { 38603, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */ + { 38633, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */ + { 38667, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */ + { 38695, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */ + { 38727, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */ + { 38747, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */ + { 38769, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */ + { 38798, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */ + { 38819, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */ + { 38848, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */ + { 38881, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */ + { 38913, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */ + { 38940, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */ + { 38971, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */ + { 39001, 0x00008B31 }, /* GL_VERTEX_SHADER */ + { 39018, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */ + { 39039, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */ + { 39066, 0x00000BA2 }, /* GL_VIEWPORT */ + { 39078, 0x00000800 }, /* GL_VIEWPORT_BIT */ + { 39094, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */ + { 39114, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */ + { 39145, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */ + { 39180, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */ + { 39208, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */ + { 39233, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */ + { 39260, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */ + { 39285, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */ + { 39309, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */ + { 39328, 0x000088B9 }, /* GL_WRITE_ONLY */ + { 39342, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */ + { 39360, 0x00001506 }, /* GL_XOR */ + { 39367, 0x000085B9 }, /* GL_YCBCR_422_APPLE */ + { 39386, 0x00008757 }, /* GL_YCBCR_MESA */ + { 39400, 0x00000000 }, /* GL_ZERO */ + { 39408, 0x00000D16 }, /* GL_ZOOM_X */ + { 39418, 0x00000D17 }, /* GL_ZOOM_Y */ }; -static const unsigned reduced_enums[1308] = +static const unsigned reduced_enums[1316] = { - 455, /* GL_FALSE */ - 687, /* GL_LINES */ - 689, /* GL_LINE_LOOP */ - 696, /* GL_LINE_STRIP */ - 1699, /* GL_TRIANGLES */ - 1702, /* GL_TRIANGLE_STRIP */ - 1700, /* GL_TRIANGLE_FAN */ - 1254, /* GL_QUADS */ - 1256, /* GL_QUAD_STRIP */ - 1142, /* GL_POLYGON */ - 1154, /* GL_POLYGON_STIPPLE_BIT */ - 1107, /* GL_PIXEL_MODE_BIT */ - 674, /* GL_LIGHTING_BIT */ - 477, /* GL_FOG_BIT */ + 463, /* GL_FALSE */ + 695, /* GL_LINES */ + 697, /* GL_LINE_LOOP */ + 704, /* GL_LINE_STRIP */ + 1707, /* GL_TRIANGLES */ + 1710, /* GL_TRIANGLE_STRIP */ + 1708, /* GL_TRIANGLE_FAN */ + 1262, /* GL_QUADS */ + 1264, /* GL_QUAD_STRIP */ + 1150, /* GL_POLYGON */ + 1162, /* GL_POLYGON_STIPPLE_BIT */ + 1115, /* GL_PIXEL_MODE_BIT */ + 682, /* GL_LIGHTING_BIT */ + 485, /* GL_FOG_BIT */ 8, /* GL_ACCUM */ - 706, /* GL_LOAD */ - 1308, /* GL_RETURN */ - 980, /* GL_MULT */ + 714, /* GL_LOAD */ + 1316, /* GL_RETURN */ + 988, /* GL_MULT */ 23, /* GL_ADD */ - 996, /* GL_NEVER */ - 664, /* GL_LESS */ - 445, /* GL_EQUAL */ - 663, /* GL_LEQUAL */ - 587, /* GL_GREATER */ - 1011, /* GL_NOTEQUAL */ - 562, /* GL_GEQUAL */ + 1004, /* GL_NEVER */ + 672, /* GL_LESS */ + 453, /* GL_EQUAL */ + 671, /* GL_LEQUAL */ + 595, /* GL_GREATER */ + 1019, /* GL_NOTEQUAL */ + 570, /* GL_GEQUAL */ 46, /* GL_ALWAYS */ - 1441, /* GL_SRC_COLOR */ - 1040, /* GL_ONE_MINUS_SRC_COLOR */ - 1439, /* GL_SRC_ALPHA */ - 1039, /* GL_ONE_MINUS_SRC_ALPHA */ - 426, /* GL_DST_ALPHA */ - 1037, /* GL_ONE_MINUS_DST_ALPHA */ - 427, /* GL_DST_COLOR */ - 1038, /* GL_ONE_MINUS_DST_COLOR */ - 1440, /* GL_SRC_ALPHA_SATURATE */ - 550, /* GL_FRONT_LEFT */ - 551, /* GL_FRONT_RIGHT */ + 1449, /* GL_SRC_COLOR */ + 1048, /* GL_ONE_MINUS_SRC_COLOR */ + 1447, /* GL_SRC_ALPHA */ + 1047, /* GL_ONE_MINUS_SRC_ALPHA */ + 432, /* GL_DST_ALPHA */ + 1045, /* GL_ONE_MINUS_DST_ALPHA */ + 433, /* GL_DST_COLOR */ + 1046, /* GL_ONE_MINUS_DST_COLOR */ + 1448, /* GL_SRC_ALPHA_SATURATE */ + 558, /* GL_FRONT_LEFT */ + 559, /* GL_FRONT_RIGHT */ 68, /* GL_BACK_LEFT */ 69, /* GL_BACK_RIGHT */ - 547, /* GL_FRONT */ + 555, /* GL_FRONT */ 67, /* GL_BACK */ - 662, /* GL_LEFT */ - 1348, /* GL_RIGHT */ - 548, /* GL_FRONT_AND_BACK */ + 670, /* GL_LEFT */ + 1356, /* GL_RIGHT */ + 556, /* GL_FRONT_AND_BACK */ 62, /* GL_AUX0 */ 63, /* GL_AUX1 */ 64, /* GL_AUX2 */ 65, /* GL_AUX3 */ - 653, /* GL_INVALID_ENUM */ - 657, /* GL_INVALID_VALUE */ - 656, /* GL_INVALID_OPERATION */ - 1443, /* GL_STACK_OVERFLOW */ - 1444, /* GL_STACK_UNDERFLOW */ - 1065, /* GL_OUT_OF_MEMORY */ - 654, /* GL_INVALID_FRAMEBUFFER_OPERATION */ + 661, /* GL_INVALID_ENUM */ + 665, /* GL_INVALID_VALUE */ + 664, /* GL_INVALID_OPERATION */ + 1451, /* GL_STACK_OVERFLOW */ + 1452, /* GL_STACK_UNDERFLOW */ + 1073, /* GL_OUT_OF_MEMORY */ + 662, /* GL_INVALID_FRAMEBUFFER_OPERATION */ 0, /* GL_2D */ 2, /* GL_3D */ 3, /* GL_3D_COLOR */ 4, /* GL_3D_COLOR_TEXTURE */ 6, /* GL_4D_COLOR_TEXTURE */ - 1085, /* GL_PASS_THROUGH_TOKEN */ - 1141, /* GL_POINT_TOKEN */ - 697, /* GL_LINE_TOKEN */ - 1155, /* GL_POLYGON_TOKEN */ + 1093, /* GL_PASS_THROUGH_TOKEN */ + 1149, /* GL_POINT_TOKEN */ + 705, /* GL_LINE_TOKEN */ + 1163, /* GL_POLYGON_TOKEN */ 73, /* GL_BITMAP_TOKEN */ - 425, /* GL_DRAW_PIXEL_TOKEN */ - 286, /* GL_COPY_PIXEL_TOKEN */ - 690, /* GL_LINE_RESET_TOKEN */ - 448, /* GL_EXP */ - 449, /* GL_EXP2 */ - 319, /* GL_CW */ - 115, /* GL_CCW */ - 136, /* GL_COEFF */ - 1062, /* GL_ORDER */ - 363, /* GL_DOMAIN */ - 294, /* GL_CURRENT_COLOR */ - 297, /* GL_CURRENT_INDEX */ - 303, /* GL_CURRENT_NORMAL */ - 315, /* GL_CURRENT_TEXTURE_COORDS */ - 308, /* GL_CURRENT_RASTER_COLOR */ - 310, /* GL_CURRENT_RASTER_INDEX */ - 313, /* GL_CURRENT_RASTER_TEXTURE_COORDS */ - 311, /* GL_CURRENT_RASTER_POSITION */ - 312, /* GL_CURRENT_RASTER_POSITION_VALID */ - 309, /* GL_CURRENT_RASTER_DISTANCE */ - 1134, /* GL_POINT_SMOOTH */ - 1123, /* GL_POINT_SIZE */ - 1133, /* GL_POINT_SIZE_RANGE */ - 1124, /* GL_POINT_SIZE_GRANULARITY */ - 691, /* GL_LINE_SMOOTH */ - 698, /* GL_LINE_WIDTH */ - 700, /* GL_LINE_WIDTH_RANGE */ - 699, /* GL_LINE_WIDTH_GRANULARITY */ - 693, /* GL_LINE_STIPPLE */ - 694, /* GL_LINE_STIPPLE_PATTERN */ - 695, /* GL_LINE_STIPPLE_REPEAT */ - 705, /* GL_LIST_MODE */ - 864, /* GL_MAX_LIST_NESTING */ - 702, /* GL_LIST_BASE */ - 704, /* GL_LIST_INDEX */ - 1144, /* GL_POLYGON_MODE */ - 1151, /* GL_POLYGON_SMOOTH */ - 1153, /* GL_POLYGON_STIPPLE */ - 434, /* GL_EDGE_FLAG */ - 287, /* GL_CULL_FACE */ - 288, /* GL_CULL_FACE_MODE */ - 549, /* GL_FRONT_FACE */ - 673, /* GL_LIGHTING */ - 678, /* GL_LIGHT_MODEL_LOCAL_VIEWER */ - 679, /* GL_LIGHT_MODEL_TWO_SIDE */ - 675, /* GL_LIGHT_MODEL_AMBIENT */ - 1394, /* GL_SHADE_MODEL */ - 183, /* GL_COLOR_MATERIAL_FACE */ - 184, /* GL_COLOR_MATERIAL_PARAMETER */ - 182, /* GL_COLOR_MATERIAL */ - 476, /* GL_FOG */ - 498, /* GL_FOG_INDEX */ - 494, /* GL_FOG_DENSITY */ - 502, /* GL_FOG_START */ - 496, /* GL_FOG_END */ - 499, /* GL_FOG_MODE */ - 478, /* GL_FOG_COLOR */ - 350, /* GL_DEPTH_RANGE */ - 357, /* GL_DEPTH_TEST */ - 360, /* GL_DEPTH_WRITEMASK */ - 338, /* GL_DEPTH_CLEAR_VALUE */ - 349, /* GL_DEPTH_FUNC */ + 431, /* GL_DRAW_PIXEL_TOKEN */ + 292, /* GL_COPY_PIXEL_TOKEN */ + 698, /* GL_LINE_RESET_TOKEN */ + 456, /* GL_EXP */ + 457, /* GL_EXP2 */ + 325, /* GL_CW */ + 121, /* GL_CCW */ + 142, /* GL_COEFF */ + 1070, /* GL_ORDER */ + 369, /* GL_DOMAIN */ + 300, /* GL_CURRENT_COLOR */ + 303, /* GL_CURRENT_INDEX */ + 309, /* GL_CURRENT_NORMAL */ + 321, /* GL_CURRENT_TEXTURE_COORDS */ + 314, /* GL_CURRENT_RASTER_COLOR */ + 316, /* GL_CURRENT_RASTER_INDEX */ + 319, /* GL_CURRENT_RASTER_TEXTURE_COORDS */ + 317, /* GL_CURRENT_RASTER_POSITION */ + 318, /* GL_CURRENT_RASTER_POSITION_VALID */ + 315, /* GL_CURRENT_RASTER_DISTANCE */ + 1142, /* GL_POINT_SMOOTH */ + 1131, /* GL_POINT_SIZE */ + 1141, /* GL_POINT_SIZE_RANGE */ + 1132, /* GL_POINT_SIZE_GRANULARITY */ + 699, /* GL_LINE_SMOOTH */ + 706, /* GL_LINE_WIDTH */ + 708, /* GL_LINE_WIDTH_RANGE */ + 707, /* GL_LINE_WIDTH_GRANULARITY */ + 701, /* GL_LINE_STIPPLE */ + 702, /* GL_LINE_STIPPLE_PATTERN */ + 703, /* GL_LINE_STIPPLE_REPEAT */ + 713, /* GL_LIST_MODE */ + 872, /* GL_MAX_LIST_NESTING */ + 710, /* GL_LIST_BASE */ + 712, /* GL_LIST_INDEX */ + 1152, /* GL_POLYGON_MODE */ + 1159, /* GL_POLYGON_SMOOTH */ + 1161, /* GL_POLYGON_STIPPLE */ + 442, /* GL_EDGE_FLAG */ + 293, /* GL_CULL_FACE */ + 294, /* GL_CULL_FACE_MODE */ + 557, /* GL_FRONT_FACE */ + 681, /* GL_LIGHTING */ + 686, /* GL_LIGHT_MODEL_LOCAL_VIEWER */ + 687, /* GL_LIGHT_MODEL_TWO_SIDE */ + 683, /* GL_LIGHT_MODEL_AMBIENT */ + 1402, /* GL_SHADE_MODEL */ + 189, /* GL_COLOR_MATERIAL_FACE */ + 190, /* GL_COLOR_MATERIAL_PARAMETER */ + 188, /* GL_COLOR_MATERIAL */ + 484, /* GL_FOG */ + 506, /* GL_FOG_INDEX */ + 502, /* GL_FOG_DENSITY */ + 510, /* GL_FOG_START */ + 504, /* GL_FOG_END */ + 507, /* GL_FOG_MODE */ + 486, /* GL_FOG_COLOR */ + 356, /* GL_DEPTH_RANGE */ + 363, /* GL_DEPTH_TEST */ + 366, /* GL_DEPTH_WRITEMASK */ + 344, /* GL_DEPTH_CLEAR_VALUE */ + 355, /* GL_DEPTH_FUNC */ 12, /* GL_ACCUM_CLEAR_VALUE */ - 1479, /* GL_STENCIL_TEST */ - 1467, /* GL_STENCIL_CLEAR_VALUE */ - 1469, /* GL_STENCIL_FUNC */ - 1481, /* GL_STENCIL_VALUE_MASK */ - 1468, /* GL_STENCIL_FAIL */ - 1476, /* GL_STENCIL_PASS_DEPTH_FAIL */ - 1477, /* GL_STENCIL_PASS_DEPTH_PASS */ - 1478, /* GL_STENCIL_REF */ - 1482, /* GL_STENCIL_WRITEMASK */ - 833, /* GL_MATRIX_MODE */ - 1001, /* GL_NORMALIZE */ - 1791, /* GL_VIEWPORT */ - 975, /* GL_MODELVIEW_STACK_DEPTH */ - 1234, /* GL_PROJECTION_STACK_DEPTH */ - 1677, /* GL_TEXTURE_STACK_DEPTH */ - 973, /* GL_MODELVIEW_MATRIX */ - 1233, /* GL_PROJECTION_MATRIX */ - 1662, /* GL_TEXTURE_MATRIX */ + 1487, /* GL_STENCIL_TEST */ + 1475, /* GL_STENCIL_CLEAR_VALUE */ + 1477, /* GL_STENCIL_FUNC */ + 1489, /* GL_STENCIL_VALUE_MASK */ + 1476, /* GL_STENCIL_FAIL */ + 1484, /* GL_STENCIL_PASS_DEPTH_FAIL */ + 1485, /* GL_STENCIL_PASS_DEPTH_PASS */ + 1486, /* GL_STENCIL_REF */ + 1490, /* GL_STENCIL_WRITEMASK */ + 841, /* GL_MATRIX_MODE */ + 1009, /* GL_NORMALIZE */ + 1799, /* GL_VIEWPORT */ + 983, /* GL_MODELVIEW_STACK_DEPTH */ + 1242, /* GL_PROJECTION_STACK_DEPTH */ + 1685, /* GL_TEXTURE_STACK_DEPTH */ + 981, /* GL_MODELVIEW_MATRIX */ + 1241, /* GL_PROJECTION_MATRIX */ + 1670, /* GL_TEXTURE_MATRIX */ 60, /* GL_ATTRIB_STACK_DEPTH */ - 126, /* GL_CLIENT_ATTRIB_STACK_DEPTH */ + 132, /* GL_CLIENT_ATTRIB_STACK_DEPTH */ 43, /* GL_ALPHA_TEST */ 44, /* GL_ALPHA_TEST_FUNC */ 45, /* GL_ALPHA_TEST_REF */ - 362, /* GL_DITHER */ + 368, /* GL_DITHER */ 77, /* GL_BLEND_DST */ 85, /* GL_BLEND_SRC */ 74, /* GL_BLEND */ - 708, /* GL_LOGIC_OP_MODE */ - 627, /* GL_INDEX_LOGIC_OP */ - 181, /* GL_COLOR_LOGIC_OP */ + 716, /* GL_LOGIC_OP_MODE */ + 635, /* GL_INDEX_LOGIC_OP */ + 187, /* GL_COLOR_LOGIC_OP */ 66, /* GL_AUX_BUFFERS */ - 373, /* GL_DRAW_BUFFER */ - 1266, /* GL_READ_BUFFER */ - 1375, /* GL_SCISSOR_BOX */ - 1376, /* GL_SCISSOR_TEST */ - 626, /* GL_INDEX_CLEAR_VALUE */ - 631, /* GL_INDEX_WRITEMASK */ - 178, /* GL_COLOR_CLEAR_VALUE */ - 220, /* GL_COLOR_WRITEMASK */ - 628, /* GL_INDEX_MODE */ - 1342, /* GL_RGBA_MODE */ - 372, /* GL_DOUBLEBUFFER */ - 1483, /* GL_STEREO */ - 1301, /* GL_RENDER_MODE */ - 1086, /* GL_PERSPECTIVE_CORRECTION_HINT */ - 1135, /* GL_POINT_SMOOTH_HINT */ - 692, /* GL_LINE_SMOOTH_HINT */ - 1152, /* GL_POLYGON_SMOOTH_HINT */ - 497, /* GL_FOG_HINT */ - 1643, /* GL_TEXTURE_GEN_S */ - 1644, /* GL_TEXTURE_GEN_T */ - 1642, /* GL_TEXTURE_GEN_R */ - 1641, /* GL_TEXTURE_GEN_Q */ - 1099, /* GL_PIXEL_MAP_I_TO_I */ - 1105, /* GL_PIXEL_MAP_S_TO_S */ - 1101, /* GL_PIXEL_MAP_I_TO_R */ - 1097, /* GL_PIXEL_MAP_I_TO_G */ - 1095, /* GL_PIXEL_MAP_I_TO_B */ - 1093, /* GL_PIXEL_MAP_I_TO_A */ - 1103, /* GL_PIXEL_MAP_R_TO_R */ - 1091, /* GL_PIXEL_MAP_G_TO_G */ - 1089, /* GL_PIXEL_MAP_B_TO_B */ - 1087, /* GL_PIXEL_MAP_A_TO_A */ - 1100, /* GL_PIXEL_MAP_I_TO_I_SIZE */ - 1106, /* GL_PIXEL_MAP_S_TO_S_SIZE */ - 1102, /* GL_PIXEL_MAP_I_TO_R_SIZE */ - 1098, /* GL_PIXEL_MAP_I_TO_G_SIZE */ - 1096, /* GL_PIXEL_MAP_I_TO_B_SIZE */ - 1094, /* GL_PIXEL_MAP_I_TO_A_SIZE */ - 1104, /* GL_PIXEL_MAP_R_TO_R_SIZE */ - 1092, /* GL_PIXEL_MAP_G_TO_G_SIZE */ - 1090, /* GL_PIXEL_MAP_B_TO_B_SIZE */ - 1088, /* GL_PIXEL_MAP_A_TO_A_SIZE */ - 1711, /* GL_UNPACK_SWAP_BYTES */ - 1706, /* GL_UNPACK_LSB_FIRST */ - 1707, /* GL_UNPACK_ROW_LENGTH */ - 1710, /* GL_UNPACK_SKIP_ROWS */ - 1709, /* GL_UNPACK_SKIP_PIXELS */ - 1704, /* GL_UNPACK_ALIGNMENT */ - 1074, /* GL_PACK_SWAP_BYTES */ - 1069, /* GL_PACK_LSB_FIRST */ - 1070, /* GL_PACK_ROW_LENGTH */ - 1073, /* GL_PACK_SKIP_ROWS */ - 1072, /* GL_PACK_SKIP_PIXELS */ - 1066, /* GL_PACK_ALIGNMENT */ - 786, /* GL_MAP_COLOR */ - 787, /* GL_MAP_STENCIL */ - 630, /* GL_INDEX_SHIFT */ - 629, /* GL_INDEX_OFFSET */ - 1279, /* GL_RED_SCALE */ - 1277, /* GL_RED_BIAS */ - 1808, /* GL_ZOOM_X */ - 1809, /* GL_ZOOM_Y */ - 591, /* GL_GREEN_SCALE */ - 589, /* GL_GREEN_BIAS */ + 379, /* GL_DRAW_BUFFER */ + 1274, /* GL_READ_BUFFER */ + 1383, /* GL_SCISSOR_BOX */ + 1384, /* GL_SCISSOR_TEST */ + 634, /* GL_INDEX_CLEAR_VALUE */ + 639, /* GL_INDEX_WRITEMASK */ + 184, /* GL_COLOR_CLEAR_VALUE */ + 226, /* GL_COLOR_WRITEMASK */ + 636, /* GL_INDEX_MODE */ + 1350, /* GL_RGBA_MODE */ + 378, /* GL_DOUBLEBUFFER */ + 1491, /* GL_STEREO */ + 1309, /* GL_RENDER_MODE */ + 1094, /* GL_PERSPECTIVE_CORRECTION_HINT */ + 1143, /* GL_POINT_SMOOTH_HINT */ + 700, /* GL_LINE_SMOOTH_HINT */ + 1160, /* GL_POLYGON_SMOOTH_HINT */ + 505, /* GL_FOG_HINT */ + 1651, /* GL_TEXTURE_GEN_S */ + 1652, /* GL_TEXTURE_GEN_T */ + 1650, /* GL_TEXTURE_GEN_R */ + 1649, /* GL_TEXTURE_GEN_Q */ + 1107, /* GL_PIXEL_MAP_I_TO_I */ + 1113, /* GL_PIXEL_MAP_S_TO_S */ + 1109, /* GL_PIXEL_MAP_I_TO_R */ + 1105, /* GL_PIXEL_MAP_I_TO_G */ + 1103, /* GL_PIXEL_MAP_I_TO_B */ + 1101, /* GL_PIXEL_MAP_I_TO_A */ + 1111, /* GL_PIXEL_MAP_R_TO_R */ + 1099, /* GL_PIXEL_MAP_G_TO_G */ + 1097, /* GL_PIXEL_MAP_B_TO_B */ + 1095, /* GL_PIXEL_MAP_A_TO_A */ + 1108, /* GL_PIXEL_MAP_I_TO_I_SIZE */ + 1114, /* GL_PIXEL_MAP_S_TO_S_SIZE */ + 1110, /* GL_PIXEL_MAP_I_TO_R_SIZE */ + 1106, /* GL_PIXEL_MAP_I_TO_G_SIZE */ + 1104, /* GL_PIXEL_MAP_I_TO_B_SIZE */ + 1102, /* GL_PIXEL_MAP_I_TO_A_SIZE */ + 1112, /* GL_PIXEL_MAP_R_TO_R_SIZE */ + 1100, /* GL_PIXEL_MAP_G_TO_G_SIZE */ + 1098, /* GL_PIXEL_MAP_B_TO_B_SIZE */ + 1096, /* GL_PIXEL_MAP_A_TO_A_SIZE */ + 1719, /* GL_UNPACK_SWAP_BYTES */ + 1714, /* GL_UNPACK_LSB_FIRST */ + 1715, /* GL_UNPACK_ROW_LENGTH */ + 1718, /* GL_UNPACK_SKIP_ROWS */ + 1717, /* GL_UNPACK_SKIP_PIXELS */ + 1712, /* GL_UNPACK_ALIGNMENT */ + 1082, /* GL_PACK_SWAP_BYTES */ + 1077, /* GL_PACK_LSB_FIRST */ + 1078, /* GL_PACK_ROW_LENGTH */ + 1081, /* GL_PACK_SKIP_ROWS */ + 1080, /* GL_PACK_SKIP_PIXELS */ + 1074, /* GL_PACK_ALIGNMENT */ + 794, /* GL_MAP_COLOR */ + 795, /* GL_MAP_STENCIL */ + 638, /* GL_INDEX_SHIFT */ + 637, /* GL_INDEX_OFFSET */ + 1287, /* GL_RED_SCALE */ + 1285, /* GL_RED_BIAS */ + 1816, /* GL_ZOOM_X */ + 1817, /* GL_ZOOM_Y */ + 599, /* GL_GREEN_SCALE */ + 597, /* GL_GREEN_BIAS */ 91, /* GL_BLUE_SCALE */ 89, /* GL_BLUE_BIAS */ 42, /* GL_ALPHA_SCALE */ 40, /* GL_ALPHA_BIAS */ - 351, /* GL_DEPTH_SCALE */ - 332, /* GL_DEPTH_BIAS */ - 859, /* GL_MAX_EVAL_ORDER */ - 863, /* GL_MAX_LIGHTS */ - 842, /* GL_MAX_CLIP_PLANES */ - 908, /* GL_MAX_TEXTURE_SIZE */ - 869, /* GL_MAX_PIXEL_MAP_TABLE */ - 838, /* GL_MAX_ATTRIB_STACK_DEPTH */ - 866, /* GL_MAX_MODELVIEW_STACK_DEPTH */ - 867, /* GL_MAX_NAME_STACK_DEPTH */ - 895, /* GL_MAX_PROJECTION_STACK_DEPTH */ - 909, /* GL_MAX_TEXTURE_STACK_DEPTH */ - 923, /* GL_MAX_VIEWPORT_DIMS */ - 839, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */ - 1490, /* GL_SUBPIXEL_BITS */ - 625, /* GL_INDEX_BITS */ - 1278, /* GL_RED_BITS */ - 590, /* GL_GREEN_BITS */ + 357, /* GL_DEPTH_SCALE */ + 338, /* GL_DEPTH_BIAS */ + 867, /* GL_MAX_EVAL_ORDER */ + 871, /* GL_MAX_LIGHTS */ + 850, /* GL_MAX_CLIP_PLANES */ + 916, /* GL_MAX_TEXTURE_SIZE */ + 877, /* GL_MAX_PIXEL_MAP_TABLE */ + 846, /* GL_MAX_ATTRIB_STACK_DEPTH */ + 874, /* GL_MAX_MODELVIEW_STACK_DEPTH */ + 875, /* GL_MAX_NAME_STACK_DEPTH */ + 903, /* GL_MAX_PROJECTION_STACK_DEPTH */ + 917, /* GL_MAX_TEXTURE_STACK_DEPTH */ + 931, /* GL_MAX_VIEWPORT_DIMS */ + 847, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */ + 1498, /* GL_SUBPIXEL_BITS */ + 633, /* GL_INDEX_BITS */ + 1286, /* GL_RED_BITS */ + 598, /* GL_GREEN_BITS */ 90, /* GL_BLUE_BITS */ 41, /* GL_ALPHA_BITS */ - 333, /* GL_DEPTH_BITS */ - 1465, /* GL_STENCIL_BITS */ + 339, /* GL_DEPTH_BITS */ + 1473, /* GL_STENCIL_BITS */ 14, /* GL_ACCUM_RED_BITS */ 13, /* GL_ACCUM_GREEN_BITS */ 10, /* GL_ACCUM_BLUE_BITS */ 9, /* GL_ACCUM_ALPHA_BITS */ - 989, /* GL_NAME_STACK_DEPTH */ + 997, /* GL_NAME_STACK_DEPTH */ 61, /* GL_AUTO_NORMAL */ - 732, /* GL_MAP1_COLOR_4 */ - 735, /* GL_MAP1_INDEX */ - 736, /* GL_MAP1_NORMAL */ - 737, /* GL_MAP1_TEXTURE_COORD_1 */ - 738, /* GL_MAP1_TEXTURE_COORD_2 */ - 739, /* GL_MAP1_TEXTURE_COORD_3 */ - 740, /* GL_MAP1_TEXTURE_COORD_4 */ - 741, /* GL_MAP1_VERTEX_3 */ - 742, /* GL_MAP1_VERTEX_4 */ - 759, /* GL_MAP2_COLOR_4 */ - 762, /* GL_MAP2_INDEX */ - 763, /* GL_MAP2_NORMAL */ - 764, /* GL_MAP2_TEXTURE_COORD_1 */ - 765, /* GL_MAP2_TEXTURE_COORD_2 */ - 766, /* GL_MAP2_TEXTURE_COORD_3 */ - 767, /* GL_MAP2_TEXTURE_COORD_4 */ - 768, /* GL_MAP2_VERTEX_3 */ - 769, /* GL_MAP2_VERTEX_4 */ - 733, /* GL_MAP1_GRID_DOMAIN */ - 734, /* GL_MAP1_GRID_SEGMENTS */ - 760, /* GL_MAP2_GRID_DOMAIN */ - 761, /* GL_MAP2_GRID_SEGMENTS */ - 1567, /* GL_TEXTURE_1D */ - 1569, /* GL_TEXTURE_2D */ - 458, /* GL_FEEDBACK_BUFFER_POINTER */ - 459, /* GL_FEEDBACK_BUFFER_SIZE */ - 460, /* GL_FEEDBACK_BUFFER_TYPE */ - 1385, /* GL_SELECTION_BUFFER_POINTER */ - 1386, /* GL_SELECTION_BUFFER_SIZE */ - 1681, /* GL_TEXTURE_WIDTH */ - 1648, /* GL_TEXTURE_HEIGHT */ - 1604, /* GL_TEXTURE_COMPONENTS */ - 1588, /* GL_TEXTURE_BORDER_COLOR */ - 1587, /* GL_TEXTURE_BORDER */ - 364, /* GL_DONT_CARE */ - 456, /* GL_FASTEST */ - 997, /* GL_NICEST */ + 740, /* GL_MAP1_COLOR_4 */ + 743, /* GL_MAP1_INDEX */ + 744, /* GL_MAP1_NORMAL */ + 745, /* GL_MAP1_TEXTURE_COORD_1 */ + 746, /* GL_MAP1_TEXTURE_COORD_2 */ + 747, /* GL_MAP1_TEXTURE_COORD_3 */ + 748, /* GL_MAP1_TEXTURE_COORD_4 */ + 749, /* GL_MAP1_VERTEX_3 */ + 750, /* GL_MAP1_VERTEX_4 */ + 767, /* GL_MAP2_COLOR_4 */ + 770, /* GL_MAP2_INDEX */ + 771, /* GL_MAP2_NORMAL */ + 772, /* GL_MAP2_TEXTURE_COORD_1 */ + 773, /* GL_MAP2_TEXTURE_COORD_2 */ + 774, /* GL_MAP2_TEXTURE_COORD_3 */ + 775, /* GL_MAP2_TEXTURE_COORD_4 */ + 776, /* GL_MAP2_VERTEX_3 */ + 777, /* GL_MAP2_VERTEX_4 */ + 741, /* GL_MAP1_GRID_DOMAIN */ + 742, /* GL_MAP1_GRID_SEGMENTS */ + 768, /* GL_MAP2_GRID_DOMAIN */ + 769, /* GL_MAP2_GRID_SEGMENTS */ + 1575, /* GL_TEXTURE_1D */ + 1577, /* GL_TEXTURE_2D */ + 466, /* GL_FEEDBACK_BUFFER_POINTER */ + 467, /* GL_FEEDBACK_BUFFER_SIZE */ + 468, /* GL_FEEDBACK_BUFFER_TYPE */ + 1393, /* GL_SELECTION_BUFFER_POINTER */ + 1394, /* GL_SELECTION_BUFFER_SIZE */ + 1689, /* GL_TEXTURE_WIDTH */ + 1656, /* GL_TEXTURE_HEIGHT */ + 1612, /* GL_TEXTURE_COMPONENTS */ + 1596, /* GL_TEXTURE_BORDER_COLOR */ + 1595, /* GL_TEXTURE_BORDER */ + 370, /* GL_DONT_CARE */ + 464, /* GL_FASTEST */ + 1005, /* GL_NICEST */ 47, /* GL_AMBIENT */ - 361, /* GL_DIFFUSE */ - 1428, /* GL_SPECULAR */ - 1156, /* GL_POSITION */ - 1431, /* GL_SPOT_DIRECTION */ - 1432, /* GL_SPOT_EXPONENT */ - 1430, /* GL_SPOT_CUTOFF */ - 260, /* GL_CONSTANT_ATTENUATION */ - 682, /* GL_LINEAR_ATTENUATION */ - 1253, /* GL_QUADRATIC_ATTENUATION */ - 234, /* GL_COMPILE */ - 235, /* GL_COMPILE_AND_EXECUTE */ - 110, /* GL_BYTE */ - 1712, /* GL_UNSIGNED_BYTE */ - 1399, /* GL_SHORT */ - 1723, /* GL_UNSIGNED_SHORT */ - 633, /* GL_INT */ - 1715, /* GL_UNSIGNED_INT */ - 463, /* GL_FLOAT */ + 367, /* GL_DIFFUSE */ + 1436, /* GL_SPECULAR */ + 1164, /* GL_POSITION */ + 1439, /* GL_SPOT_DIRECTION */ + 1440, /* GL_SPOT_EXPONENT */ + 1438, /* GL_SPOT_CUTOFF */ + 266, /* GL_CONSTANT_ATTENUATION */ + 690, /* GL_LINEAR_ATTENUATION */ + 1261, /* GL_QUADRATIC_ATTENUATION */ + 240, /* GL_COMPILE */ + 241, /* GL_COMPILE_AND_EXECUTE */ + 116, /* GL_BYTE */ + 1720, /* GL_UNSIGNED_BYTE */ + 1407, /* GL_SHORT */ + 1731, /* GL_UNSIGNED_SHORT */ + 641, /* GL_INT */ + 1723, /* GL_UNSIGNED_INT */ + 471, /* GL_FLOAT */ 1, /* GL_2_BYTES */ 5, /* GL_3_BYTES */ 7, /* GL_4_BYTES */ - 371, /* GL_DOUBLE */ - 122, /* GL_CLEAR */ + 377, /* GL_DOUBLE */ + 128, /* GL_CLEAR */ 49, /* GL_AND */ 51, /* GL_AND_REVERSE */ - 284, /* GL_COPY */ + 290, /* GL_COPY */ 50, /* GL_AND_INVERTED */ - 999, /* GL_NOOP */ - 1804, /* GL_XOR */ - 1061, /* GL_OR */ - 1000, /* GL_NOR */ - 446, /* GL_EQUIV */ - 660, /* GL_INVERT */ - 1064, /* GL_OR_REVERSE */ - 285, /* GL_COPY_INVERTED */ - 1063, /* GL_OR_INVERTED */ - 990, /* GL_NAND */ - 1390, /* GL_SET */ - 443, /* GL_EMISSION */ - 1398, /* GL_SHININESS */ + 1007, /* GL_NOOP */ + 1812, /* GL_XOR */ + 1069, /* GL_OR */ + 1008, /* GL_NOR */ + 454, /* GL_EQUIV */ + 668, /* GL_INVERT */ + 1072, /* GL_OR_REVERSE */ + 291, /* GL_COPY_INVERTED */ + 1071, /* GL_OR_INVERTED */ + 998, /* GL_NAND */ + 1398, /* GL_SET */ + 451, /* GL_EMISSION */ + 1406, /* GL_SHININESS */ 48, /* GL_AMBIENT_AND_DIFFUSE */ - 180, /* GL_COLOR_INDEXES */ - 940, /* GL_MODELVIEW */ - 1232, /* GL_PROJECTION */ - 1502, /* GL_TEXTURE */ - 137, /* GL_COLOR */ - 328, /* GL_DEPTH */ - 1451, /* GL_STENCIL */ - 179, /* GL_COLOR_INDEX */ - 1470, /* GL_STENCIL_INDEX */ - 339, /* GL_DEPTH_COMPONENT */ - 1274, /* GL_RED */ - 588, /* GL_GREEN */ + 186, /* GL_COLOR_INDEXES */ + 948, /* GL_MODELVIEW */ + 1240, /* GL_PROJECTION */ + 1510, /* GL_TEXTURE */ + 143, /* GL_COLOR */ + 334, /* GL_DEPTH */ + 1459, /* GL_STENCIL */ + 185, /* GL_COLOR_INDEX */ + 1478, /* GL_STENCIL_INDEX */ + 345, /* GL_DEPTH_COMPONENT */ + 1282, /* GL_RED */ + 596, /* GL_GREEN */ 88, /* GL_BLUE */ 31, /* GL_ALPHA */ - 1309, /* GL_RGB */ - 1328, /* GL_RGBA */ - 710, /* GL_LUMINANCE */ - 731, /* GL_LUMINANCE_ALPHA */ + 1317, /* GL_RGB */ + 1336, /* GL_RGBA */ + 718, /* GL_LUMINANCE */ + 739, /* GL_LUMINANCE_ALPHA */ 72, /* GL_BITMAP */ - 1112, /* GL_POINT */ - 680, /* GL_LINE */ - 461, /* GL_FILL */ - 1283, /* GL_RENDER */ - 457, /* GL_FEEDBACK */ - 1384, /* GL_SELECT */ - 462, /* GL_FLAT */ - 1403, /* GL_SMOOTH */ - 661, /* GL_KEEP */ - 1303, /* GL_REPLACE */ - 615, /* GL_INCR */ - 324, /* GL_DECR */ - 1738, /* GL_VENDOR */ - 1300, /* GL_RENDERER */ - 1739, /* GL_VERSION */ - 450, /* GL_EXTENSIONS */ - 1349, /* GL_S */ - 1493, /* GL_T */ - 1263, /* GL_R */ - 1252, /* GL_Q */ - 976, /* GL_MODULATE */ - 323, /* GL_DECAL */ - 1638, /* GL_TEXTURE_ENV_MODE */ - 1637, /* GL_TEXTURE_ENV_COLOR */ - 1636, /* GL_TEXTURE_ENV */ - 451, /* GL_EYE_LINEAR */ - 1023, /* GL_OBJECT_LINEAR */ - 1429, /* GL_SPHERE_MAP */ - 1640, /* GL_TEXTURE_GEN_MODE */ - 1025, /* GL_OBJECT_PLANE */ - 452, /* GL_EYE_PLANE */ - 991, /* GL_NEAREST */ - 681, /* GL_LINEAR */ - 995, /* GL_NEAREST_MIPMAP_NEAREST */ - 686, /* GL_LINEAR_MIPMAP_NEAREST */ - 994, /* GL_NEAREST_MIPMAP_LINEAR */ - 685, /* GL_LINEAR_MIPMAP_LINEAR */ - 1661, /* GL_TEXTURE_MAG_FILTER */ - 1669, /* GL_TEXTURE_MIN_FILTER */ - 1683, /* GL_TEXTURE_WRAP_S */ - 1684, /* GL_TEXTURE_WRAP_T */ - 116, /* GL_CLAMP */ - 1302, /* GL_REPEAT */ - 1150, /* GL_POLYGON_OFFSET_UNITS */ - 1149, /* GL_POLYGON_OFFSET_POINT */ - 1148, /* GL_POLYGON_OFFSET_LINE */ - 1264, /* GL_R3_G3_B2 */ - 1735, /* GL_V2F */ - 1736, /* GL_V3F */ - 113, /* GL_C4UB_V2F */ - 114, /* GL_C4UB_V3F */ - 111, /* GL_C3F_V3F */ - 988, /* GL_N3F_V3F */ - 112, /* GL_C4F_N3F_V3F */ - 1498, /* GL_T2F_V3F */ - 1500, /* GL_T4F_V4F */ - 1496, /* GL_T2F_C4UB_V3F */ - 1494, /* GL_T2F_C3F_V3F */ - 1497, /* GL_T2F_N3F_V3F */ - 1495, /* GL_T2F_C4F_N3F_V3F */ - 1499, /* GL_T4F_C4F_N3F_V4F */ - 129, /* GL_CLIP_PLANE0 */ - 130, /* GL_CLIP_PLANE1 */ - 131, /* GL_CLIP_PLANE2 */ - 132, /* GL_CLIP_PLANE3 */ - 133, /* GL_CLIP_PLANE4 */ - 134, /* GL_CLIP_PLANE5 */ - 665, /* GL_LIGHT0 */ - 666, /* GL_LIGHT1 */ - 667, /* GL_LIGHT2 */ - 668, /* GL_LIGHT3 */ - 669, /* GL_LIGHT4 */ - 670, /* GL_LIGHT5 */ - 671, /* GL_LIGHT6 */ - 672, /* GL_LIGHT7 */ - 592, /* GL_HINT_BIT */ - 262, /* GL_CONSTANT_COLOR */ - 1035, /* GL_ONE_MINUS_CONSTANT_COLOR */ - 257, /* GL_CONSTANT_ALPHA */ - 1033, /* GL_ONE_MINUS_CONSTANT_ALPHA */ + 1120, /* GL_POINT */ + 688, /* GL_LINE */ + 469, /* GL_FILL */ + 1291, /* GL_RENDER */ + 465, /* GL_FEEDBACK */ + 1392, /* GL_SELECT */ + 470, /* GL_FLAT */ + 1411, /* GL_SMOOTH */ + 669, /* GL_KEEP */ + 1311, /* GL_REPLACE */ + 623, /* GL_INCR */ + 330, /* GL_DECR */ + 1746, /* GL_VENDOR */ + 1308, /* GL_RENDERER */ + 1747, /* GL_VERSION */ + 458, /* GL_EXTENSIONS */ + 1357, /* GL_S */ + 1501, /* GL_T */ + 1271, /* GL_R */ + 1260, /* GL_Q */ + 984, /* GL_MODULATE */ + 329, /* GL_DECAL */ + 1646, /* GL_TEXTURE_ENV_MODE */ + 1645, /* GL_TEXTURE_ENV_COLOR */ + 1644, /* GL_TEXTURE_ENV */ + 459, /* GL_EYE_LINEAR */ + 1031, /* GL_OBJECT_LINEAR */ + 1437, /* GL_SPHERE_MAP */ + 1648, /* GL_TEXTURE_GEN_MODE */ + 1033, /* GL_OBJECT_PLANE */ + 460, /* GL_EYE_PLANE */ + 999, /* GL_NEAREST */ + 689, /* GL_LINEAR */ + 1003, /* GL_NEAREST_MIPMAP_NEAREST */ + 694, /* GL_LINEAR_MIPMAP_NEAREST */ + 1002, /* GL_NEAREST_MIPMAP_LINEAR */ + 693, /* GL_LINEAR_MIPMAP_LINEAR */ + 1669, /* GL_TEXTURE_MAG_FILTER */ + 1677, /* GL_TEXTURE_MIN_FILTER */ + 1691, /* GL_TEXTURE_WRAP_S */ + 1692, /* GL_TEXTURE_WRAP_T */ + 122, /* GL_CLAMP */ + 1310, /* GL_REPEAT */ + 1158, /* GL_POLYGON_OFFSET_UNITS */ + 1157, /* GL_POLYGON_OFFSET_POINT */ + 1156, /* GL_POLYGON_OFFSET_LINE */ + 1272, /* GL_R3_G3_B2 */ + 1743, /* GL_V2F */ + 1744, /* GL_V3F */ + 119, /* GL_C4UB_V2F */ + 120, /* GL_C4UB_V3F */ + 117, /* GL_C3F_V3F */ + 996, /* GL_N3F_V3F */ + 118, /* GL_C4F_N3F_V3F */ + 1506, /* GL_T2F_V3F */ + 1508, /* GL_T4F_V4F */ + 1504, /* GL_T2F_C4UB_V3F */ + 1502, /* GL_T2F_C3F_V3F */ + 1505, /* GL_T2F_N3F_V3F */ + 1503, /* GL_T2F_C4F_N3F_V3F */ + 1507, /* GL_T4F_C4F_N3F_V4F */ + 135, /* GL_CLIP_PLANE0 */ + 136, /* GL_CLIP_PLANE1 */ + 137, /* GL_CLIP_PLANE2 */ + 138, /* GL_CLIP_PLANE3 */ + 139, /* GL_CLIP_PLANE4 */ + 140, /* GL_CLIP_PLANE5 */ + 673, /* GL_LIGHT0 */ + 674, /* GL_LIGHT1 */ + 675, /* GL_LIGHT2 */ + 676, /* GL_LIGHT3 */ + 677, /* GL_LIGHT4 */ + 678, /* GL_LIGHT5 */ + 679, /* GL_LIGHT6 */ + 680, /* GL_LIGHT7 */ + 600, /* GL_HINT_BIT */ + 268, /* GL_CONSTANT_COLOR */ + 1043, /* GL_ONE_MINUS_CONSTANT_COLOR */ + 263, /* GL_CONSTANT_ALPHA */ + 1041, /* GL_ONE_MINUS_CONSTANT_ALPHA */ 75, /* GL_BLEND_COLOR */ - 552, /* GL_FUNC_ADD */ - 924, /* GL_MIN */ - 835, /* GL_MAX */ + 560, /* GL_FUNC_ADD */ + 932, /* GL_MIN */ + 843, /* GL_MAX */ 80, /* GL_BLEND_EQUATION */ - 556, /* GL_FUNC_SUBTRACT */ - 554, /* GL_FUNC_REVERSE_SUBTRACT */ - 265, /* GL_CONVOLUTION_1D */ - 266, /* GL_CONVOLUTION_2D */ - 1387, /* GL_SEPARABLE_2D */ - 269, /* GL_CONVOLUTION_BORDER_MODE */ - 273, /* GL_CONVOLUTION_FILTER_SCALE */ - 271, /* GL_CONVOLUTION_FILTER_BIAS */ - 1275, /* GL_REDUCE */ - 275, /* GL_CONVOLUTION_FORMAT */ - 279, /* GL_CONVOLUTION_WIDTH */ - 277, /* GL_CONVOLUTION_HEIGHT */ - 850, /* GL_MAX_CONVOLUTION_WIDTH */ - 848, /* GL_MAX_CONVOLUTION_HEIGHT */ - 1189, /* GL_POST_CONVOLUTION_RED_SCALE */ - 1185, /* GL_POST_CONVOLUTION_GREEN_SCALE */ - 1180, /* GL_POST_CONVOLUTION_BLUE_SCALE */ - 1176, /* GL_POST_CONVOLUTION_ALPHA_SCALE */ - 1187, /* GL_POST_CONVOLUTION_RED_BIAS */ - 1183, /* GL_POST_CONVOLUTION_GREEN_BIAS */ - 1178, /* GL_POST_CONVOLUTION_BLUE_BIAS */ - 1174, /* GL_POST_CONVOLUTION_ALPHA_BIAS */ - 593, /* GL_HISTOGRAM */ - 1236, /* GL_PROXY_HISTOGRAM */ - 609, /* GL_HISTOGRAM_WIDTH */ - 599, /* GL_HISTOGRAM_FORMAT */ - 605, /* GL_HISTOGRAM_RED_SIZE */ - 601, /* GL_HISTOGRAM_GREEN_SIZE */ - 596, /* GL_HISTOGRAM_BLUE_SIZE */ - 594, /* GL_HISTOGRAM_ALPHA_SIZE */ - 603, /* GL_HISTOGRAM_LUMINANCE_SIZE */ - 607, /* GL_HISTOGRAM_SINK */ - 925, /* GL_MINMAX */ - 927, /* GL_MINMAX_FORMAT */ - 929, /* GL_MINMAX_SINK */ - 1501, /* GL_TABLE_TOO_LARGE_EXT */ - 1714, /* GL_UNSIGNED_BYTE_3_3_2 */ - 1725, /* GL_UNSIGNED_SHORT_4_4_4_4 */ - 1727, /* GL_UNSIGNED_SHORT_5_5_5_1 */ - 1720, /* GL_UNSIGNED_INT_8_8_8_8 */ - 1716, /* GL_UNSIGNED_INT_10_10_10_2 */ - 1147, /* GL_POLYGON_OFFSET_FILL */ - 1146, /* GL_POLYGON_OFFSET_FACTOR */ - 1145, /* GL_POLYGON_OFFSET_BIAS */ - 1306, /* GL_RESCALE_NORMAL */ + 564, /* GL_FUNC_SUBTRACT */ + 562, /* GL_FUNC_REVERSE_SUBTRACT */ + 271, /* GL_CONVOLUTION_1D */ + 272, /* GL_CONVOLUTION_2D */ + 1395, /* GL_SEPARABLE_2D */ + 275, /* GL_CONVOLUTION_BORDER_MODE */ + 279, /* GL_CONVOLUTION_FILTER_SCALE */ + 277, /* GL_CONVOLUTION_FILTER_BIAS */ + 1283, /* GL_REDUCE */ + 281, /* GL_CONVOLUTION_FORMAT */ + 285, /* GL_CONVOLUTION_WIDTH */ + 283, /* GL_CONVOLUTION_HEIGHT */ + 858, /* GL_MAX_CONVOLUTION_WIDTH */ + 856, /* GL_MAX_CONVOLUTION_HEIGHT */ + 1197, /* GL_POST_CONVOLUTION_RED_SCALE */ + 1193, /* GL_POST_CONVOLUTION_GREEN_SCALE */ + 1188, /* GL_POST_CONVOLUTION_BLUE_SCALE */ + 1184, /* GL_POST_CONVOLUTION_ALPHA_SCALE */ + 1195, /* GL_POST_CONVOLUTION_RED_BIAS */ + 1191, /* GL_POST_CONVOLUTION_GREEN_BIAS */ + 1186, /* GL_POST_CONVOLUTION_BLUE_BIAS */ + 1182, /* GL_POST_CONVOLUTION_ALPHA_BIAS */ + 601, /* GL_HISTOGRAM */ + 1244, /* GL_PROXY_HISTOGRAM */ + 617, /* GL_HISTOGRAM_WIDTH */ + 607, /* GL_HISTOGRAM_FORMAT */ + 613, /* GL_HISTOGRAM_RED_SIZE */ + 609, /* GL_HISTOGRAM_GREEN_SIZE */ + 604, /* GL_HISTOGRAM_BLUE_SIZE */ + 602, /* GL_HISTOGRAM_ALPHA_SIZE */ + 611, /* GL_HISTOGRAM_LUMINANCE_SIZE */ + 615, /* GL_HISTOGRAM_SINK */ + 933, /* GL_MINMAX */ + 935, /* GL_MINMAX_FORMAT */ + 937, /* GL_MINMAX_SINK */ + 1509, /* GL_TABLE_TOO_LARGE_EXT */ + 1722, /* GL_UNSIGNED_BYTE_3_3_2 */ + 1733, /* GL_UNSIGNED_SHORT_4_4_4_4 */ + 1735, /* GL_UNSIGNED_SHORT_5_5_5_1 */ + 1728, /* GL_UNSIGNED_INT_8_8_8_8 */ + 1724, /* GL_UNSIGNED_INT_10_10_10_2 */ + 1155, /* GL_POLYGON_OFFSET_FILL */ + 1154, /* GL_POLYGON_OFFSET_FACTOR */ + 1153, /* GL_POLYGON_OFFSET_BIAS */ + 1314, /* GL_RESCALE_NORMAL */ 36, /* GL_ALPHA4 */ 38, /* GL_ALPHA8 */ 32, /* GL_ALPHA12 */ 34, /* GL_ALPHA16 */ - 721, /* GL_LUMINANCE4 */ - 727, /* GL_LUMINANCE8 */ - 711, /* GL_LUMINANCE12 */ - 717, /* GL_LUMINANCE16 */ - 722, /* GL_LUMINANCE4_ALPHA4 */ - 725, /* GL_LUMINANCE6_ALPHA2 */ - 728, /* GL_LUMINANCE8_ALPHA8 */ - 714, /* GL_LUMINANCE12_ALPHA4 */ - 712, /* GL_LUMINANCE12_ALPHA12 */ - 718, /* GL_LUMINANCE16_ALPHA16 */ - 634, /* GL_INTENSITY */ - 639, /* GL_INTENSITY4 */ - 641, /* GL_INTENSITY8 */ - 635, /* GL_INTENSITY12 */ - 637, /* GL_INTENSITY16 */ - 1318, /* GL_RGB2_EXT */ - 1319, /* GL_RGB4 */ - 1322, /* GL_RGB5 */ - 1326, /* GL_RGB8 */ - 1310, /* GL_RGB10 */ - 1314, /* GL_RGB12 */ - 1316, /* GL_RGB16 */ - 1333, /* GL_RGBA2 */ - 1335, /* GL_RGBA4 */ - 1323, /* GL_RGB5_A1 */ - 1339, /* GL_RGBA8 */ - 1311, /* GL_RGB10_A2 */ - 1329, /* GL_RGBA12 */ - 1331, /* GL_RGBA16 */ - 1674, /* GL_TEXTURE_RED_SIZE */ - 1646, /* GL_TEXTURE_GREEN_SIZE */ - 1585, /* GL_TEXTURE_BLUE_SIZE */ - 1572, /* GL_TEXTURE_ALPHA_SIZE */ - 1659, /* GL_TEXTURE_LUMINANCE_SIZE */ - 1650, /* GL_TEXTURE_INTENSITY_SIZE */ - 1304, /* GL_REPLACE_EXT */ - 1240, /* GL_PROXY_TEXTURE_1D */ - 1243, /* GL_PROXY_TEXTURE_2D */ - 1679, /* GL_TEXTURE_TOO_LARGE_EXT */ - 1671, /* GL_TEXTURE_PRIORITY */ - 1676, /* GL_TEXTURE_RESIDENT */ - 1575, /* GL_TEXTURE_BINDING_1D */ - 1577, /* GL_TEXTURE_BINDING_2D */ - 1579, /* GL_TEXTURE_BINDING_3D */ - 1071, /* GL_PACK_SKIP_IMAGES */ - 1067, /* GL_PACK_IMAGE_HEIGHT */ - 1708, /* GL_UNPACK_SKIP_IMAGES */ - 1705, /* GL_UNPACK_IMAGE_HEIGHT */ - 1571, /* GL_TEXTURE_3D */ - 1246, /* GL_PROXY_TEXTURE_3D */ - 1633, /* GL_TEXTURE_DEPTH */ - 1682, /* GL_TEXTURE_WRAP_R */ - 836, /* GL_MAX_3D_TEXTURE_SIZE */ - 1740, /* GL_VERTEX_ARRAY */ - 1002, /* GL_NORMAL_ARRAY */ - 138, /* GL_COLOR_ARRAY */ - 619, /* GL_INDEX_ARRAY */ - 1612, /* GL_TEXTURE_COORD_ARRAY */ - 435, /* GL_EDGE_FLAG_ARRAY */ - 1745, /* GL_VERTEX_ARRAY_SIZE */ - 1747, /* GL_VERTEX_ARRAY_TYPE */ - 1746, /* GL_VERTEX_ARRAY_STRIDE */ - 1007, /* GL_NORMAL_ARRAY_TYPE */ - 1006, /* GL_NORMAL_ARRAY_STRIDE */ - 142, /* GL_COLOR_ARRAY_SIZE */ - 144, /* GL_COLOR_ARRAY_TYPE */ - 143, /* GL_COLOR_ARRAY_STRIDE */ - 624, /* GL_INDEX_ARRAY_TYPE */ - 623, /* GL_INDEX_ARRAY_STRIDE */ - 1616, /* GL_TEXTURE_COORD_ARRAY_SIZE */ - 1618, /* GL_TEXTURE_COORD_ARRAY_TYPE */ - 1617, /* GL_TEXTURE_COORD_ARRAY_STRIDE */ - 439, /* GL_EDGE_FLAG_ARRAY_STRIDE */ - 1744, /* GL_VERTEX_ARRAY_POINTER */ - 1005, /* GL_NORMAL_ARRAY_POINTER */ - 141, /* GL_COLOR_ARRAY_POINTER */ - 622, /* GL_INDEX_ARRAY_POINTER */ - 1615, /* GL_TEXTURE_COORD_ARRAY_POINTER */ - 438, /* GL_EDGE_FLAG_ARRAY_POINTER */ - 981, /* GL_MULTISAMPLE */ - 1361, /* GL_SAMPLE_ALPHA_TO_COVERAGE */ - 1363, /* GL_SAMPLE_ALPHA_TO_ONE */ - 1368, /* GL_SAMPLE_COVERAGE */ - 1365, /* GL_SAMPLE_BUFFERS */ - 1356, /* GL_SAMPLES */ - 1372, /* GL_SAMPLE_COVERAGE_VALUE */ - 1370, /* GL_SAMPLE_COVERAGE_INVERT */ - 185, /* GL_COLOR_MATRIX */ - 187, /* GL_COLOR_MATRIX_STACK_DEPTH */ - 844, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */ - 1172, /* GL_POST_COLOR_MATRIX_RED_SCALE */ - 1168, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */ - 1163, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */ - 1159, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */ - 1170, /* GL_POST_COLOR_MATRIX_RED_BIAS */ - 1166, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */ - 1161, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */ - 1157, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */ - 1595, /* GL_TEXTURE_COLOR_TABLE_SGI */ - 1247, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */ - 1597, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */ + 729, /* GL_LUMINANCE4 */ + 735, /* GL_LUMINANCE8 */ + 719, /* GL_LUMINANCE12 */ + 725, /* GL_LUMINANCE16 */ + 730, /* GL_LUMINANCE4_ALPHA4 */ + 733, /* GL_LUMINANCE6_ALPHA2 */ + 736, /* GL_LUMINANCE8_ALPHA8 */ + 722, /* GL_LUMINANCE12_ALPHA4 */ + 720, /* GL_LUMINANCE12_ALPHA12 */ + 726, /* GL_LUMINANCE16_ALPHA16 */ + 642, /* GL_INTENSITY */ + 647, /* GL_INTENSITY4 */ + 649, /* GL_INTENSITY8 */ + 643, /* GL_INTENSITY12 */ + 645, /* GL_INTENSITY16 */ + 1326, /* GL_RGB2_EXT */ + 1327, /* GL_RGB4 */ + 1330, /* GL_RGB5 */ + 1334, /* GL_RGB8 */ + 1318, /* GL_RGB10 */ + 1322, /* GL_RGB12 */ + 1324, /* GL_RGB16 */ + 1341, /* GL_RGBA2 */ + 1343, /* GL_RGBA4 */ + 1331, /* GL_RGB5_A1 */ + 1347, /* GL_RGBA8 */ + 1319, /* GL_RGB10_A2 */ + 1337, /* GL_RGBA12 */ + 1339, /* GL_RGBA16 */ + 1682, /* GL_TEXTURE_RED_SIZE */ + 1654, /* GL_TEXTURE_GREEN_SIZE */ + 1593, /* GL_TEXTURE_BLUE_SIZE */ + 1580, /* GL_TEXTURE_ALPHA_SIZE */ + 1667, /* GL_TEXTURE_LUMINANCE_SIZE */ + 1658, /* GL_TEXTURE_INTENSITY_SIZE */ + 1312, /* GL_REPLACE_EXT */ + 1248, /* GL_PROXY_TEXTURE_1D */ + 1251, /* GL_PROXY_TEXTURE_2D */ + 1687, /* GL_TEXTURE_TOO_LARGE_EXT */ + 1679, /* GL_TEXTURE_PRIORITY */ + 1684, /* GL_TEXTURE_RESIDENT */ + 1583, /* GL_TEXTURE_BINDING_1D */ + 1585, /* GL_TEXTURE_BINDING_2D */ + 1587, /* GL_TEXTURE_BINDING_3D */ + 1079, /* GL_PACK_SKIP_IMAGES */ + 1075, /* GL_PACK_IMAGE_HEIGHT */ + 1716, /* GL_UNPACK_SKIP_IMAGES */ + 1713, /* GL_UNPACK_IMAGE_HEIGHT */ + 1579, /* GL_TEXTURE_3D */ + 1254, /* GL_PROXY_TEXTURE_3D */ + 1641, /* GL_TEXTURE_DEPTH */ + 1690, /* GL_TEXTURE_WRAP_R */ + 844, /* GL_MAX_3D_TEXTURE_SIZE */ + 1748, /* GL_VERTEX_ARRAY */ + 1010, /* GL_NORMAL_ARRAY */ + 144, /* GL_COLOR_ARRAY */ + 627, /* GL_INDEX_ARRAY */ + 1620, /* GL_TEXTURE_COORD_ARRAY */ + 443, /* GL_EDGE_FLAG_ARRAY */ + 1753, /* GL_VERTEX_ARRAY_SIZE */ + 1755, /* GL_VERTEX_ARRAY_TYPE */ + 1754, /* GL_VERTEX_ARRAY_STRIDE */ + 1015, /* GL_NORMAL_ARRAY_TYPE */ + 1014, /* GL_NORMAL_ARRAY_STRIDE */ + 148, /* GL_COLOR_ARRAY_SIZE */ + 150, /* GL_COLOR_ARRAY_TYPE */ + 149, /* GL_COLOR_ARRAY_STRIDE */ + 632, /* GL_INDEX_ARRAY_TYPE */ + 631, /* GL_INDEX_ARRAY_STRIDE */ + 1624, /* GL_TEXTURE_COORD_ARRAY_SIZE */ + 1626, /* GL_TEXTURE_COORD_ARRAY_TYPE */ + 1625, /* GL_TEXTURE_COORD_ARRAY_STRIDE */ + 447, /* GL_EDGE_FLAG_ARRAY_STRIDE */ + 1752, /* GL_VERTEX_ARRAY_POINTER */ + 1013, /* GL_NORMAL_ARRAY_POINTER */ + 147, /* GL_COLOR_ARRAY_POINTER */ + 630, /* GL_INDEX_ARRAY_POINTER */ + 1623, /* GL_TEXTURE_COORD_ARRAY_POINTER */ + 446, /* GL_EDGE_FLAG_ARRAY_POINTER */ + 989, /* GL_MULTISAMPLE */ + 1369, /* GL_SAMPLE_ALPHA_TO_COVERAGE */ + 1371, /* GL_SAMPLE_ALPHA_TO_ONE */ + 1376, /* GL_SAMPLE_COVERAGE */ + 1373, /* GL_SAMPLE_BUFFERS */ + 1364, /* GL_SAMPLES */ + 1380, /* GL_SAMPLE_COVERAGE_VALUE */ + 1378, /* GL_SAMPLE_COVERAGE_INVERT */ + 191, /* GL_COLOR_MATRIX */ + 193, /* GL_COLOR_MATRIX_STACK_DEPTH */ + 852, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */ + 1180, /* GL_POST_COLOR_MATRIX_RED_SCALE */ + 1176, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */ + 1171, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */ + 1167, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */ + 1178, /* GL_POST_COLOR_MATRIX_RED_BIAS */ + 1174, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */ + 1169, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */ + 1165, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */ + 1603, /* GL_TEXTURE_COLOR_TABLE_SGI */ + 1255, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */ + 1605, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */ 79, /* GL_BLEND_DST_RGB */ 87, /* GL_BLEND_SRC_RGB */ 78, /* GL_BLEND_DST_ALPHA */ 86, /* GL_BLEND_SRC_ALPHA */ - 191, /* GL_COLOR_TABLE */ - 1182, /* GL_POST_CONVOLUTION_COLOR_TABLE */ - 1165, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ - 1235, /* GL_PROXY_COLOR_TABLE */ - 1239, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */ - 1238, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */ - 215, /* GL_COLOR_TABLE_SCALE */ - 195, /* GL_COLOR_TABLE_BIAS */ - 200, /* GL_COLOR_TABLE_FORMAT */ - 217, /* GL_COLOR_TABLE_WIDTH */ - 212, /* GL_COLOR_TABLE_RED_SIZE */ - 203, /* GL_COLOR_TABLE_GREEN_SIZE */ - 197, /* GL_COLOR_TABLE_BLUE_SIZE */ - 192, /* GL_COLOR_TABLE_ALPHA_SIZE */ - 209, /* GL_COLOR_TABLE_LUMINANCE_SIZE */ - 206, /* GL_COLOR_TABLE_INTENSITY_SIZE */ + 197, /* GL_COLOR_TABLE */ + 1190, /* GL_POST_CONVOLUTION_COLOR_TABLE */ + 1173, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */ + 1243, /* GL_PROXY_COLOR_TABLE */ + 1247, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */ + 1246, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */ + 221, /* GL_COLOR_TABLE_SCALE */ + 201, /* GL_COLOR_TABLE_BIAS */ + 206, /* GL_COLOR_TABLE_FORMAT */ + 223, /* GL_COLOR_TABLE_WIDTH */ + 218, /* GL_COLOR_TABLE_RED_SIZE */ + 209, /* GL_COLOR_TABLE_GREEN_SIZE */ + 203, /* GL_COLOR_TABLE_BLUE_SIZE */ + 198, /* GL_COLOR_TABLE_ALPHA_SIZE */ + 215, /* GL_COLOR_TABLE_LUMINANCE_SIZE */ + 212, /* GL_COLOR_TABLE_INTENSITY_SIZE */ 70, /* GL_BGR */ 71, /* GL_BGRA */ - 858, /* GL_MAX_ELEMENTS_VERTICES */ - 857, /* GL_MAX_ELEMENTS_INDICES */ - 1649, /* GL_TEXTURE_INDEX_SIZE_EXT */ - 135, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */ - 1129, /* GL_POINT_SIZE_MIN */ - 1125, /* GL_POINT_SIZE_MAX */ - 1119, /* GL_POINT_FADE_THRESHOLD_SIZE */ - 1115, /* GL_POINT_DISTANCE_ATTENUATION */ - 117, /* GL_CLAMP_TO_BORDER */ - 120, /* GL_CLAMP_TO_EDGE */ - 1670, /* GL_TEXTURE_MIN_LOD */ - 1668, /* GL_TEXTURE_MAX_LOD */ - 1574, /* GL_TEXTURE_BASE_LEVEL */ - 1667, /* GL_TEXTURE_MAX_LEVEL */ - 612, /* GL_IGNORE_BORDER_HP */ - 261, /* GL_CONSTANT_BORDER_HP */ - 1305, /* GL_REPLICATE_BORDER_HP */ - 267, /* GL_CONVOLUTION_BORDER_COLOR */ - 1030, /* GL_OCCLUSION_TEST_HP */ - 1031, /* GL_OCCLUSION_TEST_RESULT_HP */ - 683, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */ - 1589, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */ - 1591, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */ - 1593, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */ - 1594, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */ - 1592, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */ - 1590, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */ - 840, /* GL_MAX_CLIPMAP_DEPTH_SGIX */ - 841, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */ - 1192, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */ - 1194, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */ - 1191, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */ - 1193, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */ - 1657, /* GL_TEXTURE_LOD_BIAS_S_SGIX */ - 1658, /* GL_TEXTURE_LOD_BIAS_T_SGIX */ - 1656, /* GL_TEXTURE_LOD_BIAS_R_SGIX */ - 558, /* GL_GENERATE_MIPMAP */ - 559, /* GL_GENERATE_MIPMAP_HINT */ - 500, /* GL_FOG_OFFSET_SGIX */ - 501, /* GL_FOG_OFFSET_VALUE_SGIX */ - 1603, /* GL_TEXTURE_COMPARE_SGIX */ - 1602, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */ - 1653, /* GL_TEXTURE_LEQUAL_R_SGIX */ - 1645, /* GL_TEXTURE_GEQUAL_R_SGIX */ - 340, /* GL_DEPTH_COMPONENT16 */ - 343, /* GL_DEPTH_COMPONENT24 */ - 346, /* GL_DEPTH_COMPONENT32 */ - 289, /* GL_CULL_VERTEX_EXT */ - 291, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */ - 290, /* GL_CULL_VERTEX_EYE_POSITION_EXT */ - 1801, /* GL_WRAP_BORDER_SUN */ - 1596, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */ - 676, /* GL_LIGHT_MODEL_COLOR_CONTROL */ - 1400, /* GL_SINGLE_COLOR */ - 1388, /* GL_SEPARATE_SPECULAR_COLOR */ - 1397, /* GL_SHARED_TEXTURE_PALETTE_EXT */ - 511, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ - 512, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ - 519, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ - 514, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ - 510, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ - 509, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ - 513, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ - 520, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ - 531, /* GL_FRAMEBUFFER_DEFAULT */ - 544, /* GL_FRAMEBUFFER_UNDEFINED */ - 353, /* GL_DEPTH_STENCIL_ATTACHMENT */ - 618, /* GL_INDEX */ - 1713, /* GL_UNSIGNED_BYTE_2_3_3_REV */ - 1728, /* GL_UNSIGNED_SHORT_5_6_5 */ - 1729, /* GL_UNSIGNED_SHORT_5_6_5_REV */ - 1726, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */ - 1724, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */ - 1721, /* GL_UNSIGNED_INT_8_8_8_8_REV */ - 1719, /* GL_UNSIGNED_INT_2_10_10_10_REV */ - 1665, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */ - 1666, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */ - 1664, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */ - 932, /* GL_MIRRORED_REPEAT */ - 1344, /* GL_RGB_S3TC */ - 1321, /* GL_RGB4_S3TC */ - 1343, /* GL_RGBA_S3TC */ - 1338, /* GL_RGBA4_S3TC */ - 1341, /* GL_RGBA_DXT5_S3TC */ - 1336, /* GL_RGBA4_DXT5_S3TC */ - 254, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */ - 249, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */ - 250, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */ - 251, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */ - 993, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */ - 992, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */ - 684, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */ - 487, /* GL_FOG_COORDINATE_SOURCE */ - 479, /* GL_FOG_COORD */ - 503, /* GL_FRAGMENT_DEPTH */ - 295, /* GL_CURRENT_FOG_COORD */ - 486, /* GL_FOG_COORDINATE_ARRAY_TYPE */ - 485, /* GL_FOG_COORDINATE_ARRAY_STRIDE */ - 484, /* GL_FOG_COORDINATE_ARRAY_POINTER */ - 481, /* GL_FOG_COORDINATE_ARRAY */ - 189, /* GL_COLOR_SUM */ - 314, /* GL_CURRENT_SECONDARY_COLOR */ - 1381, /* GL_SECONDARY_COLOR_ARRAY_SIZE */ - 1383, /* GL_SECONDARY_COLOR_ARRAY_TYPE */ - 1382, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */ - 1380, /* GL_SECONDARY_COLOR_ARRAY_POINTER */ - 1377, /* GL_SECONDARY_COLOR_ARRAY */ - 568, /* GL_GL_CURRENT_RASTER_SECONDARY_COLOR */ + 866, /* GL_MAX_ELEMENTS_VERTICES */ + 865, /* GL_MAX_ELEMENTS_INDICES */ + 1657, /* GL_TEXTURE_INDEX_SIZE_EXT */ + 141, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */ + 1137, /* GL_POINT_SIZE_MIN */ + 1133, /* GL_POINT_SIZE_MAX */ + 1127, /* GL_POINT_FADE_THRESHOLD_SIZE */ + 1123, /* GL_POINT_DISTANCE_ATTENUATION */ + 123, /* GL_CLAMP_TO_BORDER */ + 126, /* GL_CLAMP_TO_EDGE */ + 1678, /* GL_TEXTURE_MIN_LOD */ + 1676, /* GL_TEXTURE_MAX_LOD */ + 1582, /* GL_TEXTURE_BASE_LEVEL */ + 1675, /* GL_TEXTURE_MAX_LEVEL */ + 620, /* GL_IGNORE_BORDER_HP */ + 267, /* GL_CONSTANT_BORDER_HP */ + 1313, /* GL_REPLICATE_BORDER_HP */ + 273, /* GL_CONVOLUTION_BORDER_COLOR */ + 1038, /* GL_OCCLUSION_TEST_HP */ + 1039, /* GL_OCCLUSION_TEST_RESULT_HP */ + 691, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */ + 1597, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */ + 1599, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */ + 1601, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */ + 1602, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */ + 1600, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */ + 1598, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */ + 848, /* GL_MAX_CLIPMAP_DEPTH_SGIX */ + 849, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */ + 1200, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */ + 1202, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */ + 1199, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */ + 1201, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */ + 1665, /* GL_TEXTURE_LOD_BIAS_S_SGIX */ + 1666, /* GL_TEXTURE_LOD_BIAS_T_SGIX */ + 1664, /* GL_TEXTURE_LOD_BIAS_R_SGIX */ + 566, /* GL_GENERATE_MIPMAP */ + 567, /* GL_GENERATE_MIPMAP_HINT */ + 508, /* GL_FOG_OFFSET_SGIX */ + 509, /* GL_FOG_OFFSET_VALUE_SGIX */ + 1611, /* GL_TEXTURE_COMPARE_SGIX */ + 1610, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */ + 1661, /* GL_TEXTURE_LEQUAL_R_SGIX */ + 1653, /* GL_TEXTURE_GEQUAL_R_SGIX */ + 346, /* GL_DEPTH_COMPONENT16 */ + 349, /* GL_DEPTH_COMPONENT24 */ + 352, /* GL_DEPTH_COMPONENT32 */ + 295, /* GL_CULL_VERTEX_EXT */ + 297, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */ + 296, /* GL_CULL_VERTEX_EYE_POSITION_EXT */ + 1809, /* GL_WRAP_BORDER_SUN */ + 1604, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */ + 684, /* GL_LIGHT_MODEL_COLOR_CONTROL */ + 1408, /* GL_SINGLE_COLOR */ + 1396, /* GL_SEPARATE_SPECULAR_COLOR */ + 1405, /* GL_SHARED_TEXTURE_PALETTE_EXT */ + 519, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ + 520, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ + 527, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ + 522, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ + 518, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ + 517, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ + 521, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ + 528, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ + 539, /* GL_FRAMEBUFFER_DEFAULT */ + 552, /* GL_FRAMEBUFFER_UNDEFINED */ + 359, /* GL_DEPTH_STENCIL_ATTACHMENT */ + 626, /* GL_INDEX */ + 1721, /* GL_UNSIGNED_BYTE_2_3_3_REV */ + 1736, /* GL_UNSIGNED_SHORT_5_6_5 */ + 1737, /* GL_UNSIGNED_SHORT_5_6_5_REV */ + 1734, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */ + 1732, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */ + 1729, /* GL_UNSIGNED_INT_8_8_8_8_REV */ + 1727, /* GL_UNSIGNED_INT_2_10_10_10_REV */ + 1673, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */ + 1674, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */ + 1672, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */ + 940, /* GL_MIRRORED_REPEAT */ + 1352, /* GL_RGB_S3TC */ + 1329, /* GL_RGB4_S3TC */ + 1351, /* GL_RGBA_S3TC */ + 1346, /* GL_RGBA4_S3TC */ + 1349, /* GL_RGBA_DXT5_S3TC */ + 1344, /* GL_RGBA4_DXT5_S3TC */ + 260, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */ + 255, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */ + 256, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */ + 257, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */ + 1001, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */ + 1000, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */ + 692, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */ + 495, /* GL_FOG_COORDINATE_SOURCE */ + 487, /* GL_FOG_COORD */ + 511, /* GL_FRAGMENT_DEPTH */ + 301, /* GL_CURRENT_FOG_COORD */ + 494, /* GL_FOG_COORDINATE_ARRAY_TYPE */ + 493, /* GL_FOG_COORDINATE_ARRAY_STRIDE */ + 492, /* GL_FOG_COORDINATE_ARRAY_POINTER */ + 489, /* GL_FOG_COORDINATE_ARRAY */ + 195, /* GL_COLOR_SUM */ + 320, /* GL_CURRENT_SECONDARY_COLOR */ + 1389, /* GL_SECONDARY_COLOR_ARRAY_SIZE */ + 1391, /* GL_SECONDARY_COLOR_ARRAY_TYPE */ + 1390, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */ + 1388, /* GL_SECONDARY_COLOR_ARRAY_POINTER */ + 1385, /* GL_SECONDARY_COLOR_ARRAY */ + 576, /* GL_GL_CURRENT_RASTER_SECONDARY_COLOR */ 28, /* GL_ALIASED_POINT_SIZE_RANGE */ 27, /* GL_ALIASED_LINE_WIDTH_RANGE */ - 1503, /* GL_TEXTURE0 */ - 1505, /* GL_TEXTURE1 */ - 1527, /* GL_TEXTURE2 */ - 1549, /* GL_TEXTURE3 */ - 1555, /* GL_TEXTURE4 */ - 1557, /* GL_TEXTURE5 */ - 1559, /* GL_TEXTURE6 */ - 1561, /* GL_TEXTURE7 */ - 1563, /* GL_TEXTURE8 */ - 1565, /* GL_TEXTURE9 */ - 1506, /* GL_TEXTURE10 */ - 1508, /* GL_TEXTURE11 */ - 1510, /* GL_TEXTURE12 */ - 1512, /* GL_TEXTURE13 */ - 1514, /* GL_TEXTURE14 */ - 1516, /* GL_TEXTURE15 */ - 1518, /* GL_TEXTURE16 */ - 1520, /* GL_TEXTURE17 */ - 1522, /* GL_TEXTURE18 */ - 1524, /* GL_TEXTURE19 */ - 1528, /* GL_TEXTURE20 */ - 1530, /* GL_TEXTURE21 */ - 1532, /* GL_TEXTURE22 */ - 1534, /* GL_TEXTURE23 */ - 1536, /* GL_TEXTURE24 */ - 1538, /* GL_TEXTURE25 */ - 1540, /* GL_TEXTURE26 */ - 1542, /* GL_TEXTURE27 */ - 1544, /* GL_TEXTURE28 */ - 1546, /* GL_TEXTURE29 */ - 1550, /* GL_TEXTURE30 */ - 1552, /* GL_TEXTURE31 */ + 1511, /* GL_TEXTURE0 */ + 1513, /* GL_TEXTURE1 */ + 1535, /* GL_TEXTURE2 */ + 1557, /* GL_TEXTURE3 */ + 1563, /* GL_TEXTURE4 */ + 1565, /* GL_TEXTURE5 */ + 1567, /* GL_TEXTURE6 */ + 1569, /* GL_TEXTURE7 */ + 1571, /* GL_TEXTURE8 */ + 1573, /* GL_TEXTURE9 */ + 1514, /* GL_TEXTURE10 */ + 1516, /* GL_TEXTURE11 */ + 1518, /* GL_TEXTURE12 */ + 1520, /* GL_TEXTURE13 */ + 1522, /* GL_TEXTURE14 */ + 1524, /* GL_TEXTURE15 */ + 1526, /* GL_TEXTURE16 */ + 1528, /* GL_TEXTURE17 */ + 1530, /* GL_TEXTURE18 */ + 1532, /* GL_TEXTURE19 */ + 1536, /* GL_TEXTURE20 */ + 1538, /* GL_TEXTURE21 */ + 1540, /* GL_TEXTURE22 */ + 1542, /* GL_TEXTURE23 */ + 1544, /* GL_TEXTURE24 */ + 1546, /* GL_TEXTURE25 */ + 1548, /* GL_TEXTURE26 */ + 1550, /* GL_TEXTURE27 */ + 1552, /* GL_TEXTURE28 */ + 1554, /* GL_TEXTURE29 */ + 1558, /* GL_TEXTURE30 */ + 1560, /* GL_TEXTURE31 */ 18, /* GL_ACTIVE_TEXTURE */ - 123, /* GL_CLIENT_ACTIVE_TEXTURE */ - 910, /* GL_MAX_TEXTURE_UNITS */ - 1692, /* GL_TRANSPOSE_MODELVIEW_MATRIX */ - 1695, /* GL_TRANSPOSE_PROJECTION_MATRIX */ - 1697, /* GL_TRANSPOSE_TEXTURE_MATRIX */ - 1689, /* GL_TRANSPOSE_COLOR_MATRIX */ - 1491, /* GL_SUBTRACT */ - 898, /* GL_MAX_RENDERBUFFER_SIZE_EXT */ - 237, /* GL_COMPRESSED_ALPHA */ - 241, /* GL_COMPRESSED_LUMINANCE */ - 242, /* GL_COMPRESSED_LUMINANCE_ALPHA */ - 239, /* GL_COMPRESSED_INTENSITY */ - 245, /* GL_COMPRESSED_RGB */ - 246, /* GL_COMPRESSED_RGBA */ - 1610, /* GL_TEXTURE_COMPRESSION_HINT */ - 1672, /* GL_TEXTURE_RECTANGLE_ARB */ - 1582, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */ - 1250, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */ - 896, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */ - 352, /* GL_DEPTH_STENCIL */ - 1717, /* GL_UNSIGNED_INT_24_8 */ - 906, /* GL_MAX_TEXTURE_LOD_BIAS */ - 1663, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */ - 907, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */ - 1639, /* GL_TEXTURE_FILTER_CONTROL */ - 1654, /* GL_TEXTURE_LOD_BIAS */ - 222, /* GL_COMBINE4 */ - 900, /* GL_MAX_SHININESS_NV */ - 901, /* GL_MAX_SPOT_EXPONENT_NV */ - 616, /* GL_INCR_WRAP */ - 325, /* GL_DECR_WRAP */ - 952, /* GL_MODELVIEW1_ARB */ - 1008, /* GL_NORMAL_MAP */ - 1280, /* GL_REFLECTION_MAP */ - 1619, /* GL_TEXTURE_CUBE_MAP */ - 1580, /* GL_TEXTURE_BINDING_CUBE_MAP */ - 1627, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */ - 1621, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */ - 1629, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */ - 1623, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */ - 1631, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */ - 1625, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */ - 1248, /* GL_PROXY_TEXTURE_CUBE_MAP */ - 852, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */ - 987, /* GL_MULTISAMPLE_FILTER_HINT_NV */ - 495, /* GL_FOG_DISTANCE_MODE_NV */ - 454, /* GL_EYE_RADIAL_NV */ - 453, /* GL_EYE_PLANE_ABSOLUTE_NV */ - 221, /* GL_COMBINE */ - 228, /* GL_COMBINE_RGB */ - 223, /* GL_COMBINE_ALPHA */ - 1345, /* GL_RGB_SCALE */ + 129, /* GL_CLIENT_ACTIVE_TEXTURE */ + 918, /* GL_MAX_TEXTURE_UNITS */ + 1700, /* GL_TRANSPOSE_MODELVIEW_MATRIX */ + 1703, /* GL_TRANSPOSE_PROJECTION_MATRIX */ + 1705, /* GL_TRANSPOSE_TEXTURE_MATRIX */ + 1697, /* GL_TRANSPOSE_COLOR_MATRIX */ + 1499, /* GL_SUBTRACT */ + 906, /* GL_MAX_RENDERBUFFER_SIZE_EXT */ + 243, /* GL_COMPRESSED_ALPHA */ + 247, /* GL_COMPRESSED_LUMINANCE */ + 248, /* GL_COMPRESSED_LUMINANCE_ALPHA */ + 245, /* GL_COMPRESSED_INTENSITY */ + 251, /* GL_COMPRESSED_RGB */ + 252, /* GL_COMPRESSED_RGBA */ + 1618, /* GL_TEXTURE_COMPRESSION_HINT */ + 1680, /* GL_TEXTURE_RECTANGLE_ARB */ + 1590, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */ + 1258, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */ + 904, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */ + 358, /* GL_DEPTH_STENCIL */ + 1725, /* GL_UNSIGNED_INT_24_8 */ + 914, /* GL_MAX_TEXTURE_LOD_BIAS */ + 1671, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */ + 915, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */ + 1647, /* GL_TEXTURE_FILTER_CONTROL */ + 1662, /* GL_TEXTURE_LOD_BIAS */ + 228, /* GL_COMBINE4 */ + 908, /* GL_MAX_SHININESS_NV */ + 909, /* GL_MAX_SPOT_EXPONENT_NV */ + 624, /* GL_INCR_WRAP */ + 331, /* GL_DECR_WRAP */ + 960, /* GL_MODELVIEW1_ARB */ + 1016, /* GL_NORMAL_MAP */ + 1288, /* GL_REFLECTION_MAP */ + 1627, /* GL_TEXTURE_CUBE_MAP */ + 1588, /* GL_TEXTURE_BINDING_CUBE_MAP */ + 1635, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */ + 1629, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */ + 1637, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */ + 1631, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */ + 1639, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */ + 1633, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */ + 1256, /* GL_PROXY_TEXTURE_CUBE_MAP */ + 860, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */ + 995, /* GL_MULTISAMPLE_FILTER_HINT_NV */ + 503, /* GL_FOG_DISTANCE_MODE_NV */ + 462, /* GL_EYE_RADIAL_NV */ + 461, /* GL_EYE_PLANE_ABSOLUTE_NV */ + 227, /* GL_COMBINE */ + 234, /* GL_COMBINE_RGB */ + 229, /* GL_COMBINE_ALPHA */ + 1353, /* GL_RGB_SCALE */ 24, /* GL_ADD_SIGNED */ - 644, /* GL_INTERPOLATE */ - 256, /* GL_CONSTANT */ - 1198, /* GL_PRIMARY_COLOR */ - 1195, /* GL_PREVIOUS */ - 1411, /* GL_SOURCE0_RGB */ - 1417, /* GL_SOURCE1_RGB */ - 1423, /* GL_SOURCE2_RGB */ - 1427, /* GL_SOURCE3_RGB_NV */ - 1408, /* GL_SOURCE0_ALPHA */ - 1414, /* GL_SOURCE1_ALPHA */ - 1420, /* GL_SOURCE2_ALPHA */ - 1426, /* GL_SOURCE3_ALPHA_NV */ - 1044, /* GL_OPERAND0_RGB */ - 1050, /* GL_OPERAND1_RGB */ - 1056, /* GL_OPERAND2_RGB */ - 1060, /* GL_OPERAND3_RGB_NV */ - 1041, /* GL_OPERAND0_ALPHA */ - 1047, /* GL_OPERAND1_ALPHA */ - 1053, /* GL_OPERAND2_ALPHA */ - 1059, /* GL_OPERAND3_ALPHA_NV */ - 1741, /* GL_VERTEX_ARRAY_BINDING_APPLE */ - 1805, /* GL_YCBCR_422_APPLE */ - 1730, /* GL_UNSIGNED_SHORT_8_8_APPLE */ - 1732, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */ - 1402, /* GL_SLICE_ACCUM_SUN */ - 1255, /* GL_QUAD_MESH_SUN */ - 1701, /* GL_TRIANGLE_MESH_SUN */ - 1779, /* GL_VERTEX_PROGRAM_ARB */ - 1790, /* GL_VERTEX_STATE_PROGRAM_NV */ - 1766, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */ - 1772, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */ - 1774, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */ - 1776, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */ - 316, /* GL_CURRENT_VERTEX_ATTRIB */ - 1211, /* GL_PROGRAM_LENGTH_ARB */ - 1225, /* GL_PROGRAM_STRING_ARB */ - 974, /* GL_MODELVIEW_PROJECTION_NV */ - 611, /* GL_IDENTITY_NV */ - 658, /* GL_INVERSE_NV */ - 1694, /* GL_TRANSPOSE_NV */ - 659, /* GL_INVERSE_TRANSPOSE_NV */ - 882, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */ - 881, /* GL_MAX_PROGRAM_MATRICES_ARB */ - 789, /* GL_MATRIX0_NV */ - 801, /* GL_MATRIX1_NV */ - 813, /* GL_MATRIX2_NV */ - 817, /* GL_MATRIX3_NV */ - 819, /* GL_MATRIX4_NV */ - 821, /* GL_MATRIX5_NV */ - 823, /* GL_MATRIX6_NV */ - 825, /* GL_MATRIX7_NV */ - 301, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */ - 298, /* GL_CURRENT_MATRIX_ARB */ - 1782, /* GL_VERTEX_PROGRAM_POINT_SIZE */ - 1785, /* GL_VERTEX_PROGRAM_TWO_SIDE */ - 1223, /* GL_PROGRAM_PARAMETER_NV */ - 1770, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */ - 1227, /* GL_PROGRAM_TARGET_NV */ - 1224, /* GL_PROGRAM_RESIDENT_NV */ - 1686, /* GL_TRACK_MATRIX_NV */ - 1687, /* GL_TRACK_MATRIX_TRANSFORM_NV */ - 1780, /* GL_VERTEX_PROGRAM_BINDING_NV */ - 1205, /* GL_PROGRAM_ERROR_POSITION_ARB */ - 337, /* GL_DEPTH_CLAMP_NV */ - 1748, /* GL_VERTEX_ATTRIB_ARRAY0_NV */ - 1755, /* GL_VERTEX_ATTRIB_ARRAY1_NV */ - 1756, /* GL_VERTEX_ATTRIB_ARRAY2_NV */ - 1757, /* GL_VERTEX_ATTRIB_ARRAY3_NV */ - 1758, /* GL_VERTEX_ATTRIB_ARRAY4_NV */ - 1759, /* GL_VERTEX_ATTRIB_ARRAY5_NV */ - 1760, /* GL_VERTEX_ATTRIB_ARRAY6_NV */ - 1761, /* GL_VERTEX_ATTRIB_ARRAY7_NV */ - 1762, /* GL_VERTEX_ATTRIB_ARRAY8_NV */ - 1763, /* GL_VERTEX_ATTRIB_ARRAY9_NV */ - 1749, /* GL_VERTEX_ATTRIB_ARRAY10_NV */ - 1750, /* GL_VERTEX_ATTRIB_ARRAY11_NV */ - 1751, /* GL_VERTEX_ATTRIB_ARRAY12_NV */ - 1752, /* GL_VERTEX_ATTRIB_ARRAY13_NV */ - 1753, /* GL_VERTEX_ATTRIB_ARRAY14_NV */ - 1754, /* GL_VERTEX_ATTRIB_ARRAY15_NV */ - 743, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */ - 750, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */ - 751, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */ - 752, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */ - 753, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */ - 754, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */ - 755, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */ - 756, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */ - 757, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */ - 758, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */ - 744, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */ - 745, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */ - 746, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */ - 747, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */ - 748, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */ - 749, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */ - 770, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */ - 777, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */ - 778, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */ - 779, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */ - 780, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */ - 781, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */ - 782, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */ - 1204, /* GL_PROGRAM_BINDING_ARB */ - 784, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */ - 785, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */ - 771, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */ - 772, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */ - 773, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */ - 774, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */ - 775, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */ - 776, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */ - 1608, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */ - 1605, /* GL_TEXTURE_COMPRESSED */ - 1013, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */ - 255, /* GL_COMPRESSED_TEXTURE_FORMATS */ - 922, /* GL_MAX_VERTEX_UNITS_ARB */ + 652, /* GL_INTERPOLATE */ + 262, /* GL_CONSTANT */ + 1206, /* GL_PRIMARY_COLOR */ + 1203, /* GL_PREVIOUS */ + 1419, /* GL_SOURCE0_RGB */ + 1425, /* GL_SOURCE1_RGB */ + 1431, /* GL_SOURCE2_RGB */ + 1435, /* GL_SOURCE3_RGB_NV */ + 1416, /* GL_SOURCE0_ALPHA */ + 1422, /* GL_SOURCE1_ALPHA */ + 1428, /* GL_SOURCE2_ALPHA */ + 1434, /* GL_SOURCE3_ALPHA_NV */ + 1052, /* GL_OPERAND0_RGB */ + 1058, /* GL_OPERAND1_RGB */ + 1064, /* GL_OPERAND2_RGB */ + 1068, /* GL_OPERAND3_RGB_NV */ + 1049, /* GL_OPERAND0_ALPHA */ + 1055, /* GL_OPERAND1_ALPHA */ + 1061, /* GL_OPERAND2_ALPHA */ + 1067, /* GL_OPERAND3_ALPHA_NV */ + 1749, /* GL_VERTEX_ARRAY_BINDING_APPLE */ + 1813, /* GL_YCBCR_422_APPLE */ + 1738, /* GL_UNSIGNED_SHORT_8_8_APPLE */ + 1740, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */ + 1410, /* GL_SLICE_ACCUM_SUN */ + 1263, /* GL_QUAD_MESH_SUN */ + 1709, /* GL_TRIANGLE_MESH_SUN */ + 1787, /* GL_VERTEX_PROGRAM_ARB */ + 1798, /* GL_VERTEX_STATE_PROGRAM_NV */ + 1774, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */ + 1780, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */ + 1782, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */ + 1784, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */ + 322, /* GL_CURRENT_VERTEX_ATTRIB */ + 1219, /* GL_PROGRAM_LENGTH_ARB */ + 1233, /* GL_PROGRAM_STRING_ARB */ + 982, /* GL_MODELVIEW_PROJECTION_NV */ + 619, /* GL_IDENTITY_NV */ + 666, /* GL_INVERSE_NV */ + 1702, /* GL_TRANSPOSE_NV */ + 667, /* GL_INVERSE_TRANSPOSE_NV */ + 890, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */ + 889, /* GL_MAX_PROGRAM_MATRICES_ARB */ + 797, /* GL_MATRIX0_NV */ + 809, /* GL_MATRIX1_NV */ + 821, /* GL_MATRIX2_NV */ + 825, /* GL_MATRIX3_NV */ + 827, /* GL_MATRIX4_NV */ + 829, /* GL_MATRIX5_NV */ + 831, /* GL_MATRIX6_NV */ + 833, /* GL_MATRIX7_NV */ + 307, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */ + 304, /* GL_CURRENT_MATRIX_ARB */ + 1790, /* GL_VERTEX_PROGRAM_POINT_SIZE */ + 1793, /* GL_VERTEX_PROGRAM_TWO_SIDE */ + 1231, /* GL_PROGRAM_PARAMETER_NV */ + 1778, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */ + 1235, /* GL_PROGRAM_TARGET_NV */ + 1232, /* GL_PROGRAM_RESIDENT_NV */ + 1694, /* GL_TRACK_MATRIX_NV */ + 1695, /* GL_TRACK_MATRIX_TRANSFORM_NV */ + 1788, /* GL_VERTEX_PROGRAM_BINDING_NV */ + 1213, /* GL_PROGRAM_ERROR_POSITION_ARB */ + 343, /* GL_DEPTH_CLAMP_NV */ + 1756, /* GL_VERTEX_ATTRIB_ARRAY0_NV */ + 1763, /* GL_VERTEX_ATTRIB_ARRAY1_NV */ + 1764, /* GL_VERTEX_ATTRIB_ARRAY2_NV */ + 1765, /* GL_VERTEX_ATTRIB_ARRAY3_NV */ + 1766, /* GL_VERTEX_ATTRIB_ARRAY4_NV */ + 1767, /* GL_VERTEX_ATTRIB_ARRAY5_NV */ + 1768, /* GL_VERTEX_ATTRIB_ARRAY6_NV */ + 1769, /* GL_VERTEX_ATTRIB_ARRAY7_NV */ + 1770, /* GL_VERTEX_ATTRIB_ARRAY8_NV */ + 1771, /* GL_VERTEX_ATTRIB_ARRAY9_NV */ + 1757, /* GL_VERTEX_ATTRIB_ARRAY10_NV */ + 1758, /* GL_VERTEX_ATTRIB_ARRAY11_NV */ + 1759, /* GL_VERTEX_ATTRIB_ARRAY12_NV */ + 1760, /* GL_VERTEX_ATTRIB_ARRAY13_NV */ + 1761, /* GL_VERTEX_ATTRIB_ARRAY14_NV */ + 1762, /* GL_VERTEX_ATTRIB_ARRAY15_NV */ + 751, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */ + 758, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */ + 759, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */ + 760, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */ + 761, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */ + 762, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */ + 763, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */ + 764, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */ + 765, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */ + 766, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */ + 752, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */ + 753, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */ + 754, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */ + 755, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */ + 756, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */ + 757, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */ + 778, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */ + 785, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */ + 786, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */ + 787, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */ + 788, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */ + 789, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */ + 790, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */ + 1212, /* GL_PROGRAM_BINDING_ARB */ + 792, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */ + 793, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */ + 779, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */ + 780, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */ + 781, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */ + 782, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */ + 783, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */ + 784, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */ + 1616, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */ + 1613, /* GL_TEXTURE_COMPRESSED */ + 1021, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */ + 261, /* GL_COMPRESSED_TEXTURE_FORMATS */ + 930, /* GL_MAX_VERTEX_UNITS_ARB */ 22, /* GL_ACTIVE_VERTEX_UNITS_ARB */ - 1800, /* GL_WEIGHT_SUM_UNITY_ARB */ - 1778, /* GL_VERTEX_BLEND_ARB */ - 318, /* GL_CURRENT_WEIGHT_ARB */ - 1799, /* GL_WEIGHT_ARRAY_TYPE_ARB */ - 1798, /* GL_WEIGHT_ARRAY_STRIDE_ARB */ - 1797, /* GL_WEIGHT_ARRAY_SIZE_ARB */ - 1796, /* GL_WEIGHT_ARRAY_POINTER_ARB */ - 1793, /* GL_WEIGHT_ARRAY_ARB */ - 365, /* GL_DOT3_RGB */ - 366, /* GL_DOT3_RGBA */ - 253, /* GL_COMPRESSED_RGB_FXT1_3DFX */ - 248, /* GL_COMPRESSED_RGBA_FXT1_3DFX */ - 982, /* GL_MULTISAMPLE_3DFX */ - 1366, /* GL_SAMPLE_BUFFERS_3DFX */ - 1357, /* GL_SAMPLES_3DFX */ - 963, /* GL_MODELVIEW2_ARB */ - 966, /* GL_MODELVIEW3_ARB */ - 967, /* GL_MODELVIEW4_ARB */ - 968, /* GL_MODELVIEW5_ARB */ - 969, /* GL_MODELVIEW6_ARB */ - 970, /* GL_MODELVIEW7_ARB */ - 971, /* GL_MODELVIEW8_ARB */ - 972, /* GL_MODELVIEW9_ARB */ - 942, /* GL_MODELVIEW10_ARB */ - 943, /* GL_MODELVIEW11_ARB */ - 944, /* GL_MODELVIEW12_ARB */ - 945, /* GL_MODELVIEW13_ARB */ - 946, /* GL_MODELVIEW14_ARB */ - 947, /* GL_MODELVIEW15_ARB */ - 948, /* GL_MODELVIEW16_ARB */ - 949, /* GL_MODELVIEW17_ARB */ - 950, /* GL_MODELVIEW18_ARB */ - 951, /* GL_MODELVIEW19_ARB */ - 953, /* GL_MODELVIEW20_ARB */ - 954, /* GL_MODELVIEW21_ARB */ - 955, /* GL_MODELVIEW22_ARB */ - 956, /* GL_MODELVIEW23_ARB */ - 957, /* GL_MODELVIEW24_ARB */ - 958, /* GL_MODELVIEW25_ARB */ - 959, /* GL_MODELVIEW26_ARB */ - 960, /* GL_MODELVIEW27_ARB */ - 961, /* GL_MODELVIEW28_ARB */ - 962, /* GL_MODELVIEW29_ARB */ - 964, /* GL_MODELVIEW30_ARB */ - 965, /* GL_MODELVIEW31_ARB */ - 370, /* GL_DOT3_RGB_EXT */ - 368, /* GL_DOT3_RGBA_EXT */ - 936, /* GL_MIRROR_CLAMP_EXT */ - 939, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */ - 977, /* GL_MODULATE_ADD_ATI */ - 978, /* GL_MODULATE_SIGNED_ADD_ATI */ - 979, /* GL_MODULATE_SUBTRACT_ATI */ - 1806, /* GL_YCBCR_MESA */ - 1068, /* GL_PACK_INVERT_MESA */ - 321, /* GL_DEBUG_OBJECT_MESA */ - 322, /* GL_DEBUG_PRINT_MESA */ - 320, /* GL_DEBUG_ASSERT_MESA */ + 1808, /* GL_WEIGHT_SUM_UNITY_ARB */ + 1786, /* GL_VERTEX_BLEND_ARB */ + 324, /* GL_CURRENT_WEIGHT_ARB */ + 1807, /* GL_WEIGHT_ARRAY_TYPE_ARB */ + 1806, /* GL_WEIGHT_ARRAY_STRIDE_ARB */ + 1805, /* GL_WEIGHT_ARRAY_SIZE_ARB */ + 1804, /* GL_WEIGHT_ARRAY_POINTER_ARB */ + 1801, /* GL_WEIGHT_ARRAY_ARB */ + 371, /* GL_DOT3_RGB */ + 372, /* GL_DOT3_RGBA */ + 259, /* GL_COMPRESSED_RGB_FXT1_3DFX */ + 254, /* GL_COMPRESSED_RGBA_FXT1_3DFX */ + 990, /* GL_MULTISAMPLE_3DFX */ + 1374, /* GL_SAMPLE_BUFFERS_3DFX */ + 1365, /* GL_SAMPLES_3DFX */ + 971, /* GL_MODELVIEW2_ARB */ + 974, /* GL_MODELVIEW3_ARB */ + 975, /* GL_MODELVIEW4_ARB */ + 976, /* GL_MODELVIEW5_ARB */ + 977, /* GL_MODELVIEW6_ARB */ + 978, /* GL_MODELVIEW7_ARB */ + 979, /* GL_MODELVIEW8_ARB */ + 980, /* GL_MODELVIEW9_ARB */ + 950, /* GL_MODELVIEW10_ARB */ + 951, /* GL_MODELVIEW11_ARB */ + 952, /* GL_MODELVIEW12_ARB */ + 953, /* GL_MODELVIEW13_ARB */ + 954, /* GL_MODELVIEW14_ARB */ + 955, /* GL_MODELVIEW15_ARB */ + 956, /* GL_MODELVIEW16_ARB */ + 957, /* GL_MODELVIEW17_ARB */ + 958, /* GL_MODELVIEW18_ARB */ + 959, /* GL_MODELVIEW19_ARB */ + 961, /* GL_MODELVIEW20_ARB */ + 962, /* GL_MODELVIEW21_ARB */ + 963, /* GL_MODELVIEW22_ARB */ + 964, /* GL_MODELVIEW23_ARB */ + 965, /* GL_MODELVIEW24_ARB */ + 966, /* GL_MODELVIEW25_ARB */ + 967, /* GL_MODELVIEW26_ARB */ + 968, /* GL_MODELVIEW27_ARB */ + 969, /* GL_MODELVIEW28_ARB */ + 970, /* GL_MODELVIEW29_ARB */ + 972, /* GL_MODELVIEW30_ARB */ + 973, /* GL_MODELVIEW31_ARB */ + 376, /* GL_DOT3_RGB_EXT */ + 374, /* GL_DOT3_RGBA_EXT */ + 944, /* GL_MIRROR_CLAMP_EXT */ + 947, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */ + 985, /* GL_MODULATE_ADD_ATI */ + 986, /* GL_MODULATE_SIGNED_ADD_ATI */ + 987, /* GL_MODULATE_SUBTRACT_ATI */ + 1814, /* GL_YCBCR_MESA */ + 1076, /* GL_PACK_INVERT_MESA */ + 327, /* GL_DEBUG_OBJECT_MESA */ + 328, /* GL_DEBUG_PRINT_MESA */ + 326, /* GL_DEBUG_ASSERT_MESA */ 106, /* GL_BUFFER_SIZE */ 108, /* GL_BUFFER_USAGE */ - 1456, /* GL_STENCIL_BACK_FUNC */ - 1454, /* GL_STENCIL_BACK_FAIL */ - 1458, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */ - 1460, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */ - 504, /* GL_FRAGMENT_PROGRAM_ARB */ - 1202, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */ - 1230, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */ - 1229, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */ - 1214, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ - 1220, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ - 1219, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ - 871, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */ - 894, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */ - 893, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */ - 884, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ - 890, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ - 889, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ - 854, /* GL_MAX_DRAW_BUFFERS */ - 374, /* GL_DRAW_BUFFER0 */ - 377, /* GL_DRAW_BUFFER1 */ - 398, /* GL_DRAW_BUFFER2 */ - 401, /* GL_DRAW_BUFFER3 */ - 404, /* GL_DRAW_BUFFER4 */ - 407, /* GL_DRAW_BUFFER5 */ - 410, /* GL_DRAW_BUFFER6 */ - 413, /* GL_DRAW_BUFFER7 */ - 416, /* GL_DRAW_BUFFER8 */ - 419, /* GL_DRAW_BUFFER9 */ - 378, /* GL_DRAW_BUFFER10 */ - 381, /* GL_DRAW_BUFFER11 */ - 384, /* GL_DRAW_BUFFER12 */ - 387, /* GL_DRAW_BUFFER13 */ - 390, /* GL_DRAW_BUFFER14 */ - 393, /* GL_DRAW_BUFFER15 */ + 112, /* GL_BUMP_ROT_MATRIX_ATI */ + 113, /* GL_BUMP_ROT_MATRIX_SIZE_ATI */ + 111, /* GL_BUMP_NUM_TEX_UNITS_ATI */ + 115, /* GL_BUMP_TEX_UNITS_ATI */ + 435, /* GL_DUDV_ATI */ + 434, /* GL_DU8DV8_ATI */ + 110, /* GL_BUMP_ENVMAP_ATI */ + 114, /* GL_BUMP_TARGET_ATI */ + 1464, /* GL_STENCIL_BACK_FUNC */ + 1462, /* GL_STENCIL_BACK_FAIL */ + 1466, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */ + 1468, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */ + 512, /* GL_FRAGMENT_PROGRAM_ARB */ + 1210, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */ + 1238, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */ + 1237, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */ + 1222, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ + 1228, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ + 1227, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ + 879, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */ + 902, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */ + 901, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */ + 892, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */ + 898, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */ + 897, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */ + 862, /* GL_MAX_DRAW_BUFFERS */ + 380, /* GL_DRAW_BUFFER0 */ + 383, /* GL_DRAW_BUFFER1 */ + 404, /* GL_DRAW_BUFFER2 */ + 407, /* GL_DRAW_BUFFER3 */ + 410, /* GL_DRAW_BUFFER4 */ + 413, /* GL_DRAW_BUFFER5 */ + 416, /* GL_DRAW_BUFFER6 */ + 419, /* GL_DRAW_BUFFER7 */ + 422, /* GL_DRAW_BUFFER8 */ + 425, /* GL_DRAW_BUFFER9 */ + 384, /* GL_DRAW_BUFFER10 */ + 387, /* GL_DRAW_BUFFER11 */ + 390, /* GL_DRAW_BUFFER12 */ + 393, /* GL_DRAW_BUFFER13 */ + 396, /* GL_DRAW_BUFFER14 */ + 399, /* GL_DRAW_BUFFER15 */ 81, /* GL_BLEND_EQUATION_ALPHA */ - 834, /* GL_MATRIX_PALETTE_ARB */ - 865, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */ - 868, /* GL_MAX_PALETTE_MATRICES_ARB */ - 304, /* GL_CURRENT_PALETTE_MATRIX_ARB */ - 828, /* GL_MATRIX_INDEX_ARRAY_ARB */ - 299, /* GL_CURRENT_MATRIX_INDEX_ARB */ - 830, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */ - 832, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */ - 831, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */ - 829, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */ - 1634, /* GL_TEXTURE_DEPTH_SIZE */ - 358, /* GL_DEPTH_TEXTURE_MODE */ - 1600, /* GL_TEXTURE_COMPARE_MODE */ - 1598, /* GL_TEXTURE_COMPARE_FUNC */ - 232, /* GL_COMPARE_R_TO_TEXTURE */ - 1136, /* GL_POINT_SPRITE */ - 281, /* GL_COORD_REPLACE */ - 1140, /* GL_POINT_SPRITE_R_MODE_NV */ - 1257, /* GL_QUERY_COUNTER_BITS */ - 306, /* GL_CURRENT_QUERY */ - 1259, /* GL_QUERY_RESULT */ - 1261, /* GL_QUERY_RESULT_AVAILABLE */ - 916, /* GL_MAX_VERTEX_ATTRIBS */ - 1768, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */ - 356, /* GL_DEPTH_STENCIL_TO_RGBA_NV */ - 355, /* GL_DEPTH_STENCIL_TO_BGRA_NV */ - 902, /* GL_MAX_TEXTURE_COORDS */ - 904, /* GL_MAX_TEXTURE_IMAGE_UNITS */ - 1207, /* GL_PROGRAM_ERROR_STRING_ARB */ - 1209, /* GL_PROGRAM_FORMAT_ASCII_ARB */ - 1208, /* GL_PROGRAM_FORMAT_ARB */ - 1680, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */ - 335, /* GL_DEPTH_BOUNDS_TEST_EXT */ - 334, /* GL_DEPTH_BOUNDS_EXT */ + 842, /* GL_MATRIX_PALETTE_ARB */ + 873, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */ + 876, /* GL_MAX_PALETTE_MATRICES_ARB */ + 310, /* GL_CURRENT_PALETTE_MATRIX_ARB */ + 836, /* GL_MATRIX_INDEX_ARRAY_ARB */ + 305, /* GL_CURRENT_MATRIX_INDEX_ARB */ + 838, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */ + 840, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */ + 839, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */ + 837, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */ + 1642, /* GL_TEXTURE_DEPTH_SIZE */ + 364, /* GL_DEPTH_TEXTURE_MODE */ + 1608, /* GL_TEXTURE_COMPARE_MODE */ + 1606, /* GL_TEXTURE_COMPARE_FUNC */ + 238, /* GL_COMPARE_R_TO_TEXTURE */ + 1144, /* GL_POINT_SPRITE */ + 287, /* GL_COORD_REPLACE */ + 1148, /* GL_POINT_SPRITE_R_MODE_NV */ + 1265, /* GL_QUERY_COUNTER_BITS */ + 312, /* GL_CURRENT_QUERY */ + 1267, /* GL_QUERY_RESULT */ + 1269, /* GL_QUERY_RESULT_AVAILABLE */ + 924, /* GL_MAX_VERTEX_ATTRIBS */ + 1776, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */ + 362, /* GL_DEPTH_STENCIL_TO_RGBA_NV */ + 361, /* GL_DEPTH_STENCIL_TO_BGRA_NV */ + 910, /* GL_MAX_TEXTURE_COORDS */ + 912, /* GL_MAX_TEXTURE_IMAGE_UNITS */ + 1215, /* GL_PROGRAM_ERROR_STRING_ARB */ + 1217, /* GL_PROGRAM_FORMAT_ASCII_ARB */ + 1216, /* GL_PROGRAM_FORMAT_ARB */ + 1688, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */ + 341, /* GL_DEPTH_BOUNDS_TEST_EXT */ + 340, /* GL_DEPTH_BOUNDS_EXT */ 52, /* GL_ARRAY_BUFFER */ - 440, /* GL_ELEMENT_ARRAY_BUFFER */ + 448, /* GL_ELEMENT_ARRAY_BUFFER */ 53, /* GL_ARRAY_BUFFER_BINDING */ - 441, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */ - 1742, /* GL_VERTEX_ARRAY_BUFFER_BINDING */ - 1003, /* GL_NORMAL_ARRAY_BUFFER_BINDING */ - 139, /* GL_COLOR_ARRAY_BUFFER_BINDING */ - 620, /* GL_INDEX_ARRAY_BUFFER_BINDING */ - 1613, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */ - 436, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */ - 1378, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */ - 482, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */ - 1794, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */ - 1764, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */ - 1210, /* GL_PROGRAM_INSTRUCTIONS_ARB */ - 877, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */ - 1216, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ - 886, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ - 1228, /* GL_PROGRAM_TEMPORARIES_ARB */ - 892, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */ - 1218, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */ - 888, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */ - 1222, /* GL_PROGRAM_PARAMETERS_ARB */ - 891, /* GL_MAX_PROGRAM_PARAMETERS_ARB */ - 1217, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */ - 887, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */ - 1203, /* GL_PROGRAM_ATTRIBS_ARB */ - 872, /* GL_MAX_PROGRAM_ATTRIBS_ARB */ - 1215, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */ - 885, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */ - 1201, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */ - 870, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */ - 1213, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ - 883, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ - 878, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */ - 874, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */ - 1231, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */ - 1691, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */ - 1270, /* GL_READ_ONLY */ - 1802, /* GL_WRITE_ONLY */ - 1272, /* GL_READ_WRITE */ + 449, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */ + 1750, /* GL_VERTEX_ARRAY_BUFFER_BINDING */ + 1011, /* GL_NORMAL_ARRAY_BUFFER_BINDING */ + 145, /* GL_COLOR_ARRAY_BUFFER_BINDING */ + 628, /* GL_INDEX_ARRAY_BUFFER_BINDING */ + 1621, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */ + 444, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */ + 1386, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */ + 490, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */ + 1802, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */ + 1772, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */ + 1218, /* GL_PROGRAM_INSTRUCTIONS_ARB */ + 885, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */ + 1224, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ + 894, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */ + 1236, /* GL_PROGRAM_TEMPORARIES_ARB */ + 900, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */ + 1226, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */ + 896, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */ + 1230, /* GL_PROGRAM_PARAMETERS_ARB */ + 899, /* GL_MAX_PROGRAM_PARAMETERS_ARB */ + 1225, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */ + 895, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */ + 1211, /* GL_PROGRAM_ATTRIBS_ARB */ + 880, /* GL_MAX_PROGRAM_ATTRIBS_ARB */ + 1223, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */ + 893, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */ + 1209, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */ + 878, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */ + 1221, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ + 891, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */ + 886, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */ + 882, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */ + 1239, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */ + 1699, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */ + 1278, /* GL_READ_ONLY */ + 1810, /* GL_WRITE_ONLY */ + 1280, /* GL_READ_WRITE */ 100, /* GL_BUFFER_ACCESS */ 102, /* GL_BUFFER_MAPPED */ 104, /* GL_BUFFER_MAP_POINTER */ - 1685, /* GL_TIME_ELAPSED_EXT */ - 788, /* GL_MATRIX0_ARB */ - 800, /* GL_MATRIX1_ARB */ - 812, /* GL_MATRIX2_ARB */ - 816, /* GL_MATRIX3_ARB */ - 818, /* GL_MATRIX4_ARB */ - 820, /* GL_MATRIX5_ARB */ - 822, /* GL_MATRIX6_ARB */ - 824, /* GL_MATRIX7_ARB */ - 826, /* GL_MATRIX8_ARB */ - 827, /* GL_MATRIX9_ARB */ - 790, /* GL_MATRIX10_ARB */ - 791, /* GL_MATRIX11_ARB */ - 792, /* GL_MATRIX12_ARB */ - 793, /* GL_MATRIX13_ARB */ - 794, /* GL_MATRIX14_ARB */ - 795, /* GL_MATRIX15_ARB */ - 796, /* GL_MATRIX16_ARB */ - 797, /* GL_MATRIX17_ARB */ - 798, /* GL_MATRIX18_ARB */ - 799, /* GL_MATRIX19_ARB */ - 802, /* GL_MATRIX20_ARB */ - 803, /* GL_MATRIX21_ARB */ - 804, /* GL_MATRIX22_ARB */ - 805, /* GL_MATRIX23_ARB */ - 806, /* GL_MATRIX24_ARB */ - 807, /* GL_MATRIX25_ARB */ - 808, /* GL_MATRIX26_ARB */ - 809, /* GL_MATRIX27_ARB */ - 810, /* GL_MATRIX28_ARB */ - 811, /* GL_MATRIX29_ARB */ - 814, /* GL_MATRIX30_ARB */ - 815, /* GL_MATRIX31_ARB */ - 1486, /* GL_STREAM_DRAW */ - 1488, /* GL_STREAM_READ */ - 1484, /* GL_STREAM_COPY */ - 1447, /* GL_STATIC_DRAW */ - 1449, /* GL_STATIC_READ */ - 1445, /* GL_STATIC_COPY */ - 430, /* GL_DYNAMIC_DRAW */ - 432, /* GL_DYNAMIC_READ */ - 428, /* GL_DYNAMIC_COPY */ - 575, /* GL_GL_PIXEL_PACK_BUFFER */ - 577, /* GL_GL_PIXEL_UNPACK_BUFFER */ - 576, /* GL_GL_PIXEL_PACK_BUFFER_BINDING */ - 578, /* GL_GL_PIXEL_UNPACK_BUFFER_BINDING */ - 329, /* GL_DEPTH24_STENCIL8 */ - 1678, /* GL_TEXTURE_STENCIL_SIZE */ - 875, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ - 873, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */ - 876, /* GL_MAX_PROGRAM_IF_DEPTH_NV */ - 880, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */ - 879, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */ - 837, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */ - 1480, /* GL_STENCIL_TEST_TWO_SIDE_EXT */ + 1693, /* GL_TIME_ELAPSED_EXT */ + 796, /* GL_MATRIX0_ARB */ + 808, /* GL_MATRIX1_ARB */ + 820, /* GL_MATRIX2_ARB */ + 824, /* GL_MATRIX3_ARB */ + 826, /* GL_MATRIX4_ARB */ + 828, /* GL_MATRIX5_ARB */ + 830, /* GL_MATRIX6_ARB */ + 832, /* GL_MATRIX7_ARB */ + 834, /* GL_MATRIX8_ARB */ + 835, /* GL_MATRIX9_ARB */ + 798, /* GL_MATRIX10_ARB */ + 799, /* GL_MATRIX11_ARB */ + 800, /* GL_MATRIX12_ARB */ + 801, /* GL_MATRIX13_ARB */ + 802, /* GL_MATRIX14_ARB */ + 803, /* GL_MATRIX15_ARB */ + 804, /* GL_MATRIX16_ARB */ + 805, /* GL_MATRIX17_ARB */ + 806, /* GL_MATRIX18_ARB */ + 807, /* GL_MATRIX19_ARB */ + 810, /* GL_MATRIX20_ARB */ + 811, /* GL_MATRIX21_ARB */ + 812, /* GL_MATRIX22_ARB */ + 813, /* GL_MATRIX23_ARB */ + 814, /* GL_MATRIX24_ARB */ + 815, /* GL_MATRIX25_ARB */ + 816, /* GL_MATRIX26_ARB */ + 817, /* GL_MATRIX27_ARB */ + 818, /* GL_MATRIX28_ARB */ + 819, /* GL_MATRIX29_ARB */ + 822, /* GL_MATRIX30_ARB */ + 823, /* GL_MATRIX31_ARB */ + 1494, /* GL_STREAM_DRAW */ + 1496, /* GL_STREAM_READ */ + 1492, /* GL_STREAM_COPY */ + 1455, /* GL_STATIC_DRAW */ + 1457, /* GL_STATIC_READ */ + 1453, /* GL_STATIC_COPY */ + 438, /* GL_DYNAMIC_DRAW */ + 440, /* GL_DYNAMIC_READ */ + 436, /* GL_DYNAMIC_COPY */ + 583, /* GL_GL_PIXEL_PACK_BUFFER */ + 585, /* GL_GL_PIXEL_UNPACK_BUFFER */ + 584, /* GL_GL_PIXEL_PACK_BUFFER_BINDING */ + 586, /* GL_GL_PIXEL_UNPACK_BUFFER_BINDING */ + 335, /* GL_DEPTH24_STENCIL8 */ + 1686, /* GL_TEXTURE_STENCIL_SIZE */ + 883, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ + 881, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */ + 884, /* GL_MAX_PROGRAM_IF_DEPTH_NV */ + 888, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */ + 887, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */ + 845, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */ + 1488, /* GL_STENCIL_TEST_TWO_SIDE_EXT */ 17, /* GL_ACTIVE_STENCIL_FACE_EXT */ - 937, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */ - 1359, /* GL_SAMPLES_PASSED */ - 505, /* GL_FRAGMENT_SHADER */ - 1788, /* GL_VERTEX_SHADER */ - 1221, /* GL_PROGRAM_OBJECT_ARB */ - 1391, /* GL_SHADER_OBJECT_ARB */ - 861, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */ - 920, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */ - 914, /* GL_MAX_VARYING_FLOATS */ - 918, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */ - 846, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */ - 1028, /* GL_OBJECT_TYPE_ARB */ - 1393, /* GL_SHADER_TYPE */ - 470, /* GL_FLOAT_VEC2 */ - 472, /* GL_FLOAT_VEC3 */ - 474, /* GL_FLOAT_VEC4 */ - 647, /* GL_INT_VEC2 */ - 649, /* GL_INT_VEC3 */ - 651, /* GL_INT_VEC4 */ + 945, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */ + 1367, /* GL_SAMPLES_PASSED */ + 513, /* GL_FRAGMENT_SHADER */ + 1796, /* GL_VERTEX_SHADER */ + 1229, /* GL_PROGRAM_OBJECT_ARB */ + 1399, /* GL_SHADER_OBJECT_ARB */ + 869, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */ + 928, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */ + 922, /* GL_MAX_VARYING_FLOATS */ + 926, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */ + 854, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */ + 1036, /* GL_OBJECT_TYPE_ARB */ + 1401, /* GL_SHADER_TYPE */ + 478, /* GL_FLOAT_VEC2 */ + 480, /* GL_FLOAT_VEC3 */ + 482, /* GL_FLOAT_VEC4 */ + 655, /* GL_INT_VEC2 */ + 657, /* GL_INT_VEC3 */ + 659, /* GL_INT_VEC4 */ 92, /* GL_BOOL */ 94, /* GL_BOOL_VEC2 */ 96, /* GL_BOOL_VEC3 */ 98, /* GL_BOOL_VEC4 */ - 464, /* GL_FLOAT_MAT2 */ - 466, /* GL_FLOAT_MAT3 */ - 468, /* GL_FLOAT_MAT4 */ - 1350, /* GL_SAMPLER_1D */ - 1352, /* GL_SAMPLER_2D */ - 1354, /* GL_SAMPLER_3D */ - 1355, /* GL_SAMPLER_CUBE */ - 1351, /* GL_SAMPLER_1D_SHADOW */ - 1353, /* GL_SAMPLER_2D_SHADOW */ - 569, /* GL_GL_FLOAT_MAT2x3 */ - 570, /* GL_GL_FLOAT_MAT2x4 */ - 571, /* GL_GL_FLOAT_MAT3x2 */ - 572, /* GL_GL_FLOAT_MAT3x4 */ - 573, /* GL_GL_FLOAT_MAT4x2 */ - 574, /* GL_GL_FLOAT_MAT4x3 */ - 327, /* GL_DELETE_STATUS */ - 236, /* GL_COMPILE_STATUS */ - 701, /* GL_LINK_STATUS */ - 1737, /* GL_VALIDATE_STATUS */ - 632, /* GL_INFO_LOG_LENGTH */ + 472, /* GL_FLOAT_MAT2 */ + 474, /* GL_FLOAT_MAT3 */ + 476, /* GL_FLOAT_MAT4 */ + 1358, /* GL_SAMPLER_1D */ + 1360, /* GL_SAMPLER_2D */ + 1362, /* GL_SAMPLER_3D */ + 1363, /* GL_SAMPLER_CUBE */ + 1359, /* GL_SAMPLER_1D_SHADOW */ + 1361, /* GL_SAMPLER_2D_SHADOW */ + 577, /* GL_GL_FLOAT_MAT2x3 */ + 578, /* GL_GL_FLOAT_MAT2x4 */ + 579, /* GL_GL_FLOAT_MAT3x2 */ + 580, /* GL_GL_FLOAT_MAT3x4 */ + 581, /* GL_GL_FLOAT_MAT4x2 */ + 582, /* GL_GL_FLOAT_MAT4x3 */ + 333, /* GL_DELETE_STATUS */ + 242, /* GL_COMPILE_STATUS */ + 709, /* GL_LINK_STATUS */ + 1745, /* GL_VALIDATE_STATUS */ + 640, /* GL_INFO_LOG_LENGTH */ 55, /* GL_ATTACHED_SHADERS */ 20, /* GL_ACTIVE_UNIFORMS */ 21, /* GL_ACTIVE_UNIFORM_MAX_LENGTH */ - 1392, /* GL_SHADER_SOURCE_LENGTH */ + 1400, /* GL_SHADER_SOURCE_LENGTH */ 15, /* GL_ACTIVE_ATTRIBUTES */ 16, /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */ - 507, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */ - 1395, /* GL_SHADING_LANGUAGE_VERSION */ - 305, /* GL_CURRENT_PROGRAM */ - 1077, /* GL_PALETTE4_RGB8_OES */ - 1079, /* GL_PALETTE4_RGBA8_OES */ - 1075, /* GL_PALETTE4_R5_G6_B5_OES */ - 1078, /* GL_PALETTE4_RGBA4_OES */ - 1076, /* GL_PALETTE4_RGB5_A1_OES */ - 1082, /* GL_PALETTE8_RGB8_OES */ - 1084, /* GL_PALETTE8_RGBA8_OES */ - 1080, /* GL_PALETTE8_R5_G6_B5_OES */ - 1083, /* GL_PALETTE8_RGBA4_OES */ - 1081, /* GL_PALETTE8_RGB5_A1_OES */ - 614, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */ - 613, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */ - 1722, /* GL_UNSIGNED_NORMALIZED */ - 1568, /* GL_TEXTURE_1D_ARRAY_EXT */ - 1241, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */ - 1570, /* GL_TEXTURE_2D_ARRAY_EXT */ - 1244, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */ - 1576, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */ - 1578, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */ - 583, /* GL_GL_SRGB */ - 584, /* GL_GL_SRGB8 */ - 586, /* GL_GL_SRGB_ALPHA */ - 585, /* GL_GL_SRGB8_ALPHA8 */ - 582, /* GL_GL_SLUMINANCE_ALPHA */ - 581, /* GL_GL_SLUMINANCE8_ALPHA8 */ - 579, /* GL_GL_SLUMINANCE */ - 580, /* GL_GL_SLUMINANCE8 */ - 566, /* GL_GL_COMPRESSED_SRGB */ - 567, /* GL_GL_COMPRESSED_SRGB_ALPHA */ - 564, /* GL_GL_COMPRESSED_SLUMINANCE */ - 565, /* GL_GL_COMPRESSED_SLUMINANCE_ALPHA */ - 1138, /* GL_POINT_SPRITE_COORD_ORIGIN */ - 709, /* GL_LOWER_LEFT */ - 1734, /* GL_UPPER_LEFT */ - 1462, /* GL_STENCIL_BACK_REF */ - 1463, /* GL_STENCIL_BACK_VALUE_MASK */ - 1464, /* GL_STENCIL_BACK_WRITEMASK */ - 423, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */ - 1286, /* GL_RENDERBUFFER_BINDING_EXT */ - 1267, /* GL_READ_FRAMEBUFFER */ - 422, /* GL_DRAW_FRAMEBUFFER */ - 1268, /* GL_READ_FRAMEBUFFER_BINDING_EXT */ - 1296, /* GL_RENDERBUFFER_SAMPLES */ - 517, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ - 515, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ - 526, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ - 522, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ - 524, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ - 529, /* GL_FRAMEBUFFER_COMPLETE */ - 533, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ - 539, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ - 537, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */ - 535, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */ - 538, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */ - 536, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */ - 542, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */ - 545, /* GL_FRAMEBUFFER_UNSUPPORTED */ - 543, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */ - 843, /* GL_MAX_COLOR_ATTACHMENTS_EXT */ - 145, /* GL_COLOR_ATTACHMENT0 */ - 147, /* GL_COLOR_ATTACHMENT1 */ - 161, /* GL_COLOR_ATTACHMENT2 */ - 163, /* GL_COLOR_ATTACHMENT3 */ - 165, /* GL_COLOR_ATTACHMENT4 */ - 167, /* GL_COLOR_ATTACHMENT5 */ - 169, /* GL_COLOR_ATTACHMENT6 */ - 171, /* GL_COLOR_ATTACHMENT7 */ - 173, /* GL_COLOR_ATTACHMENT8 */ - 175, /* GL_COLOR_ATTACHMENT9 */ - 148, /* GL_COLOR_ATTACHMENT10 */ - 150, /* GL_COLOR_ATTACHMENT11 */ - 152, /* GL_COLOR_ATTACHMENT12 */ - 154, /* GL_COLOR_ATTACHMENT13 */ - 156, /* GL_COLOR_ATTACHMENT14 */ - 158, /* GL_COLOR_ATTACHMENT15 */ - 330, /* GL_DEPTH_ATTACHMENT */ - 1452, /* GL_STENCIL_ATTACHMENT */ - 508, /* GL_FRAMEBUFFER */ - 1284, /* GL_RENDERBUFFER */ - 1298, /* GL_RENDERBUFFER_WIDTH */ - 1291, /* GL_RENDERBUFFER_HEIGHT */ - 1293, /* GL_RENDERBUFFER_INTERNAL_FORMAT */ - 1475, /* GL_STENCIL_INDEX_EXT */ - 1472, /* GL_STENCIL_INDEX1_EXT */ - 1473, /* GL_STENCIL_INDEX4_EXT */ - 1474, /* GL_STENCIL_INDEX8_EXT */ - 1471, /* GL_STENCIL_INDEX16_EXT */ - 1295, /* GL_RENDERBUFFER_RED_SIZE */ - 1290, /* GL_RENDERBUFFER_GREEN_SIZE */ - 1287, /* GL_RENDERBUFFER_BLUE_SIZE */ - 1285, /* GL_RENDERBUFFER_ALPHA_SIZE */ - 1288, /* GL_RENDERBUFFER_DEPTH_SIZE */ - 1297, /* GL_RENDERBUFFER_STENCIL_SIZE */ - 541, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ - 899, /* GL_MAX_SAMPLES */ - 447, /* GL_EVAL_BIT */ - 1265, /* GL_RASTER_POSITION_UNCLIPPED_IBM */ - 703, /* GL_LIST_BIT */ - 1584, /* GL_TEXTURE_BIT */ - 1374, /* GL_SCISSOR_BIT */ + 515, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */ + 1403, /* GL_SHADING_LANGUAGE_VERSION */ + 311, /* GL_CURRENT_PROGRAM */ + 1085, /* GL_PALETTE4_RGB8_OES */ + 1087, /* GL_PALETTE4_RGBA8_OES */ + 1083, /* GL_PALETTE4_R5_G6_B5_OES */ + 1086, /* GL_PALETTE4_RGBA4_OES */ + 1084, /* GL_PALETTE4_RGB5_A1_OES */ + 1090, /* GL_PALETTE8_RGB8_OES */ + 1092, /* GL_PALETTE8_RGBA8_OES */ + 1088, /* GL_PALETTE8_R5_G6_B5_OES */ + 1091, /* GL_PALETTE8_RGBA4_OES */ + 1089, /* GL_PALETTE8_RGB5_A1_OES */ + 622, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */ + 621, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */ + 1730, /* GL_UNSIGNED_NORMALIZED */ + 1576, /* GL_TEXTURE_1D_ARRAY_EXT */ + 1249, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */ + 1578, /* GL_TEXTURE_2D_ARRAY_EXT */ + 1252, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */ + 1584, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */ + 1586, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */ + 591, /* GL_GL_SRGB */ + 592, /* GL_GL_SRGB8 */ + 594, /* GL_GL_SRGB_ALPHA */ + 593, /* GL_GL_SRGB8_ALPHA8 */ + 590, /* GL_GL_SLUMINANCE_ALPHA */ + 589, /* GL_GL_SLUMINANCE8_ALPHA8 */ + 587, /* GL_GL_SLUMINANCE */ + 588, /* GL_GL_SLUMINANCE8 */ + 574, /* GL_GL_COMPRESSED_SRGB */ + 575, /* GL_GL_COMPRESSED_SRGB_ALPHA */ + 572, /* GL_GL_COMPRESSED_SLUMINANCE */ + 573, /* GL_GL_COMPRESSED_SLUMINANCE_ALPHA */ + 1146, /* GL_POINT_SPRITE_COORD_ORIGIN */ + 717, /* GL_LOWER_LEFT */ + 1742, /* GL_UPPER_LEFT */ + 1470, /* GL_STENCIL_BACK_REF */ + 1471, /* GL_STENCIL_BACK_VALUE_MASK */ + 1472, /* GL_STENCIL_BACK_WRITEMASK */ + 429, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */ + 1294, /* GL_RENDERBUFFER_BINDING_EXT */ + 1275, /* GL_READ_FRAMEBUFFER */ + 428, /* GL_DRAW_FRAMEBUFFER */ + 1276, /* GL_READ_FRAMEBUFFER_BINDING_EXT */ + 1304, /* GL_RENDERBUFFER_SAMPLES */ + 525, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ + 523, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ + 534, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ + 530, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ + 532, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ + 537, /* GL_FRAMEBUFFER_COMPLETE */ + 541, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ + 547, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ + 545, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */ + 543, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */ + 546, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */ + 544, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */ + 550, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */ + 553, /* GL_FRAMEBUFFER_UNSUPPORTED */ + 551, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */ + 851, /* GL_MAX_COLOR_ATTACHMENTS_EXT */ + 151, /* GL_COLOR_ATTACHMENT0 */ + 153, /* GL_COLOR_ATTACHMENT1 */ + 167, /* GL_COLOR_ATTACHMENT2 */ + 169, /* GL_COLOR_ATTACHMENT3 */ + 171, /* GL_COLOR_ATTACHMENT4 */ + 173, /* GL_COLOR_ATTACHMENT5 */ + 175, /* GL_COLOR_ATTACHMENT6 */ + 177, /* GL_COLOR_ATTACHMENT7 */ + 179, /* GL_COLOR_ATTACHMENT8 */ + 181, /* GL_COLOR_ATTACHMENT9 */ + 154, /* GL_COLOR_ATTACHMENT10 */ + 156, /* GL_COLOR_ATTACHMENT11 */ + 158, /* GL_COLOR_ATTACHMENT12 */ + 160, /* GL_COLOR_ATTACHMENT13 */ + 162, /* GL_COLOR_ATTACHMENT14 */ + 164, /* GL_COLOR_ATTACHMENT15 */ + 336, /* GL_DEPTH_ATTACHMENT */ + 1460, /* GL_STENCIL_ATTACHMENT */ + 516, /* GL_FRAMEBUFFER */ + 1292, /* GL_RENDERBUFFER */ + 1306, /* GL_RENDERBUFFER_WIDTH */ + 1299, /* GL_RENDERBUFFER_HEIGHT */ + 1301, /* GL_RENDERBUFFER_INTERNAL_FORMAT */ + 1483, /* GL_STENCIL_INDEX_EXT */ + 1480, /* GL_STENCIL_INDEX1_EXT */ + 1481, /* GL_STENCIL_INDEX4_EXT */ + 1482, /* GL_STENCIL_INDEX8_EXT */ + 1479, /* GL_STENCIL_INDEX16_EXT */ + 1303, /* GL_RENDERBUFFER_RED_SIZE */ + 1298, /* GL_RENDERBUFFER_GREEN_SIZE */ + 1295, /* GL_RENDERBUFFER_BLUE_SIZE */ + 1293, /* GL_RENDERBUFFER_ALPHA_SIZE */ + 1296, /* GL_RENDERBUFFER_DEPTH_SIZE */ + 1305, /* GL_RENDERBUFFER_STENCIL_SIZE */ + 549, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ + 907, /* GL_MAX_SAMPLES */ + 455, /* GL_EVAL_BIT */ + 1273, /* GL_RASTER_POSITION_UNCLIPPED_IBM */ + 711, /* GL_LIST_BIT */ + 1592, /* GL_TEXTURE_BIT */ + 1382, /* GL_SCISSOR_BIT */ 29, /* GL_ALL_ATTRIB_BITS */ - 984, /* GL_MULTISAMPLE_BIT */ + 992, /* GL_MULTISAMPLE_BIT */ 30, /* GL_ALL_CLIENT_ATTRIB_BITS */ }; -#define Elements(x) sizeof(x)/sizeof(*x) - typedef int (*cfunc)(const void *, const void *); /** diff --git a/src/mesa/main/execmem.c b/src/mesa/main/execmem.c index f95c31862a..57c1e117c8 100644 --- a/src/mesa/main/execmem.c +++ b/src/mesa/main/execmem.c @@ -24,7 +24,7 @@ /** - * \file exemem.c + * \file execmem.c * Functions for allocating executable memory. * * \author Keith Whitwell @@ -36,7 +36,7 @@ -#if defined(__linux__) || defined(__OpenBSD__) || defined(_NetBSD__) +#if defined(__linux__) || defined(__OpenBSD__) || defined(_NetBSD__) || defined(__sun) /* * Allocate a large block of memory which can hold code then dole it out diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index 1b31e283cd..2d2bf51784 100644 --- a/src/mesa/main/extensions.c +++ b/src/mesa/main/extensions.c @@ -137,6 +137,7 @@ static const struct { { ON, "GL_APPLE_packed_pixels", F(APPLE_packed_pixels) }, { OFF, "GL_APPLE_vertex_array_object", F(APPLE_vertex_array_object) }, { OFF, "GL_ATI_blend_equation_separate", F(EXT_blend_equation_separate) }, + { OFF, "GL_ATI_envmap_bumpmap", F(ATI_envmap_bumpmap) }, { OFF, "GL_ATI_texture_env_combine3", F(ATI_texture_env_combine3)}, { OFF, "GL_ATI_texture_mirror_once", F(ATI_texture_mirror_once)}, { OFF, "GL_ATI_fragment_shader", F(ATI_fragment_shader)}, @@ -147,7 +148,6 @@ static const struct { { OFF, "GL_INGR_blend_func_separate", F(EXT_blend_func_separate) }, { OFF, "GL_MESA_pack_invert", F(MESA_pack_invert) }, { OFF, "GL_MESA_packed_depth_stencil", F(MESA_packed_depth_stencil) }, - { OFF, "GL_MESA_program_debug", F(MESA_program_debug) }, { OFF, "GL_MESA_resize_buffers", F(MESA_resize_buffers) }, { OFF, "GL_MESA_texture_array", F(MESA_texture_array) }, { OFF, "GL_MESA_ycbcr_texture", F(MESA_ycbcr_texture) }, @@ -208,7 +208,7 @@ _mesa_enable_sw_extensions(GLcontext *ctx) ctx->Extensions.ARB_shading_language_100 = GL_TRUE; #endif #if FEATURE_ARB_shading_language_120 - ctx->Extensions.ARB_shading_language_120 = GL_FALSE; /* not quite done */ + ctx->Extensions.ARB_shading_language_120 = GL_TRUE; #endif ctx->Extensions.ARB_shadow = GL_TRUE; ctx->Extensions.ARB_shadow_ambient = GL_TRUE; @@ -230,6 +230,7 @@ _mesa_enable_sw_extensions(GLcontext *ctx) /*ctx->Extensions.ARB_vertex_buffer_object = GL_TRUE;*/ #endif ctx->Extensions.APPLE_vertex_array_object = GL_TRUE; + ctx->Extensions.ATI_envmap_bumpmap = GL_TRUE; #if FEATURE_ATI_fragment_shader ctx->Extensions.ATI_fragment_shader = GL_TRUE; #endif @@ -276,9 +277,6 @@ _mesa_enable_sw_extensions(GLcontext *ctx) ctx->Extensions.EXT_vertex_array_bgra = GL_TRUE; /*ctx->Extensions.IBM_multimode_draw_arrays = GL_TRUE;*/ ctx->Extensions.MESA_pack_invert = GL_TRUE; -#if FEATURE_MESA_program_debug - ctx->Extensions.MESA_program_debug = GL_TRUE; -#endif ctx->Extensions.MESA_resize_buffers = GL_TRUE; ctx->Extensions.MESA_texture_array = GL_TRUE; ctx->Extensions.MESA_ycbcr_texture = GL_TRUE; @@ -433,7 +431,7 @@ _mesa_enable_2_1_extensions(GLcontext *ctx) ctx->Extensions.EXT_texture_sRGB = GL_TRUE; #endif #ifdef FEATURE_ARB_shading_language_120 - ctx->Extensions.ARB_shading_language_120 = GL_FALSE; /* not quite done */ + ctx->Extensions.ARB_shading_language_120 = GL_TRUE; #endif } diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index c3cdc11037..151e29053a 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -303,6 +303,20 @@ _mesa_framebuffer_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb, /** + * For debug only. + */ +static void +att_incomplete(const char *msg) +{ +#if 0 + _mesa_printf("attachment incomplete: %s\n", msg); +#else + (void) msg; +#endif +} + + +/** * Test if an attachment point is complete and update its Complete field. * \param format if GL_COLOR, this is a color attachment point, * if GL_DEPTH, this is a depth component attachment point, @@ -323,20 +337,26 @@ test_attachment_completeness(const GLcontext *ctx, GLenum format, struct gl_texture_image *texImage; if (!texObj) { + att_incomplete("no texobj"); att->Complete = GL_FALSE; return; } texImage = texObj->Image[att->CubeMapFace][att->TextureLevel]; if (!texImage) { + att_incomplete("no teximage"); att->Complete = GL_FALSE; return; } if (texImage->Width < 1 || texImage->Height < 1) { + att_incomplete("teximage width/height=0"); + _mesa_printf("texobj = %u\n", texObj->Name); + _mesa_printf("level = %d\n", att->TextureLevel); att->Complete = GL_FALSE; return; } if (texObj->Target == GL_TEXTURE_3D && att->Zoffset >= texImage->Depth) { + att_incomplete("bad z offset"); att->Complete = GL_FALSE; return; } @@ -344,6 +364,7 @@ test_attachment_completeness(const GLcontext *ctx, GLenum format, if (format == GL_COLOR) { if (texImage->TexFormat->BaseFormat != GL_RGB && texImage->TexFormat->BaseFormat != GL_RGBA) { + att_incomplete("bad format"); att->Complete = GL_FALSE; return; } @@ -358,11 +379,13 @@ test_attachment_completeness(const GLcontext *ctx, GLenum format, } else { att->Complete = GL_FALSE; + att_incomplete("bad depth format"); return; } } else { /* no such thing as stencil textures */ + att_incomplete("illegal stencil texture"); att->Complete = GL_FALSE; return; } @@ -372,6 +395,7 @@ test_attachment_completeness(const GLcontext *ctx, GLenum format, if (!att->Renderbuffer->InternalFormat || att->Renderbuffer->Width < 1 || att->Renderbuffer->Height < 1) { + att_incomplete("0x0 renderbuffer"); att->Complete = GL_FALSE; return; } @@ -381,6 +405,7 @@ test_attachment_completeness(const GLcontext *ctx, GLenum format, ASSERT(att->Renderbuffer->RedBits); ASSERT(att->Renderbuffer->GreenBits); ASSERT(att->Renderbuffer->BlueBits); + att_incomplete("bad renderbuffer color format"); att->Complete = GL_FALSE; return; } @@ -395,6 +420,7 @@ test_attachment_completeness(const GLcontext *ctx, GLenum format, /* OK */ } else { + att_incomplete("bad renderbuffer depth format"); att->Complete = GL_FALSE; return; } @@ -411,6 +437,7 @@ test_attachment_completeness(const GLcontext *ctx, GLenum format, } else { att->Complete = GL_FALSE; + att_incomplete("bad renderbuffer stencil format"); return; } } @@ -1202,19 +1229,26 @@ _mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer) ASSERT(newFb != &DummyFramebuffer); /* - * XXX check if re-binding same buffer and skip some of this code. + * OK, now bind the new Draw/Read framebuffers, if they're changing. */ if (bindReadBuf) { - _mesa_reference_framebuffer(&ctx->ReadBuffer, newFbread); + if (ctx->ReadBuffer == newFbread) + bindReadBuf = GL_FALSE; /* no change */ + else + _mesa_reference_framebuffer(&ctx->ReadBuffer, newFbread); } if (bindDrawBuf) { /* check if old FB had any texture attachments */ - check_end_texture_render(ctx, ctx->DrawBuffer); + if (ctx->DrawBuffer->Name != 0) { + check_end_texture_render(ctx, ctx->DrawBuffer); + } - /* check if time to delete this framebuffer */ - _mesa_reference_framebuffer(&ctx->DrawBuffer, newFb); + if (ctx->DrawBuffer == newFb) + bindDrawBuf = GL_FALSE; /* no change */ + else + _mesa_reference_framebuffer(&ctx->DrawBuffer, newFb); if (newFb->Name != 0) { /* check if newly bound framebuffer has any texture attachments */ @@ -1222,7 +1256,7 @@ _mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer) } } - if (ctx->Driver.BindFramebuffer) { + if ((bindDrawBuf || bindReadBuf) && ctx->Driver.BindFramebuffer) { ctx->Driver.BindFramebuffer(ctx, target, newFb, newFbread); } } diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h index 33d16cc5a0..5409394073 100644 --- a/src/mesa/main/fbobject.h +++ b/src/mesa/main/fbobject.h @@ -83,7 +83,7 @@ extern void GLAPIENTRY _mesa_RenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -void GLAPIENTRY +extern void GLAPIENTRY _mesa_RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); diff --git a/src/mesa/main/feedback.c b/src/mesa/main/feedback.c index 48c2ccbff3..818a804540 100644 --- a/src/mesa/main/feedback.c +++ b/src/mesa/main/feedback.c @@ -1,13 +1,9 @@ -/** - * \file feedback.c - * Selection and feedback modes functions. - */ - /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 7.5 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * 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"), @@ -27,6 +23,11 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/** + * \file feedback.c + * Selection and feedback modes functions. + */ + #include "glheader.h" #include "colormac.h" @@ -110,60 +111,49 @@ _mesa_PassThrough( GLfloat token ) if (ctx->RenderMode==GL_FEEDBACK) { FLUSH_VERTICES(ctx, 0); - FEEDBACK_TOKEN( ctx, (GLfloat) (GLint) GL_PASS_THROUGH_TOKEN ); - FEEDBACK_TOKEN( ctx, token ); + _mesa_feedback_token( ctx, (GLfloat) (GLint) GL_PASS_THROUGH_TOKEN ); + _mesa_feedback_token( ctx, token ); } } - -/* +/** * Put a vertex into the feedback buffer. */ -void _mesa_feedback_vertex( GLcontext *ctx, - const GLfloat win[4], - const GLfloat color[4], - GLfloat index, - const GLfloat texcoord[4] ) +void +_mesa_feedback_vertex(GLcontext *ctx, + const GLfloat win[4], + const GLfloat color[4], + GLfloat index, + const GLfloat texcoord[4]) { -#if 0 - { - /* snap window x, y to fractional pixel position */ - const GLint snapMask = ~((FIXED_ONE / (1 << SUB_PIXEL_BITS)) - 1); - GLfixed x, y; - x = FloatToFixed(win[0]) & snapMask; - y = FloatToFixed(win[1]) & snapMask; - FEEDBACK_TOKEN(ctx, FixedToFloat(x)); - FEEDBACK_TOKEN(ctx, FixedToFloat(y) ); - } -#else - FEEDBACK_TOKEN( ctx, win[0] ); - FEEDBACK_TOKEN( ctx, win[1] ); -#endif + _mesa_feedback_token( ctx, win[0] ); + _mesa_feedback_token( ctx, win[1] ); if (ctx->Feedback._Mask & FB_3D) { - FEEDBACK_TOKEN( ctx, win[2] ); + _mesa_feedback_token( ctx, win[2] ); } if (ctx->Feedback._Mask & FB_4D) { - FEEDBACK_TOKEN( ctx, win[3] ); + _mesa_feedback_token( ctx, win[3] ); } if (ctx->Feedback._Mask & FB_INDEX) { - FEEDBACK_TOKEN( ctx, (GLfloat) index ); + _mesa_feedback_token( ctx, (GLfloat) index ); } if (ctx->Feedback._Mask & FB_COLOR) { - FEEDBACK_TOKEN( ctx, color[0] ); - FEEDBACK_TOKEN( ctx, color[1] ); - FEEDBACK_TOKEN( ctx, color[2] ); - FEEDBACK_TOKEN( ctx, color[3] ); + _mesa_feedback_token( ctx, color[0] ); + _mesa_feedback_token( ctx, color[1] ); + _mesa_feedback_token( ctx, color[2] ); + _mesa_feedback_token( ctx, color[3] ); } if (ctx->Feedback._Mask & FB_TEXTURE) { - FEEDBACK_TOKEN( ctx, texcoord[0] ); - FEEDBACK_TOKEN( ctx, texcoord[1] ); - FEEDBACK_TOKEN( ctx, texcoord[2] ); - FEEDBACK_TOKEN( ctx, texcoord[3] ); + _mesa_feedback_token( ctx, texcoord[0] ); + _mesa_feedback_token( ctx, texcoord[1] ); + _mesa_feedback_token( ctx, texcoord[2] ); + _mesa_feedback_token( ctx, texcoord[3] ); } } -#endif + +#endif /* _HAVE_FULL_GL */ /**********************************************************************/ @@ -207,17 +197,20 @@ _mesa_SelectBuffer( GLsizei size, GLuint *buffer ) /** * Write a value of a record into the selection buffer. * - * \param CTX GL context. - * \param V value. + * \param ctx GL context. + * \param value value. * * Verifies there is free space in the buffer to write the value and * increments the pointer. */ -#define WRITE_RECORD( CTX, V ) \ - if (CTX->Select.BufferCount < CTX->Select.BufferSize) { \ - CTX->Select.Buffer[CTX->Select.BufferCount] = (V); \ - } \ - CTX->Select.BufferCount++; +static INLINE void +write_record(GLcontext *ctx, GLuint value) +{ + if (ctx->Select.BufferCount < ctx->Select.BufferSize) { + ctx->Select.Buffer[ctx->Select.BufferCount] = value; + } + ctx->Select.BufferCount++; +} /** @@ -229,7 +222,8 @@ _mesa_SelectBuffer( GLsizei size, GLuint *buffer ) * Sets gl_selection::HitFlag and updates gl_selection::HitMinZ and * gl_selection::HitMaxZ. */ -void _mesa_update_hitflag( GLcontext *ctx, GLfloat z ) +void +_mesa_update_hitflag(GLcontext *ctx, GLfloat z) { ctx->Select.HitFlag = GL_TRUE; if (z < ctx->Select.HitMinZ) { @@ -252,7 +246,8 @@ void _mesa_update_hitflag( GLcontext *ctx, GLfloat z ) * * \sa gl_selection. */ -static void write_hit_record( GLcontext *ctx ) +static void +write_hit_record(GLcontext *ctx) { GLuint i; GLuint zmin, zmax, zscale = (~0u); @@ -264,11 +259,11 @@ static void write_hit_record( GLcontext *ctx ) zmin = (GLuint) ((GLfloat) zscale * ctx->Select.HitMinZ); zmax = (GLuint) ((GLfloat) zscale * ctx->Select.HitMaxZ); - WRITE_RECORD( ctx, ctx->Select.NameStackDepth ); - WRITE_RECORD( ctx, zmin ); - WRITE_RECORD( ctx, zmax ); + write_record( ctx, ctx->Select.NameStackDepth ); + write_record( ctx, zmin ); + write_record( ctx, zmax ); for (i = 0; i < ctx->Select.NameStackDepth; i++) { - WRITE_RECORD( ctx, ctx->Select.NameStack[i] ); + write_record( ctx, ctx->Select.NameStack[i] ); } ctx->Select.Hits++; diff --git a/src/mesa/main/feedback.h b/src/mesa/main/feedback.h index 6c448ad631..72c2acd5ed 100644 --- a/src/mesa/main/feedback.h +++ b/src/mesa/main/feedback.h @@ -1,13 +1,9 @@ -/** - * \file feedback.h - * Selection and feedback modes functions. - */ - /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 7.5 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * 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"), @@ -27,7 +23,6 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef FEEDBACK_H #define FEEDBACK_H @@ -35,23 +30,29 @@ #include "mtypes.h" -#define FEEDBACK_TOKEN( CTX, T ) \ - if (CTX->Feedback.Count < CTX->Feedback.BufferSize) { \ - CTX->Feedback.Buffer[CTX->Feedback.Count] = (GLfloat) (T); \ - } \ - CTX->Feedback.Count++; +extern void +_mesa_init_feedback( GLcontext *ctx ); +extern void +_mesa_feedback_vertex( GLcontext *ctx, + const GLfloat win[4], + const GLfloat color[4], + GLfloat index, + const GLfloat texcoord[4] ); -extern void _mesa_init_feedback( GLcontext * ctx ); -extern void _mesa_feedback_vertex( GLcontext *ctx, - const GLfloat win[4], - const GLfloat color[4], - GLfloat index, - const GLfloat texcoord[4] ); +static INLINE void +_mesa_feedback_token( GLcontext *ctx, GLfloat token ) +{ + if (ctx->Feedback.Count < ctx->Feedback.BufferSize) { + ctx->Feedback.Buffer[ctx->Feedback.Count] = token; + } + ctx->Feedback.Count++; +} -extern void _mesa_update_hitflag( GLcontext *ctx, GLfloat z ); +extern void +_mesa_update_hitflag( GLcontext *ctx, GLfloat z ); extern void GLAPIENTRY diff --git a/src/mesa/main/ffvertex_prog.c b/src/mesa/main/ffvertex_prog.c index d70b78f258..72b880e28e 100644 --- a/src/mesa/main/ffvertex_prog.c +++ b/src/mesa/main/ffvertex_prog.c @@ -293,16 +293,16 @@ static void make_state_key( GLcontext *ctx, struct state_key *key ) key->unit[i].texgen_mode0 = translate_texgen( texUnit->TexGenEnabled & (1<<0), - texUnit->GenModeS ); + texUnit->GenS.Mode ); key->unit[i].texgen_mode1 = translate_texgen( texUnit->TexGenEnabled & (1<<1), - texUnit->GenModeT ); + texUnit->GenT.Mode ); key->unit[i].texgen_mode2 = translate_texgen( texUnit->TexGenEnabled & (1<<2), - texUnit->GenModeR ); + texUnit->GenR.Mode ); key->unit[i].texgen_mode3 = translate_texgen( texUnit->TexGenEnabled & (1<<3), - texUnit->GenModeQ ); + texUnit->GenQ.Mode ); } } } @@ -655,7 +655,6 @@ static void emit_op3fn(struct tnl_program *p, inst = &p->program->Base.Instructions[nr]; inst->Opcode = (enum prog_opcode) op; - inst->StringPos = 0; inst->Data = 0; emit_arg( &inst->SrcReg[0], src0 ); diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c index 351bf6959a..5a13c88a7a 100644 --- a/src/mesa/main/framebuffer.c +++ b/src/mesa/main/framebuffer.c @@ -116,6 +116,7 @@ _mesa_new_framebuffer(GLcontext *ctx, GLuint name) fb->ColorReadBuffer = GL_COLOR_ATTACHMENT0_EXT; fb->_ColorReadBufferIndex = BUFFER_COLOR0; fb->Delete = _mesa_destroy_framebuffer; + _glthread_INIT_MUTEX(fb->Mutex); } return fb; } @@ -252,22 +253,6 @@ _mesa_reference_framebuffer(struct gl_framebuffer **ptr, /** - * XXX this function is deprecated. - * Undo/remove a reference to a framebuffer object. - * Decrement the framebuffer object's reference count and delete it when - * the refcount hits zero. - * Note: we pass the address of a pointer and set it to NULL. - */ -void -_mesa_unreference_framebuffer(struct gl_framebuffer **fb) -{ - _mesa_reference_framebuffer(fb, NULL); -} - - - - -/** * Resize the given framebuffer's renderbuffers to the new width and height. * This should only be used for window-system framebuffers, not * user-created renderbuffers (i.e. made with GL_EXT_framebuffer_object). diff --git a/src/mesa/main/framebuffer.h b/src/mesa/main/framebuffer.h index e9eeed28cb..45a4703ba9 100644 --- a/src/mesa/main/framebuffer.h +++ b/src/mesa/main/framebuffer.h @@ -47,9 +47,6 @@ _mesa_reference_framebuffer(struct gl_framebuffer **ptr, struct gl_framebuffer *fb); extern void -_mesa_unreference_framebuffer(struct gl_framebuffer **fb); - -extern void _mesa_resize_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb, GLuint width, GLuint height); diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 87a821b12d..0937fd053c 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -884,21 +884,21 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params ) params[0] = _mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT); break; case GL_TEXTURE_BINDING_1D: - params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name); + params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name); break; case GL_TEXTURE_BINDING_2D: - params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name); + params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name); break; case GL_TEXTURE_BINDING_3D: - params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name); + params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name); break; case GL_TEXTURE_BINDING_1D_ARRAY_EXT: CHECK_EXT1(MESA_texture_array, "GetBooleanv"); - params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1DArray->Name); + params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name); break; case GL_TEXTURE_BINDING_2D_ARRAY_EXT: CHECK_EXT1(MESA_texture_array, "GetBooleanv"); - params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2DArray->Name); + params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name); break; case GL_TEXTURE_GEN_S: params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0); @@ -1071,7 +1071,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params ) break; case GL_TEXTURE_BINDING_CUBE_MAP_ARB: CHECK_EXT1(ARB_texture_cube_map, "GetBooleanv"); - params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name); + params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name); break; case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB: CHECK_EXT1(ARB_texture_cube_map, "GetBooleanv"); @@ -1558,7 +1558,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params ) break; case GL_TEXTURE_BINDING_RECTANGLE_NV: CHECK_EXT1(NV_texture_rectangle, "GetBooleanv"); - params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name); + params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name); break; case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV: CHECK_EXT1(NV_texture_rectangle, "GetBooleanv"); @@ -1715,22 +1715,6 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params ) params[0] = FLOAT_TO_BOOLEAN(ctx->Depth.BoundsMin); params[1] = FLOAT_TO_BOOLEAN(ctx->Depth.BoundsMax); break; - case GL_FRAGMENT_PROGRAM_CALLBACK_MESA: - CHECK_EXT1(MESA_program_debug, "GetBooleanv"); - params[0] = ctx->FragmentProgram.CallbackEnabled; - break; - case GL_VERTEX_PROGRAM_CALLBACK_MESA: - CHECK_EXT1(MESA_program_debug, "GetBooleanv"); - params[0] = ctx->VertexProgram.CallbackEnabled; - break; - case GL_FRAGMENT_PROGRAM_POSITION_MESA: - CHECK_EXT1(MESA_program_debug, "GetBooleanv"); - params[0] = INT_TO_BOOLEAN(ctx->FragmentProgram.CurrentPosition); - break; - case GL_VERTEX_PROGRAM_POSITION_MESA: - CHECK_EXT1(MESA_program_debug, "GetBooleanv"); - params[0] = INT_TO_BOOLEAN(ctx->VertexProgram.CurrentPosition); - break; case GL_MAX_DRAW_BUFFERS_ARB: params[0] = INT_TO_BOOLEAN(ctx->Const.MaxDrawBuffers); break; @@ -2710,21 +2694,21 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT)); break; case GL_TEXTURE_BINDING_1D: - params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name); + params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name); break; case GL_TEXTURE_BINDING_2D: - params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name); + params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name); break; case GL_TEXTURE_BINDING_3D: - params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name); + params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name); break; case GL_TEXTURE_BINDING_1D_ARRAY_EXT: CHECK_EXT1(MESA_texture_array, "GetFloatv"); - params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1DArray->Name); + params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name); break; case GL_TEXTURE_BINDING_2D_ARRAY_EXT: CHECK_EXT1(MESA_texture_array, "GetFloatv"); - params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2DArray->Name); + params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name); break; case GL_TEXTURE_GEN_S: params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0)); @@ -2897,7 +2881,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) break; case GL_TEXTURE_BINDING_CUBE_MAP_ARB: CHECK_EXT1(ARB_texture_cube_map, "GetFloatv"); - params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name); + params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name); break; case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB: CHECK_EXT1(ARB_texture_cube_map, "GetFloatv"); @@ -3384,7 +3368,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) break; case GL_TEXTURE_BINDING_RECTANGLE_NV: CHECK_EXT1(NV_texture_rectangle, "GetFloatv"); - params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name); + params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name); break; case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV: CHECK_EXT1(NV_texture_rectangle, "GetFloatv"); @@ -3541,22 +3525,6 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) params[0] = ctx->Depth.BoundsMin; params[1] = ctx->Depth.BoundsMax; break; - case GL_FRAGMENT_PROGRAM_CALLBACK_MESA: - CHECK_EXT1(MESA_program_debug, "GetFloatv"); - params[0] = BOOLEAN_TO_FLOAT(ctx->FragmentProgram.CallbackEnabled); - break; - case GL_VERTEX_PROGRAM_CALLBACK_MESA: - CHECK_EXT1(MESA_program_debug, "GetFloatv"); - params[0] = BOOLEAN_TO_FLOAT(ctx->VertexProgram.CallbackEnabled); - break; - case GL_FRAGMENT_PROGRAM_POSITION_MESA: - CHECK_EXT1(MESA_program_debug, "GetFloatv"); - params[0] = (GLfloat)(ctx->FragmentProgram.CurrentPosition); - break; - case GL_VERTEX_PROGRAM_POSITION_MESA: - CHECK_EXT1(MESA_program_debug, "GetFloatv"); - params[0] = (GLfloat)(ctx->VertexProgram.CurrentPosition); - break; case GL_MAX_DRAW_BUFFERS_ARB: params[0] = (GLfloat)(ctx->Const.MaxDrawBuffers); break; @@ -4536,21 +4504,21 @@ _mesa_GetIntegerv( GLenum pname, GLint *params ) params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT)); break; case GL_TEXTURE_BINDING_1D: - params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name; + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name; break; case GL_TEXTURE_BINDING_2D: - params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name; + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name; break; case GL_TEXTURE_BINDING_3D: - params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name; + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name; break; case GL_TEXTURE_BINDING_1D_ARRAY_EXT: CHECK_EXT1(MESA_texture_array, "GetIntegerv"); - params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1DArray->Name; + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name; break; case GL_TEXTURE_BINDING_2D_ARRAY_EXT: CHECK_EXT1(MESA_texture_array, "GetIntegerv"); - params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2DArray->Name; + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name; break; case GL_TEXTURE_GEN_S: params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0)); @@ -4723,7 +4691,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params ) break; case GL_TEXTURE_BINDING_CUBE_MAP_ARB: CHECK_EXT1(ARB_texture_cube_map, "GetIntegerv"); - params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name; + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name; break; case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB: CHECK_EXT1(ARB_texture_cube_map, "GetIntegerv"); @@ -5210,7 +5178,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params ) break; case GL_TEXTURE_BINDING_RECTANGLE_NV: CHECK_EXT1(NV_texture_rectangle, "GetIntegerv"); - params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name; + params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name; break; case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV: CHECK_EXT1(NV_texture_rectangle, "GetIntegerv"); @@ -5367,22 +5335,6 @@ _mesa_GetIntegerv( GLenum pname, GLint *params ) params[0] = IROUND(ctx->Depth.BoundsMin); params[1] = IROUND(ctx->Depth.BoundsMax); break; - case GL_FRAGMENT_PROGRAM_CALLBACK_MESA: - CHECK_EXT1(MESA_program_debug, "GetIntegerv"); - params[0] = BOOLEAN_TO_INT(ctx->FragmentProgram.CallbackEnabled); - break; - case GL_VERTEX_PROGRAM_CALLBACK_MESA: - CHECK_EXT1(MESA_program_debug, "GetIntegerv"); - params[0] = BOOLEAN_TO_INT(ctx->VertexProgram.CallbackEnabled); - break; - case GL_FRAGMENT_PROGRAM_POSITION_MESA: - CHECK_EXT1(MESA_program_debug, "GetIntegerv"); - params[0] = ctx->FragmentProgram.CurrentPosition; - break; - case GL_VERTEX_PROGRAM_POSITION_MESA: - CHECK_EXT1(MESA_program_debug, "GetIntegerv"); - params[0] = ctx->VertexProgram.CurrentPosition; - break; case GL_MAX_DRAW_BUFFERS_ARB: params[0] = ctx->Const.MaxDrawBuffers; break; diff --git a/src/mesa/main/get_gen.py b/src/mesa/main/get_gen.py index 3b2496c663..fa695c48f1 100644 --- a/src/mesa/main/get_gen.py +++ b/src/mesa/main/get_gen.py @@ -432,15 +432,15 @@ StateVars = [ ( "GL_TEXTURE_1D_ARRAY_EXT", GLboolean, ["_mesa_IsEnabled(GL_TEXTURE_1D_ARRAY_EXT)"], "", ["MESA_texture_array"] ), ( "GL_TEXTURE_2D_ARRAY_EXT", GLboolean, ["_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT)"], "", ["MESA_texture_array"] ), ( "GL_TEXTURE_BINDING_1D", GLint, - ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name"], "", None ), + ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name"], "", None ), ( "GL_TEXTURE_BINDING_2D", GLint, - ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name"], "", None ), + ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name"], "", None ), ( "GL_TEXTURE_BINDING_3D", GLint, - ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name"], "", None ), + ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name"], "", None ), ( "GL_TEXTURE_BINDING_1D_ARRAY_EXT", GLint, - ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1DArray->Name"], "", ["MESA_texture_array"] ), + ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name"], "", ["MESA_texture_array"] ), ( "GL_TEXTURE_BINDING_2D_ARRAY_EXT", GLint, - ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2DArray->Name"], "", ["MESA_texture_array"] ), + ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name"], "", ["MESA_texture_array"] ), ( "GL_TEXTURE_GEN_S", GLboolean, ["((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0)"], "", None ), ( "GL_TEXTURE_GEN_T", GLboolean, @@ -515,7 +515,7 @@ StateVars = [ ( "GL_TEXTURE_CUBE_MAP_ARB", GLboolean, ["_mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB)"], "", ["ARB_texture_cube_map"] ), ( "GL_TEXTURE_BINDING_CUBE_MAP_ARB", GLint, - ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name"], + ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name"], "", ["ARB_texture_cube_map"] ), ( "GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB", GLint, ["(1 << (ctx->Const.MaxCubeTextureLevels - 1))"], @@ -795,7 +795,7 @@ StateVars = [ ( "GL_TEXTURE_RECTANGLE_NV", GLboolean, ["_mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV)"], "", ["NV_texture_rectangle"] ), ( "GL_TEXTURE_BINDING_RECTANGLE_NV", GLint, - ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name"], + ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name"], "", ["NV_texture_rectangle"] ), ( "GL_MAX_RECTANGLE_TEXTURE_SIZE_NV", GLint, ["ctx->Const.MaxTextureRectSize"], "", ["NV_texture_rectangle"] ), @@ -902,16 +902,6 @@ StateVars = [ ["ctx->Depth.BoundsMin", "ctx->Depth.BoundsMax"], "", ["EXT_depth_bounds_test"] ), - # GL_MESA_program_debug - ( "GL_FRAGMENT_PROGRAM_CALLBACK_MESA", GLboolean, - ["ctx->FragmentProgram.CallbackEnabled"], "", ["MESA_program_debug"] ), - ( "GL_VERTEX_PROGRAM_CALLBACK_MESA", GLboolean, - ["ctx->VertexProgram.CallbackEnabled"], "", ["MESA_program_debug"] ), - ( "GL_FRAGMENT_PROGRAM_POSITION_MESA", GLint, - ["ctx->FragmentProgram.CurrentPosition"], "", ["MESA_program_debug"] ), - ( "GL_VERTEX_PROGRAM_POSITION_MESA", GLint, - ["ctx->VertexProgram.CurrentPosition"], "", ["MESA_program_debug"] ), - # GL_ARB_draw_buffers ( "GL_MAX_DRAW_BUFFERS_ARB", GLint, ["ctx->Const.MaxDrawBuffers"], "", None ), diff --git a/src/mesa/main/getstring.c b/src/mesa/main/getstring.c index a9e22d340a..41fd786d7d 100644 --- a/src/mesa/main/getstring.c +++ b/src/mesa/main/getstring.c @@ -93,7 +93,7 @@ compute_version(const GLcontext *ctx) (ctx->Extensions.EXT_stencil_two_side || ctx->Extensions.ATI_separate_stencil)); const GLboolean ver_2_1 = (ver_2_0 && - /*ctx->Extensions.ARB_shading_language_120 &&*/ + ctx->Extensions.ARB_shading_language_120 && ctx->Extensions.EXT_pixel_buffer_object && ctx->Extensions.EXT_texture_sRGB); if (ver_2_1) @@ -242,36 +242,6 @@ _mesa_GetPointerv( GLenum pname, GLvoid **params ) case GL_SELECTION_BUFFER_POINTER: *params = ctx->Select.Buffer; break; -#if FEATURE_MESA_program_debug - case GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA: - if (!ctx->Extensions.MESA_program_debug) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv"); - return; - } - *params = *(GLvoid **) &ctx->FragmentProgram.Callback; - break; - case GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA: - if (!ctx->Extensions.MESA_program_debug) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv"); - return; - } - *params = ctx->FragmentProgram.CallbackData; - break; - case GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA: - if (!ctx->Extensions.MESA_program_debug) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv"); - return; - } - *params = *(GLvoid **) &ctx->VertexProgram.Callback; - break; - case GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA: - if (!ctx->Extensions.MESA_program_debug) { - _mesa_error(ctx, GL_INVALID_ENUM, "glGetPointerv"); - return; - } - *params = ctx->VertexProgram.CallbackData; - break; -#endif default: _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" ); return; diff --git a/src/mesa/main/glheader.h b/src/mesa/main/glheader.h index 5657976711..ad095321e3 100644 --- a/src/mesa/main/glheader.h +++ b/src/mesa/main/glheader.h @@ -1,28 +1,8 @@ -/** - * \file glheader.h - * Top-most include file. - * - * This is the top-most include file of the Mesa sources. - * It includes gl.h and all system headers which are needed. - * Other Mesa source files should \e not directly include any system - * headers. This allows system-dependent hacks/workarounds to be - * collected in one place. - * - * \note Actually, a lot of system-dependent stuff is now in imports.[ch]. - * - * If you touch this file, everything gets recompiled! - * - * This file should be included before any other header in the .c files. - * - * Put compiler/OS/assembly pragmas and macros here to avoid - * cluttering other source files. - */ - /* * Mesa 3-D graphics library - * Version: 6.5 + * Version: 7.5 * - * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. + * 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"), @@ -43,99 +23,22 @@ */ -#ifndef GLHEADER_H -#define GLHEADER_H - -#include <assert.h> -#include <ctype.h> -#if defined(__alpha__) && defined(CCPML) -#include <cpml.h> /* use Compaq's Fast Math Library on Alpha */ -#else -#include <math.h> -#endif -#include <limits.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#if defined(__linux__) && defined(__i386__) -#include <fpu_control.h> -#endif -#include <float.h> -#include <stdarg.h> - - -/* Get standard integer types */ -#if defined(_MSC_VER) - - typedef __int8 int8_t; - typedef unsigned __int8 uint8_t; - typedef __int16 int16_t; - typedef unsigned __int16 uint16_t; -# ifndef __eglplatform_h_ - typedef __int32 int32_t; -# endif - typedef unsigned __int32 uint32_t; - typedef __int64 int64_t; - typedef unsigned __int64 uint64_t; - -# if defined(_WIN64) - typedef __int64 intptr_t; - typedef unsigned __int64 uintptr_t; -# else - typedef __int32 intptr_t; - typedef unsigned __int32 uintptr_t; -# endif - -# define INT64_C(__val) __val##i64 -# define UINT64_C(__val) __val##ui64 - -#else -# include <stdint.h> -#endif - +/** + * \file glheader.h + * Wrapper for GL/gl.h and GL/glext.h + */ -/* Sun compilers define __i386 instead of the gcc-style __i386__ */ -#ifdef __SUNPRO_C -# if !defined(__i386__) && defined(__i386) -# define __i386__ -# elif !defined(__amd64__) && defined(__amd64) -# define __amd64__ -# elif !defined(__sparc__) && defined(__sparc) -# define __sparc__ -# endif -# if !defined(__volatile) -# define __volatile volatile -# endif -#endif -#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) && !defined(BUILD_FOR_SNAP) -# define __WIN32__ -# define finite _finite -#endif +#ifndef GLHEADER_H +#define GLHEADER_H -#if defined(__WATCOMC__) -# define finite _finite -# pragma disable_message(201) /* Disable unreachable code warnings */ -#endif #ifdef WGLAPI -# undef WGLAPI +#undef WGLAPI #endif + #if !defined(OPENSTEP) && (defined(__WIN32__) && !defined(__CYGWIN__)) && !defined(BUILD_FOR_SNAP) -# if !defined(__GNUC__) /* mingw environment */ -# pragma warning( disable : 4068 ) /* unknown pragma */ -# pragma warning( disable : 4710 ) /* function 'foo' not inlined */ -# pragma warning( disable : 4711 ) /* function 'foo' selected for automatic inline expansion */ -# pragma warning( disable : 4127 ) /* conditional expression is constant */ -# if defined(MESA_MINWARN) -# pragma warning( disable : 4244 ) /* '=' : conversion from 'const double ' to 'float ', possible loss of data */ -# pragma warning( disable : 4018 ) /* '<' : signed/unsigned mismatch */ -# pragma warning( disable : 4305 ) /* '=' : truncation from 'const double ' to 'float ' */ -# pragma warning( disable : 4550 ) /* 'function' undefined; assuming extern returning int */ -# pragma warning( disable : 4761 ) /* integral size mismatch in argument; conversion supplied */ -# endif -# endif # if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ # define WGLAPI __declspec(dllexport) # elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ @@ -146,31 +49,10 @@ #endif /* WIN32 / CYGWIN bracket */ -/* - * Either define MESA_BIG_ENDIAN or MESA_LITTLE_ENDIAN. - * Do not use them unless absolutely necessary! - * Try to use a runtime test instead. - * For now, only used by some DRI hardware drivers for color/texel packing. - */ -#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && BYTE_ORDER == BIG_ENDIAN -#if defined(__linux__) -#include <byteswap.h> -#define CPU_TO_LE32( x ) bswap_32( x ) -#else /*__linux__*/ -#include <sys/endian.h> -#define CPU_TO_LE32( x ) bswap32( x ) -#endif /*__linux__*/ -#define MESA_BIG_ENDIAN 1 -#else -#define CPU_TO_LE32( x ) ( x ) -#define MESA_LITTLE_ENDIAN 1 -#endif -#define LE32_TO_CPU( x ) CPU_TO_LE32( x ) - - #define GL_GLEXT_PROTOTYPES #include "GL/gl.h" #include "GL/glext.h" +#include "GL/internal/glcore.h" #ifndef GL_FIXED @@ -192,129 +74,10 @@ #endif -#if !defined(CAPI) && defined(WIN32) && !defined(BUILD_FOR_SNAP) -#define CAPI _cdecl -#endif - - -/* This is a macro on IRIX */ -#ifdef _P -#undef _P -#endif - - -/* Turn off macro checking systems used by other libraries */ -#ifdef CHECK -#undef CHECK -#endif - - -/* Create a macro so that asm functions can be linked into compilers other - * than GNU C - */ -#ifndef _ASMAPI -#if defined(WIN32) && !defined(BUILD_FOR_SNAP)/* was: !defined( __GNUC__ ) && !defined( VMS ) && !defined( __INTEL_COMPILER )*/ -#define _ASMAPI __cdecl -#else -#define _ASMAPI -#endif -#ifdef PTR_DECL_IN_FRONT -#define _ASMAPIP * _ASMAPI -#else -#define _ASMAPIP _ASMAPI * -#endif -#endif - -#ifdef USE_X86_ASM -#define _NORMAPI _ASMAPI -#define _NORMAPIP _ASMAPIP -#else -#define _NORMAPI -#define _NORMAPIP * -#endif - - -/* Function inlining */ -#if defined(__GNUC__) -# define INLINE __inline__ -#elif defined(__MSC__) -# define INLINE __inline -#elif defined(_MSC_VER) -# define INLINE __inline -#elif defined(__ICL) -# define INLINE __inline -#elif defined(__INTEL_COMPILER) -# define INLINE inline -#elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100) -# define INLINE __inline -#elif defined(__SUNPRO_C) && defined(__C99FEATURES__) -# define INLINE inline -# define __inline inline -# define __inline__ inline -#elif (__STDC_VERSION__ >= 199901L) /* C99 */ -# define INLINE inline -#else -# define INLINE -#endif - - -/* If we build the library with gcc's -fvisibility=hidden flag, we'll - * use the PUBLIC macro to mark functions that are to be exported. - * - * We also need to define a USED attribute, so the optimizer doesn't - * inline a static function that we later use in an alias. - ajax - */ -#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303 -# define PUBLIC __attribute__((visibility("default"))) -# define USED __attribute__((used)) -#else -# define PUBLIC -# define USED -#endif - - -/* Some compilers don't like some of Mesa's const usage */ -#ifdef NO_CONST -# define CONST -#else -# define CONST const -#endif - - -#if !defined(_WIN32_WCE) -#if defined(BUILD_FOR_SNAP) && defined(CHECKED) -# define ASSERT(X) _CHECK(X) -#elif defined(DEBUG) -# define ASSERT(X) assert(X) -#else -# define ASSERT(X) -#endif -#endif - - -#if (!defined(__GNUC__) || __GNUC__ < 3) && (!defined(__IBMC__) || __IBMC__ < 900) -# define __builtin_expect(x, y) x -#endif - -/* The __FUNCTION__ gcc variable is generally only used for debugging. - * If we're not using gcc, define __FUNCTION__ as a cpp symbol here. - * Don't define it if using a newer Windows compiler. +/** + * Special, internal token */ -#ifndef __FUNCTION__ -# if defined(__VMS) -# define __FUNCTION__ "VMS$NL:" -# elif ((!defined __GNUC__) || (__GNUC__ < 2)) && (!defined __xlC__) && \ - (!defined(_MSC_VER) || _MSC_VER < 1300) -# if (__STDC_VERSION__ >= 199901L) /* C99 */ || \ - (defined(__SUNPRO_C) && defined(__C99FEATURES__)) -# define __FUNCTION__ __func__ -# else -# define __FUNCTION__ "<unknown>" -# endif -# endif -#endif - +#define GL_SHADER_PROGRAM_MESA 0x9999 -#include "config.h" #endif /* GLHEADER_H */ diff --git a/src/mesa/main/hash.c b/src/mesa/main/hash.c index ffb2c4d946..976f9d999b 100644 --- a/src/mesa/main/hash.c +++ b/src/mesa/main/hash.c @@ -300,7 +300,7 @@ _mesa_HashWalk(const struct _mesa_HashTable *table, GLuint pos; ASSERT(table); ASSERT(callback); - _glthread_UNLOCK_MUTEX(table2->Mutex); + _glthread_LOCK_MUTEX(table2->Mutex); for (pos = 0; pos < TABLE_SIZE; pos++) { struct HashEntry *entry; for (entry = table->Table[pos]; entry; entry = entry->Next) { diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c index 4d86c54777..fa3149d56d 100644 --- a/src/mesa/main/image.c +++ b/src/mesa/main/image.c @@ -293,6 +293,9 @@ _mesa_components_in_format( GLenum format ) return 2; case GL_DEPTH_STENCIL_EXT: return 2; + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + return 2; default: return -1; } @@ -503,6 +506,20 @@ _mesa_is_legal_format_and_type( GLcontext *ctx, GLenum format, GLenum type ) return GL_TRUE; else return GL_FALSE; + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + switch (type) { + case GL_BYTE: + case GL_UNSIGNED_BYTE: + case GL_SHORT: + case GL_UNSIGNED_SHORT: + case GL_INT: + case GL_UNSIGNED_INT: + case GL_FLOAT: + return GL_TRUE; + default: + return GL_FALSE; + } default: ; /* fall-through */ } @@ -1674,8 +1691,19 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], GLfloat luminance[MAX_WIDTH]; const GLint comps = _mesa_components_in_format(dstFormat); GLuint i; - - if (dstType != GL_FLOAT || ctx->Color.ClampReadColor == GL_TRUE) { + /* clamping only applies to colors, not the dudv values, but still need + it if converting to unsigned values (which doesn't make much sense) */ + if (dstFormat == GL_DUDV_ATI || dstFormat == GL_DU8DV8_ATI) { + switch (dstType) { + case GL_UNSIGNED_BYTE: + case GL_UNSIGNED_SHORT: + case GL_UNSIGNED_INT: + transferOps |= IMAGE_CLAMP_BIT; + break; + /* actually might want clamp to [-1,1] otherwise but shouldn't matter? */ + } + } + else if (dstType != GL_FLOAT || ctx->Color.ClampReadColor == GL_TRUE) { /* need to clamp to [0, 1] */ transferOps |= IMAGE_CLAMP_BIT; } @@ -1774,6 +1802,13 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], dst[i*4+3] = FLOAT_TO_UBYTE(rgba[i][RCOMP]); } break; + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + for (i=0;i<n;i++) { + dst[i*2+0] = FLOAT_TO_UBYTE(rgba[i][RCOMP]); + dst[i*2+1] = FLOAT_TO_UBYTE(rgba[i][GCOMP]); + } + break; default: _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n"); } @@ -1847,6 +1882,13 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], dst[i*4+3] = FLOAT_TO_BYTE(rgba[i][RCOMP]); } break; + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + for (i=0;i<n;i++) { + dst[i*2+0] = FLOAT_TO_BYTE(rgba[i][RCOMP]); + dst[i*2+1] = FLOAT_TO_BYTE(rgba[i][GCOMP]); + } + break; default: _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n"); } @@ -1920,6 +1962,13 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], CLAMPED_FLOAT_TO_USHORT(dst[i*4+3], rgba[i][RCOMP]); } break; + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + for (i=0;i<n;i++) { + dst[i*2+0] = FLOAT_TO_USHORT(rgba[i][RCOMP]); + dst[i*2+1] = FLOAT_TO_USHORT(rgba[i][GCOMP]); + } + break; default: _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n"); } @@ -1993,6 +2042,13 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], dst[i*4+3] = FLOAT_TO_SHORT(rgba[i][RCOMP]); } break; + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + for (i=0;i<n;i++) { + dst[i*2+0] = FLOAT_TO_SHORT(rgba[i][RCOMP]); + dst[i*2+1] = FLOAT_TO_SHORT(rgba[i][GCOMP]); + } + break; default: _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n"); } @@ -2066,6 +2122,13 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], dst[i*4+3] = FLOAT_TO_UINT(rgba[i][RCOMP]); } break; + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + for (i=0;i<n;i++) { + dst[i*2+0] = FLOAT_TO_UINT(rgba[i][RCOMP]); + dst[i*2+1] = FLOAT_TO_UINT(rgba[i][GCOMP]); + } + break; default: _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n"); } @@ -2139,6 +2202,13 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], dst[i*4+3] = FLOAT_TO_INT(rgba[i][RCOMP]); } break; + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + for (i=0;i<n;i++) { + dst[i*2+0] = FLOAT_TO_INT(rgba[i][RCOMP]); + dst[i*2+1] = FLOAT_TO_INT(rgba[i][GCOMP]); + } + break; default: _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n"); } @@ -2212,6 +2282,13 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], dst[i*4+3] = rgba[i][RCOMP]; } break; + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + for (i=0;i<n;i++) { + dst[i*2+0] = rgba[i][RCOMP]; + dst[i*2+1] = rgba[i][GCOMP]; + } + break; default: _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n"); } @@ -2285,6 +2362,13 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], dst[i*4+3] = _mesa_float_to_half(rgba[i][RCOMP]); } break; + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + for (i=0;i<n;i++) { + dst[i*2+0] = _mesa_float_to_half(rgba[i][RCOMP]); + dst[i*2+1] = _mesa_float_to_half(rgba[i][GCOMP]); + } + break; default: _mesa_problem(ctx, "bad format in _mesa_pack_rgba_span\n"); } @@ -2294,9 +2378,9 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], if (dstFormat == GL_RGB) { GLubyte *dst = (GLubyte *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][RCOMP] * 7.0F)) << 5) - | (((GLint) (rgba[i][GCOMP] * 7.0F)) << 2) - | (((GLint) (rgba[i][BCOMP] * 3.0F)) ); + dst[i] = (IROUND(rgba[i][RCOMP] * 7.0F) << 5) + | (IROUND(rgba[i][GCOMP] * 7.0F) << 2) + | (IROUND(rgba[i][BCOMP] * 3.0F) ); } } break; @@ -2304,9 +2388,9 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], if (dstFormat == GL_RGB) { GLubyte *dst = (GLubyte *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][RCOMP] * 7.0F)) ) - | (((GLint) (rgba[i][GCOMP] * 7.0F)) << 3) - | (((GLint) (rgba[i][BCOMP] * 3.0F)) << 6); + dst[i] = (IROUND(rgba[i][RCOMP] * 7.0F) ) + | (IROUND(rgba[i][GCOMP] * 7.0F) << 3) + | (IROUND(rgba[i][BCOMP] * 3.0F) << 6); } } break; @@ -2314,9 +2398,9 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], if (dstFormat == GL_RGB) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][RCOMP] * 31.0F)) << 11) - | (((GLint) (rgba[i][GCOMP] * 63.0F)) << 5) - | (((GLint) (rgba[i][BCOMP] * 31.0F)) ); + dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F) << 11) + | (IROUND(rgba[i][GCOMP] * 63.0F) << 5) + | (IROUND(rgba[i][BCOMP] * 31.0F) ); } } break; @@ -2324,9 +2408,9 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], if (dstFormat == GL_RGB) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][RCOMP] * 31.0F)) ) - | (((GLint) (rgba[i][GCOMP] * 63.0F)) << 5) - | (((GLint) (rgba[i][BCOMP] * 31.0F)) << 11); + dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F) ) + | (IROUND(rgba[i][GCOMP] * 63.0F) << 5) + | (IROUND(rgba[i][BCOMP] * 31.0F) << 11); } } break; @@ -2334,28 +2418,28 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], if (dstFormat == GL_RGBA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][RCOMP] * 15.0F)) << 12) - | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 8) - | (((GLint) (rgba[i][BCOMP] * 15.0F)) << 4) - | (((GLint) (rgba[i][ACOMP] * 15.0F)) ); + dst[i] = (IROUND(rgba[i][RCOMP] * 15.0F) << 12) + | (IROUND(rgba[i][GCOMP] * 15.0F) << 8) + | (IROUND(rgba[i][BCOMP] * 15.0F) << 4) + | (IROUND(rgba[i][ACOMP] * 15.0F) ); } } else if (dstFormat == GL_BGRA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][BCOMP] * 15.0F)) << 12) - | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 8) - | (((GLint) (rgba[i][RCOMP] * 15.0F)) << 4) - | (((GLint) (rgba[i][ACOMP] * 15.0F)) ); + dst[i] = (IROUND(rgba[i][BCOMP] * 15.0F) << 12) + | (IROUND(rgba[i][GCOMP] * 15.0F) << 8) + | (IROUND(rgba[i][RCOMP] * 15.0F) << 4) + | (IROUND(rgba[i][ACOMP] * 15.0F) ); } } else if (dstFormat == GL_ABGR_EXT) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][ACOMP] * 15.0F)) << 12) - | (((GLint) (rgba[i][BCOMP] * 15.0F)) << 8) - | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 4) - | (((GLint) (rgba[i][RCOMP] * 15.0F)) ); + dst[i] = (IROUND(rgba[i][ACOMP] * 15.0F) << 12) + | (IROUND(rgba[i][BCOMP] * 15.0F) << 8) + | (IROUND(rgba[i][GCOMP] * 15.0F) << 4) + | (IROUND(rgba[i][RCOMP] * 15.0F) ); } } break; @@ -2363,28 +2447,28 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], if (dstFormat == GL_RGBA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][RCOMP] * 15.0F)) ) - | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 4) - | (((GLint) (rgba[i][BCOMP] * 15.0F)) << 8) - | (((GLint) (rgba[i][ACOMP] * 15.0F)) << 12); + dst[i] = (IROUND(rgba[i][RCOMP] * 15.0F) ) + | (IROUND(rgba[i][GCOMP] * 15.0F) << 4) + | (IROUND(rgba[i][BCOMP] * 15.0F) << 8) + | (IROUND(rgba[i][ACOMP] * 15.0F) << 12); } } else if (dstFormat == GL_BGRA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][BCOMP] * 15.0F)) ) - | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 4) - | (((GLint) (rgba[i][RCOMP] * 15.0F)) << 8) - | (((GLint) (rgba[i][ACOMP] * 15.0F)) << 12); + dst[i] = (IROUND(rgba[i][BCOMP] * 15.0F) ) + | (IROUND(rgba[i][GCOMP] * 15.0F) << 4) + | (IROUND(rgba[i][RCOMP] * 15.0F) << 8) + | (IROUND(rgba[i][ACOMP] * 15.0F) << 12); } } else if (dstFormat == GL_ABGR_EXT) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][ACOMP] * 15.0F)) ) - | (((GLint) (rgba[i][BCOMP] * 15.0F)) << 4) - | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 8) - | (((GLint) (rgba[i][RCOMP] * 15.0F)) << 12); + dst[i] = (IROUND(rgba[i][ACOMP] * 15.0F) ) + | (IROUND(rgba[i][BCOMP] * 15.0F) << 4) + | (IROUND(rgba[i][GCOMP] * 15.0F) << 8) + | (IROUND(rgba[i][RCOMP] * 15.0F) << 12); } } break; @@ -2392,28 +2476,28 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], if (dstFormat == GL_RGBA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][RCOMP] * 31.0F)) << 11) - | (((GLint) (rgba[i][GCOMP] * 31.0F)) << 6) - | (((GLint) (rgba[i][BCOMP] * 31.0F)) << 1) - | (((GLint) (rgba[i][ACOMP] * 1.0F)) ); + dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F) << 11) + | (IROUND(rgba[i][GCOMP] * 31.0F) << 6) + | (IROUND(rgba[i][BCOMP] * 31.0F) << 1) + | (IROUND(rgba[i][ACOMP] * 1.0F) ); } } else if (dstFormat == GL_BGRA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][BCOMP] * 31.0F)) << 11) - | (((GLint) (rgba[i][GCOMP] * 31.0F)) << 6) - | (((GLint) (rgba[i][RCOMP] * 31.0F)) << 1) - | (((GLint) (rgba[i][ACOMP] * 1.0F)) ); + dst[i] = (IROUND(rgba[i][BCOMP] * 31.0F) << 11) + | (IROUND(rgba[i][GCOMP] * 31.0F) << 6) + | (IROUND(rgba[i][RCOMP] * 31.0F) << 1) + | (IROUND(rgba[i][ACOMP] * 1.0F) ); } } else if (dstFormat == GL_ABGR_EXT) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][ACOMP] * 31.0F)) << 11) - | (((GLint) (rgba[i][BCOMP] * 31.0F)) << 6) - | (((GLint) (rgba[i][GCOMP] * 31.0F)) << 1) - | (((GLint) (rgba[i][RCOMP] * 1.0F)) ); + dst[i] = (IROUND(rgba[i][ACOMP] * 31.0F) << 11) + | (IROUND(rgba[i][BCOMP] * 31.0F) << 6) + | (IROUND(rgba[i][GCOMP] * 31.0F) << 1) + | (IROUND(rgba[i][RCOMP] * 1.0F) ); } } break; @@ -2421,28 +2505,28 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], if (dstFormat == GL_RGBA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][RCOMP] * 31.0F)) ) - | (((GLint) (rgba[i][GCOMP] * 31.0F)) << 5) - | (((GLint) (rgba[i][BCOMP] * 31.0F)) << 10) - | (((GLint) (rgba[i][ACOMP] * 1.0F)) << 15); + dst[i] = (IROUND(rgba[i][RCOMP] * 31.0F) ) + | (IROUND(rgba[i][GCOMP] * 31.0F) << 5) + | (IROUND(rgba[i][BCOMP] * 31.0F) << 10) + | (IROUND(rgba[i][ACOMP] * 1.0F) << 15); } } else if (dstFormat == GL_BGRA) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][BCOMP] * 31.0F)) ) - | (((GLint) (rgba[i][GCOMP] * 31.0F)) << 5) - | (((GLint) (rgba[i][RCOMP] * 31.0F)) << 10) - | (((GLint) (rgba[i][ACOMP] * 1.0F)) << 15); + dst[i] = (IROUND(rgba[i][BCOMP] * 31.0F) ) + | (IROUND(rgba[i][GCOMP] * 31.0F) << 5) + | (IROUND(rgba[i][RCOMP] * 31.0F) << 10) + | (IROUND(rgba[i][ACOMP] * 1.0F) << 15); } } else if (dstFormat == GL_ABGR_EXT) { GLushort *dst = (GLushort *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLint) (rgba[i][ACOMP] * 31.0F)) ) - | (((GLint) (rgba[i][BCOMP] * 31.0F)) << 5) - | (((GLint) (rgba[i][GCOMP] * 31.0F)) << 10) - | (((GLint) (rgba[i][RCOMP] * 1.0F)) << 15); + dst[i] = (IROUND(rgba[i][ACOMP] * 31.0F) ) + | (IROUND(rgba[i][BCOMP] * 31.0F) << 5) + | (IROUND(rgba[i][GCOMP] * 31.0F) << 10) + | (IROUND(rgba[i][RCOMP] * 1.0F) << 15); } } break; @@ -2450,28 +2534,28 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], if (dstFormat == GL_RGBA) { GLuint *dst = (GLuint *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLuint) (rgba[i][RCOMP] * 255.0F)) << 24) - | (((GLuint) (rgba[i][GCOMP] * 255.0F)) << 16) - | (((GLuint) (rgba[i][BCOMP] * 255.0F)) << 8) - | (((GLuint) (rgba[i][ACOMP] * 255.0F)) ); + dst[i] = (IROUND(rgba[i][RCOMP] * 255.F) << 24) + | (IROUND(rgba[i][GCOMP] * 255.F) << 16) + | (IROUND(rgba[i][BCOMP] * 255.F) << 8) + | (IROUND(rgba[i][ACOMP] * 255.F) ); } } else if (dstFormat == GL_BGRA) { GLuint *dst = (GLuint *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLuint) (rgba[i][BCOMP] * 255.0F)) << 24) - | (((GLuint) (rgba[i][GCOMP] * 255.0F)) << 16) - | (((GLuint) (rgba[i][RCOMP] * 255.0F)) << 8) - | (((GLuint) (rgba[i][ACOMP] * 255.0F)) ); + dst[i] = (IROUND(rgba[i][BCOMP] * 255.F) << 24) + | (IROUND(rgba[i][GCOMP] * 255.F) << 16) + | (IROUND(rgba[i][RCOMP] * 255.F) << 8) + | (IROUND(rgba[i][ACOMP] * 255.F) ); } } else if (dstFormat == GL_ABGR_EXT) { GLuint *dst = (GLuint *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLuint) (rgba[i][ACOMP] * 255.0F)) << 24) - | (((GLuint) (rgba[i][BCOMP] * 255.0F)) << 16) - | (((GLuint) (rgba[i][GCOMP] * 255.0F)) << 8) - | (((GLuint) (rgba[i][RCOMP] * 255.0F)) ); + dst[i] = (IROUND(rgba[i][ACOMP] * 255.F) << 24) + | (IROUND(rgba[i][BCOMP] * 255.F) << 16) + | (IROUND(rgba[i][GCOMP] * 255.F) << 8) + | (IROUND(rgba[i][RCOMP] * 255.F) ); } } break; @@ -2479,28 +2563,28 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], if (dstFormat == GL_RGBA) { GLuint *dst = (GLuint *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLuint) (rgba[i][RCOMP] * 255.0F)) ) - | (((GLuint) (rgba[i][GCOMP] * 255.0F)) << 8) - | (((GLuint) (rgba[i][BCOMP] * 255.0F)) << 16) - | (((GLuint) (rgba[i][ACOMP] * 255.0F)) << 24); + dst[i] = (IROUND(rgba[i][RCOMP] * 255.0F) ) + | (IROUND(rgba[i][GCOMP] * 255.0F) << 8) + | (IROUND(rgba[i][BCOMP] * 255.0F) << 16) + | (IROUND(rgba[i][ACOMP] * 255.0F) << 24); } } else if (dstFormat == GL_BGRA) { GLuint *dst = (GLuint *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLuint) (rgba[i][BCOMP] * 255.0F)) ) - | (((GLuint) (rgba[i][GCOMP] * 255.0F)) << 8) - | (((GLuint) (rgba[i][RCOMP] * 255.0F)) << 16) - | (((GLuint) (rgba[i][ACOMP] * 255.0F)) << 24); + dst[i] = (IROUND(rgba[i][BCOMP] * 255.0F) ) + | (IROUND(rgba[i][GCOMP] * 255.0F) << 8) + | (IROUND(rgba[i][RCOMP] * 255.0F) << 16) + | (IROUND(rgba[i][ACOMP] * 255.0F) << 24); } } else if (dstFormat == GL_ABGR_EXT) { GLuint *dst = (GLuint *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLuint) (rgba[i][ACOMP] * 255.0F)) ) - | (((GLuint) (rgba[i][BCOMP] * 255.0F)) << 8) - | (((GLuint) (rgba[i][GCOMP] * 255.0F)) << 16) - | (((GLuint) (rgba[i][RCOMP] * 255.0F)) << 24); + dst[i] = (IROUND(rgba[i][ACOMP] * 255.0F) ) + | (IROUND(rgba[i][BCOMP] * 255.0F) << 8) + | (IROUND(rgba[i][GCOMP] * 255.0F) << 16) + | (IROUND(rgba[i][RCOMP] * 255.0F) << 24); } } break; @@ -2508,28 +2592,28 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], if (dstFormat == GL_RGBA) { GLuint *dst = (GLuint *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLuint) (rgba[i][RCOMP] * 1023.0F)) << 22) - | (((GLuint) (rgba[i][GCOMP] * 1023.0F)) << 12) - | (((GLuint) (rgba[i][BCOMP] * 1023.0F)) << 2) - | (((GLuint) (rgba[i][ACOMP] * 3.0F)) ); + dst[i] = (IROUND(rgba[i][RCOMP] * 1023.0F) << 22) + | (IROUND(rgba[i][GCOMP] * 1023.0F) << 12) + | (IROUND(rgba[i][BCOMP] * 1023.0F) << 2) + | (IROUND(rgba[i][ACOMP] * 3.0F) ); } } else if (dstFormat == GL_BGRA) { GLuint *dst = (GLuint *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLuint) (rgba[i][BCOMP] * 1023.0F)) << 22) - | (((GLuint) (rgba[i][GCOMP] * 1023.0F)) << 12) - | (((GLuint) (rgba[i][RCOMP] * 1023.0F)) << 2) - | (((GLuint) (rgba[i][ACOMP] * 3.0F)) ); + dst[i] = (IROUND(rgba[i][BCOMP] * 1023.0F) << 22) + | (IROUND(rgba[i][GCOMP] * 1023.0F) << 12) + | (IROUND(rgba[i][RCOMP] * 1023.0F) << 2) + | (IROUND(rgba[i][ACOMP] * 3.0F) ); } } else if (dstFormat == GL_ABGR_EXT) { GLuint *dst = (GLuint *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLuint) (rgba[i][ACOMP] * 1023.0F)) << 22) - | (((GLuint) (rgba[i][BCOMP] * 1023.0F)) << 12) - | (((GLuint) (rgba[i][GCOMP] * 1023.0F)) << 2) - | (((GLuint) (rgba[i][RCOMP] * 3.0F)) ); + dst[i] = (IROUND(rgba[i][ACOMP] * 1023.0F) << 22) + | (IROUND(rgba[i][BCOMP] * 1023.0F) << 12) + | (IROUND(rgba[i][GCOMP] * 1023.0F) << 2) + | (IROUND(rgba[i][RCOMP] * 3.0F) ); } } break; @@ -2537,28 +2621,28 @@ _mesa_pack_rgba_span_float(GLcontext *ctx, GLuint n, GLfloat rgba[][4], if (dstFormat == GL_RGBA) { GLuint *dst = (GLuint *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLuint) (rgba[i][RCOMP] * 1023.0F)) ) - | (((GLuint) (rgba[i][GCOMP] * 1023.0F)) << 10) - | (((GLuint) (rgba[i][BCOMP] * 1023.0F)) << 20) - | (((GLuint) (rgba[i][ACOMP] * 3.0F)) << 30); + dst[i] = (IROUND(rgba[i][RCOMP] * 1023.0F) ) + | (IROUND(rgba[i][GCOMP] * 1023.0F) << 10) + | (IROUND(rgba[i][BCOMP] * 1023.0F) << 20) + | (IROUND(rgba[i][ACOMP] * 3.0F) << 30); } } else if (dstFormat == GL_BGRA) { GLuint *dst = (GLuint *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLuint) (rgba[i][BCOMP] * 1023.0F)) ) - | (((GLuint) (rgba[i][GCOMP] * 1023.0F)) << 10) - | (((GLuint) (rgba[i][RCOMP] * 1023.0F)) << 20) - | (((GLuint) (rgba[i][ACOMP] * 3.0F)) << 30); + dst[i] = (IROUND(rgba[i][BCOMP] * 1023.0F) ) + | (IROUND(rgba[i][GCOMP] * 1023.0F) << 10) + | (IROUND(rgba[i][RCOMP] * 1023.0F) << 20) + | (IROUND(rgba[i][ACOMP] * 3.0F) << 30); } } else if (dstFormat == GL_ABGR_EXT) { GLuint *dst = (GLuint *) dstAddr; for (i=0;i<n;i++) { - dst[i] = (((GLuint) (rgba[i][ACOMP] * 1023.0F)) ) - | (((GLuint) (rgba[i][BCOMP] * 1023.0F)) << 10) - | (((GLuint) (rgba[i][GCOMP] * 1023.0F)) << 20) - | (((GLuint) (rgba[i][RCOMP] * 3.0F)) << 30); + dst[i] = (IROUND(rgba[i][ACOMP] * 1023.0F) ) + | (IROUND(rgba[i][BCOMP] * 1023.0F) << 10) + | (IROUND(rgba[i][GCOMP] * 1023.0F) << 20) + | (IROUND(rgba[i][RCOMP] * 3.0F) << 30); } } break; @@ -2834,7 +2918,8 @@ extract_float_rgba(GLuint n, GLfloat rgba[][4], srcFormat == GL_BGR || srcFormat == GL_RGBA || srcFormat == GL_BGRA || - srcFormat == GL_ABGR_EXT); + srcFormat == GL_ABGR_EXT || + srcFormat == GL_DUDV_ATI); ASSERT(srcType == GL_UNSIGNED_BYTE || srcType == GL_BYTE || @@ -2949,6 +3034,13 @@ extract_float_rgba(GLuint n, GLfloat rgba[][4], aComp = 0; stride = 4; break; + case GL_DUDV_ATI: + redIndex = 0; + greenIndex = 1; + blueIndex = -1; + alphaIndex = -1; + stride = 2; + break; default: _mesa_problem(NULL, "bad srcFormat in extract float data"); return; @@ -3877,6 +3969,62 @@ _mesa_unpack_color_span_float( GLcontext *ctx, } } +/** + * Similar to _mesa_unpack_color_span_float(), but for dudv data instead of rgba, + * directly return GLbyte data, no transfer ops apply. + */ +void +_mesa_unpack_dudv_span_byte( GLcontext *ctx, + GLuint n, GLenum dstFormat, GLbyte dest[], + GLenum srcFormat, GLenum srcType, + const GLvoid *source, + const struct gl_pixelstore_attrib *srcPacking, + GLbitfield transferOps ) +{ + ASSERT(dstFormat == GL_DUDV_ATI); + ASSERT(srcFormat == GL_DUDV_ATI); + + ASSERT(srcType == GL_UNSIGNED_BYTE || + srcType == GL_BYTE || + srcType == GL_UNSIGNED_SHORT || + srcType == GL_SHORT || + srcType == GL_UNSIGNED_INT || + srcType == GL_INT || + srcType == GL_HALF_FLOAT_ARB || + srcType == GL_FLOAT); + + /* general solution */ + { + GLint dstComponents; + GLfloat rgba[MAX_WIDTH][4]; + GLbyte *dst = dest; + GLuint i; + + dstComponents = _mesa_components_in_format( dstFormat ); + /* source & dest image formats should have been error checked by now */ + assert(dstComponents > 0); + + /* + * Extract image data and convert to RGBA floats + */ + assert(n <= MAX_WIDTH); + extract_float_rgba(n, rgba, srcFormat, srcType, source, + srcPacking->SwapBytes); + + + /* Now determine which color channels we need to produce. + * And determine the dest index (offset) within each color tuple. + */ + + /* Now pack results in the requested dstFormat */ + for (i = 0; i < n; i++) { + /* not sure - need clamp[-1,1] here? */ + dst[0] = FLOAT_TO_BYTE(rgba[i][RCOMP]); + dst[1] = FLOAT_TO_BYTE(rgba[i][GCOMP]); + dst += dstComponents; + } + } +} /* * Unpack a row of color index data from a client buffer according to diff --git a/src/mesa/main/image.h b/src/mesa/main/image.h index 0e0bbd96d8..b26c27e5a8 100644 --- a/src/mesa/main/image.h +++ b/src/mesa/main/image.h @@ -198,6 +198,13 @@ _mesa_unpack_color_span_float( GLcontext *ctx, const struct gl_pixelstore_attrib *srcPacking, GLbitfield transferOps ); +extern void +_mesa_unpack_dudv_span_byte( GLcontext *ctx, + GLuint n, GLenum dstFormat, GLbyte dest[], + GLenum srcFormat, GLenum srcType, + const GLvoid *source, + const struct gl_pixelstore_attrib *srcPacking, + GLbitfield transferOps ); extern void _mesa_unpack_index_span( const GLcontext *ctx, GLuint n, diff --git a/src/mesa/main/imports.c b/src/mesa/main/imports.c index cb04594c1f..20b8342064 100644 --- a/src/mesa/main/imports.c +++ b/src/mesa/main/imports.c @@ -1011,7 +1011,7 @@ _mesa_warning( GLcontext *ctx, const char *fmtString, ... ) * Prints the message to stderr via fprintf(). * * \param ctx GL context. - * \param s problem description string. + * \param fmtString problem description string. */ void _mesa_problem( const GLcontext *ctx, const char *fmtString, ... ) diff --git a/src/mesa/main/imports.h b/src/mesa/main/imports.h index a421eb5e75..7b61e22e93 100644 --- a/src/mesa/main/imports.h +++ b/src/mesa/main/imports.h @@ -1,6 +1,6 @@ /* * Mesa 3-D graphics library - * Version: 7.1 + * Version: 7.5 * * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. * @@ -36,10 +36,8 @@ #define IMPORTS_H -/* XXX some of the stuff in glheader.h should be moved into this file. - */ +#include "compiler.h" #include "glheader.h" -#include <GL/internal/glcore.h> #ifdef __cplusplus @@ -48,26 +46,6 @@ extern "C" { /**********************************************************************/ -/** \name General macros */ -/*@{*/ - -#ifndef NULL -#define NULL 0 -#endif - - -/** gcc -pedantic warns about long string literals, LONGSTRING silences that */ -#if !defined(__GNUC__) || (__GNUC__ < 2) || \ - ((__GNUC__ == 2) && (__GNUC_MINOR__ <= 7)) -# define LONGSTRING -#else -# define LONGSTRING __extension__ -#endif - -/*@}*/ - - -/**********************************************************************/ /** Memory macros */ /*@{*/ @@ -130,49 +108,11 @@ typedef union { GLfloat f; GLint i; } fi_type; #define MAX_GLUSHORT 0xffff #define MAX_GLUINT 0xffffffff -#ifndef M_PI -#define M_PI (3.1415926536) -#endif - -#ifndef M_E -#define M_E (2.7182818284590452354) -#endif - -#ifndef ONE_DIV_LN2 -#define ONE_DIV_LN2 (1.442695040888963456) -#endif - -#ifndef ONE_DIV_SQRT_LN2 -#define ONE_DIV_SQRT_LN2 (1.201122408786449815) -#endif - -#ifndef FLT_MAX_EXP -#define FLT_MAX_EXP 128 -#endif - /* Degrees to radians conversion: */ #define DEG2RAD (M_PI/180.0) /*** - *** USE_IEEE: Determine if we're using IEEE floating point - ***/ -#if defined(__i386__) || defined(__386__) || defined(__sparc__) || \ - defined(__s390x__) || defined(__powerpc__) || \ - defined(__x86_64__) || \ - defined(ia64) || defined(__ia64__) || \ - defined(__hppa__) || defined(hpux) || \ - defined(__mips) || defined(_MIPS_ARCH) || \ - defined(__arm__) || \ - defined(__sh__) || defined(__m32r__) || \ - (defined(__sun) && defined(_IEEE_754)) || \ - (defined(__alpha__) && (defined(__IEEE_FLOAT) || !defined(VMS))) -#define USE_IEEE -#define IEEE_ONE 0x3f800000 -#endif - - -/*** *** SQRTF: single-precision square root ***/ #if 0 /* _mesa_sqrtf() not accurate enough - temporarily disabled */ @@ -316,16 +256,9 @@ static INLINE int GET_FLOAT_BITS( float x ) /*** *** IROUND: return (as an integer) float rounded to nearest integer ***/ -#if defined(USE_SPARC_ASM) && defined(__GNUC__) && defined(__sparc__) -static INLINE int iround(float f) -{ - int r; - __asm__ ("fstoi %1, %0" : "=f" (r) : "f" (f)); - return r; -} -#define IROUND(x) iround(x) -#elif defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) && \ - (!defined(__BEOS__) || (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))) +#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) && \ + (!(defined(__BEOS__) || defined(__HAIKU__)) || \ + (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))) static INLINE int iround(float f) { int r; @@ -508,113 +441,6 @@ _mesa_is_pow_two(int x) #endif -/*** - *** START_FAST_MATH: Set x86 FPU to faster, 32-bit precision mode (and save - *** original mode to a temporary). - *** END_FAST_MATH: Restore x86 FPU to original mode. - ***/ -#if defined(__GNUC__) && defined(__i386__) -/* - * Set the x86 FPU control word to guarentee only 32 bits of precision - * are stored in registers. Allowing the FPU to store more introduces - * differences between situations where numbers are pulled out of memory - * vs. situations where the compiler is able to optimize register usage. - * - * In the worst case, we force the compiler to use a memory access to - * truncate the float, by specifying the 'volatile' keyword. - */ -/* Hardware default: All exceptions masked, extended double precision, - * round to nearest (IEEE compliant): - */ -#define DEFAULT_X86_FPU 0x037f -/* All exceptions masked, single precision, round to nearest: - */ -#define FAST_X86_FPU 0x003f -/* The fldcw instruction will cause any pending FP exceptions to be - * raised prior to entering the block, and we clear any pending - * exceptions before exiting the block. Hence, asm code has free - * reign over the FPU while in the fast math block. - */ -#if defined(NO_FAST_MATH) -#define START_FAST_MATH(x) \ -do { \ - static GLuint mask = DEFAULT_X86_FPU; \ - __asm__ ( "fnstcw %0" : "=m" (*&(x)) ); \ - __asm__ ( "fldcw %0" : : "m" (mask) ); \ -} while (0) -#else -#define START_FAST_MATH(x) \ -do { \ - static GLuint mask = FAST_X86_FPU; \ - __asm__ ( "fnstcw %0" : "=m" (*&(x)) ); \ - __asm__ ( "fldcw %0" : : "m" (mask) ); \ -} while (0) -#endif -/* Restore original FPU mode, and clear any exceptions that may have - * occurred in the FAST_MATH block. - */ -#define END_FAST_MATH(x) \ -do { \ - __asm__ ( "fnclex ; fldcw %0" : : "m" (*&(x)) ); \ -} while (0) - -#elif defined(__WATCOMC__) && defined(__386__) -#define DEFAULT_X86_FPU 0x037f /* See GCC comments above */ -#define FAST_X86_FPU 0x003f /* See GCC comments above */ -void _watcom_start_fast_math(unsigned short *x,unsigned short *mask); -#pragma aux _watcom_start_fast_math = \ - "fnstcw word ptr [eax]" \ - "fldcw word ptr [ecx]" \ - parm [eax] [ecx] \ - modify exact []; -void _watcom_end_fast_math(unsigned short *x); -#pragma aux _watcom_end_fast_math = \ - "fnclex" \ - "fldcw word ptr [eax]" \ - parm [eax] \ - modify exact []; -#if defined(NO_FAST_MATH) -#define START_FAST_MATH(x) \ -do { \ - static GLushort mask = DEFAULT_X86_FPU; \ - _watcom_start_fast_math(&x,&mask); \ -} while (0) -#else -#define START_FAST_MATH(x) \ -do { \ - static GLushort mask = FAST_X86_FPU; \ - _watcom_start_fast_math(&x,&mask); \ -} while (0) -#endif -#define END_FAST_MATH(x) _watcom_end_fast_math(&x) - -#elif defined(_MSC_VER) && defined(_M_IX86) -#define DEFAULT_X86_FPU 0x037f /* See GCC comments above */ -#define FAST_X86_FPU 0x003f /* See GCC comments above */ -#if defined(NO_FAST_MATH) -#define START_FAST_MATH(x) do {\ - static GLuint mask = DEFAULT_X86_FPU;\ - __asm fnstcw word ptr [x]\ - __asm fldcw word ptr [mask]\ -} while(0) -#else -#define START_FAST_MATH(x) do {\ - static GLuint mask = FAST_X86_FPU;\ - __asm fnstcw word ptr [x]\ - __asm fldcw word ptr [mask]\ -} while(0) -#endif -#define END_FAST_MATH(x) do {\ - __asm fnclex\ - __asm fldcw word ptr [x]\ -} while(0) - -#else -#define START_FAST_MATH(x) x = 0 -#define END_FAST_MATH(x) (void)(x) -#endif - - /** * Return 1 if this is a little endian machine, 0 if big endian. */ diff --git a/src/mesa/main/macros.h b/src/mesa/main/macros.h index 2630855a0e..bfd740870e 100644 --- a/src/mesa/main/macros.h +++ b/src/mesa/main/macros.h @@ -54,13 +54,16 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256]; #define FLOAT_TO_BYTE(X) ( (((GLint) (255.0F * (X))) - 1) / 2 ) -/** Convert GLushort in [0,65536] to GLfloat in [0.0,1.0] */ +/** Convert GLushort in [0,65535] to GLfloat in [0.0,1.0] */ #define USHORT_TO_FLOAT(S) ((GLfloat) (S) * (1.0F / 65535.0F)) +/** Convert GLfloat in [0.0,1.0] to GLushort in [0, 65535] */ +#define FLOAT_TO_USHORT(X) ((GLuint) ((X) * 65535.0)) + /** Convert GLshort in [-32768,32767] to GLfloat in [-1.0,1.0] */ #define SHORT_TO_FLOAT(S) ((2.0F * (S) + 1.0F) * (1.0F/65535.0F)) -/** Convert GLfloat in [0.0,1.0] to GLshort in [-32768,32767] */ +/** Convert GLfloat in [-1.0,1.0] to GLshort in [-32768,32767] */ #define FLOAT_TO_SHORT(X) ( (((GLint) (65535.0F * (X))) - 1) / 2 ) diff --git a/src/mesa/main/matrix.c b/src/mesa/main/matrix.c index 0f96f94909..aebf48134f 100644 --- a/src/mesa/main/matrix.c +++ b/src/mesa/main/matrix.c @@ -1,8 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 6.5.3 + * Version: 7.5 * - * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + * 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"), @@ -42,7 +43,6 @@ #include "matrix.h" #include "mtypes.h" #include "math/m_matrix.h" -#include "math/m_xform.h" /** @@ -536,120 +536,6 @@ _mesa_MultTransposeMatrixdARB( const GLdouble *m ) } #endif -/** - * Set the viewport. - * - * \param x, y coordinates of the lower-left corner of the viewport rectangle. - * \param width width of the viewport rectangle. - * \param height height of the viewport rectangle. - * - * \sa Called via glViewport() or display list execution. - * - * Flushes the vertices and calls _mesa_set_viewport() with the given - * parameters. - */ -void GLAPIENTRY -_mesa_Viewport( GLint x, GLint y, GLsizei width, GLsizei height ) -{ - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); - _mesa_set_viewport(ctx, x, y, width, height); -} - - -/** - * Set new viewport parameters and update derived state (the _WindowMap - * matrix). Usually called from _mesa_Viewport(). - * - * \param ctx GL context. - * \param x, y coordinates of the lower left corner of the viewport rectangle. - * \param width width of the viewport rectangle. - * \param height height of the viewport rectangle. - */ -void -_mesa_set_viewport( GLcontext *ctx, GLint x, GLint y, - GLsizei width, GLsizei height ) -{ - if (MESA_VERBOSE & VERBOSE_API) - _mesa_debug(ctx, "glViewport %d %d %d %d\n", x, y, width, height); - - if (width < 0 || height < 0) { - _mesa_error( ctx, GL_INVALID_VALUE, - "glViewport(%d, %d, %d, %d)", x, y, width, height ); - return; - } - - /* clamp width and height to the implementation dependent range */ - width = CLAMP(width, 1, (GLsizei) ctx->Const.MaxViewportWidth); - height = CLAMP(height, 1, (GLsizei) ctx->Const.MaxViewportHeight); - - ctx->Viewport.X = x; - ctx->Viewport.Width = width; - ctx->Viewport.Y = y; - ctx->Viewport.Height = height; - ctx->NewState |= _NEW_VIEWPORT; - -#if 1 - /* XXX remove this someday. Currently the DRI drivers rely on - * the WindowMap matrix being up to date in the driver's Viewport - * and DepthRange functions. - */ - _math_matrix_viewport(&ctx->Viewport._WindowMap, - ctx->Viewport.X, ctx->Viewport.Y, - ctx->Viewport.Width, ctx->Viewport.Height, - ctx->Viewport.Near, ctx->Viewport.Far, - ctx->DrawBuffer->_DepthMaxF); -#endif - - if (ctx->Driver.Viewport) { - /* Many drivers will use this call to check for window size changes - * and reallocate the z/stencil/accum/etc buffers if needed. - */ - (*ctx->Driver.Viewport)( ctx, x, y, width, height ); - } -} - - -#if _HAVE_FULL_GL -/** - * Called by glDepthRange - * - * \param nearval specifies the Z buffer value which should correspond to - * the near clip plane - * \param farval specifies the Z buffer value which should correspond to - * the far clip plane - */ -void GLAPIENTRY -_mesa_DepthRange( GLclampd nearval, GLclampd farval ) -{ - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); - - if (MESA_VERBOSE&VERBOSE_API) - _mesa_debug(ctx, "glDepthRange %f %f\n", nearval, farval); - - ctx->Viewport.Near = (GLfloat) CLAMP( nearval, 0.0, 1.0 ); - ctx->Viewport.Far = (GLfloat) CLAMP( farval, 0.0, 1.0 ); - ctx->NewState |= _NEW_VIEWPORT; - -#if 1 - /* XXX remove this someday. Currently the DRI drivers rely on - * the WindowMap matrix being up to date in the driver's Viewport - * and DepthRange functions. - */ - _math_matrix_viewport(&ctx->Viewport._WindowMap, - ctx->Viewport.X, ctx->Viewport.Y, - ctx->Viewport.Width, ctx->Viewport.Height, - ctx->Viewport.Near, ctx->Viewport.Far, - ctx->DrawBuffer->_DepthMaxF); -#endif - - if (ctx->Driver.DepthRange) { - (*ctx->Driver.DepthRange)( ctx, nearval, farval ); - } -} -#endif - /**********************************************************************/ @@ -893,41 +779,4 @@ void _mesa_init_transform( GLcontext *ctx ) } -/** - * Initialize the context viewport attribute group. - * - * \param ctx GL context. - * - * \todo Move this to a new file with other 'viewport' routines. - */ -void _mesa_init_viewport( GLcontext *ctx ) -{ - GLfloat depthMax = 65535.0F; /* sorf of arbitrary */ - - /* Viewport group */ - ctx->Viewport.X = 0; - ctx->Viewport.Y = 0; - ctx->Viewport.Width = 0; - ctx->Viewport.Height = 0; - ctx->Viewport.Near = 0.0; - ctx->Viewport.Far = 1.0; - _math_matrix_ctr(&ctx->Viewport._WindowMap); - - _math_matrix_viewport(&ctx->Viewport._WindowMap, 0, 0, 0, 0, - 0.0F, 1.0F, depthMax); -} - - -/** - * Free the context viewport attribute group data. - * - * \param ctx GL context. - * - * \todo Move this to a new file with other 'viewport' routines. - */ -void _mesa_free_viewport_data( GLcontext *ctx ) -{ - _math_matrix_dtr(&ctx->Viewport._WindowMap); -} - /*@}*/ diff --git a/src/mesa/main/matrix.h b/src/mesa/main/matrix.h index 38769867a7..a53d1045c7 100644 --- a/src/mesa/main/matrix.h +++ b/src/mesa/main/matrix.h @@ -1,13 +1,9 @@ -/** - * \file matrix.h - * Matrix operations. - */ - /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 7.5 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * 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"), @@ -99,15 +95,6 @@ _mesa_MultTransposeMatrixfARB( const GLfloat *m ); extern void GLAPIENTRY _mesa_MultTransposeMatrixdARB( const GLdouble *m ); -extern void GLAPIENTRY -_mesa_Viewport( GLint x, GLint y, GLsizei width, GLsizei height ); - -extern void -_mesa_set_viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ); - -extern void GLAPIENTRY -_mesa_DepthRange( GLclampd nearval, GLclampd farval ); - extern void _mesa_init_matrix( GLcontext * ctx ); @@ -115,16 +102,10 @@ _mesa_init_matrix( GLcontext * ctx ); extern void _mesa_init_transform( GLcontext *ctx ); -extern void -_mesa_init_viewport( GLcontext *ctx ); - extern void _mesa_free_matrix_data( GLcontext *ctx ); extern void -_mesa_free_viewport_data( GLcontext *ctx ); - -extern void _mesa_update_modelview_project( GLcontext *ctx, GLuint newstate ); diff --git a/src/mesa/main/mfeatures.h b/src/mesa/main/mfeatures.h index 8fb32dd7e9..f570647942 100644 --- a/src/mesa/main/mfeatures.h +++ b/src/mesa/main/mfeatures.h @@ -75,7 +75,6 @@ #define FEATURE_EXT_texture_sRGB _HAVE_FULL_GL #define FEATURE_EXT_timer_query _HAVE_FULL_GL #define FEATURE_ATI_fragment_shader _HAVE_FULL_GL -#define FEATURE_MESA_program_debug _HAVE_FULL_GL #define FEATURE_NV_fence _HAVE_FULL_GL #define FEATURE_NV_fragment_program _HAVE_FULL_GL #define FEATURE_NV_vertex_program _HAVE_FULL_GL diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c index 3dd4b3391b..4a79430c34 100644 --- a/src/mesa/main/mipmap.c +++ b/src/mesa/main/mipmap.c @@ -85,7 +85,7 @@ bytes_per_pixel(GLenum datatype, GLuint comps) rowC[j][e], rowC[k][e], \ rowD[j][e], rowD[k][e]); \ } while(0) - + #define FILTER_F_3D(e) \ do { \ dst[i][e] = (rowA[j][e] + rowA[k][e] \ @@ -226,7 +226,6 @@ do_row(GLenum datatype, GLuint comps, GLint srcWidth, dst[i] = (rowA[j] + rowA[k] + rowB[j] + rowB[k]) / 4; } } - else if (datatype == GL_FLOAT && comps == 4) { GLuint i, j, k; const GLfloat(*rowA)[4] = (const GLfloat(*)[4]) srcRowA; @@ -471,6 +470,17 @@ do_row(GLenum datatype, GLuint comps, GLint srcWidth, dst[i] = (blue << 5) | (green << 2) | red; } } + else if (datatype == GL_BYTE && comps == 2) { + GLuint i, j, k; + const GLbyte(*rowA)[2] = (const GLbyte(*)[2]) srcRowA; + const GLbyte(*rowB)[2] = (const GLbyte(*)[2]) srcRowB; + GLbyte(*dst)[2] = (GLbyte(*)[2]) dstRow; + for (i = j = 0, k = k0; i < (GLuint) dstWidth; + i++, j += colStride, k += colStride) { + dst[i][0] = (rowA[j][0] + rowA[k][0] + rowB[j][0] + rowB[k][0]) >> 2; + dst[i][1] = (rowA[j][1] + rowA[k][1] + rowB[j][1] + rowB[k][1]) >> 2; + } + } else { _mesa_problem(NULL, "bad format in do_row()"); } @@ -1176,7 +1186,7 @@ make_1d_stack_mipmap(GLenum datatype, GLuint comps, GLint border, /** - * \bugs + * \bug * There is quite a bit of refactoring that could be done with this function * and \c make_2d_mipmap. */ diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index be982afe39..5293009454 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 7.3 + * Version: 7.5 * - * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. - * Copyright (C) 1999-2008 VMware, Inc. All Rights Reserved. + * 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"), @@ -30,22 +30,16 @@ * Please try to mark derived values with a leading underscore ('_'). */ -#ifndef TYPES_H -#define TYPES_H +#ifndef MTYPES_H +#define MTYPES_H -#include "glheader.h" -#include <GL/internal/glcore.h> /* __GLcontextModes (GLvisual) */ -#include "config.h" /* Hardwired parameters */ +#include "main/glheader.h" +#include "main/config.h" +#include "main/compiler.h" +#include "main/mfeatures.h" #include "glapi/glapi.h" #include "math/m_matrix.h" /* GLmatrix */ -#include "bitset.h" - - -/** - * Special, internal token - */ -#define GL_SHADER_PROGRAM_MESA 0x9999 /** @@ -84,49 +78,17 @@ /** - * Fixed point data type. - */ -typedef int GLfixed; -/* - * 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) - - - -/** * \name Some forward type declarations */ /*@{*/ struct _mesa_HashTable; +struct gl_attrib_node; struct gl_pixelstore_attrib; struct gl_program_cache; struct gl_texture_format; struct gl_texture_image; struct gl_texture_object; struct st_context; -struct pipe_surface; typedef struct __GLcontextRec GLcontext; typedef struct __GLcontextModesRec GLvisual; typedef struct gl_framebuffer GLframebuffer; @@ -141,7 +103,7 @@ typedef struct gl_framebuffer GLframebuffer; * In GL_ARB_vertex_shader / OpenGL 2.0 the aliasing is disallowed (the * generic attributes are distinct/separate). */ -enum +typedef enum { VERT_ATTRIB_POS = 0, VERT_ATTRIB_WEIGHT = 1, @@ -177,7 +139,7 @@ enum VERT_ATTRIB_GENERIC14 = 30, VERT_ATTRIB_GENERIC15 = 31, VERT_ATTRIB_MAX = 32 -}; +} gl_vert_attrib; /** * Bitflags for vertex attributes. @@ -225,32 +187,33 @@ enum /** * Indexes for vertex program result attributes */ -/*@{*/ -#define VERT_RESULT_HPOS 0 -#define VERT_RESULT_COL0 1 -#define VERT_RESULT_COL1 2 -#define VERT_RESULT_FOGC 3 -#define VERT_RESULT_TEX0 4 -#define VERT_RESULT_TEX1 5 -#define VERT_RESULT_TEX2 6 -#define VERT_RESULT_TEX3 7 -#define VERT_RESULT_TEX4 8 -#define VERT_RESULT_TEX5 9 -#define VERT_RESULT_TEX6 10 -#define VERT_RESULT_TEX7 11 -#define VERT_RESULT_PSIZ 12 -#define VERT_RESULT_BFC0 13 -#define VERT_RESULT_BFC1 14 -#define VERT_RESULT_EDGE 15 -#define VERT_RESULT_VAR0 16 /**< shader varying */ -#define VERT_RESULT_MAX (VERT_RESULT_VAR0 + MAX_VARYING) -/*@}*/ +typedef enum +{ + VERT_RESULT_HPOS = 0, + VERT_RESULT_COL0 = 1, + VERT_RESULT_COL1 = 2, + VERT_RESULT_FOGC = 3, + VERT_RESULT_TEX0 = 4, + VERT_RESULT_TEX1 = 5, + VERT_RESULT_TEX2 = 6, + VERT_RESULT_TEX3 = 7, + VERT_RESULT_TEX4 = 8, + VERT_RESULT_TEX5 = 9, + VERT_RESULT_TEX6 = 10, + VERT_RESULT_TEX7 = 11, + VERT_RESULT_PSIZ = 12, + VERT_RESULT_BFC0 = 13, + VERT_RESULT_BFC1 = 14, + VERT_RESULT_EDGE = 15, + VERT_RESULT_VAR0 = 16 /**< shader varying */, + VERT_RESULT_MAX = (VERT_RESULT_VAR0 + MAX_VARYING) +} gl_vert_result; /** * Indexes for fragment program input attributes. */ -enum +typedef enum { FRAG_ATTRIB_WPOS = 0, FRAG_ATTRIB_COL0 = 1, @@ -266,7 +229,7 @@ enum FRAG_ATTRIB_TEX7 = 11, FRAG_ATTRIB_VAR0 = 12, /**< shader varying */ FRAG_ATTRIB_MAX = (FRAG_ATTRIB_VAR0 + MAX_VARYING) -}; +} gl_frag_attrib; /** * Bitflags for fragment program input attributes. @@ -303,41 +266,41 @@ enum /** * Fragment program results */ -enum +typedef enum { - FRAG_RESULT_COLR = 0, - FRAG_RESULT_COLH = 1, - FRAG_RESULT_DEPR = 2, - FRAG_RESULT_DATA0 = 3, + FRAG_RESULT_DEPTH = 0, + FRAG_RESULT_COLOR = 1, + FRAG_RESULT_DATA0 = 2, FRAG_RESULT_MAX = (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS) -}; +} gl_frag_result; /** * Indexes for all renderbuffers */ -enum { - BUFFER_FRONT_LEFT = 0, /* the four standard color buffers */ - BUFFER_BACK_LEFT = 1, - BUFFER_FRONT_RIGHT = 2, - BUFFER_BACK_RIGHT = 3, - BUFFER_AUX0 = 4, /* optional aux buffer */ - BUFFER_AUX1 = 5, - BUFFER_AUX2 = 6, - BUFFER_AUX3 = 7, - BUFFER_DEPTH = 8, - BUFFER_STENCIL = 9, - BUFFER_ACCUM = 10, - BUFFER_COLOR0 = 11, /* generic renderbuffers */ - BUFFER_COLOR1 = 12, - BUFFER_COLOR2 = 13, - BUFFER_COLOR3 = 14, - BUFFER_COLOR4 = 15, - BUFFER_COLOR5 = 16, - BUFFER_COLOR6 = 17, - BUFFER_COLOR7 = 18, - BUFFER_COUNT = 19 -}; +typedef enum +{ + /* the four standard color buffers */ + BUFFER_FRONT_LEFT, + BUFFER_BACK_LEFT, + BUFFER_FRONT_RIGHT, + BUFFER_BACK_RIGHT, + BUFFER_DEPTH, + BUFFER_STENCIL, + BUFFER_ACCUM, + /* optional aux buffer */ + BUFFER_AUX0, + /* generic renderbuffers */ + BUFFER_COLOR0, + BUFFER_COLOR1, + BUFFER_COLOR2, + BUFFER_COLOR3, + BUFFER_COLOR4, + BUFFER_COLOR5, + BUFFER_COLOR6, + BUFFER_COLOR7, + BUFFER_COUNT +} gl_buffer_index; /** * Bit flags for all renderbuffers @@ -370,9 +333,6 @@ enum { BUFFER_BIT_FRONT_RIGHT | \ BUFFER_BIT_BACK_RIGHT | \ BUFFER_BIT_AUX0 | \ - BUFFER_BIT_AUX1 | \ - BUFFER_BIT_AUX2 | \ - BUFFER_BIT_AUX3 | \ BUFFER_BIT_COLOR0 | \ BUFFER_BIT_COLOR1 | \ BUFFER_BIT_COLOR2 | \ @@ -384,12 +344,13 @@ enum { /** The pixel transfer path has three color tables: */ -/*@{*/ -#define COLORTABLE_PRECONVOLUTION 0 -#define COLORTABLE_POSTCONVOLUTION 1 -#define COLORTABLE_POSTCOLORMATRIX 2 -#define COLORTABLE_MAX 3 -/*@}*/ +typedef enum +{ + COLORTABLE_PRECONVOLUTION, + COLORTABLE_POSTCONVOLUTION, + COLORTABLE_POSTCOLORMATRIX, + COLORTABLE_MAX +} gl_colortable_index; /** @@ -626,9 +587,7 @@ struct gl_current_attrib * \note Index and Edgeflag current values are stored as floats in the * SIX and SEVEN attribute slots. */ - /*@{*/ GLfloat Attrib[VERT_ATTRIB_MAX][4]; /**< Position, color, texcoords, etc */ - /*@}*/ /** * \name Current raster position attributes (always valid). @@ -661,84 +620,6 @@ struct gl_depthbuffer_attrib /** - * glEnable()/glDisable() attribute group (GL_ENABLE_BIT). - */ -struct gl_enable_attrib -{ - GLboolean AlphaTest; - GLboolean AutoNormal; - GLboolean Blend; - GLbitfield ClipPlanes; - GLboolean ColorMaterial; - GLboolean ColorTable[COLORTABLE_MAX]; - GLboolean Convolution1D; - GLboolean Convolution2D; - GLboolean Separable2D; - GLboolean CullFace; - GLboolean DepthTest; - GLboolean Dither; - GLboolean Fog; - GLboolean Histogram; - GLboolean Light[MAX_LIGHTS]; - GLboolean Lighting; - GLboolean LineSmooth; - GLboolean LineStipple; - GLboolean IndexLogicOp; - GLboolean ColorLogicOp; - GLboolean Map1Color4; - GLboolean Map1Index; - GLboolean Map1Normal; - GLboolean Map1TextureCoord1; - GLboolean Map1TextureCoord2; - GLboolean Map1TextureCoord3; - GLboolean Map1TextureCoord4; - GLboolean Map1Vertex3; - GLboolean Map1Vertex4; - GLboolean Map1Attrib[16]; /* GL_NV_vertex_program */ - GLboolean Map2Color4; - GLboolean Map2Index; - GLboolean Map2Normal; - GLboolean Map2TextureCoord1; - GLboolean Map2TextureCoord2; - GLboolean Map2TextureCoord3; - GLboolean Map2TextureCoord4; - GLboolean Map2Vertex3; - GLboolean Map2Vertex4; - GLboolean Map2Attrib[16]; /* GL_NV_vertex_program */ - GLboolean MinMax; - GLboolean Normalize; - GLboolean PixelTexture; - GLboolean PointSmooth; - GLboolean PolygonOffsetPoint; - GLboolean PolygonOffsetLine; - GLboolean PolygonOffsetFill; - GLboolean PolygonSmooth; - GLboolean PolygonStipple; - GLboolean RescaleNormals; - GLboolean Scissor; - GLboolean Stencil; - GLboolean StencilTwoSide; /* GL_EXT_stencil_two_side */ - GLboolean MultisampleEnabled; /* GL_ARB_multisample */ - GLboolean SampleAlphaToCoverage; /* GL_ARB_multisample */ - GLboolean SampleAlphaToOne; /* GL_ARB_multisample */ - GLboolean SampleCoverage; /* GL_ARB_multisample */ - GLboolean SampleCoverageInvert; /* GL_ARB_multisample */ - GLboolean RasterPositionUnclipped; /* GL_IBM_rasterpos_clip */ - GLuint Texture[MAX_TEXTURE_UNITS]; - GLuint TexGen[MAX_TEXTURE_UNITS]; - /* SGI_texture_color_table */ - GLboolean TextureColorTable[MAX_TEXTURE_UNITS]; - /* GL_ARB_vertex_program / GL_NV_vertex_program */ - GLboolean VertexProgram; - GLboolean VertexProgramPointSize; - GLboolean VertexProgramTwoSide; - /* GL_ARB_point_sprite / GL_NV_point_sprite */ - GLboolean PointSprite; - GLboolean FragmentShaderATI; -}; - - -/** * Evaluator attribute group (GL_EVAL_BIT). */ struct gl_eval_attrib @@ -825,11 +706,11 @@ struct gl_hint_attrib */ struct gl_histogram_attrib { - GLuint Width; /**< number of table entries */ - GLint Format; /**< GL_ALPHA, GL_RGB, etc */ - GLuint Count[HISTOGRAM_TABLE_SIZE][4]; /**< the histogram */ - GLboolean Sink; /**< terminate image transfer? */ - GLubyte RedSize; /**< Bits per counter */ + GLuint Width; /**< number of table entries */ + GLint Format; /**< GL_ALPHA, GL_RGB, etc */ + GLuint Count[HISTOGRAM_TABLE_SIZE][4]; /**< the histogram */ + GLboolean Sink; /**< terminate image transfer? */ + GLubyte RedSize; /**< Bits per counter */ GLubyte GreenSize; GLubyte BlueSize; GLubyte AlphaSize; @@ -1008,13 +889,15 @@ struct gl_pixel_attrib /*--- Begin Pixel Transfer State ---*/ /* Fields are in the order in which they're applied... */ - /* Scale & Bias (index shift, offset) */ + /** Scale & Bias (index shift, offset) */ + /*@{*/ GLfloat RedBias, RedScale; GLfloat GreenBias, GreenScale; GLfloat BlueBias, BlueScale; GLfloat AlphaBias, AlphaScale; GLfloat DepthBias, DepthScale; GLint IndexShift, IndexOffset; + /*@}*/ /* Pixel Maps */ /* Note: actual pixel maps are not part of this attrib group */ @@ -1030,7 +913,7 @@ struct gl_pixel_attrib GLboolean Convolution1DEnabled; GLboolean Convolution2DEnabled; GLboolean Separable2DEnabled; - GLfloat ConvolutionBorderColor[3][4]; + GLfloat ConvolutionBorderColor[3][4]; /**< RGBA */ GLenum ConvolutionBorderMode[3]; GLfloat ConvolutionFilterScale[3][4]; /**< RGBA */ GLfloat ConvolutionFilterBias[3][4]; /**< RGBA */ @@ -1049,12 +932,12 @@ struct gl_pixel_attrib /*--- End Pixel Transfer State ---*/ - /* Pixel Zoom */ + /** glPixelZoom */ GLfloat ZoomX, ZoomY; /** GL_SGI_texture_color_table */ - GLfloat TextureColorTableScale[4]; - GLfloat TextureColorTableBias[4]; + GLfloat TextureColorTableScale[4]; /**< RGBA */ + GLfloat TextureColorTableBias[4]; /**< RGBA */ }; @@ -1129,8 +1012,9 @@ struct gl_stencil_attrib GLboolean Enabled; /**< Enabled flag */ GLboolean TestTwoSide; /**< GL_EXT_stencil_two_side */ GLubyte ActiveFace; /**< GL_EXT_stencil_two_side (0 or 2) */ + GLboolean _Enabled; /**< Enabled and stencil buffer present */ GLboolean _TestTwoSide; - GLubyte _BackFace; + GLubyte _BackFace; /**< Current back stencil state (1 or 2) */ GLenum Function[3]; /**< Stencil function */ GLenum FailFunc[3]; /**< Fail function */ GLenum ZPassFunc[3]; /**< Depth buffer pass function */ @@ -1142,34 +1026,36 @@ struct gl_stencil_attrib }; -/** 1D, 2D, 3D, CUBE, RECT, 1D_ARRAY, and 2D_ARRAY targets */ -#define NUM_TEXTURE_TARGETS 7 - /** - * An index for each type of texture object + * An index for each type of texture object. These correspond to the GL + * target target enums, such as GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP, etc. + * Note: the order is from highest priority to lowest priority. */ -/*@{*/ -#define TEXTURE_1D_INDEX 0 -#define TEXTURE_2D_INDEX 1 -#define TEXTURE_3D_INDEX 2 -#define TEXTURE_CUBE_INDEX 3 -#define TEXTURE_RECT_INDEX 4 -#define TEXTURE_1D_ARRAY_INDEX 5 -#define TEXTURE_2D_ARRAY_INDEX 6 -/*@}*/ +typedef enum +{ + TEXTURE_2D_ARRAY_INDEX, + TEXTURE_1D_ARRAY_INDEX, + TEXTURE_CUBE_INDEX, + TEXTURE_3D_INDEX, + TEXTURE_RECT_INDEX, + TEXTURE_2D_INDEX, + TEXTURE_1D_INDEX, + NUM_TEXTURE_TARGETS +} gl_texture_index; + /** * Bit flags for each type of texture object * Used for Texture.Unit[]._ReallyEnabled flags. */ /*@{*/ -#define TEXTURE_1D_BIT (1 << TEXTURE_1D_INDEX) -#define TEXTURE_2D_BIT (1 << TEXTURE_2D_INDEX) -#define TEXTURE_3D_BIT (1 << TEXTURE_3D_INDEX) +#define TEXTURE_2D_ARRAY_BIT (1 << TEXTURE_2D_ARRAY_INDEX) +#define TEXTURE_1D_ARRAY_BIT (1 << TEXTURE_1D_ARRAY_INDEX) #define TEXTURE_CUBE_BIT (1 << TEXTURE_CUBE_INDEX) +#define TEXTURE_3D_BIT (1 << TEXTURE_3D_INDEX) #define TEXTURE_RECT_BIT (1 << TEXTURE_RECT_INDEX) -#define TEXTURE_1D_ARRAY_BIT (1 << TEXTURE_1D_ARRAY_INDEX) -#define TEXTURE_2D_ARRAY_BIT (1 << TEXTURE_2D_ARRAY_INDEX) +#define TEXTURE_2D_BIT (1 << TEXTURE_2D_INDEX) +#define TEXTURE_1D_BIT (1 << TEXTURE_1D_INDEX) /*@}*/ @@ -1204,27 +1090,12 @@ struct gl_stencil_attrib /*@}*/ -/* A selection of state flags to make driver and module's lives easier. */ -#define ENABLE_TEXGEN0 0x1 -#define ENABLE_TEXGEN1 0x2 -#define ENABLE_TEXGEN2 0x4 -#define ENABLE_TEXGEN3 0x8 -#define ENABLE_TEXGEN4 0x10 -#define ENABLE_TEXGEN5 0x20 -#define ENABLE_TEXGEN6 0x40 -#define ENABLE_TEXGEN7 0x80 -#define ENABLE_TEXMAT0 0x1 /* Ie. not the identity matrix */ -#define ENABLE_TEXMAT1 0x2 -#define ENABLE_TEXMAT2 0x4 -#define ENABLE_TEXMAT3 0x8 -#define ENABLE_TEXMAT4 0x10 -#define ENABLE_TEXMAT5 0x20 -#define ENABLE_TEXMAT6 0x40 -#define ENABLE_TEXMAT7 0x80 +/** Tex-gen enabled for texture unit? */ +#define ENABLE_TEXGEN(unit) (1 << (unit)) -#define ENABLE_TEXGEN(i) (ENABLE_TEXGEN0 << (i)) -#define ENABLE_TEXMAT(i) (ENABLE_TEXMAT0 << (i)) +/** Non-identity texture matrix for texture unit? */ +#define ENABLE_TEXMAT(unit) (1 << (unit)) /** @@ -1400,15 +1271,16 @@ struct gl_texture_image /** * Indexes for cube map faces. */ -/*@{*/ -#define FACE_POS_X 0 -#define FACE_NEG_X 1 -#define FACE_POS_Y 2 -#define FACE_NEG_Y 3 -#define FACE_POS_Z 4 -#define FACE_NEG_Z 5 -#define MAX_FACES 6 -/*@}*/ +typedef enum +{ + FACE_POS_X = 0, + FACE_NEG_X = 1, + FACE_POS_Y = 2, + FACE_NEG_Y = 3, + FACE_POS_Z = 4, + FACE_NEG_Z = 5, + MAX_FACES = 6 +} gl_face_index; /** @@ -1439,10 +1311,6 @@ struct gl_texture_object GLenum CompareMode; /**< GL_ARB_shadow */ GLenum CompareFunc; /**< GL_ARB_shadow */ GLfloat CompareFailValue; /**< GL_ARB_shadow_ambient */ - GLenum _Function; /**< Comparison function derived from - * \c CompareOperator, \c CompareMode, and - * \c CompareFunc. - */ GLenum DepthMode; /**< GL_ARB_depth_texture */ GLint _MaxLevel; /**< actual max mipmap level (q in the spec) */ GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - b in spec) */ @@ -1490,6 +1358,18 @@ struct gl_tex_env_combine_state /** + * Texture coord generation state. + */ +struct gl_texgen +{ + GLenum Mode; /**< GL_EYE_LINEAR, GL_SPHERE_MAP, etc */ + GLbitfield _ModeBit; /**< TEXGEN_x bit corresponding to Mode */ + GLfloat ObjectPlane[4]; + GLfloat EyePlane[4]; +}; + + +/** * Texture unit state. Contains enable flags, texture environment/function/ * combiners, texgen state, pointers to current texture objects and * post-filter color tables. @@ -1501,29 +1381,17 @@ struct gl_texture_unit GLenum EnvMode; /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */ GLfloat EnvColor[4]; + + struct gl_texgen GenS; + struct gl_texgen GenT; + struct gl_texgen GenR; + struct gl_texgen GenQ; GLbitfield TexGenEnabled; /**< Bitwise-OR of [STRQ]_BIT values */ - /** \name Tex coord generation mode - * Either GL_OBJECT_LINEAR, GL_EYE_LINEAR or GL_SPHERE_MAP. */ - /*@{*/ - GLenum GenModeS; - GLenum GenModeT; - GLenum GenModeR; - GLenum GenModeQ; - /*@}*/ - GLbitfield _GenBitS; - GLbitfield _GenBitT; - GLbitfield _GenBitR; - GLbitfield _GenBitQ; - GLbitfield _GenFlags; /**< bitwise or of _GenBit[STRQ] */ - GLfloat ObjectPlaneS[4]; - GLfloat ObjectPlaneT[4]; - GLfloat ObjectPlaneR[4]; - GLfloat ObjectPlaneQ[4]; - GLfloat EyePlaneS[4]; - GLfloat EyePlaneT[4]; - GLfloat EyePlaneR[4]; - GLfloat EyePlaneQ[4]; + GLbitfield _GenFlags; /**< Bitwise-OR of Gen[STRQ]._ModeBit */ + GLfloat LodBias; /**< for biasing mipmap levels */ + GLenum BumpTarget; + GLfloat RotMatrix[4]; /* 2x2 matrix */ /** * \name GL_EXT_texture_env_combine @@ -1542,15 +1410,11 @@ struct gl_texture_unit */ struct gl_tex_env_combine_state *_CurrentCombine; - struct gl_texture_object *Current1D; - struct gl_texture_object *Current2D; - struct gl_texture_object *Current3D; - struct gl_texture_object *CurrentCubeMap; /**< GL_ARB_texture_cube_map */ - struct gl_texture_object *CurrentRect; /**< GL_NV_texture_rectangle */ - struct gl_texture_object *Current1DArray; /**< GL_MESA_texture_array */ - struct gl_texture_object *Current2DArray; /**< GL_MESA_texture_array */ + /** Current texture object pointers */ + struct gl_texture_object *CurrentTex[NUM_TEXTURE_TARGETS]; - struct gl_texture_object *_Current; /**< Points to really enabled tex obj */ + /** Points to highest priority, complete and enabled texture object */ + struct gl_texture_object *_Current; /** GL_SGI_texture_color_table */ /*@{*/ @@ -1561,24 +1425,12 @@ struct gl_texture_unit }; - /** * Texture attribute group (GL_TEXTURE_BIT). */ struct gl_texture_attrib { - /** - * name multitexture - */ - /**@{*/ - GLuint CurrentUnit; /**< Active texture unit [0, MaxTextureImageUnits-1] */ - GLbitfield _EnabledUnits; /**< one bit set for each really-enabled unit */ - GLbitfield _EnabledCoordUnits; /**< one bit per enabled coordinate unit */ - GLbitfield _GenFlags; /**< for texgen */ - GLbitfield _TexGenEnabled; - GLbitfield _TexMatEnabled; - /**@}*/ - + GLuint CurrentUnit; /**< GL_ACTIVE_TEXTURE */ struct gl_texture_unit Unit[MAX_TEXTURE_UNITS]; struct gl_texture_object *ProxyTex[NUM_TEXTURE_TARGETS]; @@ -1586,6 +1438,21 @@ struct gl_texture_attrib /** GL_EXT_shared_texture_palette */ GLboolean SharedPalette; struct gl_color_table Palette; + + /** Texture units/samplers used by vertex or fragment texturing */ + GLbitfield _EnabledUnits; + + /** Texture coord units/sets used for fragment texturing */ + GLbitfield _EnabledCoordUnits; + + /** Texture coord units that have texgen enabled */ + GLbitfield _TexGenEnabled; + + /** Texture coord units that have non-identity matrices */ + GLbitfield _TexMatEnabled; + + /** Bitwise-OR of all Texture.Unit[i]._GenFlags */ + GLbitfield _GenFlags; }; @@ -1621,17 +1488,6 @@ struct gl_viewport_attrib /** - * Node for the attribute stack. - */ -struct gl_attrib_node -{ - GLbitfield kind; - void *data; - struct gl_attrib_node *next; -}; - - -/** * GL_ARB_vertex/pixel_buffer_object buffer object */ struct gl_buffer_object @@ -1641,13 +1497,14 @@ struct gl_buffer_object GLenum Usage; GLenum Access; GLvoid *Pointer; /**< Only valid while buffer is mapped */ + GLintptr Offset; /**< mapped offset */ + GLsizeiptr Length; /**< mapped length */ GLsizeiptrARB Size; /**< Size of storage in bytes */ GLubyte *Data; /**< Location of storage either in RAM or VRAM. */ GLboolean OnCard; /**< Is buffer in VRAM? (hardware drivers) */ }; - /** * Client pixel packing/unpacking attributes */ @@ -1657,8 +1514,8 @@ struct gl_pixelstore_attrib GLint RowLength; GLint SkipPixels; GLint SkipRows; - GLint ImageHeight; /**< for GL_EXT_texture3D */ - GLint SkipImages; /**< for GL_EXT_texture3D */ + GLint ImageHeight; + GLint SkipImages; GLboolean SwapBytes; GLboolean LsbFirst; GLboolean ClientStorage; /**< GL_APPLE_client_storage */ @@ -1667,7 +1524,6 @@ struct gl_pixelstore_attrib }; - /** * Client vertex array attributes */ @@ -1747,7 +1603,7 @@ struct gl_array_attrib struct gl_feedback { GLenum Type; - GLbitfield _Mask; /* FB_* bits */ + GLbitfield _Mask; /**< FB_* bits */ GLfloat *Buffer; GLuint BufferSize; GLuint Count; @@ -1845,24 +1701,24 @@ struct gl_evaluators * be "uniform" variables since they can only be set outside glBegin/End. * They're also all stored in the same Parameters array. */ -enum register_file -{ - PROGRAM_TEMPORARY = 0, /**< machine->Temporary[] */ - PROGRAM_LOCAL_PARAM = 1, /**< gl_program->LocalParams[] */ - PROGRAM_ENV_PARAM = 2, /**< gl_program->Parameters[] */ - PROGRAM_STATE_VAR = 3, /**< gl_program->Parameters[] */ - PROGRAM_INPUT = 4, /**< machine->Inputs[] */ - PROGRAM_OUTPUT = 5, /**< machine->Outputs[] */ - PROGRAM_NAMED_PARAM = 6, /**< gl_program->Parameters[] */ - PROGRAM_CONSTANT = 7, /**< gl_program->Parameters[] */ - PROGRAM_UNIFORM = 8, /**< gl_program->Parameters[] */ - PROGRAM_VARYING = 9, /**< machine->Inputs[]/Outputs[] */ - PROGRAM_WRITE_ONLY = 10, /**< A dummy, write-only register */ - PROGRAM_ADDRESS = 11, /**< machine->AddressReg */ - PROGRAM_SAMPLER = 12, /**< for shader samplers, compile-time only */ - PROGRAM_UNDEFINED = 13, /**< Invalid value */ +typedef enum +{ + PROGRAM_TEMPORARY, /**< machine->Temporary[] */ + PROGRAM_INPUT, /**< machine->Inputs[] */ + PROGRAM_OUTPUT, /**< machine->Outputs[] */ + PROGRAM_VARYING, /**< machine->Inputs[]/Outputs[] */ + PROGRAM_LOCAL_PARAM, /**< gl_program->LocalParams[] */ + PROGRAM_ENV_PARAM, /**< gl_program->Parameters[] */ + PROGRAM_STATE_VAR, /**< gl_program->Parameters[] */ + PROGRAM_NAMED_PARAM, /**< gl_program->Parameters[] */ + PROGRAM_CONSTANT, /**< gl_program->Parameters[] */ + PROGRAM_UNIFORM, /**< gl_program->Parameters[] */ + PROGRAM_WRITE_ONLY, /**< A dummy, write-only register */ + PROGRAM_ADDRESS, /**< machine->AddressReg */ + PROGRAM_SAMPLER, /**< for shader samplers, compile-time only */ + PROGRAM_UNDEFINED, /**< Invalid/TBD value */ PROGRAM_FILE_MAX -}; +} gl_register_file; /** Vertex and fragment instructions */ @@ -1971,14 +1827,14 @@ struct gl_program_state */ struct gl_vertex_program_state { - GLboolean Enabled; /**< User-set GL_VERTEX_PROGRAM_ARB/NV flag */ - GLboolean _Enabled; /**< Enabled and _valid_ user program? */ - GLboolean PointSizeEnabled; /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */ - GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */ + GLboolean Enabled; /**< User-set GL_VERTEX_PROGRAM_ARB/NV flag */ + GLboolean _Enabled; /**< Enabled and _valid_ user program? */ + GLboolean PointSizeEnabled; /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */ + GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */ struct gl_vertex_program *Current; /**< User-bound vertex program */ - /** Currently enabled and valid vertex program (including internal programs, - * user-defined vertex programs and GLSL vertex shaders). + /** Currently enabled and valid vertex program (including internal + * programs, user-defined vertex programs and GLSL vertex shaders). * This is the program we must use when rendering. */ struct gl_vertex_program *_Current; @@ -1998,13 +1854,6 @@ struct gl_vertex_program_state /** Cache of fixed-function programs */ struct gl_program_cache *Cache; -#if FEATURE_MESA_program_debug - GLprogramcallbackMESA Callback; - GLvoid *CallbackData; - GLboolean CallbackEnabled; - GLuint CurrentPosition; -#endif - GLboolean _Overriden; }; @@ -2018,8 +1867,8 @@ struct gl_fragment_program_state GLboolean _Enabled; /**< Enabled and _valid_ user program? */ struct gl_fragment_program *Current; /**< User-bound fragment program */ - /** Currently enabled and valid fragment program (including internal programs, - * user-defined fragment programs and GLSL fragment shaders). + /** Currently enabled and valid fragment program (including internal + * programs, user-defined fragment programs and GLSL fragment shaders). * This is the program we must use when rendering. */ struct gl_fragment_program *_Current; @@ -2034,13 +1883,6 @@ struct gl_fragment_program_state /** Cache of fixed-function programs */ struct gl_program_cache *Cache; - -#if FEATURE_MESA_program_debug - GLprogramcallbackMESA Callback; - GLvoid *CallbackData; - GLboolean CallbackEnabled; - GLuint CurrentPosition; -#endif }; @@ -2114,6 +1956,8 @@ struct gl_query_state /** Set by #pragma directives */ struct gl_sl_pragmas { + GLboolean IgnoreOptimize; /**< ignore #pragma optimize(on/off) ? */ + GLboolean IgnoreDebug; /**< ignore #pragma debug(on/off) ? */ GLboolean Optimize; /**< defaults on */ GLboolean Debug; /**< defaults off */ }; @@ -2184,6 +2028,7 @@ struct gl_shader_state GLboolean EmitComments; /**< Annotated instructions */ void *MemPool; GLbitfield Flags; /**< Mask of GLSL_x flags */ + struct gl_sl_pragmas DefaultPragmas; /**< Default #pragma settings */ }; @@ -2197,18 +2042,8 @@ struct gl_shared_state struct _mesa_HashTable *DisplayList; /**< Display lists hash table */ struct _mesa_HashTable *TexObjects; /**< Texture objects hash table */ - /** - * \name Default texture objects (shared by all multi-texture units) - */ - /*@{*/ - struct gl_texture_object *Default1D; - struct gl_texture_object *Default2D; - struct gl_texture_object *Default3D; - struct gl_texture_object *DefaultCubeMap; - struct gl_texture_object *DefaultRect; - struct gl_texture_object *Default1DArray; - struct gl_texture_object *Default2DArray; - /*@}*/ + /** Default texture objects (shared by all texture units) */ + struct gl_texture_object *DefaultTex[NUM_TEXTURE_TARGETS]; /** * \name Thread safety and statechange notification for texture @@ -2372,9 +2207,8 @@ struct gl_renderbuffer /** - * A renderbuffer attachment point points to either a texture object - * (and specifies a mipmap level, cube face or 3D texture slice) or - * points to a renderbuffer. + * A renderbuffer attachment points to either a texture object (and specifies + * a mipmap level, cube face or 3D texture slice) or points to a renderbuffer. */ struct gl_renderbuffer_attachment { @@ -2406,14 +2240,24 @@ struct gl_renderbuffer_attachment */ struct gl_framebuffer { - _glthread_Mutex Mutex; /**< for thread safety */ - GLuint Name; /* if zero, this is a window system framebuffer */ + _glthread_Mutex Mutex; /**< for thread safety */ + /** + * If zero, this is a window system framebuffer. If non-zero, this + * is a FBO framebuffer; note that for some devices (i.e. those with + * a natural pixel coordinate system for FBOs that differs from the + * OpenGL/Mesa coordinate system), this means that the viewport, + * polygon face orientation, and polygon stipple will have to be inverted. + */ + GLuint Name; + GLint RefCount; GLboolean DeletePending; - GLvisual Visual; /**< The framebuffer's visual. - Immutable if this is a window system buffer. - Computed from attachments if user-made FBO. */ + /** + * The framebuffer's visual. Immutable if this is a window system buffer. + * Computed from attachments if user-made FBO. + */ + GLvisual Visual; GLboolean Initialized; @@ -2432,9 +2276,10 @@ struct gl_framebuffer GLfloat _MRD; /**< minimum resolvable difference in Z values */ /*@}*/ - GLenum _Status; /* One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */ + /** One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */ + GLenum _Status; - /* Array of all renderbuffer attachments, indexed by BUFFER_* tokens. */ + /** Array of all renderbuffer attachments, indexed by BUFFER_* tokens. */ struct gl_renderbuffer_attachment Attachment[BUFFER_COUNT]; /* In unextended OpenGL these vars are part of the GL_COLOR_BUFFER @@ -2496,52 +2341,60 @@ struct gl_program_constants */ struct gl_constants { - GLint MaxTextureLevels; /**< Maximum number of allowed mipmap levels. */ - GLint Max3DTextureLevels; /**< Maximum number of allowed mipmap levels for 3D texture targets. */ - GLint MaxCubeTextureLevels; /**< Maximum number of allowed mipmap levels for GL_ARB_texture_cube_map */ - GLint MaxArrayTextureLayers; /**< Maximum number of layers in an array texture. */ - GLint MaxTextureRectSize; /* GL_NV_texture_rectangle */ + GLint MaxTextureLevels; /**< Max mipmap levels. */ + GLint Max3DTextureLevels; /**< Max mipmap levels for 3D textures */ + GLint MaxCubeTextureLevels; /**< Max mipmap levels for cube textures */ + GLint MaxArrayTextureLayers; /**< Max layers in array textures */ + GLint MaxTextureRectSize; /**< Max rectangle texture size, in pixes */ GLuint MaxTextureCoordUnits; GLuint MaxTextureImageUnits; - GLuint MaxTextureUnits; /**< = MIN(CoordUnits, ImageUnits) */ - GLfloat MaxTextureMaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ - GLfloat MaxTextureLodBias; /**< GL_EXT_texture_lod_bias */ + GLuint MaxVertexTextureImageUnits; + GLuint MaxTextureUnits; /**< = MIN(CoordUnits, ImageUnits) */ + GLfloat MaxTextureMaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ + GLfloat MaxTextureLodBias; /**< GL_EXT_texture_lod_bias */ + GLuint MaxArrayLockSize; + GLint SubPixelBits; - GLfloat MinPointSize, MaxPointSize; /* aliased */ - GLfloat MinPointSizeAA, MaxPointSizeAA; /* antialiased */ + + GLfloat MinPointSize, MaxPointSize; /**< aliased */ + GLfloat MinPointSizeAA, MaxPointSizeAA; /**< antialiased */ GLfloat PointSizeGranularity; - GLfloat MinLineWidth, MaxLineWidth; /* aliased */ - GLfloat MinLineWidthAA, MaxLineWidthAA; /* antialiased */ + GLfloat MinLineWidth, MaxLineWidth; /**< aliased */ + GLfloat MinLineWidthAA, MaxLineWidthAA; /**< antialiased */ GLfloat LineWidthGranularity; + GLuint MaxColorTableSize; GLuint MaxConvolutionWidth; GLuint MaxConvolutionHeight; + GLuint MaxClipPlanes; GLuint MaxLights; - GLfloat MaxShininess; /* GL_NV_light_max_exponent */ - GLfloat MaxSpotExponent; /* GL_NV_light_max_exponent */ + GLfloat MaxShininess; /**< GL_NV_light_max_exponent */ + GLfloat MaxSpotExponent; /**< GL_NV_light_max_exponent */ + GLuint MaxViewportWidth, MaxViewportHeight; - struct gl_program_constants VertexProgram; /* GL_ARB_vertex_program */ - struct gl_program_constants FragmentProgram; /* GL_ARB_fragment_program */ - /* shared by vertex and fragment program: */ + + struct gl_program_constants VertexProgram; /**< GL_ARB_vertex_program */ + struct gl_program_constants FragmentProgram; /**< GL_ARB_fragment_program */ GLuint MaxProgramMatrices; GLuint MaxProgramMatrixStackDepth; - /* vertex array / buffer object bounds checking */ + + /** vertex array / buffer object bounds checking */ GLboolean CheckArrayBounds; - /* GL_ARB_draw_buffers */ - GLuint MaxDrawBuffers; - /* GL_OES_read_format */ - GLenum ColorReadFormat; - GLenum ColorReadType; - /* GL_EXT_framebuffer_object */ - GLuint MaxColorAttachments; - GLuint MaxRenderbufferSize; - /* GL_ARB_vertex_shader */ - GLuint MaxVertexTextureImageUnits; - GLuint MaxVarying; /**< Number of float[4] vectors */ - /* GL_ARB_framebuffer_object */ - GLuint MaxSamples; + + GLuint MaxDrawBuffers; /**< GL_ARB_draw_buffers */ + + GLenum ColorReadFormat; /**< GL_OES_read_format */ + GLenum ColorReadType; /**< GL_OES_read_format */ + + GLuint MaxColorAttachments; /**< GL_EXT_framebuffer_object */ + GLuint MaxRenderbufferSize; /**< GL_EXT_framebuffer_object */ + GLuint MaxSamples; /**< GL_ARB_framebuffer_object */ + + GLuint MaxVarying; /**< Number of float[4] varying parameters */ + + GLbitfield SupportedBumpUnits; /**> units supporting GL_ATI_envmap_bumpmap as targets */ }; @@ -2551,12 +2404,6 @@ struct gl_constants */ struct gl_extensions { - /** - * \name Flags to quickly test if certain extensions are available. - * - * Not every extension needs to have such a flag, but it's encouraged. - */ - /*@{*/ GLboolean dummy; /* don't remove this! */ GLboolean ARB_depth_texture; GLboolean ARB_draw_buffers; @@ -2644,6 +2491,7 @@ struct gl_extensions GLboolean APPLE_client_storage; GLboolean APPLE_packed_pixels; GLboolean APPLE_vertex_array_object; + GLboolean ATI_envmap_bumpmap; GLboolean ATI_texture_mirror_once; GLboolean ATI_texture_env_combine3; GLboolean ATI_fragment_shader; @@ -2652,7 +2500,6 @@ struct gl_extensions GLboolean IBM_multimode_draw_arrays; GLboolean MESA_pack_invert; GLboolean MESA_packed_depth_stencil; - GLboolean MESA_program_debug; GLboolean MESA_resize_buffers; GLboolean MESA_ycbcr_texture; GLboolean MESA_texture_array; @@ -2674,8 +2521,7 @@ struct gl_extensions GLboolean SGIS_texture_lod; GLboolean TDFX_texture_compression_FXT1; GLboolean S3_s3tc; - /*@}*/ - /* The extension string */ + /** The extension string */ const GLubyte *String; }; @@ -2695,7 +2541,6 @@ struct gl_matrix_stack /** * \name Bits for image transfer operations - * * \sa __GLcontextRec::ImageTransferState. */ /*@{*/ @@ -2710,7 +2555,7 @@ struct gl_matrix_stack #define IMAGE_POST_COLOR_MATRIX_COLOR_TABLE_BIT 0x100 #define IMAGE_HISTOGRAM_BIT 0x200 #define IMAGE_MIN_MAX_BIT 0x400 -#define IMAGE_CLAMP_BIT 0x800 /* extra */ +#define IMAGE_CLAMP_BIT 0x800 /** Pixel Transfer ops up to convolution */ @@ -3073,21 +2918,15 @@ struct __GLcontextRec struct gl_color_table ColorTable[COLORTABLE_MAX]; struct gl_color_table ProxyColorTable[COLORTABLE_MAX]; -#if 0 - struct gl_color_table PostConvolutionColorTable; - struct gl_color_table ProxyPostConvolutionColorTable; - struct gl_color_table PostColorMatrixColorTable; - struct gl_color_table ProxyPostColorMatrixColorTable; -#endif - struct gl_program_state Program; /**< for vertex or fragment progs */ - struct gl_vertex_program_state VertexProgram; /**< GL_ARB/NV_vertex_program */ - struct gl_fragment_program_state FragmentProgram; /**< GL_ARB/NV_vertex_program */ - struct gl_ati_fragment_shader_state ATIFragmentShader; /**< GL_ATI_fragment_shader */ - - struct gl_query_state Query; /**< GL_ARB_occlusion_query */ + struct gl_program_state Program; /**< general program state */ + struct gl_vertex_program_state VertexProgram; + struct gl_fragment_program_state FragmentProgram; + struct gl_ati_fragment_shader_state ATIFragmentShader; struct gl_shader_state Shader; /**< GLSL shader object state */ + + struct gl_query_state Query; /**< occlusion, timer queries */ /*@}*/ #if FEATURE_EXT_framebuffer_object @@ -3111,9 +2950,8 @@ struct __GLcontextRec GLfloat _ModelViewInvScale; GLboolean _NeedEyeCoords; GLboolean _ForceEyeCoords; - GLenum _CurrentProgram; /* currently executing program */ - GLuint TextureStateTimestamp; /* detect changes to shared state */ + GLuint TextureStateTimestamp; /**< detect changes to shared state */ struct gl_shine_tab *_ShineTable[2]; /**< Active shine tables */ struct gl_shine_tab *_ShineTabList; /**< MRU list of inactive shine tables */ @@ -3193,7 +3031,4 @@ enum _debug -#define Elements(x) sizeof(x)/sizeof(*(x)) - - -#endif /* TYPES_H */ +#endif /* MTYPES_H */ diff --git a/src/mesa/main/shaders.c b/src/mesa/main/shaders.c index 7491d00c35..be93b45a7d 100644 --- a/src/mesa/main/shaders.c +++ b/src/mesa/main/shaders.c @@ -374,6 +374,43 @@ _mesa_LinkProgramARB(GLhandleARB programObj) } + +/** + * Read shader source code from a file. + * Useful for debugging to override an app's shader. + */ +static GLcharARB * +_mesa_read_shader(const char *fname) +{ + const int max = 50*1000; + FILE *f = fopen(fname, "r"); + GLcharARB *buffer, *shader; + int len; + + if (!f) { + _mesa_fprintf(stderr, "Unable to open shader file %s\n", fname); + return NULL; + } + + buffer = (char *) malloc(max); + len = fread(buffer, 1, max, f); + buffer[len] = 0; + + fclose(f); + + shader = _mesa_strdup(buffer); + free(buffer); + + if (0) { + _mesa_fprintf(stderr, "Read shader %s:\n", fname); + _mesa_fprintf(stderr, "%s\n", shader); + } + + return shader; +} + + + /** * Called via glShaderSource() and glShaderSourceARB() API functions. * Basically, concatenate the source code strings into one long string @@ -438,6 +475,20 @@ _mesa_ShaderSourceARB(GLhandleARB shaderObj, GLsizei count, source[totalLength - 1] = '\0'; source[totalLength - 2] = '\0'; +#if 0 + if (0) { + GLcharARB *newSource; + + newSource = _mesa_read_shader("newshader.frag"); + if (newSource) { + _mesa_free(source); + source = newSource; + } + } +#else + (void) _mesa_read_shader; +#endif + ctx->Driver.ShaderSource(ctx, shaderObj, source); _mesa_free(offsets); diff --git a/src/mesa/main/shared.c b/src/mesa/main/shared.c new file mode 100644 index 0000000000..fa45e466b7 --- /dev/null +++ b/src/mesa/main/shared.c @@ -0,0 +1,356 @@ +/* + * Mesa 3-D graphics library + * Version: 7.5 + * + * 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 shared.c + * Shared-context state + */ + + + +#include "imports.h" +#include "mtypes.h" +#include "hash.h" +#include "arrayobj.h" +#include "shared.h" +#include "shader/program.h" +#include "shader/shader_api.h" +#if FEATURE_dlist +#include "dlist.h" +#endif +#if FEATURE_ATI_fragment_shader +#include "shader/atifragshader.h" +#endif + + +/** + * Allocate and initialize a shared context state structure. + * Initializes the display list, texture objects and vertex programs hash + * tables, allocates the texture objects. If it runs out of memory, frees + * everything already allocated before returning NULL. + * + * \return pointer to a gl_shared_state structure on success, or NULL on + * failure. + */ +struct gl_shared_state * +_mesa_alloc_shared_state(GLcontext *ctx) +{ + struct gl_shared_state *shared; + GLuint i; + + shared = CALLOC_STRUCT(gl_shared_state); + if (!shared) + return NULL; + + _glthread_INIT_MUTEX(shared->Mutex); + + shared->DisplayList = _mesa_NewHashTable(); + shared->TexObjects = _mesa_NewHashTable(); + shared->Programs = _mesa_NewHashTable(); + +#if FEATURE_ARB_vertex_program + shared->DefaultVertexProgram = (struct gl_vertex_program *) + ctx->Driver.NewProgram(ctx, GL_VERTEX_PROGRAM_ARB, 0); +#endif + +#if FEATURE_ARB_fragment_program + shared->DefaultFragmentProgram = (struct gl_fragment_program *) + ctx->Driver.NewProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, 0); +#endif + +#if FEATURE_ATI_fragment_shader + shared->ATIShaders = _mesa_NewHashTable(); + shared->DefaultFragmentShader = _mesa_new_ati_fragment_shader(ctx, 0); +#endif + +#if FEATURE_ARB_shader_objects + shared->ShaderObjects = _mesa_NewHashTable(); +#endif + +#if FEATURE_ARB_vertex_buffer_object || FEATURE_ARB_pixel_buffer_object + shared->BufferObjects = _mesa_NewHashTable(); +#endif + + shared->ArrayObjects = _mesa_NewHashTable(); + + /* Create default texture objects */ + for (i = 0; i < NUM_TEXTURE_TARGETS; i++) { + /* NOTE: the order of these enums matches the TEXTURE_x_INDEX values */ + static const GLenum targets[NUM_TEXTURE_TARGETS] = { + GL_TEXTURE_2D_ARRAY_EXT, + GL_TEXTURE_1D_ARRAY_EXT, + GL_TEXTURE_CUBE_MAP, + GL_TEXTURE_3D, + GL_TEXTURE_RECTANGLE_NV, + GL_TEXTURE_2D, + GL_TEXTURE_1D + }; + shared->DefaultTex[i] = ctx->Driver.NewTextureObject(ctx, 0, targets[i]); + } + + /* sanity check */ + assert(shared->DefaultTex[TEXTURE_1D_INDEX]->RefCount == 1); + + /* Mutex and timestamp for texobj state validation */ + _glthread_INIT_MUTEX(shared->TexMutex); + shared->TextureStateStamp = 0; + +#if FEATURE_EXT_framebuffer_object + shared->FrameBuffers = _mesa_NewHashTable(); + shared->RenderBuffers = _mesa_NewHashTable(); +#endif + + return shared; +} + + +/** + * Callback for deleting a display list. Called by _mesa_HashDeleteAll(). + */ +static void +delete_displaylist_cb(GLuint id, void *data, void *userData) +{ +#if FEATURE_dlist + struct gl_display_list *list = (struct gl_display_list *) data; + GLcontext *ctx = (GLcontext *) userData; + _mesa_delete_list(ctx, list); +#endif +} + + +/** + * Callback for deleting a texture object. Called by _mesa_HashDeleteAll(). + */ +static void +delete_texture_cb(GLuint id, void *data, void *userData) +{ + struct gl_texture_object *texObj = (struct gl_texture_object *) data; + GLcontext *ctx = (GLcontext *) userData; + ctx->Driver.DeleteTexture(ctx, texObj); +} + + +/** + * Callback for deleting a program object. Called by _mesa_HashDeleteAll(). + */ +static void +delete_program_cb(GLuint id, void *data, void *userData) +{ + struct gl_program *prog = (struct gl_program *) data; + GLcontext *ctx = (GLcontext *) userData; + ASSERT(prog->RefCount == 1); /* should only be referenced by hash table */ + prog->RefCount = 0; /* now going away */ + ctx->Driver.DeleteProgram(ctx, prog); +} + + +#if FEATURE_ATI_fragment_shader +/** + * Callback for deleting an ATI fragment shader object. + * Called by _mesa_HashDeleteAll(). + */ +static void +delete_fragshader_cb(GLuint id, void *data, void *userData) +{ + struct ati_fragment_shader *shader = (struct ati_fragment_shader *) data; + GLcontext *ctx = (GLcontext *) userData; + _mesa_delete_ati_fragment_shader(ctx, shader); +} +#endif + + +/** + * Callback for deleting a buffer object. Called by _mesa_HashDeleteAll(). + */ +static void +delete_bufferobj_cb(GLuint id, void *data, void *userData) +{ + struct gl_buffer_object *bufObj = (struct gl_buffer_object *) data; + GLcontext *ctx = (GLcontext *) userData; + ctx->Driver.DeleteBuffer(ctx, bufObj); +} + + +/** + * Callback for deleting an array object. Called by _mesa_HashDeleteAll(). + */ +static void +delete_arrayobj_cb(GLuint id, void *data, void *userData) +{ + struct gl_array_object *arrayObj = (struct gl_array_object *) data; + GLcontext *ctx = (GLcontext *) userData; + _mesa_delete_array_object(ctx, arrayObj); +} + + +/** + * Callback for freeing shader program data. Call it before delete_shader_cb + * to avoid memory access error. + */ +static void +free_shader_program_data_cb(GLuint id, void *data, void *userData) +{ + GLcontext *ctx = (GLcontext *) userData; + struct gl_shader_program *shProg = (struct gl_shader_program *) data; + + if (shProg->Type == GL_SHADER_PROGRAM_MESA) { + _mesa_free_shader_program_data(ctx, shProg); + } +} + + +/** + * Callback for deleting shader and shader programs objects. + * Called by _mesa_HashDeleteAll(). + */ +static void +delete_shader_cb(GLuint id, void *data, void *userData) +{ + GLcontext *ctx = (GLcontext *) userData; + struct gl_shader *sh = (struct gl_shader *) data; + if (sh->Type == GL_FRAGMENT_SHADER || sh->Type == GL_VERTEX_SHADER) { + _mesa_free_shader(ctx, sh); + } + else { + struct gl_shader_program *shProg = (struct gl_shader_program *) data; + ASSERT(shProg->Type == GL_SHADER_PROGRAM_MESA); + _mesa_free_shader_program(ctx, shProg); + } +} + + +/** + * Callback for deleting a framebuffer object. Called by _mesa_HashDeleteAll() + */ +static void +delete_framebuffer_cb(GLuint id, void *data, void *userData) +{ + struct gl_framebuffer *fb = (struct gl_framebuffer *) data; + /* The fact that the framebuffer is in the hashtable means its refcount + * is one, but we're removing from the hashtable now. So clear refcount. + */ + /*assert(fb->RefCount == 1);*/ + fb->RefCount = 0; + + /* NOTE: Delete should always be defined but there are two reports + * of it being NULL (bugs 13507, 14293). Work-around for now. + */ + if (fb->Delete) + fb->Delete(fb); +} + + +/** + * Callback for deleting a renderbuffer object. Called by _mesa_HashDeleteAll() + */ +static void +delete_renderbuffer_cb(GLuint id, void *data, void *userData) +{ + struct gl_renderbuffer *rb = (struct gl_renderbuffer *) data; + rb->RefCount = 0; /* see comment for FBOs above */ + if (rb->Delete) + rb->Delete(rb); +} + + +/** + * Deallocate a shared state object and all children structures. + * + * \param ctx GL context. + * \param shared shared state pointer. + * + * Frees the display lists, the texture objects (calling the driver texture + * deletion callback to free its private data) and the vertex programs, as well + * as their hash tables. + * + * \sa alloc_shared_state(). + */ +void +_mesa_free_shared_state(GLcontext *ctx, struct gl_shared_state *shared) +{ + GLuint i; + + /* + * Free display lists + */ + _mesa_HashDeleteAll(shared->DisplayList, delete_displaylist_cb, ctx); + _mesa_DeleteHashTable(shared->DisplayList); + +#if FEATURE_ARB_shader_objects + _mesa_HashWalk(shared->ShaderObjects, free_shader_program_data_cb, ctx); + _mesa_HashDeleteAll(shared->ShaderObjects, delete_shader_cb, ctx); + _mesa_DeleteHashTable(shared->ShaderObjects); +#endif + + _mesa_HashDeleteAll(shared->Programs, delete_program_cb, ctx); + _mesa_DeleteHashTable(shared->Programs); + + _mesa_HashDeleteAll(shared->ArrayObjects, delete_arrayobj_cb, ctx); + _mesa_DeleteHashTable(shared->ArrayObjects); + +#if FEATURE_ARB_vertex_program + _mesa_reference_vertprog(ctx, &shared->DefaultVertexProgram, NULL); +#endif + +#if FEATURE_ARB_fragment_program + _mesa_reference_fragprog(ctx, &shared->DefaultFragmentProgram, NULL); +#endif + +#if FEATURE_ATI_fragment_shader + _mesa_HashDeleteAll(shared->ATIShaders, delete_fragshader_cb, ctx); + _mesa_DeleteHashTable(shared->ATIShaders); + _mesa_delete_ati_fragment_shader(ctx, shared->DefaultFragmentShader); +#endif + +#if FEATURE_ARB_vertex_buffer_object || FEATURE_ARB_pixel_buffer_object + _mesa_HashDeleteAll(shared->BufferObjects, delete_bufferobj_cb, ctx); + _mesa_DeleteHashTable(shared->BufferObjects); +#endif + +#if FEATURE_EXT_framebuffer_object + _mesa_HashDeleteAll(shared->FrameBuffers, delete_framebuffer_cb, ctx); + _mesa_DeleteHashTable(shared->FrameBuffers); + _mesa_HashDeleteAll(shared->RenderBuffers, delete_renderbuffer_cb, ctx); + _mesa_DeleteHashTable(shared->RenderBuffers); +#endif + + /* + * Free texture objects (after FBOs since some textures might have + * been bound to FBOs). + */ + ASSERT(ctx->Driver.DeleteTexture); + /* the default textures */ + for (i = 0; i < NUM_TEXTURE_TARGETS; i++) { + ctx->Driver.DeleteTexture(ctx, shared->DefaultTex[i]); + } + + /* all other textures */ + _mesa_HashDeleteAll(shared->TexObjects, delete_texture_cb, ctx); + _mesa_DeleteHashTable(shared->TexObjects); + + _glthread_DESTROY_MUTEX(shared->Mutex); + _glthread_DESTROY_MUTEX(shared->TexMutex); + + _mesa_free(shared); +} diff --git a/src/mesa/x86/x86.h b/src/mesa/main/shared.h index 97651ec6ee..e59177e968 100644 --- a/src/mesa/x86/x86.h +++ b/src/mesa/main/shared.h @@ -1,9 +1,8 @@ - /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 7.5 * - * Copyright (C) 1999-2001 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"), @@ -23,13 +22,16 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* - * Intel x86 assembly code by Josh Vanderhoof - */ +#ifndef SHARED_H +#define SHARED_H + + +struct gl_shared_state * +_mesa_alloc_shared_state(GLcontext *ctx); + -#ifndef __X86_H__ -#define __X86_H__ +void +_mesa_free_shared_state(GLcontext *ctx, struct gl_shared_state *shared); -extern void _mesa_init_x86_transform_asm( void ); #endif diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c index 0a39279bff..cc37d63636 100644 --- a/src/mesa/main/state.c +++ b/src/mesa/main/state.c @@ -49,6 +49,7 @@ #include "texenvprogram.h" #include "texobj.h" #include "texstate.h" +#include "viewport.h" static void @@ -202,13 +203,17 @@ update_program_enables(GLcontext *ctx) * * This function needs to be called after texture state validation in case * we're generating a fragment program from fixed-function texture state. + * + * \return bitfield which will indicate _NEW_PROGRAM state if a new vertex + * or fragment program is being used. */ -static void +static GLbitfield update_program(GLcontext *ctx) { const struct gl_shader_program *shProg = ctx->Shader.CurrentProgram; const struct gl_vertex_program *prevVP = ctx->VertexProgram._Current; const struct gl_fragment_program *prevFP = ctx->FragmentProgram._Current; + GLbitfield new_state = 0x0; /* * Set the ctx->VertexProgram._Current and ctx->FragmentProgram._Current @@ -278,15 +283,23 @@ update_program(GLcontext *ctx) /* Let the driver know what's happening: */ - if (ctx->FragmentProgram._Current != prevFP && ctx->Driver.BindProgram) { - ctx->Driver.BindProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, - (struct gl_program *) ctx->FragmentProgram._Current); + if (ctx->FragmentProgram._Current != prevFP) { + new_state |= _NEW_PROGRAM; + if (ctx->Driver.BindProgram) { + ctx->Driver.BindProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, + (struct gl_program *) ctx->FragmentProgram._Current); + } } - if (ctx->VertexProgram._Current != prevVP && ctx->Driver.BindProgram) { - ctx->Driver.BindProgram(ctx, GL_VERTEX_PROGRAM_ARB, - (struct gl_program *) ctx->VertexProgram._Current); + if (ctx->VertexProgram._Current != prevVP) { + new_state |= _NEW_PROGRAM; + if (ctx->Driver.BindProgram) { + ctx->Driver.BindProgram(ctx, GL_VERTEX_PROGRAM_ARB, + (struct gl_program *) ctx->VertexProgram._Current); + } } + + return new_state; } @@ -447,6 +460,7 @@ _mesa_update_state_locked( GLcontext *ctx ) { GLbitfield new_state = ctx->NewState; GLbitfield prog_flags = _NEW_PROGRAM; + GLbitfield new_prog_state = 0x0; if (new_state == _NEW_CURRENT_ATTRIB) goto out; @@ -490,7 +504,7 @@ _mesa_update_state_locked( GLcontext *ctx ) if (new_state & _NEW_LIGHT) _mesa_update_lighting( ctx ); - if (new_state & _NEW_STENCIL) + if (new_state & (_NEW_STENCIL | _NEW_BUFFERS)) _mesa_update_stencil( ctx ); #if FEATURE_pixel_transfer @@ -531,8 +545,13 @@ _mesa_update_state_locked( GLcontext *ctx ) if (new_state & _MESA_NEW_NEED_EYE_COORDS) _mesa_update_tnl_spaces( ctx, new_state ); - if (new_state & prog_flags) - update_program( ctx ); + if (new_state & prog_flags) { + /* When we generate programs from fixed-function vertex/fragment state + * this call may generate/bind a new program. If so, we need to + * propogate the _NEW_PROGRAM flag to the driver. + */ + new_prog_state |= update_program( ctx ); + } /* * Give the driver a chance to act upon the new_state flags. @@ -544,7 +563,7 @@ _mesa_update_state_locked( GLcontext *ctx ) * Driver.UpdateState() has to call FLUSH_VERTICES(). (fixed?) */ out: - new_state = ctx->NewState; + new_state = ctx->NewState | new_prog_state; ctx->NewState = 0; ctx->Driver.UpdateState(ctx, new_state); ctx->Array.NewState = 0; diff --git a/src/mesa/main/stencil.c b/src/mesa/main/stencil.c index b4ea9978d8..15c98e2015 100644 --- a/src/mesa/main/stencil.c +++ b/src/mesa/main/stencil.c @@ -27,6 +27,23 @@ * \file stencil.c * Stencil operations. * + * Note: There's some conflict between GL_EXT_stencil_two_side and + * OpenGL 2.0's two-sided stencil feature. + * + * With GL_EXT_stencil_two_side, calling glStencilOp/Func/Mask() only the + * front OR back face state (as set by glActiveStencilFaceEXT) is set. + * + * But with OpenGL 2.0, calling glStencilOp/Func/Mask() sets BOTH the + * front AND back state. + * + * Also, note that GL_ATI_separate_stencil is different as well: + * glStencilFuncSeparateATI(GLenum frontfunc, GLenum backfunc, ...) vs. + * glStencilFuncSeparate(GLenum face, GLenum func, ...). + * + * This problem is solved by keeping three sets of stencil state: + * state[0] = GL_FRONT state. + * state[1] = OpenGL 2.0 / GL_ATI_separate_stencil GL_BACK state. + * state[2] = GL_EXT_stencil_two_side GL_BACK state. */ @@ -519,7 +536,11 @@ _mesa_update_stencil(GLcontext *ctx) { const GLint face = ctx->Stencil._BackFace; - ctx->Stencil._TestTwoSide = + ctx->Stencil._Enabled = (ctx->Stencil.Enabled && + ctx->DrawBuffer->Visual.stencilBits > 0); + + ctx->Stencil._TestTwoSide = + ctx->Stencil._Enabled && (ctx->Stencil.Function[0] != ctx->Stencil.Function[face] || ctx->Stencil.FailFunc[0] != ctx->Stencil.FailFunc[face] || ctx->Stencil.ZPassFunc[0] != ctx->Stencil.ZPassFunc[face] || @@ -542,7 +563,7 @@ _mesa_init_stencil(GLcontext *ctx) { ctx->Stencil.Enabled = GL_FALSE; ctx->Stencil.TestTwoSide = GL_FALSE; - ctx->Stencil.ActiveFace = 0; /* 0 = GL_FRONT, 1 = GL_BACK */ + ctx->Stencil.ActiveFace = 0; /* 0 = GL_FRONT, 2 = GL_BACK */ ctx->Stencil.Function[0] = GL_ALWAYS; ctx->Stencil.Function[1] = GL_ALWAYS; ctx->Stencil.Function[2] = GL_ALWAYS; @@ -565,4 +586,5 @@ _mesa_init_stencil(GLcontext *ctx) ctx->Stencil.WriteMask[1] = ~0U; ctx->Stencil.WriteMask[2] = ~0U; ctx->Stencil.Clear = 0; + ctx->Stencil._BackFace = 1; } diff --git a/src/mesa/main/texenv.c b/src/mesa/main/texenv.c index 097923182a..c2960fc820 100644 --- a/src/mesa/main/texenv.c +++ b/src/mesa/main/texenv.c @@ -35,7 +35,6 @@ #include "main/enums.h" #include "main/macros.h" #include "main/texenv.h" -#include "math/m_xform.h" #define TE_ERROR(errCode, msg, value) \ @@ -143,7 +142,11 @@ set_combiner_mode(GLcontext *ctx, case GL_MODULATE_ADD_ATI: case GL_MODULATE_SIGNED_ADD_ATI: case GL_MODULATE_SUBTRACT_ATI: - legal =ctx->Extensions.ATI_texture_env_combine3; + legal = ctx->Extensions.ATI_texture_env_combine3; + break; + case GL_BUMP_ENVMAP_ATI: + legal = (ctx->Extensions.ATI_envmap_bumpmap && + pname == GL_COMBINE_RGB); break; default: legal = GL_FALSE; @@ -501,6 +504,26 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param ) case GL_ALPHA_SCALE: set_combiner_scale(ctx, texUnit, pname, param[0]); break; + case GL_BUMP_TARGET_ATI: + if (!ctx->Extensions.ATI_envmap_bumpmap) { + _mesa_error( ctx, GL_INVALID_ENUM, "glTexEnv(pname=0x%x)", pname ); + return; + } + if (((GLenum) (GLint) param[0] < GL_TEXTURE0) || + ((GLenum) (GLint) param[0] > GL_TEXTURE31)) { + /* spec doesn't say this but it seems logical */ + _mesa_error( ctx, GL_INVALID_ENUM, "glTexEnv(param=0x%x)", (GLenum) (GLint) param[0]); + return; + } + if (!((1 << ((GLenum) (GLint) param[0] - GL_TEXTURE0)) & ctx->Const.SupportedBumpUnits)) { + _mesa_error( ctx, GL_INVALID_VALUE, "glTexEnv(param=0x%x)", (GLenum) (GLint) param[0]); + return; + } + else { + FLUSH_VERTICES(ctx, _NEW_TEXTURE); + texUnit->BumpTarget = (GLenum) (GLint) param[0]; + } + break; default: _mesa_error( ctx, GL_INVALID_ENUM, "glTexEnv(pname)" ); return; @@ -736,6 +759,16 @@ get_texenvi(GLcontext *ctx, const struct gl_texture_unit *texUnit, _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)"); } break; + case GL_BUMP_TARGET_ATI: + /* spec doesn't say so, but I think this should be queryable */ + if (ctx->Extensions.ATI_envmap_bumpmap) { + return texUnit->BumpTarget; + } + else { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)"); + } + break; + default: ; } @@ -875,4 +908,142 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params ) } } +/* why does ATI_envmap_bumpmap require new entrypoints? Should just + reuse TexEnv ones... */ +void GLAPIENTRY +_mesa_TexBumpParameterivATI( GLenum pname, const GLint *param ) +{ + GLfloat p[4]; + if (pname == GL_BUMP_ROT_MATRIX_ATI) { + /* hope that conversion is correct here */ + p[0] = INT_TO_FLOAT( param[0] ); + p[1] = INT_TO_FLOAT( param[1] ); + p[2] = INT_TO_FLOAT( param[2] ); + p[3] = INT_TO_FLOAT( param[3] ); + } + else { + p[0] = (GLfloat) param[0]; + p[1] = p[2] = p[3] = 0; /* init to zero, just to be safe */ + } + _mesa_TexBumpParameterfvATI( pname, p ); +} + +void GLAPIENTRY +_mesa_TexBumpParameterfvATI( GLenum pname, const GLfloat *param ) +{ + struct gl_texture_unit *texUnit; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); + + /* should return error if extension not supported? */ + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + + if (pname == GL_BUMP_ROT_MATRIX_ATI) { + if (TEST_EQ_4V(param, texUnit->RotMatrix)) + return; + FLUSH_VERTICES(ctx, _NEW_TEXTURE); + COPY_4FV(texUnit->RotMatrix, param); + } + else { + _mesa_error( ctx, GL_INVALID_ENUM, "glTexBumpParameter(pname)" ); + return; + } + /* Drivers might want to know about this, instead of dedicated function + just shove it into TexEnv where it really belongs anyway */ + if (ctx->Driver.TexEnv) { + (*ctx->Driver.TexEnv)( ctx, 0, pname, param ); + } +} + +void GLAPIENTRY +_mesa_GetTexBumpParameterivATI( GLenum pname, GLint *param ) +{ + const struct gl_texture_unit *texUnit; + GLint i; + GLint temp = 0; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); + + /* should return error if extension not supported? */ + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + + if (pname == GL_BUMP_ROT_MATRIX_SIZE_ATI) { + /* spec leaves open to support larger matrices. + Don't think anyone would ever want to use it + (and apps almost certainly would not understand it and + thus fail to submit matrices correctly) so hardcode this. */ + *param = 4; + } + else if (pname == GL_BUMP_ROT_MATRIX_ATI) { + /* hope that conversion is correct here */ + param[0] = FLOAT_TO_INT(texUnit->RotMatrix[0]); + param[1] = FLOAT_TO_INT(texUnit->RotMatrix[1]); + param[2] = FLOAT_TO_INT(texUnit->RotMatrix[2]); + param[3] = FLOAT_TO_INT(texUnit->RotMatrix[3]); + } + else if (pname == GL_BUMP_NUM_TEX_UNITS_ATI) { + for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) { + if (ctx->Const.SupportedBumpUnits & (1 << i)) { + temp++; + } + } + *param = temp; + } + else if (pname == GL_BUMP_TEX_UNITS_ATI) { + for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) { + if (ctx->Const.SupportedBumpUnits & (1 << i)) { + *param++ = i + GL_TEXTURE0; + } + } + } + else { + _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexBumpParameter(pname)" ); + return; + } +} + +void GLAPIENTRY +_mesa_GetTexBumpParameterfvATI( GLenum pname, GLfloat *param ) +{ + const struct gl_texture_unit *texUnit; + GLint i; + GLint temp = 0; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); + + /* should return error if extension not supported? */ + texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; + + if (pname == GL_BUMP_ROT_MATRIX_SIZE_ATI) { + /* spec leaves open to support larger matrices. + Don't think anyone would ever want to use it + (and apps might not understand it) so hardcode this. */ + *param = (GLfloat) 4; + } + else if (pname == GL_BUMP_ROT_MATRIX_ATI) { + param[0] = texUnit->RotMatrix[0]; + param[1] = texUnit->RotMatrix[1]; + param[2] = texUnit->RotMatrix[2]; + param[3] = texUnit->RotMatrix[3]; + } + else if (pname == GL_BUMP_NUM_TEX_UNITS_ATI) { + for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) { + if (ctx->Const.SupportedBumpUnits & (1 << i)) { + temp++; + } + } + *param = (GLfloat) temp; + } + else if (pname == GL_BUMP_TEX_UNITS_ATI) { + for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) { + if (ctx->Const.SupportedBumpUnits & (1 << i)) { + *param++ = (GLfloat) (i + GL_TEXTURE0); + } + } + } + else { + _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexBumpParameter(pname)" ); + return; + } +} diff --git a/src/mesa/main/texenv.h b/src/mesa/main/texenv.h index bdff7fdb82..1e9c5faed7 100644 --- a/src/mesa/main/texenv.h +++ b/src/mesa/main/texenv.h @@ -48,5 +48,16 @@ _mesa_TexEnvi( GLenum target, GLenum pname, GLint param ); extern void GLAPIENTRY _mesa_TexEnviv( GLenum target, GLenum pname, const GLint *param ); +extern void GLAPIENTRY +_mesa_TexBumpParameterivATI( GLenum pname, const GLint *param ); + +extern void GLAPIENTRY +_mesa_TexBumpParameterfvATI( GLenum pname, const GLfloat *param ); + +extern void GLAPIENTRY +_mesa_GetTexBumpParameterivATI( GLenum pname, GLint *param ); + +extern void GLAPIENTRY +_mesa_GetTexBumpParameterfvATI( GLenum pname, GLfloat *param ); #endif /* TEXENV_H */ diff --git a/src/mesa/main/texenvprogram.c b/src/mesa/main/texenvprogram.c index af51a206a5..3fbd119b34 100644 --- a/src/mesa/main/texenvprogram.c +++ b/src/mesa/main/texenvprogram.c @@ -94,11 +94,11 @@ struct state_key { GLuint ScaleShiftA:2; GLuint NumArgsRGB:3; - GLuint ModeRGB:4; + GLuint ModeRGB:5; struct mode_opt OptRGB[MAX_TERMS]; GLuint NumArgsA:3; - GLuint ModeA:4; + GLuint ModeA:5; struct mode_opt OptA[MAX_TERMS]; } unit[8]; }; @@ -194,7 +194,8 @@ static GLuint translate_source( GLenum src ) #define MODE_MODULATE_SUBTRACT_ATI 12 /* r = a0 * a2 - a1 */ #define MODE_ADD_PRODUCTS 13 /* r = a0 * a1 + a2 * a3 */ #define MODE_ADD_PRODUCTS_SIGNED 14 /* r = a0 * a1 + a2 * a3 - 0.5 */ -#define MODE_UNKNOWN 15 +#define MODE_BUMP_ENVMAP_ATI 15 /* special */ +#define MODE_UNKNOWN 16 /** * Translate GL combiner state into a MODE_x value @@ -223,6 +224,7 @@ static GLuint translate_mode( GLenum envMode, GLenum mode ) case GL_MODULATE_ADD_ATI: return MODE_MODULATE_ADD_ATI; case GL_MODULATE_SIGNED_ADD_ATI: return MODE_MODULATE_SIGNED_ADD_ATI; case GL_MODULATE_SUBTRACT_ATI: return MODE_MODULATE_SUBTRACT_ATI; + case GL_BUMP_ENVMAP_ATI: return MODE_BUMP_ENVMAP_ATI; default: assert(0); return MODE_UNKNOWN; @@ -383,7 +385,7 @@ static void make_state_key( GLcontext *ctx, struct state_key *key ) translate_mode(texUnit->EnvMode, texUnit->_CurrentCombine->ModeRGB); key->unit[i].ModeA = translate_mode(texUnit->EnvMode, texUnit->_CurrentCombine->ModeA); - + key->unit[i].ScaleShiftRGB = texUnit->_CurrentCombine->ScaleShiftRGB; key->unit[i].ScaleShiftA = texUnit->_CurrentCombine->ScaleShiftA; @@ -397,8 +399,18 @@ static void make_state_key( GLcontext *ctx, struct state_key *key ) key->unit[i].OptA[j].Source = translate_source(texUnit->_CurrentCombine->SourceA[j]); } + + if (key->unit[i].ModeRGB == MODE_BUMP_ENVMAP_ATI) { + /* requires some special translation */ + key->unit[i].NumArgsRGB = 2; + key->unit[i].ScaleShiftRGB = 0; + key->unit[i].OptRGB[0].Operand = OPR_SRC_COLOR; + key->unit[i].OptRGB[0].Source = SRC_TEXTURE; + key->unit[i].OptRGB[1].Operand = OPR_SRC_COLOR; + key->unit[i].OptRGB[1].Source = texUnit->BumpTarget - GL_TEXTURE0 + SRC_TEXTURE0; + } } - + if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) { key->separate_specular = 1; inputs_referenced |= FRAG_BIT_COL1; @@ -464,6 +476,11 @@ struct texenv_fragment_program { * else undef. */ + struct ureg texcoord_tex[MAX_TEXTURE_COORD_UNITS]; + /* Reg containing texcoord for a texture unit, + * needed for bump mapping, else undef. + */ + struct ureg src_previous; /**< Reg containing color from previous * stage. May need to be decl'd. */ @@ -736,6 +753,7 @@ static struct ureg emit_texld( struct texenv_fragment_program *p, GLuint destmask, GLuint tex_unit, GLuint tex_idx, + GLuint tex_shadow, struct ureg coord ) { struct prog_instruction *inst = emit_op( p, op, @@ -747,6 +765,7 @@ static struct ureg emit_texld( struct texenv_fragment_program *p, inst->TexSrcTarget = tex_idx; inst->TexSrcUnit = tex_unit; + inst->TexShadow = tex_shadow; p->program->Base.NumTexInstructions++; @@ -754,6 +773,7 @@ static struct ureg emit_texld( struct texenv_fragment_program *p, */ reserve_temp(p, dest); +#if 0 /* Is this a texture indirection? */ if ((coord.file == PROGRAM_TEMPORARY && @@ -765,6 +785,7 @@ static struct ureg emit_texld( struct texenv_fragment_program *p, p->alu_temps = 0; assert(0); /* KW: texture env crossbar */ } +#endif return dest; } @@ -1050,6 +1071,10 @@ static struct ureg emit_combine( struct texenv_fragment_program *p, emit_arith( p, OPCODE_SUB, dest, mask, saturate, tmp0, half, undef ); } return dest; + case MODE_BUMP_ENVMAP_ATI: + /* special - not handled here */ + assert(0); + return src[0]; default: assert(0); return src[0]; @@ -1072,6 +1097,10 @@ emit_texenv(struct texenv_fragment_program *p, GLuint unit) if (!key->unit[unit].enabled) { return get_source(p, SRC_PREVIOUS, 0); } + if (key->unit[unit].ModeRGB == MODE_BUMP_ENVMAP_ATI) { + /* this isn't really a env stage delivering a color and handled elsewhere */ + return get_source(p, SRC_PREVIOUS, 0); + } switch (key->unit[unit].ModeRGB) { case MODE_DOT3_RGB_EXT: @@ -1096,7 +1125,7 @@ emit_texenv(struct texenv_fragment_program *p, GLuint unit) rgb_shift) dest = get_temp( p ); else - dest = make_ureg(PROGRAM_OUTPUT, FRAG_RESULT_COLR); + dest = make_ureg(PROGRAM_OUTPUT, FRAG_RESULT_COLOR); /* Emit the RGB and A combine ops */ @@ -1160,22 +1189,35 @@ emit_texenv(struct texenv_fragment_program *p, GLuint unit) static void load_texture( struct texenv_fragment_program *p, GLuint unit ) { if (is_undef(p->src_texture[unit])) { - GLuint dim = p->state->unit[unit].source_index; - struct ureg texcoord = register_input(p, FRAG_ATTRIB_TEX0+unit); + GLuint texTarget = p->state->unit[unit].source_index; + struct ureg texcoord; struct ureg tmp = get_tex_temp( p ); - if (dim == TEXTURE_UNKNOWN_INDEX) + if (is_undef(p->texcoord_tex[unit])) { + texcoord = register_input(p, FRAG_ATTRIB_TEX0+unit); + } + else { + /* might want to reuse this reg for tex output actually */ + texcoord = p->texcoord_tex[unit]; + } + + if (texTarget == TEXTURE_UNKNOWN_INDEX) program_error(p, "TexSrcBit"); /* TODO: Use D0_MASK_XY where possible. */ if (p->state->unit[unit].enabled) { - p->src_texture[unit] = emit_texld( p, OPCODE_TXP, - tmp, WRITEMASK_XYZW, - unit, dim, texcoord ); + GLboolean shadow = GL_FALSE; - if (p->state->unit[unit].shadow) + if (p->state->unit[unit].shadow) { p->program->Base.ShadowSamplers |= 1 << unit; + shadow = GL_TRUE; + } + + p->src_texture[unit] = emit_texld( p, OPCODE_TXP, + tmp, WRITEMASK_XYZW, + unit, texTarget, shadow, + texcoord ); p->program->Base.SamplersUsed |= (1 << unit); /* This identity mapping should already be in place @@ -1226,7 +1268,7 @@ load_texunit_sources( struct texenv_fragment_program *p, int unit ) GLuint i; for (i = 0; i < key->unit[unit].NumArgsRGB; i++) { - load_texenv_source( p, key->unit[unit].OptRGB[i].Source, unit); + load_texenv_source( p, key->unit[unit].OptRGB[i].Source, unit ); } for (i = 0; i < key->unit[unit].NumArgsA; i++) { @@ -1236,6 +1278,40 @@ load_texunit_sources( struct texenv_fragment_program *p, int unit ) return GL_TRUE; } +/** + * Generate instructions for loading bump map textures. + */ +static GLboolean +load_texunit_bumpmap( struct texenv_fragment_program *p, int unit ) +{ + struct state_key *key = p->state; + GLuint bumpedUnitNr = key->unit[unit].OptRGB[1].Source - SRC_TEXTURE0; + struct ureg texcDst, bumpMapRes; + struct ureg constdudvcolor = register_const4f(p, 0.0, 0.0, 0.0, 1.0); + struct ureg texcSrc = register_input(p, FRAG_ATTRIB_TEX0 + bumpedUnitNr); + struct ureg rotMat0 = register_param3( p, STATE_INTERNAL, STATE_ROT_MATRIX_0, unit ); + struct ureg rotMat1 = register_param3( p, STATE_INTERNAL, STATE_ROT_MATRIX_1, unit ); + + load_texenv_source( p, unit + SRC_TEXTURE0, unit ); + + bumpMapRes = get_source(p, key->unit[unit].OptRGB[0].Source, unit); + texcDst = get_tex_temp( p ); + p->texcoord_tex[bumpedUnitNr] = texcDst; + + /* apply rot matrix and add coords to be available in next phase */ + /* dest = (Arg0.xxxx * rotMat0 + Arg1) + (Arg0.yyyy * rotMat1) */ + /* note only 2 coords are affected the rest are left unchanged (mul by 0) */ + emit_arith( p, OPCODE_MAD, texcDst, WRITEMASK_XYZW, 0, + swizzle1(bumpMapRes, SWIZZLE_X), rotMat0, texcSrc ); + emit_arith( p, OPCODE_MAD, texcDst, WRITEMASK_XYZW, 0, + swizzle1(bumpMapRes, SWIZZLE_Y), rotMat1, texcDst ); + + /* move 0,0,0,1 into bumpmap src if someone (crossbar) is foolish + enough to access this later, should optimize away */ + emit_arith( p, OPCODE_MOV, bumpMapRes, WRITEMASK_XYZW, 0, constdudvcolor, undef, undef ); + + return GL_TRUE; +} /** * Generate a new fragment program which implements the context's @@ -1260,7 +1336,7 @@ create_new_program(GLcontext *ctx, struct state_key *key, */ p.program->Base.Instructions = instBuffer; p.program->Base.Target = GL_FRAGMENT_PROGRAM_ARB; - p.program->Base.NumTexIndirections = 1; /* correct? */ + p.program->Base.NumTexIndirections = 1; p.program->Base.NumTexInstructions = 0; p.program->Base.NumAluInstructions = 0; p.program->Base.String = NULL; @@ -1271,10 +1347,12 @@ create_new_program(GLcontext *ctx, struct state_key *key, p.program->Base.Parameters = _mesa_new_parameter_list(); p.program->Base.InputsRead = 0; - p.program->Base.OutputsWritten = 1 << FRAG_RESULT_COLR; + p.program->Base.OutputsWritten = 1 << FRAG_RESULT_COLOR; - for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) + for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) { p.src_texture[unit] = undef; + p.texcoord_tex[unit] = undef; + } p.src_previous = undef; p.half = undef; @@ -1285,6 +1363,16 @@ create_new_program(GLcontext *ctx, struct state_key *key, release_temps(ctx, &p); if (key->enabled_units) { + GLboolean needbumpstage = GL_FALSE; + /* Zeroth pass - bump map textures first */ + for (unit = 0 ; unit < ctx->Const.MaxTextureUnits ; unit++) + if (key->unit[unit].enabled && key->unit[unit].ModeRGB == MODE_BUMP_ENVMAP_ATI) { + needbumpstage = GL_TRUE; + load_texunit_bumpmap( &p, unit ); + } + if (needbumpstage) + p.program->Base.NumTexIndirections++; + /* First pass - to support texture_env_crossbar, first identify * all referenced texture sources and emit texld instructions * for each: @@ -1306,7 +1394,7 @@ create_new_program(GLcontext *ctx, struct state_key *key, } cf = get_source( &p, SRC_PREVIOUS, 0 ); - out = make_ureg( PROGRAM_OUTPUT, FRAG_RESULT_COLR ); + out = make_ureg( PROGRAM_OUTPUT, FRAG_RESULT_COLOR ); if (key->separate_specular) { /* Emit specular add. diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c index 16d05cc7d0..c372b49398 100644 --- a/src/mesa/main/texformat.c +++ b/src/mesa/main/texformat.c @@ -696,6 +696,33 @@ const struct gl_texture_format _mesa_texformat_intensity_float16 = { store_texel_intensity_f16 /* StoreTexel */ }; +const struct gl_texture_format _mesa_texformat_dudv8 = { + MESA_FORMAT_DUDV8, /* MesaFormat */ + GL_DUDV_ATI, /* BaseFormat */ + /* FIXME: spec doesn't say since that parameter didn't exist then, + but this should be something like SIGNED_NORMALIZED */ + GL_UNSIGNED_NORMALIZED_ARB, /* DataType */ + /* maybe should add dudvBits field, but spec seems to be + lacking the ability to query with GetTexLevelParameter anyway */ + 0, /* RedBits */ + 0, /* GreenBits */ + 0, /* BlueBits */ + 0, /* AlphaBits */ + 0, /* LuminanceBits */ + 0, /* IntensityBits */ + 0, /* IndexBits */ + 0, /* DepthBits */ + 0, /* StencilBits */ + 2, /* TexelBytes */ + _mesa_texstore_dudv8, /* StoreTexImageFunc */ + NULL, /* FetchTexel1D */ + NULL, /* FetchTexel2D */ + NULL, /* FetchTexel3D */ + fetch_texel_1d_dudv8, /* FetchTexel1Df */ + fetch_texel_2d_dudv8, /* FetchTexel2Df */ + fetch_texel_3d_dudv8, /* FetchTexel3Df */ + NULL /* StoreTexel */ +}; /*@}*/ @@ -1634,6 +1661,16 @@ _mesa_choose_tex_format( GLcontext *ctx, GLint internalFormat, } } + if (ctx->Extensions.ATI_envmap_bumpmap) { + switch (internalFormat) { + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + return &_mesa_texformat_dudv8; + default: + ; /* fallthrough */ + } + } + #if FEATURE_EXT_texture_sRGB if (ctx->Extensions.EXT_texture_sRGB) { switch (internalFormat) { @@ -1778,6 +1815,11 @@ _mesa_format_to_type_and_comps(const struct gl_texture_format *format, *comps = 1; return; + case MESA_FORMAT_DUDV8: + *datatype = GL_BYTE; + *comps = 2; + return; + #if FEATURE_EXT_texture_sRGB case MESA_FORMAT_SRGB8: *datatype = GL_UNSIGNED_BYTE; diff --git a/src/mesa/main/texformat.h b/src/mesa/main/texformat.h index 31364c36b1..7fa70ad4fe 100644 --- a/src/mesa/main/texformat.h +++ b/src/mesa/main/texformat.h @@ -161,7 +161,14 @@ enum _format { MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32, MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16, MESA_FORMAT_INTENSITY_FLOAT32, - MESA_FORMAT_INTENSITY_FLOAT16 + MESA_FORMAT_INTENSITY_FLOAT16, + /*@}*/ + + /** + * \name Signed fixed point texture formats. + */ + /*@{*/ + MESA_FORMAT_DUDV8 /*@}*/ }; @@ -209,6 +216,11 @@ extern const struct gl_texture_format _mesa_texformat_intensity_float32; extern const struct gl_texture_format _mesa_texformat_intensity_float16; /*@}*/ +/** Signed fixed point texture formats */ +/*@{*/ +extern const struct gl_texture_format _mesa_texformat_dudv8; +/*@}*/ + /** \name Assorted hardware-friendly formats */ /*@{*/ extern const struct gl_texture_format _mesa_texformat_rgba8888; diff --git a/src/mesa/main/texformat_tmp.h b/src/mesa/main/texformat_tmp.h index 275340cabd..0f6a172ef0 100644 --- a/src/mesa/main/texformat_tmp.h +++ b/src/mesa/main/texformat_tmp.h @@ -719,9 +719,9 @@ static void store_texel_rgb888(struct gl_texture_image *texImage, { const GLubyte *rgba = (const GLubyte *) texel; GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 3); - dst[0] = rgba[RCOMP]; + dst[0] = rgba[BCOMP]; dst[1] = rgba[GCOMP]; - dst[2] = rgba[BCOMP]; + dst[2] = rgba[RCOMP]; } #endif @@ -745,9 +745,9 @@ static void store_texel_bgr888(struct gl_texture_image *texImage, { const GLubyte *rgba = (const GLubyte *) texel; GLubyte *dst = TEXEL_ADDR(GLubyte, texImage, i, j, k, 3); - dst[0] = rgba[BCOMP]; + dst[0] = rgba[RCOMP]; dst[1] = rgba[GCOMP]; - dst[2] = rgba[RCOMP]; + dst[2] = rgba[BCOMP]; } #endif @@ -1269,7 +1269,7 @@ static void FETCH(sl8)(const struct gl_texture_image *texImage, texel[RCOMP] = texel[GCOMP] = texel[BCOMP] = nonlinear_to_linear(src[0]); - texel[ACOMP] = CHAN_MAX; + texel[ACOMP] = 1.0F; } #if DIM == 3 @@ -1304,10 +1304,22 @@ static void store_texel_sla8(struct gl_texture_image *texImage, } #endif +#endif /* FEATURE_EXT_texture_sRGB */ -#endif /* FEATURE_EXT_texture_sRGB */ +/* MESA_FORMAT_DUDV8 ********************************************************/ +/* this format by definition produces 0,0,0,1 as rgba values, + however we'll return the dudv values as rg and fix up elsewhere */ +static void FETCH(dudv8)(const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLbyte *src = TEXEL_ADDR(GLbyte, texImage, i, j, k, 2); + texel[RCOMP] = BYTE_TO_FLOAT(src[0]); + texel[GCOMP] = BYTE_TO_FLOAT(src[1]); + texel[BCOMP] = 0; + texel[ACOMP] = 0; +} /* MESA_FORMAT_YCBCR *********************************************************/ diff --git a/src/mesa/main/texgen.c b/src/mesa/main/texgen.c index 244c7aaafc..e3feb024c3 100644 --- a/src/mesa/main/texgen.c +++ b/src/mesa/main/texgen.c @@ -1,8 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 7.1 + * Version: 7.5 * * 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"), @@ -34,15 +35,36 @@ #include "main/enums.h" #include "main/macros.h" #include "main/texgen.h" -#include "math/m_xform.h" +#include "math/m_matrix.h" +/** + * Return texgen state for given coordinate + */ +static struct gl_texgen * +get_texgen(struct gl_texture_unit *texUnit, GLenum coord) +{ + switch (coord) { + case GL_S: + return &texUnit->GenS; + case GL_T: + return &texUnit->GenT; + case GL_R: + return &texUnit->GenR; + case GL_Q: + return &texUnit->GenQ; + default: + return NULL; + } +} + void GLAPIENTRY _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ) { - GET_CURRENT_CONTEXT(ctx); struct gl_texture_unit *texUnit; + struct gl_texgen *texgen; + GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); if (MESA_VERBOSE&(VERBOSE_API|VERBOSE_TEXTURE)) @@ -59,210 +81,79 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ) texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - switch (coord) { - case GL_S: - if (pname==GL_TEXTURE_GEN_MODE) { - GLenum mode = (GLenum) (GLint) *params; - GLbitfield bits; - switch (mode) { - case GL_OBJECT_LINEAR: - bits = TEXGEN_OBJ_LINEAR; - break; - case GL_EYE_LINEAR: - bits = TEXGEN_EYE_LINEAR; - break; - case GL_REFLECTION_MAP_NV: - bits = TEXGEN_REFLECTION_MAP_NV; - break; - case GL_NORMAL_MAP_NV: - bits = TEXGEN_NORMAL_MAP_NV; - break; - case GL_SPHERE_MAP: - bits = TEXGEN_SPHERE_MAP; - break; - default: - _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" ); - return; - } - if (texUnit->GenModeS == mode) - return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); - texUnit->GenModeS = mode; - texUnit->_GenBitS = bits; - } - else if (pname==GL_OBJECT_PLANE) { - if (TEST_EQ_4V(texUnit->ObjectPlaneS, params)) - return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); - COPY_4FV(texUnit->ObjectPlaneS, params); - } - else if (pname==GL_EYE_PLANE) { - GLfloat tmp[4]; - /* Transform plane equation by the inverse modelview matrix */ - if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) { - _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); - } - _mesa_transform_vector( tmp, params, ctx->ModelviewMatrixStack.Top->inv ); - if (TEST_EQ_4V(texUnit->EyePlaneS, tmp)) - return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); - COPY_4FV(texUnit->EyePlaneS, tmp); - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(pname)" ); - return; - } - break; - case GL_T: - if (pname==GL_TEXTURE_GEN_MODE) { - GLenum mode = (GLenum) (GLint) *params; - GLbitfield bitt; - switch (mode) { - case GL_OBJECT_LINEAR: - bitt = TEXGEN_OBJ_LINEAR; - break; - case GL_EYE_LINEAR: - bitt = TEXGEN_EYE_LINEAR; - break; - case GL_REFLECTION_MAP_NV: - bitt = TEXGEN_REFLECTION_MAP_NV; - break; - case GL_NORMAL_MAP_NV: - bitt = TEXGEN_NORMAL_MAP_NV; - break; - case GL_SPHERE_MAP: - bitt = TEXGEN_SPHERE_MAP; - break; - default: - _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" ); - return; - } - if (texUnit->GenModeT == mode) - return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); - texUnit->GenModeT = mode; - texUnit->_GenBitT = bitt; - } - else if (pname==GL_OBJECT_PLANE) { - if (TEST_EQ_4V(texUnit->ObjectPlaneT, params)) - return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); - COPY_4FV(texUnit->ObjectPlaneT, params); - } - else if (pname==GL_EYE_PLANE) { - GLfloat tmp[4]; - /* Transform plane equation by the inverse modelview matrix */ - if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) { - _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); - } - _mesa_transform_vector( tmp, params, ctx->ModelviewMatrixStack.Top->inv ); - if (TEST_EQ_4V(texUnit->EyePlaneT, tmp)) - return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); - COPY_4FV(texUnit->EyePlaneT, tmp); - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(pname)" ); - return; - } - break; - case GL_R: - if (pname==GL_TEXTURE_GEN_MODE) { - GLenum mode = (GLenum) (GLint) *params; - GLbitfield bitr; - switch (mode) { - case GL_OBJECT_LINEAR: - bitr = TEXGEN_OBJ_LINEAR; - break; - case GL_REFLECTION_MAP_NV: - bitr = TEXGEN_REFLECTION_MAP_NV; - break; - case GL_NORMAL_MAP_NV: - bitr = TEXGEN_NORMAL_MAP_NV; - break; - case GL_EYE_LINEAR: - bitr = TEXGEN_EYE_LINEAR; - break; - default: - _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" ); - return; - } - if (texUnit->GenModeR == mode) - return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); - texUnit->GenModeR = mode; - texUnit->_GenBitR = bitr; - } - else if (pname==GL_OBJECT_PLANE) { - if (TEST_EQ_4V(texUnit->ObjectPlaneR, params)) - return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); - COPY_4FV(texUnit->ObjectPlaneR, params); - } - else if (pname==GL_EYE_PLANE) { - GLfloat tmp[4]; - /* Transform plane equation by the inverse modelview matrix */ - if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) { - _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); - } - _mesa_transform_vector( tmp, params, ctx->ModelviewMatrixStack.Top->inv ); - if (TEST_EQ_4V(texUnit->EyePlaneR, tmp)) - return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); - COPY_4FV(texUnit->EyePlaneR, tmp); - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(pname)" ); - return; - } - break; - case GL_Q: - if (pname==GL_TEXTURE_GEN_MODE) { - GLenum mode = (GLenum) (GLint) *params; - GLbitfield bitq; - switch (mode) { - case GL_OBJECT_LINEAR: - bitq = TEXGEN_OBJ_LINEAR; - break; - case GL_EYE_LINEAR: - bitq = TEXGEN_EYE_LINEAR; - break; - default: - _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" ); - return; - } - if (texUnit->GenModeQ == mode) - return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); - texUnit->GenModeQ = mode; - texUnit->_GenBitQ = bitq; - } - else if (pname==GL_OBJECT_PLANE) { - if (TEST_EQ_4V(texUnit->ObjectPlaneQ, params)) - return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); - COPY_4FV(texUnit->ObjectPlaneQ, params); - } - else if (pname==GL_EYE_PLANE) { - GLfloat tmp[4]; - /* Transform plane equation by the inverse modelview matrix */ - if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) { - _math_matrix_analyse( ctx->ModelviewMatrixStack.Top ); - } - _mesa_transform_vector( tmp, params, ctx->ModelviewMatrixStack.Top->inv ); - if (TEST_EQ_4V(texUnit->EyePlaneQ, tmp)) - return; - FLUSH_VERTICES(ctx, _NEW_TEXTURE); - COPY_4FV(texUnit->EyePlaneQ, tmp); - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(pname)" ); - return; - } - break; - default: - _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(coord)" ); - return; + texgen = get_texgen(texUnit, coord); + if (!texgen) { + _mesa_error(ctx, GL_INVALID_ENUM, "glTexGen(coord)"); + return; + } + + switch (pname) { + case GL_TEXTURE_GEN_MODE: + { + GLenum mode = (GLenum) (GLint) params[0]; + GLbitfield bit = 0x0; + if (texgen->Mode == mode) + return; + switch (mode) { + case GL_OBJECT_LINEAR: + bit = TEXGEN_OBJ_LINEAR; + break; + case GL_EYE_LINEAR: + bit = TEXGEN_EYE_LINEAR; + break; + case GL_SPHERE_MAP: + if (coord == GL_S || coord == GL_T) + bit = TEXGEN_SPHERE_MAP; + break; + case GL_REFLECTION_MAP_NV: + if (coord != GL_Q) + bit = TEXGEN_REFLECTION_MAP_NV; + break; + case GL_NORMAL_MAP_NV: + if (coord != GL_Q) + bit = TEXGEN_NORMAL_MAP_NV; + break; + default: + ; /* nop */ + } + if (!bit) { + _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(param)" ); + return; + } + FLUSH_VERTICES(ctx, _NEW_TEXTURE); + texgen->Mode = mode; + texgen->_ModeBit = bit; + } + break; + + case GL_OBJECT_PLANE: + { + if (TEST_EQ_4V(texgen->ObjectPlane, params)) + return; + FLUSH_VERTICES(ctx, _NEW_TEXTURE); + COPY_4FV(texgen->ObjectPlane, params); + } + break; + + case GL_EYE_PLANE: + { + GLfloat tmp[4]; + /* Transform plane equation by the inverse modelview matrix */ + if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top)) { + _math_matrix_analyse(ctx->ModelviewMatrixStack.Top); + } + _mesa_transform_vector(tmp, params, + ctx->ModelviewMatrixStack.Top->inv); + if (TEST_EQ_4V(texgen->EyePlane, tmp)) + return; + FLUSH_VERTICES(ctx, _NEW_TEXTURE); + COPY_4FV(texgen->EyePlane, tmp); + } + break; + + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glTexGenfv(pname)" ); + return; } if (ctx->Driver.TexGen) @@ -330,7 +221,8 @@ _mesa_TexGeni( GLenum coord, GLenum pname, GLint param ) void GLAPIENTRY _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params ) { - const struct gl_texture_unit *texUnit; + struct gl_texture_unit *texUnit; + struct gl_texgen *texgen; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); @@ -341,70 +233,24 @@ _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params ) texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - switch (coord) { - case GL_S: - if (pname==GL_TEXTURE_GEN_MODE) { - params[0] = ENUM_TO_DOUBLE(texUnit->GenModeS); - } - else if (pname==GL_OBJECT_PLANE) { - COPY_4V( params, texUnit->ObjectPlaneS ); - } - else if (pname==GL_EYE_PLANE) { - COPY_4V( params, texUnit->EyePlaneS ); - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGendv(pname)" ); - return; - } - break; - case GL_T: - if (pname==GL_TEXTURE_GEN_MODE) { - params[0] = ENUM_TO_DOUBLE(texUnit->GenModeT); - } - else if (pname==GL_OBJECT_PLANE) { - COPY_4V( params, texUnit->ObjectPlaneT ); - } - else if (pname==GL_EYE_PLANE) { - COPY_4V( params, texUnit->EyePlaneT ); - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGendv(pname)" ); - return; - } - break; - case GL_R: - if (pname==GL_TEXTURE_GEN_MODE) { - params[0] = ENUM_TO_DOUBLE(texUnit->GenModeR); - } - else if (pname==GL_OBJECT_PLANE) { - COPY_4V( params, texUnit->ObjectPlaneR ); - } - else if (pname==GL_EYE_PLANE) { - COPY_4V( params, texUnit->EyePlaneR ); - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGendv(pname)" ); - return; - } - break; - case GL_Q: - if (pname==GL_TEXTURE_GEN_MODE) { - params[0] = ENUM_TO_DOUBLE(texUnit->GenModeQ); - } - else if (pname==GL_OBJECT_PLANE) { - COPY_4V( params, texUnit->ObjectPlaneQ ); - } - else if (pname==GL_EYE_PLANE) { - COPY_4V( params, texUnit->EyePlaneQ ); - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGendv(pname)" ); - return; - } - break; - default: - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGendv(coord)" ); - return; + texgen = get_texgen(texUnit, coord); + if (!texgen) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexGendv(coord)"); + return; + } + + switch (pname) { + case GL_TEXTURE_GEN_MODE: + params[0] = ENUM_TO_DOUBLE(texgen->Mode); + break; + case GL_OBJECT_PLANE: + COPY_4V(params, texgen->ObjectPlane); + break; + case GL_EYE_PLANE: + COPY_4V(params, texgen->EyePlane); + break; + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGendv(pname)" ); } } @@ -413,7 +259,8 @@ _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params ) void GLAPIENTRY _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ) { - const struct gl_texture_unit *texUnit; + struct gl_texture_unit *texUnit; + struct gl_texgen *texgen; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); @@ -424,70 +271,24 @@ _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ) texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - switch (coord) { - case GL_S: - if (pname==GL_TEXTURE_GEN_MODE) { - params[0] = ENUM_TO_FLOAT(texUnit->GenModeS); - } - else if (pname==GL_OBJECT_PLANE) { - COPY_4V( params, texUnit->ObjectPlaneS ); - } - else if (pname==GL_EYE_PLANE) { - COPY_4V( params, texUnit->EyePlaneS ); - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(pname)" ); - return; - } - break; - case GL_T: - if (pname==GL_TEXTURE_GEN_MODE) { - params[0] = ENUM_TO_FLOAT(texUnit->GenModeT); - } - else if (pname==GL_OBJECT_PLANE) { - COPY_4V( params, texUnit->ObjectPlaneT ); - } - else if (pname==GL_EYE_PLANE) { - COPY_4V( params, texUnit->EyePlaneT ); - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(pname)" ); - return; - } - break; - case GL_R: - if (pname==GL_TEXTURE_GEN_MODE) { - params[0] = ENUM_TO_FLOAT(texUnit->GenModeR); - } - else if (pname==GL_OBJECT_PLANE) { - COPY_4V( params, texUnit->ObjectPlaneR ); - } - else if (pname==GL_EYE_PLANE) { - COPY_4V( params, texUnit->EyePlaneR ); - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(pname)" ); - return; - } - break; - case GL_Q: - if (pname==GL_TEXTURE_GEN_MODE) { - params[0] = ENUM_TO_FLOAT(texUnit->GenModeQ); - } - else if (pname==GL_OBJECT_PLANE) { - COPY_4V( params, texUnit->ObjectPlaneQ ); - } - else if (pname==GL_EYE_PLANE) { - COPY_4V( params, texUnit->EyePlaneQ ); - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(pname)" ); - return; - } - break; - default: - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(coord)" ); - return; + texgen = get_texgen(texUnit, coord); + if (!texgen) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexGenfv(coord)"); + return; + } + + switch (pname) { + case GL_TEXTURE_GEN_MODE: + params[0] = ENUM_TO_FLOAT(texgen->Mode); + break; + case GL_OBJECT_PLANE: + COPY_4V(params, texgen->ObjectPlane); + break; + case GL_EYE_PLANE: + COPY_4V(params, texgen->EyePlane); + break; + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(pname)" ); } } @@ -496,7 +297,8 @@ _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ) void GLAPIENTRY _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params ) { - const struct gl_texture_unit *texUnit; + struct gl_texture_unit *texUnit; + struct gl_texgen *texgen; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); @@ -507,94 +309,30 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params ) texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; - switch (coord) { - case GL_S: - if (pname==GL_TEXTURE_GEN_MODE) { - params[0] = texUnit->GenModeS; - } - else if (pname==GL_OBJECT_PLANE) { - params[0] = (GLint) texUnit->ObjectPlaneS[0]; - params[1] = (GLint) texUnit->ObjectPlaneS[1]; - params[2] = (GLint) texUnit->ObjectPlaneS[2]; - params[3] = (GLint) texUnit->ObjectPlaneS[3]; - } - else if (pname==GL_EYE_PLANE) { - params[0] = (GLint) texUnit->EyePlaneS[0]; - params[1] = (GLint) texUnit->EyePlaneS[1]; - params[2] = (GLint) texUnit->EyePlaneS[2]; - params[3] = (GLint) texUnit->EyePlaneS[3]; - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(pname)" ); - return; - } - break; - case GL_T: - if (pname==GL_TEXTURE_GEN_MODE) { - params[0] = texUnit->GenModeT; - } - else if (pname==GL_OBJECT_PLANE) { - params[0] = (GLint) texUnit->ObjectPlaneT[0]; - params[1] = (GLint) texUnit->ObjectPlaneT[1]; - params[2] = (GLint) texUnit->ObjectPlaneT[2]; - params[3] = (GLint) texUnit->ObjectPlaneT[3]; - } - else if (pname==GL_EYE_PLANE) { - params[0] = (GLint) texUnit->EyePlaneT[0]; - params[1] = (GLint) texUnit->EyePlaneT[1]; - params[2] = (GLint) texUnit->EyePlaneT[2]; - params[3] = (GLint) texUnit->EyePlaneT[3]; - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(pname)" ); - return; - } - break; - case GL_R: - if (pname==GL_TEXTURE_GEN_MODE) { - params[0] = texUnit->GenModeR; - } - else if (pname==GL_OBJECT_PLANE) { - params[0] = (GLint) texUnit->ObjectPlaneR[0]; - params[1] = (GLint) texUnit->ObjectPlaneR[1]; - params[2] = (GLint) texUnit->ObjectPlaneR[2]; - params[3] = (GLint) texUnit->ObjectPlaneR[3]; - } - else if (pname==GL_EYE_PLANE) { - params[0] = (GLint) texUnit->EyePlaneR[0]; - params[1] = (GLint) texUnit->EyePlaneR[1]; - params[2] = (GLint) texUnit->EyePlaneR[2]; - params[3] = (GLint) texUnit->EyePlaneR[3]; - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(pname)" ); - return; - } - break; - case GL_Q: - if (pname==GL_TEXTURE_GEN_MODE) { - params[0] = texUnit->GenModeQ; - } - else if (pname==GL_OBJECT_PLANE) { - params[0] = (GLint) texUnit->ObjectPlaneQ[0]; - params[1] = (GLint) texUnit->ObjectPlaneQ[1]; - params[2] = (GLint) texUnit->ObjectPlaneQ[2]; - params[3] = (GLint) texUnit->ObjectPlaneQ[3]; - } - else if (pname==GL_EYE_PLANE) { - params[0] = (GLint) texUnit->EyePlaneQ[0]; - params[1] = (GLint) texUnit->EyePlaneQ[1]; - params[2] = (GLint) texUnit->EyePlaneQ[2]; - params[3] = (GLint) texUnit->EyePlaneQ[3]; - } - else { - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(pname)" ); - return; - } - break; - default: - _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(coord)" ); - return; + texgen = get_texgen(texUnit, coord); + if (!texgen) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexGeniv(coord)"); + return; + } + + switch (pname) { + case GL_TEXTURE_GEN_MODE: + params[0] = texgen->Mode; + break; + case GL_OBJECT_PLANE: + params[0] = (GLint) texgen->ObjectPlane[0]; + params[1] = (GLint) texgen->ObjectPlane[1]; + params[2] = (GLint) texgen->ObjectPlane[2]; + params[3] = (GLint) texgen->ObjectPlane[3]; + break; + case GL_EYE_PLANE: + params[0] = (GLint) texgen->EyePlane[0]; + params[1] = (GLint) texgen->EyePlane[1]; + params[2] = (GLint) texgen->EyePlane[2]; + params[3] = (GLint) texgen->EyePlane[3]; + break; + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(pname)" ); } } diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 8fd69c4f6a..4f297738df 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -339,6 +339,17 @@ _mesa_base_tex_format( GLcontext *ctx, GLint internalFormat ) } } + 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_packed_depth_stencil) { switch (internalFormat) { case GL_DEPTH_STENCIL_EXT: @@ -568,6 +579,20 @@ is_depthstencil_format(GLenum format) } } +/** + * Test if the given image format is a dudv format. + */ +static GLboolean +is_dudv_format(GLenum format) +{ + switch (format) { + case GL_DUDV_ATI: + case GL_DU8DV8_ATI: + return GL_TRUE; + default: + return GL_FALSE; + } +} /** @@ -687,7 +712,7 @@ _mesa_new_texture_image( GLcontext *ctx ) * Free texture image data. * This function is a fallback called via ctx->Driver.FreeTexImageData(). * - * \param teximage texture image. + * \param texImage texture image. * * Free the texture image data if it's not marked as client data. */ @@ -709,7 +734,7 @@ _mesa_free_texture_image_data(GLcontext *ctx, /** * Free texture image. * - * \param teximage texture image. + * \param texImage texture image. * * Free the texture image structure and the associated image data. */ @@ -766,15 +791,15 @@ _mesa_select_tex_object(GLcontext *ctx, const struct gl_texture_unit *texUnit, { switch (target) { case GL_TEXTURE_1D: - return texUnit->Current1D; + return texUnit->CurrentTex[TEXTURE_1D_INDEX]; case GL_PROXY_TEXTURE_1D: return ctx->Texture.ProxyTex[TEXTURE_1D_INDEX]; case GL_TEXTURE_2D: - return texUnit->Current2D; + return texUnit->CurrentTex[TEXTURE_2D_INDEX]; case GL_PROXY_TEXTURE_2D: return ctx->Texture.ProxyTex[TEXTURE_2D_INDEX]; case GL_TEXTURE_3D: - return texUnit->Current3D; + 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: @@ -785,25 +810,25 @@ _mesa_select_tex_object(GLcontext *ctx, const struct gl_texture_unit *texUnit, case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB: case GL_TEXTURE_CUBE_MAP_ARB: return ctx->Extensions.ARB_texture_cube_map - ? texUnit->CurrentCubeMap : NULL; + ? 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->CurrentRect : NULL; + ? 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 ctx->Extensions.MESA_texture_array - ? texUnit->Current1DArray : NULL; + ? texUnit->CurrentTex[TEXTURE_1D_ARRAY_INDEX] : NULL; case GL_PROXY_TEXTURE_1D_ARRAY_EXT: return ctx->Extensions.MESA_texture_array ? ctx->Texture.ProxyTex[TEXTURE_1D_ARRAY_INDEX] : NULL; case GL_TEXTURE_2D_ARRAY_EXT: return ctx->Extensions.MESA_texture_array - ? texUnit->Current2DArray : NULL; + ? texUnit->CurrentTex[TEXTURE_2D_ARRAY_INDEX] : NULL; case GL_PROXY_TEXTURE_2D_ARRAY_EXT: return ctx->Extensions.MESA_texture_array ? ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX] : NULL; @@ -819,7 +844,7 @@ _mesa_select_tex_object(GLcontext *ctx, const struct gl_texture_unit *texUnit, * of the given texture unit. * * \param ctx GL context. - * \param texUnit texture unit. + * \param texObj texture unit. * \param target texture target. * \param level image level. * @@ -1527,7 +1552,8 @@ texture_error_check( GLcontext *ctx, GLenum target, */ if (!isProxy) { _mesa_error(ctx, GL_INVALID_OPERATION, - "glTexImage%dD(format or type)", dimensions); + "glTexImage%dD(incompatible format 0x%x, type 0x%x)", + dimensions, format, type); } return GL_TRUE; } @@ -1539,10 +1565,12 @@ texture_error_check( GLcontext *ctx, GLenum target, (is_index_format(internalFormat) && !indexFormat) || (is_depth_format(internalFormat) != is_depth_format(format)) || (is_ycbcr_format(internalFormat) != is_ycbcr_format(format)) || - (is_depthstencil_format(internalFormat) != is_depthstencil_format(format))) { + (is_depthstencil_format(internalFormat) != is_depthstencil_format(format)) || + (is_dudv_format(internalFormat) != is_dudv_format(format))) { if (!isProxy) _mesa_error(ctx, GL_INVALID_OPERATION, - "glTexImage(internalFormat/format)"); + "glTexImage%dD(incompatible internalFormat 0x%x, format 0x%x)", + dimensions, internalFormat, format); return GL_TRUE; } @@ -1716,7 +1744,8 @@ subtexture_error_check( GLcontext *ctx, GLuint dimensions, if (!_mesa_is_legal_format_and_type(ctx, format, type)) { _mesa_error(ctx, GL_INVALID_ENUM, - "glTexSubImage%dD(format or type)", dimensions); + "glTexSubImage%dD(incompatible format 0x%x, type 0x%x)", + dimensions, format, type); return GL_TRUE; } @@ -1823,7 +1852,6 @@ subtexture_error_check2( GLcontext *ctx, GLuint dimensions, * \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 depth image depth given by the user. * \param border texture border. * * \return GL_TRUE if an error was detected, or GL_FALSE if no errors. @@ -2273,6 +2301,12 @@ _mesa_GetTexImage( GLenum target, GLint level, GLenum format, return; } + if (!ctx->Extensions.ATI_envmap_bumpmap + && is_dudv_format(format)) { + _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)"); + return; + } + _mesa_lock_texture(ctx, texObj); { texImage = _mesa_select_tex_image(ctx, texObj, target, level); @@ -2313,6 +2347,11 @@ _mesa_GetTexImage( GLenum target, GLint level, GLenum format, _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); goto out; } + else if (is_dudv_format(format) + && !is_dudv_format(texImage->TexFormat->BaseFormat)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(format mismatch)"); + goto out; + } if (ctx->Pack.BufferObj->Name) { /* packing texture image into a PBO */ @@ -2400,6 +2439,49 @@ update_fbo_texture(GLcontext *ctx, struct gl_texture_object *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 +} + /* * Called from the API. Note that width includes the border. @@ -2413,6 +2495,8 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat, GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + internalFormat = override_internal_format(internalFormat, width, 1); + #if FEATURE_convolve if (_mesa_is_color_format(internalFormat)) { _mesa_adjust_image_for_convolution(ctx, 1, &postConvWidth, NULL); @@ -2510,6 +2594,8 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat, GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + internalFormat = override_internal_format(internalFormat, width, height); + #if FEATURE_convolve if (_mesa_is_color_format(internalFormat)) { _mesa_adjust_image_for_convolution(ctx, 2, &postConvWidth, @@ -2624,6 +2710,8 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat, GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + internalFormat = override_internal_format(internalFormat, width, height); + if (target == GL_TEXTURE_3D || (ctx->Extensions.MESA_texture_array && target == GL_TEXTURE_2D_ARRAY_EXT)) { diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index b4e30c8bb7..b63f747fe8 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -28,7 +28,7 @@ */ -#include "glheader.h" +#include "mfeatures.h" #if FEATURE_colortable #include "colortab.h" #endif @@ -180,7 +180,7 @@ finish_texture_init(GLcontext *ctx, GLenum target, * Called via ctx->Driver.DeleteTexture() if not overriden by a driver. * * \param shared the shared GL state to which the object belongs. - * \param texOjb the texture object to delete. + * \param texObj the texture object to delete. */ void _mesa_delete_texture_object( GLcontext *ctx, struct gl_texture_object *texObj ) @@ -759,37 +759,17 @@ unbind_texobj_from_fbo(GLcontext *ctx, struct gl_texture_object *texObj) static void unbind_texobj_from_texunits(GLcontext *ctx, struct gl_texture_object *texObj) { - GLuint u; + GLuint u, tex; for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) { struct gl_texture_unit *unit = &ctx->Texture.Unit[u]; - if (texObj == unit->Current1D) { - _mesa_reference_texobj(&unit->Current1D, ctx->Shared->Default1D); - ASSERT(unit->Current1D); - } - else if (texObj == unit->Current2D) { - _mesa_reference_texobj(&unit->Current2D, ctx->Shared->Default2D); - ASSERT(unit->Current2D); - } - else if (texObj == unit->Current3D) { - _mesa_reference_texobj(&unit->Current3D, ctx->Shared->Default3D); - ASSERT(unit->Current3D); - } - else if (texObj == unit->CurrentCubeMap) { - _mesa_reference_texobj(&unit->CurrentCubeMap, ctx->Shared->DefaultCubeMap); - ASSERT(unit->CurrentCubeMap); - } - else if (texObj == unit->CurrentRect) { - _mesa_reference_texobj(&unit->CurrentRect, ctx->Shared->DefaultRect); - ASSERT(unit->CurrentRect); - } - else if (texObj == unit->Current1DArray) { - _mesa_reference_texobj(&unit->Current1DArray, ctx->Shared->Default1DArray); - ASSERT(unit->Current1DArray); - } - else if (texObj == unit->Current2DArray) { - _mesa_reference_texobj(&unit->Current2DArray, ctx->Shared->Default2DArray); - ASSERT(unit->Current2DArray); + for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { + if (texObj == unit->CurrentTex[tex]) { + _mesa_reference_texobj(&unit->CurrentTex[tex], + ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]); + ASSERT(unit->CurrentTex[tex]); + break; + } } } } @@ -860,6 +840,35 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *textures) /** + * Convert a GL texture target enum such as GL_TEXTURE_2D or GL_TEXTURE_3D + * into the corresponding Mesa texture target index. + * Return -1 if target is invalid. + */ +static GLint +target_enum_to_index(GLenum target) +{ + switch (target) { + case GL_TEXTURE_1D: + return TEXTURE_1D_INDEX; + case GL_TEXTURE_2D: + return TEXTURE_2D_INDEX; + case GL_TEXTURE_3D: + return TEXTURE_3D_INDEX; + case GL_TEXTURE_CUBE_MAP_ARB: + return TEXTURE_CUBE_INDEX; + case GL_TEXTURE_RECTANGLE_NV: + return TEXTURE_RECT_INDEX; + case GL_TEXTURE_1D_ARRAY_EXT: + return TEXTURE_1D_ARRAY_INDEX; + case GL_TEXTURE_2D_ARRAY_EXT: + return TEXTURE_2D_ARRAY_INDEX; + default: + return -1; + } +} + + +/** * Bind a named texture to a texturing target. * * \param target texture target. @@ -881,38 +890,20 @@ _mesa_BindTexture( GLenum target, GLuint texName ) const GLuint unit = ctx->Texture.CurrentUnit; struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit]; struct gl_texture_object *newTexObj = NULL, *defaultTexObj = NULL; + GLint targetIndex; ASSERT_OUTSIDE_BEGIN_END(ctx); if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE)) _mesa_debug(ctx, "glBindTexture %s %d\n", _mesa_lookup_enum_by_nr(target), (GLint) texName); - switch (target) { - case GL_TEXTURE_1D: - defaultTexObj = ctx->Shared->Default1D; - break; - case GL_TEXTURE_2D: - defaultTexObj = ctx->Shared->Default2D; - break; - case GL_TEXTURE_3D: - defaultTexObj = ctx->Shared->Default3D; - break; - case GL_TEXTURE_CUBE_MAP_ARB: - defaultTexObj = ctx->Shared->DefaultCubeMap; - break; - case GL_TEXTURE_RECTANGLE_NV: - defaultTexObj = ctx->Shared->DefaultRect; - break; - case GL_TEXTURE_1D_ARRAY_EXT: - defaultTexObj = ctx->Shared->Default1DArray; - break; - case GL_TEXTURE_2D_ARRAY_EXT: - defaultTexObj = ctx->Shared->Default2DArray; - break; - default: + targetIndex = target_enum_to_index(target); + if (targetIndex < 0) { _mesa_error(ctx, GL_INVALID_ENUM, "glBindTexture(target)"); return; } + assert(targetIndex < NUM_TEXTURE_TARGETS); + defaultTexObj = ctx->Shared->DefaultTex[targetIndex]; /* * Get pointer to new texture object (newTexObj) @@ -960,40 +951,8 @@ _mesa_BindTexture( GLenum target, GLuint texName ) * texture object will be decremented. It'll be deleted if the * count hits zero. */ - switch (target) { - case GL_TEXTURE_1D: - _mesa_reference_texobj(&texUnit->Current1D, newTexObj); - ASSERT(texUnit->Current1D); - break; - case GL_TEXTURE_2D: - _mesa_reference_texobj(&texUnit->Current2D, newTexObj); - ASSERT(texUnit->Current2D); - break; - case GL_TEXTURE_3D: - _mesa_reference_texobj(&texUnit->Current3D, newTexObj); - ASSERT(texUnit->Current3D); - break; - case GL_TEXTURE_CUBE_MAP_ARB: - _mesa_reference_texobj(&texUnit->CurrentCubeMap, newTexObj); - ASSERT(texUnit->CurrentCubeMap); - break; - case GL_TEXTURE_RECTANGLE_NV: - _mesa_reference_texobj(&texUnit->CurrentRect, newTexObj); - ASSERT(texUnit->CurrentRect); - break; - case GL_TEXTURE_1D_ARRAY_EXT: - _mesa_reference_texobj(&texUnit->Current1DArray, newTexObj); - ASSERT(texUnit->Current1DArray); - break; - case GL_TEXTURE_2D_ARRAY_EXT: - _mesa_reference_texobj(&texUnit->Current2DArray, newTexObj); - ASSERT(texUnit->Current2DArray); - break; - default: - /* Bad target should be caught above */ - _mesa_problem(ctx, "bad target in BindTexture"); - return; - } + _mesa_reference_texobj(&texUnit->CurrentTex[targetIndex], newTexObj); + ASSERT(texUnit->CurrentTex[targetIndex]); /* Pass BindTexture call to device driver */ if (ctx->Driver.BindTexture) diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c index 865aae8627..50f867e1c1 100644 --- a/src/mesa/main/texparam.c +++ b/src/mesa/main/texparam.c @@ -92,29 +92,29 @@ get_texobj(GLcontext *ctx, GLenum target) switch (target) { case GL_TEXTURE_1D: - return texUnit->Current1D; + return texUnit->CurrentTex[TEXTURE_1D_INDEX]; case GL_TEXTURE_2D: - return texUnit->Current2D; + return texUnit->CurrentTex[TEXTURE_2D_INDEX]; case GL_TEXTURE_3D: - return texUnit->Current3D; + return texUnit->CurrentTex[TEXTURE_3D_INDEX]; case GL_TEXTURE_CUBE_MAP: if (ctx->Extensions.ARB_texture_cube_map) { - return texUnit->CurrentCubeMap; + return texUnit->CurrentTex[TEXTURE_CUBE_INDEX]; } break; case GL_TEXTURE_RECTANGLE_NV: if (ctx->Extensions.NV_texture_rectangle) { - return texUnit->CurrentRect; + return texUnit->CurrentTex[TEXTURE_RECT_INDEX]; } break; case GL_TEXTURE_1D_ARRAY_EXT: if (ctx->Extensions.MESA_texture_array) { - return texUnit->Current1DArray; + return texUnit->CurrentTex[TEXTURE_1D_ARRAY_INDEX]; } break; case GL_TEXTURE_2D_ARRAY_EXT: if (ctx->Extensions.MESA_texture_array) { - return texUnit->Current2DArray; + return texUnit->CurrentTex[TEXTURE_2D_ARRAY_INDEX]; } break; default: diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c index 7761af7589..73f8a5339e 100644 --- a/src/mesa/main/texstate.c +++ b/src/mesa/main/texstate.c @@ -1,6 +1,6 @@ /* * Mesa 3-D graphics library - * Version: 7.1 + * Version: 7.5 * * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. * @@ -29,6 +29,7 @@ */ #include "glheader.h" +#include "mfeatures.h" #include "colormac.h" #if FEATURE_colortable #include "colortab.h" @@ -42,7 +43,6 @@ #include "texstate.h" #include "texenvprogram.h" #include "mtypes.h" -#include "math/m_xform.h" @@ -69,7 +69,7 @@ static const struct gl_tex_env_combine_state default_combine_state = { void _mesa_copy_texture_state( const GLcontext *src, GLcontext *dst ) { - GLuint i; + GLuint u, tex; ASSERT(src); ASSERT(dst); @@ -81,57 +81,32 @@ _mesa_copy_texture_state( const GLcontext *src, GLcontext *dst ) dst->Texture.SharedPalette = src->Texture.SharedPalette; /* per-unit state */ - for (i = 0; i < src->Const.MaxTextureImageUnits; i++) { - dst->Texture.Unit[i].Enabled = src->Texture.Unit[i].Enabled; - dst->Texture.Unit[i].EnvMode = src->Texture.Unit[i].EnvMode; - COPY_4V(dst->Texture.Unit[i].EnvColor, src->Texture.Unit[i].EnvColor); - dst->Texture.Unit[i].TexGenEnabled = src->Texture.Unit[i].TexGenEnabled; - dst->Texture.Unit[i].GenModeS = src->Texture.Unit[i].GenModeS; - dst->Texture.Unit[i].GenModeT = src->Texture.Unit[i].GenModeT; - dst->Texture.Unit[i].GenModeR = src->Texture.Unit[i].GenModeR; - dst->Texture.Unit[i].GenModeQ = src->Texture.Unit[i].GenModeQ; - dst->Texture.Unit[i]._GenBitS = src->Texture.Unit[i]._GenBitS; - dst->Texture.Unit[i]._GenBitT = src->Texture.Unit[i]._GenBitT; - dst->Texture.Unit[i]._GenBitR = src->Texture.Unit[i]._GenBitR; - dst->Texture.Unit[i]._GenBitQ = src->Texture.Unit[i]._GenBitQ; - dst->Texture.Unit[i]._GenFlags = src->Texture.Unit[i]._GenFlags; - COPY_4V(dst->Texture.Unit[i].ObjectPlaneS, src->Texture.Unit[i].ObjectPlaneS); - COPY_4V(dst->Texture.Unit[i].ObjectPlaneT, src->Texture.Unit[i].ObjectPlaneT); - COPY_4V(dst->Texture.Unit[i].ObjectPlaneR, src->Texture.Unit[i].ObjectPlaneR); - COPY_4V(dst->Texture.Unit[i].ObjectPlaneQ, src->Texture.Unit[i].ObjectPlaneQ); - COPY_4V(dst->Texture.Unit[i].EyePlaneS, src->Texture.Unit[i].EyePlaneS); - COPY_4V(dst->Texture.Unit[i].EyePlaneT, src->Texture.Unit[i].EyePlaneT); - COPY_4V(dst->Texture.Unit[i].EyePlaneR, src->Texture.Unit[i].EyePlaneR); - COPY_4V(dst->Texture.Unit[i].EyePlaneQ, src->Texture.Unit[i].EyePlaneQ); - dst->Texture.Unit[i].LodBias = src->Texture.Unit[i].LodBias; + for (u = 0; u < src->Const.MaxTextureImageUnits; u++) { + dst->Texture.Unit[u].Enabled = src->Texture.Unit[u].Enabled; + dst->Texture.Unit[u].EnvMode = src->Texture.Unit[u].EnvMode; + COPY_4V(dst->Texture.Unit[u].EnvColor, src->Texture.Unit[u].EnvColor); + dst->Texture.Unit[u].TexGenEnabled = src->Texture.Unit[u].TexGenEnabled; + dst->Texture.Unit[u].GenS = src->Texture.Unit[u].GenS; + dst->Texture.Unit[u].GenT = src->Texture.Unit[u].GenT; + dst->Texture.Unit[u].GenR = src->Texture.Unit[u].GenR; + dst->Texture.Unit[u].GenQ = src->Texture.Unit[u].GenQ; + dst->Texture.Unit[u].LodBias = src->Texture.Unit[u].LodBias; /* GL_EXT_texture_env_combine */ - dst->Texture.Unit[i].Combine.ModeRGB = src->Texture.Unit[i].Combine.ModeRGB; - dst->Texture.Unit[i].Combine.ModeA = src->Texture.Unit[i].Combine.ModeA; - COPY_3V(dst->Texture.Unit[i].Combine.SourceRGB, src->Texture.Unit[i].Combine.SourceRGB); - COPY_3V(dst->Texture.Unit[i].Combine.SourceA, src->Texture.Unit[i].Combine.SourceA); - COPY_3V(dst->Texture.Unit[i].Combine.OperandRGB, src->Texture.Unit[i].Combine.OperandRGB); - COPY_3V(dst->Texture.Unit[i].Combine.OperandA, src->Texture.Unit[i].Combine.OperandA); - dst->Texture.Unit[i].Combine.ScaleShiftRGB = src->Texture.Unit[i].Combine.ScaleShiftRGB; - dst->Texture.Unit[i].Combine.ScaleShiftA = src->Texture.Unit[i].Combine.ScaleShiftA; + dst->Texture.Unit[u].Combine = src->Texture.Unit[u].Combine; + + /* GL_ATI_envmap_bumpmap - need this? */ + dst->Texture.Unit[u].BumpTarget = src->Texture.Unit[u].BumpTarget; + COPY_4V(dst->Texture.Unit[u].RotMatrix, src->Texture.Unit[u].RotMatrix); + /* copy texture object bindings, not contents of texture objects */ _mesa_lock_context_textures(dst); - _mesa_reference_texobj(&dst->Texture.Unit[i].Current1D, - src->Texture.Unit[i].Current1D); - _mesa_reference_texobj(&dst->Texture.Unit[i].Current2D, - src->Texture.Unit[i].Current2D); - _mesa_reference_texobj(&dst->Texture.Unit[i].Current3D, - src->Texture.Unit[i].Current3D); - _mesa_reference_texobj(&dst->Texture.Unit[i].CurrentCubeMap, - src->Texture.Unit[i].CurrentCubeMap); - _mesa_reference_texobj(&dst->Texture.Unit[i].CurrentRect, - src->Texture.Unit[i].CurrentRect); - _mesa_reference_texobj(&dst->Texture.Unit[i].Current1DArray, - src->Texture.Unit[i].Current1DArray); - _mesa_reference_texobj(&dst->Texture.Unit[i].Current2DArray, - src->Texture.Unit[i].Current2DArray); + for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { + _mesa_reference_texobj(&dst->Texture.Unit[u].CurrentTex[tex], + src->Texture.Unit[u].CurrentTex[tex]); + } _mesa_unlock_context_textures(dst); } @@ -204,11 +179,14 @@ calculate_derived_texenv( struct gl_tex_env_combine_state *state, case GL_LUMINANCE: case GL_RGB: case GL_YCBCR_MESA: + case GL_DUDV_ATI: state->SourceA[0] = GL_PREVIOUS; break; default: - _mesa_problem(NULL, "Invalid texBaseFormat in calculate_derived_texenv"); + _mesa_problem(NULL, + "Invalid texBaseFormat 0x%x in calculate_derived_texenv", + texBaseFormat); return; } @@ -241,6 +219,7 @@ calculate_derived_texenv( struct gl_tex_env_combine_state *state, break; case GL_RGB: case GL_YCBCR_MESA: + case GL_DUDV_ATI: mode_rgb = GL_REPLACE; break; case GL_RGBA: @@ -267,6 +246,7 @@ calculate_derived_texenv( struct gl_tex_env_combine_state *state, case GL_LUMINANCE_ALPHA: case GL_RGBA: case GL_YCBCR_MESA: + case GL_DUDV_ATI: state->SourceRGB[2] = GL_TEXTURE; state->SourceA[2] = GL_TEXTURE; state->SourceRGB[0] = GL_CONSTANT; @@ -282,7 +262,8 @@ calculate_derived_texenv( struct gl_tex_env_combine_state *state, default: _mesa_problem(NULL, - "Invalid texture env mode in calculate_derived_texenv"); + "Invalid texture env mode 0x%x in calculate_derived_texenv", + mode); return; } @@ -364,73 +345,20 @@ _mesa_ClientActiveTextureARB(GLenum texture) static void update_texture_matrices( GLcontext *ctx ) { - GLuint i; + GLuint u; - ctx->Texture._TexMatEnabled = 0; + ctx->Texture._TexMatEnabled = 0x0; - for (i=0; i < ctx->Const.MaxTextureCoordUnits; i++) { - if (_math_matrix_is_dirty(ctx->TextureMatrixStack[i].Top)) { - _math_matrix_analyse( ctx->TextureMatrixStack[i].Top ); + for (u = 0; u < ctx->Const.MaxTextureCoordUnits; u++) { + if (_math_matrix_is_dirty(ctx->TextureMatrixStack[u].Top)) { + _math_matrix_analyse( ctx->TextureMatrixStack[u].Top ); - if (ctx->Texture.Unit[i]._ReallyEnabled && - ctx->TextureMatrixStack[i].Top->type != MATRIX_IDENTITY) - ctx->Texture._TexMatEnabled |= ENABLE_TEXMAT(i); + if (ctx->Texture.Unit[u]._ReallyEnabled && + ctx->TextureMatrixStack[u].Top->type != MATRIX_IDENTITY) + ctx->Texture._TexMatEnabled |= ENABLE_TEXMAT(u); if (ctx->Driver.TextureMatrix) - ctx->Driver.TextureMatrix( ctx, i, ctx->TextureMatrixStack[i].Top); - } - } -} - - -/** - * Update texture object's _Function field. We need to do this - * whenever any of the texture object's shadow-related fields change - * or when we start/stop using a fragment program. - * - * This function could be expanded someday to update additional per-object - * fields that depend on assorted state changes. - */ -static void -update_texture_compare_function(GLcontext *ctx, - struct gl_texture_object *tObj) -{ - /* XXX temporarily disable this test since it breaks the GLSL - * shadow2D(), etc. functions. - */ - if (0 /*ctx->FragmentProgram._Current*/) { - /* Texel/coordinate comparison is ignored for programs. - * See GL_ARB_fragment_program/shader spec for details. - */ - tObj->_Function = GL_NONE; - } - else if (tObj->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB) { - /* GL_ARB_shadow */ - tObj->_Function = tObj->CompareFunc; - } - else { - tObj->_Function = GL_NONE; /* pass depth through as grayscale */ - } -} - - -/** - * Helper function for determining which texture object (1D, 2D, cube, etc) - * should actually be used. - */ -static void -texture_override(GLcontext *ctx, - struct gl_texture_unit *texUnit, GLbitfield enableBits, - struct gl_texture_object *texObj, GLuint textureBit) -{ - if (!texUnit->_ReallyEnabled && (enableBits & textureBit)) { - if (!texObj->_Complete) { - _mesa_test_texobj_completeness(ctx, texObj); - } - if (texObj->_Complete) { - texUnit->_ReallyEnabled = textureBit; - texUnit->_Current = texObj; - update_texture_compare_function(ctx, texObj); + ctx->Driver.TextureMatrix( ctx, u, ctx->TextureMatrixStack[u].Top); } } } @@ -442,6 +370,8 @@ texture_override(GLcontext *ctx, static void update_tex_combine(GLcontext *ctx, struct gl_texture_unit *texUnit) { + struct gl_tex_env_combine_state *combine; + /* Set the texUnit->_CurrentCombine field to point to the user's combiner * state, or the combiner state which is derived from traditional texenv * mode. @@ -464,17 +394,19 @@ update_tex_combine(GLcontext *ctx, struct gl_texture_unit *texUnit) texUnit->_CurrentCombine = & texUnit->_EnvMode; } + combine = texUnit->_CurrentCombine; + /* Determine number of source RGB terms in the combiner function */ - switch (texUnit->_CurrentCombine->ModeRGB) { + switch (combine->ModeRGB) { case GL_REPLACE: - texUnit->_CurrentCombine->_NumArgsRGB = 1; + combine->_NumArgsRGB = 1; break; case GL_ADD: case GL_ADD_SIGNED: if (texUnit->EnvMode == GL_COMBINE4_NV) - texUnit->_CurrentCombine->_NumArgsRGB = 4; + combine->_NumArgsRGB = 4; else - texUnit->_CurrentCombine->_NumArgsRGB = 2; + combine->_NumArgsRGB = 2; break; case GL_MODULATE: case GL_SUBTRACT: @@ -482,44 +414,48 @@ update_tex_combine(GLcontext *ctx, struct gl_texture_unit *texUnit) case GL_DOT3_RGBA: case GL_DOT3_RGB_EXT: case GL_DOT3_RGBA_EXT: - texUnit->_CurrentCombine->_NumArgsRGB = 2; + combine->_NumArgsRGB = 2; break; case GL_INTERPOLATE: case GL_MODULATE_ADD_ATI: case GL_MODULATE_SIGNED_ADD_ATI: case GL_MODULATE_SUBTRACT_ATI: - texUnit->_CurrentCombine->_NumArgsRGB = 3; + combine->_NumArgsRGB = 3; + break; + case GL_BUMP_ENVMAP_ATI: + /* no real arguments for this case */ + combine->_NumArgsRGB = 0; break; default: - texUnit->_CurrentCombine->_NumArgsRGB = 0; + combine->_NumArgsRGB = 0; _mesa_problem(ctx, "invalid RGB combine mode in update_texture_state"); return; } /* Determine number of source Alpha terms in the combiner function */ - switch (texUnit->_CurrentCombine->ModeA) { + switch (combine->ModeA) { case GL_REPLACE: - texUnit->_CurrentCombine->_NumArgsA = 1; + combine->_NumArgsA = 1; break; case GL_ADD: case GL_ADD_SIGNED: if (texUnit->EnvMode == GL_COMBINE4_NV) - texUnit->_CurrentCombine->_NumArgsA = 4; + combine->_NumArgsA = 4; else - texUnit->_CurrentCombine->_NumArgsA = 2; + combine->_NumArgsA = 2; break; case GL_MODULATE: case GL_SUBTRACT: - texUnit->_CurrentCombine->_NumArgsA = 2; + combine->_NumArgsA = 2; break; case GL_INTERPOLATE: case GL_MODULATE_ADD_ATI: case GL_MODULATE_SIGNED_ADD_ATI: case GL_MODULATE_SUBTRACT_ATI: - texUnit->_CurrentCombine->_NumArgsA = 3; + combine->_NumArgsA = 3; break; default: - texUnit->_CurrentCombine->_NumArgsA = 0; + combine->_NumArgsA = 0; _mesa_problem(ctx, "invalid Alpha combine mode in update_texture_state"); break; } @@ -540,6 +476,7 @@ update_texture_state( GLcontext *ctx ) GLuint unit; struct gl_fragment_program *fprog = NULL; struct gl_vertex_program *vprog = NULL; + GLbitfield enabledFragUnits = 0x0; if (ctx->Shader.CurrentProgram && ctx->Shader.CurrentProgram->LinkStatus) { @@ -561,71 +498,70 @@ update_texture_state( GLcontext *ctx ) /* TODO: only set this if there are actual changes */ ctx->NewState |= _NEW_TEXTURE; - ctx->Texture._EnabledUnits = 0; - ctx->Texture._GenFlags = 0; - ctx->Texture._TexMatEnabled = 0; - ctx->Texture._TexGenEnabled = 0; + ctx->Texture._EnabledUnits = 0x0; + ctx->Texture._GenFlags = 0x0; + ctx->Texture._TexMatEnabled = 0x0; + ctx->Texture._TexGenEnabled = 0x0; /* * Update texture unit state. */ for (unit = 0; unit < ctx->Const.MaxTextureImageUnits; unit++) { struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit]; - GLbitfield enableBits; - - texUnit->_Current = NULL; - texUnit->_ReallyEnabled = 0; - texUnit->_GenFlags = 0; + GLbitfield enabledVertTargets = 0x0; + GLbitfield enabledFragTargets = 0x0; + GLbitfield enabledTargets = 0x0; + GLuint texIndex; /* Get the bitmask of texture target enables. * enableBits will be a mask of the TEXTURE_*_BIT flags indicating * which texture targets are enabled (fixed function) or referenced * by a fragment shader/program. When multiple flags are set, we'll - * settle on the one with highest priority (see texture_override below). + * settle on the one with highest priority (see below). */ - enableBits = 0x0; if (vprog) { - enableBits |= vprog->Base.TexturesUsed[unit]; + enabledVertTargets |= vprog->Base.TexturesUsed[unit]; } + if (fprog) { - enableBits |= fprog->Base.TexturesUsed[unit]; + enabledFragTargets |= fprog->Base.TexturesUsed[unit]; } else { /* fixed-function fragment program */ - enableBits |= texUnit->Enabled; + enabledFragTargets |= texUnit->Enabled; } - if (enableBits == 0x0) + enabledTargets = enabledVertTargets | enabledFragTargets; + + texUnit->_ReallyEnabled = 0x0; + + if (enabledTargets == 0x0) { + /* neither vertex nor fragment processing uses this unit */ continue; + } - ASSERT(texUnit->Current1D); - ASSERT(texUnit->Current2D); - ASSERT(texUnit->Current3D); - ASSERT(texUnit->CurrentCubeMap); - ASSERT(texUnit->CurrentRect); - ASSERT(texUnit->Current1DArray); - ASSERT(texUnit->Current2DArray); - - /* Look for the highest-priority texture target that's enabled and - * complete. That's the one we'll use for texturing. If we're using - * a fragment program we're guaranteed that bitcount(enabledBits) <= 1. + /* Look for the highest priority texture target that's enabled (or used + * by the vert/frag shaders) and "complete". That's the one we'll use + * for texturing. If we're using vert/frag program we're guaranteed + * that bitcount(enabledBits) <= 1. + * Note that the TEXTURE_x_INDEX values are in high to low priority. */ - texture_override(ctx, texUnit, enableBits, - texUnit->Current2DArray, TEXTURE_2D_ARRAY_BIT); - texture_override(ctx, texUnit, enableBits, - texUnit->Current1DArray, TEXTURE_1D_ARRAY_BIT); - texture_override(ctx, texUnit, enableBits, - texUnit->CurrentCubeMap, TEXTURE_CUBE_BIT); - texture_override(ctx, texUnit, enableBits, - texUnit->Current3D, TEXTURE_3D_BIT); - texture_override(ctx, texUnit, enableBits, - texUnit->CurrentRect, TEXTURE_RECT_BIT); - texture_override(ctx, texUnit, enableBits, - texUnit->Current2D, TEXTURE_2D_BIT); - texture_override(ctx, texUnit, enableBits, - texUnit->Current1D, TEXTURE_1D_BIT); + for (texIndex = 0; texIndex < NUM_TEXTURE_TARGETS; texIndex++) { + if (enabledTargets & (1 << texIndex)) { + struct gl_texture_object *texObj = texUnit->CurrentTex[texIndex]; + if (!texObj->_Complete) { + _mesa_test_texobj_completeness(ctx, texObj); + } + if (texObj->_Complete) { + texUnit->_ReallyEnabled = 1 << texIndex; + _mesa_reference_texobj(&texUnit->_Current, texObj); + break; + } + } + } if (!texUnit->_ReallyEnabled) { + _mesa_reference_texobj(&texUnit->_Current, NULL); continue; } @@ -633,6 +569,9 @@ update_texture_state( GLcontext *ctx ) ctx->Texture._EnabledUnits |= (1 << unit); + if (enabledFragTargets) + enabledFragUnits |= (1 << unit); + update_tex_combine(ctx, texUnit); } @@ -644,28 +583,30 @@ update_texture_state( GLcontext *ctx ) = (fprog->Base.InputsRead >> FRAG_ATTRIB_TEX0) & coordMask; } else { - ctx->Texture._EnabledCoordUnits = ctx->Texture._EnabledUnits; + ctx->Texture._EnabledCoordUnits = enabledFragUnits; } /* Setup texgen for those texture coordinate sets that are in use */ for (unit = 0; unit < ctx->Const.MaxTextureCoordUnits; unit++) { struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit]; + texUnit->_GenFlags = 0x0; + if (!(ctx->Texture._EnabledCoordUnits & (1 << unit))) continue; if (texUnit->TexGenEnabled) { if (texUnit->TexGenEnabled & S_BIT) { - texUnit->_GenFlags |= texUnit->_GenBitS; + texUnit->_GenFlags |= texUnit->GenS._ModeBit; } if (texUnit->TexGenEnabled & T_BIT) { - texUnit->_GenFlags |= texUnit->_GenBitT; - } - if (texUnit->TexGenEnabled & Q_BIT) { - texUnit->_GenFlags |= texUnit->_GenBitQ; + texUnit->_GenFlags |= texUnit->GenT._ModeBit; } if (texUnit->TexGenEnabled & R_BIT) { - texUnit->_GenFlags |= texUnit->_GenBitR; + texUnit->_GenFlags |= texUnit->GenR._ModeBit; + } + if (texUnit->TexGenEnabled & Q_BIT) { + texUnit->_GenFlags |= texUnit->GenQ._ModeBit; } ctx->Texture._TexGenEnabled |= ENABLE_TEXGEN(unit); @@ -748,6 +689,7 @@ static void init_texture_unit( GLcontext *ctx, GLuint unit ) { struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit]; + GLuint tex; texUnit->EnvMode = GL_MODULATE; ASSIGN_4V( texUnit->EnvColor, 0.0, 0.0, 0.0, 0.0 ); @@ -755,35 +697,43 @@ init_texture_unit( GLcontext *ctx, GLuint unit ) texUnit->Combine = default_combine_state; texUnit->_EnvMode = default_combine_state; texUnit->_CurrentCombine = & texUnit->_EnvMode; - - texUnit->TexGenEnabled = 0; - texUnit->GenModeS = GL_EYE_LINEAR; - texUnit->GenModeT = GL_EYE_LINEAR; - texUnit->GenModeR = GL_EYE_LINEAR; - texUnit->GenModeQ = GL_EYE_LINEAR; - texUnit->_GenBitS = TEXGEN_EYE_LINEAR; - texUnit->_GenBitT = TEXGEN_EYE_LINEAR; - texUnit->_GenBitR = TEXGEN_EYE_LINEAR; - texUnit->_GenBitQ = TEXGEN_EYE_LINEAR; + texUnit->BumpTarget = GL_TEXTURE0; + + texUnit->TexGenEnabled = 0x0; + texUnit->GenS.Mode = GL_EYE_LINEAR; + texUnit->GenT.Mode = GL_EYE_LINEAR; + texUnit->GenR.Mode = GL_EYE_LINEAR; + texUnit->GenQ.Mode = GL_EYE_LINEAR; + texUnit->GenS._ModeBit = TEXGEN_EYE_LINEAR; + texUnit->GenT._ModeBit = TEXGEN_EYE_LINEAR; + texUnit->GenR._ModeBit = TEXGEN_EYE_LINEAR; + texUnit->GenQ._ModeBit = TEXGEN_EYE_LINEAR; /* Yes, these plane coefficients are correct! */ - ASSIGN_4V( texUnit->ObjectPlaneS, 1.0, 0.0, 0.0, 0.0 ); - ASSIGN_4V( texUnit->ObjectPlaneT, 0.0, 1.0, 0.0, 0.0 ); - ASSIGN_4V( texUnit->ObjectPlaneR, 0.0, 0.0, 0.0, 0.0 ); - ASSIGN_4V( texUnit->ObjectPlaneQ, 0.0, 0.0, 0.0, 0.0 ); - ASSIGN_4V( texUnit->EyePlaneS, 1.0, 0.0, 0.0, 0.0 ); - ASSIGN_4V( texUnit->EyePlaneT, 0.0, 1.0, 0.0, 0.0 ); - ASSIGN_4V( texUnit->EyePlaneR, 0.0, 0.0, 0.0, 0.0 ); - ASSIGN_4V( texUnit->EyePlaneQ, 0.0, 0.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenS.ObjectPlane, 1.0, 0.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenT.ObjectPlane, 0.0, 1.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenR.ObjectPlane, 0.0, 0.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenQ.ObjectPlane, 0.0, 0.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenS.EyePlane, 1.0, 0.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenT.EyePlane, 0.0, 1.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenR.EyePlane, 0.0, 0.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenQ.EyePlane, 0.0, 0.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenS.ObjectPlane, 1.0, 0.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenT.ObjectPlane, 0.0, 1.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenR.ObjectPlane, 0.0, 0.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenQ.ObjectPlane, 0.0, 0.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenS.EyePlane, 1.0, 0.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenT.EyePlane, 0.0, 1.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenR.EyePlane, 0.0, 0.0, 0.0, 0.0 ); + ASSIGN_4V( texUnit->GenQ.EyePlane, 0.0, 0.0, 0.0, 0.0 ); + /* no mention of this in spec, but maybe id matrix expected? */ + ASSIGN_4V( texUnit->RotMatrix, 1.0, 0.0, 0.0, 1.0 ); /* initialize current texture object ptrs to the shared default objects */ - _mesa_reference_texobj(&texUnit->Current1D, ctx->Shared->Default1D); - _mesa_reference_texobj(&texUnit->Current2D, ctx->Shared->Default2D); - _mesa_reference_texobj(&texUnit->Current3D, ctx->Shared->Default3D); - _mesa_reference_texobj(&texUnit->CurrentCubeMap, ctx->Shared->DefaultCubeMap); - _mesa_reference_texobj(&texUnit->CurrentRect, ctx->Shared->DefaultRect); - _mesa_reference_texobj(&texUnit->Current1DArray, ctx->Shared->Default1DArray); - _mesa_reference_texobj(&texUnit->Current2DArray, ctx->Shared->Default2DArray); + for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { + _mesa_reference_texobj(&texUnit->CurrentTex[tex], + ctx->Shared->DefaultTex[tex]); + } } @@ -793,26 +743,24 @@ init_texture_unit( GLcontext *ctx, GLuint unit ) GLboolean _mesa_init_texture(GLcontext *ctx) { - GLuint i; - - assert(MAX_TEXTURE_LEVELS >= MAX_3D_TEXTURE_LEVELS); - assert(MAX_TEXTURE_LEVELS >= MAX_CUBE_TEXTURE_LEVELS); + GLuint u; /* Texture group */ ctx->Texture.CurrentUnit = 0; /* multitexture */ - ctx->Texture._EnabledUnits = 0; + ctx->Texture._EnabledUnits = 0x0; ctx->Texture.SharedPalette = GL_FALSE; #if FEATURE_colortable _mesa_init_colortable(&ctx->Texture.Palette); #endif - for (i = 0; i < MAX_TEXTURE_UNITS; i++) - init_texture_unit( ctx, i ); + for (u = 0; u < MAX_TEXTURE_UNITS; u++) + init_texture_unit(ctx, u); /* After we're done initializing the context's texture state the default * texture objects' refcounts should be at least MAX_TEXTURE_UNITS + 1. */ - assert(ctx->Shared->Default1D->RefCount >= MAX_TEXTURE_UNITS + 1); + assert(ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]->RefCount + >= MAX_TEXTURE_UNITS + 1); /* Allocate proxy textures */ if (!alloc_proxy_textures( ctx )) @@ -832,14 +780,9 @@ _mesa_free_texture_data(GLcontext *ctx) /* unreference current textures */ for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) { - struct gl_texture_unit *unit = ctx->Texture.Unit + u; - _mesa_reference_texobj(&unit->Current1D, NULL); - _mesa_reference_texobj(&unit->Current2D, NULL); - _mesa_reference_texobj(&unit->Current3D, NULL); - _mesa_reference_texobj(&unit->CurrentCubeMap, NULL); - _mesa_reference_texobj(&unit->CurrentRect, NULL); - _mesa_reference_texobj(&unit->Current1DArray, NULL); - _mesa_reference_texobj(&unit->Current2DArray, NULL); + for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++) { + _mesa_reference_texobj(&ctx->Texture.Unit[u].CurrentTex[tgt], NULL); + } } /* Free proxy texture objects */ @@ -847,11 +790,8 @@ _mesa_free_texture_data(GLcontext *ctx) ctx->Driver.DeleteTexture(ctx, ctx->Texture.ProxyTex[tgt]); #if FEATURE_colortable - { - GLuint i; - for (i = 0; i < MAX_TEXTURE_IMAGE_UNITS; i++) - _mesa_free_colortable_data( &ctx->Texture.Unit[i].ColorTable ); - } + for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) + _mesa_free_colortable_data(&ctx->Texture.Unit[u].ColorTable); #endif } @@ -864,17 +804,13 @@ _mesa_free_texture_data(GLcontext *ctx) void _mesa_update_default_objects_texture(GLcontext *ctx) { - GLuint i; - - for (i = 0; i < MAX_TEXTURE_UNITS; i++) { - struct gl_texture_unit *texUnit = &ctx->Texture.Unit[i]; - - _mesa_reference_texobj(&texUnit->Current1D, ctx->Shared->Default1D); - _mesa_reference_texobj(&texUnit->Current2D, ctx->Shared->Default2D); - _mesa_reference_texobj(&texUnit->Current3D, ctx->Shared->Default3D); - _mesa_reference_texobj(&texUnit->CurrentCubeMap, ctx->Shared->DefaultCubeMap); - _mesa_reference_texobj(&texUnit->CurrentRect, ctx->Shared->DefaultRect); - _mesa_reference_texobj(&texUnit->Current1DArray, ctx->Shared->Default1DArray); - _mesa_reference_texobj(&texUnit->Current2DArray, ctx->Shared->Default2DArray); + GLuint u, tex; + + for (u = 0; u < MAX_TEXTURE_UNITS; u++) { + struct gl_texture_unit *texUnit = &ctx->Texture.Unit[u]; + for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { + _mesa_reference_texobj(&texUnit->CurrentTex[tex], + ctx->Shared->DefaultTex[tex]); + } } } diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c index 6360ca15f8..cc3c6958c7 100644 --- a/src/mesa/main/texstore.c +++ b/src/mesa/main/texstore.c @@ -2471,6 +2471,95 @@ _mesa_texstore_ycbcr(TEXSTORE_PARAMS) return GL_TRUE; } +GLboolean +_mesa_texstore_dudv8(TEXSTORE_PARAMS) +{ + const GLboolean littleEndian = _mesa_little_endian(); + + ASSERT(dstFormat == &_mesa_texformat_dudv8); + ASSERT(dstFormat->TexelBytes == 2); + ASSERT(ctx->Extensions.ATI_envmap_bumpmap); + ASSERT((srcFormat == GL_DU8DV8_ATI) || + (srcFormat == GL_DUDV_ATI)); + ASSERT(baseInternalFormat == GL_DUDV_ATI); + + if (!srcPacking->SwapBytes && srcType == GL_BYTE && + littleEndian) { + /* simple memcpy path */ + memcpy_texture(ctx, dims, + dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset, + dstRowStride, + dstImageOffsets, + srcWidth, srcHeight, srcDepth, srcFormat, srcType, + srcAddr, srcPacking); + } + else if (srcType == GL_BYTE) { + + GLubyte dstmap[4]; + + /* dstmap - how to swizzle from RGBA to dst format: + */ + if (littleEndian) { + dstmap[0] = 0; + dstmap[1] = 3; + } + else { + dstmap[0] = 3; + dstmap[1] = 0; + } + dstmap[2] = ZERO; /* ? */ + dstmap[3] = ONE; /* ? */ + + _mesa_swizzle_ubyte_image(ctx, dims, + GL_LUMINANCE_ALPHA, /* hack */ + GL_UNSIGNED_BYTE, /* hack */ + GL_LUMINANCE_ALPHA, /* hack */ + dstmap, 2, + dstAddr, dstXoffset, dstYoffset, dstZoffset, + dstRowStride, dstImageOffsets, + srcWidth, srcHeight, srcDepth, srcAddr, + srcPacking); + } + else { + /* general path - note this is defined for 2d textures only */ + const GLint components = _mesa_components_in_format(baseInternalFormat); + const GLint srcStride = _mesa_image_row_stride(srcPacking, + srcWidth, srcFormat, srcType); + GLbyte *tempImage, *dst, *src; + GLint row; + + tempImage = (GLbyte *) _mesa_malloc(srcWidth * srcHeight * srcDepth + * components * sizeof(GLbyte)); + if (!tempImage) + return GL_FALSE; + + src = (GLbyte *) _mesa_image_address(dims, srcPacking, srcAddr, + srcWidth, srcHeight, + srcFormat, srcType, + 0, 0, 0); + + dst = tempImage; + for (row = 0; row < srcHeight; row++) { + _mesa_unpack_dudv_span_byte(ctx, srcWidth, baseInternalFormat, + dst, srcFormat, srcType, src, + srcPacking, 0); + dst += srcWidth * components; + src += srcStride; + } + + src = tempImage; + dst = (GLbyte *) dstAddr + + dstYoffset * dstRowStride + + dstXoffset * dstFormat->TexelBytes; + for (row = 0; row < srcHeight; row++) { + memcpy(dst, src, srcWidth * dstFormat->TexelBytes); + dst += dstRowStride; + src += srcWidth * dstFormat->TexelBytes; + } + _mesa_free((void *) tempImage); + } + return GL_TRUE; +} /** @@ -3882,7 +3971,7 @@ _mesa_get_teximage(GLcontext *ctx, GLenum target, GLint level, GLint col; GLbitfield transferOps = 0x0; - if (type == GL_FLOAT && + if (type == GL_FLOAT && texImage->TexFormat->BaseFormat != GL_DUDV_ATI && ((ctx->Color.ClampReadColor == GL_TRUE) || (ctx->Color.ClampReadColor == GL_FIXED_ONLY_ARB && texImage->TexFormat->DataType != GL_FLOAT))) diff --git a/src/mesa/main/texstore.h b/src/mesa/main/texstore.h index b03386b2ac..c9e639be4e 100644 --- a/src/mesa/main/texstore.h +++ b/src/mesa/main/texstore.h @@ -78,7 +78,7 @@ extern GLboolean _mesa_texstore_sargb8(TEXSTORE_PARAMS); extern GLboolean _mesa_texstore_sl8(TEXSTORE_PARAMS); extern GLboolean _mesa_texstore_sla8(TEXSTORE_PARAMS); #endif - +extern GLboolean _mesa_texstore_dudv8(TEXSTORE_PARAMS); extern GLchan * _mesa_make_temp_chan_image(GLcontext *ctx, GLuint dims, diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h index 9287e8515c..f5bf6e2c85 100644 --- a/src/mesa/main/version.h +++ b/src/mesa/main/version.h @@ -1,10 +1,6 @@ /* * Mesa 3-D graphics library -<<<<<<< HEAD:src/mesa/main/version.h * Version: 7.5 -======= - * Version: 7.4 ->>>>>>> origin/gallium-0.2:src/mesa/main/version.h * * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. * diff --git a/src/mesa/main/viewport.c b/src/mesa/main/viewport.c new file mode 100644 index 0000000000..ead856d32c --- /dev/null +++ b/src/mesa/main/viewport.c @@ -0,0 +1,176 @@ +/* + * Mesa 3-D graphics library + * Version: 7.5 + * + * 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 viewport.c + * glViewport and glDepthRange functions. + */ + + +#include "context.h" +#include "macros.h" +#include "viewport.h" + + +/** + * Set the viewport. + * \sa Called via glViewport() or display list execution. + * + * Flushes the vertices and calls _mesa_set_viewport() with the given + * parameters. + */ +void GLAPIENTRY +_mesa_Viewport(GLint x, GLint y, GLsizei width, GLsizei height) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + _mesa_set_viewport(ctx, x, y, width, height); +} + + +/** + * Set new viewport parameters and update derived state (the _WindowMap + * matrix). Usually called from _mesa_Viewport(). + * + * \param ctx GL context. + * \param x, y coordinates of the lower left corner of the viewport rectangle. + * \param width width of the viewport rectangle. + * \param height height of the viewport rectangle. + */ +void +_mesa_set_viewport(GLcontext *ctx, GLint x, GLint y, + GLsizei width, GLsizei height) +{ + if (MESA_VERBOSE & VERBOSE_API) + _mesa_debug(ctx, "glViewport %d %d %d %d\n", x, y, width, height); + + if (width < 0 || height < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glViewport(%d, %d, %d, %d)", x, y, width, height); + return; + } + + /* clamp width and height to the implementation dependent range */ + width = CLAMP(width, 1, (GLsizei) ctx->Const.MaxViewportWidth); + height = CLAMP(height, 1, (GLsizei) ctx->Const.MaxViewportHeight); + + ctx->Viewport.X = x; + ctx->Viewport.Width = width; + ctx->Viewport.Y = y; + ctx->Viewport.Height = height; + ctx->NewState |= _NEW_VIEWPORT; + +#if 1 + /* XXX remove this someday. Currently the DRI drivers rely on + * the WindowMap matrix being up to date in the driver's Viewport + * and DepthRange functions. + */ + _math_matrix_viewport(&ctx->Viewport._WindowMap, + ctx->Viewport.X, ctx->Viewport.Y, + ctx->Viewport.Width, ctx->Viewport.Height, + ctx->Viewport.Near, ctx->Viewport.Far, + ctx->DrawBuffer->_DepthMaxF); +#endif + + if (ctx->Driver.Viewport) { + /* Many drivers will use this call to check for window size changes + * and reallocate the z/stencil/accum/etc buffers if needed. + */ + ctx->Driver.Viewport(ctx, x, y, width, height); + } +} + + +/** + * Called by glDepthRange + * + * \param nearval specifies the Z buffer value which should correspond to + * the near clip plane + * \param farval specifies the Z buffer value which should correspond to + * the far clip plane + */ +void GLAPIENTRY +_mesa_DepthRange(GLclampd nearval, GLclampd farval) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + + if (MESA_VERBOSE&VERBOSE_API) + _mesa_debug(ctx, "glDepthRange %f %f\n", nearval, farval); + + ctx->Viewport.Near = (GLfloat) CLAMP(nearval, 0.0, 1.0); + ctx->Viewport.Far = (GLfloat) CLAMP(farval, 0.0, 1.0); + ctx->NewState |= _NEW_VIEWPORT; + +#if 1 + /* XXX remove this someday. Currently the DRI drivers rely on + * the WindowMap matrix being up to date in the driver's Viewport + * and DepthRange functions. + */ + _math_matrix_viewport(&ctx->Viewport._WindowMap, + ctx->Viewport.X, ctx->Viewport.Y, + ctx->Viewport.Width, ctx->Viewport.Height, + ctx->Viewport.Near, ctx->Viewport.Far, + ctx->DrawBuffer->_DepthMaxF); +#endif + + if (ctx->Driver.DepthRange) { + ctx->Driver.DepthRange(ctx, nearval, farval); + } +} + + + +/** + * Initialize the context viewport attribute group. + * \param ctx the GL context. + */ +void _mesa_init_viewport(GLcontext *ctx) +{ + GLfloat depthMax = 65535.0F; /* sorf of arbitrary */ + + /* Viewport group */ + ctx->Viewport.X = 0; + ctx->Viewport.Y = 0; + ctx->Viewport.Width = 0; + ctx->Viewport.Height = 0; + ctx->Viewport.Near = 0.0; + ctx->Viewport.Far = 1.0; + _math_matrix_ctr(&ctx->Viewport._WindowMap); + + _math_matrix_viewport(&ctx->Viewport._WindowMap, 0, 0, 0, 0, + 0.0F, 1.0F, depthMax); +} + + +/** + * Free the context viewport attribute group data. + * \param ctx the GL context. + */ +void _mesa_free_viewport_data(GLcontext *ctx) +{ + _math_matrix_dtr(&ctx->Viewport._WindowMap); +} + diff --git a/src/mesa/main/viewport.h b/src/mesa/main/viewport.h new file mode 100644 index 0000000000..f08fef2797 --- /dev/null +++ b/src/mesa/main/viewport.h @@ -0,0 +1,52 @@ +/* + * Mesa 3-D graphics library + * Version: 7.5 + * + * 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. + */ + + +#ifndef VIEWPORT_H +#define VIEWPORT_H + + +extern void GLAPIENTRY +_mesa_Viewport(GLint x, GLint y, GLsizei width, GLsizei height); + + +extern void +_mesa_set_viewport(GLcontext *ctx, GLint x, GLint y, + GLsizei width, GLsizei height); + + +extern void GLAPIENTRY +_mesa_DepthRange(GLclampd nearval, GLclampd farval); + + +extern void +_mesa_init_viewport(GLcontext *ctx); + + +extern void +_mesa_free_viewport_data(GLcontext *ctx); + + +#endif diff --git a/src/mesa/main/vtxfmt.c b/src/mesa/main/vtxfmt.c index 0204979003..1f807dc3dc 100644 --- a/src/mesa/main/vtxfmt.c +++ b/src/mesa/main/vtxfmt.c @@ -54,9 +54,12 @@ ASSERT( tnl->Current ); \ ASSERT( tnl->SwapCount < NUM_VERTEX_FORMAT_ENTRIES ); \ ASSERT( tmp_offset >= 0 ); \ - \ - /* Save the swapped function's dispatch entry so it can be */ \ - /* restored later. */ \ + \ + if (tnl->SwapCount == 0) \ + ctx->Driver.BeginVertices( ctx ); \ + \ + /* Save the swapped function's dispatch entry so it can be */ \ + /* restored later. */ \ tnl->Swapped[tnl->SwapCount].location = & (((_glapi_proc *)ctx->Exec)[tmp_offset]); \ tnl->Swapped[tnl->SwapCount].function = (_glapi_proc)TAG(FUNC); \ tnl->SwapCount++; \ diff --git a/src/mesa/math/m_debug_util.h b/src/mesa/math/m_debug_util.h index 7abe6f2565..2e67db8e55 100644 --- a/src/mesa/math/m_debug_util.h +++ b/src/mesa/math/m_debug_util.h @@ -231,8 +231,8 @@ extern char *mesa_profile; #define BEGIN_RACE(x) \ x = LONG_MAX; \ for (cycle_i = 0; cycle_i <10; cycle_i++) { \ - register long cycle_tmp1 asm("l0"); \ - register long cycle_tmp2 asm("l1"); \ + register long cycle_tmp1 __asm__("l0"); \ + register long cycle_tmp2 __asm__("l1"); \ /* rd %tick, %l0 */ \ __asm__ __volatile__ (".word 0xa1410000" : "=r" (cycle_tmp1)); /* save timestamp */ diff --git a/src/mesa/math/m_matrix.c b/src/mesa/math/m_matrix.c index 84b4cae4ad..58cae88b08 100644 --- a/src/mesa/math/m_matrix.c +++ b/src/mesa/math/m_matrix.c @@ -1620,3 +1620,24 @@ _math_transposefd( GLfloat to[16], const GLdouble from[16] ) /*@}*/ + +/** + * Transform a 4-element row vector (1x4 matrix) by a 4x4 matrix. This + * function is used for transforming clipping plane equations and spotlight + * directions. + * Mathematically, u = v * m. + * Input: v - input vector + * m - transformation matrix + * Output: u - transformed vector + */ +void +_mesa_transform_vector( GLfloat u[4], const GLfloat v[4], const GLfloat m[16] ) +{ + const GLfloat v0 = v[0], v1 = v[1], v2 = v[2], v3 = v[3]; +#define M(row,col) m[row + col*4] + u[0] = v0 * M(0,0) + v1 * M(1,0) + v2 * M(2,0) + v3 * M(3,0); + u[1] = v0 * M(0,1) + v1 * M(1,1) + v2 * M(2,1) + v3 * M(3,1); + u[2] = v0 * M(0,2) + v1 * M(1,2) + v2 * M(2,2) + v3 * M(3,2); + u[3] = v0 * M(0,3) + v1 * M(1,3) + v2 * M(2,3) + v3 * M(3,3); +#undef M +} diff --git a/src/mesa/math/m_matrix.h b/src/mesa/math/m_matrix.h index a8d9000e89..3bc5de6cd4 100644 --- a/src/mesa/math/m_matrix.h +++ b/src/mesa/math/m_matrix.h @@ -200,6 +200,9 @@ do { \ } while (0) +extern void +_mesa_transform_vector(GLfloat u[4], const GLfloat v[4], const GLfloat m[16]); + /*@}*/ diff --git a/src/mesa/math/m_xform.c b/src/mesa/math/m_xform.c index fdc8abd434..369f2c6e95 100644 --- a/src/mesa/math/m_xform.c +++ b/src/mesa/math/m_xform.c @@ -40,7 +40,6 @@ #include "m_matrix.h" #include "m_translate.h" #include "m_xform.h" -#include "mathmod.h" #ifdef DEBUG_MATH @@ -97,99 +96,6 @@ transform_func *_mesa_transform_tab[5]; #undef ARGS - - -GLvector4f *_mesa_project_points( GLvector4f *proj_vec, - const GLvector4f *clip_vec ) -{ - const GLuint stride = clip_vec->stride; - const GLfloat *from = (GLfloat *)clip_vec->start; - const GLuint count = clip_vec->count; - GLfloat (*vProj)[4] = (GLfloat (*)[4])proj_vec->start; - GLuint i; - - for (i = 0 ; i < count ; i++, STRIDE_F(from, stride)) - { - GLfloat oow = 1.0F / from[3]; - vProj[i][3] = oow; - vProj[i][0] = from[0] * oow; - vProj[i][1] = from[1] * oow; - vProj[i][2] = from[2] * oow; - } - - proj_vec->flags |= VEC_SIZE_4; - proj_vec->size = 3; - proj_vec->count = clip_vec->count; - return proj_vec; -} - - - - - - -/* - * Transform a 4-element row vector (1x4 matrix) by a 4x4 matrix. This - * function is used for transforming clipping plane equations and spotlight - * directions. - * Mathematically, u = v * m. - * Input: v - input vector - * m - transformation matrix - * Output: u - transformed vector - */ -void _mesa_transform_vector( GLfloat u[4], const GLfloat v[4], const GLfloat m[16] ) -{ - GLfloat v0=v[0], v1=v[1], v2=v[2], v3=v[3]; -#define M(row,col) m[row + col*4] - u[0] = v0 * M(0,0) + v1 * M(1,0) + v2 * M(2,0) + v3 * M(3,0); - u[1] = v0 * M(0,1) + v1 * M(1,1) + v2 * M(2,1) + v3 * M(3,1); - u[2] = v0 * M(0,2) + v1 * M(1,2) + v2 * M(2,2) + v3 * M(3,2); - u[3] = v0 * M(0,3) + v1 * M(1,3) + v2 * M(2,3) + v3 * M(3,3); -#undef M -} - - -/* Useful for one-off point transformations, as in clipping. - * Note that because the matrix isn't analysed we do too many - * multiplies, and that the result is always 4-clean. - */ -void _mesa_transform_point_sz( GLfloat Q[4], const GLfloat M[16], - const GLfloat P[4], GLuint sz ) -{ - if (Q == P) - return; - - if (sz == 4) - { - Q[0] = M[0] * P[0] + M[4] * P[1] + M[8] * P[2] + M[12] * P[3]; - Q[1] = M[1] * P[0] + M[5] * P[1] + M[9] * P[2] + M[13] * P[3]; - Q[2] = M[2] * P[0] + M[6] * P[1] + M[10] * P[2] + M[14] * P[3]; - Q[3] = M[3] * P[0] + M[7] * P[1] + M[11] * P[2] + M[15] * P[3]; - } - else if (sz == 3) - { - Q[0] = M[0] * P[0] + M[4] * P[1] + M[8] * P[2] + M[12]; - Q[1] = M[1] * P[0] + M[5] * P[1] + M[9] * P[2] + M[13]; - Q[2] = M[2] * P[0] + M[6] * P[1] + M[10] * P[2] + M[14]; - Q[3] = M[3] * P[0] + M[7] * P[1] + M[11] * P[2] + M[15]; - } - else if (sz == 2) - { - Q[0] = M[0] * P[0] + M[4] * P[1] + M[12]; - Q[1] = M[1] * P[0] + M[5] * P[1] + M[13]; - Q[2] = M[2] * P[0] + M[6] * P[1] + M[14]; - Q[3] = M[3] * P[0] + M[7] * P[1] + M[15]; - } - else if (sz == 1) - { - Q[0] = M[0] * P[0] + M[12]; - Q[1] = M[1] * P[0] + M[13]; - Q[2] = M[2] * P[0] + M[14]; - Q[3] = M[3] * P[0] + M[15]; - } -} - - /* * This is called only once. It initializes several tables with pointers * to optimized transformation functions. This is where we can test for diff --git a/src/mesa/math/m_xform.h b/src/mesa/math/m_xform.h index 24e8ddbd57..7ef76e0b92 100644 --- a/src/mesa/math/m_xform.h +++ b/src/mesa/math/m_xform.h @@ -42,10 +42,6 @@ extern void -_mesa_transform_vector(GLfloat u[4], CONST GLfloat v[4], CONST GLfloat m[16]); - - -extern void _math_init_transformation(void); @@ -148,18 +144,6 @@ typedef void (_XFORMAPIP transform_func)( GLvector4f *to_vec, CONST GLvector4f *from_vec ); -extern GLvector4f *_mesa_project_points( GLvector4f *to, - CONST GLvector4f *from ); - -extern void _mesa_transform_bounds3( GLubyte *orMask, GLubyte *andMask, - CONST GLfloat m[16], - CONST GLfloat src[][3] ); - -extern void _mesa_transform_bounds2( GLubyte *orMask, GLubyte *andMask, - CONST GLfloat m[16], - CONST GLfloat src[][3] ); - - extern dotprod_func _mesa_dotprod_tab[5]; extern vec_copy_func _mesa_copy_tab[0x10]; extern vec_copy_func _mesa_copy_clean_tab[5]; @@ -173,9 +157,6 @@ extern normal_func _mesa_normal_tab[0xf]; extern transform_func *_mesa_transform_tab[5]; -extern void _mesa_transform_point_sz( GLfloat Q[4], CONST GLfloat M[16], - CONST GLfloat P[4], GLuint sz ); - #define TransformRaw( to, mat, from ) \ ( _mesa_transform_tab[(from)->size][(mat)->type]( to, (mat)->m, from ), \ diff --git a/src/mesa/shader/arbprogparse.c b/src/mesa/shader/arbprogparse.c index 2e0fc3694a..a4d0fc3efc 100644 --- a/src/mesa/shader/arbprogparse.c +++ b/src/mesa/shader/arbprogparse.c @@ -969,6 +969,7 @@ parse_output_color_num (GLcontext * ctx, const GLubyte ** inst, GLint i = parse_integer (inst, Program); if ((i < 0) || (i >= (int)ctx->Const.MaxDrawBuffers)) { + *color = 0; program_error(ctx, Program->Position, "Invalid draw buffer index"); return 1; } @@ -1688,7 +1689,7 @@ parse_result_binding(GLcontext *ctx, const GLubyte **inst, */ parse_output_color_num(ctx, inst, Program, &out_color); ASSERT(out_color < MAX_DRAW_BUFFERS); - *outputReg = FRAG_RESULT_COLR; + *outputReg = FRAG_RESULT_COLOR; } else { /* for vtx programs, this is VERTEX_RESULT_POSITION */ @@ -1699,7 +1700,7 @@ parse_result_binding(GLcontext *ctx, const GLubyte **inst, case FRAGMENT_RESULT_DEPTH: if (Program->Base.Target == GL_FRAGMENT_PROGRAM_ARB) { /* for frag programs, this is FRAGMENT_RESULT_DEPTH */ - *outputReg = FRAG_RESULT_DEPR; + *outputReg = FRAG_RESULT_DEPTH; } else { /* for vtx programs, this is VERTEX_RESULT_COLOR */ @@ -2246,7 +2247,7 @@ parse_declaration (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc static GLuint parse_masked_dst_reg (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program, - enum register_file *File, GLuint *Index, GLint *WriteMask) + gl_register_file *File, GLuint *Index, GLint *WriteMask) { GLuint tmp, result; struct var_cache *dst; @@ -2478,7 +2479,7 @@ static GLuint parse_src_reg (GLcontext * ctx, const GLubyte ** inst, struct var_cache **vc_head, struct arb_program *Program, - enum register_file * File, GLint * Index, + gl_register_file * File, GLint * Index, GLboolean *IsRelOffset ) { struct var_cache *src; @@ -2527,7 +2528,7 @@ parse_src_reg (GLcontext * ctx, const GLubyte ** inst, return 1; } - *File = (enum register_file) src->param_binding_type; + *File = (gl_register_file) src->param_binding_type; switch (*(*inst)++) { case ARRAY_INDEX_ABSOLUTE: @@ -2573,7 +2574,7 @@ parse_src_reg (GLcontext * ctx, const GLubyte ** inst, if (parse_param_use (ctx, inst, vc_head, Program, &src)) return 1; - *File = (enum register_file) src->param_binding_type; + *File = (gl_register_file) src->param_binding_type; *Index = src->param_binding_begin; break; } @@ -2598,7 +2599,7 @@ parse_src_reg (GLcontext * ctx, const GLubyte ** inst, /* XXX: We have to handle offsets someplace in here! -- or are those above? */ case vt_param: - *File = (enum register_file) src->param_binding_type; + *File = (gl_register_file) src->param_binding_type; *Index = src->param_binding_begin; break; @@ -2623,7 +2624,7 @@ parse_src_reg (GLcontext * ctx, const GLubyte ** inst, } if (*File == PROGRAM_STATE_VAR) { - enum register_file file; + gl_register_file file; /* If we're referencing the Program->Parameters[] array, check if the * parameter is really a constant/literal. If so, set File to CONSTANT. @@ -2652,7 +2653,7 @@ parse_vector_src_reg(GLcontext *ctx, const GLubyte **inst, struct arb_program *program, struct prog_src_register *reg) { - enum register_file file; + gl_register_file file; GLint index; GLubyte negateMask; GLubyte swizzle[4]; @@ -2686,7 +2687,7 @@ parse_scalar_src_reg(GLcontext *ctx, const GLubyte **inst, struct arb_program *program, struct prog_src_register *reg) { - enum register_file file; + gl_register_file file; GLint index; GLubyte negateMask; GLubyte swizzle[4]; @@ -2722,7 +2723,7 @@ parse_dst_reg(GLcontext * ctx, const GLubyte ** inst, { GLint mask; GLuint idx; - enum register_file file; + gl_register_file file; if (parse_masked_dst_reg (ctx, inst, vc_head, program, &file, &idx, &mask)) return 1; @@ -2752,9 +2753,6 @@ parse_fp_instruction (GLcontext * ctx, const GLubyte ** inst, _mesa_init_instructions(fp, 1); - /* Record the position in the program string for debugging */ - fp->StringPos = Program->Position; - /* OP_ALU_INST or OP_TEX_INST */ instClass = *(*inst)++; @@ -3016,7 +3014,7 @@ parse_fp_instruction (GLcontext * ctx, const GLubyte ** inst, { GLubyte swizzle[4]; GLubyte negateMask; - enum register_file file; + gl_register_file file; GLint index; if (parse_src_reg(ctx, inst, vc_head, Program, &file, &index, &rel)) @@ -3104,6 +3102,9 @@ parse_fp_instruction (GLcontext * ctx, const GLubyte ** inst, break; } + if (shadow_tex) + fp->TexShadow = 1; + /* Don't test the first time a particular sampler is seen. Each time * after that, make sure the shadow state is the same. */ @@ -3191,8 +3192,6 @@ parse_vp_instruction (GLcontext * ctx, const GLubyte ** inst, code = *(*inst)++; _mesa_init_instructions(vp, 1); - /* Record the position in the program string for debugging */ - vp->StringPos = Program->Position; switch (type) { /* XXX: */ @@ -3356,7 +3355,7 @@ parse_vp_instruction (GLcontext * ctx, const GLubyte ** inst, GLubyte swizzle[4]; GLubyte negateMask; GLboolean relAddr; - enum register_file file; + gl_register_file file; GLint index; if (parse_dst_reg(ctx, inst, vc_head, Program, &vp->DstReg)) @@ -3554,10 +3553,6 @@ parse_instructions(GLcontext * ctx, const GLubyte * inst, const GLuint numInst = Program->Base.NumInstructions; _mesa_init_instructions(Program->Base.Instructions + numInst, 1); Program->Base.Instructions[numInst].Opcode = OPCODE_END; - /* YYY Wrong Position in program, whatever, at least not random -> crash - Program->Position = parse_position (&inst); - */ - Program->Base.Instructions[numInst].StringPos = Program->Position; } Program->Base.NumInstructions++; diff --git a/src/mesa/shader/arbprogram.c b/src/mesa/shader/arbprogram.c index 7831e0faf9..329c0ea0b0 100644 --- a/src/mesa/shader/arbprogram.c +++ b/src/mesa/shader/arbprogram.c @@ -597,8 +597,7 @@ _mesa_GetProgramEnvParameterfvARB(GLenum target, GLuint index, FLUSH_VERTICES(ctx, _NEW_PROGRAM); - if (!ctx->_CurrentProgram) - ASSERT_OUTSIDE_BEGIN_END(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); if (target == GL_FRAGMENT_PROGRAM_ARB && ctx->Extensions.ARB_fragment_program) { @@ -818,8 +817,7 @@ _mesa_GetProgramivARB(GLenum target, GLenum pname, GLint *params) struct gl_program *prog; GET_CURRENT_CONTEXT(ctx); - if (!ctx->_CurrentProgram) - ASSERT_OUTSIDE_BEGIN_END(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { @@ -1000,8 +998,7 @@ _mesa_GetProgramStringARB(GLenum target, GLenum pname, GLvoid *string) char *dst = (char *) string; GET_CURRENT_CONTEXT(ctx); - if (!ctx->_CurrentProgram) - ASSERT_OUTSIDE_BEGIN_END(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); if (target == GL_VERTEX_PROGRAM_ARB) { prog = &(ctx->VertexProgram.Current->Base); diff --git a/src/mesa/shader/nvfragparse.c b/src/mesa/shader/nvfragparse.c index 20e4781372..b935cb562a 100644 --- a/src/mesa/shader/nvfragparse.c +++ b/src/mesa/shader/nvfragparse.c @@ -384,18 +384,12 @@ static const char *InputRegisters[MAX_NV_FRAGMENT_PROGRAM_INPUTS + 1] = { "TEX0", "TEX1", "TEX2", "TEX3", "TEX4", "TEX5", "TEX6", "TEX7", NULL }; + static const char *OutputRegisters[MAX_NV_FRAGMENT_PROGRAM_OUTPUTS + 1] = { - "COLR", "COLH", - /* These are only allows for register combiners */ - /* - "TEX0", "TEX1", "TEX2", "TEX3", - */ - "DEPR", NULL + "DEPR", "COLR", "DATA0", NULL }; - - /**********************************************************************/ /** @@ -828,7 +822,6 @@ static GLboolean Parse_OutputReg(struct parse_state *parseState, GLint *outputRegNum) { GLubyte token[100]; - GLint j; /* Match "o[" */ if (!Parse_String(parseState, "o[")) @@ -839,19 +832,19 @@ Parse_OutputReg(struct parse_state *parseState, GLint *outputRegNum) RETURN_ERROR; /* try to match an output register name */ - for (j = 0; OutputRegisters[j]; j++) { - if (_mesa_strcmp((const char *) token, OutputRegisters[j]) == 0) { - static GLuint bothColors = (1 << FRAG_RESULT_COLR) | (1 << FRAG_RESULT_COLH); - *outputRegNum = j; - parseState->outputsWritten |= (1 << j); - if ((parseState->outputsWritten & bothColors) == bothColors) { - RETURN_ERROR1("Illegal to write to both o[COLR] and o[COLH]"); - } - break; - } + if (_mesa_strcmp((char *) token, "COLR") == 0 || + _mesa_strcmp((char *) token, "COLH") == 0) { + /* note that we don't distinguish between COLR and COLH */ + *outputRegNum = FRAG_RESULT_COLOR; + parseState->outputsWritten |= (1 << FRAG_RESULT_COLOR); } - if (!OutputRegisters[j]) + else if (_mesa_strcmp((char *) token, "DEPR") == 0) { + *outputRegNum = FRAG_RESULT_DEPTH; + parseState->outputsWritten |= (1 << FRAG_RESULT_DEPTH); + } + else { RETURN_ERROR1("Invalid output register name"); + } /* Match ']' */ if (!Parse_String(parseState, "]")) @@ -1318,8 +1311,6 @@ Parse_InstructionSequence(struct parse_state *parseState, } else if (Parse_String(parseState, "END")) { inst->Opcode = OPCODE_END; - inst->StringPos = parseState->curLine - parseState->start; - assert(inst->StringPos >= 0); parseState->numInst++; if (Parse_Token(parseState, token)) { RETURN_ERROR1("Code after END opcode."); @@ -1346,8 +1337,6 @@ Parse_InstructionSequence(struct parse_state *parseState, inst->SaturateMode = (instMatch.suffixes & (_S)) ? SATURATE_ZERO_ONE : SATURATE_OFF; inst->CondUpdate = (instMatch.suffixes & (_C)) ? GL_TRUE : GL_FALSE; - inst->StringPos = parseState->curLine - parseState->start; - assert(inst->StringPos >= 0); /* * parse the input and output operands @@ -1826,10 +1815,3 @@ _mesa_nv_fragment_input_register_name(GLuint i) return InputRegisters[i]; } - -const char * -_mesa_nv_fragment_output_register_name(GLuint i) -{ - ASSERT(i < MAX_NV_FRAGMENT_PROGRAM_OUTPUTS); - return OutputRegisters[i]; -} diff --git a/src/mesa/shader/nvfragparse.h b/src/mesa/shader/nvfragparse.h index de45cf543d..ac97921080 100644 --- a/src/mesa/shader/nvfragparse.h +++ b/src/mesa/shader/nvfragparse.h @@ -44,9 +44,4 @@ _mesa_print_nv_fragment_program(const struct gl_fragment_program *program); extern const char * _mesa_nv_fragment_input_register_name(GLuint i); - -extern const char * -_mesa_nv_fragment_output_register_name(GLuint i); - - #endif diff --git a/src/mesa/shader/nvprogram.c b/src/mesa/shader/nvprogram.c index 16116c4339..50358cf107 100644 --- a/src/mesa/shader/nvprogram.c +++ b/src/mesa/shader/nvprogram.c @@ -246,8 +246,7 @@ _mesa_GetProgramivNV(GLuint id, GLenum pname, GLint *params) struct gl_program *prog; GET_CURRENT_CONTEXT(ctx); - if (!ctx->_CurrentProgram) - ASSERT_OUTSIDE_BEGIN_END(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); prog = _mesa_lookup_program(ctx, id); if (!prog) { @@ -283,8 +282,7 @@ _mesa_GetProgramStringNV(GLuint id, GLenum pname, GLubyte *program) struct gl_program *prog; GET_CURRENT_CONTEXT(ctx); - if (!ctx->_CurrentProgram) - ASSERT_OUTSIDE_BEGIN_END(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); if (pname != GL_PROGRAM_STRING_NV) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramStringNV(pname)"); @@ -773,8 +771,7 @@ _mesa_GetProgramNamedParameterfvNV(GLuint id, GLsizei len, const GLubyte *name, GET_CURRENT_CONTEXT(ctx); - if (!ctx->_CurrentProgram) - ASSERT_OUTSIDE_BEGIN_END(ctx); + ASSERT_OUTSIDE_BEGIN_END(ctx); prog = _mesa_lookup_program(ctx, id); if (!prog || prog->Target != GL_FRAGMENT_PROGRAM_NV) { diff --git a/src/mesa/shader/nvvertparse.c b/src/mesa/shader/nvvertparse.c index 08538c0ee4..268b577aec 100644 --- a/src/mesa/shader/nvvertparse.c +++ b/src/mesa/shader/nvvertparse.c @@ -799,7 +799,6 @@ Parse_UnaryOpInstruction(struct parse_state *parseState, RETURN_ERROR1("ABS illegal for vertex program 1.0"); inst->Opcode = opcode; - inst->StringPos = parseState->curLine - parseState->start; /* dest reg */ if (!Parse_MaskedDstReg(parseState, &inst->DstReg)) @@ -832,7 +831,6 @@ Parse_BiOpInstruction(struct parse_state *parseState, RETURN_ERROR1("SUB illegal for vertex program 1.0"); inst->Opcode = opcode; - inst->StringPos = parseState->curLine - parseState->start; /* dest reg */ if (!Parse_MaskedDstReg(parseState, &inst->DstReg)) @@ -880,7 +878,6 @@ Parse_TriOpInstruction(struct parse_state *parseState, enum prog_opcode opcode) { inst->Opcode = opcode; - inst->StringPos = parseState->curLine - parseState->start; /* dest reg */ if (!Parse_MaskedDstReg(parseState, &inst->DstReg)) @@ -951,7 +948,6 @@ Parse_ScalarInstruction(struct parse_state *parseState, RETURN_ERROR1("RCC illegal for vertex program 1.0"); inst->Opcode = opcode; - inst->StringPos = parseState->curLine - parseState->start; /* dest reg */ if (!Parse_MaskedDstReg(parseState, &inst->DstReg)) @@ -977,7 +973,6 @@ static GLboolean Parse_AddressInstruction(struct parse_state *parseState, struct prog_instruction *inst) { inst->Opcode = OPCODE_ARL; - inst->StringPos = parseState->curLine - parseState->start; /* Make ARB_vp backends happy */ inst->DstReg.File = PROGRAM_ADDRESS; @@ -1010,7 +1005,6 @@ Parse_EndInstruction(struct parse_state *parseState, struct prog_instruction *in GLubyte token[100]; inst->Opcode = OPCODE_END; - inst->StringPos = parseState->curLine - parseState->start; /* this should fail! */ if (Parse_Token(parseState, token)) @@ -1044,7 +1038,6 @@ Parse_PrintInstruction(struct parse_state *parseState, struct prog_instruction * GLint idx; inst->Opcode = OPCODE_PRINT; - inst->StringPos = parseState->curLine - parseState->start; /* The first argument is a literal string 'just like this' */ if (!Parse_String(parseState, "'")) diff --git a/src/mesa/shader/prog_debug.c b/src/mesa/shader/prog_debug.c deleted file mode 100644 index 7bcb2ef734..0000000000 --- a/src/mesa/shader/prog_debug.c +++ /dev/null @@ -1,259 +0,0 @@ -/* - * 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. - */ - - -#include "main/glheader.h" -#include "main/context.h" -#include "main/macros.h" -#include "nvfragparse.h" -#include "nvvertparse.h" -#include "program.h" -#include "prog_debug.h" -#include "prog_parameter.h" -#include "prog_instruction.h" - - - -/** - * Functions for the experimental GL_MESA_program_debug extension. - */ - - -/* XXX temporary */ -GLAPI void GLAPIENTRY -glProgramCallbackMESA(GLenum target, GLprogramcallbackMESA callback, - GLvoid *data) -{ - _mesa_ProgramCallbackMESA(target, callback, data); -} - - -void -_mesa_ProgramCallbackMESA(GLenum target, GLprogramcallbackMESA callback, - GLvoid *data) -{ - GET_CURRENT_CONTEXT(ctx); - - switch (target) { - case GL_FRAGMENT_PROGRAM_ARB: - if (!ctx->Extensions.ARB_fragment_program) { - _mesa_error(ctx, GL_INVALID_ENUM, "glProgramCallbackMESA(target)"); - return; - } - ctx->FragmentProgram.Callback = callback; - ctx->FragmentProgram.CallbackData = data; - break; - case GL_FRAGMENT_PROGRAM_NV: - if (!ctx->Extensions.NV_fragment_program) { - _mesa_error(ctx, GL_INVALID_ENUM, "glProgramCallbackMESA(target)"); - return; - } - ctx->FragmentProgram.Callback = callback; - ctx->FragmentProgram.CallbackData = data; - break; - case GL_VERTEX_PROGRAM_ARB: /* == GL_VERTEX_PROGRAM_NV */ - if (!ctx->Extensions.ARB_vertex_program && - !ctx->Extensions.NV_vertex_program) { - _mesa_error(ctx, GL_INVALID_ENUM, "glProgramCallbackMESA(target)"); - return; - } - ctx->VertexProgram.Callback = callback; - ctx->VertexProgram.CallbackData = data; - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, "glProgramCallbackMESA(target)"); - return; - } -} - - -/* XXX temporary */ -GLAPI void GLAPIENTRY -glGetProgramRegisterfvMESA(GLenum target, - GLsizei len, const GLubyte *registerName, - GLfloat *v) -{ - _mesa_GetProgramRegisterfvMESA(target, len, registerName, v); -} - - -void -_mesa_GetProgramRegisterfvMESA(GLenum target, - GLsizei len, const GLubyte *registerName, - GLfloat *v) -{ - char reg[1000]; - GET_CURRENT_CONTEXT(ctx); - - /* We _should_ be inside glBegin/glEnd */ -#if 0 - if (ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetProgramRegisterfvMESA"); - return; - } -#endif - - /* make null-terminated copy of registerName */ - len = MIN2((unsigned int) len, sizeof(reg) - 1); - _mesa_memcpy(reg, registerName, len); - reg[len] = 0; - - switch (target) { - case GL_VERTEX_PROGRAM_ARB: /* == GL_VERTEX_PROGRAM_NV */ - if (!ctx->Extensions.ARB_vertex_program && - !ctx->Extensions.NV_vertex_program) { - _mesa_error(ctx, GL_INVALID_ENUM, - "glGetProgramRegisterfvMESA(target)"); - return; - } - if (!ctx->VertexProgram._Enabled) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glGetProgramRegisterfvMESA"); - return; - } - /* GL_NV_vertex_program */ - if (reg[0] == 'R') { - /* Temp register */ - GLint i = _mesa_atoi(reg + 1); - if (i >= (GLint)ctx->Const.VertexProgram.MaxTemps) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glGetProgramRegisterfvMESA(registerName)"); - return; - } - ctx->Driver.GetProgramRegister(ctx, PROGRAM_TEMPORARY, i, v); - } - else if (reg[0] == 'v' && reg[1] == '[') { - /* Vertex Input attribute */ - GLuint i; - for (i = 0; i < ctx->Const.VertexProgram.MaxAttribs; i++) { - const char *name = _mesa_nv_vertex_input_register_name(i); - char number[10]; - _mesa_sprintf(number, "%d", i); - if (_mesa_strncmp(reg + 2, name, 4) == 0 || - _mesa_strncmp(reg + 2, number, _mesa_strlen(number)) == 0) { - ctx->Driver.GetProgramRegister(ctx, PROGRAM_INPUT, i, v); - return; - } - } - _mesa_error(ctx, GL_INVALID_VALUE, - "glGetProgramRegisterfvMESA(registerName)"); - return; - } - else if (reg[0] == 'o' && reg[1] == '[') { - /* Vertex output attribute */ - } - /* GL_ARB_vertex_program */ - else if (_mesa_strncmp(reg, "vertex.", 7) == 0) { - - } - else { - _mesa_error(ctx, GL_INVALID_VALUE, - "glGetProgramRegisterfvMESA(registerName)"); - return; - } - break; - case GL_FRAGMENT_PROGRAM_ARB: - if (!ctx->Extensions.ARB_fragment_program) { - _mesa_error(ctx, GL_INVALID_ENUM, - "glGetProgramRegisterfvMESA(target)"); - return; - } - if (!ctx->FragmentProgram._Enabled) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glGetProgramRegisterfvMESA"); - return; - } - /* XXX to do */ - break; - case GL_FRAGMENT_PROGRAM_NV: - if (!ctx->Extensions.NV_fragment_program) { - _mesa_error(ctx, GL_INVALID_ENUM, - "glGetProgramRegisterfvMESA(target)"); - return; - } - if (!ctx->FragmentProgram._Enabled) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glGetProgramRegisterfvMESA"); - return; - } - if (reg[0] == 'R') { - /* Temp register */ - GLint i = _mesa_atoi(reg + 1); - if (i >= (GLint)ctx->Const.FragmentProgram.MaxTemps) { - _mesa_error(ctx, GL_INVALID_VALUE, - "glGetProgramRegisterfvMESA(registerName)"); - return; - } - ctx->Driver.GetProgramRegister(ctx, PROGRAM_TEMPORARY, - i, v); - } - else if (reg[0] == 'f' && reg[1] == '[') { - /* Fragment input attribute */ - GLuint i; - for (i = 0; i < ctx->Const.FragmentProgram.MaxAttribs; i++) { - const char *name = _mesa_nv_fragment_input_register_name(i); - if (_mesa_strncmp(reg + 2, name, 4) == 0) { - ctx->Driver.GetProgramRegister(ctx, PROGRAM_INPUT, i, v); - return; - } - } - _mesa_error(ctx, GL_INVALID_VALUE, - "glGetProgramRegisterfvMESA(registerName)"); - return; - } - else if (_mesa_strcmp(reg, "o[COLR]") == 0) { - /* Fragment output color */ - ctx->Driver.GetProgramRegister(ctx, PROGRAM_OUTPUT, - FRAG_RESULT_COLR, v); - } - else if (_mesa_strcmp(reg, "o[COLH]") == 0) { - /* Fragment output color */ - ctx->Driver.GetProgramRegister(ctx, PROGRAM_OUTPUT, - FRAG_RESULT_COLH, v); - } - else if (_mesa_strcmp(reg, "o[DEPR]") == 0) { - /* Fragment output depth */ - ctx->Driver.GetProgramRegister(ctx, PROGRAM_OUTPUT, - FRAG_RESULT_DEPR, v); - } - else { - /* try user-defined identifiers */ - const GLfloat *value = _mesa_lookup_parameter_value( - ctx->FragmentProgram.Current->Base.Parameters, -1, reg); - if (value) { - COPY_4V(v, value); - } - else { - _mesa_error(ctx, GL_INVALID_VALUE, - "glGetProgramRegisterfvMESA(registerName)"); - return; - } - } - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, - "glGetProgramRegisterfvMESA(target)"); - return; - } -} diff --git a/src/mesa/shader/prog_execute.c b/src/mesa/shader/prog_execute.c index a93733c085..a60cda674b 100644 --- a/src/mesa/shader/prog_execute.c +++ b/src/mesa/shader/prog_execute.c @@ -186,30 +186,6 @@ get_dst_register_pointer(const struct prog_dst_register *dest, -#if FEATURE_MESA_program_debug -static struct gl_program_machine *CurrentMachine = NULL; - -/** - * For GL_MESA_program_debug. - * Return current value (4*GLfloat) of a program register. - * Called via ctx->Driver.GetProgramRegister(). - */ -void -_mesa_get_program_register(GLcontext *ctx, enum register_file file, - GLuint index, GLfloat val[4]) -{ - if (CurrentMachine) { - struct prog_src_register srcReg; - const GLfloat *src; - srcReg.File = file; - srcReg.Index = index; - src = get_src_register_pointer(&srcReg, CurrentMachine); - COPY_4V(val, src); - } -} -#endif /* FEATURE_MESA_program_debug */ - - /** * Fetch a 4-element float vector from the given source register. * Apply swizzling and negating as needed. @@ -633,10 +609,6 @@ _mesa_execute_program(GLcontext * ctx, printf("execute program %u --------------------\n", program->Id); } -#if FEATURE_MESA_program_debug - CurrentMachine = machine; -#endif - if (program->Target == GL_VERTEX_PROGRAM_ARB) { machine->EnvParams = ctx->VertexProgram.Parameters; } @@ -647,15 +619,6 @@ _mesa_execute_program(GLcontext * ctx, for (pc = 0; pc < numInst; pc++) { const struct prog_instruction *inst = program->Instructions + pc; -#if FEATURE_MESA_program_debug - if (ctx->FragmentProgram.CallbackEnabled && - ctx->FragmentProgram.Callback) { - ctx->FragmentProgram.CurrentPosition = inst->StringPos; - ctx->FragmentProgram.Callback(program->Target, - ctx->FragmentProgram.CallbackData); - } -#endif - if (DEBUG_PROG) { _mesa_print_instruction(inst); } @@ -1780,9 +1743,5 @@ _mesa_execute_program(GLcontext * ctx, } /* for pc */ -#if FEATURE_MESA_program_debug - CurrentMachine = NULL; -#endif - return GL_TRUE; } diff --git a/src/mesa/shader/prog_execute.h b/src/mesa/shader/prog_execute.h index 8ceb7b092e..adefc5439d 100644 --- a/src/mesa/shader/prog_execute.h +++ b/src/mesa/shader/prog_execute.h @@ -73,7 +73,7 @@ struct gl_program_machine extern void -_mesa_get_program_register(GLcontext *ctx, enum register_file file, +_mesa_get_program_register(GLcontext *ctx, gl_register_file file, GLuint index, GLfloat val[4]); extern GLboolean diff --git a/src/mesa/shader/prog_instruction.c b/src/mesa/shader/prog_instruction.c index 4a6d0d670a..6a21152c60 100644 --- a/src/mesa/shader/prog_instruction.c +++ b/src/mesa/shader/prog_instruction.c @@ -254,6 +254,7 @@ static const struct instruction_info InstInfo[MAX_OPCODE] = { GLuint _mesa_num_inst_src_regs(gl_inst_opcode opcode) { + ASSERT(opcode < MAX_OPCODE); ASSERT(opcode == InstInfo[opcode].Opcode); ASSERT(OPCODE_XPD == InstInfo[OPCODE_XPD].Opcode); return InstInfo[opcode].NumSrcRegs; @@ -266,6 +267,7 @@ _mesa_num_inst_src_regs(gl_inst_opcode opcode) GLuint _mesa_num_inst_dst_regs(gl_inst_opcode opcode) { + ASSERT(opcode < MAX_OPCODE); ASSERT(opcode == InstInfo[opcode].Opcode); ASSERT(OPCODE_XPD == InstInfo[OPCODE_XPD].Opcode); return InstInfo[opcode].NumDstRegs; diff --git a/src/mesa/shader/prog_instruction.h b/src/mesa/shader/prog_instruction.h index c649b3db5e..4adce11f95 100644 --- a/src/mesa/shader/prog_instruction.h +++ b/src/mesa/shader/prog_instruction.h @@ -38,6 +38,9 @@ #define PROG_INSTRUCTION_H +#include "main/mfeatures.h" + + /** * Swizzle indexes. * Do not change! @@ -240,12 +243,21 @@ typedef enum prog_opcode { /** + * Number of bits for the src/dst register Index field. + * This limits the size of temp/uniform register files. + */ +#define INST_INDEX_BITS 10 + + +/** * Instruction source register. */ struct prog_src_register { GLuint File:4; /**< One of the PROGRAM_* register file values. */ - GLint Index:9; /**< May be negative for relative addressing. */ + GLint Index:(INST_INDEX_BITS+1); /**< Extra bit here for sign bit. + * May be negative for relative addressing. + */ GLuint Swizzle:12; GLuint RelAddr:1; @@ -289,7 +301,7 @@ struct prog_src_register struct prog_dst_register { GLuint File:4; /**< One of the PROGRAM_* register file values */ - GLuint Index:8; + GLuint Index:INST_INDEX_BITS; /**< Unsigned, never negative */ GLuint WriteMask:4; GLuint RelAddr:1; @@ -322,8 +334,7 @@ struct prog_dst_register */ GLuint CondSrc:1; /*@}*/ - - GLuint pad:30; + GLuint pad:28; }; @@ -333,14 +344,6 @@ struct prog_dst_register struct prog_instruction { gl_inst_opcode Opcode; -#if FEATURE_MESA_program_debug - GLshort StringPos; -#endif - /** - * Arbitrary data. Used for the PRINT, CAL, and BRA instructions. - */ - void *Data; - struct prog_src_register SrcReg[3]; struct prog_dst_register DstReg; @@ -380,7 +383,7 @@ struct prog_instruction GLuint SaturateMode:2; /** - * Per-instruction selectable precision. + * Per-instruction selectable precision: FLOAT32, FLOAT16, FIXED12. * * \since * NV_fragment_program, NV_fragment_program_option. @@ -388,45 +391,36 @@ struct prog_instruction GLuint Precision:3; /** - * \name Texture source controls. - * - * The texture source controls are only used with the \c TEX, \c TXD, - * \c TXL, and \c TXP instructions. - * - * \since - * ARB_fragment_program, NV_fragment_program, NV_vertex_program3. + * \name Extra fields for TEX, TXB, TXD, TXL, TXP instructions. */ /*@{*/ - /** - * Source texture unit. OpenGL supports a maximum of 32 texture - * units. - */ + /** Source texture unit. */ GLuint TexSrcUnit:5; - /** - * Source texture target, one of TEXTURE_{1D,2D,3D,CUBE,RECT}_INDEX. - */ + /** Source texture target, one of TEXTURE_{1D,2D,3D,CUBE,RECT}_INDEX */ GLuint TexSrcTarget:3; + + /** True if tex instruction should do shadow comparison */ + GLuint TexShadow:1; /*@}*/ /** * For BRA and CAL instructions, the location to jump to. * For BGNLOOP, points to ENDLOOP (and vice-versa). * For BRK, points to BGNLOOP (which points to ENDLOOP). - * For IF, points to else or endif. - * For ELSE, points to endif. + * For IF, points to ELSE or ENDIF. + * For ELSE, points to ENDIF. */ GLint BranchTarget; -#if 01 /* XXX just use this for i965 driver for now! */ - /** - * For TEX instructions in shaders, the sampler to use for the - * texture lookup. - */ - GLint Sampler; -#endif - + /** for debugging purposes */ const char *Comment; + + /** Arbitrary data. Used for OPCODE_PRINT and some drivers */ + void *Data; + + /** for driver use (try to remove someday) */ + GLint Aux; }; diff --git a/src/mesa/shader/prog_optimize.c b/src/mesa/shader/prog_optimize.c new file mode 100644 index 0000000000..ec06da141d --- /dev/null +++ b/src/mesa/shader/prog_optimize.c @@ -0,0 +1,427 @@ +/* + * Mesa 3-D graphics library + * Version: 7.5 + * + * 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 + * VMWARE 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 "program.h" +#include "prog_instruction.h" +#include "prog_optimize.h" +#include "prog_print.h" + + +static GLboolean dbg = GL_FALSE; + + +/** + * In 'prog' remove instruction[i] if removeFlags[i] == TRUE. + * \return number of instructions removed + */ +static GLuint +remove_instructions(struct gl_program *prog, const GLboolean *removeFlags) +{ + GLint i, removeEnd = 0, removeCount = 0; + GLuint totalRemoved = 0; + + /* go backward */ + for (i = prog->NumInstructions - 1; i >= 0; i--) { + if (removeFlags[i]) { + totalRemoved++; + if (removeCount == 0) { + /* begin a run of instructions to remove */ + removeEnd = i; + removeCount = 1; + } + else { + /* extend the run of instructions to remove */ + removeCount++; + } + } + else { + /* don't remove this instruction, but check if the preceeding + * instructions are to be removed. + */ + if (removeCount > 0) { + GLint removeStart = removeEnd - removeCount + 1; + _mesa_delete_instructions(prog, removeStart, removeCount); + removeStart = removeCount = 0; /* reset removal info */ + } + } + } + return totalRemoved; +} + + +/** + * Consolidate temporary registers to use low numbers. For example, if the + * shader only uses temps 4, 5, 8, replace them with 0, 1, 2. + */ +static void +_mesa_consolidate_registers(struct gl_program *prog) +{ + GLboolean tempUsed[MAX_PROGRAM_TEMPS]; + GLuint tempMap[MAX_PROGRAM_TEMPS]; + GLuint tempMax = 0, i; + + if (dbg) { + _mesa_printf("Optimize: Begin register consolidation\n"); + } + + memset(tempUsed, 0, sizeof(tempUsed)); + + /* set tempUsed[i] if temporary [i] is referenced */ + for (i = 0; i < prog->NumInstructions; i++) { + const struct prog_instruction *inst = prog->Instructions + i; + const GLuint numSrc = _mesa_num_inst_src_regs(inst->Opcode); + GLuint j; + for (j = 0; j < numSrc; j++) { + if (inst->SrcReg[j].File == PROGRAM_TEMPORARY) { + const GLuint index = inst->SrcReg[j].Index; + ASSERT(index < MAX_PROGRAM_TEMPS); + tempUsed[index] = GL_TRUE; + tempMax = MAX2(tempMax, index); + break; + } + } + if (inst->DstReg.File == PROGRAM_TEMPORARY) { + const GLuint index = inst->DstReg.Index; + ASSERT(index < MAX_PROGRAM_TEMPS); + tempUsed[index] = GL_TRUE; + tempMax = MAX2(tempMax, index); + } + } + + /* allocate a new index for each temp that's used */ + { + GLuint freeTemp = 0; + for (i = 0; i <= tempMax; i++) { + if (tempUsed[i]) { + tempMap[i] = freeTemp++; + /*_mesa_printf("replace %u with %u\n", i, tempMap[i]);*/ + } + } + if (freeTemp == tempMax + 1) { + /* no consolidation possible */ + return; + } + if (dbg) { + _mesa_printf("Replace regs 0..%u with 0..%u\n", tempMax, freeTemp-1); + } + } + + /* now replace occurances of old temp indexes with new indexes */ + for (i = 0; i < prog->NumInstructions; i++) { + struct prog_instruction *inst = prog->Instructions + i; + const GLuint numSrc = _mesa_num_inst_src_regs(inst->Opcode); + GLuint j; + for (j = 0; j < numSrc; j++) { + if (inst->SrcReg[j].File == PROGRAM_TEMPORARY) { + GLuint index = inst->SrcReg[j].Index; + assert(index <= tempMax); + assert(tempUsed[index]); + inst->SrcReg[j].Index = tempMap[index]; + } + } + if (inst->DstReg.File == PROGRAM_TEMPORARY) { + const GLuint index = inst->DstReg.Index; + assert(tempUsed[index]); + assert(index <= tempMax); + inst->DstReg.Index = tempMap[index]; + } + } + if (dbg) { + _mesa_printf("Optimize: End register consolidation\n"); + } +} + + +/** + * Remove dead instructions from the given program. + * This is very primitive for now. Basically look for temp registers + * that are written to but never read. Remove any instructions that + * write to such registers. Be careful with condition code setters. + */ +static void +_mesa_remove_dead_code(struct gl_program *prog) +{ + GLboolean tempWritten[MAX_PROGRAM_TEMPS], tempRead[MAX_PROGRAM_TEMPS]; + GLboolean *removeInst; /* per-instruction removal flag */ + GLuint i, rem; + + memset(tempWritten, 0, sizeof(tempWritten)); + memset(tempRead, 0, sizeof(tempRead)); + + if (dbg) { + _mesa_printf("Optimize: Begin dead code removal\n"); + /*_mesa_print_program(prog);*/ + } + + removeInst = (GLboolean *) + _mesa_calloc(prog->NumInstructions * sizeof(GLboolean)); + + /* Determine which temps are read and written */ + for (i = 0; i < prog->NumInstructions; i++) { + const struct prog_instruction *inst = prog->Instructions + i; + const GLuint numSrc = _mesa_num_inst_src_regs(inst->Opcode); + GLuint j; + + /* check src regs */ + for (j = 0; j < numSrc; j++) { + if (inst->SrcReg[j].File == PROGRAM_TEMPORARY) { + const GLuint index = inst->SrcReg[j].Index; + ASSERT(index < MAX_PROGRAM_TEMPS); + + if (inst->SrcReg[j].RelAddr) { + if (dbg) + _mesa_printf("abort remove dead code (indirect temp)\n"); + return; + } + + tempRead[index] = GL_TRUE; + } + } + + /* check dst reg */ + if (inst->DstReg.File == PROGRAM_TEMPORARY) { + const GLuint index = inst->DstReg.Index; + ASSERT(index < MAX_PROGRAM_TEMPS); + + if (inst->DstReg.RelAddr) { + if (dbg) + _mesa_printf("abort remove dead code (indirect temp)\n"); + return; + } + + tempWritten[index] = GL_TRUE; + if (inst->CondUpdate) { + /* If we're writing to this register and setting condition + * codes we cannot remove the instruction. Prevent removal + * by setting the 'read' flag. + */ + tempRead[index] = GL_TRUE; + } + } + } + + if (dbg) { + for (i = 0; i < MAX_PROGRAM_TEMPS; i++) { + if (tempWritten[i] && !tempRead[i]) + _mesa_printf("Remove writes to tmp %u\n", i); + } + } + + /* find instructions that write to dead registers, flag for removal */ + for (i = 0; i < prog->NumInstructions; i++) { + const struct prog_instruction *inst = prog->Instructions + i; + if (inst->DstReg.File == PROGRAM_TEMPORARY) { + GLint index = inst->DstReg.Index; + removeInst[i] = (tempWritten[index] && !tempRead[index]); + if (dbg && removeInst[i]) { + _mesa_printf("Remove inst %u: ", i); + _mesa_print_instruction(inst); + } + } + } + + /* now remove the instructions which aren't needed */ + rem = remove_instructions(prog, removeInst); + + _mesa_free(removeInst); + + if (dbg) { + _mesa_printf("Optimize: End dead code removal. %u instructions removed\n", rem); + /*_mesa_print_program(prog);*/ + } +} + + +enum temp_use +{ + READ, + WRITE, + FLOW, + END +}; + +/** + * Scan forward in program from 'start' for the next occurance of TEMP[index]. + * Return READ, WRITE, FLOW or END to indicate the next usage or an indicator + * that we can't look further. + */ +static enum temp_use +find_next_temp_use(const struct gl_program *prog, GLuint start, GLuint index) +{ + GLuint i; + + for (i = start; i < prog->NumInstructions; i++) { + const struct prog_instruction *inst = prog->Instructions + i; + switch (inst->Opcode) { + case OPCODE_BGNLOOP: + case OPCODE_ENDLOOP: + case OPCODE_BGNSUB: + case OPCODE_ENDSUB: + return FLOW; + default: + { + const GLuint numSrc = _mesa_num_inst_src_regs(inst->Opcode); + GLuint j; + for (j = 0; j < numSrc; j++) { + if (inst->SrcReg[j].File == PROGRAM_TEMPORARY && + inst->SrcReg[j].Index == index) + return READ; + } + if (inst->DstReg.File == PROGRAM_TEMPORARY && + inst->DstReg.Index == index) + return WRITE; + } + } + } + + return END; +} + + +/** + * Try to remove extraneous MOV instructions from the given program. + */ +static void +_mesa_remove_extra_moves(struct gl_program *prog) +{ + GLboolean *removeInst; /* per-instruction removal flag */ + GLuint i, rem, loopNesting = 0, subroutineNesting = 0; + + if (dbg) { + _mesa_printf("Optimize: Begin remove extra moves\n"); + _mesa_print_program(prog); + } + + removeInst = (GLboolean *) + _mesa_calloc(prog->NumInstructions * sizeof(GLboolean)); + + /* + * Look for sequences such as this: + * FOO tmpX, arg0, arg1; + * MOV tmpY, tmpX; + * and convert into: + * FOO tmpY, arg0, arg1; + */ + + for (i = 0; i < prog->NumInstructions; i++) { + const struct prog_instruction *inst = prog->Instructions + i; + + switch (inst->Opcode) { + case OPCODE_BGNLOOP: + loopNesting++; + break; + case OPCODE_ENDLOOP: + loopNesting--; + break; + case OPCODE_BGNSUB: + subroutineNesting++; + break; + case OPCODE_ENDSUB: + subroutineNesting--; + break; + case OPCODE_MOV: + if (i > 0 && + loopNesting == 0 && + subroutineNesting == 0 && + inst->SrcReg[0].File == PROGRAM_TEMPORARY && + inst->SrcReg[0].Swizzle == SWIZZLE_XYZW) { + /* see if this MOV can be removed */ + const GLuint tempIndex = inst->SrcReg[0].Index; + struct prog_instruction *prevInst; + GLuint prevI; + + /* get pointer to previous instruction */ + prevI = i - 1; + while (removeInst[prevI] && prevI > 0) + prevI--; + prevInst = prog->Instructions + prevI; + + if (prevInst->DstReg.File == PROGRAM_TEMPORARY && + prevInst->DstReg.Index == tempIndex && + prevInst->DstReg.WriteMask == WRITEMASK_XYZW) { + + enum temp_use next_use = + find_next_temp_use(prog, i + 1, tempIndex); + + if (next_use == WRITE || next_use == END) { + /* OK, we can safely remove this MOV instruction. + * Transform: + * prevI: FOO tempIndex, x, y; + * i: MOV z, tempIndex; + * Into: + * prevI: FOO z, x, y; + */ + + /* patch up prev inst */ + prevInst->DstReg.File = inst->DstReg.File; + prevInst->DstReg.Index = inst->DstReg.Index; + + /* flag this instruction for removal */ + removeInst[i] = GL_TRUE; + + if (dbg) { + _mesa_printf("Remove MOV at %u\n", i); + _mesa_printf("new prev inst %u: ", prevI); + _mesa_print_instruction(prevInst); + } + } + } + } + break; + default: + ; /* nothing */ + } + } + + /* now remove the instructions which aren't needed */ + rem = remove_instructions(prog, removeInst); + + if (dbg) { + _mesa_printf("Optimize: End remove extra moves. %u instructions removed\n", rem); + /*_mesa_print_program(prog);*/ + } +} + + +/** + * Apply optimizations to the given program to eliminate unnecessary + * instructions, temp regs, etc. + */ +void +_mesa_optimize_program(GLcontext *ctx, struct gl_program *program) +{ + if (1) + _mesa_remove_dead_code(program); + + if (0) /* not test much yet */ + _mesa_remove_extra_moves(program); + + if (1) + _mesa_consolidate_registers(program); +} diff --git a/src/mesa/shader/prog_debug.h b/src/mesa/shader/prog_optimize.h index fc400e19de..d102cfd9fc 100644 --- a/src/mesa/shader/prog_debug.h +++ b/src/mesa/shader/prog_optimize.h @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 6.5.3 + * Version: 7.5 * - * Copyright (C) 1999-2007 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"), @@ -17,28 +17,17 @@ * 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 + * VMWARE 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 PROG_OPT_H +#define PROG_OPT_H -#ifndef PROG_DEBUG_H -#define PROG_DEBUG_H 1 - - -/* - * GL_MESA_program_debug - */ +struct gl_program; extern void -_mesa_ProgramCallbackMESA(GLenum target, GLprogramcallbackMESA callback, - GLvoid *data); - -extern void -_mesa_GetProgramRegisterfvMESA(GLenum target, GLsizei len, - const GLubyte *registerName, GLfloat *v); - - +_mesa_optimize_program(GLcontext *ctx, struct gl_program *program); -#endif /* PROG_DEBUG_H */ +#endif diff --git a/src/mesa/shader/prog_parameter.c b/src/mesa/shader/prog_parameter.c index 8ae961241f..66edae9001 100644 --- a/src/mesa/shader/prog_parameter.c +++ b/src/mesa/shader/prog_parameter.c @@ -78,7 +78,7 @@ _mesa_free_parameter_list(struct gl_program_parameter_list *paramList) */ GLint _mesa_add_parameter(struct gl_program_parameter_list *paramList, - enum register_file type, const char *name, + gl_register_file type, const char *name, GLuint size, GLenum datatype, const GLfloat *values, const gl_state_index state[STATE_LENGTH], GLbitfield flags) @@ -517,7 +517,7 @@ _mesa_lookup_parameter_index(const struct gl_program_parameter_list *paramList, * swizzling to find a match. * \param list the parameter list to search * \param v the float vector to search for - * \param size number of element in v + * \param vSize number of element in v * \param posOut returns the position of the constant, if found * \param swizzleOut returns a swizzle mask describing location of the * vector elements if found. @@ -681,7 +681,7 @@ _mesa_combine_parameter_lists(const struct gl_program_parameter_list *listA, */ GLuint _mesa_longest_parameter_name(const struct gl_program_parameter_list *list, - enum register_file type) + gl_register_file type) { GLuint i, maxLen = 0; if (!list) @@ -702,7 +702,7 @@ _mesa_longest_parameter_name(const struct gl_program_parameter_list *list, */ GLuint _mesa_num_parameters_of_type(const struct gl_program_parameter_list *list, - enum register_file type) + gl_register_file type) { GLuint i, count = 0; if (list) { diff --git a/src/mesa/shader/prog_parameter.h b/src/mesa/shader/prog_parameter.h index 200f2c0045..01f5a0e179 100644 --- a/src/mesa/shader/prog_parameter.h +++ b/src/mesa/shader/prog_parameter.h @@ -54,7 +54,7 @@ struct gl_program_parameter { const char *Name; /**< Null-terminated string */ - enum register_file Type; /**< PROGRAM_NAMED_PARAM, CONSTANT or STATE_VAR */ + gl_register_file Type; /**< PROGRAM_NAMED_PARAM, CONSTANT or STATE_VAR */ GLenum DataType; /**< GL_FLOAT, GL_FLOAT_VEC2, etc */ GLuint Size; /**< Number of components (1..4) */ GLboolean Used; /**< Helper flag for GLSL uniform tracking */ @@ -102,7 +102,7 @@ _mesa_num_parameters(const struct gl_program_parameter_list *list) extern GLint _mesa_add_parameter(struct gl_program_parameter_list *paramList, - enum register_file type, const char *name, + gl_register_file type, const char *name, GLuint size, GLenum datatype, const GLfloat *values, const gl_state_index state[STATE_LENGTH], GLbitfield flags); @@ -161,11 +161,11 @@ _mesa_lookup_parameter_constant(const struct gl_program_parameter_list *list, extern GLuint _mesa_longest_parameter_name(const struct gl_program_parameter_list *list, - enum register_file type); + gl_register_file type); extern GLuint _mesa_num_parameters_of_type(const struct gl_program_parameter_list *list, - enum register_file type); + gl_register_file type); #endif /* PROG_PARAMETER_H */ diff --git a/src/mesa/shader/prog_print.c b/src/mesa/shader/prog_print.c index ce48767a87..b832ddb477 100644 --- a/src/mesa/shader/prog_print.c +++ b/src/mesa/shader/prog_print.c @@ -43,7 +43,7 @@ * Return string name for given program/register file. */ static const char * -file_string(enum register_file f, gl_prog_print_mode mode) +file_string(gl_register_file f, gl_prog_print_mode mode) { switch (f) { case PROGRAM_TEMPORARY: @@ -86,6 +86,9 @@ file_string(enum register_file f, gl_prog_print_mode mode) static const char * arb_input_attrib_string(GLint index, GLenum progType) { + /* + * These strings should match the VERT_ATTRIB_x and FRAG_ATTRIB_x tokens. + */ const char *vertAttribs[] = { "vertex.position", "vertex.weight", @@ -160,6 +163,9 @@ arb_input_attrib_string(GLint index, GLenum progType) static const char * arb_output_attrib_string(GLint index, GLenum progType) { + /* + * These strings should match the VERT_RESULT_x and FRAG_RESULT_x tokens. + */ const char *vertResults[] = { "result.position", "result.color.primary", @@ -184,7 +190,12 @@ arb_output_attrib_string(GLint index, GLenum progType) }; const char *fragResults[] = { "result.color", - "result.depth" + "result.color(half)", + "result.depth", + "result.color[0]", + "result.color[1]", + "result.color[2]", + "result.color[3]" }; if (progType == GL_VERTEX_PROGRAM_ARB) { @@ -202,25 +213,23 @@ arb_output_attrib_string(GLint index, GLenum progType) * Return string representation of the given register. * Note that some types of registers (like PROGRAM_UNIFORM) aren't defined * by the ARB/NV program languages so we've taken some liberties here. - * \param file the register file (PROGRAM_INPUT, PROGRAM_TEMPORARY, etc) + * \param f the register file (PROGRAM_INPUT, PROGRAM_TEMPORARY, etc) * \param index number of the register in the register file * \param mode the output format/mode/style * \param prog pointer to containing program */ static const char * -reg_string(enum register_file f, GLint index, gl_prog_print_mode mode, +reg_string(gl_register_file f, GLint index, gl_prog_print_mode mode, GLboolean relAddr, const struct gl_program *prog) { static char str[100]; + const char *addr = relAddr ? "ADDR+" : ""; str[0] = 0; switch (mode) { case PROG_PRINT_DEBUG: - if (relAddr) - _mesa_sprintf(str, "%s[ADDR+%d]", file_string(f, mode), index); - else - _mesa_sprintf(str, "%s[%d]", file_string(f, mode), index); + _mesa_sprintf(str, "%s[%s%d]", file_string(f, mode), addr, index); break; case PROG_PRINT_ARB: @@ -235,19 +244,19 @@ reg_string(enum register_file f, GLint index, gl_prog_print_mode mode, _mesa_sprintf(str, "temp%d", index); break; case PROGRAM_ENV_PARAM: - _mesa_sprintf(str, "program.env[%d]", index); + _mesa_sprintf(str, "program.env[%s%d]", addr, index); break; case PROGRAM_LOCAL_PARAM: - _mesa_sprintf(str, "program.local[%d]", index); + _mesa_sprintf(str, "program.local[%s%d]", addr, index); break; case PROGRAM_VARYING: /* extension */ - _mesa_sprintf(str, "varying[%d]", index); + _mesa_sprintf(str, "varying[%s%d]", addr, index); break; case PROGRAM_CONSTANT: /* extension */ - _mesa_sprintf(str, "constant[%d]", index); + _mesa_sprintf(str, "constant[%s%d]", addr, index); break; case PROGRAM_UNIFORM: /* extension */ - _mesa_sprintf(str, "uniform[%d]", index); + _mesa_sprintf(str, "uniform[%s%d]", addr, index); break; case PROGRAM_STATE_VAR: { @@ -284,16 +293,16 @@ reg_string(enum register_file f, GLint index, gl_prog_print_mode mode, _mesa_sprintf(str, "c[%d]", index); break; case PROGRAM_VARYING: /* extension */ - _mesa_sprintf(str, "varying[%d]", index); + _mesa_sprintf(str, "varying[%s%d]", addr, index); break; case PROGRAM_UNIFORM: /* extension */ - _mesa_sprintf(str, "uniform[%d]", index); + _mesa_sprintf(str, "uniform[%s%d]", addr, index); break; case PROGRAM_CONSTANT: /* extension */ - _mesa_sprintf(str, "constant[%d]", index); + _mesa_sprintf(str, "constant[%s%d]", addr, index); break; case PROGRAM_STATE_VAR: /* extension */ - _mesa_sprintf(str, "state[%d]", index); + _mesa_sprintf(str, "state[%s%d]", addr, index); break; default: _mesa_problem(NULL, "bad file in reg_string()"); @@ -423,7 +432,7 @@ fprint_dst_reg(FILE * f, const struct gl_program *prog) { _mesa_fprintf(f, "%s%s", - reg_string((enum register_file) dstReg->File, + reg_string((gl_register_file) dstReg->File, dstReg->Index, mode, dstReg->RelAddr, prog), _mesa_writemask_string(dstReg->WriteMask)); @@ -436,7 +445,7 @@ fprint_dst_reg(FILE * f, #if 0 _mesa_fprintf(f, "%s[%d]%s", - file_string((enum register_file) dstReg->File, mode), + file_string((gl_register_file) dstReg->File, mode), dstReg->Index, _mesa_writemask_string(dstReg->WriteMask)); #endif @@ -449,14 +458,18 @@ fprint_src_reg(FILE *f, gl_prog_print_mode mode, const struct gl_program *prog) { - _mesa_fprintf(f, "%s%s", - reg_string((enum register_file) srcReg->File, + const char *abs = srcReg->Abs ? "|" : ""; + + _mesa_fprintf(f, "%s%s%s%s", + abs, + reg_string((gl_register_file) srcReg->File, srcReg->Index, mode, srcReg->RelAddr, prog), _mesa_swizzle_string(srcReg->Swizzle, - srcReg->NegateBase, GL_FALSE)); + srcReg->NegateBase, GL_FALSE), + abs); #if 0 _mesa_fprintf(f, "%s[%d]%s", - file_string((enum register_file) srcReg->File, mode), + file_string((gl_register_file) srcReg->File, mode), srcReg->Index, _mesa_swizzle_string(srcReg->Swizzle, srcReg->NegateBase, GL_FALSE)); @@ -549,7 +562,7 @@ _mesa_fprint_instruction_opt(FILE *f, if (inst->SrcReg[0].File != PROGRAM_UNDEFINED) { _mesa_fprintf(f, ", "); _mesa_fprintf(f, "%s[%d]%s", - file_string((enum register_file) inst->SrcReg[0].File, + file_string((gl_register_file) inst->SrcReg[0].File, mode), inst->SrcReg[0].Index, _mesa_swizzle_string(inst->SrcReg[0].Swizzle, @@ -566,7 +579,7 @@ _mesa_fprint_instruction_opt(FILE *f, _mesa_fprintf(f, " "); fprint_dst_reg(f, &inst->DstReg, mode, prog); _mesa_fprintf(f, ", %s[%d], %s", - file_string((enum register_file) inst->SrcReg[0].File, + file_string((gl_register_file) inst->SrcReg[0].File, mode), inst->SrcReg[0].Index, _mesa_swizzle_string(inst->SrcReg[0].Swizzle, @@ -594,6 +607,8 @@ _mesa_fprint_instruction_opt(FILE *f, default: ; } + if (inst->TexShadow) + _mesa_fprintf(f, " SHADOW"); fprint_comment(f, inst); break; @@ -713,11 +728,16 @@ _mesa_fprint_instruction_opt(FILE *f, break; /* XXX may need other special-case instructions */ default: - /* typical alu instruction */ - fprint_alu_instruction(f, inst, - _mesa_opcode_string(inst->Opcode), - _mesa_num_inst_src_regs(inst->Opcode), - mode, prog); + if (inst->Opcode < MAX_OPCODE) { + /* typical alu instruction */ + fprint_alu_instruction(f, inst, + _mesa_opcode_string(inst->Opcode), + _mesa_num_inst_src_regs(inst->Opcode), + mode, prog); + } + else { + _mesa_fprintf(f, "Other opcode %d\n", inst->Opcode); + } break; } return indent; @@ -898,7 +918,7 @@ _mesa_write_shader_to_file(const struct gl_shader *shader) else type = "vert"; - _mesa_snprintf(filename, strlen(filename), "shader_%u.%s", shader->Name, type); + _mesa_snprintf(filename, sizeof(filename), "shader_%u.%s", shader->Name, type); f = fopen(filename, "w"); if (!f) { fprintf(stderr, "Unable to open %s for writing\n", filename); diff --git a/src/mesa/shader/prog_statevars.c b/src/mesa/shader/prog_statevars.c index e1db30b78f..f51d9e2651 100644 --- a/src/mesa/shader/prog_statevars.c +++ b/src/mesa/shader/prog_statevars.c @@ -206,28 +206,28 @@ _mesa_fetch_state(GLcontext *ctx, const gl_state_index state[], /* state[2] is the texgen attribute */ switch (state[2]) { case STATE_TEXGEN_EYE_S: - COPY_4V(value, ctx->Texture.Unit[unit].EyePlaneS); + COPY_4V(value, ctx->Texture.Unit[unit].GenS.EyePlane); return; case STATE_TEXGEN_EYE_T: - COPY_4V(value, ctx->Texture.Unit[unit].EyePlaneT); + COPY_4V(value, ctx->Texture.Unit[unit].GenT.EyePlane); return; case STATE_TEXGEN_EYE_R: - COPY_4V(value, ctx->Texture.Unit[unit].EyePlaneR); + COPY_4V(value, ctx->Texture.Unit[unit].GenR.EyePlane); return; case STATE_TEXGEN_EYE_Q: - COPY_4V(value, ctx->Texture.Unit[unit].EyePlaneQ); + COPY_4V(value, ctx->Texture.Unit[unit].GenQ.EyePlane); return; case STATE_TEXGEN_OBJECT_S: - COPY_4V(value, ctx->Texture.Unit[unit].ObjectPlaneS); + COPY_4V(value, ctx->Texture.Unit[unit].GenS.ObjectPlane); return; case STATE_TEXGEN_OBJECT_T: - COPY_4V(value, ctx->Texture.Unit[unit].ObjectPlaneT); + COPY_4V(value, ctx->Texture.Unit[unit].GenT.ObjectPlane); return; case STATE_TEXGEN_OBJECT_R: - COPY_4V(value, ctx->Texture.Unit[unit].ObjectPlaneR); + COPY_4V(value, ctx->Texture.Unit[unit].GenR.ObjectPlane); return; case STATE_TEXGEN_OBJECT_Q: - COPY_4V(value, ctx->Texture.Unit[unit].ObjectPlaneQ); + COPY_4V(value, ctx->Texture.Unit[unit].GenQ.ObjectPlane); return; default: _mesa_problem(ctx, "Invalid texgen state in fetch_state"); @@ -506,6 +506,26 @@ _mesa_fetch_state(GLcontext *ctx, const gl_state_index state[], } } return; + case STATE_ROT_MATRIX_0: + { + const int unit = (int) state[2]; + GLfloat *rotMat22 = ctx->Texture.Unit[unit].RotMatrix; + value[0] = rotMat22[0]; + value[1] = rotMat22[2]; + value[2] = 0.0; + value[3] = 0.0; + } + break; + case STATE_ROT_MATRIX_1: + { + const int unit = (int) state[2]; + GLfloat *rotMat22 = ctx->Texture.Unit[unit].RotMatrix; + value[0] = rotMat22[1]; + value[1] = rotMat22[3]; + value[2] = 0.0; + value[3] = 0.0; + } + break; /* XXX: make sure new tokens added here are also handled in the * _mesa_program_state_flags() switch, below. @@ -591,6 +611,8 @@ _mesa_program_state_flags(const gl_state_index state[STATE_LENGTH]) case STATE_TEXRECT_SCALE: case STATE_SHADOW_AMBIENT: + case STATE_ROT_MATRIX_0: + case STATE_ROT_MATRIX_1: return _NEW_TEXTURE; case STATE_FOG_PARAMS_OPTIMIZED: return _NEW_FOG; @@ -806,6 +828,12 @@ append_token(char *dst, gl_state_index k) case STATE_SHADOW_AMBIENT: append(dst, "CompareFailValue"); break; + case STATE_ROT_MATRIX_0: + append(dst, "rotMatrixRow0"); + break; + case STATE_ROT_MATRIX_1: + append(dst, "rotMatrixRow1"); + break; default: /* probably STATE_INTERNAL_DRIVER+i (driver private state) */ append(dst, "driverState"); diff --git a/src/mesa/shader/prog_statevars.h b/src/mesa/shader/prog_statevars.h index d5358a1d04..d563080db1 100644 --- a/src/mesa/shader/prog_statevars.h +++ b/src/mesa/shader/prog_statevars.h @@ -117,6 +117,8 @@ typedef enum gl_state_index_ { STATE_PCM_SCALE, /**< Post color matrix RGBA scale */ STATE_PCM_BIAS, /**< Post color matrix RGBA bias */ STATE_SHADOW_AMBIENT, /**< ARB_shadow_ambient fail value; token[2] is texture unit index */ + STATE_ROT_MATRIX_0, /**< ATI_envmap_bumpmap, rot matrix row 0 */ + STATE_ROT_MATRIX_1, /**< ATI_envmap_bumpmap, rot matrix row 1 */ STATE_INTERNAL_DRIVER /* first available state index for drivers (must be last) */ } gl_state_index; diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c index 7a3b827352..2e5632710e 100644 --- a/src/mesa/shader/program.c +++ b/src/mesa/shader/program.c @@ -53,6 +53,15 @@ _mesa_init_program(GLcontext *ctx) { GLuint i; + /* + * If this assertion fails, we need to increase the field + * size for register indexes. + */ + ASSERT(ctx->Const.VertexProgram.MaxUniformComponents / 4 + <= (1 << INST_INDEX_BITS)); + ASSERT(ctx->Const.FragmentProgram.MaxUniformComponents / 4 + <= (1 << INST_INDEX_BITS)); + ctx->Program.ErrorPos = -1; ctx->Program.ErrorString = _mesa_strdup(""); @@ -729,7 +738,7 @@ _mesa_combine_programs(GLcontext *ctx, /* Connect color outputs of fprogA to color inputs of fprogB, via a * new temporary register. */ - if ((progA->OutputsWritten & (1 << FRAG_RESULT_COLR)) && + if ((progA->OutputsWritten & (1 << FRAG_RESULT_COLOR)) && (progB_inputsRead & FRAG_BIT_COL0)) { GLint tempReg = _mesa_find_free_register(newProg, PROGRAM_TEMPORARY); if (tempReg < 0) { @@ -739,7 +748,7 @@ _mesa_combine_programs(GLcontext *ctx, } /* replace writes to result.color[0] with tempReg */ replace_registers(newInst, lenA, - PROGRAM_OUTPUT, FRAG_RESULT_COLR, + PROGRAM_OUTPUT, FRAG_RESULT_COLOR, PROGRAM_TEMPORARY, tempReg); /* replace reads from the input color with tempReg */ replace_registers(newInst + lenA, lenB, @@ -749,7 +758,7 @@ _mesa_combine_programs(GLcontext *ctx, /* compute combined program's InputsRead */ inputsB = progB_inputsRead; - if (progA->OutputsWritten & (1 << FRAG_RESULT_COLR)) { + if (progA->OutputsWritten & (1 << FRAG_RESULT_COLOR)) { inputsB &= ~(1 << FRAG_ATTRIB_COL0); } newProg->InputsRead = progA->InputsRead | inputsB; diff --git a/src/mesa/shader/programopt.c b/src/mesa/shader/programopt.c index 56f1eb832e..e283f8933b 100644 --- a/src/mesa/shader/programopt.c +++ b/src/mesa/shader/programopt.c @@ -171,7 +171,7 @@ _mesa_append_fog_code(GLcontext *ctx, struct gl_fragment_program *fprog) if (inst->Opcode == OPCODE_END) break; if (inst->DstReg.File == PROGRAM_OUTPUT && - inst->DstReg.Index == FRAG_RESULT_COLR) { + inst->DstReg.Index == FRAG_RESULT_COLOR) { /* change the instruction to write to colorTemp w/ clamping */ inst->DstReg.File = PROGRAM_TEMPORARY; inst->DstReg.Index = colorTemp; @@ -249,7 +249,7 @@ _mesa_append_fog_code(GLcontext *ctx, struct gl_fragment_program *fprog) /* LRP result.color.xyz, fogFactorTemp.xxxx, colorTemp, fogColorRef; */ inst->Opcode = OPCODE_LRP; inst->DstReg.File = PROGRAM_OUTPUT; - inst->DstReg.Index = FRAG_RESULT_COLR; + inst->DstReg.Index = FRAG_RESULT_COLOR; inst->DstReg.WriteMask = WRITEMASK_XYZ; inst->SrcReg[0].File = PROGRAM_TEMPORARY; inst->SrcReg[0].Index = fogFactorTemp; @@ -264,7 +264,7 @@ _mesa_append_fog_code(GLcontext *ctx, struct gl_fragment_program *fprog) /* MOV result.color.w, colorTemp.x; # copy alpha */ inst->Opcode = OPCODE_MOV; inst->DstReg.File = PROGRAM_OUTPUT; - inst->DstReg.Index = FRAG_RESULT_COLR; + inst->DstReg.Index = FRAG_RESULT_COLOR; inst->DstReg.WriteMask = WRITEMASK_W; inst->SrcReg[0].File = PROGRAM_TEMPORARY; inst->SrcReg[0].Index = colorTemp; @@ -375,7 +375,7 @@ _mesa_count_texture_instructions(struct gl_program *prog) * So, rewrite the program to use a temporary register in this case. */ void -_mesa_remove_output_reads(struct gl_program *prog, enum register_file type) +_mesa_remove_output_reads(struct gl_program *prog, gl_register_file type) { GLuint i; GLint outputMap[VERT_RESULT_MAX]; diff --git a/src/mesa/shader/programopt.h b/src/mesa/shader/programopt.h index 11572e64f5..96acaf9566 100644 --- a/src/mesa/shader/programopt.h +++ b/src/mesa/shader/programopt.h @@ -40,6 +40,6 @@ extern void _mesa_count_texture_instructions(struct gl_program *prog); extern void -_mesa_remove_output_reads(struct gl_program *prog, enum register_file type); +_mesa_remove_output_reads(struct gl_program *prog, gl_register_file type); #endif /* PROGRAMOPT_H */ diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c index 013e912e5d..61289db2d2 100644 --- a/src/mesa/shader/shader_api.c +++ b/src/mesa/shader/shader_api.c @@ -1,8 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 7.2 + * Version: 7.5 * * Copyright (C) 2004-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"), @@ -406,9 +407,15 @@ _mesa_init_shader_state(GLcontext * ctx) * are generated by the GLSL compiler. */ ctx->Shader.EmitHighLevelInstructions = GL_TRUE; - ctx->Shader.EmitCondCodes = GL_FALSE;/*GL_TRUE;*/ /* XXX probably want GL_FALSE... */ + ctx->Shader.EmitCondCodes = GL_FALSE; ctx->Shader.EmitComments = GL_FALSE; ctx->Shader.Flags = get_shader_flags(); + + /* Default pragma settings */ + ctx->Shader.DefaultPragmas.IgnoreOptimize = GL_FALSE; + ctx->Shader.DefaultPragmas.IgnoreDebug = GL_FALSE; + ctx->Shader.DefaultPragmas.Optimize = GL_TRUE; + ctx->Shader.DefaultPragmas.Debug = GL_FALSE; } @@ -827,6 +834,27 @@ is_integer_type(GLenum type) } +static GLboolean +is_sampler_type(GLenum type) +{ + switch (type) { + case GL_SAMPLER_1D: + case GL_SAMPLER_2D: + case GL_SAMPLER_3D: + case GL_SAMPLER_CUBE: + case GL_SAMPLER_1D_SHADOW: + case GL_SAMPLER_2D_SHADOW: + case GL_SAMPLER_2D_RECT_ARB: + case GL_SAMPLER_2D_RECT_SHADOW_ARB: + case GL_SAMPLER_1D_ARRAY_EXT: + case GL_SAMPLER_2D_ARRAY_EXT: + return GL_TRUE; + default: + return GL_FALSE; + } +} + + static void _mesa_get_active_attrib(GLcontext *ctx, GLuint program, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, @@ -1422,6 +1450,9 @@ _mesa_compile_shader(GLcontext *ctx, GLuint shaderObj) if (!sh) return; + /* set default pragma state for shader */ + sh->Pragmas = ctx->Shader.DefaultPragmas; + /* this call will set the sh->CompileStatus field to indicate if * compilation was successful. */ @@ -1469,9 +1500,21 @@ _mesa_use_program(GLcontext *ctx, GLuint program) return; } if (!shProg->LinkStatus) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glUseProgram"); + _mesa_error(ctx, GL_INVALID_OPERATION, + "glUseProgram(program %u not linked)", program); return; } + + /* debug code */ + if (0) { + GLuint i; + _mesa_printf("Use Shader %u\n", shProg->Name); + for (i = 0; i < shProg->NumShaders; i++) { + _mesa_printf(" shader %u, type 0x%x\n", + shProg->Shaders[i]->Name, + shProg->Shaders[i]->Type); + } + } } else { shProg = NULL; @@ -1515,27 +1558,6 @@ _mesa_update_shader_textures_used(struct gl_program *prog) } -static GLboolean -is_sampler_type(GLenum type) -{ - switch (type) { - case GL_SAMPLER_1D: - case GL_SAMPLER_2D: - case GL_SAMPLER_3D: - case GL_SAMPLER_CUBE: - case GL_SAMPLER_1D_SHADOW: - case GL_SAMPLER_2D_SHADOW: - case GL_SAMPLER_2D_RECT_ARB: - case GL_SAMPLER_2D_RECT_SHADOW_ARB: - case GL_SAMPLER_1D_ARRAY_EXT: - case GL_SAMPLER_2D_ARRAY_EXT: - return GL_TRUE; - default: - return GL_FALSE; - } -} - - /** * Check if the type given by userType is allowed to set a uniform of the * target type. Generally, equivalence is required, but setting Boolean @@ -1574,10 +1596,10 @@ compatible_types(GLenum userType, GLenum targetType) * \param program the program whose uniform to update * \param index the index of the program parameter for the uniform * \param offset additional parameter slot offset (for arrays) - * \param type the datatype of the uniform + * \param type the incoming datatype of 'values' * \param count the number of uniforms to set - * \param elems number of elements per uniform - * \param values the new values + * \param elems number of elements per uniform (1, 2, 3 or 4) + * \param values the new values, of datatype 'type' */ static void set_program_uniform(GLcontext *ctx, struct gl_program *program, @@ -1587,8 +1609,12 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, { struct gl_program_parameter *param = &program->Parameters->Parameters[index]; + const GLboolean isUniformBool = is_boolean_type(param->DataType); + const GLboolean areIntValues = is_integer_type(type); assert(offset >= 0); + assert(elems >= 1); + assert(elems <= 4); if (!compatible_types(type, param->DataType)) { _mesa_error(ctx, GL_INVALID_OPERATION, "glUniform(type mismatch)"); @@ -1656,16 +1682,20 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, } } + /* loop over number of array elements */ for (k = 0; k < count; k++) { GLfloat *uniformVal; - if (offset + k > slots) { + if (offset + k >= slots) { /* Extra array data is ignored */ break; } + /* uniformVal (the destination) is always float[4] */ uniformVal = program->Parameters->ParameterValues[index + offset + k]; - if (is_integer_type(type)) { + + if (areIntValues) { + /* convert user's ints to floats */ const GLint *iValues = ((const GLint *) values) + k * elems; for (i = 0; i < elems; i++) { uniformVal[i] = (GLfloat) iValues[i]; @@ -1679,7 +1709,7 @@ set_program_uniform(GLcontext *ctx, struct gl_program *program, } /* if the uniform is bool-valued, convert to 1.0 or 0.0 */ - if (is_boolean_type(param->DataType)) { + if (isUniformBool) { for (i = 0; i < elems; i++) { uniformVal[i] = uniformVal[i] ? 1.0f : 0.0f; } diff --git a/src/mesa/shader/slang/library/slang_common_builtin.gc b/src/mesa/shader/slang/library/slang_common_builtin.gc index 230c57cea8..9764fc25b0 100644 --- a/src/mesa/shader/slang/library/slang_common_builtin.gc +++ b/src/mesa/shader/slang/library/slang_common_builtin.gc @@ -1659,76 +1659,76 @@ bvec4 not (const bvec4 v) vec4 texture1D(const sampler1D sampler, const float coord) { - __asm vec4_tex1d __retVal, sampler, coord; + __asm vec4_tex_1d __retVal, sampler, coord; } vec4 texture1DProj(const sampler1D sampler, const vec2 coord) { // need to swizzle .y into .w - __asm vec4_texp1d __retVal, sampler, coord.xyyy; + __asm vec4_tex_1d_proj __retVal, sampler, coord.xyyy; } vec4 texture1DProj(const sampler1D sampler, const vec4 coord) { - __asm vec4_texp1d __retVal, sampler, coord; + __asm vec4_tex_1d_proj __retVal, sampler, coord; } vec4 texture2D(const sampler2D sampler, const vec2 coord) { - __asm vec4_tex2d __retVal, sampler, coord; + __asm vec4_tex_2d __retVal, sampler, coord; } vec4 texture2DProj(const sampler2D sampler, const vec3 coord) { // need to swizzle 'z' into 'w'. - __asm vec4_texp2d __retVal, sampler, coord.xyzz; + __asm vec4_tex_2d_proj __retVal, sampler, coord.xyzz; } vec4 texture2DProj(const sampler2D sampler, const vec4 coord) { - __asm vec4_texp2d __retVal, sampler, coord; + __asm vec4_tex_2d_proj __retVal, sampler, coord; } vec4 texture3D(const sampler3D sampler, const vec3 coord) { - __asm vec4_tex3d __retVal, sampler, coord; + __asm vec4_tex_3d __retVal, sampler, coord; } vec4 texture3DProj(const sampler3D sampler, const vec4 coord) { - __asm vec4_texp3d __retVal, sampler, coord; + __asm vec4_tex_3d_proj __retVal, sampler, coord; } vec4 textureCube(const samplerCube sampler, const vec3 coord) { - __asm vec4_texcube __retVal, sampler, coord; + __asm vec4_tex_cube __retVal, sampler, coord; } vec4 shadow1D(const sampler1DShadow sampler, const vec3 coord) { - __asm vec4_tex1d __retVal, sampler, coord; + __asm vec4_tex_1d_shadow __retVal, sampler, coord; } vec4 shadow1DProj(const sampler1DShadow sampler, const vec4 coord) { // .s and .p will be divided by .q - __asm vec4_texp1d __retVal, sampler, coord; + __asm vec4_tex_1d_proj_shadow __retVal, sampler, coord; } vec4 shadow2D(const sampler2DShadow sampler, const vec3 coord) { - __asm vec4_tex2d __retVal, sampler, coord; + __asm vec4_tex_2d_shadow __retVal, sampler, coord; } vec4 shadow2DProj(const sampler2DShadow sampler, const vec4 coord) { // .s, .t and .p will be divided by .q - __asm vec4_texp2d __retVal, sampler, coord; + __asm vec4_tex_2d_proj_shadow __retVal, sampler, coord; } @@ -1741,22 +1741,22 @@ vec4 texture2DRect(const sampler2DRect sampler, const vec2 coord) vec4 texture2DRectProj(const sampler2DRect sampler, const vec3 coord) { // need to swizzle .y into .w - __asm vec4_texp_rect __retVal, sampler, coord.xyzz; + __asm vec4_tex_rect_proj __retVal, sampler, coord.xyzz; } vec4 texture2DRectProj(const sampler2DRect sampler, const vec4 coord) { - __asm vec4_texp_rect __retVal, sampler, ccoord; + __asm vec4_tex_rect_proj __retVal, sampler, ccoord; } vec4 shadow2DRect(const sampler2DRectShadow sampler, const vec3 coord) { - __asm vec4_tex_rect __retVal, sampler, coord; + __asm vec4_tex_rect_shadow __retVal, sampler, coord; } vec4 shadow2DRectProj(const sampler2DRectShadow sampler, const vec4 coord) { - __asm vec4_texp_rect __retVal, sampler, coord; + __asm vec4_tex_rect_proj_shadow __retVal, sampler, coord; } diff --git a/src/mesa/shader/slang/library/slang_common_builtin_gc.h b/src/mesa/shader/slang/library/slang_common_builtin_gc.h index 759bf247d8..78a7b83ec1 100644 --- a/src/mesa/shader/slang/library/slang_common_builtin_gc.h +++ b/src/mesa/shader/slang/library/slang_common_builtin_gc.h @@ -744,125 +744,129 @@ 120,121,122,0,0,18,118,0,0,17,48,0,48,0,0,0,0,0,1,90,95,0,0,4,0,0,110,111,116,0,1,1,0,0,4,0,118,0, 0,0,1,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,0,18,118,0,0,17,48,0,48,0, 0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,49,68,0,1,1,0,0,16,0,115,97,109,112,108,101, -114,0,0,1,1,0,0,9,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,49,100,0,18,95,95, +114,0,0,1,1,0,0,9,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,49,100,0,18,95,95, 114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95, 0,0,12,0,0,116,101,120,116,117,114,101,49,68,80,114,111,106,0,1,1,0,0,16,0,115,97,109,112,108,101, -114,0,0,1,1,0,0,10,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,49,100,0,18,95, -95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,59,120,121, -121,121,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,49,68,80,114,111,106,0,1,1,0,0,16,0, -115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101, -120,112,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111, -111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,0,1,1,0,0,17,0,115,97,109, -112,108,101,114,0,0,1,1,0,0,10,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,50,100, -0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0, -0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,1,0,0,17,0,115,97,109, -112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,50, +114,0,0,1,1,0,0,10,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,49,100,95,112, +114,111,106,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111, +114,100,0,59,120,121,121,121,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,49,68,80,114, +111,106,0,1,1,0,0,16,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,0,1,4, +118,101,99,52,95,116,101,120,95,49,100,95,112,114,111,106,0,18,95,95,114,101,116,86,97,108,0,0,18, +115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116, +117,114,101,50,68,0,1,1,0,0,17,0,115,97,109,112,108,101,114,0,0,1,1,0,0,10,0,99,111,111,114,100,0, +0,0,1,4,118,101,99,52,95,116,101,120,95,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109, +112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101, +50,68,80,114,111,106,0,1,1,0,0,17,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100, +0,0,0,1,4,118,101,99,52,95,116,101,120,95,50,100,95,112,114,111,106,0,18,95,95,114,101,116,86,97, +108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,59,120,121,122,122,0,0,0,0,1,90, +95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1,1,0,0,17,0,115,97,109,112,108, +101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,50,100,95, +112,114,111,106,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111, +111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,51,68,0,1,1,0,0,18,0,115,97,109, +112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,51, 100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0, -59,120,121,122,122,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,80,114,111,106,0,1, -1,0,0,17,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52, -95,116,101,120,112,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0, -18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,51,68,0,1,1,0,0,18,0, -115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101, -120,51,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111, -114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,51,68,80,114,111,106,0,1,1,0,0,18,0, -115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101, -120,112,51,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111, -111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,67,117,98,101,0,1,1,0,0,19,0, -115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101, -120,99,117,98,101,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111, -111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119,49,68,0,1,1,0,0,20,0,115,97,109,112, -108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,49,100,0,18, -95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1, -90,95,0,0,12,0,0,115,104,97,100,111,119,49,68,80,114,111,106,0,1,1,0,0,20,0,115,97,109,112,108,101, -114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,49,100,0,18,95, -95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,90, -95,0,0,12,0,0,115,104,97,100,111,119,50,68,0,1,1,0,0,21,0,115,97,109,112,108,101,114,0,0,1,1,0,0, -11,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,50,100,0,18,95,95,114,101,116,86,97, -108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,115,104, -97,100,111,119,50,68,80,114,111,106,0,1,1,0,0,21,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99, -111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,50,100,0,18,95,95,114,101,116,86,97,108, -0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120, -116,117,114,101,50,68,82,101,99,116,0,1,1,0,0,22,0,115,97,109,112,108,101,114,0,0,1,1,0,0,10,0,99, -111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,114,101,99,116,0,18,95,95,114,101,116,86, -97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116, -101,120,116,117,114,101,50,68,82,101,99,116,80,114,111,106,0,1,1,0,0,22,0,115,97,109,112,108,101, -114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,95,114,101,99, -116,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0, -59,120,121,122,122,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,82,101,99,116,80, -114,111,106,0,1,1,0,0,22,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,0,1, -4,118,101,99,52,95,116,101,120,112,95,114,101,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,115, -97,109,112,108,101,114,0,0,18,99,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111, -119,50,68,82,101,99,116,0,1,1,0,0,23,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114, -100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,114,101,99,116,0,18,95,95,114,101,116,86,97,108,0,0, -18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100, -111,119,50,68,82,101,99,116,80,114,111,106,0,1,1,0,0,23,0,115,97,109,112,108,101,114,0,0,1,1,0,0, -12,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,112,95,114,101,99,116,0,18,95,95, +0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,51,68,80,114,111,106,0,1,1,0,0,18,0,115,97, +109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,95, +51,100,95,112,114,111,106,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0, +18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,67,117,98,101,0,1,1,0, +0,19,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95, +116,101,120,95,99,117,98,101,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0, +0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119,49,68,0,1,1,0,0,20,0,115, +97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120, +95,49,100,95,115,104,97,100,111,119,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101, +114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119,49,68,80,114,111, +106,0,1,1,0,0,20,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,0,1,4,118, +101,99,52,95,116,101,120,95,49,100,95,112,114,111,106,95,115,104,97,100,111,119,0,18,95,95,114,101, +116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0, +0,115,104,97,100,111,119,50,68,0,1,1,0,0,21,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111, +111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,50,100,95,115,104,97,100,111,119,0,18,95,95, 114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95, -0,0,9,0,0,110,111,105,115,101,49,0,1,1,0,0,9,0,120,0,0,0,1,4,102,108,111,97,116,95,110,111,105,115, -101,49,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,90,95,0,0,9,0,0,110,111,105,115,101, -49,0,1,1,0,0,10,0,120,0,0,0,1,4,102,108,111,97,116,95,110,111,105,115,101,50,0,18,95,95,114,101, -116,86,97,108,0,0,18,120,0,0,0,0,1,90,95,0,0,9,0,0,110,111,105,115,101,49,0,1,1,0,0,11,0,120,0,0,0, -1,4,102,108,111,97,116,95,110,111,105,115,101,51,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0, -0,1,90,95,0,0,9,0,0,110,111,105,115,101,49,0,1,1,0,0,12,0,120,0,0,0,1,4,102,108,111,97,116,95,110, -111,105,115,101,52,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,90,95,0,0,10,0,0,110,111, -105,115,101,50,0,1,1,0,0,9,0,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111, +0,0,12,0,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,1,0,0,21,0,115,97,109,112,108,101,114,0, +0,1,1,0,0,12,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,50,100,95,112,114,111, +106,95,115,104,97,100,111,119,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0, +0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,82,101,99,116, +0,1,1,0,0,22,0,115,97,109,112,108,101,114,0,0,1,1,0,0,10,0,99,111,111,114,100,0,0,0,1,4,118,101,99, +52,95,116,101,120,95,114,101,99,116,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101, +114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,82,101, +99,116,80,114,111,106,0,1,1,0,0,22,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114, +100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,114,101,99,116,95,112,114,111,106,0,18,95,95,114,101, +116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,59,120,121,122,122,0,0, +0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,82,101,99,116,80,114,111,106,0,1,1,0,0,22, +0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116, +101,120,95,114,101,99,116,95,112,114,111,106,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109, +112,108,101,114,0,0,18,99,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119,50, +68,82,101,99,116,0,1,1,0,0,23,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0, +0,1,4,118,101,99,52,95,116,101,120,95,114,101,99,116,95,115,104,97,100,111,119,0,18,95,95,114,101, +116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0, +0,115,104,97,100,111,119,50,68,82,101,99,116,80,114,111,106,0,1,1,0,0,23,0,115,97,109,112,108,101, +114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,0,1,4,118,101,99,52,95,116,101,120,95,114,101,99,116, +95,112,114,111,106,95,115,104,97,100,111,119,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109, +112,108,101,114,0,0,18,99,111,111,114,100,0,0,0,0,1,90,95,0,0,9,0,0,110,111,105,115,101,49,0,1,1,0, +0,9,0,120,0,0,0,1,4,102,108,111,97,116,95,110,111,105,115,101,49,0,18,95,95,114,101,116,86,97,108, +0,0,18,120,0,0,0,0,1,90,95,0,0,9,0,0,110,111,105,115,101,49,0,1,1,0,0,10,0,120,0,0,0,1,4,102,108, +111,97,116,95,110,111,105,115,101,50,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,90,95,0, +0,9,0,0,110,111,105,115,101,49,0,1,1,0,0,11,0,120,0,0,0,1,4,102,108,111,97,116,95,110,111,105,115, +101,51,0,18,95,95,114,101,116,86,97,108,0,0,18,120,0,0,0,0,1,90,95,0,0,9,0,0,110,111,105,115,101, +49,0,1,1,0,0,12,0,120,0,0,0,1,4,102,108,111,97,116,95,110,111,105,115,101,52,0,18,95,95,114,101, +116,86,97,108,0,0,18,120,0,0,0,0,1,90,95,0,0,10,0,0,110,111,105,115,101,50,0,1,1,0,0,9,0,120,0,0,0, +1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18, +95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,17,49,57,0,51,52,0,0, +46,0,0,20,0,0,1,90,95,0,0,10,0,0,110,111,105,115,101,50,0,1,1,0,0,10,0,120,0,0,0,1,9,18,95,95,114, +101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101, +116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,50,0,0,17,49,57,0,51, +52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,20,0,0,1,90,95,0,0,10,0,0,110,111,105,115,101,50,0,1,1,0,0, +11,0,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120, +0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58, +118,101,99,51,0,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,0,1, +90,95,0,0,10,0,0,110,111,105,115,101,50,0,1,1,0,0,12,0,120,0,0,0,1,9,18,95,95,114,101,116,86,97, +108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0, +59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,52,0,0,17,49,57,0,51,52,0,0,0,17,55, +0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,20,0,0,1,90,95,0,0,11,0,0,110,111, +105,115,101,51,0,1,1,0,0,9,0,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111, 105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105, -115,101,49,0,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,20,0,0,1,90,95,0,0,10,0,0,110,111,105,115,101, -50,0,1,1,0,0,10,0,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101, -49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,0, -18,120,0,58,118,101,99,50,0,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,20,0,0,1,90,95,0, -0,10,0,0,110,111,105,115,101,50,0,1,1,0,0,11,0,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59, -120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0, -58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,51,0,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0, -0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,0,1,90,95,0,0,10,0,0,110,111,105,115,101,50,0,1,1,0,0,12,0, -120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0, -20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101, -99,52,0,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46, -0,0,20,0,0,1,90,95,0,0,11,0,0,110,111,105,115,101,51,0,1,1,0,0,9,0,120,0,0,0,1,9,18,95,95,114,101, -116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86, -97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,20,0,9,18,95, -95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,0,18,120,0,17,53,0,52,55,0,0,46,0, -0,20,0,0,1,90,95,0,0,11,0,0,110,111,105,115,101,51,0,1,1,0,0,10,0,120,0,0,0,1,9,18,95,95,114,101, -116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86, -97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,50,0,0,17,49,57,0,51,52,0,0, -0,17,55,0,54,54,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115, -101,49,0,0,18,120,0,58,118,101,99,50,0,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,20,0, -0,1,90,95,0,0,11,0,0,110,111,105,115,101,51,0,1,1,0,0,11,0,120,0,0,0,1,9,18,95,95,114,101,116,86, -97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108, -0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,51,0,0,17,49,57,0,51,52,0,0,0,17, -55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58, -110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,51,0,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0, -0,17,49,49,0,48,52,0,0,0,0,46,0,0,20,0,0,1,90,95,0,0,11,0,0,110,111,105,115,101,51,0,1,1,0,0,12,0, -120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0, -20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101, -99,52,0,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46, -0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118, -101,99,52,0,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,57,0, -0,0,0,46,0,0,20,0,0,1,90,95,0,0,12,0,0,110,111,105,115,101,52,0,1,1,0,0,9,0,120,0,0,0,1,9,18,95,95, +115,101,49,0,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122, +0,58,110,111,105,115,101,49,0,0,18,120,0,17,53,0,52,55,0,0,46,0,0,20,0,0,1,90,95,0,0,11,0,0,110, +111,105,115,101,51,0,1,1,0,0,10,0,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110, +111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111, +105,115,101,49,0,0,18,120,0,58,118,101,99,50,0,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0, +0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118, +101,99,50,0,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0,46,0,0,20,0,0,1,90,95,0,0,11,0,0,110, +111,105,115,101,51,0,1,1,0,0,11,0,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110, +111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111, +105,115,101,49,0,0,18,120,0,58,118,101,99,51,0,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51, +0,50,51,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49, +0,0,18,120,0,58,118,101,99,51,0,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0, +0,0,46,0,0,20,0,0,1,90,95,0,0,11,0,0,110,111,105,115,101,51,0,1,1,0,0,12,0,120,0,0,0,1,9,18,95,95, 114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114, -101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,20, -0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,0,18,120,0,17,53,0,52,55, -0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,0,18,120,0, -17,50,51,0,53,52,0,0,46,0,0,20,0,0,1,90,95,0,0,12,0,0,110,111,105,115,101,52,0,1,1,0,0,10,0,120,0, -0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0, -9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99, -50,0,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0, -59,122,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,50,0,0,17,53,0,52,55,0,0,0,17,49,55, -0,56,53,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49, -0,0,18,120,0,58,118,101,99,50,0,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,0,46,0,0,20,0,0,1, -90,95,0,0,12,0,0,110,111,105,115,101,52,0,1,1,0,0,11,0,120,0,0,0,1,9,18,95,95,114,101,116,86,97, +101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,52,0,0,17,49,57, +0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,20,0,9,18,95,95, +114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,52,0,0,17,53, +0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,57,0,0,0,0,46,0,0,20,0,0, +1,90,95,0,0,12,0,0,110,111,105,115,101,52,0,1,1,0,0,9,0,120,0,0,0,1,9,18,95,95,114,101,116,86,97, 108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0, -59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,51,0,0,17,49,57,0,51,52,0,0,0,17,55, -0,54,54,0,0,0,17,51,0,50,51,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110, -111,105,115,101,49,0,0,18,120,0,58,118,101,99,51,0,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17, -49,49,0,48,52,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115, -101,49,0,0,18,120,0,58,118,101,99,51,0,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,17,51,49,0, -57,49,0,0,0,0,46,0,0,20,0,0,1,90,95,0,0,12,0,0,110,111,105,115,101,52,0,1,1,0,0,12,0,120,0,0,0,1,9, -18,95,95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95, -95,114,101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,52,0,0,17, -49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,20,0,9,18, -95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,52,0,0, -17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,57,0,0,0,0,46,0,0, -20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101, -99,52,0,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,17,51,55,0,52,56,0, -0,0,0,46,0,0,20,0,0,0 +59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,17,49,57,0,51,52,0,0,46,0,0,20,0,9,18,95,95,114, +101,116,86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,0,18,120,0,17,53,0,52,55,0,0,46,0,0,20,0, +9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,0,18,120,0,17,50,51,0,53, +52,0,0,46,0,0,20,0,0,1,90,95,0,0,12,0,0,110,111,105,115,101,52,0,1,1,0,0,10,0,120,0,0,0,1,9,18,95, +95,114,101,116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114, +101,116,86,97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,50,0,0,17,49,57, +0,51,52,0,0,0,17,55,0,54,54,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110, +111,105,115,101,49,0,0,18,120,0,58,118,101,99,50,0,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,0, +46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,0,18,120,0,58, +118,101,99,50,0,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,0,46,0,0,20,0,0,1,90,95,0,0,12,0,0, +110,111,105,115,101,52,0,1,1,0,0,11,0,120,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,58, +110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,58,110, +111,105,115,101,49,0,0,18,120,0,58,118,101,99,51,0,0,17,49,57,0,51,52,0,0,0,17,55,0,54,54,0,0,0,17, +51,0,50,51,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,58,110,111,105,115,101, +49,0,0,18,120,0,58,118,101,99,51,0,0,17,53,0,52,55,0,0,0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0, +0,0,0,46,0,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,0,18,120, +0,58,118,101,99,51,0,0,17,50,51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,0,46,0, +0,20,0,0,1,90,95,0,0,12,0,0,110,111,105,115,101,52,0,1,1,0,0,12,0,120,0,0,0,1,9,18,95,95,114,101, +116,86,97,108,0,59,120,0,58,110,111,105,115,101,49,0,0,18,120,0,0,0,20,0,9,18,95,95,114,101,116,86, +97,108,0,59,121,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,52,0,0,17,49,57,0,51,52,0,0, +0,17,55,0,54,54,0,0,0,17,51,0,50,51,0,0,0,17,50,0,55,55,0,0,0,0,46,0,0,20,0,9,18,95,95,114,101,116, +86,97,108,0,59,122,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,52,0,0,17,53,0,52,55,0,0, +0,17,49,55,0,56,53,0,0,0,17,49,49,0,48,52,0,0,0,17,49,51,0,49,57,0,0,0,0,46,0,0,20,0,9,18,95,95, +114,101,116,86,97,108,0,59,119,0,58,110,111,105,115,101,49,0,0,18,120,0,58,118,101,99,52,0,0,17,50, +51,0,53,52,0,0,0,17,50,57,0,49,49,0,0,0,17,51,49,0,57,49,0,0,0,17,51,55,0,52,56,0,0,0,0,46,0,0,20, +0,0,0 diff --git a/src/mesa/shader/slang/library/slang_fragment_builtin.gc b/src/mesa/shader/slang/library/slang_fragment_builtin.gc index 416c6ff313..2e063e6416 100644 --- a/src/mesa/shader/slang/library/slang_fragment_builtin.gc +++ b/src/mesa/shader/slang/library/slang_fragment_builtin.gc @@ -46,7 +46,7 @@ vec4 texture1D(const sampler1D sampler, const float coord, const float bias) vec4 coord4; coord4.x = coord; coord4.w = bias; - __asm vec4_texb1d __retVal, sampler, coord4; + __asm vec4_tex_1d_bias __retVal, sampler, coord4; } vec4 texture1DProj(const sampler1D sampler, const vec2 coord, const float bias) @@ -55,7 +55,7 @@ vec4 texture1DProj(const sampler1D sampler, const vec2 coord, const float bias) vec4 pcoord; pcoord.x = coord.x / coord.y; pcoord.w = bias; - __asm vec4_texb1d __retVal, sampler, pcoord; + __asm vec4_tex_1d_bias __retVal, sampler, pcoord; } vec4 texture1DProj(const sampler1D sampler, const vec4 coord, const float bias) @@ -64,7 +64,7 @@ vec4 texture1DProj(const sampler1D sampler, const vec4 coord, const float bias) vec4 pcoord; pcoord.x = coord.x / coord.z; pcoord.w = bias; - __asm vec4_texb1d __retVal, sampler, pcoord; + __asm vec4_tex_1d_bias __retVal, sampler, pcoord; } @@ -75,7 +75,7 @@ vec4 texture2D(const sampler2D sampler, const vec2 coord, const float bias) vec4 coord4; coord4.xy = coord.xy; coord4.w = bias; - __asm vec4_texb2d __retVal, sampler, coord4; + __asm vec4_tex_2d_bias __retVal, sampler, coord4; } vec4 texture2DProj(const sampler2D sampler, const vec3 coord, const float bias) @@ -84,7 +84,7 @@ vec4 texture2DProj(const sampler2D sampler, const vec3 coord, const float bias) vec4 pcoord; pcoord.xy = coord.xy / coord.z; pcoord.w = bias; - __asm vec4_texb2d __retVal, sampler, pcoord; + __asm vec4_tex_2d_bias __retVal, sampler, pcoord; } vec4 texture2DProj(const sampler2D sampler, const vec4 coord, const float bias) @@ -93,7 +93,7 @@ vec4 texture2DProj(const sampler2D sampler, const vec4 coord, const float bias) vec4 pcoord; pcoord.xy = coord.xy / coord.w; pcoord.w = bias; - __asm vec4_texb2d __retVal, sampler, pcoord; + __asm vec4_tex_2d_bias __retVal, sampler, pcoord; } @@ -104,7 +104,7 @@ vec4 texture3D(const sampler3D sampler, const vec3 coord, const float bias) vec4 coord4; coord4.xyz = coord.xyz; coord4.w = bias; - __asm vec4_texb3d __retVal, sampler, coord4; + __asm vec4_tex_3d_bias __retVal, sampler, coord4; } vec4 texture3DProj(const sampler3D sampler, const vec4 coord, const float bias) @@ -113,7 +113,7 @@ vec4 texture3DProj(const sampler3D sampler, const vec4 coord, const float bias) vec4 pcoord; pcoord.xyz = coord.xyz / coord.w; pcoord.w = bias; - __asm vec4_texb3d __retVal, sampler, pcoord; + __asm vec4_tex_3d_bias __retVal, sampler, pcoord; } @@ -124,21 +124,17 @@ vec4 textureCube(const samplerCube sampler, const vec3 coord, const float bias) vec4 coord4; coord4.xyz = coord; coord4.w = bias; - __asm vec4_texcube __retVal, sampler, coord4; + __asm vec4_tex_cube __retVal, sampler, coord4; } - -// For shadow textures, we use the regular tex instructions since they should -// do the depth comparison step. - vec4 shadow1D(const sampler1DShadow sampler, const vec3 coord, const float bias) { vec4 coord4; coord4.xyz = coord; coord4.w = bias; - __asm vec4_texb1d __retVal, sampler, coord4; + __asm vec4_tex_1d_bias_shadow __retVal, sampler, coord4; } vec4 shadow1DProj(const sampler1DShadow sampler, const vec4 coord, const float bias) @@ -147,7 +143,7 @@ vec4 shadow1DProj(const sampler1DShadow sampler, const vec4 coord, const float b pcoord.x = coord.x / coord.w; pcoord.z = coord.z; pcoord.w = bias; - __asm vec4_texb1d __retVal, sampler, pcoord; + __asm vec4_tex_1d_bias_shadow __retVal, sampler, pcoord; } vec4 shadow2D(const sampler2DShadow sampler, const vec3 coord, const float bias) @@ -155,7 +151,7 @@ vec4 shadow2D(const sampler2DShadow sampler, const vec3 coord, const float bias) vec4 coord4; coord4.xyz = coord; coord4.w = bias; - __asm vec4_texb2d __retVal, sampler, coord4; + __asm vec4_tex_2d_bias_shadow __retVal, sampler, coord4; } vec4 shadow2DProj(const sampler2DShadow sampler, const vec4 coord, const float bias) @@ -164,7 +160,7 @@ vec4 shadow2DProj(const sampler2DShadow sampler, const vec4 coord, const float b pcoord.xy = coord.xy / coord.w; pcoord.z = coord.z; pcoord.w = bias; - __asm vec4_texb2d __retVal, sampler, pcoord; + __asm vec4_tex_2d_bias_shadow __retVal, sampler, pcoord; } diff --git a/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h b/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h index 738a0f9295..c5a1cce2a4 100644 --- a/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h +++ b/src/mesa/shader/slang/library/slang_fragment_builtin_gc.h @@ -14,94 +14,97 @@ 108,101,114,0,0,1,1,0,0,9,0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0, 12,0,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,0,18,99,111,111,114,100,0, 20,0,9,18,99,111,111,114,100,52,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120, -98,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114, -100,52,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,49,68,80,114,111,106,0,1,1,0,0,16,0, -115,97,109,112,108,101,114,0,0,1,1,0,0,10,0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0, -1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,0,18,99, -111,111,114,100,0,59,120,0,18,99,111,111,114,100,0,59,121,0,49,20,0,9,18,112,99,111,111,114,100,0, -59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,98,49,100,0,18,95,95,114,101,116, -86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0, -0,116,101,120,116,117,114,101,49,68,80,114,111,106,0,1,1,0,0,16,0,115,97,109,112,108,101,114,0,0,1, -1,0,0,12,0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99, -111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,0,18,99,111,111,114,100,0,59,120,0,18, -99,111,111,114,100,0,59,122,0,49,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,98,105,97,115,0,20, -0,4,118,101,99,52,95,116,101,120,98,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112, -108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101, -50,68,0,1,1,0,0,17,0,115,97,109,112,108,101,114,0,0,1,1,0,0,10,0,99,111,111,114,100,0,0,1,1,0,0,9, -0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,114,100, -52,0,59,120,121,0,18,99,111,111,114,100,0,59,120,121,0,20,0,9,18,99,111,111,114,100,52,0,59,119,0, -18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,98,50,100,0,18,95,95,114,101,116,86,97,108, -0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,116,101, -120,116,117,114,101,50,68,80,114,111,106,0,1,1,0,0,17,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11, -0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114, -100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59,120,121,0,18,99, -111,111,114,100,0,59,122,0,49,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,98,105,97,115,0,20,0, -4,118,101,99,52,95,116,101,120,98,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112, -108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101, -50,68,80,114,111,106,0,1,1,0,0,17,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100, -0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112, -99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59, -119,0,49,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95, -116,101,120,98,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18, +95,49,100,95,98,105,97,115,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0, +18,99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,49,68,80,114,111, +106,0,1,1,0,0,16,0,115,97,109,112,108,101,114,0,0,1,1,0,0,10,0,99,111,111,114,100,0,0,1,1,0,0,9,0, +98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114, +100,0,59,120,0,18,99,111,111,114,100,0,59,120,0,18,99,111,111,114,100,0,59,121,0,49,20,0,9,18,112, +99,111,111,114,100,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,95,49,100,95, +98,105,97,115,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111, +111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,49,68,80,114,111,106,0,1,1,0,0, +16,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115, +0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,0, +18,99,111,111,114,100,0,59,120,0,18,99,111,111,114,100,0,59,122,0,49,20,0,9,18,112,99,111,111,114, +100,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,95,49,100,95,98,105,97,115,0, +18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0, +0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,0,1,1,0,0,17,0,115,97,109,112,108,101,114, +0,0,1,1,0,0,10,0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,99, +111,111,114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,121,0,18,99,111,111,114,100,0,59,120, +121,0,20,0,9,18,99,111,111,114,100,52,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116, +101,120,95,50,100,95,98,105,97,115,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101, +114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,80, +114,111,106,0,1,1,0,0,17,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,1,1, +0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111, +111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59,122,0, +49,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101, +120,95,50,100,95,98,105,97,115,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114, +0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,80,114, +111,106,0,1,1,0,0,17,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,1,1,0,0, +9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111, +114,100,0,59,120,121,0,18,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59,119,0,49,20, +0,9,18,112,99,111,111,114,100,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,95, +50,100,95,98,105,97,115,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18, 112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,51,68,0,1,1,0,0,18,0, 115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0, 1,3,2,90,95,0,0,12,0,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,121,122,0, 18,99,111,111,114,100,0,59,120,121,122,0,20,0,9,18,99,111,111,114,100,52,0,59,119,0,18,98,105,97, -115,0,20,0,4,118,101,99,52,95,116,101,120,98,51,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97, -109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117, -114,101,51,68,80,114,111,106,0,1,1,0,0,18,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111, -114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9, -18,112,99,111,111,114,100,0,59,120,121,122,0,18,99,111,111,114,100,0,59,120,121,122,0,18,99,111, -111,114,100,0,59,119,0,49,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,98,105,97,115,0,20,0,4, -118,101,99,52,95,116,101,120,98,51,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108, -101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,67, -117,98,101,0,1,1,0,0,19,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,1,1,0, -0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,114, -100,52,0,59,120,121,122,0,18,99,111,111,114,100,0,20,0,9,18,99,111,111,114,100,52,0,59,119,0,18,98, -105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,99,117,98,101,0,18,95,95,114,101,116,86,97,108,0, -0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97, -100,111,119,49,68,0,1,1,0,0,20,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0, -0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,99,111,111,114,100,52,0,0,0,9,18,99,111, -111,114,100,52,0,59,120,121,122,0,18,99,111,111,114,100,0,20,0,9,18,99,111,111,114,100,52,0,59,119, -0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,98,49,100,0,18,95,95,114,101,116,86,97, -108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,115, -104,97,100,111,119,49,68,80,114,111,106,0,1,1,0,0,20,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0, -99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114, -100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,0,18,99,111,111,114,100,0,59,120,0,18,99,111,111, -114,100,0,59,119,0,49,20,0,9,18,112,99,111,111,114,100,0,59,122,0,18,99,111,111,114,100,0,59,122,0, -20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120, -98,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111, -114,100,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119,50,68,0,1,1,0,0,21,0,115,97,109,112,108, -101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12, -0,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,121,122,0,18,99,111,111,114, -100,0,20,0,9,18,99,111,111,114,100,52,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116, -101,120,98,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111, -111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,1,0,0,21, -0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0, -0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,121,0, -18,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59,119,0,49,20,0,9,18,112,99,111,111, -114,100,0,59,122,0,18,99,111,111,114,100,0,59,122,0,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18, -98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,98,50,100,0,18,95,95,114,101,116,86,97,108,0,0, -18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,9,0,0,100,70,100, -120,0,1,1,0,0,9,0,112,0,0,0,1,4,118,101,99,52,95,100,100,120,0,18,95,95,114,101,116,86,97,108,0,59, -120,0,0,18,112,0,59,120,120,120,120,0,0,0,0,1,90,95,0,0,10,0,0,100,70,100,120,0,1,1,0,0,10,0,112,0, -0,0,1,4,118,101,99,52,95,100,100,120,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,112,0,59, -120,121,121,121,0,0,0,0,1,90,95,0,0,11,0,0,100,70,100,120,0,1,1,0,0,11,0,112,0,0,0,1,4,118,101,99, -52,95,100,100,120,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,112,0,59,120,121,122, -122,0,0,0,0,1,90,95,0,0,12,0,0,100,70,100,120,0,1,1,0,0,12,0,112,0,0,0,1,4,118,101,99,52,95,100, -100,120,0,18,95,95,114,101,116,86,97,108,0,0,18,112,0,0,0,0,1,90,95,0,0,9,0,0,100,70,100,121,0,1,1, -0,0,9,0,112,0,0,0,1,4,118,101,99,52,95,100,100,121,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0, -18,112,0,59,120,120,120,120,0,0,0,0,1,90,95,0,0,10,0,0,100,70,100,121,0,1,1,0,0,10,0,112,0,0,0,1,4, -118,101,99,52,95,100,100,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,112,0,59,120,121, -121,121,0,0,0,0,1,90,95,0,0,11,0,0,100,70,100,121,0,1,1,0,0,11,0,112,0,0,0,1,4,118,101,99,52,95, -100,100,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,112,0,59,120,121,122,122,0,0, -0,0,1,90,95,0,0,12,0,0,100,70,100,121,0,1,1,0,0,12,0,112,0,0,0,1,4,118,101,99,52,95,100,100,121,0, -18,95,95,114,101,116,86,97,108,0,0,18,112,0,0,0,0,1,90,95,0,0,9,0,0,102,119,105,100,116,104,0,1,1, -0,0,9,0,112,0,0,0,1,8,58,97,98,115,0,0,58,100,70,100,120,0,0,18,112,0,0,0,0,0,58,97,98,115,0,0,58, -100,70,100,121,0,0,18,112,0,0,0,0,0,46,0,0,1,90,95,0,0,10,0,0,102,119,105,100,116,104,0,1,1,0,0,10, -0,112,0,0,0,1,8,58,97,98,115,0,0,58,100,70,100,120,0,0,18,112,0,0,0,0,0,58,97,98,115,0,0,58,100,70, -100,121,0,0,18,112,0,0,0,0,0,46,0,0,1,90,95,0,0,11,0,0,102,119,105,100,116,104,0,1,1,0,0,11,0,112, -0,0,0,1,8,58,97,98,115,0,0,58,100,70,100,120,0,0,18,112,0,0,0,0,0,58,97,98,115,0,0,58,100,70,100, -121,0,0,18,112,0,0,0,0,0,46,0,0,1,90,95,0,0,12,0,0,102,119,105,100,116,104,0,1,1,0,0,12,0,112,0,0, -0,1,8,58,97,98,115,0,0,58,100,70,100,120,0,0,18,112,0,0,0,0,0,58,97,98,115,0,0,58,100,70,100,121,0, -0,18,112,0,0,0,0,0,46,0,0,0 +115,0,20,0,4,118,101,99,52,95,116,101,120,95,51,100,95,98,105,97,115,0,18,95,95,114,101,116,86,97, +108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,116, +101,120,116,117,114,101,51,68,80,114,111,106,0,1,1,0,0,18,0,115,97,109,112,108,101,114,0,0,1,1,0,0, +12,0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111, +114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,121,122,0,18,99,111,111,114,100,0,59,120,121, +122,0,18,99,111,111,114,100,0,59,119,0,49,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,98,105,97, +115,0,20,0,4,118,101,99,52,95,116,101,120,95,51,100,95,98,105,97,115,0,18,95,95,114,101,116,86,97, +108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116, +101,120,116,117,114,101,67,117,98,101,0,1,1,0,0,19,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0, +99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,99,111,111,114,100, +52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,121,122,0,18,99,111,111,114,100,0,20,0,9,18,99,111, +111,114,100,52,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,95,99,117,98,101, +0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0, +0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119,49,68,0,1,1,0,0,20,0,115,97,109,112,108,101,114,0, +0,1,1,0,0,11,0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,99, +111,111,114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,121,122,0,18,99,111,111,114,100,0,20, +0,9,18,99,111,111,114,100,52,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,95, +49,100,95,98,105,97,115,95,115,104,97,100,111,119,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97, +109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119, +49,68,80,114,111,106,0,1,1,0,0,20,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100, +0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112, +99,111,111,114,100,0,59,120,0,18,99,111,111,114,100,0,59,120,0,18,99,111,111,114,100,0,59,119,0,49, +20,0,9,18,112,99,111,111,114,100,0,59,122,0,18,99,111,111,114,100,0,59,122,0,20,0,9,18,112,99,111, +111,114,100,0,59,119,0,18,98,105,97,115,0,20,0,4,118,101,99,52,95,116,101,120,95,49,100,95,98,105, +97,115,95,115,104,97,100,111,119,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101, +114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119,50,68,0,1,1,0, +0,21,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97, +115,0,0,0,1,3,2,90,95,0,0,12,0,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120, +121,122,0,18,99,111,111,114,100,0,20,0,9,18,99,111,111,114,100,52,0,59,119,0,18,98,105,97,115,0,20, +0,4,118,101,99,52,95,116,101,120,95,50,100,95,98,105,97,115,95,115,104,97,100,111,119,0,18,95,95, +114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90, +95,0,0,12,0,0,115,104,97,100,111,119,50,68,80,114,111,106,0,1,1,0,0,21,0,115,97,109,112,108,101, +114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,1,1,0,0,9,0,98,105,97,115,0,0,0,1,3,2,90,95,0,0,12,0,1, +112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59, +120,121,0,18,99,111,111,114,100,0,59,119,0,49,20,0,9,18,112,99,111,111,114,100,0,59,122,0,18,99, +111,111,114,100,0,59,122,0,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,98,105,97,115,0,20,0,4, +118,101,99,52,95,116,101,120,95,50,100,95,98,105,97,115,95,115,104,97,100,111,119,0,18,95,95,114, +101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95, +0,0,9,0,0,100,70,100,120,0,1,1,0,0,9,0,112,0,0,0,1,4,118,101,99,52,95,100,100,120,0,18,95,95,114, +101,116,86,97,108,0,59,120,0,0,18,112,0,59,120,120,120,120,0,0,0,0,1,90,95,0,0,10,0,0,100,70,100, +120,0,1,1,0,0,10,0,112,0,0,0,1,4,118,101,99,52,95,100,100,120,0,18,95,95,114,101,116,86,97,108,0, +59,120,121,0,0,18,112,0,59,120,121,121,121,0,0,0,0,1,90,95,0,0,11,0,0,100,70,100,120,0,1,1,0,0,11, +0,112,0,0,0,1,4,118,101,99,52,95,100,100,120,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0, +18,112,0,59,120,121,122,122,0,0,0,0,1,90,95,0,0,12,0,0,100,70,100,120,0,1,1,0,0,12,0,112,0,0,0,1,4, +118,101,99,52,95,100,100,120,0,18,95,95,114,101,116,86,97,108,0,0,18,112,0,0,0,0,1,90,95,0,0,9,0,0, +100,70,100,121,0,1,1,0,0,9,0,112,0,0,0,1,4,118,101,99,52,95,100,100,121,0,18,95,95,114,101,116,86, +97,108,0,59,120,0,0,18,112,0,59,120,120,120,120,0,0,0,0,1,90,95,0,0,10,0,0,100,70,100,121,0,1,1,0, +0,10,0,112,0,0,0,1,4,118,101,99,52,95,100,100,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0, +0,18,112,0,59,120,121,121,121,0,0,0,0,1,90,95,0,0,11,0,0,100,70,100,121,0,1,1,0,0,11,0,112,0,0,0,1, +4,118,101,99,52,95,100,100,121,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,112,0,59, +120,121,122,122,0,0,0,0,1,90,95,0,0,12,0,0,100,70,100,121,0,1,1,0,0,12,0,112,0,0,0,1,4,118,101,99, +52,95,100,100,121,0,18,95,95,114,101,116,86,97,108,0,0,18,112,0,0,0,0,1,90,95,0,0,9,0,0,102,119, +105,100,116,104,0,1,1,0,0,9,0,112,0,0,0,1,8,58,97,98,115,0,0,58,100,70,100,120,0,0,18,112,0,0,0,0, +0,58,97,98,115,0,0,58,100,70,100,121,0,0,18,112,0,0,0,0,0,46,0,0,1,90,95,0,0,10,0,0,102,119,105, +100,116,104,0,1,1,0,0,10,0,112,0,0,0,1,8,58,97,98,115,0,0,58,100,70,100,120,0,0,18,112,0,0,0,0,0, +58,97,98,115,0,0,58,100,70,100,121,0,0,18,112,0,0,0,0,0,46,0,0,1,90,95,0,0,11,0,0,102,119,105,100, +116,104,0,1,1,0,0,11,0,112,0,0,0,1,8,58,97,98,115,0,0,58,100,70,100,120,0,0,18,112,0,0,0,0,0,58,97, +98,115,0,0,58,100,70,100,121,0,0,18,112,0,0,0,0,0,46,0,0,1,90,95,0,0,12,0,0,102,119,105,100,116, +104,0,1,1,0,0,12,0,112,0,0,0,1,8,58,97,98,115,0,0,58,100,70,100,120,0,0,18,112,0,0,0,0,0,58,97,98, +115,0,0,58,100,70,100,121,0,0,18,112,0,0,0,0,0,46,0,0,0 diff --git a/src/mesa/shader/slang/library/slang_vertex_builtin.gc b/src/mesa/shader/slang/library/slang_vertex_builtin.gc index 17e86d9a0e..9ad5f35425 100644 --- a/src/mesa/shader/slang/library/slang_vertex_builtin.gc +++ b/src/mesa/shader/slang/library/slang_vertex_builtin.gc @@ -78,7 +78,7 @@ vec4 texture1DLod(const sampler1D sampler, const float coord, const float lod) vec4 coord4; coord4.x = coord; coord4.w = lod; - __asm vec4_texb1d __retVal, sampler, coord4; + __asm vec4_tex_1d_bias __retVal, sampler, coord4; } vec4 texture1DProjLod(const sampler1D sampler, const vec2 coord, const float lod) @@ -86,7 +86,7 @@ vec4 texture1DProjLod(const sampler1D sampler, const vec2 coord, const float lod vec4 pcoord; pcoord.x = coord.x / coord.y; pcoord.w = lod; - __asm vec4_texb1d __retVal, sampler, pcoord; + __asm vec4_tex_1d_bias __retVal, sampler, pcoord; } vec4 texture1DProjLod(const sampler1D sampler, const vec4 coord, const float lod) @@ -94,7 +94,7 @@ vec4 texture1DProjLod(const sampler1D sampler, const vec4 coord, const float lod vec4 pcoord; pcoord.x = coord.x / coord.z; pcoord.w = lod; - __asm vec4_texb1d __retVal, sampler, pcoord; + __asm vec4_tex_1d_bias __retVal, sampler, pcoord; } @@ -104,7 +104,7 @@ vec4 texture2DLod(const sampler2D sampler, const vec2 coord, const float lod) vec4 coord4; coord4.xy = coord.xy; coord4.w = lod; - __asm vec4_texb2d __retVal, sampler, coord4; + __asm vec4_tex_2d_bias __retVal, sampler, coord4; } vec4 texture2DProjLod(const sampler2D sampler, const vec3 coord, const float lod) @@ -112,7 +112,7 @@ vec4 texture2DProjLod(const sampler2D sampler, const vec3 coord, const float lod vec4 pcoord; pcoord.xy = coord.xy / coord.z; pcoord.w = lod; - __asm vec4_texb2d __retVal, sampler, pcoord; + __asm vec4_tex_2d_bias __retVal, sampler, pcoord; } vec4 texture2DProjLod(const sampler2D sampler, const vec4 coord, const float lod) @@ -120,7 +120,7 @@ vec4 texture2DProjLod(const sampler2D sampler, const vec4 coord, const float lod vec4 pcoord; pcoord.xy = coord.xy / coord.z; pcoord.w = lod; - __asm vec4_texb2d __retVal, sampler, pcoord; + __asm vec4_tex_2d_bias __retVal, sampler, pcoord; } @@ -129,16 +129,16 @@ vec4 texture3DLod(const sampler3D sampler, const vec3 coord, const float lod) vec4 coord4; coord4.xyz = coord.xyz; coord4.w = lod; - __asm vec4_texb3d __retVal, sampler, coord4; + __asm vec4_tex_3d_bias __retVal, sampler, coord4; } vec4 texture3DProjLod(const sampler3D sampler, const vec4 coord, const float lod) { - // do projection here (there's no vec4_texbp3d instruction) + // do projection here (there's no vec4_tex_3d_bias_proj instruction) vec4 pcoord; pcoord.xyz = coord.xyz / coord.w; pcoord.w = lod; - __asm vec4_texb3d __retVal, sampler, pcoord; + __asm vec4_tex_3d_bias __retVal, sampler, pcoord; } @@ -147,7 +147,7 @@ vec4 textureCubeLod(const samplerCube sampler, const vec3 coord, const float lod vec4 coord4; coord4.xyz = coord; coord4.w = lod; - __asm vec4_texcube __retVal, sampler, coord4; + __asm vec4_tex_cube __retVal, sampler, coord4; } @@ -156,7 +156,7 @@ vec4 shadow1DLod(const sampler1DShadow sampler, const vec3 coord, const float lo vec4 coord4; coord4.xyz = coord; coord4.w = lod; - __asm vec4_texb1d __retVal, sampler, coord4; + __asm vec4_tex_1d_bias_shadow __retVal, sampler, coord4; } vec4 shadow1DProjLod(const sampler1DShadow sampler, const vec4 coord, @@ -166,7 +166,7 @@ vec4 shadow1DProjLod(const sampler1DShadow sampler, const vec4 coord, pcoord.x = coord.x / coord.w; pcoord.z = coord.z; pcoord.w = lod; - __asm vec4_texb1d __retVal, sampler, pcoord; + __asm vec4_tex_1d_bias_shadow __retVal, sampler, pcoord; } @@ -175,7 +175,7 @@ vec4 shadow2DLod(const sampler2DShadow sampler, const vec3 coord, const float lo vec4 coord4; coord4.xyz = coord; coord4.w = lod; - __asm vec4_texb2d __retVal, sampler, coord4; + __asm vec4_tex_2d_bias_shadow __retVal, sampler, coord4; } vec4 shadow2DProjLod(const sampler2DShadow sampler, const vec4 coord, @@ -185,6 +185,6 @@ vec4 shadow2DProjLod(const sampler2DShadow sampler, const vec4 coord, pcoord.xy = coord.xy / coord.w; pcoord.z = coord.z; pcoord.w = lod; - __asm vec4_texb2d __retVal, sampler, pcoord; + __asm vec4_tex_2d_bias_shadow __retVal, sampler, pcoord; } diff --git a/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h b/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h index 2cb91bf268..e5a252b019 100644 --- a/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h +++ b/src/mesa/shader/slang/library/slang_vertex_builtin_gc.h @@ -33,74 +33,77 @@ 0,116,101,120,116,117,114,101,49,68,76,111,100,0,1,1,0,0,16,0,115,97,109,112,108,101,114,0,0,1,1,0, 0,9,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,99,111,111,114, 100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,0,18,99,111,111,114,100,0,20,0,9,18,99,111,111, -114,100,52,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,98,49,100,0,18,95,95, -114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90, -95,0,0,12,0,0,116,101,120,116,117,114,101,49,68,80,114,111,106,76,111,100,0,1,1,0,0,16,0,115,97, -109,112,108,101,114,0,0,1,1,0,0,10,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90, -95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,0,18,99,111,111, -114,100,0,59,120,0,18,99,111,111,114,100,0,59,121,0,49,20,0,9,18,112,99,111,111,114,100,0,59,119,0, -18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,98,49,100,0,18,95,95,114,101,116,86,97,108,0, -0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101, -120,116,117,114,101,49,68,80,114,111,106,76,111,100,0,1,1,0,0,16,0,115,97,109,112,108,101,114,0,0, -1,1,0,0,12,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99, -111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,0,18,99,111,111,114,100,0,59,120,0,18, -99,111,111,114,100,0,59,122,0,49,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,108,111,100,0,20,0, -4,118,101,99,52,95,116,101,120,98,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112, -108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101, -50,68,76,111,100,0,1,1,0,0,17,0,115,97,109,112,108,101,114,0,0,1,1,0,0,10,0,99,111,111,114,100,0,0, -1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111, -114,100,52,0,59,120,121,0,18,99,111,111,114,100,0,59,120,121,0,20,0,9,18,99,111,111,114,100,52,0, -59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,98,50,100,0,18,95,95,114,101,116,86, -97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0, -116,101,120,116,117,114,101,50,68,80,114,111,106,76,111,100,0,1,1,0,0,17,0,115,97,109,112,108,101, -114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1, -112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59, -120,121,0,18,99,111,111,114,100,0,59,122,0,49,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,108, -111,100,0,20,0,4,118,101,99,52,95,116,101,120,98,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18, -115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120, -116,117,114,101,50,68,80,114,111,106,76,111,100,0,1,1,0,0,17,0,115,97,109,112,108,101,114,0,0,1,1, -0,0,12,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111, -111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59,120,121,0, -18,99,111,111,114,100,0,59,122,0,49,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,108,111,100,0, -20,0,4,118,101,99,52,95,116,101,120,98,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109, -112,108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114, -101,51,68,76,111,100,0,1,1,0,0,18,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100, -0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,99,111,111,114,100,52,0,0,0,9,18,99,111, -111,114,100,52,0,59,120,121,122,0,18,99,111,111,114,100,0,59,120,121,122,0,20,0,9,18,99,111,111, -114,100,52,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,98,51,100,0,18,95,95, -114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90, -95,0,0,12,0,0,116,101,120,116,117,114,101,51,68,80,114,111,106,76,111,100,0,1,1,0,0,18,0,115,97, +114,100,52,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,95,49,100,95,98,105,97, +115,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100, +52,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,49,68,80,114,111,106,76,111,100,0,1,1,0, +0,16,0,115,97,109,112,108,101,114,0,0,1,1,0,0,10,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100, +0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,0, +18,99,111,111,114,100,0,59,120,0,18,99,111,111,114,100,0,59,121,0,49,20,0,9,18,112,99,111,111,114, +100,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,95,49,100,95,98,105,97,115,0, +18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0, +0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,49,68,80,114,111,106,76,111,100,0,1,1,0,0,16,0, +115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1, +3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,0,18,99,111, +111,114,100,0,59,120,0,18,99,111,111,114,100,0,59,122,0,49,20,0,9,18,112,99,111,111,114,100,0,59, +119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,95,49,100,95,98,105,97,115,0,18,95,95, +114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90, +95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,76,111,100,0,1,1,0,0,17,0,115,97,109,112,108,101, +114,0,0,1,1,0,0,10,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1, +99,111,111,114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,121,0,18,99,111,111,114,100,0,59, +120,121,0,20,0,9,18,99,111,111,114,100,52,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116, +101,120,95,50,100,95,98,105,97,115,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101, +114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,80, +114,111,106,76,111,100,0,1,1,0,0,17,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114, +100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112, +99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59, +122,0,49,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116, +101,120,95,50,100,95,98,105,97,115,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101, +114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,50,68,80, +114,111,106,76,111,100,0,1,1,0,0,17,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114, +100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112, +99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59, +122,0,49,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116, +101,120,95,50,100,95,98,105,97,115,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101, +114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,51,68,76, +111,100,0,1,1,0,0,18,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,1,1,0,0, +9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,114,100, +52,0,59,120,121,122,0,18,99,111,111,114,100,0,59,120,121,122,0,20,0,9,18,99,111,111,114,100,52,0, +59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,95,51,100,95,98,105,97,115,0,18,95, +95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1, +90,95,0,0,12,0,0,116,101,120,116,117,114,101,51,68,80,114,111,106,76,111,100,0,1,1,0,0,18,0,115,97, 109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90, 95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,121,122,0,18,99, 111,111,114,100,0,59,120,121,122,0,18,99,111,111,114,100,0,59,119,0,49,20,0,9,18,112,99,111,111, -114,100,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,98,51,100,0,18,95,95,114, -101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95, -0,0,12,0,0,116,101,120,116,117,114,101,67,117,98,101,76,111,100,0,1,1,0,0,19,0,115,97,109,112,108, -101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0, -1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,121,122,0,18,99,111,111,114,100, -0,20,0,9,18,99,111,111,114,100,52,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120, -99,117,98,101,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111, -114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119,49,68,76,111,100,0,1,1,0,0,20,0,115, +114,100,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,95,51,100,95,98,105,97,115, +0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0, +0,0,0,1,90,95,0,0,12,0,0,116,101,120,116,117,114,101,67,117,98,101,76,111,100,0,1,1,0,0,19,0,115, 97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2, 90,95,0,0,12,0,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,121,122,0,18,99, 111,111,114,100,0,20,0,9,18,99,111,111,114,100,52,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52, -95,116,101,120,98,49,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18, -99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119,49,68,80,114,111,106,76, -111,100,0,1,1,0,0,20,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,1,1,0,0, -9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114, -100,0,59,120,0,18,99,111,111,114,100,0,59,120,0,18,99,111,111,114,100,0,59,119,0,49,20,0,9,18,112, -99,111,111,114,100,0,59,122,0,18,99,111,111,114,100,0,59,122,0,20,0,9,18,112,99,111,111,114,100,0, -59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,98,49,100,0,18,95,95,114,101,116,86, -97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95,0,0,12,0,0, -115,104,97,100,111,119,50,68,76,111,100,0,1,1,0,0,21,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0, -99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,99,111,111,114,100,52, -0,0,0,9,18,99,111,111,114,100,52,0,59,120,121,122,0,18,99,111,111,114,100,0,20,0,9,18,99,111,111, -114,100,52,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,98,50,100,0,18,95,95, -114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90, -95,0,0,12,0,0,115,104,97,100,111,119,50,68,80,114,111,106,76,111,100,0,1,1,0,0,21,0,115,97,109,112, -108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0, -12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114, -100,0,59,120,121,0,18,99,111,111,114,100,0,59,119,0,49,20,0,9,18,112,99,111,111,114,100,0,59,122,0, -18,99,111,111,114,100,0,59,122,0,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,108,111,100,0,20,0, -4,118,101,99,52,95,116,101,120,98,50,100,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112, +95,116,101,120,95,99,117,98,101,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114, +0,0,18,99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119,49,68,76,111,100,0, +1,1,0,0,20,0,115,97,109,112,108,101,114,0,0,1,1,0,0,11,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108, +111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,99,111,111,114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59, +120,121,122,0,18,99,111,111,114,100,0,20,0,9,18,99,111,111,114,100,52,0,59,119,0,18,108,111,100,0, +20,0,4,118,101,99,52,95,116,101,120,95,49,100,95,98,105,97,115,95,115,104,97,100,111,119,0,18,95, +95,114,101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1, +90,95,0,0,12,0,0,115,104,97,100,111,119,49,68,80,114,111,106,76,111,100,0,1,1,0,0,20,0,115,97,109, +112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95, +0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112,99,111,111,114,100,0,59,120,0,18,99,111,111,114, +100,0,59,120,0,18,99,111,111,114,100,0,59,119,0,49,20,0,9,18,112,99,111,111,114,100,0,59,122,0,18, +99,111,111,114,100,0,59,122,0,20,0,9,18,112,99,111,111,114,100,0,59,119,0,18,108,111,100,0,20,0,4, +118,101,99,52,95,116,101,120,95,49,100,95,98,105,97,115,95,115,104,97,100,111,119,0,18,95,95,114, +101,116,86,97,108,0,0,18,115,97,109,112,108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,1,90,95, +0,0,12,0,0,115,104,97,100,111,119,50,68,76,111,100,0,1,1,0,0,21,0,115,97,109,112,108,101,114,0,0,1, +1,0,0,11,0,99,111,111,114,100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,99,111,111, +114,100,52,0,0,0,9,18,99,111,111,114,100,52,0,59,120,121,122,0,18,99,111,111,114,100,0,20,0,9,18, +99,111,111,114,100,52,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,95,50,100,95, +98,105,97,115,95,115,104,97,100,111,119,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112,108, +101,114,0,0,18,99,111,111,114,100,52,0,0,0,0,1,90,95,0,0,12,0,0,115,104,97,100,111,119,50,68,80, +114,111,106,76,111,100,0,1,1,0,0,21,0,115,97,109,112,108,101,114,0,0,1,1,0,0,12,0,99,111,111,114, +100,0,0,1,1,0,0,9,0,108,111,100,0,0,0,1,3,2,90,95,0,0,12,0,1,112,99,111,111,114,100,0,0,0,9,18,112, +99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59,120,121,0,18,99,111,111,114,100,0,59, +119,0,49,20,0,9,18,112,99,111,111,114,100,0,59,122,0,18,99,111,111,114,100,0,59,122,0,20,0,9,18, +112,99,111,111,114,100,0,59,119,0,18,108,111,100,0,20,0,4,118,101,99,52,95,116,101,120,95,50,100, +95,98,105,97,115,95,115,104,97,100,111,119,0,18,95,95,114,101,116,86,97,108,0,0,18,115,97,109,112, 108,101,114,0,0,18,112,99,111,111,114,100,0,0,0,0,0 diff --git a/src/mesa/shader/slang/slang_builtin.c b/src/mesa/shader/slang/slang_builtin.c index c0f4c79e13..9858a0f7fd 100644 --- a/src/mesa/shader/slang/slang_builtin.c +++ b/src/mesa/shader/slang/slang_builtin.c @@ -494,7 +494,7 @@ emit_statevars(const char *name, int array_len, } else if (type->type == SLANG_SPEC_STRUCT) { const slang_variable_scope *fields = type->_struct->fields; - GLuint i, pos; + GLuint i, pos = 0; for (i = 0; i < fields->num_variables; i++) { const slang_variable *var = fields->variables[i]; GLint p = emit_statevars(var->a_name, 0, &var->type.specifier, diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c index 11340d26e2..8263aae334 100644 --- a/src/mesa/shader/slang/slang_codegen.c +++ b/src/mesa/shader/slang/slang_codegen.c @@ -296,46 +296,6 @@ _slang_array_size(GLint elemSize, GLint arrayLen) } - -/** - * Establish the binding between a slang_ir_node and a slang_variable. - * Then, allocate/attach a slang_ir_storage object to the IR node if needed. - * The IR node must be a IR_VAR or IR_VAR_DECL node. - * \param n the IR node - * \param var the variable to associate with the IR node - */ -static void -_slang_attach_storage(slang_ir_node *n, slang_variable *var) -{ - assert(n); - assert(var); - assert(n->Opcode == IR_VAR || n->Opcode == IR_VAR_DECL); - assert(!n->Var || n->Var == var); - - n->Var = var; - - if (!n->Store) { - /* need to setup storage */ - if (n->Var && n->Var->store) { - /* node storage info = var storage info */ - n->Store = n->Var->store; - } - else { - /* alloc new storage info */ - n->Store = _slang_new_ir_storage(PROGRAM_UNDEFINED, -7, -5); -#if 0 - printf("%s var=%s Store=%p Size=%d\n", __FUNCTION__, - (char*) var->a_name, - (void*) n->Store, n->Store->Size); -#endif - if (n->Var) - n->Var->store = n->Store; - assert(n->Var->store); - } - } -} - - /** * Return the TEXTURE_*_INDEX value that corresponds to a sampler type, * or -1 if the type is not a sampler. @@ -450,8 +410,8 @@ _slang_output_index(const char *name, GLenum target) { NULL, 0 } }; static const struct output_info fragOutputs[] = { - { "gl_FragColor", FRAG_RESULT_COLR }, - { "gl_FragDepth", FRAG_RESULT_DEPR }, + { "gl_FragColor", FRAG_RESULT_COLOR }, + { "gl_FragDepth", FRAG_RESULT_DEPTH }, { "gl_FragData", FRAG_RESULT_DATA0 }, { NULL, 0 } }; @@ -516,18 +476,28 @@ static slang_asm_info AsmInfo[] = { /* float binary op */ { "float_power", IR_POW, 1, 2 }, /* texture / sampler */ - { "vec4_tex1d", IR_TEX, 1, 2 }, - { "vec4_texb1d", IR_TEXB, 1, 2 }, /* 1d w/ bias */ - { "vec4_texp1d", IR_TEXP, 1, 2 }, /* 1d w/ projection */ - { "vec4_tex2d", IR_TEX, 1, 2 }, - { "vec4_texb2d", IR_TEXB, 1, 2 }, /* 2d w/ bias */ - { "vec4_texp2d", IR_TEXP, 1, 2 }, /* 2d w/ projection */ - { "vec4_tex3d", IR_TEX, 1, 2 }, - { "vec4_texb3d", IR_TEXB, 1, 2 }, /* 3d w/ bias */ - { "vec4_texp3d", IR_TEXP, 1, 2 }, /* 3d w/ projection */ - { "vec4_texcube", IR_TEX, 1, 2 }, /* cubemap */ - { "vec4_tex_rect", IR_TEX, 1, 2 }, /* rectangle */ - { "vec4_texp_rect", IR_TEX, 1, 2 },/* rectangle w/ projection */ + { "vec4_tex_1d", IR_TEX, 1, 2 }, + { "vec4_tex_1d_bias", IR_TEXB, 1, 2 }, /* 1d w/ bias */ + { "vec4_tex_1d_proj", IR_TEXP, 1, 2 }, /* 1d w/ projection */ + { "vec4_tex_2d", IR_TEX, 1, 2 }, + { "vec4_tex_2d_bias", IR_TEXB, 1, 2 }, /* 2d w/ bias */ + { "vec4_tex_2d_proj", IR_TEXP, 1, 2 }, /* 2d w/ projection */ + { "vec4_tex_3d", IR_TEX, 1, 2 }, + { "vec4_tex_3d_bias", IR_TEXB, 1, 2 }, /* 3d w/ bias */ + { "vec4_tex_3d_proj", IR_TEXP, 1, 2 }, /* 3d w/ projection */ + { "vec4_tex_cube", IR_TEX, 1, 2 }, /* cubemap */ + { "vec4_tex_rect", IR_TEX, 1, 2 }, /* rectangle */ + { "vec4_tex_rect_bias", IR_TEX, 1, 2 }, /* rectangle w/ projection */ + + /* texture / sampler but with shadow comparison */ + { "vec4_tex_1d_shadow", IR_TEX_SH, 1, 2 }, + { "vec4_tex_1d_bias_shadow", IR_TEXB_SH, 1, 2 }, + { "vec4_tex_1d_proj_shadow", IR_TEXP_SH, 1, 2 }, + { "vec4_tex_2d_shadow", IR_TEX_SH, 1, 2 }, + { "vec4_tex_2d_bias_shadow", IR_TEXB_SH, 1, 2 }, + { "vec4_tex_2d_proj_shadow", IR_TEXP_SH, 1, 2 }, + { "vec4_tex_rect_shadow", IR_TEX_SH, 1, 2 }, + { "vec4_tex_rect_proj_shadow", IR_TEXP_SH, 1, 2 }, /* unary op */ { "ivec4_to_vec4", IR_I_TO_F, 1, 1 }, /* int[4] to float[4] */ @@ -735,7 +705,14 @@ new_var(slang_assemble_ctx *A, slang_variable *var) { slang_ir_node *n = new_node0(IR_VAR); if (n) { - _slang_attach_storage(n, var); + ASSERT(var); + ASSERT(var->store); + ASSERT(!n->Store); + ASSERT(!n->Var); + + /* Set IR node's Var and Store pointers */ + n->Var = var; + n->Store = var->store; } return n; } @@ -1462,6 +1439,12 @@ _slang_gen_function_call(slang_assemble_ctx *A, slang_function *fun, /*_slang_label_delete(A->curFuncEndLabel);*/ A->curFuncEndLabel = prevFuncEndLabel; + if (A->pragmas->Debug) { + char s[1000]; + snprintf(s, sizeof(s), "Call/inline %s()", (char *) fun->header.a_name); + n->Comment = _slang_strdup(s); + } + return n; } @@ -2598,6 +2581,20 @@ _slang_can_unroll_for_loop(slang_assemble_ctx * A, const slang_operation *oper) } +static void +_unroll_loop_inc(slang_assemble_ctx * A) +{ + A->UnrollLoop++; +} + + +static void +_unroll_loop_dec(slang_assemble_ctx * A) +{ + A->UnrollLoop--; +} + + /** * Unroll a for-loop. * First we determine the number of iterations to unroll. @@ -2614,6 +2611,9 @@ _slang_unroll_for_loop(slang_assemble_ctx * A, const slang_operation *oper) slang_ir_node *n, *root = NULL; slang_atom varId; + /* Set flag so code generator knows we're unrolling loops */ + _unroll_loop_inc( A ); + if (oper->children[0].type == SLANG_OPER_BLOCK_NO_NEW_SCOPE) { /* for (int i=0; ... */ slang_variable *var; @@ -2636,11 +2636,15 @@ _slang_unroll_for_loop(slang_assemble_ctx * A, const slang_operation *oper) /* make a copy of the loop body */ body = slang_operation_new(1); - if (!body) + if (!body) { + _unroll_loop_dec( A ); return NULL; + } - if (!slang_operation_copy(body, &oper->children[3])) + if (!slang_operation_copy(body, &oper->children[3])) { + _unroll_loop_dec( A ); return NULL; + } /* in body, replace instances of 'varId' with literal 'iter' */ { @@ -2651,6 +2655,7 @@ _slang_unroll_for_loop(slang_assemble_ctx * A, const slang_operation *oper) if (!oldVar) { /* undeclared loop variable */ slang_operation_delete(body); + _unroll_loop_dec( A ); return NULL; } @@ -2665,11 +2670,18 @@ _slang_unroll_for_loop(slang_assemble_ctx * A, const slang_operation *oper) /* do IR codegen for body */ n = _slang_gen_operation(A, body); + if (!n) { + _unroll_loop_dec( A ); + return NULL; + } + root = new_seq(root, n); slang_operation_delete(body); } + _unroll_loop_dec( A ); + return root; } @@ -2806,18 +2818,24 @@ _slang_gen_if(slang_assemble_ctx * A, const slang_operation *oper) if (is_operation_type(&oper->children[1], SLANG_OPER_BREAK) && !haveElseClause) { /* Special case: generate a conditional break */ + if (!A->CurLoop && A->UnrollLoop) /* trying to unroll */ + return NULL; ifBody = new_break_if_true(A->CurLoop, cond); return ifBody; } else if (is_operation_type(&oper->children[1], SLANG_OPER_CONTINUE) && !haveElseClause) { - /* Special case: generate a conditional break */ + /* Special case: generate a conditional continue */ + if (!A->CurLoop && A->UnrollLoop) /* trying to unroll */ + return NULL; ifBody = new_cont_if_true(A->CurLoop, cond); return ifBody; } else { /* general case */ ifBody = _slang_gen_operation(A, &oper->children[1]); + if (!ifBody) + return NULL; if (haveElseClause) elseBody = _slang_gen_operation(A, &oper->children[2]); else @@ -2988,7 +3006,7 @@ _slang_gen_var_decl(slang_assemble_ctx *A, slang_variable *var, slang_ir_node *varDecl, *n; slang_ir_storage *store; GLint arrayLen, size, totalSize; /* if array then totalSize > size */ - enum register_file file; + gl_register_file file; /*assert(!var->declared);*/ var->declared = GL_TRUE; @@ -3004,7 +3022,7 @@ _slang_gen_var_decl(slang_assemble_ctx *A, slang_variable *var, file = PROGRAM_TEMPORARY; } - totalSize = size = _slang_sizeof_type_specifier(&var->type.specifier); + size = _slang_sizeof_type_specifier(&var->type.specifier); if (size <= 0) { slang_info_log_error(A->log, "invalid declaration for '%s'", varName); return NULL; @@ -3018,22 +3036,23 @@ _slang_gen_var_decl(slang_assemble_ctx *A, slang_variable *var, if (!varDecl) return NULL; - _slang_attach_storage(varDecl, var); /* undefined storage at first */ - assert(var->store); - assert(varDecl->Store == var->store); - assert(varDecl->Store); - assert(varDecl->Store->Index < 0); - store = var->store; + /* Allocate slang_ir_storage for this variable if needed. + * Note that we may not actually allocate a constant or temporary register + * until later. + */ + if (!var->store) { + GLint index = -7; /* TBD / unknown */ + var->store = _slang_new_ir_storage(file, index, totalSize); + if (!var->store) + return NULL; /* out of memory */ + } - assert(store == varDecl->Store); + /* set the IR node's Var and Store pointers */ + varDecl->Var = var; + varDecl->Store = var->store; - /* Fill in storage fields which we now know. store->Index/Swizzle may be - * set for some cases below. Otherwise, store->Index/Swizzle will be set - * during code emit. - */ - store->File = file; - store->Size = totalSize; + store = var->store; /* if there's an initializer, generate IR for the expression */ if (initializer) { @@ -3662,7 +3681,7 @@ _slang_gen_assignment(slang_assemble_ctx * A, slang_operation *oper) if (lhs && rhs) { /* convert lhs swizzle into writemask */ const GLuint swizzle = root_swizzle(lhs->Store); - GLuint writemask, newSwizzle; + GLuint writemask, newSwizzle = 0x0; if (!swizzle_to_writemask(A, swizzle, &writemask, &newSwizzle)) { /* Non-simple writemask, need to swizzle right hand side in * order to put components into the right place. @@ -4029,13 +4048,15 @@ _slang_gen_operation(slang_assemble_ctx * A, slang_operation *oper) return _slang_gen_while(A, oper); case SLANG_OPER_BREAK: if (!A->CurLoop) { - slang_info_log_error(A->log, "'break' not in loop"); + if (!A->UnrollLoop) + slang_info_log_error(A->log, "'break' not in loop"); return NULL; } return new_break(A->CurLoop); case SLANG_OPER_CONTINUE: if (!A->CurLoop) { - slang_info_log_error(A->log, "'continue' not in loop"); + if (!A->UnrollLoop) + slang_info_log_error(A->log, "'continue' not in loop"); return NULL; } return _slang_gen_continue(A, oper); @@ -4333,13 +4354,25 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var, if (prog) { /* user-defined uniform */ if (datatype == GL_NONE) { - if (var->type.specifier.type == SLANG_SPEC_STRUCT) { + if ((var->type.specifier.type == SLANG_SPEC_ARRAY && + var->type.specifier._array->type == SLANG_SPEC_STRUCT) || + (var->type.specifier.type == SLANG_SPEC_STRUCT)) { /* temporary work-around */ GLenum datatype = GL_FLOAT; GLint uniformLoc = _mesa_add_uniform(prog->Parameters, varName, totalSize, datatype, NULL); store = _slang_new_ir_storage_swz(PROGRAM_UNIFORM, uniformLoc, totalSize, swizzle); + + if (arrayLen > 0) { + GLint a = arrayLen - 1; + GLint i; + for (i = 0; i < a; i++) { + GLfloat value = (GLfloat)(i + uniformLoc + 1); + (void) _mesa_add_parameter(prog->Parameters, PROGRAM_UNIFORM, + varName, 1, datatype, &value, NULL, 0x0); + } + } /* XXX what we need to do is unroll the struct into its * basic types, creating a uniform variable for each. diff --git a/src/mesa/shader/slang/slang_codegen.h b/src/mesa/shader/slang/slang_codegen.h index f2daa034e4..e812c1f7ea 100644 --- a/src/mesa/shader/slang/slang_codegen.h +++ b/src/mesa/shader/slang/slang_codegen.h @@ -42,6 +42,7 @@ typedef struct slang_assemble_ctx_ struct slang_label_ *curFuncEndLabel; struct slang_ir_node_ *CurLoop; struct slang_function_ *CurFunction; + GLuint UnrollLoop; } slang_assemble_ctx; diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c index cfed977905..fb7128841c 100644 --- a/src/mesa/shader/slang/slang_compile.c +++ b/src/mesa/shader/slang/slang_compile.c @@ -32,6 +32,7 @@ #include "main/context.h" #include "shader/program.h" #include "shader/programopt.h" +#include "shader/prog_optimize.h" #include "shader/prog_print.h" #include "shader/prog_parameter.h" #include "shader/grammar/grammar_mesa.h" @@ -1450,7 +1451,7 @@ parse_expression(slang_parse_ctx * C, slang_output_ctx * O, case OP_CALL: { GLboolean array_constructor = GL_FALSE; - GLint array_constructor_size; + GLint array_constructor_size = 0; op->type = SLANG_OPER_CALL; op->a_id = parse_identifier(C); @@ -2055,6 +2056,7 @@ parse_init_declarator(slang_parse_ctx * C, slang_output_ctx * O, /* emit code for global var decl */ if (C->global_scope) { slang_assemble_ctx A; + memset(&A, 0, sizeof(slang_assemble_ctx)); A.atoms = C->atoms; A.space.funcs = O->funs; A.space.structs = O->structs; @@ -2072,7 +2074,7 @@ parse_init_declarator(slang_parse_ctx * C, slang_output_ctx * O, if (C->global_scope) { if (var->initializer != NULL) { slang_assemble_ctx A; - + memset(&A, 0, sizeof(slang_assemble_ctx)); A.atoms = C->atoms; A.space.funcs = O->funs; A.space.structs = O->structs; @@ -2414,7 +2416,7 @@ parse_code_unit(slang_parse_ctx * C, slang_code_unit * unit, if (mainFunc) { /* assemble (generate code) for main() */ slang_assemble_ctx A; - + memset(&A, 0, sizeof(slang_assemble_ctx)); A.atoms = C->atoms; A.space.funcs = o.funs; A.space.structs = o.structs; @@ -2796,6 +2798,12 @@ _slang_compile(GLcontext *ctx, struct gl_shader *shader) shader->CompileStatus = success; + if (success) { + if (shader->Pragmas.Optimize) { + _mesa_optimize_program(ctx, shader->Program); + } + } + if (ctx->Shader.Flags & GLSL_LOG) { _mesa_write_shader_to_file(shader); } diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c index 2dd122c9a5..1b1edb4460 100644 --- a/src/mesa/shader/slang/slang_emit.c +++ b/src/mesa/shader/slang/slang_emit.c @@ -164,7 +164,7 @@ _slang_var_swizzle(GLint size, GLint comp) { switch (size) { case 1: - return MAKE_SWIZZLE4(comp, comp, comp, comp); + return MAKE_SWIZZLE4(comp, SWIZZLE_NIL, SWIZZLE_NIL, SWIZZLE_NIL); case 2: return MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_NIL, SWIZZLE_NIL); case 3: @@ -446,12 +446,12 @@ new_instruction(slang_emit_info *emitInfo, gl_inst_opcode opcode) static struct prog_instruction * emit_arl_load(slang_emit_info *emitInfo, - enum register_file file, GLint index, GLuint swizzle) + gl_register_file file, GLint index, GLuint swizzle) { struct prog_instruction *inst = new_instruction(emitInfo, OPCODE_ARL); inst->SrcReg[0].File = file; inst->SrcReg[0].Index = index; - inst->SrcReg[0].Swizzle = swizzle; + inst->SrcReg[0].Swizzle = fix_swizzle(swizzle); inst->DstReg.File = PROGRAM_ADDRESS; inst->DstReg.Index = 0; inst->DstReg.WriteMask = WRITEMASK_X; @@ -873,6 +873,7 @@ emit_compare(slang_emit_info *emitInfo, slang_ir_node *n) if (n->Children[0]->Store->Size != n->Children[1]->Store->Size) { slang_info_log_error(emitInfo->log, "invalid operands to == or !="); + n->Store = NULL; return NULL; } @@ -902,6 +903,7 @@ emit_compare(slang_emit_info *emitInfo, slang_ir_node *n) slang_ir_storage tempStore; if (!alloc_local_temp(emitInfo, &tempStore, 4)) { + n->Store = NULL; return NULL; /* out of temps */ } @@ -1259,16 +1261,33 @@ emit_tex(slang_emit_info *emitInfo, slang_ir_node *n) { struct prog_instruction *inst; gl_inst_opcode opcode; + GLboolean shadow = GL_FALSE; - if (n->Opcode == IR_TEX) { + switch (n->Opcode) { + case IR_TEX: opcode = OPCODE_TEX; - } - else if (n->Opcode == IR_TEXB) { + break; + case IR_TEX_SH: + opcode = OPCODE_TEX; + shadow = GL_TRUE; + break; + case IR_TEXB: opcode = OPCODE_TXB; - } - else { - assert(n->Opcode == IR_TEXP); + break; + case IR_TEXB_SH: + opcode = OPCODE_TXB; + shadow = GL_TRUE; + break; + case IR_TEXP: opcode = OPCODE_TXP; + break; + case IR_TEXP_SH: + opcode = OPCODE_TXP; + shadow = GL_TRUE; + break; + default: + _mesa_problem(NULL, "Bad IR TEX code"); + return NULL; } if (n->Children[0]->Opcode == IR_ELEMENT) { @@ -1300,6 +1319,8 @@ emit_tex(slang_emit_info *emitInfo, slang_ir_node *n) NULL, NULL); + inst->TexShadow = shadow; + /* Store->Index is the uniform/sampler index */ assert(n->Children[0]->Store->Index >= 0); inst->TexSrcUnit = n->Children[0]->Store->Index; @@ -1358,6 +1379,7 @@ emit_copy(slang_emit_info *emitInfo, slang_ir_node *n) #if PEEPHOLE_OPTIMIZATIONS if (inst && + (n->Children[1]->Opcode != IR_SWIZZLE) && _slang_is_temp(emitInfo->vt, n->Children[1]->Store) && (inst->DstReg.File == n->Children[1]->Store->File) && (inst->DstReg.Index == n->Children[1]->Store->Index) && @@ -1374,13 +1396,9 @@ emit_copy(slang_emit_info *emitInfo, slang_ir_node *n) * becomes: * MUL a, x, y; */ - if (n->Children[1]->Opcode != IR_SWIZZLE) - _slang_free_temp(emitInfo->vt, n->Children[1]->Store); - *n->Children[1]->Store = *n->Children[0]->Store; /* fixup the previous instruction (which stored the RHS result) */ assert(n->Children[0]->Store->Index >= 0); - storage_to_dst_reg(&inst->DstReg, n->Children[0]->Store); return inst; } @@ -1813,6 +1831,25 @@ emit_cont_break_if_true(slang_emit_info *emitInfo, slang_ir_node *n) } +/** + * Return the size of a swizzle mask given that some swizzle components + * may be NIL/undefined. For example: + * swizzle_size(".zzxx") = 4 + * swizzle_size(".xy??") = 2 + * swizzle_size(".w???") = 1 + */ +static GLuint +swizzle_size(GLuint swizzle) +{ + GLuint i; + for (i = 0; i < 4; i++) { + if (GET_SWZ(swizzle, i) == SWIZZLE_NIL) + return i; + } + return 4; +} + + static struct prog_instruction * emit_swizzle(slang_emit_info *emitInfo, slang_ir_node *n) { @@ -1820,14 +1857,25 @@ emit_swizzle(slang_emit_info *emitInfo, slang_ir_node *n) inst = emit(emitInfo, n->Children[0]); -#if 0 - assert(n->Store->Parent); - /* Apply this node's swizzle to parent's storage */ - GLuint swizzle = n->Store->Swizzle; - _slang_copy_ir_storage(n->Store, n->Store->Parent); - n->Store->Swizzle = _slang_swizzle_swizzle(n->Store->Swizzle, swizzle); + if (!n->Store->Parent) { + /* this covers a case such as "(b ? p : q).x" */ + n->Store->Parent = n->Children[0]->Store; + assert(n->Store->Parent); + } + + { + const GLuint swizzle = n->Store->Swizzle; + /* new storage is parent storage with updated Swizzle + Size fields */ + _slang_copy_ir_storage(n->Store, n->Store->Parent); + /* Apply this node's swizzle to parent's storage */ + n->Store->Swizzle = _slang_swizzle_swizzle(n->Store->Swizzle, swizzle); + /* Update size */ + n->Store->Size = swizzle_size(n->Store->Swizzle); + } + assert(!n->Store->Parent); -#endif + assert(n->Store->Index >= 0); + return inst; } @@ -2146,6 +2194,12 @@ emit(slang_emit_info *emitInfo, slang_ir_node *n) return NULL; } + if (n->Comment) { + inst = new_instruction(emitInfo, OPCODE_NOP); + inst->Comment = _mesa_strdup(n->Comment); + inst = NULL; + } + switch (n->Opcode) { case IR_SEQ: /* sequence of two sub-trees */ @@ -2239,6 +2293,9 @@ emit(slang_emit_info *emitInfo, slang_ir_node *n) case IR_TEX: case IR_TEXB: case IR_TEXP: + case IR_TEX_SH: + case IR_TEXB_SH: + case IR_TEXP_SH: return emit_tex(emitInfo, n); case IR_NEG: return emit_negation(emitInfo, n); @@ -2428,7 +2485,9 @@ _slang_emit_code(slang_ir_node *n, slang_var_table *vt, maxUniforms = ctx->Const.VertexProgram.MaxUniformComponents / 4; } if (prog->Parameters->NumParameters > maxUniforms) { - slang_info_log_error(log, "Constant/uniform register limit exceeded"); + slang_info_log_error(log, "Constant/uniform register limit exceeded " + "(max=%u vec4)", maxUniforms); + return GL_FALSE; } diff --git a/src/mesa/shader/slang/slang_ir.c b/src/mesa/shader/slang/slang_ir.c index e4c6e0ea51..1c7f7474e7 100644 --- a/src/mesa/shader/slang/slang_ir.c +++ b/src/mesa/shader/slang/slang_ir.c @@ -94,6 +94,9 @@ static const slang_ir_info IrInfo[] = { { IR_TEX, "IR_TEX", OPCODE_TEX, 4, 1 }, { IR_TEXB, "IR_TEXB", OPCODE_TXB, 4, 1 }, { IR_TEXP, "IR_TEXP", OPCODE_TXP, 4, 1 }, + { IR_TEX_SH, "IR_TEX_SH", OPCODE_TEX, 4, 1 }, + { IR_TEXB_SH, "IR_TEXB_SH", OPCODE_TXB, 4, 1 }, + { IR_TEXP_SH, "IR_TEXP_SH", OPCODE_TXP, 4, 1 }, { IR_FLOAT, "IR_FLOAT", OPCODE_NOP, 0, 0 }, /* float literal */ { IR_FIELD, "IR_FIELD", OPCODE_NOP, 0, 0 }, { IR_ELEMENT, "IR_ELEMENT", OPCODE_NOP, 0, 0 }, @@ -118,7 +121,7 @@ _slang_ir_info(slang_ir_opcode opcode) void _slang_init_ir_storage(slang_ir_storage *st, - enum register_file file, GLint index, GLint size, + gl_register_file file, GLint index, GLint size, GLuint swizzle) { st->File = file; @@ -134,7 +137,7 @@ _slang_init_ir_storage(slang_ir_storage *st, * Return a new slang_ir_storage object. */ slang_ir_storage * -_slang_new_ir_storage(enum register_file file, GLint index, GLint size) +_slang_new_ir_storage(gl_register_file file, GLint index, GLint size) { slang_ir_storage *st; st = (slang_ir_storage *) _slang_alloc(sizeof(slang_ir_storage)); @@ -154,7 +157,7 @@ _slang_new_ir_storage(enum register_file file, GLint index, GLint size) * Return a new slang_ir_storage object. */ slang_ir_storage * -_slang_new_ir_storage_swz(enum register_file file, GLint index, GLint size, +_slang_new_ir_storage_swz(gl_register_file file, GLint index, GLint size, GLuint swizzle) { slang_ir_storage *st; @@ -193,10 +196,10 @@ _slang_new_ir_storage_relative(GLint index, GLint size, slang_ir_storage * -_slang_new_ir_storage_indirect(enum register_file file, +_slang_new_ir_storage_indirect(gl_register_file file, GLint index, GLint size, - enum register_file indirectFile, + gl_register_file indirectFile, GLint indirectIndex, GLuint indirectSwizzle) { diff --git a/src/mesa/shader/slang/slang_ir.h b/src/mesa/shader/slang/slang_ir.h index 644269d491..e796693ed5 100644 --- a/src/mesa/shader/slang/slang_ir.h +++ b/src/mesa/shader/slang/slang_ir.h @@ -131,6 +131,10 @@ typedef enum IR_TEXB, /* texture lookup with LOD bias */ IR_TEXP, /* texture lookup with projection */ + IR_TEX_SH, /* texture lookup, shadow compare */ + IR_TEXB_SH, /* texture lookup with LOD bias, shadow compare */ + IR_TEXP_SH, /* texture lookup with projection, shadow compare */ + IR_FLOAT, IR_I_TO_F, /* int[4] to float[4] conversion */ IR_F_TO_I, /* float[4] to int[4] conversion */ @@ -167,7 +171,7 @@ typedef enum */ struct slang_ir_storage_ { - enum register_file File; /**< PROGRAM_TEMPORARY, PROGRAM_INPUT, etc */ + gl_register_file File; /**< PROGRAM_TEMPORARY, PROGRAM_INPUT, etc */ GLint Index; /**< -1 means unallocated */ GLint Size; /**< number of floats or ints */ GLuint Swizzle; /**< Swizzle AND writemask info */ @@ -176,7 +180,7 @@ struct slang_ir_storage_ GLboolean RelAddr; /* we'll remove this eventually */ GLboolean IsIndirect; - enum register_file IndirectFile; + gl_register_file IndirectFile; GLint IndirectIndex; GLuint IndirectSwizzle; GLuint TexTarget; /**< If File==PROGRAM_SAMPLER, one of TEXTURE_x_INDEX */ @@ -208,6 +212,7 @@ typedef struct slang_ir_node_ struct slang_ir_node_ *List; /**< For various linked lists */ struct slang_ir_node_ *Parent; /**< Pointer to logical parent (ie. loop) */ slang_label *Label; /**< Used for branches */ + const char *Comment; /**< If Opcode == IR_COMMENT */ } slang_ir_node; @@ -231,15 +236,15 @@ _slang_ir_info(slang_ir_opcode opcode); extern void _slang_init_ir_storage(slang_ir_storage *st, - enum register_file file, GLint index, GLint size, + gl_register_file file, GLint index, GLint size, GLuint swizzle); extern slang_ir_storage * -_slang_new_ir_storage(enum register_file file, GLint index, GLint size); +_slang_new_ir_storage(gl_register_file file, GLint index, GLint size); extern slang_ir_storage * -_slang_new_ir_storage_swz(enum register_file file, GLint index, GLint size, +_slang_new_ir_storage_swz(gl_register_file file, GLint index, GLint size, GLuint swizzle); extern slang_ir_storage * @@ -248,10 +253,10 @@ _slang_new_ir_storage_relative(GLint index, GLint size, extern slang_ir_storage * -_slang_new_ir_storage_indirect(enum register_file file, +_slang_new_ir_storage_indirect(gl_register_file file, GLint index, GLint size, - enum register_file indirectFile, + gl_register_file indirectFile, GLint indirectIndex, GLuint indirectSwizzle); diff --git a/src/mesa/shader/slang/slang_link.c b/src/mesa/shader/slang/slang_link.c index 99f2cbdcc0..f98434892b 100644 --- a/src/mesa/shader/slang/slang_link.c +++ b/src/mesa/shader/slang/slang_link.c @@ -295,6 +295,9 @@ link_uniform_vars(GLcontext *ctx, inst->TexSrcUnit = newSampNum; prog->SamplerTargets[newSampNum] = inst->TexSrcTarget; prog->SamplersUsed |= (1 << newSampNum); + if (inst->TexShadow) { + prog->ShadowSamplers |= (1 << newSampNum); + } } } } @@ -495,8 +498,33 @@ _slang_update_inputs_outputs(struct gl_program *prog) maxAddrReg = MAX2(maxAddrReg, (GLuint) (inst->SrcReg[j].Index + 1)); } } + if (inst->DstReg.File == PROGRAM_OUTPUT) { prog->OutputsWritten |= 1 << inst->DstReg.Index; + if (inst->DstReg.RelAddr) { + /* If the output attribute is indexed with relative addressing + * we know that it must be a varying or texcoord such as + * gl_TexCoord[i] = v; In this case, mark all the texcoords + * or varying outputs as being written. It's not an error if + * a vertex shader writes varying vars that aren't used by the + * fragment shader. But it is an error for a fragment shader + * to use varyings that are not written by the vertex shader. + */ + if (prog->Target == GL_VERTEX_PROGRAM_ARB) { + if (inst->DstReg.Index == VERT_RESULT_TEX0) { + /* mark all texcoord outputs as written */ + const GLbitfield mask = + ((1 << MAX_TEXTURE_COORD_UNITS) - 1) << VERT_RESULT_TEX0; + prog->OutputsWritten |= mask; + } + else if (inst->DstReg.Index == VERT_RESULT_VAR0) { + /* mark all generic varying outputs as written */ + const GLbitfield mask = + ((1 << MAX_VARYING) - 1) << VERT_RESULT_VAR0; + prog->OutputsWritten |= mask; + } + } + } } else if (inst->DstReg.File == PROGRAM_ADDRESS) { maxAddrReg = MAX2(maxAddrReg, inst->DstReg.Index + 1); @@ -658,7 +686,7 @@ _slang_link(GLcontext *ctx, /* check that gl_FragColor and gl_FragData are not both written to */ if (shProg->FragmentProgram) { GLbitfield outputsWritten = shProg->FragmentProgram->Base.OutputsWritten; - if ((outputsWritten & ((1 << FRAG_RESULT_COLR))) && + if ((outputsWritten & ((1 << FRAG_RESULT_COLOR))) && (outputsWritten >= (1 << FRAG_RESULT_DATA0))) { link_error(shProg, "Fragment program cannot write both gl_FragColor" " and gl_FragData[].\n"); diff --git a/src/mesa/shader/slang/slang_preprocess.c b/src/mesa/shader/slang/slang_preprocess.c index 89aaa3a621..ff913ad883 100644 --- a/src/mesa/shader/slang/slang_preprocess.c +++ b/src/mesa/shader/slang/slang_preprocess.c @@ -530,14 +530,6 @@ pp_ext_set(pp_ext *self, const char *name, GLboolean enable) } -static void -pp_pragmas_init(struct gl_sl_pragmas *pragmas) -{ - pragmas->Optimize = GL_TRUE; - pragmas->Debug = GL_FALSE; -} - - /** * Called in response to #pragma. For example, "#pragma debug(on)" would * call this function as pp_pragma("debug", "on"). @@ -553,10 +545,12 @@ pp_pragma(struct gl_sl_pragmas *pragmas, const char *pragma, const char *param) if (!param) return GL_FALSE; /* missing required param */ if (_mesa_strcmp(param, "on") == 0) { - pragmas->Optimize = GL_TRUE; + if (!pragmas->IgnoreOptimize) + pragmas->Optimize = GL_TRUE; } else if (_mesa_strcmp(param, "off") == 0) { - pragmas->Optimize = GL_FALSE; + if (!pragmas->IgnoreOptimize) + pragmas->Optimize = GL_FALSE; } else { return GL_FALSE; /* invalid param */ @@ -566,10 +560,12 @@ pp_pragma(struct gl_sl_pragmas *pragmas, const char *pragma, const char *param) if (!param) return GL_FALSE; /* missing required param */ if (_mesa_strcmp(param, "on") == 0) { - pragmas->Debug = GL_TRUE; + if (!pragmas->IgnoreDebug) + pragmas->Debug = GL_TRUE; } else if (_mesa_strcmp(param, "off") == 0) { - pragmas->Debug = GL_FALSE; + if (!pragmas->IgnoreDebug) + pragmas->Debug = GL_FALSE; } else { return GL_FALSE; /* invalid param */ @@ -945,7 +941,6 @@ preprocess_source (slang_string *output, const char *source, } pp_state_init (&state, elog, extensions); - pp_pragmas_init (pragmas); /* add the predefined symbols to the symbol table */ for (i = 0; predefined[i]; i++) { @@ -1296,6 +1291,8 @@ error: * \param output the post-process results * \param input the input text * \param elog log to record warnings, errors + * \param extensions out extension settings + * \param pragmas in/out #pragma settings * \return GL_TRUE for success, GL_FALSE for error */ GLboolean diff --git a/src/mesa/sources.mak b/src/mesa/sources.mak index 1bd81506e0..6913d9f40f 100644 --- a/src/mesa/sources.mak +++ b/src/mesa/sources.mak @@ -17,6 +17,7 @@ MAIN_SOURCES = \ main/colortab.c \ main/context.c \ main/convolve.c \ + main/cpuinfo.c \ main/debug.c \ main/depth.c \ main/depthstencil.c \ @@ -57,6 +58,7 @@ MAIN_SOURCES = \ main/renderbuffer.c \ main/scissor.c \ main/shaders.c \ + main/shared.c \ main/state.c \ main/stencil.c \ main/texcompress.c \ @@ -73,6 +75,7 @@ MAIN_SOURCES = \ main/texstate.c \ main/texstore.c \ main/varray.c \ + main/viewport.c \ main/vtxfmt.c GLAPI_SOURCES = \ @@ -91,7 +94,6 @@ MATH_SOURCES = \ math/m_vector.c MATH_XFORM_SOURCES = \ - $(MATH_SOURCES) \ math/m_xform.c SWRAST_SOURCES = \ @@ -103,7 +105,7 @@ SWRAST_SOURCES = \ swrast/s_bitmap.c \ swrast/s_blend.c \ swrast/s_blit.c \ - swrast/s_buffers.c \ + swrast/s_clear.c \ swrast/s_copypix.c \ swrast/s_context.c \ swrast/s_depth.c \ @@ -165,11 +167,6 @@ VBO_SOURCES = \ vbo/vbo_save_draw.c \ 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 \ @@ -201,6 +198,7 @@ STATETRACKER_SOURCES = \ state_tracker/st_cb_readpixels.c \ state_tracker/st_cb_strings.c \ state_tracker/st_cb_texture.c \ + state_tracker/st_cb_viewport.c \ state_tracker/st_api.c \ state_tracker/st_context.c \ state_tracker/st_debug.c \ @@ -224,10 +222,10 @@ SHADER_SOURCES = \ shader/nvvertparse.c \ shader/program.c \ shader/prog_cache.c \ - shader/prog_debug.c \ shader/prog_execute.c \ shader/prog_instruction.c \ shader/prog_noise.c \ + shader/prog_optimize.c \ shader/prog_parameter.c \ shader/prog_print.c \ shader/prog_statevars.c \ @@ -259,7 +257,7 @@ SLANG_SOURCES = \ ASM_C_SOURCES = \ x86/common_x86.c \ - x86/x86.c \ + x86/x86_xform.c \ x86/3dnow.c \ x86/sse.c \ x86/rtasm/x86sse.c \ @@ -307,11 +305,10 @@ COMMON_DRIVER_SOURCES = \ drivers/common/driverfuncs.c - -### All the core C sources - +# Sources for building non-Gallium drivers MESA_SOURCES = \ $(MAIN_SOURCES) \ + $(MATH_SOURCES) \ $(MATH_XFORM_SOURCES) \ $(VBO_SOURCES) \ $(TNL_SOURCES) \ @@ -322,19 +319,23 @@ MESA_SOURCES = \ $(ASM_C_SOURCES) \ $(SLANG_SOURCES) -ALL_SOURCES = \ - $(MESA_SOURCES) \ - $(GLAPI_SOURCES) \ - $(MESA_ASM_SOURCES) - +# Sources for building Gallium drivers MESA_GALLIUM_SOURCES = \ $(MAIN_SOURCES) \ $(MATH_SOURCES) \ $(VBO_SOURCES) \ $(STATETRACKER_SOURCES) \ $(SHADER_SOURCES) \ + x86/common_x86.c \ $(SLANG_SOURCES) +# All the core C sources, for dependency checking +ALL_SOURCES = \ + $(MESA_SOURCES) \ + $(GLAPI_SOURCES) \ + $(MESA_ASM_SOURCES) \ + $(STATETRACKER_SOURCES) + ### Object files diff --git a/src/mesa/sparc/clip.S b/src/mesa/sparc/clip.S index 58c228ed15..208843c606 100644 --- a/src/mesa/sparc/clip.S +++ b/src/mesa/sparc/clip.S @@ -25,12 +25,8 @@ #define VEC_SIZE_3 7 #define VEC_SIZE_4 15 -#if defined(SVR4) || defined(__SVR4) || defined(__svr4__) - /* Solaris requires this for 64-bit. */ .register %g2, #scratch .register %g3, #scratch - .register %g7, #scratch -#endif .text .align 64 @@ -78,7 +74,7 @@ _mesa_sparc_cliptest_points4: add %g1, 0x4, %g1 ld [%i0 + V4F_STRIDE], %l1 - ld [%i0 + V4F_COUNT], %g7 + ld [%i0 + V4F_COUNT], %l3 LDPTR [%i0 + V4F_START], %i0 LDPTR [%i1 + V4F_START], %i5 ldub [%i3], %g2 @@ -91,12 +87,12 @@ _mesa_sparc_cliptest_points4: st %g3, [%i1 + V4F_FLAGS] mov 3, %g3 st %g3, [%i1 + V4F_SIZE] - st %g7, [%i1 + V4F_COUNT] + st %l3, [%i1 + V4F_COUNT] clr %l2 clr %l0 /* l0: i - * g7: count + * l3: count * l1: stride * l2: c * g2: (tmpAndMask << 8) | tmpOrMask @@ -153,12 +149,12 @@ _mesa_sparc_cliptest_points4: 3: add %i5, 0x10, %i5 ! IEU1 add %l0, 1, %l0 ! IEU0 Group add %i2, 1, %i2 ! IEU0 Group - cmp %l0, %g7 ! IEU1 Group + cmp %l0, %l3 ! IEU1 Group bne 1b ! CTI add %i0, %l1, %i0 ! IEU0 Group stb %g2, [%i3] ! LSU srl %g2, 8, %g3 ! IEU0 Group - cmp %l2, %g7 ! IEU1 Group + cmp %l2, %l3 ! IEU1 Group bl,a 1f ! CTI clr %g3 ! IEU0 1: stb %g3, [%i4] ! LSU Group @@ -174,25 +170,18 @@ _mesa_sparc_cliptest_points4_np: add %g1, 0x4, %g1 ld [%i0 + V4F_STRIDE], %l1 - ld [%i0 + V4F_COUNT], %g7 + ld [%i0 + V4F_COUNT], %l3 LDPTR [%i0 + V4F_START], %i0 - LDPTR [%i1 + V4F_START], %i5 ldub [%i3], %g2 ldub [%i4], %g3 sll %g3, 8, %g3 or %g2, %g3, %g2 - ld [%i1 + V4F_FLAGS], %g3 - or %g3, VEC_SIZE_4, %g3 - st %g3, [%i1 + V4F_FLAGS] - mov 3, %g3 - st %g3, [%i1 + V4F_SIZE] - st %g7, [%i1 + V4F_COUNT] clr %l2 clr %l0 /* l0: i - * g7: count + * l3: count * l1: stride * l2: c * g2: (tmpAndMask << 8) | tmpOrMask @@ -230,12 +219,12 @@ _mesa_sparc_cliptest_points4_np: and %g2, %g4, %g2 ! IEU0 Group 2: add %l0, 1, %l0 ! IEU0 Group add %i2, 1, %i2 ! IEU0 Group - cmp %l0, %g7 ! IEU1 Group + cmp %l0, %l3 ! IEU1 Group bne 1b ! CTI add %i0, %l1, %i0 ! IEU0 Group stb %g2, [%i3] ! LSU srl %g2, 8, %g3 ! IEU0 Group - cmp %l2, %g7 ! IEU1 Group + cmp %l2, %l3 ! IEU1 Group bl,a 1f ! CTI clr %g3 ! IEU0 1: stb %g3, [%i4] ! LSU Group diff --git a/src/mesa/sparc/glapi_sparc.S b/src/mesa/sparc/glapi_sparc.S index 7d215939b4..493e094cde 100644 --- a/src/mesa/sparc/glapi_sparc.S +++ b/src/mesa/sparc/glapi_sparc.S @@ -26,818 +26,176 @@ * SOFTWARE. */ -#include "glapioffsets.h" +#include "glapi/glapioffsets.h" #ifdef __arch64__ -# define GL_STUB(fn,off) \ -fn: \ - sethi %hi(0xDEADBEEF), %g4 ; \ - sethi %hi(0xDEADBEEF), %g1 ; \ - or %g4, %lo(0xDEADBEEF), %g4 ; \ - or %g1, %lo(0xDEADBEEF), %g1 ; \ - sllx %g4, 32, %g4 ; \ - ldx [%g1 + %g4], %g1 ; \ - sethi %hi(8 * off), %g4 ; \ - or %g4, %lo(8 * off), %g4 ; \ - ldx [%g1 + %g4], %g5 ; \ - jmpl %g5, %g0 ; \ - nop +#define GL_OFF(N) ((N) * 8) +#define GL_LL ldx +#define GL_TIE_LD(SYM) %tie_ldx(SYM) +#define GL_STACK_SIZE 128 #else -# define GL_STUB(fn,off) \ -fn: \ - sethi %hi(0xDEADBEEF), %g1 ; \ - ld [%g1 + %lo(0xDEADBEEF)], %g1 ; \ - ld [%g1 + (4 * off)], %g5 ; \ - jmpl %g5, %g0 ; \ - nop +#define GL_OFF(N) ((N) * 4) +#define GL_LL ld +#define GL_TIE_LD(SYM) %tie_ld(SYM) +#define GL_STACK_SIZE 64 #endif -#define GL_STUB_ALIAS(fn,alias) fn = alias +#define GLOBL_FN(x) .globl x ; .type x, @function +#define HIDDEN(x) .hidden x -.text -.align 32 - .globl __glapi_sparc_icache_flush ; .type __glapi_sparc_icache_flush,#function + .register %g2, #scratch + .register %g3, #scratch + + .text + + GLOBL_FN(__glapi_sparc_icache_flush) + HIDDEN(__glapi_sparc_icache_flush) + .type __glapi_sparc_icache_flush, @function __glapi_sparc_icache_flush: /* %o0 = insn_addr */ flush %o0 retl - nop + nop + + .align 32 + + .type __glapi_sparc_get_pc, @function +__glapi_sparc_get_pc: + retl + add %o7, %g2, %g2 + .size __glapi_sparc_get_pc, .-__glapi_sparc_get_pc + +#ifdef GLX_USE_TLS + + GLOBL_FN(__glapi_sparc_get_dispatch) + HIDDEN(__glapi_sparc_get_dispatch) +__glapi_sparc_get_dispatch: + mov %o7, %g1 + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %g2 + call __glapi_sparc_get_pc + add %g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2 + mov %g1, %o7 + sethi %tie_hi22(_glapi_tls_Dispatch), %g1 + add %g1, %tie_lo10(_glapi_tls_Dispatch), %g1 + GL_LL [%g2 + %g1], %g2, GL_TIE_LD(_glapi_tls_Dispatch) + retl + mov %g2, %o0 + + .data + .align 32 + + /* --> sethi %hi(_glapi_tls_Dispatch), %g1 */ + /* --> or %g1, %lo(_glapi_tls_Dispatch), %g1 */ + GLOBL_FN(__glapi_sparc_tls_stub) + HIDDEN(__glapi_sparc_tls_stub) +__glapi_sparc_tls_stub: /* Call offset in %g3 */ + mov %o7, %g1 + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %g2 + call __glapi_sparc_get_pc + add %g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2 + mov %g1, %o7 + srl %g3, 10, %g3 + sethi %tie_hi22(_glapi_tls_Dispatch), %g1 + add %g1, %tie_lo10(_glapi_tls_Dispatch), %g1 + GL_LL [%g2 + %g1], %g2, GL_TIE_LD(_glapi_tls_Dispatch) + GL_LL [%g7+%g2], %g1 + GL_LL [%g1 + %g3], %g1 + jmp %g1 + nop + .size __glapi_sparc_tls_stub, .-__glapi_sparc_tls_stub + +#define GL_STUB(fn, off) \ + GLOBL_FN(fn); \ +fn: ba __glapi_sparc_tls_stub; \ + sethi GL_OFF(off), %g3; \ + .size fn,.-fn; + +#elif defined(PTHREADS) + + /* 64-bit 0x00 --> sethi %hh(_glapi_Dispatch), %g1 */ + /* 64-bit 0x04 --> sethi %lm(_glapi_Dispatch), %g2 */ + /* 64-bit 0x08 --> or %g1, %hm(_glapi_Dispatch), %g1 */ + /* 64-bit 0x0c --> sllx %g1, 32, %g1 */ + /* 64-bit 0x10 --> add %g1, %g2, %g1 */ + /* 64-bit 0x14 --> ldx [%g1 + %lo(_glapi_Dispatch)], %g1 */ -.data -.align 64 + /* 32-bit 0x00 --> sethi %hi(_glapi_Dispatch), %g1 */ + /* 32-bit 0x04 --> ld [%g1 + %lo(_glapi_Dispatch)], %g1 */ - .globl glNewList ; .type glNewList,#function - .globl glEndList ; .type glEndList,#function - .globl glCallList ; .type glCallList,#function - .globl glCallLists ; .type glCallLists,#function - .globl glDeleteLists ; .type glDeleteLists,#function - .globl glGenLists ; .type glGenLists,#function - .globl glListBase ; .type glListBase,#function - .globl glBegin ; .type glBegin,#function - .globl glBitmap ; .type glBitmap,#function - .globl glColor3b ; .type glColor3b,#function - .globl glColor3bv ; .type glColor3bv,#function - .globl glColor3d ; .type glColor3d,#function - .globl glColor3dv ; .type glColor3dv,#function - .globl glColor3f ; .type glColor3f,#function - .globl glColor3fv ; .type glColor3fv,#function - .globl glColor3i ; .type glColor3i,#function - .globl glColor3iv ; .type glColor3iv,#function - .globl glColor3s ; .type glColor3s,#function - .globl glColor3sv ; .type glColor3sv,#function - .globl glColor3ub ; .type glColor3ub,#function - .globl glColor3ubv ; .type glColor3ubv,#function - .globl glColor3ui ; .type glColor3ui,#function - .globl glColor3uiv ; .type glColor3uiv,#function - .globl glColor3us ; .type glColor3us,#function - .globl glColor3usv ; .type glColor3usv,#function - .globl glColor4b ; .type glColor4b,#function - .globl glColor4bv ; .type glColor4bv,#function - .globl glColor4d ; .type glColor4d,#function - .globl glColor4dv ; .type glColor4dv,#function - .globl glColor4f ; .type glColor4f,#function - .globl glColor4fv ; .type glColor4fv,#function - .globl glColor4i ; .type glColor4i,#function - .globl glColor4iv ; .type glColor4iv,#function - .globl glColor4s ; .type glColor4s,#function - .globl glColor4sv ; .type glColor4sv,#function - .globl glColor4ub ; .type glColor4ub,#function - .globl glColor4ubv ; .type glColor4ubv,#function - .globl glColor4ui ; .type glColor4ui,#function - .globl glColor4uiv ; .type glColor4uiv,#function - .globl glColor4us ; .type glColor4us,#function - .globl glColor4usv ; .type glColor4usv,#function - .globl glEdgeFlag ; .type glEdgeFlag,#function - .globl glEdgeFlagv ; .type glEdgeFlagv,#function - .globl glEnd ; .type glEnd,#function - .globl glIndexd ; .type glIndexd,#function - .globl glIndexdv ; .type glIndexdv,#function - .globl glIndexf ; .type glIndexf,#function - .globl glIndexfv ; .type glIndexfv,#function - .globl glIndexi ; .type glIndexi,#function - .globl glIndexiv ; .type glIndexiv,#function - .globl glIndexs ; .type glIndexs,#function - .globl glIndexsv ; .type glIndexsv,#function - .globl glNormal3b ; .type glNormal3b,#function - .globl glNormal3bv ; .type glNormal3bv,#function - .globl glNormal3d ; .type glNormal3d,#function - .globl glNormal3dv ; .type glNormal3dv,#function - .globl glNormal3f ; .type glNormal3f,#function - .globl glNormal3fv ; .type glNormal3fv,#function - .globl glNormal3i ; .type glNormal3i,#function - .globl glNormal3iv ; .type glNormal3iv,#function - .globl glNormal3s ; .type glNormal3s,#function - .globl glNormal3sv ; .type glNormal3sv,#function - .globl glRasterPos2d ; .type glRasterPos2d,#function - .globl glRasterPos2dv ; .type glRasterPos2dv,#function - .globl glRasterPos2f ; .type glRasterPos2f,#function - .globl glRasterPos2fv ; .type glRasterPos2fv,#function - .globl glRasterPos2i ; .type glRasterPos2i,#function - .globl glRasterPos2iv ; .type glRasterPos2iv,#function - .globl glRasterPos2s ; .type glRasterPos2s,#function - .globl glRasterPos2sv ; .type glRasterPos2sv,#function - .globl glRasterPos3d ; .type glRasterPos3d,#function - .globl glRasterPos3dv ; .type glRasterPos3dv,#function - .globl glRasterPos3f ; .type glRasterPos3f,#function - .globl glRasterPos3fv ; .type glRasterPos3fv,#function - .globl glRasterPos3i ; .type glRasterPos3i,#function - .globl glRasterPos3iv ; .type glRasterPos3iv,#function - .globl glRasterPos3s ; .type glRasterPos3s,#function - .globl glRasterPos3sv ; .type glRasterPos3sv,#function - .globl glRasterPos4d ; .type glRasterPos4d,#function - .globl glRasterPos4dv ; .type glRasterPos4dv,#function - .globl glRasterPos4f ; .type glRasterPos4f,#function - .globl glRasterPos4fv ; .type glRasterPos4fv,#function - .globl glRasterPos4i ; .type glRasterPos4i,#function - .globl glRasterPos4iv ; .type glRasterPos4iv,#function - .globl glRasterPos4s ; .type glRasterPos4s,#function - .globl glRasterPos4sv ; .type glRasterPos4sv,#function - .globl glRectd ; .type glRectd,#function - .globl glRectdv ; .type glRectdv,#function - .globl glRectf ; .type glRectf,#function - .globl glRectfv ; .type glRectfv,#function - .globl glRecti ; .type glRecti,#function - .globl glRectiv ; .type glRectiv,#function - .globl glRects ; .type glRects,#function - .globl glRectsv ; .type glRectsv,#function - .globl glTexCoord1d ; .type glTexCoord1d,#function - .globl glTexCoord1dv ; .type glTexCoord1dv,#function - .globl glTexCoord1f ; .type glTexCoord1f,#function - .globl glTexCoord1fv ; .type glTexCoord1fv,#function - .globl glTexCoord1i ; .type glTexCoord1i,#function - .globl glTexCoord1iv ; .type glTexCoord1iv,#function - .globl glTexCoord1s ; .type glTexCoord1s,#function - .globl glTexCoord1sv ; .type glTexCoord1sv,#function - .globl glTexCoord2d ; .type glTexCoord2d,#function - .globl glTexCoord2dv ; .type glTexCoord2dv,#function - .globl glTexCoord2f ; .type glTexCoord2f,#function - .globl glTexCoord2fv ; .type glTexCoord2fv,#function - .globl glTexCoord2i ; .type glTexCoord2i,#function - .globl glTexCoord2iv ; .type glTexCoord2iv,#function - .globl glTexCoord2s ; .type glTexCoord2s,#function - .globl glTexCoord2sv ; .type glTexCoord2sv,#function - .globl glTexCoord3d ; .type glTexCoord3d,#function - .globl glTexCoord3dv ; .type glTexCoord3dv,#function - .globl glTexCoord3f ; .type glTexCoord3f,#function - .globl glTexCoord3fv ; .type glTexCoord3fv,#function - .globl glTexCoord3i ; .type glTexCoord3i,#function - .globl glTexCoord3iv ; .type glTexCoord3iv,#function - .globl glTexCoord3s ; .type glTexCoord3s,#function - .globl glTexCoord3sv ; .type glTexCoord3sv,#function - .globl glTexCoord4d ; .type glTexCoord4d,#function - .globl glTexCoord4dv ; .type glTexCoord4dv,#function - .globl glTexCoord4f ; .type glTexCoord4f,#function - .globl glTexCoord4fv ; .type glTexCoord4fv,#function - .globl glTexCoord4i ; .type glTexCoord4i,#function - .globl glTexCoord4iv ; .type glTexCoord4iv,#function - .globl glTexCoord4s ; .type glTexCoord4s,#function - .globl glTexCoord4sv ; .type glTexCoord4sv,#function - .globl glVertex2d ; .type glVertex2d,#function - .globl glVertex2dv ; .type glVertex2dv,#function - .globl glVertex2f ; .type glVertex2f,#function - .globl glVertex2fv ; .type glVertex2fv,#function - .globl glVertex2i ; .type glVertex2i,#function - .globl glVertex2iv ; .type glVertex2iv,#function - .globl glVertex2s ; .type glVertex2s,#function - .globl glVertex2sv ; .type glVertex2sv,#function - .globl glVertex3d ; .type glVertex3d,#function - .globl glVertex3dv ; .type glVertex3dv,#function - .globl glVertex3f ; .type glVertex3f,#function - .globl glVertex3fv ; .type glVertex3fv,#function - .globl glVertex3i ; .type glVertex3i,#function - .globl glVertex3iv ; .type glVertex3iv,#function - .globl glVertex3s ; .type glVertex3s,#function - .globl glVertex3sv ; .type glVertex3sv,#function - .globl glVertex4d ; .type glVertex4d,#function - .globl glVertex4dv ; .type glVertex4dv,#function - .globl glVertex4f ; .type glVertex4f,#function - .globl glVertex4fv ; .type glVertex4fv,#function - .globl glVertex4i ; .type glVertex4i,#function - .globl glVertex4iv ; .type glVertex4iv,#function - .globl glVertex4s ; .type glVertex4s,#function - .globl glVertex4sv ; .type glVertex4sv,#function - .globl glClipPlane ; .type glClipPlane,#function - .globl glColorMaterial ; .type glColorMaterial,#function - .globl glCullFace ; .type glCullFace,#function - .globl glFogf ; .type glFogf,#function - .globl glFogfv ; .type glFogfv,#function - .globl glFogi ; .type glFogi,#function - .globl glFogiv ; .type glFogiv,#function - .globl glFrontFace ; .type glFrontFace,#function - .globl glHint ; .type glHint,#function - .globl glLightf ; .type glLightf,#function - .globl glLightfv ; .type glLightfv,#function - .globl glLighti ; .type glLighti,#function - .globl glLightiv ; .type glLightiv,#function - .globl glLightModelf ; .type glLightModelf,#function - .globl glLightModelfv ; .type glLightModelfv,#function - .globl glLightModeli ; .type glLightModeli,#function - .globl glLightModeliv ; .type glLightModeliv,#function - .globl glLineStipple ; .type glLineStipple,#function - .globl glLineWidth ; .type glLineWidth,#function - .globl glMaterialf ; .type glMaterialf,#function - .globl glMaterialfv ; .type glMaterialfv,#function - .globl glMateriali ; .type glMateriali,#function - .globl glMaterialiv ; .type glMaterialiv,#function - .globl glPointSize ; .type glPointSize,#function - .globl glPolygonMode ; .type glPolygonMode,#function - .globl glPolygonStipple ; .type glPolygonStipple,#function - .globl glScissor ; .type glScissor,#function - .globl glShadeModel ; .type glShadeModel,#function - .globl glTexParameterf ; .type glTexParameterf,#function - .globl glTexParameterfv ; .type glTexParameterfv,#function - .globl glTexParameteri ; .type glTexParameteri,#function - .globl glTexParameteriv ; .type glTexParameteriv,#function - .globl glTexImage1D ; .type glTexImage1D,#function - .globl glTexImage2D ; .type glTexImage2D,#function - .globl glTexEnvf ; .type glTexEnvf,#function - .globl glTexEnvfv ; .type glTexEnvfv,#function - .globl glTexEnvi ; .type glTexEnvi,#function - .globl glTexEnviv ; .type glTexEnviv,#function - .globl glTexGend ; .type glTexGend,#function - .globl glTexGendv ; .type glTexGendv,#function - .globl glTexGenf ; .type glTexGenf,#function - .globl glTexGenfv ; .type glTexGenfv,#function - .globl glTexGeni ; .type glTexGeni,#function - .globl glTexGeniv ; .type glTexGeniv,#function - .globl glFeedbackBuffer ; .type glFeedbackBuffer,#function - .globl glSelectBuffer ; .type glSelectBuffer,#function - .globl glRenderMode ; .type glRenderMode,#function - .globl glInitNames ; .type glInitNames,#function - .globl glLoadName ; .type glLoadName,#function - .globl glPassThrough ; .type glPassThrough,#function - .globl glPopName ; .type glPopName,#function - .globl glPushName ; .type glPushName,#function - .globl glDrawBuffer ; .type glDrawBuffer,#function - .globl glClear ; .type glClear,#function - .globl glClearAccum ; .type glClearAccum,#function - .globl glClearIndex ; .type glClearIndex,#function - .globl glClearColor ; .type glClearColor,#function - .globl glClearStencil ; .type glClearStencil,#function - .globl glClearDepth ; .type glClearDepth,#function - .globl glStencilMask ; .type glStencilMask,#function - .globl glColorMask ; .type glColorMask,#function - .globl glDepthMask ; .type glDepthMask,#function - .globl glIndexMask ; .type glIndexMask,#function - .globl glAccum ; .type glAccum,#function - .globl glDisable ; .type glDisable,#function - .globl glEnable ; .type glEnable,#function - .globl glFinish ; .type glFinish,#function - .globl glFlush ; .type glFlush,#function - .globl glPopAttrib ; .type glPopAttrib,#function - .globl glPushAttrib ; .type glPushAttrib,#function - .globl glMap1d ; .type glMap1d,#function - .globl glMap1f ; .type glMap1f,#function - .globl glMap2d ; .type glMap2d,#function - .globl glMap2f ; .type glMap2f,#function - .globl glMapGrid1d ; .type glMapGrid1d,#function - .globl glMapGrid1f ; .type glMapGrid1f,#function - .globl glMapGrid2d ; .type glMapGrid2d,#function - .globl glMapGrid2f ; .type glMapGrid2f,#function - .globl glEvalCoord1d ; .type glEvalCoord1d,#function - .globl glEvalCoord1dv ; .type glEvalCoord1dv,#function - .globl glEvalCoord1f ; .type glEvalCoord1f,#function - .globl glEvalCoord1fv ; .type glEvalCoord1fv,#function - .globl glEvalCoord2d ; .type glEvalCoord2d,#function - .globl glEvalCoord2dv ; .type glEvalCoord2dv,#function - .globl glEvalCoord2f ; .type glEvalCoord2f,#function - .globl glEvalCoord2fv ; .type glEvalCoord2fv,#function - .globl glEvalMesh1 ; .type glEvalMesh1,#function - .globl glEvalPoint1 ; .type glEvalPoint1,#function - .globl glEvalMesh2 ; .type glEvalMesh2,#function - .globl glEvalPoint2 ; .type glEvalPoint2,#function - .globl glAlphaFunc ; .type glAlphaFunc,#function - .globl glBlendFunc ; .type glBlendFunc,#function - .globl glLogicOp ; .type glLogicOp,#function - .globl glStencilFunc ; .type glStencilFunc,#function - .globl glStencilOp ; .type glStencilOp,#function - .globl glDepthFunc ; .type glDepthFunc,#function - .globl glPixelZoom ; .type glPixelZoom,#function - .globl glPixelTransferf ; .type glPixelTransferf,#function - .globl glPixelTransferi ; .type glPixelTransferi,#function - .globl glPixelStoref ; .type glPixelStoref,#function - .globl glPixelStorei ; .type glPixelStorei,#function - .globl glPixelMapfv ; .type glPixelMapfv,#function - .globl glPixelMapuiv ; .type glPixelMapuiv,#function - .globl glPixelMapusv ; .type glPixelMapusv,#function - .globl glReadBuffer ; .type glReadBuffer,#function - .globl glCopyPixels ; .type glCopyPixels,#function - .globl glReadPixels ; .type glReadPixels,#function - .globl glDrawPixels ; .type glDrawPixels,#function - .globl glGetBooleanv ; .type glGetBooleanv,#function - .globl glGetClipPlane ; .type glGetClipPlane,#function - .globl glGetDoublev ; .type glGetDoublev,#function - .globl glGetError ; .type glGetError,#function - .globl glGetFloatv ; .type glGetFloatv,#function - .globl glGetIntegerv ; .type glGetIntegerv,#function - .globl glGetLightfv ; .type glGetLightfv,#function - .globl glGetLightiv ; .type glGetLightiv,#function - .globl glGetMapdv ; .type glGetMapdv,#function - .globl glGetMapfv ; .type glGetMapfv,#function - .globl glGetMapiv ; .type glGetMapiv,#function - .globl glGetMaterialfv ; .type glGetMaterialfv,#function - .globl glGetMaterialiv ; .type glGetMaterialiv,#function - .globl glGetPixelMapfv ; .type glGetPixelMapfv,#function - .globl glGetPixelMapuiv ; .type glGetPixelMapuiv,#function - .globl glGetPixelMapusv ; .type glGetPixelMapusv,#function - .globl glGetPolygonStipple ; .type glGetPolygonStipple,#function - .globl glGetString ; .type glGetString,#function - .globl glGetTexEnvfv ; .type glGetTexEnvfv,#function - .globl glGetTexEnviv ; .type glGetTexEnviv,#function - .globl glGetTexGendv ; .type glGetTexGendv,#function - .globl glGetTexGenfv ; .type glGetTexGenfv,#function - .globl glGetTexGeniv ; .type glGetTexGeniv,#function - .globl glGetTexImage ; .type glGetTexImage,#function - .globl glGetTexParameterfv ; .type glGetTexParameterfv,#function - .globl glGetTexParameteriv ; .type glGetTexParameteriv,#function - .globl glGetTexLevelParameterfv ; .type glGetTexLevelParameterfv,#function - .globl glGetTexLevelParameteriv ; .type glGetTexLevelParameteriv,#function - .globl glIsEnabled ; .type glIsEnabled,#function - .globl glIsList ; .type glIsList,#function - .globl glDepthRange ; .type glDepthRange,#function - .globl glFrustum ; .type glFrustum,#function - .globl glLoadIdentity ; .type glLoadIdentity,#function - .globl glLoadMatrixf ; .type glLoadMatrixf,#function - .globl glLoadMatrixd ; .type glLoadMatrixd,#function - .globl glMatrixMode ; .type glMatrixMode,#function - .globl glMultMatrixf ; .type glMultMatrixf,#function - .globl glMultMatrixd ; .type glMultMatrixd,#function - .globl glOrtho ; .type glOrtho,#function - .globl glPopMatrix ; .type glPopMatrix,#function - .globl glPushMatrix ; .type glPushMatrix,#function - .globl glRotated ; .type glRotated,#function - .globl glRotatef ; .type glRotatef,#function - .globl glScaled ; .type glScaled,#function - .globl glScalef ; .type glScalef,#function - .globl glTranslated ; .type glTranslated,#function - .globl glTranslatef ; .type glTranslatef,#function - .globl glViewport ; .type glViewport,#function - .globl glArrayElement ; .type glArrayElement,#function - .globl glBindTexture ; .type glBindTexture,#function - .globl glColorPointer ; .type glColorPointer,#function - .globl glDisableClientState ; .type glDisableClientState,#function - .globl glDrawArrays ; .type glDrawArrays,#function - .globl glDrawElements ; .type glDrawElements,#function - .globl glEdgeFlagPointer ; .type glEdgeFlagPointer,#function - .globl glEnableClientState ; .type glEnableClientState,#function - .globl glIndexPointer ; .type glIndexPointer,#function - .globl glIndexub ; .type glIndexub,#function - .globl glIndexubv ; .type glIndexubv,#function - .globl glInterleavedArrays ; .type glInterleavedArrays,#function - .globl glNormalPointer ; .type glNormalPointer,#function - .globl glPolygonOffset ; .type glPolygonOffset,#function - .globl glTexCoordPointer ; .type glTexCoordPointer,#function - .globl glVertexPointer ; .type glVertexPointer,#function - .globl glAreTexturesResident ; .type glAreTexturesResident,#function - .globl glCopyTexImage1D ; .type glCopyTexImage1D,#function - .globl glCopyTexImage2D ; .type glCopyTexImage2D,#function - .globl glCopyTexSubImage1D ; .type glCopyTexSubImage1D,#function - .globl glCopyTexSubImage2D ; .type glCopyTexSubImage2D,#function - .globl glDeleteTextures ; .type glDeleteTextures,#function - .globl glGenTextures ; .type glGenTextures,#function - .globl glGetPointerv ; .type glGetPointerv,#function - .globl glIsTexture ; .type glIsTexture,#function - .globl glPrioritizeTextures ; .type glPrioritizeTextures,#function - .globl glTexSubImage1D ; .type glTexSubImage1D,#function - .globl glTexSubImage2D ; .type glTexSubImage2D,#function - .globl glPopClientAttrib ; .type glPopClientAttrib,#function - .globl glPushClientAttrib ; .type glPushClientAttrib,#function - .globl glBlendColor ; .type glBlendColor,#function - .globl glBlendEquation ; .type glBlendEquation,#function - .globl glDrawRangeElements ; .type glDrawRangeElements,#function - .globl glColorTable ; .type glColorTable,#function - .globl glColorTableParameterfv ; .type glColorTableParameterfv,#function - .globl glColorTableParameteriv ; .type glColorTableParameteriv,#function - .globl glCopyColorTable ; .type glCopyColorTable,#function - .globl glGetColorTable ; .type glGetColorTable,#function - .globl glGetColorTableParameterfv ; .type glGetColorTableParameterfv,#function - .globl glGetColorTableParameteriv ; .type glGetColorTableParameteriv,#function - .globl glColorSubTable ; .type glColorSubTable,#function - .globl glCopyColorSubTable ; .type glCopyColorSubTable,#function - .globl glConvolutionFilter1D ; .type glConvolutionFilter1D,#function - .globl glConvolutionFilter2D ; .type glConvolutionFilter2D,#function - .globl glConvolutionParameterf ; .type glConvolutionParameterf,#function - .globl glConvolutionParameterfv ; .type glConvolutionParameterfv,#function - .globl glConvolutionParameteri ; .type glConvolutionParameteri,#function - .globl glConvolutionParameteriv ; .type glConvolutionParameteriv,#function - .globl glCopyConvolutionFilter1D ; .type glCopyConvolutionFilter1D,#function - .globl glCopyConvolutionFilter2D ; .type glCopyConvolutionFilter2D,#function - .globl glGetConvolutionFilter ; .type glGetConvolutionFilter,#function - .globl glGetConvolutionParameterfv ; .type glGetConvolutionParameterfv,#function - .globl glGetConvolutionParameteriv ; .type glGetConvolutionParameteriv,#function - .globl glGetSeparableFilter ; .type glGetSeparableFilter,#function - .globl glSeparableFilter2D ; .type glSeparableFilter2D,#function - .globl glGetHistogram ; .type glGetHistogram,#function - .globl glGetHistogramParameterfv ; .type glGetHistogramParameterfv,#function - .globl glGetHistogramParameteriv ; .type glGetHistogramParameteriv,#function - .globl glGetMinmax ; .type glGetMinmax,#function - .globl glGetMinmaxParameterfv ; .type glGetMinmaxParameterfv,#function - .globl glGetMinmaxParameteriv ; .type glGetMinmaxParameteriv,#function - .globl glHistogram ; .type glHistogram,#function - .globl glMinmax ; .type glMinmax,#function - .globl glResetHistogram ; .type glResetHistogram,#function - .globl glResetMinmax ; .type glResetMinmax,#function - .globl glTexImage3D ; .type glTexImage3D,#function - .globl glTexSubImage3D ; .type glTexSubImage3D,#function - .globl glCopyTexSubImage3D ; .type glCopyTexSubImage3D,#function - .globl glActiveTextureARB ; .type glActiveTextureARB,#function - .globl glClientActiveTextureARB ; .type glClientActiveTextureARB,#function - .globl glMultiTexCoord1dARB ; .type glMultiTexCoord1dARB,#function - .globl glMultiTexCoord1dvARB ; .type glMultiTexCoord1dvARB,#function - .globl glMultiTexCoord1fARB ; .type glMultiTexCoord1fARB,#function - .globl glMultiTexCoord1fvARB ; .type glMultiTexCoord1fvARB,#function - .globl glMultiTexCoord1iARB ; .type glMultiTexCoord1iARB,#function - .globl glMultiTexCoord1ivARB ; .type glMultiTexCoord1ivARB,#function - .globl glMultiTexCoord1sARB ; .type glMultiTexCoord1sARB,#function - .globl glMultiTexCoord1svARB ; .type glMultiTexCoord1svARB,#function - .globl glMultiTexCoord2dARB ; .type glMultiTexCoord2dARB,#function - .globl glMultiTexCoord2dvARB ; .type glMultiTexCoord2dvARB,#function - .globl glMultiTexCoord2fARB ; .type glMultiTexCoord2fARB,#function - .globl glMultiTexCoord2fvARB ; .type glMultiTexCoord2fvARB,#function - .globl glMultiTexCoord2iARB ; .type glMultiTexCoord2iARB,#function - .globl glMultiTexCoord2ivARB ; .type glMultiTexCoord2ivARB,#function - .globl glMultiTexCoord2sARB ; .type glMultiTexCoord2sARB,#function - .globl glMultiTexCoord2svARB ; .type glMultiTexCoord2svARB,#function - .globl glMultiTexCoord3dARB ; .type glMultiTexCoord3dARB,#function - .globl glMultiTexCoord3dvARB ; .type glMultiTexCoord3dvARB,#function - .globl glMultiTexCoord3fARB ; .type glMultiTexCoord3fARB,#function - .globl glMultiTexCoord3fvARB ; .type glMultiTexCoord3fvARB,#function - .globl glMultiTexCoord3iARB ; .type glMultiTexCoord3iARB,#function - .globl glMultiTexCoord3ivARB ; .type glMultiTexCoord3ivARB,#function - .globl glMultiTexCoord3sARB ; .type glMultiTexCoord3sARB,#function - .globl glMultiTexCoord3svARB ; .type glMultiTexCoord3svARB,#function - .globl glMultiTexCoord4dARB ; .type glMultiTexCoord4dARB,#function - .globl glMultiTexCoord4dvARB ; .type glMultiTexCoord4dvARB,#function - .globl glMultiTexCoord4fARB ; .type glMultiTexCoord4fARB,#function - .globl glMultiTexCoord4fvARB ; .type glMultiTexCoord4fvARB,#function - .globl glMultiTexCoord4iARB ; .type glMultiTexCoord4iARB,#function - .globl glMultiTexCoord4ivARB ; .type glMultiTexCoord4ivARB,#function - .globl glMultiTexCoord4sARB ; .type glMultiTexCoord4sARB,#function - .globl glMultiTexCoord4svARB ; .type glMultiTexCoord4svARB,#function - .globl glAttachShader ; .type glAttachShader,#function - .globl glCreateProgram ; .type glCreateProgram,#function - .globl glCreateShader ; .type glCreateShader,#function - .globl glDeleteProgram ; .type glDeleteProgram,#function - .globl glDeleteShader ; .type glDeleteShader,#function - .globl glDetachShader ; .type glDetachShader,#function - .globl glGetAttachedShaders ; .type glGetAttachedShaders,#function - .globl glGetProgramInfoLog ; .type glGetProgramInfoLog,#function - .globl glGetProgramiv ; .type glGetProgramiv,#function - .globl glGetShaderInfoLog ; .type glGetShaderInfoLog,#function - .globl glGetShaderiv ; .type glGetShaderiv,#function - .globl glIsProgram ; .type glIsProgram,#function - .globl glIsShader ; .type glIsShader,#function - .globl glStencilFuncSeparate ; .type glStencilFuncSeparate,#function - .globl glStencilMaskSeparate ; .type glStencilMaskSeparate,#function - .globl glStencilOpSeparate ; .type glStencilOpSeparate,#function - .globl glUniformMatrix2x3fv ; .type glUniformMatrix2x3fv,#function - .globl glUniformMatrix2x4fv ; .type glUniformMatrix2x4fv,#function - .globl glUniformMatrix3x2fv ; .type glUniformMatrix3x2fv,#function - .globl glUniformMatrix3x4fv ; .type glUniformMatrix3x4fv,#function - .globl glUniformMatrix4x2fv ; .type glUniformMatrix4x2fv,#function - .globl glUniformMatrix4x3fv ; .type glUniformMatrix4x3fv,#function - .globl glLoadTransposeMatrixdARB ; .type glLoadTransposeMatrixdARB,#function - .globl glLoadTransposeMatrixfARB ; .type glLoadTransposeMatrixfARB,#function - .globl glMultTransposeMatrixdARB ; .type glMultTransposeMatrixdARB,#function - .globl glMultTransposeMatrixfARB ; .type glMultTransposeMatrixfARB,#function - .globl glSampleCoverageARB ; .type glSampleCoverageARB,#function - .globl glCompressedTexImage1DARB ; .type glCompressedTexImage1DARB,#function - .globl glCompressedTexImage2DARB ; .type glCompressedTexImage2DARB,#function - .globl glCompressedTexImage3DARB ; .type glCompressedTexImage3DARB,#function - .globl glCompressedTexSubImage1DARB ; .type glCompressedTexSubImage1DARB,#function - .globl glCompressedTexSubImage2DARB ; .type glCompressedTexSubImage2DARB,#function - .globl glCompressedTexSubImage3DARB ; .type glCompressedTexSubImage3DARB,#function - .globl glGetCompressedTexImageARB ; .type glGetCompressedTexImageARB,#function - .globl glDisableVertexAttribArrayARB ; .type glDisableVertexAttribArrayARB,#function - .globl glEnableVertexAttribArrayARB ; .type glEnableVertexAttribArrayARB,#function - .globl glGetProgramEnvParameterdvARB ; .type glGetProgramEnvParameterdvARB,#function - .globl glGetProgramEnvParameterfvARB ; .type glGetProgramEnvParameterfvARB,#function - .globl glGetProgramLocalParameterdvARB ; .type glGetProgramLocalParameterdvARB,#function - .globl glGetProgramLocalParameterfvARB ; .type glGetProgramLocalParameterfvARB,#function - .globl glGetProgramStringARB ; .type glGetProgramStringARB,#function - .globl glGetProgramivARB ; .type glGetProgramivARB,#function - .globl glGetVertexAttribdvARB ; .type glGetVertexAttribdvARB,#function - .globl glGetVertexAttribfvARB ; .type glGetVertexAttribfvARB,#function - .globl glGetVertexAttribivARB ; .type glGetVertexAttribivARB,#function - .globl glProgramEnvParameter4dARB ; .type glProgramEnvParameter4dARB,#function - .globl glProgramEnvParameter4dvARB ; .type glProgramEnvParameter4dvARB,#function - .globl glProgramEnvParameter4fARB ; .type glProgramEnvParameter4fARB,#function - .globl glProgramEnvParameter4fvARB ; .type glProgramEnvParameter4fvARB,#function - .globl glProgramLocalParameter4dARB ; .type glProgramLocalParameter4dARB,#function - .globl glProgramLocalParameter4dvARB ; .type glProgramLocalParameter4dvARB,#function - .globl glProgramLocalParameter4fARB ; .type glProgramLocalParameter4fARB,#function - .globl glProgramLocalParameter4fvARB ; .type glProgramLocalParameter4fvARB,#function - .globl glProgramStringARB ; .type glProgramStringARB,#function - .globl glVertexAttrib1dARB ; .type glVertexAttrib1dARB,#function - .globl glVertexAttrib1dvARB ; .type glVertexAttrib1dvARB,#function - .globl glVertexAttrib1fARB ; .type glVertexAttrib1fARB,#function - .globl glVertexAttrib1fvARB ; .type glVertexAttrib1fvARB,#function - .globl glVertexAttrib1sARB ; .type glVertexAttrib1sARB,#function - .globl glVertexAttrib1svARB ; .type glVertexAttrib1svARB,#function - .globl glVertexAttrib2dARB ; .type glVertexAttrib2dARB,#function - .globl glVertexAttrib2dvARB ; .type glVertexAttrib2dvARB,#function - .globl glVertexAttrib2fARB ; .type glVertexAttrib2fARB,#function - .globl glVertexAttrib2fvARB ; .type glVertexAttrib2fvARB,#function - .globl glVertexAttrib2sARB ; .type glVertexAttrib2sARB,#function - .globl glVertexAttrib2svARB ; .type glVertexAttrib2svARB,#function - .globl glVertexAttrib3dARB ; .type glVertexAttrib3dARB,#function - .globl glVertexAttrib3dvARB ; .type glVertexAttrib3dvARB,#function - .globl glVertexAttrib3fARB ; .type glVertexAttrib3fARB,#function - .globl glVertexAttrib3fvARB ; .type glVertexAttrib3fvARB,#function - .globl glVertexAttrib3sARB ; .type glVertexAttrib3sARB,#function - .globl glVertexAttrib3svARB ; .type glVertexAttrib3svARB,#function - .globl glVertexAttrib4NbvARB ; .type glVertexAttrib4NbvARB,#function - .globl glVertexAttrib4NivARB ; .type glVertexAttrib4NivARB,#function - .globl glVertexAttrib4NsvARB ; .type glVertexAttrib4NsvARB,#function - .globl glVertexAttrib4NubARB ; .type glVertexAttrib4NubARB,#function - .globl glVertexAttrib4NubvARB ; .type glVertexAttrib4NubvARB,#function - .globl glVertexAttrib4NuivARB ; .type glVertexAttrib4NuivARB,#function - .globl glVertexAttrib4NusvARB ; .type glVertexAttrib4NusvARB,#function - .globl glVertexAttrib4bvARB ; .type glVertexAttrib4bvARB,#function - .globl glVertexAttrib4dARB ; .type glVertexAttrib4dARB,#function - .globl glVertexAttrib4dvARB ; .type glVertexAttrib4dvARB,#function - .globl glVertexAttrib4fARB ; .type glVertexAttrib4fARB,#function - .globl glVertexAttrib4fvARB ; .type glVertexAttrib4fvARB,#function - .globl glVertexAttrib4ivARB ; .type glVertexAttrib4ivARB,#function - .globl glVertexAttrib4sARB ; .type glVertexAttrib4sARB,#function - .globl glVertexAttrib4svARB ; .type glVertexAttrib4svARB,#function - .globl glVertexAttrib4ubvARB ; .type glVertexAttrib4ubvARB,#function - .globl glVertexAttrib4uivARB ; .type glVertexAttrib4uivARB,#function - .globl glVertexAttrib4usvARB ; .type glVertexAttrib4usvARB,#function - .globl glVertexAttribPointerARB ; .type glVertexAttribPointerARB,#function - .globl glBindBufferARB ; .type glBindBufferARB,#function - .globl glBufferDataARB ; .type glBufferDataARB,#function - .globl glBufferSubDataARB ; .type glBufferSubDataARB,#function - .globl glDeleteBuffersARB ; .type glDeleteBuffersARB,#function - .globl glGenBuffersARB ; .type glGenBuffersARB,#function - .globl glGetBufferParameterivARB ; .type glGetBufferParameterivARB,#function - .globl glGetBufferPointervARB ; .type glGetBufferPointervARB,#function - .globl glGetBufferSubDataARB ; .type glGetBufferSubDataARB,#function - .globl glIsBufferARB ; .type glIsBufferARB,#function - .globl glMapBufferARB ; .type glMapBufferARB,#function - .globl glUnmapBufferARB ; .type glUnmapBufferARB,#function - .globl glBeginQueryARB ; .type glBeginQueryARB,#function - .globl glDeleteQueriesARB ; .type glDeleteQueriesARB,#function - .globl glEndQueryARB ; .type glEndQueryARB,#function - .globl glGenQueriesARB ; .type glGenQueriesARB,#function - .globl glGetQueryObjectivARB ; .type glGetQueryObjectivARB,#function - .globl glGetQueryObjectuivARB ; .type glGetQueryObjectuivARB,#function - .globl glGetQueryivARB ; .type glGetQueryivARB,#function - .globl glIsQueryARB ; .type glIsQueryARB,#function - .globl glAttachObjectARB ; .type glAttachObjectARB,#function - .globl glCompileShaderARB ; .type glCompileShaderARB,#function - .globl glCreateProgramObjectARB ; .type glCreateProgramObjectARB,#function - .globl glCreateShaderObjectARB ; .type glCreateShaderObjectARB,#function - .globl glDeleteObjectARB ; .type glDeleteObjectARB,#function - .globl glDetachObjectARB ; .type glDetachObjectARB,#function - .globl glGetActiveUniformARB ; .type glGetActiveUniformARB,#function - .globl glGetAttachedObjectsARB ; .type glGetAttachedObjectsARB,#function - .globl glGetHandleARB ; .type glGetHandleARB,#function - .globl glGetInfoLogARB ; .type glGetInfoLogARB,#function - .globl glGetObjectParameterfvARB ; .type glGetObjectParameterfvARB,#function - .globl glGetObjectParameterivARB ; .type glGetObjectParameterivARB,#function - .globl glGetShaderSourceARB ; .type glGetShaderSourceARB,#function - .globl glGetUniformLocationARB ; .type glGetUniformLocationARB,#function - .globl glGetUniformfvARB ; .type glGetUniformfvARB,#function - .globl glGetUniformivARB ; .type glGetUniformivARB,#function - .globl glLinkProgramARB ; .type glLinkProgramARB,#function - .globl glShaderSourceARB ; .type glShaderSourceARB,#function - .globl glUniform1fARB ; .type glUniform1fARB,#function - .globl glUniform1fvARB ; .type glUniform1fvARB,#function - .globl glUniform1iARB ; .type glUniform1iARB,#function - .globl glUniform1ivARB ; .type glUniform1ivARB,#function - .globl glUniform2fARB ; .type glUniform2fARB,#function - .globl glUniform2fvARB ; .type glUniform2fvARB,#function - .globl glUniform2iARB ; .type glUniform2iARB,#function - .globl glUniform2ivARB ; .type glUniform2ivARB,#function - .globl glUniform3fARB ; .type glUniform3fARB,#function - .globl glUniform3fvARB ; .type glUniform3fvARB,#function - .globl glUniform3iARB ; .type glUniform3iARB,#function - .globl glUniform3ivARB ; .type glUniform3ivARB,#function - .globl glUniform4fARB ; .type glUniform4fARB,#function - .globl glUniform4fvARB ; .type glUniform4fvARB,#function - .globl glUniform4iARB ; .type glUniform4iARB,#function - .globl glUniform4ivARB ; .type glUniform4ivARB,#function - .globl glUniformMatrix2fvARB ; .type glUniformMatrix2fvARB,#function - .globl glUniformMatrix3fvARB ; .type glUniformMatrix3fvARB,#function - .globl glUniformMatrix4fvARB ; .type glUniformMatrix4fvARB,#function - .globl glUseProgramObjectARB ; .type glUseProgramObjectARB,#function - .globl glValidateProgramARB ; .type glValidateProgramARB,#function - .globl glBindAttribLocationARB ; .type glBindAttribLocationARB,#function - .globl glGetActiveAttribARB ; .type glGetActiveAttribARB,#function - .globl glGetAttribLocationARB ; .type glGetAttribLocationARB,#function - .globl glDrawBuffersARB ; .type glDrawBuffersARB,#function - .globl glRenderbufferStorageMultisample ; .type glRenderbufferStorageMultisample,#function - .globl glPolygonOffsetEXT ; .type glPolygonOffsetEXT,#function - .globl gl_dispatch_stub_563 ; .type gl_dispatch_stub_563,#function - .globl gl_dispatch_stub_564 ; .type gl_dispatch_stub_564,#function - .globl gl_dispatch_stub_565 ; .type gl_dispatch_stub_565,#function - .globl gl_dispatch_stub_566 ; .type gl_dispatch_stub_566,#function - .globl gl_dispatch_stub_567 ; .type gl_dispatch_stub_567,#function - .globl gl_dispatch_stub_568 ; .type gl_dispatch_stub_568,#function - .globl gl_dispatch_stub_569 ; .type gl_dispatch_stub_569,#function - .globl gl_dispatch_stub_570 ; .type gl_dispatch_stub_570,#function - .globl glColorPointerEXT ; .type glColorPointerEXT,#function - .globl glEdgeFlagPointerEXT ; .type glEdgeFlagPointerEXT,#function - .globl glIndexPointerEXT ; .type glIndexPointerEXT,#function - .globl glNormalPointerEXT ; .type glNormalPointerEXT,#function - .globl glTexCoordPointerEXT ; .type glTexCoordPointerEXT,#function - .globl glVertexPointerEXT ; .type glVertexPointerEXT,#function - .globl glPointParameterfEXT ; .type glPointParameterfEXT,#function - .globl glPointParameterfvEXT ; .type glPointParameterfvEXT,#function - .globl glLockArraysEXT ; .type glLockArraysEXT,#function - .globl glUnlockArraysEXT ; .type glUnlockArraysEXT,#function - .globl gl_dispatch_stub_581 ; .type gl_dispatch_stub_581,#function - .globl gl_dispatch_stub_582 ; .type gl_dispatch_stub_582,#function - .globl glSecondaryColor3bEXT ; .type glSecondaryColor3bEXT,#function - .globl glSecondaryColor3bvEXT ; .type glSecondaryColor3bvEXT,#function - .globl glSecondaryColor3dEXT ; .type glSecondaryColor3dEXT,#function - .globl glSecondaryColor3dvEXT ; .type glSecondaryColor3dvEXT,#function - .globl glSecondaryColor3fEXT ; .type glSecondaryColor3fEXT,#function - .globl glSecondaryColor3fvEXT ; .type glSecondaryColor3fvEXT,#function - .globl glSecondaryColor3iEXT ; .type glSecondaryColor3iEXT,#function - .globl glSecondaryColor3ivEXT ; .type glSecondaryColor3ivEXT,#function - .globl glSecondaryColor3sEXT ; .type glSecondaryColor3sEXT,#function - .globl glSecondaryColor3svEXT ; .type glSecondaryColor3svEXT,#function - .globl glSecondaryColor3ubEXT ; .type glSecondaryColor3ubEXT,#function - .globl glSecondaryColor3ubvEXT ; .type glSecondaryColor3ubvEXT,#function - .globl glSecondaryColor3uiEXT ; .type glSecondaryColor3uiEXT,#function - .globl glSecondaryColor3uivEXT ; .type glSecondaryColor3uivEXT,#function - .globl glSecondaryColor3usEXT ; .type glSecondaryColor3usEXT,#function - .globl glSecondaryColor3usvEXT ; .type glSecondaryColor3usvEXT,#function - .globl glSecondaryColorPointerEXT ; .type glSecondaryColorPointerEXT,#function - .globl glMultiDrawArraysEXT ; .type glMultiDrawArraysEXT,#function - .globl glMultiDrawElementsEXT ; .type glMultiDrawElementsEXT,#function - .globl glFogCoordPointerEXT ; .type glFogCoordPointerEXT,#function - .globl glFogCoorddEXT ; .type glFogCoorddEXT,#function - .globl glFogCoorddvEXT ; .type glFogCoorddvEXT,#function - .globl glFogCoordfEXT ; .type glFogCoordfEXT,#function - .globl glFogCoordfvEXT ; .type glFogCoordfvEXT,#function - .globl gl_dispatch_stub_607 ; .type gl_dispatch_stub_607,#function - .globl glBlendFuncSeparateEXT ; .type glBlendFuncSeparateEXT,#function - .globl glFlushVertexArrayRangeNV ; .type glFlushVertexArrayRangeNV,#function - .globl glVertexArrayRangeNV ; .type glVertexArrayRangeNV,#function - .globl glCombinerInputNV ; .type glCombinerInputNV,#function - .globl glCombinerOutputNV ; .type glCombinerOutputNV,#function - .globl glCombinerParameterfNV ; .type glCombinerParameterfNV,#function - .globl glCombinerParameterfvNV ; .type glCombinerParameterfvNV,#function - .globl glCombinerParameteriNV ; .type glCombinerParameteriNV,#function - .globl glCombinerParameterivNV ; .type glCombinerParameterivNV,#function - .globl glFinalCombinerInputNV ; .type glFinalCombinerInputNV,#function - .globl glGetCombinerInputParameterfvNV ; .type glGetCombinerInputParameterfvNV,#function - .globl glGetCombinerInputParameterivNV ; .type glGetCombinerInputParameterivNV,#function - .globl glGetCombinerOutputParameterfvNV ; .type glGetCombinerOutputParameterfvNV,#function - .globl glGetCombinerOutputParameterivNV ; .type glGetCombinerOutputParameterivNV,#function - .globl glGetFinalCombinerInputParameterfvNV ; .type glGetFinalCombinerInputParameterfvNV,#function - .globl glGetFinalCombinerInputParameterivNV ; .type glGetFinalCombinerInputParameterivNV,#function - .globl glResizeBuffersMESA ; .type glResizeBuffersMESA,#function - .globl glWindowPos2dMESA ; .type glWindowPos2dMESA,#function - .globl glWindowPos2dvMESA ; .type glWindowPos2dvMESA,#function - .globl glWindowPos2fMESA ; .type glWindowPos2fMESA,#function - .globl glWindowPos2fvMESA ; .type glWindowPos2fvMESA,#function - .globl glWindowPos2iMESA ; .type glWindowPos2iMESA,#function - .globl glWindowPos2ivMESA ; .type glWindowPos2ivMESA,#function - .globl glWindowPos2sMESA ; .type glWindowPos2sMESA,#function - .globl glWindowPos2svMESA ; .type glWindowPos2svMESA,#function - .globl glWindowPos3dMESA ; .type glWindowPos3dMESA,#function - .globl glWindowPos3dvMESA ; .type glWindowPos3dvMESA,#function - .globl glWindowPos3fMESA ; .type glWindowPos3fMESA,#function - .globl glWindowPos3fvMESA ; .type glWindowPos3fvMESA,#function - .globl glWindowPos3iMESA ; .type glWindowPos3iMESA,#function - .globl glWindowPos3ivMESA ; .type glWindowPos3ivMESA,#function - .globl glWindowPos3sMESA ; .type glWindowPos3sMESA,#function - .globl glWindowPos3svMESA ; .type glWindowPos3svMESA,#function - .globl glWindowPos4dMESA ; .type glWindowPos4dMESA,#function - .globl glWindowPos4dvMESA ; .type glWindowPos4dvMESA,#function - .globl glWindowPos4fMESA ; .type glWindowPos4fMESA,#function - .globl glWindowPos4fvMESA ; .type glWindowPos4fvMESA,#function - .globl glWindowPos4iMESA ; .type glWindowPos4iMESA,#function - .globl glWindowPos4ivMESA ; .type glWindowPos4ivMESA,#function - .globl glWindowPos4sMESA ; .type glWindowPos4sMESA,#function - .globl glWindowPos4svMESA ; .type glWindowPos4svMESA,#function - .globl gl_dispatch_stub_649 ; .type gl_dispatch_stub_649,#function - .globl gl_dispatch_stub_650 ; .type gl_dispatch_stub_650,#function - .globl gl_dispatch_stub_651 ; .type gl_dispatch_stub_651,#function - .globl gl_dispatch_stub_652 ; .type gl_dispatch_stub_652,#function - .globl gl_dispatch_stub_653 ; .type gl_dispatch_stub_653,#function - .globl gl_dispatch_stub_654 ; .type gl_dispatch_stub_654,#function - .globl gl_dispatch_stub_655 ; .type gl_dispatch_stub_655,#function - .globl gl_dispatch_stub_656 ; .type gl_dispatch_stub_656,#function - .globl gl_dispatch_stub_657 ; .type gl_dispatch_stub_657,#function - .globl glAreProgramsResidentNV ; .type glAreProgramsResidentNV,#function - .globl glBindProgramNV ; .type glBindProgramNV,#function - .globl glDeleteProgramsNV ; .type glDeleteProgramsNV,#function - .globl glExecuteProgramNV ; .type glExecuteProgramNV,#function - .globl glGenProgramsNV ; .type glGenProgramsNV,#function - .globl glGetProgramParameterdvNV ; .type glGetProgramParameterdvNV,#function - .globl glGetProgramParameterfvNV ; .type glGetProgramParameterfvNV,#function - .globl glGetProgramStringNV ; .type glGetProgramStringNV,#function - .globl glGetProgramivNV ; .type glGetProgramivNV,#function - .globl glGetTrackMatrixivNV ; .type glGetTrackMatrixivNV,#function - .globl glGetVertexAttribPointervNV ; .type glGetVertexAttribPointervNV,#function - .globl glGetVertexAttribdvNV ; .type glGetVertexAttribdvNV,#function - .globl glGetVertexAttribfvNV ; .type glGetVertexAttribfvNV,#function - .globl glGetVertexAttribivNV ; .type glGetVertexAttribivNV,#function - .globl glIsProgramNV ; .type glIsProgramNV,#function - .globl glLoadProgramNV ; .type glLoadProgramNV,#function - .globl glProgramParameters4dvNV ; .type glProgramParameters4dvNV,#function - .globl glProgramParameters4fvNV ; .type glProgramParameters4fvNV,#function - .globl glRequestResidentProgramsNV ; .type glRequestResidentProgramsNV,#function - .globl glTrackMatrixNV ; .type glTrackMatrixNV,#function - .globl glVertexAttrib1dNV ; .type glVertexAttrib1dNV,#function - .globl glVertexAttrib1dvNV ; .type glVertexAttrib1dvNV,#function - .globl glVertexAttrib1fNV ; .type glVertexAttrib1fNV,#function - .globl glVertexAttrib1fvNV ; .type glVertexAttrib1fvNV,#function - .globl glVertexAttrib1sNV ; .type glVertexAttrib1sNV,#function - .globl glVertexAttrib1svNV ; .type glVertexAttrib1svNV,#function - .globl glVertexAttrib2dNV ; .type glVertexAttrib2dNV,#function - .globl glVertexAttrib2dvNV ; .type glVertexAttrib2dvNV,#function - .globl glVertexAttrib2fNV ; .type glVertexAttrib2fNV,#function - .globl glVertexAttrib2fvNV ; .type glVertexAttrib2fvNV,#function - .globl glVertexAttrib2sNV ; .type glVertexAttrib2sNV,#function - .globl glVertexAttrib2svNV ; .type glVertexAttrib2svNV,#function - .globl glVertexAttrib3dNV ; .type glVertexAttrib3dNV,#function - .globl glVertexAttrib3dvNV ; .type glVertexAttrib3dvNV,#function - .globl glVertexAttrib3fNV ; .type glVertexAttrib3fNV,#function - .globl glVertexAttrib3fvNV ; .type glVertexAttrib3fvNV,#function - .globl glVertexAttrib3sNV ; .type glVertexAttrib3sNV,#function - .globl glVertexAttrib3svNV ; .type glVertexAttrib3svNV,#function - .globl glVertexAttrib4dNV ; .type glVertexAttrib4dNV,#function - .globl glVertexAttrib4dvNV ; .type glVertexAttrib4dvNV,#function - .globl glVertexAttrib4fNV ; .type glVertexAttrib4fNV,#function - .globl glVertexAttrib4fvNV ; .type glVertexAttrib4fvNV,#function - .globl glVertexAttrib4sNV ; .type glVertexAttrib4sNV,#function - .globl glVertexAttrib4svNV ; .type glVertexAttrib4svNV,#function - .globl glVertexAttrib4ubNV ; .type glVertexAttrib4ubNV,#function - .globl glVertexAttrib4ubvNV ; .type glVertexAttrib4ubvNV,#function - .globl glVertexAttribPointerNV ; .type glVertexAttribPointerNV,#function - .globl glVertexAttribs1dvNV ; .type glVertexAttribs1dvNV,#function - .globl glVertexAttribs1fvNV ; .type glVertexAttribs1fvNV,#function - .globl glVertexAttribs1svNV ; .type glVertexAttribs1svNV,#function - .globl glVertexAttribs2dvNV ; .type glVertexAttribs2dvNV,#function - .globl glVertexAttribs2fvNV ; .type glVertexAttribs2fvNV,#function - .globl glVertexAttribs2svNV ; .type glVertexAttribs2svNV,#function - .globl glVertexAttribs3dvNV ; .type glVertexAttribs3dvNV,#function - .globl glVertexAttribs3fvNV ; .type glVertexAttribs3fvNV,#function - .globl glVertexAttribs3svNV ; .type glVertexAttribs3svNV,#function - .globl glVertexAttribs4dvNV ; .type glVertexAttribs4dvNV,#function - .globl glVertexAttribs4fvNV ; .type glVertexAttribs4fvNV,#function - .globl glVertexAttribs4svNV ; .type glVertexAttribs4svNV,#function - .globl glVertexAttribs4ubvNV ; .type glVertexAttribs4ubvNV,#function - .globl glAlphaFragmentOp1ATI ; .type glAlphaFragmentOp1ATI,#function - .globl glAlphaFragmentOp2ATI ; .type glAlphaFragmentOp2ATI,#function - .globl glAlphaFragmentOp3ATI ; .type glAlphaFragmentOp3ATI,#function - .globl glBeginFragmentShaderATI ; .type glBeginFragmentShaderATI,#function - .globl glBindFragmentShaderATI ; .type glBindFragmentShaderATI,#function - .globl glColorFragmentOp1ATI ; .type glColorFragmentOp1ATI,#function - .globl glColorFragmentOp2ATI ; .type glColorFragmentOp2ATI,#function - .globl glColorFragmentOp3ATI ; .type glColorFragmentOp3ATI,#function - .globl glDeleteFragmentShaderATI ; .type glDeleteFragmentShaderATI,#function - .globl glEndFragmentShaderATI ; .type glEndFragmentShaderATI,#function - .globl glGenFragmentShadersATI ; .type glGenFragmentShadersATI,#function - .globl glPassTexCoordATI ; .type glPassTexCoordATI,#function - .globl glSampleMapATI ; .type glSampleMapATI,#function - .globl glSetFragmentShaderConstantATI ; .type glSetFragmentShaderConstantATI,#function - .globl glPointParameteriNV ; .type glPointParameteriNV,#function - .globl glPointParameterivNV ; .type glPointParameterivNV,#function - .globl gl_dispatch_stub_734 ; .type gl_dispatch_stub_734,#function - .globl gl_dispatch_stub_735 ; .type gl_dispatch_stub_735,#function - .globl gl_dispatch_stub_736 ; .type gl_dispatch_stub_736,#function - .globl gl_dispatch_stub_737 ; .type gl_dispatch_stub_737,#function - .globl gl_dispatch_stub_738 ; .type gl_dispatch_stub_738,#function - .globl glGetProgramNamedParameterdvNV ; .type glGetProgramNamedParameterdvNV,#function - .globl glGetProgramNamedParameterfvNV ; .type glGetProgramNamedParameterfvNV,#function - .globl glProgramNamedParameter4dNV ; .type glProgramNamedParameter4dNV,#function - .globl glProgramNamedParameter4dvNV ; .type glProgramNamedParameter4dvNV,#function - .globl glProgramNamedParameter4fNV ; .type glProgramNamedParameter4fNV,#function - .globl glProgramNamedParameter4fvNV ; .type glProgramNamedParameter4fvNV,#function - .globl gl_dispatch_stub_745 ; .type gl_dispatch_stub_745,#function - .globl gl_dispatch_stub_746 ; .type gl_dispatch_stub_746,#function - .globl glBindFramebufferEXT ; .type glBindFramebufferEXT,#function - .globl glBindRenderbufferEXT ; .type glBindRenderbufferEXT,#function - .globl glCheckFramebufferStatusEXT ; .type glCheckFramebufferStatusEXT,#function - .globl glDeleteFramebuffersEXT ; .type glDeleteFramebuffersEXT,#function - .globl glDeleteRenderbuffersEXT ; .type glDeleteRenderbuffersEXT,#function - .globl glFramebufferRenderbufferEXT ; .type glFramebufferRenderbufferEXT,#function - .globl glFramebufferTexture1DEXT ; .type glFramebufferTexture1DEXT,#function - .globl glFramebufferTexture2DEXT ; .type glFramebufferTexture2DEXT,#function - .globl glFramebufferTexture3DEXT ; .type glFramebufferTexture3DEXT,#function - .globl glGenFramebuffersEXT ; .type glGenFramebuffersEXT,#function - .globl glGenRenderbuffersEXT ; .type glGenRenderbuffersEXT,#function - .globl glGenerateMipmapEXT ; .type glGenerateMipmapEXT,#function - .globl glGetFramebufferAttachmentParameterivEXT ; .type glGetFramebufferAttachmentParameterivEXT,#function - .globl glGetRenderbufferParameterivEXT ; .type glGetRenderbufferParameterivEXT,#function - .globl glIsFramebufferEXT ; .type glIsFramebufferEXT,#function - .globl glIsRenderbufferEXT ; .type glIsRenderbufferEXT,#function - .globl glRenderbufferStorageEXT ; .type glRenderbufferStorageEXT,#function - .globl gl_dispatch_stub_764 ; .type gl_dispatch_stub_764,#function - .globl glFramebufferTextureLayerEXT ; .type glFramebufferTextureLayerEXT,#function - .globl gl_dispatch_stub_766 ; .type gl_dispatch_stub_766,#function - .globl gl_dispatch_stub_767 ; .type gl_dispatch_stub_767,#function - .globl gl_dispatch_stub_768 ; .type gl_dispatch_stub_768,#function - .globl gl_dispatch_stub_769 ; .type gl_dispatch_stub_769,#function - .globl gl_dispatch_stub_770 ; .type gl_dispatch_stub_770,#function - .globl _mesa_sparc_glapi_begin ; .type _mesa_sparc_glapi_begin,#function -_mesa_sparc_glapi_begin: + .data + .align 32 + + GLOBL_FN(__glapi_sparc_pthread_stub) + HIDDEN(__glapi_sparc_pthread_stub) +__glapi_sparc_pthread_stub: /* Call offset in %g3 */ + mov %o7, %g1 + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %g2 + call __glapi_sparc_get_pc + add %g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2 + mov %g1, %o7 + sethi %hi(_glapi_Dispatch), %g1 + or %g1, %lo(_glapi_Dispatch), %g1 + srl %g3, 10, %g3 + GL_LL [%g2+%g1], %g2 + GL_LL [%g2], %g1 + cmp %g1, 0 + be 2f + nop +1: GL_LL [%g1 + %g3], %g1 + jmp %g1 + nop +2: save %sp, GL_STACK_SIZE, %sp + mov %g3, %l0 + call _glapi_get_dispatch + nop + mov %o0, %g1 + mov %l0, %g3 + ba 1b + restore %g0, %g0, %g0 + .size __glapi_sparc_pthread_stub, .-__glapi_sparc_pthread_stub + +#define GL_STUB(fn, off) \ + GLOBL_FN(fn); \ +fn: ba __glapi_sparc_pthread_stub; \ + sethi GL_OFF(off), %g3; \ + .size fn,.-fn; + +#else /* Non-threaded version. */ + + .type __glapi_sparc_nothread_stub, @function +__glapi_sparc_nothread_stub: /* Call offset in %g3 */ + mov %o7, %g1 + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %g2 + call __glapi_sparc_get_pc + add %g2, %lo(_GLOBAL_OFFSET_TABLE_+4), %g2 + mov %g1, %o7 + srl %g3, 10, %g3 + sethi %hi(_glapi_Dispatch), %g1 + or %g1, %lo(_glapi_Dispatch), %g1 + GL_LL [%g2+%g1], %g2 + GL_LL [%g2], %g1 + GL_LL [%g1 + %g3], %g1 + jmp %g1 + nop + .size __glapi_sparc_nothread_stub, .-__glapi_sparc_nothread_stub + +#define GL_STUB(fn, off) \ + GLOBL_FN(fn); \ +fn: ba __glapi_sparc_nothread_stub; \ + sethi GL_OFF(off), %g3; \ + .size fn,.-fn; + +#endif + +#define GL_STUB_ALIAS(fn, alias) \ + .globl fn; \ + .set fn, alias + + .text + .align 32 + + .globl gl_dispatch_functions_start + HIDDEN(gl_dispatch_functions_start) +gl_dispatch_functions_start: GL_STUB(glNewList, _gloffset_NewList) GL_STUB(glEndList, _gloffset_EndList) @@ -1402,14 +760,22 @@ _mesa_sparc_glapi_begin: GL_STUB(glDrawBuffersARB, _gloffset_DrawBuffersARB) GL_STUB(glRenderbufferStorageMultisample, _gloffset_RenderbufferStorageMultisample) GL_STUB(glPolygonOffsetEXT, _gloffset_PolygonOffsetEXT) - GL_STUB(gl_dispatch_stub_563, _gloffset__dispatch_stub_563) - GL_STUB(gl_dispatch_stub_564, _gloffset__dispatch_stub_564) - GL_STUB(gl_dispatch_stub_565, _gloffset__dispatch_stub_565) - GL_STUB(gl_dispatch_stub_566, _gloffset__dispatch_stub_566) - GL_STUB(gl_dispatch_stub_567, _gloffset__dispatch_stub_567) - GL_STUB(gl_dispatch_stub_568, _gloffset__dispatch_stub_568) - GL_STUB(gl_dispatch_stub_569, _gloffset__dispatch_stub_569) - GL_STUB(gl_dispatch_stub_570, _gloffset__dispatch_stub_570) + GL_STUB(gl_dispatch_stub_563, _gloffset_GetPixelTexGenParameterfvSGIS) + HIDDEN(gl_dispatch_stub_563) + GL_STUB(gl_dispatch_stub_564, _gloffset_GetPixelTexGenParameterivSGIS) + HIDDEN(gl_dispatch_stub_564) + GL_STUB(gl_dispatch_stub_565, _gloffset_PixelTexGenParameterfSGIS) + HIDDEN(gl_dispatch_stub_565) + GL_STUB(gl_dispatch_stub_566, _gloffset_PixelTexGenParameterfvSGIS) + HIDDEN(gl_dispatch_stub_566) + GL_STUB(gl_dispatch_stub_567, _gloffset_PixelTexGenParameteriSGIS) + HIDDEN(gl_dispatch_stub_567) + GL_STUB(gl_dispatch_stub_568, _gloffset_PixelTexGenParameterivSGIS) + HIDDEN(gl_dispatch_stub_568) + GL_STUB(gl_dispatch_stub_569, _gloffset_SampleMaskSGIS) + HIDDEN(gl_dispatch_stub_569) + GL_STUB(gl_dispatch_stub_570, _gloffset_SamplePatternSGIS) + HIDDEN(gl_dispatch_stub_570) GL_STUB(glColorPointerEXT, _gloffset_ColorPointerEXT) GL_STUB(glEdgeFlagPointerEXT, _gloffset_EdgeFlagPointerEXT) GL_STUB(glIndexPointerEXT, _gloffset_IndexPointerEXT) @@ -1420,8 +786,10 @@ _mesa_sparc_glapi_begin: GL_STUB(glPointParameterfvEXT, _gloffset_PointParameterfvEXT) GL_STUB(glLockArraysEXT, _gloffset_LockArraysEXT) GL_STUB(glUnlockArraysEXT, _gloffset_UnlockArraysEXT) - GL_STUB(gl_dispatch_stub_581, _gloffset__dispatch_stub_581) - GL_STUB(gl_dispatch_stub_582, _gloffset__dispatch_stub_582) + GL_STUB(gl_dispatch_stub_581, _gloffset_CullParameterdvEXT) + HIDDEN(gl_dispatch_stub_581) + GL_STUB(gl_dispatch_stub_582, _gloffset_CullParameterfvEXT) + HIDDEN(gl_dispatch_stub_582) GL_STUB(glSecondaryColor3bEXT, _gloffset_SecondaryColor3bEXT) GL_STUB(glSecondaryColor3bvEXT, _gloffset_SecondaryColor3bvEXT) GL_STUB(glSecondaryColor3dEXT, _gloffset_SecondaryColor3dEXT) @@ -1446,7 +814,8 @@ _mesa_sparc_glapi_begin: GL_STUB(glFogCoorddvEXT, _gloffset_FogCoorddvEXT) GL_STUB(glFogCoordfEXT, _gloffset_FogCoordfEXT) GL_STUB(glFogCoordfvEXT, _gloffset_FogCoordfvEXT) - GL_STUB(gl_dispatch_stub_607, _gloffset__dispatch_stub_607) + GL_STUB(gl_dispatch_stub_607, _gloffset_PixelTexGenSGIX) + HIDDEN(gl_dispatch_stub_607) GL_STUB(glBlendFuncSeparateEXT, _gloffset_BlendFuncSeparateEXT) GL_STUB(glFlushVertexArrayRangeNV, _gloffset_FlushVertexArrayRangeNV) GL_STUB(glVertexArrayRangeNV, _gloffset_VertexArrayRangeNV) @@ -1488,15 +857,24 @@ _mesa_sparc_glapi_begin: GL_STUB(glWindowPos4ivMESA, _gloffset_WindowPos4ivMESA) GL_STUB(glWindowPos4sMESA, _gloffset_WindowPos4sMESA) GL_STUB(glWindowPos4svMESA, _gloffset_WindowPos4svMESA) - GL_STUB(gl_dispatch_stub_649, _gloffset__dispatch_stub_649) - GL_STUB(gl_dispatch_stub_650, _gloffset__dispatch_stub_650) - GL_STUB(gl_dispatch_stub_651, _gloffset__dispatch_stub_651) - GL_STUB(gl_dispatch_stub_652, _gloffset__dispatch_stub_652) - GL_STUB(gl_dispatch_stub_653, _gloffset__dispatch_stub_653) - GL_STUB(gl_dispatch_stub_654, _gloffset__dispatch_stub_654) - GL_STUB(gl_dispatch_stub_655, _gloffset__dispatch_stub_655) - GL_STUB(gl_dispatch_stub_656, _gloffset__dispatch_stub_656) - GL_STUB(gl_dispatch_stub_657, _gloffset__dispatch_stub_657) + GL_STUB(gl_dispatch_stub_649, _gloffset_MultiModeDrawArraysIBM) + HIDDEN(gl_dispatch_stub_649) + GL_STUB(gl_dispatch_stub_650, _gloffset_MultiModeDrawElementsIBM) + HIDDEN(gl_dispatch_stub_650) + GL_STUB(gl_dispatch_stub_651, _gloffset_DeleteFencesNV) + HIDDEN(gl_dispatch_stub_651) + GL_STUB(gl_dispatch_stub_652, _gloffset_FinishFenceNV) + HIDDEN(gl_dispatch_stub_652) + GL_STUB(gl_dispatch_stub_653, _gloffset_GenFencesNV) + HIDDEN(gl_dispatch_stub_653) + GL_STUB(gl_dispatch_stub_654, _gloffset_GetFenceivNV) + HIDDEN(gl_dispatch_stub_654) + GL_STUB(gl_dispatch_stub_655, _gloffset_IsFenceNV) + HIDDEN(gl_dispatch_stub_655) + GL_STUB(gl_dispatch_stub_656, _gloffset_SetFenceNV) + HIDDEN(gl_dispatch_stub_656) + GL_STUB(gl_dispatch_stub_657, _gloffset_TestFenceNV) + HIDDEN(gl_dispatch_stub_657) GL_STUB(glAreProgramsResidentNV, _gloffset_AreProgramsResidentNV) GL_STUB(glBindProgramNV, _gloffset_BindProgramNV) GL_STUB(glDeleteProgramsNV, _gloffset_DeleteProgramsNV) @@ -1557,6 +935,10 @@ _mesa_sparc_glapi_begin: GL_STUB(glVertexAttribs4fvNV, _gloffset_VertexAttribs4fvNV) GL_STUB(glVertexAttribs4svNV, _gloffset_VertexAttribs4svNV) GL_STUB(glVertexAttribs4ubvNV, _gloffset_VertexAttribs4ubvNV) + GL_STUB(glGetTexBumpParameterfvATI, _gloffset_GetTexBumpParameterfvATI) + GL_STUB(glGetTexBumpParameterivATI, _gloffset_GetTexBumpParameterivATI) + GL_STUB(glTexBumpParameterfvATI, _gloffset_TexBumpParameterfvATI) + GL_STUB(glTexBumpParameterivATI, _gloffset_TexBumpParameterivATI) GL_STUB(glAlphaFragmentOp1ATI, _gloffset_AlphaFragmentOp1ATI) GL_STUB(glAlphaFragmentOp2ATI, _gloffset_AlphaFragmentOp2ATI) GL_STUB(glAlphaFragmentOp3ATI, _gloffset_AlphaFragmentOp3ATI) @@ -1573,19 +955,26 @@ _mesa_sparc_glapi_begin: GL_STUB(glSetFragmentShaderConstantATI, _gloffset_SetFragmentShaderConstantATI) GL_STUB(glPointParameteriNV, _gloffset_PointParameteriNV) GL_STUB(glPointParameterivNV, _gloffset_PointParameterivNV) - GL_STUB(gl_dispatch_stub_734, _gloffset__dispatch_stub_734) - GL_STUB(gl_dispatch_stub_735, _gloffset__dispatch_stub_735) - GL_STUB(gl_dispatch_stub_736, _gloffset__dispatch_stub_736) - GL_STUB(gl_dispatch_stub_737, _gloffset__dispatch_stub_737) - GL_STUB(gl_dispatch_stub_738, _gloffset__dispatch_stub_738) + GL_STUB(gl_dispatch_stub_738, _gloffset_ActiveStencilFaceEXT) + HIDDEN(gl_dispatch_stub_738) + GL_STUB(gl_dispatch_stub_739, _gloffset_BindVertexArrayAPPLE) + HIDDEN(gl_dispatch_stub_739) + GL_STUB(gl_dispatch_stub_740, _gloffset_DeleteVertexArraysAPPLE) + HIDDEN(gl_dispatch_stub_740) + GL_STUB(gl_dispatch_stub_741, _gloffset_GenVertexArraysAPPLE) + HIDDEN(gl_dispatch_stub_741) + GL_STUB(gl_dispatch_stub_742, _gloffset_IsVertexArrayAPPLE) + HIDDEN(gl_dispatch_stub_742) GL_STUB(glGetProgramNamedParameterdvNV, _gloffset_GetProgramNamedParameterdvNV) GL_STUB(glGetProgramNamedParameterfvNV, _gloffset_GetProgramNamedParameterfvNV) GL_STUB(glProgramNamedParameter4dNV, _gloffset_ProgramNamedParameter4dNV) GL_STUB(glProgramNamedParameter4dvNV, _gloffset_ProgramNamedParameter4dvNV) GL_STUB(glProgramNamedParameter4fNV, _gloffset_ProgramNamedParameter4fNV) GL_STUB(glProgramNamedParameter4fvNV, _gloffset_ProgramNamedParameter4fvNV) - GL_STUB(gl_dispatch_stub_745, _gloffset__dispatch_stub_745) - GL_STUB(gl_dispatch_stub_746, _gloffset__dispatch_stub_746) + GL_STUB(gl_dispatch_stub_749, _gloffset_DepthBoundsEXT) + HIDDEN(gl_dispatch_stub_749) + GL_STUB(gl_dispatch_stub_750, _gloffset_BlendEquationSeparateEXT) + HIDDEN(gl_dispatch_stub_750) GL_STUB(glBindFramebufferEXT, _gloffset_BindFramebufferEXT) GL_STUB(glBindRenderbufferEXT, _gloffset_BindRenderbufferEXT) GL_STUB(glCheckFramebufferStatusEXT, _gloffset_CheckFramebufferStatusEXT) @@ -1603,287 +992,353 @@ _mesa_sparc_glapi_begin: GL_STUB(glIsFramebufferEXT, _gloffset_IsFramebufferEXT) GL_STUB(glIsRenderbufferEXT, _gloffset_IsRenderbufferEXT) GL_STUB(glRenderbufferStorageEXT, _gloffset_RenderbufferStorageEXT) - GL_STUB(gl_dispatch_stub_764, _gloffset__dispatch_stub_764) + GL_STUB(gl_dispatch_stub_768, _gloffset_BlitFramebufferEXT) + HIDDEN(gl_dispatch_stub_768) GL_STUB(glFramebufferTextureLayerEXT, _gloffset_FramebufferTextureLayerEXT) - GL_STUB(gl_dispatch_stub_766, _gloffset__dispatch_stub_766) - GL_STUB(gl_dispatch_stub_767, _gloffset__dispatch_stub_767) - GL_STUB(gl_dispatch_stub_768, _gloffset__dispatch_stub_768) - GL_STUB(gl_dispatch_stub_769, _gloffset__dispatch_stub_769) - GL_STUB(gl_dispatch_stub_770, _gloffset__dispatch_stub_770) - - .globl _mesa_sparc_glapi_end ; .type _mesa_sparc_glapi_end,#function -_mesa_sparc_glapi_end: - - .globl glArrayElementEXT ; .type glArrayElementEXT,#function ; glArrayElementEXT = glArrayElement - .globl glBindTextureEXT ; .type glBindTextureEXT,#function ; glBindTextureEXT = glBindTexture - .globl glDrawArraysEXT ; .type glDrawArraysEXT,#function ; glDrawArraysEXT = glDrawArrays + GL_STUB(gl_dispatch_stub_770, _gloffset_StencilFuncSeparateATI) + HIDDEN(gl_dispatch_stub_770) + GL_STUB(gl_dispatch_stub_771, _gloffset_ProgramEnvParameters4fvEXT) + HIDDEN(gl_dispatch_stub_771) + GL_STUB(gl_dispatch_stub_772, _gloffset_ProgramLocalParameters4fvEXT) + HIDDEN(gl_dispatch_stub_772) + GL_STUB(gl_dispatch_stub_773, _gloffset_GetQueryObjecti64vEXT) + HIDDEN(gl_dispatch_stub_773) + GL_STUB(gl_dispatch_stub_774, _gloffset_GetQueryObjectui64vEXT) + HIDDEN(gl_dispatch_stub_774) + GL_STUB_ALIAS(glArrayElementEXT, glArrayElement) + GL_STUB_ALIAS(glBindTextureEXT, glBindTexture) + GL_STUB_ALIAS(glDrawArraysEXT, glDrawArrays) +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glAreTexturesResidentEXT, glAreTexturesResident) +#endif + GL_STUB_ALIAS(glCopyTexImage1DEXT, glCopyTexImage1D) + GL_STUB_ALIAS(glCopyTexImage2DEXT, glCopyTexImage2D) + GL_STUB_ALIAS(glCopyTexSubImage1DEXT, glCopyTexSubImage1D) + GL_STUB_ALIAS(glCopyTexSubImage2DEXT, glCopyTexSubImage2D) +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glDeleteTexturesEXT, glDeleteTextures) +#endif +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glGenTexturesEXT, glGenTextures) +#endif + GL_STUB_ALIAS(glGetPointervEXT, glGetPointerv) +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glIsTextureEXT, glIsTexture) +#endif + GL_STUB_ALIAS(glPrioritizeTexturesEXT, glPrioritizeTextures) + GL_STUB_ALIAS(glTexSubImage1DEXT, glTexSubImage1D) + GL_STUB_ALIAS(glTexSubImage2DEXT, glTexSubImage2D) + GL_STUB_ALIAS(glBlendColorEXT, glBlendColor) + GL_STUB_ALIAS(glBlendEquationEXT, glBlendEquation) + GL_STUB_ALIAS(glDrawRangeElementsEXT, glDrawRangeElements) + GL_STUB_ALIAS(glColorTableSGI, glColorTable) + GL_STUB_ALIAS(glColorTableEXT, glColorTable) + GL_STUB_ALIAS(glColorTableParameterfvSGI, glColorTableParameterfv) + GL_STUB_ALIAS(glColorTableParameterivSGI, glColorTableParameteriv) + GL_STUB_ALIAS(glCopyColorTableSGI, glCopyColorTable) +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glGetColorTableSGI, glGetColorTable) +#endif +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glGetColorTableEXT, glGetColorTable) +#endif +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glGetColorTableParameterfvSGI, glGetColorTableParameterfv) +#endif #ifndef GLX_INDIRECT_RENDERING - .globl glAreTexturesResidentEXT ; .type glAreTexturesResidentEXT,#function ; glAreTexturesResidentEXT = glAreTexturesResident + GL_STUB_ALIAS(glGetColorTableParameterfvEXT, glGetColorTableParameterfv) #endif - .globl glCopyTexImage1DEXT ; .type glCopyTexImage1DEXT,#function ; glCopyTexImage1DEXT = glCopyTexImage1D - .globl glCopyTexImage2DEXT ; .type glCopyTexImage2DEXT,#function ; glCopyTexImage2DEXT = glCopyTexImage2D - .globl glCopyTexSubImage1DEXT ; .type glCopyTexSubImage1DEXT,#function ; glCopyTexSubImage1DEXT = glCopyTexSubImage1D - .globl glCopyTexSubImage2DEXT ; .type glCopyTexSubImage2DEXT,#function ; glCopyTexSubImage2DEXT = glCopyTexSubImage2D #ifndef GLX_INDIRECT_RENDERING - .globl glDeleteTexturesEXT ; .type glDeleteTexturesEXT,#function ; glDeleteTexturesEXT = glDeleteTextures + GL_STUB_ALIAS(glGetColorTableParameterivSGI, glGetColorTableParameteriv) #endif #ifndef GLX_INDIRECT_RENDERING - .globl glGenTexturesEXT ; .type glGenTexturesEXT,#function ; glGenTexturesEXT = glGenTextures + GL_STUB_ALIAS(glGetColorTableParameterivEXT, glGetColorTableParameteriv) #endif - .globl glGetPointervEXT ; .type glGetPointervEXT,#function ; glGetPointervEXT = glGetPointerv + GL_STUB_ALIAS(glColorSubTableEXT, glColorSubTable) + GL_STUB_ALIAS(glCopyColorSubTableEXT, glCopyColorSubTable) + GL_STUB_ALIAS(glConvolutionFilter1DEXT, glConvolutionFilter1D) + GL_STUB_ALIAS(glConvolutionFilter2DEXT, glConvolutionFilter2D) + GL_STUB_ALIAS(glConvolutionParameterfEXT, glConvolutionParameterf) + GL_STUB_ALIAS(glConvolutionParameterfvEXT, glConvolutionParameterfv) + GL_STUB_ALIAS(glConvolutionParameteriEXT, glConvolutionParameteri) + GL_STUB_ALIAS(glConvolutionParameterivEXT, glConvolutionParameteriv) + GL_STUB_ALIAS(glCopyConvolutionFilter1DEXT, glCopyConvolutionFilter1D) + GL_STUB_ALIAS(glCopyConvolutionFilter2DEXT, glCopyConvolutionFilter2D) #ifndef GLX_INDIRECT_RENDERING - .globl glIsTextureEXT ; .type glIsTextureEXT,#function ; glIsTextureEXT = glIsTexture + GL_STUB_ALIAS(glGetConvolutionFilterEXT, glGetConvolutionFilter) #endif - .globl glPrioritizeTexturesEXT ; .type glPrioritizeTexturesEXT,#function ; glPrioritizeTexturesEXT = glPrioritizeTextures - .globl glTexSubImage1DEXT ; .type glTexSubImage1DEXT,#function ; glTexSubImage1DEXT = glTexSubImage1D - .globl glTexSubImage2DEXT ; .type glTexSubImage2DEXT,#function ; glTexSubImage2DEXT = glTexSubImage2D - .globl glBlendColorEXT ; .type glBlendColorEXT,#function ; glBlendColorEXT = glBlendColor - .globl glBlendEquationEXT ; .type glBlendEquationEXT,#function ; glBlendEquationEXT = glBlendEquation - .globl glDrawRangeElementsEXT ; .type glDrawRangeElementsEXT,#function ; glDrawRangeElementsEXT = glDrawRangeElements - .globl glColorTableEXT ; .type glColorTableEXT,#function ; glColorTableEXT = glColorTable #ifndef GLX_INDIRECT_RENDERING - .globl glGetColorTableEXT ; .type glGetColorTableEXT,#function ; glGetColorTableEXT = glGetColorTable + GL_STUB_ALIAS(glGetConvolutionParameterfvEXT, glGetConvolutionParameterfv) #endif #ifndef GLX_INDIRECT_RENDERING - .globl glGetColorTableParameterfvEXT ; .type glGetColorTableParameterfvEXT,#function ; glGetColorTableParameterfvEXT = glGetColorTableParameterfv + GL_STUB_ALIAS(glGetConvolutionParameterivEXT, glGetConvolutionParameteriv) #endif #ifndef GLX_INDIRECT_RENDERING - .globl glGetColorTableParameterivEXT ; .type glGetColorTableParameterivEXT,#function ; glGetColorTableParameterivEXT = glGetColorTableParameteriv + GL_STUB_ALIAS(glGetSeparableFilterEXT, glGetSeparableFilter) #endif - .globl glTexImage3DEXT ; .type glTexImage3DEXT,#function ; glTexImage3DEXT = glTexImage3D - .globl glTexSubImage3DEXT ; .type glTexSubImage3DEXT,#function ; glTexSubImage3DEXT = glTexSubImage3D - .globl glCopyTexSubImage3DEXT ; .type glCopyTexSubImage3DEXT,#function ; glCopyTexSubImage3DEXT = glCopyTexSubImage3D - .globl glActiveTexture ; .type glActiveTexture,#function ; glActiveTexture = glActiveTextureARB - .globl glClientActiveTexture ; .type glClientActiveTexture,#function ; glClientActiveTexture = glClientActiveTextureARB - .globl glMultiTexCoord1d ; .type glMultiTexCoord1d,#function ; glMultiTexCoord1d = glMultiTexCoord1dARB - .globl glMultiTexCoord1dv ; .type glMultiTexCoord1dv,#function ; glMultiTexCoord1dv = glMultiTexCoord1dvARB - .globl glMultiTexCoord1f ; .type glMultiTexCoord1f,#function ; glMultiTexCoord1f = glMultiTexCoord1fARB - .globl glMultiTexCoord1fv ; .type glMultiTexCoord1fv,#function ; glMultiTexCoord1fv = glMultiTexCoord1fvARB - .globl glMultiTexCoord1i ; .type glMultiTexCoord1i,#function ; glMultiTexCoord1i = glMultiTexCoord1iARB - .globl glMultiTexCoord1iv ; .type glMultiTexCoord1iv,#function ; glMultiTexCoord1iv = glMultiTexCoord1ivARB - .globl glMultiTexCoord1s ; .type glMultiTexCoord1s,#function ; glMultiTexCoord1s = glMultiTexCoord1sARB - .globl glMultiTexCoord1sv ; .type glMultiTexCoord1sv,#function ; glMultiTexCoord1sv = glMultiTexCoord1svARB - .globl glMultiTexCoord2d ; .type glMultiTexCoord2d,#function ; glMultiTexCoord2d = glMultiTexCoord2dARB - .globl glMultiTexCoord2dv ; .type glMultiTexCoord2dv,#function ; glMultiTexCoord2dv = glMultiTexCoord2dvARB - .globl glMultiTexCoord2f ; .type glMultiTexCoord2f,#function ; glMultiTexCoord2f = glMultiTexCoord2fARB - .globl glMultiTexCoord2fv ; .type glMultiTexCoord2fv,#function ; glMultiTexCoord2fv = glMultiTexCoord2fvARB - .globl glMultiTexCoord2i ; .type glMultiTexCoord2i,#function ; glMultiTexCoord2i = glMultiTexCoord2iARB - .globl glMultiTexCoord2iv ; .type glMultiTexCoord2iv,#function ; glMultiTexCoord2iv = glMultiTexCoord2ivARB - .globl glMultiTexCoord2s ; .type glMultiTexCoord2s,#function ; glMultiTexCoord2s = glMultiTexCoord2sARB - .globl glMultiTexCoord2sv ; .type glMultiTexCoord2sv,#function ; glMultiTexCoord2sv = glMultiTexCoord2svARB - .globl glMultiTexCoord3d ; .type glMultiTexCoord3d,#function ; glMultiTexCoord3d = glMultiTexCoord3dARB - .globl glMultiTexCoord3dv ; .type glMultiTexCoord3dv,#function ; glMultiTexCoord3dv = glMultiTexCoord3dvARB - .globl glMultiTexCoord3f ; .type glMultiTexCoord3f,#function ; glMultiTexCoord3f = glMultiTexCoord3fARB - .globl glMultiTexCoord3fv ; .type glMultiTexCoord3fv,#function ; glMultiTexCoord3fv = glMultiTexCoord3fvARB - .globl glMultiTexCoord3i ; .type glMultiTexCoord3i,#function ; glMultiTexCoord3i = glMultiTexCoord3iARB - .globl glMultiTexCoord3iv ; .type glMultiTexCoord3iv,#function ; glMultiTexCoord3iv = glMultiTexCoord3ivARB - .globl glMultiTexCoord3s ; .type glMultiTexCoord3s,#function ; glMultiTexCoord3s = glMultiTexCoord3sARB - .globl glMultiTexCoord3sv ; .type glMultiTexCoord3sv,#function ; glMultiTexCoord3sv = glMultiTexCoord3svARB - .globl glMultiTexCoord4d ; .type glMultiTexCoord4d,#function ; glMultiTexCoord4d = glMultiTexCoord4dARB - .globl glMultiTexCoord4dv ; .type glMultiTexCoord4dv,#function ; glMultiTexCoord4dv = glMultiTexCoord4dvARB - .globl glMultiTexCoord4f ; .type glMultiTexCoord4f,#function ; glMultiTexCoord4f = glMultiTexCoord4fARB - .globl glMultiTexCoord4fv ; .type glMultiTexCoord4fv,#function ; glMultiTexCoord4fv = glMultiTexCoord4fvARB - .globl glMultiTexCoord4i ; .type glMultiTexCoord4i,#function ; glMultiTexCoord4i = glMultiTexCoord4iARB - .globl glMultiTexCoord4iv ; .type glMultiTexCoord4iv,#function ; glMultiTexCoord4iv = glMultiTexCoord4ivARB - .globl glMultiTexCoord4s ; .type glMultiTexCoord4s,#function ; glMultiTexCoord4s = glMultiTexCoord4sARB - .globl glMultiTexCoord4sv ; .type glMultiTexCoord4sv,#function ; glMultiTexCoord4sv = glMultiTexCoord4svARB - .globl glLoadTransposeMatrixd ; .type glLoadTransposeMatrixd,#function ; glLoadTransposeMatrixd = glLoadTransposeMatrixdARB - .globl glLoadTransposeMatrixf ; .type glLoadTransposeMatrixf,#function ; glLoadTransposeMatrixf = glLoadTransposeMatrixfARB - .globl glMultTransposeMatrixd ; .type glMultTransposeMatrixd,#function ; glMultTransposeMatrixd = glMultTransposeMatrixdARB - .globl glMultTransposeMatrixf ; .type glMultTransposeMatrixf,#function ; glMultTransposeMatrixf = glMultTransposeMatrixfARB - .globl glSampleCoverage ; .type glSampleCoverage,#function ; glSampleCoverage = glSampleCoverageARB - .globl glCompressedTexImage1D ; .type glCompressedTexImage1D,#function ; glCompressedTexImage1D = glCompressedTexImage1DARB - .globl glCompressedTexImage2D ; .type glCompressedTexImage2D,#function ; glCompressedTexImage2D = glCompressedTexImage2DARB - .globl glCompressedTexImage3D ; .type glCompressedTexImage3D,#function ; glCompressedTexImage3D = glCompressedTexImage3DARB - .globl glCompressedTexSubImage1D ; .type glCompressedTexSubImage1D,#function ; glCompressedTexSubImage1D = glCompressedTexSubImage1DARB - .globl glCompressedTexSubImage2D ; .type glCompressedTexSubImage2D,#function ; glCompressedTexSubImage2D = glCompressedTexSubImage2DARB - .globl glCompressedTexSubImage3D ; .type glCompressedTexSubImage3D,#function ; glCompressedTexSubImage3D = glCompressedTexSubImage3DARB - .globl glGetCompressedTexImage ; .type glGetCompressedTexImage,#function ; glGetCompressedTexImage = glGetCompressedTexImageARB - .globl glDisableVertexAttribArray ; .type glDisableVertexAttribArray,#function ; glDisableVertexAttribArray = glDisableVertexAttribArrayARB - .globl glEnableVertexAttribArray ; .type glEnableVertexAttribArray,#function ; glEnableVertexAttribArray = glEnableVertexAttribArrayARB - .globl glGetVertexAttribdv ; .type glGetVertexAttribdv,#function ; glGetVertexAttribdv = glGetVertexAttribdvARB - .globl glGetVertexAttribfv ; .type glGetVertexAttribfv,#function ; glGetVertexAttribfv = glGetVertexAttribfvARB - .globl glGetVertexAttribiv ; .type glGetVertexAttribiv,#function ; glGetVertexAttribiv = glGetVertexAttribivARB - .globl glProgramParameter4dNV ; .type glProgramParameter4dNV,#function ; glProgramParameter4dNV = glProgramEnvParameter4dARB - .globl glProgramParameter4dvNV ; .type glProgramParameter4dvNV,#function ; glProgramParameter4dvNV = glProgramEnvParameter4dvARB - .globl glProgramParameter4fNV ; .type glProgramParameter4fNV,#function ; glProgramParameter4fNV = glProgramEnvParameter4fARB - .globl glProgramParameter4fvNV ; .type glProgramParameter4fvNV,#function ; glProgramParameter4fvNV = glProgramEnvParameter4fvARB - .globl glVertexAttrib1d ; .type glVertexAttrib1d,#function ; glVertexAttrib1d = glVertexAttrib1dARB - .globl glVertexAttrib1dv ; .type glVertexAttrib1dv,#function ; glVertexAttrib1dv = glVertexAttrib1dvARB - .globl glVertexAttrib1f ; .type glVertexAttrib1f,#function ; glVertexAttrib1f = glVertexAttrib1fARB - .globl glVertexAttrib1fv ; .type glVertexAttrib1fv,#function ; glVertexAttrib1fv = glVertexAttrib1fvARB - .globl glVertexAttrib1s ; .type glVertexAttrib1s,#function ; glVertexAttrib1s = glVertexAttrib1sARB - .globl glVertexAttrib1sv ; .type glVertexAttrib1sv,#function ; glVertexAttrib1sv = glVertexAttrib1svARB - .globl glVertexAttrib2d ; .type glVertexAttrib2d,#function ; glVertexAttrib2d = glVertexAttrib2dARB - .globl glVertexAttrib2dv ; .type glVertexAttrib2dv,#function ; glVertexAttrib2dv = glVertexAttrib2dvARB - .globl glVertexAttrib2f ; .type glVertexAttrib2f,#function ; glVertexAttrib2f = glVertexAttrib2fARB - .globl glVertexAttrib2fv ; .type glVertexAttrib2fv,#function ; glVertexAttrib2fv = glVertexAttrib2fvARB - .globl glVertexAttrib2s ; .type glVertexAttrib2s,#function ; glVertexAttrib2s = glVertexAttrib2sARB - .globl glVertexAttrib2sv ; .type glVertexAttrib2sv,#function ; glVertexAttrib2sv = glVertexAttrib2svARB - .globl glVertexAttrib3d ; .type glVertexAttrib3d,#function ; glVertexAttrib3d = glVertexAttrib3dARB - .globl glVertexAttrib3dv ; .type glVertexAttrib3dv,#function ; glVertexAttrib3dv = glVertexAttrib3dvARB - .globl glVertexAttrib3f ; .type glVertexAttrib3f,#function ; glVertexAttrib3f = glVertexAttrib3fARB - .globl glVertexAttrib3fv ; .type glVertexAttrib3fv,#function ; glVertexAttrib3fv = glVertexAttrib3fvARB - .globl glVertexAttrib3s ; .type glVertexAttrib3s,#function ; glVertexAttrib3s = glVertexAttrib3sARB - .globl glVertexAttrib3sv ; .type glVertexAttrib3sv,#function ; glVertexAttrib3sv = glVertexAttrib3svARB - .globl glVertexAttrib4Nbv ; .type glVertexAttrib4Nbv,#function ; glVertexAttrib4Nbv = glVertexAttrib4NbvARB - .globl glVertexAttrib4Niv ; .type glVertexAttrib4Niv,#function ; glVertexAttrib4Niv = glVertexAttrib4NivARB - .globl glVertexAttrib4Nsv ; .type glVertexAttrib4Nsv,#function ; glVertexAttrib4Nsv = glVertexAttrib4NsvARB - .globl glVertexAttrib4Nub ; .type glVertexAttrib4Nub,#function ; glVertexAttrib4Nub = glVertexAttrib4NubARB - .globl glVertexAttrib4Nubv ; .type glVertexAttrib4Nubv,#function ; glVertexAttrib4Nubv = glVertexAttrib4NubvARB - .globl glVertexAttrib4Nuiv ; .type glVertexAttrib4Nuiv,#function ; glVertexAttrib4Nuiv = glVertexAttrib4NuivARB - .globl glVertexAttrib4Nusv ; .type glVertexAttrib4Nusv,#function ; glVertexAttrib4Nusv = glVertexAttrib4NusvARB - .globl glVertexAttrib4bv ; .type glVertexAttrib4bv,#function ; glVertexAttrib4bv = glVertexAttrib4bvARB - .globl glVertexAttrib4d ; .type glVertexAttrib4d,#function ; glVertexAttrib4d = glVertexAttrib4dARB - .globl glVertexAttrib4dv ; .type glVertexAttrib4dv,#function ; glVertexAttrib4dv = glVertexAttrib4dvARB - .globl glVertexAttrib4f ; .type glVertexAttrib4f,#function ; glVertexAttrib4f = glVertexAttrib4fARB - .globl glVertexAttrib4fv ; .type glVertexAttrib4fv,#function ; glVertexAttrib4fv = glVertexAttrib4fvARB - .globl glVertexAttrib4iv ; .type glVertexAttrib4iv,#function ; glVertexAttrib4iv = glVertexAttrib4ivARB - .globl glVertexAttrib4s ; .type glVertexAttrib4s,#function ; glVertexAttrib4s = glVertexAttrib4sARB - .globl glVertexAttrib4sv ; .type glVertexAttrib4sv,#function ; glVertexAttrib4sv = glVertexAttrib4svARB - .globl glVertexAttrib4ubv ; .type glVertexAttrib4ubv,#function ; glVertexAttrib4ubv = glVertexAttrib4ubvARB - .globl glVertexAttrib4uiv ; .type glVertexAttrib4uiv,#function ; glVertexAttrib4uiv = glVertexAttrib4uivARB - .globl glVertexAttrib4usv ; .type glVertexAttrib4usv,#function ; glVertexAttrib4usv = glVertexAttrib4usvARB - .globl glVertexAttribPointer ; .type glVertexAttribPointer,#function ; glVertexAttribPointer = glVertexAttribPointerARB - .globl glBindBuffer ; .type glBindBuffer,#function ; glBindBuffer = glBindBufferARB - .globl glBufferData ; .type glBufferData,#function ; glBufferData = glBufferDataARB - .globl glBufferSubData ; .type glBufferSubData,#function ; glBufferSubData = glBufferSubDataARB - .globl glDeleteBuffers ; .type glDeleteBuffers,#function ; glDeleteBuffers = glDeleteBuffersARB - .globl glGenBuffers ; .type glGenBuffers,#function ; glGenBuffers = glGenBuffersARB - .globl glGetBufferParameteriv ; .type glGetBufferParameteriv,#function ; glGetBufferParameteriv = glGetBufferParameterivARB - .globl glGetBufferPointerv ; .type glGetBufferPointerv,#function ; glGetBufferPointerv = glGetBufferPointervARB - .globl glGetBufferSubData ; .type glGetBufferSubData,#function ; glGetBufferSubData = glGetBufferSubDataARB - .globl glIsBuffer ; .type glIsBuffer,#function ; glIsBuffer = glIsBufferARB - .globl glMapBuffer ; .type glMapBuffer,#function ; glMapBuffer = glMapBufferARB - .globl glUnmapBuffer ; .type glUnmapBuffer,#function ; glUnmapBuffer = glUnmapBufferARB - .globl glBeginQuery ; .type glBeginQuery,#function ; glBeginQuery = glBeginQueryARB - .globl glDeleteQueries ; .type glDeleteQueries,#function ; glDeleteQueries = glDeleteQueriesARB - .globl glEndQuery ; .type glEndQuery,#function ; glEndQuery = glEndQueryARB - .globl glGenQueries ; .type glGenQueries,#function ; glGenQueries = glGenQueriesARB - .globl glGetQueryObjectiv ; .type glGetQueryObjectiv,#function ; glGetQueryObjectiv = glGetQueryObjectivARB - .globl glGetQueryObjectuiv ; .type glGetQueryObjectuiv,#function ; glGetQueryObjectuiv = glGetQueryObjectuivARB - .globl glGetQueryiv ; .type glGetQueryiv,#function ; glGetQueryiv = glGetQueryivARB - .globl glIsQuery ; .type glIsQuery,#function ; glIsQuery = glIsQueryARB - .globl glCompileShader ; .type glCompileShader,#function ; glCompileShader = glCompileShaderARB - .globl glGetActiveUniform ; .type glGetActiveUniform,#function ; glGetActiveUniform = glGetActiveUniformARB - .globl glGetShaderSource ; .type glGetShaderSource,#function ; glGetShaderSource = glGetShaderSourceARB - .globl glGetUniformLocation ; .type glGetUniformLocation,#function ; glGetUniformLocation = glGetUniformLocationARB - .globl glGetUniformfv ; .type glGetUniformfv,#function ; glGetUniformfv = glGetUniformfvARB - .globl glGetUniformiv ; .type glGetUniformiv,#function ; glGetUniformiv = glGetUniformivARB - .globl glLinkProgram ; .type glLinkProgram,#function ; glLinkProgram = glLinkProgramARB - .globl glShaderSource ; .type glShaderSource,#function ; glShaderSource = glShaderSourceARB - .globl glUniform1f ; .type glUniform1f,#function ; glUniform1f = glUniform1fARB - .globl glUniform1fv ; .type glUniform1fv,#function ; glUniform1fv = glUniform1fvARB - .globl glUniform1i ; .type glUniform1i,#function ; glUniform1i = glUniform1iARB - .globl glUniform1iv ; .type glUniform1iv,#function ; glUniform1iv = glUniform1ivARB - .globl glUniform2f ; .type glUniform2f,#function ; glUniform2f = glUniform2fARB - .globl glUniform2fv ; .type glUniform2fv,#function ; glUniform2fv = glUniform2fvARB - .globl glUniform2i ; .type glUniform2i,#function ; glUniform2i = glUniform2iARB - .globl glUniform2iv ; .type glUniform2iv,#function ; glUniform2iv = glUniform2ivARB - .globl glUniform3f ; .type glUniform3f,#function ; glUniform3f = glUniform3fARB - .globl glUniform3fv ; .type glUniform3fv,#function ; glUniform3fv = glUniform3fvARB - .globl glUniform3i ; .type glUniform3i,#function ; glUniform3i = glUniform3iARB - .globl glUniform3iv ; .type glUniform3iv,#function ; glUniform3iv = glUniform3ivARB - .globl glUniform4f ; .type glUniform4f,#function ; glUniform4f = glUniform4fARB - .globl glUniform4fv ; .type glUniform4fv,#function ; glUniform4fv = glUniform4fvARB - .globl glUniform4i ; .type glUniform4i,#function ; glUniform4i = glUniform4iARB - .globl glUniform4iv ; .type glUniform4iv,#function ; glUniform4iv = glUniform4ivARB - .globl glUniformMatrix2fv ; .type glUniformMatrix2fv,#function ; glUniformMatrix2fv = glUniformMatrix2fvARB - .globl glUniformMatrix3fv ; .type glUniformMatrix3fv,#function ; glUniformMatrix3fv = glUniformMatrix3fvARB - .globl glUniformMatrix4fv ; .type glUniformMatrix4fv,#function ; glUniformMatrix4fv = glUniformMatrix4fvARB - .globl glUseProgram ; .type glUseProgram,#function ; glUseProgram = glUseProgramObjectARB - .globl glValidateProgram ; .type glValidateProgram,#function ; glValidateProgram = glValidateProgramARB - .globl glBindAttribLocation ; .type glBindAttribLocation,#function ; glBindAttribLocation = glBindAttribLocationARB - .globl glGetActiveAttrib ; .type glGetActiveAttrib,#function ; glGetActiveAttrib = glGetActiveAttribARB - .globl glGetAttribLocation ; .type glGetAttribLocation,#function ; glGetAttribLocation = glGetAttribLocationARB - .globl glDrawBuffers ; .type glDrawBuffers,#function ; glDrawBuffers = glDrawBuffersARB - .globl glDrawBuffersATI ; .type glDrawBuffersATI,#function ; glDrawBuffersATI = glDrawBuffersARB - .globl glPointParameterf ; .type glPointParameterf,#function ; glPointParameterf = glPointParameterfEXT - .globl glPointParameterfARB ; .type glPointParameterfARB,#function ; glPointParameterfARB = glPointParameterfEXT - .globl glPointParameterfv ; .type glPointParameterfv,#function ; glPointParameterfv = glPointParameterfvEXT - .globl glPointParameterfvARB ; .type glPointParameterfvARB,#function ; glPointParameterfvARB = glPointParameterfvEXT - .globl glSecondaryColor3b ; .type glSecondaryColor3b,#function ; glSecondaryColor3b = glSecondaryColor3bEXT - .globl glSecondaryColor3bv ; .type glSecondaryColor3bv,#function ; glSecondaryColor3bv = glSecondaryColor3bvEXT - .globl glSecondaryColor3d ; .type glSecondaryColor3d,#function ; glSecondaryColor3d = glSecondaryColor3dEXT - .globl glSecondaryColor3dv ; .type glSecondaryColor3dv,#function ; glSecondaryColor3dv = glSecondaryColor3dvEXT - .globl glSecondaryColor3f ; .type glSecondaryColor3f,#function ; glSecondaryColor3f = glSecondaryColor3fEXT - .globl glSecondaryColor3fv ; .type glSecondaryColor3fv,#function ; glSecondaryColor3fv = glSecondaryColor3fvEXT - .globl glSecondaryColor3i ; .type glSecondaryColor3i,#function ; glSecondaryColor3i = glSecondaryColor3iEXT - .globl glSecondaryColor3iv ; .type glSecondaryColor3iv,#function ; glSecondaryColor3iv = glSecondaryColor3ivEXT - .globl glSecondaryColor3s ; .type glSecondaryColor3s,#function ; glSecondaryColor3s = glSecondaryColor3sEXT - .globl glSecondaryColor3sv ; .type glSecondaryColor3sv,#function ; glSecondaryColor3sv = glSecondaryColor3svEXT - .globl glSecondaryColor3ub ; .type glSecondaryColor3ub,#function ; glSecondaryColor3ub = glSecondaryColor3ubEXT - .globl glSecondaryColor3ubv ; .type glSecondaryColor3ubv,#function ; glSecondaryColor3ubv = glSecondaryColor3ubvEXT - .globl glSecondaryColor3ui ; .type glSecondaryColor3ui,#function ; glSecondaryColor3ui = glSecondaryColor3uiEXT - .globl glSecondaryColor3uiv ; .type glSecondaryColor3uiv,#function ; glSecondaryColor3uiv = glSecondaryColor3uivEXT - .globl glSecondaryColor3us ; .type glSecondaryColor3us,#function ; glSecondaryColor3us = glSecondaryColor3usEXT - .globl glSecondaryColor3usv ; .type glSecondaryColor3usv,#function ; glSecondaryColor3usv = glSecondaryColor3usvEXT - .globl glSecondaryColorPointer ; .type glSecondaryColorPointer,#function ; glSecondaryColorPointer = glSecondaryColorPointerEXT - .globl glMultiDrawArrays ; .type glMultiDrawArrays,#function ; glMultiDrawArrays = glMultiDrawArraysEXT - .globl glMultiDrawElements ; .type glMultiDrawElements,#function ; glMultiDrawElements = glMultiDrawElementsEXT - .globl glFogCoordPointer ; .type glFogCoordPointer,#function ; glFogCoordPointer = glFogCoordPointerEXT - .globl glFogCoordd ; .type glFogCoordd,#function ; glFogCoordd = glFogCoorddEXT - .globl glFogCoorddv ; .type glFogCoorddv,#function ; glFogCoorddv = glFogCoorddvEXT - .globl glFogCoordf ; .type glFogCoordf,#function ; glFogCoordf = glFogCoordfEXT - .globl glFogCoordfv ; .type glFogCoordfv,#function ; glFogCoordfv = glFogCoordfvEXT - .globl glBlendFuncSeparate ; .type glBlendFuncSeparate,#function ; glBlendFuncSeparate = glBlendFuncSeparateEXT - .globl glWindowPos2d ; .type glWindowPos2d,#function ; glWindowPos2d = glWindowPos2dMESA - .globl glWindowPos2dARB ; .type glWindowPos2dARB,#function ; glWindowPos2dARB = glWindowPos2dMESA - .globl glWindowPos2dv ; .type glWindowPos2dv,#function ; glWindowPos2dv = glWindowPos2dvMESA - .globl glWindowPos2dvARB ; .type glWindowPos2dvARB,#function ; glWindowPos2dvARB = glWindowPos2dvMESA - .globl glWindowPos2f ; .type glWindowPos2f,#function ; glWindowPos2f = glWindowPos2fMESA - .globl glWindowPos2fARB ; .type glWindowPos2fARB,#function ; glWindowPos2fARB = glWindowPos2fMESA - .globl glWindowPos2fv ; .type glWindowPos2fv,#function ; glWindowPos2fv = glWindowPos2fvMESA - .globl glWindowPos2fvARB ; .type glWindowPos2fvARB,#function ; glWindowPos2fvARB = glWindowPos2fvMESA - .globl glWindowPos2i ; .type glWindowPos2i,#function ; glWindowPos2i = glWindowPos2iMESA - .globl glWindowPos2iARB ; .type glWindowPos2iARB,#function ; glWindowPos2iARB = glWindowPos2iMESA - .globl glWindowPos2iv ; .type glWindowPos2iv,#function ; glWindowPos2iv = glWindowPos2ivMESA - .globl glWindowPos2ivARB ; .type glWindowPos2ivARB,#function ; glWindowPos2ivARB = glWindowPos2ivMESA - .globl glWindowPos2s ; .type glWindowPos2s,#function ; glWindowPos2s = glWindowPos2sMESA - .globl glWindowPos2sARB ; .type glWindowPos2sARB,#function ; glWindowPos2sARB = glWindowPos2sMESA - .globl glWindowPos2sv ; .type glWindowPos2sv,#function ; glWindowPos2sv = glWindowPos2svMESA - .globl glWindowPos2svARB ; .type glWindowPos2svARB,#function ; glWindowPos2svARB = glWindowPos2svMESA - .globl glWindowPos3d ; .type glWindowPos3d,#function ; glWindowPos3d = glWindowPos3dMESA - .globl glWindowPos3dARB ; .type glWindowPos3dARB,#function ; glWindowPos3dARB = glWindowPos3dMESA - .globl glWindowPos3dv ; .type glWindowPos3dv,#function ; glWindowPos3dv = glWindowPos3dvMESA - .globl glWindowPos3dvARB ; .type glWindowPos3dvARB,#function ; glWindowPos3dvARB = glWindowPos3dvMESA - .globl glWindowPos3f ; .type glWindowPos3f,#function ; glWindowPos3f = glWindowPos3fMESA - .globl glWindowPos3fARB ; .type glWindowPos3fARB,#function ; glWindowPos3fARB = glWindowPos3fMESA - .globl glWindowPos3fv ; .type glWindowPos3fv,#function ; glWindowPos3fv = glWindowPos3fvMESA - .globl glWindowPos3fvARB ; .type glWindowPos3fvARB,#function ; glWindowPos3fvARB = glWindowPos3fvMESA - .globl glWindowPos3i ; .type glWindowPos3i,#function ; glWindowPos3i = glWindowPos3iMESA - .globl glWindowPos3iARB ; .type glWindowPos3iARB,#function ; glWindowPos3iARB = glWindowPos3iMESA - .globl glWindowPos3iv ; .type glWindowPos3iv,#function ; glWindowPos3iv = glWindowPos3ivMESA - .globl glWindowPos3ivARB ; .type glWindowPos3ivARB,#function ; glWindowPos3ivARB = glWindowPos3ivMESA - .globl glWindowPos3s ; .type glWindowPos3s,#function ; glWindowPos3s = glWindowPos3sMESA - .globl glWindowPos3sARB ; .type glWindowPos3sARB,#function ; glWindowPos3sARB = glWindowPos3sMESA - .globl glWindowPos3sv ; .type glWindowPos3sv,#function ; glWindowPos3sv = glWindowPos3svMESA - .globl glWindowPos3svARB ; .type glWindowPos3svARB,#function ; glWindowPos3svARB = glWindowPos3svMESA - .globl glBindProgramARB ; .type glBindProgramARB,#function ; glBindProgramARB = glBindProgramNV - .globl glDeleteProgramsARB ; .type glDeleteProgramsARB,#function ; glDeleteProgramsARB = glDeleteProgramsNV - .globl glGenProgramsARB ; .type glGenProgramsARB,#function ; glGenProgramsARB = glGenProgramsNV - .globl glGetVertexAttribPointerv ; .type glGetVertexAttribPointerv,#function ; glGetVertexAttribPointerv = glGetVertexAttribPointervNV - .globl glGetVertexAttribPointervARB ; .type glGetVertexAttribPointervARB,#function ; glGetVertexAttribPointervARB = glGetVertexAttribPointervNV - .globl glIsProgramARB ; .type glIsProgramARB,#function ; glIsProgramARB = glIsProgramNV - .globl glPointParameteri ; .type glPointParameteri,#function ; glPointParameteri = glPointParameteriNV - .globl glPointParameteriv ; .type glPointParameteriv,#function ; glPointParameteriv = glPointParameterivNV - .globl glBlendEquationSeparate ; .type glBlendEquationSeparate,#function ; glBlendEquationSeparate = glBlendEquationSeparateEXT - .globl glBindFramebuffer ; .type glBindFramebuffer,#function ; glBindFramebuffer = glBindFramebufferEXT - .globl glBindRenderbuffer ; .type glBindRenderbuffer,#function ; glBindRenderbuffer = glBindRenderbufferEXT - .globl glCheckFramebufferStatus ; .type glCheckFramebufferStatus,#function ; glCheckFramebufferStatus = glCheckFramebufferStatusEXT - .globl glDeleteFramebuffers ; .type glDeleteFramebuffers,#function ; glDeleteFramebuffers = glDeleteFramebuffersEXT - .globl glDeleteRenderbuffers ; .type glDeleteRenderbuffers,#function ; glDeleteRenderbuffers = glDeleteRenderbuffersEXT - .globl glFramebufferRenderbuffer ; .type glFramebufferRenderbuffer,#function ; glFramebufferRenderbuffer = glFramebufferRenderbufferEXT - .globl glFramebufferTexture1D ; .type glFramebufferTexture1D,#function ; glFramebufferTexture1D = glFramebufferTexture1DEXT - .globl glFramebufferTexture2D ; .type glFramebufferTexture2D,#function ; glFramebufferTexture2D = glFramebufferTexture2DEXT - .globl glFramebufferTexture3D ; .type glFramebufferTexture3D,#function ; glFramebufferTexture3D = glFramebufferTexture3DEXT - .globl glGenFramebuffers ; .type glGenFramebuffers,#function ; glGenFramebuffers = glGenFramebuffersEXT - .globl glGenRenderbuffers ; .type glGenRenderbuffers,#function ; glGenRenderbuffers = glGenRenderbuffersEXT - .globl glGenerateMipmap ; .type glGenerateMipmap,#function ; glGenerateMipmap = glGenerateMipmapEXT - .globl glGetFramebufferAttachmentParameteriv ; .type glGetFramebufferAttachmentParameteriv,#function ; glGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameterivEXT - .globl glGetRenderbufferParameteriv ; .type glGetRenderbufferParameteriv,#function ; glGetRenderbufferParameteriv = glGetRenderbufferParameterivEXT - .globl glIsFramebuffer ; .type glIsFramebuffer,#function ; glIsFramebuffer = glIsFramebufferEXT - .globl glIsRenderbuffer ; .type glIsRenderbuffer,#function ; glIsRenderbuffer = glIsRenderbufferEXT - .globl glRenderbufferStorage ; .type glRenderbufferStorage,#function ; glRenderbufferStorage = glRenderbufferStorageEXT - .globl glBlitFramebuffer ; .type glBlitFramebuffer,#function ; glBlitFramebuffer = glBlitFramebufferEXT - .globl glFramebufferTextureLayer ; .type glFramebufferTextureLayer,#function ; glFramebufferTextureLayer = glFramebufferTextureLayerEXT + GL_STUB_ALIAS(glSeparableFilter2DEXT, glSeparableFilter2D) +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glGetHistogramEXT, glGetHistogram) +#endif +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glGetHistogramParameterfvEXT, glGetHistogramParameterfv) +#endif +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glGetHistogramParameterivEXT, glGetHistogramParameteriv) +#endif +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glGetMinmaxEXT, glGetMinmax) +#endif +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glGetMinmaxParameterfvEXT, glGetMinmaxParameterfv) +#endif +#ifndef GLX_INDIRECT_RENDERING + GL_STUB_ALIAS(glGetMinmaxParameterivEXT, glGetMinmaxParameteriv) +#endif + GL_STUB_ALIAS(glHistogramEXT, glHistogram) + GL_STUB_ALIAS(glMinmaxEXT, glMinmax) + GL_STUB_ALIAS(glResetHistogramEXT, glResetHistogram) + GL_STUB_ALIAS(glResetMinmaxEXT, glResetMinmax) + GL_STUB_ALIAS(glTexImage3DEXT, glTexImage3D) + GL_STUB_ALIAS(glTexSubImage3DEXT, glTexSubImage3D) + GL_STUB_ALIAS(glCopyTexSubImage3DEXT, glCopyTexSubImage3D) + GL_STUB_ALIAS(glActiveTexture, glActiveTextureARB) + GL_STUB_ALIAS(glClientActiveTexture, glClientActiveTextureARB) + GL_STUB_ALIAS(glMultiTexCoord1d, glMultiTexCoord1dARB) + GL_STUB_ALIAS(glMultiTexCoord1dv, glMultiTexCoord1dvARB) + GL_STUB_ALIAS(glMultiTexCoord1f, glMultiTexCoord1fARB) + GL_STUB_ALIAS(glMultiTexCoord1fv, glMultiTexCoord1fvARB) + GL_STUB_ALIAS(glMultiTexCoord1i, glMultiTexCoord1iARB) + GL_STUB_ALIAS(glMultiTexCoord1iv, glMultiTexCoord1ivARB) + GL_STUB_ALIAS(glMultiTexCoord1s, glMultiTexCoord1sARB) + GL_STUB_ALIAS(glMultiTexCoord1sv, glMultiTexCoord1svARB) + GL_STUB_ALIAS(glMultiTexCoord2d, glMultiTexCoord2dARB) + GL_STUB_ALIAS(glMultiTexCoord2dv, glMultiTexCoord2dvARB) + GL_STUB_ALIAS(glMultiTexCoord2f, glMultiTexCoord2fARB) + GL_STUB_ALIAS(glMultiTexCoord2fv, glMultiTexCoord2fvARB) + GL_STUB_ALIAS(glMultiTexCoord2i, glMultiTexCoord2iARB) + GL_STUB_ALIAS(glMultiTexCoord2iv, glMultiTexCoord2ivARB) + GL_STUB_ALIAS(glMultiTexCoord2s, glMultiTexCoord2sARB) + GL_STUB_ALIAS(glMultiTexCoord2sv, glMultiTexCoord2svARB) + GL_STUB_ALIAS(glMultiTexCoord3d, glMultiTexCoord3dARB) + GL_STUB_ALIAS(glMultiTexCoord3dv, glMultiTexCoord3dvARB) + GL_STUB_ALIAS(glMultiTexCoord3f, glMultiTexCoord3fARB) + GL_STUB_ALIAS(glMultiTexCoord3fv, glMultiTexCoord3fvARB) + GL_STUB_ALIAS(glMultiTexCoord3i, glMultiTexCoord3iARB) + GL_STUB_ALIAS(glMultiTexCoord3iv, glMultiTexCoord3ivARB) + GL_STUB_ALIAS(glMultiTexCoord3s, glMultiTexCoord3sARB) + GL_STUB_ALIAS(glMultiTexCoord3sv, glMultiTexCoord3svARB) + GL_STUB_ALIAS(glMultiTexCoord4d, glMultiTexCoord4dARB) + GL_STUB_ALIAS(glMultiTexCoord4dv, glMultiTexCoord4dvARB) + GL_STUB_ALIAS(glMultiTexCoord4f, glMultiTexCoord4fARB) + GL_STUB_ALIAS(glMultiTexCoord4fv, glMultiTexCoord4fvARB) + GL_STUB_ALIAS(glMultiTexCoord4i, glMultiTexCoord4iARB) + GL_STUB_ALIAS(glMultiTexCoord4iv, glMultiTexCoord4ivARB) + GL_STUB_ALIAS(glMultiTexCoord4s, glMultiTexCoord4sARB) + GL_STUB_ALIAS(glMultiTexCoord4sv, glMultiTexCoord4svARB) + GL_STUB_ALIAS(glStencilOpSeparateATI, glStencilOpSeparate) + GL_STUB_ALIAS(glLoadTransposeMatrixd, glLoadTransposeMatrixdARB) + GL_STUB_ALIAS(glLoadTransposeMatrixf, glLoadTransposeMatrixfARB) + GL_STUB_ALIAS(glMultTransposeMatrixd, glMultTransposeMatrixdARB) + GL_STUB_ALIAS(glMultTransposeMatrixf, glMultTransposeMatrixfARB) + GL_STUB_ALIAS(glSampleCoverage, glSampleCoverageARB) + GL_STUB_ALIAS(glCompressedTexImage1D, glCompressedTexImage1DARB) + GL_STUB_ALIAS(glCompressedTexImage2D, glCompressedTexImage2DARB) + GL_STUB_ALIAS(glCompressedTexImage3D, glCompressedTexImage3DARB) + GL_STUB_ALIAS(glCompressedTexSubImage1D, glCompressedTexSubImage1DARB) + GL_STUB_ALIAS(glCompressedTexSubImage2D, glCompressedTexSubImage2DARB) + GL_STUB_ALIAS(glCompressedTexSubImage3D, glCompressedTexSubImage3DARB) + GL_STUB_ALIAS(glGetCompressedTexImage, glGetCompressedTexImageARB) + GL_STUB_ALIAS(glDisableVertexAttribArray, glDisableVertexAttribArrayARB) + GL_STUB_ALIAS(glEnableVertexAttribArray, glEnableVertexAttribArrayARB) + GL_STUB_ALIAS(glGetVertexAttribdv, glGetVertexAttribdvARB) + GL_STUB_ALIAS(glGetVertexAttribfv, glGetVertexAttribfvARB) + GL_STUB_ALIAS(glGetVertexAttribiv, glGetVertexAttribivARB) + GL_STUB_ALIAS(glProgramParameter4dNV, glProgramEnvParameter4dARB) + GL_STUB_ALIAS(glProgramParameter4dvNV, glProgramEnvParameter4dvARB) + GL_STUB_ALIAS(glProgramParameter4fNV, glProgramEnvParameter4fARB) + GL_STUB_ALIAS(glProgramParameter4fvNV, glProgramEnvParameter4fvARB) + GL_STUB_ALIAS(glVertexAttrib1d, glVertexAttrib1dARB) + GL_STUB_ALIAS(glVertexAttrib1dv, glVertexAttrib1dvARB) + GL_STUB_ALIAS(glVertexAttrib1f, glVertexAttrib1fARB) + GL_STUB_ALIAS(glVertexAttrib1fv, glVertexAttrib1fvARB) + GL_STUB_ALIAS(glVertexAttrib1s, glVertexAttrib1sARB) + GL_STUB_ALIAS(glVertexAttrib1sv, glVertexAttrib1svARB) + GL_STUB_ALIAS(glVertexAttrib2d, glVertexAttrib2dARB) + GL_STUB_ALIAS(glVertexAttrib2dv, glVertexAttrib2dvARB) + GL_STUB_ALIAS(glVertexAttrib2f, glVertexAttrib2fARB) + GL_STUB_ALIAS(glVertexAttrib2fv, glVertexAttrib2fvARB) + GL_STUB_ALIAS(glVertexAttrib2s, glVertexAttrib2sARB) + GL_STUB_ALIAS(glVertexAttrib2sv, glVertexAttrib2svARB) + GL_STUB_ALIAS(glVertexAttrib3d, glVertexAttrib3dARB) + GL_STUB_ALIAS(glVertexAttrib3dv, glVertexAttrib3dvARB) + GL_STUB_ALIAS(glVertexAttrib3f, glVertexAttrib3fARB) + GL_STUB_ALIAS(glVertexAttrib3fv, glVertexAttrib3fvARB) + GL_STUB_ALIAS(glVertexAttrib3s, glVertexAttrib3sARB) + GL_STUB_ALIAS(glVertexAttrib3sv, glVertexAttrib3svARB) + GL_STUB_ALIAS(glVertexAttrib4Nbv, glVertexAttrib4NbvARB) + GL_STUB_ALIAS(glVertexAttrib4Niv, glVertexAttrib4NivARB) + GL_STUB_ALIAS(glVertexAttrib4Nsv, glVertexAttrib4NsvARB) + GL_STUB_ALIAS(glVertexAttrib4Nub, glVertexAttrib4NubARB) + GL_STUB_ALIAS(glVertexAttrib4Nubv, glVertexAttrib4NubvARB) + GL_STUB_ALIAS(glVertexAttrib4Nuiv, glVertexAttrib4NuivARB) + GL_STUB_ALIAS(glVertexAttrib4Nusv, glVertexAttrib4NusvARB) + GL_STUB_ALIAS(glVertexAttrib4bv, glVertexAttrib4bvARB) + GL_STUB_ALIAS(glVertexAttrib4d, glVertexAttrib4dARB) + GL_STUB_ALIAS(glVertexAttrib4dv, glVertexAttrib4dvARB) + GL_STUB_ALIAS(glVertexAttrib4f, glVertexAttrib4fARB) + GL_STUB_ALIAS(glVertexAttrib4fv, glVertexAttrib4fvARB) + GL_STUB_ALIAS(glVertexAttrib4iv, glVertexAttrib4ivARB) + GL_STUB_ALIAS(glVertexAttrib4s, glVertexAttrib4sARB) + GL_STUB_ALIAS(glVertexAttrib4sv, glVertexAttrib4svARB) + GL_STUB_ALIAS(glVertexAttrib4ubv, glVertexAttrib4ubvARB) + GL_STUB_ALIAS(glVertexAttrib4uiv, glVertexAttrib4uivARB) + GL_STUB_ALIAS(glVertexAttrib4usv, glVertexAttrib4usvARB) + GL_STUB_ALIAS(glVertexAttribPointer, glVertexAttribPointerARB) + GL_STUB_ALIAS(glBindBuffer, glBindBufferARB) + GL_STUB_ALIAS(glBufferData, glBufferDataARB) + GL_STUB_ALIAS(glBufferSubData, glBufferSubDataARB) + GL_STUB_ALIAS(glDeleteBuffers, glDeleteBuffersARB) + GL_STUB_ALIAS(glGenBuffers, glGenBuffersARB) + GL_STUB_ALIAS(glGetBufferParameteriv, glGetBufferParameterivARB) + GL_STUB_ALIAS(glGetBufferPointerv, glGetBufferPointervARB) + GL_STUB_ALIAS(glGetBufferSubData, glGetBufferSubDataARB) + GL_STUB_ALIAS(glIsBuffer, glIsBufferARB) + GL_STUB_ALIAS(glMapBuffer, glMapBufferARB) + GL_STUB_ALIAS(glUnmapBuffer, glUnmapBufferARB) + GL_STUB_ALIAS(glBeginQuery, glBeginQueryARB) + GL_STUB_ALIAS(glDeleteQueries, glDeleteQueriesARB) + GL_STUB_ALIAS(glEndQuery, glEndQueryARB) + GL_STUB_ALIAS(glGenQueries, glGenQueriesARB) + GL_STUB_ALIAS(glGetQueryObjectiv, glGetQueryObjectivARB) + GL_STUB_ALIAS(glGetQueryObjectuiv, glGetQueryObjectuivARB) + GL_STUB_ALIAS(glGetQueryiv, glGetQueryivARB) + GL_STUB_ALIAS(glIsQuery, glIsQueryARB) + GL_STUB_ALIAS(glCompileShader, glCompileShaderARB) + GL_STUB_ALIAS(glGetActiveUniform, glGetActiveUniformARB) + GL_STUB_ALIAS(glGetShaderSource, glGetShaderSourceARB) + GL_STUB_ALIAS(glGetUniformLocation, glGetUniformLocationARB) + GL_STUB_ALIAS(glGetUniformfv, glGetUniformfvARB) + GL_STUB_ALIAS(glGetUniformiv, glGetUniformivARB) + GL_STUB_ALIAS(glLinkProgram, glLinkProgramARB) + GL_STUB_ALIAS(glShaderSource, glShaderSourceARB) + GL_STUB_ALIAS(glUniform1f, glUniform1fARB) + GL_STUB_ALIAS(glUniform1fv, glUniform1fvARB) + GL_STUB_ALIAS(glUniform1i, glUniform1iARB) + GL_STUB_ALIAS(glUniform1iv, glUniform1ivARB) + GL_STUB_ALIAS(glUniform2f, glUniform2fARB) + GL_STUB_ALIAS(glUniform2fv, glUniform2fvARB) + GL_STUB_ALIAS(glUniform2i, glUniform2iARB) + GL_STUB_ALIAS(glUniform2iv, glUniform2ivARB) + GL_STUB_ALIAS(glUniform3f, glUniform3fARB) + GL_STUB_ALIAS(glUniform3fv, glUniform3fvARB) + GL_STUB_ALIAS(glUniform3i, glUniform3iARB) + GL_STUB_ALIAS(glUniform3iv, glUniform3ivARB) + GL_STUB_ALIAS(glUniform4f, glUniform4fARB) + GL_STUB_ALIAS(glUniform4fv, glUniform4fvARB) + GL_STUB_ALIAS(glUniform4i, glUniform4iARB) + GL_STUB_ALIAS(glUniform4iv, glUniform4ivARB) + GL_STUB_ALIAS(glUniformMatrix2fv, glUniformMatrix2fvARB) + GL_STUB_ALIAS(glUniformMatrix3fv, glUniformMatrix3fvARB) + GL_STUB_ALIAS(glUniformMatrix4fv, glUniformMatrix4fvARB) + GL_STUB_ALIAS(glUseProgram, glUseProgramObjectARB) + GL_STUB_ALIAS(glValidateProgram, glValidateProgramARB) + GL_STUB_ALIAS(glBindAttribLocation, glBindAttribLocationARB) + GL_STUB_ALIAS(glGetActiveAttrib, glGetActiveAttribARB) + GL_STUB_ALIAS(glGetAttribLocation, glGetAttribLocationARB) + GL_STUB_ALIAS(glDrawBuffers, glDrawBuffersARB) + GL_STUB_ALIAS(glDrawBuffersATI, glDrawBuffersARB) + GL_STUB_ALIAS(glPointParameterf, glPointParameterfEXT) + GL_STUB_ALIAS(glPointParameterfARB, glPointParameterfEXT) + GL_STUB_ALIAS(glPointParameterfSGIS, glPointParameterfEXT) + GL_STUB_ALIAS(glPointParameterfv, glPointParameterfvEXT) + GL_STUB_ALIAS(glPointParameterfvARB, glPointParameterfvEXT) + GL_STUB_ALIAS(glPointParameterfvSGIS, glPointParameterfvEXT) + GL_STUB_ALIAS(glSecondaryColor3b, glSecondaryColor3bEXT) + GL_STUB_ALIAS(glSecondaryColor3bv, glSecondaryColor3bvEXT) + GL_STUB_ALIAS(glSecondaryColor3d, glSecondaryColor3dEXT) + GL_STUB_ALIAS(glSecondaryColor3dv, glSecondaryColor3dvEXT) + GL_STUB_ALIAS(glSecondaryColor3f, glSecondaryColor3fEXT) + GL_STUB_ALIAS(glSecondaryColor3fv, glSecondaryColor3fvEXT) + GL_STUB_ALIAS(glSecondaryColor3i, glSecondaryColor3iEXT) + GL_STUB_ALIAS(glSecondaryColor3iv, glSecondaryColor3ivEXT) + GL_STUB_ALIAS(glSecondaryColor3s, glSecondaryColor3sEXT) + GL_STUB_ALIAS(glSecondaryColor3sv, glSecondaryColor3svEXT) + GL_STUB_ALIAS(glSecondaryColor3ub, glSecondaryColor3ubEXT) + GL_STUB_ALIAS(glSecondaryColor3ubv, glSecondaryColor3ubvEXT) + GL_STUB_ALIAS(glSecondaryColor3ui, glSecondaryColor3uiEXT) + GL_STUB_ALIAS(glSecondaryColor3uiv, glSecondaryColor3uivEXT) + GL_STUB_ALIAS(glSecondaryColor3us, glSecondaryColor3usEXT) + GL_STUB_ALIAS(glSecondaryColor3usv, glSecondaryColor3usvEXT) + GL_STUB_ALIAS(glSecondaryColorPointer, glSecondaryColorPointerEXT) + GL_STUB_ALIAS(glMultiDrawArrays, glMultiDrawArraysEXT) + GL_STUB_ALIAS(glMultiDrawElements, glMultiDrawElementsEXT) + GL_STUB_ALIAS(glFogCoordPointer, glFogCoordPointerEXT) + GL_STUB_ALIAS(glFogCoordd, glFogCoorddEXT) + GL_STUB_ALIAS(glFogCoorddv, glFogCoorddvEXT) + GL_STUB_ALIAS(glFogCoordf, glFogCoordfEXT) + GL_STUB_ALIAS(glFogCoordfv, glFogCoordfvEXT) + GL_STUB_ALIAS(glBlendFuncSeparate, glBlendFuncSeparateEXT) + GL_STUB_ALIAS(glBlendFuncSeparateINGR, glBlendFuncSeparateEXT) + GL_STUB_ALIAS(glWindowPos2d, glWindowPos2dMESA) + GL_STUB_ALIAS(glWindowPos2dARB, glWindowPos2dMESA) + GL_STUB_ALIAS(glWindowPos2dv, glWindowPos2dvMESA) + GL_STUB_ALIAS(glWindowPos2dvARB, glWindowPos2dvMESA) + GL_STUB_ALIAS(glWindowPos2f, glWindowPos2fMESA) + GL_STUB_ALIAS(glWindowPos2fARB, glWindowPos2fMESA) + GL_STUB_ALIAS(glWindowPos2fv, glWindowPos2fvMESA) + GL_STUB_ALIAS(glWindowPos2fvARB, glWindowPos2fvMESA) + GL_STUB_ALIAS(glWindowPos2i, glWindowPos2iMESA) + GL_STUB_ALIAS(glWindowPos2iARB, glWindowPos2iMESA) + GL_STUB_ALIAS(glWindowPos2iv, glWindowPos2ivMESA) + GL_STUB_ALIAS(glWindowPos2ivARB, glWindowPos2ivMESA) + GL_STUB_ALIAS(glWindowPos2s, glWindowPos2sMESA) + GL_STUB_ALIAS(glWindowPos2sARB, glWindowPos2sMESA) + GL_STUB_ALIAS(glWindowPos2sv, glWindowPos2svMESA) + GL_STUB_ALIAS(glWindowPos2svARB, glWindowPos2svMESA) + GL_STUB_ALIAS(glWindowPos3d, glWindowPos3dMESA) + GL_STUB_ALIAS(glWindowPos3dARB, glWindowPos3dMESA) + GL_STUB_ALIAS(glWindowPos3dv, glWindowPos3dvMESA) + GL_STUB_ALIAS(glWindowPos3dvARB, glWindowPos3dvMESA) + GL_STUB_ALIAS(glWindowPos3f, glWindowPos3fMESA) + GL_STUB_ALIAS(glWindowPos3fARB, glWindowPos3fMESA) + GL_STUB_ALIAS(glWindowPos3fv, glWindowPos3fvMESA) + GL_STUB_ALIAS(glWindowPos3fvARB, glWindowPos3fvMESA) + GL_STUB_ALIAS(glWindowPos3i, glWindowPos3iMESA) + GL_STUB_ALIAS(glWindowPos3iARB, glWindowPos3iMESA) + GL_STUB_ALIAS(glWindowPos3iv, glWindowPos3ivMESA) + GL_STUB_ALIAS(glWindowPos3ivARB, glWindowPos3ivMESA) + GL_STUB_ALIAS(glWindowPos3s, glWindowPos3sMESA) + GL_STUB_ALIAS(glWindowPos3sARB, glWindowPos3sMESA) + GL_STUB_ALIAS(glWindowPos3sv, glWindowPos3svMESA) + GL_STUB_ALIAS(glWindowPos3svARB, glWindowPos3svMESA) + GL_STUB_ALIAS(glBindProgramARB, glBindProgramNV) + GL_STUB_ALIAS(glDeleteProgramsARB, glDeleteProgramsNV) + GL_STUB_ALIAS(glGenProgramsARB, glGenProgramsNV) + GL_STUB_ALIAS(glGetVertexAttribPointerv, glGetVertexAttribPointervNV) + GL_STUB_ALIAS(glGetVertexAttribPointervARB, glGetVertexAttribPointervNV) + GL_STUB_ALIAS(glIsProgramARB, glIsProgramNV) + GL_STUB_ALIAS(glPointParameteri, glPointParameteriNV) + GL_STUB_ALIAS(glPointParameteriv, glPointParameterivNV) + GL_STUB_ALIAS(glBindFramebuffer, glBindFramebufferEXT) + GL_STUB_ALIAS(glBindRenderbuffer, glBindRenderbufferEXT) + GL_STUB_ALIAS(glCheckFramebufferStatus, glCheckFramebufferStatusEXT) + GL_STUB_ALIAS(glDeleteFramebuffers, glDeleteFramebuffersEXT) + GL_STUB_ALIAS(glDeleteRenderbuffers, glDeleteRenderbuffersEXT) + GL_STUB_ALIAS(glFramebufferRenderbuffer, glFramebufferRenderbufferEXT) + GL_STUB_ALIAS(glFramebufferTexture1D, glFramebufferTexture1DEXT) + GL_STUB_ALIAS(glFramebufferTexture2D, glFramebufferTexture2DEXT) + GL_STUB_ALIAS(glFramebufferTexture3D, glFramebufferTexture3DEXT) + GL_STUB_ALIAS(glGenFramebuffers, glGenFramebuffersEXT) + GL_STUB_ALIAS(glGenRenderbuffers, glGenRenderbuffersEXT) + GL_STUB_ALIAS(glGenerateMipmap, glGenerateMipmapEXT) + GL_STUB_ALIAS(glGetFramebufferAttachmentParameteriv, glGetFramebufferAttachmentParameterivEXT) + GL_STUB_ALIAS(glGetRenderbufferParameteriv, glGetRenderbufferParameterivEXT) + GL_STUB_ALIAS(glIsFramebuffer, glIsFramebufferEXT) + GL_STUB_ALIAS(glIsRenderbuffer, glIsRenderbufferEXT) + GL_STUB_ALIAS(glRenderbufferStorage, glRenderbufferStorageEXT) + GL_STUB_ALIAS(glFramebufferTextureLayer, glFramebufferTextureLayerEXT) + + .globl gl_dispatch_functions_end + HIDDEN(gl_dispatch_functions_end) +gl_dispatch_functions_end: diff --git a/src/mesa/sparc/norm.S b/src/mesa/sparc/norm.S index 44950a10a5..117d36fa22 100644 --- a/src/mesa/sparc/norm.S +++ b/src/mesa/sparc/norm.S @@ -1,11 +1,8 @@ #include "sparc_matrix.h" -#if defined(SVR4) || defined(__SVR4) || defined(__svr4__) - /* Solaris requires this for 64-bit. */ .register %g2, #scratch .register %g3, #scratch -#endif .text @@ -98,7 +95,7 @@ _mesa_sparc_transform_normalize_normals: cmp %o4, %g1 ! continue if (i < count) bl 1b - add %g3, 0x0c, %g3 ! advance out vector pointer + add %g3, 0x10, %g3 ! advance out vector pointer ba 7f nop @@ -154,7 +151,7 @@ _mesa_sparc_transform_normalize_normals: cmp %o4, %g1 ! continue if (i < count) bl 5b - add %g3, 0x0c, %g3 ! advance out vector pointer + add %g3, 0x10, %g3 ! advance out vector pointer 7: retl nop @@ -225,7 +222,7 @@ _mesa_sparc_transform_normalize_normals_no_rot: cmp %o4, %g1 ! continue if (i < count) bl 1b - add %g3, 0x0c, %g3 ! advance out vector pointer + add %g3, 0x10, %g3 ! advance out vector pointer ba 7f nop @@ -263,7 +260,7 @@ _mesa_sparc_transform_normalize_normals_no_rot: cmp %o4, %g1 ! continue if (i < count) bl 5b - add %g3, 0x0c, %g3 ! advance out vector pointer + add %g3, 0x10, %g3 ! advance out vector pointer 7: retl nop @@ -314,7 +311,7 @@ _mesa_sparc_transform_rescale_normals_no_rot: cmp %o4, %g1 ! continue if (i < count) bl 1b - add %g3, 0x0c, %g3 ! advance out vector pointer + add %g3, 0x10, %g3 ! advance out vector pointer 7: retl nop @@ -379,7 +376,7 @@ _mesa_sparc_transform_rescale_normals: cmp %o4, %g1 ! continue if (i < count) bl 1b - add %g3, 0x0c, %g3 ! advance out vector pointer + add %g3, 0x10, %g3 ! advance out vector pointer 7: retl nop @@ -421,7 +418,7 @@ _mesa_sparc_transform_normals_no_rot: cmp %o4, %g1 ! continue if (i < count) bl 1b - add %g3, 0x0c, %g3 ! advance out vector pointer + add %g3, 0x10, %g3 ! advance out vector pointer 7: retl nop @@ -471,7 +468,7 @@ _mesa_sparc_transform_normals: cmp %o4, %g1 ! continue if (i < count) bl 1b - add %g3, 0x0c, %g3 ! advance out vector pointer + add %g3, 0x10, %g3 ! advance out vector pointer 7: retl nop @@ -529,7 +526,7 @@ _mesa_sparc_normalize_normals: cmp %o4, %g1 ! continue if (i < count) bl 1b - add %g3, 0x0c, %g3 ! advance out vector pointer + add %g3, 0x10, %g3 ! advance out vector pointer ba 7f nop @@ -557,7 +554,7 @@ _mesa_sparc_normalize_normals: cmp %o4, %g1 ! continue if (i < count) bl 5b - add %g3, 0x0c, %g3 ! advance out vector pointer + add %g3, 0x10, %g3 ! advance out vector pointer 7: retl nop @@ -602,7 +599,7 @@ _mesa_sparc_rescale_normals: cmp %o4, %g1 ! continue if (i < count) bl 1b - add %g3, 0x0c, %g3 ! advance out vector pointer + add %g3, 0x10, %g3 ! advance out vector pointer 7: retl nop diff --git a/src/mesa/sparc/sparc.c b/src/mesa/sparc/sparc.c index 84e8ac6723..d2286a2c83 100644 --- a/src/mesa/sparc/sparc.c +++ b/src/mesa/sparc/sparc.c @@ -113,8 +113,6 @@ void _mesa_init_all_sparc_transform_asm(void) _mesa_clip_tab[4] = _mesa_sparc_cliptest_points4; _mesa_clip_np_tab[4] = _mesa_sparc_cliptest_points4_np; -#if 0 - /* disable these too. See bug 673938 */ _mesa_normal_tab[NORM_TRANSFORM | NORM_NORMALIZE] = _mesa_sparc_transform_normalize_normals; _mesa_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_NORMALIZE] = @@ -131,7 +129,6 @@ void _mesa_init_all_sparc_transform_asm(void) _mesa_sparc_normalize_normals; _mesa_normal_tab[NORM_RESCALE] = _mesa_sparc_rescale_normals; -#endif #ifdef DEBUG_MATH _math_test_all_transform_functions("sparc"); @@ -140,38 +137,4 @@ void _mesa_init_all_sparc_transform_asm(void) #endif } -extern unsigned int _mesa_sparc_glapi_begin; -extern unsigned int _mesa_sparc_glapi_end; -extern void __glapi_sparc_icache_flush(unsigned int *); - #endif /* USE_SPARC_ASM */ - - -void _mesa_init_sparc_glapi_relocs(void) -{ -#ifdef USE_SPARC_ASM - unsigned int *insn_ptr, *end_ptr; - unsigned long disp_addr; - - insn_ptr = &_mesa_sparc_glapi_begin; - end_ptr = &_mesa_sparc_glapi_end; - disp_addr = (unsigned long) &_glapi_Dispatch; - - while (insn_ptr < end_ptr) { -#ifdef __arch64__ - insn_ptr[0] |= (disp_addr >> (32 + 10)); - insn_ptr[1] |= ((disp_addr & 0xffffffff) >> 10); - __glapi_sparc_icache_flush(&insn_ptr[0]); - insn_ptr[2] |= ((disp_addr >> 32) & ((1 << 10) - 1)); - insn_ptr[3] |= (disp_addr & ((1 << 10) - 1)); - __glapi_sparc_icache_flush(&insn_ptr[2]); - insn_ptr += 11; -#else - insn_ptr[0] |= (disp_addr >> 10); - insn_ptr[1] |= (disp_addr & ((1 << 10) - 1)); - __glapi_sparc_icache_flush(&insn_ptr[0]); - insn_ptr += 5; -#endif - } -#endif /* USE_SPARC_ASM */ -} diff --git a/src/mesa/sparc/sparc.h b/src/mesa/sparc/sparc.h index a98e4d0e40..b9ea336856 100644 --- a/src/mesa/sparc/sparc.h +++ b/src/mesa/sparc/sparc.h @@ -32,6 +32,5 @@ #define SPARC_H extern void _mesa_init_all_sparc_transform_asm(void); -extern void _mesa_init_sparc_glapi_relocs(void); #endif /* !(SPARC_H) */ diff --git a/src/mesa/state_tracker/st_atom.c b/src/mesa/state_tracker/st_atom.c index fc8587f459..f79092291b 100644 --- a/src/mesa/state_tracker/st_atom.c +++ b/src/mesa/state_tracker/st_atom.c @@ -69,7 +69,7 @@ void st_init_atoms( struct st_context *st ) { GLuint i; - st->atoms = malloc(sizeof(atoms)); + st->atoms = _mesa_malloc(sizeof(atoms)); st->nr_atoms = sizeof(atoms)/sizeof(*atoms); memcpy(st->atoms, atoms, sizeof(atoms)); @@ -92,7 +92,7 @@ void st_init_atoms( struct st_context *st ) void st_destroy_atoms( struct st_context *st ) { if (st->atoms) { - free(st->atoms); + _mesa_free(st->atoms); st->atoms = NULL; } } diff --git a/src/mesa/state_tracker/st_atom_constbuf.c b/src/mesa/state_tracker/st_atom_constbuf.c index 514b10cd02..fd81ac36d2 100644 --- a/src/mesa/state_tracker/st_atom_constbuf.c +++ b/src/mesa/state_tracker/st_atom_constbuf.c @@ -73,7 +73,7 @@ void st_upload_constants( struct st_context *st, /* We always need to get a new buffer, to keep the drivers simple and * avoid gratuitous rendering synchronization. */ - pipe_buffer_reference(pipe->screen, &cbuf->buffer, NULL ); + pipe_buffer_reference(&cbuf->buffer, NULL ); cbuf->buffer = pipe_buffer_create(pipe->screen, 16, PIPE_BUFFER_USAGE_CONSTANT, paramBytes ); @@ -85,12 +85,10 @@ void st_upload_constants( struct st_context *st, } /* load Mesa constants into the constant buffer */ - if (cbuf->buffer) { - void *map = pipe_buffer_map(pipe->screen, cbuf->buffer, - PIPE_BUFFER_USAGE_CPU_WRITE); - memcpy(map, params->ParameterValues, paramBytes); - pipe_buffer_unmap(pipe->screen, cbuf->buffer); - } + if (cbuf->buffer) + pipe_buffer_write(pipe->screen, cbuf->buffer, + 0, paramBytes, + params->ParameterValues); st->pipe->set_constant_buffer(st->pipe, id, 0, cbuf); } diff --git a/src/mesa/state_tracker/st_atom_depth.c b/src/mesa/state_tracker/st_atom_depth.c index 2d617bd95d..0aa128f947 100644 --- a/src/mesa/state_tracker/st_atom_depth.c +++ b/src/mesa/state_tracker/st_atom_depth.c @@ -94,36 +94,40 @@ static void update_depth_stencil_alpha(struct st_context *st) { struct pipe_depth_stencil_alpha_state *dsa = &st->state.depth_stencil; + GLcontext *ctx = st->ctx; memset(dsa, 0, sizeof(*dsa)); - dsa->depth.enabled = st->ctx->Depth.Test; - dsa->depth.writemask = st->ctx->Depth.Mask; - dsa->depth.func = st_compare_func_to_pipe(st->ctx->Depth.Func); + if (ctx->Depth.Test && ctx->DrawBuffer->Visual.depthBits > 0) { + dsa->depth.enabled = 1; + dsa->depth.writemask = ctx->Depth.Mask; + dsa->depth.func = st_compare_func_to_pipe(ctx->Depth.Func); + } - if (st->ctx->Query.CurrentOcclusionObject && - st->ctx->Query.CurrentOcclusionObject->Active) + if (ctx->Query.CurrentOcclusionObject && + ctx->Query.CurrentOcclusionObject->Active) dsa->depth.occlusion_count = 1; - if (st->ctx->Stencil.Enabled && st->ctx->Visual.stencilBits > 0) { + if (ctx->Stencil.Enabled && ctx->DrawBuffer->Visual.stencilBits > 0) { dsa->stencil[0].enabled = 1; - dsa->stencil[0].func = st_compare_func_to_pipe(st->ctx->Stencil.Function[0]); - dsa->stencil[0].fail_op = gl_stencil_op_to_pipe(st->ctx->Stencil.FailFunc[0]); - dsa->stencil[0].zfail_op = gl_stencil_op_to_pipe(st->ctx->Stencil.ZFailFunc[0]); - dsa->stencil[0].zpass_op = gl_stencil_op_to_pipe(st->ctx->Stencil.ZPassFunc[0]); - dsa->stencil[0].ref_value = st->ctx->Stencil.Ref[0] & 0xff; - dsa->stencil[0].valuemask = st->ctx->Stencil.ValueMask[0] & 0xff; - dsa->stencil[0].writemask = st->ctx->Stencil.WriteMask[0] & 0xff; - - if (st->ctx->Stencil._TestTwoSide) { + dsa->stencil[0].func = st_compare_func_to_pipe(ctx->Stencil.Function[0]); + dsa->stencil[0].fail_op = gl_stencil_op_to_pipe(ctx->Stencil.FailFunc[0]); + dsa->stencil[0].zfail_op = gl_stencil_op_to_pipe(ctx->Stencil.ZFailFunc[0]); + dsa->stencil[0].zpass_op = gl_stencil_op_to_pipe(ctx->Stencil.ZPassFunc[0]); + dsa->stencil[0].ref_value = ctx->Stencil.Ref[0] & 0xff; + dsa->stencil[0].valuemask = ctx->Stencil.ValueMask[0] & 0xff; + dsa->stencil[0].writemask = ctx->Stencil.WriteMask[0] & 0xff; + + if (ctx->Stencil._TestTwoSide) { + const GLuint back = ctx->Stencil._BackFace; dsa->stencil[1].enabled = 1; - dsa->stencil[1].func = st_compare_func_to_pipe(st->ctx->Stencil.Function[1]); - dsa->stencil[1].fail_op = gl_stencil_op_to_pipe(st->ctx->Stencil.FailFunc[1]); - dsa->stencil[1].zfail_op = gl_stencil_op_to_pipe(st->ctx->Stencil.ZFailFunc[1]); - dsa->stencil[1].zpass_op = gl_stencil_op_to_pipe(st->ctx->Stencil.ZPassFunc[1]); - dsa->stencil[1].ref_value = st->ctx->Stencil.Ref[1] & 0xff; - dsa->stencil[1].valuemask = st->ctx->Stencil.ValueMask[1] & 0xff; - dsa->stencil[1].writemask = st->ctx->Stencil.WriteMask[1] & 0xff; + dsa->stencil[1].func = st_compare_func_to_pipe(ctx->Stencil.Function[back]); + dsa->stencil[1].fail_op = gl_stencil_op_to_pipe(ctx->Stencil.FailFunc[back]); + dsa->stencil[1].zfail_op = gl_stencil_op_to_pipe(ctx->Stencil.ZFailFunc[back]); + dsa->stencil[1].zpass_op = gl_stencil_op_to_pipe(ctx->Stencil.ZPassFunc[back]); + dsa->stencil[1].ref_value = ctx->Stencil.Ref[back] & 0xff; + dsa->stencil[1].valuemask = ctx->Stencil.ValueMask[back] & 0xff; + dsa->stencil[1].writemask = ctx->Stencil.WriteMask[back] & 0xff; } else { dsa->stencil[1] = dsa->stencil[0]; @@ -131,10 +135,10 @@ update_depth_stencil_alpha(struct st_context *st) } } - if (st->ctx->Color.AlphaEnabled) { + if (ctx->Color.AlphaEnabled) { dsa->alpha.enabled = 1; - dsa->alpha.func = st_compare_func_to_pipe(st->ctx->Color.AlphaFunc); - dsa->alpha.ref_value = st->ctx->Color.AlphaRef; + dsa->alpha.func = st_compare_func_to_pipe(ctx->Color.AlphaFunc); + dsa->alpha.ref_value = ctx->Color.AlphaRef; } cso_set_depth_stencil_alpha(st->cso_context, dsa); diff --git a/src/mesa/state_tracker/st_atom_framebuffer.c b/src/mesa/state_tracker/st_atom_framebuffer.c index 625efdd66b..df0f0931ea 100644 --- a/src/mesa/state_tracker/st_atom_framebuffer.c +++ b/src/mesa/state_tracker/st_atom_framebuffer.c @@ -112,15 +112,17 @@ update_framebuffer_state( struct st_context *st ) for (i = 0; i < fb->_NumColorDrawBuffers; i++) { strb = st_renderbuffer(fb->_ColorDrawBuffers[i]); - /*printf("--------- framebuffer surface rtt %p\n", strb->rtt);*/ - if (strb->rtt) { - /* rendering to a GL texture, may have to update surface */ - update_renderbuffer_surface(st, strb); - } + if (strb) { + /*printf("--------- framebuffer surface rtt %p\n", strb->rtt);*/ + if (strb->rtt) { + /* rendering to a GL texture, may have to update surface */ + update_renderbuffer_surface(st, strb); + } - if (strb->surface) { - framebuffer->cbufs[framebuffer->nr_cbufs] = strb->surface; - framebuffer->nr_cbufs++; + if (strb->surface) { + framebuffer->cbufs[framebuffer->nr_cbufs] = strb->surface; + framebuffer->nr_cbufs++; + } } } @@ -154,7 +156,6 @@ update_framebuffer_state( struct st_context *st ) (void) st_get_framebuffer_surface(stfb, ST_SURFACE_BACK_LEFT, &surf_back); st->pipe->surface_copy(st->pipe, - FALSE, surf_front, 0, 0, /* dest */ surf_back, 0, 0, /* src */ fb->Width, fb->Height); diff --git a/src/mesa/state_tracker/st_atom_pixeltransfer.c b/src/mesa/state_tracker/st_atom_pixeltransfer.c index a357b71677..8d0029dde5 100644 --- a/src/mesa/state_tracker/st_atom_pixeltransfer.c +++ b/src/mesa/state_tracker/st_atom_pixeltransfer.c @@ -48,7 +48,6 @@ #include "pipe/p_screen.h" #include "pipe/p_context.h" -#include "pipe/p_inlines.h" #include "util/u_pack_color.h" @@ -140,7 +139,7 @@ load_color_map_texture(GLcontext *ctx, struct pipe_texture *pt) { struct pipe_context *pipe = ctx->st->pipe; struct pipe_screen *screen = pipe->screen; - struct pipe_surface *surface; + struct pipe_transfer *transfer; const GLuint rSize = ctx->PixelMaps.RtoR.Size; const GLuint gSize = ctx->PixelMaps.GtoG.Size; const GLuint bSize = ctx->PixelMaps.BtoB.Size; @@ -149,10 +148,9 @@ load_color_map_texture(GLcontext *ctx, struct pipe_texture *pt) uint *dest; uint i, j; - surface = screen->get_tex_surface(screen, pt, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_WRITE); - dest = (uint *) screen->surface_map(screen, surface, - PIPE_BUFFER_USAGE_CPU_WRITE); + transfer = screen->get_tex_transfer(screen, pt, 0, 0, 0, PIPE_TRANSFER_WRITE, + 0, 0, texSize, texSize); + dest = (uint *) screen->transfer_map(screen, transfer); /* Pack four 1D maps into a 2D texture: * R map is placed horizontally, indexed by S, in channel 0 @@ -171,8 +169,8 @@ load_color_map_texture(GLcontext *ctx, struct pipe_texture *pt) } } - screen->surface_unmap(screen, surface); - pipe_surface_reference(&surface, NULL); + screen->transfer_unmap(screen, transfer); + screen->tex_transfer_destroy(transfer); } @@ -213,7 +211,7 @@ get_pixel_transfer_program(GLcontext *ctx, const struct state_key *key) inst[ic].TexSrcTarget = TEXTURE_2D_INDEX; ic++; fp->Base.InputsRead = (1 << FRAG_ATTRIB_TEX0); - fp->Base.OutputsWritten = (1 << FRAG_RESULT_COLR); + fp->Base.OutputsWritten = (1 << FRAG_RESULT_COLOR); fp->Base.SamplersUsed = 0x1; /* sampler 0 (bit 0) is used */ if (key->scaleAndBias) { @@ -401,7 +399,7 @@ get_pixel_transfer_program(GLcontext *ctx, const struct state_key *key) { struct prog_instruction *last = &inst[ic - 1]; last->DstReg.File = PROGRAM_OUTPUT; - last->DstReg.Index = FRAG_RESULT_COLR; + last->DstReg.Index = FRAG_RESULT_COLOR; } /* END; */ diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c index cbd414e2d3..fc1ff5be04 100644 --- a/src/mesa/state_tracker/st_atom_shader.c +++ b/src/mesa/state_tracker/st_atom_shader.c @@ -165,7 +165,7 @@ find_translated_vp(struct st_context *st, /* No? Allocate translated vp object now */ if (!xvp) { - xvp = CALLOC_STRUCT(translated_vertex_program); + xvp = ST_CALLOC_STRUCT(translated_vertex_program); xvp->frag_inputs = fragInputsRead; xvp->master = stvp; @@ -298,7 +298,7 @@ st_free_translated_vertex_programs(struct st_context *st, while (xvp) { next = xvp->next; - free(xvp); + _mesa_free(xvp); xvp = next; } } @@ -307,14 +307,9 @@ st_free_translated_vertex_programs(struct st_context *st, static void * get_passthrough_fs(struct st_context *st) { - struct pipe_shader_state shader; - if (!st->passthrough_fs) { st->passthrough_fs = - util_make_fragment_passthrough_shader(st->pipe, &shader); -#if 0 /* We actually need to keep the tokens around at this time */ - free((void *) shader.tokens); -#endif + util_make_fragment_passthrough_shader(st->pipe); } return st->passthrough_fs; diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c index 21f7321f97..4d4f97da7e 100644 --- a/src/mesa/state_tracker/st_atom_texture.c +++ b/src/mesa/state_tracker/st_atom_texture.c @@ -37,7 +37,6 @@ #include "st_texture.h" #include "st_cb_texture.h" #include "pipe/p_context.h" -#include "pipe/p_inlines.h" #include "cso_cache/cso_context.h" diff --git a/src/mesa/state_tracker/st_cb_accum.c b/src/mesa/state_tracker/st_cb_accum.c index a4e72b48ed..3f9a825a15 100644 --- a/src/mesa/state_tracker/st_cb_accum.c +++ b/src/mesa/state_tracker/st_cb_accum.c @@ -63,21 +63,21 @@ * See also: st_renderbuffer_alloc_storage() */ static void -acc_get_tile_rgba(struct pipe_context *pipe, struct pipe_surface *acc_ps, +acc_get_tile_rgba(struct pipe_context *pipe, struct pipe_transfer *acc_pt, uint x, uint y, uint w, uint h, float *p) { - const enum pipe_format f = acc_ps->format; - const struct pipe_format_block b = acc_ps->block; + const enum pipe_format f = acc_pt->format; + const struct pipe_format_block b = acc_pt->block; - acc_ps->format = DEFAULT_ACCUM_PIPE_FORMAT; - acc_ps->block.size = 8; - acc_ps->block.width = 1; - acc_ps->block.height = 1; + acc_pt->format = DEFAULT_ACCUM_PIPE_FORMAT; + acc_pt->block.size = 8; + acc_pt->block.width = 1; + acc_pt->block.height = 1; - pipe_get_tile_rgba(acc_ps, x, y, w, h, p); + pipe_get_tile_rgba(acc_pt, x, y, w, h, p); - acc_ps->format = f; - acc_ps->block = b; + acc_pt->format = f; + acc_pt->block = b; } @@ -87,21 +87,21 @@ acc_get_tile_rgba(struct pipe_context *pipe, struct pipe_surface *acc_ps, * See also: st_renderbuffer_alloc_storage() */ static void -acc_put_tile_rgba(struct pipe_context *pipe, struct pipe_surface *acc_ps, +acc_put_tile_rgba(struct pipe_context *pipe, struct pipe_transfer *acc_pt, uint x, uint y, uint w, uint h, const float *p) { - enum pipe_format f = acc_ps->format; - const struct pipe_format_block b = acc_ps->block; + enum pipe_format f = acc_pt->format; + const struct pipe_format_block b = acc_pt->block; - acc_ps->format = DEFAULT_ACCUM_PIPE_FORMAT; - acc_ps->block.size = 8; - acc_ps->block.width = 1; - acc_ps->block.height = 1; + acc_pt->format = DEFAULT_ACCUM_PIPE_FORMAT; + acc_pt->block.size = 8; + acc_pt->block.width = 1; + acc_pt->block.height = 1; - pipe_put_tile_rgba(acc_ps, x, y, w, h, p); + pipe_put_tile_rgba(acc_pt, x, y, w, h, p); - acc_ps->format = f; - acc_ps->block = b; + acc_pt->format = f; + acc_pt->block = b; } @@ -110,7 +110,7 @@ void st_clear_accum_buffer(GLcontext *ctx, struct gl_renderbuffer *rb) { struct st_renderbuffer *acc_strb = st_renderbuffer(rb); - struct pipe_surface *acc_ps; + struct pipe_transfer *acc_pt; struct pipe_screen *screen = ctx->st->pipe->screen; const GLint xpos = ctx->DrawBuffer->_Xmin; const GLint ypos = ctx->DrawBuffer->_Ymin; @@ -118,12 +118,12 @@ st_clear_accum_buffer(GLcontext *ctx, struct gl_renderbuffer *rb) const GLint height = ctx->DrawBuffer->_Ymax - ypos; GLubyte *map; - acc_ps = screen->get_tex_surface(screen, acc_strb->texture, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_WRITE); - map = screen->surface_map(screen, acc_ps, - PIPE_BUFFER_USAGE_CPU_WRITE); + acc_pt = screen->get_tex_transfer(screen, acc_strb->texture, 0, 0, 0, + PIPE_TRANSFER_WRITE, xpos, ypos, + width, height); + map = screen->transfer_map(screen, acc_pt); - /* note acc_strb->format might not equal acc_ps->format */ + /* note acc_strb->format might not equal acc_pt->format */ switch (acc_strb->format) { case PIPE_FORMAT_R16G16B16A16_SNORM: { @@ -133,7 +133,7 @@ st_clear_accum_buffer(GLcontext *ctx, struct gl_renderbuffer *rb) GLshort a = FLOAT_TO_SHORT(ctx->Accum.ClearColor[3]); int i, j; for (i = 0; i < height; i++) { - GLshort *dst = (GLshort *) (map + (ypos + i) * acc_ps->stride + xpos * 8); + GLshort *dst = (GLshort *) (map + i * acc_pt->stride + xpos * 8); for (j = 0; j < width; j++) { dst[0] = r; dst[1] = g; @@ -148,8 +148,8 @@ st_clear_accum_buffer(GLcontext *ctx, struct gl_renderbuffer *rb) _mesa_problem(ctx, "unexpected format in st_clear_accum_buffer()"); } - screen->surface_unmap(screen, acc_ps); - pipe_surface_reference(&acc_ps, NULL); + screen->transfer_unmap(screen, acc_pt); + screen->tex_transfer_destroy(acc_pt); } @@ -160,19 +160,21 @@ accum_mad(GLcontext *ctx, GLfloat scale, GLfloat bias, struct st_renderbuffer *acc_strb) { struct pipe_screen *screen = ctx->st->pipe->screen; - struct pipe_surface *acc_ps = acc_strb->surface; + struct pipe_transfer *acc_pt; GLubyte *map; - map = screen->surface_map(screen, acc_ps, - PIPE_BUFFER_USAGE_CPU_WRITE); + acc_pt = screen->get_tex_transfer(screen, acc_strb->texture, 0, 0, 0, + PIPE_TRANSFER_READ_WRITE, xpos, ypos, + width, height); + map = screen->transfer_map(screen, acc_pt); - /* note acc_strb->format might not equal acc_ps->format */ + /* note acc_strb->format might not equal acc_pt->format */ switch (acc_strb->format) { case PIPE_FORMAT_R16G16B16A16_SNORM: { int i, j; for (i = 0; i < height; i++) { - GLshort *acc = (GLshort *) (map + (ypos + i) * acc_ps->stride + xpos * 8); + GLshort *acc = (GLshort *) (map + (ypos + i) * acc_pt->stride + xpos * 8); for (j = 0; j < width * 4; j++) { float val = SHORT_TO_FLOAT(acc[j]) * scale + bias; acc[j] = FLOAT_TO_SHORT(val); @@ -184,7 +186,8 @@ accum_mad(GLcontext *ctx, GLfloat scale, GLfloat bias, _mesa_problem(NULL, "unexpected format in st_clear_accum_buffer()"); } - screen->surface_unmap(screen, acc_ps); + screen->transfer_unmap(screen, acc_pt); + screen->tex_transfer_destroy(acc_pt); } @@ -195,33 +198,39 @@ accum_accum(struct pipe_context *pipe, GLfloat value, struct st_renderbuffer *color_strb) { struct pipe_screen *screen = pipe->screen; - struct pipe_surface *acc_surf, *color_surf; + struct pipe_transfer *acc_trans, *color_trans; GLfloat *colorBuf, *accBuf; GLint i; - acc_surf = screen->get_tex_surface(screen, acc_strb->texture, 0, 0, 0, - (PIPE_BUFFER_USAGE_CPU_WRITE | - PIPE_BUFFER_USAGE_CPU_READ)); + acc_trans = screen->get_tex_transfer(screen, acc_strb->texture, 0, 0, 0, + PIPE_TRANSFER_READ, xpos, ypos, + width, height); - color_surf = screen->get_tex_surface(screen, color_strb->texture, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_READ); + color_trans = screen->get_tex_transfer(screen, color_strb->texture, 0, 0, 0, + PIPE_TRANSFER_READ, xpos, ypos, + width, height); - colorBuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat)); - accBuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat)); + colorBuf = (GLfloat *) _mesa_malloc(width * height * 4 * sizeof(GLfloat)); + accBuf = (GLfloat *) _mesa_malloc(width * height * 4 * sizeof(GLfloat)); - pipe_get_tile_rgba(color_surf, xpos, ypos, width, height, colorBuf); - acc_get_tile_rgba(pipe, acc_surf, xpos, ypos, width, height, accBuf); + pipe_get_tile_rgba(color_trans, 0, 0, width, height, colorBuf); + acc_get_tile_rgba(pipe, acc_trans, 0, 0, width, height, accBuf); for (i = 0; i < 4 * width * height; i++) { accBuf[i] = accBuf[i] + colorBuf[i] * value; } - acc_put_tile_rgba(pipe, acc_surf, xpos, ypos, width, height, accBuf); + screen->tex_transfer_destroy(acc_trans); + acc_trans = screen->get_tex_transfer(screen, acc_strb->texture, 0, 0, 0, + PIPE_TRANSFER_WRITE, xpos, ypos, + width, height); - free(colorBuf); - free(accBuf); - pipe_surface_reference(&acc_surf, NULL); - pipe_surface_reference(&color_surf, NULL); + acc_put_tile_rgba(pipe, acc_trans, 0, 0, width, height, accBuf); + + _mesa_free(colorBuf); + _mesa_free(accBuf); + screen->tex_transfer_destroy(acc_trans); + screen->tex_transfer_destroy(color_trans); } @@ -232,29 +241,31 @@ accum_load(struct pipe_context *pipe, GLfloat value, struct st_renderbuffer *color_strb) { struct pipe_screen *screen = pipe->screen; - struct pipe_surface *acc_surf, *color_surf; + struct pipe_transfer *acc_trans, *color_trans; GLfloat *buf; GLint i; - acc_surf = screen->get_tex_surface(screen, acc_strb->texture, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_WRITE); + acc_trans = screen->get_tex_transfer(screen, acc_strb->texture, 0, 0, 0, + PIPE_TRANSFER_WRITE, xpos, ypos, + width, height); - color_surf = screen->get_tex_surface(screen, color_strb->texture, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_READ); + color_trans = screen->get_tex_transfer(screen, color_strb->texture, 0, 0, 0, + PIPE_TRANSFER_READ, xpos, ypos, + width, height); - buf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat)); + buf = (GLfloat *) _mesa_malloc(width * height * 4 * sizeof(GLfloat)); - pipe_get_tile_rgba(color_surf, xpos, ypos, width, height, buf); + pipe_get_tile_rgba(color_trans, 0, 0, width, height, buf); for (i = 0; i < 4 * width * height; i++) { buf[i] = buf[i] * value; } - acc_put_tile_rgba(pipe, acc_surf, xpos, ypos, width, height, buf); + acc_put_tile_rgba(pipe, acc_trans, 0, 0, width, height, buf); - free(buf); - pipe_surface_reference(&acc_surf, NULL); - pipe_surface_reference(&color_surf, NULL); + _mesa_free(buf); + screen->tex_transfer_destroy(acc_trans); + screen->tex_transfer_destroy(color_trans); } @@ -267,24 +278,25 @@ accum_return(GLcontext *ctx, GLfloat value, struct pipe_context *pipe = ctx->st->pipe; struct pipe_screen *screen = pipe->screen; const GLubyte *colormask = ctx->Color.ColorMask; - struct pipe_surface *acc_surf, *color_surf; + struct pipe_transfer *acc_trans, *color_trans; GLfloat *abuf, *cbuf = NULL; GLint i, ch; - abuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat)); + abuf = (GLfloat *) _mesa_malloc(width * height * 4 * sizeof(GLfloat)); - acc_surf = screen->get_tex_surface(screen, acc_strb->texture, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_READ); + acc_trans = screen->get_tex_transfer(screen, acc_strb->texture, 0, 0, 0, + PIPE_TRANSFER_READ, xpos, ypos, + width, height); - color_surf = screen->get_tex_surface(screen, color_strb->texture, 0, 0, 0, - (PIPE_BUFFER_USAGE_CPU_READ | - PIPE_BUFFER_USAGE_CPU_WRITE)); + color_trans = screen->get_tex_transfer(screen, color_strb->texture, 0, 0, 0, + PIPE_TRANSFER_READ_WRITE, xpos, ypos, + width, height); - acc_get_tile_rgba(pipe, acc_surf, xpos, ypos, width, height, abuf); + acc_get_tile_rgba(pipe, acc_trans, 0, 0, width, height, abuf); if (!colormask[0] || !colormask[1] || !colormask[2] || !colormask[3]) { - cbuf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat)); - pipe_get_tile_rgba(color_surf, xpos, ypos, width, height, cbuf); + cbuf = (GLfloat *) _mesa_malloc(width * height * 4 * sizeof(GLfloat)); + pipe_get_tile_rgba(color_trans, 0, 0, width, height, cbuf); } for (i = 0; i < width * height; i++) { @@ -299,13 +311,13 @@ accum_return(GLcontext *ctx, GLfloat value, } } - pipe_put_tile_rgba(color_surf, xpos, ypos, width, height, abuf); + pipe_put_tile_rgba(color_trans, 0, 0, width, height, abuf); - free(abuf); + _mesa_free(abuf); if (cbuf) - free(cbuf); - pipe_surface_reference(&acc_surf, NULL); - pipe_surface_reference(&color_surf, NULL); + _mesa_free(cbuf); + screen->tex_transfer_destroy(acc_trans); + screen->tex_transfer_destroy(color_trans); } diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index f14e562400..2d547dd072 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -93,7 +93,7 @@ struct bitmap_cache GLfloat color[4]; struct pipe_texture *texture; - struct pipe_surface *surf; + struct pipe_transfer *trans; GLboolean empty; @@ -142,6 +142,10 @@ make_bitmap_fragment_program(GLcontext *ctx, GLuint samplerIndex) /* KIL if -tmp0 < 0 # texel=0 -> keep / texel=0 -> discard */ p->Instructions[ic].Opcode = OPCODE_KIL; p->Instructions[ic].SrcReg[0].File = PROGRAM_TEMPORARY; + + if (ctx->st->bitmap.tex_format == PIPE_FORMAT_L8_UNORM) + p->Instructions[ic].SrcReg[0].Swizzle = SWIZZLE_XXXX; + p->Instructions[ic].SrcReg[0].Index = 0; p->Instructions[ic].SrcReg[0].NegateBase = NEGATE_XYZW; ic++; @@ -157,7 +161,11 @@ make_bitmap_fragment_program(GLcontext *ctx, GLuint samplerIndex) stfp = (struct st_fragment_program *) p; stfp->Base.UsesKill = GL_TRUE; - st_translate_fragment_program(ctx->st, stfp, NULL); + + /* No need to send this incomplete program down to hardware: + * + * st_translate_fragment_program(ctx->st, stfp, NULL); + */ return stfp; } @@ -308,7 +316,7 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei height, { struct pipe_context *pipe = ctx->st->pipe; struct pipe_screen *screen = pipe->screen; - struct pipe_surface *surface; + struct pipe_transfer *transfer; ubyte *dest; struct pipe_texture *pt; @@ -329,22 +337,21 @@ make_bitmap_texture(GLcontext *ctx, GLsizei width, GLsizei height, return NULL; } - surface = screen->get_tex_surface(screen, pt, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_WRITE); + transfer = screen->get_tex_transfer(screen, pt, 0, 0, 0, PIPE_TRANSFER_WRITE, + 0, 0, width, height); - /* map texture surface */ - dest = screen->surface_map(screen, surface, PIPE_BUFFER_USAGE_CPU_WRITE); + dest = screen->transfer_map(screen, transfer); - /* Put image into texture surface */ - memset(dest, 0xff, height * surface->stride); + /* Put image into texture transfer */ + memset(dest, 0xff, height * transfer->stride); unpack_bitmap(ctx->st, 0, 0, width, height, unpack, bitmap, - dest, surface->stride); + dest, transfer->stride); _mesa_unmap_bitmap_pbo(ctx, unpack); - /* Release surface */ - screen->surface_unmap(screen, surface); - pipe_surface_reference(&surface, NULL); + /* Release transfer */ + screen->transfer_unmap(screen, transfer); + screen->tex_transfer_destroy(transfer); return pt; } @@ -372,7 +379,7 @@ setup_bitmap_vertex_data(struct st_context *st, GLuint i; if (st->bitmap.vbuf_slot >= max_slots) { - pipe_buffer_reference(pipe->screen, &st->bitmap.vbuf, NULL); + pipe_buffer_reference(&st->bitmap.vbuf, NULL); st->bitmap.vbuf_slot = 0; } @@ -418,17 +425,11 @@ setup_bitmap_vertex_data(struct st_context *st, } /* put vertex data into vbuf */ - { - char *buf = pipe_buffer_map(pipe->screen, - st->bitmap.vbuf, - PIPE_BUFFER_USAGE_CPU_WRITE); - - memcpy(buf + st->bitmap.vbuf_slot * sizeof st->bitmap.vertices, - st->bitmap.vertices, - sizeof st->bitmap.vertices); - - pipe_buffer_unmap(pipe->screen, st->bitmap.vbuf); - } + pipe_buffer_write(pipe->screen, + st->bitmap.vbuf, + st->bitmap.vbuf_slot * sizeof st->bitmap.vertices, + sizeof st->bitmap.vertices, + st->bitmap.vertices); return st->bitmap.vbuf_slot++ * sizeof st->bitmap.vertices; } @@ -569,8 +570,8 @@ reset_cache(struct st_context *st) cache->ymin = 1000000; cache->ymax = -1000000; - if (cache->surf) - screen->tex_surface_release(screen, &cache->surf); + if (cache->trans) + screen->tex_transfer_destroy(cache->trans); assert(!cache->texture); @@ -581,16 +582,17 @@ reset_cache(struct st_context *st) 1, 0, PIPE_TEXTURE_USAGE_SAMPLER); - /* Map the texture surface. + /* Map the texture transfer. * Subsequent glBitmap calls will write into the texture image. */ - cache->surf = screen->get_tex_surface(screen, cache->texture, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_WRITE); - cache->buffer = screen->surface_map(screen, cache->surf, - PIPE_BUFFER_USAGE_CPU_WRITE); + cache->trans = screen->get_tex_transfer(screen, cache->texture, 0, 0, 0, + PIPE_TRANSFER_WRITE, 0, 0, + BITMAP_CACHE_WIDTH, + BITMAP_CACHE_HEIGHT); + cache->buffer = screen->transfer_map(screen, cache->trans); /* init image to all 0xff */ - memset(cache->buffer, 0xff, BITMAP_CACHE_WIDTH * BITMAP_CACHE_HEIGHT); + memset(cache->buffer, 0xff, cache->trans->stride * BITMAP_CACHE_HEIGHT); } @@ -615,13 +617,14 @@ st_flush_bitmap_cache(struct st_context *st) cache->xpos, cache->ypos); */ - /* The texture surface has been mapped until now. - * So unmap and release the texture surface before drawing. + /* The texture transfer has been mapped until now. + * So unmap and release the texture transfer before drawing. */ - screen->surface_unmap(screen, cache->surf); + screen->transfer_unmap(screen, cache->trans); cache->buffer = NULL; - screen->tex_surface_release(screen, &cache->surf); + screen->tex_transfer_destroy(cache->trans); + cache->trans = NULL; draw_bitmap_quad(st->ctx, cache->xpos, @@ -649,7 +652,7 @@ st_flush_bitmap( struct st_context *st ) /* Release vertex buffer to avoid synchronous rendering if we were * to map it in the next frame. */ - pipe_buffer_reference(st->pipe->screen, &st->bitmap.vbuf, NULL); + pipe_buffer_reference(&st->bitmap.vbuf, NULL); st->bitmap.vbuf_slot = 0; } @@ -737,8 +740,7 @@ st_Bitmap(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, const uint semantic_indexes[] = { 0, 0, 0 }; st->bitmap.vs = util_make_vertex_passthrough_shader(st->pipe, 3, semantic_names, - semantic_indexes, - &st->bitmap.vert_shader); + semantic_indexes); } if (UseBitmapCache && accum_bitmap(st, x, y, width, height, unpack, bitmap)) @@ -785,20 +787,27 @@ st_init_bitmap(struct st_context *st) /* init baseline rasterizer state once */ memset(&st->bitmap.rasterizer, 0, sizeof(st->bitmap.rasterizer)); st->bitmap.rasterizer.gl_rasterization_rules = 1; - st->bitmap.rasterizer.bypass_vs = 1; /* find a usable texture format */ if (screen->is_format_supported(screen, PIPE_FORMAT_I8_UNORM, PIPE_TEXTURE_2D, PIPE_TEXTURE_USAGE_SAMPLER, 0)) { st->bitmap.tex_format = PIPE_FORMAT_I8_UNORM; } + else if (screen->is_format_supported(screen, PIPE_FORMAT_A8_UNORM, PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_SAMPLER, 0)) { + st->bitmap.tex_format = PIPE_FORMAT_A8_UNORM; + } + else if (screen->is_format_supported(screen, PIPE_FORMAT_L8_UNORM, PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_SAMPLER, 0)) { + st->bitmap.tex_format = PIPE_FORMAT_L8_UNORM; + } else { /* XXX support more formats */ assert(0); } /* alloc bitmap cache object */ - st->bitmap.cache = CALLOC_STRUCT(bitmap_cache); + st->bitmap.cache = ST_CALLOC_STRUCT(bitmap_cache); reset_cache(st); } @@ -812,8 +821,8 @@ st_destroy_bitmap(struct st_context *st) struct pipe_screen *screen = pipe->screen; struct bitmap_cache *cache = st->bitmap.cache; - screen->surface_unmap(screen, cache->surf); - screen->tex_surface_release(screen, &cache->surf); + screen->transfer_unmap(screen, cache->trans); + screen->tex_transfer_destroy(cache->trans); if (st->bitmap.vs) { cso_delete_vertex_shader(st->cso_context, st->bitmap.vs); @@ -821,13 +830,13 @@ st_destroy_bitmap(struct st_context *st) } if (st->bitmap.vbuf) { - pipe_buffer_reference(pipe->screen, &st->bitmap.vbuf, NULL); + pipe_buffer_reference(&st->bitmap.vbuf, NULL); st->bitmap.vbuf = NULL; } if (st->bitmap.cache) { - pipe_texture_release(&st->bitmap.cache->texture); - FREE(st->bitmap.cache); + pipe_texture_reference(&st->bitmap.cache->texture, NULL); + _mesa_free(st->bitmap.cache); st->bitmap.cache = NULL; } } diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c index 07fa2afce0..3651e4ae7d 100644 --- a/src/mesa/state_tracker/st_cb_bufferobjects.c +++ b/src/mesa/state_tracker/st_cb_bufferobjects.c @@ -55,7 +55,7 @@ static struct gl_buffer_object * st_bufferobj_alloc(GLcontext *ctx, GLuint name, GLenum target) { - struct st_buffer_object *st_obj = CALLOC_STRUCT(st_buffer_object); + struct st_buffer_object *st_obj = ST_CALLOC_STRUCT(st_buffer_object); if (!st_obj) return NULL; @@ -74,13 +74,12 @@ st_bufferobj_alloc(GLcontext *ctx, GLuint name, GLenum target) static void st_bufferobj_free(GLcontext *ctx, struct gl_buffer_object *obj) { - struct pipe_context *pipe = st_context(ctx)->pipe; struct st_buffer_object *st_obj = st_buffer_object(obj); if (st_obj->buffer) - pipe_buffer_reference(pipe->screen, &st_obj->buffer, NULL); + pipe_buffer_reference(&st_obj->buffer, NULL); - free(st_obj); + _mesa_free(st_obj); } @@ -100,14 +99,11 @@ st_bufferobj_subdata(GLcontext *ctx, { struct pipe_context *pipe = st_context(ctx)->pipe; struct st_buffer_object *st_obj = st_buffer_object(obj); - char *map; if (offset >= st_obj->size || size > (st_obj->size - offset)) return; - map = pipe_buffer_map(pipe->screen, st_obj->buffer, PIPE_BUFFER_USAGE_CPU_WRITE); - memcpy(map + offset, data, size); - pipe_buffer_unmap(pipe->screen, st_obj->buffer); + pipe_buffer_write(pipe->screen, st_obj->buffer, offset, size, data); } @@ -123,14 +119,11 @@ st_bufferobj_get_subdata(GLcontext *ctx, { struct pipe_context *pipe = st_context(ctx)->pipe; struct st_buffer_object *st_obj = st_buffer_object(obj); - char *map; if (offset >= st_obj->size || size > (st_obj->size - offset)) return; - map = pipe_buffer_map(pipe->screen, st_obj->buffer, PIPE_BUFFER_USAGE_CPU_READ); - memcpy(data, map + offset, size); - pipe_buffer_unmap(pipe->screen, st_obj->buffer); + pipe_buffer_read(pipe->screen, st_obj->buffer, offset, size, data); } @@ -171,7 +164,7 @@ st_bufferobj_data(GLcontext *ctx, buffer_usage = 0; } - pipe_buffer_reference( pipe->screen, &st_obj->buffer, NULL ); + pipe_buffer_reference( &st_obj->buffer, NULL ); st_obj->buffer = pipe_buffer_create( pipe->screen, 32, buffer_usage, size ); @@ -208,12 +201,77 @@ st_bufferobj_map(GLcontext *ctx, GLenum target, GLenum access, } obj->Pointer = pipe_buffer_map(pipe->screen, st_obj->buffer, flags); + if(obj->Pointer) { + obj->Offset = 0; + obj->Length = obj->Size; + } return obj->Pointer; } + /** - * Called via glMapBufferARB(). + * Called via glMapBufferRange(). + */ +static void * +st_bufferobj_map_range(GLcontext *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); + GLuint flags = 0; + char *map; + + if (access & GL_MAP_WRITE_BIT) + flags |= PIPE_BUFFER_USAGE_CPU_WRITE; + + if (access & GL_MAP_READ_BIT) + flags |= PIPE_BUFFER_USAGE_CPU_READ; + + /* ... other flags ... + */ + + if (access & MESA_MAP_NOWAIT_BIT) + flags |= PIPE_BUFFER_USAGE_DONTBLOCK; + + assert(offset >= 0); + assert(length >= 0); + assert(offset < obj->Size); + assert(offset + length <= obj->Size); + + map = obj->Pointer = pipe_buffer_map_range(pipe->screen, st_obj->buffer, offset, length, flags); + if(obj->Pointer) { + obj->Offset = 0; + obj->Length = obj->Size; + map += offset; + } + + return map; +} + + +static void +st_bufferobj_flush_mapped_range(GLcontext *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 < obj->Length); + assert(offset + length <= obj->Length); + + pipe_buffer_flush_mapped_range(pipe->screen, st_obj->buffer, + obj->Offset + offset, length); +} + + +/** + * Called via glUnmapBufferARB(). */ static GLboolean st_bufferobj_unmap(GLcontext *ctx, GLenum target, struct gl_buffer_object *obj) @@ -223,6 +281,8 @@ st_bufferobj_unmap(GLcontext *ctx, GLenum target, struct gl_buffer_object *obj) pipe_buffer_unmap(pipe->screen, st_obj->buffer); obj->Pointer = NULL; + obj->Offset = 0; + obj->Length = 0; return GL_TRUE; } @@ -236,5 +296,7 @@ st_init_bufferobject_functions(struct dd_function_table *functions) 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; } diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c index 668c3f9ebf..dd9ba2881f 100644 --- a/src/mesa/state_tracker/st_cb_clear.c +++ b/src/mesa/state_tracker/st_cb_clear.c @@ -60,24 +60,15 @@ st_init_clear(struct st_context *st) { struct pipe_context *pipe = st->pipe; - /* rasterizer state: bypass clipping */ memset(&st->clear.raster, 0, sizeof(st->clear.raster)); st->clear.raster.gl_rasterization_rules = 1; - st->clear.raster.bypass_clipping = 1; - - /* viewport state: identity since we're drawing in window coords */ - st->clear.viewport.scale[0] = 1.0; - st->clear.viewport.scale[1] = 1.0; - st->clear.viewport.scale[2] = 1.0; - st->clear.viewport.scale[3] = 1.0; - st->clear.viewport.translate[0] = 0.0; - st->clear.viewport.translate[1] = 0.0; - st->clear.viewport.translate[2] = 0.0; - st->clear.viewport.translate[3] = 0.0; + + /* rasterizer state: bypass vertex shader, clipping and viewport */ + st->clear.raster.bypass_vs_clip_and_viewport = 1; /* fragment shader state: color pass-through program */ st->clear.fs = - util_make_fragment_passthrough_shader(pipe, &st->clear.frag_shader); + util_make_fragment_passthrough_shader(pipe); /* vertex shader state: color/position pass-through */ { @@ -86,8 +77,7 @@ st_init_clear(struct st_context *st) const uint semantic_indexes[] = { 0, 0 }; st->clear.vs = util_make_vertex_passthrough_shader(pipe, 2, semantic_names, - semantic_indexes, - &st->clear.vert_shader); + semantic_indexes); } } @@ -95,18 +85,6 @@ st_init_clear(struct st_context *st) void st_destroy_clear(struct st_context *st) { - struct pipe_context *pipe = st->pipe; - - if (st->clear.vert_shader.tokens) { - FREE((void *) st->clear.vert_shader.tokens); - st->clear.vert_shader.tokens = NULL; - } - - if (st->clear.frag_shader.tokens) { - FREE((void *) st->clear.frag_shader.tokens); - st->clear.frag_shader.tokens = NULL; - } - if (st->clear.fs) { cso_delete_fragment_shader(st->cso_context, st->clear.fs); st->clear.fs = NULL; @@ -116,7 +94,7 @@ st_destroy_clear(struct st_context *st) st->clear.vs = NULL; } if (st->clear.vbuf) { - pipe_buffer_reference(pipe->screen, &st->clear.vbuf, NULL); + pipe_buffer_reference(&st->clear.vbuf, NULL); st->clear.vbuf = NULL; } } @@ -138,8 +116,9 @@ is_depth_stencil_format(enum pipe_format pipeFormat) /** * Draw a screen-aligned quadrilateral. - * Coords are window coords with y=0=bottom. These coords will be transformed - * by the vertex shader and viewport transform (which will flip Y if needed). + * Coords are window coords with y=0=bottom. These will be passed + * through unmodified to the rasterizer as we have set + * rasterizer->bypass_vs_clip_and_viewport. */ static void draw_quad(GLcontext *ctx, @@ -150,10 +129,9 @@ draw_quad(GLcontext *ctx, struct pipe_context *pipe = st->pipe; const GLuint max_slots = 1024 / sizeof(st->clear.vertices); GLuint i; - void *buf; if (st->clear.vbuf_slot >= max_slots) { - pipe_buffer_reference(pipe->screen, &st->clear.vbuf, NULL); + pipe_buffer_reference(&st->clear.vbuf, NULL); st->clear.vbuf_slot = 0; } @@ -186,13 +164,10 @@ draw_quad(GLcontext *ctx, } /* put vertex data into vbuf */ - buf = pipe_buffer_map(pipe->screen, st->clear.vbuf, PIPE_BUFFER_USAGE_CPU_WRITE); - - memcpy((char *)buf + st->clear.vbuf_slot * sizeof(st->clear.vertices), - st->clear.vertices, - sizeof(st->clear.vertices)); - - pipe_buffer_unmap(pipe->screen, st->clear.vbuf); + pipe_buffer_write(pipe->screen, st->clear.vbuf, + st->clear.vbuf_slot * sizeof(st->clear.vertices), + sizeof(st->clear.vertices), + st->clear.vertices); /* draw */ util_draw_vertex_buffer(pipe, @@ -243,7 +218,6 @@ clear_with_quad(GLcontext *ctx, cso_save_blend(st->cso_context); cso_save_depth_stencil_alpha(st->cso_context); cso_save_rasterizer(st->cso_context); - cso_save_viewport(st->cso_context); cso_save_fragment_shader(st->cso_context); cso_save_vertex_shader(st->cso_context); @@ -295,7 +269,6 @@ clear_with_quad(GLcontext *ctx, } cso_set_rasterizer(st->cso_context, &st->clear.raster); - cso_set_viewport(st->cso_context, &st->clear.viewport); cso_set_fragment_shader_handle(st->cso_context, st->clear.fs); cso_set_vertex_shader_handle(st->cso_context, st->clear.vs); @@ -307,7 +280,6 @@ clear_with_quad(GLcontext *ctx, cso_restore_blend(st->cso_context); cso_restore_depth_stencil_alpha(st->cso_context); cso_restore_rasterizer(st->cso_context); - cso_restore_viewport(st->cso_context); cso_restore_fragment_shader(st->cso_context); cso_restore_vertex_shader(st->cso_context); } @@ -528,7 +500,7 @@ void st_flush_clear( struct st_context *st ) /* Release vertex buffer to avoid synchronous rendering if we were * to map it in the next frame. */ - pipe_buffer_reference(st->pipe->screen, &st->clear.vbuf, NULL); + pipe_buffer_reference(&st->clear.vbuf, NULL); st->clear.vbuf_slot = 0; } diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index 32bf21411d..821ea67ce4 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -75,7 +75,7 @@ is_passthrough_program(const struct gl_fragment_program *prog) if (inst[0].Opcode == OPCODE_MOV && inst[1].Opcode == OPCODE_END && inst[0].DstReg.File == PROGRAM_OUTPUT && - inst[0].DstReg.Index == FRAG_RESULT_COLR && + inst[0].DstReg.Index == FRAG_RESULT_COLOR && inst[0].DstReg.WriteMask == WRITEMASK_XYZW && inst[0].SrcReg[0].File == PROGRAM_INPUT && inst[0].SrcReg[0].Index == FRAG_ATTRIB_COL0 && @@ -158,7 +158,7 @@ combined_drawpix_fragment_program(GLcontext *ctx) /** * Create fragment shader that does a TEX() instruction to get a Z - * value, then writes to FRAG_RESULT_DEPR. + * value, then writes to FRAG_RESULT_DEPTH. * Pass fragment color through as-is. */ static struct st_fragment_program * @@ -191,7 +191,7 @@ make_fragment_shader_z(struct st_context *st) /* TEX result.depth, fragment.texcoord[0], texture[0], 2D; */ p->Instructions[ic].Opcode = OPCODE_TEX; p->Instructions[ic].DstReg.File = PROGRAM_OUTPUT; - p->Instructions[ic].DstReg.Index = FRAG_RESULT_DEPR; + p->Instructions[ic].DstReg.Index = FRAG_RESULT_DEPTH; p->Instructions[ic].DstReg.WriteMask = WRITEMASK_Z; p->Instructions[ic].SrcReg[0].File = PROGRAM_INPUT; p->Instructions[ic].SrcReg[0].Index = FRAG_ATTRIB_TEX0; @@ -202,7 +202,7 @@ make_fragment_shader_z(struct st_context *st) /* MOV result.color, fragment.color */ p->Instructions[ic].Opcode = OPCODE_MOV; p->Instructions[ic].DstReg.File = PROGRAM_OUTPUT; - p->Instructions[ic].DstReg.Index = FRAG_RESULT_COLR; + p->Instructions[ic].DstReg.Index = FRAG_RESULT_COLOR; p->Instructions[ic].SrcReg[0].File = PROGRAM_INPUT; p->Instructions[ic].SrcReg[0].Index = FRAG_ATTRIB_COL0; ic++; @@ -213,7 +213,7 @@ make_fragment_shader_z(struct st_context *st) assert(ic == p->NumInstructions); p->InputsRead = FRAG_BIT_TEX0 | FRAG_BIT_COL0; - p->OutputsWritten = (1 << FRAG_RESULT_COLR) | (1 << FRAG_RESULT_DEPR); + p->OutputsWritten = (1 << FRAG_RESULT_COLOR) | (1 << FRAG_RESULT_DEPTH); p->SamplersUsed = 0x1; /* sampler 0 (bit 0) is used */ st->drawpix.z_shader = (struct st_fragment_program *) p; @@ -358,7 +358,7 @@ make_texture(struct st_context *st, } { - struct pipe_surface *surface; + struct pipe_transfer *transfer; static const GLuint dstImageOffsets = 0; GLboolean success; GLubyte *dest; @@ -367,14 +367,14 @@ make_texture(struct st_context *st, /* we'll do pixel transfer in a fragment shader */ ctx->_ImageTransferState = 0x0; - surface = screen->get_tex_surface(screen, pt, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_WRITE); + transfer = screen->get_tex_transfer(screen, pt, 0, 0, 0, + PIPE_TRANSFER_WRITE, 0, 0, + width, height); - /* map texture surface */ - dest = screen->surface_map(screen, surface, - PIPE_BUFFER_USAGE_CPU_WRITE); + /* map texture transfer */ + dest = screen->transfer_map(screen, transfer); - /* Put image into texture surface. + /* Put image into texture transfer. * Note that the image is actually going to be upside down in * the texture. We deal with that with texcoords. */ @@ -383,7 +383,7 @@ make_texture(struct st_context *st, mformat, /* gl_texture_format */ dest, /* dest */ 0, 0, 0, /* dstX/Y/Zoffset */ - surface->stride, /* dstRowStride, bytes */ + transfer->stride, /* dstRowStride, bytes */ &dstImageOffsets, /* dstImageOffsets */ width, height, 1, /* size */ format, type, /* src format/type */ @@ -391,8 +391,8 @@ make_texture(struct st_context *st, unpack); /* unmap */ - screen->surface_unmap(screen, surface); - pipe_surface_reference(&surface, NULL); + screen->transfer_unmap(screen, transfer); + screen->tex_transfer_destroy(transfer); assert(success); @@ -485,20 +485,17 @@ draw_quad(GLcontext *ctx, GLfloat x0, GLfloat y0, GLfloat z, { struct pipe_buffer *buf; - ubyte *map; /* allocate/load buffer object with vertex data */ buf = pipe_buffer_create(pipe->screen, 32, PIPE_BUFFER_USAGE_VERTEX, sizeof(verts)); - map = pipe_buffer_map(pipe->screen, buf, PIPE_BUFFER_USAGE_CPU_WRITE); - memcpy(map, verts, sizeof(verts)); - pipe_buffer_unmap(pipe->screen, buf); + pipe_buffer_write(pipe->screen, buf, 0, sizeof(verts), verts); util_draw_vertex_buffer(pipe, buf, 0, PIPE_PRIM_QUADS, 4, /* verts */ 3); /* attribs/vert */ - pipe_buffer_reference(pipe->screen, &buf, NULL); + pipe_buffer_reference(&buf, NULL); } } @@ -605,10 +602,9 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z, x1 = x + width * ctx->Pixel.ZoomX; y0 = (GLfloat) y; y1 = y + height * ctx->Pixel.ZoomY; - //if(!color) + draw_quad(ctx, x0, y0, z, x1, y1, color, invertTex); - //else - //printf("skip draw quad\n"); + /* restore state */ cso_restore_rasterizer(cso); cso_restore_viewport(cso); @@ -619,117 +615,6 @@ draw_textured_quad(GLcontext *ctx, GLint x, GLint y, GLfloat z, } -/** - * Check if a GL format/type combination is a match to the given pipe format. - * XXX probably move this to a re-usable place. - */ -static GLboolean -compatible_formats(GLenum format, GLenum type, enum pipe_format pipeFormat) -{ - static const GLuint one = 1; - GLubyte littleEndian = *((GLubyte *) &one); - - if (pipeFormat == PIPE_FORMAT_R8G8B8A8_UNORM && - format == GL_RGBA && - type == GL_UNSIGNED_BYTE && - !littleEndian) { - return GL_TRUE; - } - else if (pipeFormat == PIPE_FORMAT_R8G8B8A8_UNORM && - format == GL_ABGR_EXT && - type == GL_UNSIGNED_BYTE && - littleEndian) { - return GL_TRUE; - } - else if (pipeFormat == PIPE_FORMAT_A8R8G8B8_UNORM && - format == GL_BGRA && - type == GL_UNSIGNED_BYTE && - littleEndian) { - return GL_TRUE; - } - else if (pipeFormat == PIPE_FORMAT_R5G6B5_UNORM && - format == GL_RGB && - type == GL_UNSIGNED_SHORT_5_6_5) { - /* endian don't care */ - return GL_TRUE; - } - else if (pipeFormat == PIPE_FORMAT_R5G6B5_UNORM && - format == GL_BGR && - type == GL_UNSIGNED_SHORT_5_6_5_REV) { - /* endian don't care */ - return GL_TRUE; - } - else if (pipeFormat == PIPE_FORMAT_S8_UNORM && - format == GL_STENCIL_INDEX && - type == GL_UNSIGNED_BYTE) { - return GL_TRUE; - } - else if (pipeFormat == PIPE_FORMAT_Z32_UNORM && - format == GL_DEPTH_COMPONENT && - type == GL_UNSIGNED_INT) { - return GL_TRUE; - } - /* XXX add more cases */ - else { - return GL_FALSE; - } -} - - -/** - * Check if any per-fragment ops are enabled. - * XXX probably move this to a re-usable place. - */ -static GLboolean -any_fragment_ops(const struct st_context *st) -{ - if (st->state.depth_stencil.alpha.enabled || - st->state.depth_stencil.depth.enabled || - st->state.blend.blend_enable || - st->state.blend.logicop_enable) - /* XXX more checks */ - return GL_TRUE; - else - return GL_FALSE; -} - - -/** - * Check if any pixel transfer ops are enabled. - * XXX probably move this to a re-usable place. - */ -static GLboolean -any_pixel_transfer_ops(const struct st_context *st) -{ - if (st->ctx->Pixel.RedScale != 1.0 || - st->ctx->Pixel.RedBias != 0.0 || - st->ctx->Pixel.GreenScale != 1.0 || - st->ctx->Pixel.GreenBias != 0.0 || - st->ctx->Pixel.BlueScale != 1.0 || - st->ctx->Pixel.BlueBias != 0.0 || - st->ctx->Pixel.AlphaScale != 1.0 || - st->ctx->Pixel.AlphaBias != 0.0 || - st->ctx->Pixel.MapColorFlag) - /* XXX more checks */ - return GL_TRUE; - else - return GL_FALSE; -} - - -/** - * Draw image with a blit, or other non-textured quad method. - */ -static void -draw_blit(struct st_context *st, - GLsizei width, GLsizei height, - GLenum format, GLenum type, const GLvoid *pixels) -{ - - -} - - static void draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLenum type, @@ -740,7 +625,7 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y, struct pipe_context *pipe = st->pipe; struct pipe_screen *screen = pipe->screen; struct st_renderbuffer *strb; - struct pipe_surface *ps; + struct pipe_transfer *pt; const GLboolean zoom = ctx->Pixel.ZoomX != 1.0 || ctx->Pixel.ZoomY != 1.0; GLint skipPixels; ubyte *stmap; @@ -749,21 +634,20 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y, strb = st_renderbuffer(ctx->DrawBuffer-> Attachment[BUFFER_STENCIL].Renderbuffer); - ps = screen->get_tex_surface(screen, strb->texture, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_WRITE); + pt = screen->get_tex_transfer(screen, strb->texture, 0, 0, 0, + PIPE_TRANSFER_WRITE, x, y, + width, height); - /* map the stencil buffer */ - stmap = screen->surface_map(screen, ps, - PIPE_BUFFER_USAGE_CPU_WRITE); + stmap = screen->transfer_map(screen, pt); /* if width > MAX_WIDTH, have to process image in chunks */ skipPixels = 0; while (skipPixels < width) { - const GLint spanX = x + skipPixels; + const GLint spanX = skipPixels; const GLint spanWidth = MIN2(width - skipPixels, MAX_WIDTH); GLint row; for (row = 0; row < height; row++) { - GLint spanY = y + row; + GLint spanY = row; GLubyte values[MAX_WIDTH]; GLenum destType = GL_UNSIGNED_BYTE; const GLvoid *source = _mesa_image_address2d(unpack, pixels, @@ -775,25 +659,25 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y, ctx->_ImageTransferState); if (zoom) { /* - _swrast_write_zoomed_stencil_span(ctx, x, y, spanWidth, + _swrast_write_zoomed_stencil_span(ctx, 0, 0, spanWidth, spanX, spanY, values); */ } else { if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) { - spanY = ctx->DrawBuffer->Height - spanY - 1; + spanY = height - spanY - 1; } - switch (ps->format) { + switch (pt->format) { case PIPE_FORMAT_S8_UNORM: { - ubyte *dest = stmap + spanY * ps->stride + spanX; + ubyte *dest = stmap + spanY * pt->stride + spanX; memcpy(dest, values, spanWidth); } break; case PIPE_FORMAT_S8Z24_UNORM: { - uint *dest = (uint *) (stmap + spanY * ps->stride + spanX*4); + uint *dest = (uint *) (stmap + spanY * pt->stride + spanX*4); GLint k; for (k = 0; k < spanWidth; k++) { uint p = dest[k]; @@ -811,8 +695,8 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y, } /* unmap the stencil buffer */ - screen->surface_unmap(screen, ps); - pipe_surface_reference(&ps, NULL); + screen->transfer_unmap(screen, pt); + screen->tex_transfer_destroy(pt); } @@ -861,10 +745,8 @@ st_DrawPixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, bufferFormat = ps->format; - if (1/*any_fragment_ops(st) || - any_pixel_transfer_ops(st) || - !compatible_formats(format, type, ps->format)*/) { - /* textured quad */ + /* draw with textured quad */ + { struct pipe_texture *pt = make_texture(ctx->st, width, height, format, type, unpack, pixels); if (pt) { @@ -874,10 +756,6 @@ st_DrawPixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, pipe_texture_reference(&pt, NULL); } } - else { - /* blit */ - draw_blit(st, width, height, format, type, pixels); - } _mesa_set_vp_override( ctx, FALSE ); } @@ -891,12 +769,12 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy, { struct st_renderbuffer *rbDraw = st_renderbuffer(ctx->DrawBuffer->_StencilBuffer); struct pipe_screen *screen = ctx->st->pipe->screen; - struct pipe_surface *psDraw; + struct pipe_transfer *ptDraw; ubyte *drawMap; ubyte *buffer; int i; - buffer = malloc(width * height * sizeof(ubyte)); + buffer = _mesa_malloc(width * height * sizeof(ubyte)); if (!buffer) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyPixels(stencil)"); return; @@ -906,14 +784,15 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy, st_read_stencil_pixels(ctx, srcx, srcy, width, height, GL_UNSIGNED_BYTE, &ctx->DefaultPacking, buffer); - psDraw = screen->get_tex_surface(screen, rbDraw->texture, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_WRITE); + ptDraw = screen->get_tex_transfer(screen, rbDraw->texture, 0, 0, 0, + PIPE_TRANSFER_WRITE, dstx, dsty, + width, height); - assert(psDraw->block.width == 1); - assert(psDraw->block.height == 1); + assert(ptDraw->block.width == 1); + assert(ptDraw->block.height == 1); /* map the stencil buffer */ - drawMap = screen->surface_map(screen, psDraw, PIPE_BUFFER_USAGE_CPU_WRITE); + drawMap = screen->transfer_map(screen, ptDraw); /* draw */ /* XXX PixelZoom not handled yet */ @@ -922,16 +801,16 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy, const ubyte *src; int y; - y = dsty + i; + y = i; if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) { - y = ctx->DrawBuffer->Height - y - 1; + y = height - y - 1; } - dst = drawMap + y * psDraw->stride + dstx * psDraw->block.size; + dst = drawMap + y * ptDraw->stride; src = buffer + i * width; - switch (psDraw->format) { + switch (ptDraw->format) { case PIPE_FORMAT_S8Z24_UNORM: { uint *dst4 = (uint *) dst; @@ -950,11 +829,11 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy, } } - free(buffer); + _mesa_free(buffer); /* unmap the stencil buffer */ - screen->surface_unmap(screen, psDraw); - pipe_surface_reference(&psDraw, NULL); + screen->transfer_unmap(screen, ptDraw); + screen->tex_transfer_destroy(ptDraw); } @@ -969,7 +848,6 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy, struct st_renderbuffer *rbRead; struct st_vertex_program *stvp; struct st_fragment_program *stfp; - struct pipe_surface *psTex; struct pipe_texture *pt; GLfloat *color; enum pipe_format srcFormat, texFormat; @@ -1035,45 +913,47 @@ st_CopyPixels(GLcontext *ctx, GLint srcx, GLint srcy, struct pipe_surface *psRead = screen->get_tex_surface(screen, rbRead->texture, 0, 0, 0, PIPE_BUFFER_USAGE_GPU_READ); - psTex = screen->get_tex_surface(screen, pt, 0, 0, 0, + struct pipe_surface *psTex = screen->get_tex_surface(screen, pt, 0, 0, 0, PIPE_BUFFER_USAGE_GPU_WRITE ); pipe->surface_copy(pipe, - FALSE, psTex, /* dest */ 0, 0, /* destx/y */ psRead, srcx, srcy, width, height); - pipe_surface_reference(&psRead, NULL); + pipe_surface_reference(&psRead, NULL); + pipe_surface_reference(&psTex, NULL); } else { /* CPU-based fallback/conversion */ - struct pipe_surface *psRead = screen->get_tex_surface(screen, - rbRead->texture, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_READ); + struct pipe_transfer *ptRead = + screen->get_tex_transfer(screen, rbRead->texture, 0, 0, 0, + PIPE_TRANSFER_READ, srcx, srcy, width, + height); - psTex = screen->get_tex_surface(screen, pt, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_WRITE ); + struct pipe_transfer *ptTex = + screen->get_tex_transfer(screen, pt, 0, 0, 0, PIPE_TRANSFER_WRITE, + 0, 0, width, height); if (type == GL_COLOR) { /* alternate path using get/put_tile() */ - GLfloat *buf = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat)); + GLfloat *buf = (GLfloat *) _mesa_malloc(width * height * 4 * sizeof(GLfloat)); - pipe_get_tile_rgba(psRead, srcx, srcy, width, height, buf); - pipe_put_tile_rgba(psTex, 0, 0, width, height, buf); + pipe_get_tile_rgba(ptRead, 0, 0, width, height, buf); + pipe_put_tile_rgba(ptTex, 0, 0, width, height, buf); - free(buf); + _mesa_free(buf); } else { /* GL_DEPTH */ - GLuint *buf = (GLuint *) malloc(width * height * sizeof(GLuint)); - pipe_get_tile_z(psRead, srcx, srcy, width, height, buf); - pipe_put_tile_z(psTex, 0, 0, width, height, buf); - free(buf); + GLuint *buf = (GLuint *) _mesa_malloc(width * height * sizeof(GLuint)); + pipe_get_tile_z(ptRead, 0, 0, width, height, buf); + pipe_put_tile_z(ptTex, 0, 0, width, height, buf); + _mesa_free(buf); } - pipe_surface_reference(&psRead, NULL); - } - pipe_surface_reference(&psTex, NULL); + screen->tex_transfer_destroy(ptRead); + screen->tex_transfer_destroy(ptTex); + } /* draw textured quad */ draw_textured_quad(ctx, dstx, dsty, ctx->Current.RasterPos[2], @@ -1100,5 +980,3 @@ st_destroy_drawpix(struct st_context *st) st_reference_vertprog(st, &st->drawpix.vert_shaders[0], NULL); st_reference_vertprog(st, &st->drawpix.vert_shaders[1], NULL); } - - diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 9af648b8d0..f74d0d46d0 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -41,7 +41,6 @@ #include "pipe/p_context.h" #include "pipe/p_defines.h" -#include "pipe/p_inlines.h" #include "pipe/p_screen.h" #include "st_context.h" #include "st_cb_fbo.h" @@ -172,12 +171,8 @@ st_renderbuffer_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb, assert(strb->surface->texture); assert(strb->surface->format); - assert(strb->surface->block.size); - assert(strb->surface->block.width); - assert(strb->surface->block.height); assert(strb->surface->width == width); assert(strb->surface->height == height); - assert(strb->surface->stride); return strb->surface != NULL; @@ -194,7 +189,7 @@ st_renderbuffer_delete(struct gl_renderbuffer *rb) ASSERT(strb); pipe_surface_reference(&strb->surface, NULL); pipe_texture_reference(&strb->texture, NULL); - free(strb); + _mesa_free(strb); } @@ -232,7 +227,7 @@ st_new_framebuffer(GLcontext *ctx, GLuint name) static struct gl_renderbuffer * st_new_renderbuffer(GLcontext *ctx, GLuint name) { - struct st_renderbuffer *strb = CALLOC_STRUCT(st_renderbuffer); + struct st_renderbuffer *strb = ST_CALLOC_STRUCT(st_renderbuffer); if (strb) { _mesa_init_renderbuffer(&strb->Base, name); strb->Base.Delete = st_renderbuffer_delete; @@ -254,7 +249,7 @@ st_new_renderbuffer_fb(enum pipe_format format, int samples) { struct st_renderbuffer *strb; - strb = CALLOC_STRUCT(st_renderbuffer); + strb = ST_CALLOC_STRUCT(st_renderbuffer); if (!strb) { _mesa_error(NULL, GL_OUT_OF_MEMORY, "creating renderbuffer"); return NULL; @@ -361,8 +356,6 @@ st_render_texture(GLcontext *ctx, if (!pt) return; - assert(!att->Renderbuffer); - /* create new renderbuffer which wraps the texture image */ rb = st_new_renderbuffer(ctx, 0); if (!rb) { @@ -419,7 +412,6 @@ static void st_finish_render_texture(GLcontext *ctx, struct gl_renderbuffer_attachment *att) { - struct pipe_screen *screen = ctx->st->pipe->screen; struct st_renderbuffer *strb = st_renderbuffer(att->Renderbuffer); if (!strb) @@ -428,7 +420,7 @@ st_finish_render_texture(GLcontext *ctx, st_flush( ctx->st, PIPE_FLUSH_RENDER_CACHE, NULL ); if (strb->surface) - screen->tex_surface_release( screen, &strb->surface ); + pipe_surface_reference( &strb->surface, NULL ); strb->rtt = NULL; @@ -443,6 +435,25 @@ st_finish_render_texture(GLcontext *ctx, } +/** + * Check that the framebuffer configuration is valid in terms of what + * the driver can support. + * + * For Gallium we only supports combined Z+stencil, not separate buffers. + */ +static void +st_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb) +{ + const struct gl_renderbuffer *depthRb = + fb->Attachment[BUFFER_DEPTH].Renderbuffer; + const struct gl_renderbuffer *stencilRb = + fb->Attachment[BUFFER_STENCIL].Renderbuffer; + + if (stencilRb && depthRb && stencilRb != depthRb) { + fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; + } +} + void st_init_fbo_functions(struct dd_function_table *functions) { @@ -452,6 +463,7 @@ void st_init_fbo_functions(struct dd_function_table *functions) functions->FramebufferRenderbuffer = st_framebuffer_renderbuffer; functions->RenderTexture = st_render_texture; functions->FinishRenderTexture = st_finish_render_texture; + functions->ValidateFramebuffer = st_validate_framebuffer; /* no longer needed by core Mesa, drivers handle resizes... functions->ResizeBuffers = st_resize_buffers; */ diff --git a/src/mesa/state_tracker/st_cb_feedback.c b/src/mesa/state_tracker/st_cb_feedback.c index c7e8aa7cc5..93f7145219 100644 --- a/src/mesa/state_tracker/st_cb_feedback.c +++ b/src/mesa/state_tracker/st_cb_feedback.c @@ -122,8 +122,8 @@ feedback_tri( struct draw_stage *stage, struct prim_header *prim ) { struct feedback_stage *fs = feedback_stage(stage); struct draw_context *draw = stage->draw; - FEEDBACK_TOKEN(fs->ctx, (GLfloat) GL_POLYGON_TOKEN); - FEEDBACK_TOKEN(fs->ctx, (GLfloat) 3); /* three vertices */ + _mesa_feedback_token(fs->ctx, (GLfloat) GL_POLYGON_TOKEN); + _mesa_feedback_token(fs->ctx, (GLfloat) 3); /* three vertices */ feedback_vertex(fs->ctx, draw, prim->v[0]); feedback_vertex(fs->ctx, draw, prim->v[1]); feedback_vertex(fs->ctx, draw, prim->v[2]); @@ -136,11 +136,11 @@ feedback_line( struct draw_stage *stage, struct prim_header *prim ) struct feedback_stage *fs = feedback_stage(stage); struct draw_context *draw = stage->draw; if (fs->reset_stipple_counter) { - FEEDBACK_TOKEN(fs->ctx, (GLfloat) GL_LINE_RESET_TOKEN); + _mesa_feedback_token(fs->ctx, (GLfloat) GL_LINE_RESET_TOKEN); fs->reset_stipple_counter = GL_FALSE; } else { - FEEDBACK_TOKEN(fs->ctx, (GLfloat) GL_LINE_TOKEN); + _mesa_feedback_token(fs->ctx, (GLfloat) GL_LINE_TOKEN); } feedback_vertex(fs->ctx, draw, prim->v[0]); feedback_vertex(fs->ctx, draw, prim->v[1]); @@ -152,7 +152,7 @@ feedback_point( struct draw_stage *stage, struct prim_header *prim ) { struct feedback_stage *fs = feedback_stage(stage); struct draw_context *draw = stage->draw; - FEEDBACK_TOKEN(fs->ctx, (GLfloat) GL_POINT_TOKEN); + _mesa_feedback_token(fs->ctx, (GLfloat) GL_POINT_TOKEN); feedback_vertex(fs->ctx, draw, prim->v[0]); } @@ -184,7 +184,7 @@ feedback_destroy( struct draw_stage *stage ) static struct draw_stage * draw_glfeedback_stage(GLcontext *ctx, struct draw_context *draw) { - struct feedback_stage *fs = CALLOC_STRUCT(feedback_stage); + struct feedback_stage *fs = ST_CALLOC_STRUCT(feedback_stage); fs->stage.draw = draw; fs->stage.next = NULL; @@ -257,7 +257,7 @@ select_destroy( struct draw_stage *stage ) static struct draw_stage * draw_glselect_stage(GLcontext *ctx, struct draw_context *draw) { - struct feedback_stage *fs = CALLOC_STRUCT(feedback_stage); + struct feedback_stage *fs = ST_CALLOC_STRUCT(feedback_stage); fs->stage.draw = draw; fs->stage.next = NULL; diff --git a/src/mesa/state_tracker/st_cb_flush.c b/src/mesa/state_tracker/st_cb_flush.c index f8621ab125..7d7d3823c9 100644 --- a/src/mesa/state_tracker/st_cb_flush.c +++ b/src/mesa/state_tracker/st_cb_flush.c @@ -63,16 +63,19 @@ display_front_buffer(struct st_context *st) GLframebuffer *fb = st->ctx->DrawBuffer; struct st_renderbuffer *strb = st_renderbuffer(fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer); - struct pipe_surface *front_surf = strb->surface; - /* Hook for copying "fake" frontbuffer if necessary: - */ - st->pipe->screen->flush_frontbuffer( st->pipe->screen, front_surf, - st->pipe->priv ); - - /* - st->frontbuffer_status = FRONT_STATUS_UNDEFINED; - */ + if (strb) { + struct pipe_surface *front_surf = strb->surface; + + /* Hook for copying "fake" frontbuffer if necessary: + */ + st->pipe->screen->flush_frontbuffer( st->pipe->screen, front_surf, + st->pipe->priv ); + + /* + st->frontbuffer_status = FRONT_STATUS_UNDEFINED; + */ + } } @@ -117,13 +120,16 @@ static void st_glFlush(GLcontext *ctx) { struct st_context *st = ctx->st; + /* Don't call st_finish() here. It is not the state tracker's + * responsibilty to inject sleeps in the hope of avoiding buffer + * synchronization issues. Calling finish() here will just hide + * problems that need to be fixed elsewhere. + */ + st_flush(st, PIPE_FLUSH_RENDER_CACHE | PIPE_FLUSH_FRAME, NULL); + if (is_front_buffer_dirty(st)) { - st_finish(st); display_front_buffer(st); } - else { - st_flush(st, PIPE_FLUSH_RENDER_CACHE, NULL); - } } diff --git a/src/mesa/state_tracker/st_cb_program.c b/src/mesa/state_tracker/st_cb_program.c index ea0fa20012..4398ab2839 100644 --- a/src/mesa/state_tracker/st_cb_program.c +++ b/src/mesa/state_tracker/st_cb_program.c @@ -99,7 +99,7 @@ static struct gl_program *st_new_program( GLcontext *ctx, { switch (target) { case GL_VERTEX_PROGRAM_ARB: { - struct st_vertex_program *prog = CALLOC_STRUCT(st_vertex_program); + struct st_vertex_program *prog = ST_CALLOC_STRUCT(st_vertex_program); prog->serialNo = SerialNo++; @@ -111,7 +111,7 @@ static struct gl_program *st_new_program( GLcontext *ctx, case GL_FRAGMENT_PROGRAM_ARB: case GL_FRAGMENT_PROGRAM_NV: { - struct st_fragment_program *prog = CALLOC_STRUCT(st_fragment_program); + struct st_fragment_program *prog = ST_CALLOC_STRUCT(st_fragment_program); prog->serialNo = SerialNo++; @@ -152,7 +152,7 @@ st_delete_program(GLcontext *ctx, struct gl_program *prog) } if (stvp->state.tokens) { - FREE((void *) stvp->state.tokens); + _mesa_free((void *) stvp->state.tokens); stvp->state.tokens = NULL; } } @@ -167,7 +167,7 @@ st_delete_program(GLcontext *ctx, struct gl_program *prog) } if (stfp->state.tokens) { - FREE((void *) stfp->state.tokens); + _mesa_free((void *) stfp->state.tokens); stfp->state.tokens = NULL; } @@ -214,7 +214,7 @@ static void st_program_string_notify( GLcontext *ctx, } if (stfp->state.tokens) { - FREE((void *) stfp->state.tokens); + _mesa_free((void *) stfp->state.tokens); stfp->state.tokens = NULL; } @@ -242,7 +242,7 @@ static void st_program_string_notify( GLcontext *ctx, } if (stvp->state.tokens) { - FREE((void *) stvp->state.tokens); + _mesa_free((void *) stvp->state.tokens); stvp->state.tokens = NULL; } diff --git a/src/mesa/state_tracker/st_cb_queryobj.c b/src/mesa/state_tracker/st_cb_queryobj.c index 21c2c7dd9f..dcf4c38eb6 100644 --- a/src/mesa/state_tracker/st_cb_queryobj.c +++ b/src/mesa/state_tracker/st_cb_queryobj.c @@ -64,7 +64,7 @@ st_query_object(struct gl_query_object *q) static struct gl_query_object * st_NewQueryObject(GLcontext *ctx, GLuint id) { - struct st_query_object *stq = CALLOC_STRUCT(st_query_object); + struct st_query_object *stq = ST_CALLOC_STRUCT(st_query_object); if (stq) { stq->base.Id = id; stq->base.Ready = GL_TRUE; @@ -87,7 +87,7 @@ st_DeleteQuery(GLcontext *ctx, struct gl_query_object *q) stq->pq = NULL; } - FREE(stq); + _mesa_free(stq); } diff --git a/src/mesa/state_tracker/st_cb_rasterpos.c b/src/mesa/state_tracker/st_cb_rasterpos.c index 8867ca5652..7dd2352739 100644 --- a/src/mesa/state_tracker/st_cb_rasterpos.c +++ b/src/mesa/state_tracker/st_cb_rasterpos.c @@ -102,7 +102,7 @@ rastpos_line( struct draw_stage *stage, struct prim_header *prim ) static void rastpos_destroy(struct draw_stage *stage) { - free(stage); + _mesa_free(stage); } @@ -180,7 +180,7 @@ rastpos_point(struct draw_stage *stage, struct prim_header *prim) static struct rastpos_stage * new_draw_rastpos_stage(GLcontext *ctx, struct draw_context *draw) { - struct rastpos_stage *rs = CALLOC_STRUCT(rastpos_stage); + struct rastpos_stage *rs = ST_CALLOC_STRUCT(rastpos_stage); GLuint i; rs->stage.draw = draw; diff --git a/src/mesa/state_tracker/st_cb_readpixels.c b/src/mesa/state_tracker/st_cb_readpixels.c index 646eaff190..2a4beccd90 100644 --- a/src/mesa/state_tracker/st_cb_readpixels.c +++ b/src/mesa/state_tracker/st_cb_readpixels.c @@ -63,44 +63,48 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y, struct gl_framebuffer *fb = ctx->ReadBuffer; struct pipe_screen *screen = ctx->st->pipe->screen; struct st_renderbuffer *strb = st_renderbuffer(fb->_StencilBuffer); - struct pipe_surface *ps; + struct pipe_transfer *pt; ubyte *stmap; GLint j; - /* Create a CPU-READ surface/view into the renderbuffer's texture */ - ps = screen->get_tex_surface(screen, strb->texture, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_READ); + if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) { + y = ctx->DrawBuffer->Height - y - 1; + } + + /* Create a read transfer from the renderbuffer's texture */ + pt = screen->get_tex_transfer(screen, strb->texture, 0, 0, 0, + PIPE_TRANSFER_READ, x, y, width, height); /* map the stencil buffer */ - stmap = screen->surface_map(screen, ps, PIPE_BUFFER_USAGE_CPU_READ); + stmap = screen->transfer_map(screen, pt); /* width should never be > MAX_WIDTH since we did clipping earlier */ ASSERT(width <= MAX_WIDTH); /* process image row by row */ - for (j = 0; j < height; j++, y++) { + for (j = 0; j < height; j++) { GLvoid *dest; GLstencil values[MAX_WIDTH]; GLint srcY; if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP) { - srcY = ctx->DrawBuffer->Height - y - 1; + srcY = height - j - 1; } else { - srcY = y; + srcY = j; } /* get stencil values */ - switch (ps->format) { + switch (pt->format) { case PIPE_FORMAT_S8_UNORM: { - const ubyte *src = stmap + srcY * ps->stride + x; + const ubyte *src = stmap + srcY * pt->stride; memcpy(values, src, width); } break; case PIPE_FORMAT_S8Z24_UNORM: { - const uint *src = (uint *) (stmap + srcY * ps->stride + x*4); + const uint *src = (uint *) (stmap + srcY * pt->stride); GLint k; for (k = 0; k < width; k++) { values[k] = src[k] >> 24; @@ -109,7 +113,7 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y, break; case PIPE_FORMAT_Z24S8_UNORM: { - const uint *src = (uint *) (stmap + srcY * ps->stride + x*4); + const uint *src = (uint *) (stmap + srcY * pt->stride); GLint k; for (k = 0; k < width; k++) { values[k] = src[k] & 0xff; @@ -129,8 +133,8 @@ st_read_stencil_pixels(GLcontext *ctx, GLint x, GLint y, /* unmap the stencil buffer */ - screen->surface_unmap(screen, ps); - pipe_surface_reference(&ps, NULL); + screen->transfer_unmap(screen, pt); + screen->tex_transfer_destroy(pt); } @@ -203,28 +207,33 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb, { struct pipe_context *pipe = ctx->st->pipe; struct pipe_screen *screen = pipe->screen; - struct pipe_surface *surf; + struct pipe_transfer *trans; const GLubyte *map; GLubyte *dst; GLint row, col, dy, dstStride; - surf = screen->get_tex_surface(screen, strb->texture, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_READ); - if (!surf) { + if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) { + y = strb->texture->height[0] - y - height; + } + + trans = screen->get_tex_transfer(screen, strb->texture, 0, 0, 0, + PIPE_TRANSFER_READ, x, y, width, height); + if (!trans) { return GL_FALSE; } - map = screen->surface_map(screen, surf, PIPE_BUFFER_USAGE_CPU_READ); + map = screen->transfer_map(screen, trans); if (!map) { - pipe_surface_reference(&surf, NULL); + screen->tex_transfer_destroy(trans); return GL_FALSE; } if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) { - y = surf->height - y - 1; + y = height - 1; dy = -1; } else { + y = 0; dy = 1; } @@ -235,7 +244,7 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb, switch (combo) { case A8R8G8B8_UNORM_TO_RGBA_UBYTE: for (row = 0; row < height; row++) { - const GLubyte *src = map + y * surf->stride + x * 4; + const GLubyte *src = map + y * trans->stride; for (col = 0; col < width; col++) { GLuint pixel = ((GLuint *) src)[col]; dst[col*4+0] = (pixel >> 16) & 0xff; @@ -249,7 +258,7 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb, break; case A8R8G8B8_UNORM_TO_RGB_UBYTE: for (row = 0; row < height; row++) { - const GLubyte *src = map + y * surf->stride + x * 4; + const GLubyte *src = map + y * trans->stride; for (col = 0; col < width; col++) { GLuint pixel = ((GLuint *) src)[col]; dst[col*3+0] = (pixel >> 16) & 0xff; @@ -262,7 +271,7 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb, break; case A8R8G8B8_UNORM_TO_BGRA_UINT: for (row = 0; row < height; row++) { - const GLubyte *src = map + y * surf->stride + x * 4; + const GLubyte *src = map + y * trans->stride; memcpy(dst, src, 4 * width); dst += dstStride; y += dy; @@ -272,8 +281,8 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb, ; /* nothing */ } - screen->surface_unmap(screen, surf); - pipe_surface_reference(&surf, NULL); + screen->transfer_unmap(screen, trans); + screen->tex_transfer_destroy(trans); } return GL_TRUE; @@ -281,7 +290,7 @@ st_fast_readpixels(GLcontext *ctx, struct st_renderbuffer *strb, /** - * Do glReadPixels by getting rows from the framebuffer surface with + * Do glReadPixels by getting rows from the framebuffer transfer with * get_tile(). Convert to requested format/type with Mesa image routines. * Image transfer ops are done in software too. */ @@ -300,7 +309,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, GLfloat *df; struct st_renderbuffer *strb; struct gl_pixelstore_attrib clippedPacking = *pack; - struct pipe_surface *surf; + struct pipe_transfer *trans; assert(ctx->ReadBuffer->Width > 0); @@ -309,7 +318,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, /* Do all needed clipping here, so that we can forget about it later */ if (!_mesa_clip_readpixels(ctx, &x, &y, &width, &height, &clippedPacking)) { - /* The ReadPixels surface is totally outside the window bounds */ + /* The ReadPixels transfer is totally outside the window bounds */ return; } @@ -355,21 +364,26 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, dfStride = 0; } + if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) { + y = strb->Base.Height - y - height; + } + + /* Create a read transfer from the renderbuffer's texture */ + trans = screen->get_tex_transfer(screen, strb->texture, 0, 0, 0, + PIPE_TRANSFER_READ, x, y, width, height); + /* determine bottom-to-top vs. top-to-bottom order */ if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) { - y = strb->Base.Height - 1 - y; + y = height - 1; yStep = -1; } else { + y = 0; yStep = 1; } - /* Create a CPU-READ surface/view into the renderbuffer's texture */ - surf = screen->get_tex_surface(screen, strb->texture, 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_READ); - /* - * Copy pixels from pipe_surface to user memory + * Copy pixels from pipe_transfer to user memory */ { /* dest of first pixel in client memory */ @@ -379,14 +393,14 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, const GLint dstStride = _mesa_image_row_stride(&clippedPacking, width, format, type); - if (surf->format == PIPE_FORMAT_S8Z24_UNORM || - surf->format == PIPE_FORMAT_X8Z24_UNORM) { + if (trans->format == PIPE_FORMAT_S8Z24_UNORM || + trans->format == PIPE_FORMAT_X8Z24_UNORM) { if (format == GL_DEPTH_COMPONENT) { for (i = 0; i < height; i++) { GLuint ztemp[MAX_WIDTH]; GLfloat zfloat[MAX_WIDTH]; const double scale = 1.0 / ((1 << 24) - 1); - pipe_get_tile_raw(surf, x, y, width, 1, ztemp, 0); + pipe_get_tile_raw(trans, 0, y, width, 1, ztemp, 0); y += yStep; for (j = 0; j < width; j++) { zfloat[j] = (float) (scale * (ztemp[j] & 0xffffff)); @@ -400,18 +414,18 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, /* untested, but simple: */ assert(format == GL_DEPTH_STENCIL_EXT); for (i = 0; i < height; i++) { - pipe_get_tile_raw(surf, x, y, width, 1, dst, 0); + pipe_get_tile_raw(trans, 0, y, width, 1, dst, 0); y += yStep; dst += dstStride; } } } - else if (surf->format == PIPE_FORMAT_Z16_UNORM) { + else if (trans->format == PIPE_FORMAT_Z16_UNORM) { for (i = 0; i < height; i++) { GLushort ztemp[MAX_WIDTH]; GLfloat zfloat[MAX_WIDTH]; const double scale = 1.0 / 0xffff; - pipe_get_tile_raw(surf, x, y, width, 1, ztemp, 0); + pipe_get_tile_raw(trans, 0, y, width, 1, ztemp, 0); y += yStep; for (j = 0; j < width; j++) { zfloat[j] = (float) (scale * ztemp[j]); @@ -421,12 +435,12 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, dst += dstStride; } } - else if (surf->format == PIPE_FORMAT_Z32_UNORM) { + else if (trans->format == PIPE_FORMAT_Z32_UNORM) { for (i = 0; i < height; i++) { GLuint ztemp[MAX_WIDTH]; GLfloat zfloat[MAX_WIDTH]; const double scale = 1.0 / 0xffffffff; - pipe_get_tile_raw(surf, x, y, width, 1, ztemp, 0); + pipe_get_tile_raw(trans, 0, y, width, 1, ztemp, 0); y += yStep; for (j = 0; j < width; j++) { zfloat[j] = (float) (scale * ztemp[j]); @@ -440,7 +454,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, /* RGBA format */ /* Do a row at a time to flip image data vertically */ for (i = 0; i < height; i++) { - pipe_get_tile_rgba(surf, x, y, width, 1, df); + pipe_get_tile_rgba(trans, 0, y, width, 1, df); y += yStep; df += dfStride; if (!dfStride) { @@ -452,7 +466,7 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height, } } - pipe_surface_reference(&surf, NULL); + screen->tex_transfer_destroy(trans); _mesa_unmap_readpix_pbo(ctx, &clippedPacking); } diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 9279a768c8..edfa8854d8 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -25,12 +25,13 @@ * **************************************************************************/ -#include "main/imports.h" +#include "main/mfeatures.h" #if FEATURE_convolve #include "main/convolve.h" #endif #include "main/enums.h" #include "main/image.h" +#include "main/imports.h" #include "main/macros.h" #include "main/mipmap.h" #include "main/pixel.h" @@ -114,7 +115,7 @@ st_NewTextureImage(GLcontext * ctx) { DBG("%s\n", __FUNCTION__); (void) ctx; - return (struct gl_texture_image *) CALLOC_STRUCT(st_texture_image); + return (struct gl_texture_image *) ST_CALLOC_STRUCT(st_texture_image); } @@ -122,7 +123,7 @@ st_NewTextureImage(GLcontext * ctx) static struct gl_texture_object * st_NewTextureObject(GLcontext * ctx, GLuint name, GLenum target) { - struct st_texture_object *obj = CALLOC_STRUCT(st_texture_object); + struct st_texture_object *obj = ST_CALLOC_STRUCT(st_texture_object); DBG("%s\n", __FUNCTION__); _mesa_initialize_texture_object(&obj->base, name, target); @@ -204,7 +205,7 @@ __memcpy(void *to, const void *from, size_t n) static void * do_memcpy(void *dest, const void *src, size_t n) { - if ((((unsigned) src) & 63) || (((unsigned) dest) & 63)) { + if ((((unsigned long) src) & 63) || (((unsigned long) dest) & 63)) { return __memcpy(dest, src, n); } else @@ -464,18 +465,18 @@ st_TexImage(GLcontext * ctx, * bmBufferData with NULL data to free the old block and avoid * waiting on any outstanding fences. */ - if (stObj->pt && - (stObj->teximage_realloc || - (/*stObj->pt->first_level == level &&*/ - stObj->pt->last_level == level && - stObj->pt->target != PIPE_TEXTURE_CUBE && - !st_texture_match_image(stObj->pt, &stImage->base, - stImage->face, stImage->level)))) { - - DBG("release it\n"); - pipe_texture_reference(&stObj->pt, NULL); - assert(!stObj->pt); - stObj->teximage_realloc = FALSE; + if (stObj->pt) { + if (stObj->teximage_realloc || + level > stObj->pt->last_level || + (stObj->pt->last_level == level && + stObj->pt->target != PIPE_TEXTURE_CUBE && + !st_texture_match_image(stObj->pt, &stImage->base, + stImage->face, stImage->level))) { + DBG("release it\n"); + pipe_texture_reference(&stObj->pt, NULL); + assert(!stObj->pt); + stObj->teximage_realloc = FALSE; + } } if (!stObj->pt) { @@ -524,9 +525,10 @@ st_TexImage(GLcontext * ctx, if (stImage->pt) { texImage->Data = st_texture_image_map(ctx->st, stImage, 0, - PIPE_BUFFER_USAGE_CPU_WRITE); - if (stImage->surface) - dstRowStride = stImage->surface->stride; + PIPE_TRANSFER_WRITE, 0, 0, + stImage->base.Width, + stImage->base.Height); + dstRowStride = stImage->transfer->stride; } else { /* Allocate regular memory and store the image there temporarily. */ @@ -581,7 +583,9 @@ st_TexImage(GLcontext * ctx, if (stImage->pt && i < depth) { st_texture_image_unmap(ctx->st, stImage); texImage->Data = st_texture_image_map(ctx->st, stImage, i, - PIPE_BUFFER_USAGE_CPU_WRITE); + PIPE_TRANSFER_WRITE, 0, 0, + stImage->base.Width, + stImage->base.Height); src += srcImageStride; } } @@ -688,8 +692,10 @@ st_get_tex_image(GLcontext * ctx, GLenum target, GLint level, * kernel. Need to explicitly map and unmap it. */ texImage->Data = st_texture_image_map(ctx->st, stImage, 0, - PIPE_BUFFER_USAGE_CPU_READ); - texImage->RowStride = stImage->surface->stride / stImage->pt->block.size; + PIPE_TRANSFER_READ, 0, 0, + stImage->base.Width, + stImage->base.Height); + texImage->RowStride = stImage->transfer->stride / stImage->pt->block.size; } else { /* Otherwise, the image should actually be stored in @@ -720,7 +726,9 @@ st_get_tex_image(GLcontext * ctx, GLenum target, GLint level, if (stImage->pt && i < depth) { st_texture_image_unmap(ctx->st, stImage); texImage->Data = st_texture_image_map(ctx->st, stImage, i, - PIPE_BUFFER_USAGE_CPU_READ); + PIPE_TRANSFER_READ, 0, 0, + stImage->base.Width, + stImage->base.Height); dest += dstImageStride; } } @@ -792,9 +800,10 @@ st_TexSubimage(GLcontext * ctx, */ if (stImage->pt) { texImage->Data = st_texture_image_map(ctx->st, stImage, zoffset, - PIPE_BUFFER_USAGE_CPU_WRITE); - if (stImage->surface) - dstRowStride = stImage->surface->stride; + PIPE_TRANSFER_WRITE, + xoffset, yoffset, + width, height); + dstRowStride = stImage->transfer->stride; } if (!texImage->Data) { @@ -808,7 +817,7 @@ st_TexSubimage(GLcontext * ctx, if (!texImage->TexFormat->StoreImage(ctx, dims, texImage->_BaseFormat, texImage->TexFormat, texImage->Data, - xoffset, yoffset, 0, + 0, 0, 0, dstRowStride, texImage->ImageOffsets, width, height, 1, @@ -820,7 +829,9 @@ st_TexSubimage(GLcontext * ctx, /* map next slice of 3D texture */ st_texture_image_unmap(ctx->st, stImage); texImage->Data = st_texture_image_map(ctx->st, stImage, zoffset + i, - PIPE_BUFFER_USAGE_CPU_WRITE); + PIPE_TRANSFER_WRITE, + xoffset, yoffset, + width, height); src += srcImageStride; } } @@ -898,26 +909,8 @@ st_TexSubImage1D(GLcontext * ctx, /** - * Return 0 for GL_TEXTURE_CUBE_MAP_POSITIVE_X, - * 1 for GL_TEXTURE_CUBE_MAP_NEGATIVE_X, - * etc. - * XXX duplicated from main/teximage.c - */ -static uint -texture_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; -} - - - -/** - * Do a CopyTexSubImage operation by mapping the source surface and - * dest surface and using get_tile()/put_tile() to access the pixels/texels. + * Do a CopyTexSubImage operation using a read transfer from the source, a write + * transfer to the destination and get_tile()/put_tile() to access the pixels/texels. * * Note: srcY=0=TOP of renderbuffer */ @@ -934,20 +927,24 @@ fallback_copy_texsubimage(GLcontext *ctx, { struct pipe_context *pipe = ctx->st->pipe; struct pipe_screen *screen = pipe->screen; - const uint face = texture_face(target); - struct pipe_texture *pt = stImage->pt; - struct pipe_surface *src_surf, *dest_surf; + struct pipe_transfer *src_trans; + GLvoid *texDest; - /* We'd use strb->surface, here but it's created for GPU read/write only */ - src_surf = pipe->screen->get_tex_surface( pipe->screen, - strb->texture, - 0, 0, 0, - PIPE_BUFFER_USAGE_CPU_READ); + assert(width <= MAX_WIDTH); - dest_surf = screen->get_tex_surface(screen, pt, face, level, destZ, - PIPE_BUFFER_USAGE_CPU_WRITE); + if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) { + srcY = strb->Base.Height - srcY - height; + } - assert(width <= MAX_WIDTH); + src_trans = screen->get_tex_transfer( screen, + strb->texture, + 0, 0, 0, + PIPE_TRANSFER_READ, + srcX, srcY, + width, height); + + texDest = st_texture_image_map(ctx->st, stImage, 0, PIPE_TRANSFER_WRITE, + destX, destY, width, height); if (baseFormat == GL_DEPTH_COMPONENT) { const GLboolean scaleOrBias = (ctx->Pixel.DepthScale != 1.0F || @@ -956,39 +953,36 @@ fallback_copy_texsubimage(GLcontext *ctx, /* determine bottom-to-top vs. top-to-bottom order for src buffer */ if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) { - srcY = strb->Base.Height - 1 - srcY; + srcY = height - 1; yStep = -1; } else { + srcY = 0; yStep = 1; } /* To avoid a large temp memory allocation, do copy row by row */ - for (row = 0; row < height; row++, srcY += yStep, destY++) { + for (row = 0; row < height; row++, srcY += yStep) { uint data[MAX_WIDTH]; - pipe_get_tile_z(src_surf, srcX, srcY, width, 1, data); + pipe_get_tile_z(src_trans, 0, srcY, width, 1, data); if (scaleOrBias) { _mesa_scale_and_bias_depth_uint(ctx, width, data); } - pipe_put_tile_z(dest_surf, destX, destY, width, 1, data); + pipe_put_tile_z(stImage->transfer, 0, row, width, 1, data); } } else { /* RGBA format */ GLfloat *tempSrc = (GLfloat *) _mesa_malloc(width * height * 4 * sizeof(GLfloat)); - GLvoid *texDest = - st_texture_image_map(ctx->st, stImage, 0,PIPE_BUFFER_USAGE_CPU_WRITE); if (tempSrc && texDest) { const GLint dims = 2; struct gl_texture_image *texImage = &stImage->base; - GLint dstRowStride = stImage->surface->stride; + GLint dstRowStride = stImage->transfer->stride; struct gl_pixelstore_attrib unpack = ctx->DefaultPacking; if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) { - /* need to invert src */ - srcY = strb->Base.Height - srcY - height; unpack.Invert = GL_TRUE; } @@ -996,7 +990,7 @@ fallback_copy_texsubimage(GLcontext *ctx, /* XXX this usually involves a lot of int/float conversion. * try to avoid that someday. */ - pipe_get_tile_rgba(src_surf, srcX, srcY, width, height, tempSrc); + pipe_get_tile_rgba(src_trans, 0, 0, width, height, tempSrc); /* Store into texture memory. * Note that this does some special things such as pixel transfer @@ -1008,7 +1002,7 @@ fallback_copy_texsubimage(GLcontext *ctx, texImage->_BaseFormat, texImage->TexFormat, texDest, - destX, destY, destZ, + 0, 0, 0, dstRowStride, texImage->ImageOffsets, width, height, 1, @@ -1021,12 +1015,10 @@ fallback_copy_texsubimage(GLcontext *ctx, if (tempSrc) _mesa_free(tempSrc); - if (texDest) - st_texture_image_unmap(ctx->st, stImage); } - screen->tex_surface_release(screen, &dest_surf); - screen->tex_surface_release(screen, &src_surf); + st_texture_image_unmap(ctx->st, stImage); + screen->tex_transfer_destroy(src_trans); } @@ -1095,21 +1087,19 @@ st_copy_texsubimage(GLcontext *ctx, if (matching_base_formats && ctx->_ImageTransferState == 0x0) { /* try potential hardware path */ struct pipe_surface *dest_surface = NULL; + boolean do_flip = (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP); - if (src_format == dest_format) { + if (src_format == dest_format && !do_flip) { /* use surface_copy() / blit */ - boolean do_flip = (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP); + dest_surface = screen->get_tex_surface(screen, stImage->pt, stImage->face, stImage->level, destZ, PIPE_BUFFER_USAGE_GPU_WRITE); - if (do_flip) - srcY = strb->surface->height - srcY - height; /* for surface_copy(), y=0=top, always */ pipe->surface_copy(pipe, - do_flip, /* dest */ dest_surface, destX, destY, @@ -1129,7 +1119,6 @@ st_copy_texsubimage(GLcontext *ctx, PIPE_TEXTURE_USAGE_RENDER_TARGET, 0)) { /* draw textured quad to do the copy */ - boolean do_flip = (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP); int srcY0, srcY1; dest_surface = screen->get_tex_surface(screen, stImage->pt, @@ -1419,7 +1408,7 @@ st_finalize_texture(GLcontext *ctx, stObj->pt->depth[0] != firstImage->base.Depth2 || stObj->pt->block.size/stObj->pt->block.width != cpp || /* Nominal bytes per pixel */ stObj->pt->compressed != firstImage->base.IsCompressed) { - pipe_texture_release(&stObj->pt); + pipe_texture_reference(&stObj->pt, NULL); ctx->st->dirty.st |= ST_NEW_FRAMEBUFFER; } } diff --git a/src/mesa/state_tracker/st_cb_viewport.c b/src/mesa/state_tracker/st_cb_viewport.c new file mode 100644 index 0000000000..75b0a219ce --- /dev/null +++ b/src/mesa/state_tracker/st_cb_viewport.c @@ -0,0 +1,53 @@ +/************************************************************************** + * + * 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 "st_context.h" +#include "st_public.h" +#include "st_cb_viewport.h" + +#include "pipe/p_context.h" +#include "pipe/p_inlines.h" +#include "pipe/p_state.h" +#include "pipe/p_defines.h" +#include "pipe/internal/p_winsys_screen.h" + + +static void st_viewport(GLcontext * ctx, GLint x, GLint y, + GLsizei width, GLsizei height) +{ + struct st_context *st = ctx->st; + + if (st->pipe->winsys && st->pipe->winsys->update_buffer) + st->pipe->winsys->update_buffer( st->pipe->winsys, + st->pipe->priv ); +} + +void st_init_viewport_functions(struct dd_function_table *functions) +{ + functions->Viewport = st_viewport; +} diff --git a/src/mesa/state_tracker/st_cb_viewport.h b/src/mesa/state_tracker/st_cb_viewport.h new file mode 100644 index 0000000000..44948e5316 --- /dev/null +++ b/src/mesa/state_tracker/st_cb_viewport.h @@ -0,0 +1,29 @@ +/************************************************************************** + * + * 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. + * + **************************************************************************/ + +extern void +st_init_viewport_functions(struct dd_function_table *functions); diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index e584a6ceea..b27274725f 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -31,6 +31,7 @@ #include "main/matrix.h" #include "main/buffers.h" #include "main/scissor.h" +#include "main/viewport.h" #include "vbo/vbo.h" #include "shader/shader_api.h" #include "glapi/glapi.h" @@ -59,13 +60,13 @@ #include "st_cb_texture.h" #include "st_cb_flush.h" #include "st_cb_strings.h" +#include "st_cb_viewport.h" #include "st_atom.h" #include "st_draw.h" #include "st_extensions.h" #include "st_gen_mipmap.h" #include "st_program.h" #include "pipe/p_context.h" -#include "pipe/p_inlines.h" #include "draw/draw_context.h" #include "cso_cache/cso_cache.h" #include "cso_cache/cso_context.h" @@ -105,7 +106,7 @@ static struct st_context * st_create_context_priv( GLcontext *ctx, struct pipe_context *pipe ) { uint i; - struct st_context *st = CALLOC_STRUCT( st_context ); + struct st_context *st = ST_CALLOC_STRUCT( st_context ); ctx->st = st; @@ -208,7 +209,7 @@ static void st_destroy_context_priv( struct st_context *st ) for (i = 0; i < Elements(st->state.constants); i++) { if (st->state.constants[i].buffer) { - pipe_buffer_reference(st->pipe->screen, &st->state.constants[i].buffer, NULL); + pipe_buffer_reference(&st->state.constants[i].buffer, NULL); } } @@ -217,7 +218,7 @@ static void st_destroy_context_priv( struct st_context *st ) st->default_texture = NULL; } - free( st ); + _mesa_free( st ); } @@ -245,7 +246,7 @@ void st_destroy_context( struct st_context *st ) pipe->destroy( pipe ); - free(ctx); + _mesa_free(ctx); } @@ -253,6 +254,11 @@ void st_make_current(struct st_context *st, struct st_framebuffer *draw, struct st_framebuffer *read) { + /* Call this periodically to detect when the user has begun using + * GL rendering from multiple threads. + */ + _glapi_check_multithread(); + if (st) { GLboolean firstTime = st->ctx->FirstTimeCurrent; _mesa_make_current(st->ctx, &draw->Base, &read->Base); @@ -320,6 +326,7 @@ void st_init_driver_functions(struct dd_function_table *functions) st_init_texture_functions(functions); st_init_flush_functions(functions); st_init_string_functions(functions); + st_init_viewport_functions(functions); functions->UpdateState = st_invalidate_state; } diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h index 695ac4a96f..d7518ab689 100644 --- a/src/mesa/state_tracker/st_context.h +++ b/src/mesa/state_tracker/st_context.h @@ -149,7 +149,6 @@ struct st_context struct { struct pipe_rasterizer_state rasterizer; struct pipe_sampler_state sampler; - struct pipe_shader_state vert_shader; enum pipe_format tex_format; void *vs; float vertices[4][3][4]; /**< vertex pos + color + texcoord */ @@ -166,8 +165,6 @@ struct st_context /** for glClear */ struct { - struct pipe_shader_state vert_shader; - struct pipe_shader_state frag_shader; struct pipe_rasterizer_state raster; struct pipe_viewport_state viewport; void *vs; @@ -242,6 +239,10 @@ st_fb_orientation(const struct gl_framebuffer *fb) } +/** clear-alloc a struct-sized object, with casting */ +#define ST_CALLOC_STRUCT(T) (struct T *) _mesa_calloc(sizeof(struct T)) + + extern int st_get_msaa(void); diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index ae71d586c2..225541a30b 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -223,7 +223,7 @@ setup_edgeflags(GLcontext *ctx, GLenum primMode, GLint start, GLint count, if (!stobj) return NULL; - vec = (unsigned *) calloc(sizeof(unsigned), (count + 31) / 32); + vec = (unsigned *) _mesa_calloc(sizeof(unsigned) * ((count + 31) / 32)); if (!vec) return NULL; @@ -378,8 +378,8 @@ setup_interleaved_attribs(GLcontext *ctx, } else { vbuffer->buffer = NULL; - pipe_buffer_reference(pipe->screen, &vbuffer->buffer, stobj->buffer); - vbuffer->buffer_offset = (unsigned) low; + pipe_buffer_reference(&vbuffer->buffer, stobj->buffer); + vbuffer->buffer_offset = pointer_to_offset(low); } vbuffer->stride = stride; /* in bytes */ vbuffer->max_index = max_index; @@ -433,8 +433,8 @@ setup_non_interleaved_attribs(GLcontext *ctx, /*printf("stobj %u = %p\n", attr, (void*) stobj);*/ vbuffer[attr].buffer = NULL; - pipe_buffer_reference(pipe->screen, &vbuffer[attr].buffer, stobj->buffer); - vbuffer[attr].buffer_offset = (unsigned) arrays[mesaAttr]->Ptr; + pipe_buffer_reference(&vbuffer[attr].buffer, stobj->buffer); + vbuffer[attr].buffer_offset = pointer_to_offset(arrays[mesaAttr]->Ptr); velements[attr].src_offset = 0; } else { @@ -545,6 +545,8 @@ st_draw_vbo(GLcontext *ctx, if (MESA_VERBOSE & VERBOSE_GLSL) { check_uniforms(ctx); } +#else + (void) check_uniforms; #endif /* @@ -617,8 +619,8 @@ st_draw_vbo(GLcontext *ctx, if (bufobj && bufobj->Name) { /* elements/indexes are in a real VBO */ struct st_buffer_object *stobj = st_buffer_object(bufobj); - pipe_buffer_reference(pipe->screen, &indexBuf, stobj->buffer); - indexOffset = (unsigned) ib->ptr / indexSize; + pipe_buffer_reference(&indexBuf, stobj->buffer); + indexOffset = pointer_to_offset(ib->ptr) / indexSize; } else { /* element/indicies are in user space memory */ @@ -657,7 +659,7 @@ st_draw_vbo(GLcontext *ctx, } } - pipe_buffer_reference(pipe->screen, &indexBuf, NULL); + pipe_buffer_reference(&indexBuf, NULL); } else { /* non-indexed */ @@ -673,7 +675,7 @@ st_draw_vbo(GLcontext *ctx, /* unreference buffers (frees wrapped user-space buffer objects) */ for (attr = 0; attr < num_vbuffers; attr++) { - pipe_buffer_reference(pipe->screen, &vbuffer[attr].buffer, NULL); + pipe_buffer_reference(&vbuffer[attr].buffer, NULL); assert(!vbuffer[attr].buffer); } diff --git a/src/mesa/state_tracker/st_draw.h b/src/mesa/state_tracker/st_draw.h index 659c3ac834..da04fce8e2 100644 --- a/src/mesa/state_tracker/st_draw.h +++ b/src/mesa/state_tracker/st_draw.h @@ -64,4 +64,19 @@ st_feedback_draw_vbo(GLcontext *ctx, extern GLuint st_pipe_vertex_format(GLenum type, GLuint size, GLboolean normalized); + +/** + * When drawing with VBOs, the addresses specified with + * glVertex/Color/TexCoordPointer() are really offsets into the VBO, not real + * addresses. At some point we need to convert those pointers to offsets. + * This function is basically a cast wrapper to avoid warnings when building + * in 64-bit mode. + */ +static INLINE unsigned +pointer_to_offset(const void *ptr) +{ + return (unsigned) (((unsigned long) ptr) & 0xffffffffUL); +} + + #endif diff --git a/src/mesa/state_tracker/st_draw_feedback.c b/src/mesa/state_tracker/st_draw_feedback.c index 5c9c4506c2..e533afd051 100644 --- a/src/mesa/state_tracker/st_draw_feedback.c +++ b/src/mesa/state_tracker/st_draw_feedback.c @@ -152,8 +152,8 @@ st_feedback_draw_vbo(GLcontext *ctx, assert(stobj->buffer); vbuffers[attr].buffer = NULL; - pipe_buffer_reference(pipe->screen, &vbuffers[attr].buffer, stobj->buffer); - vbuffers[attr].buffer_offset = (unsigned) arrays[0]->Ptr;/* in bytes */ + pipe_buffer_reference(&vbuffers[attr].buffer, stobj->buffer); + vbuffers[attr].buffer_offset = pointer_to_offset(arrays[0]->Ptr); velements[attr].src_offset = arrays[mesaAttr]->Ptr - arrays[0]->Ptr; } else { @@ -248,7 +248,7 @@ st_feedback_draw_vbo(GLcontext *ctx, for (i = 0; i < PIPE_MAX_ATTRIBS; i++) { if (draw->pt.vertex_buffer[i].buffer) { pipe_buffer_unmap(pipe->screen, draw->pt.vertex_buffer[i].buffer); - pipe_buffer_reference(pipe->screen, &draw->pt.vertex_buffer[i].buffer, NULL); + pipe_buffer_reference(&draw->pt.vertex_buffer[i].buffer, NULL); draw_set_mapped_vertex_buffer(draw, i, NULL); } } diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index cd34529d38..8f6be50774 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -208,6 +208,7 @@ void st_init_extensions(struct st_context *st) if (screen->get_param(screen, PIPE_CAP_TWO_SIDED_STENCIL)) { ctx->Extensions.ATI_separate_stencil = GL_TRUE; + ctx->Extensions.EXT_stencil_two_side = GL_TRUE; } if (screen->get_param(screen, PIPE_CAP_ANISOTROPIC_FILTER)) { diff --git a/src/mesa/state_tracker/st_framebuffer.c b/src/mesa/state_tracker/st_framebuffer.c index 0d9c7b97e3..06fec20eee 100644 --- a/src/mesa/state_tracker/st_framebuffer.c +++ b/src/mesa/state_tracker/st_framebuffer.c @@ -33,12 +33,12 @@ #include "main/matrix.h" #include "main/renderbuffer.h" #include "main/scissor.h" +#include "main/viewport.h" #include "st_context.h" #include "st_cb_fbo.h" #include "st_public.h" #include "pipe/p_defines.h" #include "pipe/p_context.h" -#include "pipe/p_inlines.h" struct st_framebuffer * @@ -49,7 +49,7 @@ st_create_framebuffer( const __GLcontextModes *visual, uint width, uint height, void *private) { - struct st_framebuffer *stfb = CALLOC_STRUCT(st_framebuffer); + struct st_framebuffer *stfb = ST_CALLOC_STRUCT(st_framebuffer); if (stfb) { int samples = st_get_msaa(); @@ -155,7 +155,7 @@ void st_resize_framebuffer( struct st_framebuffer *stfb, void st_unreference_framebuffer( struct st_framebuffer *stfb ) { - _mesa_unreference_framebuffer((struct gl_framebuffer **) &stfb); + _mesa_reference_framebuffer((struct gl_framebuffer **) &stfb, NULL); } diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c index 6a3455aaba..9cc2176d5e 100644 --- a/src/mesa/state_tracker/st_gen_mipmap.c +++ b/src/mesa/state_tracker/st_gen_mipmap.c @@ -119,36 +119,36 @@ fallback_generate_mipmap(GLcontext *ctx, GLenum target, for (dstLevel = baseLevel + 1; dstLevel <= lastLevel; dstLevel++) { const uint srcLevel = dstLevel - 1; - struct pipe_surface *srcSurf, *dstSurf; + struct pipe_transfer *srcTrans, *dstTrans; const ubyte *srcData; ubyte *dstData; - srcSurf = screen->get_tex_surface(screen, pt, face, srcLevel, zslice, - PIPE_BUFFER_USAGE_CPU_READ); - dstSurf = screen->get_tex_surface(screen, pt, face, dstLevel, zslice, - PIPE_BUFFER_USAGE_CPU_WRITE); + srcTrans = screen->get_tex_transfer(screen, pt, face, srcLevel, zslice, + PIPE_TRANSFER_READ, 0, 0, + pt->width[srcLevel], + pt->height[srcLevel]); + dstTrans = screen->get_tex_transfer(screen, pt, face, dstLevel, zslice, + PIPE_TRANSFER_WRITE, 0, 0, + pt->width[dstLevel], + pt->height[dstLevel]); - srcData = (ubyte *) pipe_surface_map(srcSurf, - PIPE_BUFFER_USAGE_CPU_READ) - + srcSurf->offset; - dstData = (ubyte *) pipe_surface_map(dstSurf, - PIPE_BUFFER_USAGE_CPU_WRITE) - + dstSurf->offset; + srcData = (ubyte *) screen->transfer_map(screen, srcTrans); + dstData = (ubyte *) screen->transfer_map(screen, dstTrans); _mesa_generate_mipmap_level(target, datatype, comps, 0 /*border*/, pt->width[srcLevel], pt->height[srcLevel], pt->depth[srcLevel], srcData, - srcSurf->stride, /* stride in bytes */ + srcTrans->stride, /* stride in bytes */ pt->width[dstLevel], pt->height[dstLevel], pt->depth[dstLevel], dstData, - dstSurf->stride); /* stride in bytes */ + dstTrans->stride); /* stride in bytes */ - pipe_surface_unmap(srcSurf); - pipe_surface_unmap(dstSurf); + screen->transfer_unmap(screen, srcTrans); + screen->transfer_unmap(screen, dstTrans); - pipe_surface_reference(&srcSurf, NULL); - pipe_surface_reference(&dstSurf, NULL); + screen->tex_transfer_destroy(srcTrans); + screen->tex_transfer_destroy(dstTrans); } } diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c index 8b9b18f94d..cbf3f334c0 100644 --- a/src/mesa/state_tracker/st_mesa_to_tgsi.c +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c @@ -41,14 +41,14 @@ #include "shader/prog_instruction.h" #include "shader/prog_parameter.h" #include "shader/prog_print.h" -#include "pipe/p_debug.h" +#include "util/u_debug.h" /* * Map mesa register file to TGSI register file. */ static GLuint map_register_file( - enum register_file file, + gl_register_file file, GLuint index, const GLuint immediateMapping[], GLboolean indirectAccess ) @@ -132,19 +132,35 @@ map_register_file_index( */ static GLuint map_texture_target( - GLuint textarget ) + GLuint textarget, + GLboolean shadow ) { +#if 1 + /* XXX remove this line after we've checked that the rest of gallium + * can handle the TGSI_TEXTURE_SHADOWx tokens. + */ + shadow = GL_FALSE; +#endif switch( textarget ) { case TEXTURE_1D_INDEX: - return TGSI_TEXTURE_1D; + if (shadow) + return TGSI_TEXTURE_SHADOW1D; + else + return TGSI_TEXTURE_1D; case TEXTURE_2D_INDEX: - return TGSI_TEXTURE_2D; + if (shadow) + return TGSI_TEXTURE_SHADOW2D; + else + return TGSI_TEXTURE_2D; case TEXTURE_3D_INDEX: return TGSI_TEXTURE_3D; case TEXTURE_CUBE_INDEX: return TGSI_TEXTURE_CUBE; case TEXTURE_RECT_INDEX: - return TGSI_TEXTURE_RECT; + if (shadow) + return TGSI_TEXTURE_SHADOWRECT; + else + return TGSI_TEXTURE_RECT; default: assert( 0 ); } @@ -475,15 +491,6 @@ compile_instruction( break; case OPCODE_RSQ: fullinst->Instruction.Opcode = TGSI_OPCODE_RSQ; - - /* KW: Don't do this here. If particular hardware needs to do - * this, can do so in the driver.. - */ -#if 0 - tgsi_util_set_full_src_register_sign_mode( - &fullinst->FullSrcRegisters[0], - TGSI_UTIL_SIGN_CLEAR ); -#endif break; case OPCODE_SCS: fullinst->Instruction.Opcode = TGSI_OPCODE_SCS; @@ -523,7 +530,8 @@ compile_instruction( /* ordinary texture lookup */ fullinst->Instruction.Opcode = TGSI_OPCODE_TEX; fullinst->Instruction.NumSrcRegs = 2; - fullinst->InstructionExtTexture.Texture = map_texture_target( inst->TexSrcTarget ); + fullinst->InstructionExtTexture.Texture = + map_texture_target( inst->TexSrcTarget, inst->TexShadow ); fullinst->FullSrcRegisters[1].SrcRegister.File = TGSI_FILE_SAMPLER; fullinst->FullSrcRegisters[1].SrcRegister.Index = inst->TexSrcUnit; break; @@ -531,7 +539,8 @@ compile_instruction( /* texture lookup with LOD bias */ fullinst->Instruction.Opcode = TGSI_OPCODE_TXB; fullinst->Instruction.NumSrcRegs = 2; - fullinst->InstructionExtTexture.Texture = map_texture_target( inst->TexSrcTarget ); + fullinst->InstructionExtTexture.Texture = + map_texture_target( inst->TexSrcTarget, inst->TexShadow ); fullinst->FullSrcRegisters[1].SrcRegister.File = TGSI_FILE_SAMPLER; fullinst->FullSrcRegisters[1].SrcRegister.Index = inst->TexSrcUnit; break; @@ -539,7 +548,8 @@ compile_instruction( /* texture lookup with explicit partial derivatives */ fullinst->Instruction.Opcode = TGSI_OPCODE_TXD; fullinst->Instruction.NumSrcRegs = 4; - fullinst->InstructionExtTexture.Texture = map_texture_target( inst->TexSrcTarget ); + fullinst->InstructionExtTexture.Texture = + map_texture_target( inst->TexSrcTarget, inst->TexShadow ); /* src[0] = coord, src[1] = d[strq]/dx, src[2] = d[strq]/dy */ fullinst->FullSrcRegisters[3].SrcRegister.File = TGSI_FILE_SAMPLER; fullinst->FullSrcRegisters[3].SrcRegister.Index = inst->TexSrcUnit; @@ -548,7 +558,8 @@ compile_instruction( /* texture lookup with explicit LOD */ fullinst->Instruction.Opcode = TGSI_OPCODE_TXL; fullinst->Instruction.NumSrcRegs = 2; - fullinst->InstructionExtTexture.Texture = map_texture_target( inst->TexSrcTarget ); + fullinst->InstructionExtTexture.Texture = + map_texture_target( inst->TexSrcTarget, inst->TexShadow ); fullinst->FullSrcRegisters[1].SrcRegister.File = TGSI_FILE_SAMPLER; fullinst->FullSrcRegisters[1].SrcRegister.Index = inst->TexSrcUnit; break; @@ -557,7 +568,8 @@ compile_instruction( /* convert to TEX w/ special flag for division */ fullinst->Instruction.Opcode = TGSI_OPCODE_TXP; fullinst->Instruction.NumSrcRegs = 2; - fullinst->InstructionExtTexture.Texture = map_texture_target( inst->TexSrcTarget ); + fullinst->InstructionExtTexture.Texture = + map_texture_target( inst->TexSrcTarget, inst->TexShadow ); fullinst->FullSrcRegisters[1].SrcRegister.File = TGSI_FILE_SAMPLER; fullinst->FullSrcRegisters[1].SrcRegister.Index = inst->TexSrcUnit; break; diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 442eeed147..f825204915 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -61,9 +61,9 @@ static INLINE void * mem_dup(const void *src, uint size) { - void *dup = MALLOC(size); + void *dup = _mesa_malloc(size); if (dup) - memcpy(dup, src, size); + _mesa_memcpy(dup, src, size); return dup; } @@ -307,7 +307,7 @@ st_translate_vertex_program(struct st_context *st, /* free old shader state, if any */ if (stvp->state.tokens) { - FREE((void *) stvp->state.tokens); + _mesa_free((void *) stvp->state.tokens); stvp->state.tokens = NULL; } if (stvp->driver_shader) { @@ -466,23 +466,23 @@ st_translate_fragment_program(struct st_context *st, GLbitfield outputsWritten = stfp->Base.Base.OutputsWritten; /* if z is written, emit that first */ - if (outputsWritten & (1 << FRAG_RESULT_DEPR)) { + if (outputsWritten & (1 << FRAG_RESULT_DEPTH)) { fs_output_semantic_name[fs_num_outputs] = TGSI_SEMANTIC_POSITION; fs_output_semantic_index[fs_num_outputs] = 0; - outputMapping[FRAG_RESULT_DEPR] = fs_num_outputs; + outputMapping[FRAG_RESULT_DEPTH] = fs_num_outputs; fs_num_outputs++; - outputsWritten &= ~(1 << FRAG_RESULT_DEPR); + outputsWritten &= ~(1 << FRAG_RESULT_DEPTH); } /* handle remaning outputs (color) */ for (attr = 0; attr < FRAG_RESULT_MAX; attr++) { if (outputsWritten & (1 << attr)) { switch (attr) { - case FRAG_RESULT_DEPR: + case FRAG_RESULT_DEPTH: /* handled above */ assert(0); break; - case FRAG_RESULT_COLR: + case FRAG_RESULT_COLOR: fs_output_semantic_name[fs_num_outputs] = TGSI_SEMANTIC_COLOR; fs_output_semantic_index[fs_num_outputs] = numColors; outputMapping[attr] = fs_num_outputs; diff --git a/src/mesa/state_tracker/st_texture.c b/src/mesa/state_tracker/st_texture.c index 63cfe5fc16..6f274d6d69 100644 --- a/src/mesa/state_tracker/st_texture.c +++ b/src/mesa/state_tracker/st_texture.c @@ -40,7 +40,6 @@ #include "pipe/p_context.h" #include "pipe/p_defines.h" #include "pipe/p_inlines.h" -#include "pipe/p_inlines.h" #include "util/u_rect.h" @@ -108,17 +107,14 @@ st_texture_create(struct st_context *st, newtex = screen->texture_create(screen, &pt); - assert(!newtex || newtex->refcount == 1); + assert(!newtex || p_atomic_read(&newtex->reference.count) == 1); return newtex; } /** - * Check if a texture image be pulled into a unified mipmap texture. - * This mirrors the completeness test in a lot of ways. - * - * Not sure whether I want to pass gl_texture_image here. + * Check if a texture image can be pulled into a unified mipmap texture. */ GLboolean st_texture_match_image(const struct pipe_texture *pt, @@ -130,13 +126,14 @@ st_texture_match_image(const struct pipe_texture *pt, if (image->Border) return GL_FALSE; + /* Check if this image's format matches the established texture's format. + */ if (st_mesa_format_to_pipe_format(image->TexFormat->MesaFormat) != pt->format || image->IsCompressed != pt->compressed) return GL_FALSE; - /* Test image dimensions against the base level image adjusted for - * minification. This will also catch images not present in the - * texture, changed targets, etc. + /* Test if this image's size matches what's expected in the + * established texture. */ if (image->Width != pt->width[level] || image->Height != pt->height[level] || @@ -191,19 +188,19 @@ st_texture_image_offset(const struct pipe_texture * pt, */ GLubyte * st_texture_image_map(struct st_context *st, struct st_texture_image *stImage, - GLuint zoffset, - GLuint flags ) + GLuint zoffset, enum pipe_transfer_usage usage, + GLuint x, GLuint y, GLuint w, GLuint h) { struct pipe_screen *screen = st->pipe->screen; struct pipe_texture *pt = stImage->pt; DBG("%s \n", __FUNCTION__); - stImage->surface = screen->get_tex_surface(screen, pt, stImage->face, - stImage->level, zoffset, - flags); + stImage->transfer = screen->get_tex_transfer(screen, pt, stImage->face, + stImage->level, zoffset, + usage, x, y, w, h); - if (stImage->surface) - return screen->surface_map(screen, stImage->surface, flags); + if (stImage->transfer) + return screen->transfer_map(screen, stImage->transfer); else return NULL; } @@ -217,9 +214,9 @@ st_texture_image_unmap(struct st_context *st, DBG("%s\n", __FUNCTION__); - screen->surface_unmap(screen, stImage->surface); + screen->transfer_unmap(screen, stImage->transfer); - pipe_surface_reference(&stImage->surface, NULL); + screen->tex_transfer_destroy(stImage->transfer); } @@ -234,13 +231,13 @@ st_texture_image_unmap(struct st_context *st, */ static void st_surface_data(struct pipe_context *pipe, - struct pipe_surface *dst, + struct pipe_transfer *dst, unsigned dstx, unsigned dsty, const void *src, unsigned src_stride, unsigned srcx, unsigned srcy, unsigned width, unsigned height) { struct pipe_screen *screen = pipe->screen; - void *map = screen->surface_map(screen, dst, PIPE_BUFFER_USAGE_CPU_WRITE); + void *map = screen->transfer_map(screen, dst); pipe_copy_rect(map, &dst->block, @@ -250,7 +247,7 @@ st_surface_data(struct pipe_context *pipe, src, src_stride, srcx, srcy); - screen->surface_unmap(screen, dst); + screen->transfer_unmap(screen, dst); } @@ -268,21 +265,23 @@ st_texture_image_data(struct pipe_context *pipe, GLuint depth = dst->depth[level]; GLuint i; const GLubyte *srcUB = src; - struct pipe_surface *dst_surface; + struct pipe_transfer *dst_transfer; DBG("%s\n", __FUNCTION__); for (i = 0; i < depth; i++) { - dst_surface = screen->get_tex_surface(screen, dst, face, level, i, - PIPE_BUFFER_USAGE_CPU_WRITE); + dst_transfer = screen->get_tex_transfer(screen, dst, face, level, i, + PIPE_TRANSFER_WRITE, 0, 0, + dst->width[level], + dst->height[level]); - st_surface_data(pipe, dst_surface, + st_surface_data(pipe, dst_transfer, 0, 0, /* dstx, dsty */ srcUB, src_row_stride, 0, 0, /* source x, y */ dst->width[level], dst->height[level]); /* width, height */ - screen->tex_surface_release(screen, &dst_surface); + screen->tex_transfer_destroy(dst_transfer); srcUB += src_image_stride; } @@ -341,15 +340,14 @@ st_texture_image_copy(struct pipe_context *pipe, PIPE_BUFFER_USAGE_GPU_READ); pipe->surface_copy(pipe, - FALSE, dst_surface, 0, 0, /* destX, Y */ src_surface, 0, 0, /* srcX, Y */ width, height); - screen->tex_surface_release(screen, &src_surface); - screen->tex_surface_release(screen, &dst_surface); + pipe_surface_reference(&src_surface, NULL); + pipe_surface_reference(&dst_surface, NULL); } } @@ -427,7 +425,7 @@ st_bind_teximage(struct st_framebuffer *stfb, uint surfIndex, } if (target == ST_TEXTURE_2D) { - texObj = texUnit->Current2D; + texObj = texUnit->CurrentTex[TEXTURE_2D_INDEX]; texImage = _mesa_get_tex_image(ctx, texObj, GL_TEXTURE_2D, level); stImage = st_texture_image(texImage); } diff --git a/src/mesa/state_tracker/st_texture.h b/src/mesa/state_tracker/st_texture.h index 31f66ad52c..840b7e27cc 100644 --- a/src/mesa/state_tracker/st_texture.h +++ b/src/mesa/state_tracker/st_texture.h @@ -50,7 +50,7 @@ struct st_texture_image */ struct pipe_texture *pt; - struct pipe_surface *surface; + struct pipe_transfer *transfer; }; @@ -132,7 +132,9 @@ extern GLubyte * st_texture_image_map(struct st_context *st, struct st_texture_image *stImage, GLuint zoffset, - GLuint flags); + enum pipe_transfer_usage usage, + unsigned x, unsigned y, + unsigned w, unsigned h); extern void st_texture_image_unmap(struct st_context *st, diff --git a/src/mesa/swrast/s_atifragshader.c b/src/mesa/swrast/s_atifragshader.c index 21cbd3cf37..458fe18163 100644 --- a/src/mesa/swrast/s_atifragshader.c +++ b/src/mesa/swrast/s_atifragshader.c @@ -591,8 +591,6 @@ _swrast_exec_fragment_shader(GLcontext * ctx, SWspan *span) /* incoming colors should be floats */ ASSERT(span->array->ChanType == GL_FLOAT); - ctx->_CurrentProgram = GL_FRAGMENT_SHADER_ATI; - for (i = 0; i < span->end; i++) { if (span->array->mask[i]) { init_machine(ctx, &machine, shader, span, i); @@ -608,6 +606,4 @@ _swrast_exec_fragment_shader(GLcontext * ctx, SWspan *span) } } } - - ctx->_CurrentProgram = 0; } diff --git a/src/mesa/swrast/s_buffers.c b/src/mesa/swrast/s_clear.c index af475ad8cb..35080fd394 100644 --- a/src/mesa/swrast/s_buffers.c +++ b/src/mesa/swrast/s_clear.c @@ -22,8 +22,6 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/** XXX This file should be named s_clear.c */ - #include "main/glheader.h" #include "main/colormac.h" #include "main/macros.h" @@ -317,10 +315,7 @@ _swrast_Clear(GLcontext *ctx, GLbitfield buffers) BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL | BUFFER_BIT_ACCUM | - BUFFER_BIT_AUX0 | - BUFFER_BIT_AUX1 | - BUFFER_BIT_AUX2 | - BUFFER_BIT_AUX3; + BUFFER_BIT_AUX0; assert((buffers & (~legalBits)) == 0); } #endif diff --git a/src/mesa/swrast/s_context.c b/src/mesa/swrast/s_context.c index 297940adbd..4dbccbb2d5 100644 --- a/src/mesa/swrast/s_context.c +++ b/src/mesa/swrast/s_context.c @@ -61,7 +61,7 @@ _swrast_update_rasterflags( GLcontext *ctx ) 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; + if (ctx->Stencil._Enabled) rasterMask |= STENCIL_BIT; if (ctx->Visual.rgbMode) { const GLuint colorMask = *((GLuint *) &ctx->Color.ColorMask); if (colorMask != 0xffffffff) rasterMask |= MASKING_BIT; @@ -206,7 +206,7 @@ _swrast_update_deferred_texture(GLcontext *ctx) else { const struct gl_fragment_program *fprog = ctx->FragmentProgram._Current; - if (fprog && (fprog->Base.OutputsWritten & (1 << FRAG_RESULT_DEPR))) { + if (fprog && (fprog->Base.OutputsWritten & (1 << FRAG_RESULT_DEPTH))) { /* Z comes from fragment program/shader */ swrast->_DeferredTexture = GL_FALSE; } diff --git a/src/mesa/swrast/s_context.h b/src/mesa/swrast/s_context.h index cdd6fa5048..6e8d080704 100644 --- a/src/mesa/swrast/s_context.h +++ b/src/mesa/swrast/s_context.h @@ -289,6 +289,34 @@ swrast_render_finish(GLcontext *ctx) /* + * 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. diff --git a/src/mesa/swrast/s_drawpix.c b/src/mesa/swrast/s_drawpix.c index 700f76d4bc..a9ef8e685f 100644 --- a/src/mesa/swrast/s_drawpix.c +++ b/src/mesa/swrast/s_drawpix.c @@ -829,6 +829,15 @@ _swrast_DrawPixels( GLcontext *ctx, const GLvoid *pixels ) { SWcontext *swrast = SWRAST_CONTEXT(ctx); + GLboolean save_vp_override = ctx->VertexProgram._Overriden; + + /* We are creating fragments directly, without going through vertex programs. + * + * This override flag tells the fragment processing code that its input comes + * from a non-standard source, and it may therefore not rely on optimizations + * that assume e.g. constant color if there is no color vertex array. + */ + _mesa_set_vp_override(ctx, GL_TRUE); swrast_render_start(ctx); @@ -841,6 +850,7 @@ _swrast_DrawPixels( GLcontext *ctx, pixels = _mesa_map_drawpix_pbo(ctx, unpack, pixels); if (!pixels) { swrast_render_finish(ctx); + _mesa_set_vp_override(ctx, save_vp_override); return; } @@ -880,6 +890,7 @@ _swrast_DrawPixels( GLcontext *ctx, } swrast_render_finish(ctx); + _mesa_set_vp_override(ctx, save_vp_override); _mesa_unmap_drawpix_pbo(ctx, unpack); } diff --git a/src/mesa/swrast/s_feedback.c b/src/mesa/swrast/s_feedback.c index aa79531277..7bb914b658 100644 --- a/src/mesa/swrast/s_feedback.c +++ b/src/mesa/swrast/s_feedback.c @@ -59,8 +59,8 @@ _swrast_feedback_triangle(GLcontext *ctx, const SWvertex *v0, const SWvertex *v1, const SWvertex *v2) { if (_swrast_culltriangle(ctx, v0, v1, v2)) { - FEEDBACK_TOKEN(ctx, (GLfloat) (GLint) GL_POLYGON_TOKEN); - FEEDBACK_TOKEN(ctx, (GLfloat) 3); /* three vertices */ + _mesa_feedback_token(ctx, (GLfloat) (GLint) GL_POLYGON_TOKEN); + _mesa_feedback_token(ctx, (GLfloat) 3); /* three vertices */ if (ctx->Light.ShadeModel == GL_SMOOTH) { feedback_vertex(ctx, v0, v0); @@ -86,7 +86,7 @@ _swrast_feedback_line(GLcontext *ctx, const SWvertex *v0, if (swrast->StippleCounter == 0) token = GL_LINE_RESET_TOKEN; - FEEDBACK_TOKEN(ctx, (GLfloat) (GLint) token); + _mesa_feedback_token(ctx, (GLfloat) (GLint) token); if (ctx->Light.ShadeModel == GL_SMOOTH) { feedback_vertex(ctx, v0, v0); @@ -104,7 +104,7 @@ _swrast_feedback_line(GLcontext *ctx, const SWvertex *v0, void _swrast_feedback_point(GLcontext *ctx, const SWvertex *v) { - FEEDBACK_TOKEN(ctx, (GLfloat) (GLint) GL_POINT_TOKEN); + _mesa_feedback_token(ctx, (GLfloat) (GLint) GL_POINT_TOKEN); feedback_vertex(ctx, v, v); } diff --git a/src/mesa/swrast/s_fragprog.c b/src/mesa/swrast/s_fragprog.c index c6601f5593..ae1dea16a0 100644 --- a/src/mesa/swrast/s_fragprog.c +++ b/src/mesa/swrast/s_fragprog.c @@ -202,9 +202,9 @@ run_program(GLcontext *ctx, SWspan *span, GLuint start, GLuint end) if (_mesa_execute_program(ctx, &program->Base, machine)) { /* Store result color */ - if (outputsWritten & (1 << FRAG_RESULT_COLR)) { + if (outputsWritten & (1 << FRAG_RESULT_COLOR)) { COPY_4V(span->array->attribs[FRAG_ATTRIB_COL0][i], - machine->Outputs[FRAG_RESULT_COLR]); + machine->Outputs[FRAG_RESULT_COLOR]); } else { /* Multiple drawbuffers / render targets @@ -221,8 +221,8 @@ run_program(GLcontext *ctx, SWspan *span, GLuint start, GLuint end) } /* Store result depth/z */ - if (outputsWritten & (1 << FRAG_RESULT_DEPR)) { - const GLfloat depth = machine->Outputs[FRAG_RESULT_DEPR][2]; + if (outputsWritten & (1 << FRAG_RESULT_DEPTH)) { + const GLfloat depth = machine->Outputs[FRAG_RESULT_DEPTH][2]; if (depth <= 0.0) span->array->z[i] = 0; else if (depth >= 1.0) @@ -255,20 +255,16 @@ _swrast_exec_fragment_program( GLcontext *ctx, SWspan *span ) ASSERT(span->array->ChanType == GL_FLOAT); } - ctx->_CurrentProgram = GL_FRAGMENT_PROGRAM_ARB; /* or NV, doesn't matter */ - run_program(ctx, span, 0, span->end); - if (program->Base.OutputsWritten & (1 << FRAG_RESULT_COLR)) { + if (program->Base.OutputsWritten & (1 << FRAG_RESULT_COLOR)) { span->interpMask &= ~SPAN_RGBA; span->arrayMask |= SPAN_RGBA; } - if (program->Base.OutputsWritten & (1 << FRAG_RESULT_DEPR)) { + if (program->Base.OutputsWritten & (1 << FRAG_RESULT_DEPTH)) { span->interpMask &= ~SPAN_Z; span->arrayMask |= SPAN_Z; } - - ctx->_CurrentProgram = 0; } diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c index ab7b82b19d..15a783b236 100644 --- a/src/mesa/swrast/s_span.c +++ b/src/mesa/swrast/s_span.c @@ -442,11 +442,10 @@ _swrast_span_interpolate_z( const GLcontext *ctx, SWspan *span ) * Compute mipmap LOD from partial derivatives. * This the ideal solution, as given in the OpenGL spec. */ -#if 0 -static GLfloat -compute_lambda(GLfloat dsdx, GLfloat dsdy, GLfloat dtdx, GLfloat dtdy, - GLfloat dqdx, GLfloat dqdy, GLfloat texW, GLfloat texH, - GLfloat s, GLfloat t, GLfloat q, GLfloat invQ) +GLfloat +_swrast_compute_lambda(GLfloat dsdx, GLfloat dsdy, GLfloat dtdx, GLfloat dtdy, + GLfloat dqdx, GLfloat dqdy, GLfloat texW, GLfloat texH, + GLfloat s, GLfloat t, GLfloat q, GLfloat invQ) { GLfloat dudx = texW * ((s + dsdx) / (q + dqdx) - s * invQ); GLfloat dvdx = texH * ((t + dtdx) / (q + dqdx) - t * invQ); @@ -458,13 +457,13 @@ compute_lambda(GLfloat dsdx, GLfloat dsdy, GLfloat dtdx, GLfloat dtdy, GLfloat lambda = LOG2(rho); return lambda; } -#endif /** * Compute mipmap LOD from partial derivatives. * This is a faster approximation than above function. */ +#if 0 GLfloat _swrast_compute_lambda(GLfloat dsdx, GLfloat dsdy, GLfloat dtdx, GLfloat dtdy, GLfloat dqdx, GLfloat dqdy, GLfloat texW, GLfloat texH, @@ -485,6 +484,7 @@ _swrast_compute_lambda(GLfloat dsdx, GLfloat dsdy, GLfloat dtdx, GLfloat dtdy, lambda = LOG2(rho); return lambda; } +#endif /** @@ -846,11 +846,11 @@ _swrast_write_index_span( GLcontext *ctx, SWspan *span) } /* Stencil and Z testing */ - if (ctx->Depth.Test || ctx->Stencil.Enabled) { + if (ctx->Stencil._Enabled || ctx->Depth.Test) { if (!(span->arrayMask & SPAN_Z)) _swrast_span_interpolate_z(ctx, span); - if (ctx->Stencil.Enabled) { + if (ctx->Stencil._Enabled) { if (!_swrast_stencil_and_ztest_span(ctx, span)) { span->arrayMask = origArrayMask; return; @@ -1211,7 +1211,7 @@ shade_texture_span(GLcontext *ctx, SWspan *span) _swrast_exec_fragment_shader(ctx, span); } } - else if (ctx->Texture._EnabledUnits) { + else if (ctx->Texture._EnabledCoordUnits) { /* conventional texturing */ #if CHAN_BITS == 32 @@ -1250,7 +1250,7 @@ _swrast_write_rgba_span( GLcontext *ctx, SWspan *span) void * const origRgba = span->array->rgba; const GLboolean shader = (ctx->FragmentProgram._Current || ctx->ATIFragmentShader._Enabled); - const GLboolean shaderOrTexture = shader || ctx->Texture._EnabledUnits; + const GLboolean shaderOrTexture = shader || ctx->Texture._EnabledCoordUnits; struct gl_framebuffer *fb = ctx->DrawBuffer; /* @@ -1317,11 +1317,11 @@ _swrast_write_rgba_span( GLcontext *ctx, SWspan *span) } /* Stencil and Z testing */ - if (ctx->Stencil.Enabled || ctx->Depth.Test) { + if (ctx->Stencil._Enabled || ctx->Depth.Test) { if (!(span->arrayMask & SPAN_Z)) _swrast_span_interpolate_z(ctx, span); - if (ctx->Stencil.Enabled && fb->Visual.stencilBits > 0) { + if (ctx->Stencil._Enabled) { /* Combined Z/stencil tests */ if (!_swrast_stencil_and_ztest_span(ctx, span)) { /* all fragments failed test */ diff --git a/src/mesa/swrast/s_texcombine.c b/src/mesa/swrast/s_texcombine.c index 38b5633887..aa28311672 100644 --- a/src/mesa/swrast/s_texcombine.c +++ b/src/mesa/swrast/s_texcombine.c @@ -591,6 +591,25 @@ texture_combine( const GLcontext *ctx, GLuint unit, GLuint n, } } break; + case GL_BUMP_ENVMAP_ATI: + { + /* this produces a fixed rgba color, and the coord calc is done elsewhere */ + for (i = 0; i < n; i++) { + /* rgba result is 0,0,0,1 */ +#if CHAN_TYPE == GL_FLOAT + rgba[i][RCOMP] = 0.0; + rgba[i][GCOMP] = 0.0; + rgba[i][BCOMP] = 0.0; + rgba[i][ACOMP] = 1.0; +#else + rgba[i][RCOMP] = 0; + rgba[i][GCOMP] = 0; + rgba[i][BCOMP] = 0; + rgba[i][ACOMP] = CHAN_MAX; +#endif + } + } + return; /* no alpha processing */ default: _mesa_problem(ctx, "invalid combine mode"); } @@ -1218,12 +1237,86 @@ _swrast_texture_span( GLcontext *ctx, SWspan *span ) if (swrast->_AnyTextureCombine) MEMCPY(primary_rgba, span->array->rgba, 4 * span->end * sizeof(GLchan)); + /* First must sample all bump maps */ + for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) { + if (ctx->Texture.Unit[unit]._ReallyEnabled && + ctx->Texture.Unit[unit]._CurrentCombine->ModeRGB == GL_BUMP_ENVMAP_ATI) { + const GLfloat (*texcoords)[4] + = (const GLfloat (*)[4]) + span->array->attribs[FRAG_ATTRIB_TEX0 + unit]; + GLfloat (*targetcoords)[4] + = (GLfloat (*)[4]) + span->array->attribs[FRAG_ATTRIB_TEX0 + + ctx->Texture.Unit[unit].BumpTarget - GL_TEXTURE0]; + + const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit]; + const struct gl_texture_object *curObj = texUnit->_Current; + GLfloat *lambda = span->array->lambda[unit]; + GLchan (*texels)[4] = (GLchan (*)[4]) + (swrast->TexelBuffer + unit * (span->end * 4 * sizeof(GLchan))); + GLuint i; + GLfloat rotMatrix00 = ctx->Texture.Unit[unit].RotMatrix[0]; + GLfloat rotMatrix01 = ctx->Texture.Unit[unit].RotMatrix[1]; + GLfloat rotMatrix10 = ctx->Texture.Unit[unit].RotMatrix[2]; + GLfloat rotMatrix11 = ctx->Texture.Unit[unit].RotMatrix[3]; + + /* adjust texture lod (lambda) */ + if (span->arrayMask & SPAN_LAMBDA) { + if (texUnit->LodBias + curObj->LodBias != 0.0F) { + /* apply LOD bias, but don't clamp yet */ + const GLfloat bias = CLAMP(texUnit->LodBias + curObj->LodBias, + -ctx->Const.MaxTextureLodBias, + ctx->Const.MaxTextureLodBias); + GLuint i; + for (i = 0; i < span->end; i++) { + lambda[i] += bias; + } + } + + if (curObj->MinLod != -1000.0 || curObj->MaxLod != 1000.0) { + /* apply LOD clamping to lambda */ + const GLfloat min = curObj->MinLod; + const GLfloat max = curObj->MaxLod; + GLuint i; + for (i = 0; i < span->end; i++) { + GLfloat l = lambda[i]; + lambda[i] = CLAMP(l, min, max); + } + } + } + + /* Sample the texture (span->end = number of fragments) */ + swrast->TextureSample[unit]( ctx, texUnit->_Current, span->end, + texcoords, lambda, texels ); + + /* manipulate the span values of the bump target + not sure this can work correctly even ignoring + the problem that channel is unsigned */ + for (i = 0; i < span->end; i++) { +#if CHAN_TYPE == GL_FLOAT + targetcoords[i][0] += (texels[i][0] * rotMatrix00 + texels[i][1] * + rotMatrix01) / targetcoords[i][3]; + targetcoords[i][1] += (texels[i][0] * rotMatrix10 + texels[i][1] * + rotMatrix11) / targetcoords[i][3]; +#else + targetcoords[i][0] += (CHAN_TO_FLOAT(texels[i][1]) * rotMatrix00 + + CHAN_TO_FLOAT(texels[i][1]) * rotMatrix01) / + targetcoords[i][3]; + targetcoords[i][1] += (CHAN_TO_FLOAT(texels[i][0]) * rotMatrix10 + + CHAN_TO_FLOAT(texels[i][1]) * rotMatrix11) / + targetcoords[i][3]; +#endif + } + } + } + /* * Must do all texture sampling before combining in order to * accomodate GL_ARB_texture_env_crossbar. */ for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) { - if (ctx->Texture.Unit[unit]._ReallyEnabled) { + if (ctx->Texture.Unit[unit]._ReallyEnabled && + ctx->Texture.Unit[unit]._CurrentCombine->ModeRGB != GL_BUMP_ENVMAP_ATI) { const GLfloat (*texcoords)[4] = (const GLfloat (*)[4]) span->array->attribs[FRAG_ATTRIB_TEX0 + unit]; diff --git a/src/mesa/swrast/s_texfilter.c b/src/mesa/swrast/s_texfilter.c index 8d72018cf4..19317c393a 100644 --- a/src/mesa/swrast/s_texfilter.c +++ b/src/mesa/swrast/s_texfilter.c @@ -2830,7 +2830,9 @@ sample_depth_texture( GLcontext *ctx, /* XXXX if tObj->MinFilter != tObj->MagFilter, we're ignoring lambda */ - function = tObj->_Function; + function = (tObj->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB) ? + tObj->CompareFunc : GL_NONE; + if (tObj->MagFilter == GL_NEAREST) { GLuint i; for (i = 0; i < n; i++) { diff --git a/src/mesa/swrast/s_triangle.c b/src/mesa/swrast/s_triangle.c index 0598052f50..9260e35066 100644 --- a/src/mesa/swrast/s_triangle.c +++ b/src/mesa/swrast/s_triangle.c @@ -132,7 +132,8 @@ _swrast_culltriangle( GLcontext *ctx, #define SETUP_CODE \ struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[0]; \ - struct gl_texture_object *obj = ctx->Texture.Unit[0].Current2D; \ + struct gl_texture_object *obj = \ + ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; \ const GLint b = obj->BaseLevel; \ const GLfloat twidth = (GLfloat) obj->Image[0][b]->Width; \ const GLfloat theight = (GLfloat) obj->Image[0][b]->Height; \ @@ -183,7 +184,8 @@ _swrast_culltriangle( GLcontext *ctx, #define SETUP_CODE \ struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[0]; \ - struct gl_texture_object *obj = ctx->Texture.Unit[0].Current2D; \ + struct gl_texture_object *obj = \ + ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; \ const GLint b = obj->BaseLevel; \ const GLfloat twidth = (GLfloat) obj->Image[0][b]->Width; \ const GLfloat theight = (GLfloat) obj->Image[0][b]->Height; \ @@ -264,7 +266,7 @@ affine_span(GLcontext *ctx, SWspan *span, struct affine_info *info) { GLchan sample[4]; /* the filtered texture sample */ - const GLuint texEnableSave = ctx->Texture._EnabledUnits; + const GLuint texEnableSave = ctx->Texture._EnabledCoordUnits; /* Instead of defining a function for each mode, a test is done * between the outer and inner loops. This is to reduce code size @@ -395,7 +397,7 @@ affine_span(GLcontext *ctx, SWspan *span, GLchan *dest = span->array->rgba[0]; /* Disable tex units so they're not re-applied in swrast_write_rgba_span */ - ctx->Texture._EnabledUnits = 0x0; + ctx->Texture._EnabledCoordUnits = 0x0; span->intTex[0] -= FIXED_HALF; span->intTex[1] -= FIXED_HALF; @@ -502,7 +504,7 @@ affine_span(GLcontext *ctx, SWspan *span, _swrast_write_rgba_span(ctx, span); /* re-enable texture units */ - ctx->Texture._EnabledUnits = texEnableSave; + ctx->Texture._EnabledCoordUnits = texEnableSave; #undef SPAN_NEAREST #undef SPAN_LINEAR @@ -524,7 +526,8 @@ affine_span(GLcontext *ctx, SWspan *span, #define SETUP_CODE \ struct affine_info info; \ struct gl_texture_unit *unit = ctx->Texture.Unit+0; \ - struct gl_texture_object *obj = unit->Current2D; \ + struct gl_texture_object *obj = \ + ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; \ const GLint b = obj->BaseLevel; \ const GLfloat twidth = (GLfloat) obj->Image[0][b]->Width; \ const GLfloat theight = (GLfloat) obj->Image[0][b]->Height; \ @@ -661,8 +664,8 @@ fast_persp_span(GLcontext *ctx, SWspan *span, GLfloat tex_coord[3], tex_step[3]; GLchan *dest = span->array->rgba[0]; - const GLuint savedTexEnable = ctx->Texture._EnabledUnits; - ctx->Texture._EnabledUnits = 0; + const GLuint texEnableSave = ctx->Texture._EnabledCoordUnits; + ctx->Texture._EnabledCoordUnits = 0; tex_coord[0] = span->attrStart[FRAG_ATTRIB_TEX0][0] * (info->smask + 1); tex_step[0] = span->attrStepX[FRAG_ATTRIB_TEX0][0] * (info->smask + 1); @@ -775,7 +778,7 @@ fast_persp_span(GLcontext *ctx, SWspan *span, #undef SPAN_LINEAR /* restore state */ - ctx->Texture._EnabledUnits = savedTexEnable; + ctx->Texture._EnabledCoordUnits = texEnableSave; } @@ -794,7 +797,8 @@ fast_persp_span(GLcontext *ctx, SWspan *span, #define SETUP_CODE \ struct persp_info info; \ const struct gl_texture_unit *unit = ctx->Texture.Unit+0; \ - const struct gl_texture_object *obj = unit->Current2D; \ + struct gl_texture_object *obj = \ + ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; \ const GLint b = obj->BaseLevel; \ info.texture = (const GLchan *) obj->Image[0][b]->Data; \ info.twidth_log2 = obj->Image[0][b]->WidthLog2; \ @@ -1018,7 +1022,7 @@ _swrast_choose_triangle( GLcontext *ctx ) ctx->Depth.Test && ctx->Depth.Mask == GL_FALSE && ctx->Depth.Func == GL_LESS && - !ctx->Stencil.Enabled) { + !ctx->Stencil._Enabled) { if ((rgbmode && ctx->Color.ColorMask[0] == 0 && ctx->Color.ColorMask[1] == 0 && @@ -1050,7 +1054,8 @@ _swrast_choose_triangle( GLcontext *ctx ) const struct gl_texture_image *texImg; GLenum minFilter, magFilter, envMode; GLint format; - texObj2D = ctx->Texture.Unit[0].Current2D; + texObj2D = ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; + texImg = texObj2D ? texObj2D->Image[0][texObj2D->BaseLevel] : NULL; format = texImg ? texImg->TexFormat->MesaFormat : -1; minFilter = texObj2D ? texObj2D->MinFilter : (GLenum) 0; diff --git a/src/mesa/swrast/swrast.h b/src/mesa/swrast/swrast.h index 047f7991e6..c319ca62f9 100644 --- a/src/mesa/swrast/swrast.h +++ b/src/mesa/swrast/swrast.h @@ -75,6 +75,12 @@ typedef struct { } SWvertex; +/** + * Fixed point data type. + */ +typedef int GLfixed; + + #define FRAG_ATTRIB_CI FRAG_ATTRIB_COL0 @@ -260,12 +266,6 @@ extern void _swrast_eject_texture_images(GLcontext *ctx); -#if FEATURE_MESA_program_debug -extern void -_swrast_get_program_register(GLcontext *, enum register_file file, - GLuint index, GLfloat val[4]); -#endif /* FEATURE_MESA_program_debug */ - /** * The driver interface for the software rasterizer. diff --git a/src/mesa/swrast_setup/ss_triangle.c b/src/mesa/swrast_setup/ss_triangle.c index 54e24c4c44..e15b1348d8 100644 --- a/src/mesa/swrast_setup/ss_triangle.c +++ b/src/mesa/swrast_setup/ss_triangle.c @@ -45,46 +45,32 @@ static tnl_triangle_func tri_tab[SS_MAX_TRIFUNC]; static tnl_quad_func quad_tab[SS_MAX_TRIFUNC]; -static void _swsetup_render_line_tri( GLcontext *ctx, - GLuint e0, GLuint e1, GLuint e2, - GLuint facing ) +/* + * Render a triangle respecting edge flags. + */ +typedef void (* swsetup_edge_render_prim_tri)(GLcontext *ctx, + const GLubyte *ef, + GLuint e0, + GLuint e1, + GLuint e2, + const SWvertex *v0, + const SWvertex *v1, + const SWvertex *v2); + +/* + * Render a triangle using lines and respecting edge flags. + */ +static void +_swsetup_edge_render_line_tri(GLcontext *ctx, + const GLubyte *ef, + GLuint e0, + GLuint e1, + GLuint e2, + const SWvertex *v0, + const SWvertex *v1, + const SWvertex *v2) { SScontext *swsetup = SWSETUP_CONTEXT(ctx); - struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; - GLubyte *ef = VB->EdgeFlag; - SWvertex *verts = swsetup->verts; - SWvertex *v0 = &verts[e0]; - SWvertex *v1 = &verts[e1]; - SWvertex *v2 = &verts[e2]; - GLchan c[2][4]; - GLfloat s[2][4]; - GLfloat i[2]; - - /* cull testing */ - if (ctx->Polygon.CullFlag) { - if (facing == 1 && ctx->Polygon.CullFaceMode != GL_FRONT) - return; - if (facing == 0 && ctx->Polygon.CullFaceMode != GL_BACK) - return; - } - - _swrast_SetFacing(ctx, facing); - - if (ctx->Light.ShadeModel == GL_FLAT) { - COPY_CHAN4(c[0], v0->color); - COPY_CHAN4(c[1], v1->color); - COPY_4V(s[0], v0->attrib[FRAG_ATTRIB_COL1]); - COPY_4V(s[1], v1->attrib[FRAG_ATTRIB_COL1]); - i[0] = v0->attrib[FRAG_ATTRIB_CI][0]; - i[1] = v1->attrib[FRAG_ATTRIB_CI][0]; - - COPY_CHAN4(v0->color, v2->color); - COPY_CHAN4(v1->color, v2->color); - COPY_4V(v0->attrib[FRAG_ATTRIB_COL1], v2->attrib[FRAG_ATTRIB_COL1]); - COPY_4V(v1->attrib[FRAG_ATTRIB_COL1], v2->attrib[FRAG_ATTRIB_COL1]); - v0->attrib[FRAG_ATTRIB_CI][0] = v2->attrib[FRAG_ATTRIB_CI][0]; - v1->attrib[FRAG_ATTRIB_CI][0] = v2->attrib[FRAG_ATTRIB_CI][0]; - } if (swsetup->render_prim == GL_POLYGON) { if (ef[e2]) _swrast_Line( ctx, v2, v0 ); @@ -95,20 +81,37 @@ static void _swsetup_render_line_tri( GLcontext *ctx, if (ef[e1]) _swrast_Line( ctx, v1, v2 ); if (ef[e2]) _swrast_Line( ctx, v2, v0 ); } +} - if (ctx->Light.ShadeModel == GL_FLAT) { - COPY_CHAN4(v0->color, c[0]); - COPY_CHAN4(v1->color, c[1]); - COPY_4V(v0->attrib[FRAG_ATTRIB_COL1], s[0]); - COPY_4V(v1->attrib[FRAG_ATTRIB_COL1], s[1]); - v0->attrib[FRAG_ATTRIB_CI][0] = i[0]; - v1->attrib[FRAG_ATTRIB_CI][0] = i[1]; - } +/* + * Render a triangle using points and respecting edge flags. + */ +static void +_swsetup_edge_render_point_tri(GLcontext *ctx, + const GLubyte *ef, + GLuint e0, + GLuint e1, + GLuint e2, + const SWvertex *v0, + const SWvertex *v1, + const SWvertex *v2) +{ + if (ef[e0]) _swrast_Point( ctx, v0 ); + if (ef[e1]) _swrast_Point( ctx, v1 ); + if (ef[e2]) _swrast_Point( ctx, v2 ); + + _swrast_flush(ctx); } -static void _swsetup_render_point_tri( GLcontext *ctx, - GLuint e0, GLuint e1, GLuint e2, - GLuint facing ) +/* + * Render a triangle respecting cull and shade model. + */ +static void _swsetup_render_tri(GLcontext *ctx, + GLuint e0, + GLuint e1, + GLuint e2, + GLuint facing, + swsetup_edge_render_prim_tri render) { SScontext *swsetup = SWSETUP_CONTEXT(ctx); struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; @@ -117,9 +120,6 @@ static void _swsetup_render_point_tri( GLcontext *ctx, SWvertex *v0 = &verts[e0]; SWvertex *v1 = &verts[e1]; SWvertex *v2 = &verts[e2]; - GLchan c[2][4]; - GLfloat s[2][4]; - GLfloat i[2]; /* cull testing */ if (ctx->Polygon.CullFlag) { @@ -132,6 +132,10 @@ static void _swsetup_render_point_tri( GLcontext *ctx, _swrast_SetFacing(ctx, facing); if (ctx->Light.ShadeModel == GL_FLAT) { + GLchan c[2][4]; + GLfloat s[2][4]; + GLfloat i[2]; + /* save colors/indexes for v0, v1 vertices */ COPY_CHAN4(c[0], v0->color); COPY_CHAN4(c[1], v1->color); @@ -147,14 +151,9 @@ static void _swsetup_render_point_tri( GLcontext *ctx, COPY_4V(v1->attrib[FRAG_ATTRIB_COL1], v2->attrib[FRAG_ATTRIB_COL1]); v0->attrib[FRAG_ATTRIB_CI][0] = v2->attrib[FRAG_ATTRIB_CI][0]; v1->attrib[FRAG_ATTRIB_CI][0] = v2->attrib[FRAG_ATTRIB_CI][0]; - } - if (ef[e0]) _swrast_Point( ctx, v0 ); - if (ef[e1]) _swrast_Point( ctx, v1 ); - if (ef[e2]) _swrast_Point( ctx, v2 ); + render(ctx, ef, e0, e1, e2, v0, v1, v2); - if (ctx->Light.ShadeModel == GL_FLAT) { - /* restore v0, v1 colores/indexes */ COPY_CHAN4(v0->color, c[0]); COPY_CHAN4(v1->color, c[1]); COPY_4V(v0->attrib[FRAG_ATTRIB_COL1], s[0]); @@ -162,7 +161,9 @@ static void _swsetup_render_point_tri( GLcontext *ctx, v0->attrib[FRAG_ATTRIB_CI][0] = i[0]; v1->attrib[FRAG_ATTRIB_CI][0] = i[1]; } - _swrast_flush(ctx); + else { + render(ctx, ef, e0, e1, e2, v0, v1, v2); + } } #define SS_COLOR(a,b) UNCLAMPED_FLOAT_TO_RGBA_CHAN(a,b) diff --git a/src/mesa/swrast_setup/ss_tritmp.h b/src/mesa/swrast_setup/ss_tritmp.h index 97d2f4a16b..724b5e94fa 100644 --- a/src/mesa/swrast_setup/ss_tritmp.h +++ b/src/mesa/swrast_setup/ss_tritmp.h @@ -171,14 +171,14 @@ static void TAG(triangle)(GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 ) v[1]->attrib[FRAG_ATTRIB_WPOS][2] = oz1; v[2]->attrib[FRAG_ATTRIB_WPOS][2] = oz2; } - _swsetup_render_point_tri( ctx, e0, e1, e2, facing ); + _swsetup_render_tri(ctx, e0, e1, e2, facing, _swsetup_edge_render_point_tri); } else if (mode == GL_LINE) { if ((IND & SS_OFFSET_BIT) && ctx->Polygon.OffsetLine) { v[0]->attrib[FRAG_ATTRIB_WPOS][2] = oz0; v[1]->attrib[FRAG_ATTRIB_WPOS][2] = oz1; v[2]->attrib[FRAG_ATTRIB_WPOS][2] = oz2; } - _swsetup_render_line_tri( ctx, e0, e1, e2, facing ); + _swsetup_render_tri(ctx, e0, e1, e2, facing, _swsetup_edge_render_line_tri); } else { if ((IND & SS_OFFSET_BIT) && ctx->Polygon.OffsetFill) { v[0]->attrib[FRAG_ATTRIB_WPOS][2] = oz0; diff --git a/src/mesa/tnl/t_context.c b/src/mesa/tnl/t_context.c index f0d31fdac3..f69b122046 100644 --- a/src/mesa/tnl/t_context.c +++ b/src/mesa/tnl/t_context.c @@ -149,13 +149,10 @@ _tnl_InvalidateState( GLcontext *ctx, GLuint new_state ) /* fixed-function fog */ RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_FOG ); } - else if (ctx->FragmentProgram._Current) { - struct gl_fragment_program *fp = ctx->FragmentProgram._Current; - 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 ); - } + 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 ); } } diff --git a/src/mesa/tnl/t_context.h b/src/mesa/tnl/t_context.h index 0a6ce04614..c19eb3df3c 100644 --- a/src/mesa/tnl/t_context.h +++ b/src/mesa/tnl/t_context.h @@ -50,6 +50,7 @@ #define _T_CONTEXT_H #include "main/glheader.h" +#include "main/bitset.h" #include "main/mtypes.h" #include "math/m_matrix.h" diff --git a/src/mesa/tnl/t_rasterpos.c b/src/mesa/tnl/t_rasterpos.c index 14d79eab54..04fb1d8f8c 100644 --- a/src/mesa/tnl/t_rasterpos.c +++ b/src/mesa/tnl/t_rasterpos.c @@ -301,12 +301,12 @@ compute_texgen(GLcontext *ctx, const GLfloat vObj[4], const GLfloat vEye[4], mInv = 0.0F; if (texUnit->TexGenEnabled & S_BIT) { - switch (texUnit->GenModeS) { + switch (texUnit->GenS.Mode) { case GL_OBJECT_LINEAR: - texcoord[0] = DOT4(vObj, texUnit->ObjectPlaneS); + texcoord[0] = DOT4(vObj, texUnit->GenS.ObjectPlane); break; case GL_EYE_LINEAR: - texcoord[0] = DOT4(vEye, texUnit->EyePlaneS); + texcoord[0] = DOT4(vEye, texUnit->GenS.EyePlane); break; case GL_SPHERE_MAP: texcoord[0] = rx * mInv + 0.5F; @@ -324,12 +324,12 @@ compute_texgen(GLcontext *ctx, const GLfloat vObj[4], const GLfloat vEye[4], } if (texUnit->TexGenEnabled & T_BIT) { - switch (texUnit->GenModeT) { + switch (texUnit->GenT.Mode) { case GL_OBJECT_LINEAR: - texcoord[1] = DOT4(vObj, texUnit->ObjectPlaneT); + texcoord[1] = DOT4(vObj, texUnit->GenT.ObjectPlane); break; case GL_EYE_LINEAR: - texcoord[1] = DOT4(vEye, texUnit->EyePlaneT); + texcoord[1] = DOT4(vEye, texUnit->GenT.EyePlane); break; case GL_SPHERE_MAP: texcoord[1] = ry * mInv + 0.5F; @@ -347,12 +347,12 @@ compute_texgen(GLcontext *ctx, const GLfloat vObj[4], const GLfloat vEye[4], } if (texUnit->TexGenEnabled & R_BIT) { - switch (texUnit->GenModeR) { + switch (texUnit->GenR.Mode) { case GL_OBJECT_LINEAR: - texcoord[2] = DOT4(vObj, texUnit->ObjectPlaneR); + texcoord[2] = DOT4(vObj, texUnit->GenR.ObjectPlane); break; case GL_EYE_LINEAR: - texcoord[2] = DOT4(vEye, texUnit->EyePlaneR); + texcoord[2] = DOT4(vEye, texUnit->GenR.EyePlane); break; case GL_REFLECTION_MAP: texcoord[2] = rz; @@ -367,12 +367,12 @@ compute_texgen(GLcontext *ctx, const GLfloat vObj[4], const GLfloat vEye[4], } if (texUnit->TexGenEnabled & Q_BIT) { - switch (texUnit->GenModeQ) { + switch (texUnit->GenQ.Mode) { case GL_OBJECT_LINEAR: - texcoord[3] = DOT4(vObj, texUnit->ObjectPlaneQ); + texcoord[3] = DOT4(vObj, texUnit->GenQ.ObjectPlane); break; case GL_EYE_LINEAR: - texcoord[3] = DOT4(vEye, texUnit->EyePlaneQ); + texcoord[3] = DOT4(vEye, texUnit->GenQ.EyePlane); break; default: _mesa_problem(ctx, "Bad Q texgen in compute_texgen()"); diff --git a/src/mesa/tnl/t_vb_points.c b/src/mesa/tnl/t_vb_points.c index 01d055c1dd..a52505b4b8 100644 --- a/src/mesa/tnl/t_vb_points.c +++ b/src/mesa/tnl/t_vb_points.c @@ -25,7 +25,9 @@ * Brian Paul */ +#include "main/glheader.h" #include "main/mtypes.h" +#include "main/dd.h" #include "main/imports.h" #include "t_context.h" #include "t_pipeline.h" diff --git a/src/mesa/tnl/t_vb_texgen.c b/src/mesa/tnl/t_vb_texgen.c index 14d3876e54..7c1819b223 100644 --- a/src/mesa/tnl/t_vb_texgen.c +++ b/src/mesa/tnl/t_vb_texgen.c @@ -367,16 +367,16 @@ static void texgen( GLcontext *ctx, if (texUnit->TexGenEnabled & S_BIT) { GLuint i; - switch (texUnit->GenModeS) { + switch (texUnit->GenS.Mode) { case GL_OBJECT_LINEAR: _mesa_dotprod_tab[obj->size]( (GLfloat *)out->data, sizeof(out->data[0]), obj, - texUnit->ObjectPlaneS ); + texUnit->GenS.ObjectPlane ); break; case GL_EYE_LINEAR: _mesa_dotprod_tab[eye->size]( (GLfloat *)out->data, sizeof(out->data[0]), eye, - texUnit->EyePlaneS ); + texUnit->GenS.EyePlane ); break; case GL_SPHERE_MAP: for (i = 0; i < count; i++) @@ -400,16 +400,16 @@ static void texgen( GLcontext *ctx, if (texUnit->TexGenEnabled & T_BIT) { GLuint i; - switch (texUnit->GenModeT) { + switch (texUnit->GenT.Mode) { case GL_OBJECT_LINEAR: _mesa_dotprod_tab[obj->size]( &(out->data[0][1]), sizeof(out->data[0]), obj, - texUnit->ObjectPlaneT ); + texUnit->GenT.ObjectPlane ); break; case GL_EYE_LINEAR: _mesa_dotprod_tab[eye->size]( &(out->data[0][1]), sizeof(out->data[0]), eye, - texUnit->EyePlaneT ); + texUnit->GenT.EyePlane ); break; case GL_SPHERE_MAP: for (i = 0; i < count; i++) @@ -433,16 +433,16 @@ static void texgen( GLcontext *ctx, if (texUnit->TexGenEnabled & R_BIT) { GLuint i; - switch (texUnit->GenModeR) { + switch (texUnit->GenR.Mode) { case GL_OBJECT_LINEAR: _mesa_dotprod_tab[obj->size]( &(out->data[0][2]), sizeof(out->data[0]), obj, - texUnit->ObjectPlaneR ); + texUnit->GenR.ObjectPlane ); break; case GL_EYE_LINEAR: _mesa_dotprod_tab[eye->size]( &(out->data[0][2]), sizeof(out->data[0]), eye, - texUnit->EyePlaneR ); + texUnit->GenR.EyePlane ); break; case GL_REFLECTION_MAP_NV: for (i=0;i<count;i++) @@ -461,16 +461,16 @@ static void texgen( GLcontext *ctx, } if (texUnit->TexGenEnabled & Q_BIT) { - switch (texUnit->GenModeQ) { + switch (texUnit->GenQ.Mode) { case GL_OBJECT_LINEAR: _mesa_dotprod_tab[obj->size]( &(out->data[0][3]), sizeof(out->data[0]), obj, - texUnit->ObjectPlaneQ ); + texUnit->GenQ.ObjectPlane ); break; case GL_EYE_LINEAR: _mesa_dotprod_tab[eye->size]( &(out->data[0][3]), sizeof(out->data[0]), eye, - texUnit->EyePlaneQ ); + texUnit->GenQ.EyePlane ); break; default: _mesa_problem(ctx, "Bad Q texgen"); diff --git a/src/mesa/tnl/t_vertex.c b/src/mesa/tnl/t_vertex.c index 10b78f820e..fe4209ae57 100644 --- a/src/mesa/tnl/t_vertex.c +++ b/src/mesa/tnl/t_vertex.c @@ -535,27 +535,30 @@ void _tnl_init_vertices( GLcontext *ctx, void _tnl_free_vertices( GLcontext *ctx ) { - struct tnl_clipspace *vtx = GET_VERTEX_STATE(ctx); - struct tnl_clipspace_fastpath *fp, *tmp; + TNLcontext *tnl = TNL_CONTEXT(ctx); + if (tnl) { + struct tnl_clipspace *vtx = GET_VERTEX_STATE(ctx); + struct tnl_clipspace_fastpath *fp, *tmp; - if (vtx->vertex_buf) { - ALIGN_FREE(vtx->vertex_buf); - vtx->vertex_buf = NULL; - } - - for (fp = vtx->fastpath ; fp ; fp = tmp) { - tmp = fp->next; - FREE(fp->attr); - - /* KW: At the moment, fp->func is constrained to be allocated by - * _mesa_exec_alloc(), as the hardwired fastpaths in - * t_vertex_generic.c are handled specially. It would be nice - * to unify them, but this probably won't change until this - * module gets another overhaul. - */ - _mesa_exec_free((void *) fp->func); - FREE(fp); + if (vtx->vertex_buf) { + ALIGN_FREE(vtx->vertex_buf); + vtx->vertex_buf = NULL; + } + + for (fp = vtx->fastpath ; fp ; fp = tmp) { + tmp = fp->next; + FREE(fp->attr); + + /* KW: At the moment, fp->func is constrained to be allocated by + * _mesa_exec_alloc(), as the hardwired fastpaths in + * t_vertex_generic.c are handled specially. It would be nice + * to unify them, but this probably won't change until this + * module gets another overhaul. + */ + _mesa_exec_free((void *) fp->func); + FREE(fp); + } + + vtx->fastpath = NULL; } - - vtx->fastpath = NULL; } diff --git a/src/mesa/tnl/t_vp_build.c b/src/mesa/tnl/t_vp_build.c index 7be4d95af6..735937bbe2 100644 --- a/src/mesa/tnl/t_vp_build.c +++ b/src/mesa/tnl/t_vp_build.c @@ -32,6 +32,7 @@ #include "main/glheader.h" #include "main/ffvertex_prog.h" +#include "main/dd.h" #include "t_vp_build.h" diff --git a/src/mesa/tnl_dd/t_dd_vb.c b/src/mesa/tnl_dd/t_dd_vb.c index 3cedd90119..b3937c29a0 100644 --- a/src/mesa/tnl_dd/t_dd_vb.c +++ b/src/mesa/tnl_dd/t_dd_vb.c @@ -188,6 +188,9 @@ void TAG(translate_vertex)(GLcontext *ctx, } +/* prototype to silence warning */ +void TAG(print_vertex)( GLcontext *ctx, const VERTEX *v ); + void TAG(print_vertex)( GLcontext *ctx, const VERTEX *v ) { diff --git a/src/mesa/vbo/vbo_exec.c b/src/mesa/vbo/vbo_exec.c index 635f239acc..e168a89ea5 100644 --- a/src/mesa/vbo/vbo_exec.c +++ b/src/mesa/vbo/vbo_exec.c @@ -57,6 +57,7 @@ void vbo_exec_init( GLcontext *ctx ) ctx->Driver.NeedFlush = 0; ctx->Driver.CurrentExecPrimitive = PRIM_OUTSIDE_BEGIN_END; + ctx->Driver.BeginVertices = vbo_exec_BeginVertices; ctx->Driver.FlushVertices = vbo_exec_FlushVertices; vbo_exec_invalidate_state( ctx, ~0 ); diff --git a/src/mesa/vbo/vbo_exec.h b/src/mesa/vbo/vbo_exec.h index ddbcbe1181..100bb8a5de 100644 --- a/src/mesa/vbo/vbo_exec.h +++ b/src/mesa/vbo/vbo_exec.h @@ -43,7 +43,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. /* Wierd implementation stuff: */ -#define VBO_VERT_BUFFER_SIZE (1024*16) /* dwords == 64k */ +#define VBO_VERT_BUFFER_SIZE (1024*64) /* bytes */ #define VBO_MAX_ATTR_CODEGEN 16 #define ERROR_ATTRIB 16 @@ -78,14 +78,15 @@ struct vbo_exec_context struct { struct gl_buffer_object *bufferobj; - GLubyte *buffer_map; - GLuint vertex_size; + GLuint vertex_size; /* in dwords */ struct _mesa_prim prim[VBO_MAX_PRIM]; GLuint prim_count; - GLfloat *vbptr; /* cursor, points into buffer */ + GLfloat *buffer_map; + GLfloat *buffer_ptr; /* cursor, points into buffer */ + GLuint buffer_used; /* in bytes */ GLfloat vertex[VBO_ATTRIB_MAX*4]; /* current vertex */ GLuint vert_count; @@ -140,6 +141,9 @@ struct vbo_exec_context void vbo_exec_init( GLcontext *ctx ); void vbo_exec_destroy( GLcontext *ctx ); void vbo_exec_invalidate_state( GLcontext *ctx, GLuint new_state ); +void vbo_exec_FlushVertices_internal( GLcontext *ctx, GLboolean unmap ); + +void vbo_exec_BeginVertices( GLcontext *ctx ); void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags ); @@ -151,7 +155,8 @@ void vbo_exec_array_destroy( struct vbo_exec_context *exec ); void vbo_exec_vtx_init( struct vbo_exec_context *exec ); void vbo_exec_vtx_destroy( struct vbo_exec_context *exec ); -void vbo_exec_vtx_flush( struct vbo_exec_context *exec ); +void vbo_exec_vtx_flush( struct vbo_exec_context *exec, GLboolean unmap ); +void vbo_exec_vtx_map( struct vbo_exec_context *exec ); void vbo_exec_vtx_wrap( struct vbo_exec_context *exec ); void vbo_exec_eval_update( struct vbo_exec_context *exec ); diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c index 2743bf6b55..5d35ec9c11 100644 --- a/src/mesa/vbo/vbo_exec_api.c +++ b/src/mesa/vbo/vbo_exec_api.c @@ -62,7 +62,7 @@ static void vbo_exec_wrap_buffers( struct vbo_exec_context *exec ) if (exec->vtx.prim_count == 0) { exec->vtx.copied.nr = 0; exec->vtx.vert_count = 0; - exec->vtx.vbptr = (GLfloat *)exec->vtx.buffer_map; + exec->vtx.buffer_ptr = exec->vtx.buffer_map; } else { GLuint last_begin = exec->vtx.prim[exec->vtx.prim_count-1].begin; @@ -80,7 +80,7 @@ static void vbo_exec_wrap_buffers( struct vbo_exec_context *exec ) /* Execute the buffer and save copied vertices. */ if (exec->vtx.vert_count) - vbo_exec_vtx_flush( exec ); + vbo_exec_vtx_flush( exec, GL_FALSE ); else { exec->vtx.prim_count = 0; exec->vtx.copied.nr = 0; @@ -121,9 +121,9 @@ void vbo_exec_vtx_wrap( struct vbo_exec_context *exec ) assert(exec->vtx.max_vert - exec->vtx.vert_count > exec->vtx.copied.nr); for (i = 0 ; i < exec->vtx.copied.nr ; i++) { - _mesa_memcpy( exec->vtx.vbptr, data, + _mesa_memcpy( exec->vtx.buffer_ptr, data, exec->vtx.vertex_size * sizeof(GLfloat)); - exec->vtx.vbptr += exec->vtx.vertex_size; + exec->vtx.buffer_ptr += exec->vtx.vertex_size; data += exec->vtx.vertex_size; exec->vtx.vert_count++; } @@ -183,8 +183,6 @@ static void vbo_exec_copy_to_current( struct vbo_exec_context *exec ) _mesa_update_color_material(ctx, ctx->Current.Attrib[VBO_ATTRIB_COLOR0]); } - - ctx->Driver.NeedFlush &= ~FLUSH_UPDATE_CURRENT; } @@ -204,8 +202,6 @@ static void vbo_exec_copy_from_current( struct vbo_exec_context *exec ) break; } } - - ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT; } @@ -251,9 +247,10 @@ static void vbo_exec_wrap_upgrade_vertex( struct vbo_exec_context *exec, exec->vtx.attrsz[attr] = newsz; exec->vtx.vertex_size += newsz - oldsz; - exec->vtx.max_vert = VBO_VERT_BUFFER_SIZE / exec->vtx.vertex_size; + exec->vtx.max_vert = ((VBO_VERT_BUFFER_SIZE - exec->vtx.buffer_used) / + (exec->vtx.vertex_size * sizeof(GLfloat))); exec->vtx.vert_count = 0; - exec->vtx.vbptr = (GLfloat *)exec->vtx.buffer_map; + exec->vtx.buffer_ptr = exec->vtx.buffer_map; /* Recalculate all the attrptr[] values @@ -279,10 +276,10 @@ static void vbo_exec_wrap_upgrade_vertex( struct vbo_exec_context *exec, if (exec->vtx.copied.nr) { GLfloat *data = exec->vtx.copied.buffer; - GLfloat *dest = exec->vtx.vbptr; + GLfloat *dest = exec->vtx.buffer_ptr; GLuint j; - assert(exec->vtx.vbptr == (GLfloat *)exec->vtx.buffer_map); + assert(exec->vtx.buffer_ptr == exec->vtx.buffer_map); for (i = 0 ; i < exec->vtx.copied.nr ; i++) { for (j = 0 ; j < VBO_ATTRIB_MAX ; j++) { @@ -308,7 +305,7 @@ static void vbo_exec_wrap_upgrade_vertex( struct vbo_exec_context *exec, } } - exec->vtx.vbptr = dest; + exec->vtx.buffer_ptr = dest; exec->vtx.vert_count += exec->vtx.copied.nr; exec->vtx.copied.nr = 0; } @@ -345,8 +342,6 @@ static void vbo_exec_fixup_vertex( GLcontext *ctx, */ if (attr == 0) exec->ctx->Driver.NeedFlush |= FLUSH_STORED_VERTICES; - else - exec->ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT; } @@ -373,9 +368,9 @@ do { \ GLuint i; \ \ for (i = 0; i < exec->vtx.vertex_size; i++) \ - exec->vtx.vbptr[i] = exec->vtx.vertex[i]; \ + exec->vtx.buffer_ptr[i] = exec->vtx.vertex[i]; \ \ - exec->vtx.vbptr += exec->vtx.vertex_size; \ + exec->vtx.buffer_ptr += exec->vtx.vertex_size; \ exec->ctx->Driver.NeedFlush |= FLUSH_STORED_VERTICES; \ \ if (++exec->vtx.vert_count >= exec->vtx.max_vert) \ @@ -532,7 +527,7 @@ static void GLAPIENTRY vbo_exec_Begin( GLenum mode ) * begin/end pairs. */ if (exec->vtx.vertex_size && !exec->vtx.attrsz[0]) - vbo_exec_FlushVertices( ctx, ~0 ); + vbo_exec_FlushVertices_internal( ctx, GL_FALSE ); i = exec->vtx.prim_count++; exec->vtx.prim[i].mode = mode; @@ -566,7 +561,7 @@ static void GLAPIENTRY vbo_exec_End( void ) ctx->Driver.CurrentExecPrimitive = PRIM_OUTSIDE_BEGIN_END; if (exec->vtx.prim_count == VBO_MAX_PRIM) - vbo_exec_vtx_flush( exec ); + vbo_exec_vtx_flush( exec, GL_FALSE ); } else _mesa_error( ctx, GL_INVALID_OPERATION, "glEnd" ); @@ -672,23 +667,20 @@ void vbo_use_buffer_objects(GLcontext *ctx) */ GLuint bufName = 0xaabbccdd; GLenum target = GL_ARRAY_BUFFER_ARB; - GLenum access = GL_READ_WRITE_ARB; GLenum usage = GL_STREAM_DRAW_ARB; - GLsizei size = VBO_VERT_BUFFER_SIZE * sizeof(GLfloat); + GLsizei size = VBO_VERT_BUFFER_SIZE; /* Make sure this func is only used once */ assert(exec->vtx.bufferobj == ctx->Array.NullBufferObj); if (exec->vtx.buffer_map) { _mesa_align_free(exec->vtx.buffer_map); + exec->vtx.buffer_map = NULL; + exec->vtx.buffer_ptr = NULL; } /* Allocate a real buffer object now */ exec->vtx.bufferobj = ctx->Driver.NewBufferObject(ctx, bufName, target); ctx->Driver.BufferData(ctx, target, size, NULL, usage, exec->vtx.bufferobj); - - /* and map it */ - exec->vtx.buffer_map - = ctx->Driver.MapBuffer(ctx, target, access, exec->vtx.bufferobj); } @@ -708,7 +700,9 @@ void vbo_exec_vtx_init( struct vbo_exec_context *exec ) ctx->Array.NullBufferObj); ASSERT(!exec->vtx.buffer_map); - exec->vtx.buffer_map = ALIGN_MALLOC(VBO_VERT_BUFFER_SIZE * sizeof(GLfloat), 64); + exec->vtx.buffer_map = (GLfloat *)ALIGN_MALLOC(VBO_VERT_BUFFER_SIZE, 64); + exec->vtx.buffer_ptr = exec->vtx.buffer_map; + vbo_exec_vtxfmt_init( exec ); /* Hook our functions into the dispatch table. @@ -743,28 +737,58 @@ void vbo_exec_vtx_destroy( struct vbo_exec_context *exec ) if (exec->vtx.buffer_map) { ALIGN_FREE(exec->vtx.buffer_map); exec->vtx.buffer_map = NULL; + exec->vtx.buffer_ptr = NULL; } } } - -void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags ) +void vbo_exec_BeginVertices( GLcontext *ctx ) { struct vbo_exec_context *exec = &vbo_context(ctx)->exec; + if (0) _mesa_printf("%s\n", __FUNCTION__); + vbo_exec_vtx_map( exec ); - if (exec->ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) - return; + assert((exec->ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) == 0); + exec->ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT; +} - if (exec->vtx.vert_count) { - vbo_exec_vtx_flush( exec ); +void vbo_exec_FlushVertices_internal( GLcontext *ctx, GLboolean unmap ) +{ + struct vbo_exec_context *exec = &vbo_context(ctx)->exec; + + if (exec->vtx.vert_count || unmap) { + vbo_exec_vtx_flush( exec, unmap ); } if (exec->vtx.vertex_size) { vbo_exec_copy_to_current( exec ); reset_attrfv( exec ); } +} + + + +void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags ) +{ + struct vbo_exec_context *exec = &vbo_context(ctx)->exec; + + if (0) _mesa_printf("%s\n", __FUNCTION__); + + if (exec->ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { + if (0) _mesa_printf("%s - inside begin/end\n", __FUNCTION__); + return; + } + + vbo_exec_FlushVertices_internal( ctx, GL_TRUE ); + + /* Need to do this to ensure BeginVertices gets called again: + */ + if (exec->ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) { + _mesa_restore_exec_vtxfmt( ctx ); + exec->ctx->Driver.NeedFlush &= ~FLUSH_UPDATE_CURRENT; + } - exec->ctx->Driver.NeedFlush = 0; + exec->ctx->Driver.NeedFlush &= ~flags; } diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c index 8871e10cf6..0d4cbe9a1e 100644 --- a/src/mesa/vbo/vbo_exec_array.c +++ b/src/mesa/vbo/vbo_exec_array.c @@ -31,6 +31,7 @@ #include "main/api_validate.h" #include "main/api_noop.h" #include "main/varray.h" +#include "main/bufferobj.h" #include "glapi/dispatch.h" #include "vbo_context.h" @@ -94,32 +95,33 @@ static void bind_array_obj( GLcontext *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] = &ctx->Array.ArrayObj->Vertex; + exec->array.legacy_array[VERT_ATTRIB_POS] = &arrayObj->Vertex; exec->array.legacy_array[VERT_ATTRIB_WEIGHT] = &vbo->legacy_currval[VERT_ATTRIB_WEIGHT]; - exec->array.legacy_array[VERT_ATTRIB_NORMAL] = &ctx->Array.ArrayObj->Normal; - exec->array.legacy_array[VERT_ATTRIB_COLOR0] = &ctx->Array.ArrayObj->Color; - exec->array.legacy_array[VERT_ATTRIB_COLOR1] = &ctx->Array.ArrayObj->SecondaryColor; - exec->array.legacy_array[VERT_ATTRIB_FOG] = &ctx->Array.ArrayObj->FogCoord; - exec->array.legacy_array[VERT_ATTRIB_COLOR_INDEX] = &ctx->Array.ArrayObj->Index; - if (ctx->Array.ArrayObj->PointSize.Enabled) { + 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] = &ctx->Array.ArrayObj->PointSize; + exec->array.legacy_array[VERT_ATTRIB_POINT_SIZE] = &arrayObj->PointSize; } - exec->array.legacy_array[VERT_ATTRIB_EDGEFLAG] = &ctx->Array.ArrayObj->EdgeFlag; + exec->array.legacy_array[VERT_ATTRIB_EDGEFLAG] = &arrayObj->EdgeFlag; for (i = 0; i < 8; i++) - exec->array.legacy_array[VERT_ATTRIB_TEX0 + i] = &ctx->Array.ArrayObj->TexCoord[i]; + exec->array.legacy_array[VERT_ATTRIB_TEX0 + i] = &arrayObj->TexCoord[i]; for (i = 0; i < VERT_ATTRIB_MAX; i++) - exec->array.generic_array[i] = &ctx->Array.ArrayObj->VertexAttrib[i]; + exec->array.generic_array[i] = &arrayObj->VertexAttrib[i]; - exec->array.array_obj = ctx->Array.ArrayObj->Name; + exec->array.array_obj = arrayObj->Name; } static void recalculate_input_bindings( GLcontext *ctx ) @@ -291,6 +293,47 @@ vbo_exec_DrawArrays(GLenum mode, GLint start, GLsizei count) prim[0].indexed = 0; vbo->draw_prims( ctx, exec->array.inputs, prim, 1, NULL, start, start + count - 1 ); + +#if 0 + { + int i; + + _mesa_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; + _mesa_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) 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; + _mesa_printf(" Data at offset %d:\n", offset); + for (i = 0; i < n; i++) { + _mesa_printf(" float[%d] = 0x%08x %f\n", i, k[i], f[i]); + } + ctx->Driver.UnmapBuffer(ctx, GL_ARRAY_BUFFER_ARB, buf); + } + } + } +#endif } diff --git a/src/mesa/vbo/vbo_exec_draw.c b/src/mesa/vbo/vbo_exec_draw.c index 45133fa4f3..5381cc4d92 100644 --- a/src/mesa/vbo/vbo_exec_draw.c +++ b/src/mesa/vbo/vbo_exec_draw.c @@ -70,7 +70,7 @@ static GLuint vbo_copy_vertices( struct vbo_exec_context *exec ) GLuint ovf, i; GLuint sz = exec->vtx.vertex_size; GLfloat *dst = exec->vtx.copied.buffer; - GLfloat *src = ((GLfloat *)exec->vtx.buffer_map + + GLfloat *src = (exec->vtx.buffer_map + exec->vtx.prim[exec->vtx.prim_count-1].start * exec->vtx.vertex_size); @@ -147,7 +147,7 @@ static void vbo_exec_bind_arrays( GLcontext *ctx ) struct vbo_exec_context *exec = &vbo->exec; struct gl_client_array *arrays = exec->vtx.arrays; GLuint count = exec->vtx.vert_count; - GLubyte *data = exec->vtx.buffer_map; + GLubyte *data = (GLubyte *)exec->vtx.buffer_map; const GLuint *map; GLuint attr; GLbitfield varying_inputs = 0x0; @@ -204,7 +204,7 @@ static void vbo_exec_bind_arrays( GLcontext *ctx ) if (exec->vtx.bufferobj->Name) { /* a real buffer obj: Ptr is an offset, not a pointer*/ - int offset; + GLsizeiptr offset; assert(exec->vtx.bufferobj->Pointer); /* buf should be mapped */ offset = (GLbyte *) data - (GLbyte *) exec->vtx.bufferobj->Pointer; assert(offset >= 0); @@ -234,10 +234,91 @@ static void vbo_exec_bind_arrays( GLcontext *ctx ) } +static void vbo_exec_vtx_unmap( struct vbo_exec_context *exec ) +{ + GLenum target = GL_ARRAY_BUFFER_ARB; + + if (exec->vtx.bufferobj->Name) { + GLcontext *ctx = exec->ctx; + + if(ctx->Driver.FlushMappedBufferRange) { + GLintptr offset = exec->vtx.buffer_used - exec->vtx.bufferobj->Offset; + GLsizeiptr length = (exec->vtx.buffer_ptr - exec->vtx.buffer_map) * sizeof(float); + + if(length) + ctx->Driver.FlushMappedBufferRange(ctx, target, + offset, length, + exec->vtx.bufferobj); + } + + exec->vtx.buffer_used += (exec->vtx.buffer_ptr - + exec->vtx.buffer_map) * sizeof(float); + + assert(exec->vtx.buffer_used <= VBO_VERT_BUFFER_SIZE); + assert(exec->vtx.buffer_ptr != NULL); + + ctx->Driver.UnmapBuffer(ctx, target, exec->vtx.bufferobj); + exec->vtx.buffer_map = NULL; + exec->vtx.buffer_ptr = NULL; + exec->vtx.max_vert = 0; + } +} + +void vbo_exec_vtx_map( struct vbo_exec_context *exec ) +{ + GLcontext *ctx = exec->ctx; + GLenum target = GL_ARRAY_BUFFER_ARB; + GLenum access = GL_READ_WRITE_ARB; + GLenum usage = GL_STREAM_DRAW_ARB; + + if (exec->vtx.bufferobj->Name == 0) + return; + + if (exec->vtx.buffer_map != NULL) { + assert(0); + exec->vtx.buffer_map = NULL; + exec->vtx.buffer_ptr = NULL; + } + + if (VBO_VERT_BUFFER_SIZE > exec->vtx.buffer_used + 1024 && + ctx->Driver.MapBufferRange) + { + exec->vtx.buffer_map = + (GLfloat *)ctx->Driver.MapBufferRange(ctx, + target, + exec->vtx.buffer_used, + (VBO_VERT_BUFFER_SIZE - + exec->vtx.buffer_used), + (GL_MAP_WRITE_BIT | + GL_MAP_INVALIDATE_RANGE_BIT | + GL_MAP_UNSYNCHRONIZED_BIT | + MESA_MAP_NOWAIT_BIT), + exec->vtx.bufferobj); + exec->vtx.buffer_ptr = exec->vtx.buffer_map; + } + + if (!exec->vtx.buffer_map) { + exec->vtx.buffer_used = 0; + + ctx->Driver.BufferData(ctx, target, + VBO_VERT_BUFFER_SIZE, + NULL, usage, exec->vtx.bufferobj); + + exec->vtx.buffer_map = + (GLfloat *)ctx->Driver.MapBuffer(ctx, target, access, exec->vtx.bufferobj); + exec->vtx.buffer_ptr = exec->vtx.buffer_map; + } + + if (0) _mesa_printf("map %d..\n", exec->vtx.buffer_used); +} + + + /** * Execute the buffer and save copied verts. */ -void vbo_exec_vtx_flush( struct vbo_exec_context *exec ) +void vbo_exec_vtx_flush( struct vbo_exec_context *exec, + GLboolean unmap ) { if (0) vbo_exec_debug_verts( exec ); @@ -250,25 +331,22 @@ void vbo_exec_vtx_flush( struct vbo_exec_context *exec ) if (exec->vtx.copied.nr != exec->vtx.vert_count) { GLcontext *ctx = exec->ctx; - - GLenum target = GL_ARRAY_BUFFER_ARB; - GLenum access = GL_READ_WRITE_ARB; - GLenum usage = GL_STREAM_DRAW_ARB; - GLsizei size = VBO_VERT_BUFFER_SIZE * sizeof(GLfloat); - /* Before the unmap (why?) + /* Before the update_state() as this may raise _NEW_ARRAY + * from _mesa_set_varying_vp_inputs(). */ vbo_exec_bind_arrays( ctx ); if (ctx->NewState) _mesa_update_state( ctx ); - /* if using a real VBO, unmap it before drawing */ if (exec->vtx.bufferobj->Name) { - ctx->Driver.UnmapBuffer(ctx, target, exec->vtx.bufferobj); - exec->vtx.buffer_map = NULL; + vbo_exec_vtx_unmap( exec ); } + if (0) _mesa_printf("%s %d %d\n", __FUNCTION__, exec->vtx.prim_count, + exec->vtx.vert_count); + vbo_context(ctx)->draw_prims( ctx, exec->vtx.inputs, exec->vtx.prim, @@ -277,16 +355,31 @@ void vbo_exec_vtx_flush( struct vbo_exec_context *exec ) 0, exec->vtx.vert_count - 1); - /* If using a real VBO, get new storage */ - if (exec->vtx.bufferobj->Name) { - ctx->Driver.BufferData(ctx, target, size, NULL, usage, exec->vtx.bufferobj); - exec->vtx.buffer_map = - ctx->Driver.MapBuffer(ctx, target, access, exec->vtx.bufferobj); - } + /* If using a real VBO, get new storage -- unless asked not to. + */ + if (exec->vtx.bufferobj->Name && !unmap) { + vbo_exec_vtx_map( exec ); + } } } + /* May have to unmap explicitly if we didn't draw: + */ + if (unmap && + exec->vtx.bufferobj->Name && + exec->vtx.buffer_map) { + vbo_exec_vtx_unmap( exec ); + } + + + if (unmap) + exec->vtx.max_vert = 0; + else + exec->vtx.max_vert = ((VBO_VERT_BUFFER_SIZE - exec->vtx.buffer_used) / + (exec->vtx.vertex_size * sizeof(GLfloat))); + + + exec->vtx.buffer_ptr = exec->vtx.buffer_map; exec->vtx.prim_count = 0; exec->vtx.vert_count = 0; - exec->vtx.vbptr = (GLfloat *)exec->vtx.buffer_map; } diff --git a/src/mesa/vbo/vbo_save.h b/src/mesa/vbo/vbo_save.h index 7dda54af48..9558f83883 100644 --- a/src/mesa/vbo/vbo_save.h +++ b/src/mesa/vbo/vbo_save.h @@ -130,7 +130,7 @@ struct vbo_save_context { struct vbo_save_vertex_store *vertex_store; struct vbo_save_primitive_store *prim_store; - GLfloat *vbptr; /* cursor, points into buffer */ + GLfloat *buffer_ptr; /* cursor, points into buffer */ GLfloat vertex[VBO_ATTRIB_MAX*4]; /* current values */ GLfloat *attrptr[VBO_ATTRIB_MAX]; GLuint vert_count; diff --git a/src/mesa/vbo/vbo_save_api.c b/src/mesa/vbo/vbo_save_api.c index ddfd276577..52b6f1884e 100644 --- a/src/mesa/vbo/vbo_save_api.c +++ b/src/mesa/vbo/vbo_save_api.c @@ -241,7 +241,7 @@ static void _save_reset_counters( GLcontext *ctx ) save->buffer = (save->vertex_store->buffer + save->vertex_store->used); - assert(save->buffer == save->vbptr); + assert(save->buffer == save->buffer_ptr); if (save->vertex_size) save->max_vert = ((VBO_SAVE_BUFFER_SIZE - save->vertex_store->used) / @@ -343,7 +343,7 @@ static void _save_compile_vertex_list( GLcontext *ctx ) /* Allocate and map new store: */ save->vertex_store = alloc_vertex_store( ctx ); - save->vbptr = map_vertex_store( ctx, save->vertex_store ); + save->buffer_ptr = map_vertex_store( ctx, save->vertex_store ); } if (save->prim_store->used > VBO_SAVE_PRIM_SIZE - 6) { @@ -414,9 +414,9 @@ static void _save_wrap_filled_vertex( GLcontext *ctx ) assert(save->max_vert - save->vert_count > save->copied.nr); for (i = 0 ; i < save->copied.nr ; i++) { - _mesa_memcpy( save->vbptr, data, save->vertex_size * sizeof(GLfloat)); + _mesa_memcpy( save->buffer_ptr, data, save->vertex_size * sizeof(GLfloat)); data += save->vertex_size; - save->vbptr += save->vertex_size; + save->buffer_ptr += save->vertex_size; save->vert_count++; } } @@ -550,7 +550,7 @@ static void _save_upgrade_vertex( GLcontext *ctx, } } - save->vbptr = dest; + save->buffer_ptr = dest; save->vert_count += save->copied.nr; } } @@ -622,9 +622,9 @@ do { \ GLuint i; \ \ for (i = 0; i < save->vertex_size; i++) \ - save->vbptr[i] = save->vertex[i]; \ + save->buffer_ptr[i] = save->vertex[i]; \ \ - save->vbptr += save->vertex_size; \ + save->buffer_ptr += save->vertex_size; \ \ if (++save->vert_count >= save->max_vert) \ _save_wrap_filled_vertex( ctx ); \ @@ -1035,7 +1035,7 @@ void vbo_save_NewList( GLcontext *ctx, GLuint list, GLenum mode ) if (!save->vertex_store) save->vertex_store = alloc_vertex_store( ctx ); - save->vbptr = map_vertex_store( ctx, save->vertex_store ); + save->buffer_ptr = map_vertex_store( ctx, save->vertex_store ); _save_reset_vertex( ctx ); _save_reset_counters( ctx ); diff --git a/src/mesa/vbo/vbo_save_draw.c b/src/mesa/vbo/vbo_save_draw.c index 617c5a77ba..f59e1036d0 100644 --- a/src/mesa/vbo/vbo_save_draw.c +++ b/src/mesa/vbo/vbo_save_draw.c @@ -115,7 +115,7 @@ static void vbo_bind_vertex_list( GLcontext *ctx, struct vbo_context *vbo = vbo_context(ctx); struct vbo_save_context *save = &vbo->save; struct gl_client_array *arrays = save->arrays; - GLuint data = node->buffer_offset; + GLuint buffer_offset = node->buffer_offset; const GLuint *map; GLuint attr; GLubyte node_attrsz[VBO_ATTRIB_MAX]; /* copy of node->attrsz[] */ @@ -170,7 +170,7 @@ static void vbo_bind_vertex_list( GLcontext *ctx, /* override the default array set above */ save->inputs[attr] = &arrays[attr]; - arrays[attr].Ptr = (const GLubyte *) data; + arrays[attr].Ptr = (const GLubyte *) NULL + buffer_offset; arrays[attr].Size = node->attrsz[src]; arrays[attr].StrideB = node->vertex_size * sizeof(GLfloat); arrays[attr].Stride = node->vertex_size * sizeof(GLfloat); @@ -184,7 +184,7 @@ static void vbo_bind_vertex_list( GLcontext *ctx, assert(arrays[attr].BufferObj->Name); - data += node->attrsz[src] * sizeof(GLfloat); + buffer_offset += node->attrsz[src] * sizeof(GLfloat); varying_inputs |= 1<<attr; } } diff --git a/src/mesa/x86-64/glapi_x86-64.S b/src/mesa/x86-64/glapi_x86-64.S index 1eb4358b1c..fe05549c1d 100644 --- a/src/mesa/x86-64/glapi_x86-64.S +++ b/src/mesa/x86-64/glapi_x86-64.S @@ -27045,12 +27045,160 @@ GL_PREFIX(VertexAttribs4ubvNV): .size GL_PREFIX(VertexAttribs4ubvNV), .-GL_PREFIX(VertexAttribs4ubvNV) .p2align 4,,15 + .globl GL_PREFIX(GetTexBumpParameterfvATI) + .type GL_PREFIX(GetTexBumpParameterfvATI), @function +GL_PREFIX(GetTexBumpParameterfvATI): +#if defined(GLX_USE_TLS) + call _x86_64_get_dispatch@PLT + movq 5744(%rax), %r11 + jmp *%r11 +#elif defined(PTHREADS) + pushq %rdi + pushq %rsi + pushq %rbp + call _x86_64_get_dispatch@PLT + popq %rbp + popq %rsi + popq %rdi + movq 5744(%rax), %r11 + jmp *%r11 +#else + movq _glapi_Dispatch(%rip), %rax + testq %rax, %rax + je 1f + movq 5744(%rax), %r11 + jmp *%r11 +1: + pushq %rdi + pushq %rsi + pushq %rbp + call _glapi_get_dispatch + popq %rbp + popq %rsi + popq %rdi + movq 5744(%rax), %r11 + jmp *%r11 +#endif /* defined(GLX_USE_TLS) */ + .size GL_PREFIX(GetTexBumpParameterfvATI), .-GL_PREFIX(GetTexBumpParameterfvATI) + + .p2align 4,,15 + .globl GL_PREFIX(GetTexBumpParameterivATI) + .type GL_PREFIX(GetTexBumpParameterivATI), @function +GL_PREFIX(GetTexBumpParameterivATI): +#if defined(GLX_USE_TLS) + call _x86_64_get_dispatch@PLT + movq 5752(%rax), %r11 + jmp *%r11 +#elif defined(PTHREADS) + pushq %rdi + pushq %rsi + pushq %rbp + call _x86_64_get_dispatch@PLT + popq %rbp + popq %rsi + popq %rdi + movq 5752(%rax), %r11 + jmp *%r11 +#else + movq _glapi_Dispatch(%rip), %rax + testq %rax, %rax + je 1f + movq 5752(%rax), %r11 + jmp *%r11 +1: + pushq %rdi + pushq %rsi + pushq %rbp + call _glapi_get_dispatch + popq %rbp + popq %rsi + popq %rdi + movq 5752(%rax), %r11 + jmp *%r11 +#endif /* defined(GLX_USE_TLS) */ + .size GL_PREFIX(GetTexBumpParameterivATI), .-GL_PREFIX(GetTexBumpParameterivATI) + + .p2align 4,,15 + .globl GL_PREFIX(TexBumpParameterfvATI) + .type GL_PREFIX(TexBumpParameterfvATI), @function +GL_PREFIX(TexBumpParameterfvATI): +#if defined(GLX_USE_TLS) + call _x86_64_get_dispatch@PLT + movq 5760(%rax), %r11 + jmp *%r11 +#elif defined(PTHREADS) + pushq %rdi + pushq %rsi + pushq %rbp + call _x86_64_get_dispatch@PLT + popq %rbp + popq %rsi + popq %rdi + movq 5760(%rax), %r11 + jmp *%r11 +#else + movq _glapi_Dispatch(%rip), %rax + testq %rax, %rax + je 1f + movq 5760(%rax), %r11 + jmp *%r11 +1: + pushq %rdi + pushq %rsi + pushq %rbp + call _glapi_get_dispatch + popq %rbp + popq %rsi + popq %rdi + movq 5760(%rax), %r11 + jmp *%r11 +#endif /* defined(GLX_USE_TLS) */ + .size GL_PREFIX(TexBumpParameterfvATI), .-GL_PREFIX(TexBumpParameterfvATI) + + .p2align 4,,15 + .globl GL_PREFIX(TexBumpParameterivATI) + .type GL_PREFIX(TexBumpParameterivATI), @function +GL_PREFIX(TexBumpParameterivATI): +#if defined(GLX_USE_TLS) + call _x86_64_get_dispatch@PLT + movq 5768(%rax), %r11 + jmp *%r11 +#elif defined(PTHREADS) + pushq %rdi + pushq %rsi + pushq %rbp + call _x86_64_get_dispatch@PLT + popq %rbp + popq %rsi + popq %rdi + movq 5768(%rax), %r11 + jmp *%r11 +#else + movq _glapi_Dispatch(%rip), %rax + testq %rax, %rax + je 1f + movq 5768(%rax), %r11 + jmp *%r11 +1: + pushq %rdi + pushq %rsi + pushq %rbp + call _glapi_get_dispatch + popq %rbp + popq %rsi + popq %rdi + movq 5768(%rax), %r11 + jmp *%r11 +#endif /* defined(GLX_USE_TLS) */ + .size GL_PREFIX(TexBumpParameterivATI), .-GL_PREFIX(TexBumpParameterivATI) + + .p2align 4,,15 .globl GL_PREFIX(AlphaFragmentOp1ATI) .type GL_PREFIX(AlphaFragmentOp1ATI), @function GL_PREFIX(AlphaFragmentOp1ATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5744(%rax), %r11 + movq 5776(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27068,13 +27216,13 @@ GL_PREFIX(AlphaFragmentOp1ATI): popq %rdx popq %rsi popq %rdi - movq 5744(%rax), %r11 + movq 5776(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5744(%rax), %r11 + movq 5776(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27092,7 +27240,7 @@ GL_PREFIX(AlphaFragmentOp1ATI): popq %rdx popq %rsi popq %rdi - movq 5744(%rax), %r11 + movq 5776(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(AlphaFragmentOp1ATI), .-GL_PREFIX(AlphaFragmentOp1ATI) @@ -27103,7 +27251,7 @@ GL_PREFIX(AlphaFragmentOp1ATI): GL_PREFIX(AlphaFragmentOp2ATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5752(%rax), %r11 + movq 5784(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27121,13 +27269,13 @@ GL_PREFIX(AlphaFragmentOp2ATI): popq %rdx popq %rsi popq %rdi - movq 5752(%rax), %r11 + movq 5784(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5752(%rax), %r11 + movq 5784(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27145,7 +27293,7 @@ GL_PREFIX(AlphaFragmentOp2ATI): popq %rdx popq %rsi popq %rdi - movq 5752(%rax), %r11 + movq 5784(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(AlphaFragmentOp2ATI), .-GL_PREFIX(AlphaFragmentOp2ATI) @@ -27156,7 +27304,7 @@ GL_PREFIX(AlphaFragmentOp2ATI): GL_PREFIX(AlphaFragmentOp3ATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5760(%rax), %r11 + movq 5792(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27174,13 +27322,13 @@ GL_PREFIX(AlphaFragmentOp3ATI): popq %rdx popq %rsi popq %rdi - movq 5760(%rax), %r11 + movq 5792(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5760(%rax), %r11 + movq 5792(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27198,7 +27346,7 @@ GL_PREFIX(AlphaFragmentOp3ATI): popq %rdx popq %rsi popq %rdi - movq 5760(%rax), %r11 + movq 5792(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(AlphaFragmentOp3ATI), .-GL_PREFIX(AlphaFragmentOp3ATI) @@ -27209,25 +27357,25 @@ GL_PREFIX(AlphaFragmentOp3ATI): GL_PREFIX(BeginFragmentShaderATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5768(%rax), %r11 + movq 5800(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rbp call _x86_64_get_dispatch@PLT popq %rbp - movq 5768(%rax), %r11 + movq 5800(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5768(%rax), %r11 + movq 5800(%rax), %r11 jmp *%r11 1: pushq %rbp call _glapi_get_dispatch popq %rbp - movq 5768(%rax), %r11 + movq 5800(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(BeginFragmentShaderATI), .-GL_PREFIX(BeginFragmentShaderATI) @@ -27238,25 +27386,25 @@ GL_PREFIX(BeginFragmentShaderATI): GL_PREFIX(BindFragmentShaderATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5776(%rax), %r11 + movq 5808(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi call _x86_64_get_dispatch@PLT popq %rdi - movq 5776(%rax), %r11 + movq 5808(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5776(%rax), %r11 + movq 5808(%rax), %r11 jmp *%r11 1: pushq %rdi call _glapi_get_dispatch popq %rdi - movq 5776(%rax), %r11 + movq 5808(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(BindFragmentShaderATI), .-GL_PREFIX(BindFragmentShaderATI) @@ -27267,7 +27415,7 @@ GL_PREFIX(BindFragmentShaderATI): GL_PREFIX(ColorFragmentOp1ATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5784(%rax), %r11 + movq 5816(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27285,13 +27433,13 @@ GL_PREFIX(ColorFragmentOp1ATI): popq %rdx popq %rsi popq %rdi - movq 5784(%rax), %r11 + movq 5816(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5784(%rax), %r11 + movq 5816(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27309,7 +27457,7 @@ GL_PREFIX(ColorFragmentOp1ATI): popq %rdx popq %rsi popq %rdi - movq 5784(%rax), %r11 + movq 5816(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(ColorFragmentOp1ATI), .-GL_PREFIX(ColorFragmentOp1ATI) @@ -27320,7 +27468,7 @@ GL_PREFIX(ColorFragmentOp1ATI): GL_PREFIX(ColorFragmentOp2ATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5792(%rax), %r11 + movq 5824(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27338,13 +27486,13 @@ GL_PREFIX(ColorFragmentOp2ATI): popq %rdx popq %rsi popq %rdi - movq 5792(%rax), %r11 + movq 5824(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5792(%rax), %r11 + movq 5824(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27362,7 +27510,7 @@ GL_PREFIX(ColorFragmentOp2ATI): popq %rdx popq %rsi popq %rdi - movq 5792(%rax), %r11 + movq 5824(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(ColorFragmentOp2ATI), .-GL_PREFIX(ColorFragmentOp2ATI) @@ -27373,7 +27521,7 @@ GL_PREFIX(ColorFragmentOp2ATI): GL_PREFIX(ColorFragmentOp3ATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5800(%rax), %r11 + movq 5832(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27391,13 +27539,13 @@ GL_PREFIX(ColorFragmentOp3ATI): popq %rdx popq %rsi popq %rdi - movq 5800(%rax), %r11 + movq 5832(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5800(%rax), %r11 + movq 5832(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27415,7 +27563,7 @@ GL_PREFIX(ColorFragmentOp3ATI): popq %rdx popq %rsi popq %rdi - movq 5800(%rax), %r11 + movq 5832(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(ColorFragmentOp3ATI), .-GL_PREFIX(ColorFragmentOp3ATI) @@ -27426,25 +27574,25 @@ GL_PREFIX(ColorFragmentOp3ATI): GL_PREFIX(DeleteFragmentShaderATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5808(%rax), %r11 + movq 5840(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi call _x86_64_get_dispatch@PLT popq %rdi - movq 5808(%rax), %r11 + movq 5840(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5808(%rax), %r11 + movq 5840(%rax), %r11 jmp *%r11 1: pushq %rdi call _glapi_get_dispatch popq %rdi - movq 5808(%rax), %r11 + movq 5840(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(DeleteFragmentShaderATI), .-GL_PREFIX(DeleteFragmentShaderATI) @@ -27455,25 +27603,25 @@ GL_PREFIX(DeleteFragmentShaderATI): GL_PREFIX(EndFragmentShaderATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5816(%rax), %r11 + movq 5848(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rbp call _x86_64_get_dispatch@PLT popq %rbp - movq 5816(%rax), %r11 + movq 5848(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5816(%rax), %r11 + movq 5848(%rax), %r11 jmp *%r11 1: pushq %rbp call _glapi_get_dispatch popq %rbp - movq 5816(%rax), %r11 + movq 5848(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(EndFragmentShaderATI), .-GL_PREFIX(EndFragmentShaderATI) @@ -27484,25 +27632,25 @@ GL_PREFIX(EndFragmentShaderATI): GL_PREFIX(GenFragmentShadersATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5824(%rax), %r11 + movq 5856(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi call _x86_64_get_dispatch@PLT popq %rdi - movq 5824(%rax), %r11 + movq 5856(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5824(%rax), %r11 + movq 5856(%rax), %r11 jmp *%r11 1: pushq %rdi call _glapi_get_dispatch popq %rdi - movq 5824(%rax), %r11 + movq 5856(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(GenFragmentShadersATI), .-GL_PREFIX(GenFragmentShadersATI) @@ -27513,7 +27661,7 @@ GL_PREFIX(GenFragmentShadersATI): GL_PREFIX(PassTexCoordATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5832(%rax), %r11 + movq 5864(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27523,13 +27671,13 @@ GL_PREFIX(PassTexCoordATI): popq %rdx popq %rsi popq %rdi - movq 5832(%rax), %r11 + movq 5864(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5832(%rax), %r11 + movq 5864(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27539,7 +27687,7 @@ GL_PREFIX(PassTexCoordATI): popq %rdx popq %rsi popq %rdi - movq 5832(%rax), %r11 + movq 5864(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(PassTexCoordATI), .-GL_PREFIX(PassTexCoordATI) @@ -27550,7 +27698,7 @@ GL_PREFIX(PassTexCoordATI): GL_PREFIX(SampleMapATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5840(%rax), %r11 + movq 5872(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27560,13 +27708,13 @@ GL_PREFIX(SampleMapATI): popq %rdx popq %rsi popq %rdi - movq 5840(%rax), %r11 + movq 5872(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5840(%rax), %r11 + movq 5872(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27576,7 +27724,7 @@ GL_PREFIX(SampleMapATI): popq %rdx popq %rsi popq %rdi - movq 5840(%rax), %r11 + movq 5872(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(SampleMapATI), .-GL_PREFIX(SampleMapATI) @@ -27587,7 +27735,7 @@ GL_PREFIX(SampleMapATI): GL_PREFIX(SetFragmentShaderConstantATI): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5848(%rax), %r11 + movq 5880(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27597,13 +27745,13 @@ GL_PREFIX(SetFragmentShaderConstantATI): popq %rbp popq %rsi popq %rdi - movq 5848(%rax), %r11 + movq 5880(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5848(%rax), %r11 + movq 5880(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27613,7 +27761,7 @@ GL_PREFIX(SetFragmentShaderConstantATI): popq %rbp popq %rsi popq %rdi - movq 5848(%rax), %r11 + movq 5880(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(SetFragmentShaderConstantATI), .-GL_PREFIX(SetFragmentShaderConstantATI) @@ -27624,7 +27772,7 @@ GL_PREFIX(SetFragmentShaderConstantATI): GL_PREFIX(PointParameteriNV): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5856(%rax), %r11 + movq 5888(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27634,13 +27782,13 @@ GL_PREFIX(PointParameteriNV): popq %rbp popq %rsi popq %rdi - movq 5856(%rax), %r11 + movq 5888(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5856(%rax), %r11 + movq 5888(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27650,7 +27798,7 @@ GL_PREFIX(PointParameteriNV): popq %rbp popq %rsi popq %rdi - movq 5856(%rax), %r11 + movq 5888(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(PointParameteriNV), .-GL_PREFIX(PointParameteriNV) @@ -27661,7 +27809,7 @@ GL_PREFIX(PointParameteriNV): GL_PREFIX(PointParameterivNV): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5864(%rax), %r11 + movq 5896(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27671,13 +27819,13 @@ GL_PREFIX(PointParameterivNV): popq %rbp popq %rsi popq %rdi - movq 5864(%rax), %r11 + movq 5896(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5864(%rax), %r11 + movq 5896(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27687,79 +27835,79 @@ GL_PREFIX(PointParameterivNV): popq %rbp popq %rsi popq %rdi - movq 5864(%rax), %r11 + movq 5896(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(PointParameterivNV), .-GL_PREFIX(PointParameterivNV) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_734) - .type GL_PREFIX(_dispatch_stub_734), @function - HIDDEN(GL_PREFIX(_dispatch_stub_734)) -GL_PREFIX(_dispatch_stub_734): + .globl GL_PREFIX(_dispatch_stub_738) + .type GL_PREFIX(_dispatch_stub_738), @function + HIDDEN(GL_PREFIX(_dispatch_stub_738)) +GL_PREFIX(_dispatch_stub_738): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5872(%rax), %r11 + movq 5904(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi call _x86_64_get_dispatch@PLT popq %rdi - movq 5872(%rax), %r11 + movq 5904(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5872(%rax), %r11 + movq 5904(%rax), %r11 jmp *%r11 1: pushq %rdi call _glapi_get_dispatch popq %rdi - movq 5872(%rax), %r11 + movq 5904(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_734), .-GL_PREFIX(_dispatch_stub_734) + .size GL_PREFIX(_dispatch_stub_738), .-GL_PREFIX(_dispatch_stub_738) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_735) - .type GL_PREFIX(_dispatch_stub_735), @function - HIDDEN(GL_PREFIX(_dispatch_stub_735)) -GL_PREFIX(_dispatch_stub_735): + .globl GL_PREFIX(_dispatch_stub_739) + .type GL_PREFIX(_dispatch_stub_739), @function + HIDDEN(GL_PREFIX(_dispatch_stub_739)) +GL_PREFIX(_dispatch_stub_739): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5880(%rax), %r11 + movq 5912(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi call _x86_64_get_dispatch@PLT popq %rdi - movq 5880(%rax), %r11 + movq 5912(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5880(%rax), %r11 + movq 5912(%rax), %r11 jmp *%r11 1: pushq %rdi call _glapi_get_dispatch popq %rdi - movq 5880(%rax), %r11 + movq 5912(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_735), .-GL_PREFIX(_dispatch_stub_735) + .size GL_PREFIX(_dispatch_stub_739), .-GL_PREFIX(_dispatch_stub_739) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_736) - .type GL_PREFIX(_dispatch_stub_736), @function - HIDDEN(GL_PREFIX(_dispatch_stub_736)) -GL_PREFIX(_dispatch_stub_736): + .globl GL_PREFIX(_dispatch_stub_740) + .type GL_PREFIX(_dispatch_stub_740), @function + HIDDEN(GL_PREFIX(_dispatch_stub_740)) +GL_PREFIX(_dispatch_stub_740): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5888(%rax), %r11 + movq 5920(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27769,13 +27917,13 @@ GL_PREFIX(_dispatch_stub_736): popq %rbp popq %rsi popq %rdi - movq 5888(%rax), %r11 + movq 5920(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5888(%rax), %r11 + movq 5920(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27785,19 +27933,19 @@ GL_PREFIX(_dispatch_stub_736): popq %rbp popq %rsi popq %rdi - movq 5888(%rax), %r11 + movq 5920(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_736), .-GL_PREFIX(_dispatch_stub_736) + .size GL_PREFIX(_dispatch_stub_740), .-GL_PREFIX(_dispatch_stub_740) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_737) - .type GL_PREFIX(_dispatch_stub_737), @function - HIDDEN(GL_PREFIX(_dispatch_stub_737)) -GL_PREFIX(_dispatch_stub_737): + .globl GL_PREFIX(_dispatch_stub_741) + .type GL_PREFIX(_dispatch_stub_741), @function + HIDDEN(GL_PREFIX(_dispatch_stub_741)) +GL_PREFIX(_dispatch_stub_741): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5896(%rax), %r11 + movq 5928(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27807,13 +27955,13 @@ GL_PREFIX(_dispatch_stub_737): popq %rbp popq %rsi popq %rdi - movq 5896(%rax), %r11 + movq 5928(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5896(%rax), %r11 + movq 5928(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27823,40 +27971,40 @@ GL_PREFIX(_dispatch_stub_737): popq %rbp popq %rsi popq %rdi - movq 5896(%rax), %r11 + movq 5928(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_737), .-GL_PREFIX(_dispatch_stub_737) + .size GL_PREFIX(_dispatch_stub_741), .-GL_PREFIX(_dispatch_stub_741) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_738) - .type GL_PREFIX(_dispatch_stub_738), @function - HIDDEN(GL_PREFIX(_dispatch_stub_738)) -GL_PREFIX(_dispatch_stub_738): + .globl GL_PREFIX(_dispatch_stub_742) + .type GL_PREFIX(_dispatch_stub_742), @function + HIDDEN(GL_PREFIX(_dispatch_stub_742)) +GL_PREFIX(_dispatch_stub_742): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5904(%rax), %r11 + movq 5936(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi call _x86_64_get_dispatch@PLT popq %rdi - movq 5904(%rax), %r11 + movq 5936(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5904(%rax), %r11 + movq 5936(%rax), %r11 jmp *%r11 1: pushq %rdi call _glapi_get_dispatch popq %rdi - movq 5904(%rax), %r11 + movq 5936(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_738), .-GL_PREFIX(_dispatch_stub_738) + .size GL_PREFIX(_dispatch_stub_742), .-GL_PREFIX(_dispatch_stub_742) .p2align 4,,15 .globl GL_PREFIX(GetProgramNamedParameterdvNV) @@ -27864,7 +28012,7 @@ GL_PREFIX(_dispatch_stub_738): GL_PREFIX(GetProgramNamedParameterdvNV): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5912(%rax), %r11 + movq 5944(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27878,13 +28026,13 @@ GL_PREFIX(GetProgramNamedParameterdvNV): popq %rdx popq %rsi popq %rdi - movq 5912(%rax), %r11 + movq 5944(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5912(%rax), %r11 + movq 5944(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27898,7 +28046,7 @@ GL_PREFIX(GetProgramNamedParameterdvNV): popq %rdx popq %rsi popq %rdi - movq 5912(%rax), %r11 + movq 5944(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(GetProgramNamedParameterdvNV), .-GL_PREFIX(GetProgramNamedParameterdvNV) @@ -27909,7 +28057,7 @@ GL_PREFIX(GetProgramNamedParameterdvNV): GL_PREFIX(GetProgramNamedParameterfvNV): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5920(%rax), %r11 + movq 5952(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -27923,13 +28071,13 @@ GL_PREFIX(GetProgramNamedParameterfvNV): popq %rdx popq %rsi popq %rdi - movq 5920(%rax), %r11 + movq 5952(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5920(%rax), %r11 + movq 5952(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -27943,7 +28091,7 @@ GL_PREFIX(GetProgramNamedParameterfvNV): popq %rdx popq %rsi popq %rdi - movq 5920(%rax), %r11 + movq 5952(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(GetProgramNamedParameterfvNV), .-GL_PREFIX(GetProgramNamedParameterfvNV) @@ -27954,7 +28102,7 @@ GL_PREFIX(GetProgramNamedParameterfvNV): GL_PREFIX(ProgramNamedParameter4dNV): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5928(%rax), %r11 + movq 5960(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) subq $56, %rsp @@ -27974,13 +28122,13 @@ GL_PREFIX(ProgramNamedParameter4dNV): movq 8(%rsp), %rsi movq (%rsp), %rdi addq $56, %rsp - movq 5928(%rax), %r11 + movq 5960(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5928(%rax), %r11 + movq 5960(%rax), %r11 jmp *%r11 1: subq $56, %rsp @@ -28000,7 +28148,7 @@ GL_PREFIX(ProgramNamedParameter4dNV): movq 8(%rsp), %rsi movq (%rsp), %rdi addq $56, %rsp - movq 5928(%rax), %r11 + movq 5960(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(ProgramNamedParameter4dNV), .-GL_PREFIX(ProgramNamedParameter4dNV) @@ -28011,7 +28159,7 @@ GL_PREFIX(ProgramNamedParameter4dNV): GL_PREFIX(ProgramNamedParameter4dvNV): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5936(%rax), %r11 + movq 5968(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28025,13 +28173,13 @@ GL_PREFIX(ProgramNamedParameter4dvNV): popq %rdx popq %rsi popq %rdi - movq 5936(%rax), %r11 + movq 5968(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5936(%rax), %r11 + movq 5968(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28045,7 +28193,7 @@ GL_PREFIX(ProgramNamedParameter4dvNV): popq %rdx popq %rsi popq %rdi - movq 5936(%rax), %r11 + movq 5968(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(ProgramNamedParameter4dvNV), .-GL_PREFIX(ProgramNamedParameter4dvNV) @@ -28056,7 +28204,7 @@ GL_PREFIX(ProgramNamedParameter4dvNV): GL_PREFIX(ProgramNamedParameter4fNV): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5944(%rax), %r11 + movq 5976(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) subq $56, %rsp @@ -28076,13 +28224,13 @@ GL_PREFIX(ProgramNamedParameter4fNV): movq 8(%rsp), %rsi movq (%rsp), %rdi addq $56, %rsp - movq 5944(%rax), %r11 + movq 5976(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5944(%rax), %r11 + movq 5976(%rax), %r11 jmp *%r11 1: subq $56, %rsp @@ -28102,7 +28250,7 @@ GL_PREFIX(ProgramNamedParameter4fNV): movq 8(%rsp), %rsi movq (%rsp), %rdi addq $56, %rsp - movq 5944(%rax), %r11 + movq 5976(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(ProgramNamedParameter4fNV), .-GL_PREFIX(ProgramNamedParameter4fNV) @@ -28113,7 +28261,7 @@ GL_PREFIX(ProgramNamedParameter4fNV): GL_PREFIX(ProgramNamedParameter4fvNV): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5952(%rax), %r11 + movq 5984(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28127,13 +28275,13 @@ GL_PREFIX(ProgramNamedParameter4fvNV): popq %rdx popq %rsi popq %rdi - movq 5952(%rax), %r11 + movq 5984(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5952(%rax), %r11 + movq 5984(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28147,19 +28295,19 @@ GL_PREFIX(ProgramNamedParameter4fvNV): popq %rdx popq %rsi popq %rdi - movq 5952(%rax), %r11 + movq 5984(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(ProgramNamedParameter4fvNV), .-GL_PREFIX(ProgramNamedParameter4fvNV) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_745) - .type GL_PREFIX(_dispatch_stub_745), @function - HIDDEN(GL_PREFIX(_dispatch_stub_745)) -GL_PREFIX(_dispatch_stub_745): + .globl GL_PREFIX(_dispatch_stub_749) + .type GL_PREFIX(_dispatch_stub_749), @function + HIDDEN(GL_PREFIX(_dispatch_stub_749)) +GL_PREFIX(_dispatch_stub_749): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5960(%rax), %r11 + movq 5992(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28169,13 +28317,13 @@ GL_PREFIX(_dispatch_stub_745): popq %rbp popq %rsi popq %rdi - movq 5960(%rax), %r11 + movq 5992(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5960(%rax), %r11 + movq 5992(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28185,19 +28333,19 @@ GL_PREFIX(_dispatch_stub_745): popq %rbp popq %rsi popq %rdi - movq 5960(%rax), %r11 + movq 5992(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_745), .-GL_PREFIX(_dispatch_stub_745) + .size GL_PREFIX(_dispatch_stub_749), .-GL_PREFIX(_dispatch_stub_749) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_746) - .type GL_PREFIX(_dispatch_stub_746), @function - HIDDEN(GL_PREFIX(_dispatch_stub_746)) -GL_PREFIX(_dispatch_stub_746): + .globl GL_PREFIX(_dispatch_stub_750) + .type GL_PREFIX(_dispatch_stub_750), @function + HIDDEN(GL_PREFIX(_dispatch_stub_750)) +GL_PREFIX(_dispatch_stub_750): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5968(%rax), %r11 + movq 6000(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28207,13 +28355,13 @@ GL_PREFIX(_dispatch_stub_746): popq %rbp popq %rsi popq %rdi - movq 5968(%rax), %r11 + movq 6000(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5968(%rax), %r11 + movq 6000(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28223,10 +28371,10 @@ GL_PREFIX(_dispatch_stub_746): popq %rbp popq %rsi popq %rdi - movq 5968(%rax), %r11 + movq 6000(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_746), .-GL_PREFIX(_dispatch_stub_746) + .size GL_PREFIX(_dispatch_stub_750), .-GL_PREFIX(_dispatch_stub_750) .p2align 4,,15 .globl GL_PREFIX(BindFramebufferEXT) @@ -28234,7 +28382,7 @@ GL_PREFIX(_dispatch_stub_746): GL_PREFIX(BindFramebufferEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5976(%rax), %r11 + movq 6008(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28244,13 +28392,13 @@ GL_PREFIX(BindFramebufferEXT): popq %rbp popq %rsi popq %rdi - movq 5976(%rax), %r11 + movq 6008(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5976(%rax), %r11 + movq 6008(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28260,7 +28408,7 @@ GL_PREFIX(BindFramebufferEXT): popq %rbp popq %rsi popq %rdi - movq 5976(%rax), %r11 + movq 6008(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(BindFramebufferEXT), .-GL_PREFIX(BindFramebufferEXT) @@ -28271,7 +28419,7 @@ GL_PREFIX(BindFramebufferEXT): GL_PREFIX(BindRenderbufferEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5984(%rax), %r11 + movq 6016(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28281,13 +28429,13 @@ GL_PREFIX(BindRenderbufferEXT): popq %rbp popq %rsi popq %rdi - movq 5984(%rax), %r11 + movq 6016(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5984(%rax), %r11 + movq 6016(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28297,7 +28445,7 @@ GL_PREFIX(BindRenderbufferEXT): popq %rbp popq %rsi popq %rdi - movq 5984(%rax), %r11 + movq 6016(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(BindRenderbufferEXT), .-GL_PREFIX(BindRenderbufferEXT) @@ -28308,25 +28456,25 @@ GL_PREFIX(BindRenderbufferEXT): GL_PREFIX(CheckFramebufferStatusEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 5992(%rax), %r11 + movq 6024(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi call _x86_64_get_dispatch@PLT popq %rdi - movq 5992(%rax), %r11 + movq 6024(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 5992(%rax), %r11 + movq 6024(%rax), %r11 jmp *%r11 1: pushq %rdi call _glapi_get_dispatch popq %rdi - movq 5992(%rax), %r11 + movq 6024(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(CheckFramebufferStatusEXT), .-GL_PREFIX(CheckFramebufferStatusEXT) @@ -28337,7 +28485,7 @@ GL_PREFIX(CheckFramebufferStatusEXT): GL_PREFIX(DeleteFramebuffersEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6000(%rax), %r11 + movq 6032(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28347,13 +28495,13 @@ GL_PREFIX(DeleteFramebuffersEXT): popq %rbp popq %rsi popq %rdi - movq 6000(%rax), %r11 + movq 6032(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6000(%rax), %r11 + movq 6032(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28363,7 +28511,7 @@ GL_PREFIX(DeleteFramebuffersEXT): popq %rbp popq %rsi popq %rdi - movq 6000(%rax), %r11 + movq 6032(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(DeleteFramebuffersEXT), .-GL_PREFIX(DeleteFramebuffersEXT) @@ -28374,7 +28522,7 @@ GL_PREFIX(DeleteFramebuffersEXT): GL_PREFIX(DeleteRenderbuffersEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6008(%rax), %r11 + movq 6040(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28384,13 +28532,13 @@ GL_PREFIX(DeleteRenderbuffersEXT): popq %rbp popq %rsi popq %rdi - movq 6008(%rax), %r11 + movq 6040(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6008(%rax), %r11 + movq 6040(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28400,7 +28548,7 @@ GL_PREFIX(DeleteRenderbuffersEXT): popq %rbp popq %rsi popq %rdi - movq 6008(%rax), %r11 + movq 6040(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(DeleteRenderbuffersEXT), .-GL_PREFIX(DeleteRenderbuffersEXT) @@ -28411,7 +28559,7 @@ GL_PREFIX(DeleteRenderbuffersEXT): GL_PREFIX(FramebufferRenderbufferEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6016(%rax), %r11 + movq 6048(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28425,13 +28573,13 @@ GL_PREFIX(FramebufferRenderbufferEXT): popq %rdx popq %rsi popq %rdi - movq 6016(%rax), %r11 + movq 6048(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6016(%rax), %r11 + movq 6048(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28445,7 +28593,7 @@ GL_PREFIX(FramebufferRenderbufferEXT): popq %rdx popq %rsi popq %rdi - movq 6016(%rax), %r11 + movq 6048(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(FramebufferRenderbufferEXT), .-GL_PREFIX(FramebufferRenderbufferEXT) @@ -28456,7 +28604,7 @@ GL_PREFIX(FramebufferRenderbufferEXT): GL_PREFIX(FramebufferTexture1DEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6024(%rax), %r11 + movq 6056(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28470,13 +28618,13 @@ GL_PREFIX(FramebufferTexture1DEXT): popq %rdx popq %rsi popq %rdi - movq 6024(%rax), %r11 + movq 6056(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6024(%rax), %r11 + movq 6056(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28490,7 +28638,7 @@ GL_PREFIX(FramebufferTexture1DEXT): popq %rdx popq %rsi popq %rdi - movq 6024(%rax), %r11 + movq 6056(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(FramebufferTexture1DEXT), .-GL_PREFIX(FramebufferTexture1DEXT) @@ -28501,7 +28649,7 @@ GL_PREFIX(FramebufferTexture1DEXT): GL_PREFIX(FramebufferTexture2DEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6032(%rax), %r11 + movq 6064(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28515,13 +28663,13 @@ GL_PREFIX(FramebufferTexture2DEXT): popq %rdx popq %rsi popq %rdi - movq 6032(%rax), %r11 + movq 6064(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6032(%rax), %r11 + movq 6064(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28535,7 +28683,7 @@ GL_PREFIX(FramebufferTexture2DEXT): popq %rdx popq %rsi popq %rdi - movq 6032(%rax), %r11 + movq 6064(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(FramebufferTexture2DEXT), .-GL_PREFIX(FramebufferTexture2DEXT) @@ -28546,7 +28694,7 @@ GL_PREFIX(FramebufferTexture2DEXT): GL_PREFIX(FramebufferTexture3DEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6040(%rax), %r11 + movq 6072(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28564,13 +28712,13 @@ GL_PREFIX(FramebufferTexture3DEXT): popq %rdx popq %rsi popq %rdi - movq 6040(%rax), %r11 + movq 6072(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6040(%rax), %r11 + movq 6072(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28588,7 +28736,7 @@ GL_PREFIX(FramebufferTexture3DEXT): popq %rdx popq %rsi popq %rdi - movq 6040(%rax), %r11 + movq 6072(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(FramebufferTexture3DEXT), .-GL_PREFIX(FramebufferTexture3DEXT) @@ -28599,7 +28747,7 @@ GL_PREFIX(FramebufferTexture3DEXT): GL_PREFIX(GenFramebuffersEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6048(%rax), %r11 + movq 6080(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28609,13 +28757,13 @@ GL_PREFIX(GenFramebuffersEXT): popq %rbp popq %rsi popq %rdi - movq 6048(%rax), %r11 + movq 6080(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6048(%rax), %r11 + movq 6080(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28625,7 +28773,7 @@ GL_PREFIX(GenFramebuffersEXT): popq %rbp popq %rsi popq %rdi - movq 6048(%rax), %r11 + movq 6080(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(GenFramebuffersEXT), .-GL_PREFIX(GenFramebuffersEXT) @@ -28636,7 +28784,7 @@ GL_PREFIX(GenFramebuffersEXT): GL_PREFIX(GenRenderbuffersEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6056(%rax), %r11 + movq 6088(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28646,13 +28794,13 @@ GL_PREFIX(GenRenderbuffersEXT): popq %rbp popq %rsi popq %rdi - movq 6056(%rax), %r11 + movq 6088(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6056(%rax), %r11 + movq 6088(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28662,7 +28810,7 @@ GL_PREFIX(GenRenderbuffersEXT): popq %rbp popq %rsi popq %rdi - movq 6056(%rax), %r11 + movq 6088(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(GenRenderbuffersEXT), .-GL_PREFIX(GenRenderbuffersEXT) @@ -28673,25 +28821,25 @@ GL_PREFIX(GenRenderbuffersEXT): GL_PREFIX(GenerateMipmapEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6064(%rax), %r11 + movq 6096(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi call _x86_64_get_dispatch@PLT popq %rdi - movq 6064(%rax), %r11 + movq 6096(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6064(%rax), %r11 + movq 6096(%rax), %r11 jmp *%r11 1: pushq %rdi call _glapi_get_dispatch popq %rdi - movq 6064(%rax), %r11 + movq 6096(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(GenerateMipmapEXT), .-GL_PREFIX(GenerateMipmapEXT) @@ -28702,7 +28850,7 @@ GL_PREFIX(GenerateMipmapEXT): GL_PREFIX(GetFramebufferAttachmentParameterivEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6072(%rax), %r11 + movq 6104(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28716,13 +28864,13 @@ GL_PREFIX(GetFramebufferAttachmentParameterivEXT): popq %rdx popq %rsi popq %rdi - movq 6072(%rax), %r11 + movq 6104(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6072(%rax), %r11 + movq 6104(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28736,7 +28884,7 @@ GL_PREFIX(GetFramebufferAttachmentParameterivEXT): popq %rdx popq %rsi popq %rdi - movq 6072(%rax), %r11 + movq 6104(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(GetFramebufferAttachmentParameterivEXT), .-GL_PREFIX(GetFramebufferAttachmentParameterivEXT) @@ -28747,7 +28895,7 @@ GL_PREFIX(GetFramebufferAttachmentParameterivEXT): GL_PREFIX(GetRenderbufferParameterivEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6080(%rax), %r11 + movq 6112(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28757,13 +28905,13 @@ GL_PREFIX(GetRenderbufferParameterivEXT): popq %rdx popq %rsi popq %rdi - movq 6080(%rax), %r11 + movq 6112(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6080(%rax), %r11 + movq 6112(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28773,7 +28921,7 @@ GL_PREFIX(GetRenderbufferParameterivEXT): popq %rdx popq %rsi popq %rdi - movq 6080(%rax), %r11 + movq 6112(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(GetRenderbufferParameterivEXT), .-GL_PREFIX(GetRenderbufferParameterivEXT) @@ -28784,25 +28932,25 @@ GL_PREFIX(GetRenderbufferParameterivEXT): GL_PREFIX(IsFramebufferEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6088(%rax), %r11 + movq 6120(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi call _x86_64_get_dispatch@PLT popq %rdi - movq 6088(%rax), %r11 + movq 6120(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6088(%rax), %r11 + movq 6120(%rax), %r11 jmp *%r11 1: pushq %rdi call _glapi_get_dispatch popq %rdi - movq 6088(%rax), %r11 + movq 6120(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(IsFramebufferEXT), .-GL_PREFIX(IsFramebufferEXT) @@ -28813,25 +28961,25 @@ GL_PREFIX(IsFramebufferEXT): GL_PREFIX(IsRenderbufferEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6096(%rax), %r11 + movq 6128(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi call _x86_64_get_dispatch@PLT popq %rdi - movq 6096(%rax), %r11 + movq 6128(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6096(%rax), %r11 + movq 6128(%rax), %r11 jmp *%r11 1: pushq %rdi call _glapi_get_dispatch popq %rdi - movq 6096(%rax), %r11 + movq 6128(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(IsRenderbufferEXT), .-GL_PREFIX(IsRenderbufferEXT) @@ -28842,7 +28990,7 @@ GL_PREFIX(IsRenderbufferEXT): GL_PREFIX(RenderbufferStorageEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6104(%rax), %r11 + movq 6136(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28856,13 +29004,13 @@ GL_PREFIX(RenderbufferStorageEXT): popq %rdx popq %rsi popq %rdi - movq 6104(%rax), %r11 + movq 6136(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6104(%rax), %r11 + movq 6136(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28876,19 +29024,19 @@ GL_PREFIX(RenderbufferStorageEXT): popq %rdx popq %rsi popq %rdi - movq 6104(%rax), %r11 + movq 6136(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(RenderbufferStorageEXT), .-GL_PREFIX(RenderbufferStorageEXT) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_764) - .type GL_PREFIX(_dispatch_stub_764), @function - HIDDEN(GL_PREFIX(_dispatch_stub_764)) -GL_PREFIX(_dispatch_stub_764): + .globl GL_PREFIX(_dispatch_stub_768) + .type GL_PREFIX(_dispatch_stub_768), @function + HIDDEN(GL_PREFIX(_dispatch_stub_768)) +GL_PREFIX(_dispatch_stub_768): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6112(%rax), %r11 + movq 6144(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28906,13 +29054,13 @@ GL_PREFIX(_dispatch_stub_764): popq %rdx popq %rsi popq %rdi - movq 6112(%rax), %r11 + movq 6144(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6112(%rax), %r11 + movq 6144(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28930,10 +29078,10 @@ GL_PREFIX(_dispatch_stub_764): popq %rdx popq %rsi popq %rdi - movq 6112(%rax), %r11 + movq 6144(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_764), .-GL_PREFIX(_dispatch_stub_764) + .size GL_PREFIX(_dispatch_stub_768), .-GL_PREFIX(_dispatch_stub_768) .p2align 4,,15 .globl GL_PREFIX(FramebufferTextureLayerEXT) @@ -28941,7 +29089,7 @@ GL_PREFIX(_dispatch_stub_764): GL_PREFIX(FramebufferTextureLayerEXT): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6120(%rax), %r11 + movq 6152(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -28955,13 +29103,13 @@ GL_PREFIX(FramebufferTextureLayerEXT): popq %rdx popq %rsi popq %rdi - movq 6120(%rax), %r11 + movq 6152(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6120(%rax), %r11 + movq 6152(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -28975,19 +29123,19 @@ GL_PREFIX(FramebufferTextureLayerEXT): popq %rdx popq %rsi popq %rdi - movq 6120(%rax), %r11 + movq 6152(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ .size GL_PREFIX(FramebufferTextureLayerEXT), .-GL_PREFIX(FramebufferTextureLayerEXT) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_766) - .type GL_PREFIX(_dispatch_stub_766), @function - HIDDEN(GL_PREFIX(_dispatch_stub_766)) -GL_PREFIX(_dispatch_stub_766): + .globl GL_PREFIX(_dispatch_stub_770) + .type GL_PREFIX(_dispatch_stub_770), @function + HIDDEN(GL_PREFIX(_dispatch_stub_770)) +GL_PREFIX(_dispatch_stub_770): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6128(%rax), %r11 + movq 6160(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -29001,13 +29149,13 @@ GL_PREFIX(_dispatch_stub_766): popq %rdx popq %rsi popq %rdi - movq 6128(%rax), %r11 + movq 6160(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6128(%rax), %r11 + movq 6160(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -29021,19 +29169,19 @@ GL_PREFIX(_dispatch_stub_766): popq %rdx popq %rsi popq %rdi - movq 6128(%rax), %r11 + movq 6160(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_766), .-GL_PREFIX(_dispatch_stub_766) + .size GL_PREFIX(_dispatch_stub_770), .-GL_PREFIX(_dispatch_stub_770) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_767) - .type GL_PREFIX(_dispatch_stub_767), @function - HIDDEN(GL_PREFIX(_dispatch_stub_767)) -GL_PREFIX(_dispatch_stub_767): + .globl GL_PREFIX(_dispatch_stub_771) + .type GL_PREFIX(_dispatch_stub_771), @function + HIDDEN(GL_PREFIX(_dispatch_stub_771)) +GL_PREFIX(_dispatch_stub_771): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6136(%rax), %r11 + movq 6168(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -29047,13 +29195,13 @@ GL_PREFIX(_dispatch_stub_767): popq %rdx popq %rsi popq %rdi - movq 6136(%rax), %r11 + movq 6168(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6136(%rax), %r11 + movq 6168(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -29067,19 +29215,19 @@ GL_PREFIX(_dispatch_stub_767): popq %rdx popq %rsi popq %rdi - movq 6136(%rax), %r11 + movq 6168(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_767), .-GL_PREFIX(_dispatch_stub_767) + .size GL_PREFIX(_dispatch_stub_771), .-GL_PREFIX(_dispatch_stub_771) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_768) - .type GL_PREFIX(_dispatch_stub_768), @function - HIDDEN(GL_PREFIX(_dispatch_stub_768)) -GL_PREFIX(_dispatch_stub_768): + .globl GL_PREFIX(_dispatch_stub_772) + .type GL_PREFIX(_dispatch_stub_772), @function + HIDDEN(GL_PREFIX(_dispatch_stub_772)) +GL_PREFIX(_dispatch_stub_772): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6144(%rax), %r11 + movq 6176(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -29093,13 +29241,13 @@ GL_PREFIX(_dispatch_stub_768): popq %rdx popq %rsi popq %rdi - movq 6144(%rax), %r11 + movq 6176(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6144(%rax), %r11 + movq 6176(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -29113,19 +29261,19 @@ GL_PREFIX(_dispatch_stub_768): popq %rdx popq %rsi popq %rdi - movq 6144(%rax), %r11 + movq 6176(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_768), .-GL_PREFIX(_dispatch_stub_768) + .size GL_PREFIX(_dispatch_stub_772), .-GL_PREFIX(_dispatch_stub_772) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_769) - .type GL_PREFIX(_dispatch_stub_769), @function - HIDDEN(GL_PREFIX(_dispatch_stub_769)) -GL_PREFIX(_dispatch_stub_769): + .globl GL_PREFIX(_dispatch_stub_773) + .type GL_PREFIX(_dispatch_stub_773), @function + HIDDEN(GL_PREFIX(_dispatch_stub_773)) +GL_PREFIX(_dispatch_stub_773): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6152(%rax), %r11 + movq 6184(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -29135,13 +29283,13 @@ GL_PREFIX(_dispatch_stub_769): popq %rdx popq %rsi popq %rdi - movq 6152(%rax), %r11 + movq 6184(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6152(%rax), %r11 + movq 6184(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -29151,19 +29299,19 @@ GL_PREFIX(_dispatch_stub_769): popq %rdx popq %rsi popq %rdi - movq 6152(%rax), %r11 + movq 6184(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_769), .-GL_PREFIX(_dispatch_stub_769) + .size GL_PREFIX(_dispatch_stub_773), .-GL_PREFIX(_dispatch_stub_773) .p2align 4,,15 - .globl GL_PREFIX(_dispatch_stub_770) - .type GL_PREFIX(_dispatch_stub_770), @function - HIDDEN(GL_PREFIX(_dispatch_stub_770)) -GL_PREFIX(_dispatch_stub_770): + .globl GL_PREFIX(_dispatch_stub_774) + .type GL_PREFIX(_dispatch_stub_774), @function + HIDDEN(GL_PREFIX(_dispatch_stub_774)) +GL_PREFIX(_dispatch_stub_774): #if defined(GLX_USE_TLS) call _x86_64_get_dispatch@PLT - movq 6160(%rax), %r11 + movq 6192(%rax), %r11 jmp *%r11 #elif defined(PTHREADS) pushq %rdi @@ -29173,13 +29321,13 @@ GL_PREFIX(_dispatch_stub_770): popq %rdx popq %rsi popq %rdi - movq 6160(%rax), %r11 + movq 6192(%rax), %r11 jmp *%r11 #else movq _glapi_Dispatch(%rip), %rax testq %rax, %rax je 1f - movq 6160(%rax), %r11 + movq 6192(%rax), %r11 jmp *%r11 1: pushq %rdi @@ -29189,10 +29337,10 @@ GL_PREFIX(_dispatch_stub_770): popq %rdx popq %rsi popq %rdi - movq 6160(%rax), %r11 + movq 6192(%rax), %r11 jmp *%r11 #endif /* defined(GLX_USE_TLS) */ - .size GL_PREFIX(_dispatch_stub_770), .-GL_PREFIX(_dispatch_stub_770) + .size GL_PREFIX(_dispatch_stub_774), .-GL_PREFIX(_dispatch_stub_774) .globl GL_PREFIX(ArrayElementEXT) ; .set GL_PREFIX(ArrayElementEXT), GL_PREFIX(ArrayElement) .globl GL_PREFIX(BindTextureEXT) ; .set GL_PREFIX(BindTextureEXT), GL_PREFIX(BindTexture) @@ -29447,7 +29595,7 @@ GL_PREFIX(_dispatch_stub_770): .globl GL_PREFIX(IsProgramARB) ; .set GL_PREFIX(IsProgramARB), GL_PREFIX(IsProgramNV) .globl GL_PREFIX(PointParameteri) ; .set GL_PREFIX(PointParameteri), GL_PREFIX(PointParameteriNV) .globl GL_PREFIX(PointParameteriv) ; .set GL_PREFIX(PointParameteriv), GL_PREFIX(PointParameterivNV) - .globl GL_PREFIX(BlendEquationSeparate) ; .set GL_PREFIX(BlendEquationSeparate), GL_PREFIX(_dispatch_stub_746) + .globl GL_PREFIX(BlendEquationSeparate) ; .set GL_PREFIX(BlendEquationSeparate), GL_PREFIX(_dispatch_stub_750) .globl GL_PREFIX(BindFramebuffer) ; .set GL_PREFIX(BindFramebuffer), GL_PREFIX(BindFramebufferEXT) .globl GL_PREFIX(BindRenderbuffer) ; .set GL_PREFIX(BindRenderbuffer), GL_PREFIX(BindRenderbufferEXT) .globl GL_PREFIX(CheckFramebufferStatus) ; .set GL_PREFIX(CheckFramebufferStatus), GL_PREFIX(CheckFramebufferStatusEXT) @@ -29465,7 +29613,7 @@ GL_PREFIX(_dispatch_stub_770): .globl GL_PREFIX(IsFramebuffer) ; .set GL_PREFIX(IsFramebuffer), GL_PREFIX(IsFramebufferEXT) .globl GL_PREFIX(IsRenderbuffer) ; .set GL_PREFIX(IsRenderbuffer), GL_PREFIX(IsRenderbufferEXT) .globl GL_PREFIX(RenderbufferStorage) ; .set GL_PREFIX(RenderbufferStorage), GL_PREFIX(RenderbufferStorageEXT) - .globl GL_PREFIX(BlitFramebuffer) ; .set GL_PREFIX(BlitFramebuffer), GL_PREFIX(_dispatch_stub_764) + .globl GL_PREFIX(BlitFramebuffer) ; .set GL_PREFIX(BlitFramebuffer), GL_PREFIX(_dispatch_stub_768) .globl GL_PREFIX(FramebufferTextureLayer) ; .set GL_PREFIX(FramebufferTextureLayer), GL_PREFIX(FramebufferTextureLayerEXT) #if defined(GLX_USE_TLS) && defined(__linux__) diff --git a/src/mesa/x86-64/x86-64.c b/src/mesa/x86-64/x86-64.c index 96f8da87f0..ac176ef328 100644 --- a/src/mesa/x86-64/x86-64.c +++ b/src/mesa/x86-64/x86-64.c @@ -35,7 +35,7 @@ #include "math/m_xform.h" #include "tnl/t_context.h" #include "x86-64.h" -#include "../x86/common_x86_macros.h" +#include "../x86/x86_xform.h" #ifdef DEBUG #include "math/m_debug.h" diff --git a/src/mesa/x86/3dnow.c b/src/mesa/x86/3dnow.c index c037a61761..de2fb1e2aa 100644 --- a/src/mesa/x86/3dnow.c +++ b/src/mesa/x86/3dnow.c @@ -34,7 +34,7 @@ #include "tnl/t_context.h" #include "3dnow.h" -#include "common_x86_macros.h" +#include "x86_xform.h" #ifdef DEBUG_MATH #include "math/m_debug.h" diff --git a/src/mesa/x86/common_x86.c b/src/mesa/x86/common_x86.c index 5321547935..5efdb4f24a 100644 --- a/src/mesa/x86/common_x86.c +++ b/src/mesa/x86/common_x86.c @@ -52,7 +52,10 @@ #include "common_x86_asm.h" -int _mesa_x86_cpu_features = 0; +/** Bitmask of X86_FEATURE_x bits */ +int _mesa_x86_cpu_features = 0x0; + + /* No reason for this to be public. */ @@ -73,9 +76,12 @@ extern GLuint _ASMAPI _mesa_x86_cpuid_edx(GLuint op); * kernels provide full SSE support on all processors that expose SSE via * the CPUID mechanism. */ + +/* These are assembly functions: */ extern void _mesa_test_os_sse_support( void ); extern void _mesa_test_os_sse_exception_support( void ); + #if defined(WIN32) #ifndef STATUS_FLOAT_MULTIPLE_TRAPS # define STATUS_FLOAT_MULTIPLE_TRAPS (0xC00002B5L) @@ -107,7 +113,11 @@ static LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS exp) #endif /* WIN32 */ -static void check_os_sse_support( void ) +/** + * Check if SSE is supported. + * If not, turn off the X86_FEATURE_XMM flag in _mesa_x86_cpu_features. + */ +void _mesa_check_os_sse_support( void ) { #if defined(__FreeBSD__) { @@ -187,10 +197,26 @@ static void check_os_sse_support( void ) #endif /* USE_SSE_ASM */ -void _mesa_init_all_x86_transform_asm( void ) +/** + * Initialize the _mesa_x86_cpu_features bitfield. + * This is a no-op if called more than once. + */ +void +_mesa_get_x86_features(void) { + static int called = 0; + + if (called) + return; + + called = 1; + #ifdef USE_X86_ASM - _mesa_x86_cpu_features = 0; + _mesa_x86_cpu_features = 0x0; + + if (_mesa_getenv( "MESA_NO_ASM")) { + return; + } if (!_mesa_x86_has_cpuid()) { _mesa_debug(NULL, "CPUID not detected\n"); @@ -263,52 +289,5 @@ void _mesa_init_all_x86_transform_asm( void ) } } - - if ( _mesa_getenv( "MESA_NO_ASM" ) ) { - _mesa_x86_cpu_features = 0; - } - - if ( _mesa_x86_cpu_features ) { - _mesa_init_x86_transform_asm(); - } - -#ifdef USE_MMX_ASM - if ( cpu_has_mmx ) { - if ( _mesa_getenv( "MESA_NO_MMX" ) == 0 ) { - _mesa_debug(NULL, "MMX cpu detected.\n"); - } else { - _mesa_x86_cpu_features &= ~(X86_FEATURE_MMX); - } - } -#endif - -#ifdef USE_3DNOW_ASM - if ( cpu_has_3dnow ) { - if ( _mesa_getenv( "MESA_NO_3DNOW" ) == 0 ) { - _mesa_debug(NULL, "3DNow! cpu detected.\n"); - _mesa_init_3dnow_transform_asm(); - } else { - _mesa_x86_cpu_features &= ~(X86_FEATURE_3DNOW); - } - } -#endif - -#ifdef USE_SSE_ASM - if ( cpu_has_xmm ) { - if ( _mesa_getenv( "MESA_NO_SSE" ) == 0 ) { - _mesa_debug(NULL, "SSE cpu detected.\n"); - if ( _mesa_getenv( "MESA_FORCE_SSE" ) == 0 ) { - check_os_sse_support(); - } - if ( cpu_has_xmm ) { - _mesa_init_sse_transform_asm(); - } - } else { - _mesa_debug(NULL, "SSE cpu detected, but switched off by user.\n"); - _mesa_x86_cpu_features &= ~(X86_FEATURE_XMM); - } - } -#endif -#endif +#endif /* USE_X86_ASM */ } - diff --git a/src/mesa/x86/common_x86_asm.h b/src/mesa/x86/common_x86_asm.h index 89312b2437..0d39e3d230 100644 --- a/src/mesa/x86/common_x86_asm.h +++ b/src/mesa/x86/common_x86_asm.h @@ -42,18 +42,12 @@ */ #include "common_x86_features.h" -#ifdef USE_X86_ASM -#include "x86.h" -#ifdef USE_3DNOW_ASM -#include "3dnow.h" -#endif -#ifdef USE_SSE_ASM -#include "sse.h" -#endif -#endif - extern int _mesa_x86_cpu_features; +extern void _mesa_get_x86_features(void); + +extern void _mesa_check_os_sse_support(void); + extern void _mesa_init_all_x86_transform_asm( void ); #endif diff --git a/src/mesa/x86/gen_matypes.c b/src/mesa/x86/gen_matypes.c index afb4b11529..8c690b4f88 100644 --- a/src/mesa/x86/gen_matypes.c +++ b/src/mesa/x86/gen_matypes.c @@ -61,7 +61,7 @@ do { \ printf( "\n" ); \ } while (0) -#if defined(__BEOS__) || defined(_LP64) +#if defined(__BEOS__) || defined(__HAIKU__) || defined(_LP64) #define OFFSET( s, t, m ) \ printf( "#define %s\t%ld\n", s, offsetof( t, m ) ); #else @@ -69,7 +69,7 @@ do { \ printf( "#define %s\t%d\n", s, offsetof( t, m ) ); #endif -#if defined(__BEOS__) || defined(_LP64) +#if defined(__BEOS__) || defined(__HAIKU__) || defined(_LP64) #define SIZEOF( s, t ) \ printf( "#define %s\t%ld\n", s, sizeof(t) ); #else diff --git a/src/mesa/x86/glapi_x86.S b/src/mesa/x86/glapi_x86.S index 2e05a74ac6..7aa344f214 100644 --- a/src/mesa/x86/glapi_x86.S +++ b/src/mesa/x86/glapi_x86.S @@ -889,6 +889,10 @@ GLNAME(gl_dispatch_functions_start): GL_STUB(VertexAttribs4fvNV, _gloffset_VertexAttribs4fvNV, VertexAttribs4fvNV@12) GL_STUB(VertexAttribs4svNV, _gloffset_VertexAttribs4svNV, VertexAttribs4svNV@12) GL_STUB(VertexAttribs4ubvNV, _gloffset_VertexAttribs4ubvNV, VertexAttribs4ubvNV@12) + GL_STUB(GetTexBumpParameterfvATI, _gloffset_GetTexBumpParameterfvATI, GetTexBumpParameterfvATI@8) + GL_STUB(GetTexBumpParameterivATI, _gloffset_GetTexBumpParameterivATI, GetTexBumpParameterivATI@8) + GL_STUB(TexBumpParameterfvATI, _gloffset_TexBumpParameterfvATI, TexBumpParameterfvATI@8) + GL_STUB(TexBumpParameterivATI, _gloffset_TexBumpParameterivATI, TexBumpParameterivATI@8) GL_STUB(AlphaFragmentOp1ATI, _gloffset_AlphaFragmentOp1ATI, AlphaFragmentOp1ATI@24) GL_STUB(AlphaFragmentOp2ATI, _gloffset_AlphaFragmentOp2ATI, AlphaFragmentOp2ATI@36) GL_STUB(AlphaFragmentOp3ATI, _gloffset_AlphaFragmentOp3ATI, AlphaFragmentOp3ATI@48) @@ -905,26 +909,26 @@ GLNAME(gl_dispatch_functions_start): GL_STUB(SetFragmentShaderConstantATI, _gloffset_SetFragmentShaderConstantATI, SetFragmentShaderConstantATI@8) GL_STUB(PointParameteriNV, _gloffset_PointParameteriNV, PointParameteriNV@8) GL_STUB(PointParameterivNV, _gloffset_PointParameterivNV, PointParameterivNV@8) - GL_STUB(_dispatch_stub_734, _gloffset_ActiveStencilFaceEXT, _dispatch_stub_734@4) - HIDDEN(GL_PREFIX(_dispatch_stub_734, _dispatch_stub_734@4)) - GL_STUB(_dispatch_stub_735, _gloffset_BindVertexArrayAPPLE, _dispatch_stub_735@4) - HIDDEN(GL_PREFIX(_dispatch_stub_735, _dispatch_stub_735@4)) - GL_STUB(_dispatch_stub_736, _gloffset_DeleteVertexArraysAPPLE, _dispatch_stub_736@8) - HIDDEN(GL_PREFIX(_dispatch_stub_736, _dispatch_stub_736@8)) - GL_STUB(_dispatch_stub_737, _gloffset_GenVertexArraysAPPLE, _dispatch_stub_737@8) - HIDDEN(GL_PREFIX(_dispatch_stub_737, _dispatch_stub_737@8)) - GL_STUB(_dispatch_stub_738, _gloffset_IsVertexArrayAPPLE, _dispatch_stub_738@4) + GL_STUB(_dispatch_stub_738, _gloffset_ActiveStencilFaceEXT, _dispatch_stub_738@4) HIDDEN(GL_PREFIX(_dispatch_stub_738, _dispatch_stub_738@4)) + GL_STUB(_dispatch_stub_739, _gloffset_BindVertexArrayAPPLE, _dispatch_stub_739@4) + HIDDEN(GL_PREFIX(_dispatch_stub_739, _dispatch_stub_739@4)) + GL_STUB(_dispatch_stub_740, _gloffset_DeleteVertexArraysAPPLE, _dispatch_stub_740@8) + HIDDEN(GL_PREFIX(_dispatch_stub_740, _dispatch_stub_740@8)) + GL_STUB(_dispatch_stub_741, _gloffset_GenVertexArraysAPPLE, _dispatch_stub_741@8) + HIDDEN(GL_PREFIX(_dispatch_stub_741, _dispatch_stub_741@8)) + GL_STUB(_dispatch_stub_742, _gloffset_IsVertexArrayAPPLE, _dispatch_stub_742@4) + HIDDEN(GL_PREFIX(_dispatch_stub_742, _dispatch_stub_742@4)) GL_STUB(GetProgramNamedParameterdvNV, _gloffset_GetProgramNamedParameterdvNV, GetProgramNamedParameterdvNV@16) GL_STUB(GetProgramNamedParameterfvNV, _gloffset_GetProgramNamedParameterfvNV, GetProgramNamedParameterfvNV@16) GL_STUB(ProgramNamedParameter4dNV, _gloffset_ProgramNamedParameter4dNV, ProgramNamedParameter4dNV@44) GL_STUB(ProgramNamedParameter4dvNV, _gloffset_ProgramNamedParameter4dvNV, ProgramNamedParameter4dvNV@16) GL_STUB(ProgramNamedParameter4fNV, _gloffset_ProgramNamedParameter4fNV, ProgramNamedParameter4fNV@28) GL_STUB(ProgramNamedParameter4fvNV, _gloffset_ProgramNamedParameter4fvNV, ProgramNamedParameter4fvNV@16) - GL_STUB(_dispatch_stub_745, _gloffset_DepthBoundsEXT, _dispatch_stub_745@16) - HIDDEN(GL_PREFIX(_dispatch_stub_745, _dispatch_stub_745@16)) - GL_STUB(_dispatch_stub_746, _gloffset_BlendEquationSeparateEXT, _dispatch_stub_746@8) - HIDDEN(GL_PREFIX(_dispatch_stub_746, _dispatch_stub_746@8)) + GL_STUB(_dispatch_stub_749, _gloffset_DepthBoundsEXT, _dispatch_stub_749@16) + HIDDEN(GL_PREFIX(_dispatch_stub_749, _dispatch_stub_749@16)) + GL_STUB(_dispatch_stub_750, _gloffset_BlendEquationSeparateEXT, _dispatch_stub_750@8) + HIDDEN(GL_PREFIX(_dispatch_stub_750, _dispatch_stub_750@8)) GL_STUB(BindFramebufferEXT, _gloffset_BindFramebufferEXT, BindFramebufferEXT@8) GL_STUB(BindRenderbufferEXT, _gloffset_BindRenderbufferEXT, BindRenderbufferEXT@8) GL_STUB(CheckFramebufferStatusEXT, _gloffset_CheckFramebufferStatusEXT, CheckFramebufferStatusEXT@4) @@ -942,19 +946,19 @@ GLNAME(gl_dispatch_functions_start): GL_STUB(IsFramebufferEXT, _gloffset_IsFramebufferEXT, IsFramebufferEXT@4) GL_STUB(IsRenderbufferEXT, _gloffset_IsRenderbufferEXT, IsRenderbufferEXT@4) GL_STUB(RenderbufferStorageEXT, _gloffset_RenderbufferStorageEXT, RenderbufferStorageEXT@16) - GL_STUB(_dispatch_stub_764, _gloffset_BlitFramebufferEXT, _dispatch_stub_764@40) - HIDDEN(GL_PREFIX(_dispatch_stub_764, _dispatch_stub_764@40)) + GL_STUB(_dispatch_stub_768, _gloffset_BlitFramebufferEXT, _dispatch_stub_768@40) + HIDDEN(GL_PREFIX(_dispatch_stub_768, _dispatch_stub_768@40)) GL_STUB(FramebufferTextureLayerEXT, _gloffset_FramebufferTextureLayerEXT, FramebufferTextureLayerEXT@20) - GL_STUB(_dispatch_stub_766, _gloffset_StencilFuncSeparateATI, _dispatch_stub_766@16) - HIDDEN(GL_PREFIX(_dispatch_stub_766, _dispatch_stub_766@16)) - GL_STUB(_dispatch_stub_767, _gloffset_ProgramEnvParameters4fvEXT, _dispatch_stub_767@16) - HIDDEN(GL_PREFIX(_dispatch_stub_767, _dispatch_stub_767@16)) - GL_STUB(_dispatch_stub_768, _gloffset_ProgramLocalParameters4fvEXT, _dispatch_stub_768@16) - HIDDEN(GL_PREFIX(_dispatch_stub_768, _dispatch_stub_768@16)) - GL_STUB(_dispatch_stub_769, _gloffset_GetQueryObjecti64vEXT, _dispatch_stub_769@12) - HIDDEN(GL_PREFIX(_dispatch_stub_769, _dispatch_stub_769@12)) - GL_STUB(_dispatch_stub_770, _gloffset_GetQueryObjectui64vEXT, _dispatch_stub_770@12) - HIDDEN(GL_PREFIX(_dispatch_stub_770, _dispatch_stub_770@12)) + GL_STUB(_dispatch_stub_770, _gloffset_StencilFuncSeparateATI, _dispatch_stub_770@16) + HIDDEN(GL_PREFIX(_dispatch_stub_770, _dispatch_stub_770@16)) + GL_STUB(_dispatch_stub_771, _gloffset_ProgramEnvParameters4fvEXT, _dispatch_stub_771@16) + HIDDEN(GL_PREFIX(_dispatch_stub_771, _dispatch_stub_771@16)) + GL_STUB(_dispatch_stub_772, _gloffset_ProgramLocalParameters4fvEXT, _dispatch_stub_772@16) + HIDDEN(GL_PREFIX(_dispatch_stub_772, _dispatch_stub_772@16)) + GL_STUB(_dispatch_stub_773, _gloffset_GetQueryObjecti64vEXT, _dispatch_stub_773@12) + HIDDEN(GL_PREFIX(_dispatch_stub_773, _dispatch_stub_773@12)) + GL_STUB(_dispatch_stub_774, _gloffset_GetQueryObjectui64vEXT, _dispatch_stub_774@12) + HIDDEN(GL_PREFIX(_dispatch_stub_774, _dispatch_stub_774@12)) GL_STUB_ALIAS(ArrayElementEXT, _gloffset_ArrayElement, ArrayElementEXT@4, ArrayElement, ArrayElement@4) GL_STUB_ALIAS(BindTextureEXT, _gloffset_BindTexture, BindTextureEXT@8, BindTexture, BindTexture@8) GL_STUB_ALIAS(DrawArraysEXT, _gloffset_DrawArrays, DrawArraysEXT@12, DrawArrays, DrawArrays@12) diff --git a/src/mesa/x86/sse.c b/src/mesa/x86/sse.c index 1c185387c6..aef15b5315 100644 --- a/src/mesa/x86/sse.c +++ b/src/mesa/x86/sse.c @@ -33,7 +33,7 @@ #include "tnl/t_context.h" #include "sse.h" -#include "common_x86_macros.h" +#include "x86_xform.h" #ifdef DEBUG_MATH #include "math/m_debug.h" diff --git a/src/mesa/x86/x86.c b/src/mesa/x86/x86_xform.c index ce649f66b0..16b2b26bcc 100644 --- a/src/mesa/x86/x86.c +++ b/src/mesa/x86/x86_xform.c @@ -32,8 +32,17 @@ #include "math/m_xform.h" #include "tnl/t_context.h" -#include "x86.h" -#include "common_x86_macros.h" +#include "x86_xform.h" +#include "common_x86_asm.h" + +#ifdef USE_X86_ASM +#ifdef USE_3DNOW_ASM +#include "3dnow.h" +#endif +#ifdef USE_SSE_ASM +#include "sse.h" +#endif +#endif #ifdef DEBUG_MATH #include "math/m_debug.h" @@ -76,9 +85,9 @@ _mesa_v16_x86_general_xform( GLfloat *dest, #endif -void _mesa_init_x86_transform_asm( void ) -{ #ifdef USE_X86_ASM +static void _mesa_init_x86_transform_asm( void ) +{ ASSIGN_XFORM_GROUP( x86, 2 ); ASSIGN_XFORM_GROUP( x86, 3 ); ASSIGN_XFORM_GROUP( x86, 4 ); @@ -90,6 +99,55 @@ void _mesa_init_x86_transform_asm( void ) _math_test_all_transform_functions( "x86" ); _math_test_all_cliptest_functions( "x86" ); #endif -#endif } +#endif + +void _mesa_init_all_x86_transform_asm( void ) +{ + _mesa_get_x86_features(); + +#ifdef USE_X86_ASM + if ( _mesa_x86_cpu_features ) { + _mesa_init_x86_transform_asm(); + } + +#ifdef USE_MMX_ASM + if ( cpu_has_mmx ) { + if ( _mesa_getenv( "MESA_NO_MMX" ) == 0 ) { + _mesa_debug(NULL, "MMX cpu detected.\n"); + } else { + _mesa_x86_cpu_features &= ~(X86_FEATURE_MMX); + } + } +#endif + +#ifdef USE_3DNOW_ASM + if ( cpu_has_3dnow ) { + if ( _mesa_getenv( "MESA_NO_3DNOW" ) == 0 ) { + _mesa_debug(NULL, "3DNow! cpu detected.\n"); + _mesa_init_3dnow_transform_asm(); + } else { + _mesa_x86_cpu_features &= ~(X86_FEATURE_3DNOW); + } + } +#endif + +#ifdef USE_SSE_ASM + if ( cpu_has_xmm ) { + if ( _mesa_getenv( "MESA_NO_SSE" ) == 0 ) { + _mesa_debug(NULL, "SSE cpu detected.\n"); + if ( _mesa_getenv( "MESA_FORCE_SSE" ) == 0 ) { + _mesa_check_os_sse_support(); + } + if ( cpu_has_xmm ) { + _mesa_init_sse_transform_asm(); + } + } else { + _mesa_debug(NULL, "SSE cpu detected, but switched off by user.\n"); + _mesa_x86_cpu_features &= ~(X86_FEATURE_XMM); + } + } +#endif +#endif +} diff --git a/src/mesa/x86/common_x86_macros.h b/src/mesa/x86/x86_xform.h index 462f32b3f2..e886d9add2 100644 --- a/src/mesa/x86/common_x86_macros.h +++ b/src/mesa/x86/x86_xform.h @@ -26,8 +26,8 @@ * Gareth Hughes */ -#ifndef __COMMON_X86_MACROS_H__ -#define __COMMON_X86_MACROS_H__ +#ifndef X86_XFORM_H +#define X86_XFORM_H /* ============================================================= |