cr_protocol.h revision 6e7c344fc7cdb580356704e8201207b394d367bb
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/* Copyright (c) 2001, Stanford University
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * All rights reserved.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync *
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * See the file LICENSE.txt for information on redistributing this software.
f0ab104f070bc7f569404826fea1828ed985638cvboxsync */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifndef CR_PROTOCOL_H
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define CR_PROTOCOL_H
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#include <iprt/cdefs.h>
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#ifdef __cplusplus
f0ab104f070bc7f569404826fea1828ed985638cvboxsyncextern "C" {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#endif
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/*For now guest is allowed to connect host opengl service if protocol version matches exactly*/
f0ab104f070bc7f569404826fea1828ed985638cvboxsync/*Note: that after any change to this file, or glapi_parser\apispec.txt version should be changed*/
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define CR_PROTOCOL_VERSION_MAJOR 4
f0ab104f070bc7f569404826fea1828ed985638cvboxsync#define CR_PROTOCOL_VERSION_MINOR 1
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef enum {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* first message types is 'wGL\001', so we can immediately
f0ab104f070bc7f569404826fea1828ed985638cvboxsync recognize bad message types */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_OPCODES = 0x77474c01,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_WRITEBACK,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_READBACK,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_READ_PIXELS,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_MULTI_BODY,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_MULTI_TAIL,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_FLOW_CONTROL,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_OOB,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_NEWCLIENT,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_GATHER,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_ERROR,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_CRUT,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CR_MESSAGE_REDIR_PTR
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} CRMessageType;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef union {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* pointers are usually 4 bytes, but on 64-bit machines (Alpha,
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * SGI-n64, etc.) they are 8 bytes. Pass network pointers around
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * as an opaque array of bytes, since the interpretation & size of
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * the pointer only matter to the machine which emitted the
f0ab104f070bc7f569404826fea1828ed985638cvboxsync * pointer (and will eventually receive the pointer back again) */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned int ptrAlign[2];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned char ptrSize[8];
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* hack to make this packet big */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync /* unsigned int junk[512]; */
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} CRNetworkPointer;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRMessageType type;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned int conn_id;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} CRMessageHeader;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct CRMessageOpcodes {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRMessageHeader header;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned int numOpcodes;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} CRMessageOpcodes;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct CRMessageRedirPtr {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRMessageHeader header;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRMessageHeader* pMessage;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} CRMessageRedirPtr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct CRMessageWriteback {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRMessageHeader header;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRNetworkPointer writeback_ptr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} CRMessageWriteback;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct CRMessageReadback {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRMessageHeader header;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRNetworkPointer writeback_ptr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRNetworkPointer readback_ptr;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} CRMessageReadback;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct CRMessageMulti {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRMessageHeader header;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} CRMessageMulti;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct CRMessageFlowControl {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRMessageHeader header;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned int credits;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} CRMessageFlowControl;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct CRMessageReadPixels {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRMessageHeader header;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int width, height;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned int bytes_per_row;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync unsigned int stride;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int alignment;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int skipRows;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int skipPixels;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int rowLength;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int format;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync int type;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRNetworkPointer pixels;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} CRMessageReadPixels;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync
f0ab104f070bc7f569404826fea1828ed985638cvboxsynctypedef struct CRMessageNewClient {
f0ab104f070bc7f569404826fea1828ed985638cvboxsync CRMessageHeader header;
f0ab104f070bc7f569404826fea1828ed985638cvboxsync} CRMessageNewClient;
typedef struct CRMessageGather {
CRMessageHeader header;
unsigned long offset;
unsigned long len;
} CRMessageGather;
typedef union {
CRMessageHeader header;
CRMessageOpcodes opcodes;
CRMessageRedirPtr redirptr;
CRMessageWriteback writeback;
CRMessageReadback readback;
CRMessageReadPixels readPixels;
CRMessageMulti multi;
CRMessageFlowControl flowControl;
CRMessageNewClient newclient;
CRMessageGather gather;
} CRMessage;
DECLEXPORT(void) crNetworkPointerWrite( CRNetworkPointer *dst, void *src );
#ifdef __cplusplus
}
#endif
#endif /* CR_PROTOCOL_H */