This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux: SgxFrmcpyLink : eglChooseConfig() success, but return 0 config.

Tool/software: Linux

Hi All,

We use custom h/w and software based on DRA74X and PROCESSOR-SDK-VISION 3.02, and we modify the SDK code to make the display route to Linux.

We are using SgxFrmcpyLink and with this we can get the offline rendered frame by DMABUF. However the solution return error because of eglChooseConfig() return 0 matching config, and eglCreateContext() failed with error code (0x3005). The reason for the problem is that there is no matching config for Specific attributes.

We found a total of  22 configs, below is the details.

 EGL: version 1.4
 EGL: INFO: eglGetConfigs 22 configs success.
 EGL: INFO: eglGetConfigs success...
 EGL: INFO: CONFIG: 0: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 8 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 1: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 8 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
 EGL: INFO: EGL_DEPTH_SIZE: 0 success...
 EGL: INFO: CONFIG: 2: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 8 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 3: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 4: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
 EGL: INFO: EGL_DEPTH_SIZE: 0 success...
 EGL: INFO: CONFIG: 5: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 6: --->
 EGL: INFO: EGL_RED_SIZE: 5 success...
 EGL: INFO: EGL_GREEN_SIZE: 6 success...
 EGL: INFO: EGL_BLUE_SIZE: 5 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 7: --->
 EGL: INFO: EGL_RED_SIZE: 5 success...
 EGL: INFO: EGL_GREEN_SIZE: 6 success...
 EGL: INFO: EGL_BLUE_SIZE: 5 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
 EGL: INFO: EGL_DEPTH_SIZE: 0 success...
 EGL: INFO: CONFIG: 8: --->
 EGL: INFO: EGL_RED_SIZE: 5 success...
 EGL: INFO: EGL_GREEN_SIZE: 6 success...
 EGL: INFO: EGL_BLUE_SIZE: 5 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 9: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 8 success...
 EGL: INFO: EGL_SURFACE_TYPE: 1 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 3 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 10: --->
 EGL: INFO: EGL_RED_SIZE: 5 success...
 EGL: INFO: EGL_GREEN_SIZE: 6 success...
 EGL: INFO: EGL_BLUE_SIZE: 5 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 1 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 3 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 11: --->
 EGL: INFO: EGL_RED_SIZE: 4 success...
 EGL: INFO: EGL_GREEN_SIZE: 4 success...
 EGL: INFO: EGL_BLUE_SIZE: 4 success...
 EGL: INFO: EGL_ALPHA_SIZE: 4 success...
 EGL: INFO: EGL_SURFACE_TYPE: 1 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 3 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 12: --->
 EGL: INFO: EGL_RED_SIZE: 5 success...
 EGL: INFO: EGL_GREEN_SIZE: 5 success...
 EGL: INFO: EGL_BLUE_SIZE: 5 success...
 EGL: INFO: EGL_ALPHA_SIZE: 1 success...
 EGL: INFO: EGL_SURFACE_TYPE: 1 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 3 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 13: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 8 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 14: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 8 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
 EGL: INFO: EGL_DEPTH_SIZE: 0 success...
 EGL: INFO: CONFIG: 15: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 8 success...
 EGL: INFO: EGL_SURFACE_TYPE: 4 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 16: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 17: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
 EGL: INFO: EGL_DEPTH_SIZE: 0 success...
 EGL: INFO: CONFIG: 18: --->
 EGL: INFO: EGL_RED_SIZE: 8 success...
 EGL: INFO: EGL_GREEN_SIZE: 8 success...
 EGL: INFO: EGL_BLUE_SIZE: 8 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 4 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 19: --->
 EGL: INFO: EGL_RED_SIZE: 5 success...
 EGL: INFO: EGL_GREEN_SIZE: 6 success...
 EGL: INFO: EGL_BLUE_SIZE: 5 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...
 EGL: INFO: CONFIG: 20: --->
 EGL: INFO: EGL_RED_SIZE: 5 success...
 EGL: INFO: EGL_GREEN_SIZE: 6 success...
 EGL: INFO: EGL_BLUE_SIZE: 5 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 5 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
 EGL: INFO: EGL_DEPTH_SIZE: 0 success...
 EGL: INFO: CONFIG: 21: --->
 EGL: INFO: EGL_RED_SIZE: 5 success...
 EGL: INFO: EGL_GREEN_SIZE: 6 success...
 EGL: INFO: EGL_BLUE_SIZE: 5 success...
 EGL: INFO: EGL_ALPHA_SIZE: 0 success...
 EGL: INFO: EGL_SURFACE_TYPE: 4 success...
 EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
 EGL: INFO: EGL_DEPTH_SIZE: 24 success...

