[Mesa-users] Give A directFB surface to EGL

Albert Freeman albertwdfreeman at gmail.com
Thu Oct 22 04:27:16 PDT 2015


On 22 October 2015 at 21:22, 刘涛 <liutao586 at 163.com> wrote:
> The RAM on my board is too small to debug my program. So I want to debug my
> program on my PC to ensure my code is correct, then port it to my board.
>
> 在 2015-10-22 18:39:11,"Albert Freeman" <albertwdfreeman at gmail.com> 写道:
>>On 22 October 2015 at 19:19, 刘涛 <liutao586 at 163.com> wrote:
>>> Thank you very much.  My board is only support DirectFB, EGL and GLES2,
>>> and
>>> the route "DirectFB->EGL->GLES2" works good on it, but it is hard to
>>> debug
>>> on my board. So I want to program and debug the route on my PC.  Is it
>>> noway?
>>>
>>> 在 2015-10-22 16:32:58,"Albert Freeman" <albertwdfreeman at gmail.com> 写道:
>>>>On 22 October 2015 at 15:35, 刘涛 <liutao586 at 163.com> wrote:
>>>>> Hi
>>>>>    I‘m trying to give a directFB surface to eglCreateWindowSurface(),
>>>>> like
>>>>> below:
>>>>>     //1 create Directfb Surface
>>>>>     DFBDisplayLayerConfig dlc;
>>>>>     DFBSurfaceDescription dsc;
>>>>>     DFBWindowDescription dsc_w;
>>>>>     DirectFBInit(0, NULL);
>>>>>     DirectFBCreate(&_pDFB);
>>>>>     _pDFB->SetCooperativeLevel(_pDFB, DFSCL_FULLSCREEN);
>>>>>     memset(&dsc, 0, sizeof(dsc));
>>>>>     dsc.flags  = (DFBSurfaceDescriptionFlags)(DSDESC_CAPS);
>>>>>     dsc.caps   = (DFBSurfaceCapabilities)(DSCAPS_PRIMARY |
>>>>> DSCAPS_DOUBLE|DSCAPS_GL);
>>>>>     DFBCHECK(_pDFB->CreateSurface(_pDFB, &dsc, &_pDFB_surface));
>>>>>
>>>>>     //2 create egl surface
>>>>>     EGLDisplay eglDisplay = EGL_NO_DISPLAY;
>>>>>     EGLint iMajorVersion, iMinorVersion;
>>>>>      EGLint configAttribs[] =
>>>>>     {
>>>>>         EGL_RED_SIZE,          8,
>>>>>         EGL_GREEN_SIZE,      8,
>>>>>         EGL_BLUE_SIZE,          8,
>>>>>         EGL_ALPHA_SIZE,      8,
>>>>>         EGL_DEPTH_SIZE,      24,
>>>>>         EGL_STENCIL_SIZE,      8,
>>>>>         EGL_SAMPLES,          0,
>>>>>         EGL_SURFACE_TYPE,     EGL_WINDOW_BIT,
>>>>>         EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
>>>>>         EGL_NONE
>>>>>     };
>>>>>     EGLConfig  eglConfig  = 0;
>>>>>     EGLint iConfigs = 0;
>>>>>
>>>>>     eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
>>>>>     eglInitialize(eglDisplay, &iMajorVersion, &iMinorVersion);
>>>>>     eglBindAPI(EGL_OPENGL_ES_API);
>>>>>     eglChooseConfig(eglDisplay, configAttribs, &eglConfig, 1,
>>>>> &iConfigs);
>>>>>     eglSurface = eglCreateWindowSurface(eglDisplay, eglConfig,
>>>>> (EGLNativeWindowType)_pDFB_surface, NULL);
>>>>>
>>>>>    But it failed and got 0x3003 error code.
>>>>>     Any idea about that?
>>>>> Env:
>>>>>     Ubuntu 14..04.3, Mesa-10.1.3, DirectFB-1.7.6(use system x11)
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> mesa-users mailing list
>>>>> mesa-users at lists.freedesktop.org
>>>>> http://lists.freedesktop.org/mailman/listinfo/mesa-users
>>>>>
>>>>You can't use EGL with DirectFB.
>>>>DirectFB had a DirectFBGL "extension" for 3D with DirectFB that has
>>>>apparently died.
>>>>So you can't get 3D hardware acceleration with DirectFB.
>>>>DirectFB uses the older fbdev legacy kernel stuff (which the
>>>>replacement drm at least partially emulates). Although fbdev supports
>>>>more hardware than the drm. If you are on hardware that doesn't
>>>>support drm then the best approach I can think of is to software
>>>>render OpenGL and then somehow obtain the texture rendered to and
>>>>somehow send that as a 2D image with something that can draw to a
>>>>fbdev framebuffer (such as DirectFB) (don't ask me how, ask someone
>>>>else (best to ask on #dri-devel irc channel)). For someone like you it
>>>>is best to use the latest git (not stable) version of mesa.
>>>>If your hardware supports drm, your choices for 3D are:
>>>>1. Use GL (optionally ES) & EGL & drm & gbm with mesa and without
>>>>DirectFB (see eglkms.c demo in mesa demos and "man -k drm" and maybe
>>>>http://events.linuxfoundation.org/sites/events/files/slides/brezillon-drm-kms.pdf)
>>>>(this runs without a window system and works much like DirectFB but I
>>>>believe you must use OpenGL (optionally ES) for 2D too (although you
>>>>MIGHT be able to setup a hardware overlay for video)). If you are not
>>>>using a relatively modern radeon, intel or nvidia card software
>>>>rendering is probably the best way to go here (using softpipe (or if
>>>>you are on x86 only: llvmpipe)).
>>>>2. Use Wayland with EGL and mesa and without DirectFB.
>>>>3. Use X and without DirectFB with (mesa OR proprietary drivers).
>>>>
>>>>How to force softpipe:
>>>>"export GALLIUM_DRIVER=softpipe" and
>>>>"export LIBGL_ALWAYS_SOFTWARE=1". You will need to add swrast to the
>>>>gallium (NOT dri) mesa compile option (e.g.
>>>>--with-gallium-drivers=swrast) and
>>>>recompile mesa.
>>>>
>>>>You can also force llvmpipe with "export GALLIUM_DRIVER=llvmpipe".
>>>>Actually "export LIBGL_ALWAYS_SOFTWARE=1" is only required if you have
>>>>a non gallium mesa driver installed (such as the i965 intel driver).
>>>>
>>>>I hope I didn't forget anything.
>>>
>>>
>>>
>>>
>>Oh sorry, it does seem DirectFB can be used with EGL (I have never
>>used DirectFB before and the information I found implied that it would
>>be tricky to interface with EGL).
>>What do you mean by debug? Display the framebuffer (drawn on your
>>embedded board) on your PC?
>
>
>
>
On 22 October 2015 at 20:39, Albert Freeman <albertwdfreeman at gmail.com> wrote:
> On 22 October 2015 at 19:19, 刘涛 <liutao586 at 163.com> wrote:
>> Thank you very much.  My board is only support DirectFB, EGL and GLES2, and
>> the route "DirectFB->EGL->GLES2" works good on it, but it is hard to debug
>> on my board. So I want to program and debug the route on my PC.  Is it
>> noway?
>>
>> 在 2015-10-22 16:32:58,"Albert Freeman" <albertwdfreeman at gmail.com> 写道:
>>>On 22 October 2015 at 15:35, 刘涛 <liutao586 at 163.com> wrote:
>>>> Hi
>>>>    I‘m trying to give a directFB surface to eglCreateWindowSurface(),
>>>> like
>>>> below:
>>>>     //1 create Directfb Surface
>>>>     DFBDisplayLayerConfig dlc;
>>>>     DFBSurfaceDescription dsc;
>>>>     DFBWindowDescription dsc_w;
>>>>     DirectFBInit(0, NULL);
>>>>     DirectFBCreate(&_pDFB);
>>>>     _pDFB->SetCooperativeLevel(_pDFB, DFSCL_FULLSCREEN);
>>>>     memset(&dsc, 0, sizeof(dsc));
>>>>     dsc.flags  = (DFBSurfaceDescriptionFlags)(DSDESC_CAPS);
>>>>     dsc.caps   = (DFBSurfaceCapabilities)(DSCAPS_PRIMARY |
>>>> DSCAPS_DOUBLE|DSCAPS_GL);
>>>>     DFBCHECK(_pDFB->CreateSurface(_pDFB, &dsc, &_pDFB_surface));
>>>>
>>>>     //2 create egl surface
>>>>     EGLDisplay eglDisplay = EGL_NO_DISPLAY;
>>>>     EGLint iMajorVersion, iMinorVersion;
>>>>      EGLint configAttribs[] =
>>>>     {
>>>>         EGL_RED_SIZE,          8,
>>>>         EGL_GREEN_SIZE,      8,
>>>>         EGL_BLUE_SIZE,          8,
>>>>         EGL_ALPHA_SIZE,      8,
>>>>         EGL_DEPTH_SIZE,      24,
>>>>         EGL_STENCIL_SIZE,      8,
>>>>         EGL_SAMPLES,          0,
>>>>         EGL_SURFACE_TYPE,     EGL_WINDOW_BIT,
>>>>         EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
>>>>         EGL_NONE
>>>>     };
>>>>     EGLConfig  eglConfig  = 0;
>>>>     EGLint iConfigs = 0;
>>>>
>>>>     eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
>>>>     eglInitialize(eglDisplay, &iMajorVersion, &iMinorVersion);
>>>>     eglBindAPI(EGL_OPENGL_ES_API);
>>>>     eglChooseConfig(eglDisplay, configAttribs, &eglConfig, 1, &iConfigs);
>>>>     eglSurface = eglCreateWindowSurface(eglDisplay, eglConfig,
>>>> (EGLNativeWindowType)_pDFB_surface, NULL);
>>>>
>>>>    But it failed and got 0x3003 error code.
>>>>     Any idea about that?
>>>> Env:
>>>>     Ubuntu 14..04.3, Mesa-10.1.3, DirectFB-1.7.6(use system x11)
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> mesa-users mailing list
>>>> mesa-users at lists.freedesktop.org
>>>> http://lists.freedesktop.org/mailman/listinfo/mesa-users
>>>>
>>>You can't use EGL with DirectFB.
>>>DirectFB had a DirectFBGL "extension" for 3D with DirectFB that has
>>>apparently died.
>>>So you can't get 3D hardware acceleration with DirectFB.
>>>DirectFB uses the older fbdev legacy kernel stuff (which the
>>>replacement drm at least partially emulates). Although fbdev supports
>>>more hardware than the drm. If you are on hardware that doesn't
>>>support drm then the best approach I can think of is to software
>>>render OpenGL and then somehow obtain the texture rendered to and
>>>somehow send that as a 2D image with something that can draw to a
>>>fbdev framebuffer (such as DirectFB) (don't ask me how, ask someone
>>>else (best to ask on #dri-devel irc channel)). For someone like you it
>>>is best to use the latest git (not stable) version of mesa.
>>>If your hardware supports drm, your choices for 3D are:
>>>1. Use GL (optionally ES) & EGL & drm & gbm with mesa and without
>>>DirectFB (see eglkms.c demo in mesa demos and "man -k drm" and maybe
>>>http://events.linuxfoundation.org/sites/events/files/slides/brezillon-drm-kms.pdf)
>>>(this runs without a window system and works much like DirectFB but I
>>>believe you must use OpenGL (optionally ES) for 2D too (although you
>>>MIGHT be able to setup a hardware overlay for video)). If you are not
>>>using a relatively modern radeon, intel or nvidia card software
>>>rendering is probably the best way to go here (using softpipe (or if
>>>you are on x86 only: llvmpipe)).
>>>2. Use Wayland with EGL and mesa and without DirectFB.
>>>3. Use X and without DirectFB with (mesa OR proprietary drivers).
>>>
>>>How to force softpipe:
>>>"export GALLIUM_DRIVER=softpipe" and
>>>"export LIBGL_ALWAYS_SOFTWARE=1". You will need to add swrast to the
>>>gallium (NOT dri) mesa compile option (e.g.
>>>--with-gallium-drivers=swrast) and
>>>recompile mesa.
>>>
>>>You can also force llvmpipe with "export GALLIUM_DRIVER=llvmpipe".
>>>Actually "export LIBGL_ALWAYS_SOFTWARE=1" is only required if you have
>>>a non gallium mesa driver installed (such as the i965 intel driver).
>>>
>>>I hope I didn't forget anything.
>>
>>
>>
>>
> Oh sorry, it does seem DirectFB can be used with EGL (I have never
> used DirectFB before and the information I found implied that it would
> be tricky to interface with EGL).
> What do you mean by debug? Display the framebuffer (drawn on your
> embedded board) on your PC?
Oh, you mean use DirectFB with latest mesa 3D drivers.
You won't be able to use hardware acceleration with DirectFB, although
someone wrote a DirectFB "backend" for softpipe/llvmpipe a while ago
(2013):
http://lists.freedesktop.org/archives/mesa-dev/2013-April/037768.html
You may have to download an older revision of mesa and then apply the
patch (as there is no DirectFB backend in the latest revision of
mesa). And maybe they didn't develop all the infrastructure required,
so it might not be possible.
I will try to get DirectFB working on my system, I will need to
compile a custom kernel, so it will take a little bit of time.
Hardware acceleration (using modern versions of radeon, nvidia, intel
cards) seems out of the question though.


More information about the mesa-users mailing list