49 Commits

Author SHA1 Message Date
sergeyv
3e9999bd86 Explicitly destroy Layer in DeferredLayerUpdater on destroyHardwareResources()
Change-Id: I0987104eabda9a2a302b9e765213aad48f93aea4
Test: refactoring CL. Existing tests still pass
bug:33753499
2017-01-30 16:42:41 -08:00
sergeyv
ec4a4b13ea Use Bitmap in DisplayList & RecordedOps instead of SkBitmap
Test: refactoring cl.
bug:32216791

Change-Id: I1d8a9a6e772e2176b6c2409409a910478b45f8db
2016-10-21 12:11:44 -07:00
Mike Reed
260ab72648 use SkBlendMode instead of SkXfermode
use sk_sp versions of paint setters/getters

Change-Id: I86591a0a8ec92e6039776cbf00424ea24f585b28
2016-10-13 17:14:52 -04:00
Romain Guy
253f2c213f Linear blending, step 1
NOTE: Linear blending is currently disabled in this CL as the
      feature is still a work in progress

Android currently performs all blending (any kind of linear math
on colors really) on gamma-encoded colors. Since Android assumes
that the default color space is sRGB, all bitmaps and colors
are encoded with the sRGB Opto-Electronic Conversion Function
(OECF, which can be approximated with a power function). Since
the power curve is not linear, our linear math is incorrect.
The result is that we generate colors that tend to be too dark;
this affects blending but also anti-aliasing, gradients, blurs,
etc.

The solution is to convert gamma-encoded colors back to linear
space before doing any math on them, using the sRGB Electo-Optical
Conversion Function (EOCF). This is achieved in different
ways in different parts of the pipeline:

- Using hardware conversions when sampling from OpenGL textures
  or writing into OpenGL frame buffers
- Using software conversion functions, to translate app-supplied
  colors to and from sRGB
- Using Skia's color spaces

Any type of processing on colors must roughly ollow these steps:

[sRGB input]->EOCF->[linear data]->[processing]->OECF->[sRGB output]

For the sRGB color space, the conversion functions are defined as
follows:

OECF(linear) :=
linear <= 0.0031308 ? linear * 12.92 : (pow(linear, 1/2.4) * 1.055) - 0.055

EOCF(srgb) :=
srgb <= 0.04045 ? srgb / 12.92 : pow((srgb + 0.055) / 1.055, 2.4)

The EOCF is simply the reciprocal of the OECF.
While it is highly recommended to use the exact sRGB conversion
functions everywhere possible, it is sometimes useful or beneficial
to rely on approximations:

- pow(x,2.2) and pow(x,1/2.2)
- x^2 and sqrt(x)

The latter is particularly useful in fragment shaders (for instance
to apply dithering in sRGB space), especially if the sqrt() can be
replaced with an inversesqrt().

Here is a fairly exhaustive list of modifications implemented
in this CL:

- Set TARGET_ENABLE_LINEAR_BLENDING := false in BoardConfig.mk
  to disable linear blending. This is only for GLES 2.0 GPUs
  with no hardware sRGB support. This flag is currently assumed
  to be false (see note above)
- sRGB writes are disabled when entering a functor (WebView).
  This will need to be fixed at some point
- Skia bitmaps are created with the sRGB color space
- Bitmaps using a 565 config are expanded to 888
- Linear blending is disabled when entering a functor
- External textures are not properly sampled (see below)
- Gradients are interpolated in linear space
- Texture-based dithering was replaced with analytical dithering
- Dithering is done in the quantization color space, which is
  why we must do EOCF(OECF(color)+dither)
- Text is now gamma corrected differently depending on the luminance
  of the source pixel. The asumption is that a bright pixel will be
  blended on a dark background and the other way around. The source
  alpha is gamma corrected to thicken dark on bright and thin
  bright on dark to match the intended design of fonts. This also
  matches the behavior of popular design/drawing applications
- Removed the asset atlas. It did not contain anything useful and
  could not be sampled in sRGB without a yet-to-be-defined GL
  extension