The attribute is below.

const EGLint attribs[] = {
       EGL_RED_SIZE, 1,
       EGL_GREEN_SIZE, 1,
       EGL_BLUE_SIZE, 1,
       EGL_ALPHA_SIZE, 0,
       EGL_SURFACE_TYPE, EGL_PIXMAP_BIT,
       EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
       EGL_DEPTH_SIZE, 8,
       EGL_NONE
    };
#define EGL_PBUFFER_BIT			0x0001	/* EGL_SURFACE_TYPE mask bits */
#define EGL_PIXMAP_BIT			0x0002	/* EGL_SURFACE_TYPE mask bits */
#define EGL_WINDOW_BIT			0x0004	/* EGL_SURFACE_TYPE mask bits */


#define EGL_OPENGL_ES_BIT		0x0001	/* EGL_RENDERABLE_TYPE mask bits */
#define EGL_OPENVG_BIT			0x0002	/* EGL_RENDERABLE_TYPE mask bits */
#define EGL_OPENGL_ES2_BIT		0x0004	/* EGL_RENDERABLE_TYPE mask bits */
#define EGL_OPENGL_BIT			0x0008	/* EGL_RENDERABLE_TYPE mask bits */

We do a little test on demo board(DRA7XXEVM) with running PROCESSOR-SDK-VISION3.02 or PROCESSOR-SDK-LINUX3.04. eglChooseConfig() return 3 matching configs successfully.

We have compared the kernel code and the graphics driver, they are the same. Only a little bit because of different h/w differences on device tree.

Is there anyone who can tell me how to solve this problem? 

