A while back I mentioned on dri-devel that Savage cards will segfault RTCW
while loading the Checkpoint demo.
( http://www.nixnuts.net/benchmarks/current/ ) The problem is in
Mesa/src/mesa/tnl/t_tertex.c around lines 741 and 913.
for (j = 0; j < count; j++) {
GLvector4f *vptr = VB->AttribPtr[a[j].attrib];
a[j].inputstride = vptr->stride;
...
}
vptr is null in the middle of the for loop ( j=2 is null j=0, 1, and 3 is
valid.) I have no idea why this is the case, but I've attached a simple fix
which eliminates the problem.
John Lightsey
--- xc/../Mesa/src/mesa/tnl/t_vertex.c.orig 2004-09-30 16:59:08.000000000 -0500
+++ xc/../Mesa/src/mesa/tnl/t_vertex.c 2004-09-30 16:59:58.000000000 -0500
@@ -741,9 +741,11 @@
for (j = 0; j < count; j++) {
GLvector4f *vptr = VB->AttribPtr[a[j].attrib];
- a[j].inputstride = vptr->stride;
- a[j].inputptr = ((GLubyte *)vptr->data) + start * vptr->stride;
- a[j].emit = a[j].insert[vptr->size - 1];
+ if (vptr) {
+ a[j].inputstride = vptr->stride;
+ a[j].inputptr = ((GLubyte *)vptr->data) + start * vptr->stride;
+ a[j].emit = a[j].insert[vptr->size - 1];
+ }
}
end -= start;
@@ -913,9 +915,11 @@
for (j = 0; j < count; j++) {
GLvector4f *vptr = VB->AttribPtr[a[j].attrib];
- a[j].inputstride = vptr->stride;
- a[j].inputptr = ((GLubyte *)vptr->data) + start * vptr->stride;
- a[j].emit = a[j].insert[vptr->size - 1];
+ if (vptr) {
+ a[j].inputstride = vptr->stride;
+ a[j].inputptr = ((GLubyte *)vptr->data) + start * vptr->stride;
+ a[j].emit = a[j].insert[vptr->size - 1];
+ }
}
vtx->emit = 0;