VirtualBox

source: vbox/trunk/include/VBox/Graphics/VBoxVideoGuest.h@ 87450

Last change on this file since 87450 was 85121, checked in by vboxsync, 4 years ago

iprt/cdefs.h: Refactored the typedef use of DECLCALLBACK as well as DECLCALLBACKMEMBER to wrap the whole expression, similar to the DECLR?CALLBACKMEMBER macros. This allows adding a throw() at the end when compiling with the VC++ compiler to indicate that the callbacks won't throw anything, so we can stop supressing the C5039 warning about passing functions that can potential throw C++ exceptions to extern C code that can't necessarily cope with such (unwind,++). Introduced a few _EX variations that allows specifying different/no calling convention too, as that's handy when dynamically resolving host APIs. Fixed numerous places missing DECLCALLBACK and such. Left two angry @todos regarding use of CreateThread. bugref:9794

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.0 KB
Line 
1/* $Id: VBoxVideoGuest.h 85121 2020-07-08 19:33:26Z vboxsync $ */
2/** @file
3 * VBox Host Guest Shared Memory Interface (HGSMI) - OS-independent guest structures.
4 */
5
6/*
7 * Copyright (C) 2006-2020 Oracle Corporation
8 *
9 * Permission is hereby granted, free of charge, to any person
10 * obtaining a copy of this software and associated documentation
11 * files (the "Software"), to deal in the Software without
12 * restriction, including without limitation the rights to use,
13 * copy, modify, merge, publish, distribute, sublicense, and/or sell
14 * copies of the Software, and to permit persons to whom the
15 * Software is furnished to do so, subject to the following
16 * conditions:
17 *
18 * The above copyright notice and this permission notice shall be
19 * included in all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
23 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
26 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
28 * OTHER DEALINGS IN THE SOFTWARE.
29 */
30
31#ifndef VBOX_INCLUDED_Graphics_VBoxVideoGuest_h
32#define VBOX_INCLUDED_Graphics_VBoxVideoGuest_h
33#ifndef RT_WITHOUT_PRAGMA_ONCE
34# pragma once
35#endif
36
37#include "VBoxVideoIPRT.h"
38#include "HGSMIBase.h"
39#include "VBoxVideo.h"
40
41RT_C_DECLS_BEGIN
42
43/**
44 * Structure grouping the context needed for sending graphics acceleration
45 * information to the host via VBVA. Each screen has its own VBVA buffer.
46 */
47typedef struct VBVABUFFERCONTEXT
48{
49 /** Offset of the buffer in the VRAM section for the screen */
50 uint32_t offVRAMBuffer;
51 /** Length of the buffer in bytes */
52 uint32_t cbBuffer;
53 /** This flag is set if we wrote to the buffer faster than the host could
54 * read it. */
55 bool fHwBufferOverflow;
56 /** The VBVA record that we are currently preparing for the host, NULL if
57 * none. */
58 struct VBVARECORD *pRecord;
59 /** Pointer to the VBVA buffer mapped into the current address space. Will
60 * be NULL if VBVA is not enabled. */
61 struct VBVABUFFER *pVBVA;
62} VBVABUFFERCONTEXT, *PVBVABUFFERCONTEXT;
63
64/** @name Base HGSMI APIs
65 * @{ */
66
67DECLHIDDEN(bool) VBoxHGSMIIsSupported(void);
68DECLHIDDEN(void) VBoxHGSMIGetBaseMappingInfo(uint32_t cbVRAM,
69 uint32_t *poffVRAMBaseMapping,
70 uint32_t *pcbMapping,
71 uint32_t *poffGuestHeapMemory,
72 uint32_t *pcbGuestHeapMemory,
73 uint32_t *poffHostFlags);
74DECLHIDDEN(int) VBoxHGSMIReportFlagsLocation(PHGSMIGUESTCOMMANDCONTEXT pCtx,
75 HGSMIOFFSET offLocation);
76DECLHIDDEN(int) VBoxHGSMISendCapsInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
77 uint32_t fCaps);
78DECLHIDDEN(void) VBoxHGSMIGetHostAreaMapping(PHGSMIGUESTCOMMANDCONTEXT pCtx,
79 uint32_t cbVRAM,
80 uint32_t offVRAMBaseMapping,
81 uint32_t *poffVRAMHostArea,
82 uint32_t *pcbHostArea);
83DECLHIDDEN(int) VBoxHGSMISendHostCtxInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
84 HGSMIOFFSET offVRAMFlagsLocation,
85 uint32_t fCaps,
86 uint32_t offVRAMHostArea,
87 uint32_t cbHostArea);
88DECLHIDDEN(int) VBoxQueryConfHGSMI(PHGSMIGUESTCOMMANDCONTEXT pCtx,
89 uint32_t u32Index, uint32_t *pulValue);
90DECLHIDDEN(int) VBoxQueryConfHGSMIDef(PHGSMIGUESTCOMMANDCONTEXT pCtx,
91 uint32_t u32Index, uint32_t u32DefValue, uint32_t *pulValue);
92DECLHIDDEN(int) VBoxHGSMIUpdatePointerShape(PHGSMIGUESTCOMMANDCONTEXT pCtx,
93 uint32_t fFlags,
94 uint32_t cHotX,
95 uint32_t cHotY,
96 uint32_t cWidth,
97 uint32_t cHeight,
98 uint8_t *pPixels,
99 uint32_t cbLength);
100DECLHIDDEN(int) VBoxHGSMICursorPosition(PHGSMIGUESTCOMMANDCONTEXT pCtx, bool fReportPosition, uint32_t x, uint32_t y,
101 uint32_t *pxHost, uint32_t *pyHost);
102
103/** @} */
104
105/** @name VBVA APIs
106 * @{ */
107DECLHIDDEN(bool) VBoxVBVAEnable(PVBVABUFFERCONTEXT pCtx,
108 PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx,
109 struct VBVABUFFER *pVBVA, int32_t cScreen);
110DECLHIDDEN(void) VBoxVBVADisable(PVBVABUFFERCONTEXT pCtx,
111 PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx,
112 int32_t cScreen);
113DECLHIDDEN(bool) VBoxVBVABufferBeginUpdate(PVBVABUFFERCONTEXT pCtx,
114 PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx);
115DECLHIDDEN(void) VBoxVBVABufferEndUpdate(PVBVABUFFERCONTEXT pCtx);
116DECLHIDDEN(bool) VBoxVBVAWrite(PVBVABUFFERCONTEXT pCtx,
117 PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx,
118 const void *pv, uint32_t cb);
119DECLHIDDEN(bool) VBoxVBVAOrderSupported(PVBVABUFFERCONTEXT pCtx, unsigned code);
120DECLHIDDEN(void) VBoxVBVASetupBufferContext(PVBVABUFFERCONTEXT pCtx,
121 uint32_t offVRAMBuffer,
122 uint32_t cbBuffer);
123
124/** @} */
125
126/** @name Modesetting APIs
127 * @{ */
128
129DECLHIDDEN(uint32_t) VBoxHGSMIGetMonitorCount(PHGSMIGUESTCOMMANDCONTEXT pCtx);
130DECLHIDDEN(bool) VBoxVGACfgAvailable(void);
131DECLHIDDEN(bool) VBoxVGACfgQuery(uint16_t u16Id, uint32_t *pu32Value, uint32_t u32DefValue);
132DECLHIDDEN(uint32_t) VBoxVideoGetVRAMSize(void);
133DECLHIDDEN(bool) VBoxVideoAnyWidthAllowed(void);
134DECLHIDDEN(uint16_t) VBoxHGSMIGetScreenFlags(PHGSMIGUESTCOMMANDCONTEXT pCtx);
135
136struct VBVAINFOVIEW;
137/**
138 * Callback funtion called from @a VBoxHGSMISendViewInfo to initialise
139 * the @a VBVAINFOVIEW structure for each screen.
140 *
141 * @returns iprt status code
142 * @param pvData context data for the callback, passed to @a
143 * VBoxHGSMISendViewInfo along with the callback
144 * @param pInfo array of @a VBVAINFOVIEW structures to be filled in
145 * @todo explicitly pass the array size
146 */
147typedef DECLCALLBACKTYPE(int, FNHGSMIFILLVIEWINFO,(void *pvData, struct VBVAINFOVIEW *pInfo, uint32_t cViews));
148/** Pointer to a FNHGSMIFILLVIEWINFO callback */
149typedef FNHGSMIFILLVIEWINFO *PFNHGSMIFILLVIEWINFO;
150
151DECLHIDDEN(int) VBoxHGSMISendViewInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
152 uint32_t u32Count,
153 PFNHGSMIFILLVIEWINFO pfnFill,
154 void *pvData);
155DECLHIDDEN(void) VBoxVideoSetModeRegisters(uint16_t cWidth, uint16_t cHeight,
156 uint16_t cVirtWidth, uint16_t cBPP,
157 uint16_t fFlags,
158 uint16_t cx, uint16_t cy);
159DECLHIDDEN(bool) VBoxVideoGetModeRegisters(uint16_t *pcWidth,
160 uint16_t *pcHeight,
161 uint16_t *pcVirtWidth,
162 uint16_t *pcBPP,
163 uint16_t *pfFlags);
164DECLHIDDEN(void) VBoxVideoDisableVBE(void);
165DECLHIDDEN(void) VBoxHGSMIProcessDisplayInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
166 uint32_t cDisplay,
167 int32_t cOriginX,
168 int32_t cOriginY,
169 uint32_t offStart,
170 uint32_t cbPitch,
171 uint32_t cWidth,
172 uint32_t cHeight,
173 uint16_t cBPP,
174 uint16_t fFlags);
175DECLHIDDEN(int) VBoxHGSMIUpdateInputMapping(PHGSMIGUESTCOMMANDCONTEXT pCtx, int32_t cOriginX, int32_t cOriginY,
176 uint32_t cWidth, uint32_t cHeight);
177DECLHIDDEN(int) VBoxHGSMIGetModeHints(PHGSMIGUESTCOMMANDCONTEXT pCtx,
178 unsigned cScreens, VBVAMODEHINT *paHints);
179
180/** @} */
181
182RT_C_DECLS_END
183
184#endif /* !VBOX_INCLUDED_Graphics_VBoxVideoGuest_h */
185
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette