[Intel-gfx] [PATCH 10/16] drm/i915: fix CFB size calculation
Ville Syrjälä
ville.syrjala at linux.intel.com
Fri Aug 28 10:25:42 PDT 2015
On Fri, Aug 14, 2015 at 06:34:15PM -0300, Paulo Zanoni wrote:
> We were considering the whole framebuffer height, but the spec clearly
> says that we should only consider the active display height size.
>
> On my current testing machine, this moves us from 124 successes and
> 502 skips to 209 successes and 417 skips on "kms_frontbuffer_tracking
> --fbc-only". The high amount of skips is due to the --fbc-only
> argument. We had those skips due to not enough stolen memory for the
> tests. We're now passing the maximum possible amount: 209.
>
> Note: when this patch was written, the amount of tests we had for FBC
> was different than what we have now.
>
> Testcase: igt/kms_frontbuffer_tracking/fbc-*
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
> ---
> drivers/gpu/drm/i915/intel_fbc.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c
> index dc84e67..cfd4cba 100644
> --- a/drivers/gpu/drm/i915/intel_fbc.c
> +++ b/drivers/gpu/drm/i915/intel_fbc.c
> @@ -695,9 +695,15 @@ void intel_fbc_cleanup_cfb(struct drm_i915_private *dev_priv)
> mutex_unlock(&dev_priv->fbc.lock);
> }
>
> -static int intel_fbc_setup_cfb(struct drm_i915_private *dev_priv, int size,
> - int fb_cpp)
> +static int intel_fbc_setup_cfb(struct intel_crtc *crtc)
> {
> + struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
> + struct drm_framebuffer *fb = crtc->base.primary->fb;
> + int size, fb_cpp;
> +
> + size = crtc->config->pipe_src_h * fb->pitches[0];
> + fb_cpp = drm_format_plane_cpp(fb->pixel_format, 0);
> +
>From the looks of it SKL ought to be able to use FBC even with a
non-fullscreen plane, so this should look up the size from the plane
state. What I don't know is whether FBC would still work when plane scaling
is enabled. But I suppose it if can, it would deal with the data before
scaling, so using the clipped src size would be the right thing here I think.
> if (size <= dev_priv->fbc.uncompressed_size)
> return 0;
>
> @@ -844,8 +850,7 @@ static void __intel_fbc_update(struct drm_i915_private *dev_priv)
> goto out_disable;
> }
>
> - if (intel_fbc_setup_cfb(dev_priv, obj->base.size,
> - drm_format_plane_cpp(fb->pixel_format, 0))) {
> + if (intel_fbc_setup_cfb(intel_crtc)) {
> set_no_fbc_reason(dev_priv, FBC_STOLEN_TOO_SMALL);
> goto out_disable;
> }
> --
> 2.4.6
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ville Syrjälä
Intel OTC
More information about the Intel-gfx
mailing list