aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/mtl/GrMtlGpu.mm
diff options
context:
space:
mode:
authorGravatar Greg Daniel <egdaniel@google.com>2017-07-31 10:45:52 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-31 15:03:22 +0000
commitcebcb84739c261e729a054ff097adca32a1b537f (patch)
tree6b936450dc9b90357152c94e32d4c77bdba66042 /src/gpu/mtl/GrMtlGpu.mm
parent6bd729d8ebc98548fd92e081e1d1163bbc2ec815 (diff)
Add caps files for metal
Bug: skia: Change-Id: I8e7488320d4237cf67d6ebeaad319d3de75b67e6 Reviewed-on: https://skia-review.googlesource.com/27741 Commit-Queue: Greg Daniel <egdaniel@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com> Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Diffstat (limited to 'src/gpu/mtl/GrMtlGpu.mm')
-rw-r--r--src/gpu/mtl/GrMtlGpu.mm68
1 files changed, 66 insertions, 2 deletions
diff --git a/src/gpu/mtl/GrMtlGpu.mm b/src/gpu/mtl/GrMtlGpu.mm
index 986bb8a6f7..7a9a673d69 100644
--- a/src/gpu/mtl/GrMtlGpu.mm
+++ b/src/gpu/mtl/GrMtlGpu.mm
@@ -11,19 +11,83 @@
#error This file must be compiled with Arc. Use -fobjc-arc flag
#endif
+static bool get_feature_set(id<MTLDevice> device, MTLFeatureSet* featureSet) {
+ // Mac OSX
+#ifdef SK_BUILD_FOR_MAC
+ if ([device supportsFeatureSet:MTLFeatureSet_OSX_GPUFamily1_v2]) {
+ *featureSet = MTLFeatureSet_OSX_GPUFamily1_v2;
+ return true;
+ }
+ if ([device supportsFeatureSet:MTLFeatureSet_OSX_GPUFamily1_v1]) {
+ *featureSet = MTLFeatureSet_OSX_GPUFamily1_v1;
+ return true;
+ }
+#endif
+
+ // iOS Family group 3
+#ifdef SK_BUILD_FOR_IOS
+ if ([device supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily3_v2]) {
+ *featureSet = MTLFeatureSet_iOS_GPUFamily3_v2;
+ return true;
+ }
+ if ([device supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily3_v1]) {
+ *featureSet = MTLFeatureSet_iOS_GPUFamily3_v1;
+ return true;
+ }
+
+ // iOS Family group 2
+ if ([device supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily2_v3]) {
+ *featureSet = MTLFeatureSet_iOS_GPUFamily2_v3;
+ return true;
+ }
+ if ([device supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily2_v2]) {
+ *featureSet = MTLFeatureSet_iOS_GPUFamily2_v2;
+ return true;
+ }
+ if ([device supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily2_v1]) {
+ *featureSet = MTLFeatureSet_iOS_GPUFamily2_v1;
+ return true;
+ }
+
+ // iOS Family group 1
+ if ([device supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily1_v3]) {
+ *featureSet = MTLFeatureSet_iOS_GPUFamily1_v3;
+ return true;
+ }
+ if ([device supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily1_v2]) {
+ *featureSet = MTLFeatureSet_iOS_GPUFamily1_v2;
+ return true;
+ }
+ if ([device supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily1_v1]) {
+ *featureSet = MTLFeatureSet_iOS_GPUFamily1_v1;
+ return true;
+ }
+#endif
+ // No supported feature sets were found
+ return false;
+}
+
GrGpu* GrMtlGpu::Create(GrContext* context, const GrContextOptions& options,
id<MTLDevice> device, id<MTLCommandQueue> queue) {
if (!device || !queue) {
return nullptr;
}
- return new GrMtlGpu(context, options, device, queue);
+ MTLFeatureSet featureSet;
+ if (!get_feature_set(device, &featureSet)) {
+ return nullptr;
+ }
+ return new GrMtlGpu(context, options, device, queue, featureSet);
}
GrMtlGpu::GrMtlGpu(GrContext* context, const GrContextOptions& options,
- id<MTLDevice> device, id<MTLCommandQueue> queue)
+ id<MTLDevice> device, id<MTLCommandQueue> queue, MTLFeatureSet featureSet)
: INHERITED(context)
, fDevice(device)
, fQueue(queue) {
+
+ fMtlCaps.reset(new GrMtlCaps(options, fDevice, featureSet));
+ fCaps = fMtlCaps;
+
MTLTextureDescriptor* txDesc = [[MTLTextureDescriptor alloc] init];
txDesc.textureType = MTLTextureType3D;
txDesc.height = 64;