VirtualBox

source: vbox/trunk/include/VBox/VBoxVideoHost3D.h@ 52664

Last change on this file since 52664 was 52429, checked in by vboxsync, 10 years ago

crOpenGL: 1. osx: do everything we can do in the main thread 2. bugfixes

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.8 KB
Line 
1/** @file
2 *
3 * VirtualBox 3D host inter-components interfaces
4 */
5
6/*
7 * Copyright (C) 2011-2012 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 */
26#ifndef ___VBox_VBoxVideoHost3D_h
27#define ___VBox_VBoxVideoHost3D_h
28#include <iprt/cdefs.h>
29#include <VBox/VBoxVideo.h>
30#include <VBox/hgcmsvc.h>
31#include <VBox/vmm/pdmifs.h>
32#include <iprt/list.h>
33
34/* screen update instance */
35typedef struct PDMIDISPLAYCONNECTOR *HVBOXCRCMDCLTSCR;
36struct VBVACMDHDR;
37
38typedef struct VBOXCMDVBVA_HDR *PVBOXCMDVBVA_HDR;
39
40typedef DECLCALLBACKPTR(void, PFNVBOXCRCMD_CLTSCR_UPDATE_BEGIN)(HVBOXCRCMDCLTSCR hClt, unsigned u32Screen);
41typedef DECLCALLBACKPTR(void, PFNVBOXCRCMD_CLTSCR_UPDATE_END)(HVBOXCRCMDCLTSCR hClt, unsigned uScreenId, int32_t x, int32_t y, uint32_t cx, uint32_t cy);
42typedef DECLCALLBACKPTR(void, PFNVBOXCRCMD_CLTSCR_UPDATE_PROCESS)(HVBOXCRCMDCLTSCR hClt, unsigned u32Screen, struct VBVACMDHDR *pCmd, size_t cbCmd);
43
44/*client callbacks to be used by the server
45 * when working in the CrCmd mode */
46typedef struct VBOXCRCMD_SVRENABLE_INFO
47{
48 HVBOXCRCMDCLTSCR hCltScr;
49 PFNVBOXCRCMD_CLTSCR_UPDATE_BEGIN pfnCltScrUpdateBegin;
50 PFNVBOXCRCMD_CLTSCR_UPDATE_PROCESS pfnCltScrUpdateProcess;
51 PFNVBOXCRCMD_CLTSCR_UPDATE_END pfnCltScrUpdateEnd;
52} VBOXCRCMD_SVRENABLE_INFO;
53
54typedef struct VBOXVDMAHOST * HVBOXCRCLIENT;
55struct VBOXCRCMDCTL_CALLOUT_LISTENTRY;
56typedef DECLCALLBACKPTR(void, PFNVBOXCRCMDCTL_CALLOUT_CB)(struct VBOXCRCMDCTL_CALLOUT_LISTENTRY *pEntry);
57
58#pragma pack(1)
59typedef struct VBOXCRCMDCTL_CALLOUT_LISTENTRY
60{
61 RTLISTNODE Node;
62 PFNVBOXCRCMDCTL_CALLOUT_CB pfnCb;
63} VBOXCRCMDCTL_CALLOUT_LISTENTRY;
64
65typedef struct VBOXCRCMDCTL_CALLOUT_LIST
66{
67 RTLISTANCHOR List;
68} VBOXCRCMDCTL_CALLOUT_LIST;
69#pragma pack()
70
71struct VBOXCRCMDCTL;
72
73typedef DECLCALLBACKPTR(int, PFNVBOXCRCLIENT_CALLOUT)(HVBOXCRCLIENT hClient, struct VBOXCRCMDCTL* pCmd, VBOXCRCMDCTL_CALLOUT_LISTENTRY *pEntry, PFNVBOXCRCMDCTL_CALLOUT_CB pfnCb);
74
75typedef struct VBOXCRCLIENT_INFO
76{
77 HVBOXCRCLIENT hClient;
78 PFNVBOXCRCLIENT_CALLOUT pfnCallout;
79} VBOXCRCLIENT_INFO;
80
81typedef void * HVBOXCRCMDSVR;
82
83/* enables the CrCmd interface, thus the hgcm interface gets disabled.
84 * all subsequent calls will be done in the thread Enable was done,
85 * until the Disable is called */
86typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_ENABLE)(HVBOXCRCMDSVR hSvr, VBOXCRCMD_SVRENABLE_INFO *pInfo);
87/* Opposite to Enable (see above) */
88typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_DISABLE)(HVBOXCRCMDSVR hSvr);
89/* process command */
90typedef DECLCALLBACKPTR(int8_t, PFNVBOXCRCMD_SVR_CMD)(HVBOXCRCMDSVR hSvr, const VBOXCMDVBVA_HDR *pCmd, uint32_t cbCmd);
91/* process host control */
92typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_HOSTCTL)(HVBOXCRCMDSVR hSvr, uint8_t* pCtl, uint32_t cbCmd);
93/* process guest control */
94typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_GUESTCTL)(HVBOXCRCMDSVR hSvr, uint8_t* pCtl, uint32_t cbCmd);
95/* screen resize */
96typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_RESIZE)(HVBOXCRCMDSVR hSvr, const struct VBVAINFOSCREEN *pScreen, const uint32_t *pTargetMap);
97/* process SaveState */
98typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_SAVESTATE)(HVBOXCRCMDSVR hSvr, PSSMHANDLE pSSM);
99/* process LoadState */
100typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_LOADSTATE)(HVBOXCRCMDSVR hSvr, PSSMHANDLE pSSM, uint32_t u32Version);
101
102
103typedef struct VBOXCRCMD_SVRINFO
104{
105 HVBOXCRCMDSVR hSvr;
106 PFNVBOXCRCMD_SVR_ENABLE pfnEnable;
107 PFNVBOXCRCMD_SVR_DISABLE pfnDisable;
108 PFNVBOXCRCMD_SVR_CMD pfnCmd;
109 PFNVBOXCRCMD_SVR_HOSTCTL pfnHostCtl;
110 PFNVBOXCRCMD_SVR_GUESTCTL pfnGuestCtl;
111 PFNVBOXCRCMD_SVR_RESIZE pfnResize;
112 PFNVBOXCRCMD_SVR_SAVESTATE pfnSaveState;
113 PFNVBOXCRCMD_SVR_LOADSTATE pfnLoadState;
114} VBOXCRCMD_SVRINFO;
115
116
117typedef struct VBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP
118{
119 VBOXVDMACMD_CHROMIUM_CTL Hdr;
120 union
121 {
122 void *pvVRamBase;
123 uint64_t uAlignment;
124 };
125 uint64_t cbVRam;
126 PPDMLED pLed;
127 VBOXCRCLIENT_INFO CrClientInfo;
128 /* out */
129 struct VBOXCRCMD_SVRINFO CrCmdServerInfo;
130} VBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP, *PVBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP;
131
132typedef enum
133{
134 VBOXCRCMDCTL_TYPE_HGCM = 1,
135 VBOXCRCMDCTL_TYPE_DISABLE,
136 VBOXCRCMDCTL_TYPE_ENABLE,
137 VBOXCRCMDCTL_TYPE_32bit = 0x7fffffff
138} VBOXCRCMDCTL_TYPE;
139
140#pragma pack(1)
141
142typedef struct VBOXCRCMDCTL
143{
144 VBOXCRCMDCTL_TYPE enmType;
145 uint32_t u32Function;
146 /* not to be used by clients */
147 VBOXCRCMDCTL_CALLOUT_LIST CalloutList;
148 union
149 {
150 void(*pfnInternal)();
151 void* pvInternal;
152 } u;
153} VBOXCRCMDCTL;
154
155#define VBOXCRCMDCTL_IS_CALLOUT_AVAILABLE(_pCtl) (!!((_pCtl)->CalloutList.List.pNext))
156
157typedef struct VBOXCRCMDCTL_HGCM
158{
159 VBOXCRCMDCTL Hdr;
160 VBOXHGCMSVCPARM aParms[1];
161} VBOXCRCMDCTL_HGCM;
162#pragma pack()
163
164typedef struct VBOXVDMAHOST * HVBOXCRCMDCTL_REMAINING_HOST_COMMAND;
165
166typedef DECLCALLBACKPTR(uint8_t*, PFNVBOXCRCMDCTL_REMAINING_HOST_COMMAND)(HVBOXCRCMDCTL_REMAINING_HOST_COMMAND hClient, uint32_t *pcbCtl, int prevCmdRc);
167
168typedef struct VBOXCRCMDCTL_HGCMENABLE_DATA
169{
170 HVBOXCRCMDCTL_REMAINING_HOST_COMMAND hRHCmd;
171 PFNVBOXCRCMDCTL_REMAINING_HOST_COMMAND pfnRHCmd;
172} VBOXCRCMDCTL_HGCMENABLE_DATA;
173
174typedef struct VBOXVDMAHOST * HVBOXCRCMDCTL_NOTIFY_TERMINATING;
175
176typedef DECLCALLBACKPTR(int, PFNVBOXCRCMDCTL_NOTIFY_TERMINATING)(HVBOXCRCMDCTL_NOTIFY_TERMINATING hClient, VBOXCRCMDCTL_HGCMENABLE_DATA *pHgcmEnableData);
177
178typedef DECLCALLBACKPTR(void, PFNVBOXCRCMDCTL_NOTIFY_TERMINATING_DONE)(HVBOXCRCMDCTL_NOTIFY_TERMINATING hClient);
179
180typedef struct VBOXCRCMDCTL_HGCMDISABLE_DATA
181{
182 HVBOXCRCMDCTL_NOTIFY_TERMINATING hNotifyTerm;
183 PFNVBOXCRCMDCTL_NOTIFY_TERMINATING pfnNotifyTerm;
184 PFNVBOXCRCMDCTL_NOTIFY_TERMINATING_DONE pfnNotifyTermDone;
185} VBOXCRCMDCTL_HGCMDISABLE_DATA;
186
187#pragma pack(1)
188typedef struct VBOXCRCMDCTL_ENABLE
189{
190 VBOXCRCMDCTL Hdr;
191 VBOXCRCMDCTL_HGCMENABLE_DATA Data;
192} VBOXCRCMDCTL_ENABLE;
193
194typedef struct VBOXCRCMDCTL_DISABLE
195{
196 VBOXCRCMDCTL Hdr;
197 VBOXCRCMDCTL_HGCMDISABLE_DATA Data;
198} VBOXCRCMDCTL_DISABLE;
199#pragma pack()
200
201#endif /*#ifndef ___VBox_VBoxVideoHost3D_h*/
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle
ContactPrivacy/Do Not Sell My InfoTerms of Use