ReactOS 0.4.17-dev-934-g091855f
output.c File Reference
#include "dxgi_private.h"
Include dependency graph for output.c:

Go to the source code of this file.

Enumerations

enum  dxgi_mode_struct_version { DXGI_MODE_STRUCT_VERSION_0 , DXGI_MODE_STRUCT_VERSION_1 }
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (dxgi)
 
static DXGI_MODE_SCANLINE_ORDER dxgi_mode_scanline_order_from_wined3d (enum wined3d_scanline_ordering ordering)
 
static DXGI_MODE_ROTATION dxgi_mode_rotation_from_wined3d (enum wined3d_display_rotation rotation)
 
static void dxgi_mode_from_wined3d (DXGI_MODE_DESC *mode, const struct wined3d_display_mode *wined3d_mode)
 
static void dxgi_mode1_from_wined3d (DXGI_MODE_DESC1 *mode, const struct wined3d_display_mode *wined3d_mode)
 
static HRESULT dxgi_output_find_closest_matching_mode (struct dxgi_output *output, struct wined3d_display_mode *mode, IUnknown *device)
 
static int dxgi_mode_desc_compare (const void *l, const void *r)
 
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)
 
static struct dxgi_output * impl_from_IDXGIOutput6 (IDXGIOutput6 *iface)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_QueryInterface (IDXGIOutput6 *iface, REFIID iid, void **object)
 
static ULONG STDMETHODCALLTYPE dxgi_output_AddRef (IDXGIOutput6 *iface)
 
static ULONG STDMETHODCALLTYPE dxgi_output_Release (IDXGIOutput6 *iface)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_SetPrivateData (IDXGIOutput6 *iface, REFGUID guid, UINT data_size, const void *data)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_SetPrivateDataInterface (IDXGIOutput6 *iface, REFGUID guid, const IUnknown *object)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_GetPrivateData (IDXGIOutput6 *iface, REFGUID guid, UINT *data_size, void *data)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_GetParent (IDXGIOutput6 *iface, REFIID riid, void **parent)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDesc (IDXGIOutput6 *iface, DXGI_OUTPUT_DESC *desc)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList (IDXGIOutput6 *iface, DXGI_FORMAT format, UINT flags, UINT *mode_count, DXGI_MODE_DESC *modes)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_FindClosestMatchingMode (IDXGIOutput6 *iface, const DXGI_MODE_DESC *mode, DXGI_MODE_DESC *closest_match, IUnknown *device)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_WaitForVBlank (IDXGIOutput6 *iface)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_TakeOwnership (IDXGIOutput6 *iface, IUnknown *device, BOOL exclusive)
 
static void STDMETHODCALLTYPE dxgi_output_ReleaseOwnership (IDXGIOutput6 *iface)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_GetGammaControlCapabilities (IDXGIOutput6 *iface, DXGI_GAMMA_CONTROL_CAPABILITIES *gamma_caps)
 
static WORD uint16_from_float (float f)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_SetGammaControl (IDXGIOutput6 *iface, const DXGI_GAMMA_CONTROL *gamma_control)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_GetGammaControl (IDXGIOutput6 *iface, DXGI_GAMMA_CONTROL *gamma_control)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_SetDisplaySurface (IDXGIOutput6 *iface, IDXGISurface *surface)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplaySurfaceData (IDXGIOutput6 *iface, IDXGISurface *surface)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_GetFrameStatistics (IDXGIOutput6 *iface, DXGI_FRAME_STATISTICS *stats)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList1 (IDXGIOutput6 *iface, DXGI_FORMAT format, UINT flags, UINT *mode_count, DXGI_MODE_DESC1 *modes)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_FindClosestMatchingMode1 (IDXGIOutput6 *iface, const DXGI_MODE_DESC1 *mode, DXGI_MODE_DESC1 *closest_match, IUnknown *device)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplaySurfaceData1 (IDXGIOutput6 *iface, IDXGIResource *resource)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_DuplicateOutput (IDXGIOutput6 *iface, IUnknown *device, IDXGIOutputDuplication **output_duplication)
 
