aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/ops/GrSmallPathRenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/ops/GrSmallPathRenderer.cpp')
-rw-r--r--src/gpu/ops/GrSmallPathRenderer.cpp49
1 files changed, 25 insertions, 24 deletions
diff --git a/src/gpu/ops/GrSmallPathRenderer.cpp b/src/gpu/ops/GrSmallPathRenderer.cpp
index 3e7da52230..c4201d7be2 100644
--- a/src/gpu/ops/GrSmallPathRenderer.cpp
+++ b/src/gpu/ops/GrSmallPathRenderer.cpp
@@ -181,7 +181,7 @@ public:
fHelper.visitProxies(func);
const sk_sp<GrTextureProxy>* proxies = fAtlas->getProxies();
- for (uint32_t i = 0; i < fAtlas->pageCount(); ++i) {
+ for (uint32_t i = 0; i < fAtlas->numActivePages(); ++i) {
SkASSERT(proxies[i]);
func(proxies[i].get());
}
@@ -222,11 +222,6 @@ private:
FlushInfo flushInfo;
flushInfo.fPipeline = fHelper.makePipeline(target);
// Setup GrGeometryProcessor
- GrDrawOpAtlas* atlas = fAtlas;
- uint32_t atlasPageCount = atlas->pageCount();
- if (!atlasPageCount) {
- return;
- }
const SkMatrix& ctm = fShapes[0].fViewMatrix;
if (fUsesDistanceField) {
uint32_t flags = 0;
@@ -249,7 +244,7 @@ private:
matrix = &SkMatrix::I();
}
flushInfo.fGeometryProcessor = GrDistanceFieldPathGeoProc::Make(
- *matrix, atlas->getProxies(), GrSamplerState::ClampBilerp(), flags);
+ *matrix, fAtlas->getProxies(), GrSamplerState::ClampBilerp(), flags);
} else {
SkMatrix invert;
if (fHelper.usesLocalCoords()) {
@@ -260,7 +255,7 @@ private:
}
flushInfo.fGeometryProcessor = GrBitmapTextGeoProc::Make(
- this->color(), atlas->getProxies(), GrSamplerState::ClampNearest(),
+ this->color(), fAtlas->getProxies(), GrSamplerState::ClampNearest(),
kA8_GrMaskFormat, invert, fHelper.usesLocalCoords());
}
@@ -335,7 +330,7 @@ private:
// check to see if df path is cached
ShapeData::Key key(args.fShape, SkScalarCeilToInt(desiredDimension));
shapeData = fShapeCache->find(key);
- if (nullptr == shapeData || !atlas->hasID(shapeData->fID)) {
+ if (nullptr == shapeData || !fAtlas->hasID(shapeData->fID)) {
// Remove the stale cache entry
if (shapeData) {
fShapeCache->remove(shapeData->fKey);
@@ -347,7 +342,7 @@ private:
shapeData = new ShapeData;
if (!this->addDFPathToAtlas(target,
&flushInfo,
- atlas,
+ fAtlas,
shapeData,
args.fShape,
SkScalarCeilToInt(desiredDimension),
@@ -360,7 +355,7 @@ private:
// check to see if bitmap path is cached
ShapeData::Key key(args.fShape, args.fViewMatrix);
shapeData = fShapeCache->find(key);
- if (nullptr == shapeData || !atlas->hasID(shapeData->fID)) {
+ if (nullptr == shapeData || !fAtlas->hasID(shapeData->fID)) {
// Remove the stale cache entry
if (shapeData) {
fShapeCache->remove(shapeData->fKey);
@@ -371,7 +366,7 @@ private:
shapeData = new ShapeData;
if (!this->addBMPathToAtlas(target,
&flushInfo,
- atlas,
+ fAtlas,
shapeData,
args.fShape,
args.fViewMatrix)) {
@@ -382,9 +377,9 @@ private:
}
auto uploadTarget = target->deferredUploadTarget();
- atlas->setLastUseToken(shapeData->fID, uploadTarget->tokenTracker()->nextDrawToken());
+ fAtlas->setLastUseToken(shapeData->fID, uploadTarget->tokenTracker()->nextDrawToken());
- this->writePathVertices(atlas,
+ this->writePathVertices(fAtlas,
offset,
args.fColor,
vertexStride,
@@ -400,6 +395,8 @@ private:
bool addDFPathToAtlas(GrMeshDrawOp::Target* target, FlushInfo* flushInfo,
GrDrawOpAtlas* atlas, ShapeData* shapeData, const GrShape& shape,
uint32_t dimension, SkScalar scale) const {
+ auto resourceProvider = target->resourceProvider();
+
const SkRect& bounds = shape.bounds();
// generate bounding rect for bitmap draw
@@ -488,10 +485,11 @@ private:
SkIPoint16 atlasLocation;
GrDrawOpAtlas::AtlasID id;
auto uploadTarget = target->deferredUploadTarget();
- if (!atlas->addToAtlas(&id, uploadTarget, width, height, dfStorage.get(), &atlasLocation)) {
+ if (!atlas->addToAtlas(resourceProvider, &id, uploadTarget, width, height,
+ dfStorage.get(), &atlasLocation)) {
this->flush(target, flushInfo);
- if (!atlas->addToAtlas(&id, uploadTarget, width, height, dfStorage.get(),
- &atlasLocation)) {
+ if (!atlas->addToAtlas(resourceProvider, &id, uploadTarget, width, height,
+ dfStorage.get(), &atlasLocation)) {
return false;
}
}
@@ -530,6 +528,8 @@ private:
bool addBMPathToAtlas(GrMeshDrawOp::Target* target, FlushInfo* flushInfo,
GrDrawOpAtlas* atlas, ShapeData* shapeData, const GrShape& shape,
const SkMatrix& ctm) const {
+ auto resourceProvider = target->resourceProvider();
+
const SkRect& bounds = shape.bounds();
if (bounds.isEmpty()) {
return false;
@@ -590,11 +590,11 @@ private:
SkIPoint16 atlasLocation;
GrDrawOpAtlas::AtlasID id;
auto uploadTarget = target->deferredUploadTarget();
- if (!atlas->addToAtlas(&id, uploadTarget, dst.width(), dst.height(), dst.addr(),
- &atlasLocation)) {
+ if (!atlas->addToAtlas(resourceProvider, &id, uploadTarget, dst.width(), dst.height(),
+ dst.addr(), &atlasLocation)) {
this->flush(target, flushInfo);
- if (!atlas->addToAtlas(&id, uploadTarget, dst.width(), dst.height(), dst.addr(),
- &atlasLocation)) {
+ if (!atlas->addToAtlas(resourceProvider, &id, uploadTarget, dst.width(), dst.height(),
+ dst.addr(), &atlasLocation)) {
return false;
}
}
@@ -696,7 +696,7 @@ private:
void flush(GrMeshDrawOp::Target* target, FlushInfo* flushInfo) const {
GrGeometryProcessor* gp = flushInfo->fGeometryProcessor.get();
- if (gp->numTextureSamplers() != (int)fAtlas->pageCount()) {
+ if (gp->numTextureSamplers() != (int)fAtlas->numActivePages()) {
// During preparation the number of atlas pages has increased.
// Update the proxies used in the GP to match.
if (fUsesDistanceField) {
@@ -788,7 +788,7 @@ bool GrSmallPathRenderer::onDrawPath(const DrawPathArgs& args) {
SkASSERT(!args.fShape->isEmpty());
SkASSERT(args.fShape->hasUnstyledKey());
if (!fAtlas) {
- fAtlas = GrDrawOpAtlas::Make(args.fContext,
+ fAtlas = GrDrawOpAtlas::Make(args.fContext->contextPriv().proxyProvider(),
kAlpha_8_GrPixelConfig,
ATLAS_TEXTURE_WIDTH, ATLAS_TEXTURE_HEIGHT,
NUM_PLOTS_X, NUM_PLOTS_Y,
@@ -858,7 +858,8 @@ GR_DRAW_OP_TEST_DEFINE(SmallPathOp) {
if (context->uniqueID() != gTestStruct.fContextID) {
gTestStruct.fContextID = context->uniqueID();
gTestStruct.reset();
- gTestStruct.fAtlas = GrDrawOpAtlas::Make(context, kAlpha_8_GrPixelConfig,
+ gTestStruct.fAtlas = GrDrawOpAtlas::Make(context->contextPriv().proxyProvider(),
+ kAlpha_8_GrPixelConfig,
ATLAS_TEXTURE_WIDTH, ATLAS_TEXTURE_HEIGHT,
NUM_PLOTS_X, NUM_PLOTS_Y,
GrDrawOpAtlas::AllowMultitexturing::kYes,