gl-renderer: configs for pbuffers too
Fold more code into the common config choosing, the pbuffer path this time. Simplifies code and allows gl_renderer_get_egl_config() to grow smarter in the future to guarantee config compatility in the absence of configless_context extension. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This commit is contained in:
@@ -132,7 +132,7 @@ egl_config_pixel_format_matches(struct gl_renderer *gr,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
egl_choose_config(struct gl_renderer *gr,
|
egl_choose_config(struct gl_renderer *gr,
|
||||||
const EGLint *attribs,
|
const EGLint *attribs,
|
||||||
const struct pixel_format_info *const *pinfo,
|
const struct pixel_format_info *const *pinfo,
|
||||||
@@ -187,6 +187,7 @@ out:
|
|||||||
|
|
||||||
EGLConfig
|
EGLConfig
|
||||||
gl_renderer_get_egl_config(struct gl_renderer *gr,
|
gl_renderer_get_egl_config(struct gl_renderer *gr,
|
||||||
|
EGLint egl_surface_type,
|
||||||
const uint32_t *drm_formats,
|
const uint32_t *drm_formats,
|
||||||
unsigned drm_formats_count)
|
unsigned drm_formats_count)
|
||||||
{
|
{
|
||||||
@@ -195,7 +196,7 @@ gl_renderer_get_egl_config(struct gl_renderer *gr,
|
|||||||
unsigned pinfo_count;
|
unsigned pinfo_count;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
EGLint config_attribs[] = {
|
EGLint config_attribs[] = {
|
||||||
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
|
EGL_SURFACE_TYPE, egl_surface_type,
|
||||||
EGL_RED_SIZE, 1,
|
EGL_RED_SIZE, 1,
|
||||||
EGL_GREEN_SIZE, 1,
|
EGL_GREEN_SIZE, 1,
|
||||||
EGL_BLUE_SIZE, 1,
|
EGL_BLUE_SIZE, 1,
|
||||||
|
|||||||
@@ -127,17 +127,9 @@ gl_renderer_print_egl_error_state(void);
|
|||||||
void
|
void
|
||||||
log_egl_config_info(EGLDisplay egldpy, EGLConfig eglconfig);
|
log_egl_config_info(EGLDisplay egldpy, EGLConfig eglconfig);
|
||||||
|
|
||||||
struct pixel_format_info;
|
|
||||||
|
|
||||||
int
|
|
||||||
egl_choose_config(struct gl_renderer *gr,
|
|
||||||
const EGLint *attribs,
|
|
||||||
const struct pixel_format_info *const *pinfo,
|
|
||||||
unsigned pinfo_count,
|
|
||||||
EGLConfig *config_out);
|
|
||||||
|
|
||||||
EGLConfig
|
EGLConfig
|
||||||
gl_renderer_get_egl_config(struct gl_renderer *gr,
|
gl_renderer_get_egl_config(struct gl_renderer *gr,
|
||||||
|
EGLint egl_surface_type,
|
||||||
const uint32_t *drm_formats,
|
const uint32_t *drm_formats,
|
||||||
unsigned drm_formats_count);
|
unsigned drm_formats_count);
|
||||||
|
|
||||||
|
|||||||
@@ -3067,7 +3067,7 @@ gl_renderer_create_window_surface(struct gl_renderer *gr,
|
|||||||
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,
|
egl_config = gl_renderer_get_egl_config(gr, EGL_WINDOW_BIT,
|
||||||
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;
|
||||||
@@ -3325,24 +3325,15 @@ output_handle_destroy(struct wl_listener *listener, void *data)
|
|||||||
static int
|
static int
|
||||||
gl_renderer_create_pbuffer_surface(struct gl_renderer *gr) {
|
gl_renderer_create_pbuffer_surface(struct gl_renderer *gr) {
|
||||||
EGLConfig pbuffer_config;
|
EGLConfig pbuffer_config;
|
||||||
|
|
||||||
static const EGLint pbuffer_config_attribs[] = {
|
|
||||||
EGL_SURFACE_TYPE, EGL_PBUFFER_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 pbuffer_attribs[] = {
|
static const EGLint pbuffer_attribs[] = {
|
||||||
EGL_WIDTH, 10,
|
EGL_WIDTH, 10,
|
||||||
EGL_HEIGHT, 10,
|
EGL_HEIGHT, 10,
|
||||||
EGL_NONE
|
EGL_NONE
|
||||||
};
|
};
|
||||||
|
|
||||||
if (egl_choose_config(gr, pbuffer_config_attribs, NULL, 0, &pbuffer_config) < 0) {
|
pbuffer_config = gl_renderer_get_egl_config(gr, EGL_PBUFFER_BIT,
|
||||||
|
NULL, 0);
|
||||||
|
if (pbuffer_config == EGL_NO_CONFIG_KHR) {
|
||||||
weston_log("failed to choose EGL config for PbufferSurface\n");
|
weston_log("failed to choose EGL config for PbufferSurface\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -3436,7 +3427,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,
|
gr->egl_config = gl_renderer_get_egl_config(gr, EGL_WINDOW_BIT,
|
||||||
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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user