static BOOL STDMETHODCALLTYPE dxgi_output_SupportsOverlays (IDXGIOutput6 *iface)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_CheckOverlaySupport (IDXGIOutput6 *iface, DXGI_FORMAT format, IUnknown *device, UINT *flags)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_CheckOverlayColorSpaceSupport (IDXGIOutput6 *iface, DXGI_FORMAT format, DXGI_COLOR_SPACE_TYPE color_space, IUnknown *device, UINT *flags)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_DuplicateOutput1 (IDXGIOutput6 *iface, IUnknown *device, UINT flags, UINT format_count, const DXGI_FORMAT *formats, IDXGIOutputDuplication **output_duplication)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDesc1 (IDXGIOutput6 *iface, DXGI_OUTPUT_DESC1 *desc)
 
static HRESULT STDMETHODCALLTYPE dxgi_output_CheckHardwareCompositionSupport (IDXGIOutput6 *iface, UINT *flags)
 
struct dxgi_output * unsafe_impl_from_IDXGIOutput (IDXGIOutput *iface)
 
static void dxgi_output_init (struct dxgi_output *output, unsigned int output_idx, struct dxgi_adapter *adapter)
 
HRESULT dxgi_output_create (struct dxgi_adapter *adapter, unsigned int output_idx, struct dxgi_output **output)
 

Variables

static const struct IDXGIOutput6Vtbl dxgi_output_vtbl
 

Enumeration Type Documentation

◆ dxgi_mode_struct_version

Enumerator
DXGI_MODE_STRUCT_VERSION_0 
DXGI_MODE_STRUCT_VERSION_1 

Definition at line 99 of file output.c.

100{
103};
@ DXGI_MODE_STRUCT_VERSION_0
Definition: output.c:101
@ DXGI_MODE_STRUCT_VERSION_1
Definition: output.c:102

Function Documentation

◆ dxgi_mode1_from_wined3d()

static void dxgi_mode1_from_wined3d ( DXGI_MODE_DESC1 *  mode,
const struct wined3d_display_mode *  wined3d_mode 
)
static

Definition at line 44 of file output.c.

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}
DXGI_FORMAT dxgi_format_from_wined3dformat(enum wined3d_format_id format)
Definition: utils.c:210
#define FALSE
Definition: types.h:117
static DXGI_MODE_SCANLINE_ORDER dxgi_mode_scanline_order_from_wined3d(enum wined3d_scanline_ordering ordering)
Definition: output.c:23
@ DXGI_MODE_SCALING_UNSPECIFIED
Definition: dxgitype.idl:46
GLenum mode
Definition: glext.h:6217
enum wined3d_format_id format_id
Definition: wined3d.h:1614
enum wined3d_scanline_ordering scanline_ordering
Definition: wined3d.h:1615

Referenced by dxgi_output_FindClosestMatchingMode1(), and dxgi_output_get_display_mode_list().

◆ dxgi_mode_desc_compare()

static int dxgi_mode_desc_compare ( const void *  l,
const void *  r 
)
static

Definition at line 80 of file output.c.

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}
r l[0]
Definition: byte_order.h:168
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLdouble GLdouble right
Definition: glext.h:10859
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLint left
Definition: glext.h:7726
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
#define a
Definition: ke_i.h:78
#define b
Definition: ke_i.h:79

Referenced by dxgi_output_get_display_mode_list().

◆ dxgi_mode_from_wined3d()

static void dxgi_mode_from_wined3d ( DXGI_MODE_DESC *  mode,
const struct wined3d_display_mode *  wined3d_mode 
)
static

Definition at line 33 of file output.c.

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}

Referenced by dxgi_output_FindClosestMatchingMode(), and dxgi_output_get_display_mode_list().

◆ dxgi_mode_rotation_from_wined3d()

static DXGI_MODE_ROTATION dxgi_mode_rotation_from_wined3d ( enum wined3d_display_rotation  rotation)
inlinestatic

Definition at line 28 of file output.c.

29{
30 return (DXGI_MODE_ROTATION)rotation;
31}
DXGI_MODE_ROTATION
Definition: dxgitype.idl:28

Referenced by dxgi_output_GetDesc(), and dxgi_output_GetDesc1().

◆ dxgi_mode_scanline_order_from_wined3d()

static DXGI_MODE_SCANLINE_ORDER dxgi_mode_scanline_order_from_wined3d ( enum wined3d_scanline_ordering  ordering)
inlinestatic

Definition at line 23 of file output.c.

24{
26}
DXGI_MODE_SCANLINE_ORDER
Definition: dxgitype.idl:37
static enum @1153 ordering

Referenced by dxgi_mode1_from_wined3d(), and dxgi_mode_from_wined3d().

◆ dxgi_output_AddRef()

