diff options
Diffstat (limited to 'src/VBox/GuestHost/OpenGL/include/cr_protocol.h')
| -rw-r--r-- | src/VBox/GuestHost/OpenGL/include/cr_protocol.h | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/src/VBox/GuestHost/OpenGL/include/cr_protocol.h b/src/VBox/GuestHost/OpenGL/include/cr_protocol.h index 5e24f207..1bf785ba 100644 --- a/src/VBox/GuestHost/OpenGL/include/cr_protocol.h +++ b/src/VBox/GuestHost/OpenGL/include/cr_protocol.h @@ -7,6 +7,7 @@ #ifndef CR_PROTOCOL_H #define CR_PROTOCOL_H +#include <iprt/types.h> #include <iprt/cdefs.h> #ifdef DEBUG_misha #include "cr_error.h" @@ -21,6 +22,23 @@ extern "C" { #define CR_PROTOCOL_VERSION_MAJOR 9 #define CR_PROTOCOL_VERSION_MINOR 1 +/* new TexPresent mechanism is available */ +#define CR_VBOX_CAP_TEX_PRESENT 0x00000001 +/* vbva command submission mechanism supported */ +#define CR_VBOX_CAP_CMDVBVA 0x00000002 + + +#define CR_PRESENT_SCREEN_MASK 0xffff +#define CR_PRESENT_FLAGS_OFFSET 16 +#define CR_PRESENT_FLAGS_MASK 0xffff0000 +#define CR_PRESENT_DEFINE_FLAG(_f) (1 << (CR_PRESENT_FLAGS_OFFSET + _f)) + +#define CR_PRESENT_FLAG_CLEAR_RECTS CR_PRESENT_DEFINE_FLAG(0) +#define CR_PRESENT_FLAG_TEX_NONINVERT_YCOORD CR_PRESENT_DEFINE_FLAG(1) + +#define CR_PRESENT_GET_SCREEN(_cfg) ((_cfg) & CR_PRESENT_SCREEN_MASK) +#define CR_PRESENT_GET_FLAGS(_cfg) ((_cfg) & CR_PRESENT_FLAGS_MASK) + typedef enum { /* first message types is 'wGL\001', so we can immediately recognize bad message types */ @@ -51,7 +69,7 @@ typedef union { /* unsigned int junk[512]; */ } CRNetworkPointer; -#ifdef DEBUG_misha +#if 0 //def DEBUG_misha #define CRDBGPTR_SETZ(_p) crMemset((_p), 0, sizeof (CRNetworkPointer)) #define CRDBGPTR_CHECKZ(_p) do { \ CRNetworkPointer _ptr = {0}; \ @@ -80,26 +98,32 @@ typedef union { #ifdef VBOX_WITH_CRHGSMI typedef struct CRVBOXHGSMI_CMDDATA { - struct VBOXVDMACMD_CHROMIUM_CMD *pCmd; + union + { + struct VBOXVDMACMD_CHROMIUM_CMD *pHgsmiCmd; + struct VBOXCMDVBVA_CRCMD_CMD *pVbvaCmd; + void *pvCmd; + }; int *pCmdRc; char *pWriteback; unsigned int *pcbWriteback; unsigned int cbWriteback; + bool fHgsmiCmd; } CRVBOXHGSMI_CMDDATA, *PCRVBOXHGSMI_CMDDATA; #ifdef DEBUG # define CRVBOXHGSMI_CMDDATA_ASSERT_CONSISTENT(_pData) do { \ - CRASSERT(!(_pData)->pCmd == !(_pData)->pCmdRc); \ + CRASSERT(!(_pData)->pvCmd == !(_pData)->pCmdRc); \ CRASSERT(!(_pData)->pWriteback == !(_pData)->pcbWriteback); \ CRASSERT(!(_pData)->pWriteback == !(_pData)->cbWriteback); \ if ((_pData)->pWriteback) \ { \ - CRASSERT((_pData)->pCmd); \ + CRASSERT((_pData)->pvCmd); \ } \ } while (0) # define CRVBOXHGSMI_CMDDATA_ASSERT_CLEANED(_pData) do { \ - CRASSERT(!(_pData)->pCmd); \ + CRASSERT(!(_pData)->pvCmd); \ CRASSERT(!(_pData)->pCmdRc); \ CRASSERT(!(_pData)->pWriteback); \ CRASSERT(!(_pData)->pcbWriteback); \ @@ -122,7 +146,8 @@ typedef struct CRVBOXHGSMI_CMDDATA { # define CRVBOXHGSMI_CMDDATA_ASSERT_ISSETWB(_pData) do { } while (0) #endif -#define CRVBOXHGSMI_CMDDATA_IS_SET(_pData) (!!(_pData)->pCmd) +#define CRVBOXHGSMI_CMDDATA_IS_HGSMICMD(_pData) (!!(_pData)->fHgsmiCmd) +#define CRVBOXHGSMI_CMDDATA_IS_SET(_pData) (!!(_pData)->pvCmd) #define CRVBOXHGSMI_CMDDATA_IS_SETWB(_pData) (!!(_pData)->pWriteback) #define CRVBOXHGSMI_CMDDATA_CLEANUP(_pData) do { \ @@ -131,15 +156,16 @@ typedef struct CRVBOXHGSMI_CMDDATA { CRVBOXHGSMI_CMDDATA_ASSERT_CONSISTENT(_pData); \ } while (0) -#define CRVBOXHGSMI_CMDDATA_SET(_pData, _pCmd, _pHdr) do { \ +#define CRVBOXHGSMI_CMDDATA_SET(_pData, _pCmd, _pHdr, _fHgsmiCmd) do { \ CRVBOXHGSMI_CMDDATA_ASSERT_CLEANED(_pData); \ - (_pData)->pCmd = (_pCmd); \ + (_pData)->pvCmd = (_pCmd); \ (_pData)->pCmdRc = &(_pHdr)->result; \ + (_pData)->fHgsmiCmd = (_fHgsmiCmd); \ CRVBOXHGSMI_CMDDATA_ASSERT_CONSISTENT(_pData); \ } while (0) -#define CRVBOXHGSMI_CMDDATA_SETWB(_pData, _pCmd, _pHdr, _pWb, _cbWb, _pcbWb) do { \ - CRVBOXHGSMI_CMDDATA_SET(_pData, _pCmd, _pHdr); \ +#define CRVBOXHGSMI_CMDDATA_SETWB(_pData, _pCmd, _pHdr, _pWb, _cbWb, _pcbWb, _fHgsmiCmd) do { \ + CRVBOXHGSMI_CMDDATA_SET(_pData, _pCmd, _pHdr, _fHgsmiCmd); \ (_pData)->pWriteback = (_pWb); \ (_pData)->pcbWriteback = (_pcbWb); \ (_pData)->cbWriteback = (_cbWb); \ |
