[RFC dri3proto v3 01/14] Add modifier/multi-plane requests, bump to v1.1
Louis-Francis Ratté-Boulianne
lfrb at collabora.com
Wed Sep 27 05:19:00 UTC 2017
DRI3 version 1.1 adds support for explicit format modifiers, including
multi-planar buffers.
Signed-off-by: Daniel Stone <daniels at collabora.com>
Signed-off-by: Louis-Francis Ratté-Boulianne <lfrb at collabora.com>
---
dri3proto.h | 86 ++++++++++++++++++++++++-
dri3proto.txt | 202 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 284 insertions(+), 4 deletions(-)
diff --git a/dri3proto.h b/dri3proto.h
index ceddee8..5f86f19 100644
--- a/dri3proto.h
+++ b/dri3proto.h
@@ -25,7 +25,7 @@
#define DRI3_NAME "DRI3"
#define DRI3_MAJOR 1
-#define DRI3_MINOR 0
+#define DRI3_MINOR 1
#define DRI3NumberErrors 0
#define DRI3NumberEvents 0
@@ -37,7 +37,12 @@
#define X_DRI3FenceFromFD 4
#define X_DRI3FDFromFence 5
-#define DRI3NumberRequests 6
+/* v1.1 */
+#define xDRI3GetSupportedModifiers 6
+#define xDRI3PixmapFromBuffers 7
+#define xDRI3BuffersFromPixmap 8
+
+#define DRI3NumberRequests 9
typedef struct {
CARD8 reqType;
@@ -164,4 +169,81 @@ typedef struct {
#define sz_xDRI3FDFromFenceReply 32
+/* v1.1 */
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 dri3ReqType;
+ CARD16 length B16;
+ CARD32 window B32;
+ CARD8 depth;
+ CARD8 bpp;
+ CARD16 pad10 B16;
+} xDRI3GetSupportedModifiersReq;
+#define sz_xDRI3GetSupportedModifiersReq 12
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ CARD8 pad1;
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD32 numDrawableModifiers B32;
+ CARD32 numScreenModifiers B32;
+ CARD32 pad16 B32;
+ CARD32 pad20 B32;
+ CARD32 pad24 B32;
+ CARD32 pad28 B32;
+} xDRI3GetSupportedModifiersReply;
+#define sz_xDRI3GetSupportedModifiersReply 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 dri3ReqType;
+ CARD16 length B16;
+ CARD32 pixmap B32;
+ CARD32 drawable B32;
+ CARD8 num_buffers; /* Number of file descriptors passed */
+ CARD8 pad13;
+ CARD16 pad14 B16;
+ CARD16 width B16;
+ CARD16 height B16;
+ CARD32 stride0 B32;
+ CARD32 offset0 B32;
+ CARD32 stride1 B32;
+ CARD32 offset1 B32;
+ CARD32 stride2 B32;
+ CARD32 offset2 B32;
+ CARD32 stride3 B32;
+ CARD32 offset3 B32;
+ CARD8 depth;
+ CARD8 bpp;
+ CARD16 pad54 B16;
+ CARD64 modifier;
+} xDRI3PixmapFromBuffersReq;
+#define sz_xDRI3PixmapFromBuffersReq 64
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 dri3ReqType;
+ CARD16 length B16;
+ CARD32 pixmap B32;
+} xDRI3BuffersFromPixmapReq;
+#define sz_xDRI3BuffersFromPixmapReq 8
+
+typedef struct {
+ BYTE type; /* X_Reply */
+ CARD8 nfd; /* Number of file descriptors returned */
+ CARD16 sequenceNumber B16;
+ CARD32 length B32;
+ CARD16 width B16;
+ CARD16 height B16;
+ CARD32 pad12 B32;
+ CARD64 modifier;
+ CARD8 depth;
+ CARD8 bpp;
+ CARD16 pad26 B16;
+ CARD32 pad28 B32;
+} xDRI3BuffersFromPixmapReply;
+#define sz_xDRI3BuffersFromPixmapReply 32
+
#endif
diff --git a/dri3proto.txt b/dri3proto.txt
index dac11d3..636c789 100644
--- a/dri3proto.txt
+++ b/dri3proto.txt
@@ -1,11 +1,12 @@
The DRI3 Extension
- Version 1.0
- 2013-6-4
+ Version 1.1
+ 2017-06-27
Keith Packard
keithp at keithp.com
Intel Corporation
+
1. Introduction
The DRI3 extension provides mechanisms to translate between direct
@@ -27,6 +28,8 @@ Dave Airlie <airlied at redhat.com>
Kristian Høgsberg <krh at bitplanet.net>
James Jones <janomes at nvidia.com>
Arthur Huillet <arthur.huillet at free.fr>
+Louis-Francis Ratté-Boulianne <lfrb at collabora.com>
+Daniel Stone <daniels at collabora.com>
❄ ❄ ❄ ❄ ❄ ❄ ❄
@@ -199,6 +202,125 @@ The name of this extension is "DRI3"
associated with a direct rendering device that 'fence' can
work with, otherwise a Match error results.
+┌───
+ DRI3GetSupportedModifiers
+ window: WINDOW
+ depth: CARD8
+ bpp: CARD8
+ ▶
+ num_drawable_modifiers: CARD32
+ num_screen_modifiers: CARD32
+ drawable_modifiers: ListOfCARD64
+ screen_modifiers: ListOfCARD64
+└───
+ Errors: Window, Match
+
+ For the Screen associated with 'window', return two lists of
+ supported DRM FourCC modifiers, as defined in drm_fourcc.h,
+ supported for DRI3 pixmap/buffer interchange. The first list
+ 'drawable_modifiers' contains modifiers that are specific to
+ this window and should be used over the more generic
+ 'screen_modifiers' set.
+
+┌───
+ DRI3PixmapFromBuffers
+ pixmap: PIXMAP
+ drawable: DRAWABLE
+ num_buffers: CARD8
+ width, height: CARD16
+ stride0, offset0: CARD32
+ stride1, offset1: CARD32
+ stride2, offset2: CARD32
+ stride3, offset3: CARD32
+ depth, bpp: CARD8
+ modifier: CARD64
+ buffers: ListOfFD
+└───
+ Errors: Alloc, Drawable, IDChoice, Value, Match
+
+ Creates a pixmap for the direct rendering object associated
+ with 'buffers'. Changes to pixmap will be visible in that
+ direct rendered object and changes to the direct rendered
+ object will be visible in the pixmap.
+
+ In contrast to PixmapFromBuffer, multiple buffers may be
+ combined to specify a single logical source for pixel
+ sampling: 'num_buffers' may be set from 1 (single buffer,
+ akin to PixmapFromBuffer) to 4. This is the number of file
+ descriptors which will be sent with this request; one per
+ buffer.
+
+ Modifiers allow explicit specification of non-linear sources,
+ such as tiled or compressed buffers. The combination of bpp,
+ depth, and modifier allows unambiguous declaration of the
+ buffer layout in a manner defined by the DRM tokens.
+
+ DRM_FORMAT_MOD_INVALID may be passed for 'modifier', in which
+ case the driver may make its own inference as to the exact
+ layout of the buffer(s).
+
+ 'width' and 'height' describe the geometry (in pixels) of the
+ logical pixel-sample source.
+
+ 'strideN' and 'offsetN' define the number of bytes per logical
+ scanline, and the distance in bytes from the beginning of the
+ buffer passed for that plane until the start of the sample
+ source for that plane, respectively for plane N. If the plane
+ is not used according to the format and modifier specification,
+ both values for that plane must be zero.
+
+ Precisely how any additional information about the buffer is
+ shared is outside the scope of this extension.
+
+ If the buffer(s) cannot be used with the screen associated with
+ 'pixmap', a Match error is returned.
+
+ If the bpp, depth, and modifier combination is not supported by
+ the screen, a Value error is returned.
+
+┌───
+ DRI3BuffersFromPixmap
+ pixmap: PIXMAP
+ ▶
+ nfd: CARD8
+ width, height: CARD16
+ depth, bpp: CARD8
+ modifier: CARD64
+ strides: ListOfCARD32
+ offsets: ListOfCARD32
+ buffers: ListOfFD
+└───
+ Errors: Pixmap, Match
+
+ Returns direct rendering objects associated with 'pixmap'.
+ Changes to 'pixmap' will be visible in the direct rendered
+ objects and changes to the direct rendered objects will be
+ visible in 'pixmap' after flushing and synchronization.
+
+ 'width' and 'height' describe the geometry (in pixels) of the
+ logical pixel-sample source from combining the direct rendering
+ objects.
+
+ See PixmapFromBuffers for more details on DRM modifiers usage.
+
+ 'nfd' describes the number of buffers returned for the pixmap,
+ which must be combined together according to 'depth', 'bpp', and
+ 'modifier'.
+
+ For each buffer, there is an entry in the 'strides',
+ 'offsets', and 'buffers' list. 'buffer' contains a single file
+ descriptor referring to the buffer. 'stride' specifies the
+ number of bytes per logical scanline for this plane, and
+ 'offset' specifies the distance in bytes from the beginning
+ of 'buffer' until the start of the sample source for that
+ plane.
+
+ Precisely how any additional information about the buffer is
+ shared is outside the scope of this extension.
+
+ If buffers cannot be exported from the the screen associated
+ with 'pixmap', a Match error is returned.
+
❄ ❄ ❄ ❄ ❄ ❄ ❄
@@ -214,6 +336,9 @@ The DRI3 extension is adapted from the DRI2 extension.
1.0: First published version
+ 1.1: Add GetSupportedModifiers,
+ PixmapFromBuffers, and BuffersFromPixmap requests.
+
❄ ❄ ❄ ❄ ❄ ❄ ❄
@@ -367,6 +492,79 @@ A.2 Protocol Requests
0 FD fence fd
└───
+┌───
+ DRI3GetSupportedModifiers
+ 1 CARD8 major opcode
+ 1 7 DRI3 opcode
+ 2 3 length
+ 4 Window window
+ 1 CARD8 depth
+ 1 CARD8 bpp
+ 2 unused
+ ▶
+ 1 1 Reply
+ 1 0 unused
+ 2 CARD16 sequence number
+ 4 CARD32 reply length
+ 4 CARD32 num_drawable_modifiers
+ 4 CARD32 num_screen_modifiers
+ 16 unused
+
+ 4 ListOfCARD64 drawable_modifiers[num_drawable_modifiers]
+ 4 ListOfCARD64 screen_modifiers[num_screen_modifiers]
+└───
+
+┌───
+ DRI3PixmapFromBuffers
+ 1 CARD8 major opcode
+ 1 8 DRI3 opcode
+ 2 8 length
+ 4 Pixmap pixmap
+ 4 Drawable drawable
+ 1 CARD8 num_buffers
+ 3 unused
+ 2 CARD16 width
+ 2 CARD16 height
+ 4 CARD32 stride0
+ 4 CARD32 offset0
+ 4 CARD32 stride1
+ 4 CARD32 offset1
+ 4 CARD32 stride2
+ 4 CARD32 offset2
+ 4 CARD32 stride3
+ 4 CARD32 offset3
+ 1 CARD8 depth
+ 1 CARD8 bpp
+ 2 unused
+ 8 CARD64 modifier
+
+ 0 ListOfFD buffers[num_buffers]
+└───
+
+┌───
+ DRI3BuffersFromPixmap
+ 1 CARD8 major opcode
+ 1 9 DRI3 opcode
+ 2 2 length
+ 4 Pixmap pixmap
+ ▶
+ 1 1 Reply
+ 1 CARD8 nfd
+ 2 CARD16 sequence number
+ 4 CARD32 reply length
+ 2 CARD16 width
+ 2 CARD16 height
+ 4 CARD8 unused
+ 8 CARD64 modifier
+ 1 CARD8 depth
+ 1 CARD8 bpp
+ 6 unused
+
+ 0 ListOfFD buffer[num_buffers]
+ 4 ListOfCARD32 strides[num_buffers]
+ 4 ListOfCARD32 offsets[num_buffers]
+└───
+
A.3 Protocol Events
The DRI3 extension defines no events.
--
2.13.0
More information about the xorg-devel
mailing list