glsl: Always emit structures

Skipping those that are block-decorated is not correct, as
block-decorated structures can also have non-buffer usages. This is
even clearer now that WGSL has removed the block attribute.

Bug: tint:1324
Change-Id: I6484766a5c541d39e2dc08beb3ae7b889759a3fb
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/72083
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
James Price
2021-12-09 15:45:03 +00:00
parent 3a4443a681
commit c7c80c053d
76 changed files with 515 additions and 4 deletions

View File

@@ -123,10 +123,8 @@ bool GeneratorImpl::Generate() {
return false;
}
} else if (auto* str = decl->As<ast::Struct>()) {
if (!str->IsBlockDecorated()) {
if (!EmitStructType(current_buffer_, builder_.Sem().Get(str))) {
return false;
}
if (!EmitStructType(current_buffer_, builder_.Sem().Get(str))) {
return false;
}
} else if (auto* func = decl->As<ast::Function>()) {
if (func->IsEntryPoint()) {

View File

@@ -434,6 +434,9 @@ TEST_F(GlslGeneratorImplTest_Function,
EXPECT_EQ(gen.result(), R"(#version 310 es
precision mediump float;
struct UBO {
vec4 coord;
};
layout (binding = 0) uniform UBO_1 {
vec4 coord;
@@ -484,6 +487,9 @@ TEST_F(GlslGeneratorImplTest_Function,
EXPECT_EQ(gen.result(), R"(#version 310 es
precision mediump float;
struct Uniforms {
vec4 coord;
};
layout (binding = 0) uniform Uniforms_1 {
vec4 coord;
@@ -535,6 +541,10 @@ TEST_F(GlslGeneratorImplTest_Function,
EXPECT_EQ(gen.result(), R"(#version 310 es
precision mediump float;
struct Data {
int a;
float b;
};
layout (binding = 0) buffer Data_1 {
int a;
@@ -587,6 +597,10 @@ TEST_F(GlslGeneratorImplTest_Function,
R"(#version 310 es
precision mediump float;
struct Data {
int a;
float b;
};
layout (binding = 0) buffer Data_1 {
int a;
@@ -635,6 +649,10 @@ TEST_F(GlslGeneratorImplTest_Function,
EXPECT_EQ(gen.result(), R"(#version 310 es
precision mediump float;
struct Data {
int a;
float b;
};
layout (binding = 0) buffer Data_1 {
int a;
@@ -684,6 +702,10 @@ TEST_F(GlslGeneratorImplTest_Function,
EXPECT_EQ(gen.result(), R"(#version 310 es
precision mediump float;
struct Data {
int a;
float b;
};
layout (binding = 0) buffer Data_1 {
int a;
@@ -735,6 +757,9 @@ TEST_F(GlslGeneratorImplTest_Function,
EXPECT_EQ(gen.result(), R"(#version 310 es
precision mediump float;
struct S {
float x;
};
layout (binding = 0) uniform S_1 {
float x;
@@ -791,6 +816,9 @@ TEST_F(GlslGeneratorImplTest_Function,
R"(#version 310 es
precision mediump float;
struct S {
float x;
};
layout (binding = 0) buffer S_1 {
float x;
@@ -1057,6 +1085,9 @@ TEST_F(GlslGeneratorImplTest_Function,
EXPECT_EQ(gen.result(), R"(#version 310 es
precision mediump float;
struct Data {
float d;
};
layout (binding = 0) buffer Data_1 {
float d;

View File

@@ -296,6 +296,10 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor, StorageBuffer_Store_Matrix_Empty) {
R"(#version 310 es
precision mediump float;
struct Data {
int a;
mat2x3 b;
};
layout (binding = 0) buffer Data_1 {
int a;
@@ -342,6 +346,10 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor,
R"(#version 310 es
precision mediump float;
struct Data {
float z;
mat4x3 a;
};
layout (binding = 0) buffer Data_1 {
float z;
@@ -386,6 +394,10 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor,
R"(#version 310 es
precision mediump float;
struct Data {
float z;
int a[5];
};
layout (binding = 0) buffer Data_1 {
float z;
@@ -431,6 +443,10 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor,
R"(#version 310 es
precision mediump float;
struct Data {
float z;
int a[5];
};
layout (binding = 0) buffer Data_1 {
float z;
@@ -473,6 +489,10 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor, StorageBuffer_Store_ToArray) {
R"(#version 310 es
precision mediump float;
struct Data {
float z;
int a[5];
};
layout (binding = 0) buffer Data_1 {
float z;
@@ -530,6 +550,9 @@ struct Inner {
vec3 a;
vec3 b;
};
struct Data {
Inner c[4];
};
layout (binding = 0) buffer Data_1 {
Inner c[4];
@@ -589,6 +612,9 @@ struct Inner {
vec3 a;
vec3 b;
};
struct Data {
Inner c[4];
};
layout (binding = 0) buffer Data_1 {
Inner c[4];
@@ -648,6 +674,9 @@ struct Inner {
vec3 a;
vec3 b;
};
struct Data {
Inner c[4];
};
layout (binding = 0) buffer Data_1 {
Inner c[4];
@@ -707,6 +736,9 @@ struct Inner {
vec3 a;
vec3 b;
};
struct Data {
Inner c[4];
};
layout (binding = 0) buffer Data_1 {
Inner c[4];
@@ -762,6 +794,9 @@ struct Inner {
vec3 a;
vec3 b;
};
struct Data {
Inner c[4];
};
layout (binding = 0) buffer Data_1 {
Inner c[4];
@@ -821,6 +856,9 @@ struct Inner {
ivec3 a;
vec3 b;
};
struct Data {
Inner c[4];
};
layout (binding = 0) buffer Data_1 {
Inner c[4];

View File

@@ -51,6 +51,9 @@ TEST_F(GlslSanitizerTest, Call_ArrayLength) {
auto* expect = R"(#version 310 es
precision mediump float;
struct my_struct {
float a[];
};
layout (binding = 1) buffer my_struct_1 {
float a[];
@@ -102,6 +105,10 @@ TEST_F(GlslSanitizerTest, Call_ArrayLength_OtherMembersInStruct) {
auto* expect = R"(#version 310 es
precision mediump float;
struct my_struct {
float z;
float a[];
};
layout (binding = 1) buffer my_struct_1 {
float z;
@@ -156,6 +163,9 @@ TEST_F(GlslSanitizerTest, Call_ArrayLength_ViaLets) {
auto* expect = R"(#version 310 es
precision mediump float;
struct my_struct {
float a[];
};
layout (binding = 1) buffer my_struct_1 {
float a[];