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