OSDN Git Service

cc7752a2513278127daed0a26ec80aa28db12aa5
[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 #define DRV_BO_USE_SW_READ_NEVER        (1ull << 4)
37 #define DRV_BO_USE_SW_READ_RARELY       (1ull << 5)
38 #define DRV_BO_USE_SW_READ_OFTEN        (1ull << 6)
39 #define DRV_BO_USE_SW_WRITE_NEVER       (1ull << 7)
40 #define DRV_BO_USE_SW_WRITE_RARELY      (1ull << 8)
41 #define DRV_BO_USE_SW_WRITE_OFTEN       (1ull << 9)
42 #define DRV_BO_USE_HW_TEXTURE           (1ull << 10)
43 #define DRV_BO_USE_HW_RENDER            (1ull << 11)
44 #define DRV_BO_USE_HW_2D                (1ull << 12)
45 #define DRV_BO_USE_HW_COMPOSER          (1ull << 13)
46 #define DRV_BO_USE_HW_FB                (1ull << 14)
47 #define DRV_BO_USE_EXTERNAL_DISP        (1ull << 15)
48 #define DRV_BO_USE_PROTECTED            (1ull << 16)
49 #define DRV_BO_USE_HW_VIDEO_ENCODE      (1ull << 17)
50 #define DRV_BO_USE_HW_CAMERA_WRITE      (1ull << 18)
51 #define DRV_BO_USE_HW_CAMERA_READ       (1ull << 19)
52 #define DRV_BO_USE_HW_CAMERA_ZSL        (1ull << 20)
53 #define DRV_BO_USE_RENDERSCRIPT         (1ull << 21)
54
55 typedef enum {
56         DRV_FORMAT_NONE,
57         DRV_FORMAT_C8,
58         DRV_FORMAT_R8,
59         DRV_FORMAT_RG88,
60         DRV_FORMAT_GR88,
61         DRV_FORMAT_RGB332,
62         DRV_FORMAT_BGR233,
63         DRV_FORMAT_XRGB4444,
64         DRV_FORMAT_XBGR4444,
65         DRV_FORMAT_RGBX4444,
66         DRV_FORMAT_BGRX4444,
67         DRV_FORMAT_ARGB4444,
68         DRV_FORMAT_ABGR4444,
69         DRV_FORMAT_RGBA4444,
70         DRV_FORMAT_BGRA4444,
71         DRV_FORMAT_XRGB1555,
72         DRV_FORMAT_XBGR1555,
73         DRV_FORMAT_RGBX5551,
74         DRV_FORMAT_BGRX5551,
75         DRV_FORMAT_ARGB1555,
76         DRV_FORMAT_ABGR1555,
77         DRV_FORMAT_RGBA5551,
78         DRV_FORMAT_BGRA5551,
79         DRV_FORMAT_RGB565,
80         DRV_FORMAT_BGR565,
81         DRV_FORMAT_RGB888,
82         DRV_FORMAT_BGR888,
83         DRV_FORMAT_XRGB8888,
84         DRV_FORMAT_XBGR8888,
85         DRV_FORMAT_RGBX8888,
86         DRV_FORMAT_BGRX8888,
87         DRV_FORMAT_ARGB8888,
88         DRV_FORMAT_ABGR8888,
89         DRV_FORMAT_RGBA8888,
90         DRV_FORMAT_BGRA8888,
91         DRV_FORMAT_XRGB2101010,
92         DRV_FORMAT_XBGR2101010,
93         DRV_FORMAT_RGBX1010102,
94         DRV_FORMAT_BGRX1010102,
95         DRV_FORMAT_ARGB2101010,
96         DRV_FORMAT_ABGR2101010,
97         DRV_FORMAT_RGBA1010102,
98         DRV_FORMAT_BGRA1010102,
99         DRV_FORMAT_YUYV,
100         DRV_FORMAT_YVYU,
101         DRV_FORMAT_UYVY,
102         DRV_FORMAT_VYUY,
103         DRV_FORMAT_AYUV,
104         DRV_FORMAT_NV12,
105         DRV_FORMAT_NV21,
106         DRV_FORMAT_NV16,
107         DRV_FORMAT_NV61,
108         DRV_FORMAT_YUV410,
109         DRV_FORMAT_YVU410,
110         DRV_FORMAT_YUV411,
111         DRV_FORMAT_YVU411,
112         DRV_FORMAT_YUV420,
113         DRV_FORMAT_YVU420,
114         DRV_FORMAT_YUV422,
115         DRV_FORMAT_YVU422,
116         DRV_FORMAT_YUV444,
117         DRV_FORMAT_YVU444,
118         DRV_FORMAT_FLEX_IMPLEMENTATION_DEFINED,
119         DRV_FORMAT_FLEX_YCbCr_420_888,
120 } drv_format_t;
121
122 struct driver;
123 struct bo;
124
125 union bo_handle {
126         void *ptr;
127         int32_t s32;
128         uint32_t u32;
129         int64_t s64;
130         uint64_t u64;
131 };
132
133 struct drv_import_fd_data {
134         int fds[DRV_MAX_PLANES];
135         uint32_t strides[DRV_MAX_PLANES];
136         uint32_t offsets[DRV_MAX_PLANES];
137         uint32_t sizes[DRV_MAX_PLANES];
138         uint32_t width;
139         uint32_t height;
140         drv_format_t format;
141 };
142
143 struct driver *
144 drv_create(int fd);
145
146 void
147 drv_destroy(struct driver *drv);
148
149 int
150 drv_get_fd(struct driver *drv);
151
152 const char *
153 drv_get_name(struct driver *drv);
154
155 int
156 drv_is_format_supported(struct driver *drv, drv_format_t format,
157                         uint64_t usage);
158
159 struct bo *
160 drv_bo_new(struct driver *drv, uint32_t width, uint32_t height,
161            drv_format_t format);
162
163 struct bo *
164 drv_bo_create(struct driver *drv, uint32_t width, uint32_t height,
165               drv_format_t format, uint64_t flags);
166
167 void
168 drv_bo_destroy(struct bo *bo);
169
170 void *
171 drv_bo_map(struct bo *bo);
172
173 int
174 drv_bo_unmap(struct bo *bo);
175
176 struct bo *
177 drv_bo_import(struct driver *drv, struct drv_import_fd_data *data);
178
179 uint32_t
180 drv_bo_get_width(struct bo *bo);
181
182 uint32_t
183 drv_bo_get_height(struct bo *bo);
184
185 uint32_t
186 drv_bo_get_stride_or_tiling(struct bo *bo);
187
188 size_t
189 drv_bo_get_num_planes(struct bo *bo);
190
191 union bo_handle
192 drv_bo_get_plane_handle(struct bo *bo, size_t plane);
193
194 int
195 drv_bo_get_plane_fd(struct bo *bo, size_t plane);
196
197 uint32_t
198 drv_bo_get_plane_offset(struct bo *bo, size_t plane);
199
200 uint32_t
201 drv_bo_get_plane_size(struct bo *bo, size_t plane);
202
203 uint32_t
204 drv_bo_get_plane_stride(struct bo *bo, size_t plane);
205
206 uint64_t
207 drv_bo_get_plane_format_modifier(struct bo *bo, size_t plane);
208
209 drv_format_t
210 drv_resolve_format(struct driver *drv, drv_format_t format);
211
212 #ifdef __cplusplus
213 }
214 #endif
215
216 #endif
217