[waffle] [PATCH 3/4] waffle internals: Stop using attrs->context_full_version

Jordan Justen jordan.l.justen at intel.com
Sun May 4 10:14:20 PDT 2014


If the user makes a request to waffle for a minor version > 9, then
this field will not properly represent the requested version.

Although, such a request from the user would likely be invalid, we
should handle it properly.

Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
---
 src/waffle/cgl/cgl_config.m                   | 25 +++++++++++++------------
 src/waffle/core/wcore_config_attrs.c          | 16 ++++++++--------
 src/waffle/core/wcore_config_attrs_unittest.c | 21 ---------------------
 src/waffle/egl/wegl_config.c                  |  6 +++---
 src/waffle/egl/wegl_context.c                 |  2 +-
 src/waffle/glx/glx_config.c                   | 12 ++++++------
 src/waffle/glx/glx_context.c                  |  4 ++--
 7 files changed, 33 insertions(+), 53 deletions(-)

diff --git a/src/waffle/cgl/cgl_config.m b/src/waffle/cgl/cgl_config.m
index 52dc225..6d8eec2 100644
--- a/src/waffle/cgl/cgl_config.m
+++ b/src/waffle/cgl/cgl_config.m
@@ -88,7 +88,7 @@ cgl_config_check_attrs(const struct cgl_platform *plat,
                 return false;
             }
 
