mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-12 22:56:09 +00:00
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:
@@ -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()) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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[];
|
||||
|
||||
Reference in New Issue
Block a user