[Piglit] [PATCH 5/9] util/waffle: Improve error messages when context creation fails
Chad Versace
chad.versace at linux.intel.com
Mon Dec 30 16:08:32 PST 2013
Unify the 3 occurences of message "Failed to create ... context", and
move the message closer to the failure.
Print a more helpful message when special_case_gl_31() fails.
Add helper function make_context_description(), used in the newer better
error messages.
Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
---
.../piglit-framework-gl/piglit_wfl_framework.c | 107 ++++++++++++++++-----
1 file changed, 82 insertions(+), 25 deletions(-)
diff --git a/tests/util/piglit-framework-gl/piglit_wfl_framework.c b/tests/util/piglit-framework-gl/piglit_wfl_framework.c
index 2dbfa2f..521cfcd 100644
--- a/tests/util/piglit-framework-gl/piglit_wfl_framework.c
+++ b/tests/util/piglit-framework-gl/piglit_wfl_framework.c
@@ -143,6 +143,59 @@ concat_attrib_lists(const int32_t a[], const int32_t b[])
}
/**
+ * Return a human-readable description of the context specified by an \a
+ * attrib_list suitable for waffle_config_choose(). At most \a bufsize bytes,
+ * including the terminal null, are written to \a buf.
+ */
+static void
+make_context_description(char buf[], size_t bufsize, const int32_t attrib_list[])
+{
+ int32_t api = 0, profile = 0, major_version = 0, minor_version = 0;
+ const char *api_str = NULL, *profile_str = NULL;
+
+ if (bufsize == 0) {
+ return;
+ }
+
+ waffle_attrib_list_get(attrib_list, WAFFLE_CONTEXT_API, &api);
+ waffle_attrib_list_get(attrib_list, WAFFLE_CONTEXT_PROFILE, &profile);
+ waffle_attrib_list_get(attrib_list, WAFFLE_CONTEXT_MAJOR_VERSION, &major_version);
+ waffle_attrib_list_get(attrib_list, WAFFLE_CONTEXT_MINOR_VERSION, &minor_version);
+
+ switch (api) {
+ case WAFFLE_CONTEXT_OPENGL:
+ api_str = "OpenGL";
+ break;
+ case WAFFLE_CONTEXT_OPENGL_ES1:
+ case WAFFLE_CONTEXT_OPENGL_ES2:
+ case WAFFLE_CONTEXT_OPENGL_ES3:
+ api_str = "OpenGL ES";
+ break;
+ default:
+ assert(0);
+ break;
+ }
+
+ switch (profile) {
+ case WAFFLE_CONTEXT_CORE_PROFILE:
+ profile_str = "Core ";
+ break;
+ case WAFFLE_CONTEXT_COMPATIBILITY_PROFILE:
+ profile_str = "Compatibility ";
+ break;
+ case 0:
+ profile_str = "";
+ break;
+ default:
+ assert(0);
+ break;
+ }
+
+ snprintf(buf, bufsize, "%s %d.%d %sContext",
+ api_str, major_version, minor_version, profile_str);
+}
+
+/**
* \brief Return a attribute list suitable for waffle_config_choose().
*
* The funcion deduces the values of WAFFLE_CONTEXT_API,
@@ -255,7 +308,8 @@ make_config_attrib_list(const struct piglit_gl_test_config *test_config,
*/
static bool
check_gl_version(const struct piglit_gl_test_config *test_config,
- enum context_flavor flavor)
+ enum context_flavor flavor,
+ const char *context_description)
{
switch (flavor) {
case CONTEXT_GL_CORE:
@@ -274,10 +328,9 @@ check_gl_version(const struct piglit_gl_test_config *test_config,
if (actual_version >= test_config->supports_gl_compat_version)
return true;
- printf("piglit: info: Requested a GL %d.%d compatibility "
- "context, but actual context version is %d.%d\n",
- test_config->supports_gl_compat_version / 10,
- test_config->supports_gl_compat_version % 10,
+ printf("piglit: info: Requested a %s, but actual context "
+ "version is %d.%d\n",
+ context_description,
actual_version / 10,
actual_version % 10);
return false;
@@ -293,7 +346,8 @@ check_gl_version(const struct piglit_gl_test_config *test_config,
*/
static bool
special_case_gl_31(const struct piglit_gl_test_config *test_config,
- enum context_flavor flavor)
+ enum context_flavor flavor,
+ const char *context_description)
{
int gl_version;
@@ -304,10 +358,15 @@ special_case_gl_31(const struct piglit_gl_test_config *test_config,
assert(gl_version >= 31);
if (gl_version == 31
- && piglit_is_extension_supported("GL_ARB_compatibility"))
+ && piglit_is_extension_supported("GL_ARB_compatibility")) {
+ printf("piglit: info: Requested a %s, but the actual "
+ "context is a 3.1 context that exposes the "
+ "GL_ARB_compatibility extension\n",
+ context_description);
return false;
- else
+ } else {
return true;
+ }
} else if (flavor == CONTEXT_GL_COMPAT
&& test_config->supports_gl_compat_version == 31) {
@@ -316,10 +375,15 @@ special_case_gl_31(const struct piglit_gl_test_config *test_config,
assert(gl_version >= 31);
if (gl_version == 31
- && !piglit_is_extension_supported("GL_ARB_compatibility"))
+ && !piglit_is_extension_supported("GL_ARB_compatibility")) {
+ printf("piglit: info: Requested a %s, but the actual "
+ "context is a 3.1 context that lacks the "
+ "GL_ARB_compatibility extension\n",
+ context_description);
return false;
- else
+ } else {
return true;
+ }
} else {
/* No need to check the special case. */
return true;
@@ -334,6 +398,7 @@ make_context_current_singlepass(struct piglit_wfl_framework *wfl_fw,
{
bool ok;
int32_t *attrib_list = NULL;
+ char ctx_desc[1024];
assert(wfl_fw->config == NULL);
assert(wfl_fw->context == NULL);
@@ -342,17 +407,21 @@ make_context_current_singlepass(struct piglit_wfl_framework *wfl_fw,
attrib_list = make_config_attrib_list(test_config, flavor,
partial_config_attrib_list);
assert(attrib_list);
-
+ make_context_description(ctx_desc, sizeof(ctx_desc), attrib_list);
wfl_fw->config = waffle_config_choose(wfl_fw->display, attrib_list);
free(attrib_list);
if (!wfl_fw->config) {
wfl_log_error("waffle_config_choose");
+ fprintf(stderr, "piglit: error: Failed to create "
+ "waffle_config for %s\n", ctx_desc);
goto fail;
}
wfl_fw->context = waffle_context_create(wfl_fw->config, NULL);
if (!wfl_fw->context) {
wfl_log_error("waffle_context_create");
+ fprintf(stderr, "piglit: error: Failed to create "
+ "waffle_context for %s\n", ctx_desc);
goto fail;
}
@@ -370,11 +439,11 @@ make_context_current_singlepass(struct piglit_wfl_framework *wfl_fw,
piglit_dispatch_default_init(PIGLIT_DISPATCH_ES2);
#endif
- ok = check_gl_version(test_config, flavor);
+ ok = check_gl_version(test_config, flavor, ctx_desc);
if (!ok)
goto fail;
- ok = special_case_gl_31(test_config, flavor);
+ ok = special_case_gl_31(test_config, flavor, ctx_desc);
if (!ok)
goto fail;
@@ -411,11 +480,6 @@ make_context_current(struct piglit_wfl_framework *wfl_fw,
piglit_is_core_profile = true;
return;
}
-
- printf("piglit: info: Failed to create GL %d.%d "
- "core context\n",
- test_config->supports_gl_core_version / 10,
- test_config->supports_gl_core_version % 10);
}
if (test_config->supports_gl_core_version &&
@@ -433,11 +497,6 @@ make_context_current(struct piglit_wfl_framework *wfl_fw,
partial_config_attrib_list);
if (ok)
return;
-
- printf("piglit: info: Failed to create GL %d.%d "
- "compatibility context\n",
- test_config->supports_gl_compat_version / 10,
- test_config->supports_gl_compat_version % 10);
}
#elif defined(PIGLIT_USE_OPENGL_ES1) || \
@@ -449,8 +508,6 @@ make_context_current(struct piglit_wfl_framework *wfl_fw,
if (ok)
return;
-
- printf("piglit: info: Failed to create GL ES context\n");
#else
# error
#endif
--
1.8.4
More information about the Piglit
mailing list