gfx/skia/trunk/src/gpu/effects/GrConfigConversionEffect.h

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /*
     2  * Copyright 2012 Google Inc.
     3  *
     4  * Use of this source code is governed by a BSD-style license that can be
     5  * found in the LICENSE file.
     6  */
     8 #ifndef GrConfigConversionEffect_DEFINED
     9 #define GrConfigConversionEffect_DEFINED
    11 #include "GrSingleTextureEffect.h"
    13 class GrEffectStage;
    14 class GrGLConfigConversionEffect;
    16 /**
    17  * This class is used to perform config conversions. Clients may want to read/write data that is
    18  * unpremultiplied. Also on some systems reading/writing BGRA or RGBA is faster. In those cases we
    19  * read/write using the faster path and perform an R/B swap in the shader if the client data is in
    20  * the slower config.
    21  */
    22 class GrConfigConversionEffect : public GrSingleTextureEffect {
    23 public:
    24     /**
    25      * The PM->UPM or UPM->PM conversions to apply.
    26      */
    27     enum PMConversion {
    28         kNone_PMConversion = 0,
    29         kMulByAlpha_RoundUp_PMConversion,
    30         kMulByAlpha_RoundDown_PMConversion,
    31         kDivByAlpha_RoundUp_PMConversion,
    32         kDivByAlpha_RoundDown_PMConversion,
    34         kPMConversionCnt
    35     };
    37     // Installs an effect in the GrEffectStage to perform a config conversion.
    38     static const GrEffectRef* Create(GrTexture*,
    39                                      bool swapRedAndBlue,
    40                                      PMConversion pmConversion,
    41                                      const SkMatrix& matrix);
    43     static const char* Name() { return "Config Conversion"; }
    44     typedef GrGLConfigConversionEffect GLEffect;
    46     virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
    48     virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE;
    50     bool swapsRedAndBlue() const { return fSwapRedAndBlue; }
    51     PMConversion  pmConversion() const { return fPMConversion; }
    53     // This function determines whether it is possible to choose PM->UPM and UPM->PM conversions
    54     // for which in any PM->UPM->PM->UPM sequence the two UPM values are the same. This means that
    55     // if pixels are read back to a UPM buffer, written back to PM to the GPU, and read back again
    56     // both reads will produce the same result. This test is quite expensive and should not be run
    57     // multiple times for a given context.
    58     static void TestForPreservingPMConversions(GrContext* context,
    59                                                PMConversion* PMToUPMRule,
    60                                                PMConversion* UPMToPMRule);
    62 private:
    63     GrConfigConversionEffect(GrTexture*,
    64                             bool swapRedAndBlue,
    65                             PMConversion pmConversion,
    66                             const SkMatrix& matrix);
    68     virtual bool onIsEqual(const GrEffect&) const SK_OVERRIDE;
    70     bool            fSwapRedAndBlue;
    71     PMConversion    fPMConversion;
    73     GR_DECLARE_EFFECT_TEST;
    75     typedef GrSingleTextureEffect INHERITED;
    76 };
    78 #endif

mercurial