2 * Copyright 2020 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.
18 static const uint32_t scanout_render_formats[] = { DRM_FORMAT_ARGB8888, DRM_FORMAT_XRGB8888,
19 DRM_FORMAT_ABGR8888, DRM_FORMAT_XBGR8888,
22 static const uint32_t texture_only_formats[] = { DRM_FORMAT_NV12, DRM_FORMAT_NV21,
23 DRM_FORMAT_YVU420, DRM_FORMAT_YVU420_ANDROID };
25 static int dri_generic_init(struct driver *drv)
27 struct dri_driver *dri;
29 dri = calloc(1, sizeof(struct dri_driver));
41 drv_add_combinations(drv, scanout_render_formats, ARRAY_SIZE(scanout_render_formats),
42 &LINEAR_METADATA, BO_USE_RENDER_MASK | BO_USE_SCANOUT);
44 drv_add_combinations(drv, texture_only_formats, ARRAY_SIZE(texture_only_formats),
45 &LINEAR_METADATA, BO_USE_TEXTURE_MASK);
47 /* Android CTS tests require this. */
48 drv_add_combination(drv, DRM_FORMAT_BGR888, &LINEAR_METADATA, BO_USE_SW_MASK);
50 drv_modify_combination(drv, DRM_FORMAT_NV12, &LINEAR_METADATA,
51 BO_USE_HW_VIDEO_ENCODER | BO_USE_HW_VIDEO_DECODER |
52 BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE);
53 drv_modify_combination(drv, DRM_FORMAT_NV21, &LINEAR_METADATA, BO_USE_HW_VIDEO_ENCODER);
55 return drv_modify_linear_combinations(drv);
58 static uint32_t dri_generic_resolve_format(struct driver *drv, uint32_t format, uint64_t use_flags)
61 case DRM_FORMAT_FLEX_IMPLEMENTATION_DEFINED:
62 /* Camera subsystem requires NV12. */
63 if (use_flags & (BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE))
64 return DRM_FORMAT_NV12;
65 /*HACK: See b/28671744 */
66 return DRM_FORMAT_XBGR8888;
67 case DRM_FORMAT_FLEX_YCbCr_420_888:
68 return DRM_FORMAT_NV12;
69 case DRM_FORMAT_BGR565:
70 /* mesa3d doesn't support BGR565 */
71 return DRM_FORMAT_RGB565;
77 const struct backend backend_dri_generic = {
78 .name = "dri_generic",
79 .init = dri_generic_init,
81 .bo_create = dri_bo_create,
82 .bo_create_with_modifiers = dri_bo_create_with_modifiers,
83 .bo_destroy = dri_bo_destroy,
84 .bo_import = dri_bo_import,
86 .bo_unmap = dri_bo_unmap,
87 .bo_get_plane_fd = dri_bo_get_plane_fd,
88 .resolve_format = dri_generic_resolve_format,
89 .num_planes_from_modifier = dri_num_planes_from_modifier,