[PATCH 6/7] d3d10core: Implement D3D10CoreCreateDevice using D3D11CoreCreateDevice.

Józef Kucia jkucia at codeweavers.com
Wed Aug 19 18:47:59 CDT 2015


DXGID3D10* functions will be dropped once IDXGIDevice is moved to d3d11.

D3D10CoreRegisterLayers returns E_NOTIMPL on modern Windows systems.
---
 dlls/d3d10core/Makefile.in      | 14 ++------------
 dlls/d3d10core/d3d10core_main.c | 32 ++++++++++++++++++++++++--------
 dlls/d3d11/d3d11.spec           |  2 +-
 dlls/d3d11/d3d11_main.c         |  5 +++++
 dlls/d3d11/layer.c              |  6 +++---
 dlls/dxgi/dxgi_main.c           |  8 ++++----
 6 files changed, 39 insertions(+), 28 deletions(-)

diff --git a/dlls/d3d10core/Makefile.in b/dlls/d3d10core/Makefile.in
index 0af29a1..bfa0a81 100644
--- a/dlls/d3d10core/Makefile.in
+++ b/dlls/d3d10core/Makefile.in
@@ -1,18 +1,8 @@
 MODULE    = d3d10core.dll
 IMPORTLIB = d3d10core
-IMPORTS   = dxguid uuid dxgi wined3d
+IMPORTS   = d3d11
 
 C_SRCS = \
-	../d3d11/async.c \
-	../d3d11/buffer.c \
-	d3d10core_main.c \
-	../d3d11/device.c \
-	../d3d11/inputlayout.c \
-	../d3d11/layer.c \
-	../d3d11/shader.c \
-	../d3d11/state.c \
-	../d3d11/texture.c \
-	../d3d11/utils.c \
-	../d3d11/view.c
+	d3d10core_main.c
 
 RC_SRCS = version.rc
diff --git a/dlls/d3d10core/d3d10core_main.c b/dlls/d3d10core/d3d10core_main.c
index b440bbb..fec2786 100644
--- a/dlls/d3d10core/d3d10core_main.c
+++ b/dlls/d3d10core/d3d10core_main.c
@@ -17,30 +17,46 @@
  *
  */
 
-#include "config.h"
-#include "wine/port.h"
-
 #include "wine/debug.h"
 
+#include "initguid.h"
+
 #define COBJMACROS
 #include "d3d10_1.h"
+#include "d3d11.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(d3d10core);
 
-HRESULT d3d10_core_register_layers(void) DECLSPEC_HIDDEN;
-HRESULT d3d10_core_create_device(IDXGIFactory *factory, IDXGIAdapter *adapter,
-        UINT flags, void *unknown0, ID3D10Device **device) DECLSPEC_HIDDEN;
+HRESULT WINAPI D3D11CoreCreateDevice(IDXGIFactory *factory, IDXGIAdapter *adapter, UINT flags,
+        const D3D_FEATURE_LEVEL *feature_levels, UINT levels, ID3D11Device **device);
 
 HRESULT WINAPI D3D10CoreRegisterLayers(void)
 {
-    return d3d10_core_register_layers();
+    TRACE("\n");
+
+    return E_NOTIMPL;
 }
 
 HRESULT WINAPI D3D10CoreCreateDevice(IDXGIFactory *factory, IDXGIAdapter *adapter,
         UINT flags, void *unknown0, ID3D10Device **device)
 {
+    D3D_FEATURE_LEVEL feature_level = D3D_FEATURE_LEVEL_10_0;
+    ID3D11Device *device11;
+    HRESULT hr;
+
     TRACE("factory %p, adapter %p, flags %#x, unknown0 %p, device %p.\n",
             factory, adapter, flags, unknown0, device);
 
-    return d3d10_core_create_device(factory, adapter, flags, unknown0, device);
+    if (FAILED(hr = D3D11CoreCreateDevice(factory, adapter, flags, &feature_level, 1, &device11)))
+        return hr;
+
+    hr = ID3D11Device_QueryInterface(device11, &IID_ID3D10Device, (void **)device);
+    ID3D11Device_Release(device11);
+    if (FAILED(hr))
+    {
+        ERR("Device should implement ID3D10Device, returning E_FAIL.\n");
+        return E_FAIL;
+    }
+
+    return S_OK;
 }
