The containsPhysicalStorageBufferOrArray function now handles struct types correctly, checking their contents recursively for buffer reference types. As a result, OpVariables containing structs that have members that are buffer references now have the appropriate AliasedPointer or RestrictPointer decoration as per the spec. Fixes #3188
		
			
				
	
	
		
			35 lines
		
	
	
		
			668 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			668 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
#version 450
 | 
						|
 | 
						|
#extension GL_EXT_buffer_reference : enable
 | 
						|
 | 
						|
layout(buffer_reference, std430) buffer blockType {
 | 
						|
    layout(offset = 0)  int a;
 | 
						|
    layout(offset = 4)  int b;
 | 
						|
    layout(offset = 8)  int c;
 | 
						|
    layout(offset = 12) int d;
 | 
						|
    layout(offset = 16) int e;
 | 
						|
};
 | 
						|
 | 
						|
layout(std430) buffer t2 {
 | 
						|
    blockType f;
 | 
						|
    blockType g;
 | 
						|
} t;
 | 
						|
 | 
						|
layout(std430, buffer_reference) buffer T2 { int x; };
 | 
						|
layout(std430, buffer_reference) buffer T1 { int x; };
 | 
						|
 | 
						|
struct Blah {
 | 
						|
    T1 t1;
 | 
						|
    T2 t2;
 | 
						|
};
 | 
						|
 | 
						|
layout(set=0, binding=0) buffer T3 {
 | 
						|
  Blah Bindings[];
 | 
						|
} t3;
 | 
						|
 | 
						|
 | 
						|
void main() {
 | 
						|
    Blah x = t3.Bindings[2];
 | 
						|
    t3.Bindings[0] = t3.Bindings[1];
 | 
						|
}
 |