|
@@ -1254,6 +1254,19 @@ static uint32_t skl_plane_formats[] = {
|
|
|
DRM_FORMAT_VYUY,
|
|
|
};
|
|
|
|
|
|
+static uint32_t skl_planar_formats[] = {
|
|
|
+ DRM_FORMAT_RGB565,
|
|
|
+ DRM_FORMAT_ABGR8888,
|
|
|
+ DRM_FORMAT_ARGB8888,
|
|
|
+ DRM_FORMAT_XBGR8888,
|
|
|
+ DRM_FORMAT_XRGB8888,
|
|
|
+ DRM_FORMAT_YUYV,
|
|
|
+ DRM_FORMAT_YVYU,
|
|
|
+ DRM_FORMAT_UYVY,
|
|
|
+ DRM_FORMAT_VYUY,
|
|
|
+ DRM_FORMAT_NV12,
|
|
|
+};
|
|
|
+
|
|
|
static const uint64_t skl_plane_format_modifiers_noccs[] = {
|
|
|
I915_FORMAT_MOD_Yf_TILED,
|
|
|
I915_FORMAT_MOD_Y_TILED,
|
|
@@ -1348,6 +1361,7 @@ static bool skl_mod_supported(uint32_t format, uint64_t modifier)
|
|
|
case DRM_FORMAT_YVYU:
|
|
|
case DRM_FORMAT_UYVY:
|
|
|
case DRM_FORMAT_VYUY:
|
|
|
+ case DRM_FORMAT_NV12:
|
|
|
if (modifier == I915_FORMAT_MOD_Yf_TILED)
|
|
|
return true;
|
|
|
/* fall through */
|
|
@@ -1447,8 +1461,14 @@ intel_sprite_plane_create(struct drm_i915_private *dev_priv,
|
|
|
intel_plane->disable_plane = skl_disable_plane;
|
|
|
intel_plane->get_hw_state = skl_plane_get_hw_state;
|
|
|
|
|
|
- plane_formats = skl_plane_formats;
|
|
|
- num_plane_formats = ARRAY_SIZE(skl_plane_formats);
|
|
|
+ if (skl_plane_has_planar(dev_priv, pipe,
|
|
|
+ PLANE_SPRITE0 + plane)) {
|
|
|
+ plane_formats = skl_planar_formats;
|
|
|
+ num_plane_formats = ARRAY_SIZE(skl_planar_formats);
|
|
|
+ } else {
|
|
|
+ plane_formats = skl_plane_formats;
|
|
|
+ num_plane_formats = ARRAY_SIZE(skl_plane_formats);
|
|
|
+ }
|
|
|
|
|
|
if (skl_plane_has_ccs(dev_priv, pipe, PLANE_SPRITE0 + plane))
|
|
|
modifiers = skl_plane_format_modifiers_ccs;
|