[Piglit] [PATCH 12/13 v2] glsl: Enhance built-in-constants to test extensions too
Pohjolainen, Topi
topi.pohjolainen at intel.com
Wed Aug 28 02:26:57 PDT 2013
On Mon, Aug 26, 2013 at 07:15:27PM -0700, Ian Romanick wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> v2: Use an array of pointers to char for required_extensions (using
> strndup) instead of the previous static buffer cleverness. Also replace
> the previous cleverness for generating the GLSL extension enables with
> something less clever and easier to understand. Both suggested by Eric.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> tests/shaders/built-in-constants.c | 78 +++++++++++++++++++++++++++++++++++++-
> 1 file changed, 77 insertions(+), 1 deletion(-)
>
> diff --git a/tests/shaders/built-in-constants.c b/tests/shaders/built-in-constants.c
> index af87107..54af859 100644
> --- a/tests/shaders/built-in-constants.c
> +++ b/tests/shaders/built-in-constants.c
> @@ -39,6 +39,22 @@ unsigned num_tests = 0;
> int required_glsl_version = 0;
> char *required_glsl_version_string = NULL;
>
> +/**
> + * List of extensions required by the current test set.
> + */
> +char *required_extensions[32];
> +unsigned num_required_extensions = 0;
> +
> +/**
> + * Array of extension enables for the shader code
> + *
> + * For each used entry in \c required_extensions, there is text in
> + * this string of the form "#extension ...: require\n".
> + */
> +#define MAX_EXTENSION_ENABLE_LINE_LEN 80
> +char extension_enables[ARRAY_SIZE(required_extensions)
> + * MAX_EXTENSION_ENABLE_LINE_LEN];
> +unsigned extension_enables_len = 0;
>
> static const char *const uniform_template =
> "uniform float f[%s %s %d ? 1 : -1];\n"
> @@ -131,6 +147,7 @@ parse_file(const char *filename)
> /* The format of the test file is:
> *
> * major.minor
> + * GL_ARB_some_extension
> * gl_MaxFoo 8
> * gl_MaxBar 16
> * gl_MinAsdf -2
> @@ -152,6 +169,32 @@ parse_file(const char *filename)
> if (line[0] != '\0')
> line++;
>
> + /* Process the list of required extensions.
> + */
> + while (strncmp("GL_", line, 3) == 0) {
> + char *end_of_line = strchrnul(line, '\n');
> + const ptrdiff_t len = end_of_line - line;
> +
> + assert(end_of_line[0] == '\n' || end_of_line[0] == '\0');
> +
> + if (num_required_extensions >= ARRAY_SIZE(required_extensions)) {
> + fprintf(stderr, "Too many required extensions!\n");
> + piglit_report_result(PIGLIT_FAIL);
> + }
> +
> + /* Copy the new extension to the list.
> + */
> + required_extensions[num_required_extensions] =
> + strndup(line, len);
Isn't this version now missing the corresponding 'free()'?
> + num_required_extensions++;
> +
> + /* Advance to the next input line.
> + */
> + line = end_of_line;
> + if (line[0] == '\n')
> + line++;
> + }
> +
> while (line[0] != '\0') {
> char *endptr;
>
> @@ -254,16 +297,49 @@ piglit_init(int argc, char **argv)
> if (glsl_version < required_glsl_version)
> piglit_report_result(PIGLIT_SKIP);
>
> + /* Process the list of required extensions. While doing this,
> + * generate the GLSL code that will enable those extensions in the
> + * shaders.
> + */
> + for (i = 0; i < num_required_extensions; i++) {
> + int len;
> +
> + if (!piglit_is_extension_supported(required_extensions[i])) {
> + printf("%s not supported\n", required_extensions[i]);
> + piglit_report_result(PIGLIT_SKIP);
> + }
> +
> + if ((extension_enables_len + MAX_EXTENSION_ENABLE_LINE_LEN)
> + >= sizeof(extension_enables)) {
> + printf("Extension enables too long.\n");
> + piglit_report_result(PIGLIT_FAIL);
> + }
> +
> + len = snprintf(&extension_enables[extension_enables_len],
> + MAX_EXTENSION_ENABLE_LINE_LEN,
> + "#extension %s: require\n",
> + required_extensions[i]);
> +
> + if (len <= 0) {
> + printf("Extension enable snprintf failed.\n");
> + piglit_report_result(PIGLIT_FAIL);
> + }
> +
> + extension_enables_len += len;
> + }
> +
> /* Generate the version declaration that will be used by all of the
> * shaders in the test run.
> */
> asprintf(&version_string,
> "#version %d %s\n"
> + "%s"
> "#ifdef GL_ES\n"
> "precision mediump float;\n"
> "#endif\n",
> required_glsl_version,
> - required_glsl_version == 300 ? "es" : "");
> + required_glsl_version == 300 ? "es" : "",
> + extension_enables);
>
> /* Create the shaders that will be used for the real part of the test.
> */
> --
> 1.8.1.4
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
More information about the Piglit
mailing list