static ULONG STDMETHODCALLTYPE dxgi_output_AddRef ( IDXGIOutput6 *  iface)
static

Definition at line 218 of file output.c.

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}
#define InterlockedIncrement
Definition: armddk.h:53
static struct dxgi_output * impl_from_IDXGIOutput6(IDXGIOutput6 *iface)
Definition: output.c:186
#define TRACE(s)
Definition: solgame.cpp:4
uint32_t ULONG
Definition: typedefs.h:59

◆ dxgi_output_CheckHardwareCompositionSupport()

static HRESULT STDMETHODCALLTYPE dxgi_output_CheckHardwareCompositionSupport ( IDXGIOutput6 *  iface,
UINT *  flags 
)
static

Definition at line 657 of file output.c.

659{
660 FIXME("iface %p, flags %p stub!\n", iface, flags);
661
662 return E_NOTIMPL;
663}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_NOTIMPL
Definition: ddrawi.h:99
GLbitfield flags
Definition: glext.h:7161

◆ dxgi_output_CheckOverlayColorSpaceSupport()

static HRESULT STDMETHODCALLTYPE dxgi_output_CheckOverlayColorSpaceSupport ( IDXGIOutput6 *  iface,
DXGI_FORMAT  format,
DXGI_COLOR_SPACE_TYPE  color_space,
IUnknown *  device,
UINT *  flags 
)
static

Definition at line 571 of file output.c.

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}
Definition: devices.h:37

◆ dxgi_output_CheckOverlaySupport()

static HRESULT STDMETHODCALLTYPE dxgi_output_CheckOverlaySupport ( IDXGIOutput6 *  iface,
DXGI_FORMAT  format,
IUnknown *  device,
UINT *  flags 
)
static

Definition at line 561 of file output.c.

563{
564 FIXME("iface %p, format %#x, device %p, flags %p stub!\n", iface, format, device, flags);
565
566 return E_NOTIMPL;
567}

◆ dxgi_output_create()

HRESULT dxgi_output_create ( struct dxgi_adapter *  adapter,
unsigned int  output_idx,
struct dxgi_output **  output 
)

Definition at line 725 of file output.c.

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 E_OUTOFMEMORY
Definition: ddrawi.h:100
static void dxgi_output_init(struct dxgi_output *output, unsigned int output_idx, struct dxgi_adapter *adapter)
Definition: output.c:714
return adapter
#define S_OK
Definition: intsafe.h:52
#define calloc
Definition: rosglue.h:14

Referenced by dxgi_adapter_EnumOutputs().

◆ dxgi_output_DuplicateOutput()

static HRESULT STDMETHODCALLTYPE dxgi_output_DuplicateOutput ( IDXGIOutput6 *  iface,
IUnknown *  device,
IDXGIOutputDuplication **  output_duplication 
)
static

Definition at line 542 of file output.c.

544{
545 FIXME("iface %p, device %p, output_duplication %p stub!\n", iface, device, output_duplication);
546
547 return E_NOTIMPL;
548}

◆ dxgi_output_DuplicateOutput1()

static HRESULT STDMETHODCALLTYPE dxgi_output_DuplicateOutput1 ( IDXGIOutput6 *  iface,
IUnknown *  device,
UINT  flags,
UINT  format_count,
const DXGI_FORMAT *  formats,
IDXGIOutputDuplication **  output_duplication 
)
static

Definition at line 582 of file output.c.

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}
static const struct pixel_format_desc formats[]
Definition: util.c:31

◆ dxgi_output_find_closest_matching_mode()

static HRESULT dxgi_output_find_closest_matching_mode ( struct dxgi_output *  output,
struct wined3d_display_mode *  mode,
IUnknown *  device 
)
static

Definition at line 56 of file output.c.

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}
HRESULT hr
Definition: delayimp.cpp:582
struct wined3d_output * wined3d_output
Definition: dxgi_private.h:148
HRESULT CDECL wined3d_output_find_closest_matching_mode(struct wined3d_output *output, struct wined3d_display_mode *mode)
Definition: directx.c:1409
@ WINED3DFMT_UNKNOWN
Definition: wined3d.h:127
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:544
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:539
#define DXGI_ERROR_INVALID_CALL
Definition: winerror.h:7120

Referenced by dxgi_output_FindClosestMatchingMode(), and dxgi_output_FindClosestMatchingMode1().

◆ dxgi_output_FindClosestMatchingMode()

