diff --git a/configure b/configure index a66731b6bfd..bb3bbec163f 100755 --- a/configure +++ b/configure @@ -17235,7 +17235,7 @@ wine_fn_config_test dlls/d3d10/tests d3d10_test wine_fn_config_dll d3d10_1 enable_d3d10_1 implib wine_fn_config_dll d3d10core enable_d3d10core implib wine_fn_config_test dlls/d3d10core/tests d3d10core_test -wine_fn_config_dll d3d11 enable_d3d11 +wine_fn_config_dll d3d11 enable_d3d11 implib wine_fn_config_dll d3d8 enable_d3d8 implib wine_fn_config_test dlls/d3d8/tests d3d8_test wine_fn_config_dll d3d9 enable_d3d9 implib diff --git a/configure.ac b/configure.ac index 1329786a963..2b0b4053071 100644 --- a/configure.ac +++ b/configure.ac @@ -2836,7 +2836,7 @@ WINE_CONFIG_TEST(dlls/d3d10/tests) WINE_CONFIG_DLL(d3d10_1,,[implib]) WINE_CONFIG_DLL(d3d10core,,[implib]) WINE_CONFIG_TEST(dlls/d3d10core/tests) -WINE_CONFIG_DLL(d3d11) +WINE_CONFIG_DLL(d3d11,,[implib]) WINE_CONFIG_DLL(d3d8,,[implib]) WINE_CONFIG_TEST(dlls/d3d8/tests) WINE_CONFIG_DLL(d3d9,,[implib]) diff --git a/dlls/d3d10core/Makefile.in b/dlls/d3d10core/Makefile.in index 7ee04a2e10c..bfa0a81dd78 100644 --- a/dlls/d3d10core/Makefile.in +++ b/dlls/d3d10core/Makefile.in @@ -1,17 +1,8 @@ MODULE = d3d10core.dll IMPORTLIB = d3d10core -IMPORTS = dxguid uuid dxgi wined3d +IMPORTS = d3d11 C_SRCS = \ - async.c \ - buffer.c \ - d3d10core_main.c \ - device.c \ - inputlayout.c \ - shader.c \ - state.c \ - texture.c \ - utils.c \ - view.c + d3d10core_main.c RC_SRCS = version.rc diff --git a/dlls/d3d10core/d3d10core_main.c b/dlls/d3d10core/d3d10core_main.c index 9006d95beca..fec278605c0 100644 --- a/dlls/d3d10core/d3d10core_main.c +++ b/dlls/d3d10core/d3d10core_main.c @@ -17,102 +17,46 @@ * */ -#include "config.h" -#include "wine/port.h" +#include "wine/debug.h" -#define D3D10CORE_INIT_GUID -#include "d3d10core_private.h" +#include "initguid.h" + +#define COBJMACROS +#include "d3d10_1.h" +#include "d3d11.h" WINE_DEFAULT_DEBUG_CHANNEL(d3d10core); -static HRESULT WINAPI layer_init(enum dxgi_device_layer_id id, DWORD *count, DWORD *values) -{ - TRACE("id %#x, count %p, values %p\n", id, count, values); - - if (id != DXGI_DEVICE_LAYER_D3D10_DEVICE) - { - WARN("Unknown layer id %#x\n", id); - return E_NOTIMPL; - } - - return S_OK; -} - -static UINT WINAPI layer_get_size(enum dxgi_device_layer_id id, struct layer_get_size_args *args, DWORD unknown0) -{ - TRACE("id %#x, args %p, unknown0 %#x\n", id, args, unknown0); - - if (id != DXGI_DEVICE_LAYER_D3D10_DEVICE) - { - WARN("Unknown layer id %#x\n", id); - return 0; - } - - return sizeof(struct d3d10_device); -} - -static HRESULT WINAPI layer_create(enum dxgi_device_layer_id id, void **layer_base, DWORD unknown0, - void *device_object, REFIID riid, void **device_layer) -{ - struct d3d10_device *object; - HRESULT hr; - - TRACE("id %#x, layer_base %p, unknown0 %#x, device_object %p, riid %s, device_layer %p\n", - id, layer_base, unknown0, device_object, debugstr_guid(riid), device_layer); - - if (id != DXGI_DEVICE_LAYER_D3D10_DEVICE) - { - WARN("Unknown layer id %#x\n", id); - *device_layer = NULL; - return E_NOTIMPL; - } - - object = *layer_base; - if (FAILED(hr = d3d10_device_init(object, device_object))) - { - WARN("Failed to initialize device, hr %#x.\n", hr); - *device_layer = NULL; - return hr; - } - *device_layer = &object->IUnknown_inner; - - TRACE("Created d3d10 device at %p\n", object); - - return S_OK; -} +HRESULT WINAPI D3D11CoreCreateDevice(IDXGIFactory *factory, IDXGIAdapter *adapter, UINT flags, + const D3D_FEATURE_LEVEL *feature_levels, UINT levels, ID3D11Device **device); HRESULT WINAPI D3D10CoreRegisterLayers(void) { - const struct dxgi_device_layer layers[] = - { - {DXGI_DEVICE_LAYER_D3D10_DEVICE, layer_init, layer_get_size, layer_create}, - }; + TRACE("\n"); - DXGID3D10RegisterLayers(layers, sizeof(layers)/sizeof(*layers)); - - return S_OK; + return E_NOTIMPL; } HRESULT WINAPI D3D10CoreCreateDevice(IDXGIFactory *factory, IDXGIAdapter *adapter, UINT flags, void *unknown0, ID3D10Device **device) { - IUnknown *dxgi_device; - HMODULE d3d10core; + 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); - d3d10core = GetModuleHandleA("d3d10core.dll"); - hr = DXGID3D10CreateDevice(d3d10core, factory, adapter, flags, unknown0, (void **)&dxgi_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)) { - WARN("Failed to create device, returning %#x\n", hr); - return hr; + ERR("Device should implement ID3D10Device, returning E_FAIL.\n"); + return E_FAIL; } - hr = IUnknown_QueryInterface(dxgi_device, &IID_ID3D10Device, (void **)device); - IUnknown_Release(dxgi_device); - - return hr; + return S_OK; } diff --git a/dlls/d3d11/Makefile.in b/dlls/d3d11/Makefile.in index fce34cd1eae..5a56faec523 100644 --- a/dlls/d3d11/Makefile.in +++ b/dlls/d3d11/Makefile.in @@ -1,6 +1,17 @@ MODULE = d3d11.dll +IMPORTLIB = d3d11 +IMPORTS = dxguid uuid dxgi wined3d C_SRCS = \ - d3d11_main.c + async.c \ + buffer.c \ + d3d11_main.c \ + device.c \ + inputlayout.c \ + shader.c \ + state.c \ + texture.c \ + utils.c \ + view.c RC_SRCS = version.rc diff --git a/dlls/d3d10core/async.c b/dlls/d3d11/async.c similarity index 99% rename from dlls/d3d10core/async.c rename to dlls/d3d11/async.c index d5b66864a52..f4b54ed63ad 100644 --- a/dlls/d3d10core/async.c +++ b/dlls/d3d11/async.c @@ -20,9 +20,9 @@ #include "config.h" #include "wine/port.h" -#include "d3d10core_private.h" +#include "d3d11_private.h" -WINE_DEFAULT_DEBUG_CHANNEL(d3d10core); +WINE_DEFAULT_DEBUG_CHANNEL(d3d11); static inline struct d3d10_query *impl_from_ID3D10Query(ID3D10Query *iface) { diff --git a/dlls/d3d10core/buffer.c b/dlls/d3d11/buffer.c similarity index 99% rename from dlls/d3d10core/buffer.c rename to dlls/d3d11/buffer.c index 0481fd21db5..18a9189a899 100644 --- a/dlls/d3d10core/buffer.c +++ b/dlls/d3d11/buffer.c @@ -20,9 +20,9 @@ #include "config.h" #include "wine/port.h" -#include "d3d10core_private.h" +#include "d3d11_private.h" -WINE_DEFAULT_DEBUG_CHANNEL(d3d10core); +WINE_DEFAULT_DEBUG_CHANNEL(d3d11); static inline struct d3d10_buffer *impl_from_ID3D10Buffer(ID3D10Buffer *iface) { diff --git a/dlls/d3d11/d3d11.spec b/dlls/d3d11/d3d11.spec index 2d6c87745be..60c77f9d309 100644 --- a/dlls/d3d11/d3d11.spec +++ b/dlls/d3d11/d3d11.spec @@ -1,7 +1,7 @@ -@ stub D3D11CoreCreateDevice +@ 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 8d8e20a9019..577391a786d 100644 --- a/dlls/d3d11/d3d11_main.c +++ b/dlls/d3d11/d3d11_main.c @@ -1,6 +1,7 @@ /* * Direct3D 11 * + * Copyright 2008 Henri Verbeet for CodeWeavers * Copyright 2013 Austin English * * This library is free software; you can redistribute it and/or @@ -19,12 +20,11 @@ * */ -#include +#include "config.h" +#include "wine/port.h" -#include "windef.h" -#include "winbase.h" -#include "d3d11.h" -#include "wine/debug.h" +#define D3D11_INIT_GUID +#include "d3d11_private.h" WINE_DEFAULT_DEBUG_CHANNEL(d3d11); @@ -45,6 +45,105 @@ static const char *debug_d3d_driver_type(D3D_DRIVER_TYPE driver_type) } } +static HRESULT WINAPI layer_init(enum dxgi_device_layer_id id, DWORD *count, DWORD *values) +{ + TRACE("id %#x, count %p, values %p\n", id, count, values); + + if (id != DXGI_DEVICE_LAYER_D3D10_DEVICE) + { + WARN("Unknown layer id %#x\n", id); + return E_NOTIMPL; + } + + return S_OK; +} + +static UINT WINAPI layer_get_size(enum dxgi_device_layer_id id, struct layer_get_size_args *args, DWORD unknown0) +{ + TRACE("id %#x, args %p, unknown0 %#x\n", id, args, unknown0); + + if (id != DXGI_DEVICE_LAYER_D3D10_DEVICE) + { + WARN("Unknown layer id %#x\n", id); + return 0; + } + + return sizeof(struct d3d10_device); +} + +static HRESULT WINAPI layer_create(enum dxgi_device_layer_id id, void **layer_base, DWORD unknown0, + void *device_object, REFIID riid, void **device_layer) +{ + struct d3d10_device *object; + HRESULT hr; + + TRACE("id %#x, layer_base %p, unknown0 %#x, device_object %p, riid %s, device_layer %p\n", + id, layer_base, unknown0, device_object, debugstr_guid(riid), device_layer); + + if (id != DXGI_DEVICE_LAYER_D3D10_DEVICE) + { + WARN("Unknown layer id %#x\n", id); + *device_layer = NULL; + return E_NOTIMPL; + } + + object = *layer_base; + if (FAILED(hr = d3d10_device_init(object, device_object))) + { + WARN("Failed to initialize device, hr %#x.\n", hr); + *device_layer = NULL; + return hr; + } + *device_layer = &object->IUnknown_inner; + + TRACE("Created d3d10 device at %p\n", object); + + return S_OK; +} + +HRESULT WINAPI D3D11CoreRegisterLayers(void) +{ + const struct dxgi_device_layer layers[] = + { + {DXGI_DEVICE_LAYER_D3D10_DEVICE, layer_init, layer_get_size, layer_create}, + }; + + DXGID3D10RegisterLayers(layers, sizeof(layers)/sizeof(*layers)); + + return S_OK; +} + +HRESULT WINAPI D3D11CoreCreateDevice(IDXGIFactory *factory, IDXGIAdapter *adapter, UINT flags, + const D3D_FEATURE_LEVEL *feature_levels, UINT levels, ID3D11Device **device) +{ + IUnknown *dxgi_device; + HMODULE d3d11; + HRESULT hr; + + TRACE("factory %p, adapter %p, flags %#x, feature_levels %p, levels %u, device %p.\n", + factory, adapter, flags, feature_levels, levels, device); + + FIXME("Ignoring feature levels.\n"); + + d3d11 = GetModuleHandleA("d3d11.dll"); + hr = DXGID3D10CreateDevice(d3d11, factory, adapter, flags, 0, (void **)&dxgi_device); + if (FAILED(hr)) + { + WARN("Failed to create device, returning %#x.\n", hr); + return hr; + } + + hr = IUnknown_QueryInterface(dxgi_device, &IID_ID3D11Device, (void **)device); + IUnknown_Release(dxgi_device); + if (FAILED(hr)) + { + ERR("Failed to query ID3D11Device interface, returning E_FAIL.\n"); + return E_FAIL; + } + + return S_OK; +} + HRESULT WINAPI D3D11CreateDevice(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_type, HMODULE swrast, UINT flags, const D3D_FEATURE_LEVEL *feature_levels, UINT levels, UINT sdk_version, ID3D11Device **device, D3D_FEATURE_LEVEL *feature_level, ID3D11DeviceContext **context) diff --git a/dlls/d3d10core/d3d10core_private.h b/dlls/d3d11/d3d11_private.h similarity index 99% rename from dlls/d3d10core/d3d10core_private.h rename to dlls/d3d11/d3d11_private.h index 99cae093f6a..51b0892af5f 100644 --- a/dlls/d3d10core/d3d10core_private.h +++ b/dlls/d3d11/d3d11_private.h @@ -16,8 +16,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef __WINE_D3D10CORE_PRIVATE_H -#define __WINE_D3D10CORE_PRIVATE_H +#ifndef __WINE_D3D11_PRIVATE_H +#define __WINE_D3D11_PRIVATE_H #include "wine/debug.h" @@ -31,7 +31,7 @@ #include "d3d10_1.h" #include "d3d11_1.h" -#ifdef D3D10CORE_INIT_GUID +#ifdef D3D11_INIT_GUID #include "initguid.h" #endif #include "wine/wined3d.h" @@ -397,4 +397,4 @@ HRESULT WINAPI DXGID3D10CreateDevice(HMODULE d3d10core, IDXGIFactory *factory, I UINT flags, void *unknown0, void **device); HRESULT WINAPI DXGID3D10RegisterLayers(const struct dxgi_device_layer *layers, UINT layer_count); -#endif /* __WINE_D3D10CORE_PRIVATE_H */ +#endif /* __WINE_D3D11_PRIVATE_H */ diff --git a/dlls/d3d10core/device.c b/dlls/d3d11/device.c similarity index 99% rename from dlls/d3d10core/device.c rename to dlls/d3d11/device.c index ad58cb3bd92..b7b963a7cda 100644 --- a/dlls/d3d10core/device.c +++ b/dlls/d3d11/device.c @@ -20,9 +20,9 @@ #include "config.h" #include "wine/port.h" -#include "d3d10core_private.h" +#include "d3d11_private.h" -WINE_DEFAULT_DEBUG_CHANNEL(d3d10core); +WINE_DEFAULT_DEBUG_CHANNEL(d3d11); static void STDMETHODCALLTYPE d3d10_null_wined3d_object_destroyed(void *parent) {} diff --git a/dlls/d3d10core/inputlayout.c b/dlls/d3d11/inputlayout.c similarity index 99% rename from dlls/d3d10core/inputlayout.c rename to dlls/d3d11/inputlayout.c index a1b32742683..6410216656c 100644 --- a/dlls/d3d10core/inputlayout.c +++ b/dlls/d3d11/inputlayout.c @@ -20,9 +20,9 @@ #include "config.h" #include "wine/port.h" -#include "d3d10core_private.h" +#include "d3d11_private.h" -WINE_DEFAULT_DEBUG_CHANNEL(d3d10core); +WINE_DEFAULT_DEBUG_CHANNEL(d3d11); static HRESULT isgn_handler(const char *data, DWORD data_size, DWORD tag, void *ctx) { diff --git a/dlls/d3d10core/shader.c b/dlls/d3d11/shader.c similarity index 99% rename from dlls/d3d10core/shader.c rename to dlls/d3d11/shader.c index 19586ca1a2b..bb163eb314f 100644 --- a/dlls/d3d10core/shader.c +++ b/dlls/d3d11/shader.c @@ -20,9 +20,9 @@ #include "config.h" #include "wine/port.h" -#include "d3d10core_private.h" +#include "d3d11_private.h" -WINE_DEFAULT_DEBUG_CHANNEL(d3d10core); +WINE_DEFAULT_DEBUG_CHANNEL(d3d11); static HRESULT shdr_handler(const char *data, DWORD data_size, DWORD tag, void *ctx) { diff --git a/dlls/d3d10core/state.c b/dlls/d3d11/state.c similarity index 99% rename from dlls/d3d10core/state.c rename to dlls/d3d11/state.c index c4cf9c17790..03bae92594a 100644 --- a/dlls/d3d10core/state.c +++ b/dlls/d3d11/state.c @@ -20,9 +20,9 @@ #include "config.h" #include "wine/port.h" -#include "d3d10core_private.h" +#include "d3d11_private.h" -WINE_DEFAULT_DEBUG_CHANNEL(d3d10core); +WINE_DEFAULT_DEBUG_CHANNEL(d3d11); #define D3D10_FILTER_MIP_MASK 0x01 #define D3D10_FILTER_MAG_MASK 0x04 diff --git a/dlls/d3d10core/texture.c b/dlls/d3d11/texture.c similarity index 99% rename from dlls/d3d10core/texture.c rename to dlls/d3d11/texture.c index 5a9319d2e9a..45f9b336706 100644 --- a/dlls/d3d10core/texture.c +++ b/dlls/d3d11/texture.c @@ -20,9 +20,9 @@ #include "config.h" #include "wine/port.h" -#include "d3d10core_private.h" +#include "d3d11_private.h" -WINE_DEFAULT_DEBUG_CHANNEL(d3d10core); +WINE_DEFAULT_DEBUG_CHANNEL(d3d11); static inline struct d3d10_texture2d *impl_from_ID3D10Texture2D(ID3D10Texture2D *iface) { diff --git a/dlls/d3d10core/utils.c b/dlls/d3d11/utils.c similarity index 99% rename from dlls/d3d10core/utils.c rename to dlls/d3d11/utils.c index 763cc43b8d8..134d12244e4 100644 --- a/dlls/d3d10core/utils.c +++ b/dlls/d3d11/utils.c @@ -20,9 +20,9 @@ #include "config.h" #include "wine/port.h" -#include "d3d10core_private.h" +#include "d3d11_private.h" -WINE_DEFAULT_DEBUG_CHANNEL(d3d10core); +WINE_DEFAULT_DEBUG_CHANNEL(d3d11); #define WINE_D3D10_TO_STR(x) case x: return #x diff --git a/dlls/d3d10core/view.c b/dlls/d3d11/view.c similarity index 99% rename from dlls/d3d10core/view.c rename to dlls/d3d11/view.c index a3492a00072..a939bfc790f 100644 --- a/dlls/d3d10core/view.c +++ b/dlls/d3d11/view.c @@ -21,9 +21,9 @@ #include "wine/port.h" #define NONAMELESSUNION -#include "d3d10core_private.h" +#include "d3d11_private.h" -WINE_DEFAULT_DEBUG_CHANNEL(d3d10core); +WINE_DEFAULT_DEBUG_CHANNEL(d3d11); static HRESULT set_dsdesc_from_resource(D3D10_DEPTH_STENCIL_VIEW_DESC *desc, ID3D10Resource *resource) { diff --git a/dlls/dxgi/dxgi_main.c b/dlls/dxgi/dxgi_main.c index 3414c4f16be..90c92baec58 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; }