Re: [RFC][PATCH 5/5] drm_hwcomposer: HACK: Fix tearing on hikey/hikey960

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jan 11, 2018 at 11:20 PM, John Stultz <john.stultz@xxxxxxxxxx> wrote:
> On Tue, Jan 9, 2018 at 10:05 PM, John Stultz <john.stultz@xxxxxxxxxx> wrote:
>> When using drm_hwcomposer with the hikey/hikey960 boards, the
>> resulting display shows lots of tearing.
>>
>> I'm not much of an expert in how this code should work, but it
>> seems that we never call sync_wait(), and thus don't seem to be
>> handling the fences properly? I'm not sure.
>>
>> Anyway, in a daze, I started cutting out code trying to make
>> sure we call the CreateNextTimelineFence() and
>> fb.set_release_fence_fd().
>>
>> After doing so the tearing went away. I'm really not sure
>> what is wrong that requires these hacks. It may be the
>> hikey/hikey960 drm driver is incorrectly reporting or
>> handling something?
>>
>> We do only have a single plane and no hardware compositing on
>> the boards, so we are having to force the gpu to do all the
>> compositing.
>>
>> Any ideas for what a proper fix here would be? Or even just
>> hints on why this might make things work?
>
> So I've maybe started to understand things a bit (though probably not
> much) more here. Again, my apologies for being very new to all this.
>
> This patch actually isn't necessary on the HiKey960, as in the mix of
> testing both boards, I didn't get it working until after the HiKey
> board so I incorrectly assumed this would be needed.
>
> This patch is really only useful to avoid the tearing I see with the
> HiKey board.
>
> The core issue on HiKey is that in
> DrmDisplayCompositor::PrepareFrame(), when we initialize the
> precompositor_ to a new GLWorkerCompositor, the eglCreateContext()
> call fails because we're asking for version 3, which the HiKey's
> utgard mali implementation doesn't support (thus why the
> pre_compositor_->Composite() call always fails in ApplySquash() -
> though still need to figure out why squash_regions are empty).
>
> Asking for version 2 gets us along a bit further, but then I hit other
> trouble with the eglMakeCurrent() call in BeginContext, as passing
> EGL_NO_SURFACE, EGL_NO_SURFACE without EGL_NO_CONTEXT seems to trigger
> an error in the mali GL implementation. However, using EGL_NO_CONTEXT
> causes surfaceflinger to crash, so I just hacked it up to skip the
> eglMakeCurrent call to keep things going.
>
> The next issue that I run into is maybe the more problematic one: The
> vertex and fragment shaders in the glworker.c are marked as "#version
> 300 es", which utgard can't handle (apparently it maxes out at
> "#version 100", but can't seemingly handle other syntax like "in").
>
> So the bigger question I guess I have is: Is the drm_hwcomposer as a
> project targeting a certain minimal GLES version, or is it open to
> supporting older/limited hardware like the utgard level mali?  I can
> look into trying to figure out if what needs to be done can be done in
> a simpler shader language, or alternatively we can add fallback code
> to still allow for fence handling for tear-free functionality w/o the
> GL compositor (which is basically what this hack patch in-effect
> allows).

It requires ES 3.0 'cause no one has implemented anything else...
Doesn't passing CTS since N at least require ES 3.0?

I think having a fallback path that requires no GL is needed. The
fence handling there should be simple pass thru to/from the kernel
display driver.

Rob
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux