2 * Copyright © 2011 Intel Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
25 * Benjamin Franzke <benjaminfranzke@googlemail.com>
36 #define GBM_EXPORT __attribute__ ((visibility("default")))
43 * \brief Internal implementation details of gbm
47 * The device used for the memory allocation.
49 * The members of this structure should be not accessed directly
52 /* Hack to make a gbm_device detectable by its first element. */
53 struct gbm_device
*(*dummy
)(int);
57 unsigned int refcount
;
60 void (*destroy
)(struct gbm_device
*gbm
);
61 int (*is_format_supported
)(struct gbm_device
*gbm
,
64 int (*get_format_modifier_plane_count
)(struct gbm_device
*device
,
68 struct gbm_bo
*(*bo_create
)(struct gbm_device
*gbm
,
69 uint32_t width
, uint32_t height
,
72 const uint64_t *modifiers
,
73 const unsigned int count
);
74 struct gbm_bo
*(*bo_import
)(struct gbm_device
*gbm
, uint32_t type
,
75 void *buffer
, uint32_t usage
);
76 void *(*bo_map
)(struct gbm_bo
*bo
,
77 uint32_t x
, uint32_t y
,
78 uint32_t width
, uint32_t height
,
79 uint32_t flags
, uint32_t *stride
,
81 void (*bo_unmap
)(struct gbm_bo
*bo
, void *map_data
);
82 int (*bo_write
)(struct gbm_bo
*bo
, const void *buf
, size_t data
);
83 int (*bo_get_fd
)(struct gbm_bo
*bo
);
84 int (*bo_get_planes
)(struct gbm_bo
*bo
);
85 union gbm_bo_handle (*bo_get_handle
)(struct gbm_bo
*bo
, int plane
);
86 uint32_t (*bo_get_stride
)(struct gbm_bo
*bo
, int plane
);
87 uint32_t (*bo_get_offset
)(struct gbm_bo
*bo
, int plane
);
88 uint64_t (*bo_get_modifier
)(struct gbm_bo
*bo
);
89 void (*bo_destroy
)(struct gbm_bo
*bo
);
91 struct gbm_surface
*(*surface_create
)(struct gbm_device
*gbm
,
92 uint32_t width
, uint32_t height
,
93 uint32_t format
, uint32_t flags
,
94 const uint64_t *modifiers
,
95 const unsigned count
);
96 struct gbm_bo
*(*surface_lock_front_buffer
)(struct gbm_surface
*surface
);
97 void (*surface_release_buffer
)(struct gbm_surface
*surface
,
99 int (*surface_has_free_buffers
)(struct gbm_surface
*surface
);
100 void (*surface_destroy
)(struct gbm_surface
*surface
);
104 * The allocated buffer object.
106 * The members in this structure should not be accessed directly.
109 struct gbm_device
*gbm
;
114 union gbm_bo_handle handle
;
116 void (*destroy_user_data
)(struct gbm_bo
*, void *);
120 struct gbm_device
*gbm
;
132 const char *backend_name
;
133 struct gbm_device
*(*create_device
)(int fd
);
137 gbm_format_canonicalize(uint32_t gbm_format
);