VirtualBox

source: vbox/trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.h

Last change on this file was 98103, checked in by vboxsync, 16 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
RevLine 
[55401]1/* $Id: VBoxDispIf.h 98103 2023-01-17 14:15:46Z vboxsync $ */
[31145]2/** @file
3 * VBoxTray - Display Settings Interface abstraction for XPDM & WDDM
4 */
5
6/*
[98103]7 * Copyright (C) 2006-2023 Oracle and/or its affiliates.
[31145]8 *
[96407]9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
[31145]26 */
[69361]27
[76563]28#ifndef GA_INCLUDED_SRC_WINNT_VBoxTray_VBoxDispIf_h
29#define GA_INCLUDED_SRC_WINNT_VBoxTray_VBoxDispIf_h
[76540]30#ifndef RT_WITHOUT_PRAGMA_ONCE
31# pragma once
32#endif
33
[31145]34#include <iprt/cdefs.h>
35
[32622]36#ifdef VBOX_WITH_WDDM
[42154]37# define D3DKMDT_SPECIAL_MULTIPLATFORM_TOOL
[92963]38# include <iprt/win/d3dkmthk.h>
[68261]39# include <VBoxDispKmt.h>
[31145]40#endif
41
42#include <VBoxDisplay.h>
43
44typedef enum
45{
46 VBOXDISPIF_MODE_UNKNOWN = 0,
47 VBOXDISPIF_MODE_XPDM_NT4 = 1,
48 VBOXDISPIF_MODE_XPDM
[32622]49#ifdef VBOX_WITH_WDDM
[31145]50 , VBOXDISPIF_MODE_WDDM
[48070]51 , VBOXDISPIF_MODE_WDDM_W7
[31145]52#endif
53} VBOXDISPIF_MODE;
54/* display driver interface abstraction for XPDM & WDDM
55 * with WDDM we can not use ExtEscape to communicate with our driver
56 * because we do not have XPDM display driver any more, i.e. escape requests are handled by cdd
57 * that knows nothing about us
58 * NOTE: DispIf makes no checks whether the display driver is actually a VBox driver,
59 * it just switches between using different backend OS API based on the VBoxDispIfSwitchMode call
60 * It's caller's responsibility to initiate it to work in the correct mode */
61typedef struct VBOXDISPIF
62{
63 VBOXDISPIF_MODE enmMode;
64 /* with WDDM the approach is to call into WDDM miniport driver via PFND3DKMT API provided by the GDI,
65 * The PFND3DKMT is supposed to be used by the OpenGL ICD according to MSDN, so this approach is a bit hacky */
66 union
67 {
68 struct
69 {
[85121]70 DECLCALLBACKMEMBER_EX(LONG, WINAPI, pfnChangeDisplaySettingsEx,(LPCSTR lpszDeviceName, LPDEVMODE lpDevMode,
71 HWND hwnd, DWORD dwflags, LPVOID lParam));
[31145]72 } xpdm;
[32622]73#ifdef VBOX_WITH_WDDM
[31145]74 struct
75 {
[95962]76 /** ChangeDisplaySettingsEx does not exist in NT. ResizeDisplayDevice uses the function. */
[85121]77 DECLCALLBACKMEMBER_EX(LONG, WINAPI, pfnChangeDisplaySettingsEx,(LPCTSTR lpszDeviceName, LPDEVMODE lpDevMode,
78 HWND hwnd, DWORD dwflags, LPVOID lParam));
[95962]79 /** EnumDisplayDevices does not exist in NT.*/
[85121]80 DECLCALLBACKMEMBER_EX(BOOL, WINAPI, pfnEnumDisplayDevices,(IN LPCSTR lpDevice, IN DWORD iDevNum,
81 OUT PDISPLAY_DEVICEA lpDisplayDevice, IN DWORD dwFlags));
[34130]82
[48070]83 VBOXDISPKMT_CALLBACKS KmtCallbacks;
[31145]84 } wddm;
85#endif
86 } modeData;
87} VBOXDISPIF, *PVBOXDISPIF;
88typedef const struct VBOXDISPIF *PCVBOXDISPIF;
89
90/* initializes the DispIf
91 * Initially the DispIf is configured to work in XPDM mode
92 * call VBoxDispIfSwitchMode to switch the mode to WDDM */
93DWORD VBoxDispIfInit(PVBOXDISPIF pIf);
94DWORD VBoxDispIfSwitchMode(PVBOXDISPIF pIf, VBOXDISPIF_MODE enmMode, VBOXDISPIF_MODE *penmOldMode);
95DECLINLINE(VBOXDISPIF_MODE) VBoxDispGetMode(PVBOXDISPIF pIf) { return pIf->enmMode; }
96DWORD VBoxDispIfTerm(PVBOXDISPIF pIf);
97DWORD VBoxDispIfEscape(PCVBOXDISPIF const pIf, PVBOXDISPIFESCAPE pEscape, int cbData);
[42232]98DWORD VBoxDispIfEscapeInOut(PCVBOXDISPIF const pIf, PVBOXDISPIFESCAPE pEscape, int cbData);
[48070]99DWORD VBoxDispIfResizeModes(PCVBOXDISPIF const pIf, UINT iChangedMode, BOOL fEnable, BOOL fExtDispSup, DISPLAY_DEVICE *paDisplayDevices, DEVMODE *paDeviceModes, UINT cDevModes);
[44550]100DWORD VBoxDispIfCancelPendingResize(PCVBOXDISPIF const pIf);
[48070]101DWORD VBoxDispIfResizeStarted(PCVBOXDISPIF const pIf);
102
[72611]103BOOL VBoxDispIfResizeDisplayWin7(PCVBOXDISPIF const pIf, uint32_t cDispDef, const VMMDevDisplayDef *paDispDef);
104
[48070]105typedef struct VBOXDISPIF_SEAMLESS
106{
107 PCVBOXDISPIF pIf;
108
109 union
110 {
111#ifdef VBOX_WITH_WDDM
112 struct
113 {
114 VBOXDISPKMT_ADAPTER Adapter;
[48732]115# ifdef VBOX_DISPIF_WITH_OPCONTEXT
[48070]116 VBOXDISPKMT_DEVICE Device;
117 VBOXDISPKMT_CONTEXT Context;
[48732]118# endif
[48070]119 } wddm;
120#endif
121 } modeData;
122} VBOXDISPIF_SEAMLESS;
123
124DECLINLINE(bool) VBoxDispIfSeamlesIsValid(VBOXDISPIF_SEAMLESS *pSeamless)
125{
126 return !!pSeamless->pIf;
127}
128
[57741]129DWORD VBoxDispIfSeamlessCreate(PCVBOXDISPIF const pIf, VBOXDISPIF_SEAMLESS *pSeamless, HANDLE hEvent);
130DWORD VBoxDispIfSeamlessTerm(VBOXDISPIF_SEAMLESS *pSeamless);
131DWORD VBoxDispIfSeamlessSubmit(VBOXDISPIF_SEAMLESS *pSeamless, VBOXDISPIFESCAPE *pData, int cbData);
132
[76563]133#endif /* !GA_INCLUDED_SRC_WINNT_VBoxTray_VBoxDispIf_h */
[76540]134
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use