summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Barnes <jbarnes@virtuousgeek.org>2009-05-01 14:41:55 -0700
committerJesse Barnes <jbarnes@virtuousgeek.org>2009-05-01 14:41:55 -0700
commit9b5ef83c0b9ef0239ac82adfa9a816f195074dcb (patch)
tree3d20b49a6f37cbf17a512389c49cfa615a974387
parent66c56ab10d917e3f47f93178d7eac6430970d3c4 (diff)
Add SwapBuffers request
Add a SwapBuffers request for requesting a front<->back swap. Returns a whole new set of buffers to the client to allow for triple buffering etc.
-rw-r--r--dri2proto.h25
-rw-r--r--dri2proto.txt41
2 files changed, 65 insertions, 1 deletions
diff --git a/dri2proto.h b/dri2proto.h
index 8d76079..441155e 100644
--- a/dri2proto.h
+++ b/dri2proto.h
@@ -35,7 +35,7 @@
#define DRI2_NAME "DRI2"
#define DRI2_MAJOR 1
-#define DRI2_MINOR 1
+#define DRI2_MINOR 2
#define DRI2NumberErrors 0
#define DRI2NumberEvents 0
@@ -49,6 +49,7 @@
#define X_DRI2GetBuffers 5
#define X_DRI2CopyRegion 6
#define X_DRI2GetBuffersWithFormat 7
+#define X_DRI2SwapBuffers 8
typedef struct {
CARD32 attachment B32;
@@ -191,4 +192,26 @@ typedef struct {
} xDRI2CopyRegionReply;
#define sz_xDRI2CopyRegionReply 32
+typedef struct {
+ CARD8 reqType;
+ CARD8 dri2ReqType;
+ CARD16 length B16;
+ CARD32 drawable B32;
+} xDRI2SwapBuffersReq;
+#define sz_xDRI2SwapBuffersReq 8
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ BYTE pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 count B32;
+ CARD32 pad3 B32;
+ CARD32 pad4 B32;
+ CARD32 pad5 B32;
+ CARD32 pad6 B32;
+ CARD32 pad7 B32;
+} xDRI2SwapBuffersReply;
+#define sz_xDRI2SwapBuffersReply 32
+
#endif
diff --git a/dri2proto.txt b/dri2proto.txt
index e931bfb..bad9567 100644
--- a/dri2proto.txt
+++ b/dri2proto.txt
@@ -105,6 +105,11 @@ DRI2 implementation of direct rendering GLX, should use these enty
points to copy contents back and forth to as necessary to ensure
consistent rendering.
+The client may also use the DRI2SwapBuffers function to request a swap
+of the front and back buffers. If the display server supports it, this
+operation may be preferred, since it may be easier and/or more performant
+for the server to perform a simple buffer swap rather than a blit.
+
⚙ ⚙ ⚙ ⚙ ⚙ ⚙
@@ -288,6 +293,21 @@ The name of this extension is "DRI2".
the server has seen the request before proceeding with
rendering the next frame.
+┌───
+ DRI2SwapBuffers
+ drawable: DRAWABLE
+ ▶
+ buffers: LISTofDRI2BUFFER
+└───
+ Errors: Window
+
+ Schedule a swap of the front and back buffers with the display
+ server.
+
+ In reply, the display server is expected to provide new front
+ and back buffers to the client following this request. The
+ display server should process this request asynchronously
+ if possible, to prevent the client from blocking.
┌───
DRI2GetBuffersWithFormat
@@ -542,6 +562,27 @@ A.3 Protocol Events
The DRI2 extension specifies no events.
+┌───
+ DRI2SwapBuffers
+ 1 CARD8 major opcode
+ 1 7 DRI2 opcode
+ 2 8 length
+ 4 DRAWABLE drawable
+ ▶
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 buffer count
+ 4 CARD32 unused
+ 4 CARD32 unused
+ 4 CARD32 unused
+ 4 CARD32 unused
+ 4 CARD32 unused
+ 4 CARD32 unused
+ 5n LISTofDRI2BUFFER buffers
+└───
+
A.4 Protocol Errors