diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc index 22dc974160..6cb34f0373 100644 --- a/src/reader/spirv/function.cc +++ b/src/reader/spirv/function.cc @@ -163,6 +163,18 @@ bool FunctionEmitter::EmitFunctionVariables() { return success(); } +std::unique_ptr FunctionEmitter::MakeExpression(uint32_t id) { + if (failed()) { + return nullptr; + } + const auto* spirv_constant = constant_mgr_->FindDeclaredConstant(id); + if (spirv_constant) { + return parser_impl_.MakeConstantExpression(id); + } + Fail() << "unhandled expression for ID " << id; + return nullptr; +} + } // namespace spirv } // namespace reader } // namespace tint diff --git a/src/reader/spirv/function.h b/src/reader/spirv/function.h index 7a4dd95bea..6a00f30d06 100644 --- a/src/reader/spirv/function.h +++ b/src/reader/spirv/function.h @@ -66,6 +66,11 @@ class FunctionEmitter { /// @returns false if emission failed. bool EmitFunctionVariables(); + /// Makes an expression + /// @param id the SPIR-V ID of the value + /// @returns true if emission has not yet failed. + std::unique_ptr MakeExpression(uint32_t id); + private: /// @returns the store type for the OpVariable instruction, or /// null on failure.