aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sksl/SkSLCPPCodeGenerator.cpp
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2017-11-07 14:42:10 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-11-07 14:42:19 +0000
commit82a62d2d4ef55e53730a4f194a82d4e5da0c4a64 (patch)
tree8cee593eec28052b9f002c537db8356175fa2874 /src/sksl/SkSLCPPCodeGenerator.cpp
parent09eba3cad93d3e7eb0c37e388086b811e4ec1512 (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.cpp62
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);
}
}
}