mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-26 08:23:34 +00:00
Generate errors from the SPIR-V builder.
This Cl adds error messages into the SPIR-V generator. Bug: tint:5 Change-Id: I45c0d286dd8ec251773ff5e036322090647d780c Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/17521 Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
parent
248170ae44
commit
781a4acb6f
@ -399,7 +399,7 @@ if(${TINT_BUILD_SPV_WRITER})
|
|||||||
list(APPEND TINT_TEST_SRCS
|
list(APPEND TINT_TEST_SRCS
|
||||||
writer/spirv/binary_writer_test.cc
|
writer/spirv/binary_writer_test.cc
|
||||||
writer/spirv/builder_test.cc
|
writer/spirv/builder_test.cc
|
||||||
writer/spirv/builder_test_entry_point_test.cc
|
writer/spirv/builder_entry_point_test.cc
|
||||||
writer/spirv/instruction_test.cc
|
writer/spirv/instruction_test.cc
|
||||||
writer/spirv/operand_test.cc
|
writer/spirv/operand_test.cc
|
||||||
)
|
)
|
||||||
|
@ -120,11 +120,13 @@ bool Builder::GenerateEntryPoint(ast::EntryPoint* ep) {
|
|||||||
|
|
||||||
auto id = id_for_func_name(ep->function_name());
|
auto id = id_for_func_name(ep->function_name());
|
||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
|
error_ = "unable to find ID for function: " + ep->function_name();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto stage = pipeline_stage_to_execution_model(ep->stage());
|
auto stage = pipeline_stage_to_execution_model(ep->stage());
|
||||||
if (stage == SpvExecutionModelMax) {
|
if (stage == SpvExecutionModelMax) {
|
||||||
|
error_ = "Unknown pipeline stage provided";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,6 +39,9 @@ class Builder {
|
|||||||
/// @returns true if the SPIR-V was successfully built
|
/// @returns true if the SPIR-V was successfully built
|
||||||
bool Build(const ast::Module& module);
|
bool Build(const ast::Module& module);
|
||||||
|
|
||||||
|
/// @returns the error string or blank if no error was reported.
|
||||||
|
const std::string& error() const { return error_; }
|
||||||
|
|
||||||
/// @returns the number of uint32_t's needed to make up the results
|
/// @returns the number of uint32_t's needed to make up the results
|
||||||
uint32_t total_size() const;
|
uint32_t total_size() const;
|
||||||
|
|
||||||
@ -125,6 +128,7 @@ class Builder {
|
|||||||
private:
|
private:
|
||||||
Operand result_op();
|
Operand result_op();
|
||||||
|
|
||||||
|
std::string error_;
|
||||||
uint32_t next_id_ = 1;
|
uint32_t next_id_ = 1;
|
||||||
std::vector<Instruction> preamble_;
|
std::vector<Instruction> preamble_;
|
||||||
std::vector<Instruction> debug_;
|
std::vector<Instruction> debug_;
|
||||||
|
@ -66,6 +66,7 @@ TEST_F(BuilderTest, EntryPoint_BadFunction) {
|
|||||||
|
|
||||||
Builder b;
|
Builder b;
|
||||||
EXPECT_FALSE(b.GenerateEntryPoint(&ep));
|
EXPECT_FALSE(b.GenerateEntryPoint(&ep));
|
||||||
|
EXPECT_EQ(b.error(), "unable to find ID for function: frag_main");
|
||||||
}
|
}
|
||||||
|
|
||||||
struct EntryPointStageData {
|
struct EntryPointStageData {
|
@ -25,8 +25,10 @@ Generator::Generator(ast::Module module) : writer::Writer(std::move(module)) {}
|
|||||||
Generator::~Generator() = default;
|
Generator::~Generator() = default;
|
||||||
|
|
||||||
bool Generator::Generate() {
|
bool Generator::Generate() {
|
||||||
if (!builder_.Build(module_))
|
if (!builder_.Build(module_)) {
|
||||||
|
set_error(builder_.error());
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return writer_.Write(builder_);
|
return writer_.Write(builder_);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user