Don't use structured binding on the PathStroke struct

Change-Id: I6aa2890ac9790c41acf405f7b3f83c402479cdf4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/372160
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/tessellate/GrStrokeHardwareTessellator.cpp b/src/gpu/tessellate/GrStrokeHardwareTessellator.cpp
index 099d83c..8211e8c 100644
--- a/src/gpu/tessellate/GrStrokeHardwareTessellator.cpp
+++ b/src/gpu/tessellate/GrStrokeHardwareTessellator.cpp
@@ -114,7 +114,8 @@
     int capPreallocCount = 8;
     this->allocPatchChunkAtLeast(strokePreallocCount + capPreallocCount);
 
-    for (const auto& [path, stroke] : pathStrokeList) {
+    for (const auto& pathStroke : pathStrokeList) {
+        const SkStrokeRec& stroke = pathStroke.fStroke;
         if (!fStroke || fStroke->getWidth() != stroke.getWidth() ||
             fStroke->getJoin() != stroke.getJoin()) {
             auto tolerances = Tolerances::MakePreTransform(matrixScales.data(), stroke.getWidth());
@@ -127,7 +128,7 @@
         fHasLastControlPoint = false;
         SkDEBUGCODE(fHasCurrentPoint = false;)
         SkPathVerb previousVerb = SkPathVerb::kClose;
-        for (auto [verb, p, w] : SkPathPriv::Iterate(path)) {
+        for (auto [verb, p, w] : SkPathPriv::Iterate(pathStroke.fPath)) {
             switch (verb) {
                 case SkPathVerb::kMove:
                     // "A subpath ... consisting of a single moveto shall not be stroked."
diff --git a/src/gpu/tessellate/GrStrokeIndirectTessellator.cpp b/src/gpu/tessellate/GrStrokeIndirectTessellator.cpp
index cf5e91d..63fc2fb 100644
--- a/src/gpu/tessellate/GrStrokeIndirectTessellator.cpp
+++ b/src/gpu/tessellate/GrStrokeIndirectTessellator.cpp
@@ -468,7 +468,8 @@
 
     float lastStrokeWidth = -1;
     SkPoint lastControlPoint = {0,0};
-    for (const auto& [path, stroke] : pathStrokeList) {
+    for (const auto& pathStroke : pathStrokeList) {
+        const SkStrokeRec& stroke = pathStroke.fStroke;
         SkASSERT(stroke.getWidth() >= 0);  // Otherwise we can't initialize lastStrokeWidth=-1.
         if (stroke.getWidth() != lastStrokeWidth ||
             (stroke.getJoin() == SkPaint::kRound_Join) != counter.isRoundJoin()) {
@@ -478,7 +479,7 @@
         fMaxNumExtraEdgesInJoin = std::max(fMaxNumExtraEdgesInJoin,
                 GrStrokeTessellateShader::NumExtraEdgesInIndirectJoin(stroke.getJoin()));
         // Iterate through each verb in the stroke, counting its resolveLevel(s).
-        GrStrokeIterator iter(path, &stroke, &viewMatrix);
+        GrStrokeIterator iter(pathStroke.fPath, &stroke, &viewMatrix);
         while (iter.next()) {
             using Verb = GrStrokeIterator::Verb;
             Verb verb = iter.verb();
@@ -778,12 +779,13 @@
     int8_t resolveLevel;
 
     // Now write out each instance to its resolveLevel's designated location in the instance buffer.
-    for (const auto& [path, stroke] : pathStrokeList) {
+    for (const auto& pathStroke : pathStrokeList) {
+        const SkStrokeRec& stroke = pathStroke.fStroke;
         bool isRoundJoin = (stroke.getJoin() == SkPaint::kRound_Join);
         if (fShaderFlags & ShaderFlags::kDynamicStroke) {
             binningWriter.updateDynamicStroke(stroke);
         }
-        GrStrokeIterator iter(path, &stroke, &viewMatrix);
+        GrStrokeIterator iter(pathStroke.fPath, &stroke, &viewMatrix);
         bool hasLastControlPoint = false;
         while (iter.next()) {
             using Verb = GrStrokeIterator::Verb;