Henri Verbeet : d3d10: Use the factory that created the adapter to create a swapchain.

Alexandre Julliard julliard at winehq.org
Fri Nov 14 07:55:12 CST 2008


Module: wine
Branch: master
Commit: 70088c4ef323e41386c54c4ef4d9f4c5166564fb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=70088c4ef323e41386c54c4ef4d9f4c5166564fb

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Fri Nov 14 13:57:07 2008 +0100

d3d10: Use the factory that created the adapter to create a swapchain.

---

 dlls/d3d10/d3d10_main.c |   25 ++++++++++++++++++++++---
 1 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/dlls/d3d10/d3d10_main.c b/dlls/d3d10/d3d10_main.c
index 188d354..ad9651e 100644
--- a/dlls/d3d10/d3d10_main.c
+++ b/dlls/d3d10/d3d10_main.c
@@ -141,6 +141,7 @@ HRESULT WINAPI D3D10CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D10_DRIVER
         HMODULE swrast, UINT flags, UINT sdk_version, DXGI_SWAP_CHAIN_DESC *swapchain_desc,
         IDXGISwapChain **swapchain, ID3D10Device **device)
 {
+    IDXGIDevice *dxgi_device;
     IDXGIFactory *factory;
     HRESULT hr;
 
@@ -153,22 +154,40 @@ HRESULT WINAPI D3D10CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D10_DRIVER
     if (FAILED(hr))
     {
         WARN("Failed to create a device, returning %#x\n", hr);
+        *device = NULL;
         return hr;
     }
 
     TRACE("Created ID3D10Device %p\n", *device);
 
-    hr = CreateDXGIFactory(&IID_IDXGIFactory, (void **)&factory);
+    hr = ID3D10Device_QueryInterface(*device, &IID_IDXGIDevice, (void **)&dxgi_device);
     if (FAILED(hr))
     {
+        ERR("Failed to get a dxgi device from the d3d10 device, returning %#x\n", hr);
         ID3D10Device_Release(*device);
         *device = NULL;
+        return hr;
+    }
 
-        WARN("Failed to create a DXGI factory, returning %#x\n", hr);
+    hr = IDXGIDevice_GetAdapter(dxgi_device, &adapter);
+    IDXGIDevice_Release(dxgi_device);
+    if (FAILED(hr))
+    {
+        ERR("Failed to get the device adapter, returning %#x\n", hr);
+        ID3D10Device_Release(*device);
+        *device = NULL;
         return hr;
     }
 
-    TRACE("Created IDXGIFactory %p\n", factory);
+    hr = IDXGIAdapter_GetParent(adapter, &IID_IDXGIFactory, (void **)&factory);
+    IDXGIAdapter_Release(adapter);
+    if (FAILED(hr))
+    {
+        ERR("Failed to get the adapter factory, returning %#x\n", hr);
+        ID3D10Device_Release(*device);
+        *device = NULL;
+        return hr;
+    }
 
     hr = IDXGIFactory_CreateSwapChain(factory, (IUnknown *)*device, swapchain_desc, swapchain);
     IDXGIFactory_Release(factory);




More information about the wine-cvs mailing list