Index: src/sksl/SkSLGLSLCodeGenerator.h |
diff --git a/src/sksl/SkSLGLSLCodeGenerator.h b/src/sksl/SkSLGLSLCodeGenerator.h |
index 17ac90ea233cae2f3dc1ffea9c38068e511f2378..97e60381463e6c8f9a2c572cfec7d072a0bb65e0 100644 |
--- a/src/sksl/SkSLGLSLCodeGenerator.h |
+++ b/src/sksl/SkSLGLSLCodeGenerator.h |
@@ -45,20 +45,25 @@ namespace SkSL { |
#define kLast_Capability SpvCapabilityMultiViewport |
struct GLCaps { |
- int fVersion; |
+ GLCaps() {} |
+ |
+ int fVersion = 400; |
enum { |
kGL_Standard, |
kGLES_Standard |
- } fStandard; |
- bool fIsCoreProfile; |
- bool fUsesPrecisionModifiers; |
- bool fMustDeclareFragmentShaderOutput; |
+ } fStandard = kGL_Standard; |
+ bool fIsCoreProfile = false; |
+ bool fUsesPrecisionModifiers = false; |
+ bool fMustDeclareFragmentShaderOutput = false; |
+ bool fShaderDerivativeSupport = true; |
+ // extension string to enable derivative support, or null if unnecessary |
+ std::string fShaderDerivativeExtensionString; |
// The Tegra3 compiler will sometimes never return if we have min(abs(x), y) |
- bool fCanUseMinAndAbsTogether; |
+ bool fCanUseMinAndAbsTogether = true; |
// On Intel GPU there is an issue where it misinterprets an atan argument (second argument only, |
// apparently) of the form "-<expr>" as an int, so we rewrite it as "-1.0 * <expr>" to avoid |
// this problem |
- bool fMustForceNegatedAtanParamToFloat; |
+ bool fMustForceNegatedAtanParamToFloat = false; |
}; |
/** |
@@ -89,11 +94,7 @@ public: |
GLSLCodeGenerator(const Context* context, GLCaps caps) |
: fContext(*context) |
- , fCaps(caps) |
- , fOut(nullptr) |
- , fVarCount(0) |
- , fIndentation(0) |
- , fAtLineStart(true) {} |
+ , fCaps(caps) {} |
void generateCode(const Program& program, std::ostream& out) override; |
@@ -176,16 +177,19 @@ private: |
const Context& fContext; |
const GLCaps fCaps; |
- std::ostream* fOut; |
+ std::ostream* fOut = nullptr; |
+ std::stringstream fHeader; |
std::string fFunctionHeader; |
Program::Kind fProgramKind; |
- int fVarCount; |
- int fIndentation; |
- bool fAtLineStart; |
+ int fVarCount = 0; |
+ int fIndentation = 0; |
+ bool fAtLineStart = false; |
// Keeps track of which struct types we have written. Given that we are unlikely to ever write |
// more than one or two structs per shader, a simple linear search will be faster than anything |
// fancier. |
std::vector<const Type*> fWrittenStructs; |
+ // true if we have run into usages of dFdx / dFdy |
+ bool fFoundDerivatives = false; |
}; |
} |