aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2018-03-16 09:45:11 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-03-16 16:44:11 +0000
commit6c94271f55b5b45f037aed47f59a9f440714e7ce (patch)
tree9b15636de8ad6beb8e0d1bdd2ed6da4521738411
parentea022cd714b206551957fafd7f56e489bb12b128 (diff)
we now complain if an SkSL program tries to override the default output
Bug: skia: Change-Id: I387ddc3aac0712eb6c0a6ea39e48e5f3d809bc48 Reviewed-on: https://skia-review.googlesource.com/114691 Reviewed-by: Greg Daniel <egdaniel@google.com> Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
-rw-r--r--src/sksl/SkSLIRGenerator.cpp6
-rw-r--r--tests/SkSLErrorTest.cpp5
2 files changed, 11 insertions, 0 deletions
diff --git a/src/sksl/SkSLIRGenerator.cpp b/src/sksl/SkSLIRGenerator.cpp
index 38c45f70ee..8b508216ba 100644
--- a/src/sksl/SkSLIRGenerator.cpp
+++ b/src/sksl/SkSLIRGenerator.cpp
@@ -243,6 +243,12 @@ std::unique_ptr<VarDeclarations> IRGenerator::convertVarDeclarations(const ASTVa
return nullptr;
}
for (const auto& varDecl : decl.fVars) {
+ if (decl.fModifiers.fLayout.fLocation == 0 && decl.fModifiers.fLayout.fIndex == 0 &&
+ (decl.fModifiers.fFlags & Modifiers::kOut_Flag) && fKind == Program::kFragment_Kind &&
+ varDecl.fName != "sk_FragColor") {
+ fErrors.error(decl.fOffset,
+ "out location=0, index=0 is reserved for sk_FragColor");
+ }
const Type* type = baseType;
std::vector<std::unique_ptr<Expression>> sizes;
for (const auto& rawSize : varDecl.fSizes) {
diff --git a/tests/SkSLErrorTest.cpp b/tests/SkSLErrorTest.cpp
index b8de004051..9c43ac5197 100644
--- a/tests/SkSLErrorTest.cpp
+++ b/tests/SkSLErrorTest.cpp
@@ -497,4 +497,9 @@ DEF_TEST(SkSLInterfaceBlockScope, r) {
"error: 1: unknown identifier 'x'\n1 error\n");
}
+DEF_TEST(SkSLDuplicateOutput, r) {
+ test_failure(r,
+ "layout (location=0, index=0) out half4 duplicateOutput;",
+ "error: 1: out location=0, index=0 is reserved for sk_FragColor\n1 error\n");
+}
#endif