diff --git a/src/Makefile.am b/src/Makefile.am
index 3caaed2..0f0dfbc 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -5,6 +5,7 @@ xcbinclude_HEADERS = \
 	composite.xml \
 	damage.xml \
 	dpms.xml \
+	dri2.xml \
 	glx.xml \
 	randr.xml \
 	record.xml \
diff --git a/src/dri2.xml b/src/dri2.xml
new file mode 100644
index 0000000..4d77f72
--- /dev/null
+++ b/src/dri2.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (C) 2005 Jeremy Kolb.
+All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person ob/Sintaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the names of the authors or their
+institutions shall not be used in advertising or otherwise to promote the
+sale, use or other dealings in this Software without prior written
+authorization from the authors.
+-->
+
+<xcb header="dri2" extension-xname="DRI2" extension-name="DRI2"
+    major-version="1" minor-version="1">
+
+    <!-- Types -->
+
+    <struct name="DRI2Buffer">
+	<field type="CARD32" name="attachment" />
+	<field type="CARD32" name="name" />
+	<field type="CARD32" name="pitch" />
+	<field type="CARD32" name="cpp" />
+	<field type="CARD32" name="flags" />
+    </struct>
+
+    <struct name="GetBuffersWithFormatAttachment">
+	<field type="CARD32" name="attachment" />
+	<field type="CARD32" name="format" />
+    </struct>
+
+    <!-- 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" />
+	    <pad bytes="16" />
+	</reply>
+    </request>
+
+    <request name="Connect" opcode="1">
+	<field type="CARD32" name="window" />
+	<field type="CARD32" name="driver_type" />
+	<reply>
+	    <pad bytes="1" />
+	    <field type="CARD32" name="driver_name_length" />
+	    <field type="CARD32" name="device_name_length" />
+	    <pad bytes="16" />
+	    <list type="char" name="driver_name">
+		<fieldref>driver_name_length</fieldref>
+	    </list>
+	    <list type="char" name="device_name">
+		<fieldref>device_name_length</fieldref>
+	    </list>
+	</reply>
+    </request>
+
+    <request name="Authenticate" opcode="2">
+	<field type="CARD32" name="window" />
+	<field type="CARD32" name="magic" />
+	<reply>
+	    <pad bytes="1" />
+	    <field type="CARD32" name="authenticated" />
+	    <pad bytes="20" />
+	</reply>
+    </request>
+
+    <request name="CreateDrawable" opcode="3">
+	<field type="CARD32" name="drawable" />
+    </request>
+
+    <request name="DestroyDrawable" opcode="4">
+	<field type="CARD32" name="drawable" />
+    </request>
+
+    <request name="GetBuffers" opcode="5">
+	<field type="CARD32" name="drawable" />
+	<field type="CARD32" name="count" />
+	<list type="CARD32" name="attachments" />
+	<reply>
+	    <pad bytes="1" />
+	    <field type="CARD32" name="width" />
+	    <field type="CARD32" name="height" />
+	    <field type="CARD32" name="count" />
+	    <list type="DRI2Buffer" name="buffers">
+		<fieldref>count</fieldref>
+	    </list>
+	    <pad bytes="12" />
+	</reply>
+    </request>
+
+    <request name="CopyRegion" opcode="6">
+	<field type="CARD32" name="drawable" />
+	<field type="CARD32" name="region" />
+	<field type="CARD32" name="dest" />
+	<field type="CARD32" name="src" />
+	<reply>
+	    <pad bytes="1" />
+	    <pad bytes="24" />
+	</reply>
+    </request>
+
+    <request name="GetBuffersWithFormat" opcode="7">
+	<field type="CARD32" name="drawable" />
+	<field type="CARD32" name="count" />
+	<list type="GetBuffersWithFormatAttachment" name="attachments" />
+	<reply>
+	    <pad bytes="1" />
+	    <field type="CARD32" name="width" />
+	    <field type="CARD32" name="height" />
+	    <field type="CARD32" name="count" />
+	    <list type="DRI2Buffer" name="buffers">
+		<fieldref>count</fieldref>
+	    </list>
+	    <pad bytes="12" />
+	</reply>
+    </request>
+</xcb>
