Bug 108967

Summary: DRM : eglCreatePbufferSurface failed with error EGL_BAD_MATCH
Product: Mesa Reporter: Vishwanath Chandapur <vishwavtu>
Component: Drivers/Gallium/etnavivAssignee: Etnaviv Developers <etnaviv>
Status: RESOLVED MOVED QA Contact: Etnaviv Developers <etnaviv>
Severity: major    
Priority: medium CC: vishwanath.chandapur
Version: 18.3   
Hardware: ARM   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: Screen
Patch review

Description Vishwanath Chandapur 2018-12-07 12:07:41 UTC
We use qtwebengine ,Currently failing to initialize with 
error:
--------------------------------------------------------------------------------
gl_surface_qt.cpp(480)] eglCreatePbufferSurface failed with error EGL_BAD_MATCH
gl_surface_qt.cpp(480)] eglCreatePbufferSurface failed with error EGL_BAD_MATCH
-------------------------------------------------------------------------------

mesa is configured with platform drm and wayland (Below config).
It seems mesa egl doesn't support "PbufferSurface" for both wayland and drm platform.
But qt is expecting to have pBuffers.
Is possible to have any alternative to fix this issue.

Hardware:imx6qdl
Linux kernel version: 4.14
QT Version: 5.9
mesa Version:17.3.8

mesa-17.3.8- configure: 

        prefix:          /usr
        exec_prefix:     /usr
        libdir:          /usr/lib
        includedir:      /usr/include

        OpenGL:          yes (ES1: yes ES2: yes)

        OSMesa:          no

        DRI platform:    drm
        DRI drivers:     swrast 
        DRI driver dir:  ${libdir}/dri
        GLX:             no

        EGL:             yes
        EGL drivers:     builtin:egl_dri2
        GBM:             yes
        EGL/Vulkan/VL platforms:   wayland drm

        Vulkan drivers:  no

        llvm:            no

        Gallium drivers: etnaviv imx
        Gallium st:      mesa

        HUD extra stats: no
        HUD lmsensors:   no


        Shared libs:     yes
        Static libs:     no
        Shared-glapi:    yes
Comment 1 Vishwanath Chandapur 2018-12-11 10:20:15 UTC
Below is response we got from QT development team.

---------------------------------------------------------------------------------------
WebEngie tryies to create pbuffer, if does not work it will try to use EGL_KHR_surfaceless_context extension. this error means that pbuffer was not created and most likely there is no EGL_KHR_surfaceless_context extension
-------------------------------------------------------------------------------------

Could please let us know EGL_KHR_surfaceless_context is supported by mesa or how to use for surface less .
Comment 2 Tapani Pälli 2018-12-11 11:38:54 UTC
Surfaceless is supported, I can see from your configure that it has not been enabled though. You need to pass "--with-platforms=wayland,drm,surfaceless" (as example) for it to be enabled.
Comment 3 Vishwanath Chandapur 2018-12-12 09:58:09 UTC
I have enabled surfaceless as you mentioned but got same ERROR.

configure: 
        prefix:          /usr
        exec_prefix:     /usr
        libdir:          /usr/lib
        includedir:      /usr/include
        OpenGL:          yes (ES1: yes ES2: yes)
        OSMesa:          no
        DRI platform:    drm
        DRI drivers:     swrast 
        DRI driver dir:  ${libdir}/dri
        GLX:             no
        EGL:             yes
        EGL drivers:     builtin:egl_dri2
        GBM:             yes
        EGL/Vulkan/VL platforms:   wayland drm surfaceless  
        Vulkan drivers:  no
        llvm:            no
        Gallium drivers: etnaviv imx
        Gallium st:      mesa
        HUD extra stats: no
        HUD lmsensors:   no
        Shared libs:     yes
        Static libs:     no
        Shared-glapi:    yes


I few quires 
By enabling surfaceless platform is "EGL_KHR_surfaceless_context" API available.?
                           OR
