OSDN Git Service

Revert "minigbm: i915: Add necessary padding to Android YV12 buffers"
authorKristian H. Kristensen <hoegsberg@chromium.org>
Thu, 3 May 2018 20:40:47 +0000 (20:40 +0000)
committerchrome-bot <chrome-bot@chromium.org>
Sat, 5 May 2018 03:37:22 +0000 (20:37 -0700)
This reverts commit d846de667cba72121ec579912d0854729f013731.

When mesa switched to isl internally, dma-buf import regressed in a
few cases where isl was overly strict.  One issue was enforcing slice
alignment in calculating the minimum size of a buffer.  The alignment
is required for the slice placement, but not the size.  We worked
around it in commit d846de667cba72121ec579912d0854729f013731, but mesa
commit 4d27c6095e8385cccd225993452baad4d2e35420 fixes the problem and
we can now revert the minigbm bandaid.

The revert leaves the change to drv_bo_from_format() in place where it
was modified to look at the passed in format argument instead of
bo->format.

Original change's description:
> minigbm: i915: Add necessary padding to Android YV12 buffers
>
> All the regular formats are already aligned by current code, except
> Android YV12, which requires height of planes to be unchanged. However
> Mesa requires each plane to have at least certain required padding
> between planes. Work around this by calculating total BO size with
> aligned height to allow padding space to overlap with further planes
> and making sure that padding of last plane fits in the buffer. This is
> okay, since Mesa requirement seems to indicate that data of the padding
> area should not be affected and padding is only needed to satisfy GPU
> cache requests.
>
> Fixes following CTS tests on Intel platforms:
> android.media.cts.VideoEncoderTest#testGoogH264FlexArbitraryH
> android.media.cts.VideoEncoderTest#testGoogH264FlexNearMaxMin
> android.media.cts.VideoEncoderTest#testGoogH264SurfArbitraryH
> android.media.cts.VideoEncoderTest#testGoogH264SurfNearMaxMin
>
> BUG=b:63957026
> TEST=./cts-tradefed run cts -m CtsMediaTestCases -t
>  android.media.cts.VideoEncoderTest
>
> Change-Id: I46d44178ba983c0038b630b13b9b281251393f8f
> Reviewed-on: https://chromium-review.googlesource.com/592990
> Commit-Ready: Tomasz Figa <tfiga@chromium.org>
> Tested-by: Tomasz Figa <tfiga@chromium.org>
> Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>

Bug: b:63957026
Change-Id: I9a0db4f01a7ec206375f8a0ba5219b5c5d9a4c0e
Reviewed-on: https://chromium-review.googlesource.com/1042746
Commit-Ready: Kristian H. Kristensen <hoegsberg@chromium.org>
Tested-by: Kristian H. Kristensen <hoegsberg@chromium.org>
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
i915.c

diff --git a/i915.c b/i915.c
index 237ec4d..6eb5c01 100644 (file)
--- a/i915.c
+++ b/i915.c
@@ -333,32 +333,12 @@ static int i915_bo_create_for_modifier(struct bo *bo, uint32_t width, uint32_t h
                return ret;
 
        /*
-        * HAL_PIXEL_FORMAT_YV12 requires the buffer height not be aligned, but we need to keep
-        * total size as with aligned height to ensure enough padding space after each plane to
-        * satisfy GPU alignment requirements.
-        *
-        * We do it by first calling drv_bo_from_format() with aligned height and
-        * DRM_FORMAT_YVU420, which allows height alignment, saving the total size it calculates
-        * and then calling it again with requested parameters.
-        *
-        * This relies on the fact that i965 driver uses separate surfaces for each plane and
-        * contents of padding bytes is not affected, as it is only used to satisfy GPU cache
-        * requests.
-        *
-        * This is enforced by Mesa in src/intel/isl/isl_gen8.c, inside
-        * isl_gen8_choose_image_alignment_el(), which is used for GEN9 and GEN8.
+        * HAL_PIXEL_FORMAT_YV12 requires that the buffer's height not be aligned.
         */
-       if (format == DRM_FORMAT_YVU420_ANDROID) {
-               uint32_t unaligned_height = bo->height;
-               size_t total_size;
-
-               drv_bo_from_format(bo, stride, height, DRM_FORMAT_YVU420);
-               total_size = bo->total_size;
-               drv_bo_from_format(bo, stride, unaligned_height, format);
-               bo->total_size = total_size;
-       } else {
-               drv_bo_from_format(bo, stride, height, format);
-       }
+       if (format == DRM_FORMAT_YVU420_ANDROID)
+               height = bo->height;
+
+       drv_bo_from_format(bo, stride, height, format);
 
        memset(&gem_create, 0, sizeof(gem_create));
        gem_create.size = bo->total_size;