xref: /aosp_15_r20/external/angle/src/common/linux/dma_buf_utils.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2021 The ANGLE Project 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 // dma_buf_utils.h: Utilities to interact with Linux dma bufs.
8 
9 #ifndef COMMON_LINUX_DMA_BUF_UTILS_H_
10 #define COMMON_LINUX_DMA_BUF_UTILS_H_
11 
12 #include <angle_gl.h>
13 
14 #if defined(ANGLE_ENABLE_VULKAN)
15 #    include <vulkan/vulkan_core.h>
16 #    include <vector>
17 #endif
18 
19 // Refer to:
20 // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/drm/drm_fourcc.h
21 // https://source.chromium.org/chromium/chromium/src/+/main:ui/gl/gl_image_native_pixmap.cc;l=24
22 #define FOURCC(a, b, c, d)                                          \
23     ((static_cast<uint32_t>(a)) | (static_cast<uint32_t>(b) << 8) | \
24      (static_cast<uint32_t>(c) << 16) | (static_cast<uint32_t>(d) << 24))
25 
26 #define DRM_FORMAT_R8 FOURCC('R', '8', ' ', ' ')
27 #define DRM_FORMAT_R16 FOURCC('R', '1', '6', ' ')
28 #define DRM_FORMAT_GR88 FOURCC('G', 'R', '8', '8')
29 #define DRM_FORMAT_RGB565 FOURCC('R', 'G', '1', '6')
30 #define DRM_FORMAT_RGB888 FOURCC('R', 'G', '2', '4')
31 #define DRM_FORMAT_BGR888 FOURCC('B', 'G', '2', '4')
32 #define DRM_FORMAT_ARGB8888 FOURCC('A', 'R', '2', '4')
33 #define DRM_FORMAT_ABGR8888 FOURCC('A', 'B', '2', '4')
34 #define DRM_FORMAT_XRGB8888 FOURCC('X', 'R', '2', '4')
35 #define DRM_FORMAT_XBGR8888 FOURCC('X', 'B', '2', '4')
36 #define DRM_FORMAT_ABGR2101010 FOURCC('A', 'B', '3', '0')
37 #define DRM_FORMAT_ARGB2101010 FOURCC('A', 'R', '3', '0')
38 #define DRM_FORMAT_YVU420 FOURCC('Y', 'V', '1', '2')
39 #define DRM_FORMAT_NV12 FOURCC('N', 'V', '1', '2')
40 #define DRM_FORMAT_P010 FOURCC('P', '0', '1', '0')
41 #define DRM_FORMAT_ABGR16161616F FOURCC('A', 'B', '4', 'H')
42 
43 namespace angle
44 {
45 GLenum DrmFourCCFormatToGLInternalFormat(int format, bool *isYUV);
46 
47 #if defined(ANGLE_PLATFORM_LINUX) && defined(ANGLE_USES_GBM)
48 int GLInternalFormatToGbmFourCCFormat(GLenum internalFormat);
49 #endif
50 
51 #if defined(ANGLE_ENABLE_VULKAN)
52 std::vector<int> VkFormatToDrmFourCCFormat(VkFormat format);
53 std::vector<VkFormat> DrmFourCCFormatToVkFormats(int fourccFormat);
54 #endif
55 
56 }  // namespace angle
57 
58 #endif  // COMMON_LINUX_DMA_BUF_UTILS_H_
59