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