1 Skia Graphics Release Notes
3 This file includes a list of high level updates for each milestone release.
7 * SkSamplingOptions now includes anisotropic filtering. Implemented on GPU only.
8 * SkBitmap::clear and SkBitmap::clearColor take in SkColor4fs
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
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.
36 * Add maxSurfaceSampleCountForColorType(SkColorType ct) in GrContextThreadSafeProxy
37 * Enums SkAlphaType and SkColorType are broken out into their own header files in include/core/
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.
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.
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
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
92 * SkImageFilters::RuntimeShader is a new public API that enables adding RuntimeShaderEffects into
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
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
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.
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.
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
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.
145 * Metal backend has been changed to track command buffer resources manually
146 rather than using retained resources.
147 https://review.skia.org/432878
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
153 * Removed SK_SUPPORT_DEPRECATED_CLIPOPS build flag. Clips can only be intersect and difference.
154 https://review.skia.org/436565
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:
163 sample(colorFilter, color)
164 sample(blender, srcColor, dstColor)
167 colorFilter.eval(color)
168 blender.eval(srcColor, dstColor)
169 https://review.skia.org/444735
175 * Removed SkPaint::getHash
176 https://review.skia.org/419336
178 * Removed SkShaders::Lerp. It was unused (and easy to replicate with SkRuntimeEffect).
179 https://review.skia.org/419796
181 * The default value of GrContextOptions::fReduceOpsTaskSplitting is now enabled.
182 https://review.skia.org/419836
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
194 * Add SkM44::RectToRect constructor (SkM44's equivalent to SkMatrix::RectToRect)
195 https://review.skia.org/402957
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
200 * Removed custom attributes from SkVertices and the corresponding `varying` feature from
202 https://review.skia.org/398222
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.
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
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
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.
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),
228 https://review.skia.org/391856
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
238 * Renamed use of sk_cf_obj in external Metal types to sk_cfp.
239 https://review.skia.org/372556
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
246 * Remove SkImageFilter::MakeMatrixFilter as it was unused and replaced with
247 SkImageFilters::MatrixTransform.
248 https://review.skia.org/366318
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`.
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
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
263 * Added SkRuntimeEffect::makeImage() to capture the output of an SkRuntimeEffect in an SkImage.
264 https://review.skia.org/357284
266 * Updated SkRuntimeEffect::Make() to take an Options struct. It also now returns a Results struct
268 https://review.skia.org/363785
269 https://review.skia.org/367060
271 * Changed SkRuntimeEffect::Varying to have lower-case member names, with no 'f' prefix.
272 https://review.skia.org/365656
274 * Changed SkRuntimeEffect::Uniform to have lower-case member names, with no 'f' prefix.
275 https://review.skia.org/365696
277 * Deprecate (and ignore) SkAndroidCodec::ExifOrientation
278 https://review.skia.org/344763
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
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
296 * Removed SkYUVAIndex and SkYUVASizeInfo. These were no longer used in any
298 https://review.skia.org/352497
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]
309 * Add SkShadowUtils::GetLocalBounds. Generates bounding box for shadows
311 https://review.skia.org/351922
313 * Removed SkPerlinNoiseShader::MakeImprovedNoise.
314 https://review.skia.org/352057
316 * Removed deprecated version of MakeFromYUVATextures. Use the version
317 that takes GrYUVABackendTextures instead.
318 https://review.skia.org/345174
320 * SkAnimatedImage: Always respect exif orientation
321 Replace SkPixmapPriv::ShouldSwapWidthHeight with
322 SkEncodedOriginSwapsWidthHeight.
323 https://review.skia.org/344762
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
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
333 * Removed previously deprecated SkImage::MakeFromYUVATexturesCopyToExternal.
334 https://review.skia.org/342077
336 * Add versions of GrDirectContext::createBackendTexture and updateBackendTexture
337 that take a GrSurfaceOrigin. The previous versions are deprecated.
338 https://review.skia.org/341005
340 * Remove support for deprecated kDontClipToLayer_SaveLayerFlag in SkCanvas::SaveLayerRec
341 https://review.skia.org/339988
343 * Expose more info in SkCodec::FrameInfo
344 https://review.skia.org/339857
346 * Added dither control to the SkImageFilters::Shader factory.
347 https://review.skia.org/338156
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
355 * Deprecated enum SkYUVAInfo::PlanarConfig has been removed.
356 https://review.skia.org/334161
358 * Deprecated SkImage factories have been removed from
359 SkDeferredDisplayListRecorder.
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
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
377 * SkCanvas::flush has been deprecated.
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
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
395 * Limit the types and intrinsics supported in SkRuntimeEffect to GLSL ES 1.00
396 https://review.skia.org/332597
398 * Add AVIF support to SkHeifCodec.
400 * Add support for creating SkSurfaceCharacterizations directly for use by a
401 GrVkSecondaryCBDrawContext.
402 https://review.skia.org/331877
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
410 * Legacy 8-bit YUV interface removed from SkImageGenerator. Use more flexible SkYUVAPixmaps-
411 based interface instead.
412 https://review.skia.org/327917
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
421 https://review.skia.org/317762
422 https://review.skia.org/329956
424 * Add field to GrContextOptions to disable mipmap support even if the backend
427 * SkTPin() removed from public API.
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
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
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
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
450 * CPU sync bool added to SkSurface::flushAndSubmit() and GrContext::flushAndSubmit()
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
457 * Some SkImage YUV image factories have been removed. Replacement patterns
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
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
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
494 * Added deprecation warning for Metal support on MacOS 10.13, iOS 8.3, and older.
495 https://review.skia.org/320260
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.
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
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
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
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
521 * GPU backends now properly honor the SkFilterQuality when calling drawAtlas.
522 https://review.skia.org/313081
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
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
538 * Added VkImageUsageFlags to GrVkImageInfo struct.
545 * Remove support for 'in' variables from SkRuntimeEffect. API now exclusively refers to inputs
547 https://review.skia.org/309050
549 * Add SkImageGeneratorNDK and SkEncodeImageWithNDK for using Android's NDK APIs to decode and
551 https://review.skia.org/308185
552 https://review.skia.org/308800
554 * SkImage:remove DecodeToRaster, DecodeToTexture
555 https://review.skia.org/306331
557 * Add GrContext api to update compressed backend textures.
558 https://review.skia.org/302265
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
565 * Add option for clients to own semaphores after wait calls.
566 https://review.skia.org/301216
568 * Remove obsolete GrFlushFlags.
569 https://review.skia.org/298818
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
576 https://review.skia.org/299141
578 * Enable BackendSemaphores for the Direct3D backend.
579 https://review.skia.org/298752
581 * Added SkImage:asyncRescaleAndReadPixels and SkImage::asyncRescaleAndReadPixelsYUV420
582 https://review.skia.org/299281
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
592 * Replace #defined values in SkString with equivalent constexprs.
593 http://review.skia.org/306160
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
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
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
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
617 * SkSurface::asyncRescaleAndReadPixels and SkSurfaceasyncRescaleAndReadPixelsYUV420
618 now require explicit GrContext submit to guarantee finite time before callback
620 https://review.skia.org/292840
622 * Add VkSharingMode field to GrVkImageInfo.
623 https://review.skia.org/293559
625 * Move SkBitmapRegionDecoder into client_utils/android.
627 * SkCanvas.clear and SkCanvas.drawColor now accept SkColor4f in addition to SkColor.
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
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
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
648 https://review.skia.org/289033
650 * Remove deprecated version of flush calls on GrContext and SkSurface.
651 https://review.skia.org/2290540
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
663 * Add api on GrContext, updateBackendTexture that will upload new data to a
665 https://review.skia.org/288909
667 * Add GrContext getter to SkSurface.
668 https://review.skia.org/289479
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
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
683 * Remove unused SkMaskFilter helpers: compbine, compose
684 Note: shadermaskfilter will likely be removed next (clipShader should serve)
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.
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
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.
700 * SkCamera.h and SkMatrix44.h are DEPRECATED.
701 Use SkM44 if you want to have 3d transformations.
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
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
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
726 * Remove localmatrix option from SkShaders::[Blend, Lerp]
728 * Fill out Direct3D parameters for backend textures and backend rendertargets.
730 * SkImage::makeTextureImage() takes an optional SkBudgeted param
732 * Made non-GL builds of GPU backend more robust.
733 https://review.skia.org/277456
735 * MoltenVK support removed. Use Metal backend instead.
736 https://review.skia.org/277612
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.
748 * Removed "volatile" flag from SkVertices. All SkVertices objects are assumed to be
749 volatile (the previous default behavior).
751 * Removed exotic legacy bitmap functions from SkCanvas (drawBitmapLattic, drawBitmapNine); the
752 exotic SkImage functions still exist.
754 * Make it possible to selectively turn on/off individual encoders/decoders,
755 using skia_use_(libpng/libjpeg_turbo/libwebp)(decode/encode).
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
761 * Removed Bones from SkVertices
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.
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.
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.
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.
781 * SkColorSetA now warns if the result is unused.
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
787 * Add new APIs to add attributes to document structure node when
788 creating a tagged PDF.
790 * Remove CGFontRef parameter from SkCreateTypefaceFromCTFont.
791 Use CTFontManagerCreateFontDescriptorFromData instead of
792 CGFontCreateWithDataProvider to create CTFonts to avoid memory use issues.
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.
797 * SkSurface::ReplaceBackendTexture takes ContentChangeMode as a parameter,
798 which allow callers to specify whether retain a copy of the current content.
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.
810 * Added support for GL_NV_fence extension.
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.
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).
822 * Added support for BC1 RGBA compressed textures
824 * Added CachingHint to SkImage::makeRasterImage
826 * Added SkAnimatedImage::getCurrentFrame()
828 * Add support to create an SkSurface from an MTKView, with delayed acquisition of
830 Entry point: SkSurface::MakeFromMTKView
832 * Removed SkIRect::EmptyIRect(). Use SkIRect::MakeEmpty() instead.
833 https://review.skia.org/262382/
835 * Moved SkRuntimeEffect to public API. This is the new (experimental) interface to custom SkSL
836 shaders and color filters.
838 * Added BC1 compressed format support. Metal and Vulkan seem to only support the BC
839 formats on desktop machines.
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.
848 * Added SkMatrix::MakeTrans(SkIVector)
849 https://review.skia.org/259804
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
862 * Removed SkSize& SkSize::operator=(const SkISize&)
863 https://review.skia.org/257880
865 * SkISize width() and height() now constexpr
866 https://review.skia.org/257680
868 * Added SkMatrix::MakeTrans(SkVector) and SkRect::makeOffset(SkVector).
869 https://review.skia.org/255782
871 * Added SkImageInfo::MakeA8(SkISize) and added optional color space parameter to
872 SkImageInfo::MakeN32Premul(SkISize).
874 * Added dimensions() and getFrameCount() to SkAnimatedImage
875 https://review.skia.org/253542
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
881 * Removed rotation and YUV support from SkColorMatrix
882 https://review.skia.org/252188
884 * Added kBT2020_SkYUVColorSpace. This is BT.2020's YCbCr conversion (non-constant-luminance).
885 https://review.skia.org/252160
887 * Remove old async read pixels APIs
888 https://review.skia.org/251198
890 * Expose SkBlendModeCoeff and SkBlendMode_AsCoeff for Porter-Duff blend modes.
891 https://review.skia.org/252600
898 * SkTextBlob::Iter to discover the glyph indices and typefaces in each run
899 https://skia-review.googlesource.com/246296
901 * Added support for PQ and HLG transfer functions to SkColorSpace.
902 https://skia-review.googlesource.com/c/skia/+/249000
904 * Added new api on GrContext ComputeImageSize. This replaces the hold static helper
906 https://skia-review.googlesource.com/c/skia/+/247337
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
912 * Add SkColorInfo. It's dimensionless SkImageInfo.
913 https://review.skia.org/245261
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
919 * Add explicit src and dst colorspace parameters to SkColorFilter::filterColor4f()
920 https://review.skia.org/244882
922 * Remove Vulkan/Metal float32 RGBA texture support
923 https://review.skia.org/244881
925 * Add SkSurface::MakeFromCAMetalLayer
926 https://review.skia.org/242563
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
934 * Start to move nested SkPath types (e.g. Direction, Verb) up to root level in SkPathTypes.h
935 https://review.skia.org/241079
937 * Remove isRectContour and ksNestedFillRects from public
938 https://review.skia.org/241078
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
946 * Make the size of program/pipeline caches configurable via
947 GrContextOptions::fRuntimeProgramCacheSize
948 https://review.skia.org/239756
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
955 * Add GrContext::precompileShader to allow up-front compilation of previously-cached shaders.
956 https://review.skia.org/239438
963 * SkDrawLooper is no longer supported in SkPaint or SkCanvas.
964 https://review.skia.org/230579
965 https://review.skia.org/231736
967 * SkPath::Iter::next() now ignores its consumDegenerates bools. Those will so
969 https://review.skia.org/235104
971 * SkImage: new factories: DecodeToRaster, DecodeToTexture
972 https://review.skia.org/234476
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
980 https://review.skia.org/230198
981 https://review.skia.org/230876
982 https://review.skia.org/231256
984 * SkColorFilters::HSLAMatrix - new matrix color filter operating in HSLA
986 https://review.skia.org/231736
988 * Modify GrBackendFormat getters to not return internal pointers. Use an enum
989 class for GL formats.
990 https://review.skia.org/233160
992 * Expose GrContext::dump() when SK_ENABLE_DUMP_GPU is defined.
993 https://review.skia.org/233557
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
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
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
1008 * SkImage::reinterpretColorSpace - to reinterpret image contents in a new
1010 https://review.skia.org/234328
1012 * Removed SkImage::MakeCrossContextFromEncoded.
1013 https://review.skia.org/234912
1015 * Add Metal support for GrFence, GrSemaphore, and GrBackendSemaphore
1016 https://review.skia.org/233416
1018 * SkMallocPixelRef: remove MakeDirect and MakeWithProc from API.
1019 https://review.skia.org/234660
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
1026 * Remove unused sk_sp comparison operators.
1027 https://review.skia.org/236942
1029 * Add SkColor4f variant to experimental_DrawEdgeAAQuad for SkiaRenderer.
1030 https://review.skia.org/237492
1032 * Deprecated maxCount resource cache limit for Ganesh.
1033 This hasn't been relevant for a long time.
1035 * Changed GrContextOptions' fDisallowGLSLBinaryCaching to fShaderCacheStrategy,
1036 and allow caching SkSL.
1037 https://review.skia.org/238856
1039 * Use GL_QCOM_TILED_RENDERING to explicitly discard stencil
1041 * Added RELEASE_NOTES.txt file
1042 https://review.skia.org/229760
1044 * Implemented internal support for OpenGL tessellation.