Permalink
Commits on Apr 2, 2015
  1. [SkDebugger] Flatten drawPicture ops

    fmalita committed with Commit bot Apr 2, 2015
    Add two drawPicture bracketing ops (BeginDrawPicture, EndDrawPicture) to
    replace the current DrawPicture op, and flatten picture contents.
    
    Review URL: https://codereview.chromium.org/1048383002
Commits on Apr 1, 2015
  1. Revert of Implement approx-match support in image filter saveLayer() …

    rmistry committed with Commit bot Apr 1, 2015
    …offscreen. (patchset #31 id:590001 of https://codereview.chromium.org/1034733002/)
    
    Reason for revert:
    Spoke to Stephen about this. Reverting because failing debug builds:
    
    https://uberchromegw.corp.google.com/i/client.skia/builders/Test-Mac10.9-Clang-MacMini6.2-GPU-HD4000-x86_64-Debug/builds/51
    https://uberchromegw.corp.google.com/i/client.skia/builders/Test-Ubuntu-GCC-ShuttleA-GPU-GTX660-x86_64-Debug/builds/54
    
    Original issue's description:
    > Implement approx-match support in image filter saveLayer() offscreen.
    >
    > Currently, the GPU-side image filter implementation creates
    > exact-match textures for the offscreen backing stores for
    > saveLayer().  This is because several filters have GPU
    > implementations which depend on the texture coordinates
    > being 0..1.
    >
    > The fix is three-fold:
    >
    > 1) Store the actual requested size in the SkGpuDevice, so
    > that when wrapping it in an SkBitmap for passing to
    > filterImage(), we can give it the original size.
    > 2) Fix the filters (SkMagnifierImageFilter,
    > SkLightingImageFilter, SkMatrixConvolutionImageFilter,
    > SkMatrixImageFilter) whose GPU implementation depends on
    > 0..1 texture coordinates.
    > 3) Remove the exception for GPU-side image filters in
    > SkCanvas::internalSaveLayer().
    >
    > For the lighting filters, there were two bugs which were
    > cancelling each other out: the sobel filter matrix was
    > being computed upside down, but then we'd negate the
    > resulting normal. This worked fine in the exact-match case,
    > but in the approx-match case we'd sample garbage along
    > the edge pixels. Also, we never implemented the edge pixels
    > according to spec in the GPU case. It requires a
    > different fragment shader for each edge of the nine-patch,
    > which meant we couldn't use asFragmentProcessor(), and had
    > to implement the drawing via a filterImageGPU() override.
    > In order to avoid polluting the public API, I inserted a
    > new base class, SkLightingImageFilterInternal above
    > Sk[Diffuse|Specular]LightingImageFilter to handle the
    > implementation.
    >
    > For the SkMatrixConvolutionImageFilter, it seems the
    > GLSL clamp() function occasionally returns values outside
    > the clamped range, resulting in access of garbage
    > texels even in GL_NEAREST. The fix here is to clamp to a
    > rect inset by half a texel. There was also a bug in
    > the unpremultiply step when fConvolveAlpha is false.
    >
    > For SkMatrixImageFilter, the fix was to make the generic
    > draw path be more careful about when to use texture domain.
    > If the bitmap already has a texture, use texture domain
    > if the srcRect is smaller than the entire texture (not
    > the entire bitmap).
    >
    > N.B.: this change will cause some minor pixel diffs in the
    > GPU results of the following GMs (and possibly more):
    > matriximagefilter, matrixconvolution, imagefiltersscaled,
    > lighting, imagemagnifier, filterfastbounds,
    > complexclip_aa_Layer_invert, complexclip_aa_layer,
    > complexclip_bw_layer_invert, complexclip_bw_layer.
    >
    > BUG=skia:3532
    >
    > Committed: https://skia.googlesource.com/skia/+/b97dafefe63ea0a1bbce8e8b209f4920983fb8b9
    >
    > Committed: https://skia.googlesource.com/skia/+/f5f8518fe0bbd2703e4ffc1b11ad7b4312ff7641
    >
    > Committed: https://skia.googlesource.com/skia/+/46112cf2a7c7307f1c9eebb5f881cbda15aa460c
    
    TBR=bsalomon@google.com,reed@chromium.org,senorblanco@chromium.org
    NOPRESUBMIT=true
    NOTREECHECKS=true
    NOTRY=true
    BUG=skia:3532
    
    Review URL: https://codereview.chromium.org/1057693002
  2. Revert of Fix GLSL error on Android. (patchset #2 id:20001 of https:/…

    rmistry committed with Commit bot Apr 1, 2015
    …/codereview.chromium.org/1053873002/)
    
    Reason for revert:
    Spoke to Stephan about this. Reverting because failing debug builds:
    
    https://uberchromegw.corp.google.com/i/client.skia/builders/Test-Mac10.9-Clang-MacMini6.2-GPU-HD4000-x86_64-Debug/builds/51
    https://uberchromegw.corp.google.com/i/client.skia/builders/Test-Ubuntu-GCC-ShuttleA-GPU-GTX660-x86_64-Debug/builds/54
    
    Original issue's description:
    > Fix GLSL error on Android.
    >
    > BUG=skia:
    > TBR=bsalomon
    > NOTREECHECKS=true
    > NOTRY=true
    >
    > Committed: https://skia.googlesource.com/skia/+/f90cd8e0e39af02c3826c80366efa3c06e88f642
    
    TBR=bsalomon@google.com,senorblanco@chromium.org
    NOPRESUBMIT=true
    NOTREECHECKS=true
    NOTRY=true
    BUG=skia:
    
    Review URL: https://codereview.chromium.org/1056713002
  3. Fix GLSL error on Android.

    senorblanco committed with Commit bot Apr 1, 2015
    BUG=skia:
    TBR=bsalomon
    NOTREECHECKS=true
    NOTRY=true
    
    Review URL: https://codereview.chromium.org/1053873002
  4. Add constant color GrFP.

    bsalomon committed with Commit bot Apr 1, 2015
  5. nanobench does not need to handle failed rewind.

    LeonScroggins committed with Commit bot Apr 1, 2015
    Now that all SkCodecs can rewind (assuming the stream is rewindable),
    we do not need to special case it.
    
    Pointed out by Derek in the code review that added this.
    
    TBR=djsollen
    
    Review URL: https://codereview.chromium.org/1058633002
  6. Implement approx-match support in image filter saveLayer() offscreen.

    senorblanco committed with Commit bot Apr 1, 2015
    Currently, the GPU-side image filter implementation creates
    exact-match textures for the offscreen backing stores for
    saveLayer().  This is because several filters have GPU
    implementations which depend on the texture coordinates
    being 0..1.
    
    The fix is three-fold:
    
    1) Store the actual requested size in the SkGpuDevice, so
    that when wrapping it in an SkBitmap for passing to
    filterImage(), we can give it the original size.
    2) Fix the filters (SkMagnifierImageFilter,
    SkLightingImageFilter, SkMatrixConvolutionImageFilter,
    SkMatrixImageFilter) whose GPU implementation depends on
    0..1 texture coordinates.
    3) Remove the exception for GPU-side image filters in
    SkCanvas::internalSaveLayer().
    
    For the lighting filters, there were two bugs which were
    cancelling each other out: the sobel filter matrix was
    being computed upside down, but then we'd negate the
    resulting normal. This worked fine in the exact-match case,
    but in the approx-match case we'd sample garbage along
    the edge pixels. Also, we never implemented the edge pixels
    according to spec in the GPU case. It requires a
    different fragment shader for each edge of the nine-patch,
    which meant we couldn't use asFragmentProcessor(), and had
    to implement the drawing via a filterImageGPU() override.
    In order to avoid polluting the public API, I inserted a
    new base class, SkLightingImageFilterInternal above
    Sk[Diffuse|Specular]LightingImageFilter to handle the
    implementation.
    
    For the SkMatrixConvolutionImageFilter, it seems the
    GLSL clamp() function occasionally returns values outside
    the clamped range, resulting in access of garbage
    texels even in GL_NEAREST. The fix here is to clamp to a
    rect inset by half a texel. There was also a bug in
    the unpremultiply step when fConvolveAlpha is false.
    
    For SkMatrixImageFilter, the fix was to make the generic
    draw path be more careful about when to use texture domain.
    If the bitmap already has a texture, use texture domain
    if the srcRect is smaller than the entire texture (not
    the entire bitmap).
    
    N.B.: this change will cause some minor pixel diffs in the
    GPU results of the following GMs (and possibly more):
    matriximagefilter, matrixconvolution, imagefiltersscaled,
    lighting, imagemagnifier, filterfastbounds,
    complexclip_aa_Layer_invert, complexclip_aa_layer,
    complexclip_bw_layer_invert, complexclip_bw_layer.
    
    BUG=skia:3532
    
    Committed: https://skia.googlesource.com/skia/+/b97dafefe63ea0a1bbce8e8b209f4920983fb8b9
    
    Committed: https://skia.googlesource.com/skia/+/f5f8518fe0bbd2703e4ffc1b11ad7b4312ff7641
    
    Review URL: https://codereview.chromium.org/1034733002
  7. SkPDF: SkPDFGraphicState Lookup hashtabled

    HalCanary committed with Commit bot Apr 1, 2015
    In Release, running `dm --src skp --config pdf`, I get a
    speedup of about 1.2%.
    
    SkPDFGraphicState class:
    -   Holds the subset of SkPaint that maps to a PDF Graphics
        State
    -   These fields are easily comparable, making hashtable
        comparisons easy.
    
    SkPDFCanon:
    -   findGraphicState() takes a SkPDFGraphicState, not a SkPaint
    -   fGraphicStateRecords is a SkHashSet, not a SkTDArray
    
    SkPDFGraphicState:
    -   mode_for_pdf() replaces logic inside equivalent(), but is
        only called once per lookup.
    -   emitObject() no longer modifies the SkPDFGraphicState to
        cache the SkPDFDict stucture.  (Since it is de-duped,
        this get no speedup).
    -   Static Functions that don't use the canon return a plain
        SkPDFDict now.  No need for fPopulated.
    
    SkTHash.h
    -   SkHashSet::forall added
    
    SkPDFDevice; SkPDFShader
    -   Updated for new SkPDFGraphicState interface.
    
    BUG=skia:3585
    
    Review URL: https://codereview.chromium.org/1046293002
  8. Emulate distance field gamma fix by making glyphs thicker or thinner

    jvanverth committed with Commit bot Apr 1, 2015
    The idea here is that we determine the 0.5 crossover for each
    row in the gamma table, then invert the mapping to determine
    which point that maps to in the original range [-.65,
    .65]. That gives us a change in the apparent width of the
    glyph that closely corresponds to the change produced by the gamma fix.
    
    BUG=skia:2933
    
    Review URL: https://codereview.chromium.org/1042373002
  9. move Atlas Text Context to its own file

    joshualitt committed with Commit bot Apr 1, 2015
  10. Ico test with embedded png

    mattsarett committed with Commit bot Apr 1, 2015
  11. Add timing SkCodec to nanobench.

    LeonScroggins committed with Commit bot Apr 1, 2015
    CodecBench:
    Add new class for timing using SkCodec.
    
    DecodingBench:
    Include creating a decoder inside the loop. This is to have a better
    comparison against SkCodec. SkCodec's factory function does not
    necessarily read the same amount as SkImageDecoder's, so in order to
    have a meaningful comparison, read the entire stream from the
    beginning. Also for comparison, create a new SkStream from the
    SkData each time.
    Add a debugging check to make sure we have an SkImageDecoder.
    Add include guards.
    
    nanobench.cpp:
    Decode using SkCodec.
    When decoding using SkImageDecoder, exclude benches where we decoded
    to a different color type than requested. SkImageDecoder may decide to
    decode to a different type, in which case the name is misleading.
    
    TODOs:
    Now that we ignore color types that do not match the desired
    color type, we should add Index8. This also means calling the more
    complex version of getPixels so CodecBench can support kIndex8.
    
    BUG=skia:3257
    
    Review URL: https://codereview.chromium.org/1044363002
  12. Switch to one single bitmap text blob cache allocation

    joshualitt committed with Commit bot Apr 1, 2015
  13. SkCodec::onGetScanlineDecoder must call rewind.

    LeonScroggins committed with Commit bot Apr 1, 2015
    This mirrors the behavior in onGetPixels, and allows the implementation
    to share code for handling calls to rewindIfNeeded.
    
    This also fixes a bug where getScanlineDecoder was calling
    rewindIfNeeded and treating the result as a bool.
    
    In SkPngCodec, factor out the code to call rewindIfNeeded, and call it
    in both onGetPixels and onGetScanlineDecoder.
    
    Update the test to include testing the scanline decoder. Rename "gen"
    to "codec" now that it must be an SkCodec.
    
    BUG=skia:3257
    
    Depends on https://codereview.chromium.org/1048423003/ (DIFFERENT ISSUE).
    
    Review URL: https://codereview.chromium.org/1050893002
  14. Add SkTHashSet::find()

    mtklein committed with Commit bot Apr 1, 2015
  15. Revert of Enable both static and dynamically linked libpng (patchset …

    drWulf committed with Commit bot Apr 1, 2015
    …#4 id:60001 of https://codereview.chromium.org/1032253003/)
    
    Reason for revert:
    breaking the nexus_9 and ios builds.
    
    Original issue's description:
    > Enable both static and dynamically linked libpng
    >
    > All platforms except android are configured to use the statically linked copy of libpng.  Android uses the system provided dynamic copy for SkImageDecoder and the static copy for SkCodec. The exception being android framework builds that currently use the dynamic copy everywhere.
    >
    > This CL also enables NEON optimizations for libpng.
    >
    > Committed: https://skia.googlesource.com/skia/+/2469c999518e7b0063d35e9e2eb074a0477c21ac
    
    TBR=scroggo@google.com,msarett@google.com
    NOPRESUBMIT=true
    NOTREECHECKS=true
    NOTRY=true
    
    Review URL: https://codereview.chromium.org/1050183002
  16. Enable both static and dynamically linked libpng

    drWulf committed with Commit bot Apr 1, 2015
    All platforms except android are configured to use the statically linked copy of libpng.  Android uses the system provided dynamic copy for SkImageDecoder and the static copy for SkCodec. The exception being android framework builds that currently use the dynamic copy everywhere.
    
    This CL also enables NEON optimizations for libpng.
    
    Review URL: https://codereview.chromium.org/1032253003
  17. Acknowledge that SkIcoCodec can rewind and test it.

    LeonScroggins committed with Commit bot Apr 1, 2015
    Since SkIcoCodec has an SkCodec for its encoded images, backed by
    SkMemoryStreams, the SkMemoryStream can always rewind, and will be
    rewound by the sub-codec if necessary (now that SkBmpCodec and
    SkPngCodec support rewinding).
    
    Depends on https://codereview.chromium.org/1057483003/ and
    https://codereview.chromium.org/1048423003/ (DIFFERENT ISSUES).
    
    BUG=skia:3257
    
    Review URL: https://codereview.chromium.org/1054603002
  18. Make SkPngCodec support rewinding properly.

    LeonScroggins committed with Commit bot Apr 1, 2015
    Separate out the code for reading the header, and use it to reinitialize
    fPng_ptr and fInfo_ptr after a rewind.
    
    Use common code to clean up fPng_ptr and fInfo_ptr, and set them to
    NULL and treat them as NULL as appropriate.
    
    Update the test to expect SkPngCodec to succeed.
    
    BUG=skia:3257
    
    Review URL: https://codereview.chromium.org/1048423003
  19. Find the HASHTAGS file even if you are not at the checkout root.

    rmistry committed with Commit bot Apr 1, 2015
    The post upload hook was failing if you were not at the root, this fixes it.
    
    NOTRY=true
    
    Review URL: https://codereview.chromium.org/1058483002
  20. small-object optimization for SkFunction

    mtklein committed with Commit bot Apr 1, 2015
    Anything <= sizeof(void*) will be inlined, avoiding heap allocation.
    
    BUG=skia:
    
    Review URL: https://codereview.chromium.org/1048243002
  21. Handle rewinds in SkBmpCodec.

    LeonScroggins committed with Commit bot Apr 1, 2015
    Factor our BMP code for reading the header, and call it after a rewind.
    
    BUG=skia:3257
    
    Review URL: https://codereview.chromium.org/1057483003
  22. Creating a new wrapper for gif decoder

    mattsarett committed with Commit bot Apr 1, 2015
    BUG=skia:3257
    BUG=skia:3534
    
    Review URL: https://codereview.chromium.org/1022673011
  23. GrGLInterface: Add support for NV_framebuffer_mixed_samples

    vbuzinov committed with Commit bot Apr 1, 2015
    Import glCoverageModulation if NV_framebuffer_mixed samples
    is available
    
    BUG=skia:3177
    
    Review URL: https://codereview.chromium.org/993363002
  24. Revert of Implement approx-match support in image filter saveLayer() …

    rmistry committed with Commit bot Apr 1, 2015
    …offscreen. (patchset #27 id:510001 of https://codereview.chromium.org/1034733002/)
    
    Reason for revert:
    Looks like this change is causing layout test failures which is blocking Skia's DEPS roll into Chromium:
    https://codereview.chromium.org/1050563002/
    https://codereview.chromium.org/1043133005/
    https://codereview.chromium.org/1048273002/
    
    Reverting to see if this fixes the DEPS roll.
    
    Original issue's description:
    > Implement approx-match support in image filter saveLayer() offscreen.
    >
    > Currently, the GPU-side image filter implementation creates
    > exact-match textures for the offscreen backing stores for
    > saveLayer().  This is because several filters have GPU
    > implementations which depend on the texture coordinates
    > being 0..1.
    >
    > The fix is three-fold:
    >
    > 1) Store the actual requested size in the SkGpuDevice, so
    > that when wrapping it in an SkBitmap for passing to
    > filterImage(), we can give it the original size.
    > 2) Fix the filters (SkMagnifierImageFilter,
    > SkLightingImageFilter) whose GPU implementation depends on
    > 0..1 texture coordinates.
    > 3) Remove the exception for GPU-side image filters in
    > SkCanvas::internalSaveLayer().
    >
    > For the lighting filters, there were two bugs which were
    > cancelling each other out: the sobel filter matrix was
    > being computed upside down, but then we'd negate the
    > resulting normal. This worked fine in the exact-match case,
    > but in the approx-match case we'd sample garbage along
    > the edge pixels. Also, we never implemented the edge pixels
    > according to spec in the GPU case. It requires a
    > different fragment shader for each edge of the nine-patch,
    > which meant we couldn't use asFragmentProcessor(), and had
    > to implement the drawing via a filterImageGPU() override.
    > In order to avoid polluting the public API, I inserted a
    > new base class, SkLightingImageFilterInternal above
    > Sk[Diffuse|Specular]LightingImageFilter to handle the
    > implementation.
    >
    > N.B.: this change will cause some minor pixel diffs in the
    > GPU results of the following GMs (and possibly more):
    > matriximagefilter, matrixconvolution, imagefiltersscaled,
    > lighting, imagemagnifier, filterfastbounds,
    > complexclip_aa_Layer_invert, complexclip_aa_layer,
    > complexclip_bw_layer_invert, complexclip_bw_layer.
    >
    > BUG=skia:3532
    >
    > Committed: https://skia.googlesource.com/skia/+/b97dafefe63ea0a1bbce8e8b209f4920983fb8b9
    >
    > Committed: https://skia.googlesource.com/skia/+/f5f8518fe0bbd2703e4ffc1b11ad7b4312ff7641
    
    TBR=bsalomon@google.com,reed@chromium.org,senorblanco@chromium.org
    NOPRESUBMIT=true
    NOTREECHECKS=true
    NOTRY=true
    BUG=skia:3532
    
    Review URL: https://codereview.chromium.org/1057443003
