LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/sksl - SkSLCompiler.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 2 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2016 Google Inc.
       3             :  *
       4             :  * Use of this source code is governed by a BSD-style license that can be
       5             :  * found in the LICENSE file.
       6             :  */
       7             : 
       8             : #ifndef SKSL_COMPILER
       9             : #define SKSL_COMPILER
      10             : 
      11             : #include <set>
      12             : #include <vector>
      13             : #include "ir/SkSLProgram.h"
      14             : #include "ir/SkSLSymbolTable.h"
      15             : #include "SkSLCFGGenerator.h"
      16             : #include "SkSLContext.h"
      17             : #include "SkSLErrorReporter.h"
      18             : #include "SkSLIRGenerator.h"
      19             : 
      20             : #define SK_FRAGCOLOR_BUILTIN    10001
      21             : #define SK_IN_BUILTIN           10002
      22             : #define SK_FRAGCOORD_BUILTIN       15
      23             : #define SK_VERTEXID_BUILTIN         5
      24             : #define SK_CLIPDISTANCE_BUILTIN     3
      25             : #define SK_INVOCATIONID_BUILTIN     8
      26             : 
      27             : namespace SkSL {
      28             : 
      29             : class IRGenerator;
      30             : 
      31             : /**
      32             :  * Main compiler entry point. This is a traditional compiler design which first parses the .sksl
      33             :  * file into an abstract syntax tree (a tree of ASTNodes), then performs semantic analysis to
      34             :  * produce a Program (a tree of IRNodes), then feeds the Program into a CodeGenerator to produce
      35             :  * compiled output.
      36             :  *
      37             :  * See the README for information about SkSL.
      38             :  */
      39             : class Compiler : public ErrorReporter {
      40             : public:
      41             :     Compiler();
      42             : 
      43             :     ~Compiler() override;
      44             : 
      45             :     std::unique_ptr<Program> convertProgram(Program::Kind kind, String text,
      46             :                                             const Program::Settings& settings);
      47             : 
      48             :     bool toSPIRV(const Program& program, OutputStream& out);
      49             : 
      50             :     bool toSPIRV(const Program& program, String* out);
      51             : 
      52             :     bool toGLSL(const Program& program, OutputStream& out);
      53             : 
      54             :     bool toGLSL(const Program& program, String* out);
      55             : 
      56             :     void error(Position position, String msg) override;
      57             : 
      58             :     String errorText();
      59             : 
      60             :     void writeErrorCount();
      61             : 
      62           0 :     int errorCount() override {
      63           0 :         return fErrorCount;
      64             :     }
      65             : 
      66             : private:
      67             :     void addDefinition(const Expression* lvalue, std::unique_ptr<Expression>* expr,
      68             :                        DefinitionMap* definitions);
      69             : 
      70             :     void addDefinitions(const BasicBlock::Node& node, DefinitionMap* definitions);
      71             : 
      72             :     void scanCFG(CFG* cfg, BlockId block, std::set<BlockId>* workList);
      73             : 
      74             :     void scanCFG(const FunctionDefinition& f);
      75             : 
      76             :     void internalConvertProgram(String text,
      77             :                                 Modifiers::Flag* defaultPrecision,
      78             :                                 std::vector<std::unique_ptr<ProgramElement>>* result);
      79             : 
      80             :     std::shared_ptr<SymbolTable> fTypes;
      81             :     IRGenerator* fIRGenerator;
      82             :     String fSkiaVertText; // FIXME store parsed version instead
      83             : 
      84             :     Context fContext;
      85             :     int fErrorCount;
      86             :     String fErrorText;
      87             : };
      88             : 
      89             : } // namespace
      90             : 
      91             : #endif

Generated by: LCOV version 1.13