Makefile | 4 debian/changelog | 9 docs/news.html | 2 docs/relnotes-7.0.1.html | 9 docs/relnotes-7.0.2.html | 72 +++++++ docs/relnotes.html | 1 include/GL/glu.h | 27 +- src/glu/sgi/libutil/project.c | 115 +++++------- src/glx/x11/glxext.c | 7 src/glx/x11/indirect_vertex_array.c | 14 - src/mesa/drivers/dri/common/spantmp2.h | 2 src/mesa/drivers/dri/i810/i810screen.c | 2 src/mesa/drivers/dri/i915/i915_texstate.c | 19 + src/mesa/drivers/dri/i915/intel_context.c | 8 src/mesa/drivers/dri/i915/intel_context.h | 4 src/mesa/drivers/dri/i915/intel_screen.c | 4 src/mesa/drivers/dri/i915/intel_tex.c | 6 src/mesa/drivers/dri/i915tex/i830_vtbl.c | 10 + src/mesa/drivers/dri/i915tex/i915_vtbl.c | 10 + src/mesa/drivers/dri/i915tex/intel_context.c | 12 + src/mesa/drivers/dri/i915tex/intel_context.h | 4 src/mesa/drivers/dri/i915tex/intel_mipmap_tree.c | 16 + src/mesa/drivers/dri/i915tex/intel_screen.c | 4 src/mesa/drivers/dri/unichrome/via_context.c | 9 src/mesa/main/api_validate.c | 145 ++++++++------- src/mesa/main/attrib.c | 200 ++++++++++++++------- src/mesa/main/attrib.h | 4 src/mesa/main/context.c | 97 ++++++---- src/mesa/main/dlist.c | 6 src/mesa/main/fbobject.c | 27 +- src/mesa/main/framebuffer.c | 13 - src/mesa/main/image.c | 2 src/mesa/main/mtypes.h | 7 src/mesa/main/texobj.c | 219 ++++++++++++----------- src/mesa/main/texobj.h | 4 src/mesa/main/texstate.c | 93 ++++----- src/mesa/shader/atifragshader.c | 4 src/mesa/shader/shader_api.c | 8 src/mesa/swrast/s_pointtemp.h | 4 src/mesa/vbo/vbo_split_copy.c | 9 src/mesa/x86-64/matypes.h | 162 ----------------- src/mesa/x86/matypes.h | 163 ----------------- 42 files changed, 748 insertions(+), 789 deletions(-)
New commits: commit 369cda37527959ae7e64478f17bbb21243d67135 Author: Julien Cristau <[EMAIL PROTECTED]> Date: Tue Aug 28 12:11:47 2007 +0200 Prepare changelog for upload. diff --git a/debian/changelog b/debian/changelog index b56407c..b67350d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,11 @@ -mesa (7.0.1-2) UNRELEASED; urgency=low +mesa (7.0.1-2) unstable; urgency=low * Update to latest git (from mesa_7_0_branch) + adds support for some new intel chipsets (i915 and i915_tex dri drivers) (closes: #437333) + broken inline asm in dri drivers fixed (closes: #423739) - -- Julien Cristau <[EMAIL PROTECTED]> Tue, 28 Aug 2007 12:06:45 +0200 + -- Julien Cristau <[EMAIL PROTECTED]> Tue, 28 Aug 2007 12:11:30 +0200 mesa (7.0.1-1) unstable; urgency=low commit 846078d06f8b2dff4fc50d0f3ae2bff71e184c5c Author: Julien Cristau <[EMAIL PROTECTED]> Date: Tue Aug 28 12:07:45 2007 +0200 Delete generated files. diff --git a/src/mesa/x86-64/matypes.h b/src/mesa/x86-64/matypes.h deleted file mode 100644 index d0bae3a..0000000 --- a/src/mesa/x86-64/matypes.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * This file is automatically generated from the Mesa internal type - * definitions. Do not edit directly. - */ - -#ifndef __ASM_TYPES_H__ -#define __ASM_TYPES_H__ - - - -/* ============================================================= - * Offsets for GLcontext - */ - -#define CTX_DRIVER_CTX 952 - -#define CTX_LIGHT_ENABLED 39312 -#define CTX_LIGHT_SHADE_MODEL 39316 -#define CTX_LIGHT_COLOR_MAT_FACE 39320 -#define CTX_LIGHT_COLOR_MAT_MODE 39324 -#define CTX_LIGHT_COLOR_MAT_MASK 39328 -#define CTX_LIGHT_COLOR_MAT_ENABLED 39332 -#define CTX_LIGHT_ENABLED_LIST 39340 -#define CTX_LIGHT_NEED_VERTS 43701 -#define CTX_LIGHT_FLAGS 43704 -#define CTX_LIGHT_BASE_COLOR 43708 - - -/* ============================================================= - * Offsets for struct vertex_buffer - */ - -#define VB_SIZE 0 -#define VB_COUNT 4 - -#define VB_ELTS 8 -#define VB_OBJ_PTR 12 -#define VB_EYE_PTR 16 -#define VB_CLIP_PTR 20 -#define VB_PROJ_CLIP_PTR 24 -#define VB_CLIP_OR_MASK 28 -#define VB_CLIP_MASK 32 -#define VB_NORMAL_PTR 36 -#define VB_EDGE_FLAG 44 -#define VB_TEX0_COORD_PTR 48 -#define VB_TEX1_COORD_PTR 52 -#define VB_TEX2_COORD_PTR 56 -#define VB_TEX3_COORD_PTR 60 -#define VB_INDEX_PTR 80 -#define VB_COLOR_PTR 88 -#define VB_SECONDARY_COLOR_PTR 96 -#define VB_FOG_COORD_PTR 104 -#define VB_PRIMITIVE 108 - - -/* - * Flags for struct vertex_buffer - */ - -#define VERT_BIT_OBJ 0x1 -#define VERT_BIT_NORM 0x4 -#define VERT_BIT_RGBA 0x8 -#define VERT_BIT_SPEC_RGB 0x10 -#define VERT_BIT_FOG_COORD 0x20 -#define VERT_BIT_TEX0 0x100 -#define VERT_BIT_TEX1 0x200 -#define VERT_BIT_TEX2 0x400 -#define VERT_BIT_TEX3 0x800 - - -/* ============================================================= - * Offsets for GLvector4f - */ - -#define V4F_DATA 0 -#define V4F_START 4 -#define V4F_COUNT 8 -#define V4F_STRIDE 12 -#define V4F_SIZE 16 -#define V4F_FLAGS 20 - -/* - * Flags for GLvector4f - */ - -#define VEC_MALLOC 0x10 -#define VEC_NOT_WRITEABLE 0x40 -#define VEC_BAD_STRIDE 0x100 - -#define VEC_SIZE_1 0x1 -#define VEC_SIZE_2 0x3 -#define VEC_SIZE_3 0x7 -#define VEC_SIZE_4 0xf - - -/* ============================================================= - * Offsets for GLmatrix - */ - -#define MATRIX_DATA 0 -#define MATRIX_INV 4 -#define MATRIX_FLAGS 8 -#define MATRIX_TYPE 12 - - -/* ============================================================= - * Offsets for struct gl_light - */ - -#define LIGHT_NEXT 0 -#define LIGHT_PREV 4 - -#define LIGHT_AMBIENT 8 -#define LIGHT_DIFFUSE 24 -#define LIGHT_SPECULAR 40 -#define LIGHT_EYE_POSITION 56 -#define LIGHT_EYE_DIRECTION 72 -#define LIGHT_SPOT_EXPONENT 88 -#define LIGHT_SPOT_CUTOFF 92 -#define LIGHT_COS_CUTOFF 100 -#define LIGHT_CONST_ATTEN 104 -#define LIGHT_LINEAR_ATTEN 108 -#define LIGHT_QUADRATIC_ATTEN 112 -#define LIGHT_ENABLED 116 - -#define LIGHT_FLAGS 120 - -#define LIGHT_POSITION 124 -#define LIGHT_VP_INF_NORM 140 -#define LIGHT_H_INF_NORM 152 -#define LIGHT_NORM_DIRECTION 164 -#define LIGHT_VP_INF_SPOT_ATTEN 180 - -#define LIGHT_SPOT_EXP_TABLE 184 -#define LIGHT_MAT_AMBIENT 4280 -#define LIGHT_MAT_DIFFUSE 4304 -#define LIGHT_MAT_SPECULAR 4328 - -#define SIZEOF_GL_LIGHT 4360 - -/* - * Flags for struct gl_light - */ - -#define LIGHT_SPOT 0x1 -#define LIGHT_LOCAL_VIEWER 0x2 -#define LIGHT_POSITIONAL 0x4 - -#define LIGHT_NEED_VERTICES 0x6 - - -/* ============================================================= - * Offsets for struct gl_lightmodel - */ - -#define LIGHT_MODEL_AMBIENT 0 -#define LIGHT_MODEL_LOCAL_VIEWER 16 -#define LIGHT_MODEL_TWO_SIDE 17 -#define LIGHT_MODEL_COLOR_CONTROL 20 - - -#endif /* __ASM_TYPES_H__ */ diff --git a/src/mesa/x86/matypes.h b/src/mesa/x86/matypes.h deleted file mode 100644 index 375f882..0000000 --- a/src/mesa/x86/matypes.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * This file is automatically generated from the Mesa internal type - * definitions. Do not edit directly. - */ - -#ifndef __ASM_TYPES_H__ -#define __ASM_TYPES_H__ - -#include "assyntax.h" - - -/* ============================================================= - * Offsets for GLcontext - */ - -#define CTX_DRIVER_CTX 952 - -#define CTX_LIGHT_ENABLED 39312 -#define CTX_LIGHT_SHADE_MODEL 39316 -#define CTX_LIGHT_COLOR_MAT_FACE 39320 -#define CTX_LIGHT_COLOR_MAT_MODE 39324 -#define CTX_LIGHT_COLOR_MAT_MASK 39328 -#define CTX_LIGHT_COLOR_MAT_ENABLED 39332 -#define CTX_LIGHT_ENABLED_LIST 39340 -#define CTX_LIGHT_NEED_VERTS 43701 -#define CTX_LIGHT_FLAGS 43704 -#define CTX_LIGHT_BASE_COLOR 43708 - - -/* ============================================================= - * Offsets for struct vertex_buffer - */ - -#define VB_SIZE 0 -#define VB_COUNT 4 - -#define VB_ELTS 8 -#define VB_OBJ_PTR 12 -#define VB_EYE_PTR 16 -#define VB_CLIP_PTR 20 -#define VB_PROJ_CLIP_PTR 24 -#define VB_CLIP_OR_MASK 28 -#define VB_CLIP_MASK 32 -#define VB_NORMAL_PTR 36 -#define VB_EDGE_FLAG 44 -#define VB_TEX0_COORD_PTR 48 -#define VB_TEX1_COORD_PTR 52 -#define VB_TEX2_COORD_PTR 56 -#define VB_TEX3_COORD_PTR 60 -#define VB_INDEX_PTR 80 -#define VB_COLOR_PTR 88 -#define VB_SECONDARY_COLOR_PTR 96 -#define VB_FOG_COORD_PTR 104 -#define VB_PRIMITIVE 108 - - -/* - * Flags for struct vertex_buffer - */ - -#define VERT_BIT_OBJ 0x1 -#define VERT_BIT_NORM 0x4 -#define VERT_BIT_RGBA 0x8 -#define VERT_BIT_SPEC_RGB 0x10 -#define VERT_BIT_FOG_COORD 0x20 -#define VERT_BIT_TEX0 0x100 -#define VERT_BIT_TEX1 0x200 -#define VERT_BIT_TEX2 0x400 -#define VERT_BIT_TEX3 0x800 - - -/* ============================================================= - * Offsets for GLvector4f - */ - -#define V4F_DATA 0 -#define V4F_START 4 -#define V4F_COUNT 8 -#define V4F_STRIDE 12 -#define V4F_SIZE 16 -#define V4F_FLAGS 20 - -/* - * Flags for GLvector4f - */ - -#define VEC_MALLOC 0x10 -#define VEC_NOT_WRITEABLE 0x40 -#define VEC_BAD_STRIDE 0x100 - -#define VEC_SIZE_1 0x1 -#define VEC_SIZE_2 0x3 -#define VEC_SIZE_3 0x7 -#define VEC_SIZE_4 0xf - - -/* ============================================================= - * Offsets for GLmatrix - */ - -#define MATRIX_DATA 0 -#define MATRIX_INV 4 -#define MATRIX_FLAGS 8 -#define MATRIX_TYPE 12 - - -/* ============================================================= - * Offsets for struct gl_light - */ - -#define LIGHT_NEXT 0 -#define LIGHT_PREV 4 - -#define LIGHT_AMBIENT 8 -#define LIGHT_DIFFUSE 24 -#define LIGHT_SPECULAR 40 -#define LIGHT_EYE_POSITION 56 -#define LIGHT_EYE_DIRECTION 72 -#define LIGHT_SPOT_EXPONENT 88 -#define LIGHT_SPOT_CUTOFF 92 -#define LIGHT_COS_CUTOFF 100 -#define LIGHT_CONST_ATTEN 104 -#define LIGHT_LINEAR_ATTEN 108 -#define LIGHT_QUADRATIC_ATTEN 112 -#define LIGHT_ENABLED 116 - -#define LIGHT_FLAGS 120 - -#define LIGHT_POSITION 124 -#define LIGHT_VP_INF_NORM 140 -#define LIGHT_H_INF_NORM 152 -#define LIGHT_NORM_DIRECTION 164 -#define LIGHT_VP_INF_SPOT_ATTEN 180 - -#define LIGHT_SPOT_EXP_TABLE 184 -#define LIGHT_MAT_AMBIENT 4280 -#define LIGHT_MAT_DIFFUSE 4304 -#define LIGHT_MAT_SPECULAR 4328 - -#define SIZEOF_GL_LIGHT 4360 - -/* - * Flags for struct gl_light - */ - -#define LIGHT_SPOT 0x1 -#define LIGHT_LOCAL_VIEWER 0x2 -#define LIGHT_POSITIONAL 0x4 - -#define LIGHT_NEED_VERTICES 0x6 - - -/* ============================================================= - * Offsets for struct gl_lightmodel - */ - -#define LIGHT_MODEL_AMBIENT 0 -#define LIGHT_MODEL_LOCAL_VIEWER 16 -#define LIGHT_MODEL_TWO_SIDE 17 -#define LIGHT_MODEL_COLOR_CONTROL 20 - - -#endif /* __ASM_TYPES_H__ */ commit b18500d56e7ee34f8d3a9b12d82b6e2723ea6b4b Author: Julien Cristau <[EMAIL PROTECTED]> Date: Tue Aug 28 11:16:05 2007 +0200 * Update to latest git (from mesa_7_0_branch) + adds support for some new intel chipsets (i915 and i915_tex dri drivers) (closes: #437333) + broken inline asm in dri drivers fixed (closes: #423739) diff --git a/debian/changelog b/debian/changelog index 04740ad..b56407c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +mesa (7.0.1-2) UNRELEASED; urgency=low + + * Update to latest git (from mesa_7_0_branch) + + adds support for some new intel chipsets (i915 and i915_tex dri drivers) + (closes: #437333) + + broken inline asm in dri drivers fixed (closes: #423739) + + -- Julien Cristau <[EMAIL PROTECTED]> Tue, 28 Aug 2007 12:06:45 +0200 + mesa (7.0.1-1) unstable; urgency=low * New upstream release. commit d69a5961931fcac4b876c55ebfe0189fd11b8d71 Author: Brian <[EMAIL PROTECTED]> Date: Mon Aug 27 10:48:31 2007 -0600 Fixed bugs 6748, 12141 diff --git a/docs/relnotes-7.0.2.html b/docs/relnotes-7.0.2.html index f1fd3d2..d06171e 100644 --- a/docs/relnotes-7.0.2.html +++ b/docs/relnotes-7.0.2.html @@ -31,6 +31,8 @@ Mesa 7.0.2 is a stable release with bug fixes since version 7.0. <li>Added checking/support for additional chips in the i915/i945 family (see 11978) <li>Fixed a blending/banding issue (bug 11931) +<li>Fixed a GLU matrix inversion bug (#6748) +<li>Fixed problem with large glDrawArrays calls and indirect rendering (bug 12141) </ul> commit 8aa4ae638ee5a169f1f0f77c80f2a066d9f50e23 Author: Colin McDonald <[EMAIL PROTECTED]> Date: Mon Aug 27 10:47:49 2007 -0600 fixed problem with big glDrawArrays (see bug 12141) diff --git a/src/glx/x11/indirect_vertex_array.c b/src/glx/x11/indirect_vertex_array.c index 90ec277..120fd82 100644 --- a/src/glx/x11/indirect_vertex_array.c +++ b/src/glx/x11/indirect_vertex_array.c @@ -527,7 +527,7 @@ static GLubyte * emit_DrawArrays_header_old( __GLXcontext * gc, struct array_state_vector * arrays, size_t * elements_per_request, - size_t * total_requests, + unsigned int * total_requests, GLenum mode, GLsizei count ) { size_t command_size; @@ -640,7 +640,7 @@ emit_DrawArrays_old( GLenum mode, GLint first, GLsizei count ) GLubyte * pc; size_t elements_per_request; - size_t total_requests = 0; + unsigned total_requests = 0; unsigned i; size_t total_sent = 0; @@ -770,9 +770,10 @@ emit_DrawElements_old( GLenum mode, GLsizei count, GLenum type, GLubyte * pc; size_t elements_per_request; - size_t total_requests = 0; + unsigned total_requests = 0; unsigned i; unsigned req; + unsigned req_element=0; pc = emit_DrawArrays_header_old( gc, arrays, & elements_per_request, @@ -790,7 +791,7 @@ emit_DrawElements_old( GLenum mode, GLsizei count, GLenum type, switch( type ) { case GL_UNSIGNED_INT: { - const GLuint * ui_ptr = (const GLuint *) indices; + const GLuint * ui_ptr = (const GLuint *) indices + req_element; for ( i = 0 ; i < elements_per_request ; i++ ) { const GLint index = (GLint) *(ui_ptr++); @@ -799,7 +800,7 @@ emit_DrawElements_old( GLenum mode, GLsizei count, GLenum type, break; } case GL_UNSIGNED_SHORT: { - const GLushort * us_ptr = (const GLushort *) indices; + const GLushort * us_ptr = (const GLushort *) indices + req_element; for ( i = 0 ; i < elements_per_request ; i++ ) { const GLint index = (GLint) *(us_ptr++); @@ -808,7 +809,7 @@ emit_DrawElements_old( GLenum mode, GLsizei count, GLenum type, break; } case GL_UNSIGNED_BYTE: { - const GLubyte * ub_ptr = (const GLubyte *) indices; + const GLubyte * ub_ptr = (const GLubyte *) indices + req_element; for ( i = 0 ; i < elements_per_request ; i++ ) { const GLint index = (GLint) *(ub_ptr++); @@ -826,6 +827,7 @@ emit_DrawElements_old( GLenum mode, GLsizei count, GLenum type, } count -= elements_per_request; + req_element += elements_per_request; } commit 3069f3484186df09b671c44efdb221f50e5a6a88 Author: Brian <[EMAIL PROTECTED]> Date: Mon Aug 27 10:36:25 2007 -0600 new __gluInvertMatrix() function (Mesa bug 6748) diff --git a/src/glu/sgi/libutil/project.c b/src/glu/sgi/libutil/project.c index 2b20ad4..d22989c 100644 --- a/src/glu/sgi/libutil/project.c +++ b/src/glu/sgi/libutil/project.c @@ -168,74 +168,57 @@ static void __gluMultMatrixVecd(const GLdouble matrix[16], const GLdouble in[4], } /* -** inverse = invert(src) -** New, faster implementation by Shan Hao Bo, April 2006. +** Invert 4x4 matrix. +** Contributed by David Moore (See Mesa bug #6748) */ -static int __gluInvertMatrixd(const GLdouble src[16], GLdouble inverse[16]) +static int __gluInvertMatrixd(const GLdouble m[16], GLdouble inv[16]) { - int i, j, k; - double t; - GLdouble temp[4][4]; - - for (i=0; i<4; i++) { - for (j=0; j<4; j++) { - temp[i][j] = src[i*4+j]; - } - } - __gluMakeIdentityd(inverse); - - for (i = 0; i < 4; i++) { - if (temp[i][i] == 0.0f) { - /* - ** Look for non-zero element in column - */ - for (j = i + 1; j < 4; j++) { - if (temp[j][i] != 0.0f) { - break; - } - } - - if (j != 4) { - /* - ** Swap rows. - */ - for (k = 0; k < 4; k++) { - t = temp[i][k]; - temp[i][k] = temp[j][k]; - temp[j][k] = t; - - t = inverse[i*4+k]; - inverse[i*4+k] = inverse[j*4+k]; - inverse[j*4+k] = t; - } - } - else { - /* - ** No non-zero pivot. The matrix is singular, -which shouldn't - ** happen. This means the user gave us a bad -matrix. - */ - return GL_FALSE; - } - } - - t = 1.0f / temp[i][i]; - for (k = 0; k < 4; k++) { - temp[i][k] *= t; - inverse[i*4+k] *= t; - } - for (j = 0; j < 4; j++) { - if (j != i) { - t = temp[j][i]; - for (k = 0; k < 4; k++) { - temp[j][k] -= temp[i][k]*t; - inverse[j*4+k] -= inverse[i*4+k]*t; - } - } - } - } - return GL_TRUE; + double det; + int i; + + inv[0] = m[5]*m[10]*m[15] - m[5]*m[11]*m[14] - m[9]*m[6]*m[15] + + m[9]*m[7]*m[14] + m[13]*m[6]*m[11] - m[13]*m[7]*m[10]; + inv[4] = -m[4]*m[10]*m[15] + m[4]*m[11]*m[14] + m[8]*m[6]*m[15] + - m[8]*m[7]*m[14] - m[12]*m[6]*m[11] + m[12]*m[7]*m[10]; + inv[8] = m[4]*m[9]*m[15] - m[4]*m[11]*m[13] - m[8]*m[5]*m[15] + + m[8]*m[7]*m[13] + m[12]*m[5]*m[11] - m[12]*m[7]*m[9]; + inv[12] = -m[4]*m[9]*m[14] + m[4]*m[10]*m[13] + m[8]*m[5]*m[14] + - m[8]*m[6]*m[13] - m[12]*m[5]*m[10] + m[12]*m[6]*m[9]; + inv[1] = -m[1]*m[10]*m[15] + m[1]*m[11]*m[14] + m[9]*m[2]*m[15] + - m[9]*m[3]*m[14] - m[13]*m[2]*m[11] + m[13]*m[3]*m[10]; + inv[5] = m[0]*m[10]*m[15] - m[0]*m[11]*m[14] - m[8]*m[2]*m[15] + + m[8]*m[3]*m[14] + m[12]*m[2]*m[11] - m[12]*m[3]*m[10]; + inv[9] = -m[0]*m[9]*m[15] + m[0]*m[11]*m[13] + m[8]*m[1]*m[15] + - m[8]*m[3]*m[13] - m[12]*m[1]*m[11] + m[12]*m[3]*m[9]; + inv[13] = m[0]*m[9]*m[14] - m[0]*m[10]*m[13] - m[8]*m[1]*m[14] + + m[8]*m[2]*m[13] + m[12]*m[1]*m[10] - m[12]*m[2]*m[9]; + inv[2] = m[1]*m[6]*m[15] - m[1]*m[7]*m[14] - m[5]*m[2]*m[15] + + m[5]*m[3]*m[14] + m[13]*m[2]*m[7] - m[13]*m[3]*m[6]; + inv[6] = -m[0]*m[6]*m[15] + m[0]*m[7]*m[14] + m[4]*m[2]*m[15] + - m[4]*m[3]*m[14] - m[12]*m[2]*m[7] + m[12]*m[3]*m[6]; + inv[10] = m[0]*m[5]*m[15] - m[0]*m[7]*m[13] - m[4]*m[1]*m[15] + + m[4]*m[3]*m[13] + m[12]*m[1]*m[7] - m[12]*m[3]*m[5]; + inv[14] = -m[0]*m[5]*m[14] + m[0]*m[6]*m[13] + m[4]*m[1]*m[14] + - m[4]*m[2]*m[13] - m[12]*m[1]*m[6] + m[12]*m[2]*m[5]; + inv[3] = -m[1]*m[6]*m[11] + m[1]*m[7]*m[10] + m[5]*m[2]*m[11] + - m[5]*m[3]*m[10] - m[9]*m[2]*m[7] + m[9]*m[3]*m[6]; + inv[7] = m[0]*m[6]*m[11] - m[0]*m[7]*m[10] - m[4]*m[2]*m[11] + + m[4]*m[3]*m[10] + m[8]*m[2]*m[7] - m[8]*m[3]*m[6]; + inv[11] = -m[0]*m[5]*m[11] + m[0]*m[7]*m[9] + m[4]*m[1]*m[11] + - m[4]*m[3]*m[9] - m[8]*m[1]*m[7] + m[8]*m[3]*m[5]; + inv[15] = m[0]*m[5]*m[10] - m[0]*m[6]*m[9] - m[4]*m[1]*m[10] + + m[4]*m[2]*m[9] + m[8]*m[1]*m[6] - m[8]*m[2]*m[5]; + + det = m[0]*inv[0] + m[1]*inv[4] + m[2]*inv[8] + m[3]*inv[12]; + if (det == 0) + return GL_FALSE; + + det = 1.0 / det; + + for (i = 0; i < 16; i++) + inv[i] *= det; + + return GL_TRUE; } static void __gluMultMatricesd(const GLdouble a[16], const GLdouble b[16], commit b3788a0e4f1f9fc06aa9f86c176dbc765194a1f1 Author: Adam Jackson <[EMAIL PROTECTED]> Date: Fri Aug 24 08:49:59 2007 +0100 Unbreak Linux builds with -fvisibility=hidden. diff --git a/include/GL/glu.h b/include/GL/glu.h index d82103d..7db4b70 100644 --- a/include/GL/glu.h +++ b/include/GL/glu.h @@ -44,22 +44,17 @@ #define GLAPIENTRYP GLAPIENTRY * #endif -#ifdef GLAPI -#undef GLAPI -#endif - -# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GLU32) -# define GLAPI __declspec(dllexport) -# elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ -# define GLAPI __declspec(dllimport) -# else /* for use with static link lib build of Win32 edition only */ -# define GLAPI extern -# endif /* _STATIC_MESA support */ - - -#ifndef GLAPI -#define GLAPI -#endif +#if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GLU32) +# undef GLAPI +# define GLAPI __declspec(dllexport) +#elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) +/* tag specifying we're building for DLL runtime support */ +# undef GLAPI +# define GLAPI __declspec(dllimport) +#elif !defined(GLAPI) +/* for use with static link lib build of Win32 edition only */ +# define GLAPI extern +#endif /* _STATIC_MESA support */ #ifdef __cplusplus extern "C" { commit 582bc029abb7b9b0fd2c6d3c3b131fa72931c4e4 Author: Brian <[EMAIL PROTECTED]> Date: Fri Aug 24 08:45:27 2007 +0100 remove CallDepth++/-- accidentally removed in prev commit diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index 80891b0..844db6b 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -5737,6 +5737,8 @@ execute_list(GLcontext *ctx, GLuint list) if (!dlist) return; + ctx->ListState.CallDepth++; + if (ctx->Driver.BeginCallList) ctx->Driver.BeginCallList(ctx, dlist); @@ -6626,6 +6628,8 @@ execute_list(GLcontext *ctx, GLuint list) if (ctx->Driver.EndCallList) ctx->Driver.EndCallList(ctx); + + ctx->ListState.CallDepth--; } commit e9e3099433e45fe24da5bef35b63302f4f17f31a Author: Brian <[EMAIL PROTECTED]> Date: Thu Aug 23 08:17:35 2007 +0100 remove unneeded CallStack array diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index 7813c7a..80891b0 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -1,6 +1,6 @@ /* * Mesa 3-D graphics library - * Version: 7.0.1 + * Version: 7.0.2 * * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. * @@ -5737,8 +5737,6 @@ execute_list(GLcontext *ctx, GLuint list) if (!dlist) return; - ctx->ListState.CallStack[ctx->ListState.CallDepth++] = dlist; - if (ctx->Driver.BeginCallList) ctx->Driver.BeginCallList(ctx, dlist); @@ -6628,8 +6626,6 @@ execute_list(GLcontext *ctx, GLuint list) if (ctx->Driver.EndCallList) ctx->Driver.EndCallList(ctx); - - ctx->ListState.CallStack[ctx->ListState.CallDepth--] = NULL; } diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 1568ab3..d00f2ef 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2842,7 +2842,6 @@ struct mesa_display_list */ struct gl_dlist_state { - struct mesa_display_list *CallStack[MAX_LIST_NESTING]; GLuint CallDepth; /**< Current recursion calling depth */ struct mesa_display_list *CurrentList; commit 4fc561cc7b60050433093e82625ba6a1f0fd7022 Author: Brian <[EMAIL PROTECTED]> Date: Mon Aug 20 13:12:10 2007 +0100 refactor bounds checking code diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c index 9c05c36..88a527e 100644 --- a/src/mesa/main/api_validate.c +++ b/src/mesa/main/api_validate.c @@ -30,6 +30,55 @@ #include "state.h" +/** + * Find the max index in the given element/index buffer + */ +static GLuint +max_buffer_index(GLcontext *ctx, GLuint count, GLenum type, + const void *indices, + struct gl_buffer_object *elementBuf) +{ + const GLubyte *map = NULL; + GLuint max = 0; + GLint i; + + if (elementBuf->Name) { + /* elements are in a user-defined buffer object. need to map it */ + map = ctx->Driver.MapBuffer(ctx, + GL_ELEMENT_ARRAY_BUFFER_ARB, + GL_READ_ONLY, + elementBuf); + /* Actual address is the sum of pointers */ + indices = (const GLvoid *) ADD_POINTERS(map, (const GLubyte *) indices); + } + + if (type == GL_UNSIGNED_INT) { + for (i = 0; i < count; i++) + if (((GLuint *) indices)[i] > max) + max = ((GLuint *) indices)[i]; + } + else if (type == GL_UNSIGNED_SHORT) { + for (i = 0; i < count; i++) + if (((GLushort *) indices)[i] > max) + max = ((GLushort *) indices)[i]; + } + else { + ASSERT(type == GL_UNSIGNED_BYTE); + for (i = 0; i < count; i++) + if (((GLubyte *) indices)[i] > max) + max = ((GLubyte *) indices)[i]; + } + + if (map) { + ctx->Driver.UnmapBuffer(ctx, + GL_ELEMENT_ARRAY_BUFFER_ARB, + ctx->Array.ElementArrayBufferObj); + } + + return max; +} + + GLboolean _mesa_validate_DrawElements(GLcontext *ctx, GLenum mode, GLsizei count, GLenum type, @@ -61,21 +110,15 @@ _mesa_validate_DrawElements(GLcontext *ctx, /* Always need vertex positions */ if (!ctx->Array.ArrayObj->Vertex.Enabled - && !(ctx->VertexProgram._Enabled && ctx->Array.ArrayObj->VertexAttrib[0].Enabled)) + && !(ctx->VertexProgram._Enabled + && ctx->Array.ArrayObj->VertexAttrib[0].Enabled)) return GL_FALSE; /* Vertex buffer object tests */ if (ctx->Array.ElementArrayBufferObj->Name) { - GLuint indexBytes; - /* use indices in the buffer object */ - if (!ctx->Array.ElementArrayBufferObj->Size) { - _mesa_warning(ctx, - "glDrawElements called with empty array elements buffer"); - return GL_FALSE; - } + GLuint indexBytes; - /* make sure count doesn't go outside buffer bounds */ if (type == GL_UNSIGNED_INT) { indexBytes = count * sizeof(GLuint); } @@ -87,6 +130,7 @@ _mesa_validate_DrawElements(GLcontext *ctx, indexBytes = count * sizeof(GLushort); } + /* make sure count doesn't go outside buffer bounds */ if (indexBytes > ctx->Array.ElementArrayBufferObj->Size) { _mesa_warning(ctx, "glDrawElements index out of buffer bounds"); return GL_FALSE; @@ -100,39 +144,8 @@ _mesa_validate_DrawElements(GLcontext *ctx, if (ctx->Const.CheckArrayBounds) { /* find max array index */ - const GLubyte *map; - GLuint max = 0; - GLint i; - - map = ctx->Driver.MapBuffer(ctx, - GL_ELEMENT_ARRAY_BUFFER_ARB, - GL_READ_ONLY, - ctx->Array.ElementArrayBufferObj); - - /* Actual address is the sum of pointers */ - indices = (const GLvoid *) ADD_POINTERS(map, (const GLubyte *) indices); - - if (type == GL_UNSIGNED_INT) { - for (i = 0; i < count; i++) - if (((GLuint *) indices)[i] > max) - max = ((GLuint *) indices)[i]; - } - else if (type == GL_UNSIGNED_SHORT) { - for (i = 0; i < count; i++) - if (((GLushort *) indices)[i] > max) - max = ((GLushort *) indices)[i]; - } - else { - ASSERT(type == GL_UNSIGNED_BYTE); - for (i = 0; i < count; i++) - if (((GLubyte *) indices)[i] > max) - max = ((GLubyte *) indices)[i]; - } - - ctx->Driver.UnmapBuffer(ctx, - GL_ELEMENT_ARRAY_BUFFER_ARB, - ctx->Array.ElementArrayBufferObj); - + GLuint max = max_buffer_index(ctx, count, type, indices, + ctx->Array.ElementArrayBufferObj); if (max >= ctx->Array._MaxElement) { /* the max element is out of bounds of one or more enabled arrays */ return GL_FALSE; @@ -179,41 +192,41 @@ _mesa_validate_DrawRangeElements(GLcontext *ctx, GLenum mode, /* Always need vertex positions */ if (!ctx->Array.ArrayObj->Vertex.Enabled - && !(ctx->VertexProgram._Enabled && ctx->Array.ArrayObj->VertexAttrib[0].Enabled)) + && !(ctx->VertexProgram._Enabled + && ctx->Array.ArrayObj->VertexAttrib[0].Enabled)) return GL_FALSE; /* Vertex buffer object tests */ if (ctx->Array.ElementArrayBufferObj->Name) { - /* XXX re-use code from above? */ + /* use indices in the buffer object */ + GLuint indexBytes; + + if (type == GL_UNSIGNED_INT) { + indexBytes = count * sizeof(GLuint); + } + else if (type == GL_UNSIGNED_BYTE) { + indexBytes = count * sizeof(GLubyte); + } + else { + ASSERT(type == GL_UNSIGNED_SHORT); + indexBytes = count * sizeof(GLushort); + } + + /* make sure count doesn't go outside buffer bounds */ + if (indexBytes > ctx->Array.ElementArrayBufferObj->Size) { + _mesa_warning(ctx, "glDrawElements index out of buffer bounds"); + return GL_FALSE; + } } else { - /* not using VBO */ + /* not using a VBO */ if (!indices) return GL_FALSE; } if (ctx->Const.CheckArrayBounds) { - /* Find max array index. - * We don't trust the user's start and end values. - */ - GLuint max = 0; - GLint i; - if (type == GL_UNSIGNED_INT) { - for (i = 0; i < count; i++) - if (((GLuint *) indices)[i] > max) - max = ((GLuint *) indices)[i]; - } - else if (type == GL_UNSIGNED_SHORT) { - for (i = 0; i < count; i++) - if (((GLushort *) indices)[i] > max) - max = ((GLushort *) indices)[i]; - } - else { - ASSERT(type == GL_UNSIGNED_BYTE); - for (i = 0; i < count; i++) - if (((GLubyte *) indices)[i] > max) - max = ((GLubyte *) indices)[i]; - } + GLuint max = max_buffer_index(ctx, count, type, indices, + ctx->Array.ElementArrayBufferObj); if (max >= ctx->Array._MaxElement) { -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]