[PATCH 5/6] Add DRI3

Keith Packard keithp at keithp.com
Tue Nov 5 16:39:05 PST 2013


Signed-off-by: Keith Packard <keithp at keithp.com>
---
 src/Makefile.am  |  1 +
 src/dri3.xml     | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/xproto.xml   | 19 ++++++++++-
 xcbgen/xtypes.py | 24 ++++++++++++++
 4 files changed, 140 insertions(+), 1 deletion(-)
 create mode 100644 src/dri3.xml

diff --git a/src/Makefile.am b/src/Makefile.am
index eef2dbc..5804fff 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -6,6 +6,7 @@ xcbinclude_HEADERS = \
 	damage.xml \
 	dpms.xml \
 	dri2.xml \
+	dri3.xml \
 	ge.xml \
 	glx.xml \
 	randr.xml \
diff --git a/src/dri3.xml b/src/dri3.xml
new file mode 100644
index 0000000..34c4f4b
--- /dev/null
+++ b/src/dri3.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+Copyright © 2013 Keith Packard
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that copyright
+notice and this permission notice appear in supporting documentation, and
+that the name of the copyright holders not be used in advertising or
+publicity pertaining to distribution of the software without specific,
+written prior permission.  The copyright holders make no representations
+about the suitability of this software for any purpose.  It is provided "as
+is" without express or implied warranty.
+
+THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+OF THIS SOFTWARE.
+-->
+
+<xcb header="dri3" extension-xname="DRI3" extension-name="DRI3"
+  major-version="1" minor-version="0">
+  <import>xproto</import>
+
+  <!-- Types -->
+
+  <!-- Requests -->
+  <request name="QueryVersion" opcode="0">
+    <field type="CARD32" name="major_version" />
+    <field type="CARD32" name="minor_version" />
+    <reply>
+      <pad bytes="1" />
+      <field type="CARD32" name="major_version" />
+      <field type="CARD32" name="minor_version" />
+    </reply>
+  </request>
+
+  <request name="Open" opcode="1">
+    <field type="WINDOW" name="window" />
+    <field type="CARD32" name="provider" />
+    <reply>
+      <field type="CARD8" name="nfd"/>
+      <fd name="device_fd" />
+      <pad bytes="24" />
+    </reply>
+  </request>
+
+  <request name="PixmapFromBuffer" opcode="2">
+    <field type="PIXMAP" name="pixmap" />
+    <field type="DRAWABLE" name="drawable" />
+    <field type="CARD32" name="size" />
+    <field type="CARD16" name="width" />
+    <field type="CARD16" name="height" />
+    <field type="CARD16" name="stride" />
+    <field type="CARD8" name="depth" />
+    <field type="CARD8" name="bpp" />
+    <fd name="pixmap_fd" />
+  </request>
+
+  <request name="BufferFromPixmap" opcode="3">
+    <field type="PIXMAP" name="pixmap" />
+    <reply>
+      <field type="CARD8" name="nfd"/>
+      <field type="CARD32" name="size" />
+      <field type="CARD16" name="width" />
+      <field type="CARD16" name="height" />
+      <field type="CARD16" name="stride" />
+      <field type="CARD8" name="depth" />
+      <field type="CARD8" name="bpp" />
+      <fd name="pixmap_fd" />
+      <pad bytes="12"/>
+    </reply>
+  </request>
+
+  <request name="FenceFromFD" opcode="4">
+    <field type="DRAWABLE" name="drawable" />
+    <field type="CARD32" name="fence"/>
+    <field type="BOOL" name="initially_triggered"/>
+    <pad bytes="3"/>
+    <fd name="fence_fd"/>
+  </request>
+
+  <request name="FDFromFence" opcode="5">
+    <field type="DRAWABLE" name="drawable" />
+    <field type="CARD32" name="fence"/>
+    <reply>
+      <field type="CARD8" name="nfd"/>
+      <fd name="fence_fd" />
+      <pad bytes="24"/>
+    </reply>
+  </request>
+
+</xcb>
diff --git a/src/xproto.xml b/src/xproto.xml
index bf4dcbf..c9f6979 100644
--- a/src/xproto.xml
+++ b/src/xproto.xml
@@ -1080,7 +1080,24 @@ The number of keycodes altered.
     </doc>
   </event>
 
-
+  <event name="ge" number="35">
+    <field type="CARD8" name="extension"/>
+    <field type="CARD32" name="length"/>
+    <field type="CARD16" name="evtype"/>
+    <pad bytes="22" />
+    <doc>
+      <brief>generic event (with length)</brief>
+      <field name="extension"><![CDATA[
+The major opcode of the extension creating this event
+      ]]></field>
+      <field name="length"><![CDATA[
+The amount (in 4-byte units) of data beyond 32 bytes
+      ]]></field>
+      <field name="evtype"><![CDATA[
+The extension-specific event type
+      ]]></field>
+    </doc>
+  </event>
 
   <!-- Core error types -->
 
diff --git a/xcbgen/xtypes.py b/xcbgen/xtypes.py
index d007635..a68e8b8 100644
--- a/xcbgen/xtypes.py
+++ b/xcbgen/xtypes.py
@@ -34,6 +34,7 @@ class Type(object):
         self.is_pad = False
         self.is_switch = False
         self.is_bitcase = False
+        self.is_event_align = False
 
     def resolve(self, module):
         '''
@@ -314,6 +315,24 @@ class PadType(Type):
         return True
 
     
+class EventAlignType(Type):
+    '''
+    Derived class which represents the end of a normal 32-byte
+    X event. Fields after this are extended fields.
+    '''
+    def __init__(self, elt):
+        Type.__init__(self, tcard8.name)
+        self.is_event_align = True
+        self.size = 0
+        self.nmemb = 0
+
+    def resolve(self, module):
+        self.resolved = True
+
+    def fixed_size(self):
+        return True
+    
+
 class ComplexType(Type):
     '''
     Derived class which represents a structure.  Base type for all structure types.
@@ -345,6 +364,11 @@ class ComplexType(Type):
                 type = PadType(child)
                 pads = pads + 1
                 visible = False
+            elif child.tag == 'eventalign':
+                field_name = 'eventalign'
+                fkey = 'CARD8'
+                type = EventAlignType(child)
+                visible = False
             elif child.tag == 'field':
                 field_name = child.get('name')
                 enum = child.get('enum')
-- 
1.8.4.2



More information about the xorg-devel mailing list