This change adds unary conversion folding when the source is a constant.
This fixes an ISV issue whereby:
```
const float16_t f = float16_t(42.0);
```
Wouldn't compile because the conversion operator would always produce an
EvqTemporary when it could have produced an EvqConst.
I've also added a test case that proves out that all basic-type to
basic-type conversions work.
--- /dev/null
+constantUnaryConversion.comp
+Shader version: 450
+Requested GL_KHX_shader_explicit_arithmetic_types
+local_size = (1, 1, 1)
+0:? Sequence
+0:48 Function Definition: main( ( global void)
+0:48 Function Parameters:
+0:? Linker Objects
+0:? 'bool_init' ( const bool)
+0:? true (const bool)
+0:? 'int8_t_init' ( const int8_t)
+0:? -1 (const int)
+0:? 'int16_t_init' ( const int16_t)
+0:? -2 (const int)
+0:? 'int32_t_init' ( const int)
+0:? -3 (const int)
+0:? 'int64_t_init' ( const int64_t)
+0:? -4 (const int64_t)
+0:? 'uint8_t_init' ( const uint8_t)
+0:? 1 (const int)
+0:? 'uint16_t_init' ( const uint16_t)
+0:? 2 (const int)
+0:? 'uint32_t_init' ( const uint)
+0:? 3 (const uint)
+0:? 'uint64_t_init' ( const uint64_t)
+0:? 4 (const uint64_t)
+0:? 'float16_t_init' ( const float16_t)
+0:? 42.000000
+0:? 'float32_t_init' ( const float)
+0:? 13.000000
+0:? '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)
+0:? -1 (const int)
+0:? 'int16_t_to_bool' ( const bool)
+0:? -2 (const int)
+0:? 'int32_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'int64_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'uint8_t_to_bool' ( const bool)
+0:? 1 (const int)
+0:? 'uint16_t_to_bool' ( const bool)
+0:? 2 (const int)
+0:? 'uint32_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'uint64_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'float16_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'float32_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'float64_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'bool_to_int8_t' ( const int8_t)
+0:? true (const bool)
+0:? 'int8_t_to_int8_t' ( const int8_t)
+0:? -1 (const int)
+0:? 'int16_t_to_int8_t' ( const int8_t)
+0:? -2 (const int)
+0:? 'int32_t_to_int8_t' ( const int8_t)
+0:? -3 (const int)
+0:? 'int64_t_to_int8_t' ( const int8_t)
+0:? -4 (const int64_t)
+0:? 'uint8_t_to_int8_t' ( const int8_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_int8_t' ( const int8_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_int8_t' ( const int8_t)
+0:? 3 (const uint)
+0:? 'uint64_t_to_int8_t' ( const int8_t)
+0:? 4 (const uint64_t)
+0:? 'float16_t_to_int8_t' ( const int8_t)
+0:? 42.000000
+0:? 'float32_t_to_int8_t' ( const int8_t)
+0:? 13.000000
+0:? 'float64_t_to_int8_t' ( const int8_t)
+0:? -4.000000
+0:? 'bool_to_int16_t' ( const int16_t)
+0:? true (const bool)
+0:? 'int8_t_to_int16_t' ( const int16_t)
+0:? -1 (const int)
+0:? 'int16_t_to_int16_t' ( const int16_t)
+0:? -2 (const int)
+0:? 'int32_t_to_int16_t' ( const int16_t)
+0:? -3 (const int)
+0:? 'int64_t_to_int16_t' ( const int16_t)
+0:? -4 (const int64_t)
+0:? 'uint8_t_to_int16_t' ( const int16_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_int16_t' ( const int16_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_int16_t' ( const int16_t)
+0:? 3 (const uint)
+0:? 'uint64_t_to_int16_t' ( const int16_t)
+0:? 4 (const uint64_t)
+0:? 'float16_t_to_int16_t' ( const int16_t)
+0:? 42.000000
+0:? 'float32_t_to_int16_t' ( const int16_t)
+0:? 13.000000
+0:? 'float64_t_to_int16_t' ( const int16_t)
+0:? -4.000000
+0:? 'bool_to_int32_t' ( const int)
+0:? 1 (const int)
+0:? 'int8_t_to_int32_t' ( const int)
+0:? -1 (const int)
+0:? 'int16_t_to_int32_t' ( const int)
+0:? -2 (const int)
+0:? 'int32_t_to_int32_t' ( const int)
+0:? -3 (const int)
+0:? 'int64_t_to_int32_t' ( const int)
+0:? -4 (const int)
+0:? 'uint8_t_to_int32_t' ( const int)
+0:? 1 (const int)
+0:? 'uint16_t_to_int32_t' ( const int)
+0:? 2 (const int)
+0:? 'uint32_t_to_int32_t' ( const int)
+0:? 3 (const int)
+0:? 'uint64_t_to_int32_t' ( const int)
+0:? 4 (const int)
+0:? 'float16_t_to_int32_t' ( const int)
+0:? 42 (const int)
+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:? 'bool_to_int64_t' ( const int64_t)
+0:? 1 (const int64_t)
+0:? 'int8_t_to_int64_t' ( const int64_t)
+0:? -1 (const int)
+0:? 'int16_t_to_int64_t' ( const int64_t)
+0:? -2 (const int)
+0:? 'int32_t_to_int64_t' ( const int64_t)
+0:? -3 (const int64_t)
+0:? 'int64_t_to_int64_t' ( const int64_t)
+0:? -4 (const int64_t)
+0:? 'uint8_t_to_int64_t' ( const int64_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_int64_t' ( const int64_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_int64_t' ( const int64_t)
+0:? 3 (const int64_t)
+0:? 'uint64_t_to_int64_t' ( const int64_t)
+0:? 4 (const int64_t)
+0:? 'float16_t_to_int64_t' ( const int64_t)
+0:? 42 (const int64_t)
+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:? 'bool_to_uint8_t' ( const uint8_t)
+0:? true (const bool)
+0:? 'int8_t_to_uint8_t' ( const uint8_t)
+0:? -1 (const int)
+0:? 'int16_t_to_uint8_t' ( const uint8_t)
+0:? -2 (const int)
+0:? 'int32_t_to_uint8_t' ( const uint8_t)
+0:? -3 (const int)
+0:? 'int64_t_to_uint8_t' ( const uint8_t)
+0:? -4 (const int64_t)
+0:? 'uint8_t_to_uint8_t' ( const uint8_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_uint8_t' ( const uint8_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_uint8_t' ( const uint8_t)
+0:? 3 (const uint)
+0:? 'uint64_t_to_uint8_t' ( const uint8_t)
+0:? 4 (const uint64_t)
+0:? 'float16_t_to_uint8_t' ( const uint8_t)
+0:? 42.000000
+0:? 'float32_t_to_uint8_t' ( const uint8_t)
+0:? 13.000000
+0:? 'float64_t_to_uint8_t' ( const uint8_t)
+0:? -4.000000
+0:? 'bool_to_uint16_t' ( const uint16_t)
+0:? true (const bool)
+0:? 'int8_t_to_uint16_t' ( const uint16_t)
+0:? -1 (const int)
+0:? 'int16_t_to_uint16_t' ( const uint16_t)
+0:? -2 (const int)
+0:? 'int32_t_to_uint16_t' ( const uint16_t)
+0:? -3 (const int)
+0:? 'int64_t_to_uint16_t' ( const uint16_t)
+0:? -4 (const int64_t)
+0:? 'uint8_t_to_uint16_t' ( const uint16_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_uint16_t' ( const uint16_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_uint16_t' ( const uint16_t)
+0:? 3 (const uint)
+0:? 'uint64_t_to_uint16_t' ( const uint16_t)
+0:? 4 (const uint64_t)
+0:? 'float16_t_to_uint16_t' ( const uint16_t)
+0:? 42.000000
+0:? 'float32_t_to_uint16_t' ( const uint16_t)
+0:? 13.000000
+0:? 'float64_t_to_uint16_t' ( const uint16_t)
+0:? -4.000000
+0:? 'bool_to_uint32_t' ( const uint)
+0:? 1 (const uint)
+0:? 'int8_t_to_uint32_t' ( const uint)
+0:? -1 (const int)
+0:? 'int16_t_to_uint32_t' ( const uint)
+0:? -2 (const int)
+0:? 'int32_t_to_uint32_t' ( const uint)
+0:? 4294967293 (const uint)
+0:? 'int64_t_to_uint32_t' ( const uint)
+0:? 4294967292 (const uint)
+0:? 'uint8_t_to_uint32_t' ( const uint)
+0:? 1 (const int)
+0:? 'uint16_t_to_uint32_t' ( const uint)
+0:? 2 (const int)
+0:? 'uint32_t_to_uint32_t' ( const uint)
+0:? 3 (const uint)
+0:? 'uint64_t_to_uint32_t' ( const uint)
+0:? 4 (const uint)
+0:? 'float16_t_to_uint32_t' ( const uint)
+0:? 42 (const uint)
+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:? 'bool_to_uint64_t' ( const uint64_t)
+0:? 1 (const uint64_t)
+0:? 'int8_t_to_uint64_t' ( const uint64_t)
+0:? -1 (const int)
+0:? 'int16_t_to_uint64_t' ( const uint64_t)
+0:? -2 (const int)
+0:? 'int32_t_to_uint64_t' ( const uint64_t)
+0:? 18446744073709551613 (const uint64_t)
+0:? 'int64_t_to_uint64_t' ( const uint64_t)
+0:? 18446744073709551612 (const uint64_t)
+0:? 'uint8_t_to_uint64_t' ( const uint64_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_uint64_t' ( const uint64_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_uint64_t' ( const uint64_t)
+0:? 3 (const uint64_t)
+0:? 'uint64_t_to_uint64_t' ( const uint64_t)
+0:? 4 (const uint64_t)
+0:? 'float16_t_to_uint64_t' ( const uint64_t)
+0:? 42 (const uint64_t)
+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:? 'bool_to_float16_t' ( const float16_t)
+0:? 1.000000
+0:? 'int8_t_to_float16_t' ( const float16_t)
+0:? -1 (const int)
+0:? 'int16_t_to_float16_t' ( const float16_t)
+0:? -2 (const int)
+0:? 'int32_t_to_float16_t' ( const float16_t)
+0:? -3.000000
+0:? 'int64_t_to_float16_t' ( const float16_t)
+0:? -4.000000
+0:? 'uint8_t_to_float16_t' ( const float16_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_float16_t' ( const float16_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_float16_t' ( const float16_t)
+0:? 3.000000
+0:? 'uint64_t_to_float16_t' ( const float16_t)
+0:? 4.000000
+0:? 'float16_t_to_float16_t' ( const float16_t)
+0:? 42.000000
+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:? 'bool_to_float32_t' ( const float)
+0:? 1.000000
+0:? 'int8_t_to_float32_t' ( const float)
+0:? -1 (const int)
+0:? 'int16_t_to_float32_t' ( const float)
+0:? -2 (const int)
+0:? 'int32_t_to_float32_t' ( const float)
+0:? -3.000000
+0:? 'int64_t_to_float32_t' ( const float)
+0:? -4.000000
+0:? 'uint8_t_to_float32_t' ( const float)
+0:? 1 (const int)
+0:? 'uint16_t_to_float32_t' ( const float)
+0:? 2 (const int)
+0:? 'uint32_t_to_float32_t' ( const float)
+0:? 3.000000
+0:? 'uint64_t_to_float32_t' ( const float)
+0:? 4.000000
+0:? 'float16_t_to_float32_t' ( const float)
+0:? 42.000000
+0:? 'float32_t_to_float32_t' ( const float)
+0:? 13.000000
+0:? 'float64_t_to_float32_t' ( const float)
+0:? -4.000000
+0:? 'bool_to_float64_t' ( const double)
+0:? 1.000000
+0:? 'int8_t_to_float64_t' ( const double)
+0:? -1 (const int)
+0:? 'int16_t_to_float64_t' ( const double)
+0:? -2 (const int)
+0:? 'int32_t_to_float64_t' ( const double)
+0:? -3.000000
+0:? 'int64_t_to_float64_t' ( const double)
+0:? -4.000000
+0:? 'uint8_t_to_float64_t' ( const double)
+0:? 1 (const int)
+0:? 'uint16_t_to_float64_t' ( const double)
+0:? 2 (const int)
+0:? 'uint32_t_to_float64_t' ( const double)
+0:? 3.000000
+0:? 'uint64_t_to_float64_t' ( const double)
+0:? 4.000000
+0:? 'float16_t_to_float64_t' ( const double)
+0:? 42.000000
+0:? 'float32_t_to_float64_t' ( const double)
+0:? 13.000000
+0:? 'float64_t_to_float64_t' ( const double)
+0:? -4.000000
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHX_shader_explicit_arithmetic_types
+local_size = (1, 1, 1)
+0:? Sequence
+0:48 Function Definition: main( ( global void)
+0:48 Function Parameters:
+0:? Linker Objects
+0:? 'bool_init' ( const bool)
+0:? true (const bool)
+0:? 'int8_t_init' ( const int8_t)
+0:? -1 (const int)
+0:? 'int16_t_init' ( const int16_t)
+0:? -2 (const int)
+0:? 'int32_t_init' ( const int)
+0:? -3 (const int)
+0:? 'int64_t_init' ( const int64_t)
+0:? -4 (const int64_t)
+0:? 'uint8_t_init' ( const uint8_t)
+0:? 1 (const int)
+0:? 'uint16_t_init' ( const uint16_t)
+0:? 2 (const int)
+0:? 'uint32_t_init' ( const uint)
+0:? 3 (const uint)
+0:? 'uint64_t_init' ( const uint64_t)
+0:? 4 (const uint64_t)
+0:? 'float16_t_init' ( const float16_t)
+0:? 42.000000
+0:? 'float32_t_init' ( const float)
+0:? 13.000000
+0:? '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)
+0:? -1 (const int)
+0:? 'int16_t_to_bool' ( const bool)
+0:? -2 (const int)
+0:? 'int32_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'int64_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'uint8_t_to_bool' ( const bool)
+0:? 1 (const int)
+0:? 'uint16_t_to_bool' ( const bool)
+0:? 2 (const int)
+0:? 'uint32_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'uint64_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'float16_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'float32_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'float64_t_to_bool' ( const bool)
+0:? true (const bool)
+0:? 'bool_to_int8_t' ( const int8_t)
+0:? true (const bool)
+0:? 'int8_t_to_int8_t' ( const int8_t)
+0:? -1 (const int)
+0:? 'int16_t_to_int8_t' ( const int8_t)
+0:? -2 (const int)
+0:? 'int32_t_to_int8_t' ( const int8_t)
+0:? -3 (const int)
+0:? 'int64_t_to_int8_t' ( const int8_t)
+0:? -4 (const int64_t)
+0:? 'uint8_t_to_int8_t' ( const int8_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_int8_t' ( const int8_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_int8_t' ( const int8_t)
+0:? 3 (const uint)
+0:? 'uint64_t_to_int8_t' ( const int8_t)
+0:? 4 (const uint64_t)
+0:? 'float16_t_to_int8_t' ( const int8_t)
+0:? 42.000000
+0:? 'float32_t_to_int8_t' ( const int8_t)
+0:? 13.000000
+0:? 'float64_t_to_int8_t' ( const int8_t)
+0:? -4.000000
+0:? 'bool_to_int16_t' ( const int16_t)
+0:? true (const bool)
+0:? 'int8_t_to_int16_t' ( const int16_t)
+0:? -1 (const int)
+0:? 'int16_t_to_int16_t' ( const int16_t)
+0:? -2 (const int)
+0:? 'int32_t_to_int16_t' ( const int16_t)
+0:? -3 (const int)
+0:? 'int64_t_to_int16_t' ( const int16_t)
+0:? -4 (const int64_t)
+0:? 'uint8_t_to_int16_t' ( const int16_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_int16_t' ( const int16_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_int16_t' ( const int16_t)
+0:? 3 (const uint)
+0:? 'uint64_t_to_int16_t' ( const int16_t)
+0:? 4 (const uint64_t)
+0:? 'float16_t_to_int16_t' ( const int16_t)
+0:? 42.000000
+0:? 'float32_t_to_int16_t' ( const int16_t)
+0:? 13.000000
+0:? 'float64_t_to_int16_t' ( const int16_t)
+0:? -4.000000
+0:? 'bool_to_int32_t' ( const int)
+0:? 1 (const int)
+0:? 'int8_t_to_int32_t' ( const int)
+0:? -1 (const int)
+0:? 'int16_t_to_int32_t' ( const int)
+0:? -2 (const int)
+0:? 'int32_t_to_int32_t' ( const int)
+0:? -3 (const int)
+0:? 'int64_t_to_int32_t' ( const int)
+0:? -4 (const int)
+0:? 'uint8_t_to_int32_t' ( const int)
+0:? 1 (const int)
+0:? 'uint16_t_to_int32_t' ( const int)
+0:? 2 (const int)
+0:? 'uint32_t_to_int32_t' ( const int)
+0:? 3 (const int)
+0:? 'uint64_t_to_int32_t' ( const int)
+0:? 4 (const int)
+0:? 'float16_t_to_int32_t' ( const int)
+0:? 42 (const int)
+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:? 'bool_to_int64_t' ( const int64_t)
+0:? 1 (const int64_t)
+0:? 'int8_t_to_int64_t' ( const int64_t)
+0:? -1 (const int)
+0:? 'int16_t_to_int64_t' ( const int64_t)
+0:? -2 (const int)
+0:? 'int32_t_to_int64_t' ( const int64_t)
+0:? -3 (const int64_t)
+0:? 'int64_t_to_int64_t' ( const int64_t)
+0:? -4 (const int64_t)
+0:? 'uint8_t_to_int64_t' ( const int64_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_int64_t' ( const int64_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_int64_t' ( const int64_t)
+0:? 3 (const int64_t)
+0:? 'uint64_t_to_int64_t' ( const int64_t)
+0:? 4 (const int64_t)
+0:? 'float16_t_to_int64_t' ( const int64_t)
+0:? 42 (const int64_t)
+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:? 'bool_to_uint8_t' ( const uint8_t)
+0:? true (const bool)
+0:? 'int8_t_to_uint8_t' ( const uint8_t)
+0:? -1 (const int)
+0:? 'int16_t_to_uint8_t' ( const uint8_t)
+0:? -2 (const int)
+0:? 'int32_t_to_uint8_t' ( const uint8_t)
+0:? -3 (const int)
+0:? 'int64_t_to_uint8_t' ( const uint8_t)
+0:? -4 (const int64_t)
+0:? 'uint8_t_to_uint8_t' ( const uint8_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_uint8_t' ( const uint8_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_uint8_t' ( const uint8_t)
+0:? 3 (const uint)
+0:? 'uint64_t_to_uint8_t' ( const uint8_t)
+0:? 4 (const uint64_t)
+0:? 'float16_t_to_uint8_t' ( const uint8_t)
+0:? 42.000000
+0:? 'float32_t_to_uint8_t' ( const uint8_t)
+0:? 13.000000
+0:? 'float64_t_to_uint8_t' ( const uint8_t)
+0:? -4.000000
+0:? 'bool_to_uint16_t' ( const uint16_t)
+0:? true (const bool)
+0:? 'int8_t_to_uint16_t' ( const uint16_t)
+0:? -1 (const int)
+0:? 'int16_t_to_uint16_t' ( const uint16_t)
+0:? -2 (const int)
+0:? 'int32_t_to_uint16_t' ( const uint16_t)
+0:? -3 (const int)
+0:? 'int64_t_to_uint16_t' ( const uint16_t)
+0:? -4 (const int64_t)
+0:? 'uint8_t_to_uint16_t' ( const uint16_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_uint16_t' ( const uint16_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_uint16_t' ( const uint16_t)
+0:? 3 (const uint)
+0:? 'uint64_t_to_uint16_t' ( const uint16_t)
+0:? 4 (const uint64_t)
+0:? 'float16_t_to_uint16_t' ( const uint16_t)
+0:? 42.000000
+0:? 'float32_t_to_uint16_t' ( const uint16_t)
+0:? 13.000000
+0:? 'float64_t_to_uint16_t' ( const uint16_t)
+0:? -4.000000
+0:? 'bool_to_uint32_t' ( const uint)
+0:? 1 (const uint)
+0:? 'int8_t_to_uint32_t' ( const uint)
+0:? -1 (const int)
+0:? 'int16_t_to_uint32_t' ( const uint)
+0:? -2 (const int)
+0:? 'int32_t_to_uint32_t' ( const uint)
+0:? 4294967293 (const uint)
+0:? 'int64_t_to_uint32_t' ( const uint)
+0:? 4294967292 (const uint)
+0:? 'uint8_t_to_uint32_t' ( const uint)
+0:? 1 (const int)
+0:? 'uint16_t_to_uint32_t' ( const uint)
+0:? 2 (const int)
+0:? 'uint32_t_to_uint32_t' ( const uint)
+0:? 3 (const uint)
+0:? 'uint64_t_to_uint32_t' ( const uint)
+0:? 4 (const uint)
+0:? 'float16_t_to_uint32_t' ( const uint)
+0:? 42 (const uint)
+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:? 'bool_to_uint64_t' ( const uint64_t)
+0:? 1 (const uint64_t)
+0:? 'int8_t_to_uint64_t' ( const uint64_t)
+0:? -1 (const int)
+0:? 'int16_t_to_uint64_t' ( const uint64_t)
+0:? -2 (const int)
+0:? 'int32_t_to_uint64_t' ( const uint64_t)
+0:? 18446744073709551613 (const uint64_t)
+0:? 'int64_t_to_uint64_t' ( const uint64_t)
+0:? 18446744073709551612 (const uint64_t)
+0:? 'uint8_t_to_uint64_t' ( const uint64_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_uint64_t' ( const uint64_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_uint64_t' ( const uint64_t)
+0:? 3 (const uint64_t)
+0:? 'uint64_t_to_uint64_t' ( const uint64_t)
+0:? 4 (const uint64_t)
+0:? 'float16_t_to_uint64_t' ( const uint64_t)
+0:? 42 (const uint64_t)
+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:? 'bool_to_float16_t' ( const float16_t)
+0:? 1.000000
+0:? 'int8_t_to_float16_t' ( const float16_t)
+0:? -1 (const int)
+0:? 'int16_t_to_float16_t' ( const float16_t)
+0:? -2 (const int)
+0:? 'int32_t_to_float16_t' ( const float16_t)
+0:? -3.000000
+0:? 'int64_t_to_float16_t' ( const float16_t)
+0:? -4.000000
+0:? 'uint8_t_to_float16_t' ( const float16_t)
+0:? 1 (const int)
+0:? 'uint16_t_to_float16_t' ( const float16_t)
+0:? 2 (const int)
+0:? 'uint32_t_to_float16_t' ( const float16_t)
+0:? 3.000000
+0:? 'uint64_t_to_float16_t' ( const float16_t)
+0:? 4.000000
+0:? 'float16_t_to_float16_t' ( const float16_t)
+0:? 42.000000
+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:? 'bool_to_float32_t' ( const float)
+0:? 1.000000
+0:? 'int8_t_to_float32_t' ( const float)
+0:? -1 (const int)
+0:? 'int16_t_to_float32_t' ( const float)
+0:? -2 (const int)
+0:? 'int32_t_to_float32_t' ( const float)
+0:? -3.000000
+0:? 'int64_t_to_float32_t' ( const float)
+0:? -4.000000
+0:? 'uint8_t_to_float32_t' ( const float)
+0:? 1 (const int)
+0:? 'uint16_t_to_float32_t' ( const float)
+0:? 2 (const int)
+0:? 'uint32_t_to_float32_t' ( const float)
+0:? 3.000000
+0:? 'uint64_t_to_float32_t' ( const float)
+0:? 4.000000
+0:? 'float16_t_to_float32_t' ( const float)
+0:? 42.000000
+0:? 'float32_t_to_float32_t' ( const float)
+0:? 13.000000
+0:? 'float64_t_to_float32_t' ( const float)
+0:? -4.000000
+0:? 'bool_to_float64_t' ( const double)
+0:? 1.000000
+0:? 'int8_t_to_float64_t' ( const double)
+0:? -1 (const int)
+0:? 'int16_t_to_float64_t' ( const double)
+0:? -2 (const int)
+0:? 'int32_t_to_float64_t' ( const double)
+0:? -3.000000
+0:? 'int64_t_to_float64_t' ( const double)
+0:? -4.000000
+0:? 'uint8_t_to_float64_t' ( const double)
+0:? 1 (const int)
+0:? 'uint16_t_to_float64_t' ( const double)
+0:? 2 (const int)
+0:? 'uint32_t_to_float64_t' ( const double)
+0:? 3.000000
+0:? 'uint64_t_to_float64_t' ( const double)
+0:? 4.000000
+0:? 'float16_t_to_float64_t' ( const double)
+0:? 42.000000
+0:? 'float32_t_to_float64_t' ( const double)
+0:? 13.000000
+0:? 'float64_t_to_float64_t' ( const double)
+0:? -4.000000
+
spv.16bitstorage-int.frag
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 171
+// Id's are bound by 172
Capability Shader
Capability StorageUniformBufferBlock16
114: 20(int) Constant 7
115: 20(int) Constant 6
116: TypePointer Uniform 20(int)
- 166: 39(ivec2) ConstantComposite 32 33
+ 166: 6(int16_t) Constant 1
+ 167: 6(int16_t) Constant 2
+ 168: 7(i16vec2) ConstantComposite 166 167
+ 170: 6(int16_t) Constant 3
4(main): 2 Function None 3
5: Label
69(x0): 68(ptr) Variable Function
164: 6(int16_t) Load 163
165: 28(ptr) AccessChain 19(b2) 21
Store 165 164
- 167: 7(i16vec2) SConvert 166
- 168: 42(ptr) AccessChain 19(b2) 32
- Store 168 167
- 169: 6(int16_t) SConvert 58
- 170: 28(ptr) AccessChain 19(b2) 21
- Store 170 169
+ 169: 42(ptr) AccessChain 19(b2) 32
+ Store 169 168
+ 171: 28(ptr) AccessChain 19(b2) 21
+ Store 171 170
Return
FunctionEnd
115: 20(int) Constant 7
116: 20(int) Constant 6
117: TypePointer Uniform 9(int)
- 167: 39(ivec2) ConstantComposite 82 10
- 170: 9(int) Constant 3
+ 167: 6(int16_t) Constant 1
+ 168: 6(int16_t) Constant 2
+ 169: 7(i16vec2) ConstantComposite 167 168
+ 171: 6(int16_t) Constant 3
4(main): 2 Function None 3
5: Label
69(x0): 68(ptr) Variable Function
165: 6(int16_t) Load 164
166: 28(ptr) AccessChain 19(b2) 21
Store 166 165
- 168: 7(i16vec2) UConvert 167
- 169: 42(ptr) AccessChain 19(b2) 32
- Store 169 168
- 171: 6(int16_t) UConvert 170
+ 170: 42(ptr) AccessChain 19(b2) 32
+ Store 170 169
172: 28(ptr) AccessChain 19(b2) 21
Store 172 171
Return
spv.16bitstorage.frag
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 173
+// Id's are bound by 172
Capability Shader
Capability StorageUniformBufferBlock16
114: 20(int) Constant 7
115: 20(int) Constant 6
116: TypePointer Uniform 20(int)
- 166: 37(float) Constant 1073741824
- 167: 40(fvec2) ConstantComposite 83 166
- 170: 37(float) Constant 1077936128
+ 166:6(float16_t) Constant 15360
+ 167:6(float16_t) Constant 16384
+ 168: 7(f16vec2) ConstantComposite 166 167
+ 170:6(float16_t) Constant 16896
4(main): 2 Function None 3
5: Label
70(x0): 69(ptr) Variable Function
164:6(float16_t) Load 163
165: 28(ptr) AccessChain 19(b2) 21
Store 165 164
- 168: 7(f16vec2) FConvert 167
169: 43(ptr) AccessChain 19(b2) 32
Store 169 168
- 171:6(float16_t) FConvert 170
- 172: 28(ptr) AccessChain 19(b2) 21
- Store 172 171
+ 171: 28(ptr) AccessChain 19(b2) 21
+ Store 171 170
Return
FunctionEnd
spv.8bitstorage-int.frag
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 171
+// Id's are bound by 172
Capability Shader
Capability CapabilityUniformAndStorageBuffer8BitAccess
114: 20(int) Constant 7
115: 20(int) Constant 6
116: TypePointer Uniform 20(int)
- 166: 39(ivec2) ConstantComposite 32 33
+ 166: 6(int8_t) Constant 1
+ 167: 6(int8_t) Constant 2
+ 168: 7(i8vec2) ConstantComposite 166 167
+ 170: 6(int8_t) Constant 3
4(main): 2 Function None 3
5: Label
69(x0): 68(ptr) Variable Function
164: 6(int8_t) Load 163
165: 28(ptr) AccessChain 19(b2) 21
Store 165 164
- 167: 7(i8vec2) SConvert 166
- 168: 42(ptr) AccessChain 19(b2) 32
- Store 168 167
- 169: 6(int8_t) SConvert 58
- 170: 28(ptr) AccessChain 19(b2) 21
- Store 170 169
+ 169: 42(ptr) AccessChain 19(b2) 32
+ Store 169 168
+ 171: 28(ptr) AccessChain 19(b2) 21
+ Store 171 170
Return
FunctionEnd
115: 20(int) Constant 7
116: 20(int) Constant 6
117: TypePointer Uniform 9(int)
- 167: 39(ivec2) ConstantComposite 82 10
- 170: 9(int) Constant 3
+ 167: 6(int8_t) Constant 1
+ 168: 6(int8_t) Constant 2
+ 169: 7(i8vec2) ConstantComposite 167 168
+ 171: 6(int8_t) Constant 3
4(main): 2 Function None 3
5: Label
69(x0): 68(ptr) Variable Function
165: 6(int8_t) Load 164
166: 28(ptr) AccessChain 19(b2) 21
Store 166 165
- 168: 7(i8vec2) UConvert 167
- 169: 42(ptr) AccessChain 19(b2) 32
- Store 169 168
- 171: 6(int8_t) UConvert 170
+ 170: 42(ptr) AccessChain 19(b2) 32
+ Store 170 169
172: 28(ptr) AccessChain 19(b2) 21
Store 172 171
Return
--- /dev/null
+#version 450\r
+\r
+#extension GL_KHX_shader_explicit_arithmetic_types : require\r
+\r
+const bool bool_init = true;\r
+const int8_t int8_t_init = int8_t(-1);\r
+const int16_t int16_t_init = int16_t(-2);\r
+const int32_t int32_t_init = int32_t(-3);\r
+const int64_t int64_t_init = int64_t(-4);\r
+const uint8_t uint8_t_init = uint8_t(1);\r
+const uint16_t uint16_t_init = uint16_t(2);\r
+const uint32_t uint32_t_init = uint32_t(3);\r
+const uint64_t uint64_t_init = uint64_t(4);\r
+const float16_t float16_t_init = float16_t(42.0);\r
+const float32_t float32_t_init = float32_t(13.0);\r
+const float64_t float64_t_init = float64_t(-4.0);\r
+\r
+#define TYPE_TO_TYPE(x, y) \\r
+ const x y##_to_##x = x(y##_init)\r
+\r
+#define TYPE_TO(x) \\r
+ TYPE_TO_TYPE(x, bool); \\r
+ TYPE_TO_TYPE(x, int8_t); \\r
+ TYPE_TO_TYPE(x, int16_t); \\r
+ TYPE_TO_TYPE(x, int32_t); \\r
+ TYPE_TO_TYPE(x, int64_t); \\r
+ TYPE_TO_TYPE(x, uint8_t); \\r
+ TYPE_TO_TYPE(x, uint16_t); \\r
+ TYPE_TO_TYPE(x, uint32_t); \\r
+ TYPE_TO_TYPE(x, uint64_t); \\r
+ TYPE_TO_TYPE(x, float16_t); \\r
+ TYPE_TO_TYPE(x, float32_t); \\r
+ TYPE_TO_TYPE(x, float64_t)\r
+\r
+TYPE_TO(bool);\r
+TYPE_TO(int8_t);\r
+TYPE_TO(int16_t);\r
+TYPE_TO(int32_t);\r
+TYPE_TO(int64_t);\r
+TYPE_TO(uint8_t);\r
+TYPE_TO(uint16_t);\r
+TYPE_TO(uint32_t);\r
+TYPE_TO(uint64_t);\r
+TYPE_TO(float16_t);\r
+TYPE_TO(float32_t);\r
+TYPE_TO(float64_t);\r
+\r
+void main() {}\r
break;
}
+ case EOpConvInt8ToBool:
+ newConstArray[i].setBConst(unionArray[i].getI8Const()); break;
+ case EOpConvUint8ToBool:
+ newConstArray[i].setBConst(unionArray[i].getU8Const()); break;
+ case EOpConvInt16ToBool:
+ newConstArray[i].setBConst(unionArray[i].getI16Const()); break;
+ case EOpConvUint16ToBool:
+ newConstArray[i].setBConst(unionArray[i].getU16Const()); break;
+ case EOpConvIntToBool:
+ newConstArray[i].setBConst(unionArray[i].getIConst()); break;
+ case EOpConvUintToBool:
+ newConstArray[i].setBConst(unionArray[i].getUConst()); break;
+ case EOpConvInt64ToBool:
+ newConstArray[i].setBConst(unionArray[i].getI64Const()); break;
+ case EOpConvUint64ToBool:
+ newConstArray[i].setBConst(unionArray[i].getI64Const()); break;
+ case EOpConvFloat16ToBool:
+ newConstArray[i].setBConst(unionArray[i].getDConst()); break;
+ case EOpConvFloatToBool:
+ newConstArray[i].setBConst(unionArray[i].getDConst()); break;
+ case EOpConvDoubleToBool:
+ newConstArray[i].setBConst(unionArray[i].getDConst()); break;
+
+ case EOpConvBoolToInt8:
+ newConstArray[i].setI8Const(unionArray[i].getBConst()); break;
+ case EOpConvBoolToUint8:
+ newConstArray[i].setU8Const(unionArray[i].getBConst()); break;
+ case EOpConvBoolToInt16:
+ newConstArray[i].setI16Const(unionArray[i].getBConst()); break;
+ case EOpConvBoolToUint16:
+ newConstArray[i].setU16Const(unionArray[i].getBConst()); break;
+ case EOpConvBoolToInt:
+ newConstArray[i].setIConst(unionArray[i].getBConst()); break;
+ case EOpConvBoolToUint:
+ newConstArray[i].setUConst(unionArray[i].getBConst()); break;
+ case EOpConvBoolToInt64:
+ newConstArray[i].setI64Const(unionArray[i].getBConst()); break;
+ case EOpConvBoolToUint64:
+ newConstArray[i].setU64Const(unionArray[i].getBConst()); break;
+ case EOpConvBoolToFloat16:
+ newConstArray[i].setDConst(unionArray[i].getBConst()); break;
+ case EOpConvBoolToFloat:
+ newConstArray[i].setDConst(unionArray[i].getBConst()); break;
+ case EOpConvBoolToDouble:
+ newConstArray[i].setDConst(unionArray[i].getBConst()); break;
+
+ case EOpConvInt8ToInt16:
+ newConstArray[i].setI16Const(unionArray[i].getI8Const()); break;
+ case EOpConvInt8ToInt:
+ newConstArray[i].setIConst(unionArray[i].getI8Const()); break;
+ case EOpConvInt8ToInt64:
+ newConstArray[i].setI64Const(unionArray[i].getI8Const()); break;
+ case EOpConvInt8ToUint8:
+ newConstArray[i].setU8Const(unionArray[i].getI8Const()); break;
+ case EOpConvInt8ToUint16:
+ newConstArray[i].setU16Const(unionArray[i].getI8Const()); break;
+ case EOpConvInt8ToUint:
+ newConstArray[i].setUConst(unionArray[i].getI8Const()); break;
+ case EOpConvInt8ToUint64:
+ newConstArray[i].setU64Const(unionArray[i].getI8Const()); break;
+ case EOpConvUint8ToInt8:
+ newConstArray[i].setI8Const(unionArray[i].getU8Const()); break;
+ case EOpConvUint8ToInt16:
+ newConstArray[i].setI16Const(unionArray[i].getU8Const()); break;
+ case EOpConvUint8ToInt:
+ newConstArray[i].setIConst(unionArray[i].getU8Const()); break;
+ case EOpConvUint8ToInt64:
+ newConstArray[i].setI64Const(unionArray[i].getU8Const()); break;
+ case EOpConvUint8ToUint16:
+ newConstArray[i].setU16Const(unionArray[i].getU8Const()); break;
+ case EOpConvUint8ToUint:
+ newConstArray[i].setUConst(unionArray[i].getU8Const()); break;
+ case EOpConvUint8ToUint64:
+ newConstArray[i].setU64Const(unionArray[i].getU8Const()); break;
+ case EOpConvInt8ToFloat16:
+ newConstArray[i].setDConst(unionArray[i].getI8Const()); break;
+ case EOpConvInt8ToFloat:
+ newConstArray[i].setDConst(unionArray[i].getI8Const()); break;
+ case EOpConvInt8ToDouble:
+ newConstArray[i].setDConst(unionArray[i].getI8Const()); break;
+ case EOpConvUint8ToFloat16:
+ newConstArray[i].setDConst(unionArray[i].getU8Const()); break;
+ case EOpConvUint8ToFloat:
+ newConstArray[i].setDConst(unionArray[i].getU8Const()); break;
+ case EOpConvUint8ToDouble:
+ newConstArray[i].setDConst(unionArray[i].getU8Const()); break;
+
+ case EOpConvInt16ToInt8:
+ newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getI16Const())); break;
+ case EOpConvInt16ToInt:
+ newConstArray[i].setIConst(unionArray[i].getI16Const()); break;
+ case EOpConvInt16ToInt64:
+ newConstArray[i].setI64Const(unionArray[i].getI16Const()); break;
+ case EOpConvInt16ToUint8:
+ newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getI16Const())); break;
+ case EOpConvInt16ToUint16:
+ newConstArray[i].setU16Const(unionArray[i].getI16Const()); break;
+ case EOpConvInt16ToUint:
+ newConstArray[i].setUConst(unionArray[i].getI16Const()); break;
+ case EOpConvInt16ToUint64:
+ newConstArray[i].setU64Const(unionArray[i].getI16Const()); break;
+ case EOpConvUint16ToInt8:
+ newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getU16Const())); break;
+ case EOpConvUint16ToInt16:
+ newConstArray[i].setI16Const(unionArray[i].getU16Const()); break;
+ case EOpConvUint16ToInt:
+ newConstArray[i].setIConst(unionArray[i].getU16Const()); break;
+ case EOpConvUint16ToInt64:
+ newConstArray[i].setI64Const(unionArray[i].getU16Const()); break;
+ case EOpConvUint16ToUint8:
+ newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getU16Const())); break;
+
+ case EOpConvUint16ToUint:
+ newConstArray[i].setUConst(unionArray[i].getU16Const()); break;
+ case EOpConvUint16ToUint64:
+ newConstArray[i].setU64Const(unionArray[i].getU16Const()); break;
+ case EOpConvInt16ToFloat16:
+ newConstArray[i].setDConst(unionArray[i].getI16Const()); break;
+ case EOpConvInt16ToFloat:
+ newConstArray[i].setDConst(unionArray[i].getI16Const()); break;
+ case EOpConvInt16ToDouble:
+ newConstArray[i].setDConst(unionArray[i].getI16Const()); break;
+ case EOpConvUint16ToFloat16:
+ newConstArray[i].setDConst(unionArray[i].getU16Const()); break;
+ case EOpConvUint16ToFloat:
+ newConstArray[i].setDConst(unionArray[i].getU16Const()); break;
+ case EOpConvUint16ToDouble:
+ newConstArray[i].setDConst(unionArray[i].getU16Const()); break;
+
+ case EOpConvIntToInt8:
+ newConstArray[i].setI8Const(unionArray[i].getIConst()); break;
+ case EOpConvIntToInt16:
+ newConstArray[i].setI16Const(unionArray[i].getIConst()); break;
+ case EOpConvIntToInt64:
+ newConstArray[i].setI64Const(unionArray[i].getIConst()); break;
+ case EOpConvIntToUint8:
+ newConstArray[i].setU8Const(unionArray[i].getIConst()); break;
+ case EOpConvIntToUint16:
+ newConstArray[i].setU16Const(unionArray[i].getIConst()); break;
+ case EOpConvIntToUint:
+ newConstArray[i].setUConst(unionArray[i].getIConst()); break;
+ case EOpConvIntToUint64:
+ newConstArray[i].setU64Const(unionArray[i].getIConst()); break;
+
+ case EOpConvUintToInt8:
+ newConstArray[i].setI8Const(unionArray[i].getUConst()); break;
+ case EOpConvUintToInt16:
+ newConstArray[i].setI16Const(unionArray[i].getUConst()); break;
+ case EOpConvUintToInt:
+ newConstArray[i].setIConst(unionArray[i].getUConst()); break;
+ case EOpConvUintToInt64:
+ newConstArray[i].setI64Const(unionArray[i].getUConst()); break;
+ case EOpConvUintToUint8:
+ newConstArray[i].setU8Const(unionArray[i].getUConst()); break;
+ case EOpConvUintToUint16:
+ newConstArray[i].setU16Const(unionArray[i].getUConst()); break;
+ case EOpConvUintToUint64:
+ newConstArray[i].setU64Const(unionArray[i].getUConst()); break;
+ case EOpConvIntToFloat16:
+ newConstArray[i].setDConst(unionArray[i].getIConst()); break;
+ case EOpConvIntToFloat:
+ newConstArray[i].setDConst(unionArray[i].getIConst()); break;
+ case EOpConvIntToDouble:
+ newConstArray[i].setDConst(unionArray[i].getIConst()); break;
+ case EOpConvUintToFloat16:
+ newConstArray[i].setDConst(unionArray[i].getUConst()); break;
+ case EOpConvUintToFloat:
+ newConstArray[i].setDConst(unionArray[i].getUConst()); break;
+ case EOpConvUintToDouble:
+ newConstArray[i].setDConst(unionArray[i].getUConst()); break;
+ case EOpConvInt64ToInt8:
+ newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getI64Const())); break;
+ case EOpConvInt64ToInt16:
+ newConstArray[i].setI16Const(static_cast<int16_t>(unionArray[i].getI64Const())); break;
+ case EOpConvInt64ToInt:
+ newConstArray[i].setIConst(static_cast<int32_t>(unionArray[i].getI64Const())); break;
+ case EOpConvInt64ToUint8:
+ newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getI64Const())); break;
+ case EOpConvInt64ToUint16:
+ newConstArray[i].setU16Const(static_cast<uint16_t>(unionArray[i].getI64Const())); break;
+ case EOpConvInt64ToUint:
+ newConstArray[i].setUConst(static_cast<uint32_t>(unionArray[i].getI64Const())); break;
+ case EOpConvInt64ToUint64:
+ newConstArray[i].setU64Const(unionArray[i].getI64Const()); break;
+ case EOpConvUint64ToInt8:
+ newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getU64Const())); break;
+ case EOpConvUint64ToInt16:
+ newConstArray[i].setI16Const(static_cast<int16_t>(unionArray[i].getU64Const())); break;
+ case EOpConvUint64ToInt:
+ newConstArray[i].setIConst(static_cast<int32_t>(unionArray[i].getU64Const())); break;
+ case EOpConvUint64ToInt64:
+ newConstArray[i].setI64Const(unionArray[i].getU64Const()); break;
+ case EOpConvUint64ToUint8:
+ newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getU64Const())); break;
+ case EOpConvUint64ToUint16:
+ newConstArray[i].setU16Const(static_cast<uint16_t>(unionArray[i].getU64Const())); break;
+ case EOpConvUint64ToUint:
+ newConstArray[i].setUConst(static_cast<uint32_t>(unionArray[i].getU64Const())); break;
+ case EOpConvInt64ToFloat16:
+ newConstArray[i].setDConst(static_cast<double>(unionArray[i].getI64Const())); break;
+ case EOpConvInt64ToFloat:
+ newConstArray[i].setDConst(static_cast<double>(unionArray[i].getI64Const())); break;
+ case EOpConvInt64ToDouble:
+ newConstArray[i].setDConst(static_cast<double>(unionArray[i].getI64Const())); break;
+ case EOpConvUint64ToFloat16:
+ newConstArray[i].setDConst(static_cast<double>(unionArray[i].getU64Const())); break;
+ case EOpConvUint64ToFloat:
+ newConstArray[i].setDConst(static_cast<double>(unionArray[i].getU64Const())); break;
+ case EOpConvUint64ToDouble:
+ newConstArray[i].setDConst(static_cast<double>(unionArray[i].getU64Const())); break;
+ case EOpConvFloat16ToInt8:
+ newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloat16ToInt16:
+ newConstArray[i].setI16Const(static_cast<int16_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloat16ToInt:
+ newConstArray[i].setIConst(static_cast<int32_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloat16ToInt64:
+ newConstArray[i].setI64Const(static_cast<int64_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloat16ToUint8:
+ newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloat16ToUint16:
+ newConstArray[i].setU16Const(static_cast<uint16_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloat16ToUint:
+ newConstArray[i].setUConst(static_cast<uint32_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloat16ToUint64:
+ newConstArray[i].setU64Const(static_cast<uint64_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloat16ToFloat:
+ newConstArray[i].setDConst(unionArray[i].getDConst()); break;
+ case EOpConvFloat16ToDouble:
+ newConstArray[i].setDConst(unionArray[i].getDConst()); break;
+ case EOpConvFloatToInt8:
+ newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloatToInt16:
+ newConstArray[i].setI16Const(static_cast<int16_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloatToInt:
+ newConstArray[i].setIConst(static_cast<int32_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloatToInt64:
+ newConstArray[i].setI64Const(static_cast<int64_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloatToUint8:
+ newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloatToUint16:
+ newConstArray[i].setU16Const(static_cast<uint16_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloatToUint:
+ newConstArray[i].setUConst(static_cast<uint32_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloatToUint64:
+ newConstArray[i].setU64Const(static_cast<uint64_t>(unionArray[i].getDConst())); break;
+ case EOpConvFloatToFloat16:
+ newConstArray[i].setDConst(unionArray[i].getDConst()); break;
+ case EOpConvFloatToDouble:
+ newConstArray[i].setDConst(unionArray[i].getDConst()); break;
+ case EOpConvDoubleToInt8:
+ newConstArray[i].setI8Const(static_cast<int8_t>(unionArray[i].getDConst())); break;
+ case EOpConvDoubleToInt16:
+ newConstArray[i].setI16Const(static_cast<int16_t>(unionArray[i].getDConst())); break;
+ case EOpConvDoubleToInt:
+ newConstArray[i].setIConst(static_cast<int32_t>(unionArray[i].getDConst())); break;
+ case EOpConvDoubleToInt64:
+ newConstArray[i].setI64Const(static_cast<int64_t>(unionArray[i].getDConst())); break;
+ case EOpConvDoubleToUint8:
+ newConstArray[i].setU8Const(static_cast<uint8_t>(unionArray[i].getDConst())); break;
+ case EOpConvDoubleToUint16:
+ newConstArray[i].setU16Const(static_cast<uint16_t>(unionArray[i].getDConst())); break;
+ case EOpConvDoubleToUint:
+ newConstArray[i].setUConst(static_cast<uint32_t>(unionArray[i].getDConst())); break;
+ case EOpConvDoubleToUint64:
+ newConstArray[i].setU64Const(static_cast<uint64_t>(unionArray[i].getDConst())); break;
+ case EOpConvDoubleToFloat16:
+ newConstArray[i].setDConst(unionArray[i].getDConst()); break;
+ case EOpConvDoubleToFloat:
+ newConstArray[i].setDConst(unionArray[i].getDConst()); break;
+
+
+
// TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out
case EOpSinh:
// This is 'mechanism' here, it does any conversion told.
// It is about basic type, not about shape.
// The policy comes from the shader or the calling code.
-TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped* node) const
+TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped* node) const
{
//
// Add a new newNode for the conversion.
TType newType(convertTo, EvqTemporary, node->getVectorSize(), node->getMatrixCols(), node->getMatrixRows());
newNode = addUnaryNode(newOp, node, node->getLoc(), newType);
- // TODO: it seems that some unary folding operations should occur here, but are not
+ if (node->getAsConstantUnion()) {
+ TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType);
+ if (folded)
+ return folded;
+ }
// Propagate specialization-constant-ness, if allowed
if (node->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*newNode))
//
// Add a new newNode for the conversion.
//
- TIntermUnary* newNode = createConversion(promoteTo, node);
+ TIntermTyped* newNode = createConversion(promoteTo, node);
return newNode;
}
bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&);
void performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root);
bool isConversionAllowed(TOperator op, TIntermTyped* node) const;
- TIntermUnary* createConversion(TBasicType convertTo, TIntermTyped* node) const;
+ TIntermTyped* createConversion(TBasicType convertTo, TIntermTyped* node) const;
std::tuple<TBasicType, TBasicType> getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const;
bool extensionRequested(const char *extension) const {return requestedExtensions.find(extension) != requestedExtensions.end();}
static const char* getResourceName(TResourceType);
"precise_struct_block.vert",
"maxClipDistances.vert",
"findFunction.frag",
+ "constantUnaryConversion.comp"
})),
FileNameAsCustomTestSuffix
);