VirtualBox

source: vbox/trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDisp.h

Last change on this file was 98103, checked in by vboxsync, 17 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: 10.3 KB
Line 
1/* $Id: VBoxDisp.h 98103 2023-01-17 14:15:46Z vboxsync $ */
2/** @file
3 * VBox XPDM Display driver
4 */
5
6/*
7 * Copyright (C) 2011-2023 Oracle and/or its affiliates.
8 *
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
26 */
27
28#ifndef GA_INCLUDED_SRC_WINNT_Graphics_Video_disp_xpdm_VBoxDisp_h
29#define GA_INCLUDED_SRC_WINNT_Graphics_Video_disp_xpdm_VBoxDisp_h
30#ifndef RT_WITHOUT_PRAGMA_ONCE
31# pragma once
32#endif
33
34#include "VBoxDispInternal.h"
35#include "VBoxDispVrdpBmp.h"
36
37/* VirtualBox display driver version, could be seen in Control Panel */
38#define VBOXDISPDRIVERVERSION 0x01UL
39
40#if (VBOXDISPDRIVERVERSION & (~0xFFUL))
41#error VBOXDISPDRIVERVERSION can't be more than 0xFF
42#endif
43
44#define VBOXDISP_DEVICE_NAME L"VBoxDisp"
45
46/* Current mode info */
47typedef struct _VBOXDISPCURRENTMODE
48{
49 ULONG ulIndex; /* miniport's video mode index */
50 ULONG ulWidth, ulHeight; /* visible screen width and height */
51 ULONG ulBitsPerPel; /* number of bits per pel */
52 LONG lScanlineStride; /* distance between scanlines */
53 FLONG flMaskR, flMaskG, flMaskB; /* RGB mask */
54 ULONG ulPaletteShift; /* number of bits we have to shift 888 palette to match device palette */
55} VBOXDISPCURRENTMODE, *PVBOXDISPCURRENTMODE;
56
57/* Pointer related info */
58typedef struct _VBOXDISPPOINTERINFO
59{
60 VIDEO_POINTER_CAPABILITIES caps; /* Pointer capabilities */
61 PVIDEO_POINTER_ATTRIBUTES pAttrs; /* Preallocated buffer to pass pointer shape to miniport driver */
62 DWORD cbAttrs; /* Size of pAttrs buffer */
63 POINTL orgHotSpot; /* Hot spot origin */
64} VBOXDISPPOINTERINFO, *PVBOXDISPPOINTERINFO;
65
66/* Surface info */
67typedef struct _VBOXDISPSURF
68{
69 HBITMAP hBitmap; /* GDI's handle to framebuffer bitmap */
70 SURFOBJ* psoBitmap; /* lock pointer to framebuffer bitmap */
71 HSURF hSurface; /* GDI's handle to framebuffer device-managed surface */
72 ULONG ulFormat; /* Bitmap format, one of BMF_XXBPP */
73} VBOXDISPSURF, *PVBOXDISPSURF;
74
75/* VRAM Layout */
76typedef struct _VBOXDISPVRAMLAYOUT
77{
78 ULONG cbVRAM;
79
80 ULONG offFramebuffer, cbFramebuffer;
81 ULONG offDDrawHeap, cbDDrawHeap;
82 ULONG offVBVABuffer, cbVBVABuffer;
83 ULONG offDisplayInfo, cbDisplayInfo;
84} VBOXDISPVRAMLAYOUT;
85
86/* HGSMI info */
87typedef struct _VBOXDISPHGSMIINFO
88{
89 BOOL bSupported; /* HGSMI is supported and enabled */
90
91 HGSMIQUERYCALLBACKS mp; /* HGSMI miniport's callbacks and context */
92 HGSMIGUESTCOMMANDCONTEXT ctx; /* HGSMI guest context */
93} VBOXDISPHGSMIINFO;
94
95/* Saved screen bits information. */
96typedef struct _SSB
97{
98 ULONG ident; /* 1 based index in the stack = the handle returned by VBoxDispDrvSaveScreenBits (SS_SAVE) */
99 BYTE *pBuffer; /* Buffer where screen bits are saved. */
100} SSB;
101
102#ifdef VBOX_WITH_DDRAW
103/* DirectDraw surface lock information */
104typedef struct _VBOXDDLOCKINFO
105{
106 BOOL bLocked;
107 RECTL rect;
108} VBOXDDLOCKINFO;
109#endif
110
111/* Structure holding driver private device info. */
112typedef struct _VBOXDISPDEV
113{
114 HANDLE hDriver; /* Display device handle which was passed to VBoxDispDrvEnablePDEV */
115 HDEV hDevGDI; /* GDI's handle for PDEV created in VBoxDispDrvEnablePDEV */
116
117 VBOXDISPCURRENTMODE mode; /* Current device mode */
118 ULONG iDevice; /* Miniport's device index */
119 POINTL orgDev; /* Device origin for DualView (0,0 is primary) */
120 POINTL orgDisp; /* Display origin in virtual desktop, NT4 only */
121
122 VBOXDISPPOINTERINFO pointer; /* Pointer info */
123
124 HPALETTE hDefaultPalette; /* Default palette handle */
125 PALETTEENTRY *pPalette; /* Palette entries for device managed palette */
126
127 VBOXDISPSURF surface; /* Device surface */
128 FLONG flDrawingHooks; /* Enabled drawing hooks */
129
130 VIDEO_MEMORY_INFORMATION memInfo; /* Mapped Framebuffer/vram info */
131 VBOXDISPVRAMLAYOUT layout; /* VRAM layout information */
132
133 VBOXDISPHGSMIINFO hgsmi; /* HGSMI Info */
134 HGSMIQUERYCPORTPROCS vpAPI; /* Video Port API callbacks and miniport's context */
135
136 VBVABUFFERCONTEXT vbvaCtx; /* VBVA context */
137 VRDPBC vrdpCache; /* VRDP bitmap cache */
138
139 ULONG cSSB; /* Number of active saved screen bits records in the following array. */
140 SSB aSSB[4]; /* LIFO type stack for saved screen areas. */
141
142#ifdef VBOX_WITH_DDRAW
143 VBOXDDLOCKINFO ddpsLock; /* Primary surface DirectDraw lock information */
144#endif
145
146#ifdef VBOX_WITH_VIDEOHWACCEL
147 VBOXDISPVHWAINFO vhwa; /* VHWA Info */
148#endif
149
150 BOOL bBitmapCacheDisabled;
151} VBOXDISPDEV, *PVBOXDISPDEV;
152
153/* -------------------- Driver callbacks -------------------- */
154RT_C_DECLS_BEGIN
155ULONG APIENTRY DriverEntry(IN PVOID Context1, IN PVOID Context2);
156RT_C_DECLS_END
157
158DHPDEV APIENTRY VBoxDispDrvEnablePDEV(DEVMODEW *pdm, LPWSTR pwszLogAddress,
159 ULONG cPat, HSURF *phsurfPatterns,
160 ULONG cjCaps, ULONG *pdevcaps,
161 ULONG cjDevInfo, DEVINFO *pdi,
162 HDEV hdev, PWSTR pwszDeviceName, HANDLE hDriver);
163VOID APIENTRY VBoxDispDrvCompletePDEV(DHPDEV dhpdev, HDEV hdev);
164VOID APIENTRY VBoxDispDrvDisablePDEV(DHPDEV dhpdev);
165HSURF APIENTRY VBoxDispDrvEnableSurface(DHPDEV dhpdev);
166VOID APIENTRY VBoxDispDrvDisableSurface(DHPDEV dhpdev);
167
168BOOL APIENTRY VBoxDispDrvLineTo(SURFOBJ *pso, CLIPOBJ *pco, BRUSHOBJ *pbo,
169 LONG x1, LONG y1, LONG x2, LONG y2, RECTL *prclBounds, MIX mix);
170BOOL APIENTRY VBoxDispDrvStrokePath(SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, XFORMOBJ *pxo,
171 BRUSHOBJ *pbo, POINTL *pptlBrushOrg, LINEATTRS *plineattrs, MIX mix);
172
173BOOL APIENTRY VBoxDispDrvFillPath(SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, BRUSHOBJ *pbo, POINTL *pptlBrushOrg,
174 MIX mix, FLONG flOptions);
175BOOL APIENTRY VBoxDispDrvPaint(SURFOBJ *pso, CLIPOBJ *pco, BRUSHOBJ *pbo, POINTL *pptlBrushOrg, MIX mix);
176
177BOOL APIENTRY VBoxDispDrvRealizeBrush(BRUSHOBJ *pbo, SURFOBJ *psoTarget, SURFOBJ *psoPattern, SURFOBJ *psoMask,
178 XLATEOBJ *pxlo, ULONG iHatch);
179ULONG APIENTRY VBoxDispDrvDitherColor(DHPDEV dhpdev, ULONG iMode, ULONG rgb, ULONG *pul);
180
181BOOL APIENTRY VBoxDispDrvBitBlt(SURFOBJ *psoTrg, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo,
182 RECTL *prclTrg, POINTL *pptlSrc, POINTL *pptlMask, BRUSHOBJ *pbo, POINTL *pptlBrush,
183 ROP4 rop4);
184BOOL APIENTRY VBoxDispDrvStretchBlt(SURFOBJ *psoDest, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo,
185 COLORADJUSTMENT *pca, POINTL *pptlHTOrg, RECTL *prclDest, RECTL *prclSrc,
186 POINTL *pptlMask, ULONG iMode);
187BOOL APIENTRY VBoxDispDrvCopyBits(SURFOBJ *psoDest, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo,
188 RECTL *prclDest, POINTL *pptlSrc);
189
190ULONG APIENTRY VBoxDispDrvSetPointerShape(SURFOBJ *pso, SURFOBJ *psoMask, SURFOBJ *psoColor, XLATEOBJ *pxlo,
191 LONG xHot, LONG yHot, LONG x, LONG y, RECTL *prcl, FLONG fl);
192VOID APIENTRY VBoxDispDrvMovePointer(SURFOBJ *pso, LONG x, LONG y, RECTL *prcl);
193
194BOOL APIENTRY VBoxDispDrvAssertMode(DHPDEV dhpdev, BOOL bEnable);
195VOID APIENTRY VBoxDispDrvDisableDriver();
196BOOL APIENTRY VBoxDispDrvTextOut(SURFOBJ *pso, STROBJ *pstro, FONTOBJ *pfo, CLIPOBJ *pco,
197 RECTL *prclExtra, RECTL *prclOpaque, BRUSHOBJ *pboFore,
198 BRUSHOBJ *pboOpaque, POINTL *pptlOrg, MIX mix);
199BOOL APIENTRY VBoxDispDrvSetPalette(DHPDEV dhpdev, PALOBJ *ppalo, FLONG fl, ULONG iStart, ULONG cColors);
200ULONG APIENTRY VBoxDispDrvEscape(SURFOBJ *pso, ULONG iEsc, ULONG cjIn, PVOID pvIn, ULONG cjOut, PVOID pvOut);
201ULONG_PTR APIENTRY VBoxDispDrvSaveScreenBits(SURFOBJ *pso, ULONG iMode, ULONG_PTR ident, RECTL *prcl);
202ULONG APIENTRY VBoxDispDrvGetModes(HANDLE hDriver, ULONG cjSize, DEVMODEW *pdm);
203BOOL APIENTRY VBoxDispDrvOffset(SURFOBJ* pso, LONG x, LONG y, FLONG flReserved);
204
205VOID APIENTRY VBoxDispDrvNotify(SURFOBJ *pso, ULONG iType, PVOID pvData);
206
207#ifdef VBOX_WITH_DDRAW
208BOOL APIENTRY VBoxDispDrvGetDirectDrawInfo(DHPDEV dhpdev, DD_HALINFO *pHalInfo, DWORD *pdwNumHeaps,
209 VIDEOMEMORY *pvmList, DWORD *pdwNumFourCCCodes, DWORD *pdwFourCC);
210BOOL APIENTRY VBoxDispDrvEnableDirectDraw(DHPDEV dhpdev, DD_CALLBACKS *pCallBacks,
211 DD_SURFACECALLBACKS *pSurfaceCallBacks,
212 DD_PALETTECALLBACKS *pPaletteCallBacks);
213VOID APIENTRY VBoxDispDrvDisableDirectDraw(DHPDEV dhpdev);
214HBITMAP APIENTRY VBoxDispDrvDeriveSurface(DD_DIRECTDRAW_GLOBAL *pDirectDraw, DD_SURFACE_LOCAL *pSurface);
215#endif /*#ifdef VBOX_WITH_DDRAW*/
216
217/* -------------------- Internal helpers -------------------- */
218DECLINLINE(SURFOBJ) *getSurfObj(SURFOBJ *pso)
219{
220 if (pso)
221 {
222 PVBOXDISPDEV pDev = (PVBOXDISPDEV)pso->dhpdev;
223
224 if (pDev && pDev->surface.psoBitmap && pso->hsurf == pDev->surface.hSurface)
225 {
226 /* Convert the device PSO to the bitmap PSO which can be passed to Eng*. */
227 pso = pDev->surface.psoBitmap;
228 }
229 }
230
231 return pso;
232}
233
234#endif /* !GA_INCLUDED_SRC_WINNT_Graphics_Video_disp_xpdm_VBoxDisp_h */
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use