void GrOpFlushState::recordDraw( sk_sp<const GrGeometryProcessor> gp, const GrMesh meshes[], int meshCnt, const GrPipeline::FixedDynamicState* fixedDynamicState, const GrPipeline::DynamicStateArrays* dynamicStateArrays) { SkASSERT(fOpArgs); SkASSERT(fOpArgs->fOp); bool firstDraw = fDraws.begin() == fDraws.end(); auto& draw = fDraws.append(&fArena); GrDeferredUploadToken token = fTokenTracker->issueDrawToken(); if (fixedDynamicState && fixedDynamicState->fPrimitiveProcessorTextures) { for (int i = 0; i < gp->numTextureSamplers(); ++i) { fixedDynamicState->fPrimitiveProcessorTextures[i]->addPendingRead(); } } if (dynamicStateArrays && dynamicStateArrays->fPrimitiveProcessorTextures) { int n = gp->numTextureSamplers() * meshCnt; for (int i = 0; i < n; ++i) { dynamicStateArrays->fPrimitiveProcessorTextures[i]->addPendingRead(); } } draw.fGeometryProcessor = std::move(gp); draw.fFixedDynamicState = fixedDynamicState; draw.fDynamicStateArrays = dynamicStateArrays; draw.fMeshes = meshes; draw.fMeshCnt = meshCnt; draw.fOp = fOpArgs->fOp; if (firstDraw) { fBaseDrawToken = token; } }