static HRESULT STDMETHODCALLTYPE dxgi_output_FindClosestMatchingMode ( IDXGIOutput6 *  iface,
const DXGI_MODE_DESC *  mode,
DXGI_MODE_DESC *  closest_match,
IUnknown *  device 
)
static

Definition at line 341 of file output.c.

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}
static HRESULT dxgi_output_find_closest_matching_mode(struct dxgi_output *output, struct wined3d_display_mode *mode, IUnknown *device)
Definition: output.c:56
static void dxgi_mode_from_wined3d(DXGI_MODE_DESC *mode, const struct wined3d_display_mode *wined3d_mode)
Definition: output.c:33
void wined3d_display_mode_from_dxgi(struct wined3d_display_mode *wined3d_mode, const DXGI_MODE_DESC *mode)
Definition: utils.c:469
const char * debug_dxgi_mode(const DXGI_MODE_DESC *desc)
Definition: utils.c:388
#define SUCCEEDED(hr)
Definition: intsafe.h:50

◆ dxgi_output_FindClosestMatchingMode1()

static HRESULT STDMETHODCALLTYPE dxgi_output_FindClosestMatchingMode1 ( IDXGIOutput6 *  iface,
const DXGI_MODE_DESC1 *  mode,
DXGI_MODE_DESC1 *  closest_match,
IUnknown *  device 
)
static

Definition at line 511 of file output.c.

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}
static void dxgi_mode1_from_wined3d(DXGI_MODE_DESC1 *mode, const struct wined3d_display_mode *wined3d_mode)
Definition: output.c:44
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_mode1(const DXGI_MODE_DESC1 *desc)
Definition: utils.c:399

◆ dxgi_output_get_display_mode_list()

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 
)
static

Definition at line 105 of file output.c.

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}
#define WARN(fmt,...)
Definition: precomp.h:61
enum wined3d_format_id wined3dformat_from_dxgi_format(DXGI_FORMAT format)
Definition: utils.c:323
static int dxgi_mode_desc_compare(const void *l, const void *r)
Definition: output.c:80
_ACRTIMP void __cdecl qsort(void *, size_t, size_t, int(__cdecl *)(const void *, const void *))
@ DXGI_FORMAT_UNKNOWN
Definition: dxgiformat.idl:23
Character const *const size_t const max_count
Definition: fullpath.cpp:66
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
#define FAILED(hr)
Definition: intsafe.h:51
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
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_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
wined3d_format_id
Definition: wined3d.h:126
@ WINED3D_SCANLINE_ORDERING_UNKNOWN
Definition: wined3d.h:825
#define DXGI_ERROR_MORE_DATA
Definition: winerror.h:7123

Referenced by dxgi_output_GetDisplayModeList(), and dxgi_output_GetDisplayModeList1().

◆ dxgi_output_GetDesc()

static HRESULT STDMETHODCALLTYPE dxgi_output_GetDesc ( IDXGIOutput6 *  iface,
DXGI_OUTPUT_DESC *  desc 
)
static

Definition at line 289 of file output.c.

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}
#define E_INVALIDARG
Definition: ddrawi.h:101
static DXGI_MODE_ROTATION dxgi_mode_rotation_from_wined3d(enum wined3d_display_rotation rotation)
Definition: output.c:28
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
HRESULT CDECL wined3d_output_get_desc(const struct wined3d_output *output, struct wined3d_output_desc *desc)
Definition: directx.c:1256
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
wined3d_display_rotation
Definition: wined3d.h:831

◆ dxgi_output_GetDesc1()

static HRESULT STDMETHODCALLTYPE dxgi_output_GetDesc1 ( IDXGIOutput6 *  iface,
DXGI_OUTPUT_DESC1 *  desc 
)
static

Definition at line 595 of file output.c.

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}
@ DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709
Definition: dxgicommon.idl:28

◆ dxgi_output_GetDisplayModeList()

static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList ( IDXGIOutput6 *  iface,
DXGI_FORMAT  format,
UINT  flags,
UINT *  mode_count,
DXGI_MODE_DESC *  modes 
)
static

Definition at line 329 of file output.c.

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}
const char * debug_dxgi_format(DXGI_FORMAT format)
Definition: utils.c:46
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

◆ dxgi_output_GetDisplayModeList1()

static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList1 ( IDXGIOutput6 *  iface,
DXGI_FORMAT  format,
UINT  flags,
UINT *  mode_count,
DXGI_MODE_DESC1 *  modes 
)
static

