| Index: src/gpu/SkGr.cpp
|
| diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
|
| index 51eb91021db9bb5a413fdc7da719e8a138633415..cf36b3a7ccbcccf579465411fdebad0cab234bf7 100644
|
| --- a/src/gpu/SkGr.cpp
|
| +++ b/src/gpu/SkGr.cpp
|
| @@ -11,6 +11,7 @@
|
|
|
| #include "GrCaps.h"
|
| #include "GrContext.h"
|
| +#include "GrDrawContext.h"
|
| #include "GrGpuResourcePriv.h"
|
| #include "GrImageIDTextureAdjuster.h"
|
| #include "GrTextureParamsAdjuster.h"
|
| @@ -515,22 +516,21 @@ static inline bool blend_requires_shader(const SkXfermode::Mode mode, bool primi
|
| }
|
|
|
| static inline bool skpaint_to_grpaint_impl(GrContext* context,
|
| + GrDrawContext* dc,
|
| const SkPaint& skPaint,
|
| const SkMatrix& viewM,
|
| sk_sp<GrFragmentProcessor>* shaderProcessor,
|
| SkXfermode::Mode* primColorMode,
|
| bool primitiveIsSrc,
|
| - bool allowSRGBInputs,
|
| - SkColorSpace* dstColorSpace,
|
| GrPaint* grPaint) {
|
| grPaint->setAntiAlias(skPaint.isAntiAlias());
|
| - grPaint->setAllowSRGBInputs(allowSRGBInputs);
|
| + grPaint->setAllowSRGBInputs(dc->isGammaCorrect());
|
|
|
| // Raw translation of the SkPaint color to our 4f format:
|
| GrColor4f origColor = GrColor4f::FromGrColor(SkColorToUnpremulGrColor(skPaint.getColor()));
|
|
|
| // Linearize, if the color is meant to be in sRGB gamma:
|
| - if (allowSRGBInputs) {
|
| + if (dc->isGammaCorrect()) {
|
| origColor.fRGBA[0] = exact_srgb_to_linear(origColor.fRGBA[0]);
|
| origColor.fRGBA[1] = exact_srgb_to_linear(origColor.fRGBA[1]);
|
| origColor.fRGBA[2] = exact_srgb_to_linear(origColor.fRGBA[2]);
|
| @@ -543,12 +543,10 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context,
|
| if (shaderProcessor) {
|
| shaderFP = *shaderProcessor;
|
| } else if (const SkShader* shader = skPaint.getShader()) {
|
| - SkSourceGammaTreatment gammaTreatment = allowSRGBInputs
|
| - ? SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgnore;
|
| shaderFP = shader->asFragmentProcessor(SkShader::AsFPArgs(context, &viewM, nullptr,
|
| skPaint.getFilterQuality(),
|
| - dstColorSpace,
|
| - gammaTreatment));
|
| + dc->getColorSpace(),
|
| + dc->sourceGammaTreatment()));
|
| if (!shaderFP) {
|
| return false;
|
| }
|
| @@ -653,79 +651,72 @@ static inline bool skpaint_to_grpaint_impl(GrContext* context,
|
| }
|
|
|
| #ifndef SK_IGNORE_GPU_DITHER
|
| - if (skPaint.isDither() && grPaint->numColorFragmentProcessors() > 0 && !allowSRGBInputs) {
|
| + if (skPaint.isDither() && grPaint->numColorFragmentProcessors() > 0 && !dc->isGammaCorrect()) {
|
| grPaint->addColorFragmentProcessor(GrDitherEffect::Make());
|
| }
|
| #endif
|
| return true;
|
| }
|
|
|
| -bool SkPaintToGrPaint(GrContext* context, const SkPaint& skPaint, const SkMatrix& viewM,
|
| - bool allowSRGBInputs, SkColorSpace* dstColorSpace, GrPaint* grPaint) {
|
| - return skpaint_to_grpaint_impl(context, skPaint, viewM, nullptr, nullptr, false,
|
| - allowSRGBInputs, dstColorSpace, grPaint);
|
| +bool SkPaintToGrPaint(GrContext* context, GrDrawContext* dc, const SkPaint& skPaint,
|
| + const SkMatrix& viewM, GrPaint* grPaint) {
|
| + return skpaint_to_grpaint_impl(context, dc, skPaint, viewM, nullptr, nullptr, false, grPaint);
|
| }
|
|
|
| /** Replaces the SkShader (if any) on skPaint with the passed in GrFragmentProcessor. */
|
| bool SkPaintToGrPaintReplaceShader(GrContext* context,
|
| + GrDrawContext* dc,
|
| const SkPaint& skPaint,
|
| sk_sp<GrFragmentProcessor> shaderFP,
|
| - bool allowSRGBInputs,
|
| - SkColorSpace* dstColorSpace,
|
| GrPaint* grPaint) {
|
| if (!shaderFP) {
|
| return false;
|
| }
|
| - return skpaint_to_grpaint_impl(context, skPaint, SkMatrix::I(), &shaderFP, nullptr, false,
|
| - allowSRGBInputs, dstColorSpace, grPaint);
|
| + return skpaint_to_grpaint_impl(context, dc, skPaint, SkMatrix::I(), &shaderFP, nullptr, false,
|
| + grPaint);
|
| }
|
|
|
| /** Ignores the SkShader (if any) on skPaint. */
|
| bool SkPaintToGrPaintNoShader(GrContext* context,
|
| + GrDrawContext* dc,
|
| const SkPaint& skPaint,
|
| - bool allowSRGBInputs,
|
| - SkColorSpace* dstColorSpace,
|
| GrPaint* grPaint) {
|
| // Use a ptr to a nullptr to to indicate that the SkShader is ignored and not replaced.
|
| static sk_sp<GrFragmentProcessor> kNullShaderFP(nullptr);
|
| static sk_sp<GrFragmentProcessor>* kIgnoreShader = &kNullShaderFP;
|
| - return skpaint_to_grpaint_impl(context, skPaint, SkMatrix::I(), kIgnoreShader, nullptr, false,
|
| - allowSRGBInputs, dstColorSpace, grPaint);
|
| + return skpaint_to_grpaint_impl(context, dc, skPaint, SkMatrix::I(), kIgnoreShader, nullptr,
|
| + false, grPaint);
|
| }
|
|
|
| /** Blends the SkPaint's shader (or color if no shader) with a per-primitive color which must
|
| be setup as a vertex attribute using the specified SkXfermode::Mode. */
|
| bool SkPaintToGrPaintWithXfermode(GrContext* context,
|
| + GrDrawContext* dc,
|
| const SkPaint& skPaint,
|
| const SkMatrix& viewM,
|
| SkXfermode::Mode primColorMode,
|
| bool primitiveIsSrc,
|
| - bool allowSRGBInputs,
|
| - SkColorSpace* dstColorSpace,
|
| GrPaint* grPaint) {
|
| - return skpaint_to_grpaint_impl(context, skPaint, viewM, nullptr, &primColorMode, primitiveIsSrc,
|
| - allowSRGBInputs, dstColorSpace, grPaint);
|
| + return skpaint_to_grpaint_impl(context, dc, skPaint, viewM, nullptr, &primColorMode,
|
| + primitiveIsSrc, grPaint);
|
| }
|
|
|
| bool SkPaintToGrPaintWithTexture(GrContext* context,
|
| + GrDrawContext* dc,
|
| const SkPaint& paint,
|
| const SkMatrix& viewM,
|
| sk_sp<GrFragmentProcessor> fp,
|
| bool textureIsAlphaOnly,
|
| - bool allowSRGBInputs,
|
| - SkColorSpace* dstColorSpace,
|
| GrPaint* grPaint) {
|
| sk_sp<GrFragmentProcessor> shaderFP;
|
| if (textureIsAlphaOnly) {
|
| if (const SkShader* shader = paint.getShader()) {
|
| - SkSourceGammaTreatment gammaTreatment = allowSRGBInputs
|
| - ? SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgnore;
|
| shaderFP = shader->asFragmentProcessor(SkShader::AsFPArgs(context,
|
| &viewM,
|
| nullptr,
|
| paint.getFilterQuality(),
|
| - dstColorSpace,
|
| - gammaTreatment));
|
| + dc->getColorSpace(),
|
| + dc->sourceGammaTreatment()));
|
| if (!shaderFP) {
|
| return false;
|
| }
|
| @@ -738,8 +729,7 @@ bool SkPaintToGrPaintWithTexture(GrContext* context,
|
| shaderFP = GrFragmentProcessor::MulOutputByInputAlpha(fp);
|
| }
|
|
|
| - return SkPaintToGrPaintReplaceShader(context, paint, std::move(shaderFP), allowSRGBInputs,
|
| - dstColorSpace, grPaint);
|
| + return SkPaintToGrPaintReplaceShader(context, dc, paint, std::move(shaderFP), grPaint);
|
| }
|
|
|
|
|
|
|