Added DSL support for interface blocks
Change-Id: I5b770252eb5daa29844ac75ee4be81e503c2907f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/424039
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/tests/SkSLDSLTest.cpp b/tests/SkSLDSLTest.cpp
index 25bc2d9..5a4daf6 100644
--- a/tests/SkSLDSLTest.cpp
+++ b/tests/SkSLDSLTest.cpp
@@ -1523,6 +1523,31 @@
}
}
+DEF_GPUTEST_FOR_MOCK_CONTEXT(DSLInterfaceBlock, r, ctxInfo) {
+ AutoDSLContext context(ctxInfo.directContext()->priv().getGpu());
+ DSLVar intf = InterfaceBlock(kUniform_Modifier, "InterfaceBlock1",
+ { Field(kFloat_Type, "a"), Field(kInt_Type, "b") });
+ REPORTER_ASSERT(r, DSLWriter::ProgramElements().size() == 1);
+ EXPECT_EQUAL(*DSLWriter::ProgramElements().back(),
+ "uniform InterfaceBlock1 { float a; int b; };");
+ EXPECT_EQUAL(intf.field("a"), "InterfaceBlock1.a");
+
+ DSLVar intf2 = InterfaceBlock(kUniform_Modifier, "InterfaceBlock2",
+ { Field(kFloat2_Type, "x"), Field(kHalf2x2_Type, "y") },
+ "blockVar");
+ REPORTER_ASSERT(r, DSLWriter::ProgramElements().size() == 2);
+ EXPECT_EQUAL(*DSLWriter::ProgramElements().back(),
+ "uniform InterfaceBlock2 { float2 x; half2x2 y; } blockVar;");
+ EXPECT_EQUAL(intf2.field("x"), "blockVar.x");
+
+ DSLVar intf3 = InterfaceBlock(kUniform_Modifier, "InterfaceBlock3", { Field(kFloat_Type, "z") },
+ "arrayVar", 4);
+ REPORTER_ASSERT(r, DSLWriter::ProgramElements().size() == 3);
+ EXPECT_EQUAL(*DSLWriter::ProgramElements().back(),
+ "uniform InterfaceBlock3 { float z; } arrayVar[4];");
+ EXPECT_EQUAL(intf3[1].field("z"), "arrayVar[1].z");
+}
+
DEF_GPUTEST_FOR_MOCK_CONTEXT(DSLReturn, r, ctxInfo) {
AutoDSLContext context(ctxInfo.directContext()->priv().getGpu());