diff options
author | dawes <dawes> | 2001-08-17 18:25:50 +0000 |
---|---|---|
committer | dawes <dawes> | 2001-08-17 18:25:50 +0000 |
commit | 9d24d222d99eb6d5558edbb460d3cdf4b1d65f06 (patch) | |
tree | e27b286c0a4cca22c294c6dc85701a20e668b3da | |
parent | baa42376bacd9a37290e4c6268bee881cebecf4e (diff) |
Mesa version 3.4.2 snapshot at 20010817
-rw-r--r-- | extras/Mesa/Make-config | 10 | ||||
-rw-r--r-- | extras/Mesa/WIN32/RULES/lib.mesa.core | 4 | ||||
-rw-r--r-- | extras/Mesa/src/Windows/wmesa.c | 2 | ||||
-rw-r--r-- | extras/Mesa/src/X86/common_x86.c | 10 | ||||
-rw-r--r-- | extras/Mesa/src/dlist.c | 39 | ||||
-rw-r--r-- | extras/Mesa/src/enums.c | 3 | ||||
-rw-r--r-- | extras/Mesa/src/lines.c | 31 | ||||
-rw-r--r-- | extras/Mesa/src/macros.h | 22 | ||||
-rw-r--r-- | extras/Mesa/src/pixel.c | 88 | ||||
-rw-r--r-- | extras/Mesa/src/texstate.c | 2 | ||||
-rw-r--r-- | extras/Mesa/src/xform_tmp.h | 8 |
11 files changed, 148 insertions, 71 deletions
diff --git a/extras/Mesa/Make-config b/extras/Mesa/Make-config index 227a49f69..aad2c36de 100644 --- a/extras/Mesa/Make-config +++ b/extras/Mesa/Make-config @@ -453,7 +453,7 @@ linux: "GLUT_LIB = libglut.so" \ "GLW_LIB = libGLw.so" \ "CC = gcc" \ - "CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DPTHREADS -I/usr/X11R6/include" \ + "CFLAGS = -O3 -ansi -pedantic -fPIC -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DPTHREADS -I/usr/X11R6/include" \ "MAKELIB = ../bin/mklib.linux" \ "GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lpthread" \ "GLU_LIB_DEPS = -L../lib -lGL -lm" \ @@ -467,7 +467,7 @@ linux-static: "GLUT_LIB = libglut.a" \ "GLW_LIB = libGLw.a" \ "CC = gcc" \ - "CFLAGS = -O3 -funroll-loops -ansi -pedantic -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DPTHREADS -I/usr/X11R6/include" \ + "CFLAGS = -O3 -funroll-loops -ansi -pedantic -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DPTHREADS -I/usr/X11R6/include" \ "MAKELIB = ../bin/mklib.ar-ruv" \ "APP_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lXmu -lXt -lXi -lm -lpthread" @@ -478,7 +478,7 @@ linux-x86: "GLUT_LIB = libglut.so" \ "GLW_LIB = libGLw.so" \ "CC = gcc -malign-loops=2 -malign-jumps=2 -malign-functions=2" \ - "CFLAGS = -Wall -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_KATMAI_ASM -DPTHREADS -I/usr/X11R6/include" \ + "CFLAGS = -Wall -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_KATMAI_ASM -DPTHREADS -I/usr/X11R6/include" \ "MAKELIB = ../bin/mklib.linux" \ "GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lm -lpthread" \ "GLU_LIB_DEPS = -L../lib -lGL -lm" \ @@ -508,7 +508,7 @@ linux-x86-static: "GLUT_LIB = libglut.a" \ "GLW_LIB = libGLw.a" \ "CC = gcc -malign-loops=2 -malign-jumps=2 -malign-functions=2" \ - "CFLAGS = -Wall -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_KATMAI_ASM -DPTHREADS -I/usr/X11R6/include" \ + "CFLAGS = -Wall -O3 -ansi -pedantic -fPIC -ffast-math -funroll-loops -fomit-frame-pointer -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_KATMAI_ASM -DPTHREADS -I/usr/X11R6/include" \ "MAKELIB = ../bin/mklib.ar-ruv" \ "GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lm -lpthread" \ "GLU_LIB_DEPS = -L../lib -lGL -lm" \ @@ -1295,7 +1295,7 @@ linux-x86-debug: "GLUT_LIB = libglut.so" \ "GLW_LIB = libGLw.so" \ "CC = gcc -malign-loops=2 -malign-jumps=2 -malign-functions=2" \ - "CFLAGS = -O2 -g -ansi -pedantic -Wall -Wmissing-prototypes -fPIC -ffast-math -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_KATMAI_ASM -DPTHREADS -I/usr/X11R6/include -DDEBUG -DMESA_DEBUG" \ + "CFLAGS = -O2 -g -ansi -pedantic -Wall -Wmissing-prototypes -fPIC -ffast-math -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_SVID_SOURCE -D_BSD_SOURCE -DUSE_XSHM -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_KATMAI_ASM -DPTHREADS -I/usr/X11R6/include -DDEBUG -DMESA_DEBUG" \ "MAKELIB = ../bin/mklib.linux" \ "GL_LIB_DEPS = -L/usr/X11R6/lib -lX11 -lXext -lm -lm -lpthread" \ "GLU_LIB_DEPS = -L../lib -lGL -lm" \ diff --git a/extras/Mesa/WIN32/RULES/lib.mesa.core b/extras/Mesa/WIN32/RULES/lib.mesa.core index 9d6ffb359..5178a548d 100644 --- a/extras/Mesa/WIN32/RULES/lib.mesa.core +++ b/extras/Mesa/WIN32/RULES/lib.mesa.core @@ -12,6 +12,6 @@ MESA_CORE = aatriangle.c hash.c pixeltex.c texture.c\ eval.c lowpc.c shade.c vbindirect.c clip.c extensions.c masking.c\ span.c vbrender.c colortab.c feedback.c matrix.c stages.c vbxform.c\ config.c fog.c mem.c state.c vector.c context.c get.c mmath.c\ - stencil.c vertices.c convolve.c glapi.c pb.c teximage.c winpos.c\ - copypix.c glapinoop.c pipeline.c texobj.c xform.c cva.c glthread.c\ + stencil.c vertices.c convolve.c glapi.c pb.c texformat.c teximage.c \ + winpos.c copypix.c glapinoop.c pipeline.c texobj.c xform.c cva.c glthread.c\ pixel.c texstate.c zoom.c diff --git a/extras/Mesa/src/Windows/wmesa.c b/extras/Mesa/src/Windows/wmesa.c index 257852ba9..574cca1b3 100644 --- a/extras/Mesa/src/Windows/wmesa.c +++ b/extras/Mesa/src/Windows/wmesa.c @@ -1085,7 +1085,7 @@ static void read_rgba_pixels( const GLcontext* ctx, assert(Current->rgb_flag==GL_TRUE); for (i=0; i<n; i++) { if (mask[i]) { - GLint y2 = Current->Height - y[i] - 1; + GLint y2 = Current->height - y[i] - 1; Color=GetPixel(DC,x[i],y2); rgba[i][RCOMP] = GetRValue(Color); rgba[i][GCOMP] = GetGValue(Color); diff --git a/extras/Mesa/src/X86/common_x86.c b/extras/Mesa/src/X86/common_x86.c index 277fdba40..25656f400 100644 --- a/extras/Mesa/src/X86/common_x86.c +++ b/extras/Mesa/src/X86/common_x86.c @@ -36,7 +36,7 @@ #include <stdlib.h> #include <stdio.h> -#if defined(USE_KATMAI_ASM) && defined(__linux__) && defined(_POSIX_SOURCE) +#if defined(USE_KATMAI_ASM) && defined(__linux__) #include <signal.h> #endif @@ -88,7 +88,7 @@ static void message( const char *msg ) extern void gl_test_os_katmai_support( void ); extern void gl_test_os_katmai_exception_support( void ); -#if defined(__linux__) && defined(_POSIX_SOURCE) +#if defined(__linux__) && defined(_POSIX_SOURCE) && defined(X86_FXSR_MAGIC) static void sigill_handler( int signal, struct sigcontext sc ) { message( "SIGILL, " ); @@ -126,7 +126,7 @@ static void sigfpe_handler( int signal, struct sigcontext sc ) gl_problem( NULL, "SSE enabling test failed badly!" ); } } -#endif /* __linux__ && _POSIX_SOURCE */ +#endif /* __linux__ && _POSIX_SOURCE && X86_FXSR_MAGIC */ /* If we're running on a processor that can do SSE, let's see if we * are allowed to or not. This will catch 2.4.0 or later kernels that @@ -139,7 +139,7 @@ static void sigfpe_handler( int signal, struct sigcontext sc ) static void check_os_katmai_support( void ) { #if defined(__linux__) -#if defined(_POSIX_SOURCE) +#if defined(_POSIX_SOURCE) && defined(X86_FXSR_MAGIC) struct sigaction saved_sigill; struct sigaction saved_sigfpe; @@ -213,7 +213,7 @@ static void check_os_katmai_support( void ) */ message( "Cannot test OS support for SSE, disabling to be safe.\n" ); gl_x86_cpu_features &= ~(X86_FEATURE_XMM); -#endif /* _POSIX_SOURCE */ +#endif /* _POSIX_SOURCE && X86_FXSR_MAGIC */ #else /* Do nothing on non-Linux platforms for now. */ diff --git a/extras/Mesa/src/dlist.c b/extras/Mesa/src/dlist.c index dfa65ea37..515d02c67 100644 --- a/extras/Mesa/src/dlist.c +++ b/extras/Mesa/src/dlist.c @@ -1153,7 +1153,7 @@ save_CopyColorSubTable(GLenum target, GLsizei start, Node *n; FLUSH_VB(ctx, "dlist"); - n = alloc_instruction( ctx, OPCODE_COPY_COLOR_SUB_TABLE, 6 ); + n = alloc_instruction( ctx, OPCODE_COPY_COLOR_SUB_TABLE, 5 ); if (n) { n[1].e = target; n[2].i = start; @@ -1175,7 +1175,7 @@ save_CopyColorTable(GLenum target, GLenum internalformat, Node *n; FLUSH_VB(ctx, "dlist"); - n = alloc_instruction( ctx, OPCODE_COPY_COLOR_TABLE, 6 ); + n = alloc_instruction( ctx, OPCODE_COPY_COLOR_TABLE, 5 ); if (n) { n[1].e = target; n[2].e = internalformat; @@ -1317,7 +1317,7 @@ save_ConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat *params) GET_CURRENT_CONTEXT(ctx); Node *n; FLUSH_VB(ctx, "dlist"); - n = alloc_instruction( ctx, OPCODE_CONVOLUTION_PARAMETER_IV, 6 ); + n = alloc_instruction( ctx, OPCODE_CONVOLUTION_PARAMETER_FV, 6 ); if (n) { n[1].e = target; n[2].e = pname; @@ -3670,7 +3670,7 @@ save_CompressedTexImage1DARB(GLenum target, GLint level, return; } MEMCPY(image, data, imageSize); - n = alloc_instruction( ctx, OPCODE_COMPRESSED_TEX_IMAGE_1D, 8 ); + n = alloc_instruction( ctx, OPCODE_COMPRESSED_TEX_IMAGE_1D, 7 ); if (n) { n[1].e = target; n[2].i = level; @@ -3714,7 +3714,7 @@ save_CompressedTexImage2DARB(GLenum target, GLint level, return; } MEMCPY(image, data, imageSize); - n = alloc_instruction( ctx, OPCODE_COMPRESSED_TEX_IMAGE_2D, 9 ); + n = alloc_instruction( ctx, OPCODE_COMPRESSED_TEX_IMAGE_2D, 8 ); if (n) { n[1].e = target; n[2].i = level; @@ -3759,7 +3759,7 @@ save_CompressedTexImage3DARB(GLenum target, GLint level, return; } MEMCPY(image, data, imageSize); - n = alloc_instruction( ctx, OPCODE_COMPRESSED_TEX_IMAGE_3D, 10 ); + n = alloc_instruction( ctx, OPCODE_COMPRESSED_TEX_IMAGE_3D, 9 ); if (n) { n[1].e = target; n[2].i = level; @@ -3800,7 +3800,7 @@ save_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset, return; } MEMCPY(image, data, imageSize); - n = alloc_instruction( ctx, OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D, 8 ); + n = alloc_instruction( ctx, OPCODE_COMPRESSED_TEX_SUB_IMAGE_1D, 7 ); if (n) { n[1].e = target; n[2].i = level; @@ -3839,7 +3839,7 @@ save_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset, return; } MEMCPY(image, data, imageSize); - n = alloc_instruction( ctx, OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D, 10 ); + n = alloc_instruction( ctx, OPCODE_COMPRESSED_TEX_SUB_IMAGE_2D, 9 ); if (n) { n[1].e = target; n[2].i = level; @@ -3880,7 +3880,7 @@ save_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset, return; } MEMCPY(image, data, imageSize); - n = alloc_instruction( ctx, OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D, 12 ); + n = alloc_instruction( ctx, OPCODE_COMPRESSED_TEX_SUB_IMAGE_3D, 11 ); if (n) { n[1].e = target; n[2].i = level; @@ -5661,11 +5661,22 @@ static void print_list( GLcontext *ctx, FILE *f, GLuint list ) fprintf(f,"Error: %s %s\n", enum_string(n[1].e), (const char *)n[2].data ); break; case OPCODE_VERTEX_CASSETTE: - fprintf(f,"VERTEX-CASSETTE, id %u, rows %u..%u\n", - ((struct immediate *) n[1].data)->id, - n[2].ui, - n[3].ui); - gl_print_cassette( (struct immediate *) n[1].data ); + { + struct immediate *IM; + fprintf(f,"VERTEX-CASSETTE, id %u, rows %u..%u\n", + ((struct immediate *) n[1].data)->id, + n[2].ui, + n[3].ui); + IM = (struct immediate *) n[1].data; + IM->Start = n[2].ui; + IM->Count = n[3].ui; + IM->BeginState = n[4].ui; + IM->OrFlag = n[5].ui; + IM->AndFlag = n[6].ui; + IM->LastData = n[7].ui; + IM->LastPrimitive = n[8].ui; + gl_print_cassette( (struct immediate *) n[1].data ); + } break; case OPCODE_CONTINUE: fprintf(f,"DISPLAY-LIST-CONTINUE\n"); diff --git a/extras/Mesa/src/enums.c b/extras/Mesa/src/enums.c index cc58b3707..9167ad9eb 100644 --- a/extras/Mesa/src/enums.c +++ b/extras/Mesa/src/enums.c @@ -863,6 +863,9 @@ static void sort_enums( void ) index1 = (enum_elt **)MALLOC( Elements(all_enums) * sizeof(enum_elt *) ); sorted = 1; + if (!index1) + return; /* what else can we do? */ + qsort( all_enums, Elements(all_enums), sizeof(*all_enums), (cfunc) compar_name ); diff --git a/extras/Mesa/src/lines.c b/extras/Mesa/src/lines.c index 8f7a55842..1f3d2979b 100644 --- a/extras/Mesa/src/lines.c +++ b/extras/Mesa/src/lines.c @@ -969,6 +969,23 @@ static void aa_multitex_rgba_line( GLcontext *ctx, GLuint vert0, GLuint vert1, GLuint pvert ) { #define INTERP_RGBA 1 +#define INTERP_STUV0 1 +#define INTERP_STUV1 1 +#define PLOT(x, y) \ + { \ + PB_WRITE_MULTITEX_PIXEL( pb, (x), (y), z, \ + red, green, blue, coverage, \ + s, t, u, s1, t1, u1 ); \ + } +#include "lnaatemp.h" +} + + +/* As above but with separate specular */ +static void aa_multitex_spec_line( GLcontext *ctx, + GLuint vert0, GLuint vert1, GLuint pvert ) +{ +#define INTERP_RGBA 1 #define INTERP_SPEC 1 #define INTERP_STUV0 1 #define INTERP_STUV1 1 @@ -1053,6 +1070,8 @@ _mesa_print_line_function(GLcontext *ctx) printf("aa_tex_rgba_line\n"); else if (ctx->Driver.LineFunc == aa_multitex_rgba_line) printf("aa_multitex_rgba_line\n"); + else if (ctx->Driver.LineFunc == aa_multitex_spec_line) + printf("aa_multitex_spec_line\n"); else if (ctx->Driver.LineFunc == aa_ci_line) printf("aa_ci_line\n"); else if (ctx->Driver.LineFunc == null_line) @@ -1087,12 +1106,16 @@ void gl_set_line_function( GLcontext *ctx ) /* antialiased lines */ if (rgbmode) { if (ctx->Texture.ReallyEnabled) { - if (ctx->Texture.ReallyEnabled >= TEXTURE1_1D - || ctx->Light.Model.ColorControl==GL_SEPARATE_SPECULAR_COLOR) + if (ctx->Texture.ReallyEnabled >= TEXTURE1_1D) { /* Multitextured! */ - ctx->Driver.LineFunc = aa_multitex_rgba_line; - else + if (ctx->Light.Model.ColorControl==GL_SEPARATE_SPECULAR_COLOR) + ctx->Driver.LineFunc = aa_multitex_spec_line; + else + ctx->Driver.LineFunc = aa_multitex_rgba_line; + } + else { ctx->Driver.LineFunc = aa_tex_rgba_line; + } } else { ctx->Driver.LineFunc = aa_rgba_line; } diff --git a/extras/Mesa/src/macros.h b/extras/Mesa/src/macros.h index 2a6006c9e..67e01f6a4 100644 --- a/extras/Mesa/src/macros.h +++ b/extras/Mesa/src/macros.h @@ -356,18 +356,22 @@ do { \ /* * Copy a vector of 4 GLubytes from SRC to DST. */ +#if defined(__i386__) #define COPY_4UBV(DST, SRC) \ do { \ - if (sizeof(GLuint)==4*sizeof(GLubyte)) { \ - *((GLuint*)(DST)) = *((GLuint*)(SRC)); \ - } \ - else { \ - (DST)[0] = (SRC)[0]; \ - (DST)[1] = (SRC)[1]; \ - (DST)[2] = (SRC)[2]; \ - (DST)[3] = (SRC)[3]; \ - } \ + *((GLuint*)(DST)) = *((GLuint*)(SRC)); \ } while (0) +#else +/* The GLuint cast might fail if DST or SRC are not dword-aligned (RISC) */ +#define COPY_4UBV(DST, SRC) \ +do { \ + (DST)[0] = (SRC)[0]; \ + (DST)[1] = (SRC)[1]; \ + (DST)[2] = (SRC)[2]; \ + (DST)[3] = (SRC)[3]; \ +} while (0) +#endif + /* Assign scalers to short vectors: */ diff --git a/extras/Mesa/src/pixel.c b/extras/Mesa/src/pixel.c index f4f032ae5..7b335e1ba 100644 --- a/extras/Mesa/src/pixel.c +++ b/extras/Mesa/src/pixel.c @@ -722,10 +722,14 @@ _mesa_map_rgba( const GLcontext *ctx, GLuint n, GLfloat rgba[][4] ) const GLfloat *aMap = ctx->Pixel.MapAtoA; GLuint i; for (i=0;i<n;i++) { - rgba[i][RCOMP] = rMap[(GLint) (rgba[i][RCOMP] * rscale + 0.5F)]; - rgba[i][GCOMP] = gMap[(GLint) (rgba[i][GCOMP] * gscale + 0.5F)]; - rgba[i][BCOMP] = bMap[(GLint) (rgba[i][BCOMP] * bscale + 0.5F)]; - rgba[i][ACOMP] = aMap[(GLint) (rgba[i][ACOMP] * ascale + 0.5F)]; + GLfloat r = CLAMP(rgba[i][RCOMP], 0.0F, 1.0F); + GLfloat g = CLAMP(rgba[i][GCOMP], 0.0F, 1.0F); + GLfloat b = CLAMP(rgba[i][BCOMP], 0.0F, 1.0F); + GLfloat a = CLAMP(rgba[i][ACOMP], 0.0F, 1.0F); + rgba[i][RCOMP] = rMap[(GLint) (r * rscale + 0.5F)]; + rgba[i][GCOMP] = gMap[(GLint) (g * gscale + 0.5F)]; + rgba[i][BCOMP] = bMap[(GLint) (b * bscale + 0.5F)]; + rgba[i][ACOMP] = aMap[(GLint) (a * ascale + 0.5F)]; } } @@ -774,24 +778,26 @@ _mesa_lookup_rgba(const struct gl_color_table *table, case GL_INTENSITY: /* replace RGBA with I */ if (table->TableType == GL_UNSIGNED_BYTE) { - const GLfloat scale = (GLfloat) (table->Size - 1); + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; const GLubyte *lut = (const GLubyte *) table->Table; GLuint i; for (i = 0; i < n; i++) { GLint j = (GLint) (rgba[i][RCOMP] * scale + 0.5F); - GLfloat c = lut[j] * (1.0F / 255.0F); + GLfloat c = lut[CLAMP(j, 0, max)] * (1.0F / 255.0F); rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = rgba[i][ACOMP] = c; } } else { - const GLfloat scale = (GLfloat) (table->Size - 1); + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; const GLfloat *lut = (const GLfloat *) table->Table; GLuint i; for (i = 0; i < n; i++) { GLint j = (GLint) (rgba[i][RCOMP] * scale + 0.5F); - GLfloat c = lut[j]; + GLfloat c = lut[CLAMP(j, 0, max)]; rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = rgba[i][ACOMP] = c; } @@ -800,22 +806,24 @@ _mesa_lookup_rgba(const struct gl_color_table *table, case GL_LUMINANCE: /* replace RGB with L */ if (table->TableType == GL_UNSIGNED_BYTE) { - const GLfloat scale = (GLfloat) (table->Size - 1); + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; const GLubyte *lut = (const GLubyte *) table->Table; GLuint i; for (i = 0; i < n; i++) { GLint j = (GLint) (rgba[i][RCOMP] * scale + 0.5F); - GLfloat c = lut[j] * (1.0F / 255.0F); + GLfloat c = lut[CLAMP(j, 0, max)] * (1.0F / 255.0F); rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = c; } } else { - const GLfloat scale = (GLfloat) (table->Size - 1); + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; const GLfloat *lut = (const GLfloat *) table->Table; GLuint i; for (i = 0; i < n; i++) { GLint j = (GLint) (rgba[i][RCOMP] * scale + 0.5F); - GLfloat c = lut[j]; + GLfloat c = lut[CLAMP(j, 0, max)]; rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = c; } } @@ -823,48 +831,58 @@ _mesa_lookup_rgba(const struct gl_color_table *table, case GL_ALPHA: /* replace A with A */ if (table->TableType == GL_UNSIGNED_BYTE) { - const GLfloat scale = (GLfloat) (table->Size - 1); + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; const GLubyte *lut = (const GLubyte *) table->Table; GLuint i; for (i = 0; i < n; i++) { GLint j = (GLint) (rgba[i][ACOMP] * scale + 0.5F); - rgba[i][ACOMP] = lut[j] * (1.0F / 255.0F); + rgba[i][ACOMP] = lut[CLAMP(j, 0, max)] * (1.0F / 255.0F); } } else { - const GLfloat scale = (GLfloat) (table->Size - 1); + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; const GLfloat *lut = (const GLfloat *) table->Table; GLuint i; for (i = 0; i < n; i++) { GLint j = (GLint) (rgba[i][ACOMP] * scale + 0.5F); - rgba[i][ACOMP] = lut[j]; + rgba[i][ACOMP] = lut[CLAMP(j, 0, max)]; } } break; case GL_LUMINANCE_ALPHA: /* replace RGBA with LLLA */ if (table->TableType == GL_UNSIGNED_BYTE) { - const GLfloat scale = (GLfloat) (table->Size - 1); + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; const GLubyte *lut = (const GLubyte *) table->Table; GLuint i; for (i = 0; i < n; i++) { GLint jL = (GLint) (rgba[i][RCOMP] * scale + 0.5F); GLint jA = (GLint) (rgba[i][ACOMP] * scale + 0.5F); - GLfloat luminance = lut[jL * 2 + 0] * (1.0F / 255.0F); - GLfloat alpha = lut[jA * 2 + 1] * (1.0F / 255.0F); + GLfloat luminance, alpha; + jL = CLAMP(jL, 0, max); + jA = CLAMP(jA, 0, max); + luminance = lut[jL * 2 + 0] * (1.0F / 255.0F); + alpha = lut[jA * 2 + 1] * (1.0F / 255.0F); rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = luminance; rgba[i][ACOMP] = alpha;; } } else { - const GLfloat scale = (GLfloat) (table->Size - 1); + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; const GLfloat *lut = (const GLfloat *) table->Table; GLuint i; for (i = 0; i < n; i++) { GLint jL = (GLint) (rgba[i][RCOMP] * scale + 0.5F); GLint jA = (GLint) (rgba[i][ACOMP] * scale + 0.5F); - GLfloat luminance = lut[jL * 2 + 0]; - GLfloat alpha = lut[jA * 2 + 1]; + GLfloat luminance, alpha; + jL = CLAMP(jL, 0, max); + jA = CLAMP(jA, 0, max); + luminance = lut[jL * 2 + 0]; + alpha = lut[jA * 2 + 1]; rgba[i][RCOMP] = rgba[i][GCOMP] = rgba[i][BCOMP] = luminance; rgba[i][ACOMP] = alpha;; } @@ -873,26 +891,34 @@ _mesa_lookup_rgba(const struct gl_color_table *table, case GL_RGB: /* replace RGB with RGB */ if (table->TableType == GL_UNSIGNED_BYTE) { - const GLfloat scale = (GLfloat) (table->Size - 1); + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; const GLubyte *lut = (const GLubyte *) table->Table; GLuint i; for (i = 0; i < n; i++) { GLint jR = (GLint) (rgba[i][RCOMP] * scale + 0.5F); GLint jG = (GLint) (rgba[i][GCOMP] * scale + 0.5F); GLint jB = (GLint) (rgba[i][BCOMP] * scale + 0.5F); + jR = CLAMP(jR, 0, max); + jG = CLAMP(jG, 0, max); + jB = CLAMP(jB, 0, max); rgba[i][RCOMP] = lut[jR * 3 + 0] * (1.0F / 255.0F); rgba[i][GCOMP] = lut[jG * 3 + 1] * (1.0F / 255.0F); rgba[i][BCOMP] = lut[jB * 3 + 2] * (1.0F / 255.0F); } } else { - const GLfloat scale = (GLfloat) (table->Size - 1); + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; const GLfloat *lut = (const GLfloat *) table->Table; GLuint i; for (i = 0; i < n; i++) { GLint jR = (GLint) (rgba[i][RCOMP] * scale + 0.5F); GLint jG = (GLint) (rgba[i][GCOMP] * scale + 0.5F); GLint jB = (GLint) (rgba[i][BCOMP] * scale + 0.5F); + jR = CLAMP(jR, 0, max); + jG = CLAMP(jG, 0, max); + jB = CLAMP(jB, 0, max); rgba[i][RCOMP] = lut[jR * 3 + 0]; rgba[i][GCOMP] = lut[jG * 3 + 1]; rgba[i][BCOMP] = lut[jB * 3 + 2]; @@ -902,7 +928,8 @@ _mesa_lookup_rgba(const struct gl_color_table *table, case GL_RGBA: /* replace RGBA with RGBA */ if (table->TableType == GL_UNSIGNED_BYTE) { - const GLfloat scale = (GLfloat) (table->Size - 1); + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; const GLubyte *lut = (const GLubyte *) table->Table; GLuint i; for (i = 0; i < n; i++) { @@ -910,6 +937,10 @@ _mesa_lookup_rgba(const struct gl_color_table *table, GLint jG = (GLint) (rgba[i][GCOMP] * scale + 0.5F); GLint jB = (GLint) (rgba[i][BCOMP] * scale + 0.5F); GLint jA = (GLint) (rgba[i][ACOMP] * scale + 0.5F); + jR = CLAMP(jR, 0, max); + jG = CLAMP(jG, 0, max); + jB = CLAMP(jB, 0, max); + jA = CLAMP(jA, 0, max); rgba[i][RCOMP] = lut[jR * 4 + 0] * (1.0F / 255.0F); rgba[i][GCOMP] = lut[jG * 4 + 1] * (1.0F / 255.0F); rgba[i][BCOMP] = lut[jB * 4 + 2] * (1.0F / 255.0F); @@ -917,7 +948,8 @@ _mesa_lookup_rgba(const struct gl_color_table *table, } } else { - const GLfloat scale = (GLfloat) (table->Size - 1); + const GLint max = table->Size - 1; + const GLfloat scale = (GLfloat) max; const GLfloat *lut = (const GLfloat *) table->Table; GLuint i; for (i = 0; i < n; i++) { @@ -925,6 +957,10 @@ _mesa_lookup_rgba(const struct gl_color_table *table, GLint jG = (GLint) (rgba[i][GCOMP] * scale + 0.5F); GLint jB = (GLint) (rgba[i][BCOMP] * scale + 0.5F); GLint jA = (GLint) (rgba[i][ACOMP] * scale + 0.5F); + jR = CLAMP(jR, 0, max); + jG = CLAMP(jG, 0, max); + jB = CLAMP(jB, 0, max); + jA = CLAMP(jA, 0, max); rgba[i][RCOMP] = lut[jR * 4 + 0]; rgba[i][GCOMP] = lut[jG * 4 + 1]; rgba[i][BCOMP] = lut[jB * 4 + 2]; diff --git a/extras/Mesa/src/texstate.c b/extras/Mesa/src/texstate.c index e1e25e8f8..e2e8dfa08 100644 --- a/extras/Mesa/src/texstate.c +++ b/extras/Mesa/src/texstate.c @@ -774,7 +774,7 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params ) void -_mesa_TexParameteri( GLenum target, GLenum pname, const GLint param ) +_mesa_TexParameteri( GLenum target, GLenum pname, GLint param ) { GLfloat fparam[4]; fparam[0] = (GLfloat) param; diff --git a/extras/Mesa/src/xform_tmp.h b/extras/Mesa/src/xform_tmp.h index 8a0929668..7bb0d008f 100644 --- a/extras/Mesa/src/xform_tmp.h +++ b/extras/Mesa/src/xform_tmp.h @@ -971,8 +971,8 @@ static void _XFORMAPI TAG(init_c_transformations)( void ) TAG_TAB_4[MATRIX_3D] = TAG(transform_points4_3d); #undef TAG_TAB -#undef TAG_TAB1 -#undef TAG_TAB2 -#undef TAG_TAB3 -#undef TAG_TAB4 +#undef TAG_TAB_1 +#undef TAG_TAB_2 +#undef TAG_TAB_3 +#undef TAG_TAB_4 } |