mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-05 22:48:14 +02:00
gl-renderer: Remove EGL extension booleans
Now that the EGL extensions are stored in the egl_*_extensions bitfields, there's no need to use booleans anymore. Signed-off-by: Loïc Molinari <loic.molinari@collabora.com>
This commit is contained in:
parent
54dfa0743e
commit
c56c104f7a
3 changed files with 56 additions and 89 deletions
|
|
@ -490,7 +490,7 @@ gl_renderer_set_egl_device(struct gl_renderer *gr)
|
|||
EGLAttrib attrib;
|
||||
const char *extensions;
|
||||
|
||||
assert(gr->has_device_query);
|
||||
assert(egl_client_has(gr, EXTENSION_EXT_DEVICE_QUERY));
|
||||
|
||||
if (!gr->query_display_attrib(gr->egl_display, EGL_DEVICE_EXT, &attrib)) {
|
||||
weston_log("failed to get EGL device\n");
|
||||
|
|
@ -533,7 +533,7 @@ gl_renderer_setup_egl_display(struct gl_renderer *gr,
|
|||
{
|
||||
gr->egl_display = NULL;
|
||||
|
||||
if (gr->has_platform_base)
|
||||
if (egl_client_has(gr, EXTENSION_EXT_PLATFORM_BASE))
|
||||
gr->egl_display = gr->get_platform_display(gr->platform,
|
||||
native_display,
|
||||
NULL);
|
||||
|
|
@ -555,7 +555,7 @@ gl_renderer_setup_egl_display(struct gl_renderer *gr,
|
|||
goto fail;
|
||||
}
|
||||
|
||||
if (gr->has_device_query)
|
||||
if (egl_client_has(gr, EXTENSION_EXT_DEVICE_QUERY))
|
||||
gl_renderer_set_egl_device(gr);
|
||||
|
||||
return 0;
|
||||
|
|
@ -591,7 +591,6 @@ gl_renderer_setup_egl_client_extensions(struct gl_renderer *gr)
|
|||
(void *) eglGetProcAddress("eglQueryDisplayAttribEXT");
|
||||
gr->query_device_string =
|
||||
(void *) eglGetProcAddress("eglQueryDeviceStringEXT");
|
||||
gr->has_device_query = true;
|
||||
}
|
||||
|
||||
if (egl_client_has(gr, EXTENSION_EXT_PLATFORM_BASE)) {
|
||||
|
|
@ -599,7 +598,6 @@ gl_renderer_setup_egl_client_extensions(struct gl_renderer *gr)
|
|||
(void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
|
||||
gr->create_platform_window =
|
||||
(void *) eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
|
||||
gr->has_platform_base = true;
|
||||
} else if (gr->platform != EGL_PLATFORM_SURFACELESS_MESA) {
|
||||
weston_log("warning: EGL_EXT_platform_base not supported.\n");
|
||||
return 0;
|
||||
|
|
@ -649,20 +647,21 @@ int
|
|||
gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
|
||||
{
|
||||
static const struct {
|
||||
char *extension, *entrypoint;
|
||||
enum egl_display_extension_flag extension;
|
||||
char *entrypoint;
|
||||
} swap_damage_ext_to_entrypoint[] = {
|
||||
{
|
||||
.extension = "EGL_EXT_swap_buffers_with_damage",
|
||||
.extension = EXTENSION_EXT_SWAP_BUFFERS_WITH_DAMAGE,
|
||||
.entrypoint = "eglSwapBuffersWithDamageEXT",
|
||||
},
|
||||
{
|
||||
.extension = "EGL_KHR_swap_buffers_with_damage",
|
||||
.extension = EXTENSION_KHR_SWAP_BUFFERS_WITH_DAMAGE,
|
||||
.entrypoint = "eglSwapBuffersWithDamageKHR",
|
||||
},
|
||||
};
|
||||
struct gl_renderer *gr = get_renderer(ec);
|
||||
bool has_bind_display = false;
|
||||
const char *extensions;
|
||||
EGLBoolean ret;
|
||||
unsigned i;
|
||||
|
||||
gr->create_image = (void *) eglGetProcAddress("eglCreateImageKHR");
|
||||
|
|
@ -687,30 +686,19 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
|
|||
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 (egl_display_has(gr, EXTENSION_WL_BIND_WAYLAND_DISPLAY))
|
||||
gr->has_bind_display = true;
|
||||
if (gr->has_bind_display) {
|
||||
if (egl_display_has(gr, EXTENSION_WL_BIND_WAYLAND_DISPLAY)) {
|
||||
assert(gr->bind_display);
|
||||
assert(gr->unbind_display);
|
||||
assert(gr->query_buffer);
|
||||
ret = gr->bind_display(gr->egl_display, ec->wl_display);
|
||||
if (!ret)
|
||||
gr->has_bind_display = false;
|
||||
has_bind_display = gr->bind_display(gr->egl_display,
|
||||
ec->wl_display);
|
||||
}
|
||||
|
||||
if (egl_display_has(gr, EXTENSION_EXT_BUFFER_AGE))
|
||||
gr->has_egl_buffer_age = true;
|
||||
|
||||
if (egl_display_has(gr, EXTENSION_KHR_PARTIAL_UPDATE)) {
|
||||
if (egl_display_has(gr, EXTENSION_KHR_PARTIAL_UPDATE))
|
||||
assert(gr->set_damage_region);
|
||||
gr->has_egl_partial_update = true;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_LENGTH(swap_damage_ext_to_entrypoint); i++) {
|
||||
if (weston_check_egl_extension(extensions,
|
||||
if (egl_display_has(gr,
|
||||
swap_damage_ext_to_entrypoint[i].extension)) {
|
||||
gr->swap_buffers_with_damage =
|
||||
(void *) eglGetProcAddress(
|
||||
|
|
@ -720,16 +708,6 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
|
|||
}
|
||||
}
|
||||
|
||||
if (egl_display_has(gr, EXTENSION_KHR_NO_CONFIG_CONTEXT) ||
|
||||
egl_display_has(gr, EXTENSION_MESA_CONFIGLESS_CONTEXT))
|
||||
gr->has_configless_context = true;
|
||||
|
||||
if (egl_display_has(gr, EXTENSION_KHR_SURFACELESS_CONTEXT))
|
||||
gr->has_surfaceless_context = true;
|
||||
|
||||
if (egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT))
|
||||
gr->has_dmabuf_import = true;
|
||||
|
||||
if (egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT_MODIFIERS)) {
|
||||
gr->query_dmabuf_formats =
|
||||
(void *) eglGetProcAddress("eglQueryDmaBufFormatsEXT");
|
||||
|
|
@ -737,7 +715,6 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
|
|||
(void *) eglGetProcAddress("eglQueryDmaBufModifiersEXT");
|
||||
assert(gr->query_dmabuf_formats);
|
||||
assert(gr->query_dmabuf_modifiers);
|
||||
gr->has_dmabuf_import_modifiers = true;
|
||||
}
|
||||
|
||||
if (egl_display_has(gr, EXTENSION_KHR_FENCE_SYNC) &&
|
||||
|
|
@ -751,7 +728,6 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
|
|||
assert(gr->create_sync);
|
||||
assert(gr->destroy_sync);
|
||||
assert(gr->dup_native_fence_fd);
|
||||
gr->has_native_fence_sync = true;
|
||||
} else {
|
||||
weston_log("warning: Disabling render GPU timeline and explicit "
|
||||
"synchronization due to missing "
|
||||
|
|
@ -761,31 +737,31 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
|
|||
if (egl_display_has(gr, EXTENSION_KHR_WAIT_SYNC)) {
|
||||
gr->wait_sync = (void *) eglGetProcAddress("eglWaitSyncKHR");
|
||||
assert(gr->wait_sync);
|
||||
gr->has_wait_sync = true;
|
||||
} else {
|
||||
weston_log("warning: Disabling explicit synchronization due"
|
||||
weston_log("warning: Disabling explicit synchronization due "
|
||||
"to missing EGL_KHR_wait_sync extension\n");
|
||||
}
|
||||
|
||||
weston_log("EGL features:\n");
|
||||
weston_log_continue(STAMP_SPACE "EGL Wayland extension: %s\n",
|
||||
yesno(gr->has_bind_display));
|
||||
yesno(has_bind_display));
|
||||
weston_log_continue(STAMP_SPACE "context priority: %s\n",
|
||||
yesno(gr->has_context_priority));
|
||||
yesno(egl_display_has(gr, EXTENSION_IMG_CONTEXT_PRIORITY)));
|
||||
weston_log_continue(STAMP_SPACE "buffer age: %s\n",
|
||||
yesno(gr->has_egl_buffer_age));
|
||||
yesno(egl_display_has(gr, EXTENSION_EXT_BUFFER_AGE)));
|
||||
weston_log_continue(STAMP_SPACE "partial update: %s\n",
|
||||
yesno(gr->has_egl_partial_update));
|
||||
yesno(egl_display_has(gr, EXTENSION_KHR_PARTIAL_UPDATE)));
|
||||
weston_log_continue(STAMP_SPACE "swap buffers with damage: %s\n",
|
||||
yesno(gr->swap_buffers_with_damage));
|
||||
weston_log_continue(STAMP_SPACE "configless context: %s\n",
|
||||
yesno(gr->has_configless_context));
|
||||
yesno(egl_display_has(gr, EXTENSION_KHR_NO_CONFIG_CONTEXT) ||
|
||||
egl_display_has(gr, EXTENSION_MESA_CONFIGLESS_CONTEXT)));
|
||||
weston_log_continue(STAMP_SPACE "surfaceless context: %s\n",
|
||||
yesno(gr->has_surfaceless_context));
|
||||
yesno(egl_display_has(gr, EXTENSION_KHR_SURFACELESS_CONTEXT)));
|
||||
weston_log_continue(STAMP_SPACE "dmabuf support: %s\n",
|
||||
gr->has_dmabuf_import ?
|
||||
(gr->has_dmabuf_import_modifiers ? "modifiers" : "legacy") :
|
||||
"no");
|
||||
!egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT) ? "no" :
|
||||
!egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT_MODIFIERS) ? "legacy" :
|
||||
"modifiers");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -276,26 +276,15 @@ struct gl_renderer {
|
|||
|
||||
PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display;
|
||||
PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC create_platform_window;
|
||||
bool has_platform_base;
|
||||
|
||||
PFNEGLBINDWAYLANDDISPLAYWL bind_display;
|
||||
PFNEGLUNBINDWAYLANDDISPLAYWL unbind_display;
|
||||
PFNEGLQUERYWAYLANDBUFFERWL query_buffer;
|
||||
bool has_bind_display;
|
||||
|
||||
bool has_context_priority;
|
||||
|
||||
bool has_egl_image_external;
|
||||
|
||||
bool has_egl_buffer_age;
|
||||
bool has_egl_partial_update;
|
||||
PFNEGLSETDAMAGEREGIONKHRPROC set_damage_region;
|
||||
|
||||
bool has_configless_context;
|
||||
|
||||
bool has_surfaceless_context;
|
||||
|
||||
bool has_dmabuf_import;
|
||||
struct wl_list dmabuf_images;
|
||||
struct wl_list dmabuf_formats;
|
||||
|
||||
|
|
@ -318,20 +307,16 @@ struct gl_renderer {
|
|||
|
||||
struct wl_signal destroy_signal;
|
||||
|
||||
bool has_dmabuf_import_modifiers;
|
||||
PFNEGLQUERYDMABUFFORMATSEXTPROC query_dmabuf_formats;
|
||||
PFNEGLQUERYDMABUFMODIFIERSEXTPROC query_dmabuf_modifiers;
|
||||
|
||||
bool has_device_query;
|
||||
PFNEGLQUERYDISPLAYATTRIBEXTPROC query_display_attrib;
|
||||
PFNEGLQUERYDEVICESTRINGEXTPROC query_device_string;
|
||||
|
||||
bool has_native_fence_sync;
|
||||
PFNEGLCREATESYNCKHRPROC create_sync;
|
||||
PFNEGLDESTROYSYNCKHRPROC destroy_sync;
|
||||
PFNEGLDUPNATIVEFENCEFDANDROIDPROC dup_native_fence_fd;
|
||||
|
||||
bool has_wait_sync;
|
||||
PFNEGLWAITSYNCKHRPROC wait_sync;
|
||||
|
||||
bool has_disjoint_timer_query;
|
||||
|
|
|
|||
|
|
@ -484,7 +484,7 @@ static void
|
|||
timeline_begin_render_query(struct gl_renderer *gr, GLuint query)
|
||||
{
|
||||
if (weston_log_scope_is_enabled(gr->compositor->timeline) &&
|
||||
gr->has_native_fence_sync &&
|
||||
egl_display_has(gr, EXTENSION_ANDROID_NATIVE_FENCE_SYNC) &&
|
||||
gr->has_disjoint_timer_query)
|
||||
gr->begin_query(GL_TIME_ELAPSED_EXT, query);
|
||||
}
|
||||
|
|
@ -493,7 +493,7 @@ static void
|
|||
timeline_end_render_query(struct gl_renderer *gr)
|
||||
{
|
||||
if (weston_log_scope_is_enabled(gr->compositor->timeline) &&
|
||||
gr->has_native_fence_sync &&
|
||||
egl_display_has(gr, EXTENSION_ANDROID_NATIVE_FENCE_SYNC) &&
|
||||
gr->has_disjoint_timer_query)
|
||||
gr->end_query(GL_TIME_ELAPSED_EXT);
|
||||
}
|
||||
|
|
@ -550,7 +550,7 @@ create_render_sync(struct gl_renderer *gr)
|
|||
{
|
||||
static const EGLint attribs[] = { EGL_NONE };
|
||||
|
||||
if (!gr->has_native_fence_sync)
|
||||
if (!egl_display_has(gr, EXTENSION_ANDROID_NATIVE_FENCE_SYNC))
|
||||
return EGL_NO_SYNC_KHR;
|
||||
|
||||
return gr->create_sync(gr->egl_display, EGL_SYNC_NATIVE_FENCE_ANDROID,
|
||||
|
|
@ -569,7 +569,7 @@ timeline_submit_render_sync(struct gl_renderer *gr,
|
|||
struct timeline_render_point *trp;
|
||||
|
||||
if (!weston_log_scope_is_enabled(gr->compositor->timeline) ||
|
||||
!gr->has_native_fence_sync ||
|
||||
!egl_display_has(gr, EXTENSION_ANDROID_NATIVE_FENCE_SYNC) ||
|
||||
!gr->has_disjoint_timer_query ||
|
||||
sync == EGL_NO_SYNC_KHR)
|
||||
return;
|
||||
|
|
@ -1158,7 +1158,7 @@ ensure_surface_buffer_is_ready(struct gl_renderer *gr,
|
|||
|
||||
/* We should only get a fence if we support EGLSyncKHR, since
|
||||
* we don't advertise the explicit sync protocol otherwise. */
|
||||
assert(gr->has_native_fence_sync);
|
||||
assert(egl_display_has(gr, EXTENSION_ANDROID_NATIVE_FENCE_SYNC));
|
||||
/* We should only get a fence for non-SHM buffers, since surface
|
||||
* commit would have failed otherwise. */
|
||||
assert(buffer->type != WESTON_BUFFER_SHM);
|
||||
|
|
@ -2079,7 +2079,8 @@ output_get_buffer_age(struct weston_output *output)
|
|||
EGLint buffer_age = 0;
|
||||
EGLBoolean ret;
|
||||
|
||||
if ((gr->has_egl_buffer_age || gr->has_egl_partial_update) &&
|
||||
if ((egl_display_has(gr, EXTENSION_EXT_BUFFER_AGE) ||
|
||||
egl_display_has(gr, EXTENSION_KHR_PARTIAL_UPDATE)) &&
|
||||
go->egl_surface != EGL_NO_SURFACE) {
|
||||
ret = eglQuerySurface(gr->egl_display, go->egl_surface,
|
||||
EGL_BUFFER_AGE_EXT, &buffer_age);
|
||||
|
|
@ -2123,7 +2124,8 @@ output_get_dummy_renderbuffer(struct weston_output *output)
|
|||
}
|
||||
|
||||
/* otherwise decide whether to refurbish and return the oldest, */
|
||||
max_buffers = (gr->has_egl_buffer_age || gr->has_egl_partial_update) ?
|
||||
max_buffers = (egl_display_has(gr, EXTENSION_EXT_BUFFER_AGE) ||
|
||||
egl_display_has(gr, EXTENSION_KHR_PARTIAL_UPDATE)) ?
|
||||
BUFFER_DAMAGE_COUNT : 1;
|
||||
if ((buffer_age == 0 || buffer_age - 1 > BUFFER_DAMAGE_COUNT) &&
|
||||
count >= max_buffers) {
|
||||
|
|
@ -2395,7 +2397,7 @@ gl_renderer_repaint_output(struct weston_output *output,
|
|||
pixman_region32_fini(&undamaged);
|
||||
}
|
||||
|
||||
if (gr->has_egl_partial_update &&
|
||||
if (egl_display_has(gr, EXTENSION_KHR_PARTIAL_UPDATE) &&
|
||||
go->egl_surface != EGL_NO_SURFACE &&
|
||||
!gr->debug_clear) {
|
||||
int n_egl_rects;
|
||||
|
|
@ -2443,7 +2445,9 @@ gl_renderer_repaint_output(struct weston_output *output,
|
|||
if (go->egl_surface != EGL_NO_SURFACE) {
|
||||
EGLBoolean ret;
|
||||
|
||||
if (gr->swap_buffers_with_damage && !gr->debug_clear) {
|
||||
if ((egl_display_has(gr, EXTENSION_EXT_SWAP_BUFFERS_WITH_DAMAGE) ||
|
||||
egl_display_has(gr, EXTENSION_KHR_SWAP_BUFFERS_WITH_DAMAGE)) &&
|
||||
!gr->debug_clear) {
|
||||
int n_egl_rects;
|
||||
EGLint *egl_rects;
|
||||
|
||||
|
|
@ -3015,7 +3019,7 @@ import_simple_dmabuf(struct gl_renderer *gr,
|
|||
attribs[atti++] = EGL_TRUE;
|
||||
|
||||
if (attributes->modifier != DRM_FORMAT_MOD_INVALID) {
|
||||
if (!gr->has_dmabuf_import_modifiers)
|
||||
if (!egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT_MODIFIERS))
|
||||
return NULL;
|
||||
has_modifier = true;
|
||||
} else {
|
||||
|
|
@ -3067,7 +3071,7 @@ import_simple_dmabuf(struct gl_renderer *gr,
|
|||
}
|
||||
}
|
||||
|
||||
if (gr->has_dmabuf_import_modifiers) {
|
||||
if (egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT_MODIFIERS)) {
|
||||
if (attributes->n_planes > 3) {
|
||||
attribs[atti++] = EGL_DMA_BUF_PLANE3_FD_EXT;
|
||||
attribs[atti++] = attributes->fd[3];
|
||||
|
|
@ -3327,9 +3331,9 @@ gl_renderer_query_dmabuf_formats(struct weston_compositor *wc,
|
|||
bool fallback = false;
|
||||
EGLint num;
|
||||
|
||||
assert(gr->has_dmabuf_import);
|
||||
assert(egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT));
|
||||
|
||||
if (!gr->has_dmabuf_import_modifiers ||
|
||||
if (!egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT_MODIFIERS) ||
|
||||
!gr->query_dmabuf_formats(gr->egl_display, 0, NULL, &num)) {
|
||||
num = gr->has_gl_texture_rg ? ARRAY_LENGTH(fallback_formats) : 2;
|
||||
fallback = true;
|
||||
|
|
@ -3364,9 +3368,9 @@ gl_renderer_query_dmabuf_modifiers_full(struct gl_renderer *gr, int format,
|
|||
{
|
||||
int num;
|
||||
|
||||
assert(gr->has_dmabuf_import);
|
||||
assert(egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT));
|
||||
|
||||
if (!gr->has_dmabuf_import_modifiers ||
|
||||
if (!egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT_MODIFIERS) ||
|
||||
!gr->query_dmabuf_modifiers(gr->egl_display, format, 0, NULL,
|
||||
NULL, &num) ||
|
||||
num == 0) {
|
||||
|
|
@ -3418,11 +3422,11 @@ gl_renderer_import_dmabuf(struct weston_compositor *ec,
|
|||
struct gl_renderer *gr = get_renderer(ec);
|
||||
struct gl_buffer_state *gb;
|
||||
|
||||
assert(gr->has_dmabuf_import);
|
||||
assert(egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT));
|
||||
|
||||
/* return if EGL doesn't support import modifiers */
|
||||
if (dmabuf->attributes.modifier != DRM_FORMAT_MOD_INVALID)
|
||||
if (!gr->has_dmabuf_import_modifiers)
|
||||
if (!egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT_MODIFIERS))
|
||||
return false;
|
||||
|
||||
/* reject all flags we do not recognize or handle */
|
||||
|
|
@ -4436,7 +4440,7 @@ gl_renderer_destroy(struct weston_compositor *ec)
|
|||
|
||||
wl_signal_emit(&gr->destroy_signal, gr);
|
||||
|
||||
if (gr->has_bind_display)
|
||||
if (egl_display_has(gr, EXTENSION_WL_BIND_WAYLAND_DISPLAY))
|
||||
gr->unbind_display(gr->egl_display, ec->wl_display);
|
||||
|
||||
wl_list_for_each_safe(gl_task, tmp, &gr->pending_capture_list, link)
|
||||
|
|
@ -4563,13 +4567,14 @@ gl_renderer_display_create(struct weston_compositor *ec,
|
|||
if (gl_renderer_setup_egl_extensions(ec) < 0)
|
||||
goto fail_with_error;
|
||||
|
||||
if (!gr->has_surfaceless_context)
|
||||
if (!egl_display_has(gr, EXTENSION_KHR_SURFACELESS_CONTEXT))
|
||||
goto fail_terminate;
|
||||
|
||||
if (!gr->has_configless_context) {
|
||||
if (!egl_display_has(gr, EXTENSION_KHR_NO_CONFIG_CONTEXT) &&
|
||||
!egl_display_has(gr, EXTENSION_MESA_CONFIGLESS_CONTEXT)) {
|
||||
EGLint egl_surface_type = options->egl_surface_type;
|
||||
|
||||
if (!gr->has_surfaceless_context)
|
||||
if (!egl_display_has(gr, EXTENSION_KHR_SURFACELESS_CONTEXT))
|
||||
egl_surface_type |= EGL_PBUFFER_BIT;
|
||||
|
||||
gr->egl_config =
|
||||
|
|
@ -4586,13 +4591,14 @@ gl_renderer_display_create(struct weston_compositor *ec,
|
|||
ec->capabilities |= WESTON_CAP_ROTATION_ANY;
|
||||
ec->capabilities |= WESTON_CAP_CAPTURE_YFLIP;
|
||||
ec->capabilities |= WESTON_CAP_VIEW_CLIP_MASK;
|
||||
if (gr->has_native_fence_sync && gr->has_wait_sync)
|
||||
if (egl_display_has(gr, EXTENSION_ANDROID_NATIVE_FENCE_SYNC) &&
|
||||
egl_display_has(gr, EXTENSION_KHR_WAIT_SYNC))
|
||||
ec->capabilities |= WESTON_CAP_EXPLICIT_SYNC;
|
||||
|
||||
if (gr->allocator)
|
||||
gr->base.dmabuf_alloc = gl_renderer_dmabuf_alloc;
|
||||
|
||||
if (gr->has_dmabuf_import) {
|
||||
if (egl_display_has(gr, EXTENSION_EXT_IMAGE_DMA_BUF_IMPORT)) {
|
||||
gr->base.import_dmabuf = gl_renderer_import_dmabuf;
|
||||
gr->base.get_supported_formats = gl_renderer_get_supported_formats;
|
||||
gr->base.create_renderbuffer_dmabuf = gl_renderer_create_renderbuffer_dmabuf;
|
||||
|
|
@ -4741,7 +4747,7 @@ gl_renderer_setup(struct weston_compositor *ec)
|
|||
* first. If the driver doesn't permit us to create a high priority
|
||||
* context, it will fallback to the default priority (MEDIUM).
|
||||
*/
|
||||
if (gr->has_context_priority) {
|
||||
if (egl_display_has(gr, EXTENSION_IMG_CONTEXT_PRIORITY)) {
|
||||
context_attribs[nattr++] = EGL_CONTEXT_PRIORITY_LEVEL_IMG;
|
||||
context_attribs[nattr++] = EGL_CONTEXT_PRIORITY_HIGH_IMG;
|
||||
}
|
||||
|
|
@ -4767,7 +4773,7 @@ gl_renderer_setup(struct weston_compositor *ec)
|
|||
}
|
||||
}
|
||||
|
||||
if (gr->has_context_priority) {
|
||||
if (egl_display_has(gr, EXTENSION_IMG_CONTEXT_PRIORITY)) {
|
||||
EGLint value = EGL_CONTEXT_PRIORITY_MEDIUM_IMG;
|
||||
|
||||
eglQueryContext(gr->egl_display, gr->egl_context,
|
||||
|
|
@ -4916,7 +4922,7 @@ gl_renderer_setup(struct weston_compositor *ec)
|
|||
"the GL_EXT_disjoint_timer_query "
|
||||
"extension\n");
|
||||
}
|
||||
} else if (gr->has_native_fence_sync) {
|
||||
} else if (egl_display_has(gr, EXTENSION_ANDROID_NATIVE_FENCE_SYNC)) {
|
||||
weston_log("warning: Disabling render GPU timeline due to "
|
||||
"missing GL_EXT_disjoint_timer_query extension\n");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue