Convert GrBuffer owners to sk_sp
Change-Id: Id49d775c30f01f4de05f385227c5ed5d90d6839e
Reviewed-on: https://skia-review.googlesource.com/c/187920
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/ccpr/GrCCCoverageProcessor.h b/src/gpu/ccpr/GrCCCoverageProcessor.h
index 7650a8c..5871fa1 100644
--- a/src/gpu/ccpr/GrCCCoverageProcessor.h
+++ b/src/gpu/ccpr/GrCCCoverageProcessor.h
@@ -100,12 +100,12 @@
// Appends a GrMesh that will draw the provided instances. The instanceBuffer must be an array
// of either TriPointInstance or QuadPointInstance, depending on this processor's RendererPass,
// with coordinates in the desired shape's final atlas-space position.
- void appendMesh(GrBuffer* instanceBuffer, int instanceCount, int baseInstance,
+ void appendMesh(sk_sp<GrBuffer> instanceBuffer, int instanceCount, int baseInstance,
SkTArray<GrMesh>* out) const {
if (Impl::kGeometryShader == fImpl) {
- this->appendGSMesh(instanceBuffer, instanceCount, baseInstance, out);
+ this->appendGSMesh(std::move(instanceBuffer), instanceCount, baseInstance, out);
} else {
- this->appendVSMesh(instanceBuffer, instanceCount, baseInstance, out);
+ this->appendVSMesh(std::move(instanceBuffer), instanceCount, baseInstance, out);
}
}
@@ -250,9 +250,9 @@
void initGS();
void initVS(GrResourceProvider*);
- void appendGSMesh(GrBuffer* instanceBuffer, int instanceCount, int baseInstance,
+ void appendGSMesh(sk_sp<const GrBuffer> instanceBuffer, int instanceCount, int baseInstance,
SkTArray<GrMesh>* out) const;
- void appendVSMesh(GrBuffer* instanceBuffer, int instanceCount, int baseInstance,
+ void appendVSMesh(sk_sp<const GrBuffer> instanceBuffer, int instanceCount, int baseInstance,
SkTArray<GrMesh>* out) const;
GrGLSLPrimitiveProcessor* createGSImpl(std::unique_ptr<Shader>) const;
diff --git a/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp b/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp
index 1d79d00..e3fbb74 100644
--- a/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp
+++ b/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp
@@ -396,7 +396,7 @@
this->setWillUseGeoShader();
}
-void GrCCCoverageProcessor::appendGSMesh(GrBuffer* instanceBuffer, int instanceCount,
+void GrCCCoverageProcessor::appendGSMesh(sk_sp<const GrBuffer> instanceBuffer, int instanceCount,
int baseInstance, SkTArray<GrMesh>* out) const {
// GSImpl doesn't actually make instanced draw calls. Instead, we feed transposed x,y point
// values to the GPU in a regular vertex array and draw kLines (see initGS). Then, each vertex
@@ -405,7 +405,7 @@
SkASSERT(Impl::kGeometryShader == fImpl);
GrMesh& mesh = out->emplace_back(GrPrimitiveType::kLines);
mesh.setNonIndexedNonInstanced(instanceCount * 2);
- mesh.setVertexData(instanceBuffer, baseInstance * 2);
+ mesh.setVertexData(std::move(instanceBuffer), baseInstance * 2);
}
GrGLSLPrimitiveProcessor* GrCCCoverageProcessor::createGSImpl(std::unique_ptr<Shader> shadr) const {
diff --git a/src/gpu/ccpr/GrCCCoverageProcessor_VSImpl.cpp b/src/gpu/ccpr/GrCCCoverageProcessor_VSImpl.cpp
index 1588a51..59fe583 100644
--- a/src/gpu/ccpr/GrCCCoverageProcessor_VSImpl.cpp
+++ b/src/gpu/ccpr/GrCCCoverageProcessor_VSImpl.cpp
@@ -527,14 +527,14 @@
}
}
-void GrCCCoverageProcessor::appendVSMesh(GrBuffer* instanceBuffer, int instanceCount,
+void GrCCCoverageProcessor::appendVSMesh(sk_sp<const GrBuffer> instanceBuffer, int instanceCount,
int baseInstance, SkTArray<GrMesh>* out) const {
SkASSERT(Impl::kVertexShader == fImpl);
GrMesh& mesh = out->emplace_back(fVSTriangleType);
auto primitiveRestart = GrPrimitiveRestart(GrPrimitiveType::kTriangleStrip == fVSTriangleType);
- mesh.setIndexedInstanced(fVSIndexBuffer.get(), fVSNumIndicesPerInstance, instanceBuffer,
+ mesh.setIndexedInstanced(fVSIndexBuffer, fVSNumIndicesPerInstance, std::move(instanceBuffer),
instanceCount, baseInstance, primitiveRestart);
- mesh.setVertexData(fVSVertexBuffer.get(), 0);
+ mesh.setVertexData(fVSVertexBuffer, 0);
}
GrGLSLPrimitiveProcessor* GrCCCoverageProcessor::createVSImpl(std::unique_ptr<Shader> shadr) const {
diff --git a/src/gpu/ccpr/GrCCFiller.cpp b/src/gpu/ccpr/GrCCFiller.cpp
index 1460077..486a1a1 100644
--- a/src/gpu/ccpr/GrCCFiller.cpp
+++ b/src/gpu/ccpr/GrCCFiller.cpp
@@ -519,7 +519,7 @@
SkASSERT(instanceCount > 0);
int baseInstance = fBaseInstances[(int)GrScissorTest::kDisabled].*instanceType +
previousBatch.fEndNonScissorIndices.*instanceType;
- proc.appendMesh(fInstanceBuffer.get(), instanceCount, baseInstance, &fMeshesScratchBuffer);
+ proc.appendMesh(fInstanceBuffer, instanceCount, baseInstance, &fMeshesScratchBuffer);
fScissorRectScratchBuffer.push_back().setXYWH(0, 0, drawBounds.width(),
drawBounds.height());
SkDEBUGCODE(totalInstanceCount += instanceCount);
@@ -537,8 +537,8 @@
continue;
}
SkASSERT(instanceCount > 0);
- proc.appendMesh(fInstanceBuffer.get(), instanceCount,
- baseScissorInstance + startIndex, &fMeshesScratchBuffer);
+ proc.appendMesh(fInstanceBuffer, instanceCount, baseScissorInstance + startIndex,
+ &fMeshesScratchBuffer);
fScissorRectScratchBuffer.push_back() = scissorSubBatch.fScissor;
SkDEBUGCODE(totalInstanceCount += instanceCount);
}
diff --git a/src/gpu/ccpr/GrCCPathProcessor.cpp b/src/gpu/ccpr/GrCCPathProcessor.cpp
index 8ea06bd..81c57dd 100644
--- a/src/gpu/ccpr/GrCCPathProcessor.cpp
+++ b/src/gpu/ccpr/GrCCPathProcessor.cpp
@@ -130,10 +130,10 @@
GrMesh mesh(primitiveType);
auto enablePrimitiveRestart = GrPrimitiveRestart(flushState->caps().usePrimitiveRestart());
- mesh.setIndexedInstanced(resources.indexBuffer(), numIndicesPerInstance,
- resources.instanceBuffer(), endInstance - baseInstance, baseInstance,
- enablePrimitiveRestart);
- mesh.setVertexData(resources.vertexBuffer());
+ mesh.setIndexedInstanced(resources.refIndexBuffer(), numIndicesPerInstance,
+ resources.refInstanceBuffer(), endInstance - baseInstance,
+ baseInstance, enablePrimitiveRestart);
+ mesh.setVertexData(resources.refVertexBuffer());
flushState->rtCommandBuffer()->draw(*this, pipeline, fixedDynamicState, nullptr, &mesh, 1,
bounds);
diff --git a/src/gpu/ccpr/GrCCPerFlushResources.h b/src/gpu/ccpr/GrCCPerFlushResources.h
index f363c16..fc69cee 100644
--- a/src/gpu/ccpr/GrCCPerFlushResources.h
+++ b/src/gpu/ccpr/GrCCPerFlushResources.h
@@ -105,9 +105,18 @@
// Accessors used by draw calls, once the resources have been finalized.
const GrCCFiller& filler() const { SkASSERT(!this->isMapped()); return fFiller; }
const GrCCStroker& stroker() const { SkASSERT(!this->isMapped()); return fStroker; }
- const GrBuffer* indexBuffer() const { SkASSERT(!this->isMapped()); return fIndexBuffer.get(); }
- const GrBuffer* vertexBuffer() const { SkASSERT(!this->isMapped()); return fVertexBuffer.get();}
- GrBuffer* instanceBuffer() const { SkASSERT(!this->isMapped()); return fInstanceBuffer.get(); }
+ sk_sp<const GrBuffer> refIndexBuffer() const {
+ SkASSERT(!this->isMapped());
+ return fIndexBuffer;
+ }
+ sk_sp<const GrBuffer> refVertexBuffer() const {
+ SkASSERT(!this->isMapped());
+ return fVertexBuffer;
+ }
+ sk_sp<const GrBuffer> refInstanceBuffer() const {
+ SkASSERT(!this->isMapped());
+ return fInstanceBuffer;
+ }
private:
void recordCopyPathInstance(const GrCCPathCacheEntry&, const SkIVector& newAtlasOffset,
diff --git a/src/gpu/ccpr/GrCCStroker.cpp b/src/gpu/ccpr/GrCCStroker.cpp
index f836774..a4905b3 100644
--- a/src/gpu/ccpr/GrCCStroker.cpp
+++ b/src/gpu/ccpr/GrCCStroker.cpp
@@ -735,7 +735,7 @@
SkASSERT(endIdx >= startIdx);
if (int instanceCount = endIdx - startIdx) {
GrMesh& mesh = fMeshesBuffer.emplace_back(GrPrimitiveType::kTriangleStrip);
- mesh.setInstanced(fInstanceBuffer.get(), instanceCount, baseInstance + startIdx,
+ mesh.setInstanced(fInstanceBuffer, instanceCount, baseInstance + startIdx,
numStripVertices);
fScissorsBuffer.push_back(drawBounds);
}
@@ -749,7 +749,7 @@
SkASSERT(endIdx >= startIdx);
if (int instanceCount = endIdx - startIdx) {
GrMesh& mesh = fMeshesBuffer.emplace_back(GrPrimitiveType::kTriangleStrip);
- mesh.setInstanced(fInstanceBuffer.get(), instanceCount, baseInstance + startIdx,
+ mesh.setInstanced(fInstanceBuffer, instanceCount, baseInstance + startIdx,
numStripVertices);
fScissorsBuffer.push_back(subBatch.fScissor);
startIdx = endIdx;
@@ -784,7 +784,7 @@
int endIdx = batch.fNonScissorEndInstances->*InstanceType;
SkASSERT(endIdx >= startIdx);
if (int instanceCount = endIdx - startIdx) {
- processor.appendMesh(fInstanceBuffer.get(), instanceCount, baseInstance + startIdx,
+ processor.appendMesh(fInstanceBuffer, instanceCount, baseInstance + startIdx,
&fMeshesBuffer);
fScissorsBuffer.push_back(drawBounds);
}
@@ -797,7 +797,7 @@
endIdx = subBatch.fEndInstances->*InstanceType;
SkASSERT(endIdx >= startIdx);
if (int instanceCount = endIdx - startIdx) {
- processor.appendMesh(fInstanceBuffer.get(), instanceCount, baseInstance + startIdx,
+ processor.appendMesh(fInstanceBuffer, instanceCount, baseInstance + startIdx,
&fMeshesBuffer);
fScissorsBuffer.push_back(subBatch.fScissor);
startIdx = endIdx;