glsl: Wrap non-struct buffer types in structs

Use the AddSpirvBlockDecoration transform to do this.

Add expected results for all of the new E2E tests. The arrayLength()
tests all fail as this is not yet implemented for the GLSL
backend. The other tests all pass except two that assign whole structs
to buffers, which is also a pre-existing issue.

Bug: tint:1372
Change-Id: I230197b43a5561e619866419d642ffc1ed085aac
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/76164
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Stephen White <senorblanco@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
James Price
2022-01-19 15:55:56 +00:00
parent 51e55b244e
commit ae8c65620e
30 changed files with 707 additions and 0 deletions

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.