[hlsl] Remove workgroup tests from decompose storage access. These tests were originally planned to be negative tests that the transform didn't modify the workgroup variable. This will be tested by the builtin tests emitting the correct value so these aren't necessary. Bug: 42251045 Change-Id: Iafb6849f8cf4e37b0f3c07d30e67383ad2c85530 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/198394 Reviewed-by: James Price <jrprice@google.com> Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/hlsl/writer/raise/decompose_storage_access_test.cc b/src/tint/lang/hlsl/writer/raise/decompose_storage_access_test.cc index 1ab0097..0caf809 100644 --- a/src/tint/lang/hlsl/writer/raise/decompose_storage_access_test.cc +++ b/src/tint/lang/hlsl/writer/raise/decompose_storage_access_test.cc
@@ -1829,531 +1829,6 @@ EXPECT_EQ(expect, str()); } -TEST_F(HlslWriterDecomposeStorageAccessTest, DISABLED_WorkgroupAtomicStore) { - auto* sb = ty.Struct(mod.symbols.New("SB"), { - {mod.symbols.New("padding"), ty.vec4<f32>()}, - {mod.symbols.New("a"), ty.atomic<i32>()}, - {mod.symbols.New("b"), ty.atomic<u32>()}, - }); - - auto* var = b.Var("v", workgroup, sb, core::Access::kReadWrite); - var->SetBindingPoint(0, 0); - b.ir.root_block->Append(var); - - auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); - b.Append(func->Block(), [&] { - b.Call(ty.void_(), core::BuiltinFn::kAtomicStore, - b.Access(ty.ptr<workgroup, atomic<i32>, read_write>(), var, 1_u), 123_i); - b.Return(func); - }); - - auto* src = R"( -SB = struct @align(16) { - padding:vec4<f32> @offset(0) - a:atomic<i32> @offset(16) - b:atomic<u32> @offset(20) -} - -$B1: { # root - %v:ptr<workgroup, SB, read_write> = var @binding_point(0, 0) -} - -%foo = @fragment func():void { - $B2: { - %3:ptr<workgroup, atomic<i32>, read_write> = access %v, 1u - %4:void = atomicStore %3, 123i - ret - } -} -)"; - EXPECT_EQ(src, str()); - - auto* expect = R"( -)"; - Run(DecomposeStorageAccess); - - EXPECT_EQ(expect, str()); -} - -TEST_F(HlslWriterDecomposeStorageAccessTest, DISABLED_WorkgroupAtomicLoad) { - auto* sb = ty.Struct(mod.symbols.New("SB"), { - {mod.symbols.New("padding"), ty.vec4<f32>()}, - {mod.symbols.New("a"), ty.atomic<i32>()}, - {mod.symbols.New("b"), ty.atomic<u32>()}, - }); - - auto* var = b.Var("v", workgroup, sb, core::Access::kReadWrite); - var->SetBindingPoint(0, 0); - b.ir.root_block->Append(var); - - auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); - b.Append(func->Block(), [&] { - b.Let("x", b.Call(ty.i32(), core::BuiltinFn::kAtomicLoad, - b.Access(ty.ptr<workgroup, atomic<i32>, read_write>(), var, 1_u))); - b.Return(func); - }); - - auto* src = R"( -SB = struct @align(16) { - padding:vec4<f32> @offset(0) - a:atomic<i32> @offset(16) - b:atomic<u32> @offset(20) -} - -$B1: { # root - %v:ptr<workgroup, SB, read_write> = var @binding_point(0, 0) -} - -%foo = @fragment func():void { - $B2: { - %3:ptr<workgroup, atomic<i32>, read_write> = access %v, 1u - %4:i32 = atomicLoad %3 - %x:i32 = let %4 - ret - } -} -)"; - EXPECT_EQ(src, str()); - - auto* expect = R"( -)"; - Run(DecomposeStorageAccess); - - EXPECT_EQ(expect, str()); -} - -TEST_F(HlslWriterDecomposeStorageAccessTest, DISABLED_WorkgroupAtomicAdd) { - auto* sb = ty.Struct(mod.symbols.New("SB"), { - {mod.symbols.New("padding"), ty.vec4<f32>()}, - {mod.symbols.New("a"), ty.atomic<i32>()}, - {mod.symbols.New("b"), ty.atomic<u32>()}, - }); - - auto* var = b.Var("v", workgroup, sb, core::Access::kReadWrite); - var->SetBindingPoint(0, 0); - b.ir.root_block->Append(var); - - auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); - b.Append(func->Block(), [&] { - b.Let("x", b.Call(ty.i32(), core::BuiltinFn::kAtomicAdd, - b.Access(ty.ptr<workgroup, atomic<i32>, read_write>(), var, 1_u), 123_i)); - b.Return(func); - }); - - auto* src = R"( -SB = struct @align(16) { - padding:vec4<f32> @offset(0) - a:atomic<i32> @offset(16) - b:atomic<u32> @offset(20) -} - -$B1: { # root - %v:ptr<workgroup, SB, read_write> = var @binding_point(0, 0) -} - -%foo = @fragment func():void { - $B2: { - %3:ptr<workgroup, atomic<i32>, read_write> = access %v, 1u - %4:i32 = atomicAdd %3, 123i - %x:i32 = let %4 - ret - } -} -)"; - EXPECT_EQ(src, str()); - - auto* expect = R"( -)"; - Run(DecomposeStorageAccess); - - EXPECT_EQ(expect, str()); -} - -TEST_F(HlslWriterDecomposeStorageAccessTest, DISABLED_WorkgroupAtomicSub) { - auto* sb = ty.Struct(mod.symbols.New("SB"), { - {mod.symbols.New("padding"), ty.vec4<f32>()}, - {mod.symbols.New("a"), ty.atomic<i32>()}, - {mod.symbols.New("b"), ty.atomic<u32>()}, - }); - - auto* var = b.Var("v", workgroup, sb, core::Access::kReadWrite); - var->SetBindingPoint(0, 0); - b.ir.root_block->Append(var); - - auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); - b.Append(func->Block(), [&] { - b.Let("x", b.Call(ty.i32(), core::BuiltinFn::kAtomicSub, - b.Access(ty.ptr<workgroup, atomic<i32>, read_write>(), var, 1_u), 123_i)); - b.Return(func); - }); - - auto* src = R"( -SB = struct @align(16) { - padding:vec4<f32> @offset(0) - a:atomic<i32> @offset(16) - b:atomic<u32> @offset(20) -} - -$B1: { # root - %v:ptr<workgroup, SB, read_write> = var @binding_point(0, 0) -} - -%foo = @fragment func():void { - $B2: { - %3:ptr<workgroup, atomic<i32>, read_write> = access %v, 1u - %4:i32 = atomicSub %3, 123i - %x:i32 = let %4 - ret - } -} -)"; - EXPECT_EQ(src, str()); - - auto* expect = R"( -)"; - Run(DecomposeStorageAccess); - - EXPECT_EQ(expect, str()); -} - -TEST_F(HlslWriterDecomposeStorageAccessTest, DISABLED_WorkgroupAtomicMax) { - auto* sb = ty.Struct(mod.symbols.New("SB"), { - {mod.symbols.New("padding"), ty.vec4<f32>()}, - {mod.symbols.New("a"), ty.atomic<i32>()}, - {mod.symbols.New("b"), ty.atomic<u32>()}, - }); - - auto* var = b.Var("v", workgroup, sb, core::Access::kReadWrite); - var->SetBindingPoint(0, 0); - b.ir.root_block->Append(var); - - auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); - b.Append(func->Block(), [&] { - b.Let("x", b.Call(ty.i32(), core::BuiltinFn::kAtomicMax, - b.Access(ty.ptr<workgroup, atomic<i32>, read_write>(), var, 1_u), 123_i)); - b.Return(func); - }); - - auto* src = R"( -SB = struct @align(16) { - padding:vec4<f32> @offset(0) - a:atomic<i32> @offset(16) - b:atomic<u32> @offset(20) -} - -$B1: { # root - %v:ptr<workgroup, SB, read_write> = var @binding_point(0, 0) -} - -%foo = @fragment func():void { - $B2: { - %3:ptr<workgroup, atomic<i32>, read_write> = access %v, 1u - %4:i32 = atomicMax %3, 123i - %x:i32 = let %4 - ret - } -} -)"; - EXPECT_EQ(src, str()); - - auto* expect = R"( -)"; - Run(DecomposeStorageAccess); - - EXPECT_EQ(expect, str()); -} - -TEST_F(HlslWriterDecomposeStorageAccessTest, DISABLED_WorkgroupAtomicMin) { - auto* sb = ty.Struct(mod.symbols.New("SB"), { - {mod.symbols.New("padding"), ty.vec4<f32>()}, - {mod.symbols.New("a"), ty.atomic<i32>()}, - {mod.symbols.New("b"), ty.atomic<u32>()}, - }); - - auto* var = b.Var("v", workgroup, sb, core::Access::kReadWrite); - var->SetBindingPoint(0, 0); - b.ir.root_block->Append(var); - - auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); - b.Append(func->Block(), [&] { - b.Let("x", b.Call(ty.i32(), core::BuiltinFn::kAtomicMin, - b.Access(ty.ptr<workgroup, atomic<i32>, read_write>(), var, 1_u), 123_i)); - b.Return(func); - }); - - auto* src = R"( -SB = struct @align(16) { - padding:vec4<f32> @offset(0) - a:atomic<i32> @offset(16) - b:atomic<u32> @offset(20) -} - -$B1: { # root - %v:ptr<workgroup, SB, read_write> = var @binding_point(0, 0) -} - -%foo = @fragment func():void { - $B2: { - %3:ptr<workgroup, atomic<i32>, read_write> = access %v, 1u - %4:i32 = atomicMin %3, 123i - %x:i32 = let %4 - ret - } -} -)"; - EXPECT_EQ(src, str()); - - auto* expect = R"( -)"; - Run(DecomposeStorageAccess); - - EXPECT_EQ(expect, str()); -} - -TEST_F(HlslWriterDecomposeStorageAccessTest, DISABLED_WorkgroupAtomicAnd) { - auto* sb = ty.Struct(mod.symbols.New("SB"), { - {mod.symbols.New("padding"), ty.vec4<f32>()}, - {mod.symbols.New("a"), ty.atomic<i32>()}, - {mod.symbols.New("b"), ty.atomic<u32>()}, - }); - - auto* var = b.Var("v", workgroup, sb, core::Access::kReadWrite); - var->SetBindingPoint(0, 0); - b.ir.root_block->Append(var); - - auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); - b.Append(func->Block(), [&] { - b.Let("x", b.Call(ty.i32(), core::BuiltinFn::kAtomicAnd, - b.Access(ty.ptr<workgroup, atomic<i32>, read_write>(), var, 1_u), 123_i)); - b.Return(func); - }); - - auto* src = R"( -SB = struct @align(16) { - padding:vec4<f32> @offset(0) - a:atomic<i32> @offset(16) - b:atomic<u32> @offset(20) -} - -$B1: { # root - %v:ptr<workgroup, SB, read_write> = var @binding_point(0, 0) -} - -%foo = @fragment func():void { - $B2: { - %3:ptr<workgroup, atomic<i32>, read_write> = access %v, 1u - %4:i32 = atomicAnd %3, 123i - %x:i32 = let %4 - ret - } -} -)"; - EXPECT_EQ(src, str()); - - auto* expect = R"( -)"; - Run(DecomposeStorageAccess); - - EXPECT_EQ(expect, str()); -} - -TEST_F(HlslWriterDecomposeStorageAccessTest, DISABLED_WorkgroupAtomicOr) { - auto* sb = ty.Struct(mod.symbols.New("SB"), { - {mod.symbols.New("padding"), ty.vec4<f32>()}, - {mod.symbols.New("a"), ty.atomic<i32>()}, - {mod.symbols.New("b"), ty.atomic<u32>()}, - }); - - auto* var = b.Var("v", workgroup, sb, core::Access::kReadWrite); - var->SetBindingPoint(0, 0); - b.ir.root_block->Append(var); - - auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); - b.Append(func->Block(), [&] { - b.Let("x", b.Call(ty.i32(), core::BuiltinFn::kAtomicOr, - b.Access(ty.ptr<workgroup, atomic<i32>, read_write>(), var, 1_u), 123_i)); - b.Return(func); - }); - - auto* src = R"( -SB = struct @align(16) { - padding:vec4<f32> @offset(0) - a:atomic<i32> @offset(16) - b:atomic<u32> @offset(20) -} - -$B1: { # root - %v:ptr<workgroup, SB, read_write> = var @binding_point(0, 0) -} - -%foo = @fragment func():void { - $B2: { - %3:ptr<workgroup, atomic<i32>, read_write> = access %v, 1u - %4:i32 = atomicOr %3, 123i - %x:i32 = let %4 - ret - } -} -)"; - EXPECT_EQ(src, str()); - - auto* expect = R"( -)"; - Run(DecomposeStorageAccess); - - EXPECT_EQ(expect, str()); -} - -TEST_F(HlslWriterDecomposeStorageAccessTest, DISABLED_WorkgroupAtomicXor) { - auto* sb = ty.Struct(mod.symbols.New("SB"), { - {mod.symbols.New("padding"), ty.vec4<f32>()}, - {mod.symbols.New("a"), ty.atomic<i32>()}, - {mod.symbols.New("b"), ty.atomic<u32>()}, - }); - - auto* var = b.Var("v", workgroup, sb, core::Access::kReadWrite); - var->SetBindingPoint(0, 0); - b.ir.root_block->Append(var); - - auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); - b.Append(func->Block(), [&] { - b.Let("x", b.Call(ty.i32(), core::BuiltinFn::kAtomicXor, - b.Access(ty.ptr<workgroup, atomic<i32>, read_write>(), var, 2_u), 123_i)); - b.Return(func); - }); - - auto* src = R"( -SB = struct @align(16) { - padding:vec4<f32> @offset(0) - a:atomic<i32> @offset(16) - b:atomic<u32> @offset(20) -} - -$B1: { # root - %v:ptr<workgroup, SB, read_write> = var @binding_point(0, 0) -} - -%foo = @fragment func():void { - $B2: { - %3:ptr<workgroup, atomic<i32>, read_write> = access %v, 2u - %4:i32 = atomicXor %3, 123i - %x:i32 = let %4 - ret - } -} -)"; - EXPECT_EQ(src, str()); - - auto* expect = R"( -)"; - Run(DecomposeStorageAccess); - - EXPECT_EQ(expect, str()); -} - -TEST_F(HlslWriterDecomposeStorageAccessTest, DISABLED_WorkgroupAtomicExchange) { - auto* sb = ty.Struct(mod.symbols.New("SB"), { - {mod.symbols.New("padding"), ty.vec4<f32>()}, - {mod.symbols.New("a"), ty.atomic<i32>()}, - {mod.symbols.New("b"), ty.atomic<u32>()}, - }); - - auto* var = b.Var("v", workgroup, sb, core::Access::kReadWrite); - var->SetBindingPoint(0, 0); - b.ir.root_block->Append(var); - - auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); - b.Append(func->Block(), [&] { - b.Let("x", b.Call(ty.i32(), core::BuiltinFn::kAtomicExchange, - b.Access(ty.ptr<workgroup, atomic<i32>, read_write>(), var, 2_u), 123_i)); - b.Return(func); - }); - - auto* src = R"( -SB = struct @align(16) { - padding:vec4<f32> @offset(0) - a:atomic<i32> @offset(16) - b:atomic<u32> @offset(20) -} - -$B1: { # root - %v:ptr<workgroup, SB, read_write> = var @binding_point(0, 0) -} - -%foo = @fragment func():void { - $B2: { - %3:ptr<workgroup, atomic<i32>, read_write> = access %v, 2u - %4:i32 = atomicExchange %3, 123i - %x:i32 = let %4 - ret - } -} -)"; - EXPECT_EQ(src, str()); - - auto* expect = R"( -)"; - Run(DecomposeStorageAccess); - - EXPECT_EQ(expect, str()); -} - -TEST_F(HlslWriterDecomposeStorageAccessTest, DISABLED_WorkgroupAtomicCompareExchangeWeak) { - auto* sb = ty.Struct(mod.symbols.New("SB"), { - {mod.symbols.New("padding"), ty.vec4<f32>()}, - {mod.symbols.New("a"), ty.atomic<i32>()}, - {mod.symbols.New("b"), ty.atomic<u32>()}, - }); - - auto* out = ty.Struct( - mod.symbols.New("__atomic_compare_exchange_result"), - {{mod.symbols.New("old_value"), ty.i32()}, {mod.symbols.New("exchanged"), ty.bool_()}}); - - auto* var = b.Var("v", workgroup, sb, core::Access::kReadWrite); - var->SetBindingPoint(0, 0); - b.ir.root_block->Append(var); - - auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment); - b.Append(func->Block(), [&] { - b.Let("x", b.Call(out, core::BuiltinFn::kAtomicCompareExchangeWeak, - b.Access(ty.ptr<workgroup, atomic<i32>, read_write>(), var, 1_u), 123_i, - 345_i)); - b.Return(func); - }); - - auto* src = R"( -SB = struct @align(16) { - padding:vec4<f32> @offset(0) - a:atomic<i32> @offset(16) - b:atomic<u32> @offset(20) -} -__atomic_compare_exchange_result = struct @align(4) { - old_value:i32 @offset(0) - exchanged:bool @offset(4) -} - -$B1: { # root - %v:ptr<workgroup, SB, read_write> = var @binding_point(0, 0) -} - -%foo = @fragment func():void { - $B2: { - %3:ptr<workgroup, atomic<i32>, read_write> = access %v, 1u - %4:__atomic_compare_exchange_result = atomicCompareExchangeWeak %3, 123i, 345i - %x:__atomic_compare_exchange_result = let %4 - ret - } -} -)"; - EXPECT_EQ(src, str()); - - auto* expect = R"( -)"; - Run(DecomposeStorageAccess); - - EXPECT_EQ(expect, str()); -} - TEST_F(HlslWriterDecomposeStorageAccessTest, StoreVecF32) { auto* var = b.Var<storage, vec4<f32>, core::Access::kReadWrite>("v"); var->SetBindingPoint(0, 0);