[Mesa-users] Give A directFB surface to EGL

刘涛 liutao586 at 163.com
Thu Oct 22 04:22:09 PDT 2015


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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-users/attachments/20151022/616c5875/attachment.html>


More information about the mesa-users mailing list