Definition at line 499 of file output.c.

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}

◆ dxgi_output_GetDisplaySurfaceData()

static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplaySurfaceData ( IDXGIOutput6 *  iface,
IDXGISurface *  surface 
)
static

Definition at line 483 of file output.c.

484{
485 FIXME("iface %p, surface %p stub!\n", iface, surface);
486
487 return E_NOTIMPL;
488}

◆ dxgi_output_GetDisplaySurfaceData1()

static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplaySurfaceData1 ( IDXGIOutput6 *  iface,
IDXGIResource *  resource 
)
static

Definition at line 534 of file output.c.

536{
537 FIXME("iface %p, resource %p stub!\n", iface, resource);
538
539 return E_NOTIMPL;
540}

◆ dxgi_output_GetFrameStatistics()

static HRESULT STDMETHODCALLTYPE dxgi_output_GetFrameStatistics ( IDXGIOutput6 *  iface,
DXGI_FRAME_STATISTICS *  stats 
)
static

Definition at line 490 of file output.c.

491{
492 FIXME("iface %p, stats %p stub!\n", iface, stats);
493
494 return E_NOTIMPL;
495}

◆ dxgi_output_GetGammaControl()

static HRESULT STDMETHODCALLTYPE dxgi_output_GetGammaControl ( IDXGIOutput6 *  iface,
DXGI_GAMMA_CONTROL *  gamma_control 
)
static

Definition at line 468 of file output.c.

470{
471 FIXME("iface %p, gamma_control %p stub!\n", iface, gamma_control);
472
473 return E_NOTIMPL;
474}

◆ dxgi_output_GetGammaControlCapabilities()

static HRESULT STDMETHODCALLTYPE dxgi_output_GetGammaControlCapabilities ( IDXGIOutput6 *  iface,
DXGI_GAMMA_CONTROL_CAPABILITIES *  gamma_caps 
)
static

Definition at line 404 of file output.c.

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}

◆ dxgi_output_GetParent()

static HRESULT STDMETHODCALLTYPE dxgi_output_GetParent ( IDXGIOutput6 *  iface,
REFIID  riid,
void **  parent 
)
static

Definition at line 277 of file output.c.

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}
r parent
Definition: btrfs.c:3010
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
struct dxgi_adapter * adapter
Definition: dxgi_private.h:150

◆ dxgi_output_GetPrivateData()

static HRESULT STDMETHODCALLTYPE dxgi_output_GetPrivateData ( IDXGIOutput6 *  iface,
REFGUID  guid,
UINT *  data_size,
void *  data 
)
static

Definition at line 267 of file output.c.

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}
GUID guid
Definition: version.c:147
HRESULT dxgi_get_private_data(struct wined3d_private_store *store, REFGUID guid, UINT *data_size, void *data)
Definition: utils.c:624
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
struct wined3d_private_store private_store
Definition: dxgi_private.h:149

◆ dxgi_output_init()

static void dxgi_output_init ( struct dxgi_output *  output,
unsigned int  output_idx,
struct dxgi_adapter *  adapter 
)
static

Definition at line 714 of file output.c.

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}
static const struct IDXGIOutput6Vtbl dxgi_output_vtbl
Definition: output.c:665
IDXGIOutput6 IDXGIOutput6_iface
Definition: dxgi_private.h:146
struct wined3d_output *CDECL wined3d_adapter_get_output(const struct wined3d_adapter *adapter, unsigned int idx)
Definition: directx.c:1027
static void wined3d_private_store_init(struct wined3d_private_store *store)
Definition: wined3d.h:2607

Referenced by dxgi_output_create().

◆ dxgi_output_QueryInterface()

static HRESULT STDMETHODCALLTYPE dxgi_output_QueryInterface ( IDXGIOutput6 *  iface,
REFIID  iid,
void **  object 
)
static

Definition at line 193 of file output.c.

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}
const GUID IID_IUnknown
#define NULL
Definition: types.h:112
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ dxgi_output_Release()

static ULONG STDMETHODCALLTYPE dxgi_output_Release ( IDXGIOutput6 *  iface)
static

Definition at line 228 of file output.c.

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}
#define InterlockedDecrement
Definition: armddk.h:52
#define free
Definition: debug_ros.c:5
static void wined3d_private_store_cleanup(struct wined3d_private_store *store)
Definition: wined3d.h:2636

◆ dxgi_output_ReleaseOwnership()