- The last column of color matrices is converted to linear space
  because its value are added to linear colors

Missing features:
- Resource qualifier?
- Regeneration of goldeng images for automated tests
- Handle alpha8/grey8 properly
- Disable sRGB write for layers with external textures

Test: Manual testing while work in progress
Bug: 29940137

Change-Id: I6a07b15ab49b554377cd33a36b6d9971a15e9a0b
2016-10-11 17:47:58 -07:00
sergeyv
aebbbef565 HWUI: do nothing in case of empty layer
bug:28862058
Change-Id: I8e09a5c33d0eb00a829be4df706dab49cad48b1e
2016-05-31 14:18:02 -07:00
Chris Craik
3741328947 Fix hw layer overdraw/update visualization
Fixes: 28748255

Change-Id: I83b531cdf5e4407fd17edd72d96e6189924926fa
2016-05-16 13:54:02 -07:00
Sergei Vasilinetc
45d6e79565 Merge "Draw textShadow always first." into nyc-dev 2016-05-11 21:34:19 +00:00
sergeyv
284b765e3c Draw textShadow always first.
Interleaving text and shadow rendering resulted in issuing draw commands from FontRenderer::renderDropShadow.

bug: 28528923
Change-Id: Ife2677f58180aaf10ec74d7c6efe5c44fe248daa
2016-05-11 10:30:14 -07:00
TreeHugger Robot
b2e36d7939 Merge "Use LUT for computing final shadow alpha" into nyc-dev 2016-05-04 01:03:42 +00:00
Chris Craik
138c21fbec Use LUT for computing final shadow alpha
bug:27415250

Significantly reduces shadow fragment shader computation.

Change-Id: Ie9b3c712700754b3734d0ae9cda8751c298fc59e
2016-05-03 14:36:29 -07:00
Chris Craik
8438a7297c Merge "Fix oval positioning when drawn with patheffect" into nyc-dev 2016-04-27 20:52:51 +00:00
Chris Craik
e98a046d31 Fix oval positioning when drawn with patheffect
Fixes: 28396277

Change-Id: I9e21696d81d7cd219f3eaa081bf3d9ba988fe051
2016-04-26 15:38:33 -07:00
sergeyv
92a5d4b99a Stop always set OffsetByFudgeFactor in renderVertexBuffer
bug:27857128
Change-Id: Id92e0a5790b14f76cfa8bb38e8b11ce649775da0
2016-04-21 15:20:27 -07:00
Chris Craik
74af6e282f Fix OffscreenBuffer leak
Fixes: 27941148

Make OffscreenBuffer lifecycle an explicit (and tested) contract between
FrameBuilder and BakedOpRenderer, entirely separate from dispatch. This
makes it safe to reject any rendering work via overdraw content
rejection (before it gets to a BakedOpDispatcher).

Adds a couple tests around OffscreenBuffer leaks, and switches
OffscreenBuffer tests to RENDERTHREAD_TEST macro, as appropriate.

Change-Id: Id114b835d042708ae921028fb4b17e5fa485fe64
2016-04-05 20:42:37 +00:00
Chris Craik
70969ccde4 Fix layer damage and clipping for Text shadows
Fixes: 27787426

Change-Id: I4c65cca0cfcd343a9cfbaedd3a32b83f90df2ecf
2016-03-30 18:09:18 -07:00
Chris Craik
a204848b1d Create first class unbounded ColorOp
bug:27810783

Previous drawColor->drawPaint conversion failed to preserve unbounded
nature of drawColor from old pipeline.

Change-Id: Ifd7a7b9d645f0887e252e48ca95d3195ee31615f
2016-03-25 15:13:23 -07:00
Chris Craik
f6c20e4b42 Fix merged bitmap mesh generation and reenable merging
bug:26793764
bug:26569206
Change-Id: I54628e99b61f58f5726a387ea3599c29695c0efc
2016-03-02 15:34:02 -08:00
Chris Craik
b67985f337 Merge changes I4f72448f,I74b7233c into nyc-dev
* changes:
  Fix ripple positioning within scrolled node
  Clip projected ripples to outlines
