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>
35 #if defined(__GNUC__) && __GNUC__ >= 4
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
,
65 struct gbm_bo
*(*bo_create
)(struct gbm_device
*gbm
,
66 uint32_t width
, uint32_t height
,
69 struct gbm_bo
*(*bo_import
)(struct gbm_device
*gbm
, uint32_t type
,
70 void *buffer
, uint32_t usage
);
71 int (*bo_write
)(struct gbm_bo
*bo
, const void *buf
, size_t data
);
72 int (*bo_get_fd
)(struct gbm_bo
*bo
);
73 void (*bo_destroy
)(struct gbm_bo
*bo
);
75 struct gbm_surface
*(*surface_create
)(struct gbm_device
*gbm
,
76 uint32_t width
, uint32_t height
,
77 uint32_t format
, uint32_t flags
);
78 struct gbm_bo
*(*surface_lock_front_buffer
)(struct gbm_surface
*surface
);
79 void (*surface_release_buffer
)(struct gbm_surface
*surface
,
81 int (*surface_has_free_buffers
)(struct gbm_surface
*surface
);
82 void (*surface_destroy
)(struct gbm_surface
*surface
);
86 * The allocated buffer object.
88 * The members in this structure should not be accessed directly.
91 struct gbm_device
*gbm
;
96 union gbm_bo_handle handle
;
98 void (*destroy_user_data
)(struct gbm_bo
*, void *);
102 struct gbm_device
*gbm
;
110 const char *backend_name
;
111 struct gbm_device
*(*create_device
)(int fd
);
115 _gbm_mesa_get_device(int fd
);