Reland "minigbm: introduce test allocation"
This reverts commit 08d8dbf094fdc5aa9b92c7257e292edcf28602b2.
The original change returned early from drv_bo_create_with_modifiers,
which broke reference counting. This must have hit some race condition
in the tests, as they no longer flake after fixing reference counting.
Original change's description:
> Revert "minigbm: introduce test allocation"
>
> This reverts commit f0e607c7d436134b53fd45a4ead36d714451be8a.
>
> Reason for revert: caused flaky regressions across the board.
>
> BUG=b:150997559
> Exempt-From-Owner-Approval: revert.
>
> Original change's description:
> > minigbm: introduce test allocation
> >
> > This change introduces a GBM_TEST_ALLOC flag to minigbm, which allows
> > for the creation of fake buffers that can be used to determine buffer
> > metadata without actually allocating a full buffer. The new flag is
> > supported by the i915 backends. This flag also alleviates the need to
> > cache buffers when virtio_gpu queries metadata properties.
> >
> > BUG=b:145994510
> > TEST=play youtube with arcvm demo image plus this and virgl change
> >
> > Change-Id: I9c6819aa3b5b674e4bb33b0656f2a9f155b0884e
> > Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/1980688
> > Tested-by: David Stevens <stevensd@chromium.org>
> > Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
> > Commit-Queue: David Stevens <stevensd@chromium.org>
>
> Bug: b:145994510
> Change-Id: I50079b7f0aabf38e1f373cac0f28c0e057eed760
> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/2093923
> Commit-Queue: Ilja H. Friedel <ihf@chromium.org>
> Tested-by: Ilja H. Friedel <ihf@chromium.org>
> Reviewed-by: Ilja H. Friedel <ihf@chromium.org>
Bug: b:150997559, b:145994510
Change-Id: If0f02a4701bb6960b6413d6b0c00b481146914d9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/2094068
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Commit-Queue: David Stevens <stevensd@chromium.org>
Tested-by: David Stevens <stevensd@chromium.org>
diff --git a/i915.c b/i915.c
index d0c9db1..05c8272 100644
--- a/i915.c
+++ b/i915.c
@@ -268,13 +268,26 @@
return 0;
}
-static int i915_bo_create_for_modifier(struct bo *bo, uint32_t width, uint32_t height,
- uint32_t format, uint64_t modifier)
+static int i915_bo_compute_metadata(struct bo *bo, uint32_t width, uint32_t height, uint32_t format,
+ uint64_t use_flags, const uint64_t *modifiers, uint32_t count)
{
- int ret;
- size_t plane;
- struct drm_i915_gem_create gem_create;
- struct drm_i915_gem_set_tiling gem_set_tiling;
+ static const uint64_t modifier_order[] = {
+ I915_FORMAT_MOD_Y_TILED_CCS,
+ I915_FORMAT_MOD_Y_TILED,
+ I915_FORMAT_MOD_X_TILED,
+ DRM_FORMAT_MOD_LINEAR,
+ };
+ uint64_t modifier;
+
+ if (modifiers) {
+ modifier =
+ drv_pick_modifier(modifiers, count, modifier_order, ARRAY_SIZE(modifier_order));
+ } else {
+ struct combination *combo = drv_get_combination(bo->drv, format, use_flags);
+ if (!combo)
+ return -EINVAL;
+ modifier = combo->metadata.modifier;
+ }
switch (modifier) {
case DRM_FORMAT_MOD_LINEAR:
@@ -346,6 +359,15 @@
} else {
i915_bo_from_format(bo, width, height, format);
}
+ return 0;
+}
+
+static int i915_bo_create_from_metadata(struct bo *bo)
+{
+ int ret;
+ size_t plane;
+ struct drm_i915_gem_create gem_create;
+ struct drm_i915_gem_set_tiling gem_set_tiling;
memset(&gem_create, 0, sizeof(gem_create));
gem_create.size = bo->meta.total_size;
@@ -378,34 +400,6 @@
return 0;
}
-static int i915_bo_create(struct bo *bo, uint32_t width, uint32_t height, uint32_t format,
- uint64_t use_flags)
-{
- struct combination *combo;
-
- combo = drv_get_combination(bo->drv, format, use_flags);
- if (!combo)
- return -EINVAL;
-
- return i915_bo_create_for_modifier(bo, width, height, format, combo->metadata.modifier);
-}
-
-static int i915_bo_create_with_modifiers(struct bo *bo, uint32_t width, uint32_t height,
- uint32_t format, const uint64_t *modifiers, uint32_t count)
-{
- static const uint64_t modifier_order[] = {
- I915_FORMAT_MOD_Y_TILED_CCS,
- I915_FORMAT_MOD_Y_TILED,
- I915_FORMAT_MOD_X_TILED,
- DRM_FORMAT_MOD_LINEAR,
- };
- uint64_t modifier;
-
- modifier = drv_pick_modifier(modifiers, count, modifier_order, ARRAY_SIZE(modifier_order));
-
- return i915_bo_create_for_modifier(bo, width, height, format, modifier);
-}
-
static void i915_close(struct driver *drv)
{
free(drv->priv);
@@ -561,8 +555,8 @@
.name = "i915",
.init = i915_init,
.close = i915_close,
- .bo_create = i915_bo_create,
- .bo_create_with_modifiers = i915_bo_create_with_modifiers,
+ .bo_compute_metadata = i915_bo_compute_metadata,
+ .bo_create_from_metadata = i915_bo_create_from_metadata,
.bo_destroy = drv_gem_bo_destroy,
.bo_import = i915_bo_import,
.bo_map = i915_bo_map,