Fix HLSL emission of cbuffers Despite the documentation claiming otherwise, the DXC doesn't allow these to be anonymous. Change-Id: I853d11970890106b8fd4d6b8bb321940f0658bd3 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/35281 Commit-Queue: Ben Clayton <bclayton@google.com> Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc index 03d86ce..b480acf 100644 --- a/src/writer/hlsl/generator_impl.cc +++ b/src/writer/hlsl/generator_impl.cc
@@ -1334,7 +1334,9 @@ // is not a block. // Relevant: https://github.com/gpuweb/gpuweb/issues/1004 // https://github.com/gpuweb/gpuweb/issues/1008 - out << "cbuffer : register(b" << binding->value() << ") {" << std::endl; + auto name = "cbuffer_" + var->name(); + out << "cbuffer " << name << " : register(b" << binding->value() << ") {" + << std::endl; increment_indent(); make_indent(out);
diff --git a/src/writer/hlsl/generator_impl_function_test.cc b/src/writer/hlsl/generator_impl_function_test.cc index cc35e8a..a20f2f4 100644 --- a/src/writer/hlsl/generator_impl_function_test.cc +++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -268,7 +268,7 @@ ASSERT_TRUE(td.Determine()) << td.error(); ASSERT_TRUE(gen.Generate(out)) << gen.error(); - EXPECT_EQ(result(), R"(cbuffer : register(b0) { + EXPECT_EQ(result(), R"(cbuffer cbuffer_coord : register(b0) { float4 coord; }; @@ -819,7 +819,7 @@ ASSERT_TRUE(td.Determine()) << td.error(); ASSERT_TRUE(gen.Generate(out)) << gen.error(); - EXPECT_EQ(result(), R"(cbuffer : register(b0) { + EXPECT_EQ(result(), R"(cbuffer cbuffer_coord : register(b0) { float4 coord; };