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,
+};