<div dir="ltr"><div><div>Hello,<br><br></div>I'm working on a Wayland compositor and the latest Mesa update broke my work. After investigating, I found that I need to use the EGL_WL_wayland_bind_display extension, otherwise my compositor crashes with wl_shm reporting an invalid format. I'm not an OpenGL expert, but I spent the last few days reading documentation, inspecting weston's source code and googling with no luck.<br><br></div><div>Question 1: Is it necessary to have the extension? Why don't Mesa support plain old wl_shm anymore? Unless I missed something, this means we can't use OpenGL anymore for software rendering in Wayland, am I right?<br><br><br></div><div>At the moment, I'm trying to load an EGL window before falling back to a non-opengl rendering mode in case of error. The problem here is that doing so now crahes the whole compositor, and the only way I see to do this is checking if the wl_drm interface is provided before trying to create the window, meaning an other roundtrip.<br><br></div><div>Question 2: Shouldn't the window creation simply fail if wl_drm is not available, letting me fallback to another rendering mode?<br><br><br></div><div>I implemented the EGL_WL_bind_wayland_display extension, but unfortunately I am not able to get any output. The client gets the wl_drm interface (so the display seems to be correctly bound), I am able to get the right buffer size, but I am not able to get any output, my final drawing stays black. In case it matters, I'm rendering to a standard X11 window at the moment.<br><br></div><div>Here is how I set the texture buffer:<br><br>bool set_wl_buffer(<br>    struct gles2_renderer* renderer,<br>    GLuint texture, // The texture associated to my surface<br>    struct wl_resource* buffer // The buffer as sent to the surface.attach request<br>) {<br></div><div>    // Got with eglGetProcAddress("eglCreateImageKHR")<br></div><div>    EGLImageKHR* img = eglCreateImageKHR(<br>        renderer->display,<br>        EGL_NO_CONTEXT,<br>        EGL_WAYLAND_BUFFER_WL,<br>        buffer,<br>        NULL<br>    );<br>    if (img == EGL_NO_IMAGE_KHR) {<br>        return false;<br>    }<br><br>    glBindTexture(GL_TEXTURE_2D, texture);<br><br>    // Got with eglGetProcAddress("glEGLImageTargetTexture2DOES")<br>    eglImageTargetTexture2D(GL_TEXTURE_2D, img);<br></div><div>    return true;<br>}<br><br></div><div>I'm creating a texture for the surface once, only updating the buffer at commit. After this piece of code, I'm rendering the texture as I would with a "standard" one. The drawing part should work as expected, at least it does in standard client applications both in Wayland and X11, and did before the update. Of course, weston is working as expected on my system.<br></div><div><br></div><div>Question 3: Is it correct? Did I miss something?<br><br><br></div><div>I tried to give any detail that may be relevant, but if I forgot something, just ask for it.<br></div><div>Thanks in advance,<br></div><div>Cédric Legrand<br></div></div>