7 #include "flutter/impeller/renderer/backend/metal/formats_mtl.h"
8 #include "flutter/impeller/renderer/context.h"
9 #include "flutter/shell/gpu/gpu_surface_metal_impeller.h"
14 const std::shared_ptr<IOSContext>& context)
16 GPUSurfaceMetalDelegate(MTLRenderTargetType::kCAMetalLayer),
18 impeller_context_(context ? context->GetImpellerContext() : nullptr) {
19 if (!impeller_context_) {
29 bool IOSSurfaceMetalImpeller::IsValid()
const {
34 void IOSSurfaceMetalImpeller::UpdateStorageSizeIfNecessary() {
39 std::unique_ptr<Surface> IOSSurfaceMetalImpeller::CreateGPUSurface(GrDirectContext*) {
40 impeller_context_->UpdateOffscreenLayerPixelFormat(
41 impeller::FromMTLPixelFormat(layer_.get().pixelFormat));
42 return std::make_unique<GPUSurfaceMetalImpeller>(
this,
48 GPUCAMetalLayerHandle IOSSurfaceMetalImpeller::GetCAMetalLayer(
const SkISize& frame_info)
const {
49 CAMetalLayer* layer = layer_.get();
50 const auto drawable_size = CGSizeMake(frame_info.width(), frame_info.height());
51 if (!CGSizeEqualToSize(drawable_size, layer.drawableSize)) {
52 layer.drawableSize = drawable_size;
57 layer.framebufferOnly = NO;
65 layer.presentsWithTransaction = [[NSThread currentThread] isMainThread];
71 bool IOSSurfaceMetalImpeller::PresentDrawable(GrMTLHandle drawable)
const {
77 GPUMTLTextureInfo IOSSurfaceMetalImpeller::GetMTLTexture(
const SkISize& frame_info)
const {
79 return GPUMTLTextureInfo{
86 bool IOSSurfaceMetalImpeller::PresentTexture(GPUMTLTextureInfo texture)
const {
92 bool IOSSurfaceMetalImpeller::AllowsDrawingWhenGpuDisabled()
const {