Module Name:    src
Committed By:   mrg
Date:           Thu Jul  4 07:52:29 UTC 2024

Modified Files:
        src/distrib/sets/lists/xbase: shl.mi
        src/distrib/sets/lists/xcomp: mi
        src/distrib/sets/lists/xdebug: mi shl.mi
        src/external/mit/xorg/lib/libxcb: Makefile
        src/external/mit/xorg/lib/libxcb/files: Makefile Makefile.xmlsrcs
            bigreq.h composite.h config.h damage.h dpms.c dpms.h dri3.c dri3.h
            present.c present.h randr.c shm.h xfixes.h xinput.c
        src/external/mit/xorg/lib/libxcb/libxcb: Makefile
Added Files:
        src/external/mit/xorg/lib/libxcb/dbe: Makefile
        src/external/mit/xorg/lib/libxcb/files: dbe.c dbe.h

Log Message:
updates for libxcb / xcb-proto 1.17.0.


To generate a diff of this commit:
cvs rdiff -u -r1.106 -r1.107 src/distrib/sets/lists/xbase/shl.mi
cvs rdiff -u -r1.245 -r1.246 src/distrib/sets/lists/xcomp/mi
cvs rdiff -u -r1.48 -r1.49 src/distrib/sets/lists/xdebug/mi
cvs rdiff -u -r1.71 -r1.72 src/distrib/sets/lists/xdebug/shl.mi
cvs rdiff -u -r1.4 -r1.5 src/external/mit/xorg/lib/libxcb/Makefile
cvs rdiff -u -r0 -r1.1 src/external/mit/xorg/lib/libxcb/dbe/Makefile
cvs rdiff -u -r1.3 -r1.4 src/external/mit/xorg/lib/libxcb/files/Makefile \
    src/external/mit/xorg/lib/libxcb/files/present.c
cvs rdiff -u -r1.7 -r1.8 \
    src/external/mit/xorg/lib/libxcb/files/Makefile.xmlsrcs \
    src/external/mit/xorg/lib/libxcb/files/xinput.c
cvs rdiff -u -r1.4 -r1.5 src/external/mit/xorg/lib/libxcb/files/bigreq.h \
    src/external/mit/xorg/lib/libxcb/files/dpms.c \
    src/external/mit/xorg/lib/libxcb/files/present.h
cvs rdiff -u -r1.5 -r1.6 src/external/mit/xorg/lib/libxcb/files/composite.h \
    src/external/mit/xorg/lib/libxcb/files/dpms.h \
    src/external/mit/xorg/lib/libxcb/files/dri3.c \
    src/external/mit/xorg/lib/libxcb/files/dri3.h
cvs rdiff -u -r1.6 -r1.7 src/external/mit/xorg/lib/libxcb/files/config.h \
    src/external/mit/xorg/lib/libxcb/files/damage.h \
    src/external/mit/xorg/lib/libxcb/files/randr.c \
    src/external/mit/xorg/lib/libxcb/files/shm.h \
    src/external/mit/xorg/lib/libxcb/files/xfixes.h
cvs rdiff -u -r0 -r1.1 src/external/mit/xorg/lib/libxcb/files/dbe.c \
    src/external/mit/xorg/lib/libxcb/files/dbe.h
cvs rdiff -u -r1.12 -r1.13 src/external/mit/xorg/lib/libxcb/libxcb/Makefile

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/xbase/shl.mi
diff -u src/distrib/sets/lists/xbase/shl.mi:1.106 src/distrib/sets/lists/xbase/shl.mi:1.107
--- src/distrib/sets/lists/xbase/shl.mi:1.106	Fri May 10 12:21:49 2024
+++ src/distrib/sets/lists/xbase/shl.mi	Thu Jul  4 07:52:29 2024
@@ -1,4 +1,4 @@
-# $NetBSD: shl.mi,v 1.106 2024/05/10 12:21:49 riastradh Exp $
+# $NetBSD: shl.mi,v 1.107 2024/07/04 07:52:29 mrg Exp $
 #
 # Note:	Don't delete entries from here - mark them as "obsolete" instead,
 #	unless otherwise stated below.
@@ -200,6 +200,9 @@
 ./usr/X11R7/lib/libxcb-damage.so		xbase-libxcb-lib		xorg,compatx11file
 ./usr/X11R7/lib/libxcb-damage.so.0		xbase-libxcb-lib		xorg,compatx11file
 ./usr/X11R7/lib/libxcb-damage.so.0.1		xbase-libxcb-lib		xorg,compatx11file
+./usr/X11R7/lib/libxcb-dbe.so			xbase-libxcb-lib		xorg,compatx11file
+./usr/X11R7/lib/libxcb-dbe.so.0			xbase-libxcb-lib		xorg,compatx11file
+./usr/X11R7/lib/libxcb-dbe.so.0.1		xbase-libxcb-lib		xorg,compatx11file
 ./usr/X11R7/lib/libxcb-dpms.so			xbase-libxcb-lib		xorg,compatx11file
 ./usr/X11R7/lib/libxcb-dpms.so.0		xbase-libxcb-lib		xorg,compatx11file
 ./usr/X11R7/lib/libxcb-dpms.so.0.1		xbase-libxcb-lib		xorg,compatx11file

Index: src/distrib/sets/lists/xcomp/mi
diff -u src/distrib/sets/lists/xcomp/mi:1.245 src/distrib/sets/lists/xcomp/mi:1.246
--- src/distrib/sets/lists/xcomp/mi:1.245	Thu Jul  4 05:23:33 2024
+++ src/distrib/sets/lists/xcomp/mi	Thu Jul  4 07:52:29 2024
@@ -1,4 +1,4 @@
-#	 $NetBSD: mi,v 1.245 2024/07/04 05:23:33 mrg Exp $
+#	 $NetBSD: mi,v 1.246 2024/07/04 07:52:29 mrg Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -740,6 +740,7 @@
 ./usr/X11R7/include/xcb/bigreq.h			xcomp-libxcb-include	xorg
 ./usr/X11R7/include/xcb/composite.h			xcomp-libxcb-include	xorg
 ./usr/X11R7/include/xcb/damage.h			xcomp-libxcb-include	xorg
+./usr/X11R7/include/xcb/dbe.h				xcomp-libxcb-include	xorg
 ./usr/X11R7/include/xcb/dpms.h				xcomp-libxcb-include	xorg
 ./usr/X11R7/include/xcb/dri2.h				xcomp-libxcb-include	xorg
 ./usr/X11R7/include/xcb/dri3.h				xcomp-libxcb-include	xorg
@@ -1262,6 +1263,8 @@
 ./usr/X11R7/lib/libxcb-composite_p.a			xcomp-libxcb-lib	profile,xorg,compatx11file
 ./usr/X11R7/lib/libxcb-damage.a				xcomp-libxcb-lib	xorg,compatx11file
 ./usr/X11R7/lib/libxcb-damage_p.a			xcomp-libxcb-lib	profile,xorg,compatx11file
+./usr/X11R7/lib/libxcb-dbe.a				xcomp-libxcb-lib	xorg,compatx11file
+./usr/X11R7/lib/libxcb-dbe_p.a				xcomp-libxcb-lib	profile,xorg,compatx11file
 ./usr/X11R7/lib/libxcb-dpms.a				xcomp-libxcb-lib	xorg,compatx11file
 ./usr/X11R7/lib/libxcb-dpms_p.a				xcomp-libxcb-lib	profile,xorg,compatx11file
 ./usr/X11R7/lib/libxcb-dri2.a				xcomp-libxcb-lib	xorg,compatx11file
@@ -1385,6 +1388,7 @@
 ./usr/X11R7/lib/pkgconfig/xcb-aux.pc			xcomp-xcb-util-lib	xorg
 ./usr/X11R7/lib/pkgconfig/xcb-composite.pc		xcomp-libxcb-lib	xorg
 ./usr/X11R7/lib/pkgconfig/xcb-damage.pc			xcomp-libxcb-lib	xorg
+./usr/X11R7/lib/pkgconfig/xcb-dbe.pc			xcomp-libxcb-lib	xorg
 ./usr/X11R7/lib/pkgconfig/xcb-dpms.pc			xcomp-libxcb-lib	xorg
 ./usr/X11R7/lib/pkgconfig/xcb-dri2.pc			xcomp-libxcb-lib	xorg
 ./usr/X11R7/lib/pkgconfig/xcb-dri3.pc			xcomp-libxcb-lib	xorg
@@ -5983,6 +5987,7 @@
 ./usr/libdata/lint/llib-lre.ln				xcomp-obsolete	obsolete
 ./usr/libdata/lint/llib-lxcb-composite.ln		xcomp-obsolete	obsolete
 ./usr/libdata/lint/llib-lxcb-damage.ln			xcomp-libxcb-lintlib	lint,xorg
+./usr/libdata/lint/llib-lxcb-dbe.ln			xcomp-libxcb-lintlib	lint,xorg
 ./usr/libdata/lint/llib-lxcb-dpms.ln			xcomp-libxcb-lintlib	lint,xorg
 ./usr/libdata/lint/llib-lxcb-dri2.ln			xcomp-libxcb-lintlib	lint,xorg
 ./usr/libdata/lint/llib-lxcb-dri3.ln			xcomp-libxcb-lintlib	lint,xorg

Index: src/distrib/sets/lists/xdebug/mi
diff -u src/distrib/sets/lists/xdebug/mi:1.48 src/distrib/sets/lists/xdebug/mi:1.49
--- src/distrib/sets/lists/xdebug/mi:1.48	Thu Jul  4 05:23:33 2024
+++ src/distrib/sets/lists/xdebug/mi	Thu Jul  4 07:52:29 2024
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.48 2024/07/04 05:23:33 mrg Exp $
+# $NetBSD: mi,v 1.49 2024/07/04 07:52:29 mrg Exp $
 ./etc/mtree/set.xdebug					comp-sys-root
 ./usr/X11R7/lib						base-x11-root	xorg,debuglib,compatx11dir
 ./usr/X11R7/lib/libEGL_g.a				xdebug-libEGL-debuglib	xorg,debuglib,compatx11file,xorg_glamor
@@ -72,6 +72,7 @@
 ./usr/X11R7/lib/libxcb-aux_g.a				xdebug-xcb-util-debuglib	xorg,debuglib,compatx11file
 ./usr/X11R7/lib/libxcb-composite_g.a			xdebug-libxcb-debuglib	xorg,debuglib,compatx11file
 ./usr/X11R7/lib/libxcb-damage_g.a			xdebug-libxcb-debuglib	xorg,debuglib,compatx11file
+./usr/X11R7/lib/libxcb-dbe_g.a				xdebug-libxcb-debuglib	xorg,debuglib,compatx11file
 ./usr/X11R7/lib/libxcb-dpms_g.a				xdebug-libxcb-debuglib	xorg,debuglib,compatx11file
 ./usr/X11R7/lib/libxcb-dri2_g.a				xdebug-libxcb-debuglib	xorg,debuglib,compatx11file
 ./usr/X11R7/lib/libxcb-dri3_g.a				xdebug-libxcb-debuglib	xorg,debuglib,compatx11file

Index: src/distrib/sets/lists/xdebug/shl.mi
diff -u src/distrib/sets/lists/xdebug/shl.mi:1.71 src/distrib/sets/lists/xdebug/shl.mi:1.72
--- src/distrib/sets/lists/xdebug/shl.mi:1.71	Sat Jun 15 12:38:16 2024
+++ src/distrib/sets/lists/xdebug/shl.mi	Thu Jul  4 07:52:29 2024
@@ -1,4 +1,4 @@
-# $NetBSD: shl.mi,v 1.71 2024/06/15 12:38:16 wiz Exp $
+# $NetBSD: shl.mi,v 1.72 2024/07/04 07:52:29 mrg Exp $
 ./usr/libdata/debug/usr/X11R7/lib	base-sys-usr		xorg,debug,compatx11dir
 ./usr/libdata/debug/usr/X11R7/lib/X11/locale/lib/common/libximcp.so.2.0.debug	obsolete		obsolete
 ./usr/libdata/debug/usr/X11R7/lib/X11/locale/lib/common/libxlcDef.so.2.0.debug	obsolete		obsolete
@@ -66,6 +66,7 @@
 ./usr/libdata/debug/usr/X11R7/lib/libxcb-aux.so.0.0.debug	xdebug-xcb-util-debug		xorg,debug,compatx11file
 ./usr/libdata/debug/usr/X11R7/lib/libxcb-composite.so.0.1.debug	xdebug-libxcb-debug		xorg,debug,compatx11file
 ./usr/libdata/debug/usr/X11R7/lib/libxcb-damage.so.0.1.debug	xdebug-libxcb-debug		xorg,debug,compatx11file
+./usr/libdata/debug/usr/X11R7/lib/libxcb-dbe.so.0.1.debug	xdebug-libxcb-debug		xorg,debug,compatx11file
 ./usr/libdata/debug/usr/X11R7/lib/libxcb-dpms.so.0.1.debug	xdebug-libxcb-debug		xorg,debug,compatx11file
 ./usr/libdata/debug/usr/X11R7/lib/libxcb-dri2.so.0.1.debug	xdebug-libxcb-debug		xorg,debug,compatx11file
 ./usr/libdata/debug/usr/X11R7/lib/libxcb-dri3.so.0.1.debug	xdebug-libxcb-debug		xorg,debug,compatx11file

Index: src/external/mit/xorg/lib/libxcb/Makefile
diff -u src/external/mit/xorg/lib/libxcb/Makefile:1.4 src/external/mit/xorg/lib/libxcb/Makefile:1.5
--- src/external/mit/xorg/lib/libxcb/Makefile:1.4	Sun Mar  5 09:27:53 2017
+++ src/external/mit/xorg/lib/libxcb/Makefile	Thu Jul  4 07:52:28 2024
@@ -1,10 +1,11 @@
-#	$NetBSD: Makefile,v 1.4 2017/03/05 09:27:53 mrg Exp $
+#	$NetBSD: Makefile,v 1.5 2024/07/04 07:52:28 mrg Exp $
 
 SUBDIR=	libxcb .WAIT
 
 SUBDIR+= \
 	composite \
 	damage \
+	dbe \
 	dpms \
 	dri2 \
 	dri3 \

Index: src/external/mit/xorg/lib/libxcb/files/Makefile
diff -u src/external/mit/xorg/lib/libxcb/files/Makefile:1.3 src/external/mit/xorg/lib/libxcb/files/Makefile:1.4
--- src/external/mit/xorg/lib/libxcb/files/Makefile:1.3	Tue Jul 12 02:43:46 2022
+++ src/external/mit/xorg/lib/libxcb/files/Makefile	Thu Jul  4 07:52:28 2024
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.3 2022/07/12 02:43:46 mrg Exp $
+#	$NetBSD: Makefile,v 1.4 2024/07/04 07:52:28 mrg Exp $
 
 # This makefile is used to generate the libxcb xml/python generated files.
 # For now it is broken, and these files were copied from a normal libxcb
@@ -7,8 +7,8 @@
 .include <bsd.own.mk>
 .include "Makefile.xmlsrcs"
 
-PYTHON?=	/usr/pkg/bin/python3.9
-PYTHONLIB?=	/usr/pkg/lib/python3.9
+PYTHON?=	/usr/pkg/bin/python3.11
+PYTHONLIB?=	/usr/pkg/lib/python3.11
 C_CLIENT?=	${X11SRCDIR.xcb}/src/c_client.py
 
 .SUFFIXES: .c .xml
@@ -28,7 +28,7 @@ NEWCONFIGDIR?=  ${.CURDIR}
 		-p ${PYTHONLIB}/site-packages ${.IMPSRC} \
 	)
 
