 3fd1232665
			
		
	
	
		3fd1232665
		
	
	
	
	
		
			
			This is an alternate fix for the issue described in commit be63facd, whose solution didn't work if there were non-trivial operations involved in computing a constant initializer which caused the 'constant unfolding' code to kick in (addConstantReferenceConversion). Instead, this change does the 'unfolding' later in createSpvConstantFromConstUnionArray. If a reference-type constant has survived that long, then folding is already done, this must be a 'real' (inside a function) use of the constant, and it should be safe to unfold and apply the bitcast.
		
			
				
	
	
		
			27 lines
		
	
	
		
			660 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			660 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| #version 450
 | |
| 
 | |
| #extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable
 | |
| #extension GL_EXT_buffer_reference : enable
 | |
| #extension GL_EXT_scalar_block_layout : enable
 | |
| 
 | |
| layout(buffer_reference) buffer T1 {
 | |
|     int x;
 | |
|     bool y;
 | |
| };
 | |
| layout(buffer_reference) buffer T2 {
 | |
|     int x;
 | |
| };
 | |
| 
 | |
| const int s = int(uint64_t(T1(T2(uint64_t(3)))));
 | |
| int x[s];
 | |
| const uint64_t t = uint64_t(true ? T2(uint64_t(10)) : T2(uint64_t(11)));
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     T1 a = T1(uint64_t(4)), b = T1(uint64_t(5));
 | |
|     T1 c = true ? a : b;
 | |
|     T1 d = (a,b);
 | |
|     T1 e = true ? T1(uint64_t(6)) : T1(uint64_t(7));
 | |
|     T1 f = a.y ? T1(uint64_t(8)) : T1(uint64_t(9));
 | |
| }
 |