wined3d

Ivan Gyurdiev ivg231 at gmail.com
Sat Oct 21 17:47:48 CDT 2006


Makes sense - reapplying the stateblock causes the states to be written 
back to the same stateblock *and*  GL state to be applied. What we want 
is the states to be applied without being written back to the same 
stateblock.

You can add if(capturing) write_to_update_stateblock(); else 
apply_states(); in device.c code to patch up the problem - it's done in 
some places, but not everywhere. However, what this is really showing is 
that the design doesn't make sense. Stateblock management should never 
have been mixed with applying GL states - all the GL code needs to be 
moved out of device.c and somewhere else. Hopefully Stefan D.'s work is 
heading in that direction.

Ivan
> message for the wined3d folks...
> running the d3d tests under valgrind gives this list of calls of 
> memcpy with overlapping buffers, which could give bad results 
> (depending how the buffers overlap)
> is this a side effect of the tests, a harmless warning or something to 
> be fixed ?
>
> A+
> ==10159== Source and destination overlap in memcpy(0x1BD2F0, 0x1BD2F0, 
> 16)
> ==10159==    at 0x401C663: memcpy (mc_replace_strmem.c:116)
> ==10159==    by 0x692FA93: IWineD3DDeviceImpl_SetVertexShaderConstantF 
> (device.c:4856)
> ==10159==    by 0x695A76D: IWineD3DStateBlockImpl_Apply 
> (stateblock.c:645)
> ==10159==    by 0x6939655: device_reapply_stateblock (device.c:7184)
> ==10159==    by 0x6939E62: IWineD3DDeviceImpl_ActiveRender 
> (device.c:7399)
> ==10159==    by 0x6939075: IWineD3DDeviceImpl_SetRenderTarget 
> (device.c:7034)
> ==10159==    by 0x68DECFD: IDirect3DDevice9Impl_SetRenderTarget 
> (device.c:391)
> ==10159==    by 0x45A275E: switch_render_target (stateblock.c:291)
> ==10159==    by 0x45A1EA8: execute_test_chain (stateblock.c:180)
> ==10159==    by 0x45A2F3D: execute_test_chain_all (stateblock.c:467)
> ==10159==    by 0x45A5BEE: test_state_management (stateblock.c:1446)
> ==10159==    by 0x45A5C97: func_stateblock (stateblock.c:1466)
> ==10159==
> ==10159== Source and destination overlap in memcpy(0x1B22F8, 0x1B22F8, 
> 16)
> ==10159==    at 0x401C663: memcpy (mc_replace_strmem.c:116)
> ==10159==    by 0x692F7E0: IWineD3DDeviceImpl_SetVertexShaderConstantI 
> (device.c:4809)
> ==10159==    by 0x695A7C5: IWineD3DStateBlockImpl_Apply 
> (stateblock.c:650)
> ==10159==    by 0x6939655: device_reapply_stateblock (device.c:7184)
> ==10159==    by 0x6939E62: IWineD3DDeviceImpl_ActiveRender 
> (device.c:7399)
> ==10159==    by 0x6939075: IWineD3DDeviceImpl_SetRenderTarget 
> (device.c:7034)
> ==10159==    by 0x68DECFD: IDirect3DDevice9Impl_SetRenderTarget 
> (device.c:391)
> ==10159==    by 0x45A275E: switch_render_target (stateblock.c:291)
> ==10159==    by 0x45A1EA8: execute_test_chain (stateblock.c:180)
> ==10159==    by 0x45A2F3D: execute_test_chain_all (stateblock.c:467)
> ==10159==    by 0x45A5BEE: test_state_management (stateblock.c:1446)
> ==10159==    by 0x45A5C97: func_stateblock (stateblock.c:1466)
> ==10159==
> ==10159== Source and destination overlap in memcpy(0x1B22B8, 0x1B22B8, 4)
> ==10159==    at 0x401C663: memcpy (mc_replace_strmem.c:116)
> ==10159==    by 0x692F55E: IWineD3DDeviceImpl_SetVertexShaderConstantB 
> (device.c:4763)
> ==10159==    by 0x695A81D: IWineD3DStateBlockImpl_Apply 
> (stateblock.c:655)
> ==10159==    by 0x6939655: device_reapply_stateblock (device.c:7184)
> ==10159==    by 0x6939E62: IWineD3DDeviceImpl_ActiveRender 
> (device.c:7399)
> ==10159==    by 0x6939075: IWineD3DDeviceImpl_SetRenderTarget 
> (device.c:7034)
> ==10159==    by 0x68DECFD: IDirect3DDevice9Impl_SetRenderTarget 
> (device.c:391)
> ==10159==    by 0x45A275E: switch_render_target (stateblock.c:291)
> ==10159==    by 0x45A1EA8: execute_test_chain (stateblock.c:180)
> ==10159==    by 0x45A2F3D: execute_test_chain_all (stateblock.c:467)
> ==10159==    by 0x45A5BEE: test_state_management (stateblock.c:1446)
> ==10159==    by 0x45A5C97: func_stateblock (stateblock.c:1466)
> ...
> ==10159== Source and destination overlap in memcpy(0x1AF808, 0x1AF808, 
> 64)
> ==10159==    at 0x401C663: memcpy (mc_replace_strmem.c:116)
> ==10159==    by 0x69580DB: stateblock_savedstates_copy (stateblock.c:83)
> ==10159==    by 0x695B2D5: IWineD3DStateBlockImpl_Apply 
> (stateblock.c:805)
> ==10159==    by 0x6939655: device_reapply_stateblock (device.c:7184)
> ==10159==    by 0x6939E62: IWineD3DDeviceImpl_ActiveRender 
> (device.c:7399)
> ==10159==    by 0x6939075: IWineD3DDeviceImpl_SetRenderTarget 
> (device.c:7034)
> ==10159==    by 0x68DECFD: IDirect3DDevice9Impl_SetRenderTarget 
> (device.c:391)
> ==10159==    by 0x45A275E: switch_render_target (stateblock.c:291)
> ==10159==    by 0x45A1EA8: execute_test_chain (stateblock.c:180)
> ==10159==    by 0x45A2F3D: execute_test_chain_all (stateblock.c:467)
> ==10159==    by 0x45A5BEE: test_state_management (stateblock.c:1446)
> ==10159==    by 0x45A5C97: func_stateblock (stateblock.c:1466)
> (similar traceback several times)
> ...
> ==10159== Source and destination overlap in memcpy(0x1BA994, 0x1BA994, 
> 24)
> ==10159==    at 0x401C663: memcpy (mc_replace_strmem.c:116)
> ==10159==    by 0x6924FD7: IWineD3DDeviceImpl_SetViewport (device.c:3264)
> ==10159==    by 0x695AB20: IWineD3DStateBlockImpl_Apply 
> (stateblock.c:705)
> ==10159==    by 0x6939655: device_reapply_stateblock (device.c:7184)
> ==10159==    by 0x6939E62: IWineD3DDeviceImpl_ActiveRender 
> (device.c:7399)
> ==10159==    by 0x6939075: IWineD3DDeviceImpl_SetRenderTarget 
> (device.c:7034)
> ==10159==    by 0x68DECFD: IDirect3DDevice9Impl_SetRenderTarget 
> (device.c:391)
> ==10159==    by 0x45A2849: revert_render_target (stateblock.c:313)
> ==10159==    by 0x45A1EA8: execute_test_chain (stateblock.c:180)
> ==10159==    by 0x45A2F3D: execute_test_chain_all (stateblock.c:467)
> ==10159==    by 0x45A5BEE: test_state_management (stateblock.c:1446)
> ==10159==    by 0x45A5C97: func_stateblock (stateblock.c:1466)
>
>
>
>




More information about the wine-devel mailing list