Remove GrMesh::setVertexData
Fuses the relevant functionality into the set() calls.
Change-Id: I3a764219425c35967942366c60a6b9ee6ec48e11
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/276836
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/GrMesh.h b/src/gpu/GrMesh.h
index c47b986..5104ec9 100644
--- a/src/gpu/GrMesh.h
+++ b/src/gpu/GrMesh.h
@@ -23,17 +23,16 @@
class GrMesh {
public:
const GrBuffer* indexBuffer() const { return fIndexBuffer.get(); }
- GrPrimitiveRestart primitiveRestart() const { return fPrimitiveRestart; }
const GrBuffer* vertexBuffer() const { return fVertexBuffer.get(); }
- void setNonIndexedNonInstanced(int vertexCount);
-
+ void set(sk_sp<const GrBuffer> vertexBuffer, int vertexCount, int baseVertex);
void setIndexed(sk_sp<const GrBuffer> indexBuffer, int indexCount, int baseIndex,
- uint16_t minIndexValue, uint16_t maxIndexValue, GrPrimitiveRestart);
- void setIndexedPatterned(sk_sp<const GrBuffer> indexBuffer, int indexCount, int vertexCount,
- int patternRepeatCount, int maxPatternRepetitionsInIndexBuffer);
-
- void setVertexData(sk_sp<const GrBuffer> vertexBuffer, int baseVertex = 0);
+ uint16_t minIndexValue, uint16_t maxIndexValue, GrPrimitiveRestart,
+ sk_sp<const GrBuffer> vertexBuffer, int baseVertex);
+ void setIndexedPatterned(sk_sp<const GrBuffer> indexBuffer, int indexCount,
+ int patternRepeatCount, int maxPatternRepetitionsInIndexBuffer,
+ sk_sp<const GrBuffer> vertexBuffer, int patternVertexCount,
+ int baseVertex);
void draw(GrOpsRenderPass*) const;
@@ -54,20 +53,24 @@
SkDEBUGCODE(bool fIsInitialized = false;)
};
-inline void GrMesh::setNonIndexedNonInstanced(int vertexCount) {
+inline void GrMesh::set(sk_sp<const GrBuffer> vertexBuffer, int vertexCount, int baseVertex) {
+ SkASSERT(baseVertex >= 0);
fIndexBuffer.reset();
+ fVertexBuffer = std::move(vertexBuffer);
fVertexCount = vertexCount;
- fPrimitiveRestart = GrPrimitiveRestart::kNo;
+ fBaseVertex = baseVertex;
SkDEBUGCODE(fIsInitialized = true;)
}
inline void GrMesh::setIndexed(sk_sp<const GrBuffer> indexBuffer, int indexCount, int baseIndex,
uint16_t minIndexValue, uint16_t maxIndexValue,
- GrPrimitiveRestart primitiveRestart) {
+ GrPrimitiveRestart primitiveRestart,
+ sk_sp<const GrBuffer> vertexBuffer, int baseVertex) {
SkASSERT(indexBuffer);
SkASSERT(indexCount >= 1);
SkASSERT(baseIndex >= 0);
SkASSERT(maxIndexValue >= minIndexValue);
+ SkASSERT(baseVertex >= 0);
fIndexBuffer = std::move(indexBuffer);
fIndexCount = indexCount;
fPatternRepeatCount = 0;
@@ -75,30 +78,31 @@
fMinIndexValue = minIndexValue;
fMaxIndexValue = maxIndexValue;
fPrimitiveRestart = primitiveRestart;
+ fVertexBuffer = std::move(vertexBuffer);
+ fBaseVertex = baseVertex;
SkDEBUGCODE(fIsInitialized = true;)
}
inline void GrMesh::setIndexedPatterned(sk_sp<const GrBuffer> indexBuffer, int indexCount,
- int vertexCount, int patternRepeatCount,
- int maxPatternRepetitionsInIndexBuffer) {
+ int patternRepeatCount,
+ int maxPatternRepetitionsInIndexBuffer,
+ sk_sp<const GrBuffer> vertexBuffer,
+ int patternVertexCount, int baseVertex) {
SkASSERT(indexBuffer);
SkASSERT(indexCount >= 1);
- SkASSERT(vertexCount >= 1);
+ SkASSERT(patternVertexCount >= 1);
SkASSERT(patternRepeatCount >= 1);
SkASSERT(maxPatternRepetitionsInIndexBuffer >= 1);
+ SkASSERT(baseVertex >= 0);
fIndexBuffer = std::move(indexBuffer);
fIndexCount = indexCount;
fPatternRepeatCount = patternRepeatCount;
- fVertexCount = vertexCount;
+ fVertexCount = patternVertexCount;
fMaxPatternRepetitionsInIndexBuffer = maxPatternRepetitionsInIndexBuffer;
fPrimitiveRestart = GrPrimitiveRestart::kNo;
- SkDEBUGCODE(fIsInitialized = true;)
-}
-
-inline void GrMesh::setVertexData(sk_sp<const GrBuffer> vertexBuffer, int baseVertex) {
- SkASSERT(baseVertex >= 0);
fVertexBuffer = std::move(vertexBuffer);
fBaseVertex = baseVertex;
+ SkDEBUGCODE(fIsInitialized = true;)
}
inline void GrMesh::draw(GrOpsRenderPass* opsRenderPass) const {
@@ -109,7 +113,7 @@
opsRenderPass->draw(fVertexCount, fBaseVertex);
} else {
opsRenderPass->bindBuffers(fIndexBuffer.get(), nullptr, fVertexBuffer.get(),
- this->primitiveRestart());
+ fPrimitiveRestart);
if (0 == fPatternRepeatCount) {
opsRenderPass->drawIndexed(fIndexCount, fBaseIndex, fMinIndexValue, fMaxIndexValue,
fBaseVertex);
diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp
index 0048d84..76724ff 100644
--- a/src/gpu/ops/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp
@@ -837,8 +837,8 @@
for (int j = 0; j < draws.count(); ++j) {
const Draw& draw = draws[j];
meshes[j].setIndexed(indexBuffer, draw.fIndexCnt, firstIndex, 0,
- draw.fVertexCnt - 1, GrPrimitiveRestart::kNo);
- meshes[j].setVertexData(vertexBuffer, firstVertex);
+ draw.fVertexCnt - 1, GrPrimitiveRestart::kNo, vertexBuffer,
+ firstVertex);
firstIndex += draw.fIndexCnt;
firstVertex += draw.fVertexCnt;
}
diff --git a/src/gpu/ops/GrAAHairLinePathRenderer.cpp b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
index 020dbba..7e98529 100644
--- a/src/gpu/ops/GrAAHairLinePathRenderer.cpp
+++ b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
@@ -1106,9 +1106,9 @@
geometryProcessorLocalM);
GrMesh* mesh = target->allocMesh();
- mesh->setIndexedPatterned(quadsIndexBuffer, kIdxsPerQuad, kQuadNumVertices, quadCount,
- kQuadsNumInIdxBuffer);
- mesh->setVertexData(vertexBuffer, firstVertex);
+ mesh->setIndexedPatterned(quadsIndexBuffer, kIdxsPerQuad, quadCount,
+ kQuadsNumInIdxBuffer, vertexBuffer, kQuadNumVertices,
+ firstVertex);
target->recordDraw(quadGP, mesh, 1, GrPrimitiveType::kTriangles);
firstVertex += quadCount * kQuadNumVertices;
}
@@ -1119,9 +1119,9 @@
geometryProcessorLocalM);
GrMesh* mesh = target->allocMesh();
- mesh->setIndexedPatterned(std::move(quadsIndexBuffer), kIdxsPerQuad, kQuadNumVertices,
- conicCount, kQuadsNumInIdxBuffer);
- mesh->setVertexData(std::move(vertexBuffer), firstVertex);
+ mesh->setIndexedPatterned(std::move(quadsIndexBuffer), kIdxsPerQuad, conicCount,
+ kQuadsNumInIdxBuffer, std::move(vertexBuffer),
+ kQuadNumVertices, firstVertex);
target->recordDraw(conicGP, mesh, 1, GrPrimitiveType::kTriangles);
}
}
diff --git a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
index 40332ba..2581fc7b 100644
--- a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
@@ -251,8 +251,7 @@
memcpy(idxs, indices, indexCount * sizeof(uint16_t));
GrMesh* mesh = target->allocMesh();
mesh->setIndexed(std::move(indexBuffer), indexCount, firstIndex, 0, vertexCount - 1,
- GrPrimitiveRestart::kNo);
- mesh->setVertexData(std::move(vertexBuffer), firstVertex);
+ GrPrimitiveRestart::kNo, std::move(vertexBuffer), firstVertex);
fMeshes.push_back(mesh);
}
diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp
index 594d68c..b40bd0d 100644
--- a/src/gpu/ops/GrAtlasTextOp.cpp
+++ b/src/gpu/ops/GrAtlasTextOp.cpp
@@ -512,9 +512,9 @@
}
int maxGlyphsPerDraw = static_cast<int>(flushInfo->fIndexBuffer->size() / sizeof(uint16_t) / 6);
GrMesh* mesh = target->allocMesh();
- mesh->setIndexedPatterned(flushInfo->fIndexBuffer, kIndicesPerGlyph, kVerticesPerGlyph,
- flushInfo->fGlyphsToFlush, maxGlyphsPerDraw);
- mesh->setVertexData(flushInfo->fVertexBuffer, flushInfo->fVertexOffset);
+ mesh->setIndexedPatterned(flushInfo->fIndexBuffer, kIndicesPerGlyph, flushInfo->fGlyphsToFlush,
+ maxGlyphsPerDraw, flushInfo->fVertexBuffer, kVerticesPerGlyph,
+ flushInfo->fVertexOffset);
target->recordDraw(flushInfo->fGeometryProcessor, mesh, 1, flushInfo->fFixedDynamicState,
nullptr, GrPrimitiveType::kTriangles);
flushInfo->fVertexOffset += kVerticesPerGlyph * flushInfo->fGlyphsToFlush;
diff --git a/src/gpu/ops/GrDefaultPathRenderer.cpp b/src/gpu/ops/GrDefaultPathRenderer.cpp
index 65a66e4..0b676c2 100644
--- a/src/gpu/ops/GrDefaultPathRenderer.cpp
+++ b/src/gpu/ops/GrDefaultPathRenderer.cpp
@@ -274,12 +274,12 @@
if (this->isIndexed() ? SkToBool(indexCount) : SkToBool(vertexCount)) {
mesh = fTarget->allocMesh();
if (!this->isIndexed()) {
- mesh->setNonIndexedNonInstanced(vertexCount);
+ mesh->set(std::move(fVertexBuffer), vertexCount, fFirstVertex);
} else {
mesh->setIndexed(std::move(fIndexBuffer), indexCount, fFirstIndex, 0,
- vertexCount - 1, GrPrimitiveRestart::kNo);
+ vertexCount - 1, GrPrimitiveRestart::kNo, std::move(fVertexBuffer),
+ fFirstVertex);
}
- mesh->setVertexData(std::move(fVertexBuffer), fFirstVertex);
}
fTarget->putBackIndices((size_t)(fIndicesInChunk - indexCount));
diff --git a/src/gpu/ops/GrDrawVerticesOp.cpp b/src/gpu/ops/GrDrawVerticesOp.cpp
index c200367..6adae7b 100644
--- a/src/gpu/ops/GrDrawVerticesOp.cpp
+++ b/src/gpu/ops/GrDrawVerticesOp.cpp
@@ -342,11 +342,10 @@
fMesh = target->allocMesh();
if (this->isIndexed()) {
fMesh->setIndexed(std::move(indexBuffer), fIndexCount, firstIndex, 0, fVertexCount - 1,
- GrPrimitiveRestart::kNo);
+ GrPrimitiveRestart::kNo, std::move(vertexBuffer), firstVertex);
} else {
- fMesh->setNonIndexedNonInstanced(fVertexCount);
+ fMesh->set(std::move(vertexBuffer), fVertexCount, firstVertex);
}
- fMesh->setVertexData(std::move(vertexBuffer), firstVertex);
}
void DrawVerticesOp::onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) {
diff --git a/src/gpu/ops/GrMeshDrawOp.cpp b/src/gpu/ops/GrMeshDrawOp.cpp
index 0cdc857..c66166f 100644
--- a/src/gpu/ops/GrMeshDrawOp.cpp
+++ b/src/gpu/ops/GrMeshDrawOp.cpp
@@ -73,9 +73,9 @@
SkASSERT(maxRepetitions ==
static_cast<int>(indexBuffer->size() / (sizeof(uint16_t) * indicesPerRepetition)));
- fMesh->setIndexedPatterned(std::move(indexBuffer), indicesPerRepetition, verticesPerRepetition,
- repeatCount, maxRepetitions);
- fMesh->setVertexData(std::move(vertexBuffer), firstVertex);
+ fMesh->setIndexedPatterned(std::move(indexBuffer), indicesPerRepetition, repeatCount,
+ maxRepetitions, std::move(vertexBuffer), verticesPerRepetition,
+ firstVertex);
}
void GrMeshDrawOp::PatternHelper::recordDraw(Target* target, const GrGeometryProcessor* gp) const {
diff --git a/src/gpu/ops/GrOvalOpFactory.cpp b/src/gpu/ops/GrOvalOpFactory.cpp
index 7405dda..1fb885b 100644
--- a/src/gpu/ops/GrOvalOpFactory.cpp
+++ b/src/gpu/ops/GrOvalOpFactory.cpp
@@ -1420,8 +1420,7 @@
fMesh = target->allocMesh();
fMesh->setIndexed(std::move(indexBuffer), fIndexCount, firstIndex, 0, fVertCount - 1,
- GrPrimitiveRestart::kNo);
- fMesh->setVertexData(std::move(vertexBuffer), firstVertex);
+ GrPrimitiveRestart::kNo, std::move(vertexBuffer), firstVertex);
}
void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override {
@@ -1743,8 +1742,7 @@
fMesh = target->allocMesh();
fMesh->setIndexed(std::move(indexBuffer), fIndexCount, firstIndex, 0, fVertCount - 1,
- GrPrimitiveRestart::kNo);
- fMesh->setVertexData(std::move(vertexBuffer), firstVertex);
+ GrPrimitiveRestart::kNo, std::move(vertexBuffer), firstVertex);
}
void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override {
@@ -2755,8 +2753,7 @@
fMesh = target->allocMesh();
fMesh->setIndexed(std::move(indexBuffer), fIndexCount, firstIndex, 0, fVertCount - 1,
- GrPrimitiveRestart::kNo);
- fMesh->setVertexData(std::move(vertexBuffer), firstVertex);
+ GrPrimitiveRestart::kNo, std::move(vertexBuffer), firstVertex);
}
void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override {
diff --git a/src/gpu/ops/GrQuadPerEdgeAA.cpp b/src/gpu/ops/GrQuadPerEdgeAA.cpp
index ee2a694..42162f8 100644
--- a/src/gpu/ops/GrQuadPerEdgeAA.cpp
+++ b/src/gpu/ops/GrQuadPerEdgeAA.cpp
@@ -400,11 +400,9 @@
if (spec.indexBufferOption() == IndexBufferOption::kTriStrips) {
SkASSERT(!indexBuffer);
-
- mesh->setNonIndexedNonInstanced(4);
int offset = absVertBufferOffset +
runningQuadCount * GrResourceProvider::NumVertsPerNonAAQuad();
- mesh->setVertexData(std::move(vertexBuffer), offset);
+ mesh->set(std::move(vertexBuffer), 4, offset);
return;
}
@@ -434,9 +432,8 @@
// preferred.
int offset = absVertBufferOffset + runningQuadCount * numVertsPerQuad;
- mesh->setIndexedPatterned(std::move(indexBuffer), numIndicesPerQuad,
- numVertsPerQuad, quadsInDraw, maxNumQuads);
- mesh->setVertexData(std::move(vertexBuffer), offset);
+ mesh->setIndexedPatterned(std::move(indexBuffer), numIndicesPerQuad, quadsInDraw,
+ maxNumQuads, std::move(vertexBuffer), numVertsPerQuad, offset);
} else {
int baseIndex = runningQuadCount * numIndicesPerQuad;
int numIndicesToDraw = quadsInDraw * numIndicesPerQuad;
@@ -445,8 +442,8 @@
int maxVertex = (runningQuadCount + quadsInDraw) * numVertsPerQuad;
mesh->setIndexed(std::move(indexBuffer), numIndicesToDraw,
- baseIndex, minVertex, maxVertex, GrPrimitiveRestart::kNo);
- mesh->setVertexData(std::move(vertexBuffer), absVertBufferOffset);
+ baseIndex, minVertex, maxVertex, GrPrimitiveRestart::kNo,
+ std::move(vertexBuffer), absVertBufferOffset);
}
}
diff --git a/src/gpu/ops/GrShadowRRectOp.cpp b/src/gpu/ops/GrShadowRRectOp.cpp
index cdc8eda..119addd 100644
--- a/src/gpu/ops/GrShadowRRectOp.cpp
+++ b/src/gpu/ops/GrShadowRRectOp.cpp
@@ -616,8 +616,7 @@
fMesh = target->allocMesh();
fMesh->setIndexed(std::move(indexBuffer), fIndexCount, firstIndex, 0, fVertCount - 1,
- GrPrimitiveRestart::kNo);
- fMesh->setVertexData(std::move(vertexBuffer), firstVertex);
+ GrPrimitiveRestart::kNo, std::move(vertexBuffer), firstVertex);
}
void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override {
diff --git a/src/gpu/ops/GrSmallPathRenderer.cpp b/src/gpu/ops/GrSmallPathRenderer.cpp
index 2dbbf37..d3d4df6 100644
--- a/src/gpu/ops/GrSmallPathRenderer.cpp
+++ b/src/gpu/ops/GrSmallPathRenderer.cpp
@@ -820,10 +820,11 @@
GrMesh* mesh = target->allocMesh();
mesh->setIndexedPatterned(flushInfo->fIndexBuffer,
GrResourceProvider::NumIndicesPerNonAAQuad(),
- GrResourceProvider::NumVertsPerNonAAQuad(),
flushInfo->fInstancesToFlush,
- GrResourceProvider::MaxNumNonAAQuads());
- mesh->setVertexData(flushInfo->fVertexBuffer, flushInfo->fVertexOffset);
+ GrResourceProvider::MaxNumNonAAQuads(),
+ flushInfo->fVertexBuffer,
+ GrResourceProvider::NumVertsPerNonAAQuad(),
+ flushInfo->fVertexOffset);
target->recordDraw(flushInfo->fGeometryProcessor, mesh, 1,
flushInfo->fFixedDynamicState, nullptr, GrPrimitiveType::kTriangles);
flushInfo->fVertexOffset += GrResourceProvider::NumVertsPerNonAAQuad() *
diff --git a/src/gpu/ops/GrStrokeRectOp.cpp b/src/gpu/ops/GrStrokeRectOp.cpp
index 639423e..7bb9d29 100644
--- a/src/gpu/ops/GrStrokeRectOp.cpp
+++ b/src/gpu/ops/GrStrokeRectOp.cpp
@@ -242,8 +242,7 @@
}
fMesh = target->allocMesh();
- fMesh->setNonIndexedNonInstanced(vertexCount);
- fMesh->setVertexData(std::move(vertexBuffer), firstVertex);
+ fMesh->set(std::move(vertexBuffer), vertexCount, firstVertex);
}
void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override {
diff --git a/src/gpu/ops/GrTessellatingPathRenderer.cpp b/src/gpu/ops/GrTessellatingPathRenderer.cpp
index 97cdb87..a39cb00 100644
--- a/src/gpu/ops/GrTessellatingPathRenderer.cpp
+++ b/src/gpu/ops/GrTessellatingPathRenderer.cpp
@@ -382,8 +382,7 @@
void createMesh(Target* target, sk_sp<const GrBuffer> vb, int firstVertex, int count) {
fMesh = target->allocMesh();
- fMesh->setNonIndexedNonInstanced(count);
- fMesh->setVertexData(std::move(vb), firstVertex);
+ fMesh->set(std::move(vb), count, firstVertex);
}
void onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) override {