gl-renderer: remove EGLConfig attributes from API

Now that all backends pass in a list of acceptable DRM formats, that is used to
determine if the EGLConfig has an alpha channel or not. Therefore the
opaque_attribs and alpha_attribs are now useless, and we can remove the whole
config_attribs argument from the API.

gl_renderer_get_egl_config() uses an internal attrib list that matches at least
the union of the opaque_attribs and alpha_attribs matches.

Overall, behaviour should remain unchanged.

The new attribute array becomes variable in the future, so it is left
non-const.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
dev
Pekka Paalanen 5 years ago
parent 9ddb3bc315
commit 7cb7a6781f
  1. 2
      libweston/backend-drm/drm.c
  2. 2
      libweston/backend-wayland/wayland.c
  3. 3
      libweston/backend-x11/x11.c
  4. 9
      libweston/renderer-gl/egl-glue.c
  5. 1
      libweston/renderer-gl/gl-renderer-internal.h
  6. 32
      libweston/renderer-gl/gl-renderer.c
  7. 5
      libweston/renderer-gl/gl-renderer.h

@ -747,7 +747,6 @@ drm_backend_create_gl_renderer(struct drm_backend *b)
if (gl_renderer->display_create(b->compositor, if (gl_renderer->display_create(b->compositor,
EGL_PLATFORM_GBM_KHR, EGL_PLATFORM_GBM_KHR,
(void *)b->gbm, (void *)b->gbm,
gl_renderer->opaque_attribs,
format, format,
n_formats) < 0) { n_formats) < 0) {
return -1; return -1;
@ -1393,7 +1392,6 @@ drm_output_init_egl(struct drm_output *output, struct drm_backend *b)
if (gl_renderer->output_window_create(&output->base, if (gl_renderer->output_window_create(&output->base,
(EGLNativeWindowType)output->gbm_surface, (EGLNativeWindowType)output->gbm_surface,
output->gbm_surface, output->gbm_surface,
gl_renderer->opaque_attribs,
format, format,
n_formats) < 0) { n_formats) < 0) {
weston_log("failed to create gl renderer output state\n"); weston_log("failed to create gl renderer output state\n");

@ -779,7 +779,6 @@ wayland_output_init_gl_renderer(struct wayland_output *output)
if (gl_renderer->output_window_create(&output->base, if (gl_renderer->output_window_create(&output->base,
output->gl.egl_window, output->gl.egl_window,
output->gl.egl_window, output->gl.egl_window,
gl_renderer->alpha_attribs,
wayland_formats, wayland_formats,
ARRAY_LENGTH(wayland_formats)) < 0) ARRAY_LENGTH(wayland_formats)) < 0)
goto cleanup_window; goto cleanup_window;
@ -2774,7 +2773,6 @@ wayland_backend_create(struct weston_compositor *compositor,
if (gl_renderer->display_create(compositor, if (gl_renderer->display_create(compositor,
EGL_PLATFORM_WAYLAND_KHR, EGL_PLATFORM_WAYLAND_KHR,
b->parent.wl_display, b->parent.wl_display,
gl_renderer->alpha_attribs,
wayland_formats, wayland_formats,
ARRAY_LENGTH(wayland_formats)) < 0) { ARRAY_LENGTH(wayland_formats)) < 0) {
weston_log("Failed to initialize the GL renderer; " weston_log("Failed to initialize the GL renderer; "

@ -870,7 +870,6 @@ x11_output_switch_mode(struct weston_output *base, struct weston_mode *mode)
ret = gl_renderer->output_window_create(&output->base, ret = gl_renderer->output_window_create(&output->base,
(EGLNativeWindowType) output->window, (EGLNativeWindowType) output->window,
&xid, &xid,
gl_renderer->opaque_attribs,
x11_formats, x11_formats,
ARRAY_LENGTH(x11_formats)); ARRAY_LENGTH(x11_formats));
if (ret < 0) if (ret < 0)
@ -1046,7 +1045,6 @@ x11_output_enable(struct weston_output *base)
&output->base, &output->base,
(EGLNativeWindowType) output->window, (EGLNativeWindowType) output->window,
&xid, &xid,
gl_renderer->opaque_attribs,
x11_formats, x11_formats,
ARRAY_LENGTH(x11_formats)); ARRAY_LENGTH(x11_formats));
if (ret < 0) if (ret < 0)
@ -1815,7 +1813,6 @@ init_gl_renderer(struct x11_backend *b)
ret = gl_renderer->display_create(b->compositor, EGL_PLATFORM_X11_KHR, ret = gl_renderer->display_create(b->compositor, EGL_PLATFORM_X11_KHR,
(void *) b->dpy, (void *) b->dpy,
gl_renderer->opaque_attribs,
x11_formats, x11_formats,
ARRAY_LENGTH(x11_formats)); ARRAY_LENGTH(x11_formats));

@ -187,7 +187,6 @@ out:
EGLConfig EGLConfig
gl_renderer_get_egl_config(struct gl_renderer *gr, gl_renderer_get_egl_config(struct gl_renderer *gr,
const EGLint *config_attribs,
const uint32_t *drm_formats, const uint32_t *drm_formats,
unsigned drm_formats_count) unsigned drm_formats_count)
{ {
@ -195,6 +194,14 @@ gl_renderer_get_egl_config(struct gl_renderer *gr,
const struct pixel_format_info *pinfo[16]; const struct pixel_format_info *pinfo[16];
unsigned pinfo_count; unsigned pinfo_count;
unsigned i; unsigned i;
EGLint config_attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RED_SIZE, 1,
EGL_GREEN_SIZE, 1,
EGL_BLUE_SIZE, 1,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_NONE
};
assert(drm_formats_count < ARRAY_LENGTH(pinfo)); assert(drm_formats_count < ARRAY_LENGTH(pinfo));
drm_formats_count = MIN(drm_formats_count, ARRAY_LENGTH(pinfo)); drm_formats_count = MIN(drm_formats_count, ARRAY_LENGTH(pinfo));

@ -138,7 +138,6 @@ egl_choose_config(struct gl_renderer *gr,
EGLConfig EGLConfig
gl_renderer_get_egl_config(struct gl_renderer *gr, gl_renderer_get_egl_config(struct gl_renderer *gr,
const EGLint *config_attribs,
const uint32_t *drm_formats, const uint32_t *drm_formats,
unsigned drm_formats_count); unsigned drm_formats_count);

@ -3061,14 +3061,13 @@ static EGLSurface
gl_renderer_create_window_surface(struct gl_renderer *gr, gl_renderer_create_window_surface(struct gl_renderer *gr,
EGLNativeWindowType window_for_legacy, EGLNativeWindowType window_for_legacy,
void *window_for_platform, void *window_for_platform,
const EGLint *config_attribs,
const uint32_t *drm_formats, const uint32_t *drm_formats,
unsigned drm_formats_count) unsigned drm_formats_count)
{ {
EGLSurface egl_surface = EGL_NO_SURFACE; EGLSurface egl_surface = EGL_NO_SURFACE;
EGLConfig egl_config; EGLConfig egl_config;
egl_config = gl_renderer_get_egl_config(gr, config_attribs, egl_config = gl_renderer_get_egl_config(gr,
drm_formats, drm_formats_count); drm_formats, drm_formats_count);
if (egl_config == EGL_NO_CONFIG_KHR) if (egl_config == EGL_NO_CONFIG_KHR)
return EGL_NO_SURFACE; return EGL_NO_SURFACE;
@ -3118,7 +3117,6 @@ static int
gl_renderer_output_window_create(struct weston_output *output, gl_renderer_output_window_create(struct weston_output *output,
EGLNativeWindowType window_for_legacy, EGLNativeWindowType window_for_legacy,
void *window_for_platform, void *window_for_platform,
const EGLint *config_attribs,
const uint32_t *drm_formats, const uint32_t *drm_formats,
unsigned drm_formats_count) unsigned drm_formats_count)
{ {
@ -3130,7 +3128,6 @@ gl_renderer_output_window_create(struct weston_output *output,
egl_surface = gl_renderer_create_window_surface(gr, egl_surface = gl_renderer_create_window_surface(gr,
window_for_legacy, window_for_legacy,
window_for_platform, window_for_platform,
config_attribs,
drm_formats, drm_formats,
drm_formats_count); drm_formats_count);
if (egl_surface == EGL_NO_SURFACE) { if (egl_surface == EGL_NO_SURFACE) {
@ -3234,27 +3231,6 @@ gl_renderer_destroy(struct weston_compositor *ec)
free(gr); free(gr);
} }
static const EGLint gl_renderer_opaque_attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RED_SIZE, 1,
EGL_GREEN_SIZE, 1,
EGL_BLUE_SIZE, 1,
EGL_ALPHA_SIZE, 0,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_NONE
};
static const EGLint gl_renderer_alpha_attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RED_SIZE, 1,
EGL_GREEN_SIZE, 1,
EGL_BLUE_SIZE, 1,
EGL_ALPHA_SIZE, 1,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_NONE
};
/** Checks whether a platform EGL client extension is supported /** Checks whether a platform EGL client extension is supported
* *
* \param ec The weston compositor * \param ec The weston compositor
@ -3387,7 +3363,6 @@ static int
gl_renderer_display_create(struct weston_compositor *ec, gl_renderer_display_create(struct weston_compositor *ec,
EGLenum platform, EGLenum platform,
void *native_display, void *native_display,
const EGLint *config_attribs,
const uint32_t *drm_formats, const uint32_t *drm_formats,
unsigned drm_formats_count) unsigned drm_formats_count)
{ {
@ -3461,7 +3436,7 @@ gl_renderer_display_create(struct weston_compositor *ec,
goto fail_with_error; goto fail_with_error;
if (!gr->has_configless_context) { if (!gr->has_configless_context) {
gr->egl_config = gl_renderer_get_egl_config(gr, config_attribs, gr->egl_config = gl_renderer_get_egl_config(gr,
drm_formats, drm_formats,
drm_formats_count); drm_formats_count);
if (gr->egl_config == EGL_NO_CONFIG_KHR) { if (gr->egl_config == EGL_NO_CONFIG_KHR) {
@ -3749,9 +3724,6 @@ gl_renderer_setup(struct weston_compositor *ec, EGLSurface egl_surface)
} }
WL_EXPORT struct gl_renderer_interface gl_renderer_interface = { WL_EXPORT struct gl_renderer_interface gl_renderer_interface = {
.opaque_attribs = gl_renderer_opaque_attribs,
.alpha_attribs = gl_renderer_alpha_attribs,
.display_create = gl_renderer_display_create, .display_create = gl_renderer_display_create,
.output_window_create = gl_renderer_output_window_create, .output_window_create = gl_renderer_output_window_create,
.output_destroy = gl_renderer_output_destroy, .output_destroy = gl_renderer_output_destroy,

@ -57,20 +57,15 @@ enum gl_renderer_border_side {
}; };
struct gl_renderer_interface { struct gl_renderer_interface {
const EGLint *opaque_attribs;
const EGLint *alpha_attribs;
int (*display_create)(struct weston_compositor *ec, int (*display_create)(struct weston_compositor *ec,
EGLenum platform, EGLenum platform,
void *native_display, void *native_display,
const EGLint *config_attribs,
const uint32_t *drm_formats, const uint32_t *drm_formats,
unsigned drm_formats_count); unsigned drm_formats_count);
int (*output_window_create)(struct weston_output *output, int (*output_window_create)(struct weston_output *output,
EGLNativeWindowType window_for_legacy, EGLNativeWindowType window_for_legacy,
void *window_for_platform, void *window_for_platform,
const EGLint *config_attribs,
const uint32_t *drm_formats, const uint32_t *drm_formats,
unsigned drm_formats_count); unsigned drm_formats_count);

Loading…
Cancel
Save