[PATCH v3 01/02] dri2proto: Add DRI2GetParam request

Chad Versace chad.versace at linux.intel.com
Wed May 16 12:44:40 PDT 2012


(Resending. I accidentally sent this to xorg rather than xorg-devel).

Bump protocol version to 1.4.
Bump package version to 2.7.

This new protocol request effectively allows clients to perform feature
detection on the DDX.

If I had DRI2GetParam in June 2011, when I was implementing support in the
Intel DDX and Mesa for new hardware that required a new DRI2 attachment
format, then I could have avoided a week of pain caused by the necessity
to write a horrid feature detection hack [1] in Mesa. In the future, when
the work begins to add MSAA support to the Intel DDX, having a clean way
to do feature detection will allow us to avoid revisiting and expanding
that hack.

[1] mesa, commit aea2236a, function intel_verify_dri2_has_hi

CC: Alan Coopersmith <alan.coopersmith at oracle.com>
CC: Kristian Høgsberg <krh at bitplanet.net>
CC: Ian Romanick <idr at freedesktop.org>
CC: Eric Anholt <eric at anholt.net>
CC: Chris Wilson <chris at chris-wilson.co.uk>
CC: Jesse Barnes <jbarnes at virtuousgeek.org>
Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
---

v2:
    - Fixed typo "param_is", per anholt.
    - Changed param from CARD64 to CARD32, per krh and anholt.
    - Removed namespaces, per krh. Instead, there is an enum range reserved
      for each the server and the ddx.

v3:
    - Moved 'is_param_recognized' into an unused byte in the packet header,
      per Alan.
    - Clarified, in protocol documentation, that 1) there are no server
      parameters defined yet and that they will be defined in the dri2proto
      headers; and that 2) driver parameters are private to each driver
      and are defined by the respective driver's headers.
    - Fixed typos, per Alan.

 configure.ac  |    2 +-
 dri2proto.h   |   28 ++++++++++++++++++++++++++--
 dri2proto.txt |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 76 insertions(+), 3 deletions(-)

diff --git a/configure.ac b/configure.ac
index d671f5a..aeb86a9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 AC_PREREQ([2.60])
-AC_INIT([DRI2Proto], [2.6], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
+AC_INIT([DRI2Proto], [2.7], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
 
diff --git a/dri2proto.h b/dri2proto.h
index cd82afb..128b807 100644
--- a/dri2proto.h
+++ b/dri2proto.h
@@ -35,11 +35,11 @@
 
 #define DRI2_NAME			"DRI2"
 #define DRI2_MAJOR			1
-#define DRI2_MINOR			3
+#define DRI2_MINOR			4
 
 #define DRI2NumberErrors		0
 #define DRI2NumberEvents		2
-#define DRI2NumberRequests		13
+#define DRI2NumberRequests		14
 
 #define X_DRI2QueryVersion		0
 #define X_DRI2Connect			1
@@ -54,6 +54,7 @@
 #define X_DRI2WaitMSC			10
 #define X_DRI2WaitSBC			11
 #define X_DRI2SwapInterval		12
+#define X_DRI2GetParam			13
 
 /*
  * Events
@@ -330,4 +331,27 @@ typedef struct {
 } xDRI2InvalidateBuffers;
 #define sz_xDRI2InvalidateBuffers 32
 
+typedef struct {
+    CARD8   reqType;
+    CARD8   dri2ReqType;
+    CARD16  length B16;
+    CARD32  drawable B32;
+    CARD32  param B32;
+} xDRI2GetParamReq;
+#define sz_xDRI2GetParamReq 12
+
+typedef struct {
+    BYTE    type; /*X_Reply*/
+    BOOL    is_param_recognized;
+    CARD16  sequenceNumber B16;
+    CARD32  length B32;
+    CARD32  value_hi B32;
+    CARD32  value_lo B32;
+    CARD32  pad1 B32;
+    CARD32  pad2 B32;
+    CARD32  pad3 B32;
+    CARD32  pad4 B32;
+} xDRI2GetParamReply;
+#define sz_xDRI2GetParamReply 32
+
 #endif
diff --git a/dri2proto.txt b/dri2proto.txt
index 7bde067..9921301 100644
--- a/dri2proto.txt
+++ b/dri2proto.txt
@@ -440,6 +440,36 @@ The name of this extension is "DRI2".
 	DRI2SwapBuffers requests to swap at most once per interval frames,
 	which is useful useful for limiting the frame rate.
 
+┌───
+    DRI2GetParam
+	drawable: DRAWABLE
+	param: CARD32
+      ▶
+	is_param_recognized: BOOL
+	value: CARD64
+└───
+	Errors: Drawable
+
+	Get the value of a parameter.  The parameter's value is looked up on
+	the screen associated with 'drawable'.
+
+	Parameter names in which the value of the most significant byte is
+	0 are reserved for the X server. Currently, no such parameter names
+	are defined. (When any such names are defined, they will be defined in
+	this extension specification and its associated headers).
+
+	Parameter names in which the byte's value is 1 are reserved for the
+	DDX. Such names are private to each driver and shall be defined in the
+	respective driver's headers.
+
+	Parameter names in which the byte's value is neither 0 nor 1 are
+	reserved for future use.
+
+	Possible values of 'is_param_recognized' are true (1) and false (0).
+	If false, then 'value' is undefined.
+
+	This request is only available with protocol version 1.4 or later.
+
 			     ⚙ ⚙ ⚙  ⚙ ⚙ ⚙
 
 9. Extension Events
@@ -512,6 +542,8 @@ The DRI2 extension has undergone a number of revisions before
 
 	2.6: Enlightenment attained.  Added the DRI2BufferHiz attachment.
 
+	2.7: Added the DRI2GetParam request.
+
 Compatibility up to 2.0 is not preserved, but was also never released.
 
 
@@ -830,6 +862,23 @@ A.2 Protocol Requests
      ▶
 └───
 
+┌───
+    DRI2GetParam
+	1	CARD8			major opcode
+	1	13			DRI2 opcode
+	2	8			length
+	4	DRAWABLE		drawable
+	4	CARD32			param
+     ▶
+	1	1			Reply
+	1	BOOL			is_param_recognized
+	2	CARD16			sequence number
+	4	0			reply length
+	4	CARD32			value_hi
+	4	CARD32			value_lo
+	16				unused
+└───
+
 A.3 Protocol Events
 
 The DRI2 extension specifies DRI2_BufferSwapComplete and
-- 
1.7.10.1



More information about the xorg-devel mailing list