7 #include <Foundation/Foundation.h>
8 #include <QuartzCore/CAEAGLLayer.h>
9 #import <QuartzCore/CAMetalLayer.h>
10 #if SHELL_ENABLE_METAL
11 #include <Metal/Metal.h>
12 #endif // SHELL_ENABLE_METAL
13 #import <TargetConditionals.h>
15 #include "flutter/fml/logging.h"
21 #if SHELL_ENABLE_METAL
22 bool ShouldUseMetalRenderer() {
23 bool ios_version_supports_metal =
false;
25 auto device = MTLCreateSystemDefaultDevice();
26 ios_version_supports_metal = [device supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily1_v3];
29 return ios_version_supports_metal;
31 #endif // SHELL_ENABLE_METAL
34 #if TARGET_OS_SIMULATOR
40 FML_LOG(WARNING) <<
"The --enable-software-rendering is only supported on Simulator targets "
41 "and will be ignored.";
43 #endif // TARGET_OS_SIMULATOR
45 #if SHELL_ENABLE_METAL
46 static bool should_use_metal = ShouldUseMetalRenderer();
47 if (should_use_metal) {
50 #endif // SHELL_ENABLE_METAL
55 #if TARGET_OS_SIMULATOR
58 FML_CHECK(
false) <<
"Metal may only be unavailable on simulators";
60 #endif // TARGET_OS_SIMULATOR
64 switch (rendering_api) {
66 return [CALayer
class];
72 return [CAMetalLayer
class];
75 FML_CHECK(
false) <<
"Metal availability should already have been checked";
80 FML_CHECK(
false) <<
"Unknown client rendering API";
81 return [CALayer
class];