2016-03-02 18:52:35 +00:00
Chris Craik
678ff81105 Clip projected ripples to outlines
bug:27343928

Also fixes positioning of ripples to a scrolled projection receiver.

Change-Id: I74b7233c46d7c15839ca8bf50e188ba6646d7432
2016-03-02 10:29:15 -08:00
Chris Craik
0066a01d7c Fix arc positioning
bug:27389290

Change-Id: I479a34ea079f1fce1c308aa809a57885ffa1d004
2016-02-29 13:34:44 -08:00
Chris Craik
e2822e4c79 Fix positioning in path fallback case
bug:26923968
Change-Id: Iaf686fb69b629cf5c8762188073e57c8664150a8
2016-02-22 16:42:24 -08:00
Chris Craik
e8c3c813b0 Fix TextDropShadowCacheTests and glyph_t everywhere
Change-Id: I943eae4e9408c77bdfba6304ba7ee3e862351a41
2016-02-08 22:45:22 +00:00
Chris Craik
c8ca8ceba0 Merge "Simplify shadow task cleanup" 2016-02-04 19:04:18 +00:00
Chris Craik
d8165e863b Simplify shadow task cleanup
bug:26964750

Removes 3 news/deletes per task, as well as the waitOnTask inside destruction

Change-Id: Iec11165bcfa7f98ca41574885734c2ad39328cc8
2016-02-03 16:30:11 -08:00
Chris Craik
bcda2da5fe Merge "Early kickoff of shadow tasks" 2016-02-03 01:17:37 +00:00
Chris Craik
6e068c0182 Early kickoff of shadow tasks
bug:26562703

Change-Id: I7cdf18f2c662380bd31c7ffeefd5c3f569e5c1c6
2016-02-02 17:10:25 -08:00
Chris Craik
c0f3f2f8c0 Fix null offscreen buffer crash
bug:26571145

Change-Id: I6e885fd6135c0987360275cbf5b46475c24401d4
2016-02-02 16:12:32 -08:00
John Reck
975591a7af Add fine-grained debug layer
Full GLES error checking layer via -include
trickery. Change DEBUG_OPENGL to a level system.

HIGH = every GL call is error checked
MODERATE = checkpointing at interesting spots
LOW = only asserts there are no errors at the end of a frame
 or when the FBO changes
NONE = AIN'T GOT NO TIME FOR ERRORS GOTTA GO FAST!

Change-Id: Ibe81aae93d942059c4ddf1cbb11c828b7ce4c10b
2016-01-25 16:15:14 -08:00
John Reck
9372ac3621 Fix ordering of texture->upload arguments
Caught by scatter-shotting GL_CHECKPOINTS which
seem generally useful to have

Bug: 26609444

Change-Id: Ie31d9297d8dae56405126720f338b4256c8bae77
2016-01-19 12:58:48 -08:00
John Reck
7db5ffb7db Revert "Revert "Fix leak in unclipped save layer""
This reverts commit a6fc36d4cd7f27147fd304960acdd1d2f47fc1c6.

Change-Id: I6b96afe4a32dc894d5b17cfb870b45063257aed2
2016-01-15 13:59:37 -08:00
Daniel Chapin
a6fc36d4cd Revert "Fix leak in unclipped save layer"
This reverts commit 8e068d5fd38dd103a122215fb6d185135182edf3.

Change-Id: Icd8ad5a2450db34aacecf748d6103df9faaa4c81
2016-01-15 03:02:58 +00:00
John Reck
8e068d5fd3 Fix leak in unclipped save layer
Change-Id: I31f146af2cb6f5cb8dd19bb0feff0ae35b864eba
2016-01-14 16:28:28 -08:00
John Reck
38e0c32852 Track texture memory globally
Also mostly consolidates texture creation

