OSDN Git Service

amdgpu: Don't use AMDGPU_GEM_CREATE_EXPLICIT_SYNC flag.
[android-x86/external-minigbm.git] / i915.c
diff --git a/i915.c b/i915.c
index ff88321..8c37e9d 100644 (file)
--- a/i915.c
+++ b/i915.c
 #define I915_CACHELINE_SIZE 64
 #define I915_CACHELINE_MASK (I915_CACHELINE_SIZE - 1)
 
-static const uint32_t render_target_formats[] = { DRM_FORMAT_ABGR8888,     DRM_FORMAT_ARGB1555,
-                                                 DRM_FORMAT_ARGB8888,     DRM_FORMAT_RGB565,
-                                                 DRM_FORMAT_XBGR2101010,  DRM_FORMAT_XBGR8888,
-                                                 DRM_FORMAT_XBGR16161616, DRM_FORMAT_XRGB1555,
-                                                 DRM_FORMAT_XRGB2101010,  DRM_FORMAT_XRGB8888 };
+static const uint32_t render_target_formats[] = { DRM_FORMAT_ABGR8888,    DRM_FORMAT_ARGB1555,
+                                                 DRM_FORMAT_ARGB8888,    DRM_FORMAT_BGR888,
+                                                 DRM_FORMAT_RGB565,      DRM_FORMAT_XBGR2101010,
+                                                 DRM_FORMAT_XBGR8888,    DRM_FORMAT_XRGB1555,
+                                                 DRM_FORMAT_XRGB2101010, DRM_FORMAT_XRGB8888 };
 
 static const uint32_t tileable_texture_source_formats[] = { DRM_FORMAT_GR88, DRM_FORMAT_R8,
                                                            DRM_FORMAT_UYVY, DRM_FORMAT_YUYV };
@@ -101,6 +101,10 @@ static int i915_add_kms_item(struct driver *drv, const struct kms_item *item)
                        combo->use_flags |= item->use_flags & ~BO_USE_CURSOR;
                }
 
+               /* If we can scanout NV12, we support all tiling modes. */
+               if (item->format == DRM_FORMAT_NV12)
+                       combo->use_flags |= item->use_flags;
+
                if (combo->metadata.modifier == item->modifier)
                        combo->use_flags |= item->use_flags;
        }
@@ -167,6 +171,9 @@ static int i915_add_combinations(struct driver *drv)
                             ARRAY_SIZE(tileable_texture_source_formats), &metadata,
                             texture_use_flags);
 
+       /* TODO: Y tiling does not seem to work for framebuffers */
+       render_use_flags &= ~BO_USE_FRAMEBUFFER;
+
        metadata.tiling = I915_TILING_Y;
        metadata.priority = 3;
        metadata.modifier = I915_FORMAT_MOD_Y_TILED;
@@ -178,6 +185,11 @@ static int i915_add_combinations(struct driver *drv)
                             ARRAY_SIZE(tileable_texture_source_formats), &metadata,
                             texture_use_flags);
 
+       /* Support y-tiled NV12 for libva */
+       const uint32_t nv12_format = DRM_FORMAT_NV12;
+       drv_add_combinations(drv, &nv12_format, 1, &metadata,
+                            BO_USE_TEXTURE | BO_USE_HW_VIDEO_DECODER);
+
        kms_items = drv_query_kms(drv);
        if (!kms_items)
                return 0;