[PATCH 3/5] ddraw: Get rid of the ImplType fields in IDirectDrawImpl and IDirectDrawSurfaceImpl.

Henri Verbeet hverbeet at codeweavers.com
Tue Aug 30 13:12:33 CDT 2011


We never change implementations anymore after the objects are created, so we
can just use DefaultSurfaceType everywhere.
---
 dlls/ddraw/ddraw.c         |   25 +++++++++----------------
 dlls/ddraw/ddraw_private.h |    6 +-----
 dlls/ddraw/surface.c       |    5 ++---
 3 files changed, 12 insertions(+), 24 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 14e245b..973ec29 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -206,7 +206,7 @@ static HRESULT WINAPI ddraw7_QueryInterface(IDirectDraw7 *iface, REFIID refiid,
               IsEqualGUID( &IID_IDirect3D7 , refiid ) )
     {
         /* Check the surface implementation */
-        if (This->ImplType != SURFACE_OPENGL)
+        if (DefaultSurfaceType != SURFACE_OPENGL)
         {
             WARN("The app requests a Direct3D interface, but non-opengl surfaces where set in winecfg\n");
             /* Do not abort here, only reject 3D Device creation */
@@ -1378,7 +1378,6 @@ static HRESULT WINAPI ddraw7_GetFourCCCodes(IDirectDraw7 *iface, DWORD *NumCodes
     DWORD count = 0, i, outsize;
     HRESULT hr;
     WINED3DDISPLAYMODE d3ddm;
-    WINED3DSURFTYPE type = This->ImplType;
 
     TRACE("iface %p, codes_count %p, codes %p.\n", iface, NumCodes, Codes);
 
@@ -1389,7 +1388,7 @@ static HRESULT WINAPI ddraw7_GetFourCCCodes(IDirectDraw7 *iface, DWORD *NumCodes
     for (i = 0; i < (sizeof(formats) / sizeof(formats[0])); ++i)
     {
         hr = wined3d_check_device_format(This->wineD3D, WINED3DADAPTER_DEFAULT, WINED3DDEVTYPE_HAL,
-                d3ddm.Format, 0, WINED3DRTYPE_SURFACE, formats[i], type);
+                d3ddm.Format, 0, WINED3DRTYPE_SURFACE, formats[i], DefaultSurfaceType);
         if (SUCCEEDED(hr))
         {
             if (count < outsize)
@@ -2600,7 +2599,6 @@ static HRESULT WINAPI ddraw7_StartModeTest(IDirectDraw7 *iface, SIZE *Modes, DWO
 static HRESULT ddraw_create_surface(IDirectDrawImpl *This, DDSURFACEDESC2 *pDDSD,
         IDirectDrawSurfaceImpl **ppSurf, UINT level, UINT version)
 {
-    WINED3DSURFTYPE ImplType = This->ImplType;
     HRESULT hr;
 
     TRACE("ddraw %p, surface_desc %p, surface %p, level %u.\n",
@@ -2612,7 +2610,7 @@ static HRESULT ddraw_create_surface(IDirectDrawImpl *This, DDSURFACEDESC2 *pDDSD
         DDRAW_dump_surface_desc(pDDSD);
     }
 
-    if ((pDDSD->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) && This->ImplType != SURFACE_OPENGL)
+    if ((pDDSD->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) && DefaultSurfaceType != SURFACE_OPENGL)
     {
         WARN("The application requests a 3D capable surface, but a non-OpenGL surface type was set in the registry.\n");
         /* Do not fail surface creation, only fail 3D device creation. */
@@ -2626,7 +2624,7 @@ static HRESULT ddraw_create_surface(IDirectDrawImpl *This, DDSURFACEDESC2 *pDDSD
         return DDERR_OUTOFVIDEOMEMORY;
     }
 
-    hr = ddraw_surface_init(*ppSurf, This, pDDSD, level, ImplType, version);
+    hr = ddraw_surface_init(*ppSurf, This, pDDSD, level, version);
     if (FAILED(hr))
     {
         WARN("Failed to initialize surface, hr %#x.\n", hr);
@@ -3248,10 +3246,9 @@ static HRESULT CreateSurface(IDirectDrawImpl *ddraw, DDSURFACEDESC2 *DDSD,
      * The only case I can think of where this doesn't apply is when a
      * 2D app was configured by the user to run with OpenGL and it didn't create
      * the render target as first surface. In this case the render target creation
-     * will cause the 3D init.
-     */
-    if( (ddraw->ImplType == SURFACE_OPENGL) && !(ddraw->d3d_initialized) &&
-        desc2.ddsCaps.dwCaps & (DDSCAPS_PRIMARYSURFACE | DDSCAPS_3DDEVICE) )
+     * will cause the 3D init. */
+    if (DefaultSurfaceType == SURFACE_OPENGL && !ddraw->d3d_initialized
+            && desc2.ddsCaps.dwCaps & (DDSCAPS_PRIMARYSURFACE | DDSCAPS_3DDEVICE))
     {
         IDirectDrawSurfaceImpl *target = object, *surface;
         struct list *entry;
@@ -4695,7 +4692,7 @@ static HRESULT WINAPI d3d7_CreateDevice(IDirect3D7 *iface, REFCLSID riid,
     *device = NULL;
 
     /* Fail device creation if non-opengl surfaces are used. */
-    if (This->ImplType != SURFACE_OPENGL)
+    if (DefaultSurfaceType != SURFACE_OPENGL)
     {
         ERR("The application wants to create a Direct3D device, but non-opengl surfaces are set in the registry.\n");
         ERR("Please set the surface implementation to opengl or autodetection to allow 3D rendering.\n");
@@ -5799,7 +5796,7 @@ static HRESULT CDECL device_parent_create_swapchain(struct wined3d_device_parent
     TRACE("device_parent %p, present_parameters %p, swapchain %p.\n", device_parent, present_parameters, swapchain);
 
     hr = wined3d_swapchain_create(ddraw->wined3d_device, present_parameters,
-            ddraw->ImplType, NULL, &ddraw_null_wined3d_parent_ops, swapchain);
+            DefaultSurfaceType, NULL, &ddraw_null_wined3d_parent_ops, swapchain);
     if (FAILED(hr))
     {
         WARN("Failed to create swapchain, hr %#x.\n", hr);
@@ -5846,10 +5843,6 @@ HRESULT ddraw_init(IDirectDrawImpl *ddraw, WINED3DDEVTYPE device_type)
     ddraw->numIfaces = 1;
     ddraw->ref7 = 1;
 
-    /* See comments in IDirectDrawImpl_CreateNewSurface for a description of
-     * this field. */
-    ddraw->ImplType = DefaultSurfaceType;
-
     /* Get the current screen settings. */
     hDC = GetDC(0);
     ddraw->orig_bpp = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES);
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index d8a8eb8..e03ab19 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -111,9 +111,6 @@ struct IDirectDrawImpl
     HWND                    devicewindow;
     HWND                    dest_window;
 
-    /* The surface type to request */
-    WINED3DSURFTYPE         ImplType;
-
     /* Helpers for surface creation */
     IDirectDrawSurfaceImpl *tex_root;
     BOOL                    depthstencil;
@@ -194,7 +191,6 @@ struct IDirectDrawSurfaceImpl
     /* Misc things */
     DWORD                   uniqueness_value;
     UINT                    mipmap_level;
-    WINED3DSURFTYPE         ImplType;
 
     /* For D3DDevice creation */
     BOOL                    isRenderTarget;
@@ -211,7 +207,7 @@ struct IDirectDrawSurfaceImpl
 HRESULT ddraw_surface_create_texture(IDirectDrawSurfaceImpl *surface) DECLSPEC_HIDDEN;
 void ddraw_surface_destroy(IDirectDrawSurfaceImpl *surface) DECLSPEC_HIDDEN;
 HRESULT ddraw_surface_init(IDirectDrawSurfaceImpl *surface, IDirectDrawImpl *ddraw,
-        DDSURFACEDESC2 *desc, UINT mip_level, WINED3DSURFTYPE surface_type, UINT version) DECLSPEC_HIDDEN;
+        DDSURFACEDESC2 *desc, UINT mip_level, UINT version) DECLSPEC_HIDDEN;
 ULONG ddraw_surface_release_iface(IDirectDrawSurfaceImpl *This) DECLSPEC_HIDDEN;
 
 static inline IDirectDrawSurfaceImpl *impl_from_IDirect3DTexture(IDirect3DTexture *iface)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index 7fb9323..6a2ecad 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -5085,7 +5085,7 @@ HRESULT ddraw_surface_create_texture(IDirectDrawSurfaceImpl *surface)
 }
 
 HRESULT ddraw_surface_init(IDirectDrawSurfaceImpl *surface, IDirectDrawImpl *ddraw,
-        DDSURFACEDESC2 *desc, UINT mip_level, WINED3DSURFTYPE surface_type, UINT version)
+        DDSURFACEDESC2 *desc, UINT mip_level, UINT version)
 {
     WINED3DPOOL pool = WINED3DPOOL_DEFAULT;
     enum wined3d_format_id format;
@@ -5176,11 +5176,10 @@ HRESULT ddraw_surface_init(IDirectDrawSurfaceImpl *surface, IDirectDrawImpl *ddr
     copy_to_surfacedesc2(&surface->surface_desc, desc);
 
     surface->first_attached = surface;
-    surface->ImplType = surface_type;
 
     hr = wined3d_surface_create(ddraw->wined3d_device, desc->dwWidth, desc->dwHeight, format,
             TRUE /* Lockable */, FALSE /* Discard */, mip_level, usage, pool,
-            WINED3DMULTISAMPLE_NONE, 0 /* MultiSampleQuality */, surface_type, surface,
+            WINED3DMULTISAMPLE_NONE, 0 /* MultiSampleQuality */, DefaultSurfaceType, surface,
             &ddraw_surface_wined3d_parent_ops, &surface->wined3d_surface);
     if (FAILED(hr))
     {
-- 
1.7.3.4




More information about the wine-patches mailing list