public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: "intel-gfx@lists.freedesktop.org" <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 10/13] drm/i915: fix the CFB size check
Date: Wed, 11 Nov 2015 16:27:52 +0200	[thread overview]
Message-ID: <20151111142752.GK4437@intel.com> (raw)
In-Reply-To: <5641EB70.3090502@linux.intel.com>

On Tue, Nov 10, 2015 at 02:04:48PM +0100, Maarten Lankhorst wrote:
> Op 10-11-15 om 13:20 schreef Zanoni, Paulo R:
> > Em Ter, 2015-11-10 às 11:22 +0100, Maarten Lankhorst escreveu:
> >> Op 04-11-15 om 20:10 schreef Paulo Zanoni:
> >>> In function find_compression_threshold() we try to over-allocate
> >>> CFB
> >>> space in order to reudce reallocations and fragmentation, and we're
> >>> not considering that at the CFB size check. Consider it.
> >>>
> >>> There is also a longer-term plan to kill
> >>> dev_priv->fbc.uncompressed_size, but this will come later.
> >>>
> >>> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> >>> ---
> >>>  drivers/gpu/drm/i915/intel_fbc.c | 3 ++-
> >>>  1 file changed, 2 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/drivers/gpu/drm/i915/intel_fbc.c
> >>> b/drivers/gpu/drm/i915/intel_fbc.c
> >>> index dee99c9..e99aacc 100644
> >>> --- a/drivers/gpu/drm/i915/intel_fbc.c
> >>> +++ b/drivers/gpu/drm/i915/intel_fbc.c
> >>> @@ -719,7 +719,8 @@ static int intel_fbc_setup_cfb(struct
> >>> intel_crtc *crtc)
> >>>  	size = intel_fbc_calculate_cfb_size(crtc);
> >>>  	cpp = drm_format_plane_cpp(fb->pixel_format, 0);
> >>>  
> >>> -	if (size <= dev_priv->fbc.uncompressed_size)
> >>> +	if (dev_priv->fbc.compressed_fb.allocated &&
> >>> +	    size <= dev_priv->fbc.compressed_fb.size * dev_priv-
> >>>> fbc.threshold)
> >>>  		return 0;
> >>>  
> >>>  	/* Release any current block */
> >> Should i8xx_fbc_enable be changed too then?
> > As far as I understand, no. We're just reserving a bigger buffer in
> > case we need it later, but the size used by the hardware is still the
> > same. But I'm not 100% sure the i8xx code is actually correct since I
> > didn't dig deep into the ancient scrolls. By not touching i8xx we're
> > also avoiding a possible new regression.
> >
> The original check was for size <= uncompressed_size,
> new is threshold * compressed.
> 
> I think i8xx_fbc_enable might have to do the same when calculating cfb_pitch
> for this patch to work as intended.

I think the FBC1 code is fairly confused already.

It does the right thing by capping CFB_PITCH to the fb pitch. The way
the hardware works is that any line that compresses to >CFB_PITCH is
discarded and marked as uncompressed. So we definitely don't want to 
allow CFB_PITCH to exceed the original pitch as that would just increase
the amount of data getting scanned out. The nasty thing is that it'll
try to recompress any line tagged as uncompressed every time it tries
to recompress anything, so we should be rather careful not to set
CFB_PITCH too low for FBC1, and if we have poorly compressing data we
might just want to disable FBC entirely to avoid trying to recompress
everything all the time.

What doesn't really make sense to me is the
'cfb_pitch = dev_priv->fbc.uncompressed_size / FBC_LL_SIZE' part. 
That basically assumes we always have a maximum height plane (1536
lines) in use. I'm not entirely sure if the hardware fully skips the
unused lines, or if we would have to allocate some pixel run sets
(swords) even for the unused lines (maybe 1 per line). But I wouldn't
think that we would need to allocate them to cover the entire worst
case length.

What makes things more confusing I think is the naming of the variables
and functions. uncompressed_size is actually the size we've allocated
for the cfb, and intel_fbc_calculate_cfb_size() sort of returns the
uncompressed fb size. Well since it has the 2k line limit applied, I
suppose you can actually think of it as the max cfb size we would want
to have for the particular plane configuration.

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

  parent reply	other threads:[~2015-11-11 14:27 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-04 19:10 [PATCH 00/13] Yet another FBC series, v3 part 1 Paulo Zanoni
2015-11-04 19:10 ` [PATCH 01/13] drm/i915: rename intel_fbc_nuke to intel_fbc_recompress Paulo Zanoni
2015-11-04 19:10 ` [PATCH 02/13] drm/i915: extract fbc_on_pipe_a_only() Paulo Zanoni
2015-11-04 19:10 ` [PATCH 03/13] drm/i915: remove unnecessary check for crtc->primary->fb Paulo Zanoni
2015-11-04 19:10 ` [PATCH 04/13] drm/i915: extract crtc_is_valid() on the FBC code Paulo Zanoni
2015-11-04 19:10 ` [PATCH 05/13] drm/i915: use struct intel_crtc *crtc at __intel_fbc_update() Paulo Zanoni
2015-11-04 19:10 ` [PATCH 06/13] drm/i915: fix the __intel_fbc_update() comments Paulo Zanoni
2015-11-04 19:10 ` [PATCH 07/13] drm/i915: don't disable_fbc() if FBC is already disabled Paulo Zanoni
2015-11-05 11:29   ` Ville Syrjälä
2015-11-05 14:52     ` Maarten Lankhorst
2015-11-05 15:52       ` Ville Syrjälä
2015-11-04 19:10 ` [PATCH 08/13] drm/i915: refactor FBC deactivation at init Paulo Zanoni
2015-11-04 19:10 ` [PATCH 09/13] drm/i915: remove too-frequent FBC debug message Paulo Zanoni
2015-11-04 19:10 ` [PATCH 10/13] drm/i915: fix the CFB size check Paulo Zanoni
2015-11-10 10:22   ` Maarten Lankhorst
2015-11-10 12:20     ` Zanoni, Paulo R
2015-11-10 13:04       ` Maarten Lankhorst
2015-11-11 13:39         ` Zanoni, Paulo R
2015-11-11 14:25           ` Maarten Lankhorst
2015-11-11 14:27         ` Ville Syrjälä [this message]
2015-11-11 15:36           ` Zanoni, Paulo R
2015-11-04 19:10 ` [PATCH 11/13] drm/i915: clarify that checking the FB stride for CFB is intentional Paulo Zanoni
2015-11-04 19:10 ` [PATCH 12/13] drm/i915: remove in_dbg_master check from intel_fbc.c Paulo Zanoni
2015-11-04 20:13   ` Jesse Barnes
2015-11-04 20:19     ` Jason Wessel
2015-11-04 20:26       ` Zanoni, Paulo R
2015-11-04 20:32         ` Jesse Barnes
2015-11-04 19:10 ` [PATCH 13/13] drm/i915: remove newline from a no_fbc_reason message Paulo Zanoni
2015-11-13 15:49 ` [PATCH 00/13] Yet another FBC series, v3 part 1 Daniel Stone
2015-11-13 16:36   ` Zanoni, Paulo R
2015-11-13 16:58     ` Daniel Stone

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151111142752.GK4437@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=maarten.lankhorst@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox