summaryrefslogtreecommitdiffstats
path: root/include/VBox/Graphics/VBoxVideoHost3D.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/VBox/Graphics/VBoxVideoHost3D.h')
-rw-r--r--include/VBox/Graphics/VBoxVideoHost3D.h212
1 files changed, 212 insertions, 0 deletions
diff --git a/include/VBox/Graphics/VBoxVideoHost3D.h b/include/VBox/Graphics/VBoxVideoHost3D.h
new file mode 100644
index 00000000..6cd74cf1
--- /dev/null
+++ b/include/VBox/Graphics/VBoxVideoHost3D.h
@@ -0,0 +1,212 @@
+/* $Id: VBoxVideoHost3D.h $ */
+/** @file
+ * VirtualBox 3D host inter-components interfaces
+ */
+
+/*
+ * Copyright (C) 2011-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+#ifndef VBOX_INCLUDED_Graphics_VBoxVideoHost3D_h
+#define VBOX_INCLUDED_Graphics_VBoxVideoHost3D_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <iprt/cdefs.h>
+#include "VBoxVideo.h"
+#include <VBox/hgcmsvc.h>
+#include <VBox/vmm/pdmifs.h>
+#include <iprt/list.h>
+
+/* screen update instance */
+typedef struct PDMIDISPLAYCONNECTOR *HVBOXCRCMDCLTSCR;
+struct VBVACMDHDR;
+
+typedef struct VBOXCMDVBVA_HDR *PVBOXCMDVBVA_HDR;
+
+typedef DECLCALLBACKPTR(void, PFNVBOXCRCMD_CLTSCR_UPDATE_BEGIN)(HVBOXCRCMDCLTSCR hClt, unsigned u32Screen);
+typedef DECLCALLBACKPTR(void, PFNVBOXCRCMD_CLTSCR_UPDATE_END)(HVBOXCRCMDCLTSCR hClt, unsigned uScreenId, int32_t x, int32_t y, uint32_t cx, uint32_t cy);
+typedef DECLCALLBACKPTR(void, PFNVBOXCRCMD_CLTSCR_UPDATE_PROCESS)(HVBOXCRCMDCLTSCR hClt, unsigned u32Screen,
+ struct VBVACMDHDR const RT_UNTRUSTED_VOLATILE_GUEST *pCmd,
+ size_t cbCmd);
+
+/*client callbacks to be used by the server
+ * when working in the CrCmd mode */
+typedef struct VBOXCRCMD_SVRENABLE_INFO
+{
+ HVBOXCRCMDCLTSCR hCltScr;
+ PFNVBOXCRCMD_CLTSCR_UPDATE_BEGIN pfnCltScrUpdateBegin;
+ PFNVBOXCRCMD_CLTSCR_UPDATE_PROCESS pfnCltScrUpdateProcess;
+ PFNVBOXCRCMD_CLTSCR_UPDATE_END pfnCltScrUpdateEnd;
+} VBOXCRCMD_SVRENABLE_INFO;
+
+typedef struct VBOXVDMAHOST * HVBOXCRCLIENT;
+struct VBOXCRCMDCTL_CALLOUT_LISTENTRY;
+typedef DECLCALLBACKPTR(void, PFNVBOXCRCMDCTL_CALLOUT_CB)(struct VBOXCRCMDCTL_CALLOUT_LISTENTRY *pEntry);
+
+#pragma pack(1)
+typedef struct VBOXCRCMDCTL_CALLOUT_LISTENTRY
+{
+ RTLISTNODE Node;
+ PFNVBOXCRCMDCTL_CALLOUT_CB pfnCb;
+} VBOXCRCMDCTL_CALLOUT_LISTENTRY;
+
+typedef struct VBOXCRCMDCTL_CALLOUT_LIST
+{
+ RTLISTANCHOR List;
+} VBOXCRCMDCTL_CALLOUT_LIST;
+#pragma pack()
+
+struct VBOXCRCMDCTL;
+
+typedef DECLCALLBACKPTR(int, PFNVBOXCRCLIENT_CALLOUT)(HVBOXCRCLIENT hClient, struct VBOXCRCMDCTL* pCmd, VBOXCRCMDCTL_CALLOUT_LISTENTRY *pEntry, PFNVBOXCRCMDCTL_CALLOUT_CB pfnCb);
+
+typedef struct VBOXCRCLIENT_INFO
+{
+ HVBOXCRCLIENT hClient;
+ PFNVBOXCRCLIENT_CALLOUT pfnCallout;
+} VBOXCRCLIENT_INFO;
+
+typedef void * HVBOXCRCMDSVR;
+
+/** enables the CrCmd interface, thus the hgcm interface gets disabled.
+ * all subsequent calls will be done in the thread Enable was done,
+ * until the Disable is called */
+typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_ENABLE)(HVBOXCRCMDSVR hSvr, VBOXCRCMD_SVRENABLE_INFO *pInfo);
+/** Opposite to Enable (see above) */
+typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_DISABLE)(HVBOXCRCMDSVR hSvr);
+/** process command */
+typedef DECLCALLBACKPTR(int8_t, PFNVBOXCRCMD_SVR_CMD)(HVBOXCRCMDSVR hSvr,
+ const VBOXCMDVBVA_HDR RT_UNTRUSTED_VOLATILE_GUEST *pCmd, uint32_t cbCmd);
+/** process host control */
+typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_HOSTCTL)(HVBOXCRCMDSVR hSvr, uint8_t *pCtl, uint32_t cbCmd);
+/** process guest control */
+typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_GUESTCTL)(HVBOXCRCMDSVR hSvr, uint8_t RT_UNTRUSTED_VOLATILE_GUEST *pCtl,
+ uint32_t cbCmd);
+/** screen resize */
+typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_RESIZE)(HVBOXCRCMDSVR hSvr, const struct VBVAINFOSCREEN *pScreen,
+ const uint32_t *pTargetMap);
+/** process SaveState */
+typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_SAVESTATE)(HVBOXCRCMDSVR hSvr, PSSMHANDLE pSSM);
+/** process LoadState */
+typedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_LOADSTATE)(HVBOXCRCMDSVR hSvr, PSSMHANDLE pSSM, uint32_t u32Version);
+
+
+typedef struct VBOXCRCMD_SVRINFO
+{
+ HVBOXCRCMDSVR hSvr;
+ PFNVBOXCRCMD_SVR_ENABLE pfnEnable;
+ PFNVBOXCRCMD_SVR_DISABLE pfnDisable;
+ PFNVBOXCRCMD_SVR_CMD pfnCmd;
+ PFNVBOXCRCMD_SVR_HOSTCTL pfnHostCtl;
+ PFNVBOXCRCMD_SVR_GUESTCTL pfnGuestCtl;
+ PFNVBOXCRCMD_SVR_RESIZE pfnResize;
+ PFNVBOXCRCMD_SVR_SAVESTATE pfnSaveState;
+ PFNVBOXCRCMD_SVR_LOADSTATE pfnLoadState;
+} VBOXCRCMD_SVRINFO;
+
+
+typedef struct VBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP
+{
+ VBOXVDMACMD_CHROMIUM_CTL Hdr;
+ union
+ {
+ void *pvVRamBase;
+ uint64_t uAlignment;
+ } RT_UNION_NM(u);
+ uint64_t cbVRam;
+ PPDMLED pLed;
+ VBOXCRCLIENT_INFO CrClientInfo;
+ /* out */
+ struct VBOXCRCMD_SVRINFO CrCmdServerInfo;
+} VBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP, *PVBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP;
+
+typedef enum
+{
+ VBOXCRCMDCTL_TYPE_HGCM = 1,
+ VBOXCRCMDCTL_TYPE_DISABLE,
+ VBOXCRCMDCTL_TYPE_ENABLE,
+ VBOXCRCMDCTL_TYPE_32bit = 0x7fffffff
+} VBOXCRCMDCTL_TYPE;
+
+#pragma pack(1)
+
+typedef struct VBOXCRCMDCTL
+{
+ VBOXCRCMDCTL_TYPE enmType;
+ uint32_t u32Function;
+ /* not to be used by clients */
+ VBOXCRCMDCTL_CALLOUT_LIST CalloutList;
+ union
+ {
+ PFNRT pfnInternal;
+ void *pvInternal;
+ } u;
+} VBOXCRCMDCTL;
+
+#define VBOXCRCMDCTL_IS_CALLOUT_AVAILABLE(_pCtl) (!!((_pCtl)->CalloutList.List.pNext))
+
+typedef struct VBOXCRCMDCTL_HGCM
+{
+ VBOXCRCMDCTL Hdr;
+ VBOXHGCMSVCPARM aParms[1];
+} VBOXCRCMDCTL_HGCM;
+#pragma pack()
+
+typedef struct VBOXVDMAHOST * HVBOXCRCMDCTL_REMAINING_HOST_COMMAND;
+
+typedef DECLCALLBACKPTR(uint8_t*, PFNVBOXCRCMDCTL_REMAINING_HOST_COMMAND)(HVBOXCRCMDCTL_REMAINING_HOST_COMMAND hClient, uint32_t *pcbCtl, int prevCmdRc);
+
+typedef struct VBOXCRCMDCTL_HGCMENABLE_DATA
+{
+ HVBOXCRCMDCTL_REMAINING_HOST_COMMAND hRHCmd;
+ PFNVBOXCRCMDCTL_REMAINING_HOST_COMMAND pfnRHCmd;
+} VBOXCRCMDCTL_HGCMENABLE_DATA;
+
+typedef struct VBOXVDMAHOST * HVBOXCRCMDCTL_NOTIFY_TERMINATING;
+
+typedef DECLCALLBACKPTR(int, PFNVBOXCRCMDCTL_NOTIFY_TERMINATING)(HVBOXCRCMDCTL_NOTIFY_TERMINATING hClient, VBOXCRCMDCTL_HGCMENABLE_DATA *pHgcmEnableData);
+
+typedef DECLCALLBACKPTR(void, PFNVBOXCRCMDCTL_NOTIFY_TERMINATING_DONE)(HVBOXCRCMDCTL_NOTIFY_TERMINATING hClient);
+
+typedef struct VBOXCRCMDCTL_HGCMDISABLE_DATA
+{
+ HVBOXCRCMDCTL_NOTIFY_TERMINATING hNotifyTerm;
+ PFNVBOXCRCMDCTL_NOTIFY_TERMINATING pfnNotifyTerm;
+ PFNVBOXCRCMDCTL_NOTIFY_TERMINATING_DONE pfnNotifyTermDone;
+} VBOXCRCMDCTL_HGCMDISABLE_DATA;
+
+#pragma pack(1)
+typedef struct VBOXCRCMDCTL_ENABLE
+{
+ VBOXCRCMDCTL Hdr;
+ VBOXCRCMDCTL_HGCMENABLE_DATA Data;
+} VBOXCRCMDCTL_ENABLE;
+
+typedef struct VBOXCRCMDCTL_DISABLE
+{
+ VBOXCRCMDCTL Hdr;
+ VBOXCRCMDCTL_HGCMDISABLE_DATA Data;
+} VBOXCRCMDCTL_DISABLE;
+#pragma pack()
+
+#endif /* !VBOX_INCLUDED_Graphics_VBoxVideoHost3D_h */
+