Change VariableReference::fVariable to a pointer
We will soon be re-targeting variable references, and this is going to
be much easier (and cheaper) than replacing the entire VariableReference
itself.
Change-Id: I8febc44a1c06e99251153f038a4f5f693cd30231
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/319344
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/sksl/SkSLMetalCodeGenerator.cpp b/src/sksl/SkSLMetalCodeGenerator.cpp
index 1ee05a4..07ca379 100644
--- a/src/sksl/SkSLMetalCodeGenerator.cpp
+++ b/src/sksl/SkSLMetalCodeGenerator.cpp
@@ -676,7 +676,7 @@
}
void MetalCodeGenerator::writeVariableReference(const VariableReference& ref) {
- switch (ref.fVariable.fModifiers.fLayout.fBuiltin) {
+ switch (ref.fVariable->fModifiers.fLayout.fBuiltin) {
case SK_FRAGCOLOR_BUILTIN:
this->write("_out->sk_FragColor");
break;
@@ -695,19 +695,19 @@
this->write(fProgram.fSettings.fFlipY ? "_frontFacing" : "(!_frontFacing)");
break;
default:
- if (Variable::kGlobal_Storage == ref.fVariable.fStorage) {
- if (ref.fVariable.fModifiers.fFlags & Modifiers::kIn_Flag) {
+ if (Variable::kGlobal_Storage == ref.fVariable->fStorage) {
+ if (ref.fVariable->fModifiers.fFlags & Modifiers::kIn_Flag) {
this->write("_in.");
- } else if (ref.fVariable.fModifiers.fFlags & Modifiers::kOut_Flag) {
+ } else if (ref.fVariable->fModifiers.fFlags & Modifiers::kOut_Flag) {
this->write("_out->");
- } else if (ref.fVariable.fModifiers.fFlags & Modifiers::kUniform_Flag &&
- ref.fVariable.type().typeKind() != Type::TypeKind::kSampler) {
+ } else if (ref.fVariable->fModifiers.fFlags & Modifiers::kUniform_Flag &&
+ ref.fVariable->type().typeKind() != Type::TypeKind::kSampler) {
this->write("_uniforms.");
} else {
this->write("_globals->");
}
}
- this->writeName(ref.fVariable.fName);
+ this->writeName(ref.fVariable->fName);
}
}
@@ -834,10 +834,9 @@
if (needParens) {
this->write("(");
}
- if (Compiler::IsAssignment(op) &&
- Expression::Kind::kVariableReference == left.kind() &&
- Variable::kParameter_Storage == left.as<VariableReference>().fVariable.fStorage &&
- left.as<VariableReference>().fVariable.fModifiers.fFlags & Modifiers::kOut_Flag) {
+ if (Compiler::IsAssignment(op) && left.is<VariableReference>() &&
+ left.as<VariableReference>().fVariable->fStorage == Variable::kParameter_Storage &&
+ left.as<VariableReference>().fVariable->fModifiers.fFlags & Modifiers::kOut_Flag) {
// writing to an out parameter. Since we have to turn those into pointers, we have to
// dereference it here.
this->write("*");
@@ -1751,15 +1750,15 @@
case Expression::Kind::kVariableReference: {
const VariableReference& v = e->as<VariableReference>();
Requirements result = kNo_Requirements;
- if (v.fVariable.fModifiers.fLayout.fBuiltin == SK_FRAGCOORD_BUILTIN) {
+ if (v.fVariable->fModifiers.fLayout.fBuiltin == SK_FRAGCOORD_BUILTIN) {
result = kGlobals_Requirement | kFragCoord_Requirement;
- } else if (Variable::kGlobal_Storage == v.fVariable.fStorage) {
- if (v.fVariable.fModifiers.fFlags & Modifiers::kIn_Flag) {
+ } else if (Variable::kGlobal_Storage == v.fVariable->fStorage) {
+ if (v.fVariable->fModifiers.fFlags & Modifiers::kIn_Flag) {
result = kInputs_Requirement;
- } else if (v.fVariable.fModifiers.fFlags & Modifiers::kOut_Flag) {
+ } else if (v.fVariable->fModifiers.fFlags & Modifiers::kOut_Flag) {
result = kOutputs_Requirement;
- } else if (v.fVariable.fModifiers.fFlags & Modifiers::kUniform_Flag &&
- v.fVariable.type().typeKind() != Type::TypeKind::kSampler) {
+ } else if (v.fVariable->fModifiers.fFlags & Modifiers::kUniform_Flag &&
+ v.fVariable->type().typeKind() != Type::TypeKind::kSampler) {
result = kUniforms_Requirement;
} else {
result = kGlobals_Requirement;