-generate_from_xml: ${XMLSRCS}
+generate_from_xml: ${XMLSRCS:.xml=.c}
 
 all: generate_from_xml
 
Index: src/external/mit/xorg/lib/libxcb/files/present.c
diff -u src/external/mit/xorg/lib/libxcb/files/present.c:1.3 src/external/mit/xorg/lib/libxcb/files/present.c:1.4
--- src/external/mit/xorg/lib/libxcb/files/present.c:1.3	Sun Mar  5 09:27:53 2017
+++ src/external/mit/xorg/lib/libxcb/files/present.c	Thu Jul  4 07:52:28 2024
@@ -18,6 +18,7 @@
 #include "randr.h"
 #include "xfixes.h"
 #include "sync.h"
+#include "dri3.h"
 
 xcb_extension_t xcb_present_id = { "Present", 0 };
 
@@ -485,6 +486,187 @@ xcb_present_query_capabilities_reply (xc
 }
 
 int
+xcb_present_pixmap_synced_sizeof (const void  *_buffer,
+                                  uint32_t     notifies_len)
+{
+    char *xcb_tmp = (char *)_buffer;
+    unsigned int xcb_buffer_len = 0;
+    unsigned int xcb_block_len = 0;
+    unsigned int xcb_pad = 0;
+    unsigned int xcb_align_to = 0;
+
+
+    xcb_block_len += sizeof(xcb_present_pixmap_synced_request_t);
+    xcb_tmp += xcb_block_len;
+    xcb_buffer_len += xcb_block_len;
+    xcb_block_len = 0;
+    /* notifies */
+    xcb_block_len += notifies_len * sizeof(xcb_present_notify_t);
+    xcb_tmp += xcb_block_len;
+    xcb_align_to = ALIGNOF(xcb_present_notify_t);
+    /* insert padding */
+    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
+    xcb_buffer_len += xcb_block_len + xcb_pad;
+    if (0 != xcb_pad) {
+        xcb_tmp += xcb_pad;
+        xcb_pad = 0;
+    }
+    xcb_block_len = 0;
+
+    return xcb_buffer_len;
+}
+
+xcb_void_cookie_t
+xcb_present_pixmap_synced_checked (xcb_connection_t           *c,
+                                   xcb_window_t                window,
+                                   xcb_pixmap_t                pixmap,
+                                   uint32_t                    serial,
+                                   xcb_xfixes_region_t         valid,
+                                   xcb_xfixes_region_t         update,
+                                   int16_t                     x_off,
+                                   int16_t                     y_off,
+                                   xcb_randr_crtc_t            target_crtc,
+                                   xcb_dri3_syncobj_t          acquire_syncobj,
+                                   xcb_dri3_syncobj_t          release_syncobj,
+                                   uint64_t                    acquire_point,
+                                   uint64_t                    release_point,
+                                   uint32_t                    options,
+                                   uint64_t                    target_msc,
+                                   uint64_t                    divisor,
+                                   uint64_t                    remainder,
+                                   uint32_t                    notifies_len,
+                                   const xcb_present_notify_t *notifies)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 4,
+        .ext = &xcb_present_id,
+        .opcode = XCB_PRESENT_PIXMAP_SYNCED,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[6];
+    xcb_void_cookie_t xcb_ret;
+    xcb_present_pixmap_synced_request_t xcb_out;
+
+    xcb_out.window = window;
+    xcb_out.pixmap = pixmap;
+    xcb_out.serial = serial;
+    xcb_out.valid = valid;
+    xcb_out.update = update;
+    xcb_out.x_off = x_off;
+    xcb_out.y_off = y_off;
+    xcb_out.target_crtc = target_crtc;
+    xcb_out.acquire_syncobj = acquire_syncobj;
+    xcb_out.release_syncobj = release_syncobj;
+    xcb_out.acquire_point = acquire_point;
+    xcb_out.release_point = release_point;
+    xcb_out.options = options;
+    memset(xcb_out.pad0, 0, 4);
+    xcb_out.target_msc = target_msc;
+    xcb_out.divisor = divisor;
+    xcb_out.remainder = remainder;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+    /* xcb_present_notify_t notifies */
+    xcb_parts[4].iov_base = (char *) notifies;
+    xcb_parts[4].iov_len = notifies_len * sizeof(xcb_present_notify_t);
+    xcb_parts[5].iov_base = 0;
+    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_void_cookie_t
+xcb_present_pixmap_synced (xcb_connection_t           *c,
+                           xcb_window_t                window,
+                           xcb_pixmap_t                pixmap,
+                           uint32_t                    serial,
+                           xcb_xfixes_region_t         valid,
+                           xcb_xfixes_region_t         update,
+                           int16_t                     x_off,
+                           int16_t                     y_off,
+                           xcb_randr_crtc_t            target_crtc,
+                           xcb_dri3_syncobj_t          acquire_syncobj,
+                           xcb_dri3_syncobj_t          release_syncobj,
+                           uint64_t                    acquire_point,
+                           uint64_t                    release_point,
+                           uint32_t                    options,
+                           uint64_t                    target_msc,
+                           uint64_t                    divisor,
+                           uint64_t                    remainder,
+                           uint32_t                    notifies_len,
+                           const xcb_present_notify_t *notifies)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 4,
+        .ext = &xcb_present_id,
+        .opcode = XCB_PRESENT_PIXMAP_SYNCED,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[6];
+    xcb_void_cookie_t xcb_ret;
+    xcb_present_pixmap_synced_request_t xcb_out;
+
+    xcb_out.window = window;
+    xcb_out.pixmap = pixmap;
+    xcb_out.serial = serial;
+    xcb_out.valid = valid;
+    xcb_out.update = update;
+    xcb_out.x_off = x_off;
+    xcb_out.y_off = y_off;
+    xcb_out.target_crtc = target_crtc;
+    xcb_out.acquire_syncobj = acquire_syncobj;
+    xcb_out.release_syncobj = release_syncobj;
+    xcb_out.acquire_point = acquire_point;
+    xcb_out.release_point = release_point;
+    xcb_out.options = options;
+    memset(xcb_out.pad0, 0, 4);
+    xcb_out.target_msc = target_msc;
+    xcb_out.divisor = divisor;
+    xcb_out.remainder = remainder;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+    /* xcb_present_notify_t notifies */
+    xcb_parts[4].iov_base = (char *) notifies;
+    xcb_parts[4].iov_len = notifies_len * sizeof(xcb_present_notify_t);
+    xcb_parts[5].iov_base = 0;
+    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_present_notify_t *
+xcb_present_pixmap_synced_notifies (const xcb_present_pixmap_synced_request_t *R)
+{
+    return (xcb_present_notify_t *) (R + 1);
+}
+
+int
+xcb_present_pixmap_synced_notifies_length (const xcb_present_pixmap_synced_request_t *R)
+{
+    return (((R->length * 4) - sizeof(xcb_present_pixmap_synced_request_t))/sizeof(xcb_present_notify_t));
+}
+
+xcb_present_notify_iterator_t
+xcb_present_pixmap_synced_notifies_iterator (const xcb_present_pixmap_synced_request_t *R)
+{
+    xcb_present_notify_iterator_t i;
+    i.data = (xcb_present_notify_t *) (R + 1);
+    i.rem = (((R->length * 4) - sizeof(xcb_present_pixmap_synced_request_t))/sizeof(xcb_present_notify_t));
+    i.index = (char *) i.data - (char *) R;
+    return i;
+}
+
+int
 xcb_present_redirect_notify_sizeof (const void  *_buffer,
                                     uint32_t     notifies_len)
 {

Index: src/external/mit/xorg/lib/libxcb/files/Makefile.xmlsrcs
diff -u src/external/mit/xorg/lib/libxcb/files/Makefile.xmlsrcs:1.7 src/external/mit/xorg/lib/libxcb/files/Makefile.xmlsrcs:1.8
--- src/external/mit/xorg/lib/libxcb/files/Makefile.xmlsrcs:1.7	Tue Jul 12 02:43:46 2022
+++ src/external/mit/xorg/lib/libxcb/files/Makefile.xmlsrcs	Thu Jul  4 07:52:28 2024
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.xmlsrcs,v 1.7 2022/07/12 02:43:46 mrg Exp $
+#	$NetBSD: Makefile.xmlsrcs,v 1.8 2024/07/04 07:52:28 mrg Exp $
 
 # list of the libxcb xml-generated .c files.
 
@@ -6,6 +6,7 @@ XMLSRCS= \
 	bigreq.c \
 	composite.c \
 	damage.c \
+	dbe.c \
 	dpms.c \
 	dri2.c \
 	dri3.c \
Index: src/external/mit/xorg/lib/libxcb/files/xinput.c
diff -u src/external/mit/xorg/lib/libxcb/files/xinput.c:1.7 src/external/mit/xorg/lib/libxcb/files/xinput.c:1.8
--- src/external/mit/xorg/lib/libxcb/files/xinput.c:1.7	Tue Jul 12 02:44:09 2022
+++ src/external/mit/xorg/lib/libxcb/files/xinput.c	Thu Jul  4 07:52:28 2024
@@ -4325,13 +4325,13 @@ xcb_input_change_feedback_control_checke
                                            xcb_input_feedback_ctl_t *feedback)
 {
     static const xcb_protocol_request_t xcb_req = {
-        .count = 4,
+        .count = 3,
         .ext = &xcb_input_id,
         .opcode = XCB_INPUT_CHANGE_FEEDBACK_CONTROL,
         .isvoid = 1
     };
 
-    struct iovec xcb_parts[6];
+    struct iovec xcb_parts[5];
     xcb_void_cookie_t xcb_ret;
     xcb_input_change_feedback_control_request_t xcb_out;
 
@@ -4361,13 +4361,13 @@ xcb_input_change_feedback_control (xcb_c
                                    xcb_input_feedback_ctl_t *feedback)
 {
     static const xcb_protocol_request_t xcb_req = {
-        .count = 4,
+        .count = 3,
         .ext = &xcb_input_id,
         .opcode = XCB_INPUT_CHANGE_FEEDBACK_CONTROL,
         .isvoid = 1
     };
 
-    struct iovec xcb_parts[6];
+    struct iovec xcb_parts[5];
     xcb_void_cookie_t xcb_ret;
     xcb_input_change_feedback_control_request_t xcb_out;
 
@@ -7311,13 +7311,13 @@ xcb_input_change_device_control (xcb_con
                                  xcb_input_device_ctl_t *control)
 {
     static const xcb_protocol_request_t xcb_req = {
-        .count = 4,
+        .count = 3,
         .ext = &xcb_input_id,
         .opcode = XCB_INPUT_CHANGE_DEVICE_CONTROL,
         .isvoid = 0
     };
 
-    struct iovec xcb_parts[6];
+    struct iovec xcb_parts[5];
     xcb_input_change_device_control_cookie_t xcb_ret;
     xcb_input_change_device_control_request_t xcb_out;
 
@@ -7345,13 +7345,13 @@ xcb_input_change_device_control_unchecke
                                            xcb_input_device_ctl_t *control)
 {
     static const xcb_protocol_request_t xcb_req = {
-        .count = 4,
+        .count = 3,
         .ext = &xcb_input_id,
         .opcode = XCB_INPUT_CHANGE_DEVICE_CONTROL,
         .isvoid = 0
     };
 
-    struct iovec xcb_parts[6];
+    struct iovec xcb_parts[5];
     xcb_input_change_device_control_cookie_t xcb_ret;
     xcb_input_change_device_control_request_t xcb_out;
 

Index: src/external/mit/xorg/lib/libxcb/files/bigreq.h
diff -u src/external/mit/xorg/lib/libxcb/files/bigreq.h:1.4 src/external/mit/xorg/lib/libxcb/files/bigreq.h:1.5
--- src/external/mit/xorg/lib/libxcb/files/bigreq.h:1.4	Sun Mar  5 09:27:53 2017
+++ src/external/mit/xorg/lib/libxcb/files/bigreq.h	Thu Jul  4 07:52:28 2024
@@ -54,22 +54,30 @@ typedef struct xcb_big_requests_enable_r
 } xcb_big_requests_enable_reply_t;
 
 /**
+ * @brief Enable the BIG-REQUESTS extension
  *
  * @param c The connection
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This enables the BIG-REQUESTS extension, which allows for requests larger than
+ * 262140 bytes in length.  When enabled, if the 16-bit length field is zero, it
+ * is immediately followed by a 32-bit length field specifying the length of the
+ * request in 4-byte units.
  *
  */
 xcb_big_requests_enable_cookie_t
 xcb_big_requests_enable (xcb_connection_t *c);
 
 /**
+ * @brief Enable the BIG-REQUESTS extension
  *
  * @param c The connection
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This enables the BIG-REQUESTS extension, which allows for requests larger than
+ * 262140 bytes in length.  When enabled, if the 16-bit length field is zero, it
+ * is immediately followed by a 32-bit length field specifying the length of the
+ * request in 4-byte units.
  *
  * This form can be used only if the request will cause
  * a reply to be generated. Any returned error will be
Index: src/external/mit/xorg/lib/libxcb/files/dpms.c
diff -u src/external/mit/xorg/lib/libxcb/files/dpms.c:1.4 src/external/mit/xorg/lib/libxcb/files/dpms.c:1.5
--- src/external/mit/xorg/lib/libxcb/files/dpms.c:1.4	Sun Mar  5 09:27:53 2017
+++ src/external/mit/xorg/lib/libxcb/files/dpms.c	Thu Jul  4 07:52:28 2024
@@ -14,6 +14,7 @@
 #include "dpms.h"
 
 #define ALIGNOF(type) offsetof(struct { char dummy; type member; }, member)
+#include "xproto.h"
 
 xcb_extension_t xcb_dpms_id = { "DPMS", 0 };
 
@@ -457,3 +458,55 @@ xcb_dpms_info_reply (xcb_connection_t   
     return (xcb_dpms_info_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
 }
 
+xcb_void_cookie_t
+xcb_dpms_select_input_checked (xcb_connection_t *c,
+                               uint32_t          event_mask)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dpms_id,
+        .opcode = XCB_DPMS_SELECT_INPUT,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dpms_select_input_request_t xcb_out;
+
+    xcb_out.event_mask = event_mask;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_void_cookie_t
+xcb_dpms_select_input (xcb_connection_t *c,
+                       uint32_t          event_mask)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dpms_id,
+        .opcode = XCB_DPMS_SELECT_INPUT,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dpms_select_input_request_t xcb_out;
+
+    xcb_out.event_mask = event_mask;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
Index: src/external/mit/xorg/lib/libxcb/files/present.h
diff -u src/external/mit/xorg/lib/libxcb/files/present.h:1.4 src/external/mit/xorg/lib/libxcb/files/present.h:1.5
--- src/external/mit/xorg/lib/libxcb/files/present.h:1.4	Wed Mar 14 06:47:28 2018
+++ src/external/mit/xorg/lib/libxcb/files/present.h	Thu Jul  4 07:52:28 2024
@@ -17,13 +17,14 @@
 #include "randr.h"
 #include "xfixes.h"
 #include "sync.h"
+#include "dri3.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 #define XCB_PRESENT_MAJOR_VERSION 1
-#define XCB_PRESENT_MINOR_VERSION 2
+#define XCB_PRESENT_MINOR_VERSION 4
 
 extern xcb_extension_t xcb_present_id;
 
@@ -47,14 +48,17 @@ typedef enum xcb_present_option_t {
     XCB_PRESENT_OPTION_ASYNC = 1,
     XCB_PRESENT_OPTION_COPY = 2,
     XCB_PRESENT_OPTION_UST = 4,
-    XCB_PRESENT_OPTION_SUBOPTIMAL = 8
+    XCB_PRESENT_OPTION_SUBOPTIMAL = 8,
+    XCB_PRESENT_OPTION_ASYNC_MAY_TEAR = 16
 } xcb_present_option_t;
 
 typedef enum xcb_present_capability_t {
     XCB_PRESENT_CAPABILITY_NONE = 0,
     XCB_PRESENT_CAPABILITY_ASYNC = 1,
     XCB_PRESENT_CAPABILITY_FENCE = 2,
-    XCB_PRESENT_CAPABILITY_UST = 4
+    XCB_PRESENT_CAPABILITY_UST = 4,
+    XCB_PRESENT_CAPABILITY_ASYNC_MAY_TEAR = 8,
+    XCB_PRESENT_CAPABILITY_SYNCOBJ = 16
 } xcb_present_capability_t;
 
 typedef enum xcb_present_complete_kind_t {
@@ -221,6 +225,35 @@ typedef struct xcb_present_query_capabil
     uint32_t capabilities;
 } xcb_present_query_capabilities_reply_t;
 
+/** Opcode for xcb_present_pixmap_synced. */
+#define XCB_PRESENT_PIXMAP_SYNCED 5
+
+/**
+ * @brief xcb_present_pixmap_synced_request_t
+ **/
+typedef struct xcb_present_pixmap_synced_request_t {
+    uint8_t             major_opcode;
+    uint8_t             minor_opcode;
+    uint16_t            length;
+    xcb_window_t        window;
+    xcb_pixmap_t        pixmap;
+    uint32_t            serial;
+    xcb_xfixes_region_t valid;
+    xcb_xfixes_region_t update;
+    int16_t             x_off;
+    int16_t             y_off;
+    xcb_randr_crtc_t    target_crtc;
+    xcb_dri3_syncobj_t  acquire_syncobj;
+    xcb_dri3_syncobj_t  release_syncobj;
+    uint64_t            acquire_point;
+    uint64_t            release_point;
+    uint32_t            options;
+    uint8_t             pad0[4];
+    uint64_t            target_msc;
+    uint64_t            divisor;
+    uint64_t            remainder;
+} xcb_present_pixmap_synced_request_t;
+
 /** Opcode for xcb_present_generic. */
 #define XCB_PRESENT_GENERIC 0
 
@@ -620,6 +653,80 @@ xcb_present_query_capabilities_reply (xc
                                       xcb_generic_error_t                     **e);
 
 int
+xcb_present_pixmap_synced_sizeof (const void  *_buffer,
+                                  uint32_t     notifies_len);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_present_pixmap_synced_checked (xcb_connection_t           *c,
+                                   xcb_window_t                window,
+                                   xcb_pixmap_t                pixmap,
+                                   uint32_t                    serial,
+                                   xcb_xfixes_region_t         valid,
+                                   xcb_xfixes_region_t         update,
+                                   int16_t                     x_off,
+                                   int16_t                     y_off,
+                                   xcb_randr_crtc_t            target_crtc,
+                                   xcb_dri3_syncobj_t          acquire_syncobj,
+                                   xcb_dri3_syncobj_t          release_syncobj,
+                                   uint64_t                    acquire_point,
+                                   uint64_t                    release_point,
+                                   uint32_t                    options,
+                                   uint64_t                    target_msc,
+                                   uint64_t                    divisor,
+                                   uint64_t                    remainder,
+                                   uint32_t                    notifies_len,
+                                   const xcb_present_notify_t *notifies);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_present_pixmap_synced (xcb_connection_t           *c,
+                           xcb_window_t                window,
+                           xcb_pixmap_t                pixmap,
+                           uint32_t                    serial,
+                           xcb_xfixes_region_t         valid,
+                           xcb_xfixes_region_t         update,
+                           int16_t                     x_off,
+                           int16_t                     y_off,
+                           xcb_randr_crtc_t            target_crtc,
+                           xcb_dri3_syncobj_t          acquire_syncobj,
+                           xcb_dri3_syncobj_t          release_syncobj,
+                           uint64_t                    acquire_point,
+                           uint64_t                    release_point,
+                           uint32_t                    options,
+                           uint64_t                    target_msc,
+                           uint64_t                    divisor,
+                           uint64_t                    remainder,
+                           uint32_t                    notifies_len,
+                           const xcb_present_notify_t *notifies);
+
+xcb_present_notify_t *
+xcb_present_pixmap_synced_notifies (const xcb_present_pixmap_synced_request_t *R);
+
+int
+xcb_present_pixmap_synced_notifies_length (const xcb_present_pixmap_synced_request_t *R);
+
+xcb_present_notify_iterator_t
+xcb_present_pixmap_synced_notifies_iterator (const xcb_present_pixmap_synced_request_t *R);
+
+int
 xcb_present_redirect_notify_sizeof (const void  *_buffer,
                                     uint32_t     notifies_len);
 

Index: src/external/mit/xorg/lib/libxcb/files/composite.h
diff -u src/external/mit/xorg/lib/libxcb/files/composite.h:1.5 src/external/mit/xorg/lib/libxcb/files/composite.h:1.6
--- src/external/mit/xorg/lib/libxcb/files/composite.h:1.5	Sun Mar  5 09:27:53 2017
+++ src/external/mit/xorg/lib/libxcb/files/composite.h	Thu Jul  4 07:52:28 2024
@@ -198,11 +198,15 @@ typedef struct xcb_composite_release_ove
 } xcb_composite_release_overlay_window_request_t;
 
 /**
+ * @brief Negotiate the version of Composite
  *
  * @param c The connection
+ * @param client_major_version The major version supported by the client.
+ * @param client_minor_version The minor version supported by the client.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This negotiates the version of the Composite extension.  It must be precede all
+ * other requests using Composite.  Failure to do so will cause a BadRequest error.
  *
  */
 xcb_composite_query_version_cookie_t
@@ -211,11 +215,15 @@ xcb_composite_query_version (xcb_connect
                              uint32_t          client_minor_version);
 
 /**
+ * @brief Negotiate the version of Composite
  *
  * @param c The connection
+ * @param client_major_version The major version supported by the client.
+ * @param client_minor_version The minor version supported by the client.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This negotiates the version of the Composite extension.  It must be precede all
+ * other requests using Composite.  Failure to do so will cause a BadRequest error.
  *
  * This form can be used only if the request will cause
  * a reply to be generated. Any returned error will be
@@ -246,11 +254,22 @@ xcb_composite_query_version_reply (xcb_c
                                    xcb_generic_error_t                  **e);
 
 /**
+ * @brief Redirect the hierarchy starting at "window" to off-screen storage.
  *
  * @param c The connection
- * @return A cookie
- *
- * Delivers a request to the X server.
+ * @param window The root of the hierarchy to redirect to off-screen storage.
+ * @param update A bitmask of #xcb_composite_redirect_t values.
+ * @param update Whether contents are automatically mirrored to the parent window.  If one client
+ * 	already specifies an update type of Manual, any attempt by another to specify a
+ * 	mode of Manual so will result in an Access error.
+ * @return A cookie
+ *
+ * The hierarchy starting at 'window' is directed to off-screen
+ * 	storage.  When all clients enabling redirection terminate,
+ * 	the redirection will automatically be disabled.
+ * 
+ * 	The root window may not be redirected. Doing so results in a Match
+ * 	error.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -262,11 +281,22 @@ xcb_composite_redirect_window_checked (x
                                        uint8_t           update);
 
 /**
+ * @brief Redirect the hierarchy starting at "window" to off-screen storage.
  *
  * @param c The connection
- * @return A cookie
- *
- * Delivers a request to the X server.
+ * @param window The root of the hierarchy to redirect to off-screen storage.
+ * @param update A bitmask of #xcb_composite_redirect_t values.
+ * @param update Whether contents are automatically mirrored to the parent window.  If one client
+ * 	already specifies an update type of Manual, any attempt by another to specify a
+ * 	mode of Manual so will result in an Access error.
+ * @return A cookie
+ *
+ * The hierarchy starting at 'window' is directed to off-screen
+ * 	storage.  When all clients enabling redirection terminate,
+ * 	the redirection will automatically be disabled.
+ * 
+ * 	The root window may not be redirected. Doing so results in a Match
+ * 	error.
  *
  */
 xcb_void_cookie_t
@@ -275,11 +305,20 @@ xcb_composite_redirect_window (xcb_conne
                                uint8_t           update);
 
 /**
+ * @brief Redirect all current and future children of ‘window’
  *
  * @param c The connection
+ * @param window The root of the hierarchy to redirect to off-screen storage.
+ * @param update A bitmask of #xcb_composite_redirect_t values.
+ * @param update Whether contents are automatically mirrored to the parent window.  If one client
+ * 	already specifies an update type of Manual, any attempt by another to specify a
+ * 	mode of Manual so will result in an Access error.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Hierarchies starting at all current and future children of window
+ * 	will be redirected as in RedirectWindow. If update is Manual,
+ * 	then painting of the window background during window manipulation
+ * 	and ClearArea requests is inhibited.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -291,11 +330,20 @@ xcb_composite_redirect_subwindows_checke
                                            uint8_t           update);
 
 /**
+ * @brief Redirect all current and future children of ‘window’
  *
  * @param c The connection
+ * @param window The root of the hierarchy to redirect to off-screen storage.
+ * @param update A bitmask of #xcb_composite_redirect_t values.
+ * @param update Whether contents are automatically mirrored to the parent window.  If one client
+ * 	already specifies an update type of Manual, any attempt by another to specify a
+ * 	mode of Manual so will result in an Access error.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Hierarchies starting at all current and future children of window
+ * 	will be redirected as in RedirectWindow. If update is Manual,
+ * 	then painting of the window background during window manipulation
+ * 	and ClearArea requests is inhibited.
  *
  */
 xcb_void_cookie_t
@@ -304,11 +352,18 @@ xcb_composite_redirect_subwindows (xcb_c
                                    uint8_t           update);
 
 /**
+ * @brief Terminate redirection of the specified window.
  *
  * @param c The connection
+ * @param window The window to terminate redirection of.  Must be redirected by the
+ * 	current client, or a Value error results.
+ * @param update A bitmask of #xcb_composite_redirect_t values.
+ * @param update The update type passed to RedirectWindows.  If this does not match the
+ * 	previously requested update type, a Value error results.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Redirection of the specified window will be terminated.  This cannot be
+ * 	used if the window was redirected with RedirectSubwindows.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -320,11 +375,18 @@ xcb_composite_unredirect_window_checked 
                                          uint8_t           update);
 
 /**
+ * @brief Terminate redirection of the specified window.
  *
  * @param c The connection
+ * @param window The window to terminate redirection of.  Must be redirected by the
+ * 	current client, or a Value error results.
+ * @param update A bitmask of #xcb_composite_redirect_t values.
+ * @param update The update type passed to RedirectWindows.  If this does not match the
+ * 	previously requested update type, a Value error results.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Redirection of the specified window will be terminated.  This cannot be
+ * 	used if the window was redirected with RedirectSubwindows.
  *
  */
 xcb_void_cookie_t
@@ -333,11 +395,18 @@ xcb_composite_unredirect_window (xcb_con
                                  uint8_t           update);
 
 /**
+ * @brief Terminate redirection of the specified window’s children
  *
  * @param c The connection
+ * @param window The window to terminate redirection of.  Must have previously been
+ * 	selected for sub-redirection by the current client, or a Value error
+ * 	results.
+ * @param update A bitmask of #xcb_composite_redirect_t values.
+ * @param update The update type passed to RedirectSubWindows.  If this does not match
+ * 	the previously requested update type, a Value error results.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Redirection of all children of window will be terminated.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -349,11 +418,18 @@ xcb_composite_unredirect_subwindows_chec
                                              uint8_t           update);
 
 /**
+ * @brief Terminate redirection of the specified window’s children
  *
  * @param c The connection
+ * @param window The window to terminate redirection of.  Must have previously been
+ * 	selected for sub-redirection by the current client, or a Value error
+ * 	results.
+ * @param update A bitmask of #xcb_composite_redirect_t values.
+ * @param update The update type passed to RedirectSubWindows.  If this does not match
+ * 	the previously requested update type, a Value error results.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Redirection of all children of window will be terminated.
  *
  */
 xcb_void_cookie_t
Index: src/external/mit/xorg/lib/libxcb/files/dpms.h
diff -u src/external/mit/xorg/lib/libxcb/files/dpms.h:1.5 src/external/mit/xorg/lib/libxcb/files/dpms.h:1.6
--- src/external/mit/xorg/lib/libxcb/files/dpms.h:1.5	Sun Mar  5 09:27:53 2017
+++ src/external/mit/xorg/lib/libxcb/files/dpms.h	Thu Jul  4 07:52:28 2024
@@ -13,13 +13,14 @@
 #define __DPMS_H
 
 #include "xcb.h"
+#include "xproto.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#define XCB_DPMS_MAJOR_VERSION 0
-#define XCB_DPMS_MINOR_VERSION 0
+#define XCB_DPMS_MAJOR_VERSION 1
+#define XCB_DPMS_MINOR_VERSION 2
 
 extern xcb_extension_t xcb_dpms_id;
 
@@ -211,6 +212,42 @@ typedef struct xcb_dpms_info_reply_t {
     uint8_t  pad1[21];
 } xcb_dpms_info_reply_t;
 
+typedef enum xcb_dpms_event_mask_t {
+    XCB_DPMS_EVENT_MASK_INFO_NOTIFY = 1
+} xcb_dpms_event_mask_t;
+
+/** Opcode for xcb_dpms_select_input. */
+#define XCB_DPMS_SELECT_INPUT 8
+
+/**
+ * @brief xcb_dpms_select_input_request_t
+ **/
+typedef struct xcb_dpms_select_input_request_t {
+    uint8_t  major_opcode;
+    uint8_t  minor_opcode;
+    uint16_t length;
+    uint32_t event_mask;
+} xcb_dpms_select_input_request_t;
+
+/** Opcode for xcb_dpms_info_notify. */
+#define XCB_DPMS_INFO_NOTIFY 0
+
+/**
+ * @brief xcb_dpms_info_notify_event_t
+ **/
+typedef struct xcb_dpms_info_notify_event_t {
+    uint8_t         response_type;
+    uint8_t         extension;
+    uint16_t        sequence;
+    uint32_t        length;
+    uint16_t        event_type;
+    uint8_t         pad0[2];
+    xcb_timestamp_t timestamp;
+    uint16_t        power_level;
+    uint8_t         state;
+    uint8_t         pad1[21];
+} xcb_dpms_info_notify_event_t;
+
 /**
  *
  * @param c The connection
@@ -499,6 +536,33 @@ xcb_dpms_info_reply (xcb_connection_t   
                      xcb_dpms_info_cookie_t   cookie  /**< */,
                      xcb_generic_error_t    **e);
 
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_dpms_select_input_checked (xcb_connection_t *c,
+                               uint32_t          event_mask);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_dpms_select_input (xcb_connection_t *c,
+                       uint32_t          event_mask);
+
 
 #ifdef __cplusplus
 }
