OSDN Git Service

minigbm: Add mmap() in backends
[android-x86/external-minigbm.git] / drv.h
1 /*
2  * Copyright (c) 2016 The Chromium OS Authors. All rights reserved.
3  * Use of this source code is governed by a BSD-style license that can be
4  * found in the LICENSE file.
5  */
6
7 #ifndef DRV_H_
8 #define DRV_H_
9
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13
14 #include <stdint.h>
15
16 #define DRV_MAX_PLANES 4
17
18 /* Vendor ids and mod_code fourcc function must match gbm.h */
19 #define DRV_FORMAT_MOD_NONE           0
20 #define DRV_FORMAT_MOD_VENDOR_INTEL   0x01
21 #define DRV_FORMAT_MOD_VENDOR_AMD     0x02
22 #define DRV_FORMAT_MOD_VENDOR_NV      0x03
23 #define DRV_FORMAT_MOD_VENDOR_SAMSUNG 0x04
24 #define DRV_FORMAT_MOD_VENDOR_QCOM    0x05
25
26 #define drv_fourcc_mod_code(vendor, val) \
27         ((((__u64)DRV_FORMAT_MOD_VENDOR_## vendor) << 56) | (val & 0x00ffffffffffffffULL))
28
29 /* Use flags */
30 #define DRV_BO_USE_NONE                          0
31 #define DRV_BO_USE_SCANOUT              (1ull << 0)
32 #define DRV_BO_USE_CURSOR               (1ull << 1)
33 #define DRV_BO_USE_CURSOR_64X64         DRV_BO_USE_CURSOR
34 #define DRV_BO_USE_RENDERING            (1ull << 2)
35 #define DRV_BO_USE_LINEAR               (1ull << 3)
36
37 typedef enum {
38         DRV_FORMAT_NONE,
39         DRV_FORMAT_C8,
40         DRV_FORMAT_R8,
41         DRV_FORMAT_RG88,
42         DRV_FORMAT_GR88,
43         DRV_FORMAT_RGB332,
44         DRV_FORMAT_BGR233,
45         DRV_FORMAT_XRGB4444,
46         DRV_FORMAT_XBGR4444,
47         DRV_FORMAT_RGBX4444,
48         DRV_FORMAT_BGRX4444,
49         DRV_FORMAT_ARGB4444,
50         DRV_FORMAT_ABGR4444,
51         DRV_FORMAT_RGBA4444,
52         DRV_FORMAT_BGRA4444,
53         DRV_FORMAT_XRGB1555,
54         DRV_FORMAT_XBGR1555,
55         DRV_FORMAT_RGBX5551,
56         DRV_FORMAT_BGRX5551,
57         DRV_FORMAT_ARGB1555,
58         DRV_FORMAT_ABGR1555,
59         DRV_FORMAT_RGBA5551,
60         DRV_FORMAT_BGRA5551,
61         DRV_FORMAT_RGB565,
62         DRV_FORMAT_BGR565,
63         DRV_FORMAT_RGB888,
64         DRV_FORMAT_BGR888,
65         DRV_FORMAT_XRGB8888,
66         DRV_FORMAT_XBGR8888,
67         DRV_FORMAT_RGBX8888,
68         DRV_FORMAT_BGRX8888,
69         DRV_FORMAT_ARGB8888,
70         DRV_FORMAT_ABGR8888,
71         DRV_FORMAT_RGBA8888,
72         DRV_FORMAT_BGRA8888,
73         DRV_FORMAT_XRGB2101010,
74         DRV_FORMAT_XBGR2101010,
75         DRV_FORMAT_RGBX1010102,
76         DRV_FORMAT_BGRX1010102,
77         DRV_FORMAT_ARGB2101010,
78         DRV_FORMAT_ABGR2101010,
79         DRV_FORMAT_RGBA1010102,
80         DRV_FORMAT_BGRA1010102,
81         DRV_FORMAT_YUYV,
82         DRV_FORMAT_YVYU,
83         DRV_FORMAT_UYVY,
84         DRV_FORMAT_VYUY,
85         DRV_FORMAT_AYUV,
86         DRV_FORMAT_NV12,
87         DRV_FORMAT_NV21,
88         DRV_FORMAT_NV16,
89         DRV_FORMAT_NV61,
90         DRV_FORMAT_YUV410,
91         DRV_FORMAT_YVU410,
92         DRV_FORMAT_YUV411,
93         DRV_FORMAT_YVU411,
94         DRV_FORMAT_YUV420,
95         DRV_FORMAT_YVU420,
96         DRV_FORMAT_YUV422,
97         DRV_FORMAT_YVU422,
98         DRV_FORMAT_YUV444,
99         DRV_FORMAT_YVU444,
100 } drv_format_t;
101
102 struct driver;
103 struct bo;
104
105 union bo_handle {
106    void *ptr;
107    int32_t s32;
108    uint32_t u32;
109    int64_t s64;
110    uint64_t u64;
111 };
112
113 struct drv_import_fd_data {
114    int fd;
115    uint32_t width;
116    uint32_t height;
117    uint32_t stride;
118    drv_format_t format;
119 };
120
121 struct driver *
122 drv_create(int fd);
123
124 void
125 drv_destroy(struct driver *drv);
126
127 int
128 drv_get_fd(struct driver *drv);
129
130 const char *
131 drv_get_name(struct driver *drv);
132
133 int
134 drv_is_format_supported(struct driver *drv, drv_format_t format,
135                         uint64_t usage);
136
137 struct bo *
138 drv_bo_new(struct driver *drv, uint32_t width, uint32_t height,
139            drv_format_t format);
140
141 struct bo *
142 drv_bo_create(struct driver *drv, uint32_t width, uint32_t height,
143               drv_format_t format, uint64_t flags);
144
145 void
146 drv_bo_destroy(struct bo *bo);
147
148 void *
149 drv_bo_map(struct bo *bo);
150
151 int
152 drv_bo_unmap(struct bo *bo);
153
154 struct bo *
155 drv_bo_import(struct driver *drv, struct drv_import_fd_data *data);
156
157 uint32_t
158 drv_bo_get_width(struct bo *bo);
159
160 uint32_t
161 drv_bo_get_height(struct bo *bo);
162
163 uint32_t
164 drv_bo_get_stride_or_tiling(struct bo *bo);
165
166 size_t
167 drv_bo_get_num_planes(struct bo *bo);
168
169 union bo_handle
170 drv_bo_get_plane_handle(struct bo *bo, size_t plane);
171
172 int
173 drv_bo_get_plane_fd(struct bo *bo, size_t plane);
174
175 uint32_t
176 drv_bo_get_plane_offset(struct bo *bo, size_t plane);
177
178 uint32_t
179 drv_bo_get_plane_size(struct bo *bo, size_t plane);
180
181 uint32_t
182 drv_bo_get_plane_stride(struct bo *bo, size_t plane);
183
184 uint64_t
185 drv_bo_get_plane_format_modifier(struct bo *bo, size_t plane);
186
187 #ifdef __cplusplus
188 }
189 #endif
190
191 #endif
192