mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-05 21:38:04 +02:00
gl-renderer: Store EGL display extensions as flags
The egl_display_extensions bitfield is added to store the display extensions supported by the EGL implementation. Signed-off-by: Loïc Molinari <loic.molinari@collabora.com>
This commit is contained in:
parent
12b9c65011
commit
54dfa0743e
2 changed files with 60 additions and 13 deletions
|
|
@ -69,6 +69,25 @@ static const struct gl_extension_table device_table[] = {
|
|||
{ NULL, 0, 0 }
|
||||
};
|
||||
|
||||
/* Keep in sync with gl-renderer-internal.h. */
|
||||
static const struct gl_extension_table display_table[] = {
|
||||
EXT("EGL_ANDROID_native_fence_sync", EXTENSION_ANDROID_NATIVE_FENCE_SYNC),
|
||||
EXT("EGL_EXT_buffer_age", EXTENSION_EXT_BUFFER_AGE),
|
||||
EXT("EGL_EXT_image_dma_buf_import", EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT),
|
||||
EXT("EGL_EXT_image_dma_buf_import_modifiers", EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT_MODIFIERS),
|
||||
EXT("EGL_EXT_swap_buffers_with_damage", EXTENSION_EXT_SWAP_BUFFERS_WITH_DAMAGE),
|
||||
EXT("EGL_IMG_context_priority", EXTENSION_IMG_CONTEXT_PRIORITY),
|
||||
EXT("EGL_KHR_fence_sync", EXTENSION_KHR_FENCE_SYNC),
|
||||
EXT("EGL_KHR_no_config_context", EXTENSION_KHR_NO_CONFIG_CONTEXT),
|
||||
EXT("EGL_KHR_partial_update", EXTENSION_KHR_PARTIAL_UPDATE),
|
||||
EXT("EGL_KHR_surfaceless_context", EXTENSION_KHR_SURFACELESS_CONTEXT),
|
||||
EXT("EGL_KHR_swap_buffers_with_damage", EXTENSION_KHR_SWAP_BUFFERS_WITH_DAMAGE),
|
||||
EXT("EGL_KHR_wait_sync", EXTENSION_KHR_WAIT_SYNC),
|
||||
EXT("EGL_MESA_configless_context", EXTENSION_MESA_CONFIGLESS_CONTEXT),
|
||||
EXT("EGL_WL_bind_wayland_display", EXTENSION_WL_BIND_WAYLAND_DISPLAY),
|
||||
{ NULL, 0, 0 }
|
||||
};
|
||||
|
||||
static const char *
|
||||
egl_error_string(EGLint code)
|
||||
{
|
||||
|
|
@ -665,10 +684,13 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (weston_check_egl_extension(extensions, "EGL_IMG_context_priority"))
|
||||
gl_extensions_add(display_table, extensions,
|
||||
&gr->egl_display_extensions);
|
||||
|
||||
if (egl_display_has(gr, EXTENSION_IMG_CONTEXT_PRIORITY))
|
||||
gr->has_context_priority = true;
|
||||
|
||||
if (weston_check_egl_extension(extensions, "EGL_WL_bind_wayland_display"))
|
||||
if (egl_display_has(gr, EXTENSION_WL_BIND_WAYLAND_DISPLAY))
|
||||
gr->has_bind_display = true;
|
||||
if (gr->has_bind_display) {
|
||||
assert(gr->bind_display);
|
||||
|
|
@ -679,10 +701,10 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
|
|||
gr->has_bind_display = false;
|
||||
}
|
||||
|
||||
if (weston_check_egl_extension(extensions, "EGL_EXT_buffer_age"))
|
||||
if (egl_display_has(gr, EXTENSION_EXT_BUFFER_AGE))
|
||||
gr->has_egl_buffer_age = true;
|
||||
|
||||
if (weston_check_egl_extension(extensions, "EGL_KHR_partial_update")) {
|
||||
if (egl_display_has(gr, EXTENSION_KHR_PARTIAL_UPDATE)) {
|
||||
assert(gr->set_damage_region);
|
||||
gr->has_egl_partial_update = true;
|
||||
}
|
||||
|
|
@ -698,18 +720,17 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
|
|||
}
|
||||
}
|
||||
|
||||
if (weston_check_egl_extension(extensions, "EGL_KHR_no_config_context") ||
|
||||
weston_check_egl_extension(extensions, "EGL_MESA_configless_context"))
|
||||
if (egl_display_has(gr, EXTENSION_KHR_NO_CONFIG_CONTEXT) ||
|
||||
egl_display_has(gr, EXTENSION_MESA_CONFIGLESS_CONTEXT))
|
||||
gr->has_configless_context = true;
|
||||
|
||||
if (weston_check_egl_extension(extensions, "EGL_KHR_surfaceless_context"))
|
||||
if (egl_display_has(gr, EXTENSION_KHR_SURFACELESS_CONTEXT))
|
||||
gr->has_surfaceless_context = true;
|
||||
|
||||
if (weston_check_egl_extension(extensions, "EGL_EXT_image_dma_buf_import"))
|
||||
if (egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT))
|
||||
gr->has_dmabuf_import = true;
|
||||
|
||||
if (weston_check_egl_extension(extensions,
|
||||
"EGL_EXT_image_dma_buf_import_modifiers")) {
|
||||
if (egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT_MODIFIERS)) {
|
||||
gr->query_dmabuf_formats =
|
||||
(void *) eglGetProcAddress("eglQueryDmaBufFormatsEXT");
|
||||
gr->query_dmabuf_modifiers =
|
||||
|
|
@ -719,8 +740,8 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
|
|||
gr->has_dmabuf_import_modifiers = true;
|
||||
}
|
||||
|
||||
if (weston_check_egl_extension(extensions, "EGL_KHR_fence_sync") &&
|
||||
weston_check_egl_extension(extensions, "EGL_ANDROID_native_fence_sync")) {
|
||||
if (egl_display_has(gr, EXTENSION_KHR_FENCE_SYNC) &&
|
||||
egl_display_has(gr, EXTENSION_ANDROID_NATIVE_FENCE_SYNC)) {
|
||||
gr->create_sync =
|
||||
(void *) eglGetProcAddress("eglCreateSyncKHR");
|
||||
gr->destroy_sync =
|
||||
|
|
@ -737,7 +758,7 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
|
|||
"EGL_ANDROID_native_fence_sync extension\n");
|
||||
}
|
||||
|
||||
if (weston_check_egl_extension(extensions, "EGL_KHR_wait_sync")) {
|
||||
if (egl_display_has(gr, EXTENSION_KHR_WAIT_SYNC)) {
|
||||
gr->wait_sync = (void *) eglGetProcAddress("eglWaitSyncKHR");
|
||||
assert(gr->wait_sync);
|
||||
gr->has_wait_sync = true;
|
||||
|
|
|
|||
|
|
@ -75,6 +75,24 @@ enum egl_device_extension_flag {
|
|||
EXTENSION_EXT_DEVICE_DRM_RENDER_NODE = 1ull << 1,
|
||||
};
|
||||
|
||||
/* Keep in sync with egl-glue.c. */
|
||||
enum egl_display_extension_flag {
|
||||
EXTENSION_ANDROID_NATIVE_FENCE_SYNC = 1ull << 0,
|
||||
EXTENSION_EXT_BUFFER_AGE = 1ull << 1,
|
||||
EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT = 1ull << 2,
|
||||
EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT_MODIFIERS = 1ull << 3,
|
||||
EXTENSION_EXT_SWAP_BUFFERS_WITH_DAMAGE = 1ull << 4,
|
||||
EXTENSION_IMG_CONTEXT_PRIORITY = 1ull << 5,
|
||||
EXTENSION_KHR_FENCE_SYNC = 1ull << 6,
|
||||
EXTENSION_KHR_NO_CONFIG_CONTEXT = 1ull << 7,
|
||||
EXTENSION_KHR_PARTIAL_UPDATE = 1ull << 8,
|
||||
EXTENSION_KHR_SURFACELESS_CONTEXT = 1ull << 9,
|
||||
EXTENSION_KHR_SWAP_BUFFERS_WITH_DAMAGE = 1ull << 10,
|
||||
EXTENSION_KHR_WAIT_SYNC = 1ull << 11,
|
||||
EXTENSION_MESA_CONFIGLESS_CONTEXT = 1ull << 12,
|
||||
EXTENSION_WL_BIND_WAYLAND_DISPLAY = 1ull << 13,
|
||||
};
|
||||
|
||||
/* Keep the following in sync with vertex.glsl. */
|
||||
enum gl_shader_texcoord_input {
|
||||
SHADER_TEXCOORD_INPUT_ATTRIB = 0,
|
||||
|
|
@ -247,6 +265,7 @@ struct gl_renderer {
|
|||
|
||||
uint64_t egl_client_extensions;
|
||||
uint64_t egl_device_extensions;
|
||||
uint64_t egl_display_extensions;
|
||||
|
||||
PFNGLEGLIMAGETARGETTEXTURE2DOESPROC image_target_texture_2d;
|
||||
PFNGLTEXIMAGE3DOESPROC tex_image_3d;
|
||||
|
|
@ -374,6 +393,13 @@ egl_device_has(struct gl_renderer *gr,
|
|||
return (bool) (gr->egl_device_extensions & ((uint64_t) flag));
|
||||
}
|
||||
|
||||
static inline bool
|
||||
egl_display_has(struct gl_renderer *gr,
|
||||
enum egl_display_extension_flag flag)
|
||||
{
|
||||
return (bool) (gr->egl_display_extensions & ((uint64_t) flag));
|
||||
}
|
||||
|
||||
static inline struct gl_renderer *
|
||||
get_renderer(struct weston_compositor *ec)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue