154 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| #version 440
 | |
| 
 | |
| // Note 'location'-only tests for enhanced layouts are in 330.frag
 | |
| // Generic 'component' tests are in 440.vert
 | |
| 
 | |
| // a consumes components 2 and 3 of location 4
 | |
| layout(location = 4, component = 2) in vec2 a; 
 | |
| 
 | |
| // b consumes component 1 of location 4
 | |
| layout(location = 4, component = 1) in float b; 
 | |
| layout(location = 4, component = 2) in vec2 h;  // ERROR, component overlap not okay for fragment in
 | |
| 
 | |
| layout(location = 3, component = 2) in vec3 c;  // ERROR: c overflows components 2 and 3
 | |
| 
 | |
| // e consumes beginning (components 0, 1 and 2) of each of 6 slots
 | |
| layout(location = 20, component = 0) in vec3 e[6];
 | |
| 
 | |
| // f consumes last component of the same 6 slots 
 | |
| layout(location = 20, component = 3) in float f[6];
 | |
| 
 | |
| layout(location = 30, component = 3) out int be;
 | |
| layout(location = 30, component = 0) out vec3 bf;  // ERROR, not the same basic type
 | |
| 
 | |
| writeonly uniform;          // ERROR
 | |
| readonly in;                // ERROR
 | |
| flat out;                   // ERROR
 | |
| mediump uniform;
 | |
| 
 | |
| layout(offset=12) uniform;  // ERROR
 | |
| layout(offset=12) in;       // ERROR
 | |
| layout(offset=12) out;      // ERROR
 | |
| 
 | |
| layout(align=16) uniform;   // ERROR
 | |
| layout(align=16) in;        // ERROR
 | |
| layout(align=16) out;       // ERROR
 | |
| 
 | |
| layout(offset=12) uniform  ubl1 { int a; } inst1;  // ERROR
 | |
| layout(offset=12)      in inbl2 { int a; } inst2;  // ERROR
 | |
| layout(offset=12)     out inbl3 { int a; } inst3;  // ERROR
 | |
| 
 | |
| layout(align=16, std140) uniform  ubl4 { int a; } inst4;
 | |
| layout(align=16) uniform  ubl8 { int a; } inst8;  // ERROR, no packing
 | |
| layout(align=16)      in inbl5 { int a; } inst5;  // ERROR
 | |
| layout(align=16)     out inbl6 { int a; } inst6;  // ERROR
 | |
| 
 | |
| layout(offset=12) uniform vec4 v1;  // ERROR
 | |
| layout(offset=12)      in vec4 v2;  // ERROR
 | |
| layout(offset=12)     out vec4 v3;  // ERROR
 | |
| 
 | |
| layout(align=16) uniform vec4 v4;   // ERROR
 | |
| layout(align=16)      in vec4 v5;   // ERROR
 | |
| layout(align=16)     out vec4 v6;   // ERROR
 | |
| 
 | |
| layout(std140) in;                  // ERROR
 | |
| layout(std140) uniform vec4 v7;     // ERROR
 | |
| 
 | |
| layout(align=48) uniform ubl7 {          // ERROR, not power of 2
 | |
|     layout(offset=12, align=4) float f;  // ERROR, no packing
 | |
| } inst7;
 | |
| 
 | |
| in ibl10 {
 | |
|     layout(offset=12) float f;  // ERROR
 | |
|     layout(align=4) float g;    // ERROR
 | |
| } inst10;
 | |
| 
 | |
| layout(std430) uniform;
 | |
| 
 | |
| layout(align=32) uniform ubl9 {
 | |
|     float e;
 | |
|     layout(offset=12, align=4) float f;
 | |
|     layout(offset=20) float g;
 | |
|     float h;
 | |
| } inst9;
 | |
| 
 | |
| uniform ubl11 {
 | |
|     layout(offset=12, align=4) float f;
 | |
|     float g;
 | |
| } inst11;
 | |
| 
 | |
| layout(std140) uniform block {
 | |
|                         vec4   a;     // a takes offsets 0-15
 | |
|     layout(offset = 32) vec3   b;     // b takes offsets 32-43
 | |
|     layout(offset = 40) vec2   c;     // ERROR, lies within previous member
 | |
|     layout(align = 6)   double g;     // ERROR, 6 is not a power of 2
 | |
|     layout(offset=68)   double h;     // ERROR, offset not aligned
 | |
| } specExampleErrors;
 | |
| 
 | |
| layout(std140) uniform block2 {
 | |
|                         vec4   a;     // a takes offsets 0-15
 | |
|     layout(offset = 32) vec3   b;     // b takes offsets 32-43
 | |
|     layout(offset = 48) vec2   d;     // d takes offsets 48-55
 | |
|     layout(align = 16)  float  e;     // e takes offsets 64-67
 | |
|     layout(align = 2)   double f;     // f takes offsets 72-79
 | |
|     layout(offset = 80) float  h;     // h takes offsets 80-83
 | |
|     layout(align = 64)  dvec3  i;     // i takes offsets 128-151
 | |
|     layout(offset = 164, align = 8) float  j;     // j takes offsets 168-171
 | |
| } specExample;
 | |
| 
 | |
| layout(std430) buffer block430 {
 | |
|                         vec4   a;     // a takes offsets 0-15
 | |
|     layout(offset = 32) vec3   b;     // b takes offsets 32-43
 | |
|     layout(offset = 40) vec2   c;     // ERROR, lies within previous member
 | |
|     layout(align = 6)   double g;     // ERROR, 6 is not a power of 2
 | |
|     layout(offset=68)   double h;     // ERROR, offset not aligned
 | |
|     layout(align = 0)   double i;     // ERROR, 0 not a power of 2
 | |
| } specExampleErrors430;
 | |
| 
 | |
| layout(std430) buffer block2430 {
 | |
|                         vec4   a;     // a takes offsets 0-15
 | |
|     layout(offset = 32) vec3   b;     // b takes offsets 32-43
 | |
|     layout(offset = 48) vec2   d;     // d takes offsets 48-55
 | |
|     layout(align = 16)  float  e;     // e takes offsets 64-67
 | |
|     layout(align = 2)   double f;     // f takes offsets 72-79
 | |
|     layout(offset = 80) float  h;     // h takes offsets 80-83
 | |
|     layout(align = 64)  dvec3  i;     // i takes offsets 128-151
 | |
|     layout(offset = 164, align = 8) float  j;     // j takes offsets 168-171
 | |
| } specExample430;
 | |
| 
 | |
| layout(std430, align = 128) buffer block24300 {
 | |
|     vec4   a;
 | |
|     vec3   b;
 | |
|     vec2   d;
 | |
|     float  e;
 | |
|     double f;
 | |
|     float  h;
 | |
|     dvec3  i;
 | |
| } specExample4300;
 | |
| 
 | |
| layout(std430, align = 128) buffer block24301 {
 | |
|     vec4   a;
 | |
|     vec3   b;
 | |
|     vec2   d;
 | |
|     layout(offset=388) float  e;
 | |
|     layout(align=8) double f;
 | |
|     float  h;
 | |
|     dvec3  i;
 | |
| } specExample4301;
 | |
| 
 | |
| int aconst[gl_MaxTransformFeedbackBuffers];
 | |
| int bconst[gl_MaxTransformFeedbackInterleavedComponents];
 | |
| 
 | |
| sample in vec3 sampInArray[4];
 | |
| 
 | |
| void interp()
 | |
| {
 | |
|     interpolateAtCentroid(sampInArray[2].xy);
 | |
|     interpolateAtSample(sampInArray[2].x.x, 2);
 | |
| }
 | |
| 
 | |
| int layer()
 | |
| {
 | |
|     return gl_Layer;
 | |
| }
 | 
