All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matt Roper <matthew.d.roper@intel.com>
To: Emil Velikov <emil.l.velikov@gmail.com>
Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>,
	Miguel Casas-Sanchez <mcasas@chromium.org>,
	ML dri-devel <dri-devel@lists.freedesktop.org>,
	Alexandros Frantzis <alexandros.frantzis@collabora.com>
Subject: Re: [RFC] Exposing plane type mask and handling 'all' planes
Date: Fri, 28 Jun 2019 10:37:30 -0700	[thread overview]
Message-ID: <20190628173730.GP24125@mdroper-desk.amr.corp.intel.com> (raw)
In-Reply-To: <20190628161451.GC30611@arch-x1c3>

On Fri, Jun 28, 2019 at 05:14:51PM +0100, Emil Velikov wrote:
> Hi Matt,
> 
> Thanks for the enlightening input :-)
> 
> On 2019/06/25, Matt Roper wrote:
> 
> > PLANE_CURSOR is basically just an indication that that specific plane is
> > the one that's also hooked up to the legacy cursor ioctls; like Ville
> > says, it shouldn't directly indicate that the plane is less
> > feature-capable than other planes.  You can either detect the true
> > capabilities of the cursor plane by checking for the presence/absence of
> > other plane properties and/or experimenting with atomic TEST_ONLY
> > commits to see what's really possible.
> > 
> Interesting, my understanding was the plane type was a hint about the
> capabilities. Although yes, userspace must check via TEST_ONLY to ensure
> the properties chosen will work.
> 
> 
> > The ideal solution for Intel gen9 hardware would have been to just never
> > have the driver advertise or program the dedicated hardware cursor at
> > all, but to instead expose the top-most universal plane to userspace,
> > describe it as PLANE_CURSOR, and route the legacy cursor ioctl's to that
> > plane instead.  That would allow legacy cursor behavior to work as
> > usual, but would also allow atomic userspace to use the plane in a more
> > full-featured manner.  I wrote patches to do exactly this a couple years
> > ago, but sadly we discovered that the universal planes on gen9 have a
> > slight alpha blending defect that the dedicated hardware cursor does not
> > exhibit.  Thus replacing the hardware cursor with the topmost universal
> > plane led to a slight regression for existing users and we had to scrap
> > the whole idea.  :-(
> > 
> > For reference, the relevant patch from a few years ago is here:
> >         https://patchwork.kernel.org/patch/9398571/
> > 
> In that thread you mention:
> 
> "... I believe the color correction settings are different for the
> universal plane vs the cursor plane (which causes IGT CRC mismatches at
> the moment and may be visually noticeable if you have good eyes); that
> shouldn't be hard to track down and fix."
> 
> Yet above you mention that universal planes have alpha blending defect.
> Did you confirm that with HW/simulation teams or is that based on the
> documentation? I would love to read a bit more on the topic.
> 
> In particular, but not limited to, if this defect is applicable only for
> plane3 or literally all universal planes.

We only figured out exactly what was going on a while after I wrote that
message in the thread, but we did ultimately confirm the problem with
the hardware architects.  Sadly, all of the gen9 universal planes suffer
from the slight blending issue and only the dedicated hardware cursor is
immune because it has some special bypass logic.

Specifically, you'd usually expect blending between two planes' pixels
to give you a final color value of

        bottom * (1.0-alpha) + top * alpha

However due to the way the alpha values are interpreted in the hardware,
there's a problematic case when the top plane's pixel alpha is 0.  You
wind up getting

        bottom * (255/256) + top * 0  = .996 * bottom

meaning pixels with a fully transparent plane above them are very
slightly fainter than pixels that didn't go through blending.  You'll
pretty much only perceive the difference when you have transparent
pixels at the edge of a plane (and even then only if you have a good
monitor and good eyes).  Of course "transparent pixels at the edge of
plane" is pretty common when you're using the plane as a mouse pointer.
You wind up with a faint ghost rectangle around your mouse pointer. :-(


Matt

> 
> Thanks again,
> Emil

-- 
Matt Roper
Graphics Software Engineer
IoTG Platform Enabling & Development
Intel Corporation
(916) 356-2795
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2019-06-28 17:37 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-19 16:03 [RFC] Exposing plane type mask and handling 'all' planes Emil Velikov
2019-06-19 16:33 ` Ville Syrjälä
2019-06-19 17:49   ` Emil Velikov
2019-06-19 18:24     ` Ville Syrjälä
2019-06-26  0:46       ` Matt Roper
2019-06-28 16:14         ` Emil Velikov
2019-06-28 17:37           ` Matt Roper [this message]
2019-06-28 18:54             ` Emil Velikov
2019-06-28 23:20               ` Matt Roper

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=20190628173730.GP24125@mdroper-desk.amr.corp.intel.com \
    --to=matthew.d.roper@intel.com \
    --cc=alexandros.frantzis@collabora.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=emil.l.velikov@gmail.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=mcasas@chromium.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.