| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkSLCompiler.h" | 8 #include "SkSLCompiler.h" |
| 9 | 9 |
| 10 #include <fstream> | 10 #include <fstream> |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 ; | 36 ; |
| 37 | 37 |
| 38 namespace SkSL { | 38 namespace SkSL { |
| 39 | 39 |
| 40 Compiler::Compiler() | 40 Compiler::Compiler() |
| 41 : fErrorCount(0) { | 41 : fErrorCount(0) { |
| 42 auto types = std::shared_ptr<SymbolTable>(new SymbolTable(*this)); | 42 auto types = std::shared_ptr<SymbolTable>(new SymbolTable(*this)); |
| 43 auto symbols = std::shared_ptr<SymbolTable>(new SymbolTable(types, *this)); | 43 auto symbols = std::shared_ptr<SymbolTable>(new SymbolTable(types, *this)); |
| 44 fIRGenerator = new IRGenerator(symbols, *this); | 44 fIRGenerator = new IRGenerator(symbols, *this); |
| 45 fTypes = types; | 45 fTypes = types; |
| 46 #define ADD_TYPE(t) types->addWithoutOwnership(k ## t ## _Type->fName, k ##
t ## _Type) | 46 #define ADD_TYPE(t) types->add(k ## t ## _Type->fName, k ## t ## _Type) |
| 47 ADD_TYPE(Void); | 47 ADD_TYPE(Void); |
| 48 ADD_TYPE(Float); | 48 ADD_TYPE(Float); |
| 49 ADD_TYPE(Vec2); | 49 ADD_TYPE(Vec2); |
| 50 ADD_TYPE(Vec3); | 50 ADD_TYPE(Vec3); |
| 51 ADD_TYPE(Vec4); | 51 ADD_TYPE(Vec4); |
| 52 ADD_TYPE(Double); | 52 ADD_TYPE(Double); |
| 53 ADD_TYPE(DVec2); | 53 ADD_TYPE(DVec2); |
| 54 ADD_TYPE(DVec3); | 54 ADD_TYPE(DVec3); |
| 55 ADD_TYPE(DVec4); | 55 ADD_TYPE(DVec4); |
| 56 ADD_TYPE(Int); | 56 ADD_TYPE(Int); |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 default: | 178 default: |
| 179 ABORT("unsupported declaration: %s\n", decl.description().c_str(
)); | 179 ABORT("unsupported declaration: %s\n", decl.description().c_str(
)); |
| 180 } | 180 } |
| 181 } | 181 } |
| 182 } | 182 } |
| 183 | 183 |
| 184 std::unique_ptr<Program> Compiler::convertProgram(Program::Kind kind, std::strin
g text) { | 184 std::unique_ptr<Program> Compiler::convertProgram(Program::Kind kind, std::strin
g text) { |
| 185 fErrorText = ""; | 185 fErrorText = ""; |
| 186 fErrorCount = 0; | 186 fErrorCount = 0; |
| 187 fIRGenerator->pushSymbolTable(); | 187 fIRGenerator->pushSymbolTable(); |
| 188 std::vector<std::unique_ptr<ProgramElement>> elements; | 188 std::vector<std::unique_ptr<ProgramElement>> result; |
| 189 switch (kind) { | 189 switch (kind) { |
| 190 case Program::kVertex_Kind: | 190 case Program::kVertex_Kind: |
| 191 this->internalConvertProgram(SKSL_VERT_INCLUDE, &elements); | 191 this->internalConvertProgram(SKSL_VERT_INCLUDE, &result); |
| 192 break; | 192 break; |
| 193 case Program::kFragment_Kind: | 193 case Program::kFragment_Kind: |
| 194 this->internalConvertProgram(SKSL_FRAG_INCLUDE, &elements); | 194 this->internalConvertProgram(SKSL_FRAG_INCLUDE, &result); |
| 195 break; | 195 break; |
| 196 } | 196 } |
| 197 this->internalConvertProgram(text, &elements); | 197 this->internalConvertProgram(text, &result); |
| 198 auto result = std::unique_ptr<Program>(new Program(kind, std::move(elements)
, | |
| 199 fIRGenerator->fSymbolTabl
e));; | |
| 200 fIRGenerator->popSymbolTable(); | 198 fIRGenerator->popSymbolTable(); |
| 201 this->writeErrorCount(); | 199 this->writeErrorCount(); |
| 202 return result; | 200 return std::unique_ptr<Program>(new Program(kind, std::move(result)));; |
| 203 } | 201 } |
| 204 | 202 |
| 205 void Compiler::error(Position position, std::string msg) { | 203 void Compiler::error(Position position, std::string msg) { |
| 206 fErrorCount++; | 204 fErrorCount++; |
| 207 fErrorText += "error: " + position.description() + ": " + msg.c_str() + "\n"
; | 205 fErrorText += "error: " + position.description() + ": " + msg.c_str() + "\n"
; |
| 208 } | 206 } |
| 209 | 207 |
| 210 std::string Compiler::errorText() { | 208 std::string Compiler::errorText() { |
| 211 std::string result = fErrorText; | 209 std::string result = fErrorText; |
| 212 return result; | 210 return result; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 236 bool Compiler::toSPIRV(Program::Kind kind, std::string text, std::string* out) { | 234 bool Compiler::toSPIRV(Program::Kind kind, std::string text, std::string* out) { |
| 237 std::stringstream buffer; | 235 std::stringstream buffer; |
| 238 bool result = this->toSPIRV(kind, text, buffer); | 236 bool result = this->toSPIRV(kind, text, buffer); |
| 239 if (result) { | 237 if (result) { |
| 240 *out = buffer.str(); | 238 *out = buffer.str(); |
| 241 } | 239 } |
| 242 return fErrorCount == 0; | 240 return fErrorCount == 0; |
| 243 } | 241 } |
| 244 | 242 |
| 245 } // namespace | 243 } // namespace |
| OLD | NEW |