From 429bf064eb64a282664d082d7ac896f4a16b3ee5 Mon Sep 17 00:00:00 2001 From: Stanislav Vorobiov Date: Wed, 5 Mar 2014 12:55:45 +0400 Subject: [PATCH] YaGL: Allow using EGL_DONT_CARE in eglChooseConfig EGL_DONT_CARE must be allowed to be used in config attributes Change-Id: If20440b863a5525d8f0d63c4d778db65f7959ff6 --- hw/yagl/yagl_apis/egl/yagl_host_egl_calls.c | 69 ++++++++++++++------- 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/hw/yagl/yagl_apis/egl/yagl_host_egl_calls.c b/hw/yagl/yagl_apis/egl/yagl_host_egl_calls.c index 883231a3e6..e52ab90390 100644 --- a/hw/yagl/yagl_apis/egl/yagl_host_egl_calls.c +++ b/hw/yagl/yagl_apis/egl/yagl_host_egl_calls.c @@ -451,42 +451,48 @@ EGLBoolean yagl_host_eglChooseConfig(yagl_host_handle dpy_, dummy.frame_buffer_level = attrib_list[i + 1]; break; case EGL_BUFFER_SIZE: - if (attrib_list[i + 1] < 0) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] < 0)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } dummy.buffer_size = attrib_list[i + 1]; break; case EGL_RED_SIZE: - if (attrib_list[i + 1] < 0) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] < 0)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } dummy.red_size = attrib_list[i + 1]; break; case EGL_GREEN_SIZE: - if (attrib_list[i + 1] < 0) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] < 0)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } dummy.green_size = attrib_list[i + 1]; break; case EGL_BLUE_SIZE: - if (attrib_list[i + 1] < 0) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] < 0)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } dummy.blue_size = attrib_list[i + 1]; break; case EGL_ALPHA_SIZE: - if (attrib_list[i + 1] < 0) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] < 0)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } dummy.alpha_size = attrib_list[i + 1]; break; case EGL_CONFIG_CAVEAT: - if ((attrib_list[i + 1] != EGL_NONE) && + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] != EGL_NONE) && (attrib_list[i + 1] != EGL_SLOW_CONFIG) && (attrib_list[i + 1] != EGL_NON_CONFORMANT_CONFIG)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); @@ -495,42 +501,52 @@ EGLBoolean yagl_host_eglChooseConfig(yagl_host_handle dpy_, dummy.caveat = attrib_list[i + 1]; break; case EGL_CONFIG_ID: - if (attrib_list[i + 1] < 0) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] < 0)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } - config_id = attrib_list[i + 1]; - has_config_id = true; + if (attrib_list[i + 1] != EGL_DONT_CARE) { + config_id = attrib_list[i + 1]; + has_config_id = true; + } break; case EGL_DEPTH_SIZE: - if (attrib_list[i + 1] < 0) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] < 0)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } dummy.depth_size = attrib_list[i + 1]; break; case EGL_MAX_SWAP_INTERVAL: - if (attrib_list[i + 1] < 0) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] < 0)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } dummy.max_swap_interval = attrib_list[i + 1]; break; case EGL_MIN_SWAP_INTERVAL: - if (attrib_list[i + 1] < 0) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] < 0)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } dummy.min_swap_interval = attrib_list[i + 1]; break; case EGL_CONFORMANT: - if ((attrib_list[i + 1] & - ~(EGL_OPENGL_ES_BIT| - EGL_OPENVG_BIT| - EGL_OPENGL_ES2_BIT| - EGL_OPENGL_BIT)) != 0) { - YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); - goto out; + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + ((attrib_list[i + 1] & + ~(EGL_OPENGL_ES_BIT| + EGL_OPENVG_BIT| + EGL_OPENGL_ES2_BIT| + EGL_OPENGL_BIT)) != 0)) { + if (((attrib_list[i + 1] & EGL_OPENGL_ES3_BIT_KHR) == 0) || + (dpy->backend->gl_version < yagl_gl_3_1_es3)) { + YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); + goto out; + } } dummy.conformant = attrib_list[i + 1]; break; @@ -542,34 +558,39 @@ EGLBoolean yagl_host_eglChooseConfig(yagl_host_handle dpy_, break; case EGL_NATIVE_VISUAL_TYPE: dummy.native_visual_type = attrib_list[i + 1]; - if ((attrib_list[i + 1] < 0) || (attrib_list[i + 1] > 1)) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + ((attrib_list[i + 1] < 0) || (attrib_list[i + 1] > 1))) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } break; case EGL_SAMPLE_BUFFERS: - if (attrib_list[i + 1] < 0) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] < 0)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } dummy.sample_buffers_num = attrib_list[i + 1]; break; case EGL_SAMPLES: - if (attrib_list[i + 1] < 0) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] < 0)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } dummy.samples_per_pixel = attrib_list[i + 1]; break; case EGL_STENCIL_SIZE: - if (attrib_list[i + 1] < 0) { + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] < 0)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; } dummy.stencil_size = attrib_list[i + 1]; break; case EGL_TRANSPARENT_TYPE: - if ((attrib_list[i + 1] != EGL_NONE) && + if ((attrib_list[i + 1] != EGL_DONT_CARE) && + (attrib_list[i + 1] != EGL_NONE) && (attrib_list[i + 1] != EGL_TRANSPARENT_RGB)) { YAGL_SET_ERR(EGL_BAD_ATTRIBUTE); goto out; -- 2.34.1