[Piglit] [PATCH] Add more int literal size limit tests.

Ian Romanick idr at freedesktop.org
Wed Oct 26 14:38:04 PDT 2011


On 10/24/2011 01:41 PM, Eric Anholt wrote:
> This is based on my interpretation of the spec, and matches up with a
> Khronos spec clarification.

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> ---
>   .../basic-types/int-literal-size-ok-01.frag        |   23 +++++++++++++++++++
>   .../basic-types/int-literal-size-ok-02.frag        |   23 +++++++++++++++++++
>   .../basic-types/int-literal-size-ok-03.frag        |   23 +++++++++++++++++++
>   .../basic-types/int-literal-size-ok-04.frag        |   24 ++++++++++++++++++++
>   .../basic-types/int-literal-too-large-03.frag      |   21 +++++++++++++++++
>   5 files changed, 114 insertions(+), 0 deletions(-)
>   create mode 100644 tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-01.frag
>   create mode 100644 tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-02.frag
>   create mode 100644 tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-03.frag
>   create mode 100644 tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-04.frag
>   create mode 100644 tests/spec/glsl-1.30/compiler/basic-types/int-literal-too-large-03.frag
>
> diff --git a/tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-01.frag b/tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-01.frag
> new file mode 100644
> index 0000000..0703c70
> --- /dev/null
> +++ b/tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-01.frag
> @@ -0,0 +1,23 @@
> +// [config]
> +// expect_result: pass
> +// glsl_version: 1.30
> +// [end config]
> +//
> +// Integer literals that are too large should raise an error.
> +//
> +// From page 22 (28 of PDF) of GLSL 1.30 spec:
> +//     It is an error to provide a literal integer whose magnitude is too
> +//     large to store in a variable of matching signed or unsigned type.
> +//
> +//     Unsigned integers have exactly 32 bits of precision.  Signed integers
> +//     use 32 bits, including a sign bit, in two's complement form.
> +//
> +// However, a 32-bit integer literal (whether it has a 'u' suffix or not)
> +// is valid.
> +
> +#version 130
> +
> +int f() {
> +	// Requires 32 bits.
> +	return int(0xffffffff);
> +}
> diff --git a/tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-02.frag b/tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-02.frag
> new file mode 100644
> index 0000000..5ebe37b
> --- /dev/null
> +++ b/tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-02.frag
> @@ -0,0 +1,23 @@
> +// [config]
> +// expect_result: pass
> +// glsl_version: 1.30
> +// [end config]
> +//
> +// Integer literals that are too large should raise an error.
> +//
> +// From page 22 (28 of PDF) of GLSL 1.30 spec:
> +//     It is an error to provide a literal integer whose magnitude is too
> +//     large to store in a variable of matching signed or unsigned type.
> +//
> +//     Unsigned integers have exactly 32 bits of precision.  Signed integers
> +//     use 32 bits, including a sign bit, in two's complement form.
> +//
> +// However, a 32-bit integer literal (whether it has a 'u' suffix or not)
> +// is valid.
> +
> +#version 130
> +
> +uint f() {
> +	// Requires 32 bits.
> +	return uint(0xffffffff);
> +}
> diff --git a/tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-03.frag b/tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-03.frag
> new file mode 100644
> index 0000000..c5ab82f
> --- /dev/null
> +++ b/tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-03.frag
> @@ -0,0 +1,23 @@
> +// [config]
> +// expect_result: pass
> +// glsl_version: 1.30
> +// [end config]
> +//
> +// Integer literals that are too large should raise an error.
> +//
> +// From page 22 (28 of PDF) of GLSL 1.30 spec:
> +//     It is an error to provide a literal integer whose magnitude is too
> +//     large to store in a variable of matching signed or unsigned type.
> +//
> +//     Unsigned integers have exactly 32 bits of precision.  Signed integers
> +//     use 32 bits, including a sign bit, in two's complement form.
> +//
> +// However, a 32-bit integer literal (whether it has a 'u' suffix or not)
> +// is valid.
> +
> +#version 130
> +
> +int f() {
> +	// Requires 32 bits.
> +	return 3000000000;
> +}
> diff --git a/tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-04.frag b/tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-04.frag
> new file mode 100644
> index 0000000..a1208db
> --- /dev/null
> +++ b/tests/spec/glsl-1.30/compiler/basic-types/int-literal-size-ok-04.frag
> @@ -0,0 +1,24 @@
> +// [config]
> +// expect_result: pass
> +// glsl_version: 1.30
> +// [end config]
> +//
> +// Integer literals that are too large should raise an error.
> +//
> +// From page 22 (28 of PDF) of GLSL 1.30 spec:
> +//     It is an error to provide a literal integer whose magnitude is too
> +//     large to store in a variable of matching signed or unsigned type.
> +//
> +//     Unsigned integers have exactly 32 bits of precision.  Signed integers
> +//     use 32 bits, including a sign bit, in two's complement form.
> +//
> +// However, a 32-bit integer literal (whether it has a 'u' suffix or not)
> +// is valid.  Warnings generation for large signed decimals has to be careful,
> +// because -2147483648 is parsed as -(2147483648).
> +
> +#version 130
> +
> +int f() {
> +	// Requires 32 bits.
> +	return -2147483648;
> +}
> diff --git a/tests/spec/glsl-1.30/compiler/basic-types/int-literal-too-large-03.frag b/tests/spec/glsl-1.30/compiler/basic-types/int-literal-too-large-03.frag
> new file mode 100644
> index 0000000..5381205
> --- /dev/null
> +++ b/tests/spec/glsl-1.30/compiler/basic-types/int-literal-too-large-03.frag
> @@ -0,0 +1,21 @@
> +// [config]
> +// expect_result: fail
> +// glsl_version: 1.30
> +// [end config]
> +//
> +// Integer literals that are too large should raise an error.
> +//
> +// From page 22 (28 of PDF) of GLSL 1.30 spec:
> +//     It is an error to provide a literal integer whose magnitude is too
> +//     large to store in a variable of matching signed or unsigned type.
> +//
> +//     Unsigned integers have exactly 32 bits of precision.  Signed integers
> +//     use 32 bits, including a sign bit, in two's complement form.
> +
> +
> +#version 130
> +
> +int f() {
> +	// Requires 33 bits.
> +	return 5000000000;
> +}



More information about the Piglit mailing list