gbm.h revision af69d88d
13464ebd5Sriastradh/*
23464ebd5Sriastradh * Copyright © 2011 Intel Corporation
33464ebd5Sriastradh *
43464ebd5Sriastradh * Permission is hereby granted, free of charge, to any person obtaining a
53464ebd5Sriastradh * copy of this software and associated documentation files (the "Software"),
63464ebd5Sriastradh * to deal in the Software without restriction, including without limitation
73464ebd5Sriastradh * the rights to use, copy, modify, merge, publish, distribute, sublicense,
83464ebd5Sriastradh * and/or sell copies of the Software, and to permit persons to whom the
93464ebd5Sriastradh * Software is furnished to do so, subject to the following conditions:
103464ebd5Sriastradh *
113464ebd5Sriastradh * The above copyright notice and this permission notice (including the next
123464ebd5Sriastradh * paragraph) shall be included in all copies or substantial portions of the
133464ebd5Sriastradh * Software.
143464ebd5Sriastradh *
153464ebd5Sriastradh * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
163464ebd5Sriastradh * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
173464ebd5Sriastradh * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
183464ebd5Sriastradh * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
193464ebd5Sriastradh * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
203464ebd5Sriastradh * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
213464ebd5Sriastradh * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
223464ebd5Sriastradh * DEALINGS IN THE SOFTWARE.
233464ebd5Sriastradh *
243464ebd5Sriastradh * Authors:
253464ebd5Sriastradh *    Benjamin Franzke <benjaminfranzke@googlemail.com>
263464ebd5Sriastradh */
273464ebd5Sriastradh
283464ebd5Sriastradh#ifndef _GBM_H_
293464ebd5Sriastradh#define _GBM_H_
303464ebd5Sriastradh
313464ebd5Sriastradh#ifdef __cplusplus
323464ebd5Sriastradhextern "C" {
333464ebd5Sriastradh#endif
343464ebd5Sriastradh
353464ebd5Sriastradh
363464ebd5Sriastradh#define __GBM__ 1
373464ebd5Sriastradh
383464ebd5Sriastradh#include <stdint.h>
393464ebd5Sriastradh
40af69d88dSmrg/**
41af69d88dSmrg * \file gbm.h
42af69d88dSmrg * \brief Generic Buffer Manager
43af69d88dSmrg */
44af69d88dSmrg
453464ebd5Sriastradhstruct gbm_device;
463464ebd5Sriastradhstruct gbm_bo;
47af69d88dSmrgstruct gbm_surface;
48af69d88dSmrg
49af69d88dSmrg/**
50af69d88dSmrg * \mainpage The Generic Buffer Manager
51af69d88dSmrg *
52af69d88dSmrg * This module provides an abstraction that the caller can use to request a
53af69d88dSmrg * buffer from the underlying memory management system for the platform.
54af69d88dSmrg *
55af69d88dSmrg * This allows the creation of portable code whilst still allowing access to
56af69d88dSmrg * the underlying memory manager.
57af69d88dSmrg */
583464ebd5Sriastradh
59af69d88dSmrg/**
60af69d88dSmrg * Abstraction representing the handle to a buffer allocated by the
61af69d88dSmrg * manager
62af69d88dSmrg */
633464ebd5Sriastradhunion gbm_bo_handle {
643464ebd5Sriastradh   void *ptr;
653464ebd5Sriastradh   int32_t s32;
663464ebd5Sriastradh   uint32_t u32;
673464ebd5Sriastradh   int64_t s64;
683464ebd5Sriastradh   uint64_t u64;
693464ebd5Sriastradh};
703464ebd5Sriastradh
71af69d88dSmrg/** Format of the allocated buffer */
723464ebd5Sriastradhenum gbm_bo_format {
73af69d88dSmrg   /** RGB with 8 bits per channel in a 32 bit value */
74af69d88dSmrg   GBM_BO_FORMAT_XRGB8888,
75af69d88dSmrg   /** ARGB with 8 bits per channel in a 32 bit value */
76af69d88dSmrg   GBM_BO_FORMAT_ARGB8888
773464ebd5Sriastradh};
783464ebd5Sriastradh
79af69d88dSmrg#define __gbm_fourcc_code(a,b,c,d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | \
80af69d88dSmrg			      ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24))
81af69d88dSmrg
82af69d88dSmrg#define GBM_FORMAT_BIG_ENDIAN (1<<31) /* format is big endian instead of little endian */
83af69d88dSmrg
84af69d88dSmrg/* color index */
85af69d88dSmrg#define GBM_FORMAT_C8		__gbm_fourcc_code('C', '8', ' ', ' ') /* [7:0] C */
86af69d88dSmrg
87af69d88dSmrg/* 8 bpp RGB */
88af69d88dSmrg#define GBM_FORMAT_RGB332	__gbm_fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */
89af69d88dSmrg#define GBM_FORMAT_BGR233	__gbm_fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */
90af69d88dSmrg
91af69d88dSmrg/* 16 bpp RGB */
92af69d88dSmrg#define GBM_FORMAT_XRGB4444	__gbm_fourcc_code('X', 'R', '1', '2') /* [15:0] x:R:G:B 4:4:4:4 little endian */
93af69d88dSmrg#define GBM_FORMAT_XBGR4444	__gbm_fourcc_code('X', 'B', '1', '2') /* [15:0] x:B:G:R 4:4:4:4 little endian */
94af69d88dSmrg#define GBM_FORMAT_RGBX4444	__gbm_fourcc_code('R', 'X', '1', '2') /* [15:0] R:G:B:x 4:4:4:4 little endian */
95af69d88dSmrg#define GBM_FORMAT_BGRX4444	__gbm_fourcc_code('B', 'X', '1', '2') /* [15:0] B:G:R:x 4:4:4:4 little endian */
96af69d88dSmrg
97af69d88dSmrg#define GBM_FORMAT_ARGB4444	__gbm_fourcc_code('A', 'R', '1', '2') /* [15:0] A:R:G:B 4:4:4:4 little endian */
98af69d88dSmrg#define GBM_FORMAT_ABGR4444	__gbm_fourcc_code('A', 'B', '1', '2') /* [15:0] A:B:G:R 4:4:4:4 little endian */
99af69d88dSmrg#define GBM_FORMAT_RGBA4444	__gbm_fourcc_code('R', 'A', '1', '2') /* [15:0] R:G:B:A 4:4:4:4 little endian */
100af69d88dSmrg#define GBM_FORMAT_BGRA4444	__gbm_fourcc_code('B', 'A', '1', '2') /* [15:0] B:G:R:A 4:4:4:4 little endian */
101af69d88dSmrg
102af69d88dSmrg#define GBM_FORMAT_XRGB1555	__gbm_fourcc_code('X', 'R', '1', '5') /* [15:0] x:R:G:B 1:5:5:5 little endian */
103af69d88dSmrg#define GBM_FORMAT_XBGR1555	__gbm_fourcc_code('X', 'B', '1', '5') /* [15:0] x:B:G:R 1:5:5:5 little endian */
104af69d88dSmrg#define GBM_FORMAT_RGBX5551	__gbm_fourcc_code('R', 'X', '1', '5') /* [15:0] R:G:B:x 5:5:5:1 little endian */
105af69d88dSmrg#define GBM_FORMAT_BGRX5551	__gbm_fourcc_code('B', 'X', '1', '5') /* [15:0] B:G:R:x 5:5:5:1 little endian */
106af69d88dSmrg
107af69d88dSmrg#define GBM_FORMAT_ARGB1555	__gbm_fourcc_code('A', 'R', '1', '5') /* [15:0] A:R:G:B 1:5:5:5 little endian */
108af69d88dSmrg#define GBM_FORMAT_ABGR1555	__gbm_fourcc_code('A', 'B', '1', '5') /* [15:0] A:B:G:R 1:5:5:5 little endian */
109af69d88dSmrg#define GBM_FORMAT_RGBA5551	__gbm_fourcc_code('R', 'A', '1', '5') /* [15:0] R:G:B:A 5:5:5:1 little endian */
110af69d88dSmrg#define GBM_FORMAT_BGRA5551	__gbm_fourcc_code('B', 'A', '1', '5') /* [15:0] B:G:R:A 5:5:5:1 little endian */
111af69d88dSmrg
112af69d88dSmrg#define GBM_FORMAT_RGB565	__gbm_fourcc_code('R', 'G', '1', '6') /* [15:0] R:G:B 5:6:5 little endian */
113af69d88dSmrg#define GBM_FORMAT_BGR565	__gbm_fourcc_code('B', 'G', '1', '6') /* [15:0] B:G:R 5:6:5 little endian */
114af69d88dSmrg
115af69d88dSmrg/* 24 bpp RGB */
116af69d88dSmrg#define GBM_FORMAT_RGB888	__gbm_fourcc_code('R', 'G', '2', '4') /* [23:0] R:G:B little endian */
117af69d88dSmrg#define GBM_FORMAT_BGR888	__gbm_fourcc_code('B', 'G', '2', '4') /* [23:0] B:G:R little endian */
118af69d88dSmrg
119af69d88dSmrg/* 32 bpp RGB */
120af69d88dSmrg#define GBM_FORMAT_XRGB8888	__gbm_fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */
121af69d88dSmrg#define GBM_FORMAT_XBGR8888	__gbm_fourcc_code('X', 'B', '2', '4') /* [31:0] x:B:G:R 8:8:8:8 little endian */
122af69d88dSmrg#define GBM_FORMAT_RGBX8888	__gbm_fourcc_code('R', 'X', '2', '4') /* [31:0] R:G:B:x 8:8:8:8 little endian */
123af69d88dSmrg#define GBM_FORMAT_BGRX8888	__gbm_fourcc_code('B', 'X', '2', '4') /* [31:0] B:G:R:x 8:8:8:8 little endian */
124af69d88dSmrg
125af69d88dSmrg#define GBM_FORMAT_ARGB8888	__gbm_fourcc_code('A', 'R', '2', '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */
126af69d88dSmrg#define GBM_FORMAT_ABGR8888	__gbm_fourcc_code('A', 'B', '2', '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */
127af69d88dSmrg#define GBM_FORMAT_RGBA8888	__gbm_fourcc_code('R', 'A', '2', '4') /* [31:0] R:G:B:A 8:8:8:8 little endian */
128af69d88dSmrg#define GBM_FORMAT_BGRA8888	__gbm_fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */
129af69d88dSmrg
130af69d88dSmrg#define GBM_FORMAT_XRGB2101010	__gbm_fourcc_code('X', 'R', '3', '0') /* [31:0] x:R:G:B 2:10:10:10 little endian */
131af69d88dSmrg#define GBM_FORMAT_XBGR2101010	__gbm_fourcc_code('X', 'B', '3', '0') /* [31:0] x:B:G:R 2:10:10:10 little endian */
132af69d88dSmrg#define GBM_FORMAT_RGBX1010102	__gbm_fourcc_code('R', 'X', '3', '0') /* [31:0] R:G:B:x 10:10:10:2 little endian */
133af69d88dSmrg#define GBM_FORMAT_BGRX1010102	__gbm_fourcc_code('B', 'X', '3', '0') /* [31:0] B:G:R:x 10:10:10:2 little endian */
134af69d88dSmrg
135af69d88dSmrg#define GBM_FORMAT_ARGB2101010	__gbm_fourcc_code('A', 'R', '3', '0') /* [31:0] A:R:G:B 2:10:10:10 little endian */
136af69d88dSmrg#define GBM_FORMAT_ABGR2101010	__gbm_fourcc_code('A', 'B', '3', '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */
137af69d88dSmrg#define GBM_FORMAT_RGBA1010102	__gbm_fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */
138af69d88dSmrg#define GBM_FORMAT_BGRA1010102	__gbm_fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */
139af69d88dSmrg
140af69d88dSmrg/* packed YCbCr */
141af69d88dSmrg#define GBM_FORMAT_YUYV		__gbm_fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */
142af69d88dSmrg#define GBM_FORMAT_YVYU		__gbm_fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */
143af69d88dSmrg#define GBM_FORMAT_UYVY		__gbm_fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */
144af69d88dSmrg#define GBM_FORMAT_VYUY		__gbm_fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */
145af69d88dSmrg
146af69d88dSmrg#define GBM_FORMAT_AYUV		__gbm_fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */
147af69d88dSmrg
148af69d88dSmrg/*
149af69d88dSmrg * 2 plane YCbCr
150af69d88dSmrg * index 0 = Y plane, [7:0] Y
151af69d88dSmrg * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian
152af69d88dSmrg * or
153af69d88dSmrg * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian
154af69d88dSmrg */
155af69d88dSmrg#define GBM_FORMAT_NV12		__gbm_fourcc_code('N', 'V', '1', '2') /* 2x2 subsampled Cr:Cb plane */
156af69d88dSmrg#define GBM_FORMAT_NV21		__gbm_fourcc_code('N', 'V', '2', '1') /* 2x2 subsampled Cb:Cr plane */
157af69d88dSmrg#define GBM_FORMAT_NV16		__gbm_fourcc_code('N', 'V', '1', '6') /* 2x1 subsampled Cr:Cb plane */
158af69d88dSmrg#define GBM_FORMAT_NV61		__gbm_fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */
159af69d88dSmrg
160af69d88dSmrg/*
161af69d88dSmrg * 3 plane YCbCr
162af69d88dSmrg * index 0: Y plane, [7:0] Y
163af69d88dSmrg * index 1: Cb plane, [7:0] Cb
164af69d88dSmrg * index 2: Cr plane, [7:0] Cr
165af69d88dSmrg * or
166af69d88dSmrg * index 1: Cr plane, [7:0] Cr
167af69d88dSmrg * index 2: Cb plane, [7:0] Cb
168af69d88dSmrg */
169af69d88dSmrg#define GBM_FORMAT_YUV410	__gbm_fourcc_code('Y', 'U', 'V', '9') /* 4x4 subsampled Cb (1) and Cr (2) planes */
170af69d88dSmrg#define GBM_FORMAT_YVU410	__gbm_fourcc_code('Y', 'V', 'U', '9') /* 4x4 subsampled Cr (1) and Cb (2) planes */
171af69d88dSmrg#define GBM_FORMAT_YUV411	__gbm_fourcc_code('Y', 'U', '1', '1') /* 4x1 subsampled Cb (1) and Cr (2) planes */
172af69d88dSmrg#define GBM_FORMAT_YVU411	__gbm_fourcc_code('Y', 'V', '1', '1') /* 4x1 subsampled Cr (1) and Cb (2) planes */
173af69d88dSmrg#define GBM_FORMAT_YUV420	__gbm_fourcc_code('Y', 'U', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */
174af69d88dSmrg#define GBM_FORMAT_YVU420	__gbm_fourcc_code('Y', 'V', '1', '2') /* 2x2 subsampled Cr (1) and Cb (2) planes */
175af69d88dSmrg#define GBM_FORMAT_YUV422	__gbm_fourcc_code('Y', 'U', '1', '6') /* 2x1 subsampled Cb (1) and Cr (2) planes */
176af69d88dSmrg#define GBM_FORMAT_YVU422	__gbm_fourcc_code('Y', 'V', '1', '6') /* 2x1 subsampled Cr (1) and Cb (2) planes */
177af69d88dSmrg#define GBM_FORMAT_YUV444	__gbm_fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */
178af69d88dSmrg#define GBM_FORMAT_YVU444	__gbm_fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */
179af69d88dSmrg
180af69d88dSmrg
181af69d88dSmrg/**
182af69d88dSmrg * Flags to indicate the intended use for the buffer - these are passed into
183af69d88dSmrg * gbm_bo_create(). The caller must set the union of all the flags that are
184af69d88dSmrg * appropriate
185af69d88dSmrg *
186af69d88dSmrg * \sa Use gbm_device_is_format_supported() to check if the combination of format
187af69d88dSmrg * and use flags are supported
188af69d88dSmrg */
1893464ebd5Sriastradhenum gbm_bo_flags {
190af69d88dSmrg   /**
191af69d88dSmrg    * Buffer is going to be presented to the screen using an API such as KMS
192af69d88dSmrg    */
1933464ebd5Sriastradh   GBM_BO_USE_SCANOUT      = (1 << 0),
194af69d88dSmrg   /**
195af69d88dSmrg    * Buffer is going to be used as cursor
196af69d88dSmrg    */
197af69d88dSmrg   GBM_BO_USE_CURSOR       = (1 << 1),
198af69d88dSmrg   /**
199af69d88dSmrg    * Deprecated
200af69d88dSmrg    */
201af69d88dSmrg   GBM_BO_USE_CURSOR_64X64 = GBM_BO_USE_CURSOR,
202af69d88dSmrg   /**
203af69d88dSmrg    * Buffer is to be used for rendering - for example it is going to be used
204af69d88dSmrg    * as the storage for a color buffer
205af69d88dSmrg    */
2063464ebd5Sriastradh   GBM_BO_USE_RENDERING    = (1 << 2),
207af69d88dSmrg   /**
208af69d88dSmrg    * Buffer can be used for gbm_bo_write.  This is guaranteed to work
209af69d88dSmrg    * with GBM_BO_USE_CURSOR. but may not work for other combinations.
210af69d88dSmrg    */
211af69d88dSmrg   GBM_BO_USE_WRITE    = (1 << 3),
2123464ebd5Sriastradh};
2133464ebd5Sriastradh
2143464ebd5Sriastradhint
2153464ebd5Sriastradhgbm_device_get_fd(struct gbm_device *gbm);
2163464ebd5Sriastradh
2173464ebd5Sriastradhconst char *
2183464ebd5Sriastradhgbm_device_get_backend_name(struct gbm_device *gbm);
2193464ebd5Sriastradh
2203464ebd5Sriastradhint
2213464ebd5Sriastradhgbm_device_is_format_supported(struct gbm_device *gbm,
222af69d88dSmrg                               uint32_t format, uint32_t usage);
2233464ebd5Sriastradh
2243464ebd5Sriastradhvoid
2253464ebd5Sriastradhgbm_device_destroy(struct gbm_device *gbm);
2263464ebd5Sriastradh
2273464ebd5Sriastradhstruct gbm_device *
2283464ebd5Sriastradhgbm_create_device(int fd);
2293464ebd5Sriastradh
2303464ebd5Sriastradhstruct gbm_bo *
2313464ebd5Sriastradhgbm_bo_create(struct gbm_device *gbm,
2323464ebd5Sriastradh              uint32_t width, uint32_t height,
233af69d88dSmrg              uint32_t format, uint32_t flags);
234af69d88dSmrg
235af69d88dSmrg#define GBM_BO_IMPORT_WL_BUFFER         0x5501
236af69d88dSmrg#define GBM_BO_IMPORT_EGL_IMAGE         0x5502
237af69d88dSmrg#define GBM_BO_IMPORT_FD                0x5503
238af69d88dSmrg
239af69d88dSmrgstruct gbm_import_fd_data {
240af69d88dSmrg   int fd;
241af69d88dSmrg   uint32_t width;
242af69d88dSmrg   uint32_t height;
243af69d88dSmrg   uint32_t stride;
244af69d88dSmrg   uint32_t format;
245af69d88dSmrg};
2463464ebd5Sriastradh
2473464ebd5Sriastradhstruct gbm_bo *
248af69d88dSmrggbm_bo_import(struct gbm_device *gbm, uint32_t type,
249af69d88dSmrg              void *buffer, uint32_t usage);
2503464ebd5Sriastradh
2513464ebd5Sriastradhuint32_t
2523464ebd5Sriastradhgbm_bo_get_width(struct gbm_bo *bo);
2533464ebd5Sriastradh
2543464ebd5Sriastradhuint32_t
2553464ebd5Sriastradhgbm_bo_get_height(struct gbm_bo *bo);
2563464ebd5Sriastradh
2573464ebd5Sriastradhuint32_t
258af69d88dSmrggbm_bo_get_stride(struct gbm_bo *bo);
259af69d88dSmrg
260af69d88dSmrguint32_t
261af69d88dSmrggbm_bo_get_format(struct gbm_bo *bo);
262af69d88dSmrg
263af69d88dSmrgstruct gbm_device *
264af69d88dSmrggbm_bo_get_device(struct gbm_bo *bo);
2653464ebd5Sriastradh
2663464ebd5Sriastradhunion gbm_bo_handle
2673464ebd5Sriastradhgbm_bo_get_handle(struct gbm_bo *bo);
2683464ebd5Sriastradh
269af69d88dSmrgint
270af69d88dSmrggbm_bo_get_fd(struct gbm_bo *bo);
271af69d88dSmrg
272af69d88dSmrgint
273af69d88dSmrggbm_bo_write(struct gbm_bo *bo, const void *buf, size_t count);
274af69d88dSmrg
275af69d88dSmrgvoid
276af69d88dSmrggbm_bo_set_user_data(struct gbm_bo *bo, void *data,
277af69d88dSmrg		     void (*destroy_user_data)(struct gbm_bo *, void *));
278af69d88dSmrg
279af69d88dSmrgvoid *
280af69d88dSmrggbm_bo_get_user_data(struct gbm_bo *bo);
281af69d88dSmrg
2823464ebd5Sriastradhvoid
2833464ebd5Sriastradhgbm_bo_destroy(struct gbm_bo *bo);
2843464ebd5Sriastradh
285af69d88dSmrgstruct gbm_surface *
286af69d88dSmrggbm_surface_create(struct gbm_device *gbm,
287af69d88dSmrg                   uint32_t width, uint32_t height,
288af69d88dSmrg		   uint32_t format, uint32_t flags);
289af69d88dSmrg
290af69d88dSmrgint
291af69d88dSmrggbm_surface_needs_lock_front_buffer(struct gbm_surface *surface);
292af69d88dSmrg
293af69d88dSmrgstruct gbm_bo *
294af69d88dSmrggbm_surface_lock_front_buffer(struct gbm_surface *surface);
295af69d88dSmrg
296af69d88dSmrgvoid
297af69d88dSmrggbm_surface_release_buffer(struct gbm_surface *surface, struct gbm_bo *bo);
298af69d88dSmrg
299af69d88dSmrgint
300af69d88dSmrggbm_surface_has_free_buffers(struct gbm_surface *surface);
301af69d88dSmrg
302af69d88dSmrgvoid
303af69d88dSmrggbm_surface_destroy(struct gbm_surface *surface);
304af69d88dSmrg
3053464ebd5Sriastradh#ifdef __cplusplus
3063464ebd5Sriastradh}
3073464ebd5Sriastradh#endif
3083464ebd5Sriastradh
3093464ebd5Sriastradh#endif
310