aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Justen <jordan.l.justen@intel.com>2014-05-04 09:40:32 -0700
committerJordan Justen <jordan.l.justen@intel.com>2014-05-09 00:24:32 -0700
commit0e1ae83abb259f81aaa662defce183e883f2dbd8 (patch)
tree9181346f4c38146a967c871b101c768a807902e1
parentb71374f38e7e82b807e199076a213eff19d60715 (diff)
downloadwaffle-0e1ae83abb259f81aaa662defce183e883f2dbd8.tar.gz
core: Stop using attrs->context_full_version
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@intel.com> Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
-rw-r--r--src/waffle/cgl/cgl_config.m25
-rw-r--r--src/waffle/core/wcore_config_attrs.c16
-rw-r--r--src/waffle/core/wcore_config_attrs_unittest.c21
-rw-r--r--src/waffle/egl/wegl_config.c6
-rw-r--r--src/waffle/egl/wegl_context.c2
-rw-r--r--src/waffle/glx/glx_config.c12
-rw-r--r--src/waffle/glx/glx_context.c4
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..094178b 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_gt(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_eq(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_eq(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_gt(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_ge(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_eq(attrs, 32)) {
ADD_ATTR(kCGLPFAOpenGLProfile, (int) kCGLOGLPVersion_3_2_Core);
}
- else if (attrs->context_full_version == 31) {
+ else if (wcore_config_attrs_version_eq(attrs, 31)) {
ADD_ATTR(kCGLPFAOpenGLProfile, (int) kCGLOGLPVersion_3_2_Core);
}
- else if (attrs->context_full_version <= 21) {
+ else if (wcore_config_attrs_version_le(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_le(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_eq(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 da80c38..b7d5d76 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_lt(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_eq(attrs, 10) &&
+ !wcore_config_attrs_version_eq(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_ge(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_ge(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_lt(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_lt(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_ge(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..5dbe1b6 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_ge(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_eq(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_ge(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..abd6129 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_ge(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..bad3531 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_ge(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_eq(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_ge(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_ge(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_eq(attrs, 10) ||
+ wcore_config_attrs_version_eq(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..c7a7d91 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_eq(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_ge(attrs, 32)) {
switch (attrs->context_profile) {
case WAFFLE_CONTEXT_CORE_PROFILE:
attrib_list[i++] = GLX_CONTEXT_PROFILE_MASK_ARB;