Add utilitiy functions to log Waffle error messages. And add error-checking wrappers for some Waffle functions.
The functions are not yet used. Signed-off-by: Chad Versace <chad.vers...@linux.intel.com> --- tests/util/CMakeLists.txt | 6 ++ tests/util/piglit-util-waffle.c | 89 ++++++++++++++++++++++++++++++ tests/util/piglit-util-waffle.h | 119 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 214 insertions(+) create mode 100644 tests/util/piglit-util-waffle.c create mode 100644 tests/util/piglit-util-waffle.h diff --git a/tests/util/CMakeLists.txt b/tests/util/CMakeLists.txt index b7be449..f1e67e0 100644 --- a/tests/util/CMakeLists.txt +++ b/tests/util/CMakeLists.txt @@ -26,6 +26,12 @@ set(UTIL_GL_SOURCES rgb9e5.c ) +if(PIGLIT_USE_WAFFLE) + list(APPEND UTIL_GL_SOURCES + piglit-util-waffle.c + ) +endif() + set(UTIL_GL_LIBS piglitutil ${WAFFLE_LIBRARIES} diff --git a/tests/util/piglit-util-waffle.c b/tests/util/piglit-util-waffle.c new file mode 100644 index 0000000..ade3987 --- /dev/null +++ b/tests/util/piglit-util-waffle.c @@ -0,0 +1,89 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include <assert.h> +#include <stdio.h> + +#include "piglit-util-gl-common.h" +#include "piglit-util-waffle.h" + +static void +wfl_log(const char *tag, const char *func_name) +{ + const struct waffle_error_info *info = waffle_error_get_info(); + + assert(tag != NULL); + assert(info->code != WAFFLE_NO_ERROR); + + fflush(stdout); + fprintf(stderr, "piglit: %s: %s failed due to %s", + tag, func_name, waffle_error_to_string(info->code)); + if (info->message_length > 0) + fprintf(stderr, ": %s", info->message); + fprintf(stderr, "\n"); +} + +void +wfl_log_debug(const char *func_name) +{ + static int debug = -1; + + if (debug == -1) { + const char *env = getenv("PIGLIT_DEBUG"); + if (env == NULL) { + debug = 0; + } else if (strcmp(env, "0") == 0) { + debug = 0; + } else if (strcmp(env, "1") == 0) { + debug = 1; + } else { + fprintf(stderr, "PIGLIT_DEBUG has invalid value:" + " %s\n", env); + abort(); + } + } + + if (debug == 1) + wfl_log("debug", func_name); +} + +void +wfl_log_error(const char *func_name) +{ + wfl_log("error", func_name); +} + +void +wfl_fatal_error(const char *func_name) +{ + const struct waffle_error_info *info = waffle_error_get_info(); + + assert(info->code != WAFFLE_NO_ERROR); + + wfl_log_error(func_name); + + if (info->code == WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM) + piglit_report_result(PIGLIT_SKIP); + else + piglit_report_result(PIGLIT_FAIL); +} diff --git a/tests/util/piglit-util-waffle.h b/tests/util/piglit-util-waffle.h new file mode 100644 index 0000000..897cfff --- /dev/null +++ b/tests/util/piglit-util-waffle.h @@ -0,0 +1,119 @@ +/* + * Copyright © 2012 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/** + * \file + * \brief Waffle utilities + * + * Each function wfl_checked_*, if the backing Waffle function fails, prints + * the error message emitted by Waffle and ends the test. + */ + +#pragma once + +#include <waffle.h> + +/** + * \brief Print the current Waffle error. + * + * The \a func_name is the name of most recently called Waffle function. + */ +void +wfl_log_error(const char *func_name); + +/** + * \brief Print the current Waffle error if PIGLIT_DEBUG=1. + * + * The \a func_name is the name of most recently called Waffle function. + */ +void +wfl_log_debug(const char *func_name); + +/** + * \brief Print the current Waffle error and end the test. + * + * The \a func_name is the name of most recently called Waffle function. + * + * If the error is WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM, skip the test. + * Otherwise, fail the test. + */ +void +wfl_fatal_error(const char *func_name); + +static inline void +wfl_checked_init(const int32_t *attrib_list) +{ + bool ok = waffle_init(attrib_list); + if (!ok) + wfl_fatal_error("waffle_init"); +} + +static inline struct waffle_display* +wfl_checked_display_connect(const char *name) +{ + struct waffle_display *dpy = waffle_display_connect(name); + if (!dpy) + wfl_fatal_error("waffle_display_connect"); + return dpy; +} + +static inline struct waffle_config* +wfl_checked_config_choose(struct waffle_display *dpy, + const int32_t *attrib_list) +{ + struct waffle_config *config = waffle_config_choose(dpy, attrib_list); + if (!config) + wfl_fatal_error("waffle_attrib_list"); + return config; +} + +static inline struct waffle_context* +wfl_checked_context_create(struct waffle_config *config, + struct waffle_context *shared_ctx) +{ + struct waffle_context *ctx = waffle_context_create(config, NULL); + if (!ctx) + wfl_fatal_error("waffle_context_create"); + return ctx; +} + +static inline struct waffle_window* +wfl_checked_window_create(struct waffle_config *config, + int32_t width, int32_t height) +{ + struct waffle_window *window = waffle_window_create(config, width, height); + if (!window) + wfl_fatal_error("waffle_window_create"); + return window; +} + +static inline bool +wfl_checked_make_current(struct waffle_display *dpy, + struct waffle_window *window, + struct waffle_context *ctx) +{ + bool ok = waffle_make_current(dpy, window, ctx); + if (!ok) + wfl_fatal_error("waffle_make_current"); + return ok; +} -- 1.7.12.1 _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/piglit