diff --git a/dlls/d3d11/d3d11.spec b/dlls/d3d11/d3d11.spec
index 90136e8..60c77f9 100644
--- a/dlls/d3d11/d3d11.spec
+++ b/dlls/d3d11/d3d11.spec
@@ -1,7 +1,7 @@
 @ stdcall D3D11CoreCreateDevice(ptr ptr long ptr long ptr)
 @ stub D3D11CoreCreateLayeredDevice
 @ stub D3D11CoreGetLayeredDeviceSize
-@ stub D3D11CoreRegisterLayers
+@ stdcall D3D11CoreRegisterLayers()
 @ stdcall D3D11CreateDevice(ptr long ptr long ptr long long ptr ptr ptr)
 @ stdcall D3D11CreateDeviceAndSwapChain(ptr long ptr long ptr long long ptr ptr ptr ptr ptr)
 @ stub D3DKMTCloseAdapter
diff --git a/dlls/d3d11/d3d11_main.c b/dlls/d3d11/d3d11_main.c
index 382c4a1..ebf51b9 100644
--- a/dlls/d3d11/d3d11_main.c
+++ b/dlls/d3d11/d3d11_main.c
@@ -42,6 +42,11 @@ static const char *debug_d3d_driver_type(D3D_DRIVER_TYPE driver_type)
     }
 }
 
+HRESULT WINAPI D3D11CoreRegisterLayers(void)
+{
+    return d3d10_core_register_layers();
+}
+
 HRESULT WINAPI D3D11CoreCreateDevice(IDXGIFactory *factory, IDXGIAdapter *adapter, UINT flags,
         const D3D_FEATURE_LEVEL *feature_levels, UINT levels, ID3D11Device **device)
 {
diff --git a/dlls/d3d11/layer.c b/dlls/d3d11/layer.c
index 6456753..abed97a 100644
--- a/dlls/d3d11/layer.c
+++ b/dlls/d3d11/layer.c
@@ -97,14 +97,14 @@ HRESULT d3d10_core_create_device(IDXGIFactory *factory, IDXGIAdapter *adapter,
         UINT flags, void *unknown0, ID3D10Device **device)
 {
     IUnknown *dxgi_device;
-    HMODULE d3d10core;
+    HMODULE d3d11;
     HRESULT hr;
 
     TRACE("factory %p, adapter %p, flags %#x, unknown0 %p, device %p.\n",
             factory, adapter, flags, unknown0, device);
 
-    d3d10core = GetModuleHandleA("d3d10core.dll");
-    hr = DXGID3D10CreateDevice(d3d10core, factory, adapter, flags, unknown0, (void **)&dxgi_device);
+    d3d11 = GetModuleHandleA("d3d11.dll");
+    hr = DXGID3D10CreateDevice(d3d11, factory, adapter, flags, unknown0, (void **)&dxgi_device);
     if (FAILED(hr))
     {
         WARN("Failed to create device, returning %#x\n", hr);
diff --git a/dlls/dxgi/dxgi_main.c b/dlls/dxgi/dxgi_main.c
index 3414c4f..90c92ba 100644
--- a/dlls/dxgi/dxgi_main.c
+++ b/dlls/dxgi/dxgi_main.c
@@ -107,7 +107,7 @@ static HRESULT register_d3d10core_layers(HMODULE d3d10core)
     if (!dxgi_main.d3d10core)
     {
         HRESULT hr;
-        HRESULT (WINAPI *d3d10core_register_layers)(void);
+        HRESULT (WINAPI *d3d11core_register_layers)(void);
         HMODULE mod;
         BOOL ret;
 
@@ -117,11 +117,11 @@ static HRESULT register_d3d10core_layers(HMODULE d3d10core)
             return E_FAIL;
         }
 
-        d3d10core_register_layers = (void *)GetProcAddress(mod, "D3D10CoreRegisterLayers");
-        hr = d3d10core_register_layers();
+        d3d11core_register_layers = (void *)GetProcAddress(mod, "D3D11CoreRegisterLayers");
+        hr = d3d11core_register_layers();
         if (FAILED(hr))
         {
-            ERR("Failed to register d3d10core layers, returning %#x\n", hr);
+            ERR("Failed to register d3d11 layers, returning %#x\n", hr);
             LeaveCriticalSection(&dxgi_cs);
             return hr;
         }
-- 
2.4.6




More information about the wine-patches mailing list