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"
19 #if SHELL_ENABLE_METAL
20 bool ShouldUseMetalRenderer() {
21 bool ios_version_supports_metal =
false;
23 auto device = MTLCreateSystemDefaultDevice();
24 ios_version_supports_metal = [device supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily1_v3];
27 return ios_version_supports_metal;
29 #endif // SHELL_ENABLE_METAL
32 #if TARGET_OS_SIMULATOR
38 FML_LOG(WARNING) <<
"The --enable-software-rendering is only supported on Simulator targets "
39 "and will be ignored.";
41 #endif // TARGET_OS_SIMULATOR
43 #if SHELL_ENABLE_METAL
44 static bool should_use_metal = ShouldUseMetalRenderer();
45 if (should_use_metal) {
48 #endif // SHELL_ENABLE_METAL
53 #if TARGET_OS_SIMULATOR
56 FML_CHECK(
false) <<
"Metal may only be unavailable on simulators";
58 #endif // TARGET_OS_SIMULATOR
62 switch (rendering_api) {
64 return [CALayer
class];
67 return [CAMetalLayer
class];
69 FML_CHECK(
false) <<
"Metal availability should already have been checked";
74 FML_CHECK(
false) <<
"Unknown client rendering API";
75 return [CALayer
class];