From 0d85595e3388237368bc312b64dd95b59d31c3d3 Mon Sep 17 00:00:00 2001 From: Marius Hillenbrand Date: Mon, 15 Nov 2021 16:30:15 +0100 Subject: [PATCH 1/2] add negative float conversions to test constantUnaryConversion.comp Add conversions from negative float16_t and float32_t to bool, all signed integer types (i.e., including those in GL_EXT_shader_explicit_arithmetic_types), and all float types (from the same extension) to extend coverage. Note that converting negative float values to unsigned integers is undefined behavior. Thus, we exclude them. --- .../constantUnaryConversion.comp.out | 116 +++++++++++++++++- Test/constantUnaryConversion.comp | 21 ++++ 2 files changed, 133 insertions(+), 4 deletions(-) diff --git a/Test/baseResults/constantUnaryConversion.comp.out b/Test/baseResults/constantUnaryConversion.comp.out index fcaf6f22..752745a8 100644 --- a/Test/baseResults/constantUnaryConversion.comp.out +++ b/Test/baseResults/constantUnaryConversion.comp.out @@ -3,8 +3,8 @@ Shader version: 450 Requested GL_EXT_shader_explicit_arithmetic_types local_size = (1, 1, 1) 0:? Sequence -0:48 Function Definition: main( ( global void) -0:48 Function Parameters: +0:69 Function Definition: main( ( global void) +0:69 Function Parameters: 0:? Linker Objects 0:? 'bool_init' ( const bool) 0:? true (const bool) @@ -30,6 +30,12 @@ local_size = (1, 1, 1) 0:? 13.000000 0:? 'float64_t_init' ( const double) 0:? -4.000000 +0:? 'neg_float16_t_init' ( const float16_t) +0:? -42.000000 +0:? 'neg_float32_t_init' ( const float) +0:? -13.000000 +0:? 'neg_float64_t_init' ( const double) +0:? -4.000000 0:? 'bool_to_bool' ( const bool) 0:? true (const bool) 0:? 'int8_t_to_bool' ( const bool) @@ -318,6 +324,54 @@ local_size = (1, 1, 1) 0:? 13.000000 0:? 'float64_t_to_float64_t' ( const double) 0:? -4.000000 +0:? 'neg_float16_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'neg_float32_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'neg_float64_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'neg_float16_t_to_int8_t' ( const int8_t) +0:? -42 (const int8_t) +0:? 'neg_float32_t_to_int8_t' ( const int8_t) +0:? -13 (const int8_t) +0:? 'neg_float64_t_to_int8_t' ( const int8_t) +0:? -4 (const int8_t) +0:? 'neg_float16_t_to_int16_t' ( const int16_t) +0:? -42 (const int16_t) +0:? 'neg_float32_t_to_int16_t' ( const int16_t) +0:? -13 (const int16_t) +0:? 'neg_float64_t_to_int16_t' ( const int16_t) +0:? -4 (const int16_t) +0:? 'neg_float16_t_to_int32_t' ( const int) +0:? -42 (const int) +0:? 'neg_float32_t_to_int32_t' ( const int) +0:? -13 (const int) +0:? 'neg_float64_t_to_int32_t' ( const int) +0:? -4 (const int) +0:? 'neg_float16_t_to_int64_t' ( const int64_t) +0:? -42 (const int64_t) +0:? 'neg_float32_t_to_int64_t' ( const int64_t) +0:? -13 (const int64_t) +0:? 'neg_float64_t_to_int64_t' ( const int64_t) +0:? -4 (const int64_t) +0:? 'neg_float16_t_to_float16_t' ( const float16_t) +0:? -42.000000 +0:? 'neg_float32_t_to_float16_t' ( const float16_t) +0:? -13.000000 +0:? 'neg_float64_t_to_float16_t' ( const float16_t) +0:? -4.000000 +0:? 'neg_float16_t_to_float32_t' ( const float) +0:? -42.000000 +0:? 'neg_float32_t_to_float32_t' ( const float) +0:? -13.000000 +0:? 'neg_float64_t_to_float32_t' ( const float) +0:? -4.000000 +0:? 'neg_float16_t_to_float64_t' ( const double) +0:? -42.000000 +0:? 'neg_float32_t_to_float64_t' ( const double) +0:? -13.000000 +0:? 'neg_float64_t_to_float64_t' ( const double) +0:? -4.000000 Linked compute stage: @@ -327,8 +381,8 @@ Shader version: 450 Requested GL_EXT_shader_explicit_arithmetic_types local_size = (1, 1, 1) 0:? Sequence -0:48 Function Definition: main( ( global void) -0:48 Function Parameters: +0:69 Function Definition: main( ( global void) +0:69 Function Parameters: 0:? Linker Objects 0:? 'bool_init' ( const bool) 0:? true (const bool) @@ -354,6 +408,12 @@ local_size = (1, 1, 1) 0:? 13.000000 0:? 'float64_t_init' ( const double) 0:? -4.000000 +0:? 'neg_float16_t_init' ( const float16_t) +0:? -42.000000 +0:? 'neg_float32_t_init' ( const float) +0:? -13.000000 +0:? 'neg_float64_t_init' ( const double) +0:? -4.000000 0:? 'bool_to_bool' ( const bool) 0:? true (const bool) 0:? 'int8_t_to_bool' ( const bool) @@ -642,4 +702,52 @@ local_size = (1, 1, 1) 0:? 13.000000 0:? 'float64_t_to_float64_t' ( const double) 0:? -4.000000 +0:? 'neg_float16_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'neg_float32_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'neg_float64_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'neg_float16_t_to_int8_t' ( const int8_t) +0:? -42 (const int8_t) +0:? 'neg_float32_t_to_int8_t' ( const int8_t) +0:? -13 (const int8_t) +0:? 'neg_float64_t_to_int8_t' ( const int8_t) +0:? -4 (const int8_t) +0:? 'neg_float16_t_to_int16_t' ( const int16_t) +0:? -42 (const int16_t) +0:? 'neg_float32_t_to_int16_t' ( const int16_t) +0:? -13 (const int16_t) +0:? 'neg_float64_t_to_int16_t' ( const int16_t) +0:? -4 (const int16_t) +0:? 'neg_float16_t_to_int32_t' ( const int) +0:? -42 (const int) +0:? 'neg_float32_t_to_int32_t' ( const int) +0:? -13 (const int) +0:? 'neg_float64_t_to_int32_t' ( const int) +0:? -4 (const int) +0:? 'neg_float16_t_to_int64_t' ( const int64_t) +0:? -42 (const int64_t) +0:? 'neg_float32_t_to_int64_t' ( const int64_t) +0:? -13 (const int64_t) +0:? 'neg_float64_t_to_int64_t' ( const int64_t) +0:? -4 (const int64_t) +0:? 'neg_float16_t_to_float16_t' ( const float16_t) +0:? -42.000000 +0:? 'neg_float32_t_to_float16_t' ( const float16_t) +0:? -13.000000 +0:? 'neg_float64_t_to_float16_t' ( const float16_t) +0:? -4.000000 +0:? 'neg_float16_t_to_float32_t' ( const float) +0:? -42.000000 +0:? 'neg_float32_t_to_float32_t' ( const float) +0:? -13.000000 +0:? 'neg_float64_t_to_float32_t' ( const float) +0:? -4.000000 +0:? 'neg_float16_t_to_float64_t' ( const double) +0:? -42.000000 +0:? 'neg_float32_t_to_float64_t' ( const double) +0:? -13.000000 +0:? 'neg_float64_t_to_float64_t' ( const double) +0:? -4.000000 diff --git a/Test/constantUnaryConversion.comp b/Test/constantUnaryConversion.comp index 3c479ae6..7226a267 100644 --- a/Test/constantUnaryConversion.comp +++ b/Test/constantUnaryConversion.comp @@ -15,9 +15,16 @@ const float16_t float16_t_init = float16_t(42.0); const float32_t float32_t_init = float32_t(13.0); const float64_t float64_t_init = float64_t(-4.0); +const float16_t neg_float16_t_init = float16_t(-42.0); +const float32_t neg_float32_t_init = float32_t(-13.0); +const float64_t neg_float64_t_init = float64_t(-4.0); + #define TYPE_TO_TYPE(x, y) \ const x y##_to_##x = x(y##_init) +#define TYPE_TO_TYPE_PREFIX(prefix, x, y) \ + const x prefix##_##y##_to_##x = x(prefix##_##y##_init) + #define TYPE_TO(x) \ TYPE_TO_TYPE(x, bool); \ TYPE_TO_TYPE(x, int8_t); \ @@ -45,4 +52,18 @@ TYPE_TO(float16_t); TYPE_TO(float32_t); TYPE_TO(float64_t); +#define NEG_FLOAT_TO(x) \ + TYPE_TO_TYPE_PREFIX(neg, x, float16_t); \ + TYPE_TO_TYPE_PREFIX(neg, x, float32_t); \ + TYPE_TO_TYPE_PREFIX(neg, x, float64_t) + +NEG_FLOAT_TO(bool); +NEG_FLOAT_TO(int8_t); +NEG_FLOAT_TO(int16_t); +NEG_FLOAT_TO(int32_t); +NEG_FLOAT_TO(int64_t); +NEG_FLOAT_TO(float16_t); +NEG_FLOAT_TO(float32_t); +NEG_FLOAT_TO(float64_t); + void main() {} From d13f81510f73bc33f53ea6228debd9a1f0862770 Mon Sep 17 00:00:00 2001 From: Marius Hillenbrand Date: Mon, 15 Nov 2021 16:31:50 +0100 Subject: [PATCH 2/2] remove undefined conversions from test constantUnaryConversion.comp Remove remaining conversions from negative float64_t to unsigned integers, which are undefined behavior. As a result, this test will also succeed on platforms that implement those conversions differently than x86. That addresses one of the issues in #2815. --- .../constantUnaryConversion.comp.out | 48 +++++++++---------- Test/constantUnaryConversion.comp | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Test/baseResults/constantUnaryConversion.comp.out b/Test/baseResults/constantUnaryConversion.comp.out index 752745a8..78372f06 100644 --- a/Test/baseResults/constantUnaryConversion.comp.out +++ b/Test/baseResults/constantUnaryConversion.comp.out @@ -29,7 +29,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_init' ( const float) 0:? 13.000000 0:? 'float64_t_init' ( const double) -0:? -4.000000 +0:? 4.000000 0:? 'neg_float16_t_init' ( const float16_t) 0:? -42.000000 0:? 'neg_float32_t_init' ( const float) @@ -83,7 +83,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int8_t' ( const int8_t) 0:? 13 (const int8_t) 0:? 'float64_t_to_int8_t' ( const int8_t) -0:? -4 (const int8_t) +0:? 4 (const int8_t) 0:? 'bool_to_int16_t' ( const int16_t) 0:? 1 (const int16_t) 0:? 'int8_t_to_int16_t' ( const int16_t) @@ -107,7 +107,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int16_t' ( const int16_t) 0:? 13 (const int16_t) 0:? 'float64_t_to_int16_t' ( const int16_t) -0:? -4 (const int16_t) +0:? 4 (const int16_t) 0:? 'bool_to_int32_t' ( const int) 0:? 1 (const int) 0:? 'int8_t_to_int32_t' ( const int) @@ -131,7 +131,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int32_t' ( const int) 0:? 13 (const int) 0:? 'float64_t_to_int32_t' ( const int) -0:? -4 (const int) +0:? 4 (const int) 0:? 'bool_to_int64_t' ( const int64_t) 0:? 1 (const int64_t) 0:? 'int8_t_to_int64_t' ( const int64_t) @@ -155,7 +155,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int64_t' ( const int64_t) 0:? 13 (const int64_t) 0:? 'float64_t_to_int64_t' ( const int64_t) -0:? -4 (const int64_t) +0:? 4 (const int64_t) 0:? 'bool_to_uint8_t' ( const uint8_t) 0:? 1 (const uint8_t) 0:? 'int8_t_to_uint8_t' ( const uint8_t) @@ -179,7 +179,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint8_t' ( const uint8_t) 0:? 13 (const uint8_t) 0:? 'float64_t_to_uint8_t' ( const uint8_t) -0:? 252 (const uint8_t) +0:? 4 (const uint8_t) 0:? 'bool_to_uint16_t' ( const uint16_t) 0:? 1 (const uint16_t) 0:? 'int8_t_to_uint16_t' ( const uint16_t) @@ -203,7 +203,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint16_t' ( const uint16_t) 0:? 13 (const uint16_t) 0:? 'float64_t_to_uint16_t' ( const uint16_t) -0:? 65532 (const uint16_t) +0:? 4 (const uint16_t) 0:? 'bool_to_uint32_t' ( const uint) 0:? 1 (const uint) 0:? 'int8_t_to_uint32_t' ( const uint) @@ -227,7 +227,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint32_t' ( const uint) 0:? 13 (const uint) 0:? 'float64_t_to_uint32_t' ( const uint) -0:? 4294967292 (const uint) +0:? 4 (const uint) 0:? 'bool_to_uint64_t' ( const uint64_t) 0:? 1 (const uint64_t) 0:? 'int8_t_to_uint64_t' ( const uint64_t) @@ -251,7 +251,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint64_t' ( const uint64_t) 0:? 13 (const uint64_t) 0:? 'float64_t_to_uint64_t' ( const uint64_t) -0:? 18446744073709551612 (const uint64_t) +0:? 4 (const uint64_t) 0:? 'bool_to_float16_t' ( const float16_t) 0:? 1.000000 0:? 'int8_t_to_float16_t' ( const float16_t) @@ -275,7 +275,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_float16_t' ( const float16_t) 0:? 13.000000 0:? 'float64_t_to_float16_t' ( const float16_t) -0:? -4.000000 +0:? 4.000000 0:? 'bool_to_float32_t' ( const float) 0:? 1.000000 0:? 'int8_t_to_float32_t' ( const float) @@ -299,7 +299,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_float32_t' ( const float) 0:? 13.000000 0:? 'float64_t_to_float32_t' ( const float) -0:? -4.000000 +0:? 4.000000 0:? 'bool_to_float64_t' ( const double) 0:? 1.000000 0:? 'int8_t_to_float64_t' ( const double) @@ -323,7 +323,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_float64_t' ( const double) 0:? 13.000000 0:? 'float64_t_to_float64_t' ( const double) -0:? -4.000000 +0:? 4.000000 0:? 'neg_float16_t_to_bool' ( const bool) 0:? true (const bool) 0:? 'neg_float32_t_to_bool' ( const bool) @@ -407,7 +407,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_init' ( const float) 0:? 13.000000 0:? 'float64_t_init' ( const double) -0:? -4.000000 +0:? 4.000000 0:? 'neg_float16_t_init' ( const float16_t) 0:? -42.000000 0:? 'neg_float32_t_init' ( const float) @@ -461,7 +461,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int8_t' ( const int8_t) 0:? 13 (const int8_t) 0:? 'float64_t_to_int8_t' ( const int8_t) -0:? -4 (const int8_t) +0:? 4 (const int8_t) 0:? 'bool_to_int16_t' ( const int16_t) 0:? 1 (const int16_t) 0:? 'int8_t_to_int16_t' ( const int16_t) @@ -485,7 +485,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int16_t' ( const int16_t) 0:? 13 (const int16_t) 0:? 'float64_t_to_int16_t' ( const int16_t) -0:? -4 (const int16_t) +0:? 4 (const int16_t) 0:? 'bool_to_int32_t' ( const int) 0:? 1 (const int) 0:? 'int8_t_to_int32_t' ( const int) @@ -509,7 +509,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int32_t' ( const int) 0:? 13 (const int) 0:? 'float64_t_to_int32_t' ( const int) -0:? -4 (const int) +0:? 4 (const int) 0:? 'bool_to_int64_t' ( const int64_t) 0:? 1 (const int64_t) 0:? 'int8_t_to_int64_t' ( const int64_t) @@ -533,7 +533,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int64_t' ( const int64_t) 0:? 13 (const int64_t) 0:? 'float64_t_to_int64_t' ( const int64_t) -0:? -4 (const int64_t) +0:? 4 (const int64_t) 0:? 'bool_to_uint8_t' ( const uint8_t) 0:? 1 (const uint8_t) 0:? 'int8_t_to_uint8_t' ( const uint8_t) @@ -557,7 +557,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint8_t' ( const uint8_t) 0:? 13 (const uint8_t) 0:? 'float64_t_to_uint8_t' ( const uint8_t) -0:? 252 (const uint8_t) +0:? 4 (const uint8_t) 0:? 'bool_to_uint16_t' ( const uint16_t) 0:? 1 (const uint16_t) 0:? 'int8_t_to_uint16_t' ( const uint16_t) @@ -581,7 +581,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint16_t' ( const uint16_t) 0:? 13 (const uint16_t) 0:? 'float64_t_to_uint16_t' ( const uint16_t) -0:? 65532 (const uint16_t) +0:? 4 (const uint16_t) 0:? 'bool_to_uint32_t' ( const uint) 0:? 1 (const uint) 0:? 'int8_t_to_uint32_t' ( const uint) @@ -605,7 +605,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint32_t' ( const uint) 0:? 13 (const uint) 0:? 'float64_t_to_uint32_t' ( const uint) -0:? 4294967292 (const uint) +0:? 4 (const uint) 0:? 'bool_to_uint64_t' ( const uint64_t) 0:? 1 (const uint64_t) 0:? 'int8_t_to_uint64_t' ( const uint64_t) @@ -629,7 +629,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint64_t' ( const uint64_t) 0:? 13 (const uint64_t) 0:? 'float64_t_to_uint64_t' ( const uint64_t) -0:? 18446744073709551612 (const uint64_t) +0:? 4 (const uint64_t) 0:? 'bool_to_float16_t' ( const float16_t) 0:? 1.000000 0:? 'int8_t_to_float16_t' ( const float16_t) @@ -653,7 +653,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_float16_t' ( const float16_t) 0:? 13.000000 0:? 'float64_t_to_float16_t' ( const float16_t) -0:? -4.000000 +0:? 4.000000 0:? 'bool_to_float32_t' ( const float) 0:? 1.000000 0:? 'int8_t_to_float32_t' ( const float) @@ -677,7 +677,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_float32_t' ( const float) 0:? 13.000000 0:? 'float64_t_to_float32_t' ( const float) -0:? -4.000000 +0:? 4.000000 0:? 'bool_to_float64_t' ( const double) 0:? 1.000000 0:? 'int8_t_to_float64_t' ( const double) @@ -701,7 +701,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_float64_t' ( const double) 0:? 13.000000 0:? 'float64_t_to_float64_t' ( const double) -0:? -4.000000 +0:? 4.000000 0:? 'neg_float16_t_to_bool' ( const bool) 0:? true (const bool) 0:? 'neg_float32_t_to_bool' ( const bool) diff --git a/Test/constantUnaryConversion.comp b/Test/constantUnaryConversion.comp index 7226a267..f0710cd0 100644 --- a/Test/constantUnaryConversion.comp +++ b/Test/constantUnaryConversion.comp @@ -13,7 +13,7 @@ const uint32_t uint32_t_init = uint32_t(3); const uint64_t uint64_t_init = uint64_t(4); const float16_t float16_t_init = float16_t(42.0); const float32_t float32_t_init = float32_t(13.0); -const float64_t float64_t_init = float64_t(-4.0); +const float64_t float64_t_init = float64_t(4.0); const float16_t neg_float16_t_init = float16_t(-42.0); const float32_t neg_float32_t_init = float32_t(-13.0);