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 <[email protected]>
> ---
>  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
> [email protected]
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to