Henri Verbeet : d3dx9: Try to use IDirect3DDevice9_StretchRect() in D3DXLoadSurfaceFromSurface().

Alexandre Julliard julliard at winehq.org
Wed Nov 21 16:08:05 CST 2018


Module: wine
Branch: master
Commit: 9ff5aae4c88d959b79151e47db1fae1de0c8348e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=9ff5aae4c88d959b79151e47db1fae1de0c8348e

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Tue Nov 20 16:54:46 2018 +0330

d3dx9: Try to use IDirect3DDevice9_StretchRect() in D3DXLoadSurfaceFromSurface().

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/d3dx9_36/surface.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
index 3cf8c60..11a0ee1 100644
--- a/dlls/d3dx9_36/surface.c
+++ b/dlls/d3dx9_36/surface.c
@@ -1925,6 +1925,7 @@ HRESULT WINAPI D3DXLoadSurfaceFromSurface(IDirect3DSurface9 *dst_surface,
         const PALETTEENTRY *src_palette, const RECT *src_rect, DWORD filter, D3DCOLOR color_key)
 {
     IDirect3DSurface9 *surface = src_surface;
+    D3DTEXTUREFILTERTYPE d3d_filter;
     IDirect3DDevice9 *device;
     D3DSURFACE_DESC src_desc;
     D3DLOCKED_RECT lock;
@@ -1939,6 +1940,37 @@ HRESULT WINAPI D3DXLoadSurfaceFromSurface(IDirect3DSurface9 *dst_surface,
     if (!dst_surface || !src_surface)
         return D3DERR_INVALIDCALL;
 
+    if (!dst_palette && !src_palette && !color_key)
+    {
+        switch (filter)
+        {
+            case D3DX_FILTER_NONE:
+                d3d_filter = D3DTEXF_NONE;
+                break;
+
+            case D3DX_FILTER_POINT:
+                d3d_filter = D3DTEXF_POINT;
+                break;
+
+            case D3DX_FILTER_LINEAR:
+                d3d_filter = D3DTEXF_LINEAR;
+                break;
+
+            default:
+                d3d_filter = ~0u;
+                break;
+        }
+
+        if (d3d_filter != ~0u)
+        {
+            IDirect3DSurface9_GetDevice(src_surface, &device);
+            hr = IDirect3DDevice9_StretchRect(device, src_surface, src_rect, dst_surface, dst_rect, d3d_filter);
+            IDirect3DDevice9_Release(device);
+            if (SUCCEEDED(hr))
+                return D3D_OK;
+        }
+    }
+
     IDirect3DSurface9_GetDesc(src_surface, &src_desc);
 
     if (!src_rect)




More information about the wine-cvs mailing list