regards, Jaye.

  • Hi Jaye,

    can you check if the discussion of a similar issue in this thread can help:
    e2e.ti.com/.../675763

    Regards,
    Yordan
  • Hi Yordan,

    Thank you for your reply.

    This thread is posted by my colleague. His description is not exactly right. I think it is necessary to post another thread to discuss this issue. I would advise my colleague to close that thread.

    The key to this issue is how eglGetConfigs() woks. where did eglGetConfigs() get those configs ?

    regards,Jaye.

  • Hi Jaye,

    I pinged the experts to look at the issue.

    Regards,
    Yordan
  • Hi Jaye,

    Let me understand.

    Are you saying you are using the same eglChooseConfig() code on Processor-SDK-Vision-3.02 and Processor-SDK-Linux-Automotive-3.04 but see different results on each?

    Regards,
    Anand
  • Hi Anand,

    I test eglChooseConfig() and eglGetConfigs() code on both Processor-SDK-Vision-3.02 and Processor-SDK-Linux-Automotive-3.04 on DRA7XXEVM and see the same result. here is the result

    failed to load module: /usr/lib/gbm/gbm_dri.so: cannot open shared object file: No such file or directory
    failed to load module: /usr/lib/gbm/gbm_gallium_drm.so: cannot open shared object file: No such file or directory
    loaded module : gbm_pvr.so
    found valid GBM backend : gbm_pvr.so
     EGL: version 1.4
     EGL: INFO: eglGetConfigs 22 configs success.
     EGL: INFO: eglGetConfigs success...
     EGL: INFO: CONFIG: 0: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 1: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 0 success...
     EGL: INFO: CONFIG: 2: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 3: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 4: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 0 success...
     EGL: INFO: CONFIG: 5: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 6: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 7: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 0 success...
     EGL: INFO: CONFIG: 8: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 9: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 1 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 3 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 10: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 1 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 3 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 11: --->
     EGL: INFO: EGL_RED_SIZE: 4 success...
     EGL: INFO: EGL_GREEN_SIZE: 4 success...
     EGL: INFO: EGL_BLUE_SIZE: 4 success...
     EGL: INFO: EGL_ALPHA_SIZE: 4 success...
     EGL: INFO: EGL_SURFACE_TYPE: 1 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 3 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 12: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 5 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 1 success...
     EGL: INFO: EGL_SURFACE_TYPE: 1 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 3 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 13: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 14: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 0 success...
     EGL: INFO: CONFIG: 15: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 6 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 16: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 17: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 0 success...
     EGL: INFO: CONFIG: 18: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 6 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 19: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 20: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 0 success...
     EGL: INFO: CONFIG: 21: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 6 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: eglChooseConfig() success. Get 3 configs... !!!
     EGL: INFO: MATCH CONFIG: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 7 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...

     

    Then, I test the same code on my custom board which running PROCESSOR-SDK-LINUX-3.04 kernel, but see different results, here is the result 

    failed to load module: /usr/lib/gbm/gbm_dri.so: cannot open shared object file: No such file or directory
    failed to load module: /usr/lib/gbm/gbm_gallium_drm.so: cannot open shared object file: No such file or directory
    loaded module : gbm_pvr.so
    found valid GBM backend : gbm_pvr.so
     EGL: version 1.4
     EGL: INFO: eglGetConfigs 22 configs success.
     EGL: INFO: eglGetConfigs success...
     EGL: INFO: CONFIG: 0: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 1: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 0 success...
     EGL: INFO: CONFIG: 2: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 3: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 4: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 0 success...
     EGL: INFO: CONFIG: 5: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 6: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 7: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 0 success...
     EGL: INFO: CONFIG: 8: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 1 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 9: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 1 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 3 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 10: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 1 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 3 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 11: --->
     EGL: INFO: EGL_RED_SIZE: 4 success...
     EGL: INFO: EGL_GREEN_SIZE: 4 success...
     EGL: INFO: EGL_BLUE_SIZE: 4 success...
     EGL: INFO: EGL_ALPHA_SIZE: 4 success...
     EGL: INFO: EGL_SURFACE_TYPE: 1 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 3 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 12: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 5 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 1 success...
     EGL: INFO: EGL_SURFACE_TYPE: 1 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 3 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 13: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 14: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 0 success...
     EGL: INFO: CONFIG: 15: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 8 success...
     EGL: INFO: EGL_SURFACE_TYPE: 4 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 16: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 17: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 0 success...
     EGL: INFO: CONFIG: 18: --->
     EGL: INFO: EGL_RED_SIZE: 8 success...
     EGL: INFO: EGL_GREEN_SIZE: 8 success...
     EGL: INFO: EGL_BLUE_SIZE: 8 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 4 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 19: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: CONFIG: 20: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 5 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 0 success...
     EGL: INFO: CONFIG: 21: --->
     EGL: INFO: EGL_RED_SIZE: 5 success...
     EGL: INFO: EGL_GREEN_SIZE: 6 success...
     EGL: INFO: EGL_BLUE_SIZE: 5 success...
     EGL: INFO: EGL_ALPHA_SIZE: 0 success...
     EGL: INFO: EGL_SURFACE_TYPE: 4 success...
     EGL: INFO: EGL_RENDERABLE_TYPE: 4 success...
     EGL: INFO: EGL_DEPTH_SIZE: 24 success...
     EGL: INFO: eglChooseConfig() success. Get 0 configs... !!!
     EGL: INFO: MATCH CONFIG: --->
     EGL: ERROR: EGL_RED_SIZE: failed.
     EGL: ERROR: EGL_GREEN_SIZE: failed.
     EGL: ERROR: EGL_BLUE_SIZE: failed.
     EGL: ERROR: EGL_ALPHA_SIZE: failed.
     EGL: ERROR: EGL_SURFACE_TYPE: failed.
     EGL: ERROR: EGL_RENDERABLE_TYPE: failed.
     EGL: ERROR: EGL_DEPTH_SIZE: failed.
     EGL: after eglCreateContext() eglError (0x3005)
     EGL: eglCreateContext() failed !!!

     

    The difference between the two is "EGL_SURFACE_TYPE" value, my board has no "EGL_PIXMAP_BIT" attribute. How to enable this attribute?

     

    My test code is

    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <assert.h>
    #include <drm.h>
    #include <omap_drmif.h>
    
    #include <xf86drm.h>
    #include <xf86drmMode.h>
    #include <gbm.h>
    
    
    #include <EGL/egl.h>
    #include <EGL/eglext.h>
    #include <GLES2/gl2.h>
    #include <GLES2/gl2ext.h>
    
    
    int fd = -1;
    struct gbm_device *dev = NULL;
    
    
    void eglCheckError(const char* op, EGLBoolean returnVal) {
       EGLint error;
    
       if (returnVal != EGL_TRUE) {
           fprintf(stderr, " EGL: %s() returned %d\n", op, returnVal);
       }
    
       for (error = eglGetError(); error != EGL_SUCCESS; error = eglGetError()) {
           fprintf(stderr, " EGL: after %s() eglError (0x%x)\n", op, error);
       }
    }
    
    
    int search_display(int drmFd)
    {
    #define SYSTEM_DRM_MAX_DISPLAYS     (4)
    #define SYSTEM_DRM_MAX_PLANES       (4)
    
    	drmModeRes *resources;
    	drmModeConnector *connector = NULL;
    	drmModeEncoder *encoder = NULL;
    	int i, j;
    	int display_found = 0;
    	int displayWidth = 1280;
    	int displayHeight = 720;
    
    	uint32_t resource_id;
    	uint32_t numDisplays;
        uint32_t curDisplay;
        drmModeModeInfo *mode[SYSTEM_DRM_MAX_DISPLAYS];
        uint32_t crtc_id[SYSTEM_DRM_MAX_DISPLAYS];
        uint32_t connector_id[SYSTEM_DRM_MAX_DISPLAYS];
        uint32_t encoders[SYSTEM_DRM_MAX_DISPLAYS];
    	drmModeConnector *connectors[SYSTEM_DRM_MAX_DISPLAYS];
    	uint32_t plane_id[SYSTEM_DRM_MAX_PLANES];
    	int numPlanes;
    	int grpx_plane_id;
    	int fc_plane_id;
    	int canUsePlanes;
    
    	resources = drmModeGetResources(drmFd);
    	if (resources==NULL) {
    		fprintf(stderr, " DRM: ERROR: drmModeGetResources() failed (%s) !!!\n", strerror(errno));
    		return -1;
    	}
    	resource_id = (uint32_t) resources;
    
    	/* find a connected connector: */
    	numDisplays = 0;
    	curDisplay  = 0;
    	for (i = 0; i < resources->count_connectors; i++) {
    		connector = drmModeGetConnector(drmFd, resources->connectors[i]);
    		if (connector->connection == DRM_MODE_CONNECTED) {
    			/* choose the first supported mode */
    			mode[numDisplays] = &connector->modes[0];
    			connector_id[numDisplays] = connector->connector_id;
    
    			for (j=0; j<resources->count_encoders; j++) {
    				encoder = drmModeGetEncoder(drmFd, resources->encoders[j]);
    				if (encoder->encoder_id == connector->encoder_id)
    				   break;
    
    				drmModeFreeEncoder(encoder);
    				encoder = NULL;
    			}
    
    			if (encoder==NULL) {
    				fprintf(stderr, " DRM: ERROR: drmModeGetEncoder() did not find any "
    						  "encoder connected to connector ID [%d] !!!\n",
    						  connector->connector_id
    						  );
    				return -1;
    			}
    
    			encoders[numDisplays]	= (uint32_t) encoder;
    			crtc_id[numDisplays]	= encoder->crtc_id;
    			connectors[numDisplays] = connector;
    
    
    			/*Lets see what folks tell about this. currently a security check*/
    			assert(displayWidth != 0 && displayHeight != 0);
    
    		   /*No connector based selection supported. we dont use it anyway.*/
    		   /*if (display_found == FALSE && (pPrm->connector_id != -1) && (pPrm->connector_id == pObj->connector_id[pObj->numDisplays]))
    		   {
    			   pObj->curDisplay = pObj->numDisplays;
    			   display_found = TRUE;
    		   }*/
    		   if(display_found == 0 && (displayWidth != 0 || displayHeight != 0))
    		   
    			   for (j = 0; j < connector->count_modes; j++) {
    				   if(connector->modes[j].hdisplay == displayWidth &&
    						   connector->modes[j].vdisplay == displayHeight)
    				   {
    					   curDisplay = numDisplays;
    					   mode[curDisplay] = &connector->modes[j];
    					   display_found = 1;
    					   break;
    				   }
    			   }
    
    		}
    
    		if(display_found == 1) {
    			break;
    
    		/*if we go on and choose the highest display, Who knows, it can be a 4K as well.*/
    		/*We dont have that big a buffer incoming.										*/
    
    		/*
    		if(pPrm->connector_id==-1 &&  pPrm->displayWidth == 0 && pPrm->displayHeight == 0)
    		{
    			maxRes = pObj->mode[pObj->curDisplay]->vdisplay * pObj->mode[pObj->curDisplay]->hdisplay;
    			curRes = pObj->mode[pObj->numDisplays]->vdisplay * pObj->mode[pObj->numDisplays]->hdisplay;
    			if (curRes > maxRes)
    			{
    				pObj->curDisplay = pObj->numDisplays;
    			}
    		}
    		*/
    
    
    			numDisplays++;
    		}
    		else
    		{
    		   drmModeFreeConnector(connector);
    		}
    	}
    
    
    	if (display_found == 0) {
    		fprintf(stderr, " DRM: ERROR: No connected connector found !!!\n");
    		return -1;
    	}
    	else {
    			fprintf(stdout, "### Encoder [%d]: RESC = %d, Connector = %d\n", encoders[curDisplay], resource_id, connectors[curDisplay]->connector_id);
    			fprintf(stdout, "### Display [%d]: CRTC = %d, Connector = %d/%d\n", curDisplay, crtc_id[curDisplay], connector_id[curDisplay]);
    			fprintf(stdout, "   Mode chosen [%s] : Clock => %d, Vertical refresh => %d, Type => %d\n", mode[curDisplay]->name, mode[curDisplay]->clock, mode[curDisplay]->vrefresh, mode[curDisplay]->type);
    			fprintf(stdout, "   Horizontal => %d, %d, %d, %d, %d\n", mode[curDisplay]->hdisplay, mode[curDisplay]->hsync_start, mode[curDisplay]->hsync_end, mode[curDisplay]->htotal, mode[curDisplay]->hskew);
    			fprintf(stdout, "   Vertical => %d, %d, %d, %d, %d\n", mode[curDisplay]->vdisplay, mode[curDisplay]->vsync_start, mode[curDisplay]->vsync_end, mode[curDisplay]->vtotal, mode[curDisplay]->vscan);
    	}
    
    	canUsePlanes = 0;
    	drmModePlaneRes *plane_resource_id = drmModeGetPlaneResources(drmFd);
    	if(plane_resource_id)
    		canUsePlanes = 1;
    	numPlanes = 0;
    	assert(canUsePlanes);
    
    	int pcount;
    	unsigned int curr_crtc = 0;
    	for (pcount = 0; pcount < plane_resource_id->count_planes; pcount++) {
    		int ccount;
    		drmModePlane *ovr = drmModeGetPlane(drmFd, plane_resource_id->planes[pcount]);
    		for (ccount = 0; ccount < resources->count_crtcs; ccount++) {
    			if (crtc_id[curDisplay] == resources->crtcs[ccount]) {
    				curr_crtc = (1 << ccount);
    				break;
    			}
    		}
    
    		if (ovr->possible_crtcs & curr_crtc) {
    			plane_id[numPlanes] = ovr->plane_id;
    			numPlanes++;
    		}
    
    		drmModeFreePlane(ovr);
    	}
    
    	assert(numPlanes >= 2);
    	grpx_plane_id    = plane_id[0];
    	fc_plane_id	   = plane_id[1];
    
    	drmModeFreePlaneResources (plane_resource_id);
    	/*this is also too much hardcoding*/
    	drmModeObjectSetProperty(drmFd, grpx_plane_id, DRM_MODE_OBJECT_PLANE , 7, 3);
    	drmModeObjectSetProperty(drmFd, fc_plane_id, DRM_MODE_OBJECT_PLANE , 7, 2);
    
    	drmModeObjectSetProperty(drmFd, crtc_id[curDisplay], DRM_MODE_OBJECT_CRTC , 7, 0);
    
    	drmModeObjectSetProperty(drmFd, crtc_id[curDisplay], DRM_MODE_OBJECT_CRTC , 12, 0x00000000);
    	drmModeObjectSetProperty(drmFd, crtc_id[curDisplay], DRM_MODE_OBJECT_CRTC , 11, 2);
    
    	return 0;
    }
    
    
    
    EGLNativeDisplayType get_native_display ()
    {
    	if(fd == -1) {
    		fd = drmOpen("omapdrm", NULL);//open("/dev/dri/card0", O_RDWR);//
    	}
    	if(fd > 0 && dev == NULL) {
            search_display(fd);
            
    		dev = gbm_create_device(fd);
    	}
    
    	return (EGLNativeDisplayType)dev;
    }
    
    int main(int argc, char *argv[])
    {
        EGLNativeDisplayType nativeDisplay;
        EGLDisplay display;
        EGLContext context;
        EGLConfig config;
        EGLBoolean retVal = EGL_FALSE;
        EGLint majorVersion;
        EGLint minorVersion;
    
        const EGLint attribs[] = {
               EGL_RED_SIZE, 1,
               EGL_GREEN_SIZE, 1,
               EGL_BLUE_SIZE, 1,
               EGL_ALPHA_SIZE, 0,
               EGL_SURFACE_TYPE, EGL_PIXMAP_BIT,
               EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
               EGL_DEPTH_SIZE, 8,
               EGL_NONE
        };
        EGLint context_attribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
    
        nativeDisplay = get_native_display();
        display = eglGetDisplay(nativeDisplay);
        eglCheckError("eglGetDisplay", EGL_TRUE);
        if (display == EGL_NO_DISPLAY) {
           fprintf(stderr, " EGL: ERROR: eglGetDisplay() returned EGL_NO_DISPLAY !!!\n");
           return -1;
        }
        
        retVal = eglInitialize(display, &majorVersion, &minorVersion);
        eglCheckError("eglInitialize", retVal);
        fprintf(stdout, " EGL: version %d.%d\n", majorVersion, minorVersion);
        if (retVal != EGL_TRUE) {
           fprintf(stderr, " EGL: eglInitialize() failed !!!\n");
           return -1;
        }
    
        if (!eglBindAPI(EGL_OPENGL_ES_API)) {
            fprintf(stderr, " EGL: ERROR - failed to bind api EGL_OPENGL_ES_API\n");
            return -1;
        }
        
        EGLint val;
    	EGLint numConfigs = 0;
    	EGLConfig configs[32];
    	EGLint configSize;
    	EGLint numChooseconfigs = 0;
    	if (!eglGetConfigs(display, NULL, 0, &numConfigs))
    	{
            fprintf(stderr, " EGL: ERROR - failed to eglGetConfigs\n");
    	}
    	else
    	{
            fprintf(stdout, " EGL: INFO: eglGetConfigs %d configs success.\n", numConfigs);
    		configSize = numConfigs;
    		if (!eglGetConfigs(display, configs, configSize, &numConfigs))
    		{
    	        fprintf(stderr, " EGL: ERROR: eglGetConfigs failed...\n");
    		}
    		else
    		{
    	        fprintf(stdout, " EGL: INFO: eglGetConfigs success...\n");
    	        
    			int j;
    			for ( j = 0 ; j < configSize; j++ )
    			{
    	        	fprintf(stdout, " EGL: INFO: CONFIG: %d: --->\n", j);
    				val = -1;
    			    if (eglGetConfigAttrib(display, configs[j], EGL_RED_SIZE, &val))
    			    {
    			    	fprintf(stdout, " EGL: INFO: EGL_RED_SIZE: %d success...\n", val);
    			    }
    			    else
    			    {
    			    	fprintf(stderr, " EGL: ERROR: EGL_RED_SIZE: failed.\n");
    			    }
    			    
    				val = -1;
    			    if (eglGetConfigAttrib(display, configs[j], EGL_GREEN_SIZE, &val))
    			    {
    			    	fprintf(stdout, " EGL: INFO: EGL_GREEN_SIZE: %d success...\n", val);
    			    }
    			    else
    			    {
    			    	fprintf(stderr, " EGL: ERROR: EGL_GREEN_SIZE: failed.\n");
    			    }
    			    
    				val = -1;
    			    if (eglGetConfigAttrib(display, configs[j], EGL_BLUE_SIZE, &val))
    			    {
    			    	fprintf(stdout, " EGL: INFO: EGL_BLUE_SIZE: %d success...\n", val);
    			    }
    			    else
    			    {
    			    	fprintf(stderr, " EGL: ERROR: EGL_BLUE_SIZE: failed.\n");
    			    }
    			    
    				val = -1;
    			    if (eglGetConfigAttrib(display, configs[j], EGL_ALPHA_SIZE, &val))
    			    {
    			    	fprintf(stdout, " EGL: INFO: EGL_ALPHA_SIZE: %d success...\n", val);
    			    }
    			    else
    			    {
    			    	fprintf(stderr, " EGL: ERROR: EGL_ALPHA_SIZE: failed.\n");
    			    }
    			    
    				val = -1;
    			    if (eglGetConfigAttrib(display, configs[j], EGL_SURFACE_TYPE, &val))
    			    {
    			    	fprintf(stdout, " EGL: INFO: EGL_SURFACE_TYPE: %d success...\n", val);
    			    }
    			    else
    			    {
    			    	fprintf(stderr, " EGL: ERROR: EGL_SURFACE_TYPE: failed.\n");
    			    }
    			    
    				val = -1;
    			    if (eglGetConfigAttrib(display, configs[j], EGL_RENDERABLE_TYPE, &val))
    			    {
    			    	fprintf(stdout, " EGL: INFO: EGL_RENDERABLE_TYPE: %d success...\n", val);
    			    }
    			    else
    			    {
    			    	fprintf(stderr, " EGL: ERROR: EGL_RENDERABLE_TYPE: failed.\n");
    			    }
    			    
    				val = -1;
    			    if (eglGetConfigAttrib(display, configs[j], EGL_DEPTH_SIZE, &val))
    			    {
    			    	fprintf(stdout, " EGL: INFO: EGL_DEPTH_SIZE: %d success...\n", val);
    			    }
    			    else
    			    {
    			    	fprintf(stderr, " EGL: ERROR: EGL_DEPTH_SIZE: failed.\n");
    			    }
    
    			}
    		}
    
    		numChooseconfigs = -1;
    		EGLConfig configChoose[3];
        	if (!eglChooseConfig(display, attribs, configChoose, 3, &numChooseconfigs))
        	{
                fprintf(stderr, " EGL: ERROR: eglChooseConfig() failed. Couldn't get an EGL visual config !!!\n");
                return -1;
        	}
    
        	fprintf(stdout, " EGL: INFO: eglChooseConfig() success. Get %d configs... !!!\n", numChooseconfigs);
                 
    #if 1
            config = configChoose[0];
            fprintf(stdout, " EGL: INFO: MATCH CONFIG: --->\n");
            val = -1;
            if (eglGetConfigAttrib(display, config, EGL_RED_SIZE, &val))
            {
                fprintf(stdout, " EGL: INFO: EGL_RED_SIZE: %d success...\n", val);
            }
            else
            {
                fprintf(stderr, " EGL: ERROR: EGL_RED_SIZE: failed.\n");
            }
            
            val = -1;
            if (eglGetConfigAttrib(display, config, EGL_GREEN_SIZE, &val))
            {
                fprintf(stdout, " EGL: INFO: EGL_GREEN_SIZE: %d success...\n", val);
            }
            else
            {
                fprintf(stderr, " EGL: ERROR: EGL_GREEN_SIZE: failed.\n");
            }
            
            val = -1;
            if (eglGetConfigAttrib(display, config, EGL_BLUE_SIZE, &val))
            {
                fprintf(stdout, " EGL: INFO: EGL_BLUE_SIZE: %d success...\n", val);
            }
            else
            {
                fprintf(stderr, " EGL: ERROR: EGL_BLUE_SIZE: failed.\n");
            }
            
            val = -1;
            if (eglGetConfigAttrib(display, config, EGL_ALPHA_SIZE, &val))
            {
                fprintf(stdout, " EGL: INFO: EGL_ALPHA_SIZE: %d success...\n", val);
            }
            else
            {
                fprintf(stderr, " EGL: ERROR: EGL_ALPHA_SIZE: failed.\n");
            }
            
            val = -1;
            if (eglGetConfigAttrib(display, config, EGL_SURFACE_TYPE, &val))
            {
                fprintf(stdout, " EGL: INFO: EGL_SURFACE_TYPE: %d success...\n", val);
            }
            else
            {
                fprintf(stderr, " EGL: ERROR: EGL_SURFACE_TYPE: failed.\n");
            }
            
            val = -1;
            if (eglGetConfigAttrib(display, config, EGL_RENDERABLE_TYPE, &val))
            {
                fprintf(stdout, " EGL: INFO: EGL_RENDERABLE_TYPE: %d success...\n", val);
            }
            else
            {
                fprintf(stderr, " EGL: ERROR: EGL_RENDERABLE_TYPE: failed.\n");
            }
            
            val = -1;
            if (eglGetConfigAttrib(display, config, EGL_DEPTH_SIZE, &val))
            {
                fprintf(stdout, " EGL: INFO: EGL_DEPTH_SIZE: %d success...\n", val);
            }
            else
            {
                fprintf(stderr, " EGL: ERROR: EGL_DEPTH_SIZE: failed.\n");
            }
    #endif
    
        	context = eglCreateContext(display, config, EGL_NO_CONTEXT, context_attribs);
            eglCheckError("eglCreateContext", EGL_TRUE);
            if (context == EGL_NO_CONTEXT) {
                fprintf(stderr, " EGL: eglCreateContext() failed !!!\n");
                return -1;
            }
    	}
        return 0;
    }
    
    
    

     

    By the way, our U-boot is a relatively old version, is  VERSION = 2014 PATCHLEVEL = 07, which used at VISION_SDK_2.09. I wonder if U-boot has any effect on this issue?? 

     

    regards, Jaye.

  • Hi Jaye,

    I think the issue is occurring because the incorrect window system EGL is being picked up.

    We support 3 window system EGL layers on this SoC:
    1. GBM => used when GBM API is used for surface allocation and DRM/KMS API is used for display. Example application - git.ti.com/.../kmscube
    2. Wayland => used by Wayland clients. Example application - github.com/.../simple-egl.c
    3. Null DRM Window System => used as a null window system. EGL layer abstracts display management completely. Application only calls OpenGLES / EGL calls.

    Which EGL layer is your application using? We support PIXMAP only for GBM window system EGL. This is because Wayland EGL does not define a pixmap surface. Similarly, by definition, Null DRM window system talks to display directly and hence there is no pixmap / offscreen support.

    You can force the driver to pick up GBM by editing /etc/powervr.ini and adding the following 2 lines:

    [default]
    WindowSystem="libpvrGBMWSEGL.so"

    After updating the file on target file system, restart the board and start the test application. You should see a text that says using the WindowSystem apphint.

    Regards,
    Anand