Change-Id: Ifea01303afda531dcec99b8fe2a0f64cf2f24420
2016-01-14 13:42:12 -08:00
Chris Craik
89ceb5c977 Fix 9 patch mesh usage
Change-Id: I638fd5816d68a9ecd7f1709624fde2f372de5fa7
2016-01-12 13:45:34 -08:00
Chris Craik
f9b3678534 Fix path position in BakedOpDispatcher
Change-Id: I73f4bbcf3fe6f5d3fbdf8058b598bb8f1622097c
2016-01-11 13:26:58 -08:00
Chris Craik
7435eb148e Unclipped savelayer support in new renderer
bug:22480459

Change-Id: I89dd5de8d7d008a1e298d227d767aabff5c96e27
2016-01-08 16:05:35 -08:00
Chris Craik
b87eadda18 Partial unclipped save layer support
Not yet implemented in renderer.

Change-Id: I491ec6e7886bfa313d1db71dd5981690d45b78a9
2016-01-07 15:42:45 -08:00
Chris Craik
7cbf63da4f Rework op macros
Makes it simpler to add defer-only or render-only opps.

Change-Id: I6c8ec64e76d419635429055cff6d96360d21706d
2016-01-06 14:04:22 -08:00
Chris Craik
e4db79de12 Stencil support in new recorder/reorderer
bug:22480459
bug:26358504

Adds complex (non-rectangular) clipping support, and overdraw
visualization. Doesn't support stencil clipping in layers.

Change-Id: I8d10c7f1d2769ab5756774ca672344cc09901f87
2016-01-04 17:00:03 -08:00
Chris Craik
d2dfd8f128 Add TextureView support to new renderer/reorderer
bug:22480459

Change-Id: I2e4c0bc6b904706132f3f5087ededc9cac9b40fb
2015-12-16 15:35:40 -08:00
Chris Craik
d7448e65e2 Add TextOnPath support to new reorderer/renderer
bug:22480459

Change-Id: I302048ec09901420c15003e21e44a551cc59c7ad
2015-12-16 10:27:17 -08:00
Chris Craik
e29ce6f51d Add functor support to new reorderer/renderer
bug:22480459

Change-Id: I95df7e0504f62d254e8ffbd8d65ed5d763080b9c
2015-12-15 10:40:54 -08:00
Chris Craik
4c1b495f4f Merge "Avoid unneeded rect params" 2015-12-15 17:32:59 +00:00
Chris Craik
5430ab220b Avoid unneeded rect params
Change-Id: I2d8dcf6b09fdc554a403ac74763bf856b5f5d9fa
2015-12-10 16:29:01 -08:00
Chris Craik
268a9c0f29 Add property animations to new reorderer/renderer
bug:22480459

Change-Id: Id8091038004245a56deb48bf3625edfd08ab8681
2015-12-10 11:09:27 -08:00
Chris Craik
f09ff5aa57 Add bitmapmesh, rect, and patch rendering
bug:22480459

Change-Id: Id9e9146997dd018b3e4e785c2bc13689e3cf7c3c
2015-12-09 16:06:09 -08:00
Chris Craik
386aa03179 Add more shape drawing to new reorderer/renderer
bug:22480459

Add support for outsetting final bounds based on stroke.

Change-Id: I659318ccec51882bba1906ce3c7042288ce35c30
2015-12-09 11:29:04 -08:00
Chris Craik
15c3f19a44 Merged op dispatch in OpReorderer
bug:22480459

Also switches std::functions to function pointers on OpReorderer, and
switches AssetAtlas' entry getter methods to using pixelRef pointers,
so it's clear they're the keys.

Change-Id: I3040ce5ff4e178a8364e0fd7ab0876ada7d4de05
2015-12-07 12:34:46 -08:00
Chris Craik
9e7fcfda28 Move BakedOpDispatcher to separate file
Change-Id: If7aad6db6b7e54a33eac9b9eddbe8cd844207282
2015-11-25 13:27:33 -08:00