diff --git a/src/transform/glsl.cc b/src/transform/glsl.cc index 100023465d..4f056b8ed7 100644 --- a/src/transform/glsl.cc +++ b/src/transform/glsl.cc @@ -17,6 +17,7 @@ #include #include "src/program_builder.h" +#include "src/transform/add_spirv_block_decoration.h" #include "src/transform/calculate_array_length.h" #include "src/transform/canonicalize_entry_point_io.h" #include "src/transform/decompose_memory_access.h" @@ -75,6 +76,7 @@ Output Glsl::Run(const Program* in, const DataMap& inputs) { manager.Add(); manager.Add(); manager.Add(); + manager.Add(); // For now, canonicalize to structs for all IO, as in HLSL. // TODO(senorblanco): we could skip this by accessing global entry point diff --git a/test/buffer/storage/types/array.wgsl.expected.glsl b/test/buffer/storage/types/array.wgsl.expected.glsl new file mode 100644 index 0000000000..f1f3394e80 --- /dev/null +++ b/test/buffer/storage/types/array.wgsl.expected.glsl @@ -0,0 +1,24 @@ +#version 310 es +precision mediump float; + +struct tint_symbol_block { + float inner[4]; +}; + +layout (binding = 0) buffer tint_symbol_block_1 { + float inner[4]; +} tint_symbol; +layout (binding = 1) buffer tint_symbol_block_2 { + float inner[4]; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1.inner = tint_symbol.inner; + return; +} +void main() { + tint_symbol_2(); +} + + diff --git a/test/buffer/storage/types/f32.wgsl.expected.glsl b/test/buffer/storage/types/f32.wgsl.expected.glsl new file mode 100644 index 0000000000..3f381913a8 --- /dev/null +++ b/test/buffer/storage/types/f32.wgsl.expected.glsl @@ -0,0 +1,24 @@ +#version 310 es +precision mediump float; + +struct tint_symbol_block { + float inner; +}; + +layout (binding = 0) buffer tint_symbol_block_1 { + float inner; +} tint_symbol; +layout (binding = 1) buffer tint_symbol_block_2 { + float inner; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1.inner = tint_symbol.inner; + return; +} +void main() { + tint_symbol_2(); +} + + diff --git a/test/buffer/storage/types/i32.wgsl.expected.glsl b/test/buffer/storage/types/i32.wgsl.expected.glsl new file mode 100644 index 0000000000..c952e58daf --- /dev/null +++ b/test/buffer/storage/types/i32.wgsl.expected.glsl @@ -0,0 +1,24 @@ +#version 310 es +precision mediump float; + +struct tint_symbol_block { + int inner; +}; + +layout (binding = 0) buffer tint_symbol_block_1 { + int inner; +} tint_symbol; +layout (binding = 1) buffer tint_symbol_block_2 { + int inner; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1.inner = tint_symbol.inner; + return; +} +void main() { + tint_symbol_2(); +} + + diff --git a/test/buffer/storage/types/mat2x2.wgsl.expected.glsl b/test/buffer/storage/types/mat2x2.wgsl.expected.glsl new file mode 100644 index 0000000000..f0cab26b73 --- /dev/null +++ b/test/buffer/storage/types/mat2x2.wgsl.expected.glsl @@ -0,0 +1,24 @@ +#version 310 es +precision mediump float; + +struct tint_symbol_block { + mat2 inner; +}; + +layout (binding = 0) buffer tint_symbol_block_1 { + mat2 inner; +} tint_symbol; +layout (binding = 1) buffer tint_symbol_block_2 { + mat2 inner; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1.inner = tint_symbol.inner; + return; +} +void main() { + tint_symbol_2(); +} + + diff --git a/test/buffer/storage/types/mat2x3.wgsl.expected.glsl b/test/buffer/storage/types/mat2x3.wgsl.expected.glsl new file mode 100644 index 0000000000..51ebbdf9b9 --- /dev/null +++ b/test/buffer/storage/types/mat2x3.wgsl.expected.glsl @@ -0,0 +1,24 @@ +#version 310 es +precision mediump float; + +struct tint_symbol_block { + mat2x3 inner; +}; + +layout (binding = 0) buffer tint_symbol_block_1 { + mat2x3 inner; +} tint_symbol; +layout (binding = 1) buffer tint_symbol_block_2 { + mat2x3 inner; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1.inner = tint_symbol.inner; + return; +} +void main() { + tint_symbol_2(); +} + + diff --git a/test/buffer/storage/types/mat3x2.wgsl.expected.glsl b/test/buffer/storage/types/mat3x2.wgsl.expected.glsl new file mode 100644 index 0000000000..3d2d78a07f --- /dev/null +++ b/test/buffer/storage/types/mat3x2.wgsl.expected.glsl @@ -0,0 +1,24 @@ +#version 310 es +precision mediump float; + +struct tint_symbol_block { + mat3x2 inner; +}; + +layout (binding = 0) buffer tint_symbol_block_1 { + mat3x2 inner; +} tint_symbol; +layout (binding = 1) buffer tint_symbol_block_2 { + mat3x2 inner; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1.inner = tint_symbol.inner; + return; +} +void main() { + tint_symbol_2(); +} + + diff --git a/test/buffer/storage/types/mat4x4.wgsl.expected.glsl b/test/buffer/storage/types/mat4x4.wgsl.expected.glsl new file mode 100644 index 0000000000..c90a42ae76 --- /dev/null +++ b/test/buffer/storage/types/mat4x4.wgsl.expected.glsl @@ -0,0 +1,24 @@ +#version 310 es +precision mediump float; + +struct tint_symbol_block { + mat4 inner; +}; + +layout (binding = 0) buffer tint_symbol_block_1 { + mat4 inner; +} tint_symbol; +layout (binding = 1) buffer tint_symbol_block_2 { + mat4 inner; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1.inner = tint_symbol.inner; + return; +} +void main() { + tint_symbol_2(); +} + + diff --git a/test/buffer/storage/types/runtime_array.wgsl.expected.glsl b/test/buffer/storage/types/runtime_array.wgsl.expected.glsl new file mode 100644 index 0000000000..bc7c8c6c79 --- /dev/null +++ b/test/buffer/storage/types/runtime_array.wgsl.expected.glsl @@ -0,0 +1,21 @@ +#version 310 es +precision mediump float; + + +layout (binding = 0) buffer tint_symbol_block_1 { + float inner[]; +} tint_symbol; +layout (binding = 1) buffer tint_symbol_block_2 { + float inner[]; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1.inner[0] = tint_symbol.inner[0]; + return; +} +void main() { + tint_symbol_2(); +} + + diff --git a/test/buffer/storage/types/struct.wgsl.expected.glsl b/test/buffer/storage/types/struct.wgsl.expected.glsl new file mode 100644 index 0000000000..9c7878ab3e --- /dev/null +++ b/test/buffer/storage/types/struct.wgsl.expected.glsl @@ -0,0 +1,36 @@ +SKIP: FAILED + +#version 310 es +precision mediump float; + +struct Inner { + float f; +}; +struct S { + Inner inner; +}; + +layout (binding = 0) buffer S_1 { + Inner inner; +} tint_symbol; +layout (binding = 1) buffer S_2 { + Inner inner; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1 = tint_symbol; + return; +} +void main() { + tint_symbol_2(); +} + + +Error parsing GLSL shader: +ERROR: 0:20: 'assign' : cannot convert from 'layout( binding=0 column_major shared) buffer block{layout( column_major shared) buffer structure{ global mediump float f} inner}' to 'layout( binding=1 column_major shared) buffer block{layout( column_major shared) buffer structure{ global mediump float f} inner}' +ERROR: 0:20: '' : compilation terminated +ERROR: 2 compilation errors. No code generated. + + + diff --git a/test/buffer/storage/types/u32.wgsl.expected.glsl b/test/buffer/storage/types/u32.wgsl.expected.glsl new file mode 100644 index 0000000000..f0d0db6cfd --- /dev/null +++ b/test/buffer/storage/types/u32.wgsl.expected.glsl @@ -0,0 +1,24 @@ +#version 310 es +precision mediump float; + +struct tint_symbol_block { + uint inner; +}; + +layout (binding = 0) buffer tint_symbol_block_1 { + uint inner; +} tint_symbol; +layout (binding = 1) buffer tint_symbol_block_2 { + uint inner; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1.inner = tint_symbol.inner; + return; +} +void main() { + tint_symbol_2(); +} + + diff --git a/test/buffer/storage/types/vec2.wgsl.expected.glsl b/test/buffer/storage/types/vec2.wgsl.expected.glsl new file mode 100644 index 0000000000..6256047909 --- /dev/null +++ b/test/buffer/storage/types/vec2.wgsl.expected.glsl @@ -0,0 +1,24 @@ +#version 310 es +precision mediump float; + +struct tint_symbol_block { + ivec2 inner; +}; + +layout (binding = 0) buffer tint_symbol_block_1 { + ivec2 inner; +} tint_symbol; +layout (binding = 1) buffer tint_symbol_block_2 { + ivec2 inner; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1.inner = tint_symbol.inner; + return; +} +void main() { + tint_symbol_2(); +} + + diff --git a/test/buffer/storage/types/vec3.wgsl.expected.glsl b/test/buffer/storage/types/vec3.wgsl.expected.glsl new file mode 100644 index 0000000000..f00c6371d9 --- /dev/null +++ b/test/buffer/storage/types/vec3.wgsl.expected.glsl @@ -0,0 +1,24 @@ +#version 310 es +precision mediump float; + +struct tint_symbol_block { + uvec3 inner; +}; + +layout (binding = 0) buffer tint_symbol_block_1 { + uvec3 inner; +} tint_symbol; +layout (binding = 1) buffer tint_symbol_block_2 { + uvec3 inner; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1.inner = tint_symbol.inner; + return; +} +void main() { + tint_symbol_2(); +} + + diff --git a/test/buffer/storage/types/vec4.wgsl.expected.glsl b/test/buffer/storage/types/vec4.wgsl.expected.glsl new file mode 100644 index 0000000000..95e5e9fb37 --- /dev/null +++ b/test/buffer/storage/types/vec4.wgsl.expected.glsl @@ -0,0 +1,24 @@ +#version 310 es +precision mediump float; + +struct tint_symbol_block { + vec4 inner; +}; + +layout (binding = 0) buffer tint_symbol_block_1 { + vec4 inner; +} tint_symbol; +layout (binding = 1) buffer tint_symbol_block_2 { + vec4 inner; +} tint_symbol_1; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol_2() { + tint_symbol_1.inner = tint_symbol.inner; + return; +} +void main() { + tint_symbol_2(); +} + + diff --git a/test/buffer/uniform/types/array.wgsl.expected.glsl b/test/buffer/uniform/types/array.wgsl.expected.glsl new file mode 100644 index 0000000000..11ff5ceca2 --- /dev/null +++ b/test/buffer/uniform/types/array.wgsl.expected.glsl @@ -0,0 +1,21 @@ +#version 310 es +precision mediump float; + +struct u_block { + vec4 inner[4]; +}; + +layout (binding = 0) uniform u_block_1 { + vec4 inner[4]; +} u; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + vec4 x[4] = u.inner; + return; +} +void main() { + tint_symbol(); +} + + diff --git a/test/buffer/uniform/types/f32.wgsl.expected.glsl b/test/buffer/uniform/types/f32.wgsl.expected.glsl new file mode 100644 index 0000000000..caa6a44e13 --- /dev/null +++ b/test/buffer/uniform/types/f32.wgsl.expected.glsl @@ -0,0 +1,21 @@ +#version 310 es +precision mediump float; + +struct u_block { + float inner; +}; + +layout (binding = 0) uniform u_block_1 { + float inner; +} u; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + float x = u.inner; + return; +} +void main() { + tint_symbol(); +} + + diff --git a/test/buffer/uniform/types/i32.wgsl.expected.glsl b/test/buffer/uniform/types/i32.wgsl.expected.glsl new file mode 100644 index 0000000000..719812bfb9 --- /dev/null +++ b/test/buffer/uniform/types/i32.wgsl.expected.glsl @@ -0,0 +1,21 @@ +#version 310 es +precision mediump float; + +struct u_block { + int inner; +}; + +layout (binding = 0) uniform u_block_1 { + int inner; +} u; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + int x = u.inner; + return; +} +void main() { + tint_symbol(); +} + + diff --git a/test/buffer/uniform/types/mat2x2.wgsl.expected.glsl b/test/buffer/uniform/types/mat2x2.wgsl.expected.glsl new file mode 100644 index 0000000000..1104d7dc9b --- /dev/null +++ b/test/buffer/uniform/types/mat2x2.wgsl.expected.glsl @@ -0,0 +1,21 @@ +#version 310 es +precision mediump float; + +struct u_block { + mat2 inner; +}; + +layout (binding = 0) uniform u_block_1 { + mat2 inner; +} u; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + mat2 x = u.inner; + return; +} +void main() { + tint_symbol(); +} + + diff --git a/test/buffer/uniform/types/mat2x3.wgsl.expected.glsl b/test/buffer/uniform/types/mat2x3.wgsl.expected.glsl new file mode 100644 index 0000000000..b61c56ed6e --- /dev/null +++ b/test/buffer/uniform/types/mat2x3.wgsl.expected.glsl @@ -0,0 +1,21 @@ +#version 310 es +precision mediump float; + +struct u_block { + mat2x3 inner; +}; + +layout (binding = 0) uniform u_block_1 { + mat2x3 inner; +} u; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + mat2x3 x = u.inner; + return; +} +void main() { + tint_symbol(); +} + + diff --git a/test/buffer/uniform/types/mat3x2.wgsl.expected.glsl b/test/buffer/uniform/types/mat3x2.wgsl.expected.glsl new file mode 100644 index 0000000000..58d076b90d --- /dev/null +++ b/test/buffer/uniform/types/mat3x2.wgsl.expected.glsl @@ -0,0 +1,21 @@ +#version 310 es +precision mediump float; + +struct u_block { + mat3x2 inner; +}; + +layout (binding = 0) uniform u_block_1 { + mat3x2 inner; +} u; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + mat3x2 x = u.inner; + return; +} +void main() { + tint_symbol(); +} + + diff --git a/test/buffer/uniform/types/mat4x4.wgsl.expected.glsl b/test/buffer/uniform/types/mat4x4.wgsl.expected.glsl new file mode 100644 index 0000000000..3f5f108d39 --- /dev/null +++ b/test/buffer/uniform/types/mat4x4.wgsl.expected.glsl @@ -0,0 +1,21 @@ +#version 310 es +precision mediump float; + +struct u_block { + mat4 inner; +}; + +layout (binding = 0) uniform u_block_1 { + mat4 inner; +} u; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + mat4 x = u.inner; + return; +} +void main() { + tint_symbol(); +} + + diff --git a/test/buffer/uniform/types/struct.wgsl.expected.glsl b/test/buffer/uniform/types/struct.wgsl.expected.glsl new file mode 100644 index 0000000000..ca402486a5 --- /dev/null +++ b/test/buffer/uniform/types/struct.wgsl.expected.glsl @@ -0,0 +1,33 @@ +SKIP: FAILED + +#version 310 es +precision mediump float; + +struct Inner { + float f; +}; +struct S { + Inner inner; +}; + +layout (binding = 0) uniform S_1 { + Inner inner; +} u; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + S x = u; + return; +} +void main() { + tint_symbol(); +} + + +Error parsing GLSL shader: +ERROR: 0:17: '=' : cannot convert from 'layout( binding=0 column_major shared) uniform block{layout( column_major shared) uniform structure{ global mediump float f} inner}' to ' temp structure{ global structure{ global mediump float f} inner}' +ERROR: 0:17: '' : compilation terminated +ERROR: 2 compilation errors. No code generated. + + + diff --git a/test/buffer/uniform/types/u32.wgsl.expected.glsl b/test/buffer/uniform/types/u32.wgsl.expected.glsl new file mode 100644 index 0000000000..555ec426f8 --- /dev/null +++ b/test/buffer/uniform/types/u32.wgsl.expected.glsl @@ -0,0 +1,21 @@ +#version 310 es +precision mediump float; + +struct u_block { + uint inner; +}; + +layout (binding = 0) uniform u_block_1 { + uint inner; +} u; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + uint x = u.inner; + return; +} +void main() { + tint_symbol(); +} + + diff --git a/test/buffer/uniform/types/vec2.wgsl.expected.glsl b/test/buffer/uniform/types/vec2.wgsl.expected.glsl new file mode 100644 index 0000000000..dd8b58dcbe --- /dev/null +++ b/test/buffer/uniform/types/vec2.wgsl.expected.glsl @@ -0,0 +1,21 @@ +#version 310 es +precision mediump float; + +struct u_block { + ivec2 inner; +}; + +layout (binding = 0) uniform u_block_1 { + ivec2 inner; +} u; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + ivec2 x = u.inner; + return; +} +void main() { + tint_symbol(); +} + + diff --git a/test/buffer/uniform/types/vec3.wgsl.expected.glsl b/test/buffer/uniform/types/vec3.wgsl.expected.glsl new file mode 100644 index 0000000000..3049309afe --- /dev/null +++ b/test/buffer/uniform/types/vec3.wgsl.expected.glsl @@ -0,0 +1,21 @@ +#version 310 es +precision mediump float; + +struct u_block { + uvec3 inner; +}; + +layout (binding = 0) uniform u_block_1 { + uvec3 inner; +} u; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + uvec3 x = u.inner; + return; +} +void main() { + tint_symbol(); +} + + diff --git a/test/buffer/uniform/types/vec4.wgsl.expected.glsl b/test/buffer/uniform/types/vec4.wgsl.expected.glsl new file mode 100644 index 0000000000..077fe672e8 --- /dev/null +++ b/test/buffer/uniform/types/vec4.wgsl.expected.glsl @@ -0,0 +1,21 @@ +#version 310 es +precision mediump float; + +struct u_block { + vec4 inner; +}; + +layout (binding = 0) uniform u_block_1 { + vec4 inner; +} u; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + vec4 x = u.inner; + return; +} +void main() { + tint_symbol(); +} + + diff --git a/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl b/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl new file mode 100644 index 0000000000..857791e663 --- /dev/null +++ b/test/intrinsics/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl @@ -0,0 +1,30 @@ +SKIP: FAILED + +#version 310 es +precision mediump float; + + +layout (binding = 0) buffer G_block_1 { + int inner[]; +} G; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + uint tint_symbol_2 = 0u; + G.inner.GetDimensions(tint_symbol_2); + uint tint_symbol_3 = (tint_symbol_2 / 4u); + uint l1 = tint_symbol_3; + return; +} +void main() { + tint_symbol(); +} + + +Error parsing GLSL shader: +ERROR: 0:12: '.' : cannot apply to an array: GetDimensions +ERROR: 0:12: '' : compilation terminated +ERROR: 2 compilation errors. No code generated. + + + diff --git a/test/intrinsics/arrayLength/simple_no_struct.wgsl.expected.glsl b/test/intrinsics/arrayLength/simple_no_struct.wgsl.expected.glsl new file mode 100644 index 0000000000..857791e663 --- /dev/null +++ b/test/intrinsics/arrayLength/simple_no_struct.wgsl.expected.glsl @@ -0,0 +1,30 @@ +SKIP: FAILED + +#version 310 es +precision mediump float; + + +layout (binding = 0) buffer G_block_1 { + int inner[]; +} G; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + uint tint_symbol_2 = 0u; + G.inner.GetDimensions(tint_symbol_2); + uint tint_symbol_3 = (tint_symbol_2 / 4u); + uint l1 = tint_symbol_3; + return; +} +void main() { + tint_symbol(); +} + + +Error parsing GLSL shader: +ERROR: 0:12: '.' : cannot apply to an array: GetDimensions +ERROR: 0:12: '' : compilation terminated +ERROR: 2 compilation errors. No code generated. + + + diff --git a/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl b/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl new file mode 100644 index 0000000000..857791e663 --- /dev/null +++ b/test/intrinsics/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl @@ -0,0 +1,30 @@ +SKIP: FAILED + +#version 310 es +precision mediump float; + + +layout (binding = 0) buffer G_block_1 { + int inner[]; +} G; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + uint tint_symbol_2 = 0u; + G.inner.GetDimensions(tint_symbol_2); + uint tint_symbol_3 = (tint_symbol_2 / 4u); + uint l1 = tint_symbol_3; + return; +} +void main() { + tint_symbol(); +} + + +Error parsing GLSL shader: +ERROR: 0:12: '.' : cannot apply to an array: GetDimensions +ERROR: 0:12: '' : compilation terminated +ERROR: 2 compilation errors. No code generated. + + + diff --git a/test/intrinsics/arrayLength/via_let_no_struct.wgsl.expected.glsl b/test/intrinsics/arrayLength/via_let_no_struct.wgsl.expected.glsl new file mode 100644 index 0000000000..857791e663 --- /dev/null +++ b/test/intrinsics/arrayLength/via_let_no_struct.wgsl.expected.glsl @@ -0,0 +1,30 @@ +SKIP: FAILED + +#version 310 es +precision mediump float; + + +layout (binding = 0) buffer G_block_1 { + int inner[]; +} G; + +layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; +void tint_symbol() { + uint tint_symbol_2 = 0u; + G.inner.GetDimensions(tint_symbol_2); + uint tint_symbol_3 = (tint_symbol_2 / 4u); + uint l1 = tint_symbol_3; + return; +} +void main() { + tint_symbol(); +} + + +Error parsing GLSL shader: +ERROR: 0:12: '.' : cannot apply to an array: GetDimensions +ERROR: 0:12: '' : compilation terminated +ERROR: 2 compilation errors. No code generated. + + +