summaryrefslogtreecommitdiff
path: root/chromium/third_party/minigbm
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-08-01 12:59:39 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2016-08-04 12:40:43 +0000
commit28b1110370900897ab652cb420c371fab8857ad4 (patch)
tree41b32127d23b0df4f2add2a27e12dc87bddb260e /chromium/third_party/minigbm
parent399c965b6064c440ddcf4015f5f8e9d131c7a0a6 (diff)
downloadqtwebengine-chromium-28b1110370900897ab652cb420c371fab8857ad4.tar.gz
BASELINE: Update Chromium to 53.0.2785.41
Also adds a few extra files for extensions. Change-Id: Iccdd55d98660903331cf8b7b29188da781830af4 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/third_party/minigbm')
-rw-r--r--chromium/third_party/minigbm/BUILD.gn5
-rw-r--r--chromium/third_party/minigbm/minigbm.gyp1
-rw-r--r--chromium/third_party/minigbm/src/cirrus.c12
-rw-r--r--chromium/third_party/minigbm/src/evdi.c8
-rw-r--r--chromium/third_party/minigbm/src/exynos.c38
-rw-r--r--chromium/third_party/minigbm/src/gbm.c32
-rw-r--r--chromium/third_party/minigbm/src/gbm.h47
-rw-r--r--chromium/third_party/minigbm/src/gbm_priv.h3
-rw-r--r--chromium/third_party/minigbm/src/gma500.c4
-rw-r--r--chromium/third_party/minigbm/src/helpers.c16
-rw-r--r--chromium/third_party/minigbm/src/i915.c37
-rw-r--r--chromium/third_party/minigbm/src/marvell.c10
-rw-r--r--chromium/third_party/minigbm/src/mediatek.c15
-rw-r--r--chromium/third_party/minigbm/src/rockchip.c91
-rw-r--r--chromium/third_party/minigbm/src/tegra.c19
-rw-r--r--chromium/third_party/minigbm/src/udl.c8
-rw-r--r--chromium/third_party/minigbm/src/virtio_gpu.c22
17 files changed, 244 insertions, 124 deletions
diff --git a/chromium/third_party/minigbm/BUILD.gn b/chromium/third_party/minigbm/BUILD.gn
index f01cfd5b91d..002cc0c78d6 100644
--- a/chromium/third_party/minigbm/BUILD.gn
+++ b/chromium/third_party/minigbm/BUILD.gn
@@ -37,6 +37,7 @@ if (!use_system_minigbm) {
"src/rockchip.c",
"src/tegra.c",
"src/udl.c",
+ "src/virtio_gpu.c",
]
configs -= [ "//build/config/compiler:chromium_code" ]
@@ -46,6 +47,10 @@ if (!use_system_minigbm) {
]
public_configs = [ ":minigbm_config" ]
+
+ # Clients need this to pick up the shared library correctly.
+ all_dependent_configs =
+ [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
}
}
diff --git a/chromium/third_party/minigbm/minigbm.gyp b/chromium/third_party/minigbm/minigbm.gyp
index 2315addc513..c8c71d33655 100644
--- a/chromium/third_party/minigbm/minigbm.gyp
+++ b/chromium/third_party/minigbm/minigbm.gyp
@@ -28,6 +28,7 @@
'src/rockchip.c',
'src/tegra.c',
'src/udl.c',
+ 'src/virtio_gpu.c',
],
'include_dirs': [
'src',
diff --git a/chromium/third_party/minigbm/src/cirrus.c b/chromium/third_party/minigbm/src/cirrus.c
index 3f2f7ba00b3..cda858aa201 100644
--- a/chromium/third_party/minigbm/src/cirrus.c
+++ b/chromium/third_party/minigbm/src/cirrus.c
@@ -7,16 +7,16 @@
#include "gbm_priv.h"
#include "helpers.h"
-struct gbm_driver gbm_driver_cirrus =
+const struct gbm_driver gbm_driver_cirrus =
{
.name = "cirrus",
.bo_create = gbm_dumb_bo_create,
.bo_destroy = gbm_dumb_bo_destroy,
.format_list = {
- {GBM_FORMAT_RGB888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_RGB888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
}
};
diff --git a/chromium/third_party/minigbm/src/evdi.c b/chromium/third_party/minigbm/src/evdi.c
index 428b97cb9bb..3aeee2cbd91 100644
--- a/chromium/third_party/minigbm/src/evdi.c
+++ b/chromium/third_party/minigbm/src/evdi.c
@@ -13,10 +13,10 @@ const struct gbm_driver gbm_driver_evdi =
.bo_create = gbm_dumb_bo_create,
.bo_destroy = gbm_dumb_bo_destroy,
.format_list = {
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
}
};
diff --git a/chromium/third_party/minigbm/src/exynos.c b/chromium/third_party/minigbm/src/exynos.c
index ba960fd8a0a..e74e56db4cf 100644
--- a/chromium/third_party/minigbm/src/exynos.c
+++ b/chromium/third_party/minigbm/src/exynos.c
@@ -17,8 +17,9 @@
#include "helpers.h"
#include "util.h"
-int gbm_exynos_bo_create(struct gbm_bo *bo, uint32_t width, uint32_t height,
- uint32_t format, uint32_t flags)
+static int gbm_exynos_bo_create(struct gbm_bo *bo,
+ uint32_t width, uint32_t height,
+ uint32_t format, uint32_t flags)
{
size_t plane;
@@ -33,8 +34,7 @@ int gbm_exynos_bo_create(struct gbm_bo *bo, uint32_t width, uint32_t height,
bo->sizes[0] = bo->strides[0] * height + 64;
bo->sizes[1] = bo->strides[1] * chroma_height + 64;
bo->offsets[0] = bo->offsets[1] = 0;
- } else if (format == GBM_FORMAT_XRGB8888 || format == GBM_FORMAT_ARGB8888 ||
- format == GBM_BO_FORMAT_XRGB8888 || format == GBM_BO_FORMAT_ARGB8888 ) {
+ } else if (format == GBM_FORMAT_XRGB8888 || format == GBM_FORMAT_ARGB8888) {
bo->strides[0] = gbm_stride_from_format(format, width);
bo->sizes[0] = height * bo->strides[0];
bo->offsets[0] = 0;
@@ -44,10 +44,10 @@ int gbm_exynos_bo_create(struct gbm_bo *bo, uint32_t width, uint32_t height,
return -EINVAL;
}
+ int ret;
for (plane = 0; plane < bo->num_planes; plane++) {
size_t size = bo->sizes[plane];
struct drm_exynos_gem_create gem_create;
- int ret;
memset(&gem_create, 0, sizeof(gem_create));
gem_create.size = size;
@@ -57,13 +57,29 @@ int gbm_exynos_bo_create(struct gbm_bo *bo, uint32_t width, uint32_t height,
if (ret) {
fprintf(stderr, "minigbm: DRM_IOCTL_EXYNOS_GEM_CREATE failed "
"(size=%zu)\n", size);
- return ret;
+ goto cleanup_planes;
}
bo->handles[plane].u32 = gem_create.handle;
}
return 0;
+
+cleanup_planes:
+ for ( ; plane != 0; plane--) {
+ struct drm_gem_close gem_close;
+ memset(&gem_close, 0, sizeof(gem_close));
+ gem_close.handle = bo->handles[plane - 1].u32;
+ int gem_close_ret = drmIoctl(bo->gbm->fd, DRM_IOCTL_GEM_CLOSE,
+ &gem_close);
+ if (gem_close_ret) {
+ fprintf(stderr,
+ "minigbm: DRM_IOCTL_GEM_CLOSE failed: %d\n",
+ gem_close_ret);
+ }
+ }
+
+ return ret;
}
const struct gbm_driver gbm_driver_exynos =
@@ -72,11 +88,11 @@ const struct gbm_driver gbm_driver_exynos =
.bo_create = gbm_exynos_bo_create,
.bo_destroy = gbm_gem_bo_destroy,
.format_list = {
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_NV12, GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_NV12, GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING},
}
};
diff --git a/chromium/third_party/minigbm/src/gbm.c b/chromium/third_party/minigbm/src/gbm.c
index 2408d0c0728..5c501af5693 100644
--- a/chromium/third_party/minigbm/src/gbm.c
+++ b/chromium/third_party/minigbm/src/gbm.c
@@ -38,6 +38,7 @@ extern struct gbm_driver gbm_driver_rockchip;
extern struct gbm_driver gbm_driver_tegra;
#endif
extern struct gbm_driver gbm_driver_udl;
+extern struct gbm_driver gbm_driver_virtio_gpu;
static struct gbm_driver *gbm_get_driver(int fd)
{
@@ -72,6 +73,7 @@ static struct gbm_driver *gbm_get_driver(int fd)
&gbm_driver_tegra,
#endif
&gbm_driver_udl,
+ &gbm_driver_virtio_gpu,
};
for(i = 0; i < ARRAY_SIZE(driver_list); i++)
@@ -103,11 +105,6 @@ gbm_device_is_format_supported(struct gbm_device *gbm,
{
unsigned i;
- if (format == GBM_BO_FORMAT_XRGB8888)
- format = GBM_FORMAT_XRGB8888;
- if (format == GBM_BO_FORMAT_ARGB8888)
- format = GBM_FORMAT_ARGB8888;
-
if (usage & GBM_BO_USE_CURSOR &&
usage & GBM_BO_USE_RENDERING)
return 0;
@@ -267,11 +264,13 @@ gbm_bo_import(struct gbm_device *gbm, uint32_t type,
return NULL;
bo = gbm_bo_new(gbm, fd_data->width, fd_data->height, fd_data->format);
- bo->strides[0] = fd_data->stride;
-
if (!bo)
return NULL;
+ bo->strides[0] = fd_data->stride;
+ bo->sizes[0] = fd_data->height * fd_data->stride;
+
+ memset(&prime_handle, 0, sizeof(prime_handle));
prime_handle.fd = fd_data->fd;
ret = drmIoctl(bo->gbm->fd, DRM_IOCTL_PRIME_FD_TO_HANDLE, &prime_handle);
@@ -317,6 +316,12 @@ gbm_bo_get_format(struct gbm_bo *bo)
return bo->format;
}
+PUBLIC uint64_t
+gbm_bo_get_format_modifier(struct gbm_bo *bo)
+{
+ return gbm_bo_get_plane_format_modifier(bo, 0);
+}
+
PUBLIC struct gbm_device *
gbm_bo_get_device(struct gbm_bo *bo)
{
@@ -348,6 +353,10 @@ gbm_bo_get_plane_handle(struct gbm_bo *bo, size_t plane)
return bo->handles[plane];
}
+#ifndef DRM_RDWR
+#define DRM_RDWR O_RDWR
+#endif
+
PUBLIC int
gbm_bo_get_plane_fd(struct gbm_bo *bo, size_t plane)
{
@@ -357,7 +366,7 @@ gbm_bo_get_plane_fd(struct gbm_bo *bo, size_t plane)
if (drmPrimeHandleToFD(
gbm_device_get_fd(bo->gbm),
gbm_bo_get_plane_handle(bo, plane).u32,
- DRM_CLOEXEC,
+ DRM_CLOEXEC | DRM_RDWR,
&fd))
return -1;
else
@@ -385,6 +394,13 @@ gbm_bo_get_plane_stride(struct gbm_bo *bo, size_t plane)
return bo->strides[plane];
}
+PUBLIC uint64_t
+gbm_bo_get_plane_format_modifier(struct gbm_bo *bo, size_t plane)
+{
+ assert(plane < bo->num_planes);
+ return bo->format_modifiers[plane];
+}
+
PUBLIC void
gbm_bo_set_user_data(struct gbm_bo *bo, void *data,
void (*destroy_user_data)(struct gbm_bo *, void *))
diff --git a/chromium/third_party/minigbm/src/gbm.h b/chromium/third_party/minigbm/src/gbm.h
index a40d4cda241..8ec9349b4f3 100644
--- a/chromium/third_party/minigbm/src/gbm.h
+++ b/chromium/third_party/minigbm/src/gbm.h
@@ -68,14 +68,6 @@ union gbm_bo_handle {
uint64_t u64;
};
-/** Format of the allocated buffer */
-enum gbm_bo_format {
- /** RGB with 8 bits per channel in a 32 bit value */
- GBM_BO_FORMAT_XRGB8888,
- /** ARGB with 8 bits per channel in a 32 bit value */
- GBM_BO_FORMAT_ARGB8888
-};
-
#define __gbm_fourcc_code(a,b,c,d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | \
((uint32_t)(c) << 16) | ((uint32_t)(d) << 24))
@@ -84,6 +76,13 @@ enum gbm_bo_format {
/* color index */
#define GBM_FORMAT_C8 __gbm_fourcc_code('C', '8', ' ', ' ') /* [7:0] C */
+/* 8 bpp Red */
+#define GBM_FORMAT_R8 __gbm_fourcc_code('R', '8', ' ', ' ') /* [7:0] R */
+
+/* 16 bpp RG */
+#define GBM_FORMAT_RG88 __gbm_fourcc_code('R', 'G', '8', '8') /* [15:0] R:G 8:8 little endian */
+#define GBM_FORMAT_GR88 __gbm_fourcc_code('G', 'R', '8', '8') /* [15:0] G:R 8:8 little endian */
+
/* 8 bpp RGB */
#define GBM_FORMAT_RGB332 __gbm_fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */
#define GBM_FORMAT_BGR233 __gbm_fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */
@@ -177,6 +176,28 @@ enum gbm_bo_format {
#define GBM_FORMAT_YUV444 __gbm_fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */
#define GBM_FORMAT_YVU444 __gbm_fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */
+/*
+ * Format Modifiers:
+ *
+ * Format modifiers describe, typically, a re-ordering or modification
+ * of the data in a plane of an FB. This can be used to express tiled/
+ * swizzled formats, or compression, or a combination of the two.
+ *
+ * The upper 8 bits of the format modifier are a vendor-id as assigned
+ * below. The lower 56 bits are assigned as vendor sees fit.
+ */
+
+/* Vendor Ids: */
+#define GBM_FORMAT_MOD_NONE 0
+#define GBM_FORMAT_MOD_VENDOR_INTEL 0x01
+#define GBM_FORMAT_MOD_VENDOR_AMD 0x02
+#define GBM_FORMAT_MOD_VENDOR_NV 0x03
+#define GBM_FORMAT_MOD_VENDOR_SAMSUNG 0x04
+#define GBM_FORMAT_MOD_VENDOR_QCOM 0x05
+/* add more to the end as needed */
+
+#define gbm_fourcc_mod_code(vendor, val) \
+ ((((__u64)GBM_FORMAT_MOD_VENDOR_## vendor) << 56) | (val & 0x00ffffffffffffffULL))
/**
* Flags to indicate the intended use for the buffer - these are passed into
@@ -205,8 +226,7 @@ enum gbm_bo_flags {
*/
GBM_BO_USE_RENDERING = (1 << 2),
/**
- * Buffer can be used for gbm_bo_write. This is guaranteed to work
- * with GBM_BO_USE_CURSOR. but may not work for other combinations.
+ * Deprecated
*/
GBM_BO_USE_WRITE = (1 << 3),
/**
@@ -271,6 +291,9 @@ gbm_bo_get_stride_or_tiling(struct gbm_bo *bo);
uint32_t
gbm_bo_get_format(struct gbm_bo *bo);
+uint64_t
+gbm_bo_get_format_modifier(struct gbm_bo *bo);
+
struct gbm_device *
gbm_bo_get_device(struct gbm_bo *bo);
@@ -298,8 +321,8 @@ gbm_bo_get_plane_size(struct gbm_bo *bo, size_t plane);
uint32_t
gbm_bo_get_plane_stride(struct gbm_bo *bo, size_t plane);
-int
-gbm_bo_write(struct gbm_bo *bo, const void *buf, size_t count);
+uint64_t
+gbm_bo_get_plane_format_modifier(struct gbm_bo *bo, size_t plane);
void
gbm_bo_set_user_data(struct gbm_bo *bo, void *data,
diff --git a/chromium/third_party/minigbm/src/gbm_priv.h b/chromium/third_party/minigbm/src/gbm_priv.h
index 187970460ce..f8373fc3959 100644
--- a/chromium/third_party/minigbm/src/gbm_priv.h
+++ b/chromium/third_party/minigbm/src/gbm_priv.h
@@ -37,6 +37,7 @@ struct gbm_bo
uint32_t offsets[GBM_MAX_PLANES];
uint32_t sizes[GBM_MAX_PLANES];
uint32_t strides[GBM_MAX_PLANES];
+ uint64_t format_modifiers[GBM_MAX_PLANES];
void *priv;
void *user_data;
void (*destroy_user_data)(struct gbm_bo *, void *);
@@ -53,7 +54,7 @@ struct gbm_driver
uint32_t format;
enum gbm_bo_flags usage;
}
- format_list[16];
+ format_list[18];
};
#endif
diff --git a/chromium/third_party/minigbm/src/gma500.c b/chromium/third_party/minigbm/src/gma500.c
index 95d663c5db1..07e5c5c8710 100644
--- a/chromium/third_party/minigbm/src/gma500.c
+++ b/chromium/third_party/minigbm/src/gma500.c
@@ -7,12 +7,12 @@
#include "gbm_priv.h"
#include "helpers.h"
-struct gbm_driver gbm_driver_gma500 =
+const struct gbm_driver gbm_driver_gma500 =
{
.name = "gma500",
.bo_create = gbm_dumb_bo_create,
.bo_destroy = gbm_dumb_bo_destroy,
.format_list = {
- {GBM_FORMAT_RGBX8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
+ {GBM_FORMAT_RGBX8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
}
};
diff --git a/chromium/third_party/minigbm/src/helpers.c b/chromium/third_party/minigbm/src/helpers.c
index 1ad10ce8ad4..2cb0408642c 100644
--- a/chromium/third_party/minigbm/src/helpers.c
+++ b/chromium/third_party/minigbm/src/helpers.c
@@ -17,14 +17,12 @@
size_t gbm_num_planes_from_format(uint32_t format)
{
- if (format == GBM_BO_FORMAT_XRGB8888)
- format = GBM_FORMAT_XRGB8888;
- if (format == GBM_BO_FORMAT_ARGB8888)
- format = GBM_FORMAT_ARGB8888;
-
switch(format)
{
case GBM_FORMAT_C8:
+ case GBM_FORMAT_R8:
+ case GBM_FORMAT_RG88:
+ case GBM_FORMAT_GR88:
case GBM_FORMAT_RGB332:
case GBM_FORMAT_BGR233:
case GBM_FORMAT_XRGB4444:
@@ -79,14 +77,10 @@ size_t gbm_num_planes_from_format(uint32_t format)
int gbm_bpp_from_format(uint32_t format)
{
- if (format == GBM_BO_FORMAT_XRGB8888)
- format = GBM_FORMAT_XRGB8888;
- if (format == GBM_BO_FORMAT_ARGB8888)
- format = GBM_FORMAT_ARGB8888;
-
switch(format)
{
case GBM_FORMAT_C8:
+ case GBM_FORMAT_R8:
case GBM_FORMAT_RGB332:
case GBM_FORMAT_BGR233:
return 8;
@@ -94,6 +88,8 @@ int gbm_bpp_from_format(uint32_t format)
case GBM_FORMAT_NV12:
return 12;
+ case GBM_FORMAT_RG88:
+ case GBM_FORMAT_GR88:
case GBM_FORMAT_XRGB4444:
case GBM_FORMAT_XBGR4444:
case GBM_FORMAT_RGBX4444:
diff --git a/chromium/third_party/minigbm/src/i915.c b/chromium/third_party/minigbm/src/i915.c
index 6616a54b1d3..88d55e58f5a 100644
--- a/chromium/third_party/minigbm/src/i915.c
+++ b/chromium/third_party/minigbm/src/i915.c
@@ -35,7 +35,7 @@ static int get_gen(int device_id)
return 4;
}
-int gbm_i915_init(struct gbm_device *gbm)
+static int gbm_i915_init(struct gbm_device *gbm)
{
struct gbm_i915_device *i915_gbm;
drm_i915_getparam_t get_param;
@@ -63,7 +63,7 @@ int gbm_i915_init(struct gbm_device *gbm)
return 0;
}
-void gbm_i915_close(struct gbm_device *gbm)
+static void gbm_i915_close(struct gbm_device *gbm)
{
free(gbm->priv);
gbm->priv = NULL;
@@ -119,8 +119,9 @@ static int i915_verify_dimensions(struct gbm_device *gbm, uint32_t stride,
return 1;
}
-int gbm_i915_bo_create(struct gbm_bo *bo, uint32_t width, uint32_t height,
- uint32_t format, uint32_t flags)
+static int gbm_i915_bo_create(struct gbm_bo *bo,
+ uint32_t width, uint32_t height,
+ uint32_t format, uint32_t flags)
{
struct gbm_device *gbm = bo->gbm;
int bpp = gbm_stride_from_format(format, 1);
@@ -191,19 +192,21 @@ const struct gbm_driver gbm_driver_i915 =
.bo_create = gbm_i915_bo_create,
.bo_destroy = gbm_gem_bo_destroy,
.format_list = {
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_XBGR8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_ABGR8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_XRGB1555, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_ARGB1555, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_RGB565, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_UYVY, GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_UYVY, GBM_BO_USE_SCANOUT | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_YUYV, GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_YUYV, GBM_BO_USE_SCANOUT | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_XBGR8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_ABGR8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_XRGB1555, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_ARGB1555, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_RGB565, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_UYVY, GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_UYVY, GBM_BO_USE_SCANOUT | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_YUYV, GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_YUYV, GBM_BO_USE_SCANOUT | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_R8, GBM_BO_USE_RENDERING | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_GR88, GBM_BO_USE_RENDERING | GBM_BO_USE_LINEAR},
}
};
diff --git a/chromium/third_party/minigbm/src/marvell.c b/chromium/third_party/minigbm/src/marvell.c
index 6a5b4427c18..979cf5ad1b5 100644
--- a/chromium/third_party/minigbm/src/marvell.c
+++ b/chromium/third_party/minigbm/src/marvell.c
@@ -9,16 +9,16 @@
#include "gbm_priv.h"
#include "helpers.h"
-struct gbm_driver gbm_driver_marvell =
+const struct gbm_driver gbm_driver_marvell =
{
.name = "marvell",
.bo_create = gbm_dumb_bo_create,
.bo_destroy = gbm_dumb_bo_destroy,
.format_list = {
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
}
};
diff --git a/chromium/third_party/minigbm/src/mediatek.c b/chromium/third_party/minigbm/src/mediatek.c
index cfc166a1814..3f418742e0e 100644
--- a/chromium/third_party/minigbm/src/mediatek.c
+++ b/chromium/third_party/minigbm/src/mediatek.c
@@ -14,8 +14,9 @@
#include "gbm_priv.h"
#include "helpers.h"
-int gbm_mediatek_bo_create(struct gbm_bo *bo, uint32_t width, uint32_t height,
- uint32_t format, uint32_t flags)
+static int gbm_mediatek_bo_create(struct gbm_bo *bo,
+ uint32_t width, uint32_t height,
+ uint32_t format, uint32_t flags)
{
size_t size;
struct drm_mtk_gem_create gem_create;
@@ -41,16 +42,16 @@ int gbm_mediatek_bo_create(struct gbm_bo *bo, uint32_t width, uint32_t height,
return 0;
}
-struct gbm_driver gbm_driver_mediatek =
+const struct gbm_driver gbm_driver_mediatek =
{
.name = "mediatek",
.bo_create = gbm_mediatek_bo_create,
.bo_destroy = gbm_gem_bo_destroy,
.format_list = {
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
}
};
diff --git a/chromium/third_party/minigbm/src/rockchip.c b/chromium/third_party/minigbm/src/rockchip.c
index e43c760d844..0c0e0a8e53c 100644
--- a/chromium/third_party/minigbm/src/rockchip.c
+++ b/chromium/third_party/minigbm/src/rockchip.c
@@ -6,6 +6,8 @@
#ifdef GBM_ROCKCHIP
+#include <assert.h>
+#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <xf86drm.h>
@@ -13,45 +15,88 @@
#include "gbm_priv.h"
#include "helpers.h"
+#include "util.h"
-int gbm_rockchip_bo_create(struct gbm_bo *bo, uint32_t width, uint32_t height,
- uint32_t format, uint32_t flags)
+static int gbm_rockchip_bo_create(struct gbm_bo *bo,
+ uint32_t width, uint32_t height,
+ uint32_t format, uint32_t flags)
{
- size_t size;
- struct drm_rockchip_gem_create gem_create;
+ size_t plane;
+
+ switch (format) {
+ case GBM_FORMAT_NV12:
+ width = ALIGN(width, 4);
+ height = ALIGN(height, 4);
+ bo->strides[0] = bo->strides[1] = width;
+ bo->sizes[0] = height * bo->strides[0];
+ bo->sizes[1] = height * bo->strides[1] / 2;
+ bo->offsets[0] = bo->offsets[1] = 0;
+ break;
+ case GBM_FORMAT_XRGB8888:
+ case GBM_FORMAT_ARGB8888:
+ case GBM_FORMAT_ABGR8888:
+ bo->strides[0] = gbm_stride_from_format(format, width);
+ bo->sizes[0] = height * bo->strides[0];
+ bo->offsets[0] = 0;
+ break;
+ default:
+ fprintf(stderr, "minigbm: rockchip: unsupported format %4.4s\n",
+ (char*)&format);
+ assert(0);
+ return -EINVAL;
+ }
+
int ret;
+ for (plane = 0; plane < bo->num_planes; plane++) {
+ size_t size = bo->sizes[plane];
+ struct drm_rockchip_gem_create gem_create;
- bo->strides[0] = gbm_stride_from_format(format, width);
- size = height * bo->strides[0];
+ memset(&gem_create, 0, sizeof(gem_create));
+ gem_create.size = size;
- memset(&gem_create, 0, sizeof(gem_create));
- gem_create.size = size;
+ ret = drmIoctl(bo->gbm->fd, DRM_IOCTL_ROCKCHIP_GEM_CREATE,
+ &gem_create);
+ if (ret) {
+ fprintf(stderr, "minigbm: DRM_IOCTL_ROCKCHIP_GEM_CREATE failed "
+ "(size=%zu)\n", size);
+ goto cleanup_planes;
+ }
- ret = drmIoctl(bo->gbm->fd, DRM_IOCTL_ROCKCHIP_GEM_CREATE, &gem_create);
- if (ret) {
- fprintf(stderr, "minigbm: DRM_IOCTL_ROCKCHIP_GEM_CREATE failed "
- "(size=%zu)\n", size);
- return ret;
+ bo->handles[plane].u32 = gem_create.handle;
}
- bo->handles[0].u32 = gem_create.handle;
- bo->sizes[0] = size;
- bo->offsets[0] = 0;
-
return 0;
+
+cleanup_planes:
+ for ( ; plane != 0; plane--) {
+ struct drm_gem_close gem_close;
+ memset(&gem_close, 0, sizeof(gem_close));
+ gem_close.handle = bo->handles[plane - 1].u32;
+ int gem_close_ret = drmIoctl(bo->gbm->fd, DRM_IOCTL_GEM_CLOSE,
+ &gem_close);
+ if (gem_close_ret) {
+ fprintf(stderr,
+ "minigbm: DRM_IOCTL_GEM_CLOSE failed: %d\n",
+ gem_close_ret);
+ }
+ }
+
+ return ret;
}
-struct gbm_driver gbm_driver_rockchip =
+const struct gbm_driver gbm_driver_rockchip =
{
.name = "rockchip",
.bo_create = gbm_rockchip_bo_create,
.bo_destroy = gbm_gem_bo_destroy,
.format_list = {
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_ABGR8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_ABGR8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_NV12, GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_NV12, GBM_BO_USE_SCANOUT | GBM_BO_USE_LINEAR},
}
};
diff --git a/chromium/third_party/minigbm/src/tegra.c b/chromium/third_party/minigbm/src/tegra.c
index 6e9cba1e1eb..69c068b5276 100644
--- a/chromium/third_party/minigbm/src/tegra.c
+++ b/chromium/third_party/minigbm/src/tegra.c
@@ -131,32 +131,23 @@ static int gbm_tegra_bo_create(struct gbm_bo *bo, uint32_t width,
}
/* Encode blocklinear parameters for EGLImage creation. */
-
- /* XXX Bringup hack: If the highest order bit is set in
- * EGL_DMA_BUF_PLANE0_PITCH_EXT, Nvidia driver treats it as
- * a hint that the buffer is tiled, and the remaining bits in
- * the pitch attribute are treated as vendor specific tiling
- * arguments. Using this hack means that we don't need to add
- * a new FOURCC format, or EGL_DMA_BUF_PLANE0_TILING_EXT
- * attribute to the dma-buf import extension.
- */
- bo->tiling = (1 << 31) |
- (kind & 0xff) |
+ bo->tiling = (kind & 0xff) |
((block_height_log2 & 0xf) << 8);
+ bo->format_modifiers[0] = gbm_fourcc_mod_code(NV, bo->tiling);
}
return 0;
}
-struct gbm_driver gbm_driver_tegra =
+const struct gbm_driver gbm_driver_tegra =
{
.name = "tegra",
.bo_create = gbm_tegra_bo_create,
.bo_destroy = gbm_gem_bo_destroy,
.format_list = {
/* Linear support */
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
/* Blocklinear support */
{GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING},
{GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING},
diff --git a/chromium/third_party/minigbm/src/udl.c b/chromium/third_party/minigbm/src/udl.c
index 4f00faf95b6..58a440c27d0 100644
--- a/chromium/third_party/minigbm/src/udl.c
+++ b/chromium/third_party/minigbm/src/udl.c
@@ -13,9 +13,9 @@ const struct gbm_driver gbm_driver_udl =
.bo_create = gbm_dumb_bo_create,
.bo_destroy = gbm_dumb_bo_destroy,
.format_list = {
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING | GBM_BO_USE_WRITE},
- {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
}
};
diff --git a/chromium/third_party/minigbm/src/virtio_gpu.c b/chromium/third_party/minigbm/src/virtio_gpu.c
new file mode 100644
index 00000000000..14259dc6e2f
--- /dev/null
+++ b/chromium/third_party/minigbm/src/virtio_gpu.c
@@ -0,0 +1,22 @@
+/*
+ * 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 "gbm_priv.h"
+#include "helpers.h"
+
+const struct gbm_driver gbm_driver_virtio_gpu =
+{
+ .name = "virtio_gpu",
+ .bo_create = gbm_dumb_bo_create,
+ .bo_destroy = gbm_dumb_bo_destroy,
+ .format_list = {
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_RENDERING},
+ {GBM_FORMAT_ARGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_CURSOR | GBM_BO_USE_LINEAR},
+ }
+};
+