Update rive-cpp to 2.0 version
[platform/core/uifw/rive-tizen.git] / submodule / skia / RELEASE_NOTES.txt
1 Skia Graphics Release Notes
2
3 This file includes a list of high level updates for each milestone release.
4
5 Milestone 103
6 -------------
7   * SkSamplingOptions now includes anisotropic filtering. Implemented on GPU only.
8   * SkBitmap::clear and SkBitmap::clearColor take in SkColor4fs
9
10 * * *
11
12 Milestone 102
13 -------------
14   * Add glGetFloatv and glSamplerParameterf to GrGLInterface.
15   * GrGLCreateNativeInterface is removed. Use GrGLMakeNativeInterface.
16   * GrContextOptions::fSharpenMipmappedTextures is removed. MIP LOD is now always
17     biased on the GPU backend. The CPU backend implementation is modified to match
18     this behavior.
19   * Passing SkCanvas::kStrict_SrcRectConstraint disables mipmapping. The old behavior differed
20     between GPU and CPU. CPU always computed a new set of mipmap based on the subset. GPU restricted
21     the sampling coordinates to the subset in the base level but upper level pixels that map to
22     pixels outside the subset in the base level were still used. To get the previous CPU behavior
23     use SkImage::makeSubset() to make a subset image and draw that. The previous GPU behavior is
24     similar, though not exactly, equivalent to making a mipmapped image shader from the original
25     image and applying that to a rectangle.
26   * Fully disable experimental support for HW tessellation shaders.
27     GrContextOptions::fEnableExperimentalHardwareTessellation is ignored and behaves as if it is
28     false. The optimized path renderer no longer requires hardware tessellation at all, and
29     is automatically enabled when drawing to an SkSurface created with MSAA, or when
30     GrContextOptions::fInternalMultisampleCount is set to a non-zero value.
31
32 * * *
33
34 Milestone 101
35 -------------
36   * Add maxSurfaceSampleCountForColorType(SkColorType ct) in GrContextThreadSafeProxy
37   * Enums SkAlphaType and SkColorType are broken out into their own header files in include/core/
38
39 * * *
40
41 Milestone 100
42 -------------
43   * Skia now requires C++17 and the corresponding standard library (or newer).
44   * Skia on iOS now requires iOS 11 to build; earlier versions of iOS do not support C++17.
45   * The skstd::string_view and skstd::optional Skia classes have been replaced with the C++17 native
46     std::string_view and std::optional.
47   * Added SkSurface::resolveMSAA api to force Skia to resolve MSAA draws. Useful for when
48     Skia wraps a client's texture as the resolve target.
49   * All of the `makeShader` functions associated with `SkRuntimeEffect` no longer take an
50     `isOpaque` parameter. These functions will now make a best effort to determine if your
51     shader always produces opaque output, and optimize accordingly. If you definitely want your
52     shader to produce opaque output, do so in the shader's SkSL code. This can be done by adjusting
53     any `return` statement in your shader with a swizzle: `return color.rgb1;`.
54     https://review.skia.org/506462
55   * SkRSXform is now exported to DLL/.so files.
56 * * *
57
58 Milestone 99
59 ------------
60   * Added two new intrinsic functions to SkSL for use in runtime effects:
61       vec3 toLinearSrgb(vec3 color)
62       vec3 fromLinearSrgb(vec3 color)
63     These convert RGB color values between the working color space (the color space of the
64     destination surface) and a known, fixed color space. `toLinearSrgb` converts a color to the
65     sRGB color gamut, with a linear transfer function. `fromLinearSrgb` converts a color from that
66     same color space. These are helpful for effects that need to work in a specific color space, or
67     want to apply effects (like lighting) that work best in a linear color space.
68     Note that if the destination surface has no color space (color space is `nullptr`), these
69     intrinsics will do no conversion, and return the input color unchanged.
70     https://review.skia.org/481416
71   * Added a new variant of SkImageFilters::RuntimeShader that supports multiple child nodes.
72     https://review.skia.org/489536
73   * Add the ability to specify palette overrides in SkFontArguments. Implemented
74     for the FreeType-backed SkFontMgrs.
75
76 * * *
77
78 Milestone 98
79 ------------
80   * The following functions and methods are not defined in SkSurface when SK_SUPPORT_GPU is 0:
81     MakeFromBackendTexture, MakeFromBackendRenderTarget, MakeRenderTarget,
82     getBackendTexture, getBackendRenderTarget, replaceBackendTexture. flush() with parameters
83     was removed as well. These were all no-ops anyway when just the CPU backend was compiled in
84     (noting that flush() and flushAndSubmit() are still no-ops on the CPU backend).
85   * GrBackendSemaphore only includes methods that match the GPU backend that Skia was compiled for.
86     For example, initVulkan and vkSemaphore are not defined unless the Vulkan backend is compiled
87     into Skia.
88   * Surfaces and images are now limited to just under 2GB of total size. Previously, larger images
89     could be created, but the CPU backend would fail to index them correctly.
90   * SkCanvas::drawVertices and SkCanvas::drawPatch variants that did not take SkBlendMode are
91     removed.
92   * SkImageFilters::RuntimeShader is a new public API that enables adding RuntimeShaderEffects into
93     image filter graph.
94   * SkImage::makeRawShader is a new public API that creates "raw" image shaders. makeRawShader
95     functions like SkImage::makeShader, but for images that contain non-color data. This includes
96     images encoding things like normals, material properties (eg roughness), heightmaps, or any
97     other purely mathematical data that happens to be stored in an image. These types of images are
98     useful with some programmable shaders (ie SkRuntimeEffect).
99     Raw image shaders work like regular image shaders (including filtering and tiling), with a few
100     major differences:
101       - No color space transformation is ever applied (the color space of the image is ignored).
102       - Images with an alpha type of kUnpremul are not automatically premultiplied.
103       - Bicubic filtering is not supported. If SkSamplingOptions::useCubic is true, these factories
104         will return nullptr.
105   * Removed SkCanvas::markCTM and SkCanvas::findMarkedCTM. These were created to be used with other
106     features that have since been deleted, so they served no purpose.
107   * Added limited JPEGXL support.
108
109 * * *
110
111 Milestone 97
112 ------------
113   * Added basic support for vulkan DRM modifiers. All of these are treated as read only textures
114     internally (versus querying specific modifier support). Clients can either pass a flag to Vulkan
115     GrBackendFormat to say it uses modifiers or pass the VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
116     to a GrBackendTexture via the GrVkImageInfo struct.
117   * The following functions and methods are not defined in SkImage when SK_SUPPORT_GPU is 0:
118     MakeTextureFromCompressed, MakeFromTexture, MakeFromCompressedTexture,
119     MakeCrossContextFromPixmap, MakeFromAdoptedTexture, MakeFromYUVATextures,
120     MakeFromYUVAPixmaps, MakePromiseTexture, MakePromiseYUVATexture, MakeBackendTextureFromSkImage,
121     flush, flushAndSubmit, getBackendTexture, makeTextureImage.
122     These were all no-ops anyway when just the CPU backend was compiled in.
123
124 * * *
125
126 Milestone 96
127 ------------
128   * SkRuntimeEffect no longer clamps the RGB values of an effect's output to the range 0..A.
129     This makes it easier to use a hierarchy of SkSL shaders where intermediate values do not
130     represent colors but are, for example, non-color inputs to a lighting model.
131     http://review.skia.org/452558
132
133 * * *
134
135 Milestone 95
136 ------------
137   * Minimum supported iOS raised from 8 to 11. Skia may build back to iOS 9 but versions older
138     than 11 are not tested. Community contributions to support versions 9 and 10 of iOS may be
139     considered, but they may not be complex as they cannot be tested.
140
141 * * *
142
143 Milestone 94
144 ------------
145   * Metal backend has been changed to track command buffer resources manually
146     rather than using retained resources.
147     https://review.skia.org/432878
148
149   * Added virtual onResetClip() to SkCanvas for Android Framework, to emulate the soon-to-be-removed
150     expanding clip ops guarded by SK_SUPPORT_DEPRECATED_CLIPOPS.
151     https://review.skia.org/430897
152
153   * Removed SK_SUPPORT_DEPRECATED_CLIPOPS build flag. Clips can only be intersect and difference.
154     https://review.skia.org/436565
155
156   * There is a new syntax for invoking (sampling) child effects in SkSL. Previously, children
157     (shaders, colorFilters, blenders) were invoked using different overloads of `sample`. That
158     syntax is deprecated (but still supported). Now, the child behaves like an object, with a method
159     name `eval`. The arguments to these `eval` methods are the same as the arguments in the old
160     `sample` intrinsics. For example:
161       // Old syntax:
162         sample(shader, xy)
163         sample(colorFilter, color)
164         sample(blender, srcColor, dstColor)
165       // New syntax:
166         shader.eval(xy)
167         colorFilter.eval(color)
168         blender.eval(srcColor, dstColor)
169     https://review.skia.org/444735
170
171 * * *
172
173 Milestone 93
174 ------------
175   * Removed SkPaint::getHash
176     https://review.skia.org/419336
177
178   * Removed SkShaders::Lerp. It was unused (and easy to replicate with SkRuntimeEffect).
179     https://review.skia.org/419796
180
181   * The default value of GrContextOptions::fReduceOpsTaskSplitting is now enabled.
182     https://review.skia.org/419836
183
184   * Removed SkMatrix44
185
186 * * *
187
188 Milestone 92
189 ------------
190   * Hides SkPathEffect::computeFastBounds() from public API; external subclasses of SkPathEffect
191     must implement onComputeFastBounds() but can return false to signal it's not computable.
192     https://review.skia.org/406140
193
194   * Add SkM44::RectToRect constructor (SkM44's equivalent to SkMatrix::RectToRect)
195     https://review.skia.org/402957
196
197   * Metal support has been removed for versions of iOS older than 10.0 and MacOS older than 10.14.
198     https://review.skia.org/401816
199
200   * Removed custom attributes from SkVertices and the corresponding `varying` feature from
201     SkRuntimeEffect.
202     https://review.skia.org/398222
203
204   * Dropped support for mixed samples. Mixed samples is no longer relevant for Ganesh. DMSAA and the
205     new Ganesh architecture both rely on full MSAA, and any platform where mixed samples is
206     supported will ultimately not use the old architecture.
207
208   * SkRuntimeEffect::Make has been removed. It is replaced by MakeForShader and MakeForColorFilter.
209     These functions do stricter error checking on the SkSL, to ensure it is valid for a particular
210     stage of the Skia pipeline.
211     https://review.skia.org/402156
212
213 * * *
214
215 Milestone 91
216 ------------
217   * The SkSL DSL API has been moved into public headers, although it is still under active
218     development and isn't quite ready for prime time yet.
219     https://review.skia.org/378496
220
221   * Skia's GPU backend no longer supports NVPR. Our more recent path renderers are more
222     performant and are not limited to nVidia hardware.
223
224   * SkRuntimeEffect now supports uniforms of type int, int2, int3, and int4. Per the OpenGL ES
225     Shading Language Version 1.00 specification, there are few guarantees about the representation
226     or range of integral types, and operations that assume integral representation (eg, bitwise),
227     are not supported.
228     https://review.skia.org/391856
229
230   * SkRuntimeEffect requires that 'shader' variables be declared as 'uniform'. The deprecated
231     syntax of 'in shader' is no longer supported.
232     https://review.skia.org/393081
233
234 * * *
235
236 Milestone 90
237 ------------
238   * Renamed use of sk_cf_obj in external Metal types to sk_cfp.
239     https://review.skia.org/372556
240
241   * GrDirectContext::ComputeImageSize() is removed. Use SkImage::textureSize() instead.
242     https://review.skia.org/368621
243     https://review.skia.org/369317
244     https://review.skia.org/371958
245
246   * Remove SkImageFilter::MakeMatrixFilter as it was unused and replaced with
247     SkImageFilters::MatrixTransform.
248     https://review.skia.org/366318
249
250   * Refactored particle system to use a single code string containing both Effect and Particle code.
251     Uniform APIs are now shared for all program entry points, and no longer prefixed with 'Effect'
252     or 'Particle'. For example, instead of `SkParticleEffect::effectUniformInfo` and
253     `SkParticleEffect::particleUniformInfo`, there is just `SkParticleEffect::uniformInfo`.
254
255   * Remove SkImageFilter::CropRect from the public API as it's no longer usable. All factories
256     work with 'SkRect', 'SkIRect', or nullable pointers to 'Sk[I]Rect'.
257     https://review.skia.org/361496
258
259   * Remove deprecated SkImageFilter factory functions and supporting types. All default-provided
260     SkImageFilters are now only constructed via 'include/effects/SkImageFilters.h'
261     https://review.skia.org/357285
262
263   * Added SkRuntimeEffect::makeImage() to capture the output of an SkRuntimeEffect in an SkImage.
264     https://review.skia.org/357284
265
266   * Updated SkRuntimeEffect::Make() to take an Options struct. It also now returns a Results struct
267     instead of a tuple.
268     https://review.skia.org/363785
269     https://review.skia.org/367060
270
271   * Changed SkRuntimeEffect::Varying to have lower-case member names, with no 'f' prefix.
272     https://review.skia.org/365656
273
274   * Changed SkRuntimeEffect::Uniform to have lower-case member names, with no 'f' prefix.
275     https://review.skia.org/365696
276
277   * Deprecate (and ignore) SkAndroidCodec::ExifOrientation
278     https://review.skia.org/344763
279
280   * Fix several minor issues in lighting image filters:
281     - The spotlight falloff exponent is no longer clamped to [1, 128]. SVG 1.1 requires the specular
282       lighting effect's exponent (shininess) to be clamped; not the spotlight's falloff. Any such
283       parameter clamping is the client's responisibility, which makes Skia's lighting effect easily
284       adaptable to SVG 1.1 (clamp exponent) or SVG 2 (no clamp).
285     - Fix spotlight incorrectly scaling light within the cone angle.
286     - Move saturation of RGBA to after multiplying lighting intensity with the lighting color, which
287       improves rendering when diffuse and specular constants are greater than 1.
288     https://review.skia.org/355496
289
290   * SkDeferredDisplayListRecorder::makePromiseTexture has moved to SkImage::MakePromiseTexture.
291     New code should use the new entry point â€“ migration CLs will be coming soon.
292     https://review.skia.org/373716
293
294 Milestone 89
295 ------------
296   * Removed SkYUVAIndex and SkYUVASizeInfo. These were no longer used in any
297     public APIs.
298     https://review.skia.org/352497
299
300   * Numerous changes to SkRuntimeEffect, aligning the capabilities and restrictions with
301     The OpenGL ES Shading Language 1.00 (aka, the shading language of OpenGL ES2 and WebGL 1.0).
302     All built-in functions from sections 8.1 through 8.6 implemented & tested on all backends.
303     Removed types and features that require newer versions of GLSL:
304       https://review.skia.org/346657  [Non-square matrices]
305       https://review.skia.org/347046  [uint, short, ushort, byte, ubyte]
306       https://review.skia.org/349056  [while and do-while loops]
307       https://review.skia.org/350030  [Bitwise operators and integer remainder]
308
309   * Add SkShadowUtils::GetLocalBounds. Generates bounding box for shadows
310     relative to path.
311     https://review.skia.org/351922
312
313   * Removed SkPerlinNoiseShader::MakeImprovedNoise.
314     https://review.skia.org/352057
315
316   * Removed deprecated version of MakeFromYUVATextures. Use the version
317     that takes GrYUVABackendTextures instead.
318     https://review.skia.org/345174
319
320   * SkAnimatedImage: Always respect exif orientation
321     Replace SkPixmapPriv::ShouldSwapWidthHeight with
322     SkEncodedOriginSwapsWidthHeight.
323     https://review.skia.org/344762
324
325   * Add kDirectionalLight_ShadowFlag support. If enabled, light position represents
326     a vector pointing towards the light, and light radius is blur radius at elevation 1.
327     https://review.skia.org/321792
328
329   * Support GL_LUMINANCE8_ALPHA8 textures. These can be used with GrBackendTexture APIs
330     on GrDirectContext and as planes of YUVA images via GrYUVABackendTextures.
331     https://review.skia.org/344761
332
333   * Removed previously deprecated SkImage::MakeFromYUVATexturesCopyToExternal.
334     https://review.skia.org/342077
335
336   * Add versions of GrDirectContext::createBackendTexture and updateBackendTexture
337     that take a GrSurfaceOrigin. The previous versions are deprecated.
338     https://review.skia.org/341005
339
340   * Remove support for deprecated kDontClipToLayer_SaveLayerFlag in SkCanvas::SaveLayerRec
341     https://review.skia.org/339988
342
343   * Expose more info in SkCodec::FrameInfo
344     https://review.skia.org/339857
345
346   * Added dither control to the SkImageFilters::Shader factory.
347     https://review.skia.org/338156
348
349   * Add MTLBinaryArchive parameter to GrMtlBackendContext. This allows
350     Skia to cache PipelineStates in the given archive for faster
351     shader compiles on future runs. The client must handle loading and
352     saving of the archive.
353     https://review.skia.org/333758
354
355   * Deprecated enum SkYUVAInfo::PlanarConfig has been removed.
356     https://review.skia.org/334161
357
358   * Deprecated SkImage factories have been removed from
359     SkDeferredDisplayListRecorder.
360
361   * The following YUV image factories have been removed:
362     SkImage::MakeFromYUVTexturesCopyWithExternalBackend
363     SkImage::MakeFromNV12TexturesCopyWithExternalBackend
364     Replacement pattern outlined below.
365         1) Make image using MakeFromYUVATextures
366         2) Make a SkSurface around result texture using SkSurface::MakeFromBackendTexture
367         3) surface->getCanvas()->drawImage(image, 0, 0);
368         4) surface->flushAndSubmit()
369         5) Optional: SkImage::MakeFromBackendTexture() to use as SkImage.
370     https://review.skia.org/334596
371
372   * Added a new interface for GrDirectContext creation in Metal, using
373     a new struct called GrMtlBackendContext. The previous interface taking
374     a MTLDevice and MTLCommandQueue is deprecated.
375     https://review.skia.org/334426
376
377   * SkCanvas::flush has been deprecated.
378
379 * * *
380
381 Milestone 88
382 ------------
383
384   * SkYUVAInfo now has separate enums for division of channels among planes and
385     the subsampling. The previous combined enum, PlanarConfig, is deprecated.
386     https://review.skia.org/334102
387
388   * Simplified SkDeferredDisplayListRecorder promise image API. Removed "release"
389     callback and renamed "done" callback to "release". The new "release" proc can
390     be null. Added a new SkYUVAInfo-based factory for YUVA promise texture images
391     and deprecated the old SkYUVAIndex-based one.
392     https://review.skia.org/331836
393     https://review.skia.org/333519
394
395   * Limit the types and intrinsics supported in SkRuntimeEffect to GLSL ES 1.00
396     https://review.skia.org/332597
397
398   * Add AVIF support to SkHeifCodec.
399
400   * Add support for creating SkSurfaceCharacterizations directly for use by a
401     GrVkSecondaryCBDrawContext.
402     https://review.skia.org/331877
403
404   * Removed SkSurfaceProps::kLegacyFontHost_InitType, SkFontLCDConfig, and related code.
405     The default pixel geometry for SkSurfaceProps is now kUnknown instead of kRGB_H.
406     The removal was guarded by the SK_LEGACY_SURFACE_PROPS build flag which was later removed.
407     https://review.skia.org/322490
408     https://review.skia.org/329364
409
410   * Legacy 8-bit YUV interface removed from SkImageGenerator. Use more flexible SkYUVAPixmaps-
411     based interface instead.
412     https://review.skia.org/327917
413
414   * New variant of SkImage::MakeFromYUVATextures. Takes a new type GrYUVATextures
415     which wraps an SkYUVAInfo and compatible set of GrBackendTextures. The provides
416     a more complete and structured specification of the planar configuration. Previous
417     version is deprecated.
418     Already deprecated MakeFromYUVATexturesCopyToExternal added to replace other deprecated
419     APIs. It's not recommended that clients use this and instead use the pattern described
420     in the API comment.
421     https://review.skia.org/317762
422     https://review.skia.org/329956
423
424   * Add field to GrContextOptions to disable mipmap support even if the backend
425     supports it.
426
427   * SkTPin() removed from public API.
428
429   * Add new SkImageFilters::Blend factory function, in place of the now deprecated
430     SkImageFilters::Xfermode factory function. Behavior is identical, but name better matches
431     conventions in SkShader and SkColorFilter.
432     https://review.skia.org/324623
433
434   * SkImageFilters::Foo() factory functions now accept SkIRect, SkRect, and optional SkIRect* or
435     SkRect*, instead of previously just the optional SkIRect*. Internally, the crop rects are stored
436     as floats to allow for fractional crops to be defined in the local coordinate system (before
437     transformation by the canvas matrix).
438     https://review.skia.org/324622
439
440   * Add new SkImageFilters::Shader factory and deprecate SkImageFilters::Paint factory. All
441     supported/valid Paint() filters can be represented more cleanly as a Shader image filter.
442     https://review.skia.org/323680
443
444   * GrContext has been replaced by two separate classes: GrDirectContext which is
445     the traditional notion of GrContext, and GrRecordingContext which is a context
446     that is recording an SkDeferredDisplayList and therefore has reduced functionality.
447     Unless you are using SkDeferredDisplayList, migrate directly to GrDirectContext in
448     all cases.
449
450   * CPU sync bool added to SkSurface::flushAndSubmit() and GrContext::flushAndSubmit()
451
452   * Removed legacy variant of SkImage::MakeFromYUVAPixmaps. Use the version that
453     takes SkYUVAPixmaps instead. It has a more structured description of the
454     planar configuration.
455     https://review.skia.org/322480
456
457   * Some SkImage YUV image factories have been removed. Replacement patterns
458     outlined below.
459     SkImage::MakeFromYUVATexturesCopy
460         1) Make SkImage from YUVA planes using SkImage::MakeFromYUVATextures
461         2) Use Skia to allocate a surface using SkSurface::MakeRenderTarget
462         3) surface->getCanvas()->drawImage(image, 0, 0);
463         4) surface->makeImageSnapShot() produces RGBA image.
464     SkImage::MakeFromYUVATexturesCopyWithExternalBackend
465         1) Make image using MakeFromYUVATextures
466         2) Make a SkSurface around result texture using SkSurface::MakeFromBackendTexture
467         3) surface->getCanvas()->drawImage(image, 0, 0);
468         4) surface->flushAndSubmit()
469         5) Optional: SkImage::MakeFromBackendTexture() to use as SkImage.
470     SkImage::MakeFromNV12TexturesCopy
471         Same as SkImage::MakeFromYUVATexturesCopy
472     https://review.skia.org/321537
473
474   * GrBackendRenderTargets which are created with a stencilBits param, now require
475     the stencilBits to be 0, 8, or 16.
476     https://review.skia.org/321545
477
478 * * *
479
480 Milestone 87
481 ------------
482
483   * GrVkImageInfo now has a field for sample count. GrBackendRenderTarget constructor
484     that took both a GrVkImageInfo and separate sample count is deprecated. Use the
485     version without sample count instead. Similarly, GrD3DTextureResourceInfo now
486     has a sample count field and GrBackendRenderTarget no longer takes a separate
487     sample count for Direct3D. The sample count for GrBackendRenderTarget is now
488     directly queried from MtlTexture rather than passed separately. The version that
489     takes a separate sample count is deprecated and the parameter is ignored.
490     https://review.skia.org/320262
491     https://review.skia.org/320757
492     https://review.skia.org/320956
493
494   * Added deprecation warning for Metal support on MacOS 10.13, iOS 8.3, and older.
495     https://review.skia.org/320260
496
497   * GrVkImageInfo now has a field for sample count. GrBackendRenderTarget constructor
498     that took both a GrVkImageInfo and separate sample count is deprecated. Use the
499     version without sample count instead.
500
501   * Update SkClipOp::kMax_EnumValue to include only intersect and difference when
502     SK_SUPPORT_DEPRECATED_CLIPOPS is not defined.
503     https://review.skia.org/320064
504
505   * Add support for external allocator for Direct3D 12 backend.
506     Defines base classes for an allocation associated with a backend texture and a
507     a memory allocator to create such allocations.
508     Adds memory allocator to backend context.
509     https://review.skia.org/317243
510
511   * Add new optional parameter to GrContext::setBackend[Texture/RenderTarget]State which can
512     be used to return the previous GrBackendSurfaceMutableState before the requested change.
513     https://review.skia.org/318698
514
515   * New optimized clip stack for GPU backends. Enabled by default but old behavior based on
516     SkClipStack can be restored by defining SK_DISABLE_NEW_GR_CLIP_STACK when building. It is not
517     compatible with SK_SUPPORT_DEPRECATED_CLIPOPS and we are targeting the removal of support for
518     the deprecated, expanding clip ops.
519     https://review.skia.org/317209
520
521   * GPU backends now properly honor the SkFilterQuality when calling drawAtlas.
522     https://review.skia.org/313081
523
524   * The signature of 'main' used with SkRuntimeEffect SkSL has changed. There is no longer an
525     'inout half4 color' parameter, effects must return their color instead.
526     Valid signatures are now 'half4 main()' or 'half4 main(float2 coord)'.
527     https://review.skia.org/310756
528
529   * New YUVA planar specifications for SkCodec, SkImageGenerator, SkImage::MakeFromYUVAPixmaps.
530     Chroma subsampling is specified in more structured way. SkCodec and SkImageGenerator
531     don't assume 3 planes with 8bit planar values. Old APIs are deprecated.
532     https://review.skia.org/309658
533     https://review.skia.org/312886
534     https://review.skia.org/314276
535     https://review.skia.org/316837
536     https://review.skia.org/317097
537
538   * Added VkImageUsageFlags to GrVkImageInfo struct.
539
540 * * *
541
542 Milestone 86
543 ------------
544
545   * Remove support for 'in' variables from SkRuntimeEffect. API now exclusively refers to inputs
546     as 'uniforms'.
547     https://review.skia.org/309050
548
549   * Add SkImageGeneratorNDK and SkEncodeImageWithNDK for using Android's NDK APIs to decode and
550     encode.
551     https://review.skia.org/308185
552     https://review.skia.org/308800
553
554   * SkImage:remove DecodeToRaster, DecodeToTexture
555     https://review.skia.org/306331
556
557   * Add GrContext api to update compressed backend textures.
558     https://review.skia.org/302265
559
560   * Rename GrMipMapped to GrMipmapped for consistency with new APIs.
561     Also rename GrBackendTexture::hasMipMaps() to GrBackendTexture::hasMipmaps()
562     https://review.skia.org/304576
563     https://review.skia.org/304598
564
565   * Add option for clients to own semaphores after wait calls.
566     https://review.skia.org/301216
567
568   * Remove obsolete GrFlushFlags.
569     https://review.skia.org/298818
570
571   * Adds default flush() calls to SkSurface, SkImage, and GrContext. These calls do
572     a basic flush without a submit. If you haven't updated Skia in a couple releases
573     and still have flush() calls in your code that you expect to do a flush and
574     submit, you should update all those to the previously added flushAndSubmit() calls
575     instead.
576     https://review.skia.org/299141
577
578   * Enable BackendSemaphores for the Direct3D backend.
579     https://review.skia.org/298752
580
581   * Added SkImage:asyncRescaleAndReadPixels and SkImage::asyncRescaleAndReadPixelsYUV420
582     https://review.skia.org/299281
583
584   * Ganesh is moving towards replacing GrContext with the GrDirectContext/GrRecordingContext
585     pair. GrDirectContexts have _direct_ access to the GPU and are very similar to the old
586     GrContext. GrRecordingContexts are less powerful contexts that lack GPU access but provided
587     context-like utilities during DDL recording. SkSurfaces and SkCanvas will now only return
588     GrRecordingContexts. Clients requiring context features that need GPU access can then
589     check (via GrRecordingContext::asDirectContext) if the available recording context is actually
590     a direct context.
591
592   * Replace #defined values in SkString with equivalent constexprs.
593     http://review.skia.org/306160
594
595 * * *
596
597 Milestone 85
598 ------------
599
600   * Added GrContext::oomed() which reports whether Skia has seen a GL_OUT_OF_MEMORY
601     error from Open GL [ES] or VK_ERROR_OUT_OF_*_MEMORY from Vulkan.
602     https://review.skia.org/298216
603
604   * Add option on SkSurface::flush to pass in a GrBackendSurfaceMutableState which
605     we will set the gpu backend surface to be at the end of the flush.
606     https://review.skia.org/295567
607
608   * Add GrContext function to set mutable state on a backend surface. Currently this
609     is only used for setting vulkan VkImage layout and queue family.
610     https://review.skia.org/293844
611
612   * SkSurface factores that take GrBackendTexture or GrBackendRenderTarget now always
613     call the release proc (if provided) on failure. SkSurface::replaceBackendTexture
614     also calls the release proc on failure.
615     https://review.skia.org/293762
616
617   * SkSurface::asyncRescaleAndReadPixels and SkSurfaceasyncRescaleAndReadPixelsYUV420
618     now require explicit GrContext submit to guarantee finite time before callback
619     is invoked.
620     https://review.skia.org/292840
621
622   * Add VkSharingMode field to GrVkImageInfo.
623     https://review.skia.org/293559
624
625   * Move SkBitmapRegionDecoder into client_utils/android.
626
627   * SkCanvas.clear and SkCanvas.drawColor now accept SkColor4f in addition to SkColor.
628
629   * Remove SkSurface::MakeFromBackendTextureAsRenderTarget.
630     This factory existed to work around issues with GL_TEXTURE_RECTANGLE that existed
631     in Chrome's command buffer. Those issues have since been resolved. Use
632     SkSurface::MakeFromBackendTexutre or SkSurface::MakeFromBackendRenderTarget instead.
633     https://review.skia.org/292719
634
635   * Adds submittedProc callback to GrFlushInfo which will be called when the work
636     from the flush call is submitted to the GPU. This is specifically useful for knowing
637     when semahpores sent with the flush have been submitted and can be waiting on.
638     https://review.skia.org/291078
639
640   * GrContext submit is now required to be called in order to send GPU work to the
641     actual GPU. The flush calls simply produces 3D API specific objects that are ready
642     to be submitted (e.g. command buffers). For the GL backend, the flush will still
643     send commands to the driver. However, clients should still assume the must call
644     submit which is where any glFlush that is need for sync objects will be called. There,
645     are flushAndSubmit() functions of GrContext, SkSurface, and SkImage that will act
646     like the previous flush() functions. This will flush the work and immediately call
647     submit.
648     https://review.skia.org/289033
649
650   * Remove deprecated version of flush calls on GrContext and SkSurface.
651     https://review.skia.org/2290540
652
653   * SkCanvas::drawVertices and drawPatch now support mapping an SkShader without explicit
654     texture coordinates. If they're not supplied, the local positions (vertex position or
655     patch cubic positions) will be directly used to sample the SkShader.
656     https://review.skia.org/290130
657
658 * * *
659
660 Milestone 84
661 ------------
662
663   * Add api on GrContext, updateBackendTexture that will upload new data to a
664     GrBackendTexture.
665     https://review.skia.org/288909
666
667   * Add GrContext getter to SkSurface.
668     https://review.skia.org/289479
669
670   * Deprecate GrContext and SkSurface flush() call and replace ith with flushAndSubmit().
671     This only effects the default flush call that takes no parameters.
672     https://review.skia.org/289478
673
674   * GrContext::createBackendTexture functions that initialize the texture no longer
675     guarantee that all the data has been uploaded and the gpu is done with the texture.
676     Instead the client can assume the upload work has been submitted to the gpu and they
677     must wait for that work to finish before deleting the texture. This can be done via
678     their own synchronization or by passing in a finish proc into the create calls which
679     will be called when it is safe to delete the texture (at least in terms of work
680     done during the create).
681     https://review.skia.org/286517
682
683   * Remove unused SkMaskFilter helpers: compbine, compose
684     Note: shadermaskfilter will likely be removed next (clipShader should serve)
685
686   * Add back SkCanvas::kPreserveLCDText_SaveLayerFlag to indicate that saveLayer()
687     will preserve LCD-text. All text in the layer must be drawn on opaque background
688     to ensure correct rendering.
689
690   * Add the new directory client_utils/ for code that is specific to a single client and
691     should be considered separate from Skia proper. Move SkFrontBufferedStream into the
692     subdir android/.
693
694   * SkBitmap and SkPixmap's erase() methods now treat their color parameters
695     consistently with the rest of Skia, with all SkColors and any untagged
696     SkColor4fs interpreted as sRGB, not as a color in the bitmap's color space.
697     SkPixmap::erase(SkColor4f) now takes an SkColorSpace, so you can pass
698     pixmap.colorSpace() if you want the old behavior.
699
700   * SkCamera.h and SkMatrix44.h are DEPRECATED.
701     Use SkM44 if you want to have 3d transformations.
702
703   * Changed Dilate and Erode image filters to take SkScalar for radius instead of int. While
704     the image filters themselves are defined in terms of discrete pixels, the radii provided by
705     the user are mapped through the CTM so taking ints forced over discretization. After mapping
706     through the CTM the radii are now rounded to pixels.
707     https://review.skia.org/281731
708     https://review.skia.org/282636
709
710   * Updated the contract of GrContext and SkSurface flush calls in regards to semaphores. Made it
711     clear that the caller is responsible for deleting any initialized semaphores after the flush
712     call regardless if we were able to submit them or not. Also, allows skia to only submit a
713     subset of the requested semaphores if we failed to create some.
714     https://review.skia.org/282265
715
716
717   * SkCanvas::drawVertices will now always fill the triangles specified by the vertices. Previously,
718     vertices with no colors and no (texture coordinates or shader) would be drawn in wireframe.
719     https://review.skia.org/282043
720
721 * * *
722
723 Milestone 83
724 ------------
725
726   * Remove localmatrix option from SkShaders::[Blend, Lerp]
727
728   * Fill out Direct3D parameters for backend textures and backend rendertargets.
729
730   * SkImage::makeTextureImage() takes an optional SkBudgeted param
731
732   * Made non-GL builds of GPU backend more robust.
733     https://review.skia.org/277456
734
735   * MoltenVK support removed. Use Metal backend instead.
736     https://review.skia.org/277612
737
738 * * *
739
740 Milestone 82
741 ------------
742
743   * Removed drawBitmap and related functions from SkDevice; all public drawBitmap functions on
744     SkCanvas automatically wrap the bitmap in an SkImage and call the equivalent drawImage function.
745     Drawing mutable SkBitmaps will now incur a mandatory copy. Switch to using SkImage directly or
746     mark the bitmap as immutable before drawing.
747
748   * Removed "volatile" flag from SkVertices. All SkVertices objects are assumed to be
749     volatile (the previous default behavior).
750
751   * Removed exotic legacy bitmap functions from SkCanvas (drawBitmapLattic, drawBitmapNine); the
752     exotic SkImage functions still exist.
753
754   * Make it possible to selectively turn on/off individual encoders/decoders,
755     using skia_use_(libpng/libjpeg_turbo/libwebp)(decode/encode).
756
757   * Removed GrGpuResource, GrSurface, and GrTexture from public api. These were not
758     meant to be public, and we now can move them into src. Also removed getTexture
759     function from SkImage.h
760
761   * Removed Bones from SkVertices
762
763   * Added a field to GrContextOptions that controls whether GL errors are checked after
764     GL calls that allocate textures, etc. It also controls checking for shader compile
765     success, and program linking success.
766
767   * Made SkDeferredDisplayList.h officially part of the public API (i.e., moved it to
768     include/core). Also added a ProgramIterator to SkDeferredDisplayList which allows
769     clients to pre-compile some of the shaders the DDL requires.
770
771   * Added two new helper methods to SkSurfaceCharacterization: createBackendFormat and
772     createFBO0. These make it easier for clients to create new surface characterizations that
773     differ only a little from an existing surface characterization.
774
775   * Removed SkTMax and SkTMin.
776   * Removed SkTClamp and SkClampMax.
777   * Removed SkScalarClampMax and SkScalarPin.
778   * Removed SkMax32 and SkMin32.
779   * Removed SkMaxScalar and SkMinScalar.
780
781   * SkColorSetA now warns if the result is unused.
782
783   * An SkImageInfo with a null SkColorSpace passed to SkCodec::getPixels() and
784     related calls is treated as a request to do no color correction at decode
785     time.
786
787   * Add new APIs to add attributes to document structure node when
788     creating a tagged PDF.
789
790   * Remove CGFontRef parameter from SkCreateTypefaceFromCTFont.
791     Use CTFontManagerCreateFontDescriptorFromData instead of
792     CGFontCreateWithDataProvider to create CTFonts to avoid memory use issues.
793
794   * Added SkCodec:: and SkAndroidCodec::getICCProfile for reporting the native
795     ICC profile of an encoded image, even if it doesn't map to an SkColorSpace.
796
797   * SkSurface::ReplaceBackendTexture takes ContentChangeMode as a parameter,
798     which allow callers to specify whether retain a copy of the current content.
799
800   * Enforce the existing documentation in SkCanvas::saveLayer that it ignores
801     any mask filter on the restore SkPaint. The 'coverage' of a layer is
802     ill-defined, and masking should be handled by pre-clipping or using the
803     auxiliary clip mask image of the SaveLayerRec.
804
805 * * *
806
807 Milestone 81
808 ------------
809
810   * Added support for GL_NV_fence extension.
811
812   * Make SkImageInfo::validRowBytes require rowBytes to be pixel aligned. This
813     makes SkBitmap match the behavior of raster SkSurfaces in rejecting
814     non-aligned rowBytes.
815
816   * Added an SkImage::MakeRasterFromCompressed entry point. Also updated
817     SkImage::MakeFromCompressed to decompress the compressed image data if
818     the GPU doesn't support the specified compression type (i.e., macOS Metal
819     doesn't support BC1_RGB8_UNORM so such compressed images will always be
820     decompressed on that platform).
821
822   * Added support for BC1 RGBA compressed textures
823
824   * Added CachingHint to SkImage::makeRasterImage
825
826   * Added SkAnimatedImage::getCurrentFrame()
827
828   * Add support to create an SkSurface from an MTKView, with delayed acquisition of
829     the MTLDrawable.
830     Entry point: SkSurface::MakeFromMTKView
831
832   * Removed SkIRect::EmptyIRect(). Use SkIRect::MakeEmpty() instead.
833     https://review.skia.org/262382/
834
835   * Moved SkRuntimeEffect to public API. This is the new (experimental) interface to custom SkSL
836     shaders and color filters.
837
838   * Added BC1 compressed format support. Metal and Vulkan seem to only support the BC
839     formats on desktop machines.
840
841   * Added compressed format support for backend texture creation API.
842     This adds the following new entry points:
843     GrContext::compressedBackendFormat
844     GrContext::createCompressedBackendTexture
845     The latter method comes in variants that allow color-initialized and
846     compressed texture data initialized.
847
848   * Added SkMatrix::MakeTrans(SkIVector)
849     https://review.skia.org/259804
850
851 * * *
852
853 Milestone 80
854 ------------
855
856   * For Vulkan backend, we now require that the VkDevice, Queue, and Instance outlive
857     either the destruction or abandoning of the GrContext. Additionally, all
858     GrBackendTextures created via GrContext::createBackendTexture calls must be deleted
859     before destroying or abandoning the GrContext.
860     https://review.skia.org/257921
861
862   * Removed SkSize& SkSize::operator=(const SkISize&)
863     https://review.skia.org/257880
864
865   * SkISize width() and height() now constexpr
866     https://review.skia.org/257680
867
868   * Added SkMatrix::MakeTrans(SkVector) and SkRect::makeOffset(SkVector).
869     https://review.skia.org/255782
870
871   * Added SkImageInfo::MakeA8(SkISize) and added optional color space parameter to
872     SkImageInfo::MakeN32Premul(SkISize).
873
874   * Added dimensions() and getFrameCount() to SkAnimatedImage
875     https://review.skia.org/253542
876
877   * Removed SkMatrix44 version of toXYZD50 from SkColorSpace. Switched to skcms types in
878     transferFn, invTrasnferFn, and gamutTransformTo functions.
879     https://review.skia.org/252596
880
881   * Removed rotation and YUV support from SkColorMatrix
882     https://review.skia.org/252188
883
884   * Added kBT2020_SkYUVColorSpace. This is BT.2020's YCbCr conversion (non-constant-luminance).
885     https://review.skia.org/252160
886
887   * Remove old async read pixels APIs
888     https://review.skia.org/251198
889
890   * Expose SkBlendModeCoeff and SkBlendMode_AsCoeff for Porter-Duff blend modes.
891     https://review.skia.org/252600
892
893 * * *
894
895 Milestone 79
896 ------------
897
898   * SkTextBlob::Iter to discover the glyph indices and typefaces in each run
899     https://skia-review.googlesource.com/246296
900
901   * Added support for PQ and HLG transfer functions to SkColorSpace.
902     https://skia-review.googlesource.com/c/skia/+/249000
903
904   * Added new api on GrContext ComputeImageSize. This replaces the hold static helper
905     ComputeTextureSize.
906     https://skia-review.googlesource.com/c/skia/+/247337
907
908   * New versions of SkSurface async-rescale-and read APIs that allow client to extend
909     the lifetime of the result data. Old versions are deprecated.
910     https://review.skia.org/245457
911
912   * Add SkColorInfo. It's dimensionless SkImageInfo.
913     https://review.skia.org/245261
914
915   * Added SkPixmap-based createBackendTexture method to GrContext. This allows clients to create
916     backend resources (initialized with texture data) that Skia/Ganesh doesn't know about/track.
917     https://review.skia.org/244676
918
919   * Add explicit src and dst colorspace parameters to SkColorFilter::filterColor4f()
920     https://review.skia.org/244882
921
922   * Remove Vulkan/Metal float32 RGBA texture support
923     https://review.skia.org/244881
924
925   * Add SkSurface::MakeFromCAMetalLayer
926     https://review.skia.org/242563
927
928   * Added kAlpha_F16_SkColorType, kRG_F16_SkColorType and kRGBA_16161616_SkColorType.
929     This is intended to help support HDR YUV uses case (e.g., P010 and P016). As such,
930     the addition is focused on allowing creation of SkPixmaps and SkImages and not
931     SkSurfaces (i.e., who wants to render to render to these?)
932     https://review.skia.org/241357
933
934   * Start to move nested SkPath types (e.g. Direction, Verb) up to root level in SkPathTypes.h
935     https://review.skia.org/241079
936
937   * Remove isRectContour and ksNestedFillRects from public
938     https://review.skia.org/241078
939
940   * Added kRG_88_SkColorType. This is intended to help support YUV uses case (e.g., NV12).
941     As such, the addition is focused on allowing creation of SkPixmaps and SkImages and not
942     SkSurfaces (i.e., who wants to render to RG?)
943     https://review.skia.org/239930
944     https://review.skia.org/235797
945
946   * Make the size of program/pipeline caches configurable via
947     GrContextOptions::fRuntimeProgramCacheSize
948     https://review.skia.org/239756
949
950   * Added kAlpha_16_SkColorType and kRG_1616_SkColorType. This is intended to help support HDR YUV
951     uses case (e.g., P010 and P016). As such, the addition is focused on allowing creation of
952     SkPixmaps and SkImages and not SkSurfaces (i.e., who wants to render to render to these?)
953     https://review.skia.org/239930
954
955   * Add GrContext::precompileShader to allow up-front compilation of previously-cached shaders.
956     https://review.skia.org/239438
957
958 * * *
959
960 Milestone 78
961 ------------
962
963   * SkDrawLooper is no longer supported in SkPaint or SkCanvas.
964     https://review.skia.org/230579
965     https://review.skia.org/231736
966
967   * SkPath::Iter::next() now ignores its consumDegenerates bools. Those will so
968     go away entirely
969     https://review.skia.org/235104
970
971   * SkImage: new factories: DecodeToRaster, DecodeToTexture
972     https://review.skia.org/234476
973
974   * SkImageFilter API refactor started:
975     - Provide new factory API in include/effects/SkImageFilters
976     - Consolidated enum types to use SkTileMode and SkColorChannel
977     - Hide filter implementation classes
978     - Hide previously public functions on SkImageFilter that were intended for
979       internal use only
980     https://review.skia.org/230198
981     https://review.skia.org/230876
982     https://review.skia.org/231256
983
984   * SkColorFilters::HSLAMatrix - new matrix color filter operating in HSLA
985     space.
986     https://review.skia.org/231736
987
988   * Modify GrBackendFormat getters to not return internal pointers. Use an enum
989     class for GL formats.
990     https://review.skia.org/233160
991
992   * Expose GrContext::dump() when SK_ENABLE_DUMP_GPU is defined.
993     https://review.skia.org/233557
994
995   * Vulkan backend now supports YCbCr sampler for I420 Vulkan images that are
996     not backed by external images.
997     https://review.skia.org/233776
998
999   * Add SkCodec::SelectionPolicy for distinguishing between decoding a still
1000     image or an image sequence for a container format that has both (e.g. HEIF).
1001     https://review.skia.org/232839
1002
1003   * SkImage::makeTextureImage and SkImage::MakeCrossContextFromPixmap no longer
1004     take an SkColorSpace parameter. It was unused.
1005     https://review.skia.org/234579
1006     https://review.skia.org/234912
1007
1008   * SkImage::reinterpretColorSpace - to reinterpret image contents in a new
1009     color space.
1010     https://review.skia.org/234328
1011
1012   * Removed SkImage::MakeCrossContextFromEncoded.
1013     https://review.skia.org/234912
1014
1015   * Add Metal support for GrFence, GrSemaphore, and GrBackendSemaphore
1016     https://review.skia.org/233416
1017
1018   * SkMallocPixelRef: remove MakeDirect and MakeWithProc from API.
1019     https://review.skia.org/234660
1020
1021   * Remove 4-parameter variant of SkRect::join() and intersect(), and
1022     noemptycheck variants of intersect().
1023     https://review.skia.org/235832
1024     https://review.skia.org/237142
1025
1026   * Remove unused sk_sp comparison operators.
1027     https://review.skia.org/236942
1028
1029   * Add SkColor4f variant to experimental_DrawEdgeAAQuad for SkiaRenderer.
1030     https://review.skia.org/237492
1031
1032   * Deprecated maxCount resource cache limit for Ganesh.
1033     This hasn't been relevant for a long time.
1034
1035   * Changed GrContextOptions' fDisallowGLSLBinaryCaching to fShaderCacheStrategy,
1036     and allow caching SkSL.
1037     https://review.skia.org/238856
1038
1039   * Use GL_QCOM_TILED_RENDERING to explicitly discard stencil
1040
1041   * Added RELEASE_NOTES.txt file
1042     https://review.skia.org/229760
1043
1044   * Implemented internal support for OpenGL tessellation.