Cleaned up DSL error handling
This unifies various chunks of error handling code and makes the DSL
more gracefully handle failed object construction.
Change-Id: I4edc581c9eba276ce2ee2a17125ea7bd6057134a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/420237
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/tests/SkSLDSLTest.cpp b/tests/SkSLDSLTest.cpp
index 47308b0..e005284 100644
--- a/tests/SkSLDSLTest.cpp
+++ b/tests/SkSLDSLTest.cpp
@@ -1223,14 +1223,14 @@
DEF_GPUTEST_FOR_MOCK_CONTEXT(DSLCall, r, ctxInfo) {
AutoDSLContext context(ctxInfo.directContext()->priv().getGpu());
{
- DSLExpression sqrt = DSLWriter::IRGenerator().convertIdentifier(/*offset=*/-1, "sqrt");
+ DSLExpression sqrt(DSLWriter::IRGenerator().convertIdentifier(/*offset=*/-1, "sqrt"));
SkTArray<DSLWrapper<DSLExpression>> args;
args.emplace_back(16);
EXPECT_EQUAL(sqrt(std::move(args)), "4.0"); // sqrt(16) gets optimized to 4
}
{
- DSLExpression pow = DSLWriter::IRGenerator().convertIdentifier(/*offset=*/-1, "pow");
+ DSLExpression pow(DSLWriter::IRGenerator().convertIdentifier(/*offset=*/-1, "pow"));
DSLVar a(kFloat_Type, "a");
DSLVar b(kFloat_Type, "b");
SkTArray<DSLWrapper<DSLExpression>> args;
@@ -1767,34 +1767,33 @@
// context, so we can't as yet Declare() variables with these modifiers.
// TODO: better tests when able
Var v2(kIn_Modifier, kInt_Type, "v2");
- REPORTER_ASSERT(r, DSLWriter::Var(v2).modifiers().fFlags == SkSL::Modifiers::kIn_Flag);
+ REPORTER_ASSERT(r, v2.modifiers().flags() == SkSL::Modifiers::kIn_Flag);
DSLWriter::MarkDeclared(v2);
Var v3(kOut_Modifier, kInt_Type, "v3");
- REPORTER_ASSERT(r, DSLWriter::Var(v3).modifiers().fFlags == SkSL::Modifiers::kOut_Flag);
+ REPORTER_ASSERT(r, v3.modifiers().flags() == SkSL::Modifiers::kOut_Flag);
DSLWriter::MarkDeclared(v3);
Var v4(kFlat_Modifier, kInt_Type, "v4");
- REPORTER_ASSERT(r, DSLWriter::Var(v4).modifiers().fFlags == SkSL::Modifiers::kFlat_Flag);
+ REPORTER_ASSERT(r, v4.modifiers().flags() == SkSL::Modifiers::kFlat_Flag);
DSLWriter::MarkDeclared(v4);
Var v5(kNoPerspective_Modifier, kInt_Type, "v5");
- REPORTER_ASSERT(r, DSLWriter::Var(v5).modifiers().fFlags ==
- SkSL::Modifiers::kNoPerspective_Flag);
+ REPORTER_ASSERT(r, v5.modifiers().flags() == SkSL::Modifiers::kNoPerspective_Flag);
DSLWriter::MarkDeclared(v5);
Var v6(kIn_Modifier | kOut_Modifier, kInt_Type, "v6");
- REPORTER_ASSERT(r, DSLWriter::Var(v6).modifiers().fFlags ==
- (SkSL::Modifiers::kIn_Flag | SkSL::Modifiers::kOut_Flag));
+ REPORTER_ASSERT(r, v6.modifiers().flags() == (SkSL::Modifiers::kIn_Flag |
+ SkSL::Modifiers::kOut_Flag));
DSLWriter::MarkDeclared(v6);
Var v7(kInOut_Modifier, kInt_Type, "v7");
- REPORTER_ASSERT(r, DSLWriter::Var(v7).modifiers().fFlags ==
- (SkSL::Modifiers::kIn_Flag | SkSL::Modifiers::kOut_Flag));
+ REPORTER_ASSERT(r, v7.modifiers().flags() == (SkSL::Modifiers::kIn_Flag |
+ SkSL::Modifiers::kOut_Flag));
DSLWriter::MarkDeclared(v7);
Var v8(kUniform_Modifier, kInt_Type, "v8");
- REPORTER_ASSERT(r, DSLWriter::Var(v8).modifiers().fFlags == SkSL::Modifiers::kUniform_Flag);
+ REPORTER_ASSERT(r, v8.modifiers().flags() == SkSL::Modifiers::kUniform_Flag);
DSLWriter::MarkDeclared(v8);
// Uniforms do not need to be explicitly declared
}
@@ -1816,9 +1815,11 @@
Var v5(DSLLayout().blendSupportAllEquations(), kHalf4_Type, "v5");
EXPECT_EQUAL(Declare(v5), "layout (blend_support_all_equations) half4 v5;");
- Var v6(DSLModifiers(DSLLayout().srgbUnpremul(), kUniform_Modifier), kBool_Type, "v6");
- DeclareGlobal(v6);
- EXPECT_EQUAL(*DSLWriter::ProgramElements()[0], "layout (srgb_unpremul) uniform bool v6;");
+ {
+ ExpectError error(r, "error: 'srgb_unpremul' is only permitted in runtime effects\n");
+ Var v(DSLModifiers(DSLLayout().srgbUnpremul(), kUniform_Modifier), kHalf4_Type, "v");
+ DeclareGlobal(v);
+ }
{
ExpectError error(r, "error: layout qualifier 'location' appears more than once\n");
@@ -1948,5 +1949,5 @@
std::vector<Wrapper<DSLVar>> vars;
vars.emplace_back(DSLVar(kInt_Type, "x"));
- REPORTER_ASSERT(r, DSLWriter::Var(*vars[0]).name() == "x");
+ REPORTER_ASSERT(r, DSLWriter::Var(*vars[0])->name() == "x");
}