xref: /netbsd-src/external/mit/xorg/lib/libxcb/files/shm.h (revision fea83ee4938f6f630ec4626dba8d28098c73f0cc)
1 /*
2  * This file generated automatically from shm.xml by c_client.py.
3  * Edit at your peril.
4  */
5 
6 /**
7  * @defgroup XCB_Shm_API XCB Shm API
8  * @brief Shm XCB Protocol Implementation.
9  * @{
10  **/
11 
12 #ifndef __SHM_H
13 #define __SHM_H
14 
15 #include "xcb.h"
16 #include "xproto.h"
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 #define XCB_SHM_MAJOR_VERSION 1
23 #define XCB_SHM_MINOR_VERSION 2
24 
25 extern xcb_extension_t xcb_shm_id;
26 
27 typedef uint32_t xcb_shm_seg_t;
28 
29 /**
30  * @brief xcb_shm_seg_iterator_t
31  **/
32 typedef struct xcb_shm_seg_iterator_t {
33     xcb_shm_seg_t *data;
34     int            rem;
35     int            index;
36 } xcb_shm_seg_iterator_t;
37 
38 /** Opcode for xcb_shm_completion. */
39 #define XCB_SHM_COMPLETION 0
40 
41 /**
42  * @brief xcb_shm_completion_event_t
43  **/
44 typedef struct xcb_shm_completion_event_t {
45     uint8_t        response_type;
46     uint8_t        pad0;
47     uint16_t       sequence;
48     xcb_drawable_t drawable;
49     uint16_t       minor_event;
50     uint8_t        major_event;
51     uint8_t        pad1;
52     xcb_shm_seg_t  shmseg;
53     uint32_t       offset;
54 } xcb_shm_completion_event_t;
55 
56 /** Opcode for xcb_shm_bad_seg. */
57 #define XCB_SHM_BAD_SEG 0
58 
59 typedef xcb_value_error_t xcb_shm_bad_seg_error_t;
60 
61 /**
62  * @brief xcb_shm_query_version_cookie_t
63  **/
64 typedef struct xcb_shm_query_version_cookie_t {
65     unsigned int sequence;
66 } xcb_shm_query_version_cookie_t;
67 
68 /** Opcode for xcb_shm_query_version. */
69 #define XCB_SHM_QUERY_VERSION 0
70 
71 /**
72  * @brief xcb_shm_query_version_request_t
73  **/
74 typedef struct xcb_shm_query_version_request_t {
75     uint8_t  major_opcode;
76     uint8_t  minor_opcode;
77     uint16_t length;
78 } xcb_shm_query_version_request_t;
79 
80 /**
81  * @brief xcb_shm_query_version_reply_t
82  **/
83 typedef struct xcb_shm_query_version_reply_t {
84     uint8_t  response_type;
85     uint8_t  shared_pixmaps;
86     uint16_t sequence;
87     uint32_t length;
88     uint16_t major_version;
89     uint16_t minor_version;
90     uint16_t uid;
91     uint16_t gid;
92     uint8_t  pixmap_format;
93     uint8_t  pad0[15];
94 } xcb_shm_query_version_reply_t;
95 
96 /** Opcode for xcb_shm_attach. */
97 #define XCB_SHM_ATTACH 1
98 
99 /**
100  * @brief xcb_shm_attach_request_t
101  **/
102 typedef struct xcb_shm_attach_request_t {
103     uint8_t       major_opcode;
104     uint8_t       minor_opcode;
105     uint16_t      length;
106     xcb_shm_seg_t shmseg;
107     uint32_t      shmid;
108     uint8_t       read_only;
109     uint8_t       pad0[3];
110 } xcb_shm_attach_request_t;
111 
112 /** Opcode for xcb_shm_detach. */
113 #define XCB_SHM_DETACH 2
114 
115 /**
116  * @brief xcb_shm_detach_request_t
117  **/
118 typedef struct xcb_shm_detach_request_t {
119     uint8_t       major_opcode;
120     uint8_t       minor_opcode;
121     uint16_t      length;
122     xcb_shm_seg_t shmseg;
123 } xcb_shm_detach_request_t;
124 
125 /** Opcode for xcb_shm_put_image. */
126 #define XCB_SHM_PUT_IMAGE 3
127 
128 /**
129  * @brief xcb_shm_put_image_request_t
130  **/
131 typedef struct xcb_shm_put_image_request_t {
132     uint8_t        major_opcode;
133     uint8_t        minor_opcode;
134     uint16_t       length;
135     xcb_drawable_t drawable;
136     xcb_gcontext_t gc;
137     uint16_t       total_width;
138     uint16_t       total_height;
139     uint16_t       src_x;
140     uint16_t       src_y;
141     uint16_t       src_width;
142     uint16_t       src_height;
143     int16_t        dst_x;
144     int16_t        dst_y;
145     uint8_t        depth;
146     uint8_t        format;
147     uint8_t        send_event;
148     uint8_t        pad0;
149     xcb_shm_seg_t  shmseg;
150     uint32_t       offset;
151 } xcb_shm_put_image_request_t;
152 
153 /**
154  * @brief xcb_shm_get_image_cookie_t
155  **/
156 typedef struct xcb_shm_get_image_cookie_t {
157     unsigned int sequence;
158 } xcb_shm_get_image_cookie_t;
159 
160 /** Opcode for xcb_shm_get_image. */
161 #define XCB_SHM_GET_IMAGE 4
162 
163 /**
164  * @brief xcb_shm_get_image_request_t
165  **/
166 typedef struct xcb_shm_get_image_request_t {
167     uint8_t        major_opcode;
168     uint8_t        minor_opcode;
169     uint16_t       length;
170     xcb_drawable_t drawable;
171     int16_t        x;
172     int16_t        y;
173     uint16_t       width;
174     uint16_t       height;
175     uint32_t       plane_mask;
176     uint8_t        format;
177     uint8_t        pad0[3];
178     xcb_shm_seg_t  shmseg;
179     uint32_t       offset;
180 } xcb_shm_get_image_request_t;
181 
182 /**
183  * @brief xcb_shm_get_image_reply_t
184  **/
185 typedef struct xcb_shm_get_image_reply_t {
186     uint8_t        response_type;
187     uint8_t        depth;
188     uint16_t       sequence;
189     uint32_t       length;
190     xcb_visualid_t visual;
191     uint32_t       size;
192 } xcb_shm_get_image_reply_t;
193 
194 /** Opcode for xcb_shm_create_pixmap. */
195 #define XCB_SHM_CREATE_PIXMAP 5
196 
197 /**
198  * @brief xcb_shm_create_pixmap_request_t
199  **/
200 typedef struct xcb_shm_create_pixmap_request_t {
201     uint8_t        major_opcode;
202     uint8_t        minor_opcode;
203     uint16_t       length;
204     xcb_pixmap_t   pid;
205     xcb_drawable_t drawable;
206     uint16_t       width;
207     uint16_t       height;
208     uint8_t        depth;
209     uint8_t        pad0[3];
210     xcb_shm_seg_t  shmseg;
211     uint32_t       offset;
212 } xcb_shm_create_pixmap_request_t;
213 
214 /** Opcode for xcb_shm_attach_fd. */
215 #define XCB_SHM_ATTACH_FD 6
216 
217 /**
218  * @brief xcb_shm_attach_fd_request_t
219  **/
220 typedef struct xcb_shm_attach_fd_request_t {
221     uint8_t       major_opcode;
222     uint8_t       minor_opcode;
223     uint16_t      length;
224     xcb_shm_seg_t shmseg;
225     uint8_t       read_only;
226     uint8_t       pad0[3];
227 } xcb_shm_attach_fd_request_t;
228 
229 /**
230  * @brief xcb_shm_create_segment_cookie_t
231  **/
232 typedef struct xcb_shm_create_segment_cookie_t {
233     unsigned int sequence;
234 } xcb_shm_create_segment_cookie_t;
235 
236 /** Opcode for xcb_shm_create_segment. */
237 #define XCB_SHM_CREATE_SEGMENT 7
238 
239 /**
240  * @brief xcb_shm_create_segment_request_t
241  **/
242 typedef struct xcb_shm_create_segment_request_t {
243     uint8_t       major_opcode;
244     uint8_t       minor_opcode;
245     uint16_t      length;
246     xcb_shm_seg_t shmseg;
247     uint32_t      size;
248     uint8_t       read_only;
249     uint8_t       pad0[3];
250 } xcb_shm_create_segment_request_t;
251 
252 /**
253  * @brief xcb_shm_create_segment_reply_t
254  **/
255 typedef struct xcb_shm_create_segment_reply_t {
256     uint8_t  response_type;
257     uint8_t  nfd;
258     uint16_t sequence;
259     uint32_t length;
260     uint8_t  pad0[24];
261 } xcb_shm_create_segment_reply_t;
262 
263 /**
264  * Get the next element of the iterator
265  * @param i Pointer to a xcb_shm_seg_iterator_t
266  *
267  * Get the next element in the iterator. The member rem is
268  * decreased by one. The member data points to the next
269  * element. The member index is increased by sizeof(xcb_shm_seg_t)
270  */
271 void
272 xcb_shm_seg_next (xcb_shm_seg_iterator_t *i);
273 
274 /**
275  * Return the iterator pointing to the last element
276  * @param i An xcb_shm_seg_iterator_t
277  * @return  The iterator pointing to the last element
278  *
279  * Set the current element in the iterator to the last element.
280  * The member rem is set to 0. The member data points to the
281  * last element.
282  */
283 xcb_generic_iterator_t
284 xcb_shm_seg_end (xcb_shm_seg_iterator_t i);
285 
286 /**
287  * @brief Query the version of the MIT-SHM extension.
288  *
289  * @param c The connection
290  * @return A cookie
291  *
292  * This is used to determine the version of the MIT-SHM extension supported by the
293  * X server.  Clients MUST NOT make other requests in this extension until a reply
294  * to this requests indicates the X server supports them.
295  *
296  */
297 xcb_shm_query_version_cookie_t
298 xcb_shm_query_version (xcb_connection_t *c);
299 
300 /**
301  * @brief Query the version of the MIT-SHM extension.
302  *
303  * @param c The connection
304  * @return A cookie
305  *
306  * This is used to determine the version of the MIT-SHM extension supported by the
307  * X server.  Clients MUST NOT make other requests in this extension until a reply
308  * to this requests indicates the X server supports them.
309  *
310  * This form can be used only if the request will cause
311  * a reply to be generated. Any returned error will be
312  * placed in the event queue.
313  */
314 xcb_shm_query_version_cookie_t
315 xcb_shm_query_version_unchecked (xcb_connection_t *c);
316 
317 /**
318  * Return the reply
319  * @param c      The connection
320  * @param cookie The cookie
321  * @param e      The xcb_generic_error_t supplied
322  *
323  * Returns the reply of the request asked by
324  *
325  * The parameter @p e supplied to this function must be NULL if
326  * xcb_shm_query_version_unchecked(). is used.
327  * Otherwise, it stores the error if any.
328  *
329  * The returned value must be freed by the caller using free().
330  */
331 xcb_shm_query_version_reply_t *
332 xcb_shm_query_version_reply (xcb_connection_t                *c,
333                              xcb_shm_query_version_cookie_t   cookie  /**< */,
334                              xcb_generic_error_t            **e);
335 
336 /**
337  * @brief Attach a System V shared memory segment.
338  *
339  * @param c The connection
340  * @param shmseg A shared memory segment ID created with xcb_generate_id().
341  * @param shmid The System V shared memory segment the server should map.
342  * @param read_only True if the segment shall be mapped read only by the X11 server, otherwise false.
343  * @return A cookie
344  *
345  * Attach a System V shared memory segment to the server.  This will fail unless
346  * the server has permission to map the segment.  The client may destroy the segment
347  * as soon as it receives a XCB_SHM_COMPLETION event with the shmseg value in this
348  * request and with the appropriate serial number.
349  *
350  * This form can be used only if the request will not cause
351  * a reply to be generated. Any returned error will be
352  * saved for handling by xcb_request_check().
353  */
354 xcb_void_cookie_t
355 xcb_shm_attach_checked (xcb_connection_t *c,
356                         xcb_shm_seg_t     shmseg,
357                         uint32_t          shmid,
358                         uint8_t           read_only);
359 
360 /**
361  * @brief Attach a System V shared memory segment.
362  *
363  * @param c The connection
364  * @param shmseg A shared memory segment ID created with xcb_generate_id().
365  * @param shmid The System V shared memory segment the server should map.
366  * @param read_only True if the segment shall be mapped read only by the X11 server, otherwise false.
367  * @return A cookie
368  *
369  * Attach a System V shared memory segment to the server.  This will fail unless
370  * the server has permission to map the segment.  The client may destroy the segment
371  * as soon as it receives a XCB_SHM_COMPLETION event with the shmseg value in this
372  * request and with the appropriate serial number.
373  *
374  */
375 xcb_void_cookie_t
376 xcb_shm_attach (xcb_connection_t *c,
377                 xcb_shm_seg_t     shmseg,
378                 uint32_t          shmid,
379                 uint8_t           read_only);
380 
381 /**
382  * @brief Destroys the specified shared memory segment.
383  *
384  * @param c The connection
385  * @param shmseg The segment to be destroyed.
386  * @return A cookie
387  *
388  * Destroys the specified shared memory segment.  This will never fail unless the
389  * segment number is incorrect.
390  *
391  * This form can be used only if the request will not cause
392  * a reply to be generated. Any returned error will be
393  * saved for handling by xcb_request_check().
394  */
395 xcb_void_cookie_t
396 xcb_shm_detach_checked (xcb_connection_t *c,
397                         xcb_shm_seg_t     shmseg);
398 
399 /**
400  * @brief Destroys the specified shared memory segment.
401  *
402  * @param c The connection
403  * @param shmseg The segment to be destroyed.
404  * @return A cookie
405  *
406  * Destroys the specified shared memory segment.  This will never fail unless the
407  * segment number is incorrect.
408  *
409  */
410 xcb_void_cookie_t
411 xcb_shm_detach (xcb_connection_t *c,
412                 xcb_shm_seg_t     shmseg);
413 
414 /**
415  * @brief Copy data from the shared memory to the specified drawable.
416  *
417  * @param c The connection
418  * @param drawable The drawable to draw to.
419  * @param gc The graphics context to use.
420  * @param total_width The total width of the source image.
421  * @param total_height The total height of the source image.
422  * @param src_x The source X coordinate of the sub-image to copy.
423  * @param src_y The source Y coordinate of the sub-image to copy.
424  * @param src_width The width, in source image coordinates, of the data to copy from the source.
425  * The X server will use this to determine the amount of data to copy.  The amount
426  * of the destination image that is overwritten is determined automatically.
427  * @param src_height The height, in source image coordinates, of the data to copy from the source.
428  * The X server will use this to determine the amount of data to copy.  The amount
429  * of the destination image that is overwritten is determined automatically.
430  * @param dst_x The X coordinate on the destination drawable to copy to.
431  * @param dst_y The Y coordinate on the destination drawable to copy to.
432  * @param depth The depth to use.
433  * @param format The format of the image being drawn.  If it is XYBitmap, depth must be 1, or a
434  * "BadMatch" error results.  The foreground pixel in the GC determines the source
435  * for the one bits in the image, and the background pixel determines the source
436  * for the zero bits.  For XYPixmap and ZPixmap, the depth must match the depth of
437  * the drawable, or a "BadMatch" error results.
438  * @param send_event True if the server should send an XCB_SHM_COMPLETION event when the blit
439  * completes.
440  * @param offset The offset that the source image starts at.
441  * @return A cookie
442  *
443  * Copy data from the shared memory to the specified drawable.  The amount of bytes
444  * written to the destination image is always equal to the number of bytes read
445  * from the shared memory segment.
446  *
447  * This form can be used only if the request will not cause
448  * a reply to be generated. Any returned error will be
449  * saved for handling by xcb_request_check().
450  */
451 xcb_void_cookie_t
452 xcb_shm_put_image_checked (xcb_connection_t *c,
453                            xcb_drawable_t    drawable,
454                            xcb_gcontext_t    gc,
455                            uint16_t          total_width,
456                            uint16_t          total_height,
457                            uint16_t          src_x,
458                            uint16_t          src_y,
459                            uint16_t          src_width,
460                            uint16_t          src_height,
461                            int16_t           dst_x,
462                            int16_t           dst_y,
463                            uint8_t           depth,
464                            uint8_t           format,
465                            uint8_t           send_event,
466                            xcb_shm_seg_t     shmseg,
467                            uint32_t          offset);
468 
469 /**
470  * @brief Copy data from the shared memory to the specified drawable.
471  *
472  * @param c The connection
473  * @param drawable The drawable to draw to.
474  * @param gc The graphics context to use.
475  * @param total_width The total width of the source image.
476  * @param total_height The total height of the source image.
477  * @param src_x The source X coordinate of the sub-image to copy.
478  * @param src_y The source Y coordinate of the sub-image to copy.
479  * @param src_width The width, in source image coordinates, of the data to copy from the source.
480  * The X server will use this to determine the amount of data to copy.  The amount
481  * of the destination image that is overwritten is determined automatically.
482  * @param src_height The height, in source image coordinates, of the data to copy from the source.
483  * The X server will use this to determine the amount of data to copy.  The amount
484  * of the destination image that is overwritten is determined automatically.
485  * @param dst_x The X coordinate on the destination drawable to copy to.
486  * @param dst_y The Y coordinate on the destination drawable to copy to.
487  * @param depth The depth to use.
488  * @param format The format of the image being drawn.  If it is XYBitmap, depth must be 1, or a
489  * "BadMatch" error results.  The foreground pixel in the GC determines the source
490  * for the one bits in the image, and the background pixel determines the source
491  * for the zero bits.  For XYPixmap and ZPixmap, the depth must match the depth of
492  * the drawable, or a "BadMatch" error results.
493  * @param send_event True if the server should send an XCB_SHM_COMPLETION event when the blit
494  * completes.
495  * @param offset The offset that the source image starts at.
496  * @return A cookie
497  *
498  * Copy data from the shared memory to the specified drawable.  The amount of bytes
499  * written to the destination image is always equal to the number of bytes read
500  * from the shared memory segment.
501  *
502  */
503 xcb_void_cookie_t
504 xcb_shm_put_image (xcb_connection_t *c,
505                    xcb_drawable_t    drawable,
506                    xcb_gcontext_t    gc,
507                    uint16_t          total_width,
508                    uint16_t          total_height,
509                    uint16_t          src_x,
510                    uint16_t          src_y,
511                    uint16_t          src_width,
512                    uint16_t          src_height,
513                    int16_t           dst_x,
514                    int16_t           dst_y,
515                    uint8_t           depth,
516                    uint8_t           format,
517                    uint8_t           send_event,
518                    xcb_shm_seg_t     shmseg,
519                    uint32_t          offset);
520 
521 /**
522  * @brief Copies data from the specified drawable to the shared memory segment.
523  *
524  * @param c The connection
525  * @param drawable The drawable to copy the image out of.
526  * @param x The X coordinate in the drawable to begin copying at.
527  * @param y The Y coordinate in the drawable to begin copying at.
528  * @param width The width of the image to copy.
529  * @param height The height of the image to copy.
530  * @param plane_mask A mask that determines which planes are used.
531  * @param format The format to use for the copy (???).
532  * @param shmseg The destination shared memory segment.
533  * @param offset The offset in the shared memory segment to copy data to.
534  * @return A cookie
535  *
536  * Copy data from the specified drawable to the shared memory segment.  The amount
537  * of bytes written to the destination image is always equal to the number of bytes
538  * read from the shared memory segment.
539  *
540  */
541 xcb_shm_get_image_cookie_t
542 xcb_shm_get_image (xcb_connection_t *c,
543                    xcb_drawable_t    drawable,
544                    int16_t           x,
545                    int16_t           y,
546                    uint16_t          width,
547                    uint16_t          height,
548                    uint32_t          plane_mask,
549                    uint8_t           format,
550                    xcb_shm_seg_t     shmseg,
551                    uint32_t          offset);
552 
553 /**
554  * @brief Copies data from the specified drawable to the shared memory segment.
555  *
556  * @param c The connection
557  * @param drawable The drawable to copy the image out of.
558  * @param x The X coordinate in the drawable to begin copying at.
559  * @param y The Y coordinate in the drawable to begin copying at.
560  * @param width The width of the image to copy.
561  * @param height The height of the image to copy.
562  * @param plane_mask A mask that determines which planes are used.
563  * @param format The format to use for the copy (???).
564  * @param shmseg The destination shared memory segment.
565  * @param offset The offset in the shared memory segment to copy data to.
566  * @return A cookie
567  *
568  * Copy data from the specified drawable to the shared memory segment.  The amount
569  * of bytes written to the destination image is always equal to the number of bytes
570  * read from the shared memory segment.
571  *
572  * This form can be used only if the request will cause
573  * a reply to be generated. Any returned error will be
574  * placed in the event queue.
575  */
576 xcb_shm_get_image_cookie_t
577 xcb_shm_get_image_unchecked (xcb_connection_t *c,
578                              xcb_drawable_t    drawable,
579                              int16_t           x,
580                              int16_t           y,
581                              uint16_t          width,
582                              uint16_t          height,
583                              uint32_t          plane_mask,
584                              uint8_t           format,
585                              xcb_shm_seg_t     shmseg,
586                              uint32_t          offset);
587 
588 /**
589  * Return the reply
590  * @param c      The connection
591  * @param cookie The cookie
592  * @param e      The xcb_generic_error_t supplied
593  *
594  * Returns the reply of the request asked by
595  *
596  * The parameter @p e supplied to this function must be NULL if
597  * xcb_shm_get_image_unchecked(). is used.
598  * Otherwise, it stores the error if any.
599  *
600  * The returned value must be freed by the caller using free().
601  */
602 xcb_shm_get_image_reply_t *
603 xcb_shm_get_image_reply (xcb_connection_t            *c,
604                          xcb_shm_get_image_cookie_t   cookie  /**< */,
605                          xcb_generic_error_t        **e);
606 
607 /**
608  * @brief Create a pixmap backed by shared memory.
609  *
610  * @param c The connection
611  * @param pid A pixmap ID created with xcb_generate_id().
612  * @param drawable The drawable to create the pixmap in.
613  * @param width The width of the pixmap to create.  Must be nonzero, or a Value error results.
614  * @param height The height of the pixmap to create.  Must be nonzero, or a Value error results.
615  * @param depth The depth of the pixmap to create.  Must be nonzero, or a Value error results.
616  * @param shmseg The shared memory segment to use to create the pixmap.
617  * @param offset The offset in the segment to create the pixmap at.
618  * @return A cookie
619  *
620  * Create a pixmap backed by shared memory.  Writes to the shared memory will be
621  * reflected in the contents of the pixmap, and writes to the pixmap will be
622  * reflected in the contents of the shared memory.
623  *
624  * This form can be used only if the request will not cause
625  * a reply to be generated. Any returned error will be
626  * saved for handling by xcb_request_check().
627  */
628 xcb_void_cookie_t
629 xcb_shm_create_pixmap_checked (xcb_connection_t *c,
630                                xcb_pixmap_t      pid,
631                                xcb_drawable_t    drawable,
632                                uint16_t          width,
633                                uint16_t          height,
634                                uint8_t           depth,
635                                xcb_shm_seg_t     shmseg,
636                                uint32_t          offset);
637 
638 /**
639  * @brief Create a pixmap backed by shared memory.
640  *
641  * @param c The connection
642  * @param pid A pixmap ID created with xcb_generate_id().
643  * @param drawable The drawable to create the pixmap in.
644  * @param width The width of the pixmap to create.  Must be nonzero, or a Value error results.
645  * @param height The height of the pixmap to create.  Must be nonzero, or a Value error results.
646  * @param depth The depth of the pixmap to create.  Must be nonzero, or a Value error results.
647  * @param shmseg The shared memory segment to use to create the pixmap.
648  * @param offset The offset in the segment to create the pixmap at.
649  * @return A cookie
650  *
651  * Create a pixmap backed by shared memory.  Writes to the shared memory will be
652  * reflected in the contents of the pixmap, and writes to the pixmap will be
653  * reflected in the contents of the shared memory.
654  *
655  */
656 xcb_void_cookie_t
657 xcb_shm_create_pixmap (xcb_connection_t *c,
658                        xcb_pixmap_t      pid,
659                        xcb_drawable_t    drawable,
660                        uint16_t          width,
661                        uint16_t          height,
662                        uint8_t           depth,
663                        xcb_shm_seg_t     shmseg,
664                        uint32_t          offset);
665 
666 /**
667  * @brief Create a shared memory segment
668  *
669  * @param c The connection
670  * @param shmseg A shared memory segment ID created with xcb_generate_id().
671  * @param shm_fd The file descriptor the server should mmap().
672  * @param read_only True if the segment shall be mapped read only by the X11 server, otherwise false.
673  * @return A cookie
674  *
675  * Create a shared memory segment.  The file descriptor will be mapped at offset
676  * zero, and the size will be obtained using fstat().  A zero size will result in a
677  * Value error.
678  *
679  * This form can be used only if the request will not cause
680  * a reply to be generated. Any returned error will be
681  * saved for handling by xcb_request_check().
682  */
683 xcb_void_cookie_t
684 xcb_shm_attach_fd_checked (xcb_connection_t *c,
685                            xcb_shm_seg_t     shmseg,
686                            int32_t           shm_fd,
687                            uint8_t           read_only);
688 
689 /**
690  * @brief Create a shared memory segment
691  *
692  * @param c The connection
693  * @param shmseg A shared memory segment ID created with xcb_generate_id().
694  * @param shm_fd The file descriptor the server should mmap().
695  * @param read_only True if the segment shall be mapped read only by the X11 server, otherwise false.
696  * @return A cookie
697  *
698  * Create a shared memory segment.  The file descriptor will be mapped at offset
699  * zero, and the size will be obtained using fstat().  A zero size will result in a
700  * Value error.
701  *
702  */
703 xcb_void_cookie_t
704 xcb_shm_attach_fd (xcb_connection_t *c,
705                    xcb_shm_seg_t     shmseg,
706                    int32_t           shm_fd,
707                    uint8_t           read_only);
708 
709 /**
710  * @brief Asks the server to allocate a shared memory segment.
711  *
712  * @param c The connection
713  * @param shmseg A shared memory segment ID created with xcb_generate_id().
714  * @param size The size of the segment to create.
715  * @param read_only True if the server should map the segment read-only; otherwise false.
716  * @return A cookie
717  *
718  * Asks the server to allocate a shared memory segment.  The server’s reply will
719  * include a file descriptor for the client to pass to mmap().
720  *
721  */
722 xcb_shm_create_segment_cookie_t
723 xcb_shm_create_segment (xcb_connection_t *c,
724                         xcb_shm_seg_t     shmseg,
725                         uint32_t          size,
726                         uint8_t           read_only);
727 
728 /**
729  * @brief Asks the server to allocate a shared memory segment.
730  *
731  * @param c The connection
732  * @param shmseg A shared memory segment ID created with xcb_generate_id().
733  * @param size The size of the segment to create.
734  * @param read_only True if the server should map the segment read-only; otherwise false.
735  * @return A cookie
736  *
737  * Asks the server to allocate a shared memory segment.  The server’s reply will
738  * include a file descriptor for the client to pass to mmap().
739  *
740  * This form can be used only if the request will cause
741  * a reply to be generated. Any returned error will be
742  * placed in the event queue.
743  */
744 xcb_shm_create_segment_cookie_t
745 xcb_shm_create_segment_unchecked (xcb_connection_t *c,
746                                   xcb_shm_seg_t     shmseg,
747                                   uint32_t          size,
748                                   uint8_t           read_only);
749 
750 /**
751  * Return the reply
752  * @param c      The connection
753  * @param cookie The cookie
754  * @param e      The xcb_generic_error_t supplied
755  *
756  * Returns the reply of the request asked by
757  *
758  * The parameter @p e supplied to this function must be NULL if
759  * xcb_shm_create_segment_unchecked(). is used.
760  * Otherwise, it stores the error if any.
761  *
762  * The returned value must be freed by the caller using free().
763  */
764 xcb_shm_create_segment_reply_t *
765 xcb_shm_create_segment_reply (xcb_connection_t                 *c,
766                               xcb_shm_create_segment_cookie_t   cookie  /**< */,
767                               xcb_generic_error_t             **e);
768 
769 /**
770  * Return the reply fds
771  * @param c      The connection
772  * @param reply  The reply
773  *
774  * Returns a pointer to the array of reply fds of the reply.
775  *
776  * The returned value points into the reply and must not be free().
777  * The fds are not managed by xcb. You must close() them before freeing the reply.
778  */
779 int *
780 xcb_shm_create_segment_reply_fds (xcb_connection_t                *c  /**< */,
781                                   xcb_shm_create_segment_reply_t  *reply);
782 
783 
784 #ifdef __cplusplus
785 }
786 #endif
787 
788 #endif
789 
790 /**
791  * @}
792  */
793