| 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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 ADD_TYPE(IVec4); | 60 ADD_TYPE(IVec4); |
| 61 ADD_TYPE(UInt); | 61 ADD_TYPE(UInt); |
| 62 ADD_TYPE(UVec2); | 62 ADD_TYPE(UVec2); |
| 63 ADD_TYPE(UVec3); | 63 ADD_TYPE(UVec3); |
| 64 ADD_TYPE(UVec4); | 64 ADD_TYPE(UVec4); |
| 65 ADD_TYPE(Bool); | 65 ADD_TYPE(Bool); |
| 66 ADD_TYPE(BVec2); | 66 ADD_TYPE(BVec2); |
| 67 ADD_TYPE(BVec3); | 67 ADD_TYPE(BVec3); |
| 68 ADD_TYPE(BVec4); | 68 ADD_TYPE(BVec4); |
| 69 ADD_TYPE(Mat2x2); | 69 ADD_TYPE(Mat2x2); |
| 70 types->addWithoutOwnership("mat2x2", fContext.fMat2x2_Type.get()); |
| 70 ADD_TYPE(Mat2x3); | 71 ADD_TYPE(Mat2x3); |
| 71 ADD_TYPE(Mat2x4); | 72 ADD_TYPE(Mat2x4); |
| 72 ADD_TYPE(Mat3x2); | 73 ADD_TYPE(Mat3x2); |
| 73 ADD_TYPE(Mat3x3); | 74 ADD_TYPE(Mat3x3); |
| 75 types->addWithoutOwnership("mat3x3", fContext.fMat3x3_Type.get()); |
| 74 ADD_TYPE(Mat3x4); | 76 ADD_TYPE(Mat3x4); |
| 75 ADD_TYPE(Mat4x2); | 77 ADD_TYPE(Mat4x2); |
| 76 ADD_TYPE(Mat4x3); | 78 ADD_TYPE(Mat4x3); |
| 77 ADD_TYPE(Mat4x4); | 79 ADD_TYPE(Mat4x4); |
| 80 types->addWithoutOwnership("mat4x4", fContext.fMat4x4_Type.get()); |
| 78 ADD_TYPE(GenType); | 81 ADD_TYPE(GenType); |
| 79 ADD_TYPE(GenDType); | 82 ADD_TYPE(GenDType); |
| 80 ADD_TYPE(GenIType); | 83 ADD_TYPE(GenIType); |
| 81 ADD_TYPE(GenUType); | 84 ADD_TYPE(GenUType); |
| 82 ADD_TYPE(GenBType); | 85 ADD_TYPE(GenBType); |
| 83 ADD_TYPE(Mat); | 86 ADD_TYPE(Mat); |
| 84 ADD_TYPE(Vec); | 87 ADD_TYPE(Vec); |
| 85 ADD_TYPE(GVec); | 88 ADD_TYPE(GVec); |
| 86 ADD_TYPE(GVec2); | 89 ADD_TYPE(GVec2); |
| 87 ADD_TYPE(GVec3); | 90 ADD_TYPE(GVec3); |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 void Compiler::writeErrorCount() { | 219 void Compiler::writeErrorCount() { |
| 217 if (fErrorCount) { | 220 if (fErrorCount) { |
| 218 fErrorText += to_string(fErrorCount) + " error"; | 221 fErrorText += to_string(fErrorCount) + " error"; |
| 219 if (fErrorCount > 1) { | 222 if (fErrorCount > 1) { |
| 220 fErrorText += "s"; | 223 fErrorText += "s"; |
| 221 } | 224 } |
| 222 fErrorText += "\n"; | 225 fErrorText += "\n"; |
| 223 } | 226 } |
| 224 } | 227 } |
| 225 | 228 |
| 226 #include <fstream> | 229 bool Compiler::toSPIRV(Program::Kind kind, const std::string& text, std::ostream
& out) { |
| 227 bool Compiler::toSPIRV(Program::Kind kind, std::string text, std::ostream& out)
{ | |
| 228 auto program = this->convertProgram(kind, text); | 230 auto program = this->convertProgram(kind, text); |
| 229 if (fErrorCount == 0) { | 231 if (fErrorCount == 0) { |
| 230 SkSL::SPIRVCodeGenerator cg(&fContext); | 232 SkSL::SPIRVCodeGenerator cg(&fContext); |
| 231 cg.generateCode(*program.get(), out); | 233 cg.generateCode(*program.get(), out); |
| 232 ASSERT(!out.rdstate()); | 234 ASSERT(!out.rdstate()); |
| 233 } | 235 } |
| 234 return fErrorCount == 0; | 236 return fErrorCount == 0; |
| 235 } | 237 } |
| 236 | 238 |
| 237 bool Compiler::toSPIRV(Program::Kind kind, std::string text, std::string* out) { | 239 bool Compiler::toSPIRV(Program::Kind kind, const std::string& text, std::string*
out) { |
| 238 std::stringstream buffer; | 240 std::stringstream buffer; |
| 239 bool result = this->toSPIRV(kind, text, buffer); | 241 bool result = this->toSPIRV(kind, text, buffer); |
| 240 if (result) { | 242 if (result) { |
| 241 *out = buffer.str(); | 243 *out = buffer.str(); |
| 242 } | 244 } |
| 245 return result; |
| 246 } |
| 247 |
| 248 bool Compiler::toGLSL(Program::Kind kind, const std::string& text, GLCaps caps, |
| 249 std::ostream& out) { |
| 250 auto program = this->convertProgram(kind, text); |
| 251 if (fErrorCount == 0) { |
| 252 SkSL::GLSLCodeGenerator cg(&fContext, caps); |
| 253 cg.generateCode(*program.get(), out); |
| 254 ASSERT(!out.rdstate()); |
| 255 } |
| 243 return fErrorCount == 0; | 256 return fErrorCount == 0; |
| 244 } | 257 } |
| 245 | 258 |
| 259 bool Compiler::toGLSL(Program::Kind kind, const std::string& text, GLCaps caps, |
| 260 std::string* out) { |
| 261 std::stringstream buffer; |
| 262 bool result = this->toGLSL(kind, text, caps, buffer); |
| 263 if (result) { |
| 264 *out = buffer.str(); |
| 265 } |
| 266 return result; |
| 267 } |
| 268 |
| 246 } // namespace | 269 } // namespace |
| OLD | NEW |