[spirv-writer] Generate load for var initializer, if needed
Change-Id: I609860bb05fae3e6e5eb21a471f869030f384ad0
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/20721
Reviewed-by: dan sinclair <dsinclair@google.com>
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 680abd3..a8eaa1d 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -416,6 +416,7 @@
push_function_var(
{Operand::Int(type_id), result, Operand::Int(ConvertStorageClass(sc))});
if (var->has_constructor()) {
+ init_id = GenerateLoadIfNeeded(var->constructor()->result_type(), init_id);
GenerateStore(var_id, init_id);
}
diff --git a/src/writer/spirv/builder_function_variable_test.cc b/src/writer/spirv/builder_function_variable_test.cc
index d4e8513..0917616 100644
--- a/src/writer/spirv/builder_function_variable_test.cc
+++ b/src/writer/spirv/builder_function_variable_test.cc
@@ -158,6 +158,15 @@
)");
}
+TEST_F(BuilderTest,
+ DISABLED_FunctionVar_WithNonConstantConstructorLoadedFromVar) {
+ // fn main() -> void {
+ // var v : f32 = 1.0;
+ // var v2 : f32 = v; // Should generate the load automatically.
+ // }
+ FAIL();
+}
+
TEST_F(BuilderTest, FunctionVar_Const) {
ast::type::F32Type f32;
ast::type::VectorType vec(&f32, 3);