static void STDMETHODCALLTYPE dxgi_output_ReleaseOwnership ( IDXGIOutput6 *  iface)
static

Definition at line 393 of file output.c.

394{
395 struct dxgi_output *output = impl_from_IDXGIOutput6(iface);
396
397 TRACE("iface %p.\n", iface);
398
402}
void CDECL wined3d_output_release_ownership(const struct wined3d_output *output)
Definition: directx.c:77

◆ dxgi_output_SetDisplaySurface()

static HRESULT STDMETHODCALLTYPE dxgi_output_SetDisplaySurface ( IDXGIOutput6 *  iface,
IDXGISurface *  surface 
)
static

Definition at line 476 of file output.c.

477{
478 FIXME("iface %p, surface %p stub!\n", iface, surface);
479
480 return E_NOTIMPL;
481}

◆ dxgi_output_SetGammaControl()

static HRESULT STDMETHODCALLTYPE dxgi_output_SetGammaControl ( IDXGIOutput6 *  iface,
const DXGI_GAMMA_CONTROL *  gamma_control 
)
static

Definition at line 436 of file output.c.

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}
static WORD uint16_from_float(float f)
Definition: output.c:425
GLfloat GLfloat p
Definition: glext.h:8902
static const BYTE ramp[17]
Definition: dib.c:2957
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
HRESULT CDECL wined3d_output_set_gamma_ramp(struct wined3d_output *output, const struct wined3d_gamma_ramp *ramp)
Definition: directx.c:1759

◆ dxgi_output_SetPrivateData()

static HRESULT STDMETHODCALLTYPE dxgi_output_SetPrivateData ( IDXGIOutput6 *  iface,
REFGUID  guid,
UINT  data_size,
const void *  data 
)
static

Definition at line 247 of file output.c.

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}
HRESULT dxgi_set_private_data(struct wined3d_private_store *store, REFGUID guid, UINT data_size, const void *data)
Definition: utils.c:666

◆ dxgi_output_SetPrivateDataInterface()

static HRESULT STDMETHODCALLTYPE dxgi_output_SetPrivateDataInterface ( IDXGIOutput6 *  iface,
REFGUID  guid,
const IUnknown *  object 
)
static

Definition at line 257 of file output.c.

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}
HRESULT dxgi_set_private_data_interface(struct wined3d_private_store *store, REFGUID guid, const IUnknown *object)
Definition: utils.c:694

◆ dxgi_output_SupportsOverlays()

static BOOL STDMETHODCALLTYPE dxgi_output_SupportsOverlays ( IDXGIOutput6 *  iface)
static

Definition at line 552 of file output.c.

553{
554 FIXME("iface %p stub!\n", iface);
555
556 return FALSE;
557}

◆ dxgi_output_TakeOwnership()

static HRESULT STDMETHODCALLTYPE dxgi_output_TakeOwnership ( IDXGIOutput6 *  iface,
IUnknown *  device,
BOOL  exclusive 
)
static

Definition at line 376 of file output.c.

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}
HRESULT CDECL wined3d_output_take_ownership(const struct wined3d_output *output, BOOL exclusive)
Definition: directx.c:87

◆ dxgi_output_WaitForVBlank()

static HRESULT STDMETHODCALLTYPE dxgi_output_WaitForVBlank ( IDXGIOutput6 *  iface)
static

Definition at line 364 of file output.c.

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}
unsigned int BOOL
Definition: ntddk_ex.h:94

◆ impl_from_IDXGIOutput6()

◆ uint16_from_float()

static WORD uint16_from_float ( float  f)
static

Definition at line 425 of file output.c.

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}
GLfloat f
Definition: glext.h:7540

Referenced by dxgi_output_SetGammaControl().

◆ unsafe_impl_from_IDXGIOutput()

struct dxgi_output * unsafe_impl_from_IDXGIOutput ( IDXGIOutput *  iface)

Definition at line 706 of file output.c.

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}
#define assert(_expr)
Definition: assert.h:32

Referenced by d3d11_swapchain_SetFullscreenState(), dxgi_device_init(), and wined3d_swapchain_desc_from_dxgi().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( dxgi  )

Variable Documentation

◆ dxgi_output_vtbl

const struct IDXGIOutput6Vtbl dxgi_output_vtbl
static

Definition at line 665 of file output.c.

Referenced by dxgi_output_init(), and unsafe_impl_from_IDXGIOutput().