diff options
Diffstat (limited to 'src/sksl/SkSLMetalCodeGenerator.cpp')
-rw-r--r-- | src/sksl/SkSLMetalCodeGenerator.cpp | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/src/sksl/SkSLMetalCodeGenerator.cpp b/src/sksl/SkSLMetalCodeGenerator.cpp index 713c28a3ed..de6b1d0854 100644 --- a/src/sksl/SkSLMetalCodeGenerator.cpp +++ b/src/sksl/SkSLMetalCodeGenerator.cpp @@ -538,33 +538,34 @@ void MetalCodeGenerator::writeVarInitializer(const Variable& var, const Expressi void MetalCodeGenerator::writeVarDeclarations(const VarDeclarations& decl, bool global) { ASSERT(decl.fVars.size() > 0); bool wroteType = false; - for (const Variable* var : decl.fVars) { - if (var->fModifiers.fFlags & (Modifiers::kIn_Flag | Modifiers::kOut_Flag | - Modifiers::kUniform_Flag)) { + for (const auto& stmt : decl.fVars) { + VarDeclaration& var = (VarDeclaration&) *stmt; + if (var.fVar->fModifiers.fFlags & (Modifiers::kIn_Flag | Modifiers::kOut_Flag | + Modifiers::kUniform_Flag)) { ASSERT(global); continue; } if (wroteType) { this->write(", "); } else { - this->writeModifiers(var->fModifiers, global); + this->writeModifiers(var.fVar->fModifiers, global); this->writeType(decl.fBaseType); this->write(" "); wroteType = true; } - this->write(var->fName); - for (const auto& size : var->fSizes) { + this->write(var.fVar->fName); + for (const auto& size : var.fSizes) { this->write("["); if (size) { this->writeExpression(*size, kTopLevel_Precedence); } this->write("]"); } - if (var->fInitialValue) { + if (var.fValue) { this->write(" = "); - this->writeVarInitializer(*var, *var->fInitialValue); + this->writeVarInitializer(*var.fVar, *var.fValue); } - if (!fFoundImageDecl && var->fType == *fContext.fImage2D_Type) { + if (!fFoundImageDecl && var.fVar->fType == *fContext.fImage2D_Type) { if (fProgram.fSettings.fCaps->imageLoadStoreExtensionString()) { fHeader.writeText("#extension "); fHeader.writeText(fProgram.fSettings.fCaps->imageLoadStoreExtensionString()); @@ -732,7 +733,7 @@ void MetalCodeGenerator::writeUniformStruct() { if (!decls.fVars.size()) { continue; } - const Variable& first = *decls.fVars[0]; + const Variable& first = *((VarDeclaration&) *decls.fVars[0]).fVar; if (first.fModifiers.fFlags & Modifiers::kUniform_Flag) { if (-1 == fUniformBuffer) { this->write("struct Uniforms {\n"); @@ -749,8 +750,9 @@ void MetalCodeGenerator::writeUniformStruct() { this->write(" "); this->writeType(first.fType); this->write(" "); - for (const auto& var : decls.fVars) { - this->write(var->fName); + for (const auto& stmt : decls.fVars) { + VarDeclaration& var = (VarDeclaration&) *stmt; + this->write(var.fVar->fName); } this->write(";\n"); } @@ -772,17 +774,18 @@ void MetalCodeGenerator::writeInputStruct() { if (!decls.fVars.size()) { continue; } - const Variable& first = *decls.fVars[0]; + const Variable& first = *((VarDeclaration&) *decls.fVars[0]).fVar; if (first.fModifiers.fFlags & Modifiers::kIn_Flag && -1 == first.fModifiers.fLayout.fBuiltin) { this->write(" "); this->writeType(first.fType); this->write(" "); - for (const Variable* var : decls.fVars) { - this->write(var->fName); - if (-1 != var->fModifiers.fLayout.fLocation) { + for (const auto& stmt : decls.fVars) { + VarDeclaration& var = (VarDeclaration&) *stmt; + this->write(var.fVar->fName); + if (-1 != var.fVar->fModifiers.fLayout.fLocation) { this->write(" [[attribute(" + - to_string(var->fModifiers.fLayout.fLocation) + ")]]"); + to_string(var.fVar->fModifiers.fLayout.fLocation) + ")]]"); } } this->write(";\n"); @@ -801,14 +804,15 @@ void MetalCodeGenerator::writeOutputStruct() { if (!decls.fVars.size()) { continue; } - const Variable& first = *decls.fVars[0]; + const Variable& first = *((VarDeclaration&) *decls.fVars[0]).fVar; if (first.fModifiers.fFlags & Modifiers::kOut_Flag && -1 == first.fModifiers.fLayout.fBuiltin) { this->write(" "); this->writeType(first.fType); this->write(" "); - for (const Variable* var : decls.fVars) { - this->write(var->fName); + for (const auto& stmt : decls.fVars) { + VarDeclaration& var = (VarDeclaration&) *stmt; + this->write(var.fVar->fName); } this->write(";\n"); } @@ -823,7 +827,7 @@ void MetalCodeGenerator::writeProgramElement(const ProgramElement& e) { case ProgramElement::kVar_Kind: { VarDeclarations& decl = (VarDeclarations&) e; if (decl.fVars.size() > 0) { - int builtin = decl.fVars[0]->fModifiers.fLayout.fBuiltin; + int builtin = ((VarDeclaration&) *decl.fVars[0]).fVar->fModifiers.fLayout.fBuiltin; if (-1 == builtin) { // normal var this->writeVarDeclarations(decl, true); |