2 * Copyright 2014 Michael Müller for Pipelight
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.
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.
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
25 #include "physicalmonitorenumerationapi.h"
26 #include "lowlevelmonitorconfigurationapi.h"
27 #include "highlevelmonitorconfigurationapi.h"
31 #include "wine/debug.h"
32 #include "wine/heap.h"
34 WINE_DEFAULT_DEBUG_CHANNEL(dxva2
);
36 enum device_handle_flags
38 HANDLE_FLAG_OPEN
= 0x1,
39 HANDLE_FLAG_INVALID
= 0x2,
49 IDirect3DDeviceManager9 IDirect3DDeviceManager9_iface
;
50 IDirectXVideoProcessorService IDirectXVideoProcessorService_iface
;
53 IDirect3DDevice9
*device
;
56 struct device_handle
*handles
;
63 static BOOL
dxva_array_reserve(void **elements
, size_t *capacity
, size_t count
, size_t size
)
65 size_t new_capacity
, max_capacity
;
68 if (count
<= *capacity
)
71 max_capacity
= ~(SIZE_T
)0 / size
;
72 if (count
> max_capacity
)
75 new_capacity
= max(4, *capacity
);
76 while (new_capacity
< count
&& new_capacity
<= max_capacity
/ 2)
78 if (new_capacity
< count
)
79 new_capacity
= max_capacity
;
81 if (!(new_elements
= heap_realloc(*elements
, new_capacity
* size
)))
84 *elements
= new_elements
;
85 *capacity
= new_capacity
;
90 static struct device_manager
*impl_from_IDirect3DDeviceManager9(IDirect3DDeviceManager9
*iface
)
92 return CONTAINING_RECORD(iface
, struct device_manager
, IDirect3DDeviceManager9_iface
);
95 static struct device_manager
*impl_from_IDirectXVideoProcessorService(IDirectXVideoProcessorService
*iface
)
97 return CONTAINING_RECORD(iface
, struct device_manager
, IDirectXVideoProcessorService_iface
);
100 static HRESULT WINAPI
device_manager_processor_service_QueryInterface(IDirectXVideoProcessorService
*iface
,
101 REFIID riid
, void **obj
)
103 if (IsEqualIID(riid
, &IID_IDirectXVideoProcessorService
) ||
104 IsEqualIID(riid
, &IID_IDirectXVideoAccelerationService
) ||
105 IsEqualIID(riid
, &IID_IUnknown
))
108 IDirectXVideoProcessorService_AddRef(iface
);
112 WARN("Unsupported interface %s.\n", debugstr_guid(riid
));
114 return E_NOINTERFACE
;
117 static ULONG WINAPI
device_manager_processor_service_AddRef(IDirectXVideoProcessorService
*iface
)
119 struct device_manager
*manager
= impl_from_IDirectXVideoProcessorService(iface
);
120 return IDirect3DDeviceManager9_AddRef(&manager
->IDirect3DDeviceManager9_iface
);
123 static ULONG WINAPI
device_manager_processor_service_Release(IDirectXVideoProcessorService
*iface
)
125 struct device_manager
*manager
= impl_from_IDirectXVideoProcessorService(iface
);
126 return IDirect3DDeviceManager9_Release(&manager
->IDirect3DDeviceManager9_iface
);
129 static HRESULT WINAPI
device_manager_processor_service_CreateSurface(IDirectXVideoProcessorService
*iface
,
130 UINT width
, UINT height
, UINT backbuffers
, D3DFORMAT format
, D3DPOOL pool
, DWORD usage
, DWORD dxvaType
,
131 IDirect3DSurface9
**surface
, HANDLE
*shared_handle
)
133 FIXME("%p, %u, %u, %u, %u, %u, %u, %u, %p, %p.\n", iface
, width
, height
, backbuffers
, format
, pool
, usage
, dxvaType
,
134 surface
, shared_handle
);
139 static HRESULT WINAPI
device_manager_processor_service_RegisterVideoProcessorSoftwareDevice(
140 IDirectXVideoProcessorService
*iface
, void *callbacks
)
142 FIXME("%p, %p.\n", iface
, callbacks
);
147 static HRESULT WINAPI
device_manager_processor_service_GetVideoProcessorDeviceGuids(
148 IDirectXVideoProcessorService
*iface
, const DXVA2_VideoDesc
*video_desc
, UINT
*count
, GUID
**guids
)
150 FIXME("%p, %p, %p, %p.\n", iface
, video_desc
, count
, guids
);
155 static HRESULT WINAPI
device_manager_processor_service_GetVideoProcessorRenderTargets(
156 IDirectXVideoProcessorService
*iface
, REFGUID deviceguid
, const DXVA2_VideoDesc
*video_desc
, UINT
*count
,
159 FIXME("%p, %s, %p, %p, %p.\n", iface
, debugstr_guid(deviceguid
), video_desc
, count
, formats
);
164 static HRESULT WINAPI
device_manager_processor_service_GetVideoProcessorSubStreamFormats(
165 IDirectXVideoProcessorService
*iface
, REFGUID deviceguid
, const DXVA2_VideoDesc
*video_desc
,
166 D3DFORMAT rt_format
, UINT
*count
, D3DFORMAT
**formats
)
168 FIXME("%p, %s, %p, %u, %p, %p.\n", iface
, debugstr_guid(deviceguid
), video_desc
, rt_format
, count
, formats
);
173 static HRESULT WINAPI
device_manager_processor_service_GetVideoProcessorCaps(
174 IDirectXVideoProcessorService
*iface
, REFGUID deviceguid
, const DXVA2_VideoDesc
*video_desc
,
175 D3DFORMAT rt_format
, DXVA2_VideoProcessorCaps
*caps
)
177 FIXME("%p, %s, %p, %u, %p.\n", iface
, debugstr_guid(deviceguid
), video_desc
, rt_format
, caps
);
182 static HRESULT WINAPI
device_manager_processor_service_GetProcAmpRange(
183 IDirectXVideoProcessorService
*iface
, REFGUID deviceguid
, const DXVA2_VideoDesc
*video_desc
,
184 D3DFORMAT rt_format
, UINT ProcAmpCap
, DXVA2_ValueRange
*range
)
186 FIXME("%p, %s, %p, %u, %u, %p.\n", iface
, debugstr_guid(deviceguid
), video_desc
, rt_format
, ProcAmpCap
, range
);
191 static const IDirectXVideoProcessorServiceVtbl device_manager_processor_service_vtbl
=
193 device_manager_processor_service_QueryInterface
,
194 device_manager_processor_service_AddRef
,
195 device_manager_processor_service_Release
,
196 device_manager_processor_service_CreateSurface
,
197 device_manager_processor_service_RegisterVideoProcessorSoftwareDevice
,
198 device_manager_processor_service_GetVideoProcessorDeviceGuids
,
199 device_manager_processor_service_GetVideoProcessorRenderTargets
,
200 device_manager_processor_service_GetVideoProcessorSubStreamFormats
,
201 device_manager_processor_service_GetVideoProcessorCaps
,
202 device_manager_processor_service_GetProcAmpRange
,
205 static HRESULT WINAPI
device_manager_QueryInterface(IDirect3DDeviceManager9
*iface
, REFIID riid
, void **obj
)
207 TRACE("%p, %s, %p.\n", iface
, debugstr_guid(riid
), obj
);
209 if (IsEqualIID(&IID_IDirect3DDeviceManager9
, riid
) ||
210 IsEqualIID(&IID_IUnknown
, riid
))
213 IDirect3DDeviceManager9_AddRef(iface
);
217 WARN("Unsupported interface %s.\n", debugstr_guid(riid
));
219 return E_NOINTERFACE
;
222 static ULONG WINAPI
device_manager_AddRef(IDirect3DDeviceManager9
*iface
)
224 struct device_manager
*manager
= impl_from_IDirect3DDeviceManager9(iface
);
225 ULONG refcount
= InterlockedIncrement(&manager
->refcount
);
227 TRACE("%p, refcount %u.\n", iface
, refcount
);
232 static ULONG WINAPI
device_manager_Release(IDirect3DDeviceManager9
*iface
)
234 struct device_manager
*manager
= impl_from_IDirect3DDeviceManager9(iface
);
235 ULONG refcount
= InterlockedDecrement(&manager
->refcount
);
237 TRACE("%p, refcount %u.\n", iface
, refcount
);
242 IDirect3DDevice9_Release(manager
->device
);
243 DeleteCriticalSection(&manager
->cs
);
244 heap_free(manager
->handles
);
251 static HRESULT WINAPI
device_manager_ResetDevice(IDirect3DDeviceManager9
*iface
, IDirect3DDevice9
*device
,
254 struct device_manager
*manager
= impl_from_IDirect3DDeviceManager9(iface
);
257 TRACE("%p, %p, %#x.\n", iface
, device
, token
);
259 if (token
!= manager
->token
)
262 EnterCriticalSection(&manager
->cs
);
265 for (i
= 0; i
< manager
->count
; ++i
)
266 manager
->handles
[i
].flags
|= HANDLE_FLAG_INVALID
;
267 IDirect3DDevice9_Release(manager
->device
);
269 manager
->device
= device
;
270 IDirect3DDevice9_AddRef(manager
->device
);
271 LeaveCriticalSection(&manager
->cs
);
276 static HRESULT WINAPI
device_manager_OpenDeviceHandle(IDirect3DDeviceManager9
*iface
, HANDLE
*hdevice
)
278 struct device_manager
*manager
= impl_from_IDirect3DDeviceManager9(iface
);
282 TRACE("%p, %p.\n", iface
, hdevice
);
286 EnterCriticalSection(&manager
->cs
);
287 if (!manager
->device
)
288 hr
= DXVA2_E_NOT_INITIALIZED
;
291 for (i
= 0; i
< manager
->count
; ++i
)
293 if (!(manager
->handles
[i
].flags
& HANDLE_FLAG_OPEN
))
295 manager
->handles
[i
].flags
|= HANDLE_FLAG_OPEN
;
296 *hdevice
= ULongToHandle(i
+ 1);
301 if (dxva_array_reserve((void **)&manager
->handles
, &manager
->capacity
, manager
->count
+ 1,
302 sizeof(*manager
->handles
)))
304 *hdevice
= ULongToHandle(manager
->count
+ 1);
305 manager
->handles
[manager
->count
].flags
|= HANDLE_FLAG_OPEN
;
311 LeaveCriticalSection(&manager
->cs
);
316 static HRESULT
device_manager_get_handle_index(struct device_manager
*manager
, HANDLE hdevice
, size_t *idx
)
318 if (hdevice
> ULongToHandle(manager
->count
))
320 *idx
= (ULONG_PTR
)hdevice
- 1;
324 static HRESULT WINAPI
device_manager_CloseDeviceHandle(IDirect3DDeviceManager9
*iface
, HANDLE hdevice
)
326 struct device_manager
*manager
= impl_from_IDirect3DDeviceManager9(iface
);
330 TRACE("%p, %p.\n", iface
, hdevice
);
332 EnterCriticalSection(&manager
->cs
);
333 if (SUCCEEDED(hr
= device_manager_get_handle_index(manager
, hdevice
, &idx
)))
335 if (manager
->handles
[idx
].flags
& HANDLE_FLAG_OPEN
)
337 manager
->handles
[idx
].flags
= 0;
338 if (idx
== manager
->count
- 1)
344 LeaveCriticalSection(&manager
->cs
);
349 static HRESULT WINAPI
device_manager_TestDevice(IDirect3DDeviceManager9
*iface
, HANDLE hdevice
)
351 struct device_manager
*manager
= impl_from_IDirect3DDeviceManager9(iface
);
355 TRACE("%p, %p.\n", iface
, hdevice
);
357 EnterCriticalSection(&manager
->cs
);
358 if (SUCCEEDED(hr
= device_manager_get_handle_index(manager
, hdevice
, &idx
)))
360 unsigned int flags
= manager
->handles
[idx
].flags
;
362 if (flags
& HANDLE_FLAG_INVALID
)
363 hr
= DXVA2_E_NEW_VIDEO_DEVICE
;
364 else if (!(flags
& HANDLE_FLAG_OPEN
))
367 LeaveCriticalSection(&manager
->cs
);
372 static HRESULT WINAPI
device_manager_LockDevice(IDirect3DDeviceManager9
*iface
, HANDLE hdevice
,
373 IDirect3DDevice9
**device
, BOOL block
)
375 FIXME("%p, %p, %p, %d.\n", iface
, hdevice
, device
, block
);
380 static HRESULT WINAPI
device_manager_UnlockDevice(IDirect3DDeviceManager9
*iface
, HANDLE hdevice
, BOOL savestate
)
382 FIXME("%p, %p, %d.\n", iface
, hdevice
, savestate
);
387 static HRESULT WINAPI
device_manager_GetVideoService(IDirect3DDeviceManager9
*iface
, HANDLE hdevice
, REFIID riid
,
390 struct device_manager
*manager
= impl_from_IDirect3DDeviceManager9(iface
);
394 TRACE("%p, %p, %s, %p.\n", iface
, hdevice
, debugstr_guid(riid
), obj
);
396 EnterCriticalSection(&manager
->cs
);
397 if (SUCCEEDED(hr
= device_manager_get_handle_index(manager
, hdevice
, &idx
)))
399 unsigned int flags
= manager
->handles
[idx
].flags
;
401 if (flags
& HANDLE_FLAG_INVALID
)
402 hr
= DXVA2_E_NEW_VIDEO_DEVICE
;
403 else if (!(flags
& HANDLE_FLAG_OPEN
))
406 hr
= IDirectXVideoProcessorService_QueryInterface(&manager
->IDirectXVideoProcessorService_iface
,
409 LeaveCriticalSection(&manager
->cs
);
414 static const IDirect3DDeviceManager9Vtbl device_manager_vtbl
=
416 device_manager_QueryInterface
,
417 device_manager_AddRef
,
418 device_manager_Release
,
419 device_manager_ResetDevice
,
420 device_manager_OpenDeviceHandle
,
421 device_manager_CloseDeviceHandle
,
422 device_manager_TestDevice
,
423 device_manager_LockDevice
,
424 device_manager_UnlockDevice
,
425 device_manager_GetVideoService
,
428 BOOL WINAPI
CapabilitiesRequestAndCapabilitiesReply( HMONITOR monitor
, LPSTR buffer
, DWORD length
)
430 FIXME("(%p, %p, %d): stub\n", monitor
, buffer
, length
);
432 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
436 HRESULT WINAPI
DXVA2CreateDirect3DDeviceManager9(UINT
*token
, IDirect3DDeviceManager9
**manager
)
438 struct device_manager
*object
;
440 TRACE("%p, %p.\n", token
, manager
);
444 if (!(object
= heap_alloc_zero(sizeof(*object
))))
445 return E_OUTOFMEMORY
;
447 object
->IDirect3DDeviceManager9_iface
.lpVtbl
= &device_manager_vtbl
;
448 object
->IDirectXVideoProcessorService_iface
.lpVtbl
= &device_manager_processor_service_vtbl
;
449 object
->refcount
= 1;
450 object
->token
= GetTickCount();
451 InitializeCriticalSection(&object
->cs
);
453 *token
= object
->token
;
454 *manager
= &object
->IDirect3DDeviceManager9_iface
;
459 HRESULT WINAPI
DXVA2CreateVideoService(IDirect3DDevice9
*device
, REFIID riid
, void **obj
)
461 IDirect3DDeviceManager9
*manager
;
466 TRACE("%p, %s, %p.\n", device
, debugstr_guid(riid
), obj
);
468 if (FAILED(hr
= DXVA2CreateDirect3DDeviceManager9(&token
, &manager
)))
471 if (FAILED(hr
= IDirect3DDeviceManager9_ResetDevice(manager
, device
, token
)))
474 if (FAILED(hr
= IDirect3DDeviceManager9_OpenDeviceHandle(manager
, &handle
)))
477 hr
= IDirect3DDeviceManager9_GetVideoService(manager
, handle
, riid
, obj
);
478 IDirect3DDeviceManager9_CloseDeviceHandle(manager
, handle
);
481 IDirect3DDeviceManager9_Release(manager
);
486 BOOL WINAPI
DegaussMonitor( HMONITOR monitor
)
488 FIXME("(%p): stub\n", monitor
);
490 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
494 BOOL WINAPI
DestroyPhysicalMonitor( HMONITOR monitor
)
496 FIXME("(%p): stub\n", monitor
);
498 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
502 BOOL WINAPI
DestroyPhysicalMonitors( DWORD arraySize
, LPPHYSICAL_MONITOR array
)
504 FIXME("(0x%x, %p): stub\n", arraySize
, array
);
506 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
510 BOOL WINAPI
GetCapabilitiesStringLength( HMONITOR monitor
, LPDWORD length
)
512 FIXME("(%p, %p): stub\n", monitor
, length
);
514 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
518 BOOL WINAPI
GetMonitorBrightness( HMONITOR monitor
, LPDWORD minimum
, LPDWORD current
, LPDWORD maximum
)
520 FIXME("(%p, %p, %p, %p): stub\n", monitor
, minimum
, current
, maximum
);
522 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
526 BOOL WINAPI
GetMonitorCapabilities( HMONITOR monitor
, LPDWORD capabilities
, LPDWORD temperatures
)
528 FIXME("(%p, %p, %p): stub\n", monitor
, capabilities
, temperatures
);
530 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
535 BOOL WINAPI
GetMonitorColorTemperature( HMONITOR monitor
, LPMC_COLOR_TEMPERATURE temperature
)
537 FIXME("(%p, %p): stub\n", monitor
, temperature
);
539 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
543 BOOL WINAPI
GetMonitorContrast( HMONITOR monitor
, LPDWORD minimum
, LPDWORD current
, LPDWORD maximum
)
545 FIXME("(%p, %p, %p, %p): stub\n", monitor
, minimum
, current
, maximum
);
547 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
551 BOOL WINAPI
GetMonitorDisplayAreaPosition( HMONITOR monitor
, MC_POSITION_TYPE type
, LPDWORD minimum
,
552 LPDWORD current
, LPDWORD maximum
)
554 FIXME("(%p, 0x%x, %p, %p, %p): stub\n", monitor
, type
, minimum
, current
, maximum
);
556 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
560 BOOL WINAPI
GetMonitorDisplayAreaSize( HMONITOR monitor
, MC_SIZE_TYPE type
, LPDWORD minimum
,
561 LPDWORD current
, LPDWORD maximum
)
563 FIXME("(%p, 0x%x, %p, %p, %p): stub\n", monitor
, type
, minimum
, current
, maximum
);
565 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
569 BOOL WINAPI
GetMonitorRedGreenOrBlueDrive( HMONITOR monitor
, MC_DRIVE_TYPE type
, LPDWORD minimum
,
570 LPDWORD current
, LPDWORD maximum
)
572 FIXME("(%p, 0x%x, %p, %p, %p): stub\n", monitor
, type
, minimum
, current
, maximum
);
574 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
578 BOOL WINAPI
GetMonitorRedGreenOrBlueGain( HMONITOR monitor
, MC_GAIN_TYPE type
, LPDWORD minimum
,
579 LPDWORD current
, LPDWORD maximum
)
581 FIXME("(%p, 0x%x, %p, %p, %p): stub\n", monitor
, type
, minimum
, current
, maximum
);
583 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
587 BOOL WINAPI
GetMonitorTechnologyType( HMONITOR monitor
, LPMC_DISPLAY_TECHNOLOGY_TYPE type
)
589 FIXME("(%p, %p): stub\n", monitor
, type
);
591 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
595 BOOL WINAPI
GetNumberOfPhysicalMonitorsFromHMONITOR( HMONITOR monitor
, LPDWORD number
)
597 FIXME("(%p, %p): stub\n", monitor
, number
);
599 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
603 HRESULT WINAPI
GetNumberOfPhysicalMonitorsFromIDirect3DDevice9( IDirect3DDevice9
*device
, LPDWORD number
)
605 FIXME("(%p, %p): stub\n", device
, number
);
610 BOOL WINAPI
GetPhysicalMonitorsFromHMONITOR( HMONITOR monitor
, DWORD arraySize
, LPPHYSICAL_MONITOR array
)
612 FIXME("(%p, 0x%x, %p): stub\n", monitor
, arraySize
, array
);
614 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
618 HRESULT WINAPI
GetPhysicalMonitorsFromIDirect3DDevice9( IDirect3DDevice9
*device
, DWORD arraySize
, LPPHYSICAL_MONITOR array
)
620 FIXME("(%p, 0x%x, %p): stub\n", device
, arraySize
, array
);
625 BOOL WINAPI
GetTimingReport( HMONITOR monitor
, LPMC_TIMING_REPORT timingReport
)
627 FIXME("(%p, %p): stub\n", monitor
, timingReport
);
629 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
633 BOOL WINAPI
GetVCPFeatureAndVCPFeatureReply( HMONITOR monitor
, BYTE vcpCode
, LPMC_VCP_CODE_TYPE pvct
,
634 LPDWORD current
, LPDWORD maximum
)
636 FIXME("(%p, 0x%02x, %p, %p, %p): stub\n", monitor
, vcpCode
, pvct
, current
, maximum
);
638 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
642 HRESULT WINAPI
OPMGetVideoOutputsFromHMONITOR( HMONITOR monitor
, /* OPM_VIDEO_OUTPUT_SEMANTICS */ int vos
,
643 ULONG
*numVideoOutputs
, /* IOPMVideoOutput */ void ***videoOutputs
)
645 FIXME("(%p, 0x%x, %p, %p): stub\n", monitor
, vos
, numVideoOutputs
, videoOutputs
);
650 HRESULT WINAPI
OPMGetVideoOutputsFromIDirect3DDevice9Object( IDirect3DDevice9
*device
, /* OPM_VIDEO_OUTPUT_SEMANTICS */ int vos
,
651 ULONG
*numVideoOutputs
, /* IOPMVideoOutput */ void ***videoOutputs
)
653 FIXME("(%p, 0x%x, %p, %p): stub\n", device
, vos
, numVideoOutputs
, videoOutputs
);
658 BOOL WINAPI
RestoreMonitorFactoryColorDefaults( HMONITOR monitor
)
660 FIXME("(%p): stub\n", monitor
);
662 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
666 BOOL WINAPI
RestoreMonitorFactoryDefaults( HMONITOR monitor
)
668 FIXME("(%p): stub\n", monitor
);
670 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
674 BOOL WINAPI
SaveCurrentMonitorSettings( HMONITOR monitor
)
676 FIXME("(%p): stub\n", monitor
);
678 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
682 BOOL WINAPI
SaveCurrentSettings( HMONITOR monitor
)
684 FIXME("(%p): stub\n", monitor
);
686 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
690 BOOL WINAPI
SetMonitorBrightness( HMONITOR monitor
, DWORD brightness
)
692 FIXME("(%p, 0x%x): stub\n", monitor
, brightness
);
694 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
698 BOOL WINAPI
SetMonitorColorTemperature( HMONITOR monitor
, MC_COLOR_TEMPERATURE temperature
)
700 FIXME("(%p, 0x%x): stub\n", monitor
, temperature
);
702 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
706 BOOL WINAPI
SetMonitorContrast( HMONITOR monitor
, DWORD contrast
)
708 FIXME("(%p, 0x%x): stub\n", monitor
, contrast
);
710 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
714 BOOL WINAPI
SetMonitorDisplayAreaPosition( HMONITOR monitor
, MC_POSITION_TYPE type
, DWORD position
)
716 FIXME("(%p, 0x%x, 0x%x): stub\n", monitor
, type
, position
);
718 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
722 BOOL WINAPI
SetMonitorDisplayAreaSize( HMONITOR monitor
, MC_SIZE_TYPE type
, DWORD size
)
724 FIXME("(%p, 0x%x, 0x%x): stub\n", monitor
, type
, size
);
726 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
730 BOOL WINAPI
SetMonitorRedGreenOrBlueDrive( HMONITOR monitor
, MC_DRIVE_TYPE type
, DWORD drive
)
732 FIXME("(%p, 0x%x, 0x%x): stub\n", monitor
, type
, drive
);
734 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
738 BOOL WINAPI
SetMonitorRedGreenOrBlueGain( HMONITOR monitor
, MC_GAIN_TYPE type
, DWORD gain
)
740 FIXME("(%p, 0x%x, 0x%x): stub\n", monitor
, type
, gain
);
742 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
746 BOOL WINAPI
SetVCPFeature( HMONITOR monitor
, BYTE vcpCode
, DWORD value
)
748 FIXME("(%p, 0x%02x, 0x%x): stub\n", monitor
, vcpCode
, value
);
750 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
754 BOOL WINAPI
DllMain (HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
)
756 TRACE("%p,%x,%p\n", hinstDLL
, fdwReason
, lpvReserved
);
759 case DLL_WINE_PREATTACH
:
760 return FALSE
; /* prefer native version */
761 case DLL_PROCESS_ATTACH
:
762 DisableThreadLibraryCalls(hinstDLL
);