-            if (attrs->context_full_version > 32) {
+            if (wcore_config_attrs_version_above(attrs, 32)) {
                 if (plat->system_version_full >= 0x0a09) {
                     wcore_errorf(WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM,
                                  "Waffle CGL was built only with Mac OS 10.8 "
@@ -103,7 +103,7 @@ cgl_config_check_attrs(const struct cgl_platform *plat,
                     return false;
                 }
             }
-            else if (attrs->context_full_version == 32) {
+            else if (wcore_config_attrs_version_equals(attrs, 32)) {
                 assert(attrs->context_profile == WAFFLE_CONTEXT_CORE_PROFILE);
 
                 if (plat->system_version_full < 0x0a07)
@@ -111,7 +111,7 @@ cgl_config_check_attrs(const struct cgl_platform *plat,
 
                 return true;
             }
-            else if (attrs->context_full_version == 31) {
+            else if (wcore_config_attrs_version_equals(attrs, 31)) {
                 // Emulate EGL_KHR_create_context, which allows
                 // implementations to promote OpenGL 3.1 to
                 // OpenGL 3.2 Core Profile.
@@ -122,7 +122,7 @@ cgl_config_check_attrs(const struct cgl_platform *plat,
 
                 return true;
             }
-            else if (attrs->context_full_version > 21) {
+            else if (wcore_config_attrs_version_above(attrs, 21)) {
                 wcore_errorf(WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM,
                              "CGL does not support OpenGL %d.%d contexts",
                              attrs->context_major_version,
@@ -130,7 +130,7 @@ cgl_config_check_attrs(const struct cgl_platform *plat,
                 return false;
             }
             else {
-                assert(attrs->context_full_version >= 10);
+                assert(wcore_config_attrs_version_above_or_equals(attrs, 10));
                 return true;
             }
         case WAFFLE_CONTEXT_OPENGL_ES1:
@@ -179,25 +179,26 @@ cgl_config_fill_pixel_format_attrs(
     // return a context of the latest supported flavor that is
     // backwards-compatibile with the requested flavor.
     if (plat->system_version_full >= 0x0a07) {
-        if (attrs->context_full_version == 32) {
+        if (wcore_config_attrs_version_equals(attrs, 32)) {
             ADD_ATTR(kCGLPFAOpenGLProfile, (int) kCGLOGLPVersion_3_2_Core);
         }
-        else if (attrs->context_full_version == 31) {
+        else if (wcore_config_attrs_version_equals(attrs, 31)) {
             ADD_ATTR(kCGLPFAOpenGLProfile, (int) kCGLOGLPVersion_3_2_Core);
         }
-        else if (attrs->context_full_version <= 21) {
+        else if (wcore_config_attrs_version_below_or_equals(attrs, 21)) {
             ADD_ATTR(kCGLPFAOpenGLProfile, (int) kCGLOGLPVersion_Legacy);
         }
         else {
-            wcore_error_internal("version=%d profile=%#x",
-                                 attrs->context_full_version,
+            wcore_error_internal("version=%d.%d profile=%#x",
+                                 attrs->context_version_major,
+                                 attrs->context_version_minor,
                                  attrs->context_profile);
             return false;
         }
     }
     else {
         // The OS doesn't recognize attribute kCGLPFAOpenGLProfile.
-        assert(attrs->context_full_version <= 21);
+        assert(wcore_config_attrs_version_below_or_equals(attrs, 21));
     }
 
     ADD_ATTR(kCGLPFAColorSize,          attrs->rgb_size);
@@ -207,7 +208,7 @@ cgl_config_fill_pixel_format_attrs(
     ADD_ATTR(kCGLPFASampleBuffers,      attrs->sample_buffers);
     ADD_ATTR(kCGLPFASamples,            attrs->samples);
 
-    if (attrs->context_full_version == 10)
+    if (wcore_config_attrs_version_equals(attrs, 10))
         ADD_ATTR(kCGLPFAAccumSize,      attrs->accum_buffer);
 
     if (attrs->double_buffered)
diff --git a/src/waffle/core/wcore_config_attrs.c b/src/waffle/core/wcore_config_attrs.c
index 0d27516..415ce28 100644
--- a/src/waffle/core/wcore_config_attrs.c
+++ b/src/waffle/core/wcore_config_attrs.c
@@ -190,7 +190,7 @@ parse_context_version(struct wcore_config_attrs *attrs,
 
     switch (attrs->context_api) {
         case WAFFLE_CONTEXT_OPENGL:
-            if (attrs->context_full_version < 10) {
+            if (wcore_config_attrs_version_below(attrs, 10)) {
                 wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                              "for OpenGL, the requested context version "
                              "must be >= 1.0");
@@ -199,8 +199,8 @@ parse_context_version(struct wcore_config_attrs *attrs,
             break;
 
         case WAFFLE_CONTEXT_OPENGL_ES1:
-            if (attrs->context_full_version != 10 &&
-                attrs->context_full_version != 11) {
+            if (!wcore_config_attrs_version_equals(attrs, 10) &&
+                !wcore_config_attrs_version_equals(attrs, 11)) {
                 wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                              "for OpenGL ES1, the requested context version "
                              "must be 1.0 or 1.1");
@@ -240,7 +240,7 @@ set_context_profile_default(struct wcore_config_attrs *attrs)
 {
     switch (attrs->context_api) {
         case WAFFLE_CONTEXT_OPENGL:
-            if (attrs->context_full_version >= 32) {
+            if (wcore_config_attrs_version_above_or_equals(attrs, 32)) {
                 attrs->context_profile = WAFFLE_CONTEXT_CORE_PROFILE;
             }
             else {
@@ -271,7 +271,7 @@ parse_context_profile(struct wcore_config_attrs *attrs,
 
     switch (attrs->context_api) {
         case WAFFLE_CONTEXT_OPENGL:
-            if (attrs->context_full_version >= 32
+            if (wcore_config_attrs_version_above_or_equals(attrs, 32)
                 && attrs->context_profile != WAFFLE_CONTEXT_CORE_PROFILE
                 && attrs->context_profile != WAFFLE_CONTEXT_COMPATIBILITY_PROFILE) {
                 wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
@@ -281,7 +281,7 @@ parse_context_profile(struct wcore_config_attrs *attrs,
                              "WAFFLE_CONTEXT_COMPATIBILITY_PROFILE");
                 return false;
             }
-            else if (attrs->context_full_version < 32
+            else if (wcore_config_attrs_version_below(attrs, 32)
                      && attrs->context_profile != WAFFLE_NONE) {
                 wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                              "for OpenGL < 3.2, WAFFLE_CONTEXT_PROFILE must be "
@@ -329,7 +329,7 @@ parse_context_forward_compatible(struct wcore_config_attrs *attrs,
 
     }
 
-    if (attrs->context_full_version < 30) {
+    if (wcore_config_attrs_version_below(attrs, 30)) {
         wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                      "To request a forward-compatible context, the context "
                      "version must be at least 3.0");
@@ -461,7 +461,7 @@ check_final(struct wcore_config_attrs *attrs)
 {
     if (attrs->context_api == WAFFLE_CONTEXT_OPENGL
         && attrs->context_profile == WAFFLE_CONTEXT_CORE_PROFILE
-        && attrs->context_full_version >= 32
+        && wcore_config_attrs_version_above_or_equals(attrs, 32)
         && attrs->accum_buffer) {
         wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                      "%s", "WAFFLE_ACCUM_BUFFER must be false for"
diff --git a/src/waffle/core/wcore_config_attrs_unittest.c b/src/waffle/core/wcore_config_attrs_unittest.c
index 5fcb408..501e30f 100644
--- a/src/waffle/core/wcore_config_attrs_unittest.c
+++ b/src/waffle/core/wcore_config_attrs_unittest.c
@@ -48,7 +48,6 @@ setup(void **state) {
         .context_api            = WAFFLE_CONTEXT_OPENGL,
         .context_major_version  = 1,
         .context_minor_version  = 0,
-        .context_full_version   = 10,
         .context_profile        = WAFFLE_NONE,
         .context_debug          = false,
         .context_forward_compatible = false,
@@ -117,7 +116,6 @@ test_wcore_config_attrs_gl_defaults(void **state) {
 
     assert_int_equal(ts->actual_attrs.context_major_version, 1);
     assert_int_equal(ts->actual_attrs.context_minor_version, 0);
-    assert_int_equal(ts->actual_attrs.context_full_version, 10);
     assert_int_equal(ts->actual_attrs.context_profile, WAFFLE_NONE);
     assert_int_equal(ts->actual_attrs.red_size, 0);
     assert_int_equal(ts->actual_attrs.green_size, 0);
@@ -145,7 +143,6 @@ test_wcore_config_attrs_gles1_defaults(void **state) {
 
     assert_int_equal(ts->actual_attrs.context_major_version, 1);
     assert_int_equal(ts->actual_attrs.context_minor_version, 0);
-    assert_int_equal(ts->actual_attrs.context_full_version, 10);
     assert_int_equal(ts->actual_attrs.context_profile, WAFFLE_NONE);
 
     assert_int_equal(ts->actual_attrs.red_size, 0);
@@ -173,7 +170,6 @@ test_wcore_config_attrs_gles2_defaults(void **state) {
 
     assert_int_equal(ts->actual_attrs.context_major_version, 2);
     assert_int_equal(ts->actual_attrs.context_minor_version, 0);
-    assert_int_equal(ts->actual_attrs.context_full_version, 20);
     assert_int_equal(ts->actual_attrs.context_profile, WAFFLE_NONE);
 
     assert_int_equal(ts->actual_attrs.red_size, 0);
@@ -201,7 +197,6 @@ test_wcore_config_attrs_gles3_defaults(void **state) {
 
     assert_int_equal(ts->actual_attrs.context_major_version, 3);
     assert_int_equal(ts->actual_attrs.context_minor_version, 0);
-    assert_int_equal(ts->actual_attrs.context_full_version, 30);
     assert_int_equal(ts->actual_attrs.context_profile, WAFFLE_NONE);
 
     assert_int_equal(ts->actual_attrs.red_size, 0);
@@ -431,7 +426,6 @@ test_wcore_config_attrs_gles10(void **state) {
     assert_true(wcore_config_attrs_parse(attrib_list, &ts->actual_attrs));
     assert_int_equal(ts->actual_attrs.context_major_version, 1);
     assert_int_equal(ts->actual_attrs.context_minor_version, 0);
-    assert_int_equal(ts->actual_attrs.context_full_version, 10);
 }
 
 static void
@@ -448,7 +442,6 @@ test_wcore_config_attrs_gles11(void **state) {
     assert_true(wcore_config_attrs_parse(attrib_list, &ts->actual_attrs));
     assert_int_equal(ts->actual_attrs.context_major_version, 1);
     assert_int_equal(ts->actual_attrs.context_minor_version, 1);
-    assert_int_equal(ts->actual_attrs.context_full_version, 11);
 }
 
 static void
@@ -480,7 +473,6 @@ test_wcore_config_attrs_gles20(void **state) {
     assert_true(wcore_config_attrs_parse(attrib_list, &ts->actual_attrs));
     assert_int_equal(ts->actual_attrs.context_major_version, 2);
     assert_int_equal(ts->actual_attrs.context_minor_version, 0);
-    assert_int_equal(ts->actual_attrs.context_full_version, 20);
 }
 
 static void
@@ -497,7 +489,6 @@ test_wcore_config_attrs_gles21(void **state) {
     assert_true(wcore_config_attrs_parse(attrib_list, &ts->actual_attrs));
     assert_int_equal(ts->actual_attrs.context_major_version, 2);
     assert_int_equal(ts->actual_attrs.context_minor_version, 1);
-    assert_int_equal(ts->actual_attrs.context_full_version, 21);
 }
 
 static void
@@ -529,7 +520,6 @@ test_wcore_config_attrs_gles30(void **state) {
     assert_true(wcore_config_attrs_parse(attrib_list, &ts->actual_attrs));
     assert_int_equal(ts->actual_attrs.context_major_version, 3);
     assert_int_equal(ts->actual_attrs.context_minor_version, 0);
-    assert_int_equal(ts->actual_attrs.context_full_version, 30);
 }
 
 static void
@@ -546,7 +536,6 @@ test_wcore_config_attrs_gles31(void **state) {
     assert_true(wcore_config_attrs_parse(attrib_list, &ts->actual_attrs));
     assert_int_equal(ts->actual_attrs.context_major_version, 3);
     assert_int_equal(ts->actual_attrs.context_minor_version, 1);
-    assert_int_equal(ts->actual_attrs.context_full_version, 31);
 }
 
 static void
@@ -918,7 +907,6 @@ test_wcore_config_attrs_forward_compat_gl30(void **state) {
         0,
     };
 
-    ts->expect_attrs.context_full_version = 30;
     ts->expect_attrs.context_major_version = 3;
     ts->expect_attrs.context_minor_version = 0;
     ts->expect_attrs.context_forward_compatible = true;
@@ -940,7 +928,6 @@ test_wcore_config_attrs_forward_compat_gl32(void **state) {
         0,
     };
 
-    ts->expect_attrs.context_full_version = 32;
     ts->expect_attrs.context_major_version = 3;
     ts->expect_attrs.context_minor_version = 2;
     ts->expect_attrs.context_profile = WAFFLE_CONTEXT_CORE_PROFILE;
@@ -963,7 +950,6 @@ test_wcore_config_attrs_forward_compat_gl41(void **state) {
         0,
     };
 
-    ts->expect_attrs.context_full_version = 41;
     ts->expect_attrs.context_major_version = 4;
     ts->expect_attrs.context_minor_version = 1;
     ts->expect_attrs.context_profile = WAFFLE_CONTEXT_CORE_PROFILE;
@@ -986,7 +972,6 @@ test_wcore_config_attrs_forward_compat_gl30_dont_care(void **state) {
         0,
     };
 
-    ts->expect_attrs.context_full_version = 30;
     ts->expect_attrs.context_major_version = 3;
     ts->expect_attrs.context_minor_version = 0;
     ts->expect_attrs.context_forward_compatible = false;
@@ -1044,7 +1029,6 @@ test_wcore_config_attrs_debug_gl21(void **state) {
     };
 
     ts->expect_attrs.context_api = WAFFLE_CONTEXT_OPENGL;
-    ts->expect_attrs.context_full_version = 21;
     ts->expect_attrs.context_major_version = 2;
     ts->expect_attrs.context_minor_version = 1;
     ts->expect_attrs.context_debug = true;
@@ -1069,7 +1053,6 @@ test_wcore_config_attrs_debug_gl32_core(void **state) {
 
     ts->expect_attrs.context_api = WAFFLE_CONTEXT_OPENGL;
     ts->expect_attrs.context_profile = WAFFLE_CONTEXT_CORE_PROFILE;
-    ts->expect_attrs.context_full_version = 32;
     ts->expect_attrs.context_major_version = 3;
     ts->expect_attrs.context_minor_version = 2;
     ts->expect_attrs.context_debug = true;
@@ -1094,7 +1077,6 @@ test_wcore_config_attrs_debug_gl32_compat(void **state) {
 
     ts->expect_attrs.context_api = WAFFLE_CONTEXT_OPENGL;
     ts->expect_attrs.context_profile = WAFFLE_CONTEXT_COMPATIBILITY_PROFILE;
-    ts->expect_attrs.context_full_version = 32;
     ts->expect_attrs.context_major_version = 3;
     ts->expect_attrs.context_minor_version = 2;
     ts->expect_attrs.context_debug = true;
@@ -1115,7 +1097,6 @@ test_wcore_config_attrs_debug_gles1(void **state) {
     };
 
     ts->expect_attrs.context_api = WAFFLE_CONTEXT_OPENGL_ES1;
-    ts->expect_attrs.context_full_version = 10;
     ts->expect_attrs.context_major_version = 1;
     ts->expect_attrs.context_debug = true;
 
@@ -1135,7 +1116,6 @@ test_wcore_config_attrs_debug_gles2(void **state) {
     };
 
     ts->expect_attrs.context_api = WAFFLE_CONTEXT_OPENGL_ES2;
-    ts->expect_attrs.context_full_version = 20;
     ts->expect_attrs.context_major_version = 2;
     ts->expect_attrs.context_debug = true;
 
@@ -1155,7 +1135,6 @@ test_wcore_config_attrs_debug_gles3(void **state) {
     };
 
     ts->expect_attrs.context_api = WAFFLE_CONTEXT_OPENGL_ES3;
-    ts->expect_attrs.context_full_version = 30;
     ts->expect_attrs.context_major_version = 3;
     ts->expect_attrs.context_debug = true;
 
diff --git a/src/waffle/egl/wegl_config.c b/src/waffle/egl/wegl_config.c
index 1e2d4ee..3220e02 100644
--- a/src/waffle/egl/wegl_config.c
+++ b/src/waffle/egl/wegl_config.c
@@ -44,7 +44,7 @@ check_context_attrs(struct wegl_display *dpy,
 
     if (attrs->context_forward_compatible) {
         assert(attrs->context_api == WAFFLE_CONTEXT_OPENGL);
-        assert(attrs->context_full_version >= 30);
+        assert(wcore_config_attrs_version_above_or_equals(attrs, 30));
     }
 
     if (attrs->context_debug && !dpy->KHR_create_context) {
@@ -56,7 +56,7 @@ check_context_attrs(struct wegl_display *dpy,
 
     switch (attrs->context_api) {
         case WAFFLE_CONTEXT_OPENGL:
-            if (attrs->context_full_version != 10 && !dpy->KHR_create_context) {
+            if (!wcore_config_attrs_version_equals(attrs, 10) && !dpy->KHR_create_context) {
                 wcore_errorf(WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM,
                              "KHR_EXT_create_context is required in order to "
                              "request an OpenGL version not equal to the default "
@@ -64,7 +64,7 @@ check_context_attrs(struct wegl_display *dpy,
                 return false;
             }
 
-            if (attrs->context_full_version >= 32) {
+            if (wcore_config_attrs_version_above_or_equals(attrs, 32)) {
                 assert(attrs->context_profile == WAFFLE_CONTEXT_CORE_PROFILE ||
                        attrs->context_profile == WAFFLE_CONTEXT_COMPATIBILITY_PROFILE);
             }
diff --git a/src/waffle/egl/wegl_context.c b/src/waffle/egl/wegl_context.c
index 9ffc4f5..d89c794 100644
--- a/src/waffle/egl/wegl_context.c
+++ b/src/waffle/egl/wegl_context.c
@@ -94,7 +94,7 @@ create_real_context(struct wegl_config *config,
                 context_flags |= EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR;
             }
 
-            if (attrs->context_full_version >= 32)  {
+            if (wcore_config_attrs_version_above_or_equals(attrs, 32))  {
                 assert(dpy->KHR_create_context);
                 switch (attrs->context_profile) {
                     case WAFFLE_CONTEXT_CORE_PROFILE:
diff --git a/src/waffle/glx/glx_config.c b/src/waffle/glx/glx_config.c
index 56744d4..3364754 100644
--- a/src/waffle/glx/glx_config.c
+++ b/src/waffle/glx/glx_config.c
@@ -58,7 +58,7 @@ glx_config_check_context_attrs(struct glx_display *dpy,
 
     if (attrs->context_forward_compatible) {
         assert(attrs->context_api == WAFFLE_CONTEXT_OPENGL);
-        assert(attrs->context_full_version >= 30);
+        assert(wcore_config_attrs_version_above_or_equals(attrs, 30));
     }
 
     if (attrs->context_debug && !dpy->ARB_create_context) {
@@ -70,20 +70,20 @@ glx_config_check_context_attrs(struct glx_display *dpy,
 
     switch (attrs->context_api) {
         case WAFFLE_CONTEXT_OPENGL:
-            if (attrs->context_full_version != 10 && !dpy->ARB_create_context) {
+            if (!wcore_config_attrs_version_equals(attrs, 10) && !dpy->ARB_create_context) {
                 wcore_errorf(WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM,
                              "GLX_ARB_create_context is required in order to "
                              "request an OpenGL version not equal to the default "
                              "value 1.0");
                 return false;
             }
-            else if (attrs->context_full_version >= 32 && !dpy->ARB_create_context_profile) {
+            else if (wcore_config_attrs_version_above_or_equals(attrs, 32) && !dpy->ARB_create_context_profile) {
                 wcore_errorf(WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM,
                              "GLX_ARB_create_context_profile is required "
                              "to create a context with version >= 3.2");
                 return false;
             }
-            else if (attrs->context_full_version >= 32) {
+            else if (wcore_config_attrs_version_above_or_equals(attrs, 32)) {
                 assert(attrs->context_profile == WAFFLE_CONTEXT_CORE_PROFILE ||
                        attrs->context_profile == WAFFLE_CONTEXT_COMPATIBILITY_PROFILE);
             }
@@ -98,8 +98,8 @@ glx_config_check_context_attrs(struct glx_display *dpy,
             return true;
 
         case WAFFLE_CONTEXT_OPENGL_ES1:
-            assert(attrs->context_full_version == 10 ||
-                   attrs->context_full_version == 11);
+            assert(wcore_config_attrs_version_equals(attrs, 10) ||
+                   wcore_config_attrs_version_equals(attrs, 11));
             assert(!attrs->context_forward_compatible);
 
             if (!dpy->EXT_create_context_es_profile) {
diff --git a/src/waffle/glx/glx_context.c b/src/waffle/glx/glx_context.c
index a15a0a1..64bb4d8 100644
--- a/src/waffle/glx/glx_context.c
+++ b/src/waffle/glx/glx_context.c
@@ -96,7 +96,7 @@ glx_context_fill_attrib_list(struct glx_config *config,
     // glXCreateContextAttribsARB with MAJOR=1 and MINOR=0 returns an OpenGL
     // 2.1 context. Calling it with MAJOR and MINOR unspecified returns
     // a context of the latest supported OpenGL version.
-    if (!(attrs->context_full_version == 10 &&
+    if (!(wcore_config_attrs_version_equals(attrs, 10) &&
           attrs->context_api == WAFFLE_CONTEXT_OPENGL))
     {
         attrib_list[i++] = GLX_CONTEXT_MAJOR_VERSION_ARB;
@@ -108,7 +108,7 @@ glx_context_fill_attrib_list(struct glx_config *config,
 
     switch (attrs->context_api) {
         case WAFFLE_CONTEXT_OPENGL:
-            if (attrs->context_full_version >= 32) {
+            if (wcore_config_attrs_version_above_or_equals(attrs, 32)) {
                 switch (attrs->context_profile) {
                     case WAFFLE_CONTEXT_CORE_PROFILE:
                         attrib_list[i++] = GLX_CONTEXT_PROFILE_MASK_ARB;
-- 
1.9.2



More information about the waffle mailing list