writer/hlsl: Emit `static` for private global variables
Fixed: tint:812
Change-Id: I822eb6b13f07a74eb47c4c8e18d1f75dcc4818bf
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/51366
Commit-Queue: Ben Clayton <bclayton@chromium.org>
Reviewed-by: James Price <jrprice@google.com>
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index b516533..9d58070 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -1893,9 +1893,11 @@
}
switch (var->StorageClass()) {
- case ast::StorageClass::kPrivate:
case ast::StorageClass::kUniformConstant:
break;
+ case ast::StorageClass::kPrivate:
+ out << "static ";
+ break;
case ast::StorageClass::kWorkgroup:
out << "groupshared ";
break;
diff --git a/src/writer/hlsl/generator_impl_member_accessor_test.cc b/src/writer/hlsl/generator_impl_member_accessor_test.cc
index 423a046..431912d 100644
--- a/src/writer/hlsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_member_accessor_test.cc
@@ -137,7 +137,7 @@
float mem;
};
-Data str;
+static Data str;
[numthreads(1, 1, 1)]
void test_function() {
diff --git a/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc b/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
index 2b6d390..a1345bd 100644
--- a/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
@@ -75,7 +75,7 @@
gen.increment_indent();
ASSERT_TRUE(gen.Generate(out)) << gen.error();
- EXPECT_THAT(result(), HasSubstr(" float a;\n"));
+ EXPECT_THAT(result(), HasSubstr(" static float a;\n"));
}
TEST_F(HlslGeneratorImplTest_VariableDecl,
diff --git a/test/bug/tint/749.spvasm.expected.hlsl b/test/bug/tint/749.spvasm.expected.hlsl
index 1b2d3db..76a11e3 100644
--- a/test/bug/tint/749.spvasm.expected.hlsl
+++ b/test/bug/tint/749.spvasm.expected.hlsl
@@ -1 +1 @@
-SKIP: TINT_UNIMPLEMENTED crbug.com/tint/726: module-scope private and workgroup variables not yet implemented
+SKIP: crbug.com/tint/818: [HLSL] Loop emission broken for `let` function declarations
diff --git a/test/ptr_ref/load/global/i32.spvasm.expected.hlsl b/test/ptr_ref/load/global/i32.spvasm.expected.hlsl
index 86cdfa8..fb22f46 100644
--- a/test/ptr_ref/load/global/i32.spvasm.expected.hlsl
+++ b/test/ptr_ref/load/global/i32.spvasm.expected.hlsl
@@ -1,4 +1,4 @@
-int I = 0;
+static int I = 0;
[numthreads(1, 1, 1)]
void main() {
diff --git a/test/ptr_ref/load/global/i32.wgsl.expected.hlsl b/test/ptr_ref/load/global/i32.wgsl.expected.hlsl
index 4a6e9e6..e0b038b 100644
--- a/test/ptr_ref/load/global/i32.wgsl.expected.hlsl
+++ b/test/ptr_ref/load/global/i32.wgsl.expected.hlsl
@@ -1,4 +1,4 @@
-int I;
+static int I;
[numthreads(1, 1, 1)]
void main() {
diff --git a/test/ptr_ref/load/global/struct_field.spvasm.expected.hlsl b/test/ptr_ref/load/global/struct_field.spvasm.expected.hlsl
index 16f9b25..ff544b6 100644
--- a/test/ptr_ref/load/global/struct_field.spvasm.expected.hlsl
+++ b/test/ptr_ref/load/global/struct_field.spvasm.expected.hlsl
@@ -1 +1,14 @@
-SKIP: error: pointers not supported in HLSL
+struct S {
+ int i;
+};
+
+static S V;
+
+[numthreads(1, 1, 1)]
+void main() {
+ int i = 0;
+ const int x_15 = V.i;
+ i = x_15;
+ return;
+}
+
diff --git a/test/ptr_ref/load/global/struct_field.wgsl.expected.hlsl b/test/ptr_ref/load/global/struct_field.wgsl.expected.hlsl
index 80e03bb..18e0b41 100644
--- a/test/ptr_ref/load/global/struct_field.wgsl.expected.hlsl
+++ b/test/ptr_ref/load/global/struct_field.wgsl.expected.hlsl
@@ -2,7 +2,7 @@
int i;
};
-S V;
+static S V;
[numthreads(1, 1, 1)]
void main() {
diff --git a/test/ptr_ref/store/global/i32.spvasm.expected.hlsl b/test/ptr_ref/store/global/i32.spvasm.expected.hlsl
index 104200b..92138e7 100644
--- a/test/ptr_ref/store/global/i32.spvasm.expected.hlsl
+++ b/test/ptr_ref/store/global/i32.spvasm.expected.hlsl
@@ -1,4 +1,4 @@
-int I = 0;
+static int I = 0;
[numthreads(1, 1, 1)]
void main() {
diff --git a/test/ptr_ref/store/global/i32.wgsl.expected.hlsl b/test/ptr_ref/store/global/i32.wgsl.expected.hlsl
index 44c1654..2ae66cf 100644
--- a/test/ptr_ref/store/global/i32.wgsl.expected.hlsl
+++ b/test/ptr_ref/store/global/i32.wgsl.expected.hlsl
@@ -1,4 +1,4 @@
-int I;
+static int I;
[numthreads(1, 1, 1)]
void main() {
diff --git a/test/ptr_ref/store/global/struct_field.spvasm.expected.hlsl b/test/ptr_ref/store/global/struct_field.spvasm.expected.hlsl
index 16f9b25..0f641c8 100644
--- a/test/ptr_ref/store/global/struct_field.spvasm.expected.hlsl
+++ b/test/ptr_ref/store/global/struct_field.spvasm.expected.hlsl
@@ -1 +1,12 @@
-SKIP: error: pointers not supported in HLSL
+struct S {
+ int i;
+};
+
+static S V;
+
+[numthreads(1, 1, 1)]
+void main() {
+ V.i = 5;
+ return;
+}
+
diff --git a/test/ptr_ref/store/local/i32.wgsl.expected.hlsl b/test/ptr_ref/store/local/i32.wgsl.expected.hlsl
index 16f9b25..b3db42f 100644
--- a/test/ptr_ref/store/local/i32.wgsl.expected.hlsl
+++ b/test/ptr_ref/store/local/i32.wgsl.expected.hlsl
@@ -1 +1 @@
-SKIP: error: pointers not supported in HLSL
+SKIP: Failed to generate: error: pointers not supported in HLSL