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