spirv-reader: HLSL-IO: Convert input, output vars to private
Bug: tint:508
Change-Id: I5cd7c1b476112eb489f9e6acc94f7a1cf6e43b6d
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/48863
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: David Neto <dneto@google.com>
Auto-Submit: David Neto <dneto@google.com>
Reviewed-by: James Price <jrprice@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 559136d..dd0e0fa 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -1072,6 +1072,16 @@
ast_storage_class = ast::StorageClass::kStorage;
remap_buffer_block_type_.insert(type_id);
}
+
+ if (hlsl_style_pipeline_io_) {
+ // When using HLSL-style pipeline IO, intput and output variables
+ // are mapped to private variables.
+ if (ast_storage_class == ast::StorageClass::kInput ||
+ ast_storage_class == ast::StorageClass::kOutput) {
+ ast_storage_class = ast::StorageClass::kPrivate;
+ }
+ }
+
return builder_.create<sem::Pointer>(ast_elem_ty, ast_storage_class);
}
diff --git a/src/reader/spirv/parser_impl_module_var_test.cc b/src/reader/spirv/parser_impl_module_var_test.cc
index 714d8dc..9279b2b 100644
--- a/src/reader/spirv/parser_impl_module_var_test.cc
+++ b/src/reader/spirv/parser_impl_module_var_test.cc
@@ -3821,6 +3821,54 @@
EXPECT_THAT(info_1300[0].outputs, ElementsAre(15));
}
+TEST_F(SpvModuleScopeVarParserTest, InputVarsConvertedToPrivate) {
+ const auto assembly = CommonTypes() + R"(
+ %ptr_in_uint = OpTypePointer Input %uint
+ %1 = OpVariable %ptr_in_uint Input
+ )";
+ auto p = parser(test::Assemble(assembly));
+
+ // TODO(crbug.com/tint/508): Remove this when everything is converted
+ // to HLSL style pipeline IO.
+ p->SetHLSLStylePipelineIO();
+
+ ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
+ EXPECT_TRUE(p->error().empty());
+ const auto got = p->program().to_str();
+ const std::string expected =
+ R"(Variable{
+ x_1
+ private
+ __u32
+ }
+)";
+ EXPECT_THAT(got, HasSubstr(expected)) << got;
+}
+
+TEST_F(SpvModuleScopeVarParserTest, OutputVarsConvertedToPrivate) {
+ const auto assembly = CommonTypes() + R"(
+ %ptr_out_uint = OpTypePointer Output %uint
+ %1 = OpVariable %ptr_out_uint Output
+ )";
+ auto p = parser(test::Assemble(assembly));
+
+ // TODO(crbug.com/tint/508): Remove this when everything is converted
+ // to HLSL style pipeline IO.
+ p->SetHLSLStylePipelineIO();
+
+ ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
+ EXPECT_TRUE(p->error().empty());
+ const auto got = p->program().to_str();
+ const std::string expected =
+ R"(Variable{
+ x_1
+ private
+ __u32
+ }
+)";
+ EXPECT_THAT(got, HasSubstr(expected)) << got;
+}
+
// TODO(dneto): Test passing pointer to SampleMask as function parameter,
// both input case and output case.