diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-11-07 14:42:10 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-11-07 14:42:19 +0000 |
commit | 82a62d2d4ef55e53730a4f194a82d4e5da0c4a64 (patch) | |
tree | 8cee593eec28052b9f002c537db8356175fa2874 /src/sksl/SkSLCPPCodeGenerator.cpp | |
parent | 09eba3cad93d3e7eb0c37e388086b811e4ec1512 (diff) |
Revert "refactored SkSLVarDeclaration out of existence"
This reverts commit 1ae353c887fdf447e1fe627e3cd29f8fa62c2a05.
Reason for revert: ASAN failures
Original change's description:
> refactored SkSLVarDeclaration out of existence
>
> Bug: skia:
> Change-Id: I3dbc08e6d759f6828a472246d4797babb6cc132e
> Reviewed-on: https://skia-review.googlesource.com/66147
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
TBR=egdaniel@google.com,ethannicholas@google.com
Change-Id: I8cae451de1546fe783e32dd41df00eac7da61b21
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/68280
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Diffstat (limited to 'src/sksl/SkSLCPPCodeGenerator.cpp')
-rw-r--r-- | src/sksl/SkSLCPPCodeGenerator.cpp | 62 |
1 files changed, 34 insertions, 28 deletions
diff --git a/src/sksl/SkSLCPPCodeGenerator.cpp b/src/sksl/SkSLCPPCodeGenerator.cpp index 184453812a..506daa8b4f 100644 --- a/src/sksl/SkSLCPPCodeGenerator.cpp +++ b/src/sksl/SkSLCPPCodeGenerator.cpp @@ -273,10 +273,11 @@ void CPPCodeGenerator::writeFunctionCall(const FunctionCall& c) { for (const auto& p : fProgram.fElements) { if (ProgramElement::kVar_Kind == p->fKind) { const VarDeclarations* decls = (const VarDeclarations*) p.get(); - for (const auto& var : decls->fVars) { - if (var == &((VariableReference&) *c.fArguments[0]).fVariable) { + for (const auto& raw : decls->fVars) { + VarDeclaration& decl = (VarDeclaration&) *raw; + if (decl.fVar == &((VariableReference&) *c.fArguments[0]).fVariable) { found = true; - } else if (var->fType == *fContext.fFragmentProcessor_Type) { + } else if (decl.fVar->fType == *fContext.fFragmentProcessor_Type) { ++index; } } @@ -352,7 +353,7 @@ void CPPCodeGenerator::writeProgramElement(const ProgramElement& p) { if (!decls.fVars.size()) { return; } - const Variable& var = *decls.fVars[0]; + const Variable& var = *((VarDeclaration&) *decls.fVars[0]).fVar; if (var.fModifiers.fFlags & (Modifiers::kIn_Flag | Modifiers::kUniform_Flag) || -1 != var.fModifiers.fLayout.fBuiltin) { return; @@ -412,17 +413,18 @@ void CPPCodeGenerator::writePrivateVars() { for (const auto& p : fProgram.fElements) { if (ProgramElement::kVar_Kind == p->fKind) { const VarDeclarations* decls = (const VarDeclarations*) p.get(); - for (const auto& var : decls->fVars) { - if (is_private(*var)) { - if (var->fType == *fContext.fFragmentProcessor_Type) { - fErrors.error(var->fOffset, + for (const auto& raw : decls->fVars) { + VarDeclaration& decl = (VarDeclaration&) *raw; + if (is_private(*decl.fVar)) { + if (decl.fVar->fType == *fContext.fFragmentProcessor_Type) { + fErrors.error(decl.fOffset, "fragmentProcessor variables must be declared 'in'"); return; } this->writef("%s %s;\n", - HCodeGenerator::FieldType(fContext, var->fType, - var->fModifiers.fLayout).c_str(), - String(var->fName).c_str()); + HCodeGenerator::FieldType(fContext, decl.fVar->fType, + decl.fVar->fModifiers.fLayout).c_str(), + String(decl.fVar->fName).c_str()); } } } @@ -433,11 +435,12 @@ void CPPCodeGenerator::writePrivateVarValues() { for (const auto& p : fProgram.fElements) { if (ProgramElement::kVar_Kind == p->fKind) { const VarDeclarations* decls = (const VarDeclarations*) p.get(); - for (const auto& var : decls->fVars) { - if (is_private(*var) && var->fInitialValue) { - this->writef("%s = ", String(var->fName).c_str()); + for (const auto& raw : decls->fVars) { + VarDeclaration& decl = (VarDeclaration&) *raw; + if (is_private(*decl.fVar) && decl.fValue) { + this->writef("%s = ", String(decl.fVar->fName).c_str()); fCPPMode = true; - this->writeExpression(*var->fInitialValue, kAssignment_Precedence); + this->writeExpression(*decl.fValue, kAssignment_Precedence); fCPPMode = false; this->write(";\n"); } @@ -498,11 +501,12 @@ bool CPPCodeGenerator::writeEmitCode(std::vector<const Variable*>& uniforms) { for (const auto& p : fProgram.fElements) { if (ProgramElement::kVar_Kind == p->fKind) { const VarDeclarations* decls = (const VarDeclarations*) p.get(); - for (const auto& var : decls->fVars) { - String nameString(var->fName); + for (const auto& raw : decls->fVars) { + VarDeclaration& decl = (VarDeclaration&) *raw; + String nameString(decl.fVar->fName); const char* name = nameString.c_str(); - if (SectionAndParameterHelper::IsParameter(*var) && - is_accessible(*var)) { + if (SectionAndParameterHelper::IsParameter(*decl.fVar) && + is_accessible(*decl.fVar)) { this->writef(" auto %s = _outer.%s();\n" " (void) %s;\n", name, name, name); @@ -569,15 +573,16 @@ void CPPCodeGenerator::writeSetData(std::vector<const Variable*>& uniforms) { for (const auto& p : fProgram.fElements) { if (ProgramElement::kVar_Kind == p->fKind) { const VarDeclarations* decls = (const VarDeclarations*) p.get(); - for (const Variable* var : decls->fVars) { - String nameString(var->fName); + for (const auto& raw : decls->fVars) { + VarDeclaration& decl = (VarDeclaration&) *raw; + String nameString(decl.fVar->fName); const char* name = nameString.c_str(); - if (needs_uniform_var(*var)) { + if (needs_uniform_var(*decl.fVar)) { this->writef(" UniformHandle& %s = %sVar;\n" " (void) %s;\n", name, HCodeGenerator::FieldName(name).c_str(), name); - } else if (SectionAndParameterHelper::IsParameter(*var) && - var->fType != *fContext.fFragmentProcessor_Type) { + } else if (SectionAndParameterHelper::IsParameter(*decl.fVar) && + decl.fVar->fType != *fContext.fFragmentProcessor_Type) { if (!wroteProcessor) { this->writef(" const %s& _outer = _proc.cast<%s>();\n", fullName, fullName); @@ -713,10 +718,11 @@ bool CPPCodeGenerator::generateCode() { for (const auto& p : fProgram.fElements) { if (ProgramElement::kVar_Kind == p->fKind) { const VarDeclarations* decls = (const VarDeclarations*) p.get(); - for (const Variable* var : decls->fVars) { - if ((var->fModifiers.fFlags & Modifiers::kUniform_Flag) && - var->fType.kind() != Type::kSampler_Kind) { - uniforms.push_back(var); + for (const auto& raw : decls->fVars) { + VarDeclaration& decl = (VarDeclaration&) *raw; + if ((decl.fVar->fModifiers.fFlags & Modifiers::kUniform_Flag) && + decl.fVar->fType.kind() != Type::kSampler_Kind) { + uniforms.push_back(decl.fVar); } } } |