Revert "minigbm: remove vgem backend"
This reverts commit d014ed5b4c12e7c806260e2ae304accfcd6c73aa.
Reason for revert: broke video tests on rockchip devices b/141093122
Bug: 141278896
Bug: 141093122
Original change's description:
> minigbm: remove vgem backend
>
> It's not used anymore, or atleast shouldn't be.
>
> BUG=none
> TEST=CQ will test
>
> Change-Id: Ib9232a7704bd39e59a8e2a5bc2ece62c5dd8e9c1
> Reviewed-on: https://chromium-review.googlesource.com/1643676
> Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
> Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
> Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
> Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Bug: none
Change-Id: I6645e9b32ebc6dcd97d126cc40523f516a201a05
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/1812540
Reviewed-by: Kazuhiro Inaba <kinaba@chromium.org>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Kazuhiro Inaba <kinaba@chromium.org>
Auto-Submit: Kazuhiro Inaba <kinaba@chromium.org>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
diff --git a/Android.mk b/Android.mk
index 0e1f284..564f416 100644
--- a/Android.mk
+++ b/Android.mk
@@ -26,6 +26,7 @@
tegra.c \
udl.c \
vc4.c \
+ vgem.c \
virtio_gpu.c
MINIGBM_CPPFLAGS := -std=c++14
diff --git a/drv.c b/drv.c
index 810d4f8..fa157ef 100644
--- a/drv.c
+++ b/drv.c
@@ -61,6 +61,7 @@
#ifdef DRV_VC4
extern const struct backend backend_vc4;
#endif
+extern const struct backend backend_vgem;
extern const struct backend backend_virtio_gpu;
static const struct backend *drv_get_backend(int fd)
@@ -110,7 +111,7 @@
#ifdef DRV_VC4
&backend_vc4,
#endif
- &backend_virtio_gpu,
+ &backend_vgem, &backend_virtio_gpu,
};
for (i = 0; i < ARRAY_SIZE(backend_list); i++)
diff --git a/vgem.c b/vgem.c
new file mode 100644
index 0000000..0d0371c
--- /dev/null
+++ b/vgem.c
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2016 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "drv_priv.h"
+#include "helpers.h"
+#include "util.h"
+
+#define MESA_LLVMPIPE_TILE_ORDER 6
+#define MESA_LLVMPIPE_TILE_SIZE (1 << MESA_LLVMPIPE_TILE_ORDER)
+
+static const uint32_t render_target_formats[] = { DRM_FORMAT_ABGR8888, DRM_FORMAT_ARGB8888,
+ DRM_FORMAT_RGB565, DRM_FORMAT_XBGR8888,
+ DRM_FORMAT_XRGB8888 };
+
+static const uint32_t texture_source_formats[] = { DRM_FORMAT_R8, DRM_FORMAT_YVU420,
+ DRM_FORMAT_YVU420_ANDROID };
+
+static int vgem_init(struct driver *drv)
+{
+ drv_add_combinations(drv, render_target_formats, ARRAY_SIZE(render_target_formats),
+ &LINEAR_METADATA, BO_USE_RENDER_MASK);
+
+ drv_add_combinations(drv, texture_source_formats, ARRAY_SIZE(texture_source_formats),
+ &LINEAR_METADATA, BO_USE_TEXTURE_MASK);
+
+ return drv_modify_linear_combinations(drv);
+}
+
+static int vgem_bo_create(struct bo *bo, uint32_t width, uint32_t height, uint32_t format,
+ uint64_t flags)
+{
+ width = ALIGN(width, MESA_LLVMPIPE_TILE_SIZE);
+ height = ALIGN(height, MESA_LLVMPIPE_TILE_SIZE);
+
+ return drv_dumb_bo_create(bo, width, height, format, flags);
+}
+
+static uint32_t vgem_resolve_format(struct driver *drv, uint32_t format, uint64_t flags)
+{
+ switch (format) {
+ case DRM_FORMAT_FLEX_IMPLEMENTATION_DEFINED:
+ /*HACK: See b/28671744 */
+ return DRM_FORMAT_XBGR8888;
+ case DRM_FORMAT_FLEX_YCbCr_420_888:
+ return DRM_FORMAT_YVU420;
+ default:
+ return format;
+ }
+}
+
+const struct backend backend_vgem = {
+ .name = "vgem",
+ .init = vgem_init,
+ .bo_create = vgem_bo_create,
+ .bo_destroy = drv_dumb_bo_destroy,
+ .bo_import = drv_prime_bo_import,
+ .bo_map = drv_dumb_bo_map,
+ .bo_unmap = drv_bo_munmap,
+ .resolve_format = vgem_resolve_format,
+};