2009/1/26 Claudio Ciccani <klan@users.sf.net>
I found that the reason of the crash was that VBOs were not removed when
using drawStridedSlow for vertex blending.
Attached is the modified patch, which doesn't make NOLF2 crash.


Il giorno lun, 26/01/2009 alle 12.12 +0100, Claudio Ciccani ha scritto:
> Il giorno dom, 25/01/2009 alle 23.19 +0100, David Adam ha scritto:
> >
> >
> > 2009/1/25 Claudio Ciccani <klan@users.sf.net>
> >
> >         The patch implements a software fallback for vertex blending
> >         in
> >         drawStridedSlow, fixing Bug #6955.
> >         Although vertex blending is an old and outdated extension,
> >         there are
> >         still many applications(games) relying on it nowadays. This
> >         because the
> >         extension is generally supported by Direct3D, either directly
> >         in
> >         hardware (using vertex programs) or in software.
> >
> >
> >
> >
> >
> >         This patch makes NOLF2 demo crashes.
> >
> >
> > Register
> > dump:
> >  CS:0073 SS:007b DS:007b ES:007b FS:0033
> > GS:003b
> >  EIP:7e6095c7 ESP:0033f0b4 EBP:0033f1ec EFLAGS:00010246(   - 00
> > -RIZP1)
> >  EAX:00ec1b28 EBX:7e6bbc54 ECX:0000014c
> > EDX:00000000
> >  ESI:00000048
> > EDI:00000000
> > Stack
> > dump:
> > 0x0033f0b4:  00000000 00000000 00000000
> > 3f800000
> > 0x0033f0c4:  0033f110 7d05e000 7c03d008
> > 7c7aa346
> > 0x0033f0d4:  00000000 00000003 7e6bc7a0
> > 7e69ee95
> > 0x0033f0e4:  7e69e648 00000001 0000000c
> > 00000010
> > 0x0033f0f4:  795a5f68 7d09c0ac 0002d008
> > 00ebd44c
> > 0x0033f104:  00eba698 00ebd7a8 00000000
> > 00000007
> > Backtrace:
> > =>0 0x7e6095c7 drawStridedSlow+0x697(iface=0xeba698, sd=0xebd44c,
> > NumVertexes=72, glPrimType=4, idxData=0x31dca00, idxSize=2,
> > minIndex=0, startIdx=0) [/home/david/wine/dlls/wined3d/drawprim.c:307]
> > in wined3d (0x0033f1ec)
> >   1 0x7e60ea1b drawPrimitive+0x101b(iface=0xeba698, PrimitiveType=4,
> > NumPrimitives=24, numberOfVertices=24, StartIdx=0, idxSize=<is not
> > available>, idxData=(nil), minIndex=0)
> > [/home/david/wine/dlls/wined3d/drawprim.c:1024] in wined3d
> > (0x0033f55c)
> >   2 0x7e5e41f9 IWineD3DDeviceImpl_DrawIndexedPrimitive
> > +0xe9(iface=0xeba698, PrimitiveType=WINED3DPT_TRIANGLELIST,
> > minIndex=0, NumVertices=24, startIndex=0, primCount=24)
> > [/home/david/wine/dlls/wined3d/device.c:5314] in wined3d (0x0033f5cc)
> >   3 0x7e6d43b6 IDirect3DDevice8Impl_DrawIndexedPrimitive
> > +0x96(iface=<register ESI not in topmost frame>,
> > PrimitiveType=D3DPT_TRIANGLELIST, MinVertexIndex=0, NumVertices=24,
> > startIndex=0, primCount=24) [/home/david/wine/dlls/d3d8/device.c:1419]
> > in d3d8
> > (0x0033f5fc)
> > 0x7e6095c7 drawStridedSlow+0x697
> > [/home/david/wine/dlls/wined3d/drawprim.c:307] in wined3d: flds
> > 0x0(%ecx)
> > 307         m =
> > &stateBlock->transforms[WINED3DTS_WORLDMATRIX((indices ? indices[0] :
> > 0))].u.m[0][0];
> > Modules:
>
> Really strange! Tested the patch against other games and it worked.
> With NOLF2 I'm getting a crash too, but at a different location:
>
>   1 0x7e6217ca drawPrimitive+0x112a(iface=0xec7660, PrimitiveType=4,
> NumPrimitives=18, numberOfVertices=20, StartIdx=0, idxSize=2,
> idxData=0x3d871e0, minIndex=0)
> [/home/klan/src/wine/dlls/wined3d/drawprim.c:540] in wined3d
> (0x00000000)
> 0x7d2b3771: movl        0x0(%ecx),%edx
>
> 540   for (texture = 0; tmp_tex_mask; tmp_tex_mask >>= 1, ++texture)
>
>
>
>
>
>
--
Claudio Ciccani
klan@users.sf.net
klan@directfb.org
http://directfb.org
Great, the patch works like a charm. I hope that it will bw accepted by D3D gurus and Alexandre .

David