aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
Commit message (Collapse)AuthorAge
* Implement approx-match support in image filter saveLayer() offscreen.Gravatar senorblanco2015-03-31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 Review URL: https://codereview.chromium.org/1034733002
* SkPDF: remove SK_NO_FLATE & dead code in SkPDFStreamGravatar halcanary2015-03-31
| | | | | | | | | | | | SkPDFStream copy constructor SkPDFStream Substitute mechanism SkPDFStream::setData(NULL); SkPDFStream SK_NO_FLATE logic BUG=skia:3585 TBR=bsalomon@google.com,reed@google.com Review URL: https://codereview.chromium.org/1041183002
* back to Sk4f for SkPMColorGravatar mtklein2015-03-31
| | | | | | | | | #floats BUG=skia: BUG=skia:3592 Review URL: https://codereview.chromium.org/1047823002
* clamp matrix-translate before converting to pmcolorGravatar reed2015-03-30
| | | | | | | | .. thanks to https://codereview.chromium.org/1032593003/ layout failures BUG=skia: Review URL: https://codereview.chromium.org/1041203004
* Add option to embed font data into executable.Gravatar bungeman2015-03-30
| | | | | | | | Some tools would like to be built with all resources embedded. This change makes it possible to build a font manager which uses font data embedded into the executable. Review URL: https://codereview.chromium.org/1015723004
* Refactor Sk2x<T> + Sk4x<T> into SkNf<N,T> and SkNi<N,T>Gravatar mtklein2015-03-30
| | | | | | | | | | | | | | | | | | | | | The primary feature this delivers is SkNf and SkNd for arbitrary power-of-two N. Non-specialized types or types larger than 128 bits should now Just Work (and we can drop in a specialization to make them faster). Sk4s is now just a typedef for SkNf<4, SkScalar>; Sk4d is SkNf<4, double>, Sk2f SkNf<2, float>, etc. This also makes implementing new specializations easier and more encapsulated. We're now using template specialization, which means the specialized versions don't have to leak out so much from SkNx_sse.h and SkNx_neon.h. This design leaves us room to grow up, e.g to SkNf<8, SkScalar> == Sk8s, and to grown down too, to things like SkNi<8, uint16_t> == Sk8h. To simplify things, I've stripped away most APIs (swizzles, casts, reinterpret_casts) that no one's using yet. I will happily add them back if they seem useful. You shouldn't feel bad about using any of the typedef Sk4s, Sk4f, Sk4d, Sk2s, Sk2f, Sk2d, Sk4i, etc. Here's how you should feel: - Sk4f, Sk4s, Sk2d: feel awesome - Sk2f, Sk2s, Sk4d: feel pretty good No public API changes. TBR=reed@google.com BUG=skia:3592 Review URL: https://codereview.chromium.org/1048593002
* Small change to move GrProcessor and GrBatch pools over to SkSpinlockGravatar joshualitt2015-03-30
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1040133002
* Revert of Remove SkClipStack's manual rounding of BW clip rects (patchset #3 ↵Gravatar robertphillips2015-03-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | id:80001 of https://codereview.chromium.org/1033453003/) Reason for revert: Reverting due to performance regression: https://code.google.com/p/skia/issues/detail?id=3597 Original issue's description: > Remove SkClipStack's manual rounding of BW clip rects > > The full fix for this bug is nudging the image in device space. That is going to be a large change. This CL should address the immediate problem. > > This CL will alter the following GMs: > clipdrawdraw > convex_poly_clip > complexclip_bw_* > filltypespersp > complexclip3_simple > > > > BUG=423834 > > Committed: https://skia.googlesource.com/skia/+/e523d4f90c3368c555282a98b41ca5ee2045103e TBR=bsalomon@google.com,joshualitt@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=423834 Review URL: https://codereview.chromium.org/1045853002
* use Sk4f for matrix mathGravatar reed2015-03-29
| | | | | | | | | Need to land SK_SUPPORT_LEGACY_SCALAR_MAPPOINTS in chrome to suppress Affine version which causes slight differences (which will need to be rebaselined) BUG=skia: Review URL: https://codereview.chromium.org/1045493002
* Revert "Implement approx-match support in image filter saveLayer() offscreen."Gravatar senorblanco2015-03-28
| | | | | | | | | | | This reverts commit b97dafefe63ea0a1bbce8e8b209f4920983fb8b9. SkLightingImageFilter boundaries are incorrect (see GM:lighting). BUG=skia: TBR= Review URL: https://codereview.chromium.org/1048583002
* Implement approx-match support in image filter saveLayer() offscreen.Gravatar senorblanco2015-03-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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, more TBD) whose GPU implementation depends on 0..1 texture coordinates. 3) Remove the exception for GPU-side image filters in SkCanvas::internalSaveLayer(). 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 Review URL: https://codereview.chromium.org/1034733002
* use table of procs (and unrolling) to speed up mapPtsGravatar reed2015-03-27
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1040783002
* Housekeeping to rename GrGL compressed texture formats to match GL specsGravatar egdaniel2015-03-27
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1035243002
* Move HWUI boilerplate into utils/androidGravatar tomhudson2015-03-27
| | | | | | | | | | | | | | | Duplicate code from the HWUI backends for DM and nanobench moves into a single place, saving a hundred lines or more of cut-and-paste. There's some indication that this increases the incidence of SkCanvas "Unable to find device for layer." warnings, but no clear degradation in test results. R=djsollen@google.com,mtklein@google.com BUG=skia:3589 Review URL: https://codereview.chromium.org/1036303002
* SkCodec: add wbmp classGravatar halcanary2015-03-27
| | | | Review URL: https://codereview.chromium.org/1006583005
* impl SkConvertQuadToCubic w/ Sk2sGravatar reed2015-03-26
| | | | | | | BUG=skia: TBR= Review URL: https://codereview.chromium.org/1041573002
* SkPDF fix object counting errorGravatar halcanary2015-03-26
| | | | Review URL: https://codereview.chromium.org/1012483003
* Remove some validation and asserts from tessellating path renderer.Gravatar senorblanco2015-03-26
| | | | | | | | | | | | | In some cases, resolving an intersection can cause a vertex to go slightly out-of-order with edges which have already been processed. This doesn't cause any algorithmic errors, but it's difficult to detect without impacting performance significantly. Also, the GPU infrastructure fires asserts when attempting to allocate 0-length vertex buffers. Early-out instead, since there's nothing to draw. Review URL: https://codereview.chromium.org/1032253005
* Fix DiscardableMemoryPool::free race conditionGravatar halcanary2015-03-26
| | | | | | BUG=skia:3596 Review URL: https://codereview.chromium.org/1017943003
* Revert of Make the canvas draw looper setup update the canvas save count ↵Gravatar reed2015-03-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (patchset #1 id:1 of https://codereview.chromium.org/1034033004/) Reason for revert: makes internalSave and internalSaveLayer inconsistent. Need to find a different solution. Original issue's description: > Make the canvas draw looper setup update the canvas save count > > Image filter in a paint would leave save count in wrong state > for normal draws. This could be observed through the canvas > references during the draw call. An example of this is > inspecting the canvas during a draw looper. > > patch from issue 993863002 at patchset 20001 (http://crrev.com/993863002#ps20001) > > BUG=skia: > TBR=kkinnunen@nvidia.com > > Committed: https://skia.googlesource.com/skia/+/fd3a91e1fc4de69611b5297f624a1cd65db4ced1 TBR=kkinnunen@nvidia.com NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/1037653004
* Make the canvas draw looper setup update the canvas save countGravatar reed2015-03-26
| | | | | | | | | | | | | | Image filter in a paint would leave save count in wrong state for normal draws. This could be observed through the canvas references during the draw call. An example of this is inspecting the canvas during a draw looper. patch from issue 993863002 at patchset 20001 (http://crrev.com/993863002#ps20001) BUG=skia: TBR=kkinnunen@nvidia.com Review URL: https://codereview.chromium.org/1034033004
* SkPMFloat::trunc()Gravatar mtklein2015-03-26
| | | | | | | | | | | | | Add and test trunc(), which is what get() used to be before rounding. Using trunc() is a ~40% speedup on our linear gradient bench. #neon #floats BUG=skia:3592 #n5 #n9 CQ_INCLUDE_TRYBOTS=client.skia.android:Test-Android-Nexus5-Adreno330-Arm7-Debug-Trybot;client.skia.android:Test-Android-Nexus9-TegraK1-Arm64-Release-Trybot Review URL: https://codereview.chromium.org/1032243002
* Remove unused HWAA flag and uniqueID field from GrDrawTargetCaps.Gravatar egdaniel2015-03-26
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1019303005
* Debugger: remove dead feature (SkPicture offset display) & fix bug ↵Gravatar robertphillips2015-03-26
| | | | | | | | | (unbalanced indents) Displaying the offset into an SkPicture hasn't worked for a while so this CL deletes the feature. When "Save Layer" was renamed to "SaveLayer" the code that computes the indent in the list view was broken. This CL patches the problem. Review URL: https://codereview.chromium.org/1034733004
* Silence PNG warnings from SkPngCodec.Gravatar scroggo2015-03-26
| | | | Review URL: https://codereview.chromium.org/1009633005
* use new faster/vector impl for chopping conicsGravatar reed2015-03-26
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1035943002
* Add support for using alternative backends (like DirectX) when creating a GrGpu.Gravatar egdaniel2015-03-26
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1038643002
* add legacy pathop enums; fix uninitialized warningGravatar caryclark2015-03-26
| | | | | | | | | | R=reed@google.com BUG=skia:3588 NOTREECHECKS=true NOTRY=true NOPRESUBMIT=true Review URL: https://codereview.chromium.org/1034073004
* cumulative pathops patchGravatar caryclark2015-03-26
| | | | | | | | | | | | | | | | | | | | | Replace the implicit curve intersection with a geometric curve intersection. The implicit intersection proved mathematically unstable and took a long time to zero in on an answer. Use pointers instead of indices to refer to parts of curves. Indices required awkward renumbering. Unify t and point values so that small intervals can be eliminated in one pass. Break cubics up front to eliminate loops and cusps. Make the Simplify and Op code more regular and eliminate arbitrary differences. Add a builder that takes an array of paths and operators. Delete unused code. BUG=skia:3588 R=reed@google.com Review URL: https://codereview.chromium.org/1037573004
* remove slower scalar code in favor of vectorsGravatar reed2015-03-26
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1001833006
* Add a paint filter utility canvas (SkPaintFilterCanvas)Gravatar fmalita2015-03-26
| | | | | | | | | | Introduce a paint filter proxy base class as a SkDrawFilter replacement, and convert SkDebugCanvas to use the new approach. BUG=skia:3587 R=reed@google.com,mtklein@google.com,robertphillips@google.com,tomhudson@google.com Review URL: https://codereview.chromium.org/1032173002
* Use a wrapper for SkDebugf in SkCodec.Gravatar scroggo2015-03-26
| | | | | | | | | | | It can be silenced or not with one flag. Always print when building for the android framework. Also remove the meaningless define of override to override. BUG=skia:3257 Review URL: https://codereview.chromium.org/1032093004
* SkCodec: conditionally remove fInfoGravatar halcanary2015-03-26
| | | | Review URL: https://codereview.chromium.org/1029423005
* remove #if 0 codeGravatar reed2015-03-26
| | | | | | | BUG=skia: TBR= Review URL: https://codereview.chromium.org/1032273003
* use custom search for pathmeasureGravatar reed2015-03-26
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1037653002
* C++11 override should now be supported by all of {bots,Chrome,Android,Mozilla}Gravatar mtklein2015-03-25
| | | | | | | | | NOPRESUBMIT=true BUG=skia: DOCS_PREVIEW= https://skia.org/?cl=1037793002 Review URL: https://codereview.chromium.org/1037793002
* Use Sk4x to speed-up bounds of an array of pointsGravatar reed2015-03-25
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1015633004
* Add more parameters to GrTextContext::canDrawGravatar cdalton2015-03-25
| | | | | | | | | | | | | Updates canDraw to accept all the same Skia/Gr objects as the drawText functions, since that information may very well be relevant in determining whether a context can draw. Also moves the onDrawTextBlob implementation directly into drawTextBlob. BUG=skia: Review URL: https://codereview.chromium.org/1010113004
* Update 4-at-a-time APIs.Gravatar mtklein2015-03-25
| | | | | | | | | | | There is no reason to require the 4 SkPMFloats (registers) to be adjacent. The only potential win in loads and stores comes from the SkPMColors being adjacent. Makes no difference to existing bench. BUG=skia: Review URL: https://codereview.chromium.org/1035583002
* simple patch to always init SkTextBlob uniqueIDGravatar joshualitt2015-03-25
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1036613002
* SkPDF SkPDFObject::addResources signature simplifiedGravatar halcanary2015-03-25
| | | | | | | | | | - SkPDFcatalog keeps a ordered list of object pointers - Elimiante SkTSet template class - SkPDFObject::addResources signature changes BUG=skia:3585 Review URL: https://codereview.chromium.org/1038523004
* Lazy SKP image decoding in DM.Gravatar mtklein2015-03-25
| | | | | | | | | | | | | | | | | | | @sugoi: Early out to avoid some segfaults in SkImageDecoder_libjpeg.cpp. I am just flailing here... things seem to work, but I have no idea why. This prints out a lot: libjpeg error 85 <End Of Image> from output_raw_data [0 0] @halcanary: I'm skipping on ImageSrc for now. Leon's refactoring that quite a lot. This causes minor diffs for the GPU backend, given that we're now going through the YUV path. It also reduced peak RAM usage on my desktop from 1.26GB to 1.08GB. BUG=skia: Review URL: https://codereview.chromium.org/1010983004
* SkPDF: eliminate skpdfpage classGravatar halcanary2015-03-25
| | | | | | BUG=skia:3585 Review URL: https://codereview.chromium.org/1007083004
* SkPDF: merge skdocument_pdf and skpdfdocumentGravatar halcanary2015-03-25
| | | | | | BUG=skia:3585 Review URL: https://codereview.chromium.org/1034793002
* SKPDF: refactor pdfcatalog and pdfdocumentGravatar halcanary2015-03-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | SkPDFCatalog: - remove first-page-specific code (no longer needed, never used) (e.g. addObject()). - Make use of SkHashMap for lookups (simplifies code). - inline all small methods - emitXrefTable moved to SkPDFDocument.cpp - no longer store offsets in this data structure (moved to SkPDFDocument.cpp) - setFileOffset gone. - own substitute refs directly. SkPDFDocument::EmitPDF() - All sites that call into SkPDFCatalog modified. - catalog.addObject only called in a single place, after the resouceSet is built - offsets moved to local array. SkPDFPage: - finalizePage no longer deals with SkPDFCatalog or resource sets. - GeneratePageTree no longer deals with SkPDFCatalog SkPDFObjRef - emitObject respects the substitution map Unit Tests: - respect SkPDFCatalog::addObject signature change. SkTHash: - #include SkChecksum for SkGoodHash - Copyright notice added Review URL: https://codereview.chromium.org/1033543002
* Add scanline decoding to SkCodec.Gravatar scroggo2015-03-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add an interface for decoding scanlines, and implement that interface in the PNG decoder. Use a separate method to determine whether an image that used a type with alpha was actually opaque. SkScanlineDecoder.h: New interface for decoding scanlines. SkCodec.h: Add getScanlineDecoder. Add a virtual function (with non-virtual caller) for determining whether the image truly had alpha. The client can call this to determine if the image was actually opaque if it reported having alpha. Remove code to sneakily change the passed in alpha type. SkCodec_libpng.*: Split up code onGetPixels into helper functions that can be shared with the scanline decoder. Implement scanline decoding. Implement onReallyHasAlpha. SkSwizzler.*: Add a new SrcConfig as a default, which is invalid. Add a function for setting fDstRow directly. Assert fDstRow is not NULL. BUG=skia:3257 Review URL: https://codereview.chromium.org/1010903003
* SkTHash: add checksum includeGravatar halcanary2015-03-25
| | | | Review URL: https://codereview.chromium.org/1030883006
* Remove SkClipStack's manual rounding of BW clip rectsGravatar robertphillips2015-03-25
| | | | | | | | | | | | | | | The full fix for this bug is nudging the image in device space. That is going to be a large change. This CL should address the immediate problem. This CL will alter the following GMs: clipdrawdraw convex_poly_clip complexclip_bw_* filltypespersp complexclip3_simple BUG=423834 Review URL: https://codereview.chromium.org/1033453003
* SkPDF: skpdfdocument and skpdfpage use skpdfdevice in a const wayGravatar halcanary2015-03-25
| | | | | | BUG=skia:3585 Review URL: https://codereview.chromium.org/1035513003
* SkPDF: add canon assert before adding code that might break itGravatar halcanary2015-03-25
| | | | | | | | | | | Motivation: We can write subsets (by page) of pdf documents (but this in't yet exposed in the public API), but it is a bad idea to mix pages from multiple documents (de-duping will break). This assert verifies that we don't do this by accident in the future. BUG=skia:3585 Review URL: https://codereview.chromium.org/1037573005