diff --git a/src/Skia/Avalonia.Skia/CustomRenderTarget.cs b/src/Skia/Avalonia.Skia/CustomRenderTarget.cs
new file mode 100644
index 0000000000..23a509a2a4
--- /dev/null
+++ b/src/Skia/Avalonia.Skia/CustomRenderTarget.cs
@@ -0,0 +1,42 @@
+// Copyright (c) The Avalonia Project. All rights reserved.
+// Licensed under the MIT license. See licence.md file in the project root for full license information.
+
+using Avalonia.Platform;
+using Avalonia.Rendering;
+
+namespace Avalonia.Skia
+{
+ ///
+ /// Adapts to be used within Skia rendering pipeline.
+ ///
+ internal class CustomRenderTarget : IRenderTarget
+ {
+ private readonly ICustomSkiaRenderTarget _renderTarget;
+
+ public CustomRenderTarget(ICustomSkiaRenderTarget renderTarget)
+ {
+ _renderTarget = renderTarget;
+ }
+
+ public void Dispose()
+ {
+ _renderTarget.Dispose();
+ }
+
+ public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
+ {
+ ICustomSkiaRenderSession session = _renderTarget.BeginRendering();
+
+ var nfo = new DrawingContextImpl.CreateInfo
+ {
+ GrContext = session.GrContext,
+ Canvas = session.Canvas,
+ Dpi = SkiaPlatform.DefaultDpi * session.ScaleFactor,
+ VisualBrushRenderer = visualBrushRenderer,
+ DisableTextLcdRendering = true
+ };
+
+ return new DrawingContextImpl(nfo, session);
+ }
+ }
+}
diff --git a/src/Skia/Avalonia.Skia/ICustomSkiaGpu.cs b/src/Skia/Avalonia.Skia/ICustomSkiaGpu.cs
new file mode 100644
index 0000000000..751dd3c1e7
--- /dev/null
+++ b/src/Skia/Avalonia.Skia/ICustomSkiaGpu.cs
@@ -0,0 +1,26 @@
+// Copyright (c) The Avalonia Project. All rights reserved.
+// Licensed under the MIT license. See licence.md file in the project root for full license information.
+
+using System.Collections.Generic;
+using SkiaSharp;
+
+namespace Avalonia.Skia
+{
+ ///
+ /// Custom Skia gpu instance.
+ ///
+ public interface ICustomSkiaGpu
+ {
+ ///
+ /// Skia GrContext used.
+ ///
+ GRContext GrContext { get; }
+
+ ///
+ /// Attempts to create custom render target from given surfaces.
+ ///
+ /// Surfaces.
+ /// Created render target or if it fails.
+ ICustomSkiaRenderTarget TryCreateRenderTarget(IEnumerable