This is a port of crocus's
f1c1fcfd (crocus: don't create staging
resources > half aperture).
I chose to use the whole aperture here rather than 3/4 of it, mostly
to avoid adding another legacy field for aperture stuff. It's close
enough to work.
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/2104
Reviewed-by: Dave Airlie <airlied@redhat.com>
Tested-by: Mark Janes markjanes@swizzler.org
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18311>
if (!isl_surf_created_successfully)
goto fail;
+ /* Don't create staging surfaces that will use over half the aperture,
+ * since staging implies you are copying data to another resource that's
+ * at least as large, and then both wouldn't fit in the aperture.
+ *
+ * Skip this for discrete cards, as the destination buffer might be in
+ * device local memory while the staging buffer would be in system memory,
+ * so both would fit.
+ */
+ if (templ->usage == PIPE_USAGE_STAGING && !devinfo->has_local_mem &&
+ res->surf.size_B > devinfo->aperture_bytes / 2)
+ goto fail;
+
if (!iris_resource_configure_aux(screen, res, false))
goto fail;