We need "MESA_platform_surfaceless" in application?
Comment 4 Tapani Pälli 2018-12-12 10:58:52 UTC
(In reply to Vishwanath Chandapur from comment #3)
> I have enabled surfaceless as you mentioned but got same ERROR.
> 
> configure: 
>         prefix:          /usr
>         exec_prefix:     /usr
>         libdir:          /usr/lib
>         includedir:      /usr/include
>         OpenGL:          yes (ES1: yes ES2: yes)
>         OSMesa:          no
>         DRI platform:    drm
>         DRI drivers:     swrast 
>         DRI driver dir:  ${libdir}/dri
>         GLX:             no
>         EGL:             yes
>         EGL drivers:     builtin:egl_dri2
>         GBM:             yes
>         EGL/Vulkan/VL platforms:   wayland drm surfaceless  
>         Vulkan drivers:  no
>         llvm:            no
>         Gallium drivers: etnaviv imx
>         Gallium st:      mesa
>         HUD extra stats: no
>         HUD lmsensors:   no
>         Shared libs:     yes
>         Static libs:     no
>         Shared-glapi:    yes
> 
> 
> I few quires 
> By enabling surfaceless platform is "EGL_KHR_surfaceless_context" API
> available.?
>                            OR
> We need "MESA_platform_surfaceless" in application?

Both of these should be available for you:

EGL_KHR_surfaceless_context
GL_OES_surfaceless_context
Comment 5 Vishwanath Chandapur 2018-12-12 11:27:19 UTC
As of now we are still getting same error "eglCreatePbufferSurface failed with error EGL_BAD_MATCH"

And we are using "EGL_KHR_surfaceless_context" API .Is there any way we can check in mesa is using surfaceless_context.
Comment 6 Tapani Pälli 2018-12-12 11:35:28 UTC
(In reply to Vishwanath Chandapur from comment #5)
> As of now we are still getting same error "eglCreatePbufferSurface failed
> with error EGL_BAD_MATCH"
> 
> And we are using "EGL_KHR_surfaceless_context" API .Is there any way we can
> check in mesa is using surfaceless_context.

Oops sorry it seems I got confused about 'surfaceless' as a platform and 'surfaceless' as an EGL extension. You don't need to enable 'surfaceless' platform in the configure. The EGL_KHR_surfaceless_context should be there, supported by all EGL dri2 based implementations. You may try to catch eglMakeCurrent calls made by Qt to see if it passes EGL_NO_SURFACE for both read and write surface, this would mean that it does not try to initialize a real surface such as pbuffer.
Comment 7 Vishwanath Chandapur 2018-12-20 12:21:26 UTC
Hi,

Qtwebegine has already has support of EGL_KHR_surfaceless_context.

And also when we enabled more debug logs we found mesa driver is failing with below error.when this error occurs we see black square-box on screen  

Note:Same application is working with disabled gpu.

Logs:
*ERROR* BO at index 117 already on submit list.
Comment 8 Vishwanath Chandapur 2019-01-02 14:46:59 UTC
[ 1458.370916] [drm:etnaviv_ioctl_gem_submit] *ERROR* BO at index 96 already on submit list
[ 1465.955216] [drm:etnaviv_ioctl_gem_submit] *ERROR* BO at index 122 already on submit list
[ 1465.988983] [drm:etnaviv_ioctl_gem_submit] *ERROR* BO at index 122 already on submit list
[ 1466.124379] [drm:etnaviv_ioctl_gem_submit] *ERROR* BO at index 122 already on submit list
Comment 9 Vishwanath Chandapur 2019-01-02 14:47:38 UTC
By looking mesa driver is causing the issue with webGL.
Comment 10 Vishwanath Chandapur 2019-01-07 12:02:48 UTC
Hi Etnaviv Team

Could you please us help on this.

With Regards
Vishwa
Comment 11 Vishwanath Chandapur 2019-01-14 06:42:44 UTC
Hi,

We updated mesa version 18.1.9 but issue still occurring.

With Regards
Vishwa
Comment 12 Vishwanath Chandapur 2019-01-15 18:14:13 UTC
Created attachment 143134 [details]
Screen
Comment 13 Vishwanath Chandapur 2019-01-15 18:17:57 UTC
We updated kernel 4.19.15  but issue still occurring.


Summary:
Mesa:18.1.0
Kernel:4.19.15
Qt qtwebengine :5.11
Chrome:65

issue:
Rectangle black box on screen.

Attached screen shot in previous screen.
Comment 14 Vishwanath Chandapur 2019-01-15 22:48:17 UTC
Hi 
I have enabled -DEBUG flag in mesa driver

below part of code is crashing.

Log:
etnaviv_resource.c:634:etna_resource_used: Assertion `(rsc->pending_ctx == ctx) || !rsc->pending_ctx' failed.

Code:
   /* TODO resources can actually be shared across contexts,
    * so I'm not sure a single list-head will do the trick? */
   debug_assert((rsc->pending_ctx == ctx) || !rsc->pending_ctx); 
   list_delinit(&rsc->list);
   list_addtail(&rsc->list, &ctx->used_resources);
   rsc->pending_ctx = ctx;


Need your help to solve this issue
With Regards
Vishwa
Comment 15 Vishwanath Chandapur 2019-01-16 15:06:51 UTC
Hi 

Below part is the rootcause of rectangle box.

Code:
src/gallium/drivers/etnaviv/etnaviv_resource.c
debug_assert((rsc->pending_ctx == ctx) || !rsc->pending_ctx);
Comment 16 Christian Gmeiner 2019-01-16 15:42:41 UTC
Could you try the following patch?

https://patchwork.freedesktop.org/patch/277031/
Comment 17 Vishwanath Chandapur 2019-01-17 12:29:58 UTC
Hi
thanks for patch.
I have tried the patch but still blackbox still appearing.

With Regards
Vishwa
Comment 18 Vishwanath Chandapur 2019-01-23 19:33:09 UTC
Hi Christian,

We tried few patches from below link, there also we didnt get much success. 
https://patchwork.freedesktop.org/project/mesa/list/?submitter=15682

With Regards
Vishwa
Comment 19 Vishwanath Chandapur 2019-01-30 13:19:22 UTC
Hi Christian,

We tried below patch on 3.18.1 ,but still issue is coming.We need to have any patches other than this? 

https://patchwork.freedesktop.org/patch/281925/

[v5] etnaviv: fix resource usage tracking across different pipe_context's


With Regards
Vishwa
Comment 20 Vishwanath Chandapur 2019-02-08 09:31:12 UTC
Created attachment 143336 [details] [review]
Patch review

Hi,

I have attached a patch with this we re not seeing black-screen, could you pleas review.

With Regards
Vishwa
Comment 21 Christian Gmeiner 2019-02-08 09:44:06 UTC
I have planed to push that one https://patchwork.freedesktop.org/patch/281925/ soon-ish. Do you have a simple qt5 demo app that triggers this problem? Maybe somewhere on github etc?
Comment 22 Vishwanath Chandapur 2019-02-08 10:02:44 UTC
Hi Christian,

Below is the app based on qtwebengine. 
https://code.qt.io/cgit/qt-apps/qtwebbrowser.git/

We use qtwebengine qt5.11

With Regards
Vishwa
Comment 23 Vishwanath Chandapur 2019-02-11 12:23:23 UTC
Hi Christian,

Did you get chance to review our patch.
We tested for 2days we are NOT seeing any black screen as of now.

We would like know from your end any side effects using that patch.

With Regards
VIshwa
Comment 24 GitLab Migration User 2019-09-18 18:37:04 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/mesa/mesa/issues/262.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.