D3D: Implement vertex blending in drawStridedSlow

James McKenzie jjmckenzie51 at earthlink.net
Tue Mar 3 21:20:56 CST 2009


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 at 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





More information about the wine-devel mailing list