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