summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Macnak <natsu@google.com>2022-04-25 07:33:24 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-04-25 07:33:24 +0000
commit548aa928d9a1f5a4e42432ab81ffecbf212f13c2 (patch)
tree7f2439365217e89cfa7935c1adec5686e6f7dc09
parentcabdbd33b1b76fb3d72b9f6f1df0fcf3d66adaf1 (diff)
parentd369c89c8535fb960f8a444ee386c39d564baabb (diff)
downloadminigbm-548aa928d9a1f5a4e42432ab81ffecbf212f13c2.tar.gz
Merge remote-tracking branch 'aosp/upstream-main' into 'aosp/master' am: d369c89c85
Original change: https://android-review.googlesource.com/c/platform/external/minigbm/+/2072342 Change-Id: Ifbd4024035c524d3799ec4175122e1a91ebfb9e3 Ignore-AOSP-First: this is an automerge Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--OWNERS1
-rw-r--r--amdgpu.c3
-rw-r--r--dumb_driver.c5
-rw-r--r--external/virgl_hw.h6
-rw-r--r--i915.c3
-rw-r--r--mediatek.c16
-rw-r--r--msm.c15
-rw-r--r--virtgpu_virgl.c10
8 files changed, 45 insertions, 14 deletions
diff --git a/OWNERS b/OWNERS
index 892eb39..6d49c2d 100644
--- a/OWNERS
+++ b/OWNERS
@@ -8,7 +8,6 @@ marcheu@chromium.org
mcasas@chromium.org
olv@google.com
robdclark@chromium.org
-stevensd@chromium.org
tfiga@chromium.org
zzyiwei@chromium.org
diff --git a/amdgpu.c b/amdgpu.c
index 700a8c7..f0053d6 100644
--- a/amdgpu.c
+++ b/amdgpu.c
@@ -625,9 +625,6 @@ static int amdgpu_import_bo(struct bo *bo, struct drv_import_fd_data *data)
dri_tiling = combo->metadata.tiling != TILE_TYPE_LINEAR;
}
- bo->meta.num_planes = dri_num_planes_from_modifier(bo->drv, data->format,
- data->format_modifier);
-
if (dri_tiling)
return dri_bo_import(bo, data);
else
diff --git a/dumb_driver.c b/dumb_driver.c
index ef7dd36..c667a51 100644
--- a/dumb_driver.c
+++ b/dumb_driver.c
@@ -27,7 +27,7 @@ static const uint32_t scanout_render_formats[] = { DRM_FORMAT_ARGB8888, DRM_FORM
DRM_FORMAT_ABGR8888, DRM_FORMAT_XBGR8888,
DRM_FORMAT_BGR888, DRM_FORMAT_RGB565 };
-static const uint32_t texture_only_formats[] = { DRM_FORMAT_NV12, DRM_FORMAT_NV21,
+static const uint32_t texture_only_formats[] = { DRM_FORMAT_R8, DRM_FORMAT_NV12, DRM_FORMAT_NV21,
DRM_FORMAT_YVU420, DRM_FORMAT_YVU420_ANDROID };
static int dumb_driver_init(struct driver *drv)
@@ -38,6 +38,9 @@ static int dumb_driver_init(struct driver *drv)
drv_add_combinations(drv, texture_only_formats, ARRAY_SIZE(texture_only_formats),
&LINEAR_METADATA, BO_USE_TEXTURE_MASK);
+ drv_modify_combination(drv, DRM_FORMAT_R8, &LINEAR_METADATA,
+ BO_USE_HW_VIDEO_ENCODER | BO_USE_HW_VIDEO_DECODER |
+ BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE);
drv_modify_combination(drv, DRM_FORMAT_NV12, &LINEAR_METADATA,
BO_USE_HW_VIDEO_ENCODER | BO_USE_HW_VIDEO_DECODER |
BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE);
diff --git a/external/virgl_hw.h b/external/virgl_hw.h
index 7f4a63f..4527ced 100644
--- a/external/virgl_hw.h
+++ b/external/virgl_hw.h
@@ -222,6 +222,12 @@ enum virgl_formats {
VIRGL_FORMAT_A4B4G4R4_UNORM = 311,
VIRGL_FORMAT_R8_SRGB = 312,
+ VIRGL_FORMAT_R8G8_SRGB = 313,
+
+ VIRGL_FORMAT_P010 = 314,
+ VIRGL_FORMAT_P012 = 315,
+ VIRGL_FORMAT_P016 = 316,
+
VIRGL_FORMAT_MAX /* = PIPE_FORMAT_COUNT */,
/* Below formats must not be used in the guest. */
diff --git a/i915.c b/i915.c
index de33cd8..35c45eb 100644
--- a/i915.c
+++ b/i915.c
@@ -105,7 +105,8 @@ static void i915_info_from_device_id(struct i915_device *i915)
};
const uint16_t adlp_ids[] = { 0x46A0, 0x46A1, 0x46A2, 0x46A3, 0x46A6, 0x46A8,
0x46AA, 0x462A, 0x4626, 0x4628, 0x46B0, 0x46B1,
- 0x46B2, 0x46B3, 0x46C0, 0x46C1, 0x46C2, 0x46C3 };
+ 0x46B2, 0x46B3, 0x46C0, 0x46C1, 0x46C2, 0x46C3,
+ 0x46D0, 0x46D1, 0x46D2 };
unsigned i;
i915->gen = 4;
i915->is_adlp = false;
diff --git a/mediatek.c b/mediatek.c
index 076f478..562b1d1 100644
--- a/mediatek.c
+++ b/mediatek.c
@@ -59,7 +59,6 @@ static const uint32_t texture_source_formats[] = {
DRM_FORMAT_YVU420_ANDROID
};
-#ifdef DONT_USE_64_ALIGNMENT_FOR_VIDEO_BUFFERS
static const uint32_t video_yuv_formats[] = {
DRM_FORMAT_NV21,
DRM_FORMAT_NV12,
@@ -77,7 +76,6 @@ static bool is_video_yuv_format(uint32_t format)
}
return false;
}
-#endif
static int mediatek_init(struct driver *drv)
{
@@ -142,6 +140,12 @@ static int mediatek_bo_create_with_modifiers(struct bo *bo, uint32_t width, uint
size_t plane;
uint32_t stride;
struct drm_mtk_gem_create gem_create = { 0 };
+ /*
+ * We identify the ChromeOS Camera App buffers via these two USE flags. Those buffers need
+ * the same alignment as the video hardware encoding.
+ */
+ const bool is_camera_preview =
+ (bo->meta.use_flags & BO_USE_SCANOUT) && (bo->meta.use_flags & BO_USE_CAMERA_WRITE);
if (!drv_has_modifier(modifiers, count, DRM_FORMAT_MOD_LINEAR)) {
errno = EINVAL;
@@ -163,7 +167,7 @@ static int mediatek_bo_create_with_modifiers(struct bo *bo, uint32_t width, uint
stride = ALIGN(stride, 64);
#endif
- if (bo->meta.use_flags & (BO_USE_HW_VIDEO_ENCODER | BO_USE_SCANOUT)) {
+ if ((bo->meta.use_flags & BO_USE_HW_VIDEO_ENCODER) || is_camera_preview) {
uint32_t aligned_height = ALIGN(height, 32);
uint32_t padding[DRV_MAX_PLANES] = { 0 };
@@ -361,12 +365,12 @@ static void mediatek_resolve_format_and_use_flags(struct driver *drv, uint32_t f
*out_format = DRM_FORMAT_YVU420;
*out_use_flags &= ~BO_USE_SCANOUT;
break;
- case DRM_FORMAT_YVU420_ANDROID:
- *out_use_flags &= ~BO_USE_SCANOUT;
- break;
default:
break;
}
+ /* Mediatek doesn't support YUV overlays */
+ if (is_video_yuv_format(format))
+ *out_use_flags &= ~BO_USE_SCANOUT;
}
const struct backend backend_mediatek = {
diff --git a/msm.c b/msm.c
index 14ecf2b..5a2a73c 100644
--- a/msm.c
+++ b/msm.c
@@ -207,6 +207,21 @@ static bool should_avoid_ubwc(void)
drv_log("WARNING: waffle detected, disabling UBWC\n");
return true;
}
+
+ /* Sommelier relies on implicit modifier, which does not pass host modifier to
+ * zwp_linux_buffer_params_v1_add. Graphics will be broken if UBWC is enabled.
+ * Sommelier shall be fixed to mirror what arc wayland_service does, and then
+ * we can re-enable UBWC here.
+ *
+ * Inherit the trick from crrev/c/2523246 previously used for gtest. The side
+ * effect is all VM guests on msm will revert back to use linear modifier.
+ *
+ * See b/229147702
+ */
+ if (!dlsym(RTLD_DEFAULT, "cupsFilePrintf")) {
+ drv_log("WARNING: virtualization detected, disabling UBWC\n");
+ return true;
+ }
#endif
return false;
}
diff --git a/virtgpu_virgl.c b/virtgpu_virgl.c
index cbfae66..163865b 100644
--- a/virtgpu_virgl.c
+++ b/virtgpu_virgl.c
@@ -91,6 +91,8 @@ static uint32_t translate_format(uint32_t drm_fourcc)
return VIRGL_FORMAT_NV12;
case DRM_FORMAT_NV21:
return VIRGL_FORMAT_NV21;
+ case DRM_FORMAT_P010:
+ return VIRGL_FORMAT_P010;
case DRM_FORMAT_YVU420:
case DRM_FORMAT_YVU420_ANDROID:
return VIRGL_FORMAT_YV12;
@@ -633,8 +635,12 @@ static int virgl_init(struct driver *drv)
/* Android CTS tests require this. */
virgl_add_combination(drv, DRM_FORMAT_RGB888, &LINEAR_METADATA, BO_USE_SW_MASK);
virgl_add_combination(drv, DRM_FORMAT_BGR888, &LINEAR_METADATA, BO_USE_SW_MASK);
- virgl_add_combination(drv, DRM_FORMAT_P010, &LINEAR_METADATA, BO_USE_TEXTURE |
- BO_USE_SW_MASK | BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE);
+ /* Android Camera CTS tests requires this. Additionally, the scanout usage is needed for
+ * Camera preview and is expected to be conditionally stripped by virgl_add_combination
+ * when not natively supported and instead handled by HWComposer. */
+ virgl_add_combination(drv, DRM_FORMAT_P010, &LINEAR_METADATA,
+ BO_USE_SCANOUT | BO_USE_TEXTURE | BO_USE_SW_MASK |
+ BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE);
drv_modify_combination(drv, DRM_FORMAT_R8, &LINEAR_METADATA,
BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE | BO_USE_HW_VIDEO_DECODER |
BO_USE_HW_VIDEO_ENCODER | BO_USE_GPU_DATA_BUFFER);