Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Unified Diff: src/gpu/GrSWMaskHelper.cpp

Issue 1974943002: Simplify GrSWMaskHelper (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix indent Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrSWMaskHelper.h ('k') | src/gpu/SkGr.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrSWMaskHelper.cpp
diff --git a/src/gpu/GrSWMaskHelper.cpp b/src/gpu/GrSWMaskHelper.cpp
index 937b34380ba464951ff9e59870c145326be033b9..95c7273285caf8e1199ff77770f1420b7f963c8c 100644
--- a/src/gpu/GrSWMaskHelper.cpp
+++ b/src/gpu/GrSWMaskHelper.cpp
@@ -19,12 +19,10 @@
#include "batches/GrRectBatchFactory.h"
-namespace {
-
/*
* Convert a boolean operation into a transfer mode code
*/
-SkXfermode::Mode op_to_mode(SkRegion::Op op) {
+static SkXfermode::Mode op_to_mode(SkRegion::Op op) {
static const SkXfermode::Mode modeMap[] = {
SkXfermode::kDstOut_Mode, // kDifference_Op
@@ -38,76 +36,13 @@ SkXfermode::Mode op_to_mode(SkRegion::Op op) {
return modeMap[op];
}
-static inline GrPixelConfig fmt_to_config(SkTextureCompressor::Format fmt) {
-
- GrPixelConfig config;
- switch (fmt) {
- case SkTextureCompressor::kLATC_Format:
- config = kLATC_GrPixelConfig;
- break;
-
- case SkTextureCompressor::kR11_EAC_Format:
- config = kR11_EAC_GrPixelConfig;
- break;
-
- case SkTextureCompressor::kASTC_12x12_Format:
- config = kASTC_12x12_GrPixelConfig;
- break;
-
- case SkTextureCompressor::kETC1_Format:
- config = kETC1_GrPixelConfig;
- break;
-
- default:
- SkDEBUGFAIL("No GrPixelConfig for compression format!");
- // Best guess
- config = kAlpha_8_GrPixelConfig;
- break;
- }
-
- return config;
-}
-
-static bool choose_compressed_fmt(const GrCaps* caps,
- SkTextureCompressor::Format *fmt) {
- if (nullptr == fmt) {
- return false;
- }
-
- // We can't use scratch textures without the ability to update
- // compressed textures...
- if (!(caps->compressedTexSubImageSupport())) {
- return false;
- }
-
- // Figure out what our preferred texture type is. If ASTC is available, that always
- // gives the biggest win. Otherwise, in terms of compression speed and accuracy,
- // LATC has a slight edge over R11 EAC.
- if (caps->isConfigTexturable(kASTC_12x12_GrPixelConfig)) {
- *fmt = SkTextureCompressor::kASTC_12x12_Format;
- return true;
- } else if (caps->isConfigTexturable(kLATC_GrPixelConfig)) {
- *fmt = SkTextureCompressor::kLATC_Format;
- return true;
- } else if (caps->isConfigTexturable(kR11_EAC_GrPixelConfig)) {
- *fmt = SkTextureCompressor::kR11_EAC_Format;
- return true;
- }
-
- return false;
-}
-
-}
-
/**
* Draw a single rect element of the clip stack into the accumulation bitmap
*/
-void GrSWMaskHelper::draw(const SkRect& rect, SkRegion::Op op,
- bool antiAlias, uint8_t alpha) {
+void GrSWMaskHelper::drawRect(const SkRect& rect, SkRegion::Op op,
+ bool antiAlias, uint8_t alpha) {
SkPaint paint;
- SkASSERT(kNone_CompressionMode == fCompressionMode);
-
paint.setXfermode(SkXfermode::Make(op_to_mode(op)));
paint.setAntiAlias(antiAlias);
paint.setColor(SkColorSetARGB(alpha, alpha, alpha, alpha));
@@ -118,35 +53,24 @@ void GrSWMaskHelper::draw(const SkRect& rect, SkRegion::Op op,
/**
* Draw a single path element of the clip stack into the accumulation bitmap
*/
-void GrSWMaskHelper::draw(const SkPath& path, const GrStyle& style, SkRegion::Op op,
- bool antiAlias, uint8_t alpha) {
+void GrSWMaskHelper::drawPath(const SkPath& path, const GrStyle& style, SkRegion::Op op,
+ bool antiAlias, uint8_t alpha) {
SkPaint paint;
paint.setPathEffect(sk_ref_sp(style.pathEffect()));
style.strokeRec().applyToPaint(&paint);
paint.setAntiAlias(antiAlias);
- SkTBlitterAllocator allocator;
- SkBlitter* blitter = nullptr;
- if (kBlitter_CompressionMode == fCompressionMode) {
- SkASSERT(fCompressedBuffer.get());
- blitter = SkTextureCompressor::CreateBlitterForFormat(
- fPixels.width(), fPixels.height(), fCompressedBuffer.get(), &allocator,
- fCompressedFormat);
- }
-
if (SkRegion::kReplace_Op == op && 0xFF == alpha) {
SkASSERT(0xFF == paint.getAlpha());
- fDraw.drawPathCoverage(path, paint, blitter);
+ fDraw.drawPathCoverage(path, paint);
} else {
paint.setXfermodeMode(op_to_mode(op));
paint.setColor(SkColorSetARGB(alpha, alpha, alpha, alpha));
- fDraw.drawPath(path, paint, blitter);
+ fDraw.drawPath(path, paint);
}
}
-bool GrSWMaskHelper::init(const SkIRect& resultBounds,
- const SkMatrix* matrix,
- bool allowCompression) {
+bool GrSWMaskHelper::init(const SkIRect& resultBounds, const SkMatrix* matrix) {
if (matrix) {
fMatrix = *matrix;
} else {
@@ -154,54 +78,16 @@ bool GrSWMaskHelper::init(const SkIRect& resultBounds,
}
// Now translate so the bound's UL corner is at the origin
- fMatrix.postTranslate(-resultBounds.fLeft * SK_Scalar1,
- -resultBounds.fTop * SK_Scalar1);
- SkIRect bounds = SkIRect::MakeWH(resultBounds.width(),
- resultBounds.height());
-
- if (allowCompression &&
- fContext->caps()->drawPathMasksToCompressedTexturesSupport() &&
- choose_compressed_fmt(fContext->caps(), &fCompressedFormat)) {
- fCompressionMode = kCompress_CompressionMode;
- }
+ fMatrix.postTranslate(-SkIntToScalar(resultBounds.fLeft), -SkIntToScalar(resultBounds.fTop));
+ SkIRect bounds = SkIRect::MakeWH(resultBounds.width(), resultBounds.height());
- // Make sure that the width is a multiple of the desired block dimensions
- // to allow for specialized SIMD instructions that compress multiple blocks at a time.
- int cmpWidth = bounds.fRight;
- int cmpHeight = bounds.fBottom;
- if (kCompress_CompressionMode == fCompressionMode) {
- int dimX, dimY;
- SkTextureCompressor::GetBlockDimensions(fCompressedFormat, &dimX, &dimY);
- cmpWidth = dimX * ((cmpWidth + (dimX - 1)) / dimX);
- cmpHeight = dimY * ((cmpHeight + (dimY - 1)) / dimY);
-
- // Can we create a blitter?
- if (SkTextureCompressor::ExistsBlitterForFormat(fCompressedFormat)) {
- int cmpSz = SkTextureCompressor::GetCompressedDataSize(
- fCompressedFormat, cmpWidth, cmpHeight);
-
- SkASSERT(cmpSz > 0);
- SkASSERT(nullptr == fCompressedBuffer.get());
- fCompressedBuffer.reset(cmpSz);
- fCompressionMode = kBlitter_CompressionMode;
- }
+ const SkImageInfo bmImageInfo = SkImageInfo::MakeA8(bounds.width(), bounds.height());
+ if (!fPixels.tryAlloc(bmImageInfo)) {
+ return false;
}
+ fPixels.erase(0);
sk_bzero(&fDraw, sizeof(fDraw));
-
- // If we don't have a custom blitter, then we either need a bitmap to compress
- // from or a bitmap that we're going to use as a texture. In any case, we should
- // allocate the pixels for a bitmap
- const SkImageInfo bmImageInfo = SkImageInfo::MakeA8(cmpWidth, cmpHeight);
- if (kBlitter_CompressionMode != fCompressionMode) {
- if (!fPixels.tryAlloc(bmImageInfo)) {
- return false;
- }
- fPixels.erase(0);
- } else {
- // Otherwise, we just need to remember how big the buffer is...
- fPixels.reset(bmImageInfo);
- }
fDraw.fDst = fPixels;
fRasterClip.setRect(bounds);
fDraw.fRC = &fRasterClip;
@@ -218,67 +104,20 @@ GrTexture* GrSWMaskHelper::createTexture() {
desc.fHeight = fPixels.height();
desc.fConfig = kAlpha_8_GrPixelConfig;
- if (kNone_CompressionMode != fCompressionMode) {
-
-#ifdef SK_DEBUG
- int dimX, dimY;
- SkTextureCompressor::GetBlockDimensions(fCompressedFormat, &dimX, &dimY);
- SkASSERT((desc.fWidth % dimX) == 0);
- SkASSERT((desc.fHeight % dimY) == 0);
-#endif
-
- desc.fConfig = fmt_to_config(fCompressedFormat);
- SkASSERT(fContext->caps()->isConfigTexturable(desc.fConfig));
- }
-
return fContext->textureProvider()->createApproxTexture(desc);
}
-void GrSWMaskHelper::sendTextureData(GrTexture *texture, const GrSurfaceDesc& desc,
- const void *data, size_t rowbytes) {
- // Since we're uploading to it, and it's compressed, 'texture' shouldn't
- // have a render target.
- SkASSERT(nullptr == texture->asRenderTarget());
-
- texture->writePixels(0, 0, desc.fWidth, desc.fHeight, desc.fConfig, data, rowbytes);
-}
-
-void GrSWMaskHelper::compressTextureData(GrTexture *texture, const GrSurfaceDesc& desc) {
-
- SkASSERT(GrPixelConfigIsCompressed(desc.fConfig));
- SkASSERT(fmt_to_config(fCompressedFormat) == desc.fConfig);
-
- SkAutoDataUnref cmpData(SkTextureCompressor::CompressBitmapToFormat(fPixels,
- fCompressedFormat));
- SkASSERT(cmpData);
-
- this->sendTextureData(texture, desc, cmpData->data(), 0);
-}
-
/**
* Move the result of the software mask generation back to the gpu
*/
void GrSWMaskHelper::toTexture(GrTexture *texture) {
- GrSurfaceDesc desc;
- desc.fWidth = fPixels.width();
- desc.fHeight = fPixels.height();
- desc.fConfig = texture->config();
-
- // First see if we should compress this texture before uploading.
- switch (fCompressionMode) {
- case kNone_CompressionMode:
- this->sendTextureData(texture, desc, fPixels.addr(), fPixels.rowBytes());
- break;
-
- case kCompress_CompressionMode:
- this->compressTextureData(texture, desc);
- break;
-
- case kBlitter_CompressionMode:
- SkASSERT(fCompressedBuffer.get());
- this->sendTextureData(texture, desc, fCompressedBuffer.get(), 0);
- break;
- }
+ // Since we're uploading to it, and it's compressed, 'texture' shouldn't
+ // have a render target.
+ SkASSERT(!texture->asRenderTarget());
+
+ texture->writePixels(0, 0, fPixels.width(), fPixels.height(), texture->config(),
+ fPixels.addr(), fPixels.rowBytes());
+
}
/**
@@ -307,7 +146,7 @@ GrTexture* GrSWMaskHelper::DrawPathMaskToTexture(GrContext* context,
return nullptr;
}
- helper.draw(path, style, SkRegion::kReplace_Op, antiAlias, 0xFF);
+ helper.drawPath(path, style, SkRegion::kReplace_Op, antiAlias, 0xFF);
GrTexture* texture(helper.createTexture());
if (!texture) {
« no previous file with comments | « src/gpu/GrSWMaskHelper.h ('k') | src/gpu/SkGr.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698