validation: compute shader must include 'workgroup_size' in its attributes

Bug: tint:884
Change-Id: If96c6df3247fee142a779117fa26d006afd4f7ef
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/55680
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
Sarah
2021-06-29 18:39:44 +00:00
committed by Sarah Mashayekhi
parent d18f2e0d6e
commit e6cb51e715
1840 changed files with 2070 additions and 2018 deletions

View File

@@ -70,7 +70,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var len : u32 = arrayLength(&sb.arr);
}
@@ -92,7 +92,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var len : u32 = ((tint_symbol_1.buffer_size[0u] - 4u) / 4u);
}
@@ -123,7 +123,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var len : u32 = arrayLength(&sb.arr);
}
@@ -146,7 +146,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var len : u32 = ((tint_symbol_1.buffer_size[0u] - 8u) / 64u);
}
@@ -184,7 +184,7 @@ struct SB2 {
[[group(1), binding(2)]] var<storage, read> sb2 : SB2;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var len1 : u32 = arrayLength(&(sb1.arr1));
var len2 : u32 = arrayLength(&(sb2.arr2));
@@ -216,7 +216,7 @@ struct SB2 {
[[group(1), binding(2)]] var<storage, read> sb2 : SB2;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var len1 : u32 = ((tint_symbol_1.buffer_size[0u] - 4u) / 4u);
var len2 : u32 = ((tint_symbol_1.buffer_size[1u] - 16u) / 16u);
@@ -249,7 +249,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
ignore(&(sb.arr));
}
@@ -287,7 +287,7 @@ struct SB2 {
[[group(1), binding(2)]] var<storage, read> sb2 : SB2;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var len1 : u32 = arrayLength(&(sb1.arr1));
var len2 : u32 = arrayLength(&(sb2.arr2));

View File

@@ -34,7 +34,7 @@ struct S {
[[group(3), binding(2)]] var<storage, read> b : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f() {
}
)";
@@ -59,7 +59,7 @@ struct S {
[[group(3), binding(2)]] var<storage, read> b : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f() {
}
)";
@@ -73,7 +73,7 @@ struct S {
[[group(3), binding(2)]] var<storage, read> b : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f() {
}
)";
@@ -103,7 +103,7 @@ struct S {
[[group(4), binding(3)]] var<storage, read> c : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f() {
}
)";
@@ -119,7 +119,7 @@ struct S {
[[group(4), binding(3)]] var<storage, read> c : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f() {
}
)";
@@ -157,7 +157,7 @@ type A = S;
[[group(4), binding(3)]] var<storage> c : A;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f() {
}
)";
@@ -179,7 +179,7 @@ type A = S;
[[group(4), binding(3)]] var<storage, write> c : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f() {
}
)";
@@ -207,7 +207,7 @@ struct S {
[[group(3), binding(2)]] var<storage, read> b : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f() {
}
)";
@@ -221,7 +221,7 @@ struct S {
[[group(6), binding(7)]] var<storage, write> b : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f() {
}
)";
@@ -256,7 +256,7 @@ struct S {
[[group(5), binding(4)]] var<storage, read> d : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f() {
let x : i32 = (((a.i + b.i) + c.i) + d.i);
}
@@ -276,7 +276,7 @@ struct S {
[[internal(disable_validation__binding_point_collision), group(5), binding(4)]] var<storage, read> d : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f() {
let x : i32 = (((a.i + b.i) + c.i) + d.i);
}
@@ -310,12 +310,12 @@ struct S {
[[group(5), binding(4)]] var<storage, read> d : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f1() {
let x : i32 = (a.i + c.i);
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f2() {
let x : i32 = (b.i + d.i);
}
@@ -335,12 +335,12 @@ struct S {
[[group(5), binding(4)]] var<storage, read> d : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f1() {
let x : i32 = (a.i + c.i);
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f2() {
let x : i32 = (b.i + d.i);
}
@@ -368,7 +368,7 @@ struct S {
[[group(2), binding(1)]] var<storage, read> a : S;
[[group(3), binding(2)]] var<storage, read> b : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn f() {}
)";

View File

@@ -32,7 +32,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var len : u32 = arrayLength(&sb.arr);
}
@@ -50,7 +50,7 @@ fn tint_symbol(buffer : SB, result : ptr<function, u32>)
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var tint_symbol_1 : u32 = 0u;
tint_symbol(sb, &(tint_symbol_1));
@@ -74,7 +74,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var a : u32 = arrayLength(&sb.arr);
var b : u32 = arrayLength(&sb.arr);
@@ -94,7 +94,7 @@ fn tint_symbol(buffer : SB, result : ptr<function, u32>)
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var tint_symbol_1 : u32 = 0u;
tint_symbol(sb, &(tint_symbol_1));
@@ -121,7 +121,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var len : u32 = arrayLength(&sb.arr);
}
@@ -140,7 +140,7 @@ fn tint_symbol(buffer : SB, result : ptr<function, u32>)
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var tint_symbol_1 : u32 = 0u;
tint_symbol(sb, &(tint_symbol_1));
@@ -164,7 +164,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
if (true) {
var len : u32 = arrayLength(&sb.arr);
@@ -188,7 +188,7 @@ fn tint_symbol(buffer : SB, result : ptr<function, u32>)
[[group(0), binding(0)]] var<storage, read> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
if (true) {
var tint_symbol_1 : u32 = 0u;
@@ -229,7 +229,7 @@ struct SB2 {
[[group(0), binding(1)]] var<storage, read> sb2 : SB2;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var len1 : u32 = arrayLength(&(sb1.arr1));
var len2 : u32 = arrayLength(&(sb2.arr2));
@@ -260,7 +260,7 @@ fn tint_symbol_3(buffer : SB2, result : ptr<function, u32>)
[[group(0), binding(1)]] var<storage, read> sb2 : SB2;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var tint_symbol_1 : u32 = 0u;
tint_symbol(sb1, &(tint_symbol_1));

View File

@@ -1095,7 +1095,7 @@ fn vert_main1() -> [[builtin(position)]] vec4<f32> {
return vec4<f32>();
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main1() {
}
)";
@@ -1133,7 +1133,7 @@ fn vert_main1() -> tint_symbol_3 {
return tint_symbol_3(vec4<f32>());
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main1() {
}
)";

View File

@@ -52,7 +52,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var a : i32 = sb.a;
var b : u32 = sb.b;
@@ -184,7 +184,7 @@ fn tint_symbol_21([[internal(disable_validation__ignore_atomic_function_paramete
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var a : i32 = tint_symbol(sb, 0u);
var b : u32 = tint_symbol_1(sb, 4u);
@@ -246,7 +246,7 @@ struct UB {
[[group(0), binding(0)]] var<uniform> ub : UB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var a : i32 = ub.a;
var b : u32 = ub.b;
@@ -378,7 +378,7 @@ fn tint_symbol_21([[internal(disable_validation__ignore_atomic_function_paramete
[[group(0), binding(0)]] var<uniform> ub : UB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var a : i32 = tint_symbol(ub, 0u);
var b : u32 = tint_symbol_1(ub, 4u);
@@ -440,7 +440,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
sb.a = i32();
sb.b = u32();
@@ -591,7 +591,7 @@ fn tint_symbol_21([[internal(disable_validation__ignore_atomic_function_paramete
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
tint_symbol(sb, 0u, i32());
tint_symbol_1(sb, 4u, u32());
@@ -653,7 +653,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var x : SB = sb;
}
@@ -768,7 +768,7 @@ fn tint_symbol_22([[internal(disable_validation__ignore_atomic_function_paramete
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var x : SB = tint_symbol_22(sb, 0u);
}
@@ -809,7 +809,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
sb = SB();
}
@@ -964,7 +964,7 @@ fn tint_symbol_22([[internal(disable_validation__ignore_atomic_function_paramete
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
tint_symbol_22(sb, 0u, SB());
}
@@ -998,7 +998,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var x : f32 = sb.b[4].b[1].b.z;
}
@@ -1036,7 +1036,7 @@ fn tint_symbol([[internal(disable_validation__ignore_atomic_function_parameter)]
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var x : f32 = tint_symbol(sb, 1224u);
}
@@ -1070,7 +1070,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var i : i32 = 4;
var j : u32 = 1u;
@@ -1104,7 +1104,7 @@ fn tint_symbol([[internal(disable_validation__ignore_atomic_function_parameter)]
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var i : i32 = 4;
var j : u32 = 1u;
@@ -1149,7 +1149,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var i : i32 = 4;
var j : u32 = 1u;
@@ -1191,7 +1191,7 @@ fn tint_symbol([[internal(disable_validation__ignore_atomic_function_parameter)]
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var i : i32 = 4;
var j : u32 = 1u;
@@ -1216,7 +1216,7 @@ struct SB {
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
atomicStore(&sb.a, 123);
ignore(atomicLoad(&sb.a));
@@ -1312,7 +1312,7 @@ fn tint_symbol_19([[internal(disable_validation__ignore_atomic_function_paramete
[[group(0), binding(0)]] var<storage, read_write> sb : SB;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
tint_symbol(sb, 16u, 123);
ignore(tint_symbol_1(sb, 16u));
@@ -1352,7 +1352,7 @@ struct S {
var<workgroup> w : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
atomicStore(&(w.a), 123);
ignore(atomicLoad(&(w.a)));

View File

@@ -83,7 +83,8 @@ void Hlsl::AddEmptyEntryPoint(CloneContext& ctx) const {
}
ctx.dst->Func(ctx.dst->Symbols().New("unused_entry_point"), {},
ctx.dst->ty.void_(), {},
{ctx.dst->Stage(ast::PipelineStage::kCompute)});
{ctx.dst->Stage(ast::PipelineStage::kCompute),
ctx.dst->WorkgroupSize(1)});
}
} // namespace transform

View File

@@ -26,7 +26,7 @@ TEST_F(HlslTest, AddEmptyEntryPoint) {
auto* src = R"()";
auto* expect = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn unused_entry_point() {
}
)";

View File

@@ -128,7 +128,7 @@ void Msl::HandleModuleScopeVariables(CloneContext& ctx) const {
// v = v + 1.0;
// }
//
// [[stage(compute)]]
// [[stage(compute), workgroup_size(1)]]
// fn main() {
// foo();
// }
@@ -140,7 +140,7 @@ void Msl::HandleModuleScopeVariables(CloneContext& ctx) const {
// *v = *v + 1.0;
// }
//
// [[stage(compute)]]
// [[stage(compute), workgroup_size(1)]]
// fn main() {
// var<private> v : f32 = 2.0;
// foo(&v);

View File

@@ -27,14 +27,14 @@ TEST_F(MslTest, HandleModuleScopeVariables_Basic) {
var<private> p : f32;
var<workgroup> w : f32;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
w = p;
}
)";
auto* expect = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main([[builtin(local_invocation_index)]] local_invocation_index : u32) {
[[internal(disable_validation__ignore_storage_class)]] var<workgroup> tint_symbol_1 : f32;
[[internal(disable_validation__ignore_storage_class)]] var<private> tint_symbol_2 : f32;
@@ -70,7 +70,7 @@ fn foo(a : f32) {
no_uses();
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
foo(1.0);
}
@@ -91,7 +91,7 @@ fn foo(a : f32, tint_symbol_3 : ptr<private, f32>, tint_symbol_4 : ptr<workgroup
no_uses();
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main([[builtin(local_invocation_index)]] local_invocation_index : u32) {
[[internal(disable_validation__ignore_storage_class)]] var<workgroup> tint_symbol_5 : f32;
[[internal(disable_validation__ignore_storage_class)]] var<private> tint_symbol_6 : f32;
@@ -113,14 +113,14 @@ TEST_F(MslTest, HandleModuleScopeVariables_Constructors) {
var<private> a : f32 = 1.0;
var<private> b : f32 = f32();
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
let x : f32 = a + b;
}
)";
auto* expect = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
[[internal(disable_validation__ignore_storage_class)]] var<private> tint_symbol : f32 = 1.0;
[[internal(disable_validation__ignore_storage_class)]] var<private> tint_symbol_1 : f32 = f32();
@@ -138,7 +138,7 @@ TEST_F(MslTest, HandleModuleScopeVariables_Pointers) {
var<private> p : f32;
var<workgroup> w : f32;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
let p_ptr : ptr<private, f32> = &p;
let w_ptr : ptr<workgroup, f32> = &w;
@@ -148,7 +148,7 @@ fn main() {
)";
auto* expect = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main([[builtin(local_invocation_index)]] local_invocation_index : u32) {
[[internal(disable_validation__ignore_storage_class)]] var<workgroup> tint_symbol_1 : f32;
[[internal(disable_validation__ignore_storage_class)]] var<private> tint_symbol_2 : f32;
@@ -171,13 +171,13 @@ TEST_F(MslTest, HandleModuleScopeVariables_UnusedVariables) {
var<private> p : f32;
var<workgroup> w : f32;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
}
)";
auto* expect = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
}
)";
@@ -196,7 +196,7 @@ struct S {
[[group(0), binding(0)]]
var<uniform> u : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
}
)";
@@ -208,7 +208,7 @@ struct S {
[[group(0), binding(0)]] var<uniform> u : S;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
}
)";
@@ -223,7 +223,7 @@ TEST_F(MslTest, HandleModuleScopeVariables_HandleTypes_Basic) {
[[group(0), binding(0)]] var t : texture_2d<f32>;
[[group(0), binding(1)]] var s : sampler;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
ignore(t);
ignore(s);
@@ -231,7 +231,7 @@ fn main() {
)";
auto* expect = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main([[group(0), binding(0), internal(disable_validation__entry_point_parameter)]] tint_symbol : texture_2d<f32>, [[group(0), binding(1), internal(disable_validation__entry_point_parameter)]] tint_symbol_1 : sampler) {
ignore(tint_symbol);
ignore(tint_symbol_1);
@@ -263,7 +263,7 @@ fn foo(a : f32) {
no_uses();
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
foo(1.0);
}
@@ -285,7 +285,7 @@ fn foo(a : f32, tint_symbol_2 : texture_2d<f32>, tint_symbol_3 : sampler) {
no_uses();
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main([[group(0), binding(0), internal(disable_validation__entry_point_parameter)]] tint_symbol_4 : texture_2d<f32>, [[group(0), binding(1), internal(disable_validation__entry_point_parameter)]] tint_symbol_5 : sampler) {
foo(1.0, tint_symbol_4, tint_symbol_5);
}

View File

@@ -24,7 +24,7 @@ using PromoteInitializersToConstVarTest = TransformTest;
TEST_F(PromoteInitializersToConstVarTest, BasicArray) {
auto* src = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var f0 : f32 = 1.0;
var f1 : f32 = 2.0;
@@ -35,7 +35,7 @@ fn main() {
)";
auto* expect = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var f0 : f32 = 1.0;
var f1 : f32 = 2.0;
@@ -59,7 +59,7 @@ struct S {
c : vec3<f32>;
};
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var x : f32 = S(1, 2.0, vec3<f32>()).b;
}
@@ -72,7 +72,7 @@ struct S {
c : vec3<f32>;
};
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
let tint_symbol : S = S(1, 2.0, vec3<f32>());
var x : f32 = tint_symbol.b;
@@ -86,14 +86,14 @@ fn main() {
TEST_F(PromoteInitializersToConstVarTest, ArrayInArrayArray) {
auto* src = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var i : f32 = array<array<f32, 2>, 2>(array<f32, 2>(1.0, 2.0), array<f32, 2>(3.0, 4.0))[0][1];
}
)";
auto* expect = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
let tint_symbol : array<f32, 2> = array<f32, 2>(1.0, 2.0);
let tint_symbol_1 : array<f32, 2> = array<f32, 2>(3.0, 4.0);
@@ -123,7 +123,7 @@ struct S3 {
a : S2;
};
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var x : i32 = S3(S2(1, S1(2), 3)).a.b.a;
}
@@ -144,7 +144,7 @@ struct S3 {
a : S2;
};
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
let tint_symbol : S1 = S1(2);
let tint_symbol_1 : S2 = S2(1, tint_symbol, 3);
@@ -168,7 +168,7 @@ struct S2 {
a : array<S1, 3>;
};
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var x : i32 = S2(array<S1, 3>(S1(1), S1(2), S1(3))).a[1].a;
}
@@ -183,7 +183,7 @@ struct S2 {
a : array<S1, 3>;
};
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
let tint_symbol : S1 = S1(1);
let tint_symbol_1 : S1 = S1(2);
@@ -207,7 +207,7 @@ struct S {
c : i32;
};
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
var local_arr : array<f32, 4> = array<f32, 4>(0.0, 1.0, 2.0, 3.0);
var local_str : S = S(1, 2.0, 3);

View File

@@ -86,7 +86,7 @@ fn main() {}
TEST_F(SingleEntryPointTest, SingleEntryPoint) {
auto* src = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn main() {
}
)";
@@ -111,17 +111,17 @@ fn vert_main() -> [[builtin(position)]] vec4<f32> {
fn frag_main() {
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main1() {
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main2() {
}
)";
auto* expect = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main1() {
}
)";
@@ -156,12 +156,12 @@ fn frag_main() {
b = 0.0;
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main1() {
c = 0.0;
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main2() {
d = 0.0;
}
@@ -170,7 +170,7 @@ fn comp_main2() {
auto* expect = R"(
var<private> c : f32;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main1() {
c = 0.0;
}
@@ -206,12 +206,12 @@ fn frag_main() {
let local_b : f32 = b;
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main1() {
let local_c : f32 = c;
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main2() {
let local_d : f32 = d;
}
@@ -226,7 +226,7 @@ let c : f32 = 1.0;
let d : f32 = 1.0;
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main1() {
let local_c : f32 = c;
}
@@ -262,12 +262,12 @@ fn outer2() {
inner_shared();
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main1() {
outer1();
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main2() {
outer2();
}
@@ -285,7 +285,7 @@ fn outer1() {
inner_shared();
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main1() {
outer1();
}
@@ -336,12 +336,12 @@ fn outer2() {
outer2_var = 0.0;
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main1() {
outer1();
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main2() {
outer2();
}
@@ -368,7 +368,7 @@ fn outer1() {
outer1_var = 0.0;
}
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn comp_main1() {
outer1();
}

View File

@@ -300,7 +300,8 @@ void Spirv::AddEmptyEntryPoint(CloneContext& ctx) const {
}
}
ctx.dst->Func(ctx.dst->Sym("unused_entry_point"), {}, ctx.dst->ty.void_(), {},
{ctx.dst->Stage(ast::PipelineStage::kCompute)});
{ctx.dst->Stage(ast::PipelineStage::kCompute),
ctx.dst->WorkgroupSize(1)});
}
Symbol Spirv::HoistToInputVariables(

View File

@@ -30,7 +30,7 @@ fn frag_main([[builtin(position)]] coord : vec4<f32>,
var col : f32 = (coord.x * loc1);
}
[[stage(compute)]]
[[stage(compute), workgroup_size(8, 1, 1)]]
fn compute_main([[builtin(local_invocation_id)]] local_id : vec3<u32>,
[[builtin(local_invocation_index)]] local_index : u32) {
var id_x : u32 = local_id.x;
@@ -51,7 +51,7 @@ fn frag_main() {
[[builtin(local_invocation_index), internal(disable_validation__ignore_storage_class)]] var<in> tint_symbol_3 : u32;
[[stage(compute)]]
[[stage(compute), workgroup_size(8, 1, 1)]]
fn compute_main() {
var id_x : u32 = tint_symbol_2.x;
}
@@ -891,7 +891,7 @@ fn main3() {
TEST_F(SpirvTest, EmitVertexPointSize_NoVertexShaders) {
auto* src = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(8, 1, 1)]]
fn main() {
}
)";
@@ -907,7 +907,7 @@ TEST_F(SpirvTest, AddEmptyEntryPoint) {
auto* src = R"()";
auto* expect = R"(
[[stage(compute)]]
[[stage(compute), workgroup_size(1)]]
fn unused_entry_point() {
}
)";