Henri Verbeet : d3d10: Implement D3D10CreateDeviceAndSwapChain().

Alexandre Julliard julliard at winehq.org
Fri Oct 24 08:12:27 CDT 2008


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Thu Oct 23 16:37:09 2008 +0200

d3d10: Implement D3D10CreateDeviceAndSwapChain().

---

 dlls/d3d10/Makefile.in  |    2 +-
 dlls/d3d10/d3d10.spec   |    2 +-
 dlls/d3d10/d3d10_main.c |   49 +++++++++++++++++++++++++++++++++++++++++++++++
 include/d3d10misc.h     |    4 +++
 4 files changed, 55 insertions(+), 2 deletions(-)

diff --git a/dlls/d3d10/Makefile.in b/dlls/d3d10/Makefile.in
index 296c236..eeaa542 100644
--- a/dlls/d3d10/Makefile.in
+++ b/dlls/d3d10/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = d3d10.dll
 IMPORTLIB = d3d10
-IMPORTS   = dxguid uuid kernel32
+IMPORTS   = dxguid uuid dxgi kernel32
 
 C_SRCS = \
 	d3d10_main.c \
diff --git a/dlls/d3d10/d3d10.spec b/dlls/d3d10/d3d10.spec
index 0b59175..2613e38 100644
--- a/dlls/d3d10/d3d10.spec
+++ b/dlls/d3d10/d3d10.spec
@@ -2,7 +2,7 @@
 @ stub D3D10CompileShader
 @ stub D3D10CreateBlob
 @ stdcall D3D10CreateDevice(ptr long ptr long long ptr)
-@ stub D3D10CreateDeviceAndSwapChain
+@ stdcall D3D10CreateDeviceAndSwapChain(ptr long ptr long long ptr ptr ptr)
 @ stub D3D10CreateEffectFromMemory
 @ stub D3D10CreateEffectPoolFromMemory
 @ stub D3D10CreateStateBlock
diff --git a/dlls/d3d10/d3d10_main.c b/dlls/d3d10/d3d10_main.c
index 6ed1756..f34a8ea 100644
--- a/dlls/d3d10/d3d10_main.c
+++ b/dlls/d3d10/d3d10_main.c
@@ -64,3 +64,52 @@ HRESULT WINAPI D3D10CreateDevice(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver
 
     return S_OK;
 }
+
+HRESULT WINAPI D3D10CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,
+        HMODULE swrast, UINT flags, UINT sdk_version, DXGI_SWAP_CHAIN_DESC *swapchain_desc,
+        IDXGISwapChain **swapchain, ID3D10Device **device)
+{
+    IDXGIFactory *factory;
+    HRESULT hr;
+
+    TRACE("adapter %p, driver_type %s, swrast %p, flags %#x, sdk_version %d,\n"
+            "\tswapchain_desc %p, swapchain %p, device %p\n",
+            adapter, debug_d3d10_driver_type(driver_type), swrast, flags, sdk_version,
+            swapchain_desc, swapchain, device);
+
+    hr = D3D10CreateDevice(adapter, driver_type, swrast, flags, sdk_version, device);
+    if (FAILED(hr))
+    {
+        WARN("Failed to create a device, returning %#x\n", hr);
+        return hr;
+    }
+
+    TRACE("Created ID3D10Device %p\n", *device);
+
+    hr = CreateDXGIFactory(&IID_IDXGIFactory, (void **)&factory);
+    if (FAILED(hr))
+    {
+        ID3D10Device_Release(*device);
+        *device = NULL;
+
+        WARN("Failed to create a DXGI factory, returning %#x\n", hr);
+        return hr;
+    }
+
+    TRACE("Created IDXGIFactory %p\n", factory);
+
+    hr = IDXGIFactory_CreateSwapChain(factory, (IUnknown *)*device, swapchain_desc, swapchain);
+    IDXGIFactory_Release(factory);
+    if (FAILED(hr))
+    {
+        ID3D10Device_Release(*device);
+        *device = NULL;
+
+        WARN("Failed to create a swapchain, returning %#x\n", hr);
+        return hr;
+    }
+
+    TRACE("Created IDXGISwapChain %p\n", *swapchain);
+
+    return S_OK;
+}
diff --git a/include/d3d10misc.h b/include/d3d10misc.h
index 00cf153..58a6d26 100644
--- a/include/d3d10misc.h
+++ b/include/d3d10misc.h
@@ -35,6 +35,10 @@ typedef enum D3D10_DRIVER_TYPE {
 HRESULT WINAPI D3D10CreateDevice(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,
         HMODULE swrast, UINT flags, UINT sdk_version, ID3D10Device **device);
 
+HRESULT WINAPI D3D10CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,
+        HMODULE swrast, UINT flags, UINT sdk_version, DXGI_SWAP_CHAIN_DESC *swapchain_desc,
+        IDXGISwapChain **swapchain, ID3D10Device **device);
+
 #ifdef __cplusplus
 }
 #endif




More information about the wine-cvs mailing list