ReactOS 0.4.17-dev-966-gf06eace
directx.c
Go to the documentation of this file.
1/*
2 * IDirect3D9 implementation
3 *
4 * Copyright 2002 Jason Edmeades
5 * Copyright 2005 Oliver Stieber
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22#include "d3d9_private.h"
23
25
26static inline struct d3d9 *impl_from_IDirect3D9Ex(IDirect3D9Ex *iface)
27{
28 return CONTAINING_RECORD(iface, struct d3d9, IDirect3D9Ex_iface);
29}
30
31static HRESULT WINAPI d3d9_QueryInterface(IDirect3D9Ex *iface, REFIID riid, void **out)
32{
33 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
34
35 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
36
37 if (IsEqualGUID(riid, &IID_IDirect3D9)
39 {
42 return S_OK;
43 }
44
45 if (IsEqualGUID(riid, &IID_IDirect3D9Ex))
46 {
47 if (!d3d9->extended)
48 {
49 WARN("Application asks for IDirect3D9Ex, but this instance wasn't created with Direct3DCreate9Ex.\n");
50 *out = NULL;
51 return E_NOINTERFACE;
52 }
53
56 return S_OK;
57 }
58
59 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
60
61 *out = NULL;
62 return E_NOINTERFACE;
63}
64
65static ULONG WINAPI d3d9_AddRef(IDirect3D9Ex *iface)
66{
67 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
69
70 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
71
72 return refcount;
73}
74
75static ULONG WINAPI d3d9_Release(IDirect3D9Ex *iface)
76{
77 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
79
80 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
81
82 if (!refcount)
83 {
85
87 free(d3d9);
88 }
89
90 return refcount;
91}
92
93static HRESULT WINAPI d3d9_RegisterSoftwareDevice(IDirect3D9Ex *iface, void *init_function)
94{
95 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
96 HRESULT hr;
97
98 TRACE("iface %p, init_function %p.\n", iface, init_function);
99
103
104 return hr;
105}
106
107static UINT WINAPI d3d9_GetAdapterCount(IDirect3D9Ex *iface)
108{
109 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
110
111 TRACE("iface %p.\n", iface);
112
114}
115
118{
119 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
120 struct wined3d_adapter_identifier adapter_id;
122 struct wined3d_output_desc output_desc;
123 unsigned int output_idx;
124 HRESULT hr;
125
126 TRACE("iface %p, adapter %u, flags %#lx, identifier %p.\n",
127 iface, adapter, flags, identifier);
128
129 output_idx = adapter;
130 if (output_idx >= d3d9->wined3d_output_count)
131 return D3DERR_INVALIDCALL;
132
134 if (FAILED(hr = wined3d_output_get_desc(d3d9->wined3d_outputs[output_idx], &output_desc)))
135 {
137 WARN("Failed to get output description, hr %#lx.\n", hr);
138 return hr;
139 }
140 WideCharToMultiByte(CP_ACP, 0, output_desc.device_name, -1, identifier->DeviceName,
141 sizeof(identifier->DeviceName), NULL, NULL);
142
143 adapter_id.driver = identifier->Driver;
144 adapter_id.driver_size = sizeof(identifier->Driver);
145 adapter_id.description = identifier->Description;
146 adapter_id.description_size = sizeof(identifier->Description);
147
150 {
151 identifier->DriverVersion = adapter_id.driver_version;
152 identifier->VendorId = adapter_id.vendor_id;
153 identifier->DeviceId = adapter_id.device_id;
154 identifier->SubSysId = adapter_id.subsystem_id;
155 identifier->Revision = adapter_id.revision;
156 memcpy(&identifier->DeviceIdentifier, &adapter_id.device_identifier, sizeof(identifier->DeviceIdentifier));
157 identifier->WHQLLevel = adapter_id.whql_level;
158 }
160
161 return hr;
162}
163
165{
166 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
167 unsigned int output_idx, count;
168
169 TRACE("iface %p, adapter %u, format %#x.\n", iface, adapter, format);
170
171 output_idx = adapter;
172 if (output_idx >= d3d9->wined3d_output_count)
173 return 0;
174
175 /* Others than that not supported by d3d9, but reported by wined3d for ddraw. Filter them out. */
177 return 0;
178
183
184 return count;
185}
186
187static HRESULT WINAPI d3d9_EnumAdapterModes(IDirect3D9Ex *iface, UINT adapter,
189{
190 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
191 struct wined3d_display_mode wined3d_mode;
192 unsigned int output_idx;
193 HRESULT hr;
194
195 TRACE("iface %p, adapter %u, format %#x, mode_idx %u, mode %p.\n",
196 iface, adapter, format, mode_idx, mode);
197
198 output_idx = adapter;
199 if (output_idx >= d3d9->wined3d_output_count)
200 return D3DERR_INVALIDCALL;
201
203 return D3DERR_INVALIDCALL;
204
207 WINED3D_SCANLINE_ORDERING_UNKNOWN, mode_idx, &wined3d_mode, true);
209
210 if (SUCCEEDED(hr))
211 {
212 mode->Width = wined3d_mode.width;
213 mode->Height = wined3d_mode.height;
214 mode->RefreshRate = wined3d_mode.refresh_rate;
215 mode->Format = d3dformat_from_wined3dformat(wined3d_mode.format_id);
216 }
217
218 return hr;
219}
220
222{
223 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
224 struct wined3d_display_mode wined3d_mode;
225 unsigned int output_idx;
226 HRESULT hr;
227
228 TRACE("iface %p, adapter %u, mode %p.\n", iface, adapter, mode);
229
230 output_idx = adapter;
231 if (output_idx >= d3d9->wined3d_output_count)
232 return D3DERR_INVALIDCALL;
233
235 hr = wined3d_output_get_display_mode(d3d9->wined3d_outputs[output_idx], &wined3d_mode, NULL);
237
238 if (SUCCEEDED(hr))
239 {
240 mode->Width = wined3d_mode.width;
241 mode->Height = wined3d_mode.height;
242 mode->RefreshRate = wined3d_mode.refresh_rate;
243 mode->Format = d3dformat_from_wined3dformat(wined3d_mode.format_id);
244 }
245
246 return hr;
247}
248
250 D3DFORMAT display_format, D3DFORMAT backbuffer_format, BOOL windowed)
251{
252 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
253 unsigned int output_idx;
254 HRESULT hr;
255
256 TRACE("iface %p, adapter %u, device_type %#x, display_format %#x, backbuffer_format %#x, windowed %#x.\n",
257 iface, adapter, device_type, display_format, backbuffer_format, windowed);
258
259 output_idx = adapter;
260 if (output_idx >= d3d9->wined3d_output_count)
261 return D3DERR_INVALIDCALL;
262
263 /* Others than that not supported by d3d9, but reported by wined3d for ddraw. Filter them out. */
264 if (!windowed && display_format != D3DFMT_X8R8G8B8 && display_format != D3DFMT_R5G6B5)
266
270 wined3dformat_from_d3dformat(backbuffer_format), windowed);
272
273 return hr;
274}
275
277 D3DFORMAT adapter_format, DWORD usage, D3DRESOURCETYPE resource_type, D3DFORMAT format)
278{
279 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
280 enum wined3d_resource_type wined3d_rtype;
282 unsigned int bind_flags;
283 unsigned int output_idx;
284 HRESULT hr;
285
286 TRACE("iface %p, adapter %u, device_type %#x, adapter_format %#x, usage %#lx, resource_type %#x, format %#x.\n",
287 iface, adapter, device_type, adapter_format, usage, resource_type, format);
288
289 output_idx = adapter;
290 if (output_idx >= d3d9->wined3d_output_count)
291 return D3DERR_INVALIDCALL;
292
293 if (adapter_format != D3DFMT_X8R8G8B8 && adapter_format != D3DFMT_R5G6B5
294 && adapter_format != D3DFMT_X1R5G5B5)
295 {
296 WARN("Invalid adapter format.\n");
297 return adapter_format ? D3DERR_NOTAVAILABLE : D3DERR_INVALIDCALL;
298 }
299
302 switch (resource_type)
303 {
306 case D3DRTYPE_TEXTURE:
307 bind_flags |= WINED3D_BIND_SHADER_RESOURCE;
308 case D3DRTYPE_SURFACE:
309 wined3d_rtype = WINED3D_RTYPE_TEXTURE_2D;
310 break;
311
313 case D3DRTYPE_VOLUME:
314 bind_flags |= WINED3D_BIND_SHADER_RESOURCE;
315 wined3d_rtype = WINED3D_RTYPE_TEXTURE_3D;
316 break;
317
320 wined3d_rtype = WINED3D_RTYPE_BUFFER;
321 break;
322
323 default:
324 FIXME("Unhandled resource type %#x.\n", resource_type);
326 }
327
330 if (format == D3DFMT_RESZ && resource_type == D3DRTYPE_SURFACE && usage == D3DUSAGE_RENDERTARGET)
331 {
332 unsigned int levels;
333
336 if (SUCCEEDED(hr) && !levels)
338 }
339 else
341 wined3dformat_from_d3dformat(adapter_format), usage, bind_flags,
342 wined3d_rtype, wined3dformat_from_d3dformat(format));
344
345 return hr;
346}
347
349 D3DFORMAT format, BOOL windowed, D3DMULTISAMPLE_TYPE multisample_type, DWORD *levels)
350{
351 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
353 unsigned int output_idx;
354 HRESULT hr;
355
356 TRACE("iface %p, adapter %u, device_type %#x, format %#x, windowed %#x, multisample_type %#x, levels %p.\n",
357 iface, adapter, device_type, format, windowed, multisample_type, levels);
358
359 output_idx = adapter;
360 if (output_idx >= d3d9->wined3d_output_count)
361 return D3DERR_INVALIDCALL;
362
363 if (multisample_type > D3DMULTISAMPLE_16_SAMPLES)
364 return D3DERR_INVALIDCALL;
365
370 windowed, wined3d_multisample_type_from_d3d(multisample_type), (unsigned int *)levels);
373 *levels = 1;
374
375 return hr;
376}
377
379 D3DFORMAT adapter_format, D3DFORMAT rt_format, D3DFORMAT ds_format)
380{
381 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
383 unsigned int output_idx;
384 HRESULT hr;
385
386 TRACE("iface %p, adapter %u, device_type %#x, adapter_format %#x, rt_format %#x, ds_format %#x.\n",
387 iface, adapter, device_type, adapter_format, rt_format, ds_format);
388
389 output_idx = adapter;
390 if (output_idx >= d3d9->wined3d_output_count)
391 return D3DERR_INVALIDCALL;
392
399
400 return hr;
401}
402
405{
406 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
407 unsigned int output_idx;
408 HRESULT hr;
409
410 TRACE("iface %p, adapter %u, device_type %#x, src_format %#x, dst_format %#x.\n",
411 iface, adapter, device_type, src_format, dst_format);
412
413 output_idx = adapter;
414 if (output_idx >= d3d9->wined3d_output_count)
415 return D3DERR_INVALIDCALL;
416
417 if (src_format == dst_format)
418 return S_OK;
419
425
426 return hr;
427}
428
430{
431 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
434 unsigned int output_idx;
435 HRESULT hr;
436
437 TRACE("iface %p, adapter %u, device_type %#x, caps %p.\n", iface, adapter, device_type, caps);
438
439 output_idx = adapter;
440 if (output_idx >= d3d9->wined3d_output_count)
441 return D3DERR_INVALIDCALL;
442
443 if (!caps)
444 return D3DERR_INVALIDCALL;
445
446 memset(caps, 0, sizeof(*caps));
447
452
454
455 return hr;
456}
457
459{
460 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
462 unsigned int output_idx;
463 HRESULT hr;
464
465 TRACE("iface %p, adapter %u.\n", iface, adapter);
466
467 output_idx = adapter;
468 if (output_idx >= d3d9->wined3d_output_count)
469 return NULL;
470
474
475 if (FAILED(hr))
476 {
477 WARN("Failed to get output desc, hr %#lx.\n", hr);
478 return NULL;
479 }
480
481 return desc.monitor;
482}
483
487{
488 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
489 struct d3d9_device *object;
490 HRESULT hr;
491
492 TRACE("iface %p, adapter %u, device_type %#x, focus_window %p, flags %#lx, parameters %p, device %p.\n",
493 iface, adapter, device_type, focus_window, flags, parameters, device);
494
495 if (!(object = calloc(1, sizeof(*object))))
496 return E_OUTOFMEMORY;
497
498 hr = device_init(object, d3d9, d3d9->wined3d, adapter, device_type, focus_window, flags, parameters, NULL);
499 if (FAILED(hr))
500 {
501 WARN("Failed to initialize device, hr %#lx.\n", hr);
502 free(object);
503 return hr;
504 }
505
506 TRACE("Created device %p.\n", object);
507 *device = (IDirect3DDevice9 *)&object->IDirect3DDevice9Ex_iface;
508
509 return D3D_OK;
510}
511
512static UINT WINAPI d3d9_GetAdapterModeCountEx(IDirect3D9Ex *iface,
514{
515 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
516 unsigned int output_idx, count;
517
518 TRACE("iface %p, adapter %u, filter %p.\n", iface, adapter, filter);
519
520 output_idx = adapter;
521 if (output_idx >= d3d9->wined3d_output_count)
522 return 0;
523
524 if (filter->Format != D3DFMT_X8R8G8B8 && filter->Format != D3DFMT_R5G6B5)
525 return 0;
526
531
532 return count;
533}
534
535static HRESULT WINAPI d3d9_EnumAdapterModesEx(IDirect3D9Ex *iface,
537{
538 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
539 struct wined3d_display_mode wined3d_mode;
540 unsigned int output_idx;
541 HRESULT hr;
542
543 TRACE("iface %p, adapter %u, filter %p, mode_idx %u, mode %p.\n",
544 iface, adapter, filter, mode_idx, mode);
545
546 output_idx = adapter;
547 if (output_idx >= d3d9->wined3d_output_count)
548 return D3DERR_INVALIDCALL;
549
550 if (filter->Format != D3DFMT_X8R8G8B8 && filter->Format != D3DFMT_R5G6B5)
551 return D3DERR_INVALIDCALL;
552
555 wined3d_scanline_ordering_from_d3d(filter->ScanLineOrdering), mode_idx, &wined3d_mode, true);
557
558 if (SUCCEEDED(hr))
559 {
560 mode->Width = wined3d_mode.width;
561 mode->Height = wined3d_mode.height;
562 mode->RefreshRate = wined3d_mode.refresh_rate;
563 mode->Format = d3dformat_from_wined3dformat(wined3d_mode.format_id);
564 mode->ScanLineOrdering = d3dscanlineordering_from_wined3d(wined3d_mode.scanline_ordering);
565 }
566
567 return hr;
568}
569
570static HRESULT WINAPI d3d9_GetAdapterDisplayModeEx(IDirect3D9Ex *iface,
572{
573 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
574 struct wined3d_display_mode wined3d_mode;
575 unsigned int output_idx;
576 HRESULT hr;
577
578 TRACE("iface %p, adapter %u, mode %p, rotation %p.\n",
579 iface, adapter, mode, rotation);
580
581 output_idx = adapter;
582 if (output_idx >= d3d9->wined3d_output_count)
583 return D3DERR_INVALIDCALL;
584
585 if (mode->Size != sizeof(*mode))
586 return D3DERR_INVALIDCALL;
587
589 hr = wined3d_output_get_display_mode(d3d9->wined3d_outputs[output_idx], &wined3d_mode,
590 (enum wined3d_display_rotation *)rotation);
592
593 if (SUCCEEDED(hr))
594 {
595 mode->Width = wined3d_mode.width;
596 mode->Height = wined3d_mode.height;
597 mode->RefreshRate = wined3d_mode.refresh_rate;
598 mode->Format = d3dformat_from_wined3dformat(wined3d_mode.format_id);
599 mode->ScanLineOrdering = d3dscanlineordering_from_wined3d(wined3d_mode.scanline_ordering);
600 }
601
602 return hr;
603}
604
608{
609 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
610 struct d3d9_device *object;
611 HRESULT hr;
612
613 TRACE("iface %p, adapter %u, device_type %#x, focus_window %p, flags %#lx, parameters %p, mode %p, device %p.\n",
614 iface, adapter, device_type, focus_window, flags, parameters, mode, device);
615
616 if (!(object = calloc(1, sizeof(*object))))
617 return E_OUTOFMEMORY;
618
619 hr = device_init(object, d3d9, d3d9->wined3d, adapter, device_type, focus_window, flags, parameters, mode);
620 if (FAILED(hr))
621 {
622 WARN("Failed to initialize device, hr %#lx.\n", hr);
623 free(object);
624 return hr;
625 }
626
627 TRACE("Created device %p.\n", object);
628 *device = &object->IDirect3DDevice9Ex_iface;
629
630 return D3D_OK;
631}
632
633static HRESULT WINAPI d3d9_GetAdapterLUID(IDirect3D9Ex *iface, UINT adapter, LUID *luid)
634{
635 struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
636 struct wined3d_adapter_identifier adapter_id;
638 unsigned int output_idx;
639 HRESULT hr;
640
641 TRACE("iface %p, adapter %u, luid %p.\n", iface, adapter, luid);
642
643 output_idx = adapter;
644 if (output_idx >= d3d9->wined3d_output_count)
645 return D3DERR_INVALIDCALL;
646
647 adapter_id.driver_size = 0;
648 adapter_id.description_size = 0;
649
652 *luid = adapter_id.adapter_luid;
653
654 return hr;
655}
656
657static const struct IDirect3D9ExVtbl d3d9_vtbl =
658{
659 /* IUnknown */
663 /* IDirect3D9 */
678 /* IDirect3D9Ex */
684};
685
686BOOL d3d9_init(struct d3d9 *d3d9, BOOL extended, BOOL d3d9on12)
687{
692 unsigned int adapter_idx, output_idx, adapter_count, output_count = 0;
694
695 if (extended)
697
699 d3d9->refcount = 1;
700
703 if (!d3d9->wined3d)
704 {
706 return FALSE;
707 }
708
710 for (adapter_idx = 0; adapter_idx < adapter_count; ++adapter_idx)
711 {
714 }
715
717 if (!d3d9->wined3d_outputs)
718 {
721 return FALSE;
722 }
723
725 for (adapter_idx = 0; adapter_idx < adapter_count; ++adapter_idx)
726 {
729 for (output_idx = 0; output_idx < output_count; ++output_idx)
730 {
734 }
735 }
736
738 d3d9->extended = extended;
739 d3d9->d3d9on12 = d3d9on12;
740
741 return TRUE;
742}
#define DECLSPEC_HOTPATCH
Definition: _mingw.h:240
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define D3DERR_INVALIDCALL
Definition: d3d10_private.h:42
#define D3DFMT_RESZ
Definition: d3d8_private.h:43
HRESULT device_init(struct d3d8_device *device, struct d3d8 *parent, struct wined3d *wined3d, UINT adapter, D3DDEVTYPE device_type, HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters)
Definition: device.c:3667
D3DFORMAT d3dformat_from_wined3dformat(enum wined3d_format_id format)
Definition: device.c:33
static enum wined3d_device_type wined3d_device_type_from_d3d(D3DDEVTYPE type)
Definition: d3d8_private.h:392
enum wined3d_format_id wined3dformat_from_d3dformat(D3DFORMAT format)
Definition: device.c:84
enum _D3DRESOURCETYPE D3DRESOURCETYPE
enum _D3DDEVTYPE D3DDEVTYPE
@ D3DMULTISAMPLE_16_SAMPLES
Definition: d3d8types.h:687
@ D3DFMT_X1R5G5B5
Definition: d3d8types.h:607
@ D3DFMT_R5G6B5
Definition: d3d8types.h:606
@ D3DFMT_X8R8G8B8
Definition: d3d8types.h:605
@ D3DRTYPE_INDEXBUFFER
Definition: d3d8types.h:816
@ D3DRTYPE_TEXTURE
Definition: d3d8types.h:812
@ D3DRTYPE_VOLUMETEXTURE
Definition: d3d8types.h:813
@ D3DRTYPE_CUBETEXTURE
Definition: d3d8types.h:814
@ D3DRTYPE_VOLUME
Definition: d3d8types.h:811
@ D3DRTYPE_SURFACE
Definition: d3d8types.h:810
@ D3DRTYPE_VERTEXBUFFER
Definition: d3d8types.h:815
#define D3DUSAGE_RENDERTARGET
Definition: d3d8types.h:91
enum _D3DFORMAT D3DFORMAT
enum _D3DMULTISAMPLE_TYPE D3DMULTISAMPLE_TYPE
static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_CreateDevice(IDirect3D9Ex *iface, UINT adapter, D3DDEVTYPE device_type, HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters, IDirect3DDevice9 **device)
Definition: directx.c:484
static HRESULT WINAPI d3d9_GetAdapterDisplayModeEx(IDirect3D9Ex *iface, UINT adapter, D3DDISPLAYMODEEX *mode, D3DDISPLAYROTATION *rotation)
Definition: directx.c:570
static UINT WINAPI d3d9_GetAdapterModeCount(IDirect3D9Ex *iface, UINT adapter, D3DFORMAT format)
Definition: directx.c:164
static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_CreateDeviceEx(IDirect3D9Ex *iface, UINT adapter, D3DDEVTYPE device_type, HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters, D3DDISPLAYMODEEX *mode, IDirect3DDevice9Ex **device)
Definition: directx.c:605
static HRESULT WINAPI d3d9_GetAdapterLUID(IDirect3D9Ex *iface, UINT adapter, LUID *luid)
Definition: directx.c:633
static HRESULT WINAPI d3d9_EnumAdapterModes(IDirect3D9Ex *iface, UINT adapter, D3DFORMAT format, UINT mode_idx, D3DDISPLAYMODE *mode)
Definition: directx.c:187
static UINT WINAPI d3d9_GetAdapterCount(IDirect3D9Ex *iface)
Definition: directx.c:107
static HRESULT WINAPI d3d9_CheckDeviceType(IDirect3D9Ex *iface, UINT adapter, D3DDEVTYPE device_type, D3DFORMAT display_format, D3DFORMAT backbuffer_format, BOOL windowed)
Definition: directx.c:249
static HMONITOR WINAPI d3d9_GetAdapterMonitor(IDirect3D9Ex *iface, UINT adapter)
Definition: directx.c:458
static UINT WINAPI d3d9_GetAdapterModeCountEx(IDirect3D9Ex *iface, UINT adapter, const D3DDISPLAYMODEFILTER *filter)
Definition: directx.c:512
static HRESULT WINAPI d3d9_CheckDeviceMultiSampleType(IDirect3D9Ex *iface, UINT adapter, D3DDEVTYPE device_type, D3DFORMAT format, BOOL windowed, D3DMULTISAMPLE_TYPE multisample_type, DWORD *levels)
Definition: directx.c:348
static ULONG WINAPI d3d9_Release(IDirect3D9Ex *iface)
Definition: directx.c:75
static HRESULT WINAPI d3d9_QueryInterface(IDirect3D9Ex *iface, REFIID riid, void **out)
Definition: directx.c:31
static HRESULT WINAPI d3d9_EnumAdapterModesEx(IDirect3D9Ex *iface, UINT adapter, const D3DDISPLAYMODEFILTER *filter, UINT mode_idx, D3DDISPLAYMODEEX *mode)
Definition: directx.c:535
static ULONG WINAPI d3d9_AddRef(IDirect3D9Ex *iface)
Definition: directx.c:65
static struct d3d9 * impl_from_IDirect3D9Ex(IDirect3D9Ex *iface)
Definition: directx.c:26
static HRESULT WINAPI d3d9_CheckDeviceFormatConversion(IDirect3D9Ex *iface, UINT adapter, D3DDEVTYPE device_type, D3DFORMAT src_format, D3DFORMAT dst_format)
Definition: directx.c:403
static const struct IDirect3D9ExVtbl d3d9_vtbl
Definition: directx.c:657
static HRESULT WINAPI d3d9_CheckDeviceFormat(IDirect3D9Ex *iface, UINT adapter, D3DDEVTYPE device_type, D3DFORMAT adapter_format, DWORD usage, D3DRESOURCETYPE resource_type, D3DFORMAT format)
Definition: directx.c:276
static HRESULT WINAPI d3d9_RegisterSoftwareDevice(IDirect3D9Ex *iface, void *init_function)
Definition: directx.c:93
static HRESULT WINAPI d3d9_GetAdapterIdentifier(IDirect3D9Ex *iface, UINT adapter, DWORD flags, D3DADAPTER_IDENTIFIER9 *identifier)
Definition: directx.c:116
BOOL d3d9_init(struct d3d9 *d3d9, BOOL extended, BOOL d3d9on12)
Definition: directx.c:686
static HRESULT WINAPI d3d9_GetDeviceCaps(IDirect3D9Ex *iface, UINT adapter, D3DDEVTYPE device_type, D3DCAPS9 *caps)
Definition: directx.c:429
static HRESULT WINAPI d3d9_CheckDepthStencilMatch(IDirect3D9Ex *iface, UINT adapter, D3DDEVTYPE device_type, D3DFORMAT adapter_format, D3DFORMAT rt_format, D3DFORMAT ds_format)
Definition: directx.c:378
static HRESULT WINAPI d3d9_GetAdapterDisplayMode(IDirect3D9Ex *iface, UINT adapter, D3DDISPLAYMODE *mode)
Definition: directx.c:221
#define IDirect3D9Ex_AddRef(p)
Definition: d3d9.h:1633
D3DDISPLAYROTATION
Definition: d3d9types.h:1589
#define D3D_OK
Definition: d3d.h:106
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
device_type
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static enum wined3d_multisample_type wined3d_multisample_type_from_d3d(D3DMULTISAMPLE_TYPE type)
Definition: device.c:260
#define CP_ACP
Definition: compat.h:109
#define WideCharToMultiByte
Definition: compat.h:111
DWORD IDirect3DDevice9
Definition: dxva2api.idl:22
DWORD IDirect3DDevice9Ex
Definition: dxvahd.idl:22
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
return adapter
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLenum mode
Definition: glext.h:6217
GLbitfield flags
Definition: glext.h:7161
GLsizei levels
Definition: glext.h:7884
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
unsigned int UINT
Definition: sysinfo.c:13
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
static const char * dst_format
Definition: dib.c:1339
static int adapter_count
Definition: monitor.c:148
static BYTE parameters[]
Definition: asn.c:558
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
#define D3DERR_NOTAVAILABLE
Definition: d3d8.h:80
#define memset(x, y, z)
Definition: compat.h:39
#define TRACE(s)
Definition: solgame.cpp:4
char Driver[MAX_DEVICE_IDENTIFIER_STRING]
Definition: d3d9types.h:1263
char Description[MAX_DEVICE_IDENTIFIER_STRING]
Definition: d3d9types.h:1264
LARGE_INTEGER DriverVersion
Definition: d3d9types.h:1266
struct wined3d * wined3d
Definition: d3d9_private.h:65
BOOL d3d9on12
Definition: d3d9_private.h:69
LONG refcount
Definition: d3d9_private.h:64
unsigned int wined3d_output_count
Definition: d3d9_private.h:67
BOOL extended
Definition: d3d9_private.h:68
struct wined3d_output ** wined3d_outputs
Definition: d3d9_private.h:66
IDirect3D9Ex IDirect3D9Ex_iface
Definition: d3d9_private.h:63
Definition: devices.h:37
Definition: filter.c:165
unsigned int description_size
Definition: wined3d.h:1746
unsigned int driver_size
Definition: wined3d.h:1744
LARGE_INTEGER driver_version
Definition: wined3d.h:1747
enum wined3d_format_id format_id
Definition: wined3d.h:1614
enum wined3d_scanline_ordering scanline_ordering
Definition: wined3d.h:1615
WCHAR device_name[CCHDEVICENAME]
Definition: wined3d.h:2152
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define WINAPI
Definition: msvc.h:6
void d3d9_caps_from_wined3dcaps(const struct d3d9 *d3d9, unsigned int adapter_ordinal, D3DCAPS9 *caps, const struct wined3d_caps *wined3d_caps)
Definition: device.c:369
static unsigned int wined3d_bind_flags_from_d3d9_usage(DWORD usage)
Definition: d3d9_private.h:395
static enum wined3d_scanline_ordering wined3d_scanline_ordering_from_d3d(D3DSCANLINEORDERING ordering)
Definition: d3d9_private.h:417
static D3DSCANLINEORDERING d3dscanlineordering_from_wined3d(enum wined3d_scanline_ordering ordering)
Definition: d3d9_private.h:349
unsigned int CDECL wined3d_adapter_get_output_count(const struct wined3d_adapter *adapter)
Definition: directx.c:1038
ULONG CDECL wined3d_decref(struct wined3d *wined3d)
Definition: directx.c:198
UINT CDECL wined3d_get_adapter_count(const struct wined3d *wined3d)
Definition: directx.c:1019
struct wined3d_adapter *CDECL wined3d_output_get_adapter(const struct wined3d_output *output)
Definition: directx.c:1508
HRESULT CDECL wined3d_output_get_desc(const struct wined3d_output *output, struct wined3d_output_desc *desc)
Definition: directx.c:1256
HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id, uint32_t usage, unsigned int bind_flags, enum wined3d_resource_type resource_type, enum wined3d_format_id check_format_id)
Definition: directx.c:1972
HRESULT CDECL wined3d_get_device_caps(const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, struct wined3d_caps *caps)
Definition: directx.c:2366
unsigned int CDECL wined3d_output_get_mode_count(struct wined3d_output *output, enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering, bool cached)
Definition: directx.c:1341
HRESULT CDECL wined3d_check_device_format_conversion(const struct wined3d_output *output, enum wined3d_device_type device_type, enum wined3d_format_id src_format_id, enum wined3d_format_id dst_format_id)
Definition: directx.c:2210
HRESULT CDECL wined3d_register_software_device(struct wined3d *wined3d, void *init_function)
Definition: directx.c:1231
HRESULT CDECL wined3d_check_device_multisample_type(const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, enum wined3d_format_id surface_format_id, BOOL windowed, enum wined3d_multisample_type multisample_type, unsigned int *quality_levels)
Definition: directx.c:1898
HRESULT CDECL wined3d_adapter_get_identifier(const struct wined3d_adapter *adapter, uint32_t flags, struct wined3d_adapter_identifier *identifier)
Definition: directx.c:1785
HRESULT CDECL wined3d_output_get_mode(struct wined3d_output *output, enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering, unsigned int mode_idx, struct wined3d_display_mode *mode, bool cached)
Definition: directx.c:1369
struct wined3d_adapter *CDECL wined3d_get_adapter(const struct wined3d *wined3d, unsigned int idx)
Definition: directx.c:1009
struct wined3d_output *CDECL wined3d_adapter_get_output(const struct wined3d_adapter *adapter, unsigned int idx)
Definition: directx.c:1027
HRESULT CDECL wined3d_check_depth_stencil_match(const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id, enum wined3d_format_id render_target_format_id, enum wined3d_format_id depth_stencil_format_id)
Definition: directx.c:1859
HRESULT CDECL wined3d_output_get_display_mode(const struct wined3d_output *output, struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation)
Definition: directx.c:1515
HRESULT CDECL wined3d_check_device_type(const struct wined3d *wined3d, struct wined3d_output *output, enum wined3d_device_type device_type, enum wined3d_format_id display_format, enum wined3d_format_id backbuffer_format, BOOL windowed)
Definition: directx.c:2254
#define WINED3D_RESTORE_MODE_ON_ACTIVATE
Definition: wined3d.h:1325
#define WINED3DUSAGE_QUERY_MASK
Definition: wined3d.h:949
@ WINED3D_MULTISAMPLE_NON_MASKABLE
Definition: wined3d.h:574
#define WINED3D_NORMALIZED_DEPTH_BIAS
Definition: wined3d.h:1334
#define WINED3DUSAGE_LEGACY_CUBEMAP
Definition: wined3d.h:934
#define WINED3D_LEGACY_UNBOUND_RESOURCE_COLOR
Definition: wined3d.h:1331
wined3d_resource_type
Definition: wined3d.h:716
@ WINED3D_RTYPE_TEXTURE_2D
Definition: wined3d.h:720
@ WINED3D_RTYPE_BUFFER
Definition: wined3d.h:718
@ WINED3D_RTYPE_TEXTURE_3D
Definition: wined3d.h:721
#define WINED3D_HANDLE_RESTORE
Definition: wined3d.h:1327
#define WINED3D_NO_PRIMITIVE_RESTART
Definition: wined3d.h:1332
#define WINED3DERR_NOTAVAILABLE
Definition: wined3d.h:42
#define WINED3DUSAGE_MASK
Definition: wined3d.h:930
#define WINED3D_BIND_SHADER_RESOURCE
Definition: wined3d.h:912
@ WINED3DFMT_D24_UNORM_S8_UINT
Definition: wined3d.h:202
#define WINED3D_PRESENT_CONVERSION
Definition: wined3d.h:1324
@ WINED3D_SCANLINE_ORDERING_UNKNOWN
Definition: wined3d.h:825
#define WINED3D_NO_DRAW_INDIRECT
Definition: wined3d.h:1335
wined3d_display_rotation
Definition: wined3d.h:831
#define WINED3DERR_INVALIDCALL
Definition: wined3d.h:44
#define WINED3D_PIXEL_CENTER_INTEGER
Definition: wined3d.h:1328
#define WINED3D_SRGB_READ_WRITE_CONTROL
Definition: wined3d.h:1330
#define WINED3D_LEGACY_CUBEMAP_FILTERING
Definition: wined3d.h:1333
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:544
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:539
struct wined3d *CDECL wined3d_create(uint32_t flags)
Definition: wined3d_main.c:142
#define E_NOINTERFACE
Definition: winerror.h:3479