diff options
author | Greg Daniel <egdaniel@google.com> | 2017-07-31 10:45:52 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-31 15:03:22 +0000 |
commit | cebcb84739c261e729a054ff097adca32a1b537f (patch) | |
tree | 6b936450dc9b90357152c94e32d4c77bdba66042 /src/gpu/mtl/GrMtlGpu.mm | |
parent | 6bd729d8ebc98548fd92e081e1d1163bbc2ec815 (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.mm | 68 |
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; |