minigbm: Added gralloc API to internal API

Added the drv analogues of the 2 flexible formats we need to support.
Added analogues of most of the gralloc use flags, except:

GRALLOC_USAGE_SW_READ_MASK
GRALLOC_USAGE_SW_WRITE_MASK
GRALLOC_USAGE_HW_MASK
GRALLOC_USAGE_FOREIGN_BUFFERS
GRALLOC_USAGE_ALLOC_MASK

These are used as masks and don't make sense as usage hints.  In
addition, put the new flags in the drivers' supported lists and
added a flexible format query function.

BUG=chromium:616275
TEST=minigbm still builds
CQ-DEPEND=CL:371501

Change-Id: Idd2ecd6fde3e6c5caaaf3a8404d0d7db20b4ecf4
Reviewed-on: https://chromium-review.googlesource.com/372359
Commit-Ready: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
diff --git a/i915.c b/i915.c
index dea920b..4293fec 100644
--- a/i915.c
+++ b/i915.c
@@ -130,11 +130,14 @@
 	size_t size;
 	int ret;
 
-	if (flags & (DRV_BO_USE_CURSOR | DRV_BO_USE_LINEAR))
+	if (flags & (DRV_BO_USE_CURSOR | DRV_BO_USE_LINEAR |
+		     DRV_BO_USE_SW_READ_OFTEN | DRV_BO_USE_SW_WRITE_OFTEN))
 		tiling_mode = I915_TILING_NONE;
 	else if (flags & DRV_BO_USE_SCANOUT)
 		tiling_mode = I915_TILING_X;
-	else if (flags & DRV_BO_USE_RENDERING)
+	else if (flags & (DRV_BO_USE_RENDERING | DRV_BO_USE_HW_TEXTURE |
+			  DRV_BO_USE_HW_RENDER | DRV_BO_USE_SW_READ_RARELY |
+			  DRV_BO_USE_HW_2D | DRV_BO_USE_SW_WRITE_RARELY))
 		tiling_mode = I915_TILING_Y;
 
 	i915_align_dimensions(drv, tiling_mode, &width, &height, bpp);
@@ -201,6 +204,23 @@
 		    bo->drv->fd, gem_map.offset);
 }
 
