[PATCH 1/5] wined3d: Devices don't need parents.

Henri Verbeet hverbeet at codeweavers.com
Tue Aug 31 11:41:37 CDT 2010


---
 dlls/d3d8/device.c             |    2 +-
 dlls/d3d9/device.c             |    2 +-
 dlls/ddraw/ddraw.c             |    2 +-
 dlls/dxgi/device.c             |    2 +-
 dlls/wined3d/device.c          |   32 +++++++++++---------------------
 dlls/wined3d/directx.c         |   13 +++++--------
 dlls/wined3d/wined3d_private.h |    3 +--
 include/wine/wined3d.idl       |    3 +--
 8 files changed, 22 insertions(+), 37 deletions(-)

diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index 6d89a48..9572199 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
@@ -2796,7 +2796,7 @@ HRESULT device_init(IDirect3DDevice8Impl *device, IWineD3D *wined3d, UINT adapte
     if (!(flags & D3DCREATE_FPU_PRESERVE)) setup_fpu();
 
     wined3d_mutex_lock();
-    hr = IWineD3D_CreateDevice(wined3d, adapter, device_type, focus_window, flags, (IUnknown *)device,
+    hr = IWineD3D_CreateDevice(wined3d, adapter, device_type, focus_window, flags,
             (IWineD3DDeviceParent *)&device->device_parent_vtbl, &device->WineD3DDevice);
     if (FAILED(hr))
     {
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index 7fab981..87cc65c 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -2857,7 +2857,7 @@ HRESULT device_init(IDirect3DDevice9Impl *device, IWineD3D *wined3d, UINT adapte
     if (!(flags & D3DCREATE_FPU_PRESERVE)) setup_fpu();
 
     wined3d_mutex_lock();
-    hr = IWineD3D_CreateDevice(wined3d, adapter, device_type, focus_window, flags, (IUnknown *)device,
+    hr = IWineD3D_CreateDevice(wined3d, adapter, device_type, focus_window, flags,
             (IWineD3DDeviceParent *)&device->device_parent_vtbl, &device->WineD3DDevice);
     if (FAILED(hr))
     {
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index d250fb5..451298c 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -5722,7 +5722,7 @@ HRESULT ddraw_init(IDirectDrawImpl *ddraw, WINED3DDEVTYPE device_type)
         return E_OUTOFMEMORY;
     }
 
-    hr = IWineD3D_CreateDevice(ddraw->wineD3D, WINED3DADAPTER_DEFAULT, device_type, NULL, 0, (IUnknown *)ddraw,
+    hr = IWineD3D_CreateDevice(ddraw->wineD3D, WINED3DADAPTER_DEFAULT, device_type, NULL, 0,
             (IWineD3DDeviceParent *)&ddraw->device_parent_vtbl, &ddraw->wineD3DDevice);
     if (FAILED(hr))
     {
diff --git a/dlls/dxgi/device.c b/dlls/dxgi/device.c
index 616be6a..2478063 100644
--- a/dlls/dxgi/device.c
+++ b/dlls/dxgi/device.c
@@ -394,7 +394,7 @@ HRESULT dxgi_device_init(struct dxgi_device *device, struct dxgi_device_layer *l
     FIXME("Ignoring adapter type.\n");
     EnterCriticalSection(&dxgi_cs);
     hr = IWineD3D_CreateDevice(wined3d, adapter_ordinal, WINED3DDEVTYPE_HAL, NULL, 0,
-            (IUnknown *)device, wined3d_device_parent, &device->wined3d_device);
+            wined3d_device_parent, &device->wined3d_device);
     IWineD3DDeviceParent_Release(wined3d_device_parent);
     IWineD3D_Release(wined3d);
     LeaveCriticalSection(&dxgi_cs);
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 9b2cf93..caf332f 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -815,19 +815,21 @@ HRESULT device_clear_render_targets(IWineD3DDeviceImpl *device, UINT rt_count, I
  * IUnknown parts follows
  **********************************************************/
 
-static HRESULT WINAPI IWineD3DDeviceImpl_QueryInterface(IWineD3DDevice *iface,REFIID riid,LPVOID *ppobj)
+static HRESULT WINAPI IWineD3DDeviceImpl_QueryInterface(IWineD3DDevice *iface, REFIID riid, void **object)
 {
-    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+    TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
 
-    TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(riid),ppobj);
-    if (IsEqualGUID(riid, &IID_IUnknown)
-        || IsEqualGUID(riid, &IID_IWineD3DBase)
-        || IsEqualGUID(riid, &IID_IWineD3DDevice)) {
+    if (IsEqualGUID(riid, &IID_IWineD3DDevice)
+            || IsEqualGUID(riid, &IID_IUnknown))
+    {
         IUnknown_AddRef(iface);
-        *ppobj = This;
+        *object = iface;
         return S_OK;
     }
-    *ppobj = NULL;
+
+    WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
+
+    *object = NULL;
     return E_NOINTERFACE;
 }
 
@@ -883,16 +885,6 @@ static ULONG WINAPI IWineD3DDeviceImpl_Release(IWineD3DDevice *iface) {
     return refCount;
 }
 
-/**********************************************************
- * IWineD3DDevice implementation follows
- **********************************************************/
-static HRESULT WINAPI IWineD3DDeviceImpl_GetParent(IWineD3DDevice *iface, IUnknown **pParent) {
-    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
-    *pParent = This->parent;
-    IUnknown_AddRef(This->parent);
-    return WINED3D_OK;
-}
-
 static HRESULT WINAPI IWineD3DDeviceImpl_CreateBuffer(IWineD3DDevice *iface, struct wined3d_buffer_desc *desc,
         const void *data, IUnknown *parent, const struct wined3d_parent_ops *parent_ops, IWineD3DBuffer **buffer)
 {
@@ -6646,7 +6638,6 @@ static const IWineD3DDeviceVtbl IWineD3DDevice_Vtbl =
     IWineD3DDeviceImpl_AddRef,
     IWineD3DDeviceImpl_Release,
     /*** IWineD3DDevice methods ***/
-    IWineD3DDeviceImpl_GetParent,
     /*** Creation methods**/
     IWineD3DDeviceImpl_CreateBuffer,
     IWineD3DDeviceImpl_CreateVertexBuffer,
@@ -6791,7 +6782,7 @@ static const IWineD3DDeviceVtbl IWineD3DDevice_Vtbl =
 
 HRESULT device_init(IWineD3DDeviceImpl *device, IWineD3DImpl *wined3d,
         UINT adapter_idx, WINED3DDEVTYPE device_type, HWND focus_window, DWORD flags,
-        IUnknown *parent, IWineD3DDeviceParent *device_parent)
+        IWineD3DDeviceParent *device_parent)
 {
     struct wined3d_adapter *adapter = &wined3d->adapters[adapter_idx];
     const struct fragment_pipeline *fragment_pipeline;
@@ -6806,7 +6797,6 @@ HRESULT device_init(IWineD3DDeviceImpl *device, IWineD3DImpl *wined3d,
     device->wined3d = (IWineD3D *)wined3d;
     IWineD3D_AddRef(device->wined3d);
     device->adapter = wined3d->adapter_count ? adapter : NULL;
-    device->parent  = parent;
     device->device_parent = device_parent;
     list_init(&device->resources);
     list_init(&device->shaders);
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 01b4e46..2960c2a 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -4831,18 +4831,15 @@ static HRESULT WINAPI IWineD3DImpl_GetDeviceCaps(IWineD3D *iface, UINT Adapter,
     return WINED3D_OK;
 }
 
-static HRESULT WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT adapter_idx,
-        WINED3DDEVTYPE device_type, HWND focus_window, DWORD flags, IUnknown *parent,
-        IWineD3DDeviceParent *device_parent, IWineD3DDevice **device)
+static HRESULT WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT adapter_idx, WINED3DDEVTYPE device_type,
+        HWND focus_window, DWORD flags, IWineD3DDeviceParent *device_parent, IWineD3DDevice **device)
 {
     IWineD3DImpl *This = (IWineD3DImpl *)iface;
     IWineD3DDeviceImpl *object;
     HRESULT hr;
 
-    TRACE("iface %p, adapter_idx %u, device_type %#x, focus_window %p, flags %#x.\n"
-            "parent %p, device_parent %p, device %p.\n",
-            iface, adapter_idx, device_type, focus_window, flags,
-            parent, device_parent, device);
+    TRACE("iface %p, adapter_idx %u, device_type %#x, focus_window %p, flags %#x, device_parent %p, device %p.\n",
+            iface, adapter_idx, device_type, focus_window, flags, device_parent, device);
 
     /* Validate the adapter number. If no adapters are available(no GL), ignore the adapter
      * number and create a device without a 3D adapter for 2D only operation. */
@@ -4858,7 +4855,7 @@ static HRESULT WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT adapter_id
         return E_OUTOFMEMORY;
     }
 
-    hr = device_init(object, This, adapter_idx, device_type, focus_window, flags, parent, device_parent);
+    hr = device_init(object, This, adapter_idx, device_type, focus_window, flags, device_parent);
     if (FAILED(hr))
     {
         WARN("Failed to initialize device, hr %#x.\n", hr);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 914814d..7c81754 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1567,7 +1567,6 @@ struct IWineD3DDeviceImpl
     LONG                    ref;     /* Note: Ref counting not required */
 
     /* WineD3D Information  */
-    IUnknown               *parent;
     IWineD3DDeviceParent   *device_parent;
     IWineD3D *wined3d;
     struct wined3d_adapter *adapter;
@@ -1702,7 +1701,7 @@ void device_context_remove(IWineD3DDeviceImpl *device, struct wined3d_context *c
 void device_get_draw_rect(IWineD3DDeviceImpl *device, RECT *rect) DECLSPEC_HIDDEN;
 HRESULT device_init(IWineD3DDeviceImpl *device, IWineD3DImpl *wined3d,
         UINT adapter_idx, WINED3DDEVTYPE device_type, HWND focus_window, DWORD flags,
-        IUnknown *parent, IWineD3DDeviceParent *device_parent) DECLSPEC_HIDDEN;
+        IWineD3DDeviceParent *device_parent) DECLSPEC_HIDDEN;
 void device_preload_textures(IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
 LRESULT device_process_message(IWineD3DDeviceImpl *device, HWND window,
         UINT message, WPARAM wparam, LPARAM lparam, WNDPROC proc) DECLSPEC_HIDDEN;
diff --git a/include/wine/wined3d.idl b/include/wine/wined3d.idl
index bff4012..f10c35f 100644
--- a/include/wine/wined3d.idl
+++ b/include/wine/wined3d.idl
@@ -2264,7 +2264,6 @@ interface IWineD3D : IWineD3DBase
         [in] WINED3DDEVTYPE device_type,
         [in] HWND focus_window,
         [in] DWORD behaviour_flags,
-        [in] IUnknown *parent,
         [in] IWineD3DDeviceParent *device_parent,
         [out] IWineD3DDevice **device
     );
@@ -2793,7 +2792,7 @@ interface IWineD3DPixelShader : IWineD3DBaseShader
     local,
     uuid(6d10a2ce-09d0-4a53-a427-11388f9f8ca5)
 ]
-interface IWineD3DDevice : IWineD3DBase
+interface IWineD3DDevice : IUnknown
 {
     HRESULT CreateBuffer(
         [in] struct wined3d_buffer_desc *desc,
-- 
1.7.1




More information about the wine-patches mailing list