e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * All rights reserved.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
2e6dc32bcc9c3a3e70c957764c033b1f402bc617vboxsync/*For now guest is allowed to connect host opengl service if protocol version matches exactly*/
2e6dc32bcc9c3a3e70c957764c033b1f402bc617vboxsync/*Note: that after any change to this file, or glapi_parser\apispec.txt version should be changed*/
a7ba3d5f31ca70d04a3933e570374e5ec5eff84avboxsync/* new TexPresent mechanism is available */
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync/* vbva command submission mechanism supported */
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync/* host supports Command Blocks, i.e. CR_CMDBLOCKBEGIN_OPCODE and CR_CMDBLOCKEND_OPCODE opcodes.
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync * Command Block can be used by guest to prevent clients from blocking each other.
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync * The Command Block allows multiple command buffers to be processed with one run.
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync * Command Block commands have to obey to the following rules:
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync * CR_CMDBLOCKBEGIN_OPCODE - must be the first command in the command buffer, specifying the command block start
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync * CR_CMDBLOCKEND_OPCODE - must be the last command in the command buffer, specifying the command block end
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync * If not placed accordingly, CR_CMDBLOCK** commands are ignored.
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync * Server copies the command block buffer commands to its internal storage
f3f69e0e8d6a713566e129aa3ab321b1e6b07fbcvboxsync * and processes them with one run when the command block end is signalled
716eca86fb214d6bf59f8837d35f5e812729940avboxsync/* GetAttribsLocations support */
66c14dd42d5cc3f7cc1a06db62c37e87602bcac0vboxsync/* flush command blocks for execution */
1e6f7d3f7b9ce2a0984a768221964905446a4c1evboxsync/* Notify guest if host reports minimal OpenGL capabilities. */
9a12c5b3449d176bbe9757d301a4c22fac6e1e2cvboxsync#define CR_VBOX_CAP_HOST_CAPS_NOT_SUFFICIENT 0x00000020
8cfe2efff2058bd07777056112155ea5353dcfbavboxsync#define CR_PRESENT_DEFINE_FLAG(_f) (1 << (CR_PRESENT_FLAGS_OFFSET + _f))
ea1cc8df95dba6fca9c36c94f565ef95c7802a36vboxsync#define CR_PRESENT_FLAG_CLEAR_RECTS CR_PRESENT_DEFINE_FLAG(0)
ea1cc8df95dba6fca9c36c94f565ef95c7802a36vboxsync#define CR_PRESENT_FLAG_TEX_NONINVERT_YCOORD CR_PRESENT_DEFINE_FLAG(1)
8cfe2efff2058bd07777056112155ea5353dcfbavboxsync#define CR_PRESENT_GET_SCREEN(_cfg) ((_cfg) & CR_PRESENT_SCREEN_MASK)
8cfe2efff2058bd07777056112155ea5353dcfbavboxsync#define CR_PRESENT_GET_FLAGS(_cfg) ((_cfg) & CR_PRESENT_FLAGS_MASK)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef enum {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* first message types is 'wGL\001', so we can immediately
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync recognize bad message types */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef union {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* pointers are usually 4 bytes, but on 64-bit machines (Alpha,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * SGI-n64, etc.) they are 8 bytes. Pass network pointers around
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * as an opaque array of bytes, since the interpretation & size of
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * the pointer only matter to the machine which emitted the
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * pointer (and will eventually receive the pointer back again) */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* hack to make this packet big */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* unsigned int junk[512]; */
f350d4fb2d12fd22c0905fe9c7a121499da7b52dvboxsync#if 0 //def DEBUG_misha
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync#define CRDBGPTR_SETZ(_p) crMemset((_p), 0, sizeof (CRNetworkPointer))
a36941c0c575a6116528b213066e4f08381feb69vboxsync CRASSERT(!crMemcmp((_p), &_ptr, sizeof (CRNetworkPointer))); \
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync } while (0)
a36941c0c575a6116528b213066e4f08381feb69vboxsync CRASSERT(crMemcmp((_p), &_ptr, sizeof (CRNetworkPointer))); \
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync } while (0)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync crDebug(_tStr "%d:0x%08x%08x", (_id), (_p)->ptrAlign[1], (_p)->ptrAlign[0]); \
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync } while (0)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync# define _CRDBGPTR_PRINT(_tStr, _id, _p) do { } while (0)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync#define CRDBGPTR_PRINTWB(_id, _p) _CRDBGPTR_PRINT("wbptr:", _id, _p)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync#define CRDBGPTR_PRINTRB(_id, _p) _CRDBGPTR_PRINT("rbptr:", _id, _p)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync# define CRVBOXHGSMI_CMDDATA_ASSERT_CONSISTENT(_pData) do { \
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync CRASSERT(!(_pData)->pWriteback == !(_pData)->pcbWriteback); \
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync CRASSERT(!(_pData)->pWriteback == !(_pData)->cbWriteback); \
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync } while (0)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync# define CRVBOXHGSMI_CMDDATA_ASSERT_CLEANED(_pData) do { \
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync } while (0)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync# define CRVBOXHGSMI_CMDDATA_ASSERT_ISSET(_pData) do { \
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync } while (0)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync# define CRVBOXHGSMI_CMDDATA_ASSERT_ISSETWB(_pData) do { \
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync } while (0)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync# define CRVBOXHGSMI_CMDDATA_ASSERT_CONSISTENT(_pData) do { } while (0)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync# define CRVBOXHGSMI_CMDDATA_ASSERT_CLEANED(_pData) do { } while (0)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync# define CRVBOXHGSMI_CMDDATA_ASSERT_ISSET(_pData) do { } while (0)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync# define CRVBOXHGSMI_CMDDATA_ASSERT_ISSETWB(_pData) do { } while (0)
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync#define CRVBOXHGSMI_CMDDATA_IS_HGSMICMD(_pData) (!!(_pData)->fHgsmiCmd)
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync#define CRVBOXHGSMI_CMDDATA_IS_SET(_pData) (!!(_pData)->pvCmd)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync#define CRVBOXHGSMI_CMDDATA_IS_SETWB(_pData) (!!(_pData)->pWriteback)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync crMemset(_pData, 0, sizeof (CRVBOXHGSMI_CMDDATA)); \
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync } while (0)
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync#define CRVBOXHGSMI_CMDDATA_SET(_pData, _pCmd, _pHdr, _fHgsmiCmd) do { \
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync } while (0)
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync#define CRVBOXHGSMI_CMDDATA_SETWB(_pData, _pCmd, _pHdr, _pWb, _cbWb, _pcbWb, _fHgsmiCmd) do { \
cb0578a5309e1fc264e5a4acc30543bea075be43vboxsync CRVBOXHGSMI_CMDDATA_SET(_pData, _pCmd, _pHdr, _fHgsmiCmd); \
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync } while (0)
b0d3e712c0bf759a686c718a55896f19804cfa75vboxsync } while (0)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef union {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crNetworkPointerWrite( CRNetworkPointer *dst, void *src );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* CR_PROTOCOL_H */