+drv_format_t i915_resolve_format(drv_format_t format)
+{
+	switch (format) {
+		case DRV_FORMAT_FLEX_IMPLEMENTATION_DEFINED:
+			/*HACK: See b/28671744 */
+			return DRV_FORMAT_XBGR8888;
+		case DRV_FORMAT_FLEX_YCbCr_420_888:
+			/*
+			 * TODO(gurchetansingh) Implement YV12 with no tiling
+			 * on Intel. See b/29335168
+			 */
+			return DRV_FORMAT_YVU420;
+		default:
+			return format;
+	}
+}
+
 const struct backend backend_i915 =
 {
 	.name = "i915",
@@ -209,22 +229,60 @@
 	.bo_create = i915_bo_create,
 	.bo_destroy = drv_gem_bo_destroy,
 	.bo_map = i915_bo_map,
+	.resolve_format = i915_resolve_format,
 	.format_list = {
-		{DRV_FORMAT_XRGB8888, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR | DRV_BO_USE_RENDERING},
-		{DRV_FORMAT_XRGB8888, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR | DRV_BO_USE_LINEAR},
-		{DRV_FORMAT_ARGB8888, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR | DRV_BO_USE_RENDERING},
-		{DRV_FORMAT_ARGB8888, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR | DRV_BO_USE_LINEAR},
-		{DRV_FORMAT_XBGR8888, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR | DRV_BO_USE_RENDERING},
-		{DRV_FORMAT_ABGR8888, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR | DRV_BO_USE_RENDERING},
-		{DRV_FORMAT_XRGB1555, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR | DRV_BO_USE_RENDERING},
-		{DRV_FORMAT_ARGB1555, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR | DRV_BO_USE_RENDERING},
-		{DRV_FORMAT_RGB565,   DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR | DRV_BO_USE_RENDERING},
-		{DRV_FORMAT_UYVY,     DRV_BO_USE_SCANOUT | DRV_BO_USE_RENDERING},
-		{DRV_FORMAT_UYVY,     DRV_BO_USE_SCANOUT | DRV_BO_USE_LINEAR},
-		{DRV_FORMAT_YUYV,     DRV_BO_USE_SCANOUT | DRV_BO_USE_RENDERING},
-		{DRV_FORMAT_YUYV,     DRV_BO_USE_SCANOUT | DRV_BO_USE_LINEAR},
-		{DRV_FORMAT_R8,       DRV_BO_USE_RENDERING | DRV_BO_USE_LINEAR},
-		{DRV_FORMAT_GR88,     DRV_BO_USE_RENDERING | DRV_BO_USE_LINEAR},
+		{DRV_FORMAT_XRGB8888, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+				      DRV_BO_USE_RENDERING | DRV_BO_USE_HW_TEXTURE |
+				      DRV_BO_USE_HW_RENDER | DRV_BO_USE_HW_2D |
+				      DRV_BO_USE_SW_READ_RARELY | DRV_BO_USE_SW_WRITE_RARELY},
+		{DRV_FORMAT_XRGB8888, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+		                      DRV_BO_USE_LINEAR | DRV_BO_USE_SW_READ_OFTEN |
+				      DRV_BO_USE_SW_WRITE_OFTEN},
+		{DRV_FORMAT_ARGB8888, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+				      DRV_BO_USE_RENDERING | DRV_BO_USE_HW_TEXTURE |
+				      DRV_BO_USE_HW_RENDER | DRV_BO_USE_HW_2D |
+				      DRV_BO_USE_SW_READ_RARELY | DRV_BO_USE_SW_WRITE_RARELY},
+		{DRV_FORMAT_ARGB8888, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+		                      DRV_BO_USE_LINEAR | DRV_BO_USE_SW_READ_OFTEN |
+				      DRV_BO_USE_SW_WRITE_OFTEN},
+		{DRV_FORMAT_XBGR8888, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+				      DRV_BO_USE_RENDERING | DRV_BO_USE_HW_TEXTURE |
+				      DRV_BO_USE_HW_RENDER | DRV_BO_USE_HW_2D |
+				      DRV_BO_USE_SW_READ_RARELY | DRV_BO_USE_SW_WRITE_RARELY},
+		{DRV_FORMAT_ABGR8888, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+				      DRV_BO_USE_RENDERING | DRV_BO_USE_HW_TEXTURE |
+				      DRV_BO_USE_HW_RENDER | DRV_BO_USE_HW_2D |
+				      DRV_BO_USE_SW_READ_RARELY | DRV_BO_USE_SW_WRITE_RARELY},
+		{DRV_FORMAT_XRGB1555, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+				      DRV_BO_USE_RENDERING | DRV_BO_USE_HW_TEXTURE |
+				      DRV_BO_USE_HW_RENDER | DRV_BO_USE_HW_2D |
+				      DRV_BO_USE_SW_READ_RARELY | DRV_BO_USE_SW_WRITE_RARELY},
+		{DRV_FORMAT_ARGB1555, DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+				      DRV_BO_USE_RENDERING | DRV_BO_USE_HW_TEXTURE |
+				      DRV_BO_USE_HW_RENDER | DRV_BO_USE_HW_2D |
+				      DRV_BO_USE_SW_READ_RARELY | DRV_BO_USE_SW_WRITE_RARELY},
+		{DRV_FORMAT_RGB565,   DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+				      DRV_BO_USE_RENDERING | DRV_BO_USE_HW_TEXTURE |
+				      DRV_BO_USE_HW_RENDER | DRV_BO_USE_HW_2D |
+				      DRV_BO_USE_SW_READ_RARELY | DRV_BO_USE_SW_WRITE_RARELY},
+		{DRV_FORMAT_UYVY,     DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+				      DRV_BO_USE_RENDERING | DRV_BO_USE_HW_TEXTURE |
+				      DRV_BO_USE_HW_RENDER | DRV_BO_USE_HW_2D |
+				      DRV_BO_USE_SW_READ_RARELY | DRV_BO_USE_SW_WRITE_RARELY},
+		{DRV_FORMAT_UYVY,     DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+		                      DRV_BO_USE_LINEAR | DRV_BO_USE_SW_READ_OFTEN |
+				      DRV_BO_USE_SW_WRITE_OFTEN},
+		{DRV_FORMAT_YUYV,     DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+				      DRV_BO_USE_RENDERING | DRV_BO_USE_HW_TEXTURE |
+				      DRV_BO_USE_HW_RENDER | DRV_BO_USE_HW_2D |
+				      DRV_BO_USE_SW_READ_RARELY | DRV_BO_USE_SW_WRITE_RARELY},
+		{DRV_FORMAT_YUYV,     DRV_BO_USE_SCANOUT | DRV_BO_USE_CURSOR |
+		                      DRV_BO_USE_LINEAR | DRV_BO_USE_SW_READ_OFTEN |
+				      DRV_BO_USE_SW_WRITE_OFTEN},
+		{DRV_FORMAT_R8,	      DRV_BO_USE_SCANOUT | DRV_BO_USE_LINEAR |
+				      DRV_BO_USE_SW_READ_OFTEN | DRV_BO_USE_SW_WRITE_OFTEN},
+		{DRV_FORMAT_GR88,     DRV_BO_USE_SCANOUT | DRV_BO_USE_LINEAR |
+				      DRV_BO_USE_SW_READ_OFTEN | DRV_BO_USE_SW_WRITE_OFTEN},
 	}
 };