Index: src/external/mit/xorg/lib/libxcb/files/dri3.c
diff -u src/external/mit/xorg/lib/libxcb/files/dri3.c:1.5 src/external/mit/xorg/lib/libxcb/files/dri3.c:1.6
--- src/external/mit/xorg/lib/libxcb/files/dri3.c:1.5	Tue Jul 12 02:44:09 2022
+++ src/external/mit/xorg/lib/libxcb/files/dri3.c	Thu Jul  4 07:52:28 2024
@@ -18,6 +18,24 @@
 
 xcb_extension_t xcb_dri3_id = { "DRI3", 0 };
 
+void
+xcb_dri3_syncobj_next (xcb_dri3_syncobj_iterator_t *i)
+{
+    --i->rem;
+    ++i->data;
+    i->index += sizeof(xcb_dri3_syncobj_t);
+}
+
+xcb_generic_iterator_t
+xcb_dri3_syncobj_end (xcb_dri3_syncobj_iterator_t i)
+{
+    xcb_generic_iterator_t ret;
+    ret.data = i.data + i.rem;
+    ret.index = i.index + ((char *) ret.data - (char *) i.data);
+    ret.rem = 0;
+    return ret;
+}
+
 xcb_dri3_query_version_cookie_t
 xcb_dri3_query_version (xcb_connection_t *c,
                         uint32_t          major_version,
@@ -977,3 +995,119 @@ xcb_dri3_set_drm_device_in_use (xcb_conn
     return xcb_ret;
 }
 
+xcb_void_cookie_t
+xcb_dri3_import_syncobj_checked (xcb_connection_t   *c,
+                                 xcb_dri3_syncobj_t  syncobj,
+                                 xcb_drawable_t      drawable,
+                                 int32_t             syncobj_fd)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dri3_id,
+        .opcode = XCB_DRI3_IMPORT_SYNCOBJ,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dri3_import_syncobj_request_t xcb_out;
+    int fds[1];
+    int fd_index = 0;
+
+    xcb_out.syncobj = syncobj;
+    xcb_out.drawable = drawable;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    fds[fd_index++] = syncobj_fd;
+    xcb_ret.sequence = xcb_send_request_with_fds(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req, 1, fds);
+    return xcb_ret;
+}
+
+xcb_void_cookie_t
+xcb_dri3_import_syncobj (xcb_connection_t   *c,
+                         xcb_dri3_syncobj_t  syncobj,
+                         xcb_drawable_t      drawable,
+                         int32_t             syncobj_fd)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dri3_id,
+        .opcode = XCB_DRI3_IMPORT_SYNCOBJ,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dri3_import_syncobj_request_t xcb_out;
+    int fds[1];
+    int fd_index = 0;
+
+    xcb_out.syncobj = syncobj;
+    xcb_out.drawable = drawable;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    fds[fd_index++] = syncobj_fd;
+    xcb_ret.sequence = xcb_send_request_with_fds(c, 0, xcb_parts + 2, &xcb_req, 1, fds);
+    return xcb_ret;
+}
+
+xcb_void_cookie_t
+xcb_dri3_free_syncobj_checked (xcb_connection_t   *c,
+                               xcb_dri3_syncobj_t  syncobj)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dri3_id,
+        .opcode = XCB_DRI3_FREE_SYNCOBJ,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dri3_free_syncobj_request_t xcb_out;
+
+    xcb_out.syncobj = syncobj;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_void_cookie_t
+xcb_dri3_free_syncobj (xcb_connection_t   *c,
+                       xcb_dri3_syncobj_t  syncobj)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dri3_id,
+        .opcode = XCB_DRI3_FREE_SYNCOBJ,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dri3_free_syncobj_request_t xcb_out;
+
+    xcb_out.syncobj = syncobj;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
Index: src/external/mit/xorg/lib/libxcb/files/dri3.h
diff -u src/external/mit/xorg/lib/libxcb/files/dri3.h:1.5 src/external/mit/xorg/lib/libxcb/files/dri3.h:1.6
--- src/external/mit/xorg/lib/libxcb/files/dri3.h:1.5	Tue Jul 12 02:44:09 2022
+++ src/external/mit/xorg/lib/libxcb/files/dri3.h	Thu Jul  4 07:52:28 2024
@@ -20,10 +20,21 @@ extern "C" {
 #endif
 
 #define XCB_DRI3_MAJOR_VERSION 1
-#define XCB_DRI3_MINOR_VERSION 3
+#define XCB_DRI3_MINOR_VERSION 4
 
 extern xcb_extension_t xcb_dri3_id;
 
+typedef uint32_t xcb_dri3_syncobj_t;
+
+/**
+ * @brief xcb_dri3_syncobj_iterator_t
+ **/
+typedef struct xcb_dri3_syncobj_iterator_t {
+    xcb_dri3_syncobj_t *data;
+    int                 rem;
+    int                 index;
+} xcb_dri3_syncobj_iterator_t;
+
 /**
  * @brief xcb_dri3_query_version_cookie_t
  **/
@@ -312,6 +323,56 @@ typedef struct xcb_dri3_set_drm_device_i
     uint32_t     drmMinor;
 } xcb_dri3_set_drm_device_in_use_request_t;
 
