Claudio Ciccani wrote:
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)
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.
Patches have to be submitted to Wine-patches.
James McKenzie