Commits on Mar 31, 2015
  1. Sketch SkFunction

    mtklein committed with Commit bot Mar 31, 2015
    Let's start with baby steps in case some bot can't handle this.
    I have left many TODOs, most of which I know how to do if this
    looks feasible and useful.
    
    BUG=skia:
    
    Review URL: https://codereview.chromium.org/1049223003
  2. SkPDF: style nit

    HalCanary committed with Commit bot Mar 31, 2015
    TBR=mtklein@google.com
    
    Review URL: https://codereview.chromium.org/1039313004
  3. SkPDF: Factor SkPDFCatalog into SkPDFObjNumMap and SkPDFSubstituteMap

    HalCanary committed with Commit bot Mar 31, 2015
    Motivation: Keep separate features separate.  Also, future
    linearization work will need to have several objNumMap
    objects share a substituteMap.  Also "catalog" has a
    specific meaning in PDF.  This catalog did not map to that
    catalog.
    
    -   Modify SkPDFObject::emitObject and SkPDFObject::addResources
        interface to requiore SkPDFObjNumMap and SkPDFSubstituteMap.
    -   SkPDFObjNumMap const in SkPDFObject::emitObject.
    -   Remove SkPDFCatalog.cpp/.h
    -   Modify SkDocument_PDF.cpp to use new functions
    -   Fold in SkPDFStream::populate
    -   Fold in SkPDFBitmap::emitDict
    -   Move SkPDFObjNumMap and SkPDFSubstituteMap to SkPDFTypes.h
    -   Note (via assert) that SkPDFArray & SkPDFDict don't need to
        check substitutes.
    -   Remove extra space from SkPDFDict serialization.
    -   SkPDFBitmap SkPDFType0Font SkPDFGraphicState SkPDFStream
        updated to new interface.
    -   PDFPrimitivesTest updated for new interface.
    
    BUG=skia:3585
    
    Review URL: https://codereview.chromium.org/1049753002
  4. skia: Fix text subpixel half sample default for GPU rasterization

    hendrikw committed with Commit bot Mar 31, 2015
    In software, SkDraw1Glyph::Proc SkDraw1Glyph::init initializes
    fHalfSampleX, fHalfSampleY to SkGlyph::kSubpixelRound.  In hardware,
    however, these values were initialized to zero.
    
    Fix, match software's implementation
    
    BUG=471919
    
    Review URL: https://codereview.chromium.org/1047803004