diff options
author | ethannicholas <ethannicholas@google.com> | 2016-10-10 10:09:00 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-10-10 10:09:00 -0700 |
commit | dcfe6dba4a335e50e86ff68e3252065d4197432c (patch) | |
tree | 6953805849e283220d56f4feac3358b5efea3cc9 /src/sksl/SkSLMain.cpp | |
parent | 95304e395c46bdd40decbb7ccd46939886cc1244 (diff) |
Turned on SkSL->GLSL compiler
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2288033003
Committed: https://skia.googlesource.com/skia/+/9b0fe3d125f237d9884732a48414fa85fc71b4e3
Committed: https://skia.googlesource.com/skia/+/b12b3c6908c62c908b3680be01e3b5bfd30de310
Committed: https://skia.googlesource.com/skia/+/f008b0a59f45c0d4bea3e66faf3b01805009ec89
Committed: https://skia.googlesource.com/skia/+/08b2ccf398e2b81bc05d2c105837e5419899469b
Review-Url: https://codereview.chromium.org/2288033003
Diffstat (limited to 'src/sksl/SkSLMain.cpp')
-rw-r--r-- | src/sksl/SkSLMain.cpp | 52 |
1 files changed, 43 insertions, 9 deletions
diff --git a/src/sksl/SkSLMain.cpp b/src/sksl/SkSLMain.cpp index 24fbb6c260..de1b9819d5 100644 --- a/src/sksl/SkSLMain.cpp +++ b/src/sksl/SkSLMain.cpp @@ -9,6 +9,24 @@ #include <fstream> #include "SkSLCompiler.h" +bool endsWith(const std::string& s, const std::string& ending) { + if (s.length() >= ending.length()) { + return (0 == s.compare(s.length() - ending.length(), ending.length(), ending)); + } + return false; +} + +static SkSL::GLCaps default_caps() { + return { + 400, + SkSL::GLCaps::kGL_Standard, + false, // isCoreProfile + false, // usesPrecisionModifiers; + false, // mustDeclareFragmentShaderOutput + true // canUseMinAndAbsTogether + }; +} + /** * Very simple standalone executable to facilitate testing. */ @@ -35,14 +53,30 @@ int main(int argc, const char** argv) { printf("error reading '%s'\n", argv[1]); exit(2); } - std::ofstream out(argv[2], std::ofstream::binary); - SkSL::Compiler compiler; - if (!compiler.toSPIRV(kind, text, out)) { - printf("%s", compiler.errorText().c_str()); - exit(3); - } - if (out.rdstate()) { - printf("error writing '%s'\n", argv[2]); - exit(4); + std::string name(argv[2]); + if (endsWith(name, ".spirv")) { + std::ofstream out(argv[2], std::ofstream::binary); + SkSL::Compiler compiler; + if (!compiler.toSPIRV(kind, text, out)) { + printf("%s", compiler.errorText().c_str()); + exit(3); + } + if (out.rdstate()) { + printf("error writing '%s'\n", argv[2]); + exit(4); + } + } else if (endsWith(name, ".glsl")) { + std::ofstream out(argv[2], std::ofstream::binary); + SkSL::Compiler compiler; + if (!compiler.toGLSL(kind, text, default_caps(), out)) { + printf("%s", compiler.errorText().c_str()); + exit(3); + } + if (out.rdstate()) { + printf("error writing '%s'\n", argv[2]); + exit(4); + } + } else { + printf("expected output filename to end with '.spirv' or '.glsl'"); } } |