1*ed24eb5fSAlexander von Gluck IVName 2*ed24eb5fSAlexander von Gluck IV 3*ed24eb5fSAlexander von Gluck IV KHR_platform_haiku 4*ed24eb5fSAlexander von Gluck IV 5*ed24eb5fSAlexander von Gluck IVName Strings 6*ed24eb5fSAlexander von Gluck IV 7*ed24eb5fSAlexander von Gluck IV EGL_KHR_platform_haiku 8*ed24eb5fSAlexander von Gluck IV 9*ed24eb5fSAlexander von Gluck IVContributors 10*ed24eb5fSAlexander von Gluck IV 11*ed24eb5fSAlexander von Gluck IV Alexander von Gluck IV <alex@terarocket.io> 12*ed24eb5fSAlexander von Gluck IV 13*ed24eb5fSAlexander von Gluck IVContacts 14*ed24eb5fSAlexander von Gluck IV 15*ed24eb5fSAlexander von Gluck IV Alexander von Gluck IV <alex@terarocket.io> 16*ed24eb5fSAlexander von Gluck IV 17*ed24eb5fSAlexander von Gluck IVStatus 18*ed24eb5fSAlexander von Gluck IV 19*ed24eb5fSAlexander von Gluck IV Draft. 20*ed24eb5fSAlexander von Gluck IV 21*ed24eb5fSAlexander von Gluck IVVersion 22*ed24eb5fSAlexander von Gluck IV 23*ed24eb5fSAlexander von Gluck IV Version 1, 2023/03/29 24*ed24eb5fSAlexander von Gluck IV 25*ed24eb5fSAlexander von Gluck IVNumber 26*ed24eb5fSAlexander von Gluck IV 27*ed24eb5fSAlexander von Gluck IV EGL Extension TBD 28*ed24eb5fSAlexander von Gluck IV 29*ed24eb5fSAlexander von Gluck IVExtension Type 30*ed24eb5fSAlexander von Gluck IV 31*ed24eb5fSAlexander von Gluck IV EGL client extension 32*ed24eb5fSAlexander von Gluck IV 33*ed24eb5fSAlexander von Gluck IVDependencies 34*ed24eb5fSAlexander von Gluck IV 35*ed24eb5fSAlexander von Gluck IV EGL 1.5 is required. 36*ed24eb5fSAlexander von Gluck IV 37*ed24eb5fSAlexander von Gluck IV This extension is written against the EGL 1.5 Specification (draft 38*ed24eb5fSAlexander von Gluck IV 20140122). 39*ed24eb5fSAlexander von Gluck IV 40*ed24eb5fSAlexander von Gluck IVOverview 41*ed24eb5fSAlexander von Gluck IV 42*ed24eb5fSAlexander von Gluck IV This extension defines how to create EGL resources from native Haiku 43*ed24eb5fSAlexander von Gluck IV resources using the EGL 1.5 platform functionality. 44*ed24eb5fSAlexander von Gluck IV 45*ed24eb5fSAlexander von Gluck IV Mesa has tracked _EGL_PLATFORM_HAIKU internally for quite some time. 46*ed24eb5fSAlexander von Gluck IV 47*ed24eb5fSAlexander von Gluck IV libglvnd has received patches for basic Haiku support 48*ed24eb5fSAlexander von Gluck IV 49*ed24eb5fSAlexander von Gluck IVNew Types 50*ed24eb5fSAlexander von Gluck IV 51*ed24eb5fSAlexander von Gluck IV None 52*ed24eb5fSAlexander von Gluck IV 53*ed24eb5fSAlexander von Gluck IVNew Procedures and Functions 54*ed24eb5fSAlexander von Gluck IV 55*ed24eb5fSAlexander von Gluck IV None 56*ed24eb5fSAlexander von Gluck IV 57*ed24eb5fSAlexander von Gluck IVNew Tokens 58*ed24eb5fSAlexander von Gluck IV 59*ed24eb5fSAlexander von Gluck IV Accepted as the <platform> argument of eglGetPlatformDisplay: 60*ed24eb5fSAlexander von Gluck IV 61*ed24eb5fSAlexander von Gluck IV EGL_PLATFORM_HAIKU_KHR 0x31D9 62*ed24eb5fSAlexander von Gluck IV 63*ed24eb5fSAlexander von Gluck IVAdditions to the EGL Specification 64*ed24eb5fSAlexander von Gluck IV 65*ed24eb5fSAlexander von Gluck IV None. 66*ed24eb5fSAlexander von Gluck IV 67*ed24eb5fSAlexander von Gluck IVNew Behavior 68*ed24eb5fSAlexander von Gluck IV 69*ed24eb5fSAlexander von Gluck IV To determine if the EGL implementation supports this extension, clients 70*ed24eb5fSAlexander von Gluck IV should query the EGL_EXTENSIONS string of EGL_NO_DISPLAY. 71*ed24eb5fSAlexander von Gluck IV 72*ed24eb5fSAlexander von Gluck IV To obtain an EGLDisplay backed by a Haiku display, call 73*ed24eb5fSAlexander von Gluck IV eglGetPlatformDisplay with <platform> set to EGL_PLATFORM_HAIKU_KHR. The 74*ed24eb5fSAlexander von Gluck IV <native_display> parameter specifies the Haiku display to use and must 75*ed24eb5fSAlexander von Gluck IV either point to a `struct wl_display` or be EGL_DEFAULT_DISPLAY. If 76*ed24eb5fSAlexander von Gluck IV <native_display> is EGL_DEFAULT_DISPLAY, then EGL will create a new 77*ed24eb5fSAlexander von Gluck IV wl_display structure by connecting to the default Wayland socket. The 78*ed24eb5fSAlexander von Gluck IV manual page wl_display_connect(3) defines the location of the default 79*ed24eb5fSAlexander von Gluck IV Wayland socket. 80*ed24eb5fSAlexander von Gluck IV 81*ed24eb5fSAlexander von Gluck IV To obtain an on-screen rendering surface from a Wayland window, call 82*ed24eb5fSAlexander von Gluck IV eglCreatePlatformWindowSurface with a <dpy> that belongs to Wayland and 83*ed24eb5fSAlexander von Gluck IV a <native_window> that points to a `struct wl_egl_surface`. 84*ed24eb5fSAlexander von Gluck IV 85*ed24eb5fSAlexander von Gluck IV It is not valid to call eglCreatePlatformPixmapSurface with a <dpy> that 86*ed24eb5fSAlexander von Gluck IV belongs to Haiku. Any such call fails and generates an 87*ed24eb5fSAlexander von Gluck IV EGL_BAD_PARAMETER error. 88*ed24eb5fSAlexander von Gluck IV 89*ed24eb5fSAlexander von Gluck IV Rendering to the obtained EGLSurface or querying it with EGL_BUFFER_AGE_KHR 90*ed24eb5fSAlexander von Gluck IV will lock its back buffer preventing it from being dropped or resized, 91*ed24eb5fSAlexander von Gluck IV until the next buffer swap. The rationale behind this behavior is to keep 92*ed24eb5fSAlexander von Gluck IV operations result accurate until the next swap. 93*ed24eb5fSAlexander von Gluck IV 94*ed24eb5fSAlexander von Gluck IVIssues 95*ed24eb5fSAlexander von Gluck IV 96*ed24eb5fSAlexander von Gluck IV TBD 97*ed24eb5fSAlexander von Gluck IV 98*ed24eb5fSAlexander von Gluck IVRevision History 99*ed24eb5fSAlexander von Gluck IV Version 1, 2023/03/29 (Alexander von Gluck IV) 100*ed24eb5fSAlexander von Gluck IV - Initial Draft version for Haiku with EGL 1.5+ 101