+/** Opcode for xcb_dri3_import_syncobj. */
+#define XCB_DRI3_IMPORT_SYNCOBJ 10
+
+/**
+ * @brief xcb_dri3_import_syncobj_request_t
+ **/
+typedef struct xcb_dri3_import_syncobj_request_t {
+    uint8_t            major_opcode;
+    uint8_t            minor_opcode;
+    uint16_t           length;
+    xcb_dri3_syncobj_t syncobj;
+    xcb_drawable_t     drawable;
+} xcb_dri3_import_syncobj_request_t;
+
+/** Opcode for xcb_dri3_free_syncobj. */
+#define XCB_DRI3_FREE_SYNCOBJ 11
+
+/**
+ * @brief xcb_dri3_free_syncobj_request_t
+ **/
+typedef struct xcb_dri3_free_syncobj_request_t {
+    uint8_t            major_opcode;
+    uint8_t            minor_opcode;
+    uint16_t           length;
+    xcb_dri3_syncobj_t syncobj;
+} xcb_dri3_free_syncobj_request_t;
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_dri3_syncobj_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_dri3_syncobj_t)
+ */
+void
+xcb_dri3_syncobj_next (xcb_dri3_syncobj_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_dri3_syncobj_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_dri3_syncobj_end (xcb_dri3_syncobj_iterator_t i);
+
 /**
  *
  * @param c The connection
@@ -872,6 +933,64 @@ xcb_dri3_set_drm_device_in_use (xcb_conn
                                 uint32_t          drmMajor,
                                 uint32_t          drmMinor);
 
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_dri3_import_syncobj_checked (xcb_connection_t   *c,
+                                 xcb_dri3_syncobj_t  syncobj,
+                                 xcb_drawable_t      drawable,
+                                 int32_t             syncobj_fd);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_dri3_import_syncobj (xcb_connection_t   *c,
+                         xcb_dri3_syncobj_t  syncobj,
+                         xcb_drawable_t      drawable,
+                         int32_t             syncobj_fd);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_dri3_free_syncobj_checked (xcb_connection_t   *c,
+                               xcb_dri3_syncobj_t  syncobj);
+
+/**
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Delivers a request to the X server.
+ *
+ */
+xcb_void_cookie_t
+xcb_dri3_free_syncobj (xcb_connection_t   *c,
+                       xcb_dri3_syncobj_t  syncobj);
+
 
 #ifdef __cplusplus
 }

Index: src/external/mit/xorg/lib/libxcb/files/config.h
diff -u src/external/mit/xorg/lib/libxcb/files/config.h:1.6 src/external/mit/xorg/lib/libxcb/files/config.h:1.7
--- src/external/mit/xorg/lib/libxcb/files/config.h:1.6	Tue Jul 12 02:44:09 2022
+++ src/external/mit/xorg/lib/libxcb/files/config.h	Thu Jul  4 07:52:28 2024
@@ -22,9 +22,6 @@
 /* Define to 1 if you have the `is_system_labeled' function. */
 /* #undef HAVE_IS_SYSTEM_LABELED */
 
-/* launchd support available */
-/* #undef HAVE_LAUNCHD */
-
 /* Define to 1 if you have the `ws2_32' library (-lws2_32). */
 /* #undef HAVE_LIBWS2_32 */
 
@@ -77,13 +74,13 @@
 #define PACKAGE "libxcb"
 
 /* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "https://gitlab.freedesktop.org/xorg/lib/libxcb/issues";
+#define PACKAGE_BUGREPORT "https://gitlab.freedesktop.org/xorg/lib/libxcb/-/issues";
 
 /* Define to the full name of this package. */
 #define PACKAGE_NAME "libxcb"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "libxcb 1.15"
+#define PACKAGE_STRING "libxcb 1.17.0"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "libxcb"
@@ -92,13 +89,13 @@
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.15"
+#define PACKAGE_VERSION "1.17.0"
 
 /* Major version of this package */
 #define PACKAGE_VERSION_MAJOR 1
 
 /* Minor version of this package */
-#define PACKAGE_VERSION_MINOR 15
+#define PACKAGE_VERSION_MINOR 17
 
 /* Patch version of this package */
 #define PACKAGE_VERSION_PATCHLEVEL 0
@@ -200,10 +197,16 @@
 
 
 /* Version number of package */
-#define VERSION "1.15"
+#define VERSION "1.17.0"
 
 /* XCB buffer queue size */
 #define XCB_QUEUE_BUFFER_SIZE 16384
 
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
 /* Defined if needed to expose struct msghdr.msg_control */
 /* #undef _XOPEN_SOURCE */
Index: src/external/mit/xorg/lib/libxcb/files/damage.h
diff -u src/external/mit/xorg/lib/libxcb/files/damage.h:1.6 src/external/mit/xorg/lib/libxcb/files/damage.h:1.7
--- src/external/mit/xorg/lib/libxcb/files/damage.h:1.6	Tue Jul 12 02:44:09 2022
+++ src/external/mit/xorg/lib/libxcb/files/damage.h	Thu Jul  4 07:52:28 2024
@@ -191,11 +191,16 @@ xcb_generic_iterator_t
 xcb_damage_damage_end (xcb_damage_damage_iterator_t i);
 
 /**
+ * @brief Negotiate the version of the DAMAGE extension
  *
  * @param c The connection
+ * @param client_major_version The major version supported by the client.
+ * @param client_minor_version The minor version supported by the client.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This negotiates the version of the DAMAGE extension.  It must precede any other
+ * request using the DAMAGE extension.  Failure to do so will cause a BadRequest
+ * error for those requests.
  *
  */
 xcb_damage_query_version_cookie_t
@@ -204,11 +209,16 @@ xcb_damage_query_version (xcb_connection
                           uint32_t          client_minor_version);
 
 /**
+ * @brief Negotiate the version of the DAMAGE extension
  *
  * @param c The connection
+ * @param client_major_version The major version supported by the client.
+ * @param client_minor_version The minor version supported by the client.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This negotiates the version of the DAMAGE extension.  It must precede any other
+ * request using the DAMAGE extension.  Failure to do so will cause a BadRequest
+ * error for those requests.
  *
  * This form can be used only if the request will cause
  * a reply to be generated. Any returned error will be
@@ -239,11 +249,40 @@ xcb_damage_query_version_reply (xcb_conn
                                 xcb_generic_error_t               **e);
 
 /**
+ * @brief Creates a Damage object to monitor changes to a drawable.
  *
  * @param c The connection
+ * @param damage The ID with which you will refer to the new Damage object, created by
+ * `xcb_generate_id`.
+ * @param drawable The ID of the drawable to be monitored.
+ * @param level A bitmask of #xcb_damage_report_level_t values.
+ * @param level The level of detail to be provided in Damage events.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This creates a Damage object to monitor changes to a drawable, and specifies
+ * the level of detail to be reported for changes.
+ * 
+ * We call changes made to pixel contents of windows and pixmaps 'damage'
+ * throughout this extension.
+ * 
+ * Damage accumulates as drawing occurs in the drawable.  Each drawing operation
+ * 'damages' one or more rectangular areas within the drawable.  The rectangles
+ * are guaranteed to include the set of pixels modified by each operation, but
+ * may include significantly more than just those pixels.  The desire is for
+ * the damage to strike a balance between the number of rectangles reported and
+ * the extraneous area included.  A reasonable goal is for each primitive
+ * object drawn (line, string, rectangle) to be represented as a single
+ * rectangle and for the damage area of the operation to be the union of these
+ * rectangles.
+ * 
+ * The DAMAGE extension allows applications to either receive the raw
+ * rectangles as a stream of events, or to have them partially processed within
+ * the X server to reduce the amount of data transmitted as well as reduce the
+ * processing latency once the repaint operation has started.
+ * 
+ * The Damage object holds any accumulated damage region and reflects the
+ * relationship between the drawable selected for damage notification and the
+ * drawable for which damage is tracked.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -256,11 +295,40 @@ xcb_damage_create_checked (xcb_connectio
                            uint8_t              level);
 
 /**
+ * @brief Creates a Damage object to monitor changes to a drawable.
  *
  * @param c The connection
+ * @param damage The ID with which you will refer to the new Damage object, created by
+ * `xcb_generate_id`.
+ * @param drawable The ID of the drawable to be monitored.
+ * @param level A bitmask of #xcb_damage_report_level_t values.
+ * @param level The level of detail to be provided in Damage events.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This creates a Damage object to monitor changes to a drawable, and specifies
+ * the level of detail to be reported for changes.
+ * 
+ * We call changes made to pixel contents of windows and pixmaps 'damage'
+ * throughout this extension.
+ * 
+ * Damage accumulates as drawing occurs in the drawable.  Each drawing operation
+ * 'damages' one or more rectangular areas within the drawable.  The rectangles
+ * are guaranteed to include the set of pixels modified by each operation, but
+ * may include significantly more than just those pixels.  The desire is for
+ * the damage to strike a balance between the number of rectangles reported and
+ * the extraneous area included.  A reasonable goal is for each primitive
+ * object drawn (line, string, rectangle) to be represented as a single
+ * rectangle and for the damage area of the operation to be the union of these
+ * rectangles.
+ * 
+ * The DAMAGE extension allows applications to either receive the raw
+ * rectangles as a stream of events, or to have them partially processed within
+ * the X server to reduce the amount of data transmitted as well as reduce the
+ * processing latency once the repaint operation has started.
+ * 
+ * The Damage object holds any accumulated damage region and reflects the
+ * relationship between the drawable selected for damage notification and the
+ * drawable for which damage is tracked.
  *
  */
 xcb_void_cookie_t
@@ -270,11 +338,14 @@ xcb_damage_create (xcb_connection_t    *
                    uint8_t              level);
 
 /**
+ * @brief Destroys a previously created Damage object.
  *
  * @param c The connection
+ * @param damage The ID you provided to `xcb_create_damage`.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This destroys a Damage object and requests the X server stop reporting
+ * the changes it was tracking.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -285,11 +356,14 @@ xcb_damage_destroy_checked (xcb_connecti
                             xcb_damage_damage_t  damage);
 
 /**
+ * @brief Destroys a previously created Damage object.
  *
  * @param c The connection
+ * @param damage The ID you provided to `xcb_create_damage`.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This destroys a Damage object and requests the X server stop reporting
+ * the changes it was tracking.
  *
  */
 xcb_void_cookie_t
@@ -297,11 +371,15 @@ xcb_damage_destroy (xcb_connection_t    
                     xcb_damage_damage_t  damage);
 
 /**
+ * @brief Remove regions from a previously created Damage object.
  *
  * @param c The connection
+ * @param damage The ID you provided to `xcb_create_damage`.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This updates the regions of damage recorded in a a Damage object.
+ * See https://www.x.org/releases/current/doc/damageproto/damageproto.txt
+ * for details.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -314,11 +392,15 @@ xcb_damage_subtract_checked (xcb_connect
                              xcb_xfixes_region_t  parts);
 
 /**
+ * @brief Remove regions from a previously created Damage object.
  *
  * @param c The connection
+ * @param damage The ID you provided to `xcb_create_damage`.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This updates the regions of damage recorded in a a Damage object.
+ * See https://www.x.org/releases/current/doc/damageproto/damageproto.txt
+ * for details.
  *
  */
 xcb_void_cookie_t
@@ -328,11 +410,14 @@ xcb_damage_subtract (xcb_connection_t   
                      xcb_xfixes_region_t  parts);
 
 /**
+ * @brief Add a region to a previously created Damage object.
  *
  * @param c The connection
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This updates the regions of damage recorded in a a Damage object.
+ * See https://www.x.org/releases/current/doc/damageproto/damageproto.txt
+ * for details.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -344,11 +429,14 @@ xcb_damage_add_checked (xcb_connection_t
                         xcb_xfixes_region_t  region);
 
 /**
+ * @brief Add a region to a previously created Damage object.
  *
  * @param c The connection
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This updates the regions of damage recorded in a a Damage object.
+ * See https://www.x.org/releases/current/doc/damageproto/damageproto.txt
+ * for details.
  *
  */
 xcb_void_cookie_t
Index: src/external/mit/xorg/lib/libxcb/files/randr.c
diff -u src/external/mit/xorg/lib/libxcb/files/randr.c:1.6 src/external/mit/xorg/lib/libxcb/files/randr.c:1.7
--- src/external/mit/xorg/lib/libxcb/files/randr.c:1.6	Wed Mar 14 06:47:28 2018
+++ src/external/mit/xorg/lib/libxcb/files/randr.c	Thu Jul  4 07:52:28 2024
@@ -5326,13 +5326,13 @@ xcb_randr_set_monitor_checked (xcb_conne
                                xcb_randr_monitor_info_t *monitorinfo)
 {
     static const xcb_protocol_request_t xcb_req = {
-        .count = 4,
+        .count = 3,
         .ext = &xcb_randr_id,
         .opcode = XCB_RANDR_SET_MONITOR,
         .isvoid = 1
     };
 
-    struct iovec xcb_parts[6];
+    struct iovec xcb_parts[5];
     xcb_void_cookie_t xcb_ret;
     xcb_randr_set_monitor_request_t xcb_out;
 
@@ -5357,13 +5357,13 @@ xcb_randr_set_monitor (xcb_connection_t 
                        xcb_randr_monitor_info_t *monitorinfo)
 {
     static const xcb_protocol_request_t xcb_req = {
-        .count = 4,
+        .count = 3,
         .ext = &xcb_randr_id,
         .opcode = XCB_RANDR_SET_MONITOR,
         .isvoid = 1
     };
 
-    struct iovec xcb_parts[6];
+    struct iovec xcb_parts[5];
     xcb_void_cookie_t xcb_ret;
     xcb_randr_set_monitor_request_t xcb_out;
 
Index: src/external/mit/xorg/lib/libxcb/files/shm.h
diff -u src/external/mit/xorg/lib/libxcb/files/shm.h:1.6 src/external/mit/xorg/lib/libxcb/files/shm.h:1.7
--- src/external/mit/xorg/lib/libxcb/files/shm.h:1.6	Tue Jul 12 02:44:09 2022
+++ src/external/mit/xorg/lib/libxcb/files/shm.h	Thu Jul  4 07:52:28 2024
@@ -284,22 +284,28 @@ xcb_generic_iterator_t
 xcb_shm_seg_end (xcb_shm_seg_iterator_t i);
 
 /**
+ * @brief Query the version of the MIT-SHM extension.
  *
  * @param c The connection
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This is used to determine the version of the MIT-SHM extension supported by the
+ * X server.  Clients MUST NOT make other requests in this extension until a reply
+ * to this requests indicates the X server supports them.
  *
  */
 xcb_shm_query_version_cookie_t
 xcb_shm_query_version (xcb_connection_t *c);
 
 /**
+ * @brief Query the version of the MIT-SHM extension.
  *
  * @param c The connection
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * This is used to determine the version of the MIT-SHM extension supported by the
+ * X server.  Clients MUST NOT make other requests in this extension until a reply
+ * to this requests indicates the X server supports them.
  *
  * This form can be used only if the request will cause
  * a reply to be generated. Any returned error will be
@@ -328,11 +334,18 @@ xcb_shm_query_version_reply (xcb_connect
                              xcb_generic_error_t            **e);
 
 /**
+ * @brief Attach a System V shared memory segment.
  *
  * @param c The connection
+ * @param shmseg A shared memory segment ID created with xcb_generate_id().
+ * @param shmid The System V shared memory segment the server should map.
+ * @param read_only True if the segment shall be mapped read only by the X11 server, otherwise false.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Attach a System V shared memory segment to the server.  This will fail unless
+ * the server has permission to map the segment.  The client may destroy the segment
+ * as soon as it receives a XCB_SHM_COMPLETION event with the shmseg value in this
+ * request and with the appropriate serial number.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -345,11 +358,18 @@ xcb_shm_attach_checked (xcb_connection_t
                         uint8_t           read_only);
 
 /**
+ * @brief Attach a System V shared memory segment.
  *
  * @param c The connection
+ * @param shmseg A shared memory segment ID created with xcb_generate_id().
+ * @param shmid The System V shared memory segment the server should map.
+ * @param read_only True if the segment shall be mapped read only by the X11 server, otherwise false.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Attach a System V shared memory segment to the server.  This will fail unless
+ * the server has permission to map the segment.  The client may destroy the segment
+ * as soon as it receives a XCB_SHM_COMPLETION event with the shmseg value in this
+ * request and with the appropriate serial number.
  *
  */
 xcb_void_cookie_t
@@ -359,11 +379,14 @@ xcb_shm_attach (xcb_connection_t *c,
                 uint8_t           read_only);
 
 /**
+ * @brief Destroys the specified shared memory segment.
  *
  * @param c The connection
+ * @param shmseg The segment to be destroyed.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Destroys the specified shared memory segment.  This will never fail unless the
+ * segment number is incorrect.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -374,11 +397,14 @@ xcb_shm_detach_checked (xcb_connection_t
                         xcb_shm_seg_t     shmseg);
 
 /**
+ * @brief Destroys the specified shared memory segment.
  *
  * @param c The connection
+ * @param shmseg The segment to be destroyed.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Destroys the specified shared memory segment.  This will never fail unless the
+ * segment number is incorrect.
  *
  */
 xcb_void_cookie_t
@@ -386,11 +412,37 @@ xcb_shm_detach (xcb_connection_t *c,
                 xcb_shm_seg_t     shmseg);
 
 /**
+ * @brief Copy data from the shared memory to the specified drawable.
  *
  * @param c The connection
- * @return A cookie
- *
- * Delivers a request to the X server.
+ * @param drawable The drawable to draw to.
+ * @param gc The graphics context to use.
+ * @param total_width The total width of the source image.
+ * @param total_height The total height of the source image.
+ * @param src_x The source X coordinate of the sub-image to copy.
+ * @param src_y The source Y coordinate of the sub-image to copy.
+ * @param src_width The width, in source image coordinates, of the data to copy from the source.
+ * The X server will use this to determine the amount of data to copy.  The amount
+ * of the destination image that is overwritten is determined automatically.
+ * @param src_height The height, in source image coordinates, of the data to copy from the source.
+ * The X server will use this to determine the amount of data to copy.  The amount
+ * of the destination image that is overwritten is determined automatically.
+ * @param dst_x The X coordinate on the destination drawable to copy to.
+ * @param dst_y The Y coordinate on the destination drawable to copy to.
+ * @param depth The depth to use.
+ * @param format The format of the image being drawn.  If it is XYBitmap, depth must be 1, or a
+ * "BadMatch" error results.  The foreground pixel in the GC determines the source
+ * for the one bits in the image, and the background pixel determines the source
+ * for the zero bits.  For XYPixmap and ZPixmap, the depth must match the depth of
+ * the drawable, or a "BadMatch" error results.
+ * @param send_event True if the server should send an XCB_SHM_COMPLETION event when the blit
+ * completes.
+ * @param offset The offset that the source image starts at.
+ * @return A cookie
+ *
+ * Copy data from the shared memory to the specified drawable.  The amount of bytes
+ * written to the destination image is always equal to the number of bytes read
+ * from the shared memory segment.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -415,11 +467,37 @@ xcb_shm_put_image_checked (xcb_connectio
                            uint32_t          offset);
 
 /**
+ * @brief Copy data from the shared memory to the specified drawable.
  *
  * @param c The connection
- * @return A cookie
- *
- * Delivers a request to the X server.
+ * @param drawable The drawable to draw to.
+ * @param gc The graphics context to use.
+ * @param total_width The total width of the source image.
+ * @param total_height The total height of the source image.
+ * @param src_x The source X coordinate of the sub-image to copy.
+ * @param src_y The source Y coordinate of the sub-image to copy.
+ * @param src_width The width, in source image coordinates, of the data to copy from the source.
+ * The X server will use this to determine the amount of data to copy.  The amount
+ * of the destination image that is overwritten is determined automatically.
+ * @param src_height The height, in source image coordinates, of the data to copy from the source.
+ * The X server will use this to determine the amount of data to copy.  The amount
+ * of the destination image that is overwritten is determined automatically.
+ * @param dst_x The X coordinate on the destination drawable to copy to.
+ * @param dst_y The Y coordinate on the destination drawable to copy to.
+ * @param depth The depth to use.
+ * @param format The format of the image being drawn.  If it is XYBitmap, depth must be 1, or a
+ * "BadMatch" error results.  The foreground pixel in the GC determines the source
+ * for the one bits in the image, and the background pixel determines the source
+ * for the zero bits.  For XYPixmap and ZPixmap, the depth must match the depth of
+ * the drawable, or a "BadMatch" error results.
+ * @param send_event True if the server should send an XCB_SHM_COMPLETION event when the blit
+ * completes.
+ * @param offset The offset that the source image starts at.
+ * @return A cookie
+ *
+ * Copy data from the shared memory to the specified drawable.  The amount of bytes
+ * written to the destination image is always equal to the number of bytes read
+ * from the shared memory segment.
  *
  */
 xcb_void_cookie_t
@@ -441,11 +519,23 @@ xcb_shm_put_image (xcb_connection_t *c,
                    uint32_t          offset);
 
 /**
+ * @brief Copies data from the specified drawable to the shared memory segment.
  *
  * @param c The connection
- * @return A cookie
- *
- * Delivers a request to the X server.
+ * @param drawable The drawable to copy the image out of.
+ * @param x The X coordinate in the drawable to begin copying at.
+ * @param y The Y coordinate in the drawable to begin copying at.
+ * @param width The width of the image to copy.
+ * @param height The height of the image to copy.
+ * @param plane_mask A mask that determines which planes are used.
+ * @param format The format to use for the copy (???).
+ * @param shmseg The destination shared memory segment.
+ * @param offset The offset in the shared memory segment to copy data to.
+ * @return A cookie
+ *
+ * Copy data from the specified drawable to the shared memory segment.  The amount
+ * of bytes written to the destination image is always equal to the number of bytes
+ * read from the shared memory segment.
  *
  */
 xcb_shm_get_image_cookie_t
@@ -461,11 +551,23 @@ xcb_shm_get_image (xcb_connection_t *c,
                    uint32_t          offset);
 
 /**
+ * @brief Copies data from the specified drawable to the shared memory segment.
  *
  * @param c The connection
- * @return A cookie
- *
- * Delivers a request to the X server.
+ * @param drawable The drawable to copy the image out of.
+ * @param x The X coordinate in the drawable to begin copying at.
+ * @param y The Y coordinate in the drawable to begin copying at.
+ * @param width The width of the image to copy.
+ * @param height The height of the image to copy.
+ * @param plane_mask A mask that determines which planes are used.
+ * @param format The format to use for the copy (???).
+ * @param shmseg The destination shared memory segment.
+ * @param offset The offset in the shared memory segment to copy data to.
+ * @return A cookie
+ *
+ * Copy data from the specified drawable to the shared memory segment.  The amount
+ * of bytes written to the destination image is always equal to the number of bytes
+ * read from the shared memory segment.
  *
  * This form can be used only if the request will cause
  * a reply to be generated. Any returned error will be
@@ -503,11 +605,21 @@ xcb_shm_get_image_reply (xcb_connection_
                          xcb_generic_error_t        **e);
 
 /**
+ * @brief Create a pixmap backed by shared memory.
  *
  * @param c The connection
+ * @param pid A pixmap ID created with xcb_generate_id().
+ * @param drawable The drawable to create the pixmap in.
+ * @param width The width of the pixmap to create.  Must be nonzero, or a Value error results.
+ * @param height The height of the pixmap to create.  Must be nonzero, or a Value error results.
+ * @param depth The depth of the pixmap to create.  Must be nonzero, or a Value error results.
+ * @param shmseg The shared memory segment to use to create the pixmap.
+ * @param offset The offset in the segment to create the pixmap at.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Create a pixmap backed by shared memory.  Writes to the shared memory will be
+ * reflected in the contents of the pixmap, and writes to the pixmap will be
+ * reflected in the contents of the shared memory.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -524,11 +636,21 @@ xcb_shm_create_pixmap_checked (xcb_conne
                                uint32_t          offset);
 
 /**
+ * @brief Create a pixmap backed by shared memory.
  *
  * @param c The connection
+ * @param pid A pixmap ID created with xcb_generate_id().
+ * @param drawable The drawable to create the pixmap in.
+ * @param width The width of the pixmap to create.  Must be nonzero, or a Value error results.
+ * @param height The height of the pixmap to create.  Must be nonzero, or a Value error results.
+ * @param depth The depth of the pixmap to create.  Must be nonzero, or a Value error results.
+ * @param shmseg The shared memory segment to use to create the pixmap.
+ * @param offset The offset in the segment to create the pixmap at.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Create a pixmap backed by shared memory.  Writes to the shared memory will be
+ * reflected in the contents of the pixmap, and writes to the pixmap will be
+ * reflected in the contents of the shared memory.
  *
  */
 xcb_void_cookie_t
@@ -542,11 +664,17 @@ xcb_shm_create_pixmap (xcb_connection_t 
                        uint32_t          offset);
 
 /**
+ * @brief Create a shared memory segment
  *
  * @param c The connection
+ * @param shmseg A shared memory segment ID created with xcb_generate_id().
+ * @param shm_fd The file descriptor the server should mmap().
+ * @param read_only True if the segment shall be mapped read only by the X11 server, otherwise false.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Create a shared memory segment.  The file descriptor will be mapped at offset
+ * zero, and the size will be obtained using fstat().  A zero size will result in a
+ * Value error.
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -559,11 +687,17 @@ xcb_shm_attach_fd_checked (xcb_connectio
                            uint8_t           read_only);
 
 /**
+ * @brief Create a shared memory segment
  *
  * @param c The connection
+ * @param shmseg A shared memory segment ID created with xcb_generate_id().
+ * @param shm_fd The file descriptor the server should mmap().
+ * @param read_only True if the segment shall be mapped read only by the X11 server, otherwise false.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Create a shared memory segment.  The file descriptor will be mapped at offset
+ * zero, and the size will be obtained using fstat().  A zero size will result in a
+ * Value error.
  *
  */
 xcb_void_cookie_t
@@ -573,11 +707,16 @@ xcb_shm_attach_fd (xcb_connection_t *c,
                    uint8_t           read_only);
 
 /**
+ * @brief Asks the server to allocate a shared memory segment.
  *
  * @param c The connection
+ * @param shmseg A shared memory segment ID created with xcb_generate_id().
+ * @param size The size of the segment to create.
+ * @param read_only True if the server should map the segment read-only; otherwise false.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Asks the server to allocate a shared memory segment.  The server’s reply will
+ * include a file descriptor for the client to pass to mmap().
  *
  */
 xcb_shm_create_segment_cookie_t
@@ -587,11 +726,16 @@ xcb_shm_create_segment (xcb_connection_t
                         uint8_t           read_only);
 
 /**
+ * @brief Asks the server to allocate a shared memory segment.
  *
  * @param c The connection
+ * @param shmseg A shared memory segment ID created with xcb_generate_id().
+ * @param size The size of the segment to create.
+ * @param read_only True if the server should map the segment read-only; otherwise false.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * Asks the server to allocate a shared memory segment.  The server’s reply will
+ * include a file descriptor for the client to pass to mmap().
  *
  * This form can be used only if the request will cause
  * a reply to be generated. Any returned error will be
Index: src/external/mit/xorg/lib/libxcb/files/xfixes.h
diff -u src/external/mit/xorg/lib/libxcb/files/xfixes.h:1.6 src/external/mit/xorg/lib/libxcb/files/xfixes.h:1.7
--- src/external/mit/xorg/lib/libxcb/files/xfixes.h:1.6	Tue Jul 12 02:44:09 2022
+++ src/external/mit/xorg/lib/libxcb/files/xfixes.h	Thu Jul  4 07:52:28 2024
@@ -739,7 +739,15 @@ typedef struct xcb_xfixes_delete_pointer
 
 typedef enum xcb_xfixes_client_disconnect_flags_t {
     XCB_XFIXES_CLIENT_DISCONNECT_FLAGS_DEFAULT = 0,
+/**< The default behavior for regular clients: the X11 server won't terminate as long
+as such clients are still connected, and should this client disconnect, the
+server will continue running so long as other clients (that have not set
+XFixesClientDisconnectFlagTerminate) are connected. */
+
     XCB_XFIXES_CLIENT_DISCONNECT_FLAGS_TERMINATE = 1
+/**< Indicates to the X11 server that it can ignore the client and terminate itself
+even though the client is still connected to the X11 server. */
+
 } xcb_xfixes_client_disconnect_flags_t;
 
 /** Opcode for xcb_xfixes_set_client_disconnect_mode. */
@@ -2046,11 +2054,13 @@ xcb_xfixes_delete_pointer_barrier (xcb_c
                                    xcb_xfixes_barrier_t  barrier);
 
 /**
+ * @brief Sets the disconnect mode for the client.
  *
  * @param c The connection
+ * @param disconnect_mode The new disconnect mode.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * No description yet
  *
  * This form can be used only if the request will not cause
  * a reply to be generated. Any returned error will be
@@ -2061,11 +2071,13 @@ xcb_xfixes_set_client_disconnect_mode_ch
                                                uint32_t          disconnect_mode);
 
 /**
+ * @brief Sets the disconnect mode for the client.
  *
  * @param c The connection
+ * @param disconnect_mode The new disconnect mode.
  * @return A cookie
  *
- * Delivers a request to the X server.
+ * No description yet
  *
  */
 xcb_void_cookie_t

Index: src/external/mit/xorg/lib/libxcb/libxcb/Makefile
diff -u src/external/mit/xorg/lib/libxcb/libxcb/Makefile:1.12 src/external/mit/xorg/lib/libxcb/libxcb/Makefile:1.13
--- src/external/mit/xorg/lib/libxcb/libxcb/Makefile:1.12	Tue Jul 12 02:53:11 2022
+++ src/external/mit/xorg/lib/libxcb/libxcb/Makefile	Thu Jul  4 07:52:28 2024
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.12 2022/07/12 02:53:11 mrg Exp $
+#	$NetBSD: Makefile,v 1.13 2024/07/04 07:52:28 mrg Exp $
 
 .include <bsd.own.mk>
 
@@ -50,6 +50,7 @@ INCS=	\
 	bigreq.h \
 	composite.h \
 	damage.h \
+	dbe.h \
 	dpms.h \
 	dri2.h \
 	dri3.h \

Added files:

Index: src/external/mit/xorg/lib/libxcb/dbe/Makefile
diff -u /dev/null src/external/mit/xorg/lib/libxcb/dbe/Makefile:1.1
--- /dev/null	Thu Jul  4 07:52:29 2024
+++ src/external/mit/xorg/lib/libxcb/dbe/Makefile	Thu Jul  4 07:52:28 2024
@@ -0,0 +1,5 @@
+#	$NetBSD: Makefile,v 1.1 2024/07/04 07:52:28 mrg Exp $
+
+XCBEXT=	dbe
+
+.include "../xcb.mk"

Index: src/external/mit/xorg/lib/libxcb/files/dbe.c
diff -u /dev/null src/external/mit/xorg/lib/libxcb/files/dbe.c:1.1
--- /dev/null	Thu Jul  4 07:52:29 2024
+++ src/external/mit/xorg/lib/libxcb/files/dbe.c	Thu Jul  4 07:52:28 2024
@@ -0,0 +1,740 @@
+/*
+ * This file generated automatically from dbe.xml by c_client.py.
+ * Edit at your peril.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <stddef.h>  /* for offsetof() */
+#include "xcbext.h"
+#include "dbe.h"
+
+#define ALIGNOF(type) offsetof(struct { char dummy; type member; }, member)
+#include "xproto.h"
+
+xcb_extension_t xcb_dbe_id = { "DOUBLE-BUFFER", 0 };
+
+void
+xcb_dbe_back_buffer_next (xcb_dbe_back_buffer_iterator_t *i)
+{
+    --i->rem;
+    ++i->data;
+    i->index += sizeof(xcb_dbe_back_buffer_t);
+}
+
+xcb_generic_iterator_t
+xcb_dbe_back_buffer_end (xcb_dbe_back_buffer_iterator_t i)
+{
+    xcb_generic_iterator_t ret;
+    ret.data = i.data + i.rem;
+    ret.index = i.index + ((char *) ret.data - (char *) i.data);
+    ret.rem = 0;
+    return ret;
+}
+
+void
+xcb_dbe_swap_info_next (xcb_dbe_swap_info_iterator_t *i)
+{
+    --i->rem;
+    ++i->data;
+    i->index += sizeof(xcb_dbe_swap_info_t);
+}
+
+xcb_generic_iterator_t
+xcb_dbe_swap_info_end (xcb_dbe_swap_info_iterator_t i)
+{
+    xcb_generic_iterator_t ret;
+    ret.data = i.data + i.rem;
+    ret.index = i.index + ((char *) ret.data - (char *) i.data);
+    ret.rem = 0;
+    return ret;
+}
+
+void
+xcb_dbe_buffer_attributes_next (xcb_dbe_buffer_attributes_iterator_t *i)
+{
+    --i->rem;
+    ++i->data;
+    i->index += sizeof(xcb_dbe_buffer_attributes_t);
+}
+
+xcb_generic_iterator_t
+xcb_dbe_buffer_attributes_end (xcb_dbe_buffer_attributes_iterator_t i)
+{
+    xcb_generic_iterator_t ret;
+    ret.data = i.data + i.rem;
+    ret.index = i.index + ((char *) ret.data - (char *) i.data);
+    ret.rem = 0;
+    return ret;
+}
+
+void
+xcb_dbe_visual_info_next (xcb_dbe_visual_info_iterator_t *i)
+{
+    --i->rem;
+    ++i->data;
+    i->index += sizeof(xcb_dbe_visual_info_t);
+}
+
+xcb_generic_iterator_t
+xcb_dbe_visual_info_end (xcb_dbe_visual_info_iterator_t i)
+{
+    xcb_generic_iterator_t ret;
+    ret.data = i.data + i.rem;
+    ret.index = i.index + ((char *) ret.data - (char *) i.data);
+    ret.rem = 0;
+    return ret;
+}
+
+int
+xcb_dbe_visual_infos_sizeof (const void  *_buffer)
+{
+    char *xcb_tmp = (char *)_buffer;
+    const xcb_dbe_visual_infos_t *_aux = (xcb_dbe_visual_infos_t *)_buffer;
+    unsigned int xcb_buffer_len = 0;
+    unsigned int xcb_block_len = 0;
+    unsigned int xcb_pad = 0;
+    unsigned int xcb_align_to = 0;
+
+
+    xcb_block_len += sizeof(xcb_dbe_visual_infos_t);
+    xcb_tmp += xcb_block_len;
+    xcb_buffer_len += xcb_block_len;
+    xcb_block_len = 0;
+    /* infos */
+    xcb_block_len += _aux->n_infos * sizeof(xcb_dbe_visual_info_t);
+    xcb_tmp += xcb_block_len;
+    xcb_align_to = ALIGNOF(xcb_dbe_visual_info_t);
+    /* insert padding */
+    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
+    xcb_buffer_len += xcb_block_len + xcb_pad;
+    if (0 != xcb_pad) {
+        xcb_tmp += xcb_pad;
+        xcb_pad = 0;
+    }
+    xcb_block_len = 0;
+
+    return xcb_buffer_len;
+}
+
+xcb_dbe_visual_info_t *
+xcb_dbe_visual_infos_infos (const xcb_dbe_visual_infos_t *R)
+{
+    return (xcb_dbe_visual_info_t *) (R + 1);
+}
+
+int
+xcb_dbe_visual_infos_infos_length (const xcb_dbe_visual_infos_t *R)
+{
+    return R->n_infos;
+}
+
+xcb_dbe_visual_info_iterator_t
+xcb_dbe_visual_infos_infos_iterator (const xcb_dbe_visual_infos_t *R)
+{
+    xcb_dbe_visual_info_iterator_t i;
+    i.data = (xcb_dbe_visual_info_t *) (R + 1);
+    i.rem = R->n_infos;
+    i.index = (char *) i.data - (char *) R;
+    return i;
+}
+
+void
+xcb_dbe_visual_infos_next (xcb_dbe_visual_infos_iterator_t *i)
+{
+    xcb_dbe_visual_infos_t *R = i->data;
+    xcb_generic_iterator_t child;
+    child.data = (xcb_dbe_visual_infos_t *)(((char *)R) + xcb_dbe_visual_infos_sizeof(R));
+    i->index = (char *) child.data - (char *) i->data;
+    --i->rem;
+    i->data = (xcb_dbe_visual_infos_t *) child.data;
+}
+
+xcb_generic_iterator_t
+xcb_dbe_visual_infos_end (xcb_dbe_visual_infos_iterator_t i)
+{
+    xcb_generic_iterator_t ret;
+    while(i.rem > 0)
+        xcb_dbe_visual_infos_next(&i);
+    ret.data = i.data;
+    ret.rem = i.rem;
+    ret.index = i.index;
+    return ret;
+}
+
+xcb_dbe_query_version_cookie_t
+xcb_dbe_query_version (xcb_connection_t *c,
+                       uint8_t           major_version,
+                       uint8_t           minor_version)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_QUERY_VERSION,
+        .isvoid = 0
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_dbe_query_version_cookie_t xcb_ret;
+    xcb_dbe_query_version_request_t xcb_out;
+
+    xcb_out.major_version = major_version;
+    xcb_out.minor_version = minor_version;
+    memset(xcb_out.pad0, 0, 2);
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_dbe_query_version_cookie_t
+xcb_dbe_query_version_unchecked (xcb_connection_t *c,
+                                 uint8_t           major_version,
+                                 uint8_t           minor_version)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_QUERY_VERSION,
+        .isvoid = 0
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_dbe_query_version_cookie_t xcb_ret;
+    xcb_dbe_query_version_request_t xcb_out;
+
+    xcb_out.major_version = major_version;
+    xcb_out.minor_version = minor_version;
+    memset(xcb_out.pad0, 0, 2);
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_dbe_query_version_reply_t *
+xcb_dbe_query_version_reply (xcb_connection_t                *c,
+                             xcb_dbe_query_version_cookie_t   cookie  /**< */,
+                             xcb_generic_error_t            **e)
+{
+    return (xcb_dbe_query_version_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
+}
+
+xcb_void_cookie_t
+xcb_dbe_allocate_back_buffer_checked (xcb_connection_t      *c,
+                                      xcb_window_t           window,
+                                      xcb_dbe_back_buffer_t  buffer,
+                                      uint8_t                swap_action)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_ALLOCATE_BACK_BUFFER,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dbe_allocate_back_buffer_request_t xcb_out;
+
+    xcb_out.window = window;
+    xcb_out.buffer = buffer;
+    xcb_out.swap_action = swap_action;
+    memset(xcb_out.pad0, 0, 3);
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_void_cookie_t
+xcb_dbe_allocate_back_buffer (xcb_connection_t      *c,
+                              xcb_window_t           window,
+                              xcb_dbe_back_buffer_t  buffer,
+                              uint8_t                swap_action)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_ALLOCATE_BACK_BUFFER,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dbe_allocate_back_buffer_request_t xcb_out;
+
+    xcb_out.window = window;
+    xcb_out.buffer = buffer;
+    xcb_out.swap_action = swap_action;
+    memset(xcb_out.pad0, 0, 3);
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_void_cookie_t
+xcb_dbe_deallocate_back_buffer_checked (xcb_connection_t      *c,
+                                        xcb_dbe_back_buffer_t  buffer)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_DEALLOCATE_BACK_BUFFER,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dbe_deallocate_back_buffer_request_t xcb_out;
+
+    xcb_out.buffer = buffer;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_void_cookie_t
+xcb_dbe_deallocate_back_buffer (xcb_connection_t      *c,
+                                xcb_dbe_back_buffer_t  buffer)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_DEALLOCATE_BACK_BUFFER,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dbe_deallocate_back_buffer_request_t xcb_out;
+
+    xcb_out.buffer = buffer;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+int
+xcb_dbe_swap_buffers_sizeof (const void  *_buffer)
+{
+    char *xcb_tmp = (char *)_buffer;
+    const xcb_dbe_swap_buffers_request_t *_aux = (xcb_dbe_swap_buffers_request_t *)_buffer;
+    unsigned int xcb_buffer_len = 0;
+    unsigned int xcb_block_len = 0;
+    unsigned int xcb_pad = 0;
+    unsigned int xcb_align_to = 0;
+
+
+    xcb_block_len += sizeof(xcb_dbe_swap_buffers_request_t);
+    xcb_tmp += xcb_block_len;
+    xcb_buffer_len += xcb_block_len;
+    xcb_block_len = 0;
+    /* actions */
+    xcb_block_len += _aux->n_actions * sizeof(xcb_dbe_swap_info_t);
+    xcb_tmp += xcb_block_len;
+    xcb_align_to = ALIGNOF(xcb_dbe_swap_info_t);
+    /* insert padding */
+    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
+    xcb_buffer_len += xcb_block_len + xcb_pad;
+    if (0 != xcb_pad) {
+        xcb_tmp += xcb_pad;
+        xcb_pad = 0;
+    }
+    xcb_block_len = 0;
+
+    return xcb_buffer_len;
+}
+
+xcb_void_cookie_t
+xcb_dbe_swap_buffers_checked (xcb_connection_t          *c,
+                              uint32_t                   n_actions,
+                              const xcb_dbe_swap_info_t *actions)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 4,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_SWAP_BUFFERS,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[6];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dbe_swap_buffers_request_t xcb_out;
+
+    xcb_out.n_actions = n_actions;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+    /* xcb_dbe_swap_info_t actions */
+    xcb_parts[4].iov_base = (char *) actions;
+    xcb_parts[4].iov_len = n_actions * sizeof(xcb_dbe_swap_info_t);
+    xcb_parts[5].iov_base = 0;
+    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_void_cookie_t
+xcb_dbe_swap_buffers (xcb_connection_t          *c,
+                      uint32_t                   n_actions,
+                      const xcb_dbe_swap_info_t *actions)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 4,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_SWAP_BUFFERS,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[6];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dbe_swap_buffers_request_t xcb_out;
+
+    xcb_out.n_actions = n_actions;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+    /* xcb_dbe_swap_info_t actions */
+    xcb_parts[4].iov_base = (char *) actions;
+    xcb_parts[4].iov_len = n_actions * sizeof(xcb_dbe_swap_info_t);
+    xcb_parts[5].iov_base = 0;
+    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_dbe_swap_info_t *
+xcb_dbe_swap_buffers_actions (const xcb_dbe_swap_buffers_request_t *R)
+{
+    return (xcb_dbe_swap_info_t *) (R + 1);
+}
+
+int
+xcb_dbe_swap_buffers_actions_length (const xcb_dbe_swap_buffers_request_t *R)
+{
+    return R->n_actions;
+}
+
+xcb_dbe_swap_info_iterator_t
+xcb_dbe_swap_buffers_actions_iterator (const xcb_dbe_swap_buffers_request_t *R)
+{
+    xcb_dbe_swap_info_iterator_t i;
+    i.data = (xcb_dbe_swap_info_t *) (R + 1);
+    i.rem = R->n_actions;
+    i.index = (char *) i.data - (char *) R;
+    return i;
+}
+
+xcb_void_cookie_t
+xcb_dbe_begin_idiom_checked (xcb_connection_t *c)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_BEGIN_IDIOM,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dbe_begin_idiom_request_t xcb_out;
+
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_void_cookie_t
+xcb_dbe_begin_idiom (xcb_connection_t *c)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_BEGIN_IDIOM,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dbe_begin_idiom_request_t xcb_out;
+
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_void_cookie_t
+xcb_dbe_end_idiom_checked (xcb_connection_t *c)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_END_IDIOM,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dbe_end_idiom_request_t xcb_out;
+
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_void_cookie_t
+xcb_dbe_end_idiom (xcb_connection_t *c)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_END_IDIOM,
+        .isvoid = 1
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_void_cookie_t xcb_ret;
+    xcb_dbe_end_idiom_request_t xcb_out;
+
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+int
+xcb_dbe_get_visual_info_sizeof (const void  *_buffer)
+{
+    char *xcb_tmp = (char *)_buffer;
+    const xcb_dbe_get_visual_info_request_t *_aux = (xcb_dbe_get_visual_info_request_t *)_buffer;
+    unsigned int xcb_buffer_len = 0;
+    unsigned int xcb_block_len = 0;
+    unsigned int xcb_pad = 0;
+    unsigned int xcb_align_to = 0;
+
+
+    xcb_block_len += sizeof(xcb_dbe_get_visual_info_request_t);
+    xcb_tmp += xcb_block_len;
+    xcb_buffer_len += xcb_block_len;
+    xcb_block_len = 0;
+    /* drawables */
+    xcb_block_len += _aux->n_drawables * sizeof(xcb_drawable_t);
+    xcb_tmp += xcb_block_len;
+    xcb_align_to = ALIGNOF(xcb_drawable_t);
+    /* insert padding */
+    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
+    xcb_buffer_len += xcb_block_len + xcb_pad;
+    if (0 != xcb_pad) {
+        xcb_tmp += xcb_pad;
+        xcb_pad = 0;
+    }
+    xcb_block_len = 0;
+
+    return xcb_buffer_len;
+}
+
+xcb_dbe_get_visual_info_cookie_t
+xcb_dbe_get_visual_info (xcb_connection_t     *c,
+                         uint32_t              n_drawables,
+                         const xcb_drawable_t *drawables)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 4,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_GET_VISUAL_INFO,
+        .isvoid = 0
+    };
+
+    struct iovec xcb_parts[6];
+    xcb_dbe_get_visual_info_cookie_t xcb_ret;
+    xcb_dbe_get_visual_info_request_t xcb_out;
+
+    xcb_out.n_drawables = n_drawables;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+    /* xcb_drawable_t drawables */
+    xcb_parts[4].iov_base = (char *) drawables;
+    xcb_parts[4].iov_len = n_drawables * sizeof(xcb_visualid_t);
+    xcb_parts[5].iov_base = 0;
+    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_dbe_get_visual_info_cookie_t
+xcb_dbe_get_visual_info_unchecked (xcb_connection_t     *c,
+                                   uint32_t              n_drawables,
+                                   const xcb_drawable_t *drawables)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 4,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_GET_VISUAL_INFO,
+        .isvoid = 0
+    };
+
+    struct iovec xcb_parts[6];
+    xcb_dbe_get_visual_info_cookie_t xcb_ret;
+    xcb_dbe_get_visual_info_request_t xcb_out;
+
+    xcb_out.n_drawables = n_drawables;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+    /* xcb_drawable_t drawables */
+    xcb_parts[4].iov_base = (char *) drawables;
+    xcb_parts[4].iov_len = n_drawables * sizeof(xcb_visualid_t);
+    xcb_parts[5].iov_base = 0;
+    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+int
+xcb_dbe_get_visual_info_supported_visuals_length (const xcb_dbe_get_visual_info_reply_t *R)
+{
+    return R->n_supported_visuals;
+}
+
+xcb_dbe_visual_infos_iterator_t
+xcb_dbe_get_visual_info_supported_visuals_iterator (const xcb_dbe_get_visual_info_reply_t *R)
+{
+    xcb_dbe_visual_infos_iterator_t i;
+    i.data = (xcb_dbe_visual_infos_t *) (R + 1);
+    i.rem = R->n_supported_visuals;
+    i.index = (char *) i.data - (char *) R;
+    return i;
+}
+
+xcb_dbe_get_visual_info_reply_t *
+xcb_dbe_get_visual_info_reply (xcb_connection_t                  *c,
+                               xcb_dbe_get_visual_info_cookie_t   cookie  /**< */,
+                               xcb_generic_error_t              **e)
+{
+    return (xcb_dbe_get_visual_info_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
+}
+
+xcb_dbe_get_back_buffer_attributes_cookie_t
+xcb_dbe_get_back_buffer_attributes (xcb_connection_t      *c,
+                                    xcb_dbe_back_buffer_t  buffer)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_GET_BACK_BUFFER_ATTRIBUTES,
+        .isvoid = 0
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_dbe_get_back_buffer_attributes_cookie_t xcb_ret;
+    xcb_dbe_get_back_buffer_attributes_request_t xcb_out;
+
+    xcb_out.buffer = buffer;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_dbe_get_back_buffer_attributes_cookie_t
+xcb_dbe_get_back_buffer_attributes_unchecked (xcb_connection_t      *c,
+                                              xcb_dbe_back_buffer_t  buffer)
+{
+    static const xcb_protocol_request_t xcb_req = {
+        .count = 2,
+        .ext = &xcb_dbe_id,
+        .opcode = XCB_DBE_GET_BACK_BUFFER_ATTRIBUTES,
+        .isvoid = 0
+    };
+
+    struct iovec xcb_parts[4];
+    xcb_dbe_get_back_buffer_attributes_cookie_t xcb_ret;
+    xcb_dbe_get_back_buffer_attributes_request_t xcb_out;
+
+    xcb_out.buffer = buffer;
+
+    xcb_parts[2].iov_base = (char *) &xcb_out;
+    xcb_parts[2].iov_len = sizeof(xcb_out);
+    xcb_parts[3].iov_base = 0;
+    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
+
+    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
+    return xcb_ret;
+}
+
+xcb_dbe_get_back_buffer_attributes_reply_t *
+xcb_dbe_get_back_buffer_attributes_reply (xcb_connection_t                             *c,
+                                          xcb_dbe_get_back_buffer_attributes_cookie_t   cookie  /**< */,
+                                          xcb_generic_error_t                         **e)
+{
+    return (xcb_dbe_get_back_buffer_attributes_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
+}
+
Index: src/external/mit/xorg/lib/libxcb/files/dbe.h
diff -u /dev/null src/external/mit/xorg/lib/libxcb/files/dbe.h:1.1
--- /dev/null	Thu Jul  4 07:52:29 2024
+++ src/external/mit/xorg/lib/libxcb/files/dbe.h	Thu Jul  4 07:52:28 2024
@@ -0,0 +1,772 @@
+/*
+ * This file generated automatically from dbe.xml by c_client.py.
+ * Edit at your peril.
+ */
+
+/**
+ * @defgroup XCB_Dbe_API XCB Dbe API
+ * @brief Dbe XCB Protocol Implementation.
+ * @{
+ **/
+
+#ifndef __DBE_H
+#define __DBE_H
+
+#include "xcb.h"
+#include "xproto.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define XCB_DBE_MAJOR_VERSION 1
+#define XCB_DBE_MINOR_VERSION 0
+
+extern xcb_extension_t xcb_dbe_id;
+
+typedef uint32_t xcb_dbe_back_buffer_t;
+
+/**
+ * @brief xcb_dbe_back_buffer_iterator_t
+ **/
+typedef struct xcb_dbe_back_buffer_iterator_t {
+    xcb_dbe_back_buffer_t *data;
+    int                    rem;
+    int                    index;
+} xcb_dbe_back_buffer_iterator_t;
+
+typedef enum xcb_dbe_swap_action_t {
+    XCB_DBE_SWAP_ACTION_UNDEFINED = 0,
+/**< Discard the buffer. The buffer may be reallocated and end up with random VRAM content. */
+
+    XCB_DBE_SWAP_ACTION_BACKGROUND = 1,
+/**< Erase with window background. */
+
+    XCB_DBE_SWAP_ACTION_UNTOUCHED = 2,
+/**< Leave untouched. */
+
+    XCB_DBE_SWAP_ACTION_COPIED = 3
+/**< Copy the newly displayed front buffer. */
+
+} xcb_dbe_swap_action_t;
+
+/**
+ * @brief xcb_dbe_swap_info_t
+ **/
+typedef struct xcb_dbe_swap_info_t {
+    xcb_window_t window;
+    uint8_t      swap_action;
+    uint8_t      pad0[3];
+} xcb_dbe_swap_info_t;
+
+/**
+ * @brief xcb_dbe_swap_info_iterator_t
+ **/
+typedef struct xcb_dbe_swap_info_iterator_t {
+    xcb_dbe_swap_info_t *data;
+    int                  rem;
+    int                  index;
+} xcb_dbe_swap_info_iterator_t;
+
+/**
+ * @brief xcb_dbe_buffer_attributes_t
+ **/
+typedef struct xcb_dbe_buffer_attributes_t {
+    xcb_window_t window;
+} xcb_dbe_buffer_attributes_t;
+
+/**
+ * @brief xcb_dbe_buffer_attributes_iterator_t
+ **/
+typedef struct xcb_dbe_buffer_attributes_iterator_t {
+    xcb_dbe_buffer_attributes_t *data;
+    int                          rem;
+    int                          index;
+} xcb_dbe_buffer_attributes_iterator_t;
+
+/**
+ * @brief xcb_dbe_visual_info_t
+ **/
+typedef struct xcb_dbe_visual_info_t {
+    xcb_visualid_t visual_id;
+    uint8_t        depth;
+    uint8_t        perf_level;
+    uint8_t        pad0[2];
+} xcb_dbe_visual_info_t;
+
+/**
+ * @brief xcb_dbe_visual_info_iterator_t
+ **/
+typedef struct xcb_dbe_visual_info_iterator_t {
+    xcb_dbe_visual_info_t *data;
+    int                    rem;
+    int                    index;
+} xcb_dbe_visual_info_iterator_t;
+
+/**
+ * @brief xcb_dbe_visual_infos_t
+ **/
+typedef struct xcb_dbe_visual_infos_t {
+    uint32_t n_infos;
+} xcb_dbe_visual_infos_t;
+
+/**
+ * @brief xcb_dbe_visual_infos_iterator_t
+ **/
+typedef struct xcb_dbe_visual_infos_iterator_t {
+    xcb_dbe_visual_infos_t *data;
+    int                     rem;
+    int                     index;
+} xcb_dbe_visual_infos_iterator_t;
+
+/** Opcode for xcb_dbe_bad_buffer. */
+#define XCB_DBE_BAD_BUFFER 0
+
+/**
+ * @brief xcb_dbe_bad_buffer_error_t
+ **/
+typedef struct xcb_dbe_bad_buffer_error_t {
+    uint8_t               response_type;
+    uint8_t               error_code;
+    uint16_t              sequence;
+    xcb_dbe_back_buffer_t bad_buffer;
+    uint16_t              minor_opcode;
+    uint8_t               major_opcode;
+} xcb_dbe_bad_buffer_error_t;
+
+/**
+ * @brief xcb_dbe_query_version_cookie_t
+ **/
+typedef struct xcb_dbe_query_version_cookie_t {
+    unsigned int sequence;
+} xcb_dbe_query_version_cookie_t;
+
+/** Opcode for xcb_dbe_query_version. */
+#define XCB_DBE_QUERY_VERSION 0
+
+/**
+ * @brief xcb_dbe_query_version_request_t
+ **/
+typedef struct xcb_dbe_query_version_request_t {
+    uint8_t  major_opcode;
+    uint8_t  minor_opcode;
+    uint16_t length;
+    uint8_t  major_version;
+    uint8_t  minor_version;
+    uint8_t  pad0[2];
+} xcb_dbe_query_version_request_t;
+
+/**
+ * @brief xcb_dbe_query_version_reply_t
+ **/
+typedef struct xcb_dbe_query_version_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint8_t  major_version;
+    uint8_t  minor_version;
+    uint8_t  pad1[22];
+} xcb_dbe_query_version_reply_t;
+
+/** Opcode for xcb_dbe_allocate_back_buffer. */
+#define XCB_DBE_ALLOCATE_BACK_BUFFER 1
+
+/**
+ * @brief xcb_dbe_allocate_back_buffer_request_t
+ **/
+typedef struct xcb_dbe_allocate_back_buffer_request_t {
+    uint8_t               major_opcode;
+    uint8_t               minor_opcode;
+    uint16_t              length;
+    xcb_window_t          window;
+    xcb_dbe_back_buffer_t buffer;
+    uint8_t               swap_action;
+    uint8_t               pad0[3];
+} xcb_dbe_allocate_back_buffer_request_t;
+
+/** Opcode for xcb_dbe_deallocate_back_buffer. */
+#define XCB_DBE_DEALLOCATE_BACK_BUFFER 2
+
+/**
+ * @brief xcb_dbe_deallocate_back_buffer_request_t
+ **/
+typedef struct xcb_dbe_deallocate_back_buffer_request_t {
+    uint8_t               major_opcode;
+    uint8_t               minor_opcode;
+    uint16_t              length;
+    xcb_dbe_back_buffer_t buffer;
+} xcb_dbe_deallocate_back_buffer_request_t;
+
+/** Opcode for xcb_dbe_swap_buffers. */
+#define XCB_DBE_SWAP_BUFFERS 3
+
+/**
+ * @brief xcb_dbe_swap_buffers_request_t
+ **/
+typedef struct xcb_dbe_swap_buffers_request_t {
+    uint8_t  major_opcode;
+    uint8_t  minor_opcode;
+    uint16_t length;
+    uint32_t n_actions;
+} xcb_dbe_swap_buffers_request_t;
+
+/** Opcode for xcb_dbe_begin_idiom. */
+#define XCB_DBE_BEGIN_IDIOM 4
+
+/**
+ * @brief xcb_dbe_begin_idiom_request_t
+ **/
+typedef struct xcb_dbe_begin_idiom_request_t {
+    uint8_t  major_opcode;
+    uint8_t  minor_opcode;
+    uint16_t length;
+} xcb_dbe_begin_idiom_request_t;
+
+/** Opcode for xcb_dbe_end_idiom. */
+#define XCB_DBE_END_IDIOM 5
+
+/**
+ * @brief xcb_dbe_end_idiom_request_t
+ **/
+typedef struct xcb_dbe_end_idiom_request_t {
+    uint8_t  major_opcode;
+    uint8_t  minor_opcode;
+    uint16_t length;
+} xcb_dbe_end_idiom_request_t;
+
+/**
+ * @brief xcb_dbe_get_visual_info_cookie_t
+ **/
+typedef struct xcb_dbe_get_visual_info_cookie_t {
+    unsigned int sequence;
+} xcb_dbe_get_visual_info_cookie_t;
+
+/** Opcode for xcb_dbe_get_visual_info. */
+#define XCB_DBE_GET_VISUAL_INFO 6
+
+/**
+ * @brief xcb_dbe_get_visual_info_request_t
+ **/
+typedef struct xcb_dbe_get_visual_info_request_t {
+    uint8_t  major_opcode;
+    uint8_t  minor_opcode;
+    uint16_t length;
+    uint32_t n_drawables;
+} xcb_dbe_get_visual_info_request_t;
+
+/**
+ * @brief xcb_dbe_get_visual_info_reply_t
+ **/
+typedef struct xcb_dbe_get_visual_info_reply_t {
+    uint8_t  response_type;
+    uint8_t  pad0;
+    uint16_t sequence;
+    uint32_t length;
+    uint32_t n_supported_visuals;
+    uint8_t  pad1[20];
+} xcb_dbe_get_visual_info_reply_t;
+
+/**
+ * @brief xcb_dbe_get_back_buffer_attributes_cookie_t
+ **/
+typedef struct xcb_dbe_get_back_buffer_attributes_cookie_t {
+    unsigned int sequence;
+} xcb_dbe_get_back_buffer_attributes_cookie_t;
+
+/** Opcode for xcb_dbe_get_back_buffer_attributes. */
+#define XCB_DBE_GET_BACK_BUFFER_ATTRIBUTES 7
+
+/**
+ * @brief xcb_dbe_get_back_buffer_attributes_request_t
+ **/
+typedef struct xcb_dbe_get_back_buffer_attributes_request_t {
+    uint8_t               major_opcode;
+    uint8_t               minor_opcode;
+    uint16_t              length;
+    xcb_dbe_back_buffer_t buffer;
+} xcb_dbe_get_back_buffer_attributes_request_t;
+
+/**
+ * @brief xcb_dbe_get_back_buffer_attributes_reply_t
+ **/
+typedef struct xcb_dbe_get_back_buffer_attributes_reply_t {
+    uint8_t                     response_type;
+    uint8_t                     pad0;
+    uint16_t                    sequence;
+    uint32_t                    length;
+    xcb_dbe_buffer_attributes_t attributes;
+    uint8_t                     pad1[20];
+} xcb_dbe_get_back_buffer_attributes_reply_t;
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_dbe_back_buffer_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_dbe_back_buffer_t)
+ */
+void
+xcb_dbe_back_buffer_next (xcb_dbe_back_buffer_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_dbe_back_buffer_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_dbe_back_buffer_end (xcb_dbe_back_buffer_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_dbe_swap_info_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_dbe_swap_info_t)
+ */
+void
+xcb_dbe_swap_info_next (xcb_dbe_swap_info_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_dbe_swap_info_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_dbe_swap_info_end (xcb_dbe_swap_info_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_dbe_buffer_attributes_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_dbe_buffer_attributes_t)
+ */
+void
+xcb_dbe_buffer_attributes_next (xcb_dbe_buffer_attributes_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_dbe_buffer_attributes_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_dbe_buffer_attributes_end (xcb_dbe_buffer_attributes_iterator_t i);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_dbe_visual_info_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_dbe_visual_info_t)
+ */
+void
+xcb_dbe_visual_info_next (xcb_dbe_visual_info_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_dbe_visual_info_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_dbe_visual_info_end (xcb_dbe_visual_info_iterator_t i);
+
+int
+xcb_dbe_visual_infos_sizeof (const void  *_buffer);
+
+xcb_dbe_visual_info_t *
+xcb_dbe_visual_infos_infos (const xcb_dbe_visual_infos_t *R);
+
+int
+xcb_dbe_visual_infos_infos_length (const xcb_dbe_visual_infos_t *R);
+
+xcb_dbe_visual_info_iterator_t
+xcb_dbe_visual_infos_infos_iterator (const xcb_dbe_visual_infos_t *R);
+
+/**
+ * Get the next element of the iterator
+ * @param i Pointer to a xcb_dbe_visual_infos_iterator_t
+ *
+ * Get the next element in the iterator. The member rem is
+ * decreased by one. The member data points to the next
+ * element. The member index is increased by sizeof(xcb_dbe_visual_infos_t)
+ */
+void
+xcb_dbe_visual_infos_next (xcb_dbe_visual_infos_iterator_t *i);
+
+/**
+ * Return the iterator pointing to the last element
+ * @param i An xcb_dbe_visual_infos_iterator_t
+ * @return  The iterator pointing to the last element
+ *
+ * Set the current element in the iterator to the last element.
+ * The member rem is set to 0. The member data points to the
+ * last element.
+ */
+xcb_generic_iterator_t
+xcb_dbe_visual_infos_end (xcb_dbe_visual_infos_iterator_t i);
+
+/**
+ * @brief Queries the version of this extension
+ *
+ * @param c The connection
+ * @param major_version The major version of the extension. Check that it is compatible with the XCB_DBE_MAJOR_VERSION that your code is compiled with.
+ * @param minor_version The minor version of the extension. Check that it is compatible with the XCB_DBE_MINOR_VERSION that your code is compiled with.
+ * @return A cookie
+ *
+ * Queries the version of this extension. You must do this before using any functionality it provides.
+ *
+ */
+xcb_dbe_query_version_cookie_t
+xcb_dbe_query_version (xcb_connection_t *c,
+                       uint8_t           major_version,
+                       uint8_t           minor_version);
+
+/**
+ * @brief Queries the version of this extension
+ *
+ * @param c The connection
+ * @param major_version The major version of the extension. Check that it is compatible with the XCB_DBE_MAJOR_VERSION that your code is compiled with.
+ * @param minor_version The minor version of the extension. Check that it is compatible with the XCB_DBE_MINOR_VERSION that your code is compiled with.
+ * @return A cookie
+ *
+ * Queries the version of this extension. You must do this before using any functionality it provides.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_dbe_query_version_cookie_t
+xcb_dbe_query_version_unchecked (xcb_connection_t *c,
+                                 uint8_t           major_version,
+                                 uint8_t           minor_version);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_dbe_query_version_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_dbe_query_version_reply_t *
+xcb_dbe_query_version_reply (xcb_connection_t                *c,
+                             xcb_dbe_query_version_cookie_t   cookie  /**< */,
+                             xcb_generic_error_t            **e);
+
+/**
+ * @brief Allocates a back buffer
+ *
+ * @param c The connection
+ * @param window The window to which to add the back buffer.
+ * @param buffer The buffer id to associate with the back buffer.
+ * @param swap_action The swap action most likely to be used to present this back buffer. This is only a hint, and does not preclude the use of other swap actions.
+ * @return A cookie
+ *
+ * Associates \a buffer with the back buffer of \a window. Multiple ids may be associated with the back buffer, which is created by the first allocate call and destroyed by the last deallocate.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_dbe_allocate_back_buffer_checked (xcb_connection_t      *c,
+                                      xcb_window_t           window,
+                                      xcb_dbe_back_buffer_t  buffer,
+                                      uint8_t                swap_action);
+
+/**
+ * @brief Allocates a back buffer
+ *
+ * @param c The connection
+ * @param window The window to which to add the back buffer.
+ * @param buffer The buffer id to associate with the back buffer.
+ * @param swap_action The swap action most likely to be used to present this back buffer. This is only a hint, and does not preclude the use of other swap actions.
+ * @return A cookie
+ *
+ * Associates \a buffer with the back buffer of \a window. Multiple ids may be associated with the back buffer, which is created by the first allocate call and destroyed by the last deallocate.
+ *
+ */
+xcb_void_cookie_t
+xcb_dbe_allocate_back_buffer (xcb_connection_t      *c,
+                              xcb_window_t           window,
+                              xcb_dbe_back_buffer_t  buffer,
+                              uint8_t                swap_action);
+
+/**
+ * @brief Deallocates a back buffer
+ *
+ * @param c The connection
+ * @param buffer The back buffer to deallocate.
+ * @return A cookie
+ *
+ * Deallocates the given \a buffer. If \a buffer is an invalid id, a `BadBuffer` error is returned. Because a window may have allocated multiple back buffer ids, the back buffer itself is not deleted until all these ids are deallocated by this call.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_dbe_deallocate_back_buffer_checked (xcb_connection_t      *c,
+                                        xcb_dbe_back_buffer_t  buffer);
+
+/**
+ * @brief Deallocates a back buffer
+ *
+ * @param c The connection
+ * @param buffer The back buffer to deallocate.
+ * @return A cookie
+ *
+ * Deallocates the given \a buffer. If \a buffer is an invalid id, a `BadBuffer` error is returned. Because a window may have allocated multiple back buffer ids, the back buffer itself is not deleted until all these ids are deallocated by this call.
+ *
+ */
+xcb_void_cookie_t
+xcb_dbe_deallocate_back_buffer (xcb_connection_t      *c,
+                                xcb_dbe_back_buffer_t  buffer);
+
+int
+xcb_dbe_swap_buffers_sizeof (const void  *_buffer);
+
+/**
+ * @brief Swaps front and back buffers
+ *
+ * @param c The connection
+ * @param n_actions Number of swap actions in \a actions.
+ * @param actions List of windows on which to swap buffers.
+ * @return A cookie
+ *
+ * Swaps the front and back buffers on the specified windows. The front and back buffers retain their ids, so that the window id continues to refer to the front buffer, while the back buffer id created by this extension continues to refer to the back buffer. Back buffer contents is moved to the front buffer. Back buffer contents after the operation depends on the given swap action. The optimal swap action depends on how each frame is rendered. For example, if the buffer is cleared and fully overwritten on every frame, the "untouched" action, which throws away the buffer contents, would provide the best performance. To eliminate visual artifacts, the swap will occure during the monitor VSync, if the X server supports detecting it.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_dbe_swap_buffers_checked (xcb_connection_t          *c,
+                              uint32_t                   n_actions,
+                              const xcb_dbe_swap_info_t *actions);
+
+/**
+ * @brief Swaps front and back buffers
+ *
+ * @param c The connection
+ * @param n_actions Number of swap actions in \a actions.
+ * @param actions List of windows on which to swap buffers.
+ * @return A cookie
+ *
+ * Swaps the front and back buffers on the specified windows. The front and back buffers retain their ids, so that the window id continues to refer to the front buffer, while the back buffer id created by this extension continues to refer to the back buffer. Back buffer contents is moved to the front buffer. Back buffer contents after the operation depends on the given swap action. The optimal swap action depends on how each frame is rendered. For example, if the buffer is cleared and fully overwritten on every frame, the "untouched" action, which throws away the buffer contents, would provide the best performance. To eliminate visual artifacts, the swap will occure during the monitor VSync, if the X server supports detecting it.
+ *
+ */
+xcb_void_cookie_t
+xcb_dbe_swap_buffers (xcb_connection_t          *c,
+                      uint32_t                   n_actions,
+                      const xcb_dbe_swap_info_t *actions);
+
+xcb_dbe_swap_info_t *
+xcb_dbe_swap_buffers_actions (const xcb_dbe_swap_buffers_request_t *R);
+
+int
+xcb_dbe_swap_buffers_actions_length (const xcb_dbe_swap_buffers_request_t *R);
+
+xcb_dbe_swap_info_iterator_t
+xcb_dbe_swap_buffers_actions_iterator (const xcb_dbe_swap_buffers_request_t *R);
+
+/**
+ * @brief Begins a logical swap block
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Creates a block of operations intended to occur together. This may be needed if window presentation requires changing buffers unknown to this extension, such as depth or stencil buffers.
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_dbe_begin_idiom_checked (xcb_connection_t *c);
+
+/**
+ * @brief Begins a logical swap block
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * Creates a block of operations intended to occur together. This may be needed if window presentation requires changing buffers unknown to this extension, such as depth or stencil buffers.
+ *
+ */
+xcb_void_cookie_t
+xcb_dbe_begin_idiom (xcb_connection_t *c);
+
+/**
+ * @brief Ends a logical swap block
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * No description yet
+ *
+ * This form can be used only if the request will not cause
+ * a reply to be generated. Any returned error will be
+ * saved for handling by xcb_request_check().
+ */
+xcb_void_cookie_t
+xcb_dbe_end_idiom_checked (xcb_connection_t *c);
+
+/**
+ * @brief Ends a logical swap block
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * No description yet
+ *
+ */
+xcb_void_cookie_t
+xcb_dbe_end_idiom (xcb_connection_t *c);
+
+int
+xcb_dbe_get_visual_info_sizeof (const void  *_buffer);
+
+/**
+ * @brief Requests visuals that support double buffering
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * No description yet
+ *
+ */
+xcb_dbe_get_visual_info_cookie_t
+xcb_dbe_get_visual_info (xcb_connection_t     *c,
+                         uint32_t              n_drawables,
+                         const xcb_drawable_t *drawables);
+
+/**
+ * @brief Requests visuals that support double buffering
+ *
+ * @param c The connection
+ * @return A cookie
+ *
+ * No description yet
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_dbe_get_visual_info_cookie_t
+xcb_dbe_get_visual_info_unchecked (xcb_connection_t     *c,
+                                   uint32_t              n_drawables,
+                                   const xcb_drawable_t *drawables);
+
+int
+xcb_dbe_get_visual_info_supported_visuals_length (const xcb_dbe_get_visual_info_reply_t *R);
+
+xcb_dbe_visual_infos_iterator_t
+xcb_dbe_get_visual_info_supported_visuals_iterator (const xcb_dbe_get_visual_info_reply_t *R);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_dbe_get_visual_info_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_dbe_get_visual_info_reply_t *
+xcb_dbe_get_visual_info_reply (xcb_connection_t                  *c,
+                               xcb_dbe_get_visual_info_cookie_t   cookie  /**< */,
+                               xcb_generic_error_t              **e);
+
+/**
+ * @brief Gets back buffer attributes
+ *
+ * @param c The connection
+ * @param buffer The back buffer to query.
+ * @return A cookie
+ *
+ * Returns the attributes of the specified \a buffer.
+ *
+ */
+xcb_dbe_get_back_buffer_attributes_cookie_t
+xcb_dbe_get_back_buffer_attributes (xcb_connection_t      *c,
+                                    xcb_dbe_back_buffer_t  buffer);
+
+/**
+ * @brief Gets back buffer attributes
+ *
+ * @param c The connection
+ * @param buffer The back buffer to query.
+ * @return A cookie
+ *
+ * Returns the attributes of the specified \a buffer.
+ *
+ * This form can be used only if the request will cause
+ * a reply to be generated. Any returned error will be
+ * placed in the event queue.
+ */
+xcb_dbe_get_back_buffer_attributes_cookie_t
+xcb_dbe_get_back_buffer_attributes_unchecked (xcb_connection_t      *c,
+                                              xcb_dbe_back_buffer_t  buffer);
+
+/**
+ * Return the reply
+ * @param c      The connection
+ * @param cookie The cookie
+ * @param e      The xcb_generic_error_t supplied
+ *
+ * Returns the reply of the request asked by
+ *
+ * The parameter @p e supplied to this function must be NULL if
+ * xcb_dbe_get_back_buffer_attributes_unchecked(). is used.
+ * Otherwise, it stores the error if any.
+ *
+ * The returned value must be freed by the caller using free().
+ */
+xcb_dbe_get_back_buffer_attributes_reply_t *
+xcb_dbe_get_back_buffer_attributes_reply (xcb_connection_t                             *c,
+                                          xcb_dbe_get_back_buffer_attributes_cookie_t   cookie  /**< */,
+                                          xcb_generic_error_t                         **e);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/**
+ * @}
+ */

Reply via email to