ReactOS 0.4.17-dev-934-g091855f
output.c
Go to the documentation of this file.
1/*
2 * Copyright 2009 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#include "dxgi_private.h"
20
22
24{
26}
27
29{
30 return (DXGI_MODE_ROTATION)rotation;
31}
32
33static void dxgi_mode_from_wined3d(DXGI_MODE_DESC *mode, const struct wined3d_display_mode *wined3d_mode)
34{
35 mode->Width = wined3d_mode->width;
36 mode->Height = wined3d_mode->height;
37 mode->RefreshRate.Numerator = wined3d_mode->refresh_rate;
38 mode->RefreshRate.Denominator = 1;
39 mode->Format = dxgi_format_from_wined3dformat(wined3d_mode->format_id);
40 mode->ScanlineOrdering = dxgi_mode_scanline_order_from_wined3d(wined3d_mode->scanline_ordering);
41 mode->Scaling = DXGI_MODE_SCALING_UNSPECIFIED; /* FIXME */
42}
43
44static void dxgi_mode1_from_wined3d(DXGI_MODE_DESC1 *mode, const struct wined3d_display_mode *wined3d_mode)
45{
46 mode->Width = wined3d_mode->width;
47 mode->Height = wined3d_mode->height;
48 mode->RefreshRate.Numerator = wined3d_mode->refresh_rate;
49 mode->RefreshRate.Denominator = 1;
50 mode->Format = dxgi_format_from_wined3dformat(wined3d_mode->format_id);
51 mode->ScanlineOrdering = dxgi_mode_scanline_order_from_wined3d(wined3d_mode->scanline_ordering);
52 mode->Scaling = DXGI_MODE_SCALING_UNSPECIFIED; /* FIXME */
53 mode->Stereo = FALSE; /* FIXME */
54}
55
58{
59 HRESULT hr;
60
61 if (!mode->width != !mode->height)
63
64 if (mode->format_id == WINED3DFMT_UNKNOWN && !device)
66
67 if (mode->format_id == WINED3DFMT_UNKNOWN)
68 {
69 FIXME("Matching formats to device not implemented.\n");
70 return E_NOTIMPL;
71 }
72
76
77 return hr;
78}
79
80static int dxgi_mode_desc_compare(const void *l, const void *r)
81{
82 const DXGI_MODE_DESC *left = l, *right = r;
83 int a, b;
84
85 if (left->Width != right->Width)
86 return left->Width - right->Width;
87
88 if (left->Height != right->Height)
89 return left->Height - right->Height;
90
91 a = left->RefreshRate.Numerator * right->RefreshRate.Denominator;
92 b = right->RefreshRate.Numerator * left->RefreshRate.Denominator;
93 if (a != b)
94 return a - b;
95
96 return 0;
97}
98
100{
103};
104
106 DXGI_FORMAT format, unsigned int *mode_count, void *modes,
107 enum dxgi_mode_struct_version struct_version)
108{
111 unsigned int i, max_count;
112 HRESULT hr;
113
114 if (!mode_count)
116
118 {
119 *mode_count = 0;
120 return S_OK;
121 }
122
124
128
129 if (!modes)
130 {
132 *mode_count = max_count;
133 return S_OK;
134 }
135
136 if (max_count > *mode_count)
137 {
140 }
141
142 *mode_count = max_count;
143
144 for (i = 0; i < *mode_count; ++i)
145 {
148 {
149 WARN("Failed to get output mode %u, hr %#lx.\n", i, hr);
151 return hr;
152 }
153
154 switch (struct_version)
155 {
157 {
158 DXGI_MODE_DESC *desc = modes;
160 break;
161 }
162
164 {
165 DXGI_MODE_DESC1 *desc = modes;
167 break;
168 }
169 }
170 }
172
173 switch (struct_version)
174 {
176 qsort(modes, *mode_count, sizeof(DXGI_MODE_DESC), dxgi_mode_desc_compare);
177 break;
179 qsort(modes, *mode_count, sizeof(DXGI_MODE_DESC1), dxgi_mode_desc_compare);
180 break;
181 }
182
183 return S_OK;
184}
185
187{
188 return CONTAINING_RECORD(iface, struct dxgi_output, IDXGIOutput6_iface);
189}
190
191/* IUnknown methods */
192
194{
195 TRACE("iface %p, iid %s, object %p.\n", iface, debugstr_guid(iid), object);
196
197 if (IsEqualGUID(iid, &IID_IDXGIOutput6)
198 || IsEqualGUID(iid, &IID_IDXGIOutput5)
199 || IsEqualGUID(iid, &IID_IDXGIOutput4)
200 || IsEqualGUID(iid, &IID_IDXGIOutput3)
201 || IsEqualGUID(iid, &IID_IDXGIOutput2)
202 || IsEqualGUID(iid, &IID_IDXGIOutput1)
203 || IsEqualGUID(iid, &IID_IDXGIOutput)
204 || IsEqualGUID(iid, &IID_IDXGIObject)
205 || IsEqualGUID(iid, &IID_IUnknown))
206 {
207 IUnknown_AddRef(iface);
208 *object = iface;
209 return S_OK;
210 }
211
212 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
213
214 *object = NULL;
215 return E_NOINTERFACE;
216}
217
219{
220 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
222
223 TRACE("%p increasing refcount to %lu.\n", output, refcount);
224
225 return refcount;
226}
227
229{
230 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
232
233 TRACE("%p decreasing refcount to %lu.\n", output, refcount);
234
235 if (!refcount)
236 {
238 IWineDXGIAdapter_Release(&output->adapter->IWineDXGIAdapter_iface);
239 free(output);
240 }
241
242 return refcount;
243}
244
245/* IDXGIObject methods */
246
248 REFGUID guid, UINT data_size, const void *data)
249{
250 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
251
252 TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
253
254 return dxgi_set_private_data(&output->private_store, guid, data_size, data);
255}
256
258 REFGUID guid, const IUnknown *object)
259{
260 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
261
262 TRACE("iface %p, guid %s, object %p.\n", iface, debugstr_guid(guid), object);
263
264 return dxgi_set_private_data_interface(&output->private_store, guid, object);
265}
266
268 REFGUID guid, UINT *data_size, void *data)
269{
270 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
271
272 TRACE("iface %p, guid %s, data_size %p, data %p.\n", iface, debugstr_guid(guid), data_size, data);
273
274 return dxgi_get_private_data(&output->private_store, guid, data_size, data);
275}
276
278 REFIID riid, void **parent)
279{
280 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
281
282 TRACE("iface %p, riid %s, parent %p.\n", iface, debugstr_guid(riid), parent);
283
284 return IWineDXGIAdapter_QueryInterface(&output->adapter->IWineDXGIAdapter_iface, riid, parent);
285}
286
287/* IDXGIOutput methods */
288
290{
291 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
292 struct wined3d_output_desc wined3d_desc;
293 enum wined3d_display_rotation rotation;
295 HRESULT hr;
296
297 TRACE("iface %p, desc %p.\n", iface, desc);
298
299 if (!desc)
300 return E_INVALIDARG;
301
303 hr = wined3d_output_get_desc(output->wined3d_output, &wined3d_desc);
304 if (FAILED(hr))
305 {
306 WARN("Failed to get output desc, hr %#lx.\n", hr);
308 return hr;
309 }
310
312 if (FAILED(hr))
313 {
314 WARN("Failed to get output display mode, hr %#lx.\n", hr);
316 return hr;
317 }
319
320 memcpy(desc->DeviceName, wined3d_desc.device_name, sizeof(desc->DeviceName));
321 desc->DesktopCoordinates = wined3d_desc.desktop_rect;
322 desc->AttachedToDesktop = wined3d_desc.attached_to_desktop;
323 desc->Rotation = dxgi_mode_rotation_from_wined3d(rotation);
324 desc->Monitor = wined3d_desc.monitor;
325
326 return S_OK;
327}
328
330 DXGI_FORMAT format, UINT flags, UINT *mode_count, DXGI_MODE_DESC *modes)
331{
332 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
333
334 FIXME("iface %p, format %s, flags %#x, mode_count %p, modes %p partial stub!\n",
335 iface, debug_dxgi_format(format), flags, mode_count, modes);
336
338 format, mode_count, modes, DXGI_MODE_STRUCT_VERSION_0);
339}
340
342 const DXGI_MODE_DESC *mode, DXGI_MODE_DESC *closest_match, IUnknown *device)
343{
344 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
345 struct wined3d_display_mode wined3d_mode;
346 HRESULT hr;
347
348 TRACE("iface %p, mode %p, closest_match %p, device %p.\n",
349 iface, mode, closest_match, device);
350
351 TRACE("Mode: %s.\n", debug_dxgi_mode(mode));
352
353 wined3d_display_mode_from_dxgi(&wined3d_mode, mode);
354 hr = dxgi_output_find_closest_matching_mode(output, &wined3d_mode, device);
355 if (SUCCEEDED(hr))
356 {
357 dxgi_mode_from_wined3d(closest_match, &wined3d_mode);
358 TRACE("Returning %s.\n", debug_dxgi_mode(closest_match));
359 }
360
361 return hr;
362}
363
365{
366 static BOOL once = FALSE;
367
368 if (!once++)
369 FIXME("iface %p stub!\n", iface);
370 else
371 TRACE("iface %p stub!\n", iface);
372
373 return E_NOTIMPL;
374}
375
377{
378 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
379 HRESULT hr;
380
381 TRACE("iface %p, device %p, exclusive %d.\n", iface, device, exclusive);
382
383 if (!device)
385
387 hr = wined3d_output_take_ownership(output->wined3d_output, exclusive);
389
390 return hr;
391}
392
394{
395 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
396
397 TRACE("iface %p.\n", iface);
398
402}
403
406{
407 unsigned int i;
408
409 TRACE("iface %p, gamma_caps %p.\n", iface, gamma_caps);
410
411 if (!gamma_caps)
412 return E_INVALIDARG;
413
414 gamma_caps->ScaleAndOffsetSupported = FALSE;
415 gamma_caps->MaxConvertedValue = 1.0f;
416 gamma_caps->MinConvertedValue = 0.0f;
417 gamma_caps->NumGammaControlPoints = 256;
418
419 for (i = 0; i < gamma_caps->NumGammaControlPoints; ++i)
420 gamma_caps->ControlPointPositions[i] = i / 255.0f;
421
422 return S_OK;
423}
424
426{
427 f *= 65535.0f;
428 if (f < 0.0f)
429 f = 0.0f;
430 else if (f > 65535.0f)
431 f = 65535.0f;
432
433 return f + 0.5f;
434}
435
437 const DXGI_GAMMA_CONTROL *gamma_control)
438{
439 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
441 const DXGI_RGB *p;
442 unsigned int i;
443
444 TRACE("iface %p, gamma_control %p.\n", iface, gamma_control);
445
446 if (gamma_control->Scale.Red != 1.0f || gamma_control->Scale.Green != 1.0f || gamma_control->Scale.Blue != 1.0f)
447 FIXME("Ignoring unhandled scale {%.8e, %.8e, %.8e}.\n", gamma_control->Scale.Red,
448 gamma_control->Scale.Green, gamma_control->Scale.Blue);
449 if (gamma_control->Offset.Red != 0.0f || gamma_control->Offset.Green != 0.0f || gamma_control->Offset.Blue != 0.0f)
450 FIXME("Ignoring unhandled offset {%.8e, %.8e, %.8e}.\n", gamma_control->Offset.Red,
451 gamma_control->Offset.Green, gamma_control->Offset.Blue);
452
453 for (i = 0; i < 256; ++i)
454 {
455 p = &gamma_control->GammaCurve[i];
456 ramp.red[i] = uint16_from_float(p->Red);
457 ramp.green[i] = uint16_from_float(p->Green);
458 ramp.blue[i] = uint16_from_float(p->Blue);
459 }
460
464
465 return S_OK;
466}
467
469 DXGI_GAMMA_CONTROL *gamma_control)
470{
471 FIXME("iface %p, gamma_control %p stub!\n", iface, gamma_control);
472
473 return E_NOTIMPL;
474}
475
477{
478 FIXME("iface %p, surface %p stub!\n", iface, surface);
479
480 return E_NOTIMPL;
481}
482
484{
485 FIXME("iface %p, surface %p stub!\n", iface, surface);
486
487 return E_NOTIMPL;
488}
489
491{
492 FIXME("iface %p, stats %p stub!\n", iface, stats);
493
494 return E_NOTIMPL;
495}
496
497/* IDXGIOutput1 methods */
498
500 DXGI_FORMAT format, UINT flags, UINT *mode_count, DXGI_MODE_DESC1 *modes)
501{
502 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
503
504 FIXME("iface %p, format %s, flags %#x, mode_count %p, modes %p partial stub!\n",
505 iface, debug_dxgi_format(format), flags, mode_count, modes);
506
508 format, mode_count, modes, DXGI_MODE_STRUCT_VERSION_1);
509}
510
512 const DXGI_MODE_DESC1 *mode, DXGI_MODE_DESC1 *closest_match, IUnknown *device)
513{
514 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
515 struct wined3d_display_mode wined3d_mode;
516 HRESULT hr;
517
518 TRACE("iface %p, mode %p, closest_match %p, device %p.\n",
519 iface, mode, closest_match, device);
520
521 TRACE("Mode: %s.\n", debug_dxgi_mode1(mode));
522
524 hr = dxgi_output_find_closest_matching_mode(output, &wined3d_mode, device);
525 if (SUCCEEDED(hr))
526 {
527 dxgi_mode1_from_wined3d(closest_match, &wined3d_mode);
528 TRACE("Returning %s.\n", debug_dxgi_mode1(closest_match));
529 }
530
531 return hr;
532}
533
536{
537 FIXME("iface %p, resource %p stub!\n", iface, resource);
538
539 return E_NOTIMPL;
540}
541
543 IUnknown *device, IDXGIOutputDuplication **output_duplication)
544{
545 FIXME("iface %p, device %p, output_duplication %p stub!\n", iface, device, output_duplication);
546
547 return E_NOTIMPL;
548}
549
550/* IDXGIOutput2 methods */
551
553{
554 FIXME("iface %p stub!\n", iface);
555
556 return FALSE;
557}
558
559/* IDXGIOutput3 methods */
560
563{
564 FIXME("iface %p, format %#x, device %p, flags %p stub!\n", iface, format, device, flags);
565
566 return E_NOTIMPL;
567}
568
569/* IDXGIOutput4 methods */
570
573{
574 FIXME("iface %p, format %#x, color_space %#x, device %p, flags %p stub!\n",
575 iface, format, color_space, device, flags);
576
577 return E_NOTIMPL;
578}
579
580/* IDXGIOutput5 methods */
581
583 IUnknown *device, UINT flags, UINT format_count, const DXGI_FORMAT *formats,
584 IDXGIOutputDuplication **output_duplication)
585{
586 FIXME("iface %p, device %p, flags %#x, format_count %u, formats %p, "
587 "output_duplication %p stub!\n", iface, device, flags, format_count,
588 formats, output_duplication);
589
590 return E_NOTIMPL;
591}
592
593/* IDXGIOutput6 methods */
594
597{
598 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
599 struct wined3d_output_desc wined3d_desc;
600 enum wined3d_display_rotation rotation;
602 HRESULT hr;
603
604 FIXME("iface %p, desc %p semi-stub!\n", iface, desc);
605
606 if (!desc)
607 return E_INVALIDARG;
608
610 hr = wined3d_output_get_desc(output->wined3d_output, &wined3d_desc);
611 if (FAILED(hr))
612 {
613 WARN("Failed to get output desc, hr %#lx.\n", hr);
615 return hr;
616 }
617
619 if (FAILED(hr))
620 {
621 WARN("Failed to get output display mode, hr %#lx.\n", hr);
623 return hr;
624 }
626
627 if (FAILED(hr))
628 {
629 WARN("Failed to get output desc, hr %#lx.\n", hr);
630 return hr;
631 }
632
633 memcpy(desc->DeviceName, wined3d_desc.device_name, sizeof(desc->DeviceName));
634 desc->DesktopCoordinates = wined3d_desc.desktop_rect;
635 desc->AttachedToDesktop = wined3d_desc.attached_to_desktop;
636 desc->Rotation = dxgi_mode_rotation_from_wined3d(rotation);
637 desc->Monitor = wined3d_desc.monitor;
638
639 /* FIXME: fill this from monitor EDID */
640 desc->BitsPerColor = 0;
642 desc->RedPrimary[0] = 0.f;
643 desc->RedPrimary[1] = 0.f;
644 desc->GreenPrimary[0] = 0.f;
645 desc->GreenPrimary[1] = 0.f;
646 desc->BluePrimary[0] = 0.f;
647 desc->BluePrimary[1] = 0.f;
648 desc->WhitePoint[0] = 0.f;
649 desc->WhitePoint[1] = 0.f;
650 desc->MinLuminance = 0.f;
651 desc->MaxLuminance = 0.f;
652 desc->MaxFullFrameLuminance = 0.f;
653
654 return S_OK;
655}
656
658 UINT *flags)
659{
660 FIXME("iface %p, flags %p stub!\n", iface, flags);
661
662 return E_NOTIMPL;
663}
664
665static const struct IDXGIOutput6Vtbl dxgi_output_vtbl =
666{
670 /* IDXGIObject methods */
675 /* IDXGIOutput methods */
688 /* IDXGIOutput1 methods */
693 /* IDXGIOutput2 methods */
695 /* IDXGIOutput3 methods */
697 /* IDXGIOutput4 methods */
699 /* IDXGIOutput5 methods */
701 /* IDXGIOutput6 methods */
704};
705
707{
708 if (!iface)
709 return NULL;
710 assert(iface->lpVtbl == (IDXGIOutputVtbl *)&dxgi_output_vtbl);
711 return CONTAINING_RECORD(iface, struct dxgi_output, IDXGIOutput6_iface);
712}
713
714static void dxgi_output_init(struct dxgi_output *output, unsigned int output_idx,
715 struct dxgi_adapter *adapter)
716{
717 output->IDXGIOutput6_iface.lpVtbl = &dxgi_output_vtbl;
718 output->refcount = 1;
719 output->wined3d_output = wined3d_adapter_get_output(adapter->wined3d_adapter, output_idx);
721 output->adapter = adapter;
722 IWineDXGIAdapter_AddRef(&output->adapter->IWineDXGIAdapter_iface);
723}
724
725HRESULT dxgi_output_create(struct dxgi_adapter *adapter, unsigned int output_idx,
726 struct dxgi_output **output)
727{
728 if (!(*output = calloc(1, sizeof(**output))))
729 return E_OUTOFMEMORY;
730
731 dxgi_output_init(*output, output_idx, adapter);
732 return S_OK;
733}
#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 STDMETHODCALLTYPE
Definition: bdasup.h:9
r l[0]
Definition: byte_order.h:168
const char * debug_dxgi_format(DXGI_FORMAT format)
Definition: utils.c:46
enum wined3d_format_id wined3dformat_from_dxgi_format(DXGI_FORMAT format)
Definition: utils.c:323
DXGI_FORMAT dxgi_format_from_wined3dformat(enum wined3d_format_id format)
Definition: utils.c:210
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
static const struct pixel_format_desc formats[]
Definition: util.c:31
static HRESULT STDMETHODCALLTYPE dxgi_output_GetPrivateData(IDXGIOutput6 *iface, REFGUID guid, UINT *data_size, void *data)
Definition: output.c:267
static BOOL STDMETHODCALLTYPE dxgi_output_SupportsOverlays(IDXGIOutput6 *iface)
Definition: output.c:552
static HRESULT STDMETHODCALLTYPE dxgi_output_WaitForVBlank(IDXGIOutput6 *iface)
Definition: output.c:364
static HRESULT STDMETHODCALLTYPE dxgi_output_QueryInterface(IDXGIOutput6 *iface, REFIID iid, void **object)
Definition: output.c:193
static WORD uint16_from_float(float f)
Definition: output.c:425
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList(IDXGIOutput6 *iface, DXGI_FORMAT format, UINT flags, UINT *mode_count, DXGI_MODE_DESC *modes)
Definition: output.c:329
static HRESULT STDMETHODCALLTYPE dxgi_output_SetDisplaySurface(IDXGIOutput6 *iface, IDXGISurface *surface)
Definition: output.c:476
static HRESULT STDMETHODCALLTYPE dxgi_output_FindClosestMatchingMode1(IDXGIOutput6 *iface, const DXGI_MODE_DESC1 *mode, DXGI_MODE_DESC1 *closest_match, IUnknown *device)
Definition: output.c:511
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplaySurfaceData1(IDXGIOutput6 *iface, IDXGIResource *resource)
Definition: output.c:534
static HRESULT STDMETHODCALLTYPE dxgi_output_SetPrivateData(IDXGIOutput6 *iface, REFGUID guid, UINT data_size, const void *data)
Definition: output.c:247
static HRESULT STDMETHODCALLTYPE dxgi_output_GetGammaControlCapabilities(IDXGIOutput6 *iface, DXGI_GAMMA_CONTROL_CAPABILITIES *gamma_caps)
Definition: output.c:404
static DXGI_MODE_SCANLINE_ORDER dxgi_mode_scanline_order_from_wined3d(enum wined3d_scanline_ordering ordering)
Definition: output.c:23
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDesc1(IDXGIOutput6 *iface, DXGI_OUTPUT_DESC1 *desc)
Definition: output.c:595
static HRESULT STDMETHODCALLTYPE dxgi_output_CheckOverlayColorSpaceSupport(IDXGIOutput6 *iface, DXGI_FORMAT format, DXGI_COLOR_SPACE_TYPE color_space, IUnknown *device, UINT *flags)
Definition: output.c:571
static HRESULT STDMETHODCALLTYPE dxgi_output_SetPrivateDataInterface(IDXGIOutput6 *iface, REFGUID guid, const IUnknown *object)
Definition: output.c:257
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDesc(IDXGIOutput6 *iface, DXGI_OUTPUT_DESC *desc)
Definition: output.c:289
static DXGI_MODE_ROTATION dxgi_mode_rotation_from_wined3d(enum wined3d_display_rotation rotation)
Definition: output.c:28
static void dxgi_output_init(struct dxgi_output *output, unsigned int output_idx, struct dxgi_adapter *adapter)
Definition: output.c:714
static const struct IDXGIOutput6Vtbl dxgi_output_vtbl
Definition: output.c:665
static HRESULT STDMETHODCALLTYPE dxgi_output_FindClosestMatchingMode(IDXGIOutput6 *iface, const DXGI_MODE_DESC *mode, DXGI_MODE_DESC *closest_match, IUnknown *device)
Definition: output.c:341
static HRESULT STDMETHODCALLTYPE dxgi_output_GetFrameStatistics(IDXGIOutput6 *iface, DXGI_FRAME_STATISTICS *stats)
Definition: output.c:490
HRESULT dxgi_output_create(struct dxgi_adapter *adapter, unsigned int output_idx, struct dxgi_output **output)
Definition: output.c:725
static HRESULT STDMETHODCALLTYPE dxgi_output_GetParent(IDXGIOutput6 *iface, REFIID riid, void **parent)
Definition: output.c:277
static HRESULT STDMETHODCALLTYPE dxgi_output_DuplicateOutput1(IDXGIOutput6 *iface, IUnknown *device, UINT flags, UINT format_count, const DXGI_FORMAT *formats, IDXGIOutputDuplication **output_duplication)
Definition: output.c:582
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList1(IDXGIOutput6 *iface, DXGI_FORMAT format, UINT flags, UINT *mode_count, DXGI_MODE_DESC1 *modes)
Definition: output.c:499
static HRESULT STDMETHODCALLTYPE dxgi_output_SetGammaControl(IDXGIOutput6 *iface, const DXGI_GAMMA_CONTROL *gamma_control)
Definition: output.c:436
static HRESULT STDMETHODCALLTYPE dxgi_output_TakeOwnership(IDXGIOutput6 *iface, IUnknown *device, BOOL exclusive)
Definition: output.c:376
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplaySurfaceData(IDXGIOutput6 *iface, IDXGISurface *surface)
Definition: output.c:483
static HRESULT STDMETHODCALLTYPE dxgi_output_CheckOverlaySupport(IDXGIOutput6 *iface, DXGI_FORMAT format, IUnknown *device, UINT *flags)
Definition: output.c:561
static HRESULT dxgi_output_find_closest_matching_mode(struct dxgi_output *output, struct wined3d_display_mode *mode, IUnknown *device)
Definition: output.c:56
static HRESULT dxgi_output_get_display_mode_list(struct dxgi_output *output, DXGI_FORMAT format, unsigned int *mode_count, void *modes, enum dxgi_mode_struct_version struct_version)
Definition: output.c:105
struct dxgi_output * unsafe_impl_from_IDXGIOutput(IDXGIOutput *iface)
Definition: output.c:706
static HRESULT STDMETHODCALLTYPE dxgi_output_DuplicateOutput(IDXGIOutput6 *iface, IUnknown *device, IDXGIOutputDuplication **output_duplication)
Definition: output.c:542
static ULONG STDMETHODCALLTYPE dxgi_output_AddRef(IDXGIOutput6 *iface)
Definition: output.c:218
static struct dxgi_output * impl_from_IDXGIOutput6(IDXGIOutput6 *iface)
Definition: output.c:186
static void dxgi_mode1_from_wined3d(DXGI_MODE_DESC1 *mode, const struct wined3d_display_mode *wined3d_mode)
Definition: output.c:44
static HRESULT STDMETHODCALLTYPE dxgi_output_GetGammaControl(IDXGIOutput6 *iface, DXGI_GAMMA_CONTROL *gamma_control)
Definition: output.c:468
static int dxgi_mode_desc_compare(const void *l, const void *r)
Definition: output.c:80
static ULONG STDMETHODCALLTYPE dxgi_output_Release(IDXGIOutput6 *iface)
Definition: output.c:228
static void STDMETHODCALLTYPE dxgi_output_ReleaseOwnership(IDXGIOutput6 *iface)
Definition: output.c:393
static void dxgi_mode_from_wined3d(DXGI_MODE_DESC *mode, const struct wined3d_display_mode *wined3d_mode)
Definition: output.c:33
dxgi_mode_struct_version
Definition: output.c:100
@ DXGI_MODE_STRUCT_VERSION_0
Definition: output.c:101
@ DXGI_MODE_STRUCT_VERSION_1
Definition: output.c:102
static HRESULT STDMETHODCALLTYPE dxgi_output_CheckHardwareCompositionSupport(IDXGIOutput6 *iface, UINT *flags)
Definition: output.c:657
GUID guid
Definition: version.c:147
#define assert(_expr)
Definition: assert.h:32
_ACRTIMP void __cdecl qsort(void *, size_t, size_t, int(__cdecl *)(const void *, const void *))
r parent
Definition: btrfs.c:3010
HRESULT dxgi_get_private_data(struct wined3d_private_store *store, REFGUID guid, UINT *data_size, void *data)
Definition: utils.c:624
HRESULT dxgi_set_private_data(struct wined3d_private_store *store, REFGUID guid, UINT data_size, const void *data)
Definition: utils.c:666
void wined3d_display_mode_from_dxgi(struct wined3d_display_mode *wined3d_mode, const DXGI_MODE_DESC *mode)
Definition: utils.c:469
HRESULT dxgi_set_private_data_interface(struct wined3d_private_store *store, REFGUID guid, const IUnknown *object)
Definition: utils.c:694
void wined3d_display_mode_from_dxgi1(struct wined3d_display_mode *wined3d_mode, const DXGI_MODE_DESC1 *mode)
Definition: utils.c:479
const char * debug_dxgi_mode(const DXGI_MODE_DESC *desc)
Definition: utils.c:388
const char * debug_dxgi_mode1(const DXGI_MODE_DESC1 *desc)
Definition: utils.c:399
DXGI_COLOR_SPACE_TYPE
Definition: dxgicommon.idl:27
@ DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709
Definition: dxgicommon.idl:28
DXGI_FORMAT
Definition: dxgiformat.idl:22
@ DXGI_FORMAT_UNKNOWN
Definition: dxgiformat.idl:23
@ DXGI_MODE_SCALING_UNSPECIFIED
Definition: dxgitype.idl:46
DXGI_MODE_SCANLINE_ORDER
Definition: dxgitype.idl:37
DXGI_MODE_ROTATION
Definition: dxgitype.idl:28
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
Character const *const size_t const max_count
Definition: fullpath.cpp:66
return adapter
static enum @1153 ordering
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLdouble GLdouble right
Definition: glext.h:10859
GLfloat f
Definition: glext.h:7540
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLenum mode
Definition: glext.h:6217
GLint left
Definition: glext.h:7726
GLbitfield flags
Definition: glext.h:7161
GLfloat GLfloat p
Definition: glext.h:8902
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
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 a
Definition: ke_i.h:78
#define b
Definition: ke_i.h:79
#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 BYTE ramp[17]
Definition: dib.c:2957
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
DXGI_RGB GammaCurve[1025]
Definition: dxgitype.idl:93
float Red
Definition: dxgitype.idl:84
float Blue
Definition: dxgitype.idl:86
float Green
Definition: dxgitype.idl:85
Definition: scsiwmi.h:51
Definition: devices.h:37
IDXGIOutput6 IDXGIOutput6_iface
Definition: dxgi_private.h:146
struct wined3d_private_store private_store
Definition: dxgi_private.h:149
struct dxgi_adapter * adapter
Definition: dxgi_private.h:150
struct wined3d_output * wined3d_output
Definition: dxgi_private.h:148
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
HMONITOR monitor
Definition: wined3d.h:2155
BOOL attached_to_desktop
Definition: wined3d.h:2154
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
HRESULT CDECL wined3d_output_get_desc(const struct wined3d_output *output, struct wined3d_output_desc *desc)
Definition: directx.c:1256
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_output_set_gamma_ramp(struct wined3d_output *output, const struct wined3d_gamma_ramp *ramp)
Definition: directx.c:1759
void CDECL wined3d_output_release_ownership(const struct wined3d_output *output)
Definition: directx.c:77
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_output *CDECL wined3d_adapter_get_output(const struct wined3d_adapter *adapter, unsigned int idx)
Definition: directx.c:1027
HRESULT CDECL wined3d_output_take_ownership(const struct wined3d_output *output, BOOL exclusive)
Definition: directx.c:87
HRESULT CDECL wined3d_output_find_closest_matching_mode(struct wined3d_output *output, struct wined3d_display_mode *mode)
Definition: directx.c:1409
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
static void wined3d_private_store_cleanup(struct wined3d_private_store *store)
Definition: wined3d.h:2636
wined3d_format_id
Definition: wined3d.h:126
@ WINED3DFMT_UNKNOWN
Definition: wined3d.h:127
static void wined3d_private_store_init(struct wined3d_private_store *store)
Definition: wined3d.h:2607
wined3d_scanline_ordering
Definition: wined3d.h:824
@ WINED3D_SCANLINE_ORDERING_UNKNOWN
Definition: wined3d.h:825
wined3d_display_rotation
Definition: wined3d.h:831
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:544
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:539
#define E_NOINTERFACE
Definition: winerror.h:3479
#define DXGI_ERROR_MORE_DATA
Definition: winerror.h:7123
#define DXGI_ERROR_INVALID_CALL
Definition: winerror.h:7120