[PATCH 2/2] d3dx9: Add FIXME for unlockable source surface in D3DXLoadSurfaceFromSurface().

Paul Gofman gofmanp at gmail.com
Fri Nov 16 10:37:46 CST 2018


On 11/16/18 18:08, Matteo Bruni wrote:
> Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
> ---
> Do you want to take a shot at implementing the missing functionality?
> I imagine it's just a matter of creating a temporary D3DPOOL_SYSTEMMEM
> surface, filling it with the contents of the render target with
> GetRenderTargetData() and locking that surface instead, if the
> original source surface is a render target.
>
>
Yes, I could, but I thought it must be a bit more complicated than that. 
We probably want to use d3d9 device StretchBlt or UpdateTexture when 
possible (no colorkey and other restrictions pass) for performance 
reasons. If we can't use that and can't lock source rectangle should we 
assume that it is necessarily render target and use 
GetRenderTargetData(), or rather use StretchRect()/UpdateTexture() with 
staging texture's surface?

     We also need to care about possibly unlockable destination surface. 
It concerns some other D3DX surface manipulating functions which I did 
not test yet for ability to workaround this case. So I would suggest the 
following steps:

1. Add a code path for StrecthBlt (which would be a priority over 
locking the texture). I guess this should cover the majority of 
practical cases.

2. Use a staging texture if texture is not lockable;

3. Fix output to unlockable texture through staging texture (with some 
tests for the other functions touching this).




More information about the wine-devel mailing list