xref: /aosp_15_r20/external/crosvm/third_party/minigbm/gbm.h (revision d95af8df99a05bcb8679a54dc3ab8e5cd312b38e)
1*d95af8dfSAndroid Build Coastguard Worker /*
2*d95af8dfSAndroid Build Coastguard Worker  * Copyright © 2011 Intel Corporation
3*d95af8dfSAndroid Build Coastguard Worker  *
4*d95af8dfSAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*d95af8dfSAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*d95af8dfSAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*d95af8dfSAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*d95af8dfSAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*d95af8dfSAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*d95af8dfSAndroid Build Coastguard Worker  *
11*d95af8dfSAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*d95af8dfSAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*d95af8dfSAndroid Build Coastguard Worker  * Software.
14*d95af8dfSAndroid Build Coastguard Worker  *
15*d95af8dfSAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16*d95af8dfSAndroid Build Coastguard Worker  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17*d95af8dfSAndroid Build Coastguard Worker  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18*d95af8dfSAndroid Build Coastguard Worker  * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19*d95af8dfSAndroid Build Coastguard Worker  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20*d95af8dfSAndroid Build Coastguard Worker  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21*d95af8dfSAndroid Build Coastguard Worker  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22*d95af8dfSAndroid Build Coastguard Worker  * DEALINGS IN THE SOFTWARE.
23*d95af8dfSAndroid Build Coastguard Worker  *
24*d95af8dfSAndroid Build Coastguard Worker  * Authors:
25*d95af8dfSAndroid Build Coastguard Worker  *    Benjamin Franzke <[email protected]>
26*d95af8dfSAndroid Build Coastguard Worker  */
27*d95af8dfSAndroid Build Coastguard Worker 
28*d95af8dfSAndroid Build Coastguard Worker #ifndef _GBM_H_
29*d95af8dfSAndroid Build Coastguard Worker #define _GBM_H_
30*d95af8dfSAndroid Build Coastguard Worker 
31*d95af8dfSAndroid Build Coastguard Worker #define __GBM__ 1
32*d95af8dfSAndroid Build Coastguard Worker 
33*d95af8dfSAndroid Build Coastguard Worker #include <stddef.h>
34*d95af8dfSAndroid Build Coastguard Worker #include <stdint.h>
35*d95af8dfSAndroid Build Coastguard Worker 
36*d95af8dfSAndroid Build Coastguard Worker #ifdef __cplusplus
37*d95af8dfSAndroid Build Coastguard Worker extern "C" {
38*d95af8dfSAndroid Build Coastguard Worker #endif
39*d95af8dfSAndroid Build Coastguard Worker 
40*d95af8dfSAndroid Build Coastguard Worker 
41*d95af8dfSAndroid Build Coastguard Worker /**
42*d95af8dfSAndroid Build Coastguard Worker  * \file gbm.h
43*d95af8dfSAndroid Build Coastguard Worker  * \brief Generic Buffer Manager
44*d95af8dfSAndroid Build Coastguard Worker  */
45*d95af8dfSAndroid Build Coastguard Worker 
46*d95af8dfSAndroid Build Coastguard Worker struct gbm_device;
47*d95af8dfSAndroid Build Coastguard Worker struct gbm_bo;
48*d95af8dfSAndroid Build Coastguard Worker struct gbm_surface;
49*d95af8dfSAndroid Build Coastguard Worker 
50*d95af8dfSAndroid Build Coastguard Worker /**
51*d95af8dfSAndroid Build Coastguard Worker  * \mainpage The Generic Buffer Manager
52*d95af8dfSAndroid Build Coastguard Worker  *
53*d95af8dfSAndroid Build Coastguard Worker  * This module provides an abstraction that the caller can use to request a
54*d95af8dfSAndroid Build Coastguard Worker  * buffer from the underlying memory management system for the platform.
55*d95af8dfSAndroid Build Coastguard Worker  *
56*d95af8dfSAndroid Build Coastguard Worker  * This allows the creation of portable code whilst still allowing access to
57*d95af8dfSAndroid Build Coastguard Worker  * the underlying memory manager.
58*d95af8dfSAndroid Build Coastguard Worker  */
59*d95af8dfSAndroid Build Coastguard Worker 
60*d95af8dfSAndroid Build Coastguard Worker /**
61*d95af8dfSAndroid Build Coastguard Worker  * Abstraction representing the handle to a buffer allocated by the
62*d95af8dfSAndroid Build Coastguard Worker  * manager
63*d95af8dfSAndroid Build Coastguard Worker  */
64*d95af8dfSAndroid Build Coastguard Worker union gbm_bo_handle {
65*d95af8dfSAndroid Build Coastguard Worker    void *ptr;
66*d95af8dfSAndroid Build Coastguard Worker    int32_t s32;
67*d95af8dfSAndroid Build Coastguard Worker    uint32_t u32;
68*d95af8dfSAndroid Build Coastguard Worker    int64_t s64;
69*d95af8dfSAndroid Build Coastguard Worker    uint64_t u64;
70*d95af8dfSAndroid Build Coastguard Worker };
71*d95af8dfSAndroid Build Coastguard Worker 
72*d95af8dfSAndroid Build Coastguard Worker /** Format of the allocated buffer */
73*d95af8dfSAndroid Build Coastguard Worker enum gbm_bo_format {
74*d95af8dfSAndroid Build Coastguard Worker    /** RGB with 8 bits per channel in a 32 bit value */
75*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_FORMAT_XRGB8888,
76*d95af8dfSAndroid Build Coastguard Worker    /** ARGB with 8 bits per channel in a 32 bit value */
77*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_FORMAT_ARGB8888
78*d95af8dfSAndroid Build Coastguard Worker };
79*d95af8dfSAndroid Build Coastguard Worker 
80*d95af8dfSAndroid Build Coastguard Worker 
81*d95af8dfSAndroid Build Coastguard Worker /**
82*d95af8dfSAndroid Build Coastguard Worker  * The FourCC format codes are taken from the drm_fourcc.h definition, and
83*d95af8dfSAndroid Build Coastguard Worker  * re-namespaced. New GBM formats must not be added, unless they are
84*d95af8dfSAndroid Build Coastguard Worker  * identical ports from drm_fourcc.
85*d95af8dfSAndroid Build Coastguard Worker  */
86*d95af8dfSAndroid Build Coastguard Worker #define __gbm_fourcc_code(a,b,c,d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | \
87*d95af8dfSAndroid Build Coastguard Worker 			      ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24))
88*d95af8dfSAndroid Build Coastguard Worker 
89*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_BIG_ENDIAN (1<<31) /* format is big endian instead of little endian */
90*d95af8dfSAndroid Build Coastguard Worker 
91*d95af8dfSAndroid Build Coastguard Worker /* color index */
92*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_C8		__gbm_fourcc_code('C', '8', ' ', ' ') /* [7:0] C */
93*d95af8dfSAndroid Build Coastguard Worker 
94*d95af8dfSAndroid Build Coastguard Worker /* 8 bpp Red */
95*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_R8		__gbm_fourcc_code('R', '8', ' ', ' ') /* [7:0] R */
96*d95af8dfSAndroid Build Coastguard Worker 
97*d95af8dfSAndroid Build Coastguard Worker /* 16 bpp RG */
98*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_GR88		__gbm_fourcc_code('G', 'R', '8', '8') /* [15:0] G:R 8:8 little endian */
99*d95af8dfSAndroid Build Coastguard Worker 
100*d95af8dfSAndroid Build Coastguard Worker /* 8 bpp RGB */
101*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_RGB332	__gbm_fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */
102*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_BGR233	__gbm_fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */
103*d95af8dfSAndroid Build Coastguard Worker 
104*d95af8dfSAndroid Build Coastguard Worker /* 16 bpp RGB */
105*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_XRGB4444	__gbm_fourcc_code('X', 'R', '1', '2') /* [15:0] x:R:G:B 4:4:4:4 little endian */
106*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_XBGR4444	__gbm_fourcc_code('X', 'B', '1', '2') /* [15:0] x:B:G:R 4:4:4:4 little endian */
107*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_RGBX4444	__gbm_fourcc_code('R', 'X', '1', '2') /* [15:0] R:G:B:x 4:4:4:4 little endian */
108*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_BGRX4444	__gbm_fourcc_code('B', 'X', '1', '2') /* [15:0] B:G:R:x 4:4:4:4 little endian */
109*d95af8dfSAndroid Build Coastguard Worker 
110*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_ARGB4444	__gbm_fourcc_code('A', 'R', '1', '2') /* [15:0] A:R:G:B 4:4:4:4 little endian */
111*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_ABGR4444	__gbm_fourcc_code('A', 'B', '1', '2') /* [15:0] A:B:G:R 4:4:4:4 little endian */
112*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_RGBA4444	__gbm_fourcc_code('R', 'A', '1', '2') /* [15:0] R:G:B:A 4:4:4:4 little endian */
113*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_BGRA4444	__gbm_fourcc_code('B', 'A', '1', '2') /* [15:0] B:G:R:A 4:4:4:4 little endian */
114*d95af8dfSAndroid Build Coastguard Worker 
115*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_XRGB1555	__gbm_fourcc_code('X', 'R', '1', '5') /* [15:0] x:R:G:B 1:5:5:5 little endian */
116*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_XBGR1555	__gbm_fourcc_code('X', 'B', '1', '5') /* [15:0] x:B:G:R 1:5:5:5 little endian */
117*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_RGBX5551	__gbm_fourcc_code('R', 'X', '1', '5') /* [15:0] R:G:B:x 5:5:5:1 little endian */
118*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_BGRX5551	__gbm_fourcc_code('B', 'X', '1', '5') /* [15:0] B:G:R:x 5:5:5:1 little endian */
119*d95af8dfSAndroid Build Coastguard Worker 
120*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_ARGB1555	__gbm_fourcc_code('A', 'R', '1', '5') /* [15:0] A:R:G:B 1:5:5:5 little endian */
121*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_ABGR1555	__gbm_fourcc_code('A', 'B', '1', '5') /* [15:0] A:B:G:R 1:5:5:5 little endian */
122*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_RGBA5551	__gbm_fourcc_code('R', 'A', '1', '5') /* [15:0] R:G:B:A 5:5:5:1 little endian */
123*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_BGRA5551	__gbm_fourcc_code('B', 'A', '1', '5') /* [15:0] B:G:R:A 5:5:5:1 little endian */
124*d95af8dfSAndroid Build Coastguard Worker 
125*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_RGB565	__gbm_fourcc_code('R', 'G', '1', '6') /* [15:0] R:G:B 5:6:5 little endian */
126*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_BGR565	__gbm_fourcc_code('B', 'G', '1', '6') /* [15:0] B:G:R 5:6:5 little endian */
127*d95af8dfSAndroid Build Coastguard Worker 
128*d95af8dfSAndroid Build Coastguard Worker /* 24 bpp RGB */
129*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_RGB888	__gbm_fourcc_code('R', 'G', '2', '4') /* [23:0] R:G:B little endian */
130*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_BGR888	__gbm_fourcc_code('B', 'G', '2', '4') /* [23:0] B:G:R little endian */
131*d95af8dfSAndroid Build Coastguard Worker 
132*d95af8dfSAndroid Build Coastguard Worker /* 32 bpp RGB */
133*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_XRGB8888	__gbm_fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */
134*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_XBGR8888	__gbm_fourcc_code('X', 'B', '2', '4') /* [31:0] x:B:G:R 8:8:8:8 little endian */
135*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_RGBX8888	__gbm_fourcc_code('R', 'X', '2', '4') /* [31:0] R:G:B:x 8:8:8:8 little endian */
136*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_BGRX8888	__gbm_fourcc_code('B', 'X', '2', '4') /* [31:0] B:G:R:x 8:8:8:8 little endian */
137*d95af8dfSAndroid Build Coastguard Worker 
138*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_ARGB8888	__gbm_fourcc_code('A', 'R', '2', '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */
139*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_ABGR8888	__gbm_fourcc_code('A', 'B', '2', '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */
140*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_RGBA8888	__gbm_fourcc_code('R', 'A', '2', '4') /* [31:0] R:G:B:A 8:8:8:8 little endian */
141*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_BGRA8888	__gbm_fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */
142*d95af8dfSAndroid Build Coastguard Worker 
143*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_XRGB2101010	__gbm_fourcc_code('X', 'R', '3', '0') /* [31:0] x:R:G:B 2:10:10:10 little endian */
144*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_XBGR2101010	__gbm_fourcc_code('X', 'B', '3', '0') /* [31:0] x:B:G:R 2:10:10:10 little endian */
145*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_RGBX1010102	__gbm_fourcc_code('R', 'X', '3', '0') /* [31:0] R:G:B:x 10:10:10:2 little endian */
146*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_BGRX1010102	__gbm_fourcc_code('B', 'X', '3', '0') /* [31:0] B:G:R:x 10:10:10:2 little endian */
147*d95af8dfSAndroid Build Coastguard Worker 
148*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_ARGB2101010	__gbm_fourcc_code('A', 'R', '3', '0') /* [31:0] A:R:G:B 2:10:10:10 little endian */
149*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_ABGR2101010	__gbm_fourcc_code('A', 'B', '3', '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */
150*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_RGBA1010102	__gbm_fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */
151*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_BGRA1010102	__gbm_fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */
152*d95af8dfSAndroid Build Coastguard Worker 
153*d95af8dfSAndroid Build Coastguard Worker /*
154*d95af8dfSAndroid Build Coastguard Worker  * Floating point 64bpp RGB
155*d95af8dfSAndroid Build Coastguard Worker  * IEEE 754-2008 binary16 half-precision float
156*d95af8dfSAndroid Build Coastguard Worker  * [15:0] sign:exponent:mantissa 1:5:10
157*d95af8dfSAndroid Build Coastguard Worker  */
158*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_XBGR16161616F __gbm_fourcc_code('X', 'B', '4', 'H') /* [63:0] x:B:G:R 16:16:16:16 little endian */
159*d95af8dfSAndroid Build Coastguard Worker 
160*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_ABGR16161616F __gbm_fourcc_code('A', 'B', '4', 'H') /* [63:0] A:B:G:R 16:16:16:16 little endian */
161*d95af8dfSAndroid Build Coastguard Worker 
162*d95af8dfSAndroid Build Coastguard Worker /* packed YCbCr */
163*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_YUYV		__gbm_fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */
164*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_YVYU		__gbm_fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */
165*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_UYVY		__gbm_fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */
166*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_VYUY		__gbm_fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */
167*d95af8dfSAndroid Build Coastguard Worker 
168*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_AYUV		__gbm_fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */
169*d95af8dfSAndroid Build Coastguard Worker 
170*d95af8dfSAndroid Build Coastguard Worker /*
171*d95af8dfSAndroid Build Coastguard Worker  * 2 plane YCbCr
172*d95af8dfSAndroid Build Coastguard Worker  * index 0 = Y plane, [7:0] Y
173*d95af8dfSAndroid Build Coastguard Worker  * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian
174*d95af8dfSAndroid Build Coastguard Worker  * or
175*d95af8dfSAndroid Build Coastguard Worker  * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian
176*d95af8dfSAndroid Build Coastguard Worker  */
177*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_NV12		__gbm_fourcc_code('N', 'V', '1', '2') /* 2x2 subsampled Cr:Cb plane */
178*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_NV21		__gbm_fourcc_code('N', 'V', '2', '1') /* 2x2 subsampled Cb:Cr plane */
179*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_NV16		__gbm_fourcc_code('N', 'V', '1', '6') /* 2x1 subsampled Cr:Cb plane */
180*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_NV61		__gbm_fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */
181*d95af8dfSAndroid Build Coastguard Worker 
182*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_P010		__gbm_fourcc_code('P', '0', '1', '0') /* 2x2 subsampled Cr:Cb plane */
183*d95af8dfSAndroid Build Coastguard Worker 
184*d95af8dfSAndroid Build Coastguard Worker /*
185*d95af8dfSAndroid Build Coastguard Worker  * 3 plane YCbCr
186*d95af8dfSAndroid Build Coastguard Worker  * index 0: Y plane, [7:0] Y
187*d95af8dfSAndroid Build Coastguard Worker  * index 1: Cb plane, [7:0] Cb
188*d95af8dfSAndroid Build Coastguard Worker  * index 2: Cr plane, [7:0] Cr
189*d95af8dfSAndroid Build Coastguard Worker  * or
190*d95af8dfSAndroid Build Coastguard Worker  * index 1: Cr plane, [7:0] Cr
191*d95af8dfSAndroid Build Coastguard Worker  * index 2: Cb plane, [7:0] Cb
192*d95af8dfSAndroid Build Coastguard Worker  */
193*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_YUV410	__gbm_fourcc_code('Y', 'U', 'V', '9') /* 4x4 subsampled Cb (1) and Cr (2) planes */
194*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_YVU410	__gbm_fourcc_code('Y', 'V', 'U', '9') /* 4x4 subsampled Cr (1) and Cb (2) planes */
195*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_YUV411	__gbm_fourcc_code('Y', 'U', '1', '1') /* 4x1 subsampled Cb (1) and Cr (2) planes */
196*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_YVU411	__gbm_fourcc_code('Y', 'V', '1', '1') /* 4x1 subsampled Cr (1) and Cb (2) planes */
197*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_YUV420	__gbm_fourcc_code('Y', 'U', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */
198*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_YVU420	__gbm_fourcc_code('Y', 'V', '1', '2') /* 2x2 subsampled Cr (1) and Cb (2) planes */
199*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_YUV422	__gbm_fourcc_code('Y', 'U', '1', '6') /* 2x1 subsampled Cb (1) and Cr (2) planes */
200*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_YVU422	__gbm_fourcc_code('Y', 'V', '1', '6') /* 2x1 subsampled Cr (1) and Cb (2) planes */
201*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_YUV444	__gbm_fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */
202*d95af8dfSAndroid Build Coastguard Worker #define GBM_FORMAT_YVU444	__gbm_fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */
203*d95af8dfSAndroid Build Coastguard Worker 
204*d95af8dfSAndroid Build Coastguard Worker struct gbm_format_name_desc {
205*d95af8dfSAndroid Build Coastguard Worker    char name[5];
206*d95af8dfSAndroid Build Coastguard Worker };
207*d95af8dfSAndroid Build Coastguard Worker 
208*d95af8dfSAndroid Build Coastguard Worker /**
209*d95af8dfSAndroid Build Coastguard Worker  * Flags to indicate the intended use for the buffer - these are passed into
210*d95af8dfSAndroid Build Coastguard Worker  * gbm_bo_create(). The caller must set the union of all the flags that are
211*d95af8dfSAndroid Build Coastguard Worker  * appropriate
212*d95af8dfSAndroid Build Coastguard Worker  *
213*d95af8dfSAndroid Build Coastguard Worker  * \sa Use gbm_device_is_format_supported() to check if the combination of format
214*d95af8dfSAndroid Build Coastguard Worker  * and use flags are supported
215*d95af8dfSAndroid Build Coastguard Worker  */
216*d95af8dfSAndroid Build Coastguard Worker enum gbm_bo_flags {
217*d95af8dfSAndroid Build Coastguard Worker    /**
218*d95af8dfSAndroid Build Coastguard Worker     * Buffer is going to be presented to the screen using an API such as KMS
219*d95af8dfSAndroid Build Coastguard Worker     */
220*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_SCANOUT      = (1 << 0),
221*d95af8dfSAndroid Build Coastguard Worker    /**
222*d95af8dfSAndroid Build Coastguard Worker     * Buffer is going to be used as cursor
223*d95af8dfSAndroid Build Coastguard Worker     */
224*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_CURSOR       = (1 << 1),
225*d95af8dfSAndroid Build Coastguard Worker    /**
226*d95af8dfSAndroid Build Coastguard Worker     * Deprecated
227*d95af8dfSAndroid Build Coastguard Worker     */
228*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_CURSOR_64X64 = GBM_BO_USE_CURSOR,
229*d95af8dfSAndroid Build Coastguard Worker    /**
230*d95af8dfSAndroid Build Coastguard Worker     * Buffer is to be used for rendering - for example it is going to be used
231*d95af8dfSAndroid Build Coastguard Worker     * as the storage for a color buffer
232*d95af8dfSAndroid Build Coastguard Worker     */
233*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_RENDERING    = (1 << 2),
234*d95af8dfSAndroid Build Coastguard Worker    /**
235*d95af8dfSAndroid Build Coastguard Worker     * Buffer can be used for gbm_bo_write.  This is guaranteed to work
236*d95af8dfSAndroid Build Coastguard Worker     * with GBM_BO_USE_CURSOR, but may not work for other combinations.
237*d95af8dfSAndroid Build Coastguard Worker     */
238*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_WRITE    = (1 << 3),
239*d95af8dfSAndroid Build Coastguard Worker    /**
240*d95af8dfSAndroid Build Coastguard Worker     * Buffer is linear, i.e. not tiled.
241*d95af8dfSAndroid Build Coastguard Worker     */
242*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_LINEAR = (1 << 4),
243*d95af8dfSAndroid Build Coastguard Worker    /**
244*d95af8dfSAndroid Build Coastguard Worker     * The buffer will be used as a texture that will be sampled from.
245*d95af8dfSAndroid Build Coastguard Worker     */
246*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_TEXTURING    = (1 << 5),
247*d95af8dfSAndroid Build Coastguard Worker    /**
248*d95af8dfSAndroid Build Coastguard Worker     * The buffer will be written to by a camera subsystem.
249*d95af8dfSAndroid Build Coastguard Worker     */
250*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_CAMERA_WRITE = (1 << 6),
251*d95af8dfSAndroid Build Coastguard Worker    /**
252*d95af8dfSAndroid Build Coastguard Worker     * The buffer will be read from by a camera subsystem.
253*d95af8dfSAndroid Build Coastguard Worker     */
254*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_CAMERA_READ = (1 << 7),
255*d95af8dfSAndroid Build Coastguard Worker    /**
256*d95af8dfSAndroid Build Coastguard Worker     * Buffer inaccessible to unprivileged users.
257*d95af8dfSAndroid Build Coastguard Worker     */
258*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_PROTECTED = (1 << 8),
259*d95af8dfSAndroid Build Coastguard Worker    /**
260*d95af8dfSAndroid Build Coastguard Worker     * These flags specify the frequency of software access. These flags do not
261*d95af8dfSAndroid Build Coastguard Worker     * guarantee the buffer is linear, but do guarantee gbm_bo_map(..) will
262*d95af8dfSAndroid Build Coastguard Worker     * present a linear view.
263*d95af8dfSAndroid Build Coastguard Worker     */
264*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_SW_READ_OFTEN = (1 << 9),
265*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_SW_READ_RARELY = (1 << 10),
266*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_SW_WRITE_OFTEN = (1 << 11),
267*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_SW_WRITE_RARELY = (1 << 12),
268*d95af8dfSAndroid Build Coastguard Worker    /**
269*d95af8dfSAndroid Build Coastguard Worker     * The buffer will be written by a video decode accelerator.
270*d95af8dfSAndroid Build Coastguard Worker     */
271*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_HW_VIDEO_DECODER = (1 << 13),
272*d95af8dfSAndroid Build Coastguard Worker    /**
273*d95af8dfSAndroid Build Coastguard Worker     * The buffer will be read by a video encode accelerator.
274*d95af8dfSAndroid Build Coastguard Worker     */
275*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_HW_VIDEO_ENCODER = (1 << 14),
276*d95af8dfSAndroid Build Coastguard Worker 
277*d95af8dfSAndroid Build Coastguard Worker    /**
278*d95af8dfSAndroid Build Coastguard Worker     * If this flag is set, no backing memory will be allocated for the
279*d95af8dfSAndroid Build Coastguard Worker     * created buffer. The metadata of the buffer (e.g. size) can be
280*d95af8dfSAndroid Build Coastguard Worker     * queried, and the values will be equal to a buffer allocated with
281*d95af8dfSAndroid Build Coastguard Worker     * the same same arguments minus this flag. However, any methods
282*d95af8dfSAndroid Build Coastguard Worker     * which would otherwise access the underlying buffer will fail.
283*d95af8dfSAndroid Build Coastguard Worker     */
284*d95af8dfSAndroid Build Coastguard Worker    GBM_TEST_ALLOC = (1 << 15),
285*d95af8dfSAndroid Build Coastguard Worker 
286*d95af8dfSAndroid Build Coastguard Worker    /**
287*d95af8dfSAndroid Build Coastguard Worker     * The buffer will be used for front buffer rendering.  On some
288*d95af8dfSAndroid Build Coastguard Worker     * platforms this may (for example) disable framebuffer compression
289*d95af8dfSAndroid Build Coastguard Worker     * to avoid problems with compression flags data being out of sync
290*d95af8dfSAndroid Build Coastguard Worker     * with pixel data.
291*d95af8dfSAndroid Build Coastguard Worker     */
292*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_FRONT_RENDERING = (1 << 16),
293*d95af8dfSAndroid Build Coastguard Worker 
294*d95af8dfSAndroid Build Coastguard Worker    /**
295*d95af8dfSAndroid Build Coastguard Worker     * (1 << 17) is reserved for RenderScript (deprecated in Android 12).
296*d95af8dfSAndroid Build Coastguard Worker     */
297*d95af8dfSAndroid Build Coastguard Worker 
298*d95af8dfSAndroid Build Coastguard Worker    /**
299*d95af8dfSAndroid Build Coastguard Worker     * The buffer will be used as a shader storage or uniform buffer
300*d95af8dfSAndroid Build Coastguard Worker     * object.
301*d95af8dfSAndroid Build Coastguard Worker     */
302*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_GPU_DATA_BUFFER = (1 << 18),
303*d95af8dfSAndroid Build Coastguard Worker 
304*d95af8dfSAndroid Build Coastguard Worker    /**
305*d95af8dfSAndroid Build Coastguard Worker     * The buffer will be used as a sensor direct report output.
306*d95af8dfSAndroid Build Coastguard Worker     */
307*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_USE_SENSOR_DIRECT_DATA = (1 << 19),
308*d95af8dfSAndroid Build Coastguard Worker };
309*d95af8dfSAndroid Build Coastguard Worker 
310*d95af8dfSAndroid Build Coastguard Worker int
311*d95af8dfSAndroid Build Coastguard Worker gbm_device_get_fd(struct gbm_device *gbm);
312*d95af8dfSAndroid Build Coastguard Worker 
313*d95af8dfSAndroid Build Coastguard Worker const char *
314*d95af8dfSAndroid Build Coastguard Worker gbm_device_get_backend_name(struct gbm_device *gbm);
315*d95af8dfSAndroid Build Coastguard Worker 
316*d95af8dfSAndroid Build Coastguard Worker int
317*d95af8dfSAndroid Build Coastguard Worker gbm_device_is_format_supported(struct gbm_device *gbm,
318*d95af8dfSAndroid Build Coastguard Worker                                uint32_t format, uint32_t usage);
319*d95af8dfSAndroid Build Coastguard Worker 
320*d95af8dfSAndroid Build Coastguard Worker int
321*d95af8dfSAndroid Build Coastguard Worker gbm_device_get_format_modifier_plane_count(struct gbm_device *gbm,
322*d95af8dfSAndroid Build Coastguard Worker                                            uint32_t format,
323*d95af8dfSAndroid Build Coastguard Worker                                            uint64_t modifier);
324*d95af8dfSAndroid Build Coastguard Worker 
325*d95af8dfSAndroid Build Coastguard Worker void
326*d95af8dfSAndroid Build Coastguard Worker gbm_device_destroy(struct gbm_device *gbm);
327*d95af8dfSAndroid Build Coastguard Worker 
328*d95af8dfSAndroid Build Coastguard Worker struct gbm_device *
329*d95af8dfSAndroid Build Coastguard Worker gbm_create_device(int fd);
330*d95af8dfSAndroid Build Coastguard Worker 
331*d95af8dfSAndroid Build Coastguard Worker struct gbm_bo *
332*d95af8dfSAndroid Build Coastguard Worker gbm_bo_create(struct gbm_device *gbm,
333*d95af8dfSAndroid Build Coastguard Worker               uint32_t width, uint32_t height,
334*d95af8dfSAndroid Build Coastguard Worker               uint32_t format, uint32_t flags);
335*d95af8dfSAndroid Build Coastguard Worker 
336*d95af8dfSAndroid Build Coastguard Worker struct gbm_bo *
337*d95af8dfSAndroid Build Coastguard Worker gbm_bo_create_with_modifiers(struct gbm_device *gbm,
338*d95af8dfSAndroid Build Coastguard Worker                              uint32_t width, uint32_t height,
339*d95af8dfSAndroid Build Coastguard Worker                              uint32_t format,
340*d95af8dfSAndroid Build Coastguard Worker                              const uint64_t *modifiers,
341*d95af8dfSAndroid Build Coastguard Worker                              const unsigned int count);
342*d95af8dfSAndroid Build Coastguard Worker 
343*d95af8dfSAndroid Build Coastguard Worker struct gbm_bo *
344*d95af8dfSAndroid Build Coastguard Worker gbm_bo_create_with_modifiers2(struct gbm_device *gbm,
345*d95af8dfSAndroid Build Coastguard Worker                               uint32_t width,
346*d95af8dfSAndroid Build Coastguard Worker                               uint32_t height,
347*d95af8dfSAndroid Build Coastguard Worker                               uint32_t format,
348*d95af8dfSAndroid Build Coastguard Worker                               const uint64_t *modifiers,
349*d95af8dfSAndroid Build Coastguard Worker                               const unsigned int count,
350*d95af8dfSAndroid Build Coastguard Worker                               uint32_t flags);
351*d95af8dfSAndroid Build Coastguard Worker 
352*d95af8dfSAndroid Build Coastguard Worker #define GBM_BO_IMPORT_WL_BUFFER         0x5501
353*d95af8dfSAndroid Build Coastguard Worker #define GBM_BO_IMPORT_EGL_IMAGE         0x5502
354*d95af8dfSAndroid Build Coastguard Worker #define GBM_BO_IMPORT_FD                0x5503
355*d95af8dfSAndroid Build Coastguard Worker // Deprecated. Use GBM_BO_IMPORT_FD_MODIFIER instead.
356*d95af8dfSAndroid Build Coastguard Worker #define GBM_BO_IMPORT_FD_PLANAR         0x5504
357*d95af8dfSAndroid Build Coastguard Worker #define GBM_BO_IMPORT_FD_MODIFIER       0x5505
358*d95af8dfSAndroid Build Coastguard Worker 
359*d95af8dfSAndroid Build Coastguard Worker struct gbm_import_fd_data {
360*d95af8dfSAndroid Build Coastguard Worker    int fd;
361*d95af8dfSAndroid Build Coastguard Worker    uint32_t width;
362*d95af8dfSAndroid Build Coastguard Worker    uint32_t height;
363*d95af8dfSAndroid Build Coastguard Worker    uint32_t stride;
364*d95af8dfSAndroid Build Coastguard Worker    uint32_t format;
365*d95af8dfSAndroid Build Coastguard Worker };
366*d95af8dfSAndroid Build Coastguard Worker 
367*d95af8dfSAndroid Build Coastguard Worker #define GBM_MAX_PLANES 4
368*d95af8dfSAndroid Build Coastguard Worker 
369*d95af8dfSAndroid Build Coastguard Worker struct gbm_import_fd_modifier_data {
370*d95af8dfSAndroid Build Coastguard Worker    uint32_t width;
371*d95af8dfSAndroid Build Coastguard Worker    uint32_t height;
372*d95af8dfSAndroid Build Coastguard Worker    uint32_t format;
373*d95af8dfSAndroid Build Coastguard Worker    uint32_t num_fds;
374*d95af8dfSAndroid Build Coastguard Worker    int fds[GBM_MAX_PLANES];
375*d95af8dfSAndroid Build Coastguard Worker    int strides[GBM_MAX_PLANES];
376*d95af8dfSAndroid Build Coastguard Worker    int offsets[GBM_MAX_PLANES];
377*d95af8dfSAndroid Build Coastguard Worker    uint64_t modifier;
378*d95af8dfSAndroid Build Coastguard Worker };
379*d95af8dfSAndroid Build Coastguard Worker 
380*d95af8dfSAndroid Build Coastguard Worker struct gbm_bo *
381*d95af8dfSAndroid Build Coastguard Worker gbm_bo_import(struct gbm_device *gbm, uint32_t type,
382*d95af8dfSAndroid Build Coastguard Worker               void *buffer, uint32_t usage);
383*d95af8dfSAndroid Build Coastguard Worker 
384*d95af8dfSAndroid Build Coastguard Worker /**
385*d95af8dfSAndroid Build Coastguard Worker  * Flags to indicate the type of mapping for the buffer - these are
386*d95af8dfSAndroid Build Coastguard Worker  * passed into gbm_bo_map(). The caller must set the union of all the
387*d95af8dfSAndroid Build Coastguard Worker  * flags that are appropriate.
388*d95af8dfSAndroid Build Coastguard Worker  *
389*d95af8dfSAndroid Build Coastguard Worker  * These flags are independent of the GBM_BO_USE_* creation flags. However,
390*d95af8dfSAndroid Build Coastguard Worker  * mapping the buffer may require copying to/from a staging buffer.
391*d95af8dfSAndroid Build Coastguard Worker  *
392*d95af8dfSAndroid Build Coastguard Worker  * See also: pipe_transfer_usage
393*d95af8dfSAndroid Build Coastguard Worker  */
394*d95af8dfSAndroid Build Coastguard Worker enum gbm_bo_transfer_flags {
395*d95af8dfSAndroid Build Coastguard Worker    /**
396*d95af8dfSAndroid Build Coastguard Worker     * Buffer contents read back (or accessed directly) at transfer
397*d95af8dfSAndroid Build Coastguard Worker     * create time.
398*d95af8dfSAndroid Build Coastguard Worker     */
399*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_TRANSFER_READ       = (1 << 0),
400*d95af8dfSAndroid Build Coastguard Worker    /**
401*d95af8dfSAndroid Build Coastguard Worker     * Buffer contents will be written back at unmap time
402*d95af8dfSAndroid Build Coastguard Worker     * (or modified as a result of being accessed directly).
403*d95af8dfSAndroid Build Coastguard Worker     */
404*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_TRANSFER_WRITE      = (1 << 1),
405*d95af8dfSAndroid Build Coastguard Worker    /**
406*d95af8dfSAndroid Build Coastguard Worker     * Read/modify/write
407*d95af8dfSAndroid Build Coastguard Worker     */
408*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_TRANSFER_READ_WRITE = (GBM_BO_TRANSFER_READ | GBM_BO_TRANSFER_WRITE),
409*d95af8dfSAndroid Build Coastguard Worker };
410*d95af8dfSAndroid Build Coastguard Worker 
411*d95af8dfSAndroid Build Coastguard Worker void *
412*d95af8dfSAndroid Build Coastguard Worker gbm_bo_map(struct gbm_bo *bo,
413*d95af8dfSAndroid Build Coastguard Worker            uint32_t x, uint32_t y, uint32_t width, uint32_t height,
414*d95af8dfSAndroid Build Coastguard Worker            uint32_t flags, uint32_t *stride, void **map_data);
415*d95af8dfSAndroid Build Coastguard Worker 
416*d95af8dfSAndroid Build Coastguard Worker /* Neither gbm_bo_map_cache_mode nor gbm_bo_get_map_info are defined in mesa's gbm.h, or older
417*d95af8dfSAndroid Build Coastguard Worker  * versions of minigbm. For backwards-compatibility, users should first test for availability and
418*d95af8dfSAndroid Build Coastguard Worker  * provide a fallback implementation with:
419*d95af8dfSAndroid Build Coastguard Worker  *
420*d95af8dfSAndroid Build Coastguard Worker  *   #if defined(MINIGBM) && defined(MINIGBM_HAS_GBM_BO_GET_MAP_INFO)
421*d95af8dfSAndroid Build Coastguard Worker  *   // use gbm_bo_get_map_info()
422*d95af8dfSAndroid Build Coastguard Worker  *   #else
423*d95af8dfSAndroid Build Coastguard Worker  *   // fallback
424*d95af8dfSAndroid Build Coastguard Worker  *   #endif
425*d95af8dfSAndroid Build Coastguard Worker  */
426*d95af8dfSAndroid Build Coastguard Worker #define MINIGBM_HAS_GBM_BO_GET_MAP_INFO
427*d95af8dfSAndroid Build Coastguard Worker 
428*d95af8dfSAndroid Build Coastguard Worker /**
429*d95af8dfSAndroid Build Coastguard Worker  * Enum to indicate the cache attributes of CPU mapping returned by
430*d95af8dfSAndroid Build Coastguard Worker  * gbm_bo_map()
431*d95af8dfSAndroid Build Coastguard Worker  *
432*d95af8dfSAndroid Build Coastguard Worker  * Note that definition aligns with VIRTIO_GPU_MAP_CACHE_*, RUTABAGA_MAP_CACHE_*,
433*d95af8dfSAndroid Build Coastguard Worker  * and VIRGL_RENDERER_MAP_CACHE_* (but skipping the _NONE and _UNCACHED values as
434*d95af8dfSAndroid Build Coastguard Worker  * those don't actually make sense to use).
435*d95af8dfSAndroid Build Coastguard Worker  */
436*d95af8dfSAndroid Build Coastguard Worker enum gbm_bo_map_cache_mode {
437*d95af8dfSAndroid Build Coastguard Worker    /*GBM_BO_MAP_CACHE_NONE = 0,*/
438*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_MAP_CACHE_CACHED = 1,
439*d95af8dfSAndroid Build Coastguard Worker    /*GBM_BO_MAP_CACHE_UNCACHED = 2,*/
440*d95af8dfSAndroid Build Coastguard Worker    GBM_BO_MAP_CACHE_WC = 3,
441*d95af8dfSAndroid Build Coastguard Worker };
442*d95af8dfSAndroid Build Coastguard Worker 
443*d95af8dfSAndroid Build Coastguard Worker enum gbm_bo_map_cache_mode
444*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_map_info(struct gbm_bo *bo);
445*d95af8dfSAndroid Build Coastguard Worker 
446*d95af8dfSAndroid Build Coastguard Worker void
447*d95af8dfSAndroid Build Coastguard Worker gbm_bo_unmap(struct gbm_bo *bo, void *map_data);
448*d95af8dfSAndroid Build Coastguard Worker 
449*d95af8dfSAndroid Build Coastguard Worker uint32_t
450*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_width(struct gbm_bo *bo);
451*d95af8dfSAndroid Build Coastguard Worker 
452*d95af8dfSAndroid Build Coastguard Worker uint32_t
453*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_height(struct gbm_bo *bo);
454*d95af8dfSAndroid Build Coastguard Worker 
455*d95af8dfSAndroid Build Coastguard Worker uint32_t
456*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_stride(struct gbm_bo *bo);
457*d95af8dfSAndroid Build Coastguard Worker 
458*d95af8dfSAndroid Build Coastguard Worker uint32_t
459*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_stride_for_plane(struct gbm_bo *bo, int plane);
460*d95af8dfSAndroid Build Coastguard Worker 
461*d95af8dfSAndroid Build Coastguard Worker uint32_t
462*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_format(struct gbm_bo *bo);
463*d95af8dfSAndroid Build Coastguard Worker 
464*d95af8dfSAndroid Build Coastguard Worker uint32_t
465*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_bpp(struct gbm_bo *bo);
466*d95af8dfSAndroid Build Coastguard Worker 
467*d95af8dfSAndroid Build Coastguard Worker uint32_t
468*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_offset(struct gbm_bo *bo, int plane);
469*d95af8dfSAndroid Build Coastguard Worker 
470*d95af8dfSAndroid Build Coastguard Worker struct gbm_device *
471*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_device(struct gbm_bo *bo);
472*d95af8dfSAndroid Build Coastguard Worker 
473*d95af8dfSAndroid Build Coastguard Worker union gbm_bo_handle
474*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_handle(struct gbm_bo *bo);
475*d95af8dfSAndroid Build Coastguard Worker 
476*d95af8dfSAndroid Build Coastguard Worker int
477*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_fd(struct gbm_bo *bo);
478*d95af8dfSAndroid Build Coastguard Worker 
479*d95af8dfSAndroid Build Coastguard Worker uint64_t
480*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_modifier(struct gbm_bo *bo);
481*d95af8dfSAndroid Build Coastguard Worker 
482*d95af8dfSAndroid Build Coastguard Worker int
483*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_plane_count(struct gbm_bo *bo);
484*d95af8dfSAndroid Build Coastguard Worker 
485*d95af8dfSAndroid Build Coastguard Worker union gbm_bo_handle
486*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_handle_for_plane(struct gbm_bo *bo, int plane);
487*d95af8dfSAndroid Build Coastguard Worker 
488*d95af8dfSAndroid Build Coastguard Worker int
489*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_fd_for_plane(struct gbm_bo *bo, int plane);
490*d95af8dfSAndroid Build Coastguard Worker 
491*d95af8dfSAndroid Build Coastguard Worker int
492*d95af8dfSAndroid Build Coastguard Worker gbm_bo_write(struct gbm_bo *bo, const void *buf, size_t count);
493*d95af8dfSAndroid Build Coastguard Worker 
494*d95af8dfSAndroid Build Coastguard Worker void
495*d95af8dfSAndroid Build Coastguard Worker gbm_bo_set_user_data(struct gbm_bo *bo, void *data,
496*d95af8dfSAndroid Build Coastguard Worker 		     void (*destroy_user_data)(struct gbm_bo *, void *));
497*d95af8dfSAndroid Build Coastguard Worker 
498*d95af8dfSAndroid Build Coastguard Worker void *
499*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_user_data(struct gbm_bo *bo);
500*d95af8dfSAndroid Build Coastguard Worker 
501*d95af8dfSAndroid Build Coastguard Worker void
502*d95af8dfSAndroid Build Coastguard Worker gbm_bo_destroy(struct gbm_bo *bo);
503*d95af8dfSAndroid Build Coastguard Worker 
504*d95af8dfSAndroid Build Coastguard Worker struct gbm_surface *
505*d95af8dfSAndroid Build Coastguard Worker gbm_surface_create(struct gbm_device *gbm,
506*d95af8dfSAndroid Build Coastguard Worker                    uint32_t width, uint32_t height,
507*d95af8dfSAndroid Build Coastguard Worker 		   uint32_t format, uint32_t flags);
508*d95af8dfSAndroid Build Coastguard Worker 
509*d95af8dfSAndroid Build Coastguard Worker struct gbm_surface *
510*d95af8dfSAndroid Build Coastguard Worker gbm_surface_create_with_modifiers(struct gbm_device *gbm,
511*d95af8dfSAndroid Build Coastguard Worker                                   uint32_t width, uint32_t height,
512*d95af8dfSAndroid Build Coastguard Worker                                   uint32_t format,
513*d95af8dfSAndroid Build Coastguard Worker                                   const uint64_t *modifiers,
514*d95af8dfSAndroid Build Coastguard Worker                                   const unsigned int count);
515*d95af8dfSAndroid Build Coastguard Worker 
516*d95af8dfSAndroid Build Coastguard Worker struct gbm_surface *
517*d95af8dfSAndroid Build Coastguard Worker gbm_surface_create_with_modifiers2(struct gbm_device *gbm,
518*d95af8dfSAndroid Build Coastguard Worker                                    uint32_t width,
519*d95af8dfSAndroid Build Coastguard Worker                                    uint32_t height,
520*d95af8dfSAndroid Build Coastguard Worker                                    uint32_t format,
521*d95af8dfSAndroid Build Coastguard Worker                                    const uint64_t *modifiers,
522*d95af8dfSAndroid Build Coastguard Worker                                    const unsigned int count,
523*d95af8dfSAndroid Build Coastguard Worker                                    uint32_t flags);
524*d95af8dfSAndroid Build Coastguard Worker 
525*d95af8dfSAndroid Build Coastguard Worker struct gbm_bo *
526*d95af8dfSAndroid Build Coastguard Worker gbm_surface_lock_front_buffer(struct gbm_surface *surface);
527*d95af8dfSAndroid Build Coastguard Worker 
528*d95af8dfSAndroid Build Coastguard Worker void
529*d95af8dfSAndroid Build Coastguard Worker gbm_surface_release_buffer(struct gbm_surface *surface, struct gbm_bo *bo);
530*d95af8dfSAndroid Build Coastguard Worker 
531*d95af8dfSAndroid Build Coastguard Worker int
532*d95af8dfSAndroid Build Coastguard Worker gbm_surface_has_free_buffers(struct gbm_surface *surface);
533*d95af8dfSAndroid Build Coastguard Worker 
534*d95af8dfSAndroid Build Coastguard Worker void
535*d95af8dfSAndroid Build Coastguard Worker gbm_surface_destroy(struct gbm_surface *surface);
536*d95af8dfSAndroid Build Coastguard Worker 
537*d95af8dfSAndroid Build Coastguard Worker char *
538*d95af8dfSAndroid Build Coastguard Worker gbm_format_get_name(uint32_t gbm_format, struct gbm_format_name_desc *desc);
539*d95af8dfSAndroid Build Coastguard Worker 
540*d95af8dfSAndroid Build Coastguard Worker 
541*d95af8dfSAndroid Build Coastguard Worker #ifndef MINIGBM
542*d95af8dfSAndroid Build Coastguard Worker #define MINIGBM
543*d95af8dfSAndroid Build Coastguard Worker #endif
544*d95af8dfSAndroid Build Coastguard Worker /*
545*d95af8dfSAndroid Build Coastguard Worker  * The following functions are not deprecated, but not in the Mesa the gbm
546*d95af8dfSAndroid Build Coastguard Worker  * header. The main difference is minigbm allows for the possibility of
547*d95af8dfSAndroid Build Coastguard Worker  * disjoint YUV images, while Mesa GBM does not.
548*d95af8dfSAndroid Build Coastguard Worker  */
549*d95af8dfSAndroid Build Coastguard Worker uint32_t
550*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_plane_size(struct gbm_bo *bo, size_t plane);
551*d95af8dfSAndroid Build Coastguard Worker 
552*d95af8dfSAndroid Build Coastguard Worker int
553*d95af8dfSAndroid Build Coastguard Worker gbm_bo_get_plane_fd(struct gbm_bo *bo, size_t plane);
554*d95af8dfSAndroid Build Coastguard Worker 
555*d95af8dfSAndroid Build Coastguard Worker void *
556*d95af8dfSAndroid Build Coastguard Worker gbm_bo_map2(struct gbm_bo *bo,
557*d95af8dfSAndroid Build Coastguard Worker 	   uint32_t x, uint32_t y, uint32_t width, uint32_t height,
558*d95af8dfSAndroid Build Coastguard Worker 	   uint32_t flags, uint32_t *stride, void **map_data, int plane);
559*d95af8dfSAndroid Build Coastguard Worker 
560*d95af8dfSAndroid Build Coastguard Worker #ifdef __cplusplus
561*d95af8dfSAndroid Build Coastguard Worker }
562*d95af8dfSAndroid Build Coastguard Worker #endif
563*d95af8dfSAndroid Build Coastguard Worker 
564*d95af8dfSAndroid Build Coastguard Worker #endif
565