[Piglit] [PATCH v3 2/5] Split piglit_get_gl_version() into two functions.
Paul Berry
stereotype441 at gmail.com
Mon Oct 17 13:37:59 PDT 2011
On 13 October 2011 13:45, Paul Berry <stereotype441 at gmail.com> wrote:
> Previously, piglit_get_gl_version() had three return values: the GL
> version (major and minor version numbers separately) and a boolean
> indicating whether or not the API is GL ES. This meant that we had to
> jump through hoops in order to use it, e.g.:
>
> /* Are we using GL with a version of at least 3.1? */
> bool es;
> int major;
> int minor;
> piglit_get_gl_version(&es, &major, &minor);
> if (!es && (major > 3 || (major == 3 && minor >= 1)))
> ...
>
> This patch changes piglit_get_gl_version() so that it returns a single
> integer whose value is 10 times the GL version (e.g. 31 for GL version
> 3.1), and splits off the functionality for checking whether the API is
> GL ES to a new function, piglit_is_gles().
>
> Now the same logic looks like this:
>
> /* Are we using GL with a version of at least 3.1? */
> if (!piglit_is_gles() && piglit_get_gl_version() >= 31)
> ...
> ---
> tests/glslparsertest/glslparsertest.c | 10 +++---
> tests/util/piglit-util.c | 53
> +++++++++++++++-----------------
> tests/util/piglit-util.h | 14 +++++---
> 3 files changed, 39 insertions(+), 38 deletions(-)
>
> diff --git a/tests/glslparsertest/glslparsertest.c
> b/tests/glslparsertest/glslparsertest.c
> index cfe8d10..b7a2dc9 100644
> --- a/tests/glslparsertest/glslparsertest.c
> +++ b/tests/glslparsertest/glslparsertest.c
> @@ -41,7 +41,7 @@
>
> static char *filename;
> static int expected_pass;
> -static int gl_major_version = 0;
> +static int gl_version_times_10 = 0;
> static int check_link = 0;
> static float requested_version = 1.10;
>
> @@ -51,7 +51,7 @@ get_shader_compile_status(GLuint shader)
> GLint status;
>
> #if defined USE_OPENGL
> - if (gl_major_version >= 2) {
> + if (gl_version_times_10 >= 20) {
> glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
> } else {
> glGetObjectParameterivARB(shader,
> GL_OBJECT_COMPILE_STATUS_ARB, &status);
> @@ -71,7 +71,7 @@ get_shader_info_log_length(GLuint shader)
> GLsizei length;
>
> #if defined USE_OPENGL
> - if (gl_major_version >= 2) {
> + if (gl_version_times_10 >= 20) {
> glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
> } else {
> glGetObjectParameterivARB(shader,
> GL_OBJECT_INFO_LOG_LENGTH_ARB, &length);
> @@ -308,13 +308,13 @@ int main(int argc, char**argv)
> glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
> glutInitWindowSize(WIN_WIDTH, WIN_HEIGHT);
> glutCreateWindow("glslparsertest");
> - piglit_get_gl_version(NULL, &gl_major_version, NULL);
> + gl_version_times_10 = piglit_get_gl_version();
>
> #ifdef USE_OPENGL
> glewInit();
> #endif
>
> - if (gl_major_version < 2
> + if (gl_version_times_10 < 20
> && !piglit_is_extension_supported("GL_ARB_shader_objects")) {
> printf("Requires OpenGL 2.0\n");
> piglit_report_result(PIGLIT_SKIP);
> diff --git a/tests/util/piglit-util.c b/tests/util/piglit-util.c
> index 358b0dc..026c64e 100644
> --- a/tests/util/piglit-util.c
> +++ b/tests/util/piglit-util.c
> @@ -56,38 +56,35 @@ void piglit_glutInit(int argc, char **argv)
> #endif
> }
>
> -void piglit_get_gl_version(bool *es, int* major, int* minor)
> +bool piglit_is_gles()
> {
> - /* Version of OpenGL API. */
> - bool es_local;
> - int major_local;
> - int minor_local;
> -
> - const char *version_string;
> - int c; /* scanf count */
> -
> - version_string = (const char*) glGetString(GL_VERSION);
> - es_local = strncmp("OpenGL ES ", version_string, 10) == 0;
> - if (es_local) {
> - c = sscanf(version_string,
> - "OpenGL ES %i.%i",
> - &major_local,
> - &minor_local);
> - } else {
> - c = sscanf(version_string,
> - "%i.%i",
> - &major_local,
> - &minor_local);
> + const char *version_string = (const char *)
> glGetString(GL_VERSION);
> + return strncmp("OpenGL ES ", version_string, 10) == 0;
> +}
> +
> +int piglit_get_gl_version()
> +{
> + const char *version_string = (const char *)
> glGetString(GL_VERSION);
> + const char *version_number_string;
> + int scanf_count;
> + int major;
> + int minor;
> +
> + /* skip to version number */
> + if (strncmp("OpenGL ES ", version_string, 10) == 0)
> + version_number_string = version_string + 10;
> + else
> + version_number_string = version_string;
> +
> + /* Interpret version number */
> + scanf_count = sscanf(version_string, "%i.%i", &major, &minor);
>
Whoops, brain fail. This last "version_string" should have been
"version_number_string". I didn't quite realize this in time to avoid
pushing a bad patch, but I've pushed follow-up patch to correct it.
> + if (scanf_count != 2) {
> + printf("Unable to interpret GL_VERSION string: %s\n",
> + version_string);
> + piglit_report_result(PIGLIT_FAIL);
> + exit(1);
> }
> - assert(c == 2);
> -
> - /* Write outputs. */
> - if (es != NULL)
> - *es = es_local;
> - if (major != NULL)
> - *major = major_local;
> - if (minor != NULL)
> - *minor = minor_local;
> + return 10*major+minor;
> }
>
> bool piglit_is_extension_supported(const char *name)
> diff --git a/tests/util/piglit-util.h b/tests/util/piglit-util.h
> index a12a234..2a423c3 100644
> --- a/tests/util/piglit-util.h
> +++ b/tests/util/piglit-util.h
> @@ -100,13 +100,17 @@ extern const unsigned int fdo_bitmap_height;
> void piglit_glutInit(int argc, char **argv);
>
> /**
> - * \brief Get version of OpenGL API.
> - *
> - * Null parameters are ignored.
> + * Determine if the API is OpenGL ES.
> + */
> +bool piglit_is_gles();
> +
> +/**
> + * \brief Get version of OpenGL or OpenGL ES API.
> *
> - * \param es Is the API OpenGL or OpenGL ES?
> + * Returned version is multiplied by 10 to make it an integer. So for
> + * example, if the GL version is 2.1, the return value is 21.
> */
> -void piglit_get_gl_version(bool *es, int* major, int* minor);
> +int piglit_get_gl_version();
>
> /**
> * \precondition name is not null
> --
> 1.7.6.4
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20111017/9b73f11b/attachment.htm>
More information about the Piglit
mailing list