winex11.drv: Use the bitmap's "topdown" field in X11DRV_AlphaBlend().
[wine] / dlls / d3d10core / d3d10core_main.c
1 /*
2  * Copyright 2008 Henri Verbeet for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  *
18  */
19
20 #include "config.h"
21 #include "wine/port.h"
22
23 #define D3D10CORE_INIT_GUID
24 #include "d3d10core_private.h"
25
26 WINE_DEFAULT_DEBUG_CHANNEL(d3d10core);
27
28 BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
29 {
30     TRACE("fdwReason %u\n", fdwReason);
31
32     switch(fdwReason)
33     {
34         case DLL_PROCESS_ATTACH:
35             DisableThreadLibraryCalls(hInstDLL);
36             break;
37     }
38
39     return TRUE;
40 }
41
42 static HRESULT WINAPI layer_init(enum dxgi_device_layer_id id, DWORD *count, DWORD *values)
43 {
44     TRACE("id %#x, count %p, values %p\n", id, count, values);
45
46     if (id != DXGI_DEVICE_LAYER_D3D10_DEVICE)
47     {
48         WARN("Unknown layer id %#x\n", id);
49         return E_NOTIMPL;
50     }
51
52     return S_OK;
53 }
54
55 static UINT WINAPI layer_get_size(enum dxgi_device_layer_id id, struct layer_get_size_args *args, DWORD unknown0)
56 {
57     TRACE("id %#x, args %p, unknown0 %#x\n", id, args, unknown0);
58
59     if (id != DXGI_DEVICE_LAYER_D3D10_DEVICE)
60     {
61         WARN("Unknown layer id %#x\n", id);
62         return 0;
63     }
64
65     return sizeof(struct d3d10_device);
66 }
67
68 static HRESULT WINAPI layer_create(enum dxgi_device_layer_id id, void **layer_base, DWORD unknown0,
69         void *device_object, REFIID riid, void **device_layer)
70 {
71     struct d3d10_device *object;
72
73     TRACE("id %#x, layer_base %p, unknown0 %#x, device_object %p, riid %s, device_layer %p\n",
74             id, layer_base, unknown0, device_object, debugstr_guid(riid), device_layer);
75
76     if (id != DXGI_DEVICE_LAYER_D3D10_DEVICE)
77     {
78         WARN("Unknown layer id %#x\n", id);
79         *device_layer = NULL;
80         return E_NOTIMPL;
81     }
82
83     object = *layer_base;
84     d3d10_device_init(object, device_object);
85     *device_layer = &object->inner_unknown_vtbl;
86
87     TRACE("Created d3d10 device at %p\n", object);
88
89     return S_OK;
90 }
91
92 HRESULT WINAPI D3D10CoreRegisterLayers(void)
93 {
94     const struct dxgi_device_layer layers[] =
95     {
96         {DXGI_DEVICE_LAYER_D3D10_DEVICE, layer_init, layer_get_size, layer_create},
97     };
98
99     DXGID3D10RegisterLayers(layers, sizeof(layers)/sizeof(*layers));
100
101     return S_OK;
102 }
103
104 HRESULT WINAPI D3D10CoreCreateDevice(IDXGIFactory *factory, IDXGIAdapter *adapter,
105         UINT flags, void *unknown0, ID3D10Device **device)
106 {
107     IUnknown *dxgi_device;
108     HMODULE d3d10core;
109     HRESULT hr;
110
111     TRACE("factory %p, adapter %p, flags %#x, unknown0 %p, device %p.\n",
112             factory, adapter, flags, unknown0, device);
113
114     d3d10core = GetModuleHandleA("d3d10core.dll");
115     hr = DXGID3D10CreateDevice(d3d10core, factory, adapter, flags, unknown0, (void **)&dxgi_device);
116     if (FAILED(hr))
117     {
118         WARN("Failed to create device, returning %#x\n", hr);
119         return hr;
120     }
121
122     hr = IUnknown_QueryInterface(dxgi_device, &IID_ID3D10Device, (void **)device);
123     IUnknown_Release(dxgi_device);
124
125     return hr;
126 }