aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sksl
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2018-02-01 12:14:34 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-02-01 18:22:03 +0000
commit130fb3f7aac19e40eddfc8fa85a9b39e7c99a7e8 (patch)
tree8daee5ab96a5bdc06e991ff8d1e370c011b6b7a5 /src/sksl
parent28eaed254dcd73b42c15b73528f349cccd7797e5 (diff)
updated .fp file headers
Bug: skia: Change-Id: I9c39622f34e803a706acd04372be569667380661 Reviewed-on: https://skia-review.googlesource.com/102204 Commit-Queue: Ethan Nicholas <ethannicholas@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/sksl')
-rw-r--r--src/sksl/SkSLCPPCodeGenerator.cpp1
-rw-r--r--src/sksl/SkSLHCodeGenerator.cpp18
-rw-r--r--src/sksl/SkSLHCodeGenerator.h16
-rw-r--r--src/sksl/SkSLParser.h1
4 files changed, 26 insertions, 10 deletions
diff --git a/src/sksl/SkSLCPPCodeGenerator.cpp b/src/sksl/SkSLCPPCodeGenerator.cpp
index d6a6a25eac..7b35ca8f90 100644
--- a/src/sksl/SkSLCPPCodeGenerator.cpp
+++ b/src/sksl/SkSLCPPCodeGenerator.cpp
@@ -764,6 +764,7 @@ bool CPPCodeGenerator::generateCode() {
}
const char* baseName = fName.c_str();
const char* fullName = fFullName.c_str();
+ this->writef("%s\n", HCodeGenerator::GetHeader(fProgram, fErrors).c_str());
this->writef(kFragmentProcessorHeader, fullName);
this->writef("#include \"%s.h\"\n"
"#if SK_SUPPORT_GPU\n", fullName);
diff --git a/src/sksl/SkSLHCodeGenerator.cpp b/src/sksl/SkSLHCodeGenerator.cpp
index 819b85a515..9750aabb87 100644
--- a/src/sksl/SkSLHCodeGenerator.cpp
+++ b/src/sksl/SkSLHCodeGenerator.cpp
@@ -7,6 +7,7 @@
#include "SkSLHCodeGenerator.h"
+#include "SkSLParser.h"
#include "SkSLUtil.h"
#include "ir/SkSLEnum.h"
#include "ir/SkSLFunctionDeclaration.h"
@@ -252,7 +253,24 @@ void HCodeGenerator::writeFields() {
}
}
+String HCodeGenerator::GetHeader(const Program& program, ErrorReporter& errors) {
+ SymbolTable types(&errors);
+ Parser parser(program.fSource->c_str(), program.fSource->length(), types, errors);
+ for (;;) {
+ Token header = parser.nextRawToken();
+ switch (header.fKind) {
+ case Token::WHITESPACE:
+ break;
+ case Token::BLOCK_COMMENT:
+ return String(program.fSource->c_str() + header.fOffset, header.fLength);
+ default:
+ return "";
+ }
+ }
+}
+
bool HCodeGenerator::generateCode() {
+ this->writef("%s\n", GetHeader(fProgram, fErrors).c_str());
this->writef(kFragmentProcessorHeader, fFullName.c_str());
this->writef("#ifndef %s_DEFINED\n"
"#define %s_DEFINED\n",
diff --git a/src/sksl/SkSLHCodeGenerator.h b/src/sksl/SkSLHCodeGenerator.h
index fa5544a0e0..c6031b2779 100644
--- a/src/sksl/SkSLHCodeGenerator.h
+++ b/src/sksl/SkSLHCodeGenerator.h
@@ -16,16 +16,10 @@
#include <cctype>
constexpr const char* kFragmentProcessorHeader =
-R"(/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/*
- * This file was autogenerated from %s.fp; do not modify.
- */
+R"(
+/**************************************************************************************************
+ *** This file was autogenerated from %s.fp; do not modify.
+ **************************************************************************************************/
)";
namespace SkSL {
@@ -45,6 +39,8 @@ public:
return String::printf("f%c%s", toupper(varName[0]), varName + 1);
}
+ static String GetHeader(const Program& program, ErrorReporter& errors);
+
private:
void writef(const char* s, va_list va) SKSL_PRINTF_LIKE(2, 0);
diff --git a/src/sksl/SkSLParser.h b/src/sksl/SkSLParser.h
index 51e689ecff..f067c48be9 100644
--- a/src/sksl/SkSLParser.h
+++ b/src/sksl/SkSLParser.h
@@ -242,6 +242,7 @@ private:
ErrorReporter& fErrors;
friend class AutoDepth;
+ friend class HCodeGenerator;
};
} // namespace