diff options
author | Jason Macnak <natsu@google.com> | 2022-04-25 07:33:24 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-04-25 07:33:24 +0000 |
commit | 548aa928d9a1f5a4e42432ab81ffecbf212f13c2 (patch) | |
tree | 7f2439365217e89cfa7935c1adec5686e6f7dc09 | |
parent | cabdbd33b1b76fb3d72b9f6f1df0fcf3d66adaf1 (diff) | |
parent | d369c89c8535fb960f8a444ee386c39d564baabb (diff) | |
download | minigbm-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-- | OWNERS | 1 | ||||
-rw-r--r-- | amdgpu.c | 3 | ||||
-rw-r--r-- | dumb_driver.c | 5 | ||||
-rw-r--r-- | external/virgl_hw.h | 6 | ||||
-rw-r--r-- | i915.c | 3 | ||||
-rw-r--r-- | mediatek.c | 16 | ||||
-rw-r--r-- | msm.c | 15 | ||||
-rw-r--r-- | virtgpu_virgl.c | 10 |
8 files changed, 45 insertions, 14 deletions
@@ -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 @@ -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. */ @@ -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; @@ -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 = { @@ -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); |