Test release notes.
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
new file mode 100644
index 0000000..b8e4fcc
--- /dev/null
+++ b/RELEASE_NOTES.txt
@@ -0,0 +1,1189 @@
+Skia Graphics Release Notes
+
+This file includes a list of high level updates for each milestone release.
+
+Milestone 113
+-------------
+  * The define SK_SUPPORT_GPU is now SK_GANESH. It is no longer detected as a 0 or 1, but
+    as the absence or presence of that define. As a result, it defaults to off (not defined) if
+    not defined (SK_SUPPORT_GPU would default to SK_SUPPORT_GPU=1 if not defined).
+  * SkStrSplit is no longer part of the public API.
+  * SkImage::encodeToData now takes a GrDirectContext. The versions which do not have that are
+    deprecated and will be removed at some point.
+  * SkMatrix::Scale, preScale, setScale, etc. with any scale factor of 0 correctly no longer
+    return true from rectStaysRect(), consistent with rectStaysRect() implying a non-zero scale.
+  * `SkImage::CompressionType` has been renamed to `SkTextureCompressionType` and moved to
+    `include/core/SkTextureCompressionType.h`
+
+* * *
+
+Milestone 112
+-------------
+  * SkImage::CubicResampler has been removed. Clients should use SkCubicResampler from
+    include/core/SkSamplingOptions.h instead (the former was an alias for the latter).
+  * SkRuntimeColorFilterBuilder has been added. This is a helper class for setting up color filters,
+    analogous to SkRuntimeShaderBuilder.
+  * SkShaders::CoordClamp has been added. It clamps the coords passed used with another
+    shader to a rectangle.
+  * SkRandom is no longer part of the public API.
+  * SK_ARRAY_COUNT is no longer part of the public API. Clients should use std::size.
+  * SK_SCALAR_IS_FLOAT is not set anymore. SkScalar is always a float (and has been since 2017).
+  * sk_realloc_throw (an internal API) now frees up memory when 0 is passed in as the size.
+    This should have no user-facing impacts for clients which use the default allocator, but
+    requires custom allocators to also implement this change.
+  * The particles module has been deleted.
+  * SkJpegEncoder::Options includes a parameter for XMP metadata.
+  * SkJpegEncoder includes support for encoding SkYUVAPixmaps directly.
+
+* * *
+
+Milestone 111
+-------------
+  * SkToBool is no longer part of the public API.
+  * A float version of SkCanvas::saveLayerAlpha now exists as SkCanvas::saveLayerAlphaf.
+  * SkAbs32 and SkTAbs are no longer part of the public API.
+  * SkAlign2, SkAlign4, SkAlign8, SkIsAlign2, SkIsAlign4, SkIsAlign8, SkAlignPtr, SkIsAlignPtr,
+    and SkAlignTo are no longer part of the public API.
+  * GrContextOptions::fSkipGLErrorChecks no longer stops checking shader compilation and program
+    linking success.
+  * SkBackingFit is no longer part of the public API.
+  * SkBudgeted was moved from include/core/SkTypes.h to include/gpu/GpuTypes.h and moved into the
+    skgpu namespace.
+  * include/gpu/GrConfig.h has been removed; its contents were folded into other files.
+  * SkLeftShift is no longer part of the public API.
+  * SK_MaxS32 and related constants are no longer part of the public API.
+  * include/core/SkMath.h is no longer part of the public API.
+
+* * *
+
+Milestone 110
+-------------
+  * SkParsePath::ToSVGString now returns the string, rather than modifying a passed-in string.
+  * Removed previously deprecated SkImageFilters::Paint factory. Use SkImageFilters::Shader instead.
+  * SkMesh::Make and SkMesh::MakeIndexed now return a SkMesh and error message string.
+  * SkPaint::getFillPath has been replaced with skpathutils::FillPathWithPaint from
+    include/core/SkPathUtils.h. The functionality should be the same.
+
+* * *
+
+Milestone 109
+-------------
+  * SkMesh vertex and fragment main() signatures have changed. See docs on SkMeshSpecification.
+  * Added SkImage::RescaleMode::kLinear so that the async rescale/readback APIs can scale in a
+    single step no matter the total scale factor (faster but lower quality than kRepeatedLinear).
+  * SkMesh buffer factories added that make copies of CPU-backed buffers.
+  * A utility for minifying Runtime Effect code has been added to Skia. Add the gn argument
+    "skia_compile_modules = true" to your gn args, and a new utility called "sksl-minify" will be
+    compiled as part of your Skia build. Run the command:
+      `skia-minify output-file.sksl input-file.sksl`
+    to write a minified version of the runtime shader "input-file.sksl" into a file named
+    "output-file.sksl". By default, sksl-minify expects a shader, but you can also pass command
+    line options `--colorfilter` or `--blender` if your program is a color-filter or a blender.
+    A compile error will be printed to stdout if an error is found in the program.
+  * The order of SkShader local matrix concatenation has been reversed. See skbug.com/13749
+  * PromiseImages have been added to Graphite. This supports both volatile and non-volatile Promise Images.
+    See the comment for SkImage::MakeGraphitePromiseTexture for more details.
+  * Graphite has loosened the immutability requirements of SkImages - through a new SkSurface API and careful
+    synchronization, clients can now mutate the backend object backing an SkImage. The new API consists of
+    SkSurface::asImage and SkSurface::makeImageCopy. We have a document that covers the expected use cases and
+    the synchronization required for each one.
+
+* * *
+
+Milestone 108
+-------------
+  * SkShader::asAGradient() has been removed.
+  * SkMesh and SkMeshSpecification has separate sk_sp and bare ptr getters for ref counted types.
+  * Add support for specifying a custom ICC profile to SkJpegEncoder, SkPngEncoder, and
+    SkWebpEncoder.
+
+* * *
+
+Milestone 107
+-------------
+  * Exported SkColor4f::toBytes_RGBA() and SkColor4f::FromBytes_RGBA.
+  * SkWebpEncoder: Added support for animated WebP image encoding.
+  * SkRuntimeEffect shader effects were inadvertently allowing functions with the signature
+    `half4 main(float2 coords, half4 color)`. This was disallowed at Milestone 87, but the
+    restriction was inadvertently relaxed in later milestones. Going forward, we will only
+    accept a shader signature of `half4 main(float2 coords)`.
+
+* * *
+
+Milestone 106
+-------------
+  * sk_sp is marked with the [[clang::trivial_abi]] attribute where supported.
+  * SkMesh API: Allows a user to draw a vertex mesh with custom attributes and
+    varyings using SkSL. Mesh data (vertex and index) can be created on a
+    GrDirectContext to avoid re-uploading data per draw. Currently does not
+    work with SkPicture or any backend but GPU.
+  * Added SkColorFilters::Blend(const SkColor4f&, sk_sp<SkColorSpace>, SkBlendMode) to
+    complement the existing SkColorFilters::Blend(SkColor, SkBlendMode) factory.
+  * The experimental C API was removed.
+  * Added support for AVIF decoding using libavif.
+
+* * *
+
+Milestone 104
+-------------
+  * New functions SkBitmap::getColor4f and SkPixmap::getColor4f return float colors.
+  * SkRuntimeEffect takes and returns a const SkData.
+  * SkRasterHandleAllocator::MakeCanvas now takes optional SkSurfaceProps.
+  * SkImage::MakeFromPicture and SkImageGenerator::MakeFromPicture now take an optional
+    SkSurfaceProps to use when rasterizing the picture.
+  * SkRuntimeEffect::Uniform now stores the uniform name as a string_view, rather than a
+    SkString. Related methods SkRuntimeEffect::findUniform and SkRuntimeEffectBuilder::uniform
+    also take std::string_view instead of const char*.
+  * SkRuntimeEffect::Child now stores the child name as a string_view, rather than a SkString.
+    Related methods SkRuntimeEffect::findChild and SkRuntimeEffectBuilder::child also take
+    std::string_view instead of const char*. Also, SkImageFilters::RuntimeShader now takes the
+    child name(s) as std::string_view instead of const char*.
+  * skcms.h has been relocated to //modules/skcms/skcms.h (was //include/third_party/skcms/skcms.h)
+  * New functions SkCanvas::getBaseProps and SkCanvas::getTopProps; SkCanvas::getBaseProps is a
+    direct replacement for the (now deprecated) SkCanvas::getProps function, while getTopProps is
+    a variant that returns the SkSurfaceProps that are active in the current layer.
+  * New function SkEventTracer::newTracingSection(const char* name) enables splitting traces up
+    into different sections for a selection of backend tracing frameworks (Perfetto, SkDebugf).
+
+* * *
+
+Milestone 103
+-------------
+  * SkSamplingOptions now includes anisotropic filtering. Implemented on GPU only.
+  * SkBitmap::clear and SkBitmap::clearColor take in SkColor4fs
+
+* * *
+
+Milestone 102
+-------------
+  * Add glGetFloatv and glSamplerParameterf to GrGLInterface.
+  * GrGLCreateNativeInterface is removed. Use GrGLMakeNativeInterface.
+  * GrContextOptions::fSharpenMipmappedTextures is removed. MIP LOD is now always
+    biased on the GPU backend. The CPU backend implementation is modified to match
+    this behavior.
+  * Passing SkCanvas::kStrict_SrcRectConstraint disables mipmapping. The old behavior differed
+    between GPU and CPU. CPU always computed a new set of mipmap based on the subset. GPU restricted
+    the sampling coordinates to the subset in the base level but upper level pixels that map to
+    pixels outside the subset in the base level were still used. To get the previous CPU behavior
+    use SkImage::makeSubset() to make a subset image and draw that. The previous GPU behavior is
+    similar, though not exactly, equivalent to making a mipmapped image shader from the original
+    image and applying that to a rectangle.
+  * Fully disable experimental support for HW tessellation shaders.
+    GrContextOptions::fEnableExperimentalHardwareTessellation is ignored and behaves as if it is
+    false. The optimized path renderer no longer requires hardware tessellation at all, and
+    is automatically enabled when drawing to an SkSurface created with MSAA, or when
+    GrContextOptions::fInternalMultisampleCount is set to a non-zero value.
+
+* * *
+
+Milestone 101
+-------------
+  * Add maxSurfaceSampleCountForColorType(SkColorType ct) in GrContextThreadSafeProxy
+  * Enums SkAlphaType and SkColorType are broken out into their own header files in include/core/
+
+* * *
+
+Milestone 100
+-------------
+  * Skia now requires C++17 and the corresponding standard library (or newer).
+  * Skia on iOS now requires iOS 11 to build; earlier versions of iOS do not support C++17.
+  * The skstd::string_view and skstd::optional Skia classes have been replaced with the C++17 native
+    std::string_view and std::optional.
+  * Added SkSurface::resolveMSAA api to force Skia to resolve MSAA draws. Useful for when
+    Skia wraps a client's texture as the resolve target.
+  * All of the `makeShader` functions associated with `SkRuntimeEffect` no longer take an
+    `isOpaque` parameter. These functions will now make a best effort to determine if your
+    shader always produces opaque output, and optimize accordingly. If you definitely want your
+    shader to produce opaque output, do so in the shader's SkSL code. This can be done by adjusting
+    any `return` statement in your shader with a swizzle: `return color.rgb1;`.
+    https://review.skia.org/506462
+  * SkRSXform is now exported to DLL/.so files.
+* * *
+
+Milestone 99
+------------
+  * Added two new intrinsic functions to SkSL for use in runtime effects:
+      vec3 toLinearSrgb(vec3 color)
+      vec3 fromLinearSrgb(vec3 color)
+    These convert RGB color values between the working color space (the color space of the
+    destination surface) and a known, fixed color space. `toLinearSrgb` converts a color to the
+    sRGB color gamut, with a linear transfer function. `fromLinearSrgb` converts a color from that
+    same color space. These are helpful for effects that need to work in a specific color space, or
+    want to apply effects (like lighting) that work best in a linear color space.
+    Note that if the destination surface has no color space (color space is `nullptr`), these
+    intrinsics will do no conversion, and return the input color unchanged.
+    https://review.skia.org/481416
+  * Added a new variant of SkImageFilters::RuntimeShader that supports multiple child nodes.
+    https://review.skia.org/489536
+  * Add the ability to specify palette overrides in SkFontArguments. Implemented
+    for the FreeType-backed SkFontMgrs.
+
+* * *
+
+Milestone 98
+------------
+  * The following functions and methods are not defined in SkSurface when SK_SUPPORT_GPU is 0:
+    MakeFromBackendTexture, MakeFromBackendRenderTarget, MakeRenderTarget,
+    getBackendTexture, getBackendRenderTarget, replaceBackendTexture. flush() with parameters
+    was removed as well. These were all no-ops anyway when just the CPU backend was compiled in
+    (noting that flush() and flushAndSubmit() are still no-ops on the CPU backend).
+  * GrBackendSemaphore only includes methods that match the GPU backend that Skia was compiled for.
+    For example, initVulkan and vkSemaphore are not defined unless the Vulkan backend is compiled
+    into Skia.
+  * Surfaces and images are now limited to just under 2GB of total size. Previously, larger images
+    could be created, but the CPU backend would fail to index them correctly.
+  * SkCanvas::drawVertices and SkCanvas::drawPatch variants that did not take SkBlendMode are
+    removed.
+  * SkImageFilters::RuntimeShader is a new public API that enables adding RuntimeShaderEffects into
+    image filter graph.
+  * SkImage::makeRawShader is a new public API that creates "raw" image shaders. makeRawShader
+    functions like SkImage::makeShader, but for images that contain non-color data. This includes
+    images encoding things like normals, material properties (eg roughness), heightmaps, or any
+    other purely mathematical data that happens to be stored in an image. These types of images are
+    useful with some programmable shaders (ie SkRuntimeEffect).
+    Raw image shaders work like regular image shaders (including filtering and tiling), with a few
+    major differences:
+      - No color space transformation is ever applied (the color space of the image is ignored).
+      - Images with an alpha type of kUnpremul are not automatically premultiplied.
+      - Bicubic filtering is not supported. If SkSamplingOptions::useCubic is true, these factories
+        will return nullptr.
+  * Removed SkCanvas::markCTM and SkCanvas::findMarkedCTM. These were created to be used with other
+    features that have since been deleted, so they served no purpose.
+  * Added limited JPEGXL support.
+
+* * *
+
+Milestone 97
+------------
+  * Added basic support for vulkan DRM modifiers. All of these are treated as read only textures
+    internally (versus querying specific modifier support). Clients can either pass a flag to Vulkan
+    GrBackendFormat to say it uses modifiers or pass the VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
+    to a GrBackendTexture via the GrVkImageInfo struct.
+  * The following functions and methods are not defined in SkImage when SK_SUPPORT_GPU is 0:
+    MakeTextureFromCompressed, MakeFromTexture, MakeFromCompressedTexture,
+    MakeCrossContextFromPixmap, MakeFromAdoptedTexture, MakeFromYUVATextures,
+    MakeFromYUVAPixmaps, MakePromiseTexture, MakePromiseYUVATexture, MakeBackendTextureFromSkImage,
+    flush, flushAndSubmit, getBackendTexture, makeTextureImage.
+    These were all no-ops anyway when just the CPU backend was compiled in.
+
+* * *
+
+Milestone 96
+------------
+  * SkRuntimeEffect no longer clamps the RGB values of an effect's output to the range 0..A.
+    This makes it easier to use a hierarchy of SkSL shaders where intermediate values do not
+    represent colors but are, for example, non-color inputs to a lighting model.
+    http://review.skia.org/452558
+
+* * *
+
+Milestone 95
+------------
+  * Minimum supported iOS raised from 8 to 11. Skia may build back to iOS 9 but versions older
+    than 11 are not tested. Community contributions to support versions 9 and 10 of iOS may be
+    considered, but they may not be complex as they cannot be tested.
+
+* * *
+
+Milestone 94
+------------
+  * Metal backend has been changed to track command buffer resources manually
+    rather than using retained resources.
+    https://review.skia.org/432878
+
+  * Added virtual onResetClip() to SkCanvas for Android Framework, to emulate the soon-to-be-removed
+    expanding clip ops guarded by SK_SUPPORT_DEPRECATED_CLIPOPS.
+    https://review.skia.org/430897
+
+  * Removed SK_SUPPORT_DEPRECATED_CLIPOPS build flag. Clips can only be intersect and difference.
+    https://review.skia.org/436565
+
+  * There is a new syntax for invoking (sampling) child effects in SkSL. Previously, children
+    (shaders, colorFilters, blenders) were invoked using different overloads of `sample`. That
+    syntax is deprecated (but still supported). Now, the child behaves like an object, with a method
+    name `eval`. The arguments to these `eval` methods are the same as the arguments in the old
+    `sample` intrinsics. For example:
+      // Old syntax:
+        sample(shader, xy)
+        sample(colorFilter, color)
+        sample(blender, srcColor, dstColor)
+      // New syntax:
+        shader.eval(xy)
+        colorFilter.eval(color)
+        blender.eval(srcColor, dstColor)
+    https://review.skia.org/444735
+
+* * *
+
+Milestone 93
+------------
+  * Removed SkPaint::getHash
+    https://review.skia.org/419336
+
+  * Removed SkShaders::Lerp. It was unused (and easy to replicate with SkRuntimeEffect).
+    https://review.skia.org/419796
+
+  * The default value of GrContextOptions::fReduceOpsTaskSplitting is now enabled.
+    https://review.skia.org/419836
+
+  * Removed SkMatrix44
+
+* * *
+
+Milestone 92
+------------
+  * Hides SkPathEffect::computeFastBounds() from public API; external subclasses of SkPathEffect
+    must implement onComputeFastBounds() but can return false to signal it's not computable.
+    https://review.skia.org/406140
+
+  * Add SkM44::RectToRect constructor (SkM44's equivalent to SkMatrix::RectToRect)
+    https://review.skia.org/402957
+
+  * Metal support has been removed for versions of iOS older than 10.0 and MacOS older than 10.14.
+    https://review.skia.org/401816
+
+  * Removed custom attributes from SkVertices and the corresponding `varying` feature from
+    SkRuntimeEffect.
+    https://review.skia.org/398222
+
+  * Dropped support for mixed samples. Mixed samples is no longer relevant for Ganesh. DMSAA and the
+    new Ganesh architecture both rely on full MSAA, and any platform where mixed samples is
+    supported will ultimately not use the old architecture.
+
+  * SkRuntimeEffect::Make has been removed. It is replaced by MakeForShader and MakeForColorFilter.
+    These functions do stricter error checking on the SkSL, to ensure it is valid for a particular
+    stage of the Skia pipeline.
+    https://review.skia.org/402156
+
+* * *
+
+Milestone 91
+------------
+  * The SkSL DSL API has been moved into public headers, although it is still under active
+    development and isn't quite ready for prime time yet.
+    https://review.skia.org/378496
+
+  * Skia's GPU backend no longer supports NVPR. Our more recent path renderers are more
+    performant and are not limited to nVidia hardware.
+
+  * SkRuntimeEffect now supports uniforms of type int, int2, int3, and int4. Per the OpenGL ES
+    Shading Language Version 1.00 specification, there are few guarantees about the representation
+    or range of integral types, and operations that assume integral representation (eg, bitwise),
+    are not supported.
+    https://review.skia.org/391856
+
+  * SkRuntimeEffect requires that 'shader' variables be declared as 'uniform'. The deprecated
+    syntax of 'in shader' is no longer supported.
+    https://review.skia.org/393081
+
+* * *
+
+Milestone 90
+------------
+  * Renamed use of sk_cf_obj in external Metal types to sk_cfp.
+    https://review.skia.org/372556
+
+  * GrDirectContext::ComputeImageSize() is removed. Use SkImage::textureSize() instead.
+    https://review.skia.org/368621
+    https://review.skia.org/369317
+    https://review.skia.org/371958
+
+  * Remove SkImageFilter::MakeMatrixFilter as it was unused and replaced with
+    SkImageFilters::MatrixTransform.
+    https://review.skia.org/366318
+
+  * Refactored particle system to use a single code string containing both Effect and Particle code.
+    Uniform APIs are now shared for all program entry points, and no longer prefixed with 'Effect'
+    or 'Particle'. For example, instead of `SkParticleEffect::effectUniformInfo` and
+    `SkParticleEffect::particleUniformInfo`, there is just `SkParticleEffect::uniformInfo`.
+
+  * Remove SkImageFilter::CropRect from the public API as it's no longer usable. All factories
+    work with 'SkRect', 'SkIRect', or nullable pointers to 'Sk[I]Rect'.
+    https://review.skia.org/361496
+
+  * Remove deprecated SkImageFilter factory functions and supporting types. All default-provided
+    SkImageFilters are now only constructed via 'include/effects/SkImageFilters.h'
+    https://review.skia.org/357285
+
+  * Added SkRuntimeEffect::makeImage() to capture the output of an SkRuntimeEffect in an SkImage.
+    https://review.skia.org/357284
+
+  * Updated SkRuntimeEffect::Make() to take an Options struct. It also now returns a Results struct
+    instead of a tuple.
+    https://review.skia.org/363785
+    https://review.skia.org/367060
+
+  * Changed SkRuntimeEffect::Varying to have lower-case member names, with no 'f' prefix.
+    https://review.skia.org/365656
+
+  * Changed SkRuntimeEffect::Uniform to have lower-case member names, with no 'f' prefix.
+    https://review.skia.org/365696
+
+  * Deprecate (and ignore) SkAndroidCodec::ExifOrientation
+    https://review.skia.org/344763
+
+  * Fix several minor issues in lighting image filters:
+    - The spotlight falloff exponent is no longer clamped to [1, 128]. SVG 1.1 requires the specular
+      lighting effect's exponent (shininess) to be clamped; not the spotlight's falloff. Any such
+      parameter clamping is the client's responisibility, which makes Skia's lighting effect easily
+      adaptable to SVG 1.1 (clamp exponent) or SVG 2 (no clamp).
+    - Fix spotlight incorrectly scaling light within the cone angle.
+    - Move saturation of RGBA to after multiplying lighting intensity with the lighting color, which
+      improves rendering when diffuse and specular constants are greater than 1.
+    https://review.skia.org/355496
+
+  * SkDeferredDisplayListRecorder::makePromiseTexture has moved to SkImage::MakePromiseTexture.
+    New code should use the new entry point – migration CLs will be coming soon.
+    https://review.skia.org/373716
+
+Milestone 89
+------------
+  * Removed SkYUVAIndex and SkYUVASizeInfo. These were no longer used in any
+    public APIs.
+    https://review.skia.org/352497
+
+  * Numerous changes to SkRuntimeEffect, aligning the capabilities and restrictions with
+    The OpenGL ES Shading Language 1.00 (aka, the shading language of OpenGL ES2 and WebGL 1.0).
+    All built-in functions from sections 8.1 through 8.6 implemented & tested on all backends.
+    Removed types and features that require newer versions of GLSL:
+      https://review.skia.org/346657  [Non-square matrices]
+      https://review.skia.org/347046  [uint, short, ushort, byte, ubyte]
+      https://review.skia.org/349056  [while and do-while loops]
+      https://review.skia.org/350030  [Bitwise operators and integer remainder]
+
+  * Add SkShadowUtils::GetLocalBounds. Generates bounding box for shadows
+    relative to path.
+    https://review.skia.org/351922
+
+  * Removed SkPerlinNoiseShader::MakeImprovedNoise.
+    https://review.skia.org/352057
+
+  * Removed deprecated version of MakeFromYUVATextures. Use the version
+    that takes GrYUVABackendTextures instead.
+    https://review.skia.org/345174
+
+  * SkAnimatedImage: Always respect exif orientation
+    Replace SkPixmapPriv::ShouldSwapWidthHeight with
+    SkEncodedOriginSwapsWidthHeight.
+    https://review.skia.org/344762
+
+  * Add kDirectionalLight_ShadowFlag support. If enabled, light position represents
+    a vector pointing towards the light, and light radius is blur radius at elevation 1.
+    https://review.skia.org/321792
+
+  * Support GL_LUMINANCE8_ALPHA8 textures. These can be used with GrBackendTexture APIs
+    on GrDirectContext and as planes of YUVA images via GrYUVABackendTextures.
+    https://review.skia.org/344761
+
+  * Removed previously deprecated SkImage::MakeFromYUVATexturesCopyToExternal.
+    https://review.skia.org/342077
+
+  * Add versions of GrDirectContext::createBackendTexture and updateBackendTexture
+    that take a GrSurfaceOrigin. The previous versions are deprecated.
+    https://review.skia.org/341005
+
+  * Remove support for deprecated kDontClipToLayer_SaveLayerFlag in SkCanvas::SaveLayerRec
+    https://review.skia.org/339988
+
+  * Expose more info in SkCodec::FrameInfo
+    https://review.skia.org/339857
+
+  * Added dither control to the SkImageFilters::Shader factory.
+    https://review.skia.org/338156
+
+  * Add MTLBinaryArchive parameter to GrMtlBackendContext. This allows
+    Skia to cache PipelineStates in the given archive for faster
+    shader compiles on future runs. The client must handle loading and
+    saving of the archive.
+    https://review.skia.org/333758
+
+  * Deprecated enum SkYUVAInfo::PlanarConfig has been removed.
+    https://review.skia.org/334161
+
+  * Deprecated SkImage factories have been removed from
+    SkDeferredDisplayListRecorder.
+
+  * The following YUV image factories have been removed:
+    SkImage::MakeFromYUVTexturesCopyWithExternalBackend
+    SkImage::MakeFromNV12TexturesCopyWithExternalBackend
+    Replacement pattern outlined below.
+        1) Make image using MakeFromYUVATextures
+        2) Make a SkSurface around result texture using SkSurface::MakeFromBackendTexture
+        3) surface->getCanvas()->drawImage(image, 0, 0);
+        4) surface->flushAndSubmit()
+        5) Optional: SkImage::MakeFromBackendTexture() to use as SkImage.
+    https://review.skia.org/334596
+
+  * Added a new interface for GrDirectContext creation in Metal, using
+    a new struct called GrMtlBackendContext. The previous interface taking
+    a MTLDevice and MTLCommandQueue is deprecated.
+    https://review.skia.org/334426
+
+  * SkCanvas::flush has been deprecated.
+
+* * *
+
+Milestone 88
+------------
+
+  * SkYUVAInfo now has separate enums for division of channels among planes and
+    the subsampling. The previous combined enum, PlanarConfig, is deprecated.
+    https://review.skia.org/334102
+
+  * Simplified SkDeferredDisplayListRecorder promise image API. Removed "release"
+    callback and renamed "done" callback to "release". The new "release" proc can
+    be null. Added a new SkYUVAInfo-based factory for YUVA promise texture images
+    and deprecated the old SkYUVAIndex-based one.
+    https://review.skia.org/331836
+    https://review.skia.org/333519
+
+  * Limit the types and intrinsics supported in SkRuntimeEffect to GLSL ES 1.00
+    https://review.skia.org/332597
+
+  * Add AVIF support to SkHeifCodec.
+
+  * Add support for creating SkSurfaceCharacterizations directly for use by a
+    GrVkSecondaryCBDrawContext.
+    https://review.skia.org/331877
+
+  * Removed SkSurfaceProps::kLegacyFontHost_InitType, SkFontLCDConfig, and related code.
+    The default pixel geometry for SkSurfaceProps is now kUnknown instead of kRGB_H.
+    The removal was guarded by the SK_LEGACY_SURFACE_PROPS build flag which was later removed.
+    https://review.skia.org/322490
+    https://review.skia.org/329364
+
+  * Legacy 8-bit YUV interface removed from SkImageGenerator. Use more flexible SkYUVAPixmaps-
+    based interface instead.
+    https://review.skia.org/327917
+
+  * New variant of SkImage::MakeFromYUVATextures. Takes a new type GrYUVATextures
+    which wraps an SkYUVAInfo and compatible set of GrBackendTextures. The provides
+    a more complete and structured specification of the planar configuration. Previous
+    version is deprecated.
+    Already deprecated MakeFromYUVATexturesCopyToExternal added to replace other deprecated
+    APIs. It's not recommended that clients use this and instead use the pattern described
+    in the API comment.
+    https://review.skia.org/317762
+    https://review.skia.org/329956
+
+  * Add field to GrContextOptions to disable mipmap support even if the backend
+    supports it.
+
+  * SkTPin() removed from public API.
+
+  * Add new SkImageFilters::Blend factory function, in place of the now deprecated
+    SkImageFilters::Xfermode factory function. Behavior is identical, but name better matches
+    conventions in SkShader and SkColorFilter.
+    https://review.skia.org/324623
+
+  * SkImageFilters::Foo() factory functions now accept SkIRect, SkRect, and optional SkIRect* or
+    SkRect*, instead of previously just the optional SkIRect*. Internally, the crop rects are stored
+    as floats to allow for fractional crops to be defined in the local coordinate system (before
+    transformation by the canvas matrix).
+    https://review.skia.org/324622
+
+  * Add new SkImageFilters::Shader factory and deprecate SkImageFilters::Paint factory. All
+    supported/valid Paint() filters can be represented more cleanly as a Shader image filter.
+    https://review.skia.org/323680
+
+  * GrContext has been replaced by two separate classes: GrDirectContext which is
+    the traditional notion of GrContext, and GrRecordingContext which is a context
+    that is recording an SkDeferredDisplayList and therefore has reduced functionality.
+    Unless you are using SkDeferredDisplayList, migrate directly to GrDirectContext in
+    all cases.
+
+  * CPU sync bool added to SkSurface::flushAndSubmit() and GrContext::flushAndSubmit()
+
+  * Removed legacy variant of SkImage::MakeFromYUVAPixmaps. Use the version that
+    takes SkYUVAPixmaps instead. It has a more structured description of the
+    planar configuration.
+    https://review.skia.org/322480
+
+  * Some SkImage YUV image factories have been removed. Replacement patterns
+    outlined below.
+    SkImage::MakeFromYUVATexturesCopy
+        1) Make SkImage from YUVA planes using SkImage::MakeFromYUVATextures
+        2) Use Skia to allocate a surface using SkSurface::MakeRenderTarget
+        3) surface->getCanvas()->drawImage(image, 0, 0);
+        4) surface->makeImageSnapShot() produces RGBA image.
+    SkImage::MakeFromYUVATexturesCopyWithExternalBackend
+        1) Make image using MakeFromYUVATextures
+        2) Make a SkSurface around result texture using SkSurface::MakeFromBackendTexture
+        3) surface->getCanvas()->drawImage(image, 0, 0);
+        4) surface->flushAndSubmit()
+        5) Optional: SkImage::MakeFromBackendTexture() to use as SkImage.
+    SkImage::MakeFromNV12TexturesCopy
+        Same as SkImage::MakeFromYUVATexturesCopy
+    https://review.skia.org/321537
+
+  * GrBackendRenderTargets which are created with a stencilBits param, now require
+    the stencilBits to be 0, 8, or 16.
+    https://review.skia.org/321545
+
+* * *
+
+Milestone 87
+------------
+
+  * GrVkImageInfo now has a field for sample count. GrBackendRenderTarget constructor
+    that took both a GrVkImageInfo and separate sample count is deprecated. Use the
+    version without sample count instead. Similarly, GrD3DTextureResourceInfo now
+    has a sample count field and GrBackendRenderTarget no longer takes a separate
+    sample count for Direct3D. The sample count for GrBackendRenderTarget is now
+    directly queried from MtlTexture rather than passed separately. The version that
+    takes a separate sample count is deprecated and the parameter is ignored.
+    https://review.skia.org/320262
+    https://review.skia.org/320757
+    https://review.skia.org/320956
+
+  * Added deprecation warning for Metal support on MacOS 10.13, iOS 8.3, and older.
+    https://review.skia.org/320260
+
+  * GrVkImageInfo now has a field for sample count. GrBackendRenderTarget constructor
+    that took both a GrVkImageInfo and separate sample count is deprecated. Use the
+    version without sample count instead.
+
+  * Update SkClipOp::kMax_EnumValue to include only intersect and difference when
+    SK_SUPPORT_DEPRECATED_CLIPOPS is not defined.
+    https://review.skia.org/320064
+
+  * Add support for external allocator for Direct3D 12 backend.
+    Defines base classes for an allocation associated with a backend texture and a
+    a memory allocator to create such allocations.
+    Adds memory allocator to backend context.
+    https://review.skia.org/317243
+
+  * Add new optional parameter to GrContext::setBackend[Texture/RenderTarget]State which can
+    be used to return the previous GrBackendSurfaceMutableState before the requested change.
+    https://review.skia.org/318698
+
+  * New optimized clip stack for GPU backends. Enabled by default but old behavior based on
+    SkClipStack can be restored by defining SK_DISABLE_NEW_GR_CLIP_STACK when building. It is not
+    compatible with SK_SUPPORT_DEPRECATED_CLIPOPS and we are targeting the removal of support for
+    the deprecated, expanding clip ops.
+    https://review.skia.org/317209
+
+  * GPU backends now properly honor the SkFilterQuality when calling drawAtlas.
+    https://review.skia.org/313081
+
+  * The signature of 'main' used with SkRuntimeEffect SkSL has changed. There is no longer an
+    'inout half4 color' parameter, effects must return their color instead.
+    Valid signatures are now 'half4 main()' or 'half4 main(float2 coord)'.
+    https://review.skia.org/310756
+
+  * New YUVA planar specifications for SkCodec, SkImageGenerator, SkImage::MakeFromYUVAPixmaps.
+    Chroma subsampling is specified in more structured way. SkCodec and SkImageGenerator
+    don't assume 3 planes with 8bit planar values. Old APIs are deprecated.
+    https://review.skia.org/309658
+    https://review.skia.org/312886
+    https://review.skia.org/314276
+    https://review.skia.org/316837
+    https://review.skia.org/317097
+
+  * Added VkImageUsageFlags to GrVkImageInfo struct.
+
+* * *
+
+Milestone 86
+------------
+
+  * Remove support for 'in' variables from SkRuntimeEffect. API now exclusively refers to inputs
+    as 'uniforms'.
+    https://review.skia.org/309050
+
+  * Add SkImageGeneratorNDK and SkEncodeImageWithNDK for using Android's NDK APIs to decode and
+    encode.
+    https://review.skia.org/308185
+    https://review.skia.org/308800
+
+  * SkImage:remove DecodeToRaster, DecodeToTexture
+    https://review.skia.org/306331
+
+  * Add GrContext api to update compressed backend textures.
+    https://review.skia.org/302265
+
+  * Rename GrMipMapped to GrMipmapped for consistency with new APIs.
+    Also rename GrBackendTexture::hasMipMaps() to GrBackendTexture::hasMipmaps()
+    https://review.skia.org/304576
+    https://review.skia.org/304598
+
+  * Add option for clients to own semaphores after wait calls.
+    https://review.skia.org/301216
+
+  * Remove obsolete GrFlushFlags.
+    https://review.skia.org/298818
+
+  * Adds default flush() calls to SkSurface, SkImage, and GrContext. These calls do
+    a basic flush without a submit. If you haven't updated Skia in a couple releases
+    and still have flush() calls in your code that you expect to do a flush and
+    submit, you should update all those to the previously added flushAndSubmit() calls
+    instead.
+    https://review.skia.org/299141
+
+  * Enable BackendSemaphores for the Direct3D backend.
+    https://review.skia.org/298752
+
+  * Added SkImage:asyncRescaleAndReadPixels and SkImage::asyncRescaleAndReadPixelsYUV420
+    https://review.skia.org/299281
+
+  * Ganesh is moving towards replacing GrContext with the GrDirectContext/GrRecordingContext
+    pair. GrDirectContexts have _direct_ access to the GPU and are very similar to the old
+    GrContext. GrRecordingContexts are less powerful contexts that lack GPU access but provided
+    context-like utilities during DDL recording. SkSurfaces and SkCanvas will now only return
+    GrRecordingContexts. Clients requiring context features that need GPU access can then
+    check (via GrRecordingContext::asDirectContext) if the available recording context is actually
+    a direct context.
+
+  * Replace #defined values in SkString with equivalent constexprs.
+    http://review.skia.org/306160
+
+* * *
+
+Milestone 85
+------------
+
+  * Added GrContext::oomed() which reports whether Skia has seen a GL_OUT_OF_MEMORY
+    error from Open GL [ES] or VK_ERROR_OUT_OF_*_MEMORY from Vulkan.
+    https://review.skia.org/298216
+
+  * Add option on SkSurface::flush to pass in a GrBackendSurfaceMutableState which
+    we will set the gpu backend surface to be at the end of the flush.
+    https://review.skia.org/295567
+
+  * Add GrContext function to set mutable state on a backend surface. Currently this
+    is only used for setting vulkan VkImage layout and queue family.
+    https://review.skia.org/293844
+
+  * SkSurface factores that take GrBackendTexture or GrBackendRenderTarget now always
+    call the release proc (if provided) on failure. SkSurface::replaceBackendTexture
+    also calls the release proc on failure.
+    https://review.skia.org/293762
+
+  * SkSurface::asyncRescaleAndReadPixels and SkSurfaceasyncRescaleAndReadPixelsYUV420
+    now require explicit GrContext submit to guarantee finite time before callback
+    is invoked.
+    https://review.skia.org/292840
+
+  * Add VkSharingMode field to GrVkImageInfo.
+    https://review.skia.org/293559
+
+  * Move SkBitmapRegionDecoder into client_utils/android.
+
+  * SkCanvas.clear and SkCanvas.drawColor now accept SkColor4f in addition to SkColor.
+
+  * Remove SkSurface::MakeFromBackendTextureAsRenderTarget.
+    This factory existed to work around issues with GL_TEXTURE_RECTANGLE that existed
+    in Chrome's command buffer. Those issues have since been resolved. Use
+    SkSurface::MakeFromBackendTexutre or SkSurface::MakeFromBackendRenderTarget instead.
+    https://review.skia.org/292719
+
+  * Adds submittedProc callback to GrFlushInfo which will be called when the work
+    from the flush call is submitted to the GPU. This is specifically useful for knowing
+    when semahpores sent with the flush have been submitted and can be waiting on.
+    https://review.skia.org/291078
+
+  * GrContext submit is now required to be called in order to send GPU work to the
+    actual GPU. The flush calls simply produces 3D API specific objects that are ready
+    to be submitted (e.g. command buffers). For the GL backend, the flush will still
+    send commands to the driver. However, clients should still assume the must call
+    submit which is where any glFlush that is need for sync objects will be called. There,
+    are flushAndSubmit() functions of GrContext, SkSurface, and SkImage that will act
+    like the previous flush() functions. This will flush the work and immediately call
+    submit.
+    https://review.skia.org/289033
+
+  * Remove deprecated version of flush calls on GrContext and SkSurface.
+    https://review.skia.org/2290540
+
+  * SkCanvas::drawVertices and drawPatch now support mapping an SkShader without explicit
+    texture coordinates. If they're not supplied, the local positions (vertex position or
+    patch cubic positions) will be directly used to sample the SkShader.
+    https://review.skia.org/290130
+
+* * *
+
+Milestone 84
+------------
+
+  * Add api on GrContext, updateBackendTexture that will upload new data to a
+    GrBackendTexture.
+    https://review.skia.org/288909
+
+  * Add GrContext getter to SkSurface.
+    https://review.skia.org/289479
+
+  * Deprecate GrContext and SkSurface flush() call and replace ith with flushAndSubmit().
+    This only effects the default flush call that takes no parameters.
+    https://review.skia.org/289478
+
+  * GrContext::createBackendTexture functions that initialize the texture no longer
+    guarantee that all the data has been uploaded and the gpu is done with the texture.
+    Instead the client can assume the upload work has been submitted to the gpu and they
+    must wait for that work to finish before deleting the texture. This can be done via
+    their own synchronization or by passing in a finish proc into the create calls which
+    will be called when it is safe to delete the texture (at least in terms of work
+    done during the create).
+    https://review.skia.org/286517
+
+  * Remove unused SkMaskFilter helpers: compbine, compose
+    Note: shadermaskfilter will likely be removed next (clipShader should serve)
+
+  * Add back SkCanvas::kPreserveLCDText_SaveLayerFlag to indicate that saveLayer()
+    will preserve LCD-text. All text in the layer must be drawn on opaque background
+    to ensure correct rendering.
+
+  * Add the new directory client_utils/ for code that is specific to a single client and
+    should be considered separate from Skia proper. Move SkFrontBufferedStream into the
+    subdir android/.
+
+  * SkBitmap and SkPixmap's erase() methods now treat their color parameters
+    consistently with the rest of Skia, with all SkColors and any untagged
+    SkColor4fs interpreted as sRGB, not as a color in the bitmap's color space.
+    SkPixmap::erase(SkColor4f) now takes an SkColorSpace, so you can pass
+    pixmap.colorSpace() if you want the old behavior.
+
+  * SkCamera.h and SkMatrix44.h are DEPRECATED.
+    Use SkM44 if you want to have 3d transformations.
+
+  * Changed Dilate and Erode image filters to take SkScalar for radius instead of int. While
+    the image filters themselves are defined in terms of discrete pixels, the radii provided by
+    the user are mapped through the CTM so taking ints forced over discretization. After mapping
+    through the CTM the radii are now rounded to pixels.
+    https://review.skia.org/281731
+    https://review.skia.org/282636
+
+  * Updated the contract of GrContext and SkSurface flush calls in regards to semaphores. Made it
+    clear that the caller is responsible for deleting any initialized semaphores after the flush
+    call regardless if we were able to submit them or not. Also, allows skia to only submit a
+    subset of the requested semaphores if we failed to create some.
+    https://review.skia.org/282265
+
+
+  * SkCanvas::drawVertices will now always fill the triangles specified by the vertices. Previously,
+    vertices with no colors and no (texture coordinates or shader) would be drawn in wireframe.
+    https://review.skia.org/282043
+
+* * *
+
+Milestone 83
+------------
+
+  * Remove localmatrix option from SkShaders::[Blend, Lerp]
+
+  * Fill out Direct3D parameters for backend textures and backend rendertargets.
+
+  * SkImage::makeTextureImage() takes an optional SkBudgeted param
+
+  * Made non-GL builds of GPU backend more robust.
+    https://review.skia.org/277456
+
+  * MoltenVK support removed. Use Metal backend instead.
+    https://review.skia.org/277612
+
+* * *
+
+Milestone 82
+------------
+
+  * Removed drawBitmap and related functions from SkDevice; all public drawBitmap functions on
+    SkCanvas automatically wrap the bitmap in an SkImage and call the equivalent drawImage function.
+    Drawing mutable SkBitmaps will now incur a mandatory copy. Switch to using SkImage directly or
+    mark the bitmap as immutable before drawing.
+
+  * Removed "volatile" flag from SkVertices. All SkVertices objects are assumed to be
+    volatile (the previous default behavior).
+
+  * Removed exotic legacy bitmap functions from SkCanvas (drawBitmapLattic, drawBitmapNine); the
+    exotic SkImage functions still exist.
+
+  * Make it possible to selectively turn on/off individual encoders/decoders,
+    using skia_use_(libpng/libjpeg_turbo/libwebp)(decode/encode).
+
+  * Removed GrGpuResource, GrSurface, and GrTexture from public api. These were not
+    meant to be public, and we now can move them into src. Also removed getTexture
+    function from SkImage.h
+
+  * Removed Bones from SkVertices
+
+  * Added a field to GrContextOptions that controls whether GL errors are checked after
+    GL calls that allocate textures, etc. It also controls checking for shader compile
+    success, and program linking success.
+
+  * Made SkDeferredDisplayList.h officially part of the public API (i.e., moved it to
+    include/core). Also added a ProgramIterator to SkDeferredDisplayList which allows
+    clients to pre-compile some of the shaders the DDL requires.
+
+  * Added two new helper methods to SkSurfaceCharacterization: createBackendFormat and
+    createFBO0. These make it easier for clients to create new surface characterizations that
+    differ only a little from an existing surface characterization.
+
+  * Removed SkTMax and SkTMin.
+  * Removed SkTClamp and SkClampMax.
+  * Removed SkScalarClampMax and SkScalarPin.
+  * Removed SkMax32 and SkMin32.
+  * Removed SkMaxScalar and SkMinScalar.
+
+  * SkColorSetA now warns if the result is unused.
+
+  * An SkImageInfo with a null SkColorSpace passed to SkCodec::getPixels() and
+    related calls is treated as a request to do no color correction at decode
+    time.
+
+  * Add new APIs to add attributes to document structure node when
+    creating a tagged PDF.
+
+  * Remove CGFontRef parameter from SkCreateTypefaceFromCTFont.
+    Use CTFontManagerCreateFontDescriptorFromData instead of
+    CGFontCreateWithDataProvider to create CTFonts to avoid memory use issues.
+
+  * Added SkCodec:: and SkAndroidCodec::getICCProfile for reporting the native
+    ICC profile of an encoded image, even if it doesn't map to an SkColorSpace.
+
+  * SkSurface::ReplaceBackendTexture takes ContentChangeMode as a parameter,
+    which allow callers to specify whether retain a copy of the current content.
+
+  * Enforce the existing documentation in SkCanvas::saveLayer that it ignores
+    any mask filter on the restore SkPaint. The 'coverage' of a layer is
+    ill-defined, and masking should be handled by pre-clipping or using the
+    auxiliary clip mask image of the SaveLayerRec.
+
+* * *
+
+Milestone 81
+------------
+
+  * Added support for GL_NV_fence extension.
+
+  * Make SkImageInfo::validRowBytes require rowBytes to be pixel aligned. This
+    makes SkBitmap match the behavior of raster SkSurfaces in rejecting
+    non-aligned rowBytes.
+
+  * Added an SkImage::MakeRasterFromCompressed entry point. Also updated
+    SkImage::MakeFromCompressed to decompress the compressed image data if
+    the GPU doesn't support the specified compression type (i.e., macOS Metal
+    doesn't support BC1_RGB8_UNORM so such compressed images will always be
+    decompressed on that platform).
+
+  * Added support for BC1 RGBA compressed textures
+
+  * Added CachingHint to SkImage::makeRasterImage
+
+  * Added SkAnimatedImage::getCurrentFrame()
+
+  * Add support to create an SkSurface from an MTKView, with delayed acquisition of
+    the MTLDrawable.
+    Entry point: SkSurface::MakeFromMTKView
+
+  * Removed SkIRect::EmptyIRect(). Use SkIRect::MakeEmpty() instead.
+    https://review.skia.org/262382/
+
+  * Moved SkRuntimeEffect to public API. This is the new (experimental) interface to custom SkSL
+    shaders and color filters.
+
+  * Added BC1 compressed format support. Metal and Vulkan seem to only support the BC
+    formats on desktop machines.
+
+  * Added compressed format support for backend texture creation API.
+    This adds the following new entry points:
+    GrContext::compressedBackendFormat
+    GrContext::createCompressedBackendTexture
+    The latter method comes in variants that allow color-initialized and
+    compressed texture data initialized.
+
+  * Added SkMatrix::MakeTrans(SkIVector)
+    https://review.skia.org/259804
+
+* * *
+
+Milestone 80
+------------
+
+  * For Vulkan backend, we now require that the VkDevice, Queue, and Instance outlive
+    either the destruction or abandoning of the GrContext. Additionally, all
+    GrBackendTextures created via GrContext::createBackendTexture calls must be deleted
+    before destroying or abandoning the GrContext.
+    https://review.skia.org/257921
+
+  * Removed SkSize& SkSize::operator=(const SkISize&)
+    https://review.skia.org/257880
+
+  * SkISize width() and height() now constexpr
+    https://review.skia.org/257680
+
+  * Added SkMatrix::MakeTrans(SkVector) and SkRect::makeOffset(SkVector).
+    https://review.skia.org/255782
+
+  * Added SkImageInfo::MakeA8(SkISize) and added optional color space parameter to
+    SkImageInfo::MakeN32Premul(SkISize).
+
+  * Added dimensions() and getFrameCount() to SkAnimatedImage
+    https://review.skia.org/253542
+
+  * Removed SkMatrix44 version of toXYZD50 from SkColorSpace. Switched to skcms types in
+    transferFn, invTrasnferFn, and gamutTransformTo functions.
+    https://review.skia.org/252596
+
+  * Removed rotation and YUV support from SkColorMatrix
+    https://review.skia.org/252188
+
+  * Added kBT2020_SkYUVColorSpace. This is BT.2020's YCbCr conversion (non-constant-luminance).
+    https://review.skia.org/252160
+
+  * Remove old async read pixels APIs
+    https://review.skia.org/251198
+
+  * Expose SkBlendModeCoeff and SkBlendMode_AsCoeff for Porter-Duff blend modes.
+    https://review.skia.org/252600
+
+* * *
+
+Milestone 79
+------------
+
+  * SkTextBlob::Iter to discover the glyph indices and typefaces in each run
+    https://skia-review.googlesource.com/246296
+
+  * Added support for PQ and HLG transfer functions to SkColorSpace.
+    https://skia-review.googlesource.com/c/skia/+/249000
+
+  * Added new api on GrContext ComputeImageSize. This replaces the hold static helper
+    ComputeTextureSize.
+    https://skia-review.googlesource.com/c/skia/+/247337
+
+  * New versions of SkSurface async-rescale-and read APIs that allow client to extend
+    the lifetime of the result data. Old versions are deprecated.
+    https://review.skia.org/245457
+
+  * Add SkColorInfo. It's dimensionless SkImageInfo.
+    https://review.skia.org/245261
+
+  * Added SkPixmap-based createBackendTexture method to GrContext. This allows clients to create
+    backend resources (initialized with texture data) that Skia/Ganesh doesn't know about/track.
+    https://review.skia.org/244676
+
+  * Add explicit src and dst colorspace parameters to SkColorFilter::filterColor4f()
+    https://review.skia.org/244882
+
+  * Remove Vulkan/Metal float32 RGBA texture support
+    https://review.skia.org/244881
+
+  * Add SkSurface::MakeFromCAMetalLayer
+    https://review.skia.org/242563
+
+  * Added kAlpha_F16_SkColorType, kRG_F16_SkColorType and kRGBA_16161616_SkColorType.
+    This is intended to help support HDR YUV uses case (e.g., P010 and P016). As such,
+    the addition is focused on allowing creation of SkPixmaps and SkImages and not
+    SkSurfaces (i.e., who wants to render to render to these?)
+    https://review.skia.org/241357
+
+  * Start to move nested SkPath types (e.g. Direction, Verb) up to root level in SkPathTypes.h
+    https://review.skia.org/241079
+
+  * Remove isRectContour and ksNestedFillRects from public
+    https://review.skia.org/241078
+
+  * Added kRG_88_SkColorType. This is intended to help support YUV uses case (e.g., NV12).
+    As such, the addition is focused on allowing creation of SkPixmaps and SkImages and not
+    SkSurfaces (i.e., who wants to render to RG?)
+    https://review.skia.org/239930
+    https://review.skia.org/235797
+
+  * Make the size of program/pipeline caches configurable via
+    GrContextOptions::fRuntimeProgramCacheSize
+    https://review.skia.org/239756
+
+  * Added kAlpha_16_SkColorType and kRG_1616_SkColorType. This is intended to help support HDR YUV
+    uses case (e.g., P010 and P016). As such, the addition is focused on allowing creation of
+    SkPixmaps and SkImages and not SkSurfaces (i.e., who wants to render to render to these?)
+    https://review.skia.org/239930
+
+  * Add GrContext::precompileShader to allow up-front compilation of previously-cached shaders.
+    https://review.skia.org/239438
+
+* * *
+
+Milestone 78
+------------
+
+  * SkDrawLooper is no longer supported in SkPaint or SkCanvas.
+    https://review.skia.org/230579
+    https://review.skia.org/231736
+
+  * SkPath::Iter::next() now ignores its consumDegenerates bools. Those will so
+    go away entirely
+    https://review.skia.org/235104
+
+  * SkImage: new factories: DecodeToRaster, DecodeToTexture
+    https://review.skia.org/234476
+
+  * SkImageFilter API refactor started:
+    - Provide new factory API in include/effects/SkImageFilters
+    - Consolidated enum types to use SkTileMode and SkColorChannel
+    - Hide filter implementation classes
+    - Hide previously public functions on SkImageFilter that were intended for
+      internal use only
+    https://review.skia.org/230198
+    https://review.skia.org/230876
+    https://review.skia.org/231256
+
+  * SkColorFilters::HSLAMatrix - new matrix color filter operating in HSLA
+    space.
+    https://review.skia.org/231736
+
+  * Modify GrBackendFormat getters to not return internal pointers. Use an enum
+    class for GL formats.
+    https://review.skia.org/233160
+
+  * Expose GrContext::dump() when SK_ENABLE_DUMP_GPU is defined.
+    https://review.skia.org/233557
+
+  * Vulkan backend now supports YCbCr sampler for I420 Vulkan images that are
+    not backed by external images.
+    https://review.skia.org/233776
+
+  * Add SkCodec::SelectionPolicy for distinguishing between decoding a still
+    image or an image sequence for a container format that has both (e.g. HEIF).
+    https://review.skia.org/232839
+
+  * SkImage::makeTextureImage and SkImage::MakeCrossContextFromPixmap no longer
+    take an SkColorSpace parameter. It was unused.
+    https://review.skia.org/234579
+    https://review.skia.org/234912
+
+  * SkImage::reinterpretColorSpace - to reinterpret image contents in a new
+    color space.
+    https://review.skia.org/234328
+
+  * Removed SkImage::MakeCrossContextFromEncoded.
+    https://review.skia.org/234912
+
+  * Add Metal support for GrFence, GrSemaphore, and GrBackendSemaphore
+    https://review.skia.org/233416
+
+  * SkMallocPixelRef: remove MakeDirect and MakeWithProc from API.
+    https://review.skia.org/234660
+
+  * Remove 4-parameter variant of SkRect::join() and intersect(), and
+    noemptycheck variants of intersect().
+    https://review.skia.org/235832
+    https://review.skia.org/237142
+
+  * Remove unused sk_sp comparison operators.
+    https://review.skia.org/236942
+
+  * Add SkColor4f variant to experimental_DrawEdgeAAQuad for SkiaRenderer.
+    https://review.skia.org/237492
+
+  * Deprecated maxCount resource cache limit for Ganesh.
+    This hasn't been relevant for a long time.
+
+  * Changed GrContextOptions' fDisallowGLSLBinaryCaching to fShaderCacheStrategy,
+    and allow caching SkSL.
+    https://review.skia.org/238856
+
+  * Use GL_QCOM_TILED_RENDERING to explicitly discard stencil
+
+  * Added RELEASE_NOTES.txt file
+    https://review.skia.org/229760
+
+  * Implemented internal support for OpenGL tessellation.
diff --git a/relnotes/README.md b/relnotes/README.md
new file mode 100644
index 0000000..3dc16d2
--- /dev/null
+++ b/relnotes/README.md
@@ -0,0 +1,3 @@
+This is a placeholder document for an upcoming feature to auto-merge release
+notes into //RELEASE_NOTES.txt. This is being landed first to enable the
+development of the auto-merge tool.
diff --git a/relnotes/note1.md b/relnotes/note1.md
new file mode 100644
index 0000000..140bdb0
--- /dev/null
+++ b/relnotes/note1.md
@@ -0,0 +1 @@
+This is the first new note.
diff --git a/relnotes/second.md b/relnotes/second.md
new file mode 100644
index 0000000..110eef4
--- /dev/null
+++ b/relnotes/second.md
@@ -0,0 +1 @@
+This is the second note to be merged.