117ca54c3Smrg/*
217ca54c3Smrg * Copyright © 2008 Red Hat, Inc.
317ca54c3Smrg *
417ca54c3Smrg * Permission is hereby granted, free of charge, to any person obtaining a
517ca54c3Smrg * copy of this software and associated documentation files (the "Soft-
617ca54c3Smrg * ware"), to deal in the Software without restriction, including without
717ca54c3Smrg * limitation the rights to use, copy, modify, merge, publish, distribute,
817ca54c3Smrg * and/or sell copies of the Software, and to permit persons to whom the
917ca54c3Smrg * Software is furnished to do so, provided that the above copyright
1017ca54c3Smrg * notice(s) and this permission notice appear in all copies of the Soft-
1117ca54c3Smrg * ware and that both the above copyright notice(s) and this permission
1217ca54c3Smrg * notice appear in supporting documentation.
1317ca54c3Smrg *
1417ca54c3Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
1517ca54c3Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
1617ca54c3Smrg * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY
1717ca54c3Smrg * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
1817ca54c3Smrg * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE-
1917ca54c3Smrg * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
2017ca54c3Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
2117ca54c3Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR-
2217ca54c3Smrg * MANCE OF THIS SOFTWARE.
2317ca54c3Smrg *
2417ca54c3Smrg * Except as contained in this notice, the name of a copyright holder shall
2517ca54c3Smrg * not be used in advertising or otherwise to promote the sale, use or
2617ca54c3Smrg * other dealings in this Software without prior written authorization of
2717ca54c3Smrg * the copyright holder.
2817ca54c3Smrg *
2917ca54c3Smrg * Authors:
3017ca54c3Smrg *   Kristian Høgsberg (krh@redhat.com)
3117ca54c3Smrg */
3217ca54c3Smrg
3317ca54c3Smrg#ifndef _DRI2_PROTO_H_
3417ca54c3Smrg#define _DRI2_PROTO_H_
3517ca54c3Smrg
3617ca54c3Smrg#define DRI2_NAME			"DRI2"
3717ca54c3Smrg#define DRI2_MAJOR			1
3817ca54c3Smrg#define DRI2_MINOR			4
3917ca54c3Smrg
4017ca54c3Smrg#define DRI2NumberErrors		0
4117ca54c3Smrg#define DRI2NumberEvents		2
4217ca54c3Smrg#define DRI2NumberRequests		14
4317ca54c3Smrg
4417ca54c3Smrg#define X_DRI2QueryVersion		0
4517ca54c3Smrg#define X_DRI2Connect			1
4617ca54c3Smrg#define X_DRI2Authenticate		2
4717ca54c3Smrg#define X_DRI2CreateDrawable		3
4817ca54c3Smrg#define X_DRI2DestroyDrawable		4
4917ca54c3Smrg#define X_DRI2GetBuffers		5
5017ca54c3Smrg#define X_DRI2CopyRegion		6
5117ca54c3Smrg#define X_DRI2GetBuffersWithFormat	7
5217ca54c3Smrg#define X_DRI2SwapBuffers		8
5317ca54c3Smrg#define X_DRI2GetMSC			9
5417ca54c3Smrg#define X_DRI2WaitMSC			10
5517ca54c3Smrg#define X_DRI2WaitSBC			11
5617ca54c3Smrg#define X_DRI2SwapInterval		12
5717ca54c3Smrg#define X_DRI2GetParam			13
5817ca54c3Smrg
5917ca54c3Smrg/*
6017ca54c3Smrg * Events
6117ca54c3Smrg */
6217ca54c3Smrg#define DRI2_BufferSwapComplete	0
6317ca54c3Smrg#define DRI2_InvalidateBuffers	1
6417ca54c3Smrg
6517ca54c3Smrgtypedef struct {
66ea1d6981Smrg    CARD32  attachment;
67ea1d6981Smrg    CARD32  name;
68ea1d6981Smrg    CARD32  pitch;
69ea1d6981Smrg    CARD32  cpp;
70ea1d6981Smrg    CARD32  flags;
7117ca54c3Smrg} xDRI2Buffer;
7217ca54c3Smrg
7317ca54c3Smrgtypedef struct {
7417ca54c3Smrg    CARD8   reqType;
7517ca54c3Smrg    CARD8   dri2ReqType;
76ea1d6981Smrg    CARD16  length;
77ea1d6981Smrg    CARD32  majorVersion;
78ea1d6981Smrg    CARD32  minorVersion;
7917ca54c3Smrg} xDRI2QueryVersionReq;
8017ca54c3Smrg#define sz_xDRI2QueryVersionReq   12
8117ca54c3Smrg
8217ca54c3Smrgtypedef struct {
8317ca54c3Smrg    BYTE    type;   /* X_Reply */
8417ca54c3Smrg    BYTE    pad1;
85ea1d6981Smrg    CARD16  sequenceNumber;
86ea1d6981Smrg    CARD32  length;
87ea1d6981Smrg    CARD32  majorVersion;
88ea1d6981Smrg    CARD32  minorVersion;
89ea1d6981Smrg    CARD32  pad2;
90ea1d6981Smrg    CARD32  pad3;
91ea1d6981Smrg    CARD32  pad4;
92ea1d6981Smrg    CARD32  pad5;
9317ca54c3Smrg} xDRI2QueryVersionReply;
9417ca54c3Smrg#define sz_xDRI2QueryVersionReply	32
9517ca54c3Smrg
9617ca54c3Smrgtypedef struct {
9717ca54c3Smrg    CARD8   reqType;
9817ca54c3Smrg    CARD8   dri2ReqType;
99ea1d6981Smrg    CARD16  length;
100ea1d6981Smrg    CARD32  window;
101ea1d6981Smrg    CARD32  driverType;
10217ca54c3Smrg} xDRI2ConnectReq;
10317ca54c3Smrg#define sz_xDRI2ConnectReq	12
10417ca54c3Smrg
10517ca54c3Smrgtypedef struct {
10617ca54c3Smrg    BYTE    type;   /* X_Reply */
10717ca54c3Smrg    BYTE    pad1;
108ea1d6981Smrg    CARD16  sequenceNumber;
109ea1d6981Smrg    CARD32  length;
110ea1d6981Smrg    CARD32  driverNameLength;
111ea1d6981Smrg    CARD32  deviceNameLength;
112ea1d6981Smrg    CARD32  pad2;
113ea1d6981Smrg    CARD32  pad3;
114ea1d6981Smrg    CARD32  pad4;
115ea1d6981Smrg    CARD32  pad5;
11617ca54c3Smrg} xDRI2ConnectReply;
11717ca54c3Smrg#define sz_xDRI2ConnectReply	32
11817ca54c3Smrg
11917ca54c3Smrgtypedef struct {
12017ca54c3Smrg    CARD8   reqType;
12117ca54c3Smrg    CARD8   dri2ReqType;
122ea1d6981Smrg    CARD16  length;
123ea1d6981Smrg    CARD32  window;
124ea1d6981Smrg    CARD32  magic;
12517ca54c3Smrg} xDRI2AuthenticateReq;
12617ca54c3Smrg#define sz_xDRI2AuthenticateReq   12
12717ca54c3Smrg
12817ca54c3Smrgtypedef struct {
12917ca54c3Smrg    BYTE    type;   /* X_Reply */
13017ca54c3Smrg    BYTE    pad1;
131ea1d6981Smrg    CARD16  sequenceNumber;
132ea1d6981Smrg    CARD32  length;
133ea1d6981Smrg    CARD32  authenticated;
134ea1d6981Smrg    CARD32  pad2;
135ea1d6981Smrg    CARD32  pad3;
136ea1d6981Smrg    CARD32  pad4;
137ea1d6981Smrg    CARD32  pad5;
138ea1d6981Smrg    CARD32  pad6;
13917ca54c3Smrg} xDRI2AuthenticateReply;
14017ca54c3Smrg#define sz_xDRI2AuthenticateReply	32
14117ca54c3Smrg
14217ca54c3Smrgtypedef struct {
14317ca54c3Smrg    CARD8   reqType;
14417ca54c3Smrg    CARD8   dri2ReqType;
145ea1d6981Smrg    CARD16  length;
146ea1d6981Smrg    CARD32  drawable;
14717ca54c3Smrg} xDRI2CreateDrawableReq;
14817ca54c3Smrg#define sz_xDRI2CreateDrawableReq   8
14917ca54c3Smrg
15017ca54c3Smrgtypedef struct {
15117ca54c3Smrg    CARD8   reqType;
15217ca54c3Smrg    CARD8   dri2ReqType;
153ea1d6981Smrg    CARD16  length;
154ea1d6981Smrg    CARD32  drawable;
15517ca54c3Smrg} xDRI2DestroyDrawableReq;
15617ca54c3Smrg#define sz_xDRI2DestroyDrawableReq   8
15717ca54c3Smrg
15817ca54c3Smrgtypedef struct {
15917ca54c3Smrg    CARD8   reqType;
16017ca54c3Smrg    CARD8   dri2ReqType;
161ea1d6981Smrg    CARD16  length;
162ea1d6981Smrg    CARD32  drawable;
163ea1d6981Smrg    CARD32  count;
16417ca54c3Smrg} xDRI2GetBuffersReq;
16517ca54c3Smrg#define sz_xDRI2GetBuffersReq   12
16617ca54c3Smrg
16717ca54c3Smrgtypedef struct {
16817ca54c3Smrg    BYTE    type;   /* X_Reply */
16917ca54c3Smrg    BYTE    pad1;
170ea1d6981Smrg    CARD16  sequenceNumber;
171ea1d6981Smrg    CARD32  length;
172ea1d6981Smrg    CARD32  width;
173ea1d6981Smrg    CARD32  height;
174ea1d6981Smrg    CARD32  count;
175ea1d6981Smrg    CARD32  pad2;
176ea1d6981Smrg    CARD32  pad3;
177ea1d6981Smrg    CARD32  pad4;
17817ca54c3Smrg} xDRI2GetBuffersReply;
17917ca54c3Smrg#define sz_xDRI2GetBuffersReply	32
18017ca54c3Smrg
18117ca54c3Smrgtypedef struct {
18217ca54c3Smrg    CARD8   reqType;
18317ca54c3Smrg    CARD8   dri2ReqType;
184ea1d6981Smrg    CARD16  length;
185ea1d6981Smrg    CARD32  drawable;
186ea1d6981Smrg    CARD32  region;
187ea1d6981Smrg    CARD32  dest;
188ea1d6981Smrg    CARD32  src;
18917ca54c3Smrg} xDRI2CopyRegionReq;
19017ca54c3Smrg#define sz_xDRI2CopyRegionReq   20
19117ca54c3Smrg
19217ca54c3Smrgtypedef struct {
19317ca54c3Smrg    BYTE    type;   /* X_Reply */
19417ca54c3Smrg    BYTE    pad1;
195ea1d6981Smrg    CARD16  sequenceNumber;
196ea1d6981Smrg    CARD32  length;
197ea1d6981Smrg    CARD32  pad2;
198ea1d6981Smrg    CARD32  pad3;
199ea1d6981Smrg    CARD32  pad4;
200ea1d6981Smrg    CARD32  pad5;
201ea1d6981Smrg    CARD32  pad6;
202ea1d6981Smrg    CARD32  pad7;
20317ca54c3Smrg} xDRI2CopyRegionReply;
20417ca54c3Smrg#define sz_xDRI2CopyRegionReply	32
20517ca54c3Smrg
20617ca54c3Smrgtypedef struct {
20717ca54c3Smrg    CARD8   reqType;
20817ca54c3Smrg    CARD8   dri2ReqType;
209ea1d6981Smrg    CARD16  length;
210ea1d6981Smrg    CARD32  drawable;
211ea1d6981Smrg    CARD32  target_msc_hi;
212ea1d6981Smrg    CARD32  target_msc_lo;
213ea1d6981Smrg    CARD32  divisor_hi;
214ea1d6981Smrg    CARD32  divisor_lo;
215ea1d6981Smrg    CARD32  remainder_hi;
216ea1d6981Smrg    CARD32  remainder_lo;
21717ca54c3Smrg} xDRI2SwapBuffersReq;
21817ca54c3Smrg#define sz_xDRI2SwapBuffersReq  32
21917ca54c3Smrg
22017ca54c3Smrgtypedef struct {
22117ca54c3Smrg    BYTE    type;   /* X_Reply */
22217ca54c3Smrg    BYTE    pad1;
223ea1d6981Smrg    CARD16  sequenceNumber;
224ea1d6981Smrg    CARD32  length;
225ea1d6981Smrg    CARD32  swap_hi;
226ea1d6981Smrg    CARD32  swap_lo;
227ea1d6981Smrg    CARD32  pad2;
228ea1d6981Smrg    CARD32  pad3;
229ea1d6981Smrg    CARD32  pad4;
230ea1d6981Smrg    CARD32  pad5;
23117ca54c3Smrg} xDRI2SwapBuffersReply;
23217ca54c3Smrg#define sz_xDRI2SwapBuffersReply 32
23317ca54c3Smrg
23417ca54c3Smrgtypedef struct {
23517ca54c3Smrg    CARD8   reqType;
23617ca54c3Smrg    CARD8   dri2ReqType;
237ea1d6981Smrg    CARD16  length;
238ea1d6981Smrg    CARD32  drawable;
23917ca54c3Smrg} xDRI2GetMSCReq;
24017ca54c3Smrg#define sz_xDRI2GetMSCReq 8
24117ca54c3Smrg
24217ca54c3Smrgtypedef struct {
24317ca54c3Smrg    CARD8   reqType;
24417ca54c3Smrg    CARD8   dri2ReqType;
245ea1d6981Smrg    CARD16  length;
246ea1d6981Smrg    CARD32  drawable;
247ea1d6981Smrg    CARD32  target_msc_hi;
248ea1d6981Smrg    CARD32  target_msc_lo;
249ea1d6981Smrg    CARD32  divisor_hi;
250ea1d6981Smrg    CARD32  divisor_lo;
251ea1d6981Smrg    CARD32  remainder_hi;
252ea1d6981Smrg    CARD32  remainder_lo;
25317ca54c3Smrg} xDRI2WaitMSCReq;
25417ca54c3Smrg#define sz_xDRI2WaitMSCReq 32
25517ca54c3Smrg
25617ca54c3Smrgtypedef struct {
25717ca54c3Smrg    CARD8   reqType;
25817ca54c3Smrg    CARD8   dri2ReqType;
259ea1d6981Smrg    CARD16  length;
260ea1d6981Smrg    CARD32  drawable;
261ea1d6981Smrg    CARD32  target_sbc_hi;
262ea1d6981Smrg    CARD32  target_sbc_lo;
26317ca54c3Smrg} xDRI2WaitSBCReq;
26417ca54c3Smrg#define sz_xDRI2WaitSBCReq 16
26517ca54c3Smrg
26617ca54c3Smrgtypedef struct {
26717ca54c3Smrg    CARD8   type;
26817ca54c3Smrg    CARD8   pad1;
269ea1d6981Smrg    CARD16  sequenceNumber;
270ea1d6981Smrg    CARD32  length;
271ea1d6981Smrg    CARD32  ust_hi;
272ea1d6981Smrg    CARD32  ust_lo;
273ea1d6981Smrg    CARD32  msc_hi;
274ea1d6981Smrg    CARD32  msc_lo;
275ea1d6981Smrg    CARD32  sbc_hi;
276ea1d6981Smrg    CARD32  sbc_lo;
27717ca54c3Smrg} xDRI2MSCReply;
27817ca54c3Smrg#define sz_xDRI2MSCReply 32
27917ca54c3Smrg
28017ca54c3Smrgtypedef struct {
28117ca54c3Smrg    CARD8   reqType;
28217ca54c3Smrg    CARD8   dri2ReqType;
283ea1d6981Smrg    CARD16  length;
284ea1d6981Smrg    CARD32  drawable;
285ea1d6981Smrg    CARD32  interval;
28617ca54c3Smrg} xDRI2SwapIntervalReq;
28717ca54c3Smrg#define sz_xDRI2SwapIntervalReq 12
28817ca54c3Smrg
28917ca54c3Smrgtypedef struct {
29017ca54c3Smrg    CARD8 type;
29117ca54c3Smrg    CARD8 pad;
292ea1d6981Smrg    CARD16 sequenceNumber;
293ea1d6981Smrg    CARD16 event_type;
29417ca54c3Smrg    CARD16 pad2;
295ea1d6981Smrg    CARD32 drawable;
296ea1d6981Smrg    CARD32 ust_hi;
297ea1d6981Smrg    CARD32 ust_lo;
298ea1d6981Smrg    CARD32 msc_hi;
299ea1d6981Smrg    CARD32 msc_lo;
300ea1d6981Smrg    CARD32 sbc_hi;
301ea1d6981Smrg    CARD32 sbc_lo;
30217ca54c3Smrg} xDRI2BufferSwapComplete;
30317ca54c3Smrg#define sz_xDRI2BufferSwapComplete 32
30417ca54c3Smrg
30517ca54c3Smrgtypedef struct {
30617ca54c3Smrg    CARD8 type;
30717ca54c3Smrg    CARD8 pad;
308ea1d6981Smrg    CARD16 sequenceNumber;
309ea1d6981Smrg    CARD16 event_type;
31017ca54c3Smrg    CARD16 pad2;
311ea1d6981Smrg    CARD32 drawable;
312ea1d6981Smrg    CARD32 ust_hi;
313ea1d6981Smrg    CARD32 ust_lo;
314ea1d6981Smrg    CARD32 msc_hi;
315ea1d6981Smrg    CARD32 msc_lo;
316ea1d6981Smrg    CARD32 sbc;
31717ca54c3Smrg} xDRI2BufferSwapComplete2;
31817ca54c3Smrg#define sz_xDRI2BufferSwapComplete2 32
31917ca54c3Smrg
32017ca54c3Smrgtypedef struct {
32117ca54c3Smrg    CARD8 type;
32217ca54c3Smrg    CARD8 pad;
323ea1d6981Smrg    CARD16 sequenceNumber;
324ea1d6981Smrg    CARD32 drawable;
325ea1d6981Smrg    CARD32 pad1;
326ea1d6981Smrg    CARD32 pad2;
327ea1d6981Smrg    CARD32 pad3;
328ea1d6981Smrg    CARD32 pad4;
329ea1d6981Smrg    CARD32 pad5;
330ea1d6981Smrg    CARD32 pad6;
33117ca54c3Smrg} xDRI2InvalidateBuffers;
33217ca54c3Smrg#define sz_xDRI2InvalidateBuffers 32
33317ca54c3Smrg
33417ca54c3Smrgtypedef struct {
33517ca54c3Smrg    CARD8   reqType;
33617ca54c3Smrg    CARD8   dri2ReqType;
337ea1d6981Smrg    CARD16  length;
338ea1d6981Smrg    CARD32  drawable;
339ea1d6981Smrg    CARD32  param;
34017ca54c3Smrg} xDRI2GetParamReq;
34117ca54c3Smrg#define sz_xDRI2GetParamReq 12
34217ca54c3Smrg
34317ca54c3Smrgtypedef struct {
34417ca54c3Smrg    BYTE    type; /*X_Reply*/
34517ca54c3Smrg    BOOL    is_param_recognized;
346ea1d6981Smrg    CARD16  sequenceNumber;
347ea1d6981Smrg    CARD32  length;
348ea1d6981Smrg    CARD32  value_hi;
349ea1d6981Smrg    CARD32  value_lo;
350ea1d6981Smrg    CARD32  pad1;
351ea1d6981Smrg    CARD32  pad2;
352ea1d6981Smrg    CARD32  pad3;
353ea1d6981Smrg    CARD32  pad4;
35417ca54c3Smrg} xDRI2GetParamReply;
35517ca54c3Smrg#define sz_xDRI2GetParamReply 32
35617ca54c3Smrg
35717ca54c3Smrg#endif
358