aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2016-11-28 16:30:17 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-28 22:38:47 +0000
commit19671772c1a03bd973fae54dead4defc9ee1d4c3 (patch)
treeb84497e9cf024f7d5dcfec6235ce8838bb25e1d8 /tests
parent59f9edb321ea29f7349bd4f13f3473e54831598a (diff)
added support for layout(offset=...) to skslc
BUG=skia: Change-Id: Idc1118503f9703496a0c852f0d8840b26e08b9fb Reviewed-on: https://skia-review.googlesource.com/5283 Reviewed-by: Greg Daniel <egdaniel@google.com> Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/SkSLErrorTest.cpp9
-rw-r--r--tests/SkSLGLSLTest.cpp22
-rw-r--r--tests/SkSLMemoryLayoutTest.cpp20
3 files changed, 37 insertions, 14 deletions
diff --git a/tests/SkSLErrorTest.cpp b/tests/SkSLErrorTest.cpp
index 896b32ccb8..c653072dd1 100644
--- a/tests/SkSLErrorTest.cpp
+++ b/tests/SkSLErrorTest.cpp
@@ -378,4 +378,13 @@ DEF_TEST(SkSLBadCap, r) {
"error: 1: unknown capability flag 'bugFreeDriver'\n1 error\n");
}
+DEF_TEST(SkSLBadOffset, r) {
+ test_failure(r,
+ "struct Bad { layout (offset = 5) int x; } bad; void main() { bad.x = 5; }",
+ "error: 1: offset of field 'x' must be a multiple of 4\n1 error\n");
+ test_failure(r,
+ "struct Bad { int x; layout (offset = 0) int y; } bad; void main() { bad.x = 5; }",
+ "error: 1: offset of field 'y' must be at least 4\n1 error\n");
+}
+
#endif
diff --git a/tests/SkSLGLSLTest.cpp b/tests/SkSLGLSLTest.cpp
index 52638a5795..490c4379fb 100644
--- a/tests/SkSLGLSLTest.cpp
+++ b/tests/SkSLGLSLTest.cpp
@@ -211,15 +211,13 @@ DEF_TEST(SkSLStructs, r) {
"struct A {\n"
" int x;\n"
" int y;\n"
- "}\n"
- " a1, a2;\n"
+ "} a1, a2;\n"
"A a3;\n"
"struct B {\n"
" float x;\n"
" float[2] y;\n"
" layout (binding = 1) A z;\n"
- "}\n"
- " b1, b2, b3;\n"
+ "} b1, b2, b3;\n"
"void main() {\n"
"}\n");
}
@@ -589,4 +587,20 @@ DEF_TEST(SkSLTexture, r) {
"}\n");
}
+DEF_TEST(SkSLOffset, r) {
+ test(r,
+ "struct Test {"
+ "layout(offset = 0) int x;"
+ "layout(offset = 4) int y;"
+ "int z;"
+ "} test;",
+ *SkSL::GLSLCapsFactory::Default(),
+ "#version 400\n"
+ "out vec4 sk_FragColor;\n"
+ "struct Test {\n"
+ " layout (offset = 0) int x;\n"
+ " layout (offset = 4) int y;\n"
+ " int z;\n"
+ "} test;\n");
+}
#endif
diff --git a/tests/SkSLMemoryLayoutTest.cpp b/tests/SkSLMemoryLayoutTest.cpp
index 336d8aa477..ff3d0105bd 100644
--- a/tests/SkSLMemoryLayoutTest.cpp
+++ b/tests/SkSLMemoryLayoutTest.cpp
@@ -55,29 +55,29 @@ DEF_TEST(SkSLMemoryLayout140Test, r) {
// struct 1
std::vector<SkSL::Type::Field> fields1;
fields1.emplace_back(SkSL::Modifiers(), SkString("a"), context.fVec3_Type.get());
- SkSL::Type s1(SkString("s1"), fields1);
+ SkSL::Type s1(SkSL::Position(), SkString("s1"), fields1);
REPORTER_ASSERT(r, 16 == layout.size(s1));
REPORTER_ASSERT(r, 16 == layout.alignment(s1));
fields1.emplace_back(SkSL::Modifiers(), SkString("b"), context.fFloat_Type.get());
- SkSL::Type s2(SkString("s2"), fields1);
+ SkSL::Type s2(SkSL::Position(), SkString("s2"), fields1);
REPORTER_ASSERT(r, 16 == layout.size(s2));
REPORTER_ASSERT(r, 16 == layout.alignment(s2));
fields1.emplace_back(SkSL::Modifiers(), SkString("c"), context.fBool_Type.get());
- SkSL::Type s3(SkString("s3"), fields1);
+ SkSL::Type s3(SkSL::Position(), SkString("s3"), fields1);
REPORTER_ASSERT(r, 32 == layout.size(s3));
REPORTER_ASSERT(r, 16 == layout.alignment(s3));
// struct 2
std::vector<SkSL::Type::Field> fields2;
fields2.emplace_back(SkSL::Modifiers(), SkString("a"), context.fInt_Type.get());
- SkSL::Type s4(SkString("s4"), fields2);
+ SkSL::Type s4(SkSL::Position(), SkString("s4"), fields2);
REPORTER_ASSERT(r, 16 == layout.size(s4));
REPORTER_ASSERT(r, 16 == layout.alignment(s4));
fields2.emplace_back(SkSL::Modifiers(), SkString("b"), context.fVec3_Type.get());
- SkSL::Type s5(SkString("s5"), fields2);
+ SkSL::Type s5(SkSL::Position(), SkString("s5"), fields2);
REPORTER_ASSERT(r, 32 == layout.size(s5));
REPORTER_ASSERT(r, 16 == layout.alignment(s5));
@@ -136,29 +136,29 @@ DEF_TEST(SkSLMemoryLayout430Test, r) {
// struct 1
std::vector<SkSL::Type::Field> fields1;
fields1.emplace_back(SkSL::Modifiers(), SkString("a"), context.fVec3_Type.get());
- SkSL::Type s1(SkString("s1"), fields1);
+ SkSL::Type s1(SkSL::Position(), SkString("s1"), fields1);
REPORTER_ASSERT(r, 16 == layout.size(s1));
REPORTER_ASSERT(r, 16 == layout.alignment(s1));
fields1.emplace_back(SkSL::Modifiers(), SkString("b"), context.fFloat_Type.get());
- SkSL::Type s2(SkString("s2"), fields1);
+ SkSL::Type s2(SkSL::Position(), SkString("s2"), fields1);
REPORTER_ASSERT(r, 16 == layout.size(s2));
REPORTER_ASSERT(r, 16 == layout.alignment(s2));
fields1.emplace_back(SkSL::Modifiers(), SkString("c"), context.fBool_Type.get());
- SkSL::Type s3(SkString("s3"), fields1);
+ SkSL::Type s3(SkSL::Position(), SkString("s3"), fields1);
REPORTER_ASSERT(r, 32 == layout.size(s3));
REPORTER_ASSERT(r, 16 == layout.alignment(s3));
// struct 2
std::vector<SkSL::Type::Field> fields2;
fields2.emplace_back(SkSL::Modifiers(), SkString("a"), context.fInt_Type.get());
- SkSL::Type s4(SkString("s4"), fields2);
+ SkSL::Type s4(SkSL::Position(), SkString("s4"), fields2);
REPORTER_ASSERT(r, 4 == layout.size(s4));
REPORTER_ASSERT(r, 4 == layout.alignment(s4));
fields2.emplace_back(SkSL::Modifiers(), SkString("b"), context.fVec3_Type.get());
- SkSL::Type s5(SkString("s5"), fields2);
+ SkSL::Type s5(SkSL::Position(), SkString("s5"), fields2);
REPORTER_ASSERT(r, 32 == layout.size(s5));
REPORTER_ASSERT(r, 16 == layout.alignment(s5));