diff options
author | Timothy Liang <timliang@google.com> | 2018-06-15 10:12:00 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-06-15 15:39:45 +0000 |
commit | 0513dd8675534afdd605cea32778a4b4671b2c3d (patch) | |
tree | d8fff7fc5969aebbf6310605404ffa083c1e97cd /src/gpu/text/GrGlyphCache.cpp | |
parent | 702fe01aab9e41474f0fc33b54290c49f5ead5e0 (diff) |
Reland "added 565 to 8888 conversion for gpu LCD text rendering for macOS"
This reverts commit cf274da6faa9d32e08053180c8113fcaab666028.
Reason for revert: removed the static initializer
Original change's description:
> Revert "added 565 to 8888 conversion for gpu LCD text rendering for macOS"
>
> This reverts commit e6f2ecafaf0efecacfd4256f280e26ee74cb7e16.
>
> Reason for revert: breaking chrome roll cause of static initializers
>
> Original change's description:
> > added 565 to 8888 conversion for gpu LCD text rendering for macOS
> >
> > Bug: skia:
> > Change-Id: Ie24160bb098d388bf4ad69d0c2f9f8ed4beb215c
> > Reviewed-on: https://skia-review.googlesource.com/134508
> > Commit-Queue: Timothy Liang <timliang@google.com>
> > Reviewed-by: Jim Van Verth <jvanverth@google.com>
>
> TBR=egdaniel@google.com,jvanverth@google.com,timliang@google.com
>
> Change-Id: Ida97a4085c93fcb990999ab71f99364ec2ef86b7
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: skia:
> Reviewed-on: https://skia-review.googlesource.com/135000
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Commit-Queue: Greg Daniel <egdaniel@google.com>
Change-Id: I40c29b73970c55b3579a0169bbad666a798b2348
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/135021
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Timothy Liang <timliang@google.com>
Diffstat (limited to 'src/gpu/text/GrGlyphCache.cpp')
-rw-r--r-- | src/gpu/text/GrGlyphCache.cpp | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/gpu/text/GrGlyphCache.cpp b/src/gpu/text/GrGlyphCache.cpp index f6a18c3271..4c10a6c7eb 100644 --- a/src/gpu/text/GrGlyphCache.cpp +++ b/src/gpu/text/GrGlyphCache.cpp @@ -8,11 +8,14 @@ #include "GrGlyphCache.h" #include "GrAtlasManager.h" #include "GrCaps.h" +#include "GrColor.h" #include "GrDistanceFieldGenFromVector.h" #include "SkAutoMalloc.h" #include "SkDistanceFieldGen.h" +std::unique_ptr<const SkMasks> GrGlyphCache::k565Masks; + GrGlyphCache::GrGlyphCache(const GrCaps* caps, size_t maxTextureBytes) : fPreserveStrike(nullptr), fGlyphSizeLimit(0) { fGlyphSizeLimit = ComputeGlyphSizeLimit(caps->maxTextureSize(), maxTextureBytes); @@ -120,7 +123,7 @@ static void expand_bits(INT_TYPE* dst, static bool get_packed_glyph_image(SkGlyphCache* cache, const SkGlyph& glyph, int width, int height, int dstRB, GrMaskFormat expectedMaskFormat, - void* dst) { + void* dst, const SkMasks& masks) { SkASSERT(glyph.fWidth == width); SkASSERT(glyph.fHeight == height); const void* src = cache->findImage(glyph); @@ -128,6 +131,29 @@ static bool get_packed_glyph_image(SkGlyphCache* cache, const SkGlyph& glyph, in return false; } + // Convert if the glyph uses a 565 mask format since it is using LCD text rendering but the + // expected format is 8888 (will happen on macOS with Metal since that combination does not + // support 565). + if (kA565_GrMaskFormat == get_packed_glyph_mask_format(glyph) && + kARGB_GrMaskFormat == expectedMaskFormat) { + const int a565Bpp = GrMaskFormatBytesPerPixel(kA565_GrMaskFormat); + const int argbBpp = GrMaskFormatBytesPerPixel(kARGB_GrMaskFormat); + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + uint16_t color565 = 0; + memcpy(&color565, src, a565Bpp); + uint32_t colorRGBA = GrColorPackRGBA(masks.getRed(color565), + masks.getGreen(color565), + masks.getBlue(color565), + 0xFF); + memcpy(dst, &colorRGBA, argbBpp); + src = (char*)src + a565Bpp; + dst = (char*)dst + argbBpp; + } + } + return true; + } + // crbug:510931 // Retrieving the image from the cache can actually change the mask format. This case is very // uncommon so for now we just draw a clear box for these glyphs. @@ -237,6 +263,7 @@ GrDrawOpAtlas::ErrorCode GrTextStrike::addGlyphToAtlas( SkASSERT(cache); SkASSERT(fCache.find(glyph->fPackedID)); + expectedMaskFormat = fullAtlasManager->resolveMaskFormat(expectedMaskFormat); int bytesPerPixel = GrMaskFormatBytesPerPixel(expectedMaskFormat); int width = glyph->width(); int height = glyph->height(); @@ -262,7 +289,7 @@ GrDrawOpAtlas::ErrorCode GrTextStrike::addGlyphToAtlas( } if (!get_packed_glyph_image(cache, skGlyph, glyph->width(), glyph->height(), rowBytes, expectedMaskFormat, - dataPtr)) { + dataPtr, *GrGlyphCache::k565Masks)) { return GrDrawOpAtlas::ErrorCode::kError; } |