1*61046927SAndroid Build Coastguard Worker #ifndef __GLX_packsingle_h__ 2*61046927SAndroid Build Coastguard Worker #define __GLX_packsingle_h__ 3*61046927SAndroid Build Coastguard Worker 4*61046927SAndroid Build Coastguard Worker /* 5*61046927SAndroid Build Coastguard Worker * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) 6*61046927SAndroid Build Coastguard Worker * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. 7*61046927SAndroid Build Coastguard Worker * 8*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: SGI-B-2.0 9*61046927SAndroid Build Coastguard Worker */ 10*61046927SAndroid Build Coastguard Worker 11*61046927SAndroid Build Coastguard Worker #include "packrender.h" 12*61046927SAndroid Build Coastguard Worker 13*61046927SAndroid Build Coastguard Worker /* 14*61046927SAndroid Build Coastguard Worker ** The macros in this header convert wire protocol data types to the client 15*61046927SAndroid Build Coastguard Worker ** machine's native data types. The header is part of the porting layer of 16*61046927SAndroid Build Coastguard Worker ** the client library, and it is intended that hardware vendors will rewrite 17*61046927SAndroid Build Coastguard Worker ** this header to suit their own machines. 18*61046927SAndroid Build Coastguard Worker */ 19*61046927SAndroid Build Coastguard Worker 20*61046927SAndroid Build Coastguard Worker /* 21*61046927SAndroid Build Coastguard Worker ** Dummy define to make the GetReqExtra macro happy. The value is not 22*61046927SAndroid Build Coastguard Worker ** used, but instead the code in __GLX_SINGLE_BEGIN issues its own store 23*61046927SAndroid Build Coastguard Worker ** to req->reqType with the proper code (our extension code). 24*61046927SAndroid Build Coastguard Worker */ 25*61046927SAndroid Build Coastguard Worker #define X_GLXSingle 0 26*61046927SAndroid Build Coastguard Worker 27*61046927SAndroid Build Coastguard Worker /* Declare common variables used during a single command */ 28*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_DECLARE_VARIABLES() \ 29*61046927SAndroid Build Coastguard Worker struct glx_context *gc = __glXGetCurrentContext(); \ 30*61046927SAndroid Build Coastguard Worker GLubyte *pc, *pixelHeaderPC; \ 31*61046927SAndroid Build Coastguard Worker GLuint compsize, cmdlen; \ 32*61046927SAndroid Build Coastguard Worker Display *dpy = gc->currentDpy; \ 33*61046927SAndroid Build Coastguard Worker xGLXSingleReq *req 34*61046927SAndroid Build Coastguard Worker 35*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_LOAD_VARIABLES() \ 36*61046927SAndroid Build Coastguard Worker pc = gc->pc; \ 37*61046927SAndroid Build Coastguard Worker /* Muffle compilers */ \ 38*61046927SAndroid Build Coastguard Worker pixelHeaderPC = NULL; (void)pixelHeaderPC; \ 39*61046927SAndroid Build Coastguard Worker compsize = 0; (void)compsize; \ 40*61046927SAndroid Build Coastguard Worker cmdlen = 0; (void)cmdlen 41*61046927SAndroid Build Coastguard Worker 42*61046927SAndroid Build Coastguard Worker /* Start a single command */ 43*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_BEGIN(opcode,bytes) \ 44*61046927SAndroid Build Coastguard Worker if (dpy) { \ 45*61046927SAndroid Build Coastguard Worker (void) __glXFlushRenderBuffer(gc, pc); \ 46*61046927SAndroid Build Coastguard Worker LockDisplay(dpy); \ 47*61046927SAndroid Build Coastguard Worker GetReqExtra(GLXSingle,bytes,req); \ 48*61046927SAndroid Build Coastguard Worker req->reqType = gc->majorOpcode; \ 49*61046927SAndroid Build Coastguard Worker req->glxCode = opcode; \ 50*61046927SAndroid Build Coastguard Worker req->contextTag = gc->currentContextTag; \ 51*61046927SAndroid Build Coastguard Worker pc = ((GLubyte *)(req) + sz_xGLXSingleReq) 52*61046927SAndroid Build Coastguard Worker 53*61046927SAndroid Build Coastguard Worker /* End a single command */ 54*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_END() \ 55*61046927SAndroid Build Coastguard Worker UnlockDisplay(dpy); \ 56*61046927SAndroid Build Coastguard Worker SyncHandle(); \ 57*61046927SAndroid Build Coastguard Worker } 58*61046927SAndroid Build Coastguard Worker 59*61046927SAndroid Build Coastguard Worker /* Store data to sending for a single command */ 60*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_PUT_CHAR(offset,a) \ 61*61046927SAndroid Build Coastguard Worker *((INT8 *) (pc + offset)) = a 62*61046927SAndroid Build Coastguard Worker 63*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_PUT_SHORT(offset,a) \ 64*61046927SAndroid Build Coastguard Worker *((INT16 *) (pc + offset)) = a 65*61046927SAndroid Build Coastguard Worker 66*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_PUT_LONG(offset,a) \ 67*61046927SAndroid Build Coastguard Worker *((INT32 *) (pc + offset)) = a 68*61046927SAndroid Build Coastguard Worker 69*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_PUT_FLOAT(offset,a) \ 70*61046927SAndroid Build Coastguard Worker *((FLOAT32 *) (pc + offset)) = a 71*61046927SAndroid Build Coastguard Worker 72*61046927SAndroid Build Coastguard Worker /* Read support macros */ 73*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_READ_XREPLY() \ 74*61046927SAndroid Build Coastguard Worker (void) _XReply(dpy, (xReply*) &reply, 0, False) 75*61046927SAndroid Build Coastguard Worker 76*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_RETVAL(a,cast) \ 77*61046927SAndroid Build Coastguard Worker a = (cast) reply.retval 78*61046927SAndroid Build Coastguard Worker 79*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_SIZE(a) \ 80*61046927SAndroid Build Coastguard Worker a = (GLint) reply.size 81*61046927SAndroid Build Coastguard Worker 82*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_CHAR(p) \ 83*61046927SAndroid Build Coastguard Worker memcpy((p), &reply.pad3, 1); 84*61046927SAndroid Build Coastguard Worker 85*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_SHORT(p) \ 86*61046927SAndroid Build Coastguard Worker memcpy((p), &reply.pad3, 2); 87*61046927SAndroid Build Coastguard Worker 88*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_LONG(p) \ 89*61046927SAndroid Build Coastguard Worker memcpy((p), &reply.pad3, 4); 90*61046927SAndroid Build Coastguard Worker 91*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_FLOAT(p) \ 92*61046927SAndroid Build Coastguard Worker memcpy((p), &reply.pad3, 4); 93*61046927SAndroid Build Coastguard Worker 94*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_DOUBLE(p) \ 95*61046927SAndroid Build Coastguard Worker memcpy((p), &reply.pad3, 8); 96*61046927SAndroid Build Coastguard Worker 97*61046927SAndroid Build Coastguard Worker /* Get an array of typed data */ 98*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_VOID_ARRAY(a,alen) \ 99*61046927SAndroid Build Coastguard Worker { \ 100*61046927SAndroid Build Coastguard Worker GLint slop = alen*__GLX_SIZE_INT8 & 3; \ 101*61046927SAndroid Build Coastguard Worker _XRead(dpy,(char *)a,alen*__GLX_SIZE_INT8); \ 102*61046927SAndroid Build Coastguard Worker if (slop) _XEatData(dpy,4-slop); \ 103*61046927SAndroid Build Coastguard Worker } 104*61046927SAndroid Build Coastguard Worker 105*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_CHAR_ARRAY(a,alen) \ 106*61046927SAndroid Build Coastguard Worker { \ 107*61046927SAndroid Build Coastguard Worker GLint slop = alen*__GLX_SIZE_INT8 & 3; \ 108*61046927SAndroid Build Coastguard Worker _XRead(dpy,(char *)a,alen*__GLX_SIZE_INT8); \ 109*61046927SAndroid Build Coastguard Worker if (slop) _XEatData(dpy,4-slop); \ 110*61046927SAndroid Build Coastguard Worker } 111*61046927SAndroid Build Coastguard Worker 112*61046927SAndroid Build Coastguard Worker 113*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_SHORT_ARRAY(a,alen) \ 114*61046927SAndroid Build Coastguard Worker { \ 115*61046927SAndroid Build Coastguard Worker GLint slop = (alen*__GLX_SIZE_INT16) & 3; \ 116*61046927SAndroid Build Coastguard Worker _XRead(dpy,(char *)a,alen*__GLX_SIZE_INT16); \ 117*61046927SAndroid Build Coastguard Worker if (slop) _XEatData(dpy,4-slop); \ 118*61046927SAndroid Build Coastguard Worker } 119*61046927SAndroid Build Coastguard Worker 120*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_LONG_ARRAY(a,alen) \ 121*61046927SAndroid Build Coastguard Worker _XRead(dpy,(char *)a,alen*__GLX_SIZE_INT32); 122*61046927SAndroid Build Coastguard Worker 123*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_FLOAT_ARRAY(a,alen) \ 124*61046927SAndroid Build Coastguard Worker _XRead(dpy,(char *)a,alen*__GLX_SIZE_FLOAT32); 125*61046927SAndroid Build Coastguard Worker 126*61046927SAndroid Build Coastguard Worker #define __GLX_SINGLE_GET_DOUBLE_ARRAY(a,alen) \ 127*61046927SAndroid Build Coastguard Worker _XRead(dpy,(char *)a,alen*__GLX_SIZE_FLOAT64); 128*61046927SAndroid Build Coastguard Worker 129*61046927SAndroid Build Coastguard Worker #endif /* !__GLX_packsingle_h__ */ 130