diff options
author | alanh <alanh> | 2002-05-01 15:35:39 +0000 |
---|---|---|
committer | alanh <alanh> | 2002-05-01 15:35:39 +0000 |
commit | 4bcfa37ff6f5bf3ffbc0e56bf6f5b98d4f26c382 (patch) | |
tree | 89471233fdd822dad22547b70f5a252e1345eee6 | |
parent | a26aef4f8623c8b8f83c20b5f1e8d3e01fc86860 (diff) |
bring in current Mesa 4.0.x branch code.
52 files changed, 1081 insertions, 754 deletions
diff --git a/xc/extras/Mesa/docs/VERSIONS b/xc/extras/Mesa/docs/VERSIONS index 7890beb74..a321d44f4 100644 --- a/xc/extras/Mesa/docs/VERSIONS +++ b/xc/extras/Mesa/docs/VERSIONS @@ -897,6 +897,7 @@ Mesa Version History - lighting didn't always produce the correct alpha value - fixed 3DNow! code to not read past end of arrays (Andrew Lewycky) + 4.0.1 December 17, 2001 New: - better sub-pixel sample positions for AA triangles (Ray Tice) @@ -925,6 +926,7 @@ Mesa Version History - fixed bug in normal length caching (ParaView lighting bug) - fixed separate_specular color bug found in Chimera (18 Dec 2001) + 4.0.2 April 2, 2002 New: - New DOS (DJGPP) driver written by Daniel Borca @@ -950,3 +952,28 @@ Mesa Version History - user clip planes failed for some perspective projections (Chromium) Known bugs: - mipmap LOD computation + + +4.0.3 May ??, 2002 + New: + - updated GL/glext.h file (version 13) + - corrected MMX blend code (Jose Fonseca) + - support for software-based alpha planes in Windows driver + Bug fixes: + - glext.h had wrong values for GL_DOT3_RGB[A]_EXT tokens + - OSMesaMakeCurrent() didn't recognize buffer size changes + - assorted conformance fixes for 16-bit/channel rendering + - texcombine alpha subtraction mode was broken + - fixed lighting bug with non-uniform scaling and display lists + - fixed bug when deleting shared display lists + - disabled SPARC cliptest assembly code (Mesa bug 544665) + - fixed a couple Solaris compilation/link problems + - blending clipped glDrawPixels didn't always work + - glGetTexImage() didn't accept packed pixel types + - glPixelMapu[is]v() could explode given too large of pixelmap + - glGetTexParameter[if]v() didn't accept GL_TEXTURE_MAX_ANISOTROPY_EXT + Changes: + - lots of C++ (g++) code clean-ups + - lots of T&L updates for the Radeon DRI driver + Known bugs: + - mipmap LOD computation (fixed for Mesa 4.1) diff --git a/xc/extras/Mesa/include/GL/gl.h b/xc/extras/Mesa/include/GL/gl.h index 500a2ef83..87ad11f1a 100644 --- a/xc/extras/Mesa/include/GL/gl.h +++ b/xc/extras/Mesa/include/GL/gl.h @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 4.0.2 + * Version: 4.0.3 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), diff --git a/xc/extras/Mesa/include/GL/glext.h b/xc/extras/Mesa/include/GL/glext.h index c4b4baa09..7d7080048 100644 --- a/xc/extras/Mesa/include/GL/glext.h +++ b/xc/extras/Mesa/include/GL/glext.h @@ -49,9 +49,9 @@ extern "C" { /*************************************************************/ /* Header file version number, required by OpenGL ABI for Linux */ -/* glext.h last updated 2002/03/22 */ +/* glext.h last updated 2002/04/12 */ /* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */ -#define GL_GLEXT_VERSION 11 +#define GL_GLEXT_VERSION 13 #ifndef GL_VERSION_1_2 #define GL_CONSTANT_COLOR 0x8001 @@ -459,9 +459,7 @@ extern "C" { #ifndef GL_ARB_texture_env_dot3 #define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGB_EXT 0x86AE #define GL_DOT3_RGBA_ARB 0x86AF -#define GL_DOT3_RGBA_EXT 0x86AF #endif #ifndef GL_ARB_texture_mirrored_repeat @@ -1688,6 +1686,16 @@ extern "C" { #define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF #endif +#ifndef GL_EXT_texture_env_dot3 +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 +#endif + +#ifndef GL_ATI_texture_mirror_once +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#endif + #ifndef GL_NV_fence #define GL_ALL_COMPLETED_NV 0x84F2 #define GL_FENCE_STATUS_NV 0x84F3 @@ -2274,6 +2282,9 @@ extern "C" { #ifndef GL_NV_vertex_program1_1 #endif +#ifndef GL_EXT_shadow_funcs +#endif + /*************************************************************/ @@ -4035,6 +4046,14 @@ GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *); typedef void (APIENTRY * PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); #endif +#ifndef GL_EXT_texture_env_dot3 +#define GL_EXT_texture_env_dot3 1 +#endif + +#ifndef GL_ATI_texture_mirror_once +#define GL_ATI_texture_mirror_once 1 +#endif + #ifndef GL_NV_fence #define GL_NV_fence 1 #ifdef GL_GLEXT_PROTOTYPES @@ -4615,6 +4634,10 @@ typedef void (APIENTRY * PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint #define GL_NV_vertex_program1_1 1 #endif +#ifndef GL_EXT_shadow_funcs +#define GL_EXT_shadow_funcs 1 +#endif + #ifdef __cplusplus } diff --git a/xc/extras/Mesa/include/GL/osmesa.h b/xc/extras/Mesa/include/GL/osmesa.h index 272c7566f..d3edffee2 100644 --- a/xc/extras/Mesa/include/GL/osmesa.h +++ b/xc/extras/Mesa/include/GL/osmesa.h @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 4.0 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -63,7 +63,7 @@ extern "C" { #define OSMESA_MAJOR_VERSION 4 #define OSMESA_MINOR_VERSION 0 -#define OSMESA_PATCH_VERSION 0 +#define OSMESA_PATCH_VERSION 3 diff --git a/xc/extras/Mesa/include/GL/xmesa.h b/xc/extras/Mesa/include/GL/xmesa.h index 494475263..67b26ee2c 100644 --- a/xc/extras/Mesa/include/GL/xmesa.h +++ b/xc/extras/Mesa/include/GL/xmesa.h @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 4.0.2 + * Version: 4.0.3 * - * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), diff --git a/xc/extras/Mesa/src/OSmesa/osmesa.c b/xc/extras/Mesa/src/OSmesa/osmesa.c index ccce23967..e15b67ab2 100644 --- a/xc/extras/Mesa/src/OSmesa/osmesa.c +++ b/xc/extras/Mesa/src/OSmesa/osmesa.c @@ -1,7 +1,7 @@ /* * Mesa 3-D graphics library - * Version: 4.0.2 + * Version: 4.0.3 * * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * @@ -36,6 +36,7 @@ #include "glheader.h" #include "GL/osmesa.h" +#include "buffers.h" #include "context.h" #include "colormac.h" #include "depth.h" @@ -479,6 +480,10 @@ OSMesaMakeCurrent( OSMesaContext ctx, void *buffer, GLenum type, ctx->gl_ctx.Scissor.Width = width; ctx->gl_ctx.Scissor.Height = height; } + else { + /* this will make ensure we recognize the new buffer size */ + _mesa_ResizeBuffersMESA(); + } return GL_TRUE; } diff --git a/xc/extras/Mesa/src/SPARC/sparc.c b/xc/extras/Mesa/src/SPARC/sparc.c index 4e0688cfa..0ed54fe60 100644 --- a/xc/extras/Mesa/src/SPARC/sparc.c +++ b/xc/extras/Mesa/src/SPARC/sparc.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -111,9 +111,13 @@ void _mesa_init_all_sparc_transform_asm(void) ASSIGN_XFORM_GROUP(sparc, 3) ASSIGN_XFORM_GROUP(sparc, 4) +#if 0 + /* Disabled for now. See Mesa bug report # 544665. Evidently these + * functions are using SPARC registers that shouldn't be touched. + */ _mesa_clip_tab[4] = _mesa_sparc_cliptest_points4; _mesa_clip_np_tab[4] = _mesa_sparc_cliptest_points4_np; - +#endif _mesa_normal_tab[NORM_TRANSFORM | NORM_NORMALIZE] = _mesa_sparc_transform_normalize_normals; _mesa_normal_tab[NORM_TRANSFORM_NO_ROT | NORM_NORMALIZE] = diff --git a/xc/extras/Mesa/src/X/fakeglx.c b/xc/extras/Mesa/src/X/fakeglx.c index 03f8cd396..0fdb6bbf2 100644 --- a/xc/extras/Mesa/src/X/fakeglx.c +++ b/xc/extras/Mesa/src/X/fakeglx.c @@ -1,7 +1,7 @@ /* * Mesa 3-D graphics library - * Version: 4.0.2 + * Version: 4.0.3 * * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * @@ -65,7 +65,7 @@ #define SERVER_MINOR_VERSION 4 /* This is appended onto the glXGetClient/ServerString version strings. */ -#define MESA_GLX_VERSION "Mesa 4.0.2" +#define MESA_GLX_VERSION "Mesa 4.0.3" /* Who implemented this GLX? */ #define VENDOR "Brian Paul" @@ -1790,7 +1790,11 @@ Fake_glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config, *value = False; /* XXX ??? */ break; case GLX_X_VISUAL_TYPE: +#if defined(__cplusplus) || defined(c_plusplus) + switch (v->vishandle->c_class) { +#else switch (v->vishandle->class) { +#endif case GrayScale: *value = GLX_GRAY_SCALE; break; diff --git a/xc/extras/Mesa/src/X/xm_api.c b/xc/extras/Mesa/src/X/xm_api.c index 0dfad6a8a..44df501f4 100644 --- a/xc/extras/Mesa/src/X/xm_api.c +++ b/xc/extras/Mesa/src/X/xm_api.c @@ -1,7 +1,7 @@ /* * Mesa 3-D graphics library - * Version: 4.0.2 + * Version: 4.0.3 * * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * @@ -2514,7 +2514,7 @@ const char *XMesaGetString( XMesaContext c, int name ) { (void) c; if (name==XMESA_VERSION) { - return "3.5"; + return "4.0.3"; } else if (name==XMESA_EXTENSIONS) { return ""; diff --git a/xc/extras/Mesa/src/X86/mmx_blend.S b/xc/extras/Mesa/src/X86/mmx_blend.S index 154b8ef2c..8efae08f5 100644 --- a/xc/extras/Mesa/src/X86/mmx_blend.S +++ b/xc/extras/Mesa/src/X86/mmx_blend.S @@ -1,352 +1,418 @@ +/* + * Written by José Fonseca <j_r_fonseca@yahoo.co.uk> + */ + #include "matypes.h" +/* + * make the following approximation to the division (Sree) + * + * rgb*a/255 ~= (rgb*(a+1)) >> 256 + * + * which is the fastest method that satisfies the following OpenGL criteria + * + * 0*0 = 0 and 255*255 = 255 + * + * note this one should be used alone + */ +#define GMBT_ALPHA_PLUS_ONE 0 + +/* + * take the geometric series approximation to the division + * + * t/255 = (t >> 8) + (t >> 16) + (t >> 24) .. + * + * in this case just the first two terms to fit in 16bit arithmetic + * + * t/255 ~= (t + (t >> 8)) >> 8 + * + * note that just by itself it doesn't satisfies the OpenGL criteria, as 255*255 = 254, + * so the special case a = 255 must be accounted or roundoff must be used + */ +#define GMBT_GEOMETRIC_SERIES 1 + +/* + * when using a geometric series division instead of truncating the result + * use roundoff in the approximation (Jim Blinn) + * + * t = rgb*a + 0x80 + * + * achieving the exact results + */ +#define GMBT_ROUNDOFF 0 + +/* instead of the roundoff this adds a small correction to satisfy the OpenGL criteria + * + * t/255 ~= (t + (t >> 8) + (t >> 15)) >> 8 + * + * note that although is faster than rounding off it doesn't give always the exact results + */ +#define GMBT_GEOMETRIC_CORRECTION 1 -SEG_TEXT +/* + * do + * + * s = (q - p)*a + q + * + * instead of + * + * s = p*a + q*(1-a) + * + * this eliminates a multiply at the expense of + * complicating the roundoff but is generally worth it + */ +#define GMBT_SIGNED_ARITHMETIC 1 +#if GMBT_ROUNDOFF + SEG_DATA + +ALIGNDATA8 +const_80: + D_LONG 0x00800080, 0x00800080 +#endif + + SEG_TEXT ALIGNTEXT16 GLOBL GLNAME(_mesa_mmx_blend_transparency) +/* + * void blend_transparency( GLcontext *ctx, + * GLuint n, + * const GLubyte mask[], + * GLchan rgba[][4], + * CONST GLchan dest[][4] ) + * + * Common transparency blending mode. + */ GLNAME( _mesa_mmx_blend_transparency ): - PUSH_L ( EBP ) - MOV_L ( ESP, EBP ) - SUB_L ( CONST(52), ESP ) - PUSH_L ( EBX ) - MOV_L ( CONST(16711680), REGOFF(-8, EBP) ) - MOV_L ( CONST(16711680), REGOFF(-4, EBP) ) - MOV_L ( CONST(0), REGOFF(-16, EBP) ) - MOV_L ( CONST(-1), REGOFF(-12, EBP) ) - MOV_L ( CONST(-1), REGOFF(-24, EBP) ) - MOV_L ( CONST(0), REGOFF(-20, EBP) ) - MOV_L ( REGOFF(24, EBP), EAX ) - ADD_L ( CONST(4), EAX ) - MOV_L ( EAX, EDX ) - AND_L ( REGOFF(20, EBP), EDX ) - MOV_L ( EDX, EAX ) - AND_L ( CONST(4), EAX ) - CMP_L ( CONST(8), EAX ) - JNE ( LLBL(GMBT_2) ) - MOV_L ( REGOFF(20, EBP), EAX ) - ADD_L ( CONST(3), EAX ) - XOR_L ( EDX, EDX ) - MOV_B ( REGIND(EAX), DL ) - MOV_L ( EDX, REGOFF(-32, EBP) ) - MOV_L ( CONST(255), EAX ) - MOV_L ( EAX, EBX ) - SUB_L ( REGOFF(-32, EBP), EBX ) - MOV_L ( EBX, REGOFF(-36, EBP) ) - MOV_L ( REGOFF(20, EBP), EAX ) - XOR_L ( EDX, EDX ) - MOV_B ( REGIND(EAX), DL ) - MOV_L ( EDX, EAX ) - IMUL_L ( REGOFF(-32, EBP), EAX ) - MOV_L ( REGOFF(24, EBP), EDX ) - XOR_L ( ECX, ECX ) - MOV_B ( REGIND(EDX), CL ) - MOV_L ( ECX, EDX ) - IMUL_L ( REGOFF(-36, EBP), EDX ) - ADD_L ( EDX, EAX ) - MOV_L ( EAX, EBX ) - SAR_L ( CONST(8), EBX ) - MOV_L ( EBX, REGOFF(-40, EBP) ) - MOV_L ( REGOFF(20, EBP), EAX ) - INC_L ( EAX ) - XOR_L ( EDX, EDX ) - MOV_B ( REGIND(EAX), DL ) - MOV_L ( EDX, EAX ) - IMUL_L ( REGOFF(-32, EBP), EAX ) - MOV_L ( REGOFF(24, EBP), EDX ) - INC_L ( EDX ) - XOR_L ( ECX, ECX ) - MOV_B ( REGIND(EDX), CL ) - MOV_L ( ECX, EDX ) - IMUL_L ( REGOFF(-36, EBP), EDX ) - ADD_L ( EDX, EAX ) - MOV_L ( EAX, EBX ) - SAR_L ( CONST(8), EBX ) - MOV_L ( EBX, REGOFF(-44, EBP) ) - MOV_L ( REGOFF(20, EBP), EAX ) - ADD_L ( CONST(2), EAX ) - XOR_L ( EDX, EDX ) - MOV_B ( REGIND(EAX), DL ) - MOV_L ( EDX, EAX ) - IMUL_L ( REGOFF(-32, EBP), EAX ) - MOV_L ( REGOFF(24, EBP), EDX ) - ADD_L ( CONST(2), EDX ) - XOR_L ( ECX, ECX ) - MOV_B ( REGIND(EDX), CL ) - MOV_L ( ECX, EDX ) - IMUL_L ( REGOFF(-36, EBP), EDX ) - ADD_L ( EDX, EAX ) - MOV_L ( EAX, EBX ) - SAR_L ( CONST(8), EBX ) - MOV_L ( EBX, REGOFF(-48, EBP) ) - MOV_L ( REGOFF(20, EBP), EAX ) - ADD_L ( CONST(3), EAX ) - XOR_L ( EDX, EDX ) - MOV_B ( REGIND(EAX), DL ) - MOV_L ( EDX, EAX ) - IMUL_L ( REGOFF(-32, EBP), EAX ) - MOV_L ( REGOFF(24, EBP), EDX ) - ADD_L ( CONST(3), EDX ) - XOR_L ( ECX, ECX ) - MOV_B ( REGIND(EDX), CL ) - MOV_L ( ECX, EDX ) - IMUL_L ( REGOFF(-36, EBP), EDX ) - ADD_L ( EDX, EAX ) - MOV_L ( EAX, EBX ) - SAR_L ( CONST(8), EBX ) - MOV_L ( EBX, REGOFF(-52, EBP) ) - MOV_L ( REGOFF(20, EBP), EAX ) - MOV_B ( REGOFF(-40, EBP), DL ) - MOV_B ( DL, REGIND(EAX) ) - MOV_L ( REGOFF(20, EBP), EAX ) - INC_L ( EAX ) - MOV_B ( REGOFF(-44, EBP), DL ) - MOV_B ( DL, REGIND(EAX) ) - MOV_L ( REGOFF(20, EBP), EAX ) - ADD_L ( CONST(2), EAX ) - MOV_B ( REGOFF(-48, EBP), DL ) - MOV_B ( DL, REGIND(EAX) ) - MOV_L ( REGOFF(20, EBP), EAX ) - ADD_L ( CONST(3), EAX ) - MOV_B ( REGOFF(-52, EBP), DL ) - MOV_B ( DL, REGIND(EAX) ) - INC_L ( REGOFF(16, EBP) ) - ADD_L ( CONST(4), REGOFF(20, EBP) ) - ADD_L ( CONST(4), REGOFF(24, EBP) ) - DEC_L ( REGOFF(12, EBP) ) -LLBL(GMBT_2): - - CMP_L ( CONST(0), REGOFF(12, EBP) ) - JE ( LLBL(GMBT_3) ) - MOV_L ( CONST(0), REGOFF(-28, EBP) ) -ALIGNTEXT4 -LLBL(GMBT_4): - - MOV_L ( REGOFF(12, EBP), EDX ) - MOV_L ( EDX, EAX ) - SHR_L ( CONST(1), EAX ) - CMP_L ( EAX, REGOFF(-28, EBP) ) - JB ( LLBL(GMBT_7) ) - JMP ( LLBL(GMBT_5) ) -ALIGNTEXT16 -LLBL(GMBT_7): - - MOV_L ( REGOFF(-28, EBP), EAX ) - LEA_L ( REGDIS(0,EAX,2), EDX ) - MOV_L ( REGOFF(16, EBP), EAX ) - CMP_B ( CONST(0), REGBI(EAX,EDX) ) - JE ( LLBL(GMBT_6) ) - MOV_L ( REGOFF(-28, EBP), EAX ) - MOV_L ( EAX, EDX ) - LEA_L ( REGDIS(0,EDX,8), ECX ) - MOV_L ( ECX, EAX ) - ADD_L ( REGOFF(20, EBP), EAX ) - MOV_L ( REGOFF(-28, EBP), EDX ) - MOV_L ( EDX, ECX ) - LEA_L ( REGDIS(0,ECX,8), EDX ) - MOV_L ( EDX, ECX ) - ADD_L ( REGOFF(24, EBP), ECX ) - - MOVQ ( REGIND(EAX), MM4 ) - PXOR ( MM5, MM5 ) - MOVQ ( MM4, MM1 ) - MOVQ ( REGIND(ECX), MM7 ) - PUNPCKLBW ( MM5, MM1 ) - MOVQ ( MM7, MM6 ) - MOVQ ( MM1, MM0 ) - PUNPCKLBW ( MM5, MM6 ) - MOVQ ( MM1, MM2 ) - PSRLQ ( CONST(48), MM0 ) - PUNPCKHBW ( MM5, MM4 ) - PACKSSDW ( MM0, MM0 ) - MOVQ ( MM0, MM3 ) - PUNPCKHBW ( MM5, MM7 ) - PSLLQ ( CONST(16), MM3 ) - POR ( REGOFF(-8, EBP), MM0 ) - PUNPCKLWD ( MM6, MM1 ) - PSUBW ( MM3, MM0 ) - PUNPCKHWD ( MM6, MM2 ) - MOVQ ( MM4, MM3 ) - PSRLQ ( CONST(48), MM3 ) - PACKSSDW ( MM3, MM3 ) - MOVQ ( MM3, MM6 ) - POR ( REGOFF(-8, EBP), MM3 ) - PSLLQ ( CONST(16), MM6 ) - PSUBW ( MM6, MM3 ) - MOVQ ( MM4, MM5 ) - PUNPCKLWD ( MM7, MM4 ) - PUNPCKHWD ( MM7, MM5 ) - PMADDWD ( MM0, MM1 ) - PMADDWD ( MM3, MM4 ) - PMADDWD ( MM0, MM2 ) - PMADDWD ( MM3, MM5 ) - PSRLD ( CONST(8), MM1 ) - PSRLD ( CONST(8), MM2 ) - PSRLD ( CONST(8), MM4 ) - PACKSSDW ( MM2, MM1 ) - PSRLD ( CONST(8), MM5 ) - PACKUSWB ( MM1, MM1 ) - PACKSSDW ( MM5, MM4 ) - PAND ( REGOFF(-24, EBP), MM1 ) - PACKUSWB ( MM4, MM4 ) - PAND ( REGOFF(-16, EBP), MM4 ) - POR ( MM1, MM4 ) - MOVQ ( MM4, REGIND(EAX) ) - - -LLBL(GMBT_8): - -LLBL(GMBT_6): - - INC_L ( REGOFF(-28, EBP) ) - JMP ( LLBL(GMBT_4) ) + + PUSH_L ( EBP ) + MOV_L ( ESP, EBP ) + PUSH_L ( ESI ) + PUSH_L ( EDI ) + PUSH_L ( EBX ) + + MOV_L ( REGOFF(12, EBP), ECX ) /* n */ + CMP_L ( CONST(0), ECX) + JE ( LLBL (GMBT_return) ) + + MOV_L ( REGOFF(16, EBP), EBX ) /* mask */ + MOV_L ( REGOFF(20, EBP), EDI ) /* rgba */ + MOV_L ( REGOFF(24, EBP), ESI ) /* dest */ + + TEST_L ( CONST(4), EDI ) /* align rgba on an 8-byte boundary */ + JZ ( LLBL (GMBT_align_end) ) + + CMP_B ( CONST(0), REGIND(EBX) ) /* *mask == 0 */ + JE ( LLBL (GMBT_align_continue) ) + + PXOR ( MM0, MM0 ) /* 0x0000 | 0x0000 | 0x0000 | 0x0000 */ + + MOVD ( REGIND(ESI), MM1 ) /* | | | | qa1 | qb1 | qg1 | qr1 */ + MOVD ( REGIND(EDI), MM2 ) /* | | | | pa1 | pb1 | pg1 | pr1 */ + + PUNPCKLBW ( MM0, MM1 ) /* qa1 | qb1 | qg1 | qr1 */ + PUNPCKLBW ( MM0, MM2 ) /* pa1 | pb1 | pg1 | pr1 */ + + MOVQ ( MM2, MM3 ) + + PUNPCKHWD ( MM3, MM3 ) /* pa1 | pa1 | | */ + PUNPCKHDQ ( MM3, MM3 ) /* pa1 | pa1 | pa1 | pa1 */ + +#if GMBT_ALPHA_PLUS_ONE + PCMPEQW ( MM4, MM4 ) /* 0xffff | 0xffff | 0xffff | 0xffff */ + + PSUBW ( MM4, MM3 ) /* pa1 + 1 | pa1 + 1 | pa1 + 1 | pa1 + 1 */ +#endif + +#if GMBT_SIGNED_ARITHMETIC + PSUBW ( MM1, MM2 ) /* pa1 - qa1 | pb1 - qb1 | pg1 - qg1 | pr1 - qr1 */ + + PSLLW ( CONST(8), MM1 ) /* q1 << 8 */ + +#if GMBT_ROUNDOFF + MOVQ ( MM2, MM4 ) +#endif + + PMULLW ( MM3, MM2 ) /* t1 = (q1 - p1)*pa1 */ + +#if GMBT_ROUNDOFF + PSRLW ( CONST(15), MM4 ) /* q1 > p1 ? 1 : 0 */ + + PSLLW ( CONST(8), MM4 ) /* q1 > p1 ? 0x100 : 0 */ + + PSUBW ( MM4, MM2 ) /* t1 -=? 0x100 */ +#endif + +#else + PCMPEQW ( MM4, MM4 ) /* 0xffff | 0xffff | 0xffff | 0xffff */ + PUNPCKLBW ( MM0, MM4 ) /* 0x00ff | 0x00ff | 0x00ff | 0x00ff */ + MOVQ ( MM4, MM0 ) + + PMULLW ( MM3, MM2 ) /* p1*pa1 */ + + PSUBW ( MM3, MM0 ) /* 255 - pa1 | 255 - pa1 | 255 - pa1 | 255 - pa1 */ + + PMULLW ( MM0, MM1 ) /* q1*(255 - pa1) */ + + PADDW ( MM1, MM2 ) /* t1 = p1*pa1 + q1*(255 - pa1) */ +#endif + +#if GMBT_ROUNDOFF + MOVQ ( CONTENT(const_80), MM4 ) + + PADDW ( MM4, MM2 ) /* t1 += 0x80 */ +#endif + +#if GMBT_GEOMETRIC_SERIES + MOVQ ( MM2, MM3 ) + + PSRLW ( CONST(8), MM3 ) /* t1 >> 8 */ + + PADDW ( MM3, MM2 ) /* t1 + (t1 >> 8) ~= (t1/255) << 8 */ +#endif + +#if GMBT_SIGNED_ARITHMETIC + PADDW ( MM1, MM2 ) /* (t1/255 + q1) << 8 */ +#endif + + PSRLW ( CONST(8), MM2 ) /* sa1 | sb1 | sg1 | sr1 */ + + PACKUSWB ( MM0, MM2 ) /* | | | | sa1 | sb1 | sg1 | sr1 */ + MOVD ( MM2, REGIND(EDI) ) + +LLBL (GMBT_align_continue): + + DEC_L ( ECX ) /* n -= 1 */ + INC_L ( EBX ) /* mask += 1 */ + ADD_L ( CONST(4), EDI ) /* rgba += 1 */ + ADD_L ( CONST(4), ESI ) /* dest += 1 */ + +LLBL (GMBT_align_end): + + CMP_L ( CONST(2), ECX) + JB ( LLBL (GMBT_loop_end) ) + ALIGNTEXT16 -LLBL(GMBT_5): +LLBL (GMBT_loop_begin): + + CMP_W ( CONST(0), REGIND(EBX) ) /* *mask == 0 && *(mask + 1) == 0 */ + JE ( LLBL (GMBT_loop_continue) ) + + /* NOTE: the instruction pairing when multiple pipelines are available must be checked */ + + PXOR ( MM0, MM0 ) /* 0x0000 | 0x0000 | 0x0000 | 0x0000 */ + + MOVQ ( REGIND(ESI), MM7 ) /* qa2 | qb2 | qg2 | qr2 | qa1 | qb1 | qg1 | qr1 */ + MOVQ ( REGIND(EDI), MM6 ) /* pa2 | pb2 | pg2 | pr2 | pa1 | pb1 | pg1 | pr1 */ + + MOVQ ( MM7, MM1 ) + MOVQ ( MM6, MM2 ) + + PUNPCKLBW ( MM0, MM1 ) /* qa1 | qb1 | qg1 | qr1 */ + PUNPCKHBW ( MM0, MM7 ) /* qa2 | qb2 | qg2 | qr2 */ + PUNPCKLBW ( MM0, MM2 ) /* pa1 | pb1 | pg1 | pr1 */ + PUNPCKHBW ( MM0, MM6 ) /* pa2 | pb2 | pg2 | pr2 */ + + MOVQ ( MM2, MM3 ) + MOVQ ( MM6, MM5 ) + + PUNPCKHWD ( MM3, MM3 ) /* pa1 | pa1 | | */ + PUNPCKHWD ( MM5, MM5 ) /* pa2 | pa2 | | */ + PUNPCKHDQ ( MM3, MM3 ) /* pa1 | pa1 | pa1 | pa1 */ + PUNPCKHDQ ( MM5, MM5 ) /* pa2 | pa2 | pa2 | pa2 */ + +#if GMBT_ALPHA_PLUS_ONE + PCMPEQW ( MM4, MM4 ) /* 0xffff | 0xffff | 0xffff | 0xffff */ + + PSUBW ( MM4, MM3 ) /* pa1 + 1 | pa1 + 1 | pa1 + 1 | pa1 + 1 */ + PSUBW ( MM4, MM5 ) /* pa2 + 1 | pa2 + 1 | pa2 + 1 | pa2 + 1 */ +#endif +#if GMBT_SIGNED_ARITHMETIC + PSUBW ( MM1, MM2 ) /* pa1 - qa1 | pb1 - qb1 | pg1 - qg1 | pr1 - qr1 */ + PSUBW ( MM7, MM6 ) /* pa2 - qa2 | pb2 - qb2 | pg2 - qg2 | pr2 - qr2 */ + + PSLLW ( CONST(8), MM1 ) /* q1 << 8 */ + PSLLW ( CONST(8), MM7 ) /* q2 << 8 */ + +#if GMBT_ROUNDOFF + MOVQ ( MM2, MM0 ) + MOVQ ( MM6, MM4 ) +#endif + + PMULLW ( MM3, MM2 ) /* t1 = (q1 - p1)*pa1 */ + PMULLW ( MM5, MM6 ) /* t2 = (q2 - p2)*pa2 */ + +#if GMBT_ROUNDOFF + PSRLW ( CONST(15), MM0 ) /* q1 > p1 ? 1 : 0 */ + PSRLW ( CONST(15), MM4 ) /* q2 > q2 ? 1 : 0 */ + + PSLLW ( CONST(8), MM0 ) /* q1 > p1 ? 0x100 : 0 */ + PSLLW ( CONST(8), MM4 ) /* q2 > q2 ? 0x100 : 0 */ + + PSUBW ( MM0, MM2 ) /* t1 -=? 0x100 */ + PSUBW ( MM4, MM7 ) /* t2 -=? 0x100 */ +#endif + +#else + PCMPEQW ( MM4, MM4 ) /* 0xffff | 0xffff | 0xffff | 0xffff */ + PUNPCKLBW ( MM0, MM4 ) /* 0x00ff | 0x00ff | 0x00ff | 0x00ff */ + MOVQ ( MM4, MM0 ) + + PMULLW ( MM3, MM2 ) /* p1*pa1 */ + PMULLW ( MM5, MM6 ) /* p2*pa2 */ + + PSUBW ( MM3, MM0 ) /* 255 - pa1 | 255 - pa1 | 255 - pa1 | 255 - pa1 */ + PSUBW ( MM5, MM4 ) /* 255 - pa2 | 255 - pa2 | 255 - pa2 | 255 - pa2 */ + + PMULLW ( MM0, MM1 ) /* q1*(255 - pa1) */ + PMULLW ( MM4, MM7 ) /* q2*(255 - pa2) */ + + PADDW ( MM1, MM2 ) /* t1 = p1*pa1 + q1*(255 - pa1) */ + PADDW ( MM7, MM6 ) /* t2 = p2*pa2 + q2*(255 - pa2) */ +#endif + +#if GMBT_ROUNDOFF + MOVQ ( CONTENT(const_80), MM4 ) + + PADDW ( MM4, MM2 ) /* t1 += 0x80 */ + PADDW ( MM4, MM6 ) /* t2 += 0x80 */ +#endif + +#if GMBT_GEOMETRIC_SERIES + MOVQ ( MM2, MM3 ) + MOVQ ( MM6, MM5 ) + + PSRLW ( CONST(8), MM3 ) /* t1 >> 8 */ + PSRLW ( CONST(8), MM5 ) /* t2 >> 8 */ + + PADDW ( MM3, MM2 ) /* t1 + (t1 >> 8) ~= (t1/255) << 8 */ + PADDW ( MM5, MM6 ) /* t2 + (t2 >> 8) ~= (t2/255) << 8 */ + +#if GMBT_GEOMETRIC_CORRECTION + PSRLW ( CONST(7), MM3 ) /* t1 >> 15 */ + PSRLW ( CONST(7), MM5 ) /* t2 >> 15 */ + + PADDW ( MM3, MM2 ) /* t1 + (t1 >> 8) + (t1 >>15) ~= (t1/255) << 8 */ + PADDW ( MM5, MM6 ) /* t2 + (t2 >> 8) + (t2 >>15) ~= (t2/255) << 8 */ +#endif +#endif + +#if GMBT_SIGNED_ARITHMETIC + PADDW ( MM1, MM2 ) /* (t1/255 + q1) << 8 */ + PADDW ( MM7, MM6 ) /* (t2/255 + q2) << 8 */ +#endif + + PSRLW ( CONST(8), MM2 ) /* sa1 | sb1 | sg1 | sr1 */ + PSRLW ( CONST(8), MM6 ) /* sa2 | sb2 | sg2 | sr2 */ + + PACKUSWB ( MM6, MM2 ) /* sa2 | sb2 | sg2 | sr2 | sa1 | sb1 | sg1 | sr1 */ + MOVQ ( MM2, REGIND(EDI) ) + +LLBL (GMBT_loop_continue): + + DEC_L ( ECX ) + DEC_L ( ECX ) /* n -= 2 */ + ADD_L ( CONST(2), EBX ) /* mask += 2 */ + ADD_L ( CONST(8), EDI ) /* rgba += 2 */ + ADD_L ( CONST(8), ESI ) /* dest += 2 */ + CMP_L ( CONST(2), ECX ) + JAE ( LLBL (GMBT_loop_begin) ) + +LLBL (GMBT_loop_end): + + CMP_L ( CONST(1), ECX ) + JB ( LLBL (GMBT_done) ) + + CMP_B ( CONST(0), REGIND(EBX) ) /* *mask == 0 */ + JE ( LLBL (GMBT_done) ) + + PXOR ( MM0, MM0 ) /* 0x0000 | 0x0000 | 0x0000 | 0x0000 */ + + MOVD ( REGIND(ESI), MM1 ) /* | | | | qa1 | qb1 | qg1 | qr1 */ + MOVD ( REGIND(EDI), MM2 ) /* | | | | pa1 | pb1 | pg1 | pr1 */ + + PUNPCKLBW ( MM0, MM1 ) /* qa1 | qb1 | qg1 | qr1 */ + PUNPCKLBW ( MM0, MM2 ) /* pa1 | pb1 | pg1 | pr1 */ + + MOVQ ( MM2, MM3 ) + + PUNPCKHWD ( MM3, MM3 ) /* pa1 | pa1 | | */ + PUNPCKHDQ ( MM3, MM3 ) /* pa1 | pa1 | pa1 | pa1 */ + +#if GMBT_ALPHA_PLUS_ONE + PCMPEQW ( MM4, MM4 ) /* 0xffff | 0xffff | 0xffff | 0xffff */ + + PSUBW ( MM4, MM3 ) /* pa1 + 1 | pa1 + 1 | pa1 + 1 | pa1 + 1 */ +#endif + +#if GMBT_SIGNED_ARITHMETIC + PSUBW ( MM1, MM2 ) /* pa1 - qa1 | pb1 - qb1 | pg1 - qg1 | pr1 - qr1 */ + + PSLLW ( CONST(8), MM1 ) /* q1 << 8 */ + +#if GMBT_ROUNDOFF + MOVQ ( MM2, MM4 ) +#endif + + PMULLW ( MM3, MM2 ) /* t1 = (q1 - p1)*pa1 */ + +#if GMBT_ROUNDOFF + PSRLW ( CONST(15), MM4 ) /* q1 > p1 ? 1 : 0 */ + + PSLLW ( CONST(8), MM4 ) /* q1 > p1 ? 0x100 : 0 */ + + PSUBW ( MM4, MM2 ) /* t1 -=? 0x100 */ +#endif + +#else + PCMPEQW ( MM4, MM4 ) /* 0xffff | 0xffff | 0xffff | 0xffff */ + PUNPCKLBW ( MM0, MM4 ) /* 0x00ff | 0x00ff | 0x00ff | 0x00ff */ + MOVQ ( MM4, MM0 ) + + PMULLW ( MM3, MM2 ) /* p1*pa1 */ + + PSUBW ( MM3, MM0 ) /* 255 - pa1 | 255 - pa1 | 255 - pa1 | 255 - pa1 */ + + PMULLW ( MM0, MM1 ) /* q1*(255 - pa1) */ + + PADDW ( MM1, MM2 ) /* t1 = p1*pa1 + q1*(255 - pa1) */ +#endif + +#if GMBT_ROUNDOFF + MOVQ ( CONTENT(const_80), MM4 ) + + PADDW ( MM4, MM2 ) /* t1 += 0x80 */ +#endif + +#if GMBT_GEOMETRIC_SERIES + MOVQ ( MM2, MM3 ) + + PSRLW ( CONST(8), MM3 ) /* t1 >> 8 */ + + PADDW ( MM3, MM2 ) /* t1 + (t1 >> 8) ~= (t1/255) << 8 */ +#endif + +#if GMBT_SIGNED_ARITHMETIC + PADDW ( MM1, MM2 ) /* (t1/255 + q1) << 8 */ +#endif + + PSRLW ( CONST(8), MM2 ) /* sa1 | sb1 | sg1 | sr1 */ + + PACKUSWB ( MM0, MM2 ) /* | | | | sa1 | sb1 | sg1 | sr1 */ + MOVD ( MM2, REGIND(EDI) ) + +LLBL (GMBT_done): EMMS -LLBL(GMBT_3): - - MOV_L ( REGOFF(12, EBP), EAX ) - AND_L ( CONST(1), EAX ) - TEST_L ( EAX, EAX ) - JE ( LLBL(GMBT_9) ) - MOV_L ( REGOFF(12, EBP), EAX ) - LEA_L ( REGDIS(0,EAX,4), EDX ) - MOV_L ( EDX, EAX ) - ADD_L ( REGOFF(20, EBP), EAX ) - LEA_L ( REGOFF(-1, EAX), EDX ) - XOR_L ( EAX, EAX ) - MOV_B ( REGIND(EDX), AL ) - MOV_L ( EAX, REGOFF(-52, EBP) ) - MOV_L ( CONST(255), EAX ) - MOV_L ( EAX, EBX ) - SUB_L ( REGOFF(-52, EBP), EBX ) - MOV_L ( EBX, REGOFF(-48, EBP) ) - MOV_L ( REGOFF(12, EBP), EAX ) - LEA_L ( REGDIS(0,EAX,4), EDX ) - MOV_L ( EDX, EAX ) - ADD_L ( REGOFF(20, EBP), EAX ) - LEA_L ( REGOFF(-4, EAX), EDX ) - XOR_L ( ECX, ECX ) - MOV_B ( REGIND(EDX), CL ) - MOV_L ( ECX, EAX ) - IMUL_L ( REGOFF(-52, EBP), EAX ) - MOV_L ( REGOFF(12, EBP), EDX ) - LEA_L ( REGDIS(0,EDX,4), ECX ) - MOV_L ( ECX, EDX ) - ADD_L ( REGOFF(24, EBP), EDX ) - LEA_L ( REGOFF(-4, EDX), ECX ) - XOR_L ( EDX, EDX ) - MOV_B ( REGIND(ECX), DL ) - MOV_L ( EDX, ECX ) - IMUL_L ( REGOFF(-48, EBP), ECX ) - ADD_L ( ECX, EAX ) - MOV_L ( EAX, EBX ) - SAR_L ( CONST(8), EBX ) - MOV_L ( EBX, REGOFF(-44, EBP) ) - MOV_L ( REGOFF(12, EBP), EAX ) - LEA_L ( REGDIS(0,EAX,4), EDX ) - MOV_L ( EDX, EAX ) - ADD_L ( REGOFF(20, EBP), EAX ) - LEA_L ( REGOFF(-3, EAX), EDX ) - XOR_L ( ECX, ECX ) - MOV_B ( REGIND(EDX), CL ) - MOV_L ( ECX, EAX ) - IMUL_L ( REGOFF(-52, EBP), EAX ) - MOV_L ( REGOFF(12, EBP), EDX ) - LEA_L ( REGDIS(0,EDX,4), ECX ) - MOV_L ( ECX, EDX ) - ADD_L ( REGOFF(24, EBP), EDX ) - LEA_L ( REGOFF(-3, EDX), ECX ) - XOR_L ( EDX, EDX ) - MOV_B ( REGIND(ECX), DL ) - MOV_L ( EDX, ECX ) - IMUL_L ( REGOFF(-48, EBP), ECX ) - ADD_L ( ECX, EAX ) - MOV_L ( EAX, EBX ) - SAR_L ( CONST(8), EBX ) - MOV_L ( EBX, REGOFF(-40, EBP) ) - MOV_L ( REGOFF(12, EBP), EAX ) - LEA_L ( REGDIS(0,EAX,4), EDX ) - MOV_L ( EDX, EAX ) - ADD_L ( REGOFF(20, EBP), EAX ) - LEA_L ( REGOFF(-2, EAX), EDX ) - XOR_L ( ECX, ECX ) - MOV_B ( REGIND(EDX), CL ) - MOV_L ( ECX, EAX ) - IMUL_L ( REGOFF(-52, EBP), EAX ) - MOV_L ( REGOFF(12, EBP), EDX ) - LEA_L ( REGDIS(0,EDX,4), ECX ) - MOV_L ( ECX, EDX ) - ADD_L ( REGOFF(24, EBP), EDX ) - LEA_L ( REGOFF(-2, EDX), ECX ) - XOR_L ( EDX, EDX ) - MOV_B ( REGIND(ECX), DL ) - MOV_L ( EDX, ECX ) - IMUL_L ( REGOFF(-48, EBP), ECX ) - ADD_L ( ECX, EAX ) - MOV_L ( EAX, EBX ) - SAR_L ( CONST(8), EBX ) - MOV_L ( EBX, REGOFF(-36, EBP) ) - MOV_L ( REGOFF(12, EBP), EAX ) - LEA_L ( REGDIS(0,EAX,4), EDX ) - MOV_L ( EDX, EAX ) - ADD_L ( REGOFF(20, EBP), EAX ) - LEA_L ( REGOFF(-1, EAX), EDX ) - XOR_L ( ECX, ECX ) - MOV_B ( REGIND(EDX), CL ) - MOV_L ( ECX, EAX ) - IMUL_L ( REGOFF(-52, EBP), EAX ) - MOV_L ( REGOFF(12, EBP), EDX ) - LEA_L ( REGDIS(0,EDX,4), ECX ) - MOV_L ( ECX, EDX ) - ADD_L ( REGOFF(24, EBP), EDX ) - LEA_L ( REGOFF(-1, EDX), ECX ) - XOR_L ( EDX, EDX ) - MOV_B ( REGIND(ECX), DL ) - MOV_L ( EDX, ECX ) - IMUL_L ( REGOFF(-48, EBP), ECX ) - ADD_L ( ECX, EAX ) - MOV_L ( EAX, EBX ) - SAR_L ( CONST(8), EBX ) - MOV_L ( EBX, REGOFF(-32, EBP) ) - MOV_L ( REGOFF(12, EBP), EAX ) - LEA_L ( REGDIS(0,EAX,4), EDX ) - MOV_L ( EDX, EAX ) - ADD_L ( REGOFF(20, EBP), EAX ) - LEA_L ( REGOFF(-4, EAX), EDX ) - MOV_B ( REGOFF(-44, EBP), AL ) - MOV_B ( AL, REGIND(EDX) ) - MOV_L ( REGOFF(12, EBP), EAX ) - LEA_L ( REGDIS(0,EAX,4), EDX ) - MOV_L ( EDX, EAX ) - ADD_L ( REGOFF(20, EBP), EAX ) - LEA_L ( REGOFF(-3, EAX), EDX ) - MOV_B ( REGOFF(-40, EBP), AL ) - MOV_B ( AL, REGIND(EDX) ) - MOV_L ( REGOFF(12, EBP), EAX ) - LEA_L ( REGDIS(0,EAX,4), EDX ) - MOV_L ( EDX, EAX ) - ADD_L ( REGOFF(20, EBP), EAX ) - LEA_L ( REGOFF(-2, EAX), EDX ) - MOV_B ( REGOFF(-36, EBP), AL ) - MOV_B ( AL, REGIND(EDX) ) - MOV_L ( REGOFF(12, EBP), EAX ) - LEA_L ( REGDIS(0,EAX,4), EDX ) - MOV_L ( EDX, EAX ) - ADD_L ( REGOFF(20, EBP), EAX ) - LEA_L ( REGOFF(-1, EAX), EDX ) - MOV_B ( REGOFF(-32, EBP), AL ) - MOV_B ( AL, REGIND(EDX) ) -LLBL(GMBT_9): - -LLBL(GMBT_1): - - MOV_L ( REGOFF(-56, EBP), EBX ) - MOV_L ( EBP, ESP ) - POP_L ( EBP ) +LLBL (GMBT_return): + + POP_L ( EBX ) + POP_L ( EDI ) + POP_L ( ESI ) + MOV_L ( EBP, ESP ) + POP_L ( EBP ) RET diff --git a/xc/extras/Mesa/src/api_arrayelt.c b/xc/extras/Mesa/src/api_arrayelt.c index 6704b7bf1..33c3f9dd9 100644 --- a/xc/extras/Mesa/src/api_arrayelt.c +++ b/xc/extras/Mesa/src/api_arrayelt.c @@ -1,7 +1,7 @@ /* * Mesa 3-D graphics library - * Version: 4.0.2 + * Version: 4.0.3 * * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * @@ -62,7 +62,7 @@ typedef struct { static void (*colorfuncs[2][8])( const void * ) = { { (array_func)glColor3bv, - (array_func)glColor3ub, + (array_func)glColor3ubv, (array_func)glColor3sv, (array_func)glColor3usv, (array_func)glColor3iv, @@ -71,7 +71,7 @@ static void (*colorfuncs[2][8])( const void * ) = { (array_func)glColor3dv }, { (array_func)glColor4bv, - (array_func)glColor4ub, + (array_func)glColor4ubv, (array_func)glColor4sv, (array_func)glColor4usv, (array_func)glColor4iv, @@ -274,7 +274,7 @@ static void _ae_update_state( GLcontext *ctx ) AEcontext *actx = AE_CONTEXT(ctx); AEtexarray *ta = actx->texarrays; AEarray *aa = actx->arrays; - int i; + GLuint i; for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++) if (ctx->Array.TexCoord[i].Enabled) { diff --git a/xc/extras/Mesa/src/api_noop.c b/xc/extras/Mesa/src/api_noop.c index 6eefdec1c..fb34dd3de 100644 --- a/xc/extras/Mesa/src/api_noop.c +++ b/xc/extras/Mesa/src/api_noop.c @@ -248,7 +248,7 @@ void _mesa_noop_MultiTexCoord1fARB( GLenum target, GLfloat a ) } } -void _mesa_noop_MultiTexCoord1fvARB( GLenum target, GLfloat *v ) +void _mesa_noop_MultiTexCoord1fvARB( GLenum target, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLuint unit = target - GL_TEXTURE0_ARB; @@ -282,7 +282,7 @@ void _mesa_noop_MultiTexCoord2fARB( GLenum target, GLfloat a, GLfloat b ) } } -void _mesa_noop_MultiTexCoord2fvARB( GLenum target, GLfloat *v ) +void _mesa_noop_MultiTexCoord2fvARB( GLenum target, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLuint unit = target - GL_TEXTURE0_ARB; @@ -316,7 +316,7 @@ void _mesa_noop_MultiTexCoord3fARB( GLenum target, GLfloat a, GLfloat b, GLfloat } } -void _mesa_noop_MultiTexCoord3fvARB( GLenum target, GLfloat *v ) +void _mesa_noop_MultiTexCoord3fvARB( GLenum target, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLuint unit = target - GL_TEXTURE0_ARB; @@ -351,7 +351,7 @@ void _mesa_noop_MultiTexCoord4fARB( GLenum target, GLfloat a, GLfloat b, } } -void _mesa_noop_MultiTexCoord4fvARB( GLenum target, GLfloat *v ) +void _mesa_noop_MultiTexCoord4fvARB( GLenum target, const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLuint unit = target - GL_TEXTURE0_ARB; @@ -418,7 +418,7 @@ void _mesa_noop_TexCoord1f( GLfloat a ) dest[3] = 1; } -void _mesa_noop_TexCoord1fv( GLfloat *v ) +void _mesa_noop_TexCoord1fv( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Texcoord[0]; @@ -438,7 +438,7 @@ void _mesa_noop_TexCoord2f( GLfloat a, GLfloat b ) dest[3] = 1; } -void _mesa_noop_TexCoord2fv( GLfloat *v ) +void _mesa_noop_TexCoord2fv( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Texcoord[0]; @@ -458,7 +458,7 @@ void _mesa_noop_TexCoord3f( GLfloat a, GLfloat b, GLfloat c ) dest[3] = 1; } -void _mesa_noop_TexCoord3fv( GLfloat *v ) +void _mesa_noop_TexCoord3fv( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Texcoord[0]; @@ -478,7 +478,7 @@ void _mesa_noop_TexCoord4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ) COPY_FLOAT(dest[3], d); } -void _mesa_noop_TexCoord4fv( GLfloat *v ) +void _mesa_noop_TexCoord4fv( const GLfloat *v ) { GET_CURRENT_CONTEXT(ctx); GLfloat *dest = ctx->Current.Texcoord[0]; @@ -488,6 +488,40 @@ void _mesa_noop_TexCoord4fv( GLfloat *v ) COPY_FLOAT(dest[3], v[3]); } +/* Useful outside begin/end? + */ +void _mesa_noop_Vertex2fv( const GLfloat *v ) +{ + (void) v; +} + +void _mesa_noop_Vertex3fv( const GLfloat *v ) +{ + (void) v; +} + +void _mesa_noop_Vertex4fv( const GLfloat *v ) +{ + (void) v; +} + +void _mesa_noop_Vertex2f( GLfloat a, GLfloat b ) +{ + (void) a; (void) b; +} + +void _mesa_noop_Vertex3f( GLfloat a, GLfloat b, GLfloat c ) +{ + (void) a; (void) b; (void) c; +} + +void _mesa_noop_Vertex4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ) +{ + (void) a; (void) b; (void) c; (void) d; +} + + + /* Execute a glRectf() function. This is not suitable for GL_COMPILE * modes (as the test for outside begin/end is not compiled), * but may be useful for drivers in circumstances which exclude diff --git a/xc/extras/Mesa/src/api_noop.h b/xc/extras/Mesa/src/api_noop.h index 7eafaedaf..fcfa16c29 100644 --- a/xc/extras/Mesa/src/api_noop.h +++ b/xc/extras/Mesa/src/api_noop.h @@ -74,22 +74,22 @@ extern void _mesa_noop_Color3fv( const GLfloat *v ); extern void _mesa_noop_MultiTexCoord1fARB( GLenum target, GLfloat a ); -extern void _mesa_noop_MultiTexCoord1fvARB( GLenum target, GLfloat *v ); +extern void _mesa_noop_MultiTexCoord1fvARB( GLenum target, const GLfloat *v ); extern void _mesa_noop_MultiTexCoord2fARB( GLenum target, GLfloat a, GLfloat b ); -extern void _mesa_noop_MultiTexCoord2fvARB( GLenum target, GLfloat *v ); +extern void _mesa_noop_MultiTexCoord2fvARB( GLenum target, const GLfloat *v ); extern void _mesa_noop_MultiTexCoord3fARB( GLenum target, GLfloat a, GLfloat b, GLfloat c); -extern void _mesa_noop_MultiTexCoord3fvARB( GLenum target, GLfloat *v ); +extern void _mesa_noop_MultiTexCoord3fvARB( GLenum target, const GLfloat *v ); extern void _mesa_noop_MultiTexCoord4fARB( GLenum target, GLfloat a, GLfloat b, GLfloat c, GLfloat d ); -extern void _mesa_noop_MultiTexCoord4fvARB( GLenum target, GLfloat *v ); +extern void _mesa_noop_MultiTexCoord4fvARB( GLenum target, const GLfloat *v ); extern void _mesa_noop_SecondaryColor3ubEXT( GLubyte a, GLubyte b, GLubyte c ); @@ -101,19 +101,31 @@ extern void _mesa_noop_SecondaryColor3fvEXT( const GLfloat *v ); extern void _mesa_noop_TexCoord1f( GLfloat a ); -extern void _mesa_noop_TexCoord1fv( GLfloat *v ); +extern void _mesa_noop_TexCoord1fv( const GLfloat *v ); extern void _mesa_noop_TexCoord2f( GLfloat a, GLfloat b ); -extern void _mesa_noop_TexCoord2fv( GLfloat *v ); +extern void _mesa_noop_TexCoord2fv( const GLfloat *v ); extern void _mesa_noop_TexCoord3f( GLfloat a, GLfloat b, GLfloat c ); -extern void _mesa_noop_TexCoord3fv( GLfloat *v ); +extern void _mesa_noop_TexCoord3fv( const GLfloat *v ); extern void _mesa_noop_TexCoord4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ); -extern void _mesa_noop_TexCoord4fv( GLfloat *v ); +extern void _mesa_noop_TexCoord4fv( const GLfloat *v ); + +extern void _mesa_noop_Vertex2fv( const GLfloat *v ); + +extern void _mesa_noop_Vertex3fv( const GLfloat *v ); + +extern void _mesa_noop_Vertex4fv( const GLfloat *v ); + +extern void _mesa_noop_Vertex2f( GLfloat a, GLfloat b ); + +extern void _mesa_noop_Vertex3f( GLfloat a, GLfloat b, GLfloat c ); + +extern void _mesa_noop_Vertex4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d ); /* Not strictly a noop -- translate Rectf down to Begin/End and diff --git a/xc/extras/Mesa/src/buffers.c b/xc/extras/Mesa/src/buffers.c index 812096bcd..7481f5ad8 100644 --- a/xc/extras/Mesa/src/buffers.c +++ b/xc/extras/Mesa/src/buffers.c @@ -1,7 +1,7 @@ /* * Mesa 3-D graphics library - * Version: 4.0.2 + * Version: 4.0.3 * * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * @@ -363,8 +363,7 @@ _mesa_ResizeBuffersMESA( void ) (*ctx->Driver.GetBufferSize)( buffer, &buf_width, &buf_height ); /* see if size of device driver's color buffer (window) has changed */ - if (buffer->Width == (GLint) buf_width && - buffer->Height == (GLint) buf_height) + if (buffer->Width == buf_width && buffer->Height == buf_height) return; /* size is as expected */ buffer->Width = buf_width; @@ -381,8 +380,7 @@ _mesa_ResizeBuffersMESA( void ) (*ctx->Driver.GetBufferSize)( buffer, &buf_width, &buf_height ); /* see if size of device driver's color buffer (window) has changed */ - if (buffer->Width == (GLint) buf_width && - buffer->Height == (GLint) buf_height) + if (buffer->Width == buf_width && buffer->Height == buf_height) return; /* size is as expected */ buffer->Width = buf_width; diff --git a/xc/extras/Mesa/src/context.c b/xc/extras/Mesa/src/context.c index 6bff2915e..689fd5b4e 100644 --- a/xc/extras/Mesa/src/context.c +++ b/xc/extras/Mesa/src/context.c @@ -70,22 +70,11 @@ #endif #ifndef MESA_VERBOSE -int MESA_VERBOSE = 0 -/* | VERBOSE_PIPELINE */ -/* | VERBOSE_IMMEDIATE */ -/* | VERBOSE_VARRAY */ -/* | VERBOSE_TEXTURE */ -/* | VERBOSE_API */ -/* | VERBOSE_DRIVER */ -/* | VERBOSE_STATE */ -/* | VERBOSE_DISPLAY_LIST */ -; +int MESA_VERBOSE = 0; #endif #ifndef MESA_DEBUG_FLAGS -int MESA_DEBUG_FLAGS = 0 -/* | DEBUG_ALWAYS_FLUSH */ -; +int MESA_DEBUG_FLAGS = 0; #endif /**********************************************************************/ @@ -1387,6 +1376,44 @@ alloc_proxy_textures( GLcontext *ctx ) } +static void add_debug_flags( const char *debug ) +{ +#ifdef MESA_DEBUG + if (strstr(debug, "varray")) + MESA_VERBOSE |= VERBOSE_VARRAY; + + if (strstr(debug, "tex")) + MESA_VERBOSE |= VERBOSE_TEXTURE; + + if (strstr(debug, "imm")) + MESA_VERBOSE |= VERBOSE_IMMEDIATE; + + if (strstr(debug, "pipe")) + MESA_VERBOSE |= VERBOSE_PIPELINE; + + if (strstr(debug, "driver")) + MESA_VERBOSE |= VERBOSE_DRIVER; + + if (strstr(debug, "state")) + MESA_VERBOSE |= VERBOSE_STATE; + + if (strstr(debug, "api")) + MESA_VERBOSE |= VERBOSE_API; + + if (strstr(debug, "list")) + MESA_VERBOSE |= VERBOSE_DISPLAY_LIST; + + if (strstr(debug, "lighting")) + MESA_VERBOSE |= VERBOSE_LIGHTING; + + /* Debug flag: + */ + if (strstr(debug, "flush")) + MESA_DEBUG_FLAGS |= DEBUG_ALWAYS_FLUSH; +#endif +} + + /* * Initialize a GLcontext struct. This includes allocating all the * other structs and arrays which hang off of the context by pointers. @@ -1550,6 +1577,13 @@ _mesa_initialize_context( GLcontext *ctx, trInitDispatch(ctx->TraceDispatch); #endif + + if (getenv("MESA_DEBUG")) + add_debug_flags(getenv("MESA_DEBUG")); + + if (getenv("MESA_VERBOSE")) + add_debug_flags(getenv("MESA_VERBOSE")); + return GL_TRUE; } diff --git a/xc/extras/Mesa/src/dlist.c b/xc/extras/Mesa/src/dlist.c index b88890981..5fe6124ec 100644 --- a/xc/extras/Mesa/src/dlist.c +++ b/xc/extras/Mesa/src/dlist.c @@ -4779,12 +4779,11 @@ _mesa_EndList( void ) { GET_CURRENT_CONTEXT(ctx); FLUSH_CURRENT(ctx, 0); /* must be called before assert */ - ASSERT_OUTSIDE_BEGIN_END(ctx); + ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); + if (MESA_VERBOSE&VERBOSE_API) fprintf(stderr, "glEndList\n"); - ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx ); /* ??? */ - /* Check that a list is under construction */ if (!ctx->CurrentListPtr) { _mesa_error( ctx, GL_INVALID_OPERATION, "glEndList" ); @@ -4811,7 +4810,6 @@ _mesa_EndList( void ) ctx->CurrentDispatch = ctx->Exec; _glapi_set_dispatch( ctx->CurrentDispatch ); - } @@ -4825,6 +4823,10 @@ _mesa_CallList( GLuint list ) /* VERY IMPORTANT: Save the CompileFlag status, turn it off, */ /* execute the display list, and restore the CompileFlag. */ + + if (MESA_VERBOSE & VERBOSE_API) + fprintf(stderr, "_mesa_CallList %d\n", list); + /* mesa_print_display_list( list ); */ save_compile_flag = ctx->CompileFlag; @@ -4855,6 +4857,9 @@ _mesa_CallLists( GLsizei n, GLenum type, const GLvoid *lists ) GLint i; GLboolean save_compile_flag; + if (MESA_VERBOSE & VERBOSE_API) + fprintf(stderr, "_mesa_CallLists %d\n", n); + /* Save the CompileFlag status, turn it off, execute display list, * and restore the CompileFlag. */ diff --git a/xc/extras/Mesa/src/get.c b/xc/extras/Mesa/src/get.c index 2627a1302..a59897d09 100644 --- a/xc/extras/Mesa/src/get.c +++ b/xc/extras/Mesa/src/get.c @@ -5368,8 +5368,8 @@ _mesa_GetString( GLenum name ) GET_CURRENT_CONTEXT(ctx); static const char *vendor = "Brian Paul"; static const char *renderer = "Mesa"; - static const char *version_1_2 = "1.2 Mesa 4.0.2"; - static const char *version_1_3 = "1.3 Mesa 4.0.2"; + static const char *version_1_2 = "1.2 Mesa 4.0.3"; + static const char *version_1_3 = "1.3 Mesa 4.0.3"; ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); diff --git a/xc/extras/Mesa/src/mmath.h b/xc/extras/Mesa/src/mmath.h index 4f7d63c95..cfc8cb727 100644 --- a/xc/extras/Mesa/src/mmath.h +++ b/xc/extras/Mesa/src/mmath.h @@ -430,7 +430,7 @@ static INLINE int iceil(float f) /* Convert GLubyte in [0,255] to GLfloat in [0.0,1.0] */ extern float _mesa_ubyte_to_float_color_tab[256]; -#define UBYTE_TO_FLOAT(u) _mesa_ubyte_to_float_color_tab[u] +#define UBYTE_TO_FLOAT(u) _mesa_ubyte_to_float_color_tab[(unsigned int)u] /* Convert GLfloat in [0.0,1.0] to GLubyte in [0,255] */ #define FLOAT_TO_UBYTE(X) ((GLubyte) (GLint) (((X)) * 255.0F)) diff --git a/xc/extras/Mesa/src/mtypes.h b/xc/extras/Mesa/src/mtypes.h index bddaf49c4..5e9efe7b1 100644 --- a/xc/extras/Mesa/src/mtypes.h +++ b/xc/extras/Mesa/src/mtypes.h @@ -1608,6 +1608,9 @@ struct __GLcontextRec { /* The string names for GL_POINT, GL_LINE_LOOP, etc */ extern const char *_mesa_prim_name[GL_POLYGON+4]; +#ifndef MESA_DEBUG +#define MESA_DEBUG +#endif #ifdef MESA_DEBUG extern int MESA_VERBOSE; @@ -1629,8 +1632,10 @@ enum _verbose { VERBOSE_DRIVER = 0x0010, VERBOSE_STATE = 0x0020, VERBOSE_API = 0x0040, - VERBOSE_DISPLAY_LIST = 0x0200, - VERBOSE_LIGHTING = 0x0400 + VERBOSE_DISPLAY_LIST = 0x0100, + VERBOSE_LIGHTING = 0x0200, + VERBOSE_PRIMS = 0x0400, + VERBOSE_VERTS = 0x0800 }; @@ -1642,22 +1647,28 @@ enum _debug { #define Elements(x) sizeof(x)/sizeof(*(x)) - +#ifndef __GNUC__ +#define __FUNCTION__ "some function" +#endif /* Eventually let the driver specify what statechanges require a flush: */ -#define FLUSH_VERTICES(ctx, newstate) \ -do { \ - if (ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES) \ - ctx->Driver.FlushVertices(ctx, FLUSH_STORED_VERTICES); \ - ctx->NewState |= newstate; \ +#define FLUSH_VERTICES(ctx, newstate) \ +do { \ + if (MESA_VERBOSE & VERBOSE_STATE) \ + fprintf(stderr, "FLUSH_VERTICES in %s\n", __FUNCTION__); \ + if (ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES) \ + ctx->Driver.FlushVertices(ctx, FLUSH_STORED_VERTICES); \ + ctx->NewState |= newstate; \ } while (0) -#define FLUSH_CURRENT(ctx, newstate) \ -do { \ - if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) \ - ctx->Driver.FlushVertices(ctx, FLUSH_UPDATE_CURRENT); \ - ctx->NewState |= newstate; \ +#define FLUSH_CURRENT(ctx, newstate) \ +do { \ + if (MESA_VERBOSE & VERBOSE_STATE) \ + fprintf(stderr, "FLUSH_CURRENT in %s\n", __FUNCTION__); \ + if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) \ + ctx->Driver.FlushVertices(ctx, FLUSH_UPDATE_CURRENT); \ + ctx->NewState |= newstate; \ } while (0) #define ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval) \ diff --git a/xc/extras/Mesa/src/state.c b/xc/extras/Mesa/src/state.c index d60e158f5..e77dc152b 100644 --- a/xc/extras/Mesa/src/state.c +++ b/xc/extras/Mesa/src/state.c @@ -860,7 +860,7 @@ void _mesa_update_state( GLcontext *ctx ) const GLuint oldneedeyecoords = ctx->_NeedEyeCoords; if (MESA_VERBOSE & VERBOSE_STATE) - _mesa_print_state("", new_state); + _mesa_print_state("_mesa_update_state", new_state); if (new_state & _NEW_MODELVIEW) _math_matrix_analyse( &ctx->ModelView ); diff --git a/xc/extras/Mesa/src/swrast/s_blend.c b/xc/extras/Mesa/src/swrast/s_blend.c index da3f6f351..8303867c5 100644 --- a/xc/extras/Mesa/src/swrast/s_blend.c +++ b/xc/extras/Mesa/src/swrast/s_blend.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 4.0.1 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -624,10 +624,8 @@ void _swrast_choose_blend_func( GLcontext *ctx ) SWRAST_CONTEXT(ctx)->BlendFunc = blend_general; } else if (eq==GL_FUNC_ADD_EXT && srcRGB==GL_SRC_ALPHA - && dstRGB==GL_ONE_MINUS_SRC_ALPHA) - { - /* XXX It looks like the MMX blend code is broken. Disable for now. */ -#if 0 && defined(USE_MMX_ASM) + && dstRGB==GL_ONE_MINUS_SRC_ALPHA) { +#if defined(USE_MMX_ASM) if ( cpu_has_mmx ) { SWRAST_CONTEXT(ctx)->BlendFunc = _mesa_mmx_blend_transparency; } diff --git a/xc/extras/Mesa/src/swrast/s_context.c b/xc/extras/Mesa/src/swrast/s_context.c index 6e0130c9c..b7272a35d 100644 --- a/xc/extras/Mesa/src/swrast/s_context.c +++ b/xc/extras/Mesa/src/swrast/s_context.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -74,9 +74,9 @@ _swrast_update_rasterflags( GLcontext *ctx ) RasterMask |= ALPHABUF_BIT; if ( ctx->Viewport.X < 0 - || ctx->Viewport.X + ctx->Viewport.Width > ctx->DrawBuffer->Width + || ctx->Viewport.X + ctx->Viewport.Width > (GLint) ctx->DrawBuffer->Width || ctx->Viewport.Y < 0 - || ctx->Viewport.Y + ctx->Viewport.Height > ctx->DrawBuffer->Height) { + || ctx->Viewport.Y + ctx->Viewport.Height > (GLint) ctx->DrawBuffer->Height) { RasterMask |= WINCLIP_BIT; } diff --git a/xc/extras/Mesa/src/swrast/s_copypix.c b/xc/extras/Mesa/src/swrast/s_copypix.c index e6e88ded8..d9b575dfc 100644 --- a/xc/extras/Mesa/src/swrast/s_copypix.c +++ b/xc/extras/Mesa/src/swrast/s_copypix.c @@ -1,7 +1,7 @@ /* * Mesa 3-D graphics library - * Version: 4.0.2 + * Version: 4.0.3 * * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * @@ -127,7 +127,7 @@ copy_conv_rgba_pixels(GLcontext *ctx, GLint srcx, GLint srcy, if (SWRAST_CONTEXT(ctx)->_RasterMask == 0 && !zoom && destx >= 0 - && destx + width <= ctx->DrawBuffer->Width) { + && destx + width <= (GLint) ctx->DrawBuffer->Width) { quick_draw = GL_TRUE; } else { @@ -285,7 +285,7 @@ copy_conv_rgba_pixels(GLcontext *ctx, GLint srcx, GLint srcy, /* write row to framebuffer */ dy = desty + row; - if (quick_draw && dy >= 0 && dy < ctx->DrawBuffer->Height) { + if (quick_draw && dy >= 0 && dy < (GLint) ctx->DrawBuffer->Height) { (*swrast->Driver.WriteRGBASpan)( ctx, width, destx, dy, (const GLchan (*)[4])rgba, NULL ); } @@ -365,7 +365,7 @@ copy_rgba_pixels(GLcontext *ctx, GLint srcx, GLint srcy, if (SWRAST_CONTEXT(ctx)->_RasterMask == 0 && !zoom && destx >= 0 - && destx + width <= ctx->DrawBuffer->Width) { + && destx + width <= (GLint) ctx->DrawBuffer->Width) { quick_draw = GL_TRUE; } else { @@ -555,7 +555,7 @@ copy_rgba_pixels(GLcontext *ctx, GLint srcx, GLint srcy, UNDEFARRAY(q); } - if (quick_draw && dy >= 0 && dy < ctx->DrawBuffer->Height) { + if (quick_draw && dy >= 0 && dy < (GLint) ctx->DrawBuffer->Height) { (*swrast->Driver.WriteRGBASpan)( ctx, width, destx, dy, (const GLchan (*)[4])rgba, NULL ); } diff --git a/xc/extras/Mesa/src/swrast/s_depth.c b/xc/extras/Mesa/src/swrast/s_depth.c index 1270102e8..a07e2f10b 100644 --- a/xc/extras/Mesa/src/swrast/s_depth.c +++ b/xc/extras/Mesa/src/swrast/s_depth.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -1337,8 +1337,8 @@ _mesa_read_depth_span( GLcontext *ctx, { SWcontext *swrast = SWRAST_CONTEXT(ctx); - if (y < 0 || y >= ctx->DrawBuffer->Height || - x + (GLint) n <= 0 || x >= ctx->DrawBuffer->Width) { + if (y < 0 || y >= (GLint) ctx->DrawBuffer->Height || + x + n <= 0 || x >= (GLint) ctx->DrawBuffer->Width) { /* span is completely outside framebuffer */ GLint i; for (i = 0; i < n; i++) @@ -1355,8 +1355,8 @@ _mesa_read_depth_span( GLcontext *ctx, n -= dx; depth += dx; } - if (x + n > ctx->DrawBuffer->Width) { - GLint dx = x + n - ctx->DrawBuffer->Width; + if (x + n > (GLint) ctx->DrawBuffer->Width) { + GLint dx = x + n - (GLint) ctx->DrawBuffer->Width; GLint i; for (i = 0; i < dx; i++) depth[n - i - 1] = 0; @@ -1411,8 +1411,8 @@ _mesa_read_depth_span_float( GLcontext *ctx, SWcontext *swrast = SWRAST_CONTEXT(ctx); const GLfloat scale = 1.0F / ctx->DepthMaxF; - if (y < 0 || y >= ctx->DrawBuffer->Height || - x + (GLint) n <= 0 || x >= ctx->DrawBuffer->Width) { + if (y < 0 || y >= (GLint) ctx->DrawBuffer->Height || + x + n <= 0 || x >= (GLint) ctx->DrawBuffer->Width) { /* span is completely outside framebuffer */ GLint i; for (i = 0; i < n; i++) @@ -1428,8 +1428,8 @@ _mesa_read_depth_span_float( GLcontext *ctx, n -= dx; x = 0; } - if (x + n > ctx->DrawBuffer->Width) { - GLint dx = x + n - ctx->DrawBuffer->Width; + if (x + n > (GLint) ctx->DrawBuffer->Width) { + GLint dx = x + n - (GLint) ctx->DrawBuffer->Width; GLint i; for (i = 0; i < dx; i++) depth[n - i - 1] = 0.0F; diff --git a/xc/extras/Mesa/src/swrast/s_drawpix.c b/xc/extras/Mesa/src/swrast/s_drawpix.c index ca3d1dee3..952e13fd3 100644 --- a/xc/extras/Mesa/src/swrast/s_drawpix.c +++ b/xc/extras/Mesa/src/swrast/s_drawpix.c @@ -1,7 +1,7 @@ /* * Mesa 3-D graphics library - * Version: 4.0.2 + * Version: 4.0.3 * * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * @@ -762,8 +762,8 @@ draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y, if (SWRAST_CONTEXT(ctx)->_RasterMask == 0 && !zoom && x >= 0 && y >= 0 - && x + width <= ctx->DrawBuffer->Width - && y + height <= ctx->DrawBuffer->Height) { + && x + width <= (GLint) ctx->DrawBuffer->Width + && y + height <= (GLint) ctx->DrawBuffer->Height) { quickDraw = GL_TRUE; } else { diff --git a/xc/extras/Mesa/src/swrast/s_imaging.c b/xc/extras/Mesa/src/swrast/s_imaging.c index 174b99e05..d334b2e65 100644 --- a/xc/extras/Mesa/src/swrast/s_imaging.c +++ b/xc/extras/Mesa/src/swrast/s_imaging.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -53,7 +53,7 @@ _swrast_CopyColorTable( GLcontext *ctx, (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, ctx->Color.DriverDrawBuffer ); - glColorTable(target, internalformat, width, GL_RGBA, GL_UNSIGNED_BYTE, data); + glColorTable(target, internalformat, width, GL_RGBA, CHAN_TYPE, data); } void @@ -77,7 +77,7 @@ _swrast_CopyColorSubTable( GLcontext *ctx,GLenum target, GLsizei start, (*swrast->Driver.SetReadBuffer)( ctx, ctx->DrawBuffer, ctx->Color.DriverDrawBuffer ); - glColorSubTable(target, start, width, GL_RGBA, GL_UNSIGNED_BYTE, data); + glColorSubTable(target, start, width, GL_RGBA, CHAN_TYPE, data); } diff --git a/xc/extras/Mesa/src/swrast/s_readpix.c b/xc/extras/Mesa/src/swrast/s_readpix.c index 1e1693a66..1846552bf 100644 --- a/xc/extras/Mesa/src/swrast/s_readpix.c +++ b/xc/extras/Mesa/src/swrast/s_readpix.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -250,8 +250,8 @@ read_fast_rgba_pixels( GLcontext *ctx, readWidth += srcX; srcX = 0; } - if (srcX + readWidth > ctx->ReadBuffer->Width) - readWidth -= (srcX + readWidth - ctx->ReadBuffer->Width); + if (srcX + readWidth > (GLint) ctx->ReadBuffer->Width) + readWidth -= (srcX + readWidth - (GLint) ctx->ReadBuffer->Width); if (readWidth <= 0) return GL_TRUE; @@ -261,8 +261,8 @@ read_fast_rgba_pixels( GLcontext *ctx, readHeight += srcY; srcY = 0; } - if (srcY + readHeight > ctx->ReadBuffer->Height) - readHeight -= (srcY + readHeight - ctx->ReadBuffer->Height); + if (srcY + readHeight > (GLint) ctx->ReadBuffer->Height) + readHeight -= (srcY + readHeight - (GLint) ctx->ReadBuffer->Height); if (readHeight <= 0) return GL_TRUE; diff --git a/xc/extras/Mesa/src/swrast/s_span.c b/xc/extras/Mesa/src/swrast/s_span.c index ba24b86c7..3f90c40a6 100644 --- a/xc/extras/Mesa/src/swrast/s_span.c +++ b/xc/extras/Mesa/src/swrast/s_span.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -86,7 +86,7 @@ static GLuint clip_span( GLcontext *ctx, GLint n, GLint x, GLint y, GLubyte mask[] ) { /* Clip to top and bottom */ - if (y < 0 || y >= ctx->DrawBuffer->Height) { + if (y < 0 || y >= (GLint) ctx->DrawBuffer->Height) { return 0; } @@ -103,8 +103,8 @@ clip_span( GLcontext *ctx, GLint n, GLint x, GLint y, GLubyte mask[] ) } /* Clip to right */ - if (x + n > ctx->DrawBuffer->Width) { - if (x >= ctx->DrawBuffer->Width) { + if (x + n > (GLint) ctx->DrawBuffer->Width) { + if (x >= (GLint) ctx->DrawBuffer->Width) { /* completely off right side */ return 0; } @@ -1132,8 +1132,10 @@ _mesa_read_rgba_span( GLcontext *ctx, GLframebuffer *buffer, GLuint n, GLint x, GLint y, GLchan rgba[][4] ) { SWcontext *swrast = SWRAST_CONTEXT(ctx); - if (y < 0 || y >= buffer->Height - || x + (GLint) n < 0 || x >= buffer->Width) { + const GLint bufWidth = (GLint) buffer->Width; + const GLint bufHeight = (GLint) buffer->Height; + + if (y < 0 || y >= bufHeight || x + (GLint) n < 0 || x >= bufWidth) { /* completely above, below, or right */ /* XXX maybe leave undefined? */ BZERO(rgba, 4 * n * sizeof(GLchan)); @@ -1148,14 +1150,14 @@ _mesa_read_rgba_span( GLcontext *ctx, GLframebuffer *buffer, /* completely left of window */ return; } - if (length > buffer->Width) { + if (length > bufWidth) { length = buffer->Width; } } - else if ((GLint) (x + n) > buffer->Width) { + else if ((GLint) (x + n) > bufWidth) { /* right edge clipping */ skip = 0; - length = buffer->Width - x; + length = bufWidth - x; if (length < 0) { /* completely to right of window */ return; @@ -1186,8 +1188,10 @@ _mesa_read_index_span( GLcontext *ctx, GLframebuffer *buffer, GLuint n, GLint x, GLint y, GLuint indx[] ) { SWcontext *swrast = SWRAST_CONTEXT(ctx); - if (y < 0 || y >= buffer->Height - || x + (GLint) n < 0 || x >= buffer->Width) { + const GLint bufWidth = (GLint) buffer->Width; + const GLint bufHeight = (GLint) buffer->Height; + + if (y < 0 || y >= bufHeight || x + (GLint) n < 0 || x >= bufWidth) { /* completely above, below, or right */ BZERO(indx, n * sizeof(GLuint)); } @@ -1201,14 +1205,14 @@ _mesa_read_index_span( GLcontext *ctx, GLframebuffer *buffer, /* completely left of window */ return; } - if (length > buffer->Width) { - length = buffer->Width; + if (length > bufWidth) { + length = bufWidth; } } - else if ((GLint) (x + n) > buffer->Width) { + else if ((GLint) (x + n) > bufWidth) { /* right edge clipping */ skip = 0; - length = buffer->Width - x; + length = bufWidth - x; if (length < 0) { /* completely to right of window */ return; diff --git a/xc/extras/Mesa/src/swrast/s_stencil.c b/xc/extras/Mesa/src/swrast/s_stencil.c index 70ba70488..acb273803 100644 --- a/xc/extras/Mesa/src/swrast/s_stencil.c +++ b/xc/extras/Mesa/src/swrast/s_stencil.c @@ -1,7 +1,7 @@ /* * Mesa 3-D graphics library - * Version: 4.0.2 + * Version: 4.0.3 * * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * @@ -1013,8 +1013,8 @@ _mesa_read_stencil_span( GLcontext *ctx, GLint n, GLint x, GLint y, GLstencil stencil[] ) { SWcontext *swrast = SWRAST_CONTEXT(ctx); - if (y < 0 || y >= ctx->DrawBuffer->Height || - x + n <= 0 || x >= ctx->DrawBuffer->Width) { + if (y < 0 || y >= (GLint) ctx->DrawBuffer->Height || + x + n <= 0 || x >= (GLint) ctx->DrawBuffer->Width) { /* span is completely outside framebuffer */ return; /* undefined values OK */ } @@ -1025,8 +1025,8 @@ _mesa_read_stencil_span( GLcontext *ctx, n -= dx; stencil += dx; } - if (x + n > ctx->DrawBuffer->Width) { - GLint dx = x + n - ctx->DrawBuffer->Width; + if (x + n > (GLint) ctx->DrawBuffer->Width) { + GLint dx = x + n - (GLint) ctx->DrawBuffer->Width; n -= dx; } if (n <= 0) { @@ -1066,8 +1066,8 @@ _mesa_write_stencil_span( GLcontext *ctx, GLint n, GLint x, GLint y, SWcontext *swrast = SWRAST_CONTEXT(ctx); const GLstencil *ssrc = stencil; - if (y < 0 || y >= ctx->DrawBuffer->Height || - x + n <= 0 || x >= ctx->DrawBuffer->Width) { + if (y < 0 || y >= (GLint) ctx->DrawBuffer->Height || + x + n <= 0 || x >= (GLint) ctx->DrawBuffer->Width) { /* span is completely outside framebuffer */ return; /* undefined values OK */ } @@ -1078,8 +1078,8 @@ _mesa_write_stencil_span( GLcontext *ctx, GLint n, GLint x, GLint y, n -= dx; ssrc += dx; } - if (x + n > ctx->DrawBuffer->Width) { - GLint dx = x + n - ctx->DrawBuffer->Width; + if (x + n > (GLint) ctx->DrawBuffer->Width) { + GLint dx = x + n - (GLint) ctx->DrawBuffer->Width; n -= dx; } if (n <= 0) { diff --git a/xc/extras/Mesa/src/swrast/s_texture.c b/xc/extras/Mesa/src/swrast/s_texture.c index 73520cdd8..88083180e 100644 --- a/xc/extras/Mesa/src/swrast/s_texture.c +++ b/xc/extras/Mesa/src/swrast/s_texture.c @@ -1,7 +1,7 @@ /* * Mesa 3-D graphics library - * Version: 4.0.2 + * Version: 4.0.3 * * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * @@ -1924,7 +1924,7 @@ texture_combine(const GLcontext *ctx, } break; default: - _mesa_problem(NULL, "invalid combine source"); + _mesa_problem(ctx, "invalid combine source"); } switch (textureUnit->CombineSourceRGB[j]) { @@ -1955,7 +1955,7 @@ texture_combine(const GLcontext *ctx, } break; default: - _mesa_problem(NULL, "invalid combine source"); + _mesa_problem(ctx, "invalid combine source"); } if (textureUnit->CombineOperandRGB[j] != GL_SRC_COLOR) { @@ -2047,7 +2047,7 @@ texture_combine(const GLcontext *ctx, const GLchan (*arg0)[4] = (const GLchan (*)[4]) argRGB[0]; const GLchan (*arg1)[4] = (const GLchan (*)[4]) argRGB[1]; #if CHAN_TYPE != GL_FLOAT - const GLint shift = 8 - RGBshift; + const GLint shift = CHAN_BITS - RGBshift; #endif for (i = 0; i < n; i++) { #if CHAN_TYPE == GL_FLOAT @@ -2114,7 +2114,7 @@ texture_combine(const GLcontext *ctx, const GLchan (*arg1)[4] = (const GLchan (*)[4]) argRGB[1]; const GLchan (*arg2)[4] = (const GLchan (*)[4]) argRGB[2]; #if CHAN_TYPE != GL_FLOAT - const GLint shift = 8 - RGBshift; + const GLint shift = CHAN_BITS - RGBshift; #endif for (i = 0; i < n; i++) { #if CHAN_TYPE == GL_FLOAT @@ -2161,15 +2161,37 @@ texture_combine(const GLcontext *ctx, } } break; + case GL_DOT3_RGB_EXT: + case GL_DOT3_RGBA_EXT: + { + /* Do not scale the result by 1 2 or 4 */ + const GLchan (*arg0)[4] = (const GLchan (*)[4]) argRGB[0]; + const GLchan (*arg1)[4] = (const GLchan (*)[4]) argRGB[1]; + for (i = 0; i < n; i++) { +#if CHAN_TYPE == GL_FLOAT + GLchan dot = ((arg0[i][RCOMP]-0.5F) * (arg1[i][RCOMP]-0.5F) + + (arg0[i][GCOMP]-0.5F) * (arg1[i][GCOMP]-0.5F) + + (arg0[i][BCOMP]-0.5F) * (arg1[i][BCOMP]-0.5F)) + * 4.0F; +#else + GLint dot = (S_PROD((GLint)arg0[i][RCOMP] - half, + (GLint)arg1[i][RCOMP] - half) + + S_PROD((GLint)arg0[i][GCOMP] - half, + (GLint)arg1[i][GCOMP] - half) + + S_PROD((GLint)arg0[i][BCOMP] - half, + (GLint)arg1[i][BCOMP] - half)) >> 6; +#endif + dot = CLAMP(dot, 0, CHAN_MAX); + rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = (GLchan) dot; + } + } + break; case GL_DOT3_RGB_ARB: case GL_DOT3_RGBA_ARB: { + /* DO scale the result by 1 2 or 4 */ const GLchan (*arg0)[4] = (const GLchan (*)[4]) argRGB[0]; const GLchan (*arg1)[4] = (const GLchan (*)[4]) argRGB[1]; - /* ATI's EXT extension has a constant scale by 4. The ARB - * one will likely remove this restriction, and we should - * drop the EXT extension in favour of the ARB one. - */ for (i = 0; i < n; i++) { #if CHAN_TYPE == GL_FLOAT GLchan dot = ((arg0[i][RCOMP]-0.5F) * (arg1[i][RCOMP]-0.5F) + @@ -2184,13 +2206,13 @@ texture_combine(const GLcontext *ctx, S_PROD((GLint)arg0[i][BCOMP] - half, (GLint)arg1[i][BCOMP] - half)) >> 6; #endif - dot = CLAMP(dot, 0, CHAN_MAX); + dot = CLAMP(dot, 0, CHAN_MAX) << RGBshift; rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = (GLchan) dot; } } break; default: - _mesa_problem(NULL, "invalid combine mode"); + _mesa_problem(ctx, "invalid combine mode"); } switch (textureUnit->CombineModeA) { @@ -2219,7 +2241,7 @@ texture_combine(const GLcontext *ctx, const GLchan (*arg0)[4] = (const GLchan (*)[4]) argA[0]; const GLchan (*arg1)[4] = (const GLchan (*)[4]) argA[1]; #if CHAN_TYPE != GL_FLOAT - const GLint shift = 8 - Ashift; + const GLint shift = CHAN_BITS - Ashift; #endif for (i = 0; i < n; i++) { #if CHAN_TYPE == GL_FLOAT @@ -2266,7 +2288,7 @@ texture_combine(const GLcontext *ctx, const GLchan (*arg1)[4] = (const GLchan (*)[4]) argA[1]; const GLchan (*arg2)[4] = (const GLchan (*)[4]) argA[2]; #if CHAN_TYPE != GL_FLOAT - const GLint shift = 8 - Ashift; + const GLint shift = CHAN_BITS - Ashift; #endif for (i=0; i<n; i++) { #if CHAN_TYPE == GL_FLOAT @@ -2284,13 +2306,13 @@ texture_combine(const GLcontext *ctx, break; case GL_SUBTRACT_ARB: { - const GLchan (*arg0)[4] = (const GLchan (*)[4]) argRGB[0]; - const GLchan (*arg1)[4] = (const GLchan (*)[4]) argRGB[1]; + const GLchan (*arg0)[4] = (const GLchan (*)[4]) argA[0]; + const GLchan (*arg1)[4] = (const GLchan (*)[4]) argA[1]; for (i = 0; i < n; i++) { #if CHAN_TYPE == GL_FLOAT rgba[i][ACOMP] = (arg0[i][ACOMP] - arg1[i][ACOMP]) * Amult; #else - GLint a = ((GLint) arg0[i][ACOMP] - (GLint) arg1[i][ACOMP]) << RGBshift; + GLint a = ((GLint) arg0[i][ACOMP] - (GLint) arg1[i][ACOMP]) << Ashift; rgba[i][ACOMP] = (GLchan) CLAMP(a, 0, CHAN_MAX); #endif } @@ -2298,10 +2320,13 @@ texture_combine(const GLcontext *ctx, break; default: - _mesa_problem(NULL, "invalid combine mode"); + _mesa_problem(ctx, "invalid combine mode"); } - /* Fix the alpha component for GL_DOT3_RGBA_EXT combining. + /* Fix the alpha component for GL_DOT3_RGBA_EXT/ARB combining. + * This is kind of a kludge. It would have been better if the spec + * were written such that the GL_COMBINE_ALPHA value could be set to + * GL_DOT3. */ if (textureUnit->CombineModeRGB == GL_DOT3_RGBA_EXT || textureUnit->CombineModeRGB == GL_DOT3_RGBA_ARB) { diff --git a/xc/extras/Mesa/src/swrast/s_zoom.c b/xc/extras/Mesa/src/swrast/s_zoom.c index f125b6d98..531995a90 100644 --- a/xc/extras/Mesa/src/swrast/s_zoom.c +++ b/xc/extras/Mesa/src/swrast/s_zoom.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -86,7 +86,8 @@ _mesa_write_zoomed_rgba_span( GLcontext *ctx, /* below window */ return; } - if (r0>=ctx->DrawBuffer->Height && r1>=ctx->DrawBuffer->Height) { + if (r0 >= (GLint) ctx->DrawBuffer->Height && + r1 >= (GLint) ctx->DrawBuffer->Height) { /* above window */ return; } @@ -190,7 +191,8 @@ _mesa_write_zoomed_rgb_span( GLcontext *ctx, /* below window */ return; } - if (r0>=ctx->DrawBuffer->Height && r1>=ctx->DrawBuffer->Height) { + if (r0 >= (GLint) ctx->DrawBuffer->Height && + r1 >= (GLint) ctx->DrawBuffer->Height) { /* above window */ return; } @@ -303,7 +305,8 @@ _mesa_write_zoomed_index_span( GLcontext *ctx, /* below window */ return; } - if (r0>=ctx->DrawBuffer->Height && r1>=ctx->DrawBuffer->Height) { + if (r0 >= (GLint) ctx->DrawBuffer->Height && + r1 >= (GLint) ctx->DrawBuffer->Height) { /* above window */ return; } @@ -407,7 +410,8 @@ _mesa_write_zoomed_stencil_span( GLcontext *ctx, /* below window */ return; } - if (r0>=ctx->DrawBuffer->Height && r1>=ctx->DrawBuffer->Height) { + if (r0 >= (GLint) ctx->DrawBuffer->Height && + r1 >= (GLint) ctx->DrawBuffer->Height) { /* above window */ return; } diff --git a/xc/extras/Mesa/src/swrast_setup/ss_vbtmp.h b/xc/extras/Mesa/src/swrast_setup/ss_vbtmp.h index 8e95ad1f2..15277cfd2 100644 --- a/xc/extras/Mesa/src/swrast_setup/ss_vbtmp.h +++ b/xc/extras/Mesa/src/swrast_setup/ss_vbtmp.h @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -83,14 +83,14 @@ static void TAG(emit)(GLcontext *ctx, GLuint start, GLuint end, if (VB->ColorPtr[0]->Type != CHAN_TYPE) import_float_colors( ctx ); - color = VB->ColorPtr[0]->Ptr; + color = (GLchan *) VB->ColorPtr[0]->Ptr; color_stride = VB->ColorPtr[0]->StrideB; } if (IND & SPEC) { if (VB->SecondaryColorPtr[0]->Type != CHAN_TYPE) import_float_spec_colors( ctx ); - spec = VB->SecondaryColorPtr[0]->Ptr; + spec = (GLchan *) VB->SecondaryColorPtr[0]->Ptr; spec_stride = VB->SecondaryColorPtr[0]->StrideB; } if (IND & INDEX) { diff --git a/xc/extras/Mesa/src/texstate.c b/xc/extras/Mesa/src/texstate.c index 0cbacc848..da998b797 100644 --- a/xc/extras/Mesa/src/texstate.c +++ b/xc/extras/Mesa/src/texstate.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 4.0.1 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -139,10 +139,16 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param ) return; } break; + case GL_DOT3_RGB_EXT: + case GL_DOT3_RGBA_EXT: + if (!ctx->Extensions.EXT_texture_env_dot3) { + TE_ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", mode); + return; + } + break; case GL_DOT3_RGB_ARB: case GL_DOT3_RGBA_ARB: - if (!ctx->Extensions.EXT_texture_env_dot3 && - !ctx->Extensions.ARB_texture_env_dot3) { + if (!ctx->Extensions.ARB_texture_env_dot3) { TE_ERROR(GL_INVALID_ENUM, "glTexEnv(param=%s)", mode); return; } diff --git a/xc/extras/Mesa/src/texstore.c b/xc/extras/Mesa/src/texstore.c index c74a72ee4..04c20d447 100644 --- a/xc/extras/Mesa/src/texstore.c +++ b/xc/extras/Mesa/src/texstore.c @@ -1,7 +1,7 @@ /* * Mesa 3-D graphics library - * Version: 4.0.2 + * Version: 4.0.3 * * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. * @@ -238,7 +238,8 @@ transfer_teximage(GLcontext *ctx, GLuint dimensions, /* color index texture */ const GLenum texType = CHAN_TYPE; GLint img, row; - GLchan *dest = (GLchan *) texDestAddr + dstZoffset * dstImageStride + GLchan *dest = (GLchan *) texDestAddr + + dstZoffset * (dstImageStride / sizeof(GLchan)) + dstYoffset * (dstRowStride / sizeof(GLchan)) + dstXoffset * texComponents; for (img = 0; img < srcDepth; img++) { @@ -331,7 +332,8 @@ transfer_teximage(GLcontext *ctx, GLuint dimensions, /* packing and transfer ops after convolution */ srcf = convImage; - dest = (GLchan *) texDestAddr + (dstZoffset + img) * dstImageStride + dest = (GLchan *) texDestAddr + + (dstZoffset + img) * (dstImageStride / sizeof(GLchan)) + dstYoffset * (dstRowStride / sizeof(GLchan)); for (row = 0; row < convHeight; row++) { _mesa_pack_float_rgba_span(ctx, convWidth, @@ -353,7 +355,8 @@ transfer_teximage(GLcontext *ctx, GLuint dimensions, * no convolution */ GLint img, row; - GLchan *dest = (GLchan *) texDestAddr + dstZoffset * dstImageStride + GLchan *dest = (GLchan *) texDestAddr + + dstZoffset * (dstImageStride / sizeof(GLchan)) + dstYoffset * (dstRowStride / sizeof(GLchan)) + dstXoffset * texComponents; for (img = 0; img < srcDepth; img++) { @@ -367,7 +370,7 @@ transfer_teximage(GLcontext *ctx, GLuint dimensions, srcPacking, transferOps); destRow += (dstRowStride / sizeof(GLchan)); } - dest += dstImageStride; + dest += dstImageStride / sizeof(GLchan); } } } @@ -388,7 +391,7 @@ transfer_teximage(GLcontext *ctx, GLuint dimensions, * srcWidth, srcHeight, srcDepth - size of source iamge * dstX/Y/Zoffset - as specified by glTexSubImage * dstRowStride - stride between dest rows in bytes - * dstImagetride - stride between dest images in bytes + * dstImageStride - stride between dest images in bytes * srcFormat, srcType - incoming image format and datatype * srcAddr - source image address * srcPacking - packing params of source image diff --git a/xc/extras/Mesa/src/tnl/t_array_api.c b/xc/extras/Mesa/src/tnl/t_array_api.c index 5d6d6ca15..59c16b035 100644 --- a/xc/extras/Mesa/src/tnl/t_array_api.c +++ b/xc/extras/Mesa/src/tnl/t_array_api.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -49,10 +49,9 @@ static void fallback_drawarrays( GLcontext *ctx, GLenum mode, GLint start, { if (_tnl_hard_begin( ctx, mode )) { GLint i; - for (i = start; i < count; i++) { - _tnl_array_element( ctx, i ); - } - _tnl_end( ctx ); + for (i = start; i < count; i++) + glArrayElement( i ); + glEnd(); } } @@ -60,13 +59,11 @@ static void fallback_drawarrays( GLcontext *ctx, GLenum mode, GLint start, static void fallback_drawelements( GLcontext *ctx, GLenum mode, GLsizei count, const GLuint *indices) { - /* Simple version of the above code. - */ if (_tnl_hard_begin(ctx, mode)) { GLint i; for (i = 0 ; i < count ; i++) - _tnl_array_element( ctx, indices[i] ); - _tnl_end( ctx ); + glArrayElement( indices[i] ); + glEnd(); } } @@ -78,6 +75,10 @@ static void _tnl_draw_range_elements( GLcontext *ctx, GLenum mode, { TNLcontext *tnl = TNL_CONTEXT(ctx); FLUSH_CURRENT( ctx, 0 ); + + /* fprintf(stderr, "%s\n", __FUNCTION__); */ + if (tnl->pipeline.build_state_changes) + _tnl_validate_pipeline( ctx ); _tnl_vb_bind_arrays( ctx, start, end ); @@ -106,8 +107,10 @@ _tnl_DrawArrays(GLenum mode, GLint start, GLsizei count) GET_CURRENT_CONTEXT(ctx); TNLcontext *tnl = TNL_CONTEXT(ctx); struct vertex_buffer *VB = &tnl->vb; - -/* fprintf(stderr, "%s %d %d\n", __FUNCTION__, start, count); */ + GLuint thresh = (ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES) ? 30 : 10; + + if (MESA_VERBOSE & VERBOSE_API) + fprintf(stderr, "_tnl_DrawArrays %d %d\n", start, count); /* Check arguments, etc. */ @@ -120,9 +123,14 @@ _tnl_DrawArrays(GLenum mode, GLint start, GLsizei count) if (ctx->CompileFlag) { fallback_drawarrays( ctx, mode, start, start + count ); } + else if (!ctx->Array.LockCount && (GLuint) count < thresh) { + /* Small primitives: attempt to share a vb (at the expense of + * using the immediate interface). + */ + fallback_drawarrays( ctx, mode, start, start + count ); + } else if (count < (GLint) ctx->Const.MaxArrayLockSize) { - - /* Small primitives which can fit in a single vertex buffer: + /* Moderate primitives which can fit in a single vertex buffer: */ FLUSH_CURRENT( ctx, 0 ); @@ -211,10 +219,6 @@ _tnl_DrawArrays(GLenum mode, GLint start, GLsizei count) FLUSH_CURRENT( ctx, 0 ); -/* fprintf(stderr, "start %d count %d min %d modulo %d skip %d\n", */ -/* start, count, minimum, modulo, skip); */ - - bufsz -= bufsz % modulo; bufsz -= minimum; count += start; @@ -223,8 +227,6 @@ _tnl_DrawArrays(GLenum mode, GLint start, GLsizei count) nr = MIN2( bufsz, count - j ); -/* fprintf(stderr, "%d..%d\n", j - minimum, j+nr); */ - _tnl_vb_bind_arrays( ctx, j - minimum, j + nr ); VB->FirstPrimitive = 0; @@ -244,10 +246,10 @@ _tnl_DrawRangeElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices) { GET_CURRENT_CONTEXT(ctx); - TNLcontext *tnl = TNL_CONTEXT(ctx); GLuint *ui_indices; - -/* fprintf(stderr, "%s\n", __FUNCTION__); */ + + if (MESA_VERBOSE & VERBOSE_API) + fprintf(stderr, "_tnl_DrawRangeElements %d %d %d\n", start, end, count); /* Check arguments, etc. */ @@ -255,9 +257,6 @@ _tnl_DrawRangeElements(GLenum mode, type, indices )) return; - if (tnl->pipeline.build_state_changes) - _tnl_validate_pipeline( ctx ); - ui_indices = (GLuint *)_ac_import_elements( ctx, GL_UNSIGNED_INT, count, type, indices ); @@ -311,19 +310,16 @@ _tnl_DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices) { GET_CURRENT_CONTEXT(ctx); - TNLcontext *tnl = TNL_CONTEXT(ctx); GLuint *ui_indices; -/* fprintf(stderr, "%s\n", __FUNCTION__); */ + if (MESA_VERBOSE & VERBOSE_API) + fprintf(stderr, "_tnl_DrawElements %d\n", count); /* Check arguments, etc. */ if (!_mesa_validate_DrawElements( ctx, mode, count, type, indices )) return; - if (tnl->pipeline.build_state_changes) - _tnl_validate_pipeline( ctx ); - ui_indices = (GLuint *)_ac_import_elements( ctx, GL_UNSIGNED_INT, count, type, indices ); diff --git a/xc/extras/Mesa/src/tnl/t_context.c b/xc/extras/Mesa/src/tnl/t_context.c index 7f9c0614a..3e6a96e40 100644 --- a/xc/extras/Mesa/src/tnl/t_context.c +++ b/xc/extras/Mesa/src/tnl/t_context.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -109,12 +109,15 @@ _tnl_CreateContext( GLcontext *ctx ) /* Hook our functions into exec and compile dispatch tables. */ _mesa_install_exec_vtxfmt( ctx, &tnl->vtxfmt ); - _mesa_install_save_vtxfmt( ctx, &tnl->vtxfmt ); - ctx->Save->CallList = _mesa_save_CallList; - ctx->Save->CallLists = _mesa_save_CallLists; - ctx->Save->EvalMesh1 = _mesa_save_EvalMesh1; - ctx->Save->EvalMesh2 = _mesa_save_EvalMesh2; - ctx->Save->Begin = _tnl_save_Begin; + + tnl->save_vtxfmt = tnl->vtxfmt; + tnl->save_vtxfmt.CallList = _mesa_save_CallList; + tnl->save_vtxfmt.EvalMesh1 = _mesa_save_EvalMesh1; + tnl->save_vtxfmt.EvalMesh2 = _mesa_save_EvalMesh2; + tnl->save_vtxfmt.Begin = _tnl_save_Begin; + + _mesa_install_save_vtxfmt( ctx, &tnl->save_vtxfmt ); + /* Set a few default values in the driver struct. */ @@ -141,7 +144,7 @@ _tnl_DestroyContext( GLcontext *ctx ) _tnl_array_destroy( ctx ); _tnl_imm_destroy( ctx ); _tnl_destroy_pipeline( ctx ); - _tnl_free_immediate( tnl->freed_immediate ); + _tnl_free_immediate( ctx, tnl->freed_immediate ); FREE(tnl); ctx->swtnl_context = 0; @@ -199,12 +202,7 @@ _tnl_wakeup_save_exec( GLcontext *ctx ) TNLcontext *tnl = TNL_CONTEXT(ctx); _tnl_wakeup_exec( ctx ); - _mesa_install_save_vtxfmt( ctx, &tnl->vtxfmt ); - ctx->Save->CallList = _mesa_save_CallList; /* fixme */ - ctx->Save->CallLists = _mesa_save_CallLists; - ctx->Save->EvalMesh1 = _mesa_save_EvalMesh1; /* fixme */ - ctx->Save->EvalMesh2 = _mesa_save_EvalMesh2; - ctx->Save->Begin = _tnl_save_Begin; + _mesa_install_save_vtxfmt( ctx, &tnl->save_vtxfmt ); } diff --git a/xc/extras/Mesa/src/tnl/t_context.h b/xc/extras/Mesa/src/tnl/t_context.h index fa1288d95..2243f7787 100644 --- a/xc/extras/Mesa/src/tnl/t_context.h +++ b/xc/extras/Mesa/src/tnl/t_context.h @@ -393,9 +393,13 @@ struct tnl_device_driver { */ void (*NotifyMaterialChange)(GLcontext *ctx); - /* Alert tnl-aware drivers of changes to material, especially in - * exec_empty_cassette, which doesn't otherwise reach the driver. - * --> Need to be able to disable exec_empty_cassette??? + /* Alert tnl-aware drivers of changes to material. + */ + + GLboolean (*NotifyBegin)(GLcontext *ctx, GLenum p); + /* Allow drivers to hook in optimized begin/end engines. + * Return value: GL_TRUE - driver handled the begin + * GL_FALSE - driver didn't handle the begin */ /*** @@ -545,6 +549,7 @@ typedef struct { /* Functions to be plugged into dispatch when tnl is active. */ GLvertexformat vtxfmt; + GLvertexformat save_vtxfmt; } TNLcontext; diff --git a/xc/extras/Mesa/src/tnl/t_eval_api.c b/xc/extras/Mesa/src/tnl/t_eval_api.c index ba97ba769..d3fa033d2 100644 --- a/xc/extras/Mesa/src/tnl/t_eval_api.c +++ b/xc/extras/Mesa/src/tnl/t_eval_api.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -99,7 +99,12 @@ _tnl_exec_EvalMesh1( GLenum mode, GLint i1, GLint i2 ) */ { GLboolean compiling = ctx->CompileFlag; + TNLcontext *tnl = TNL_CONTEXT(ctx); struct immediate *im = TNL_CURRENT_IM(ctx); + GLboolean (*NotifyBegin)(GLcontext *ctx, GLenum p); + + NotifyBegin = tnl->Driver.NotifyBegin; + tnl->Driver.NotifyBegin = 0; if (compiling) { struct immediate *IM = _tnl_alloc_immediate( ctx ); @@ -109,7 +114,7 @@ _tnl_exec_EvalMesh1( GLenum mode, GLint i1, GLint i2 ) ctx->CompileFlag = GL_FALSE; } - _tnl_hard_begin( ctx, prim ); + _tnl_Begin( prim ); for (i=i1;i<=i2;i++,u+=du) { _tnl_eval_coord1f( ctx, u ); } @@ -118,11 +123,12 @@ _tnl_exec_EvalMesh1( GLenum mode, GLint i1, GLint i2 ) /* Need this for replay *and* compile: */ FLUSH_VERTICES( ctx, 0 ); + tnl->Driver.NotifyBegin = NotifyBegin; if (compiling) { TNL_CURRENT_IM(ctx)->ref_count--; ASSERT( TNL_CURRENT_IM(ctx)->ref_count == 0 ); - _tnl_free_immediate( TNL_CURRENT_IM(ctx) ); + _tnl_free_immediate( ctx, TNL_CURRENT_IM(ctx) ); SET_IMMEDIATE( ctx, im ); ctx->CompileFlag = GL_TRUE; } @@ -159,6 +165,11 @@ _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ) { GLboolean compiling = ctx->CompileFlag; struct immediate *im = TNL_CURRENT_IM(ctx); + TNLcontext *tnl = TNL_CONTEXT(ctx); + GLboolean (*NotifyBegin)(GLcontext *ctx, GLenum p); + + NotifyBegin = tnl->Driver.NotifyBegin; + tnl->Driver.NotifyBegin = 0; if (compiling) { struct immediate *IM = _tnl_alloc_immediate( ctx ); @@ -170,7 +181,7 @@ _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ) switch (mode) { case GL_POINT: - _tnl_hard_begin( ctx, GL_POINTS ); + _tnl_Begin( GL_POINTS ); for (v=v1,j=j1;j<=j2;j++,v+=dv) { for (u=u1,i=i1;i<=i2;i++,u+=du) { _tnl_eval_coord2f( ctx, u, v ); @@ -180,14 +191,14 @@ _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ) break; case GL_LINE: for (v=v1,j=j1;j<=j2;j++,v+=dv) { - _tnl_hard_begin( ctx, GL_LINE_STRIP ); + _tnl_Begin( GL_LINE_STRIP ); for (u=u1,i=i1;i<=i2;i++,u+=du) { _tnl_eval_coord2f( ctx, u, v ); } _tnl_end(ctx); } for (u=u1,i=i1;i<=i2;i++,u+=du) { - _tnl_hard_begin( ctx, GL_LINE_STRIP ); + _tnl_Begin( GL_LINE_STRIP ); for (v=v1,j=j1;j<=j2;j++,v+=dv) { _tnl_eval_coord2f( ctx, u, v ); } @@ -196,7 +207,7 @@ _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ) break; case GL_FILL: for (v=v1,j=j1;j<j2;j++,v+=dv) { - _tnl_hard_begin( ctx, GL_TRIANGLE_STRIP ); + _tnl_Begin( GL_TRIANGLE_STRIP ); for (u=u1,i=i1;i<=i2;i++,u+=du) { _tnl_eval_coord2f( ctx, u, v ); _tnl_eval_coord2f( ctx, u, v+dv ); @@ -212,10 +223,11 @@ _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ) /* Need this for replay *and* compile: */ FLUSH_VERTICES( ctx, 0 ); + tnl->Driver.NotifyBegin = NotifyBegin; if (compiling) { TNL_CURRENT_IM(ctx)->ref_count--; - _tnl_free_immediate( TNL_CURRENT_IM( ctx ) ); + _tnl_free_immediate( ctx, TNL_CURRENT_IM( ctx ) ); SET_IMMEDIATE( ctx, im ); ctx->CompileFlag = GL_TRUE; } diff --git a/xc/extras/Mesa/src/tnl/t_imm_alloc.c b/xc/extras/Mesa/src/tnl/t_imm_alloc.c index 330275c6b..5c3a046b9 100644 --- a/xc/extras/Mesa/src/tnl/t_imm_alloc.c +++ b/xc/extras/Mesa/src/tnl/t_imm_alloc.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 4.0.1 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -123,9 +123,9 @@ struct immediate *_tnl_alloc_immediate( GLcontext *ctx ) /* May be called after tnl is destroyed. */ -void _tnl_free_immediate( struct immediate *IM ) +void _tnl_free_immediate( GLcontext *ctx, struct immediate *IM ) { - TNLcontext *tnl = TNL_CONTEXT(IM->backref); + TNLcontext *tnl = TNL_CONTEXT(ctx); ASSERT(IM->ref_count == 0); diff --git a/xc/extras/Mesa/src/tnl/t_imm_alloc.h b/xc/extras/Mesa/src/tnl/t_imm_alloc.h index 02a3d729a..4ece015b1 100644 --- a/xc/extras/Mesa/src/tnl/t_imm_alloc.h +++ b/xc/extras/Mesa/src/tnl/t_imm_alloc.h @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -33,7 +33,7 @@ extern struct immediate *_tnl_alloc_immediate( GLcontext *ctx ); -extern void _tnl_free_immediate( struct immediate *im ); +extern void _tnl_free_immediate( GLcontext *ctx, struct immediate *im ); #endif diff --git a/xc/extras/Mesa/src/tnl/t_imm_api.c b/xc/extras/Mesa/src/tnl/t_imm_api.c index 02408c9de..0544496a7 100644 --- a/xc/extras/Mesa/src/tnl/t_imm_api.c +++ b/xc/extras/Mesa/src/tnl/t_imm_api.c @@ -51,6 +51,10 @@ void _tnl_flush_immediate( struct immediate *IM ) { GLcontext *ctx = IM->backref; + if (MESA_VERBOSE & VERBOSE_IMMEDIATE) + fprintf(stderr, "_tnl_flush_immediate IM: %d compiling: %d\n", + IM->id, ctx->CompileFlag); + if (IM->FlushElt == FLUSH_ELT_EAGER) { _tnl_translate_array_elts( ctx, IM, IM->LastPrimitive, IM->Count ); } @@ -67,10 +71,18 @@ void _tnl_flush_immediate( struct immediate *IM ) } +/* Hook for ctx->Driver.FlushVertices: + */ void _tnl_flush_vertices( GLcontext *ctx, GLuint flags ) { struct immediate *IM = TNL_CURRENT_IM(ctx); + if (MESA_VERBOSE & VERBOSE_IMMEDIATE) + fprintf( stderr, + "_tnl_flush_vertices flags %x IM(%d) %d..%d Flag[%d]: %x\n", + flags, IM->id, IM->Start, IM->Count, IM->Start, + IM->Flag[IM->Start]); + if (IM->Flag[IM->Start]) if ((flags & FLUSH_UPDATE_CURRENT) || IM->Count > IM->Start) _tnl_flush_immediate( IM ); @@ -79,29 +91,23 @@ void _tnl_flush_vertices( GLcontext *ctx, GLuint flags ) -/* Note the ctx argument. This function called only by _tnl_Begin, - * _tnl_save_Begin and _tnl_hard_begin() in this file. - */ -static void -_tnl_begin( GLcontext *ctx, GLenum p ) +void +_tnl_save_Begin( GLenum mode ) { + GET_CURRENT_CONTEXT(ctx); struct immediate *IM = TNL_CURRENT_IM(ctx); GLuint inflags, state; - if (MESA_VERBOSE&VERBOSE_API) - fprintf(stderr, "glBegin(IM %d) %s\n", IM->id, - _mesa_lookup_enum_by_nr(p)); +/* fprintf(stderr, "%s: before: %x\n", __FUNCTION__, IM->BeginState); */ + + if (mode > GL_POLYGON) { + _mesa_compile_error( ctx, GL_INVALID_ENUM, "_tnl_Begin" ); + return; + } if (ctx->NewState) _mesa_update_state(ctx); - /* if only a very few slots left, might as well flush now - */ - if (IM->Count > IMM_MAXDATA-8) { - _tnl_flush_immediate( IM ); - IM = TNL_CURRENT_IM(ctx); - } - /* Check for and flush buffered vertices from internal operations. */ if (IM->SavedBeginState) { @@ -122,7 +128,7 @@ _tnl_begin( GLcontext *ctx, GLenum p ) state |= (VERT_BEGIN_0|VERT_BEGIN_1); IM->Flag[count] |= VERT_BEGIN; - IM->Primitive[count] = p | PRIM_BEGIN; + IM->Primitive[count] = mode | PRIM_BEGIN; IM->PrimitiveLength[IM->LastPrimitive] = count - IM->LastPrimitive; IM->LastPrimitive = count; @@ -137,20 +143,15 @@ _tnl_begin( GLcontext *ctx, GLenum p ) ctx->Driver.NeedFlush |= FLUSH_STORED_VERTICES; IM->BeginState = state; -} - -void -_tnl_save_Begin( GLenum mode ) -{ - GET_CURRENT_CONTEXT(ctx); - - if (mode > GL_POLYGON) { - _mesa_compile_error( ctx, GL_INVALID_ENUM, "glBegin" ); - return; + if (ctx->ExecuteFlag) { + if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { + _mesa_error( ctx, GL_INVALID_OPERATION, "_tnl_Begin" ); + } + else + ctx->Driver.CurrentExecPrimitive = mode; } - _tnl_begin( ctx, mode ); /* Update save_primitive now. */ @@ -160,22 +161,57 @@ _tnl_save_Begin( GLenum mode ) ctx->Driver.CurrentSavePrimitive = mode; } -static void + +void _tnl_Begin( GLenum mode ) { GET_CURRENT_CONTEXT(ctx); + TNLcontext *tnl = TNL_CONTEXT(ctx); + ASSERT (!ctx->CompileFlag); if (mode > GL_POLYGON) { - _mesa_compile_error( ctx, GL_INVALID_ENUM, "glBegin" ); + _mesa_error( ctx, GL_INVALID_ENUM, "_tnl_Begin" ); return; } - _tnl_begin(ctx, mode); + if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { + _mesa_error( ctx, GL_INVALID_OPERATION, "_tnl_Begin" ); + return; + } - /* Update exec_primitive now. - */ - ASSERT (!ctx->CompileFlag); - if (ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END) { + if (ctx->NewState) + _mesa_update_state(ctx); + + { + struct immediate *IM = TNL_CURRENT_IM(ctx); + GLuint count = IM->Count; + GLuint last = IM->LastPrimitive; + + if (IM->Start == IM->Count && + tnl->Driver.NotifyBegin && + tnl->Driver.NotifyBegin( ctx, mode )) + return; + + assert( IM->SavedBeginState == 0 ); + assert( IM->BeginState == 0 ); + + /* Not quite right. Need to use the fallback '_aa_ArrayElement' + * when not known to be inside begin/end and arrays are + * unlocked. + */ + if (IM->FlushElt == FLUSH_ELT_EAGER) { + _tnl_translate_array_elts( ctx, IM, last, count ); + } + + IM->Flag[count] |= VERT_BEGIN; + IM->Primitive[count] = mode | PRIM_BEGIN; + IM->PrimitiveLength[last] = count - last; + IM->LastPrimitive = count; + IM->BeginState = (VERT_BEGIN_0|VERT_BEGIN_1); + +/* fprintf(stderr, "%s: %x\n", __FUNCTION__, IM->BeginState); */ + + ctx->Driver.NeedFlush |= FLUSH_STORED_VERTICES; ctx->Driver.CurrentExecPrimitive = mode; } } @@ -188,12 +224,13 @@ _tnl_Begin( GLenum mode ) GLboolean _tnl_hard_begin( GLcontext *ctx, GLenum p ) { +/* fprintf(stderr, "%s\n", __FUNCTION__); */ + if (!ctx->CompileFlag) { /* If not compiling, treat as a normal begin(). */ - _tnl_begin( ctx, p ); - ASSERT(ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END); - ctx->Driver.CurrentExecPrimitive = p; +/* fprintf(stderr, "%s: treating as glBegin\n", __FUNCTION__); */ + glBegin( p ); return GL_TRUE; } else { @@ -259,7 +296,7 @@ _tnl_hard_begin( GLcontext *ctx, GLenum p ) return GL_TRUE; default: - ASSERT (0); + assert (0); return GL_TRUE; } } @@ -282,6 +319,8 @@ _tnl_end( GLcontext *ctx ) GLuint state = IM->BeginState; GLuint inflags = (~state) & (VERT_BEGIN_0|VERT_BEGIN_1); + assert( ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES ); + state |= inflags << 2; /* errors */ if (inflags != (VERT_BEGIN_0|VERT_BEGIN_1)) @@ -305,8 +344,11 @@ _tnl_end( GLcontext *ctx ) IM->BeginState = state; - if (!ctx->CompileFlag) { - ctx->Driver.CurrentExecPrimitive = PRIM_OUTSIDE_BEGIN_END; + if (ctx->ExecuteFlag) { + if (ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END) + _mesa_error( ctx, GL_INVALID_OPERATION, "_tnl_End" ); + else + ctx->Driver.CurrentExecPrimitive = PRIM_OUTSIDE_BEGIN_END; } /* You can set this flag to get the old 'flush_vb on glEnd()' @@ -1085,19 +1127,6 @@ _tnl_eval_coord2f( GLcontext *CC, GLfloat u, GLfloat v ) EVALCOORD2( i, u, v ); } -void -_tnl_array_element( GLcontext *CC, GLint i ) -{ - struct immediate *im = TNL_CURRENT_IM(CC); - ARRAY_ELT( im, i ); -} - -void -_tnl_vertex2f( GLcontext *ctx, GLfloat x, GLfloat y ) -{ - struct immediate *im = TNL_CURRENT_IM(ctx); - VERTEX2( im, x, y ); -} @@ -1113,14 +1142,12 @@ _tnl_Rectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ) { GET_CURRENT_CONTEXT(ctx); -/* fprintf(stderr, "%s\n", __FUNCTION__); */ - if (_tnl_hard_begin( ctx, GL_QUADS )) { - _tnl_vertex2f( ctx, x1, y1 ); - _tnl_vertex2f( ctx, x2, y1 ); - _tnl_vertex2f( ctx, x2, y2 ); - _tnl_vertex2f( ctx, x1, y2 ); - _tnl_end( ctx ); + glVertex2f( x1, y1 ); + glVertex2f( x2, y1 ); + glVertex2f( x2, y2 ); + glVertex2f( x1, y2 ); + glEnd(); } } @@ -1136,6 +1163,9 @@ _tnl_Materialfv( GLenum face, GLenum pname, const GLfloat *params ) if (bitmask == 0) return; + + if (MESA_VERBOSE & VERBOSE_API) + fprintf(stderr, "_tnl_Materialfv\n"); if (tnl->IsolateMaterials && !(IM->BeginState & VERT_BEGIN_1)) /* heuristic */ diff --git a/xc/extras/Mesa/src/tnl/t_imm_api.h b/xc/extras/Mesa/src/tnl/t_imm_api.h index c0c5f0b4d..1ed727466 100644 --- a/xc/extras/Mesa/src/tnl/t_imm_api.h +++ b/xc/extras/Mesa/src/tnl/t_imm_api.h @@ -32,6 +32,7 @@ extern void _tnl_save_Begin( GLenum mode ); +extern void _tnl_Begin( GLenum mode ); /* TNL-private internal functions for building higher-level operations: */ diff --git a/xc/extras/Mesa/src/tnl/t_imm_debug.c b/xc/extras/Mesa/src/tnl/t_imm_debug.c index 63b53b79b..c6c16c26c 100644 --- a/xc/extras/Mesa/src/tnl/t_imm_debug.c +++ b/xc/extras/Mesa/src/tnl/t_imm_debug.c @@ -79,87 +79,90 @@ void _tnl_print_cassette( struct immediate *IM ) _tnl_print_vert_flags("Contains a full complement of", andflag); fprintf(stderr, "Final begin/end state %s/%s, errors %s/%s\n", - (state & VERT_BEGIN_0) ? "in" : "out", - (state & VERT_BEGIN_1) ? "in" : "out", - (state & VERT_ERROR_0) ? "y" : "n", - (state & VERT_ERROR_1) ? "y" : "n"); + (state & VERT_BEGIN_0) ? "in" : "out", + (state & VERT_BEGIN_1) ? "in" : "out", + (state & VERT_ERROR_0) ? "y" : "n", + (state & VERT_ERROR_1) ? "y" : "n"); } - for (i = IM->CopyStart ; i <= IM->Count ; i++) { - fprintf(stderr, "%u: ", i); - if (req & VERT_OBJ_234) { - if (flags[i] & VERT_EVAL_C1) - fprintf(stderr, "EvalCoord %f ", IM->Obj[i][0]); - else if (flags[i] & VERT_EVAL_P1) - fprintf(stderr, "EvalPoint %.0f ", IM->Obj[i][0]); - else if (flags[i] & VERT_EVAL_C2) - fprintf(stderr, "EvalCoord %f %f ", IM->Obj[i][0], IM->Obj[i][1]); - else if (flags[i] & VERT_EVAL_P2) - fprintf(stderr, "EvalPoint %.0f %.0f ", IM->Obj[i][0], IM->Obj[i][1]); - else if (i < IM->Count && (flags[i]&VERT_OBJ_234)) { - fprintf(stderr, "Obj %f %f %f %f", - IM->Obj[i][0], IM->Obj[i][1], IM->Obj[i][2], IM->Obj[i][3]); + if ((MESA_VERBOSE & VERBOSE_IMMEDIATE) && + (MESA_VERBOSE & VERBOSE_VERTS)) { + for (i = IM->CopyStart ; i <= IM->Count ; i++) { + fprintf(stderr, "%u: ", i); + if (req & VERT_OBJ_234) { + if (flags[i] & VERT_EVAL_C1) + fprintf(stderr, "EvalCoord %f ", IM->Obj[i][0]); + else if (flags[i] & VERT_EVAL_P1) + fprintf(stderr, "EvalPoint %.0f ", IM->Obj[i][0]); + else if (flags[i] & VERT_EVAL_C2) + fprintf(stderr, "EvalCoord %f %f ", IM->Obj[i][0], IM->Obj[i][1]); + else if (flags[i] & VERT_EVAL_P2) + fprintf(stderr, "EvalPoint %.0f %.0f ", IM->Obj[i][0], IM->Obj[i][1]); + else if (i < IM->Count && (flags[i]&VERT_OBJ_234)) { + fprintf(stderr, "Obj %f %f %f %f", + IM->Obj[i][0], IM->Obj[i][1], IM->Obj[i][2], IM->Obj[i][3]); + } } - } - if (req & flags[i] & VERT_ELT) - fprintf(stderr, " Elt %u\t", IM->Elt[i]); - - if (req & flags[i] & VERT_NORM) - fprintf(stderr, " Norm %f %f %f ", - IM->Normal[i][0], IM->Normal[i][1], IM->Normal[i][2]); - - if (req & flags[i] & VERT_TEX_ANY) { - GLuint j; - for (j = 0 ; j < MAX_TEXTURE_UNITS ; j++) { - if (req & flags[i] & VERT_TEX(j)) { - fprintf(stderr, - "TC%d %f %f %f %f", - j, - IM->TexCoord[j][i][0], IM->TexCoord[j][i][1], - IM->TexCoord[j][i][2], IM->TexCoord[j][i][2]); + if (req & flags[i] & VERT_ELT) + fprintf(stderr, " Elt %u\t", IM->Elt[i]); + + if (req & flags[i] & VERT_NORM) + fprintf(stderr, " Norm %f %f %f ", + IM->Normal[i][0], IM->Normal[i][1], IM->Normal[i][2]); + + if (req & flags[i] & VERT_TEX_ANY) { + GLuint j; + for (j = 0 ; j < MAX_TEXTURE_UNITS ; j++) { + if (req & flags[i] & VERT_TEX(j)) { + fprintf(stderr, + "TC%d %f %f %f %f", + j, + IM->TexCoord[j][i][0], IM->TexCoord[j][i][1], + IM->TexCoord[j][i][2], IM->TexCoord[j][i][2]); + } } } - } - if (req & flags[i] & VERT_RGBA) - fprintf(stderr, " Rgba %f %f %f %f ", - IM->Color[i][0], IM->Color[i][1], - IM->Color[i][2], IM->Color[i][3]); + if (req & flags[i] & VERT_RGBA) + fprintf(stderr, " Rgba %f %f %f %f ", + IM->Color[i][0], IM->Color[i][1], + IM->Color[i][2], IM->Color[i][3]); - if (req & flags[i] & VERT_SPEC_RGB) - fprintf(stderr, " Spec %f %f %f ", - IM->SecondaryColor[i][0], IM->SecondaryColor[i][1], - IM->SecondaryColor[i][2]); + if (req & flags[i] & VERT_SPEC_RGB) + fprintf(stderr, " Spec %f %f %f ", + IM->SecondaryColor[i][0], IM->SecondaryColor[i][1], + IM->SecondaryColor[i][2]); - if (req & flags[i] & VERT_FOG_COORD) - fprintf(stderr, " Fog %f ", IM->FogCoord[i]); + if (req & flags[i] & VERT_FOG_COORD) + fprintf(stderr, " Fog %f ", IM->FogCoord[i]); - if (req & flags[i] & VERT_INDEX) - fprintf(stderr, " Index %u ", IM->Index[i]); + if (req & flags[i] & VERT_INDEX) + fprintf(stderr, " Index %u ", IM->Index[i]); - if (req & flags[i] & VERT_EDGE) - fprintf(stderr, " Edgeflag %d ", IM->EdgeFlag[i]); + if (req & flags[i] & VERT_EDGE) + fprintf(stderr, " Edgeflag %d ", IM->EdgeFlag[i]); - if (req & flags[i] & VERT_MATERIAL) - fprintf(stderr, " Material "); + if (req & flags[i] & VERT_MATERIAL) + fprintf(stderr, " Material "); - /* The order of these two is not easily knowable, but this is - * the usually correct way to look at them. - */ - if (req & flags[i] & VERT_END) - fprintf(stderr, " END "); + /* The order of these two is not easily knowable, but this is + * the usually correct way to look at them. + */ + if (req & flags[i] & VERT_END) + fprintf(stderr, " END "); - if (req & flags[i] & VERT_BEGIN) - fprintf(stderr, " BEGIN(%s) (%s%s%s%s)", - _mesa_prim_name[IM->Primitive[i] & PRIM_MODE_MASK], - (IM->Primitive[i] & PRIM_LAST) ? "LAST," : "", - (IM->Primitive[i] & PRIM_BEGIN) ? "BEGIN," : "", - (IM->Primitive[i] & PRIM_END) ? "END," : "", - (IM->Primitive[i] & PRIM_PARITY) ? "PARITY," : ""); + if (req & flags[i] & VERT_BEGIN) + fprintf(stderr, " BEGIN(%s) (%s%s%s%s)", + _mesa_prim_name[IM->Primitive[i] & PRIM_MODE_MASK], + (IM->Primitive[i] & PRIM_LAST) ? "LAST," : "", + (IM->Primitive[i] & PRIM_BEGIN) ? "BEGIN," : "", + (IM->Primitive[i] & PRIM_END) ? "END," : "", + (IM->Primitive[i] & PRIM_PARITY) ? "PARITY," : ""); - fprintf(stderr, "\n"); + fprintf(stderr, "\n"); + } } } diff --git a/xc/extras/Mesa/src/tnl/t_imm_dlist.c b/xc/extras/Mesa/src/tnl/t_imm_dlist.c index 3bafa911e..0b0f0f841 100644 --- a/xc/extras/Mesa/src/tnl/t_imm_dlist.c +++ b/xc/extras/Mesa/src/tnl/t_imm_dlist.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -75,7 +75,7 @@ static void build_normal_lengths( struct immediate *IM ) GLuint count = IM->Count - IM->Start; if (!dest) { - dest = IM->NormalLengthPtr = ALIGN_MALLOC( IMM_SIZE*sizeof(GLfloat), 32 ); + dest = IM->NormalLengthPtr = (GLfloat *) ALIGN_MALLOC( IMM_SIZE*sizeof(GLfloat), 32 ); if (!dest) return; } dest += IM->Start; @@ -127,6 +127,9 @@ _tnl_compile_cassette( GLcontext *ctx, struct immediate *IM ) TNLvertexcassette *node; GLuint new_beginstate; + if (MESA_VERBOSE & VERBOSE_DISPLAY_LIST) + fprintf(stderr, "_tnl_compiled_cassette IM: %d\n", IM->id); + if (IM->FlushElt) { ASSERT (IM->FlushElt == FLUSH_ELT_LAZY); _tnl_translate_array_elts( ctx, IM, IM->Start, IM->Count ); @@ -292,7 +295,8 @@ execute_compiled_cassette( GLcontext *ctx, void *data ) TNLvertexcassette *node = (TNLvertexcassette *)data; struct immediate *IM = node->IM; -/* fprintf(stderr, "%s IM: %d\n", __FUNCTION__, IM->id); */ + if (MESA_VERBOSE & VERBOSE_DISPLAY_LIST) + fprintf(stderr, "execute_compiled_cassette IM: %d\n", IM->id); IM->Start = node->Start; IM->CopyStart = node->Start; @@ -388,7 +392,7 @@ destroy_compiled_cassette( GLcontext *ctx, void *data ) TNLvertexcassette *node = (TNLvertexcassette *)data; if ( --node->IM->ref_count == 0 ) - _tnl_free_immediate( node->IM ); + _tnl_free_immediate( ctx, node->IM ); } diff --git a/xc/extras/Mesa/src/tnl/t_imm_eval.c b/xc/extras/Mesa/src/tnl/t_imm_eval.c index 09f63a4fe..75ac8984e 100644 --- a/xc/extras/Mesa/src/tnl/t_imm_eval.c +++ b/xc/extras/Mesa/src/tnl/t_imm_eval.c @@ -241,7 +241,6 @@ static void eval2_4f( GLvector4f *dest, if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) { GLfloat u = (coord[i][0] - u1) * du; GLfloat v = (coord[i][1] - v1) * dv; -/* fprintf(stderr, "coord %d: %f %f\n", i, coord[i][0], coord[i][1]); */ _math_horner_bezier_surf(map->Points, to[i], u, v, dimension, map->Uorder, map->Vorder); @@ -343,8 +342,6 @@ static void copy_4f_stride( GLfloat to[][4], GLfloat *from, MEMCPY( to, from, count * sizeof(to[0])); else { GLuint i; -/* fprintf(stderr, "%s stride %d count %d\n", __FUNCTION__, */ -/* stride, count); */ for (i = 0 ; i < count ; i++, STRIDE_F(from, stride)) COPY_4FV( to[i], from ); } @@ -353,11 +350,7 @@ static void copy_4f_stride( GLfloat to[][4], GLfloat *from, static void copy_3f( GLfloat to[][3], GLfloat from[][3], GLuint count ) { GLuint i; -/* MEMCPY( to, from, (count) * sizeof(to[0])); */ for (i = 0 ; i < count ; i++) { -/* fprintf(stderr, "copy norm %d from %p: %f %f %f\n", i, */ -/* from[i], */ -/* from[i][0], from[i][1], from[i][2]); */ COPY_3FV(to[i], from[i]); } } @@ -458,9 +451,6 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM ) else copycount = IM->Count - IM->CopyStart; /* copy all vertices */ -/* fprintf(stderr, "%s copystart %d start %d count %d copycount %d\n", */ -/* __FUNCTION__, IM->CopyStart, IM->Start, IM->Count, copycount); */ - if (!store) store = tnl->eval.im = _tnl_alloc_immediate( ctx ); @@ -620,7 +610,6 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM ) GLuint generated = 0; if (copycount) { -/* fprintf(stderr, "%s: Copy normals\n", __FUNCTION__); */ copy_3f( store->Normal + IM->CopyStart, tmp->Normal.data, copycount ); } @@ -710,8 +699,6 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM ) struct vertex_buffer *VB = &tnl->vb; GLuint i,j,count = VB->Count; -/* fprintf(stderr, "PURGING\n"); */ - for (i = 0, j = 0 ; i < count ; i++) { if (flags[i] & vertex) { store->Elt[j++] = i; diff --git a/xc/extras/Mesa/src/tnl/t_imm_exec.c b/xc/extras/Mesa/src/tnl/t_imm_exec.c index 62e940dcd..33dc781f1 100644 --- a/xc/extras/Mesa/src/tnl/t_imm_exec.c +++ b/xc/extras/Mesa/src/tnl/t_imm_exec.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -68,6 +68,10 @@ static void reset_input( GLcontext *ctx, if (start < IM->Count+2) MEMSET(IM->Flag + start, 0, sizeof(GLuint) * (IM->Count+2-start)); + if (MESA_VERBOSE & VERBOSE_IMMEDIATE) + fprintf(stderr, "reset_input: IM(%d) new %x\n", + IM->id, beginstate); + IM->Start = start; IM->Count = start; IM->LastMaterial = start; @@ -358,7 +362,7 @@ void _tnl_run_cassette( GLcontext *ctx, struct immediate *IM ) { TNLcontext *tnl = TNL_CONTEXT(ctx); -/* fprintf(stderr, "%s\n", __FUNCTION__); */ +/* fprintf(stderr, "%s\n", __FUNCTION__); */ _tnl_vb_bind_immediate( ctx, IM ); @@ -406,7 +410,7 @@ static void exec_elt_cassette( GLcontext *ctx, struct immediate *IM ) TNLcontext *tnl = TNL_CONTEXT(ctx); struct vertex_buffer *VB = &tnl->vb; -/* fprintf(stderr, "%s\n", __FUNCTION__); */ +/* fprintf(stderr, "%s\n", __FUNCTION__); */ _tnl_vb_bind_arrays( ctx, ctx->Array.LockFirst, ctx->Array.LockCount ); @@ -487,6 +491,9 @@ void _tnl_execute_cassette( GLcontext *ctx, struct immediate *IM ) if (ctx->Driver.CurrentExecPrimitive == GL_POLYGON+1) ctx->Driver.NeedFlush &= ~FLUSH_STORED_VERTICES; + +/* fprintf(stderr, "%s: NeedFlush: %x\n", __FUNCTION__, */ +/* ctx->Driver.NeedFlush); */ } @@ -553,7 +560,7 @@ void _tnl_imm_destroy( GLcontext *ctx ) if (TNL_CURRENT_IM(ctx)) { TNL_CURRENT_IM(ctx)->ref_count--; if (TNL_CURRENT_IM(ctx)->ref_count == 0) - _tnl_free_immediate( TNL_CURRENT_IM(ctx) ); + _tnl_free_immediate( ctx, TNL_CURRENT_IM(ctx) ); /* * Don't use SET_IMMEDIATE here, or else we'll whack the * _tnl_CurrentInput pointer - not good when another diff --git a/xc/extras/Mesa/src/tnl/t_imm_fixup.c b/xc/extras/Mesa/src/tnl/t_imm_fixup.c index 99ce407fa..13ae8795d 100644 --- a/xc/extras/Mesa/src/tnl/t_imm_fixup.c +++ b/xc/extras/Mesa/src/tnl/t_imm_fixup.c @@ -1,9 +1,9 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2002 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"), @@ -356,6 +356,7 @@ void _tnl_fixup_input( GLcontext *ctx, struct immediate *IM ) vulnerable ); + ++i; } while (vulnerable); } } @@ -524,7 +525,7 @@ void _tnl_copy_immediate_vertices( GLcontext *ctx, struct immediate *next ) } if (--tnl->ExecCopySource->ref_count == 0) - _tnl_free_immediate( tnl->ExecCopySource ); + _tnl_free_immediate( ctx, tnl->ExecCopySource ); tnl->ExecCopySource = next; next->ref_count++; } @@ -635,6 +636,7 @@ void _tnl_fixup_compiled_cassette( GLcontext *ctx, struct immediate *IM ) vulnerable ); + ++i; } while (vulnerable); } } @@ -726,7 +728,7 @@ _tnl_get_exec_copy_verts( GLcontext *ctx, struct immediate *IM ) if (tnl->ExecCopySource) if (--tnl->ExecCopySource->ref_count == 0) - _tnl_free_immediate( tnl->ExecCopySource ); + _tnl_free_immediate( ctx, tnl->ExecCopySource ); if (prim == GL_POLYGON+1) { tnl->ExecCopySource = 0; diff --git a/xc/extras/Mesa/src/tnl/t_vb_lighttmp.h b/xc/extras/Mesa/src/tnl/t_vb_lighttmp.h index a9cca9ac5..87562eb95 100644 --- a/xc/extras/Mesa/src/tnl/t_vb_lighttmp.h +++ b/xc/extras/Mesa/src/tnl/t_vb_lighttmp.h @@ -115,8 +115,8 @@ static void TAG(light_rgba_spec)( GLcontext *ctx, (void) vstride; - -/* fprintf(stderr, "%s\n", __FUNCTION__ ); */ + if (MESA_VERBOSE & VERBOSE_LIGHTING) + fprintf(stderr, "%s\n", __FUNCTION__ ); spec[0] = Fspec; spec[1] = Bspec; @@ -326,7 +326,9 @@ static void TAG(light_rgba)( GLcontext *ctx, GLuint *new_material_mask = VB->MaterialMask; GLuint nr = VB->Count; -/* fprintf(stderr, "%s\n", __FUNCTION__ ); */ + if (MESA_VERBOSE & VERBOSE_LIGHTING) + fprintf(stderr, "%s\n", __FUNCTION__ ); + (void) flags; (void) nstride; (void) vstride; @@ -534,7 +536,9 @@ static void TAG(light_fast_rgba_single)( GLcontext *ctx, GLfloat base[2][3]; GLuint nr = VB->Count; -/* fprintf(stderr, "%s\n", __FUNCTION__ ); */ + if (MESA_VERBOSE & VERBOSE_LIGHTING) + fprintf(stderr, "%s\n", __FUNCTION__ ); + (void) input; /* doesn't refer to Eye or Obj */ (void) flags; (void) nr; @@ -658,7 +662,10 @@ static void TAG(light_fast_rgba)( GLcontext *ctx, GLuint nr = VB->Count; struct gl_light *light; -/* fprintf(stderr, "%s\n", __FUNCTION__ ); */ + if (MESA_VERBOSE & VERBOSE_LIGHTING) + fprintf(stderr, "%s\n", __FUNCTION__ ); + + (void) flags; (void) input; (void) nr; @@ -795,7 +802,9 @@ static void TAG(light_ci)( GLcontext *ctx, GLuint *new_material_mask = VB->MaterialMask; GLuint nr = VB->Count; -/* fprintf(stderr, "%s\n", __FUNCTION__ ); */ + if (MESA_VERBOSE & VERBOSE_LIGHTING) + fprintf(stderr, "%s\n", __FUNCTION__ ); + (void) flags; (void) nstride; (void) vstride; diff --git a/xc/extras/Mesa/src/tnl/t_vb_normals.c b/xc/extras/Mesa/src/tnl/t_vb_normals.c index 617cbaa7d..94b8da896 100644 --- a/xc/extras/Mesa/src/tnl/t_vb_normals.c +++ b/xc/extras/Mesa/src/tnl/t_vb_normals.c @@ -1,7 +1,7 @@ /* * Mesa 3-D graphics library - * Version: 3.5 + * Version: 4.0.3 * * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. * @@ -60,12 +60,22 @@ static GLboolean run_normal_stage( GLcontext *ctx, ASSERT(store->NormalTransform); - if (stage->changed_inputs) + if (stage->changed_inputs) { + /* We can only use the display list's saved normal lengths if we've + * got a transformation matrix with uniform scaling. + */ + const GLfloat *lengths; + if (ctx->ModelView.flags & MAT_FLAG_GENERAL_SCALE) + lengths = NULL; + else + lengths = VB->NormalLengthPtr; + store->NormalTransform( &ctx->ModelView, ctx->_ModelViewInvScale, VB->NormalPtr, - VB->NormalLengthPtr, + lengths, &store->normal ); + } VB->NormalPtr = &store->normal; VB->NormalLengthPtr = 0; /* no longer valid */ diff --git a/xc/extras/Mesa/src/tnl/t_vb_render.c b/xc/extras/Mesa/src/tnl/t_vb_render.c index 6ec98c88d..8ef4653a5 100644 --- a/xc/extras/Mesa/src/tnl/t_vb_render.c +++ b/xc/extras/Mesa/src/tnl/t_vb_render.c @@ -41,6 +41,7 @@ #include "glheader.h" #include "context.h" +#include "enums.h" #include "macros.h" #include "mem.h" #include "mtypes.h" @@ -324,6 +325,12 @@ static GLboolean run_render( GLcontext *ctx, length= VB->PrimitiveLength[i]; ASSERT(length || (flags & PRIM_LAST)); ASSERT((flags & PRIM_MODE_MASK) <= GL_POLYGON+1); + + if (MESA_VERBOSE & VERBOSE_PRIMS) + fprintf(stderr, "MESA prim %s %d..%d\n", + _mesa_lookup_enum_by_nr(flags & PRIM_MODE_MASK), + i, i+length); + if (length) tab[flags & PRIM_MODE_MASK]( ctx, i, i + length, flags ); } diff --git a/xc/extras/Mesa/src/tnl/t_vb_vertex.c b/xc/extras/Mesa/src/tnl/t_vb_vertex.c index c0aabd844..6158c1c8b 100644 --- a/xc/extras/Mesa/src/tnl/t_vb_vertex.c +++ b/xc/extras/Mesa/src/tnl/t_vb_vertex.c @@ -139,7 +139,8 @@ static GLboolean run_vertex_stage( GLcontext *ctx, if (stage->changed_inputs) { if (ctx->_NeedEyeCoords) { - /* Separate modelview and project transformations: + /* Separate modelview transformation: + * Use combined ModelProject to avoid some depth artifacts */ if (ctx->ModelView.type == MATRIX_IDENTITY) VB->EyePtr = VB->ObjPtr; @@ -150,8 +151,8 @@ static GLboolean run_vertex_stage( GLcontext *ctx, if (ctx->ProjectionMatrix.type == MATRIX_IDENTITY) VB->ClipPtr = VB->EyePtr; else - VB->ClipPtr = TransformRaw( &store->clip, &ctx->ProjectionMatrix, - VB->EyePtr ); + VB->ClipPtr = TransformRaw( &store->clip, &ctx->_ModelProjectMatrix, + VB->ObjPtr ); } else { /* Combined modelviewproject transform: diff --git a/xc/extras/Mesa/src/vtxfmt.c b/xc/extras/Mesa/src/vtxfmt.c index e67fd7c7e..861977673 100644 --- a/xc/extras/Mesa/src/vtxfmt.c +++ b/xc/extras/Mesa/src/vtxfmt.c @@ -49,15 +49,6 @@ { \ GET_CURRENT_CONTEXT(ctx); \ struct gl_tnl_module *tnl = &(ctx->TnlModule); \ - const GLuint new_state = ctx->NewState; \ - \ - if ( new_state ) \ - _mesa_update_state( ctx ); \ - \ - /* Validate the current tnl module. \ - */ \ - if ( new_state & ctx->Driver.NeedValidate ) \ - ctx->Driver.ValidateTnlModule( ctx, new_state ); \ \ ASSERT( tnl->Current ); \ ASSERT( tnl->SwapCount < NUM_VERTEX_FORMAT_ENTRIES ); \ @@ -152,6 +143,7 @@ static void install_vtxfmt( struct _glapi_table *tab, GLvertexformat *vfmt ) void _mesa_init_exec_vtxfmt( GLcontext *ctx ) { install_vtxfmt( ctx->Exec, &neutral_vtxfmt ); + ctx->TnlModule.SwapCount = 0; } |