Add conversion folding when the source is a constant.
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.
This commit is contained in:
parent
0e6c82ce93
commit
81a63f1de0
645
Test/baseResults/constantUnaryConversion.comp.out
Normal file
645
Test/baseResults/constantUnaryConversion.comp.out
Normal file
@ -0,0 +1,645 @@
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
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
|
||||
@ -204,7 +204,10 @@ spv.16bitstorage-int.frag
|
||||
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
|
||||
@ -324,11 +327,9 @@ spv.16bitstorage-int.frag
|
||||
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
|
||||
|
@ -205,8 +205,10 @@ spv.16bitstorage-uint.frag
|
||||
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
|
||||
@ -326,10 +328,8 @@ spv.16bitstorage-uint.frag
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
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
|
||||
@ -204,9 +204,10 @@ spv.16bitstorage.frag
|
||||
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
|
||||
@ -326,11 +327,9 @@ spv.16bitstorage.frag
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
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
|
||||
@ -203,7 +203,10 @@ spv.8bitstorage-int.frag
|
||||
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
|
||||
@ -323,11 +326,9 @@ spv.8bitstorage-int.frag
|
||||
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
|
||||
|
@ -204,8 +204,10 @@ spv.8bitstorage-uint.frag
|
||||
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
|
||||
@ -325,10 +327,8 @@ spv.8bitstorage-uint.frag
|
||||
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
|
||||
|
48
Test/constantUnaryConversion.comp
Normal file
48
Test/constantUnaryConversion.comp
Normal file
@ -0,0 +1,48 @@
|
||||
#version 450
|
||||
|
||||
#extension GL_KHX_shader_explicit_arithmetic_types : require
|
||||
|
||||
const bool bool_init = true;
|
||||
const int8_t int8_t_init = int8_t(-1);
|
||||
const int16_t int16_t_init = int16_t(-2);
|
||||
const int32_t int32_t_init = int32_t(-3);
|
||||
const int64_t int64_t_init = int64_t(-4);
|
||||
const uint8_t uint8_t_init = uint8_t(1);
|
||||
const uint16_t uint16_t_init = uint16_t(2);
|
||||
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);
|
||||
|
||||
#define TYPE_TO_TYPE(x, y) \
|
||||
const x y##_to_##x = x(y##_init)
|
||||
|
||||
#define TYPE_TO(x) \
|
||||
TYPE_TO_TYPE(x, bool); \
|
||||
TYPE_TO_TYPE(x, int8_t); \
|
||||
TYPE_TO_TYPE(x, int16_t); \
|
||||
TYPE_TO_TYPE(x, int32_t); \
|
||||
TYPE_TO_TYPE(x, int64_t); \
|
||||
TYPE_TO_TYPE(x, uint8_t); \
|
||||
TYPE_TO_TYPE(x, uint16_t); \
|
||||
TYPE_TO_TYPE(x, uint32_t); \
|
||||
TYPE_TO_TYPE(x, uint64_t); \
|
||||
TYPE_TO_TYPE(x, float16_t); \
|
||||
TYPE_TO_TYPE(x, float32_t); \
|
||||
TYPE_TO_TYPE(x, float64_t)
|
||||
|
||||
TYPE_TO(bool);
|
||||
TYPE_TO(int8_t);
|
||||
TYPE_TO(int16_t);
|
||||
TYPE_TO(int32_t);
|
||||
TYPE_TO(int64_t);
|
||||
TYPE_TO(uint8_t);
|
||||
TYPE_TO(uint16_t);
|
||||
TYPE_TO(uint32_t);
|
||||
TYPE_TO(uint64_t);
|
||||
TYPE_TO(float16_t);
|
||||
TYPE_TO(float32_t);
|
||||
TYPE_TO(float64_t);
|
||||
|
||||
void main() {}
|
@ -670,6 +670,279 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
|
||||
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:
|
||||
|
@ -489,7 +489,7 @@ bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const
|
||||
// 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.
|
||||
@ -712,7 +712,11 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
|
||||
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))
|
||||
@ -1021,7 +1025,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
|
||||
//
|
||||
// Add a new newNode for the conversion.
|
||||
//
|
||||
TIntermUnary* newNode = createConversion(promoteTo, node);
|
||||
TIntermTyped* newNode = createConversion(promoteTo, node);
|
||||
|
||||
return newNode;
|
||||
}
|
||||
|
@ -732,7 +732,7 @@ protected:
|
||||
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);
|
||||
|
@ -231,6 +231,7 @@ INSTANTIATE_TEST_CASE_P(
|
||||
"precise_struct_block.vert",
|
||||
"maxClipDistances.vert",
|
||||
"findFunction.frag",
|
||||
"constantUnaryConversion.comp"
|
||||
})),
|
||||
FileNameAsCustomTestSuffix
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user