[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