Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(252)

Side by Side Diff: src/sksl/SkSLGLSLCodeGenerator.h

Issue 2437063002: re-re-land of skslc now automatically turns on derivatives support (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/sksl/SkSLCompiler.cpp ('k') | src/sksl/SkSLGLSLCodeGenerator.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef SKSL_GLSLCODEGENERATOR 8 #ifndef SKSL_GLSLCODEGENERATOR
9 #define SKSL_GLSLCODEGENERATOR 9 #define SKSL_GLSLCODEGENERATOR
10 10
(...skipping 27 matching lines...) Expand all
38 #include "ir/SkSLVarDeclarations.h" 38 #include "ir/SkSLVarDeclarations.h"
39 #include "ir/SkSLVarDeclarationsStatement.h" 39 #include "ir/SkSLVarDeclarationsStatement.h"
40 #include "ir/SkSLVariableReference.h" 40 #include "ir/SkSLVariableReference.h"
41 #include "ir/SkSLWhileStatement.h" 41 #include "ir/SkSLWhileStatement.h"
42 42
43 namespace SkSL { 43 namespace SkSL {
44 44
45 #define kLast_Capability SpvCapabilityMultiViewport 45 #define kLast_Capability SpvCapabilityMultiViewport
46 46
47 struct GLCaps { 47 struct GLCaps {
48 int fVersion; 48 GLCaps() {}
49
50 int fVersion = 400;
49 enum { 51 enum {
50 kGL_Standard, 52 kGL_Standard,
51 kGLES_Standard 53 kGLES_Standard
52 } fStandard; 54 } fStandard = kGL_Standard;
53 bool fIsCoreProfile; 55 bool fIsCoreProfile = false;
54 bool fUsesPrecisionModifiers; 56 bool fUsesPrecisionModifiers = false;
55 bool fMustDeclareFragmentShaderOutput; 57 bool fMustDeclareFragmentShaderOutput = false;
58 bool fShaderDerivativeSupport = true;
59 // extension string to enable derivative support, or null if unnecessary
60 std::string fShaderDerivativeExtensionString;
56 // The Tegra3 compiler will sometimes never return if we have min(abs(x), y) 61 // The Tegra3 compiler will sometimes never return if we have min(abs(x), y)
57 bool fCanUseMinAndAbsTogether; 62 bool fCanUseMinAndAbsTogether = true;
58 // On Intel GPU there is an issue where it misinterprets an atan argument (s econd argument only, 63 // On Intel GPU there is an issue where it misinterprets an atan argument (s econd argument only,
59 // apparently) of the form "-<expr>" as an int, so we rewrite it as "-1.0 * <expr>" to avoid 64 // apparently) of the form "-<expr>" as an int, so we rewrite it as "-1.0 * <expr>" to avoid
60 // this problem 65 // this problem
61 bool fMustForceNegatedAtanParamToFloat; 66 bool fMustForceNegatedAtanParamToFloat = false;
62 }; 67 };
63 68
64 /** 69 /**
65 * Converts a Program into GLSL code. 70 * Converts a Program into GLSL code.
66 */ 71 */
67 class GLSLCodeGenerator : public CodeGenerator { 72 class GLSLCodeGenerator : public CodeGenerator {
68 public: 73 public:
69 enum Precedence { 74 enum Precedence {
70 kParentheses_Precedence = 1, 75 kParentheses_Precedence = 1,
71 kPostfix_Precedence = 2, 76 kPostfix_Precedence = 2,
(...skipping 10 matching lines...) Expand all
82 kLogicalXor_Precedence = 13, 87 kLogicalXor_Precedence = 13,
83 kLogicalOr_Precedence = 14, 88 kLogicalOr_Precedence = 14,
84 kTernary_Precedence = 15, 89 kTernary_Precedence = 15,
85 kAssignment_Precedence = 16, 90 kAssignment_Precedence = 16,
86 kSequence_Precedence = 17, 91 kSequence_Precedence = 17,
87 kTopLevel_Precedence = 18 92 kTopLevel_Precedence = 18
88 }; 93 };
89 94
90 GLSLCodeGenerator(const Context* context, GLCaps caps) 95 GLSLCodeGenerator(const Context* context, GLCaps caps)
91 : fContext(*context) 96 : fContext(*context)
92 , fCaps(caps) 97 , fCaps(caps) {}
93 , fOut(nullptr)
94 , fVarCount(0)
95 , fIndentation(0)
96 , fAtLineStart(true) {}
97 98
98 void generateCode(const Program& program, std::ostream& out) override; 99 void generateCode(const Program& program, std::ostream& out) override;
99 100
100 private: 101 private:
101 void write(const char* s); 102 void write(const char* s);
102 103
103 void writeLine(); 104 void writeLine();
104 105
105 void writeLine(const char* s); 106 void writeLine(const char* s);
106 107
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 void writeForStatement(const ForStatement& f); 170 void writeForStatement(const ForStatement& f);
170 171
171 void writeWhileStatement(const WhileStatement& w); 172 void writeWhileStatement(const WhileStatement& w);
172 173
173 void writeDoStatement(const DoStatement& d); 174 void writeDoStatement(const DoStatement& d);
174 175
175 void writeReturnStatement(const ReturnStatement& r); 176 void writeReturnStatement(const ReturnStatement& r);
176 177
177 const Context& fContext; 178 const Context& fContext;
178 const GLCaps fCaps; 179 const GLCaps fCaps;
179 std::ostream* fOut; 180 std::ostream* fOut = nullptr;
181 std::stringstream fHeader;
180 std::string fFunctionHeader; 182 std::string fFunctionHeader;
181 Program::Kind fProgramKind; 183 Program::Kind fProgramKind;
182 int fVarCount; 184 int fVarCount = 0;
183 int fIndentation; 185 int fIndentation = 0;
184 bool fAtLineStart; 186 bool fAtLineStart = false;
185 // Keeps track of which struct types we have written. Given that we are unli kely to ever write 187 // Keeps track of which struct types we have written. Given that we are unli kely to ever write
186 // more than one or two structs per shader, a simple linear search will be f aster than anything 188 // more than one or two structs per shader, a simple linear search will be f aster than anything
187 // fancier. 189 // fancier.
188 std::vector<const Type*> fWrittenStructs; 190 std::vector<const Type*> fWrittenStructs;
191 // true if we have run into usages of dFdx / dFdy
192 bool fFoundDerivatives = false;
189 }; 193 };
190 194
191 } 195 }
192 196
193 #endif 197 #endif
OLDNEW
« no previous file with comments | « src/sksl/SkSLCompiler.cpp ('k') | src/sksl/SkSLGLSLCodeGenerator.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698