<!--
{
  "availability" : [
    "iOS: -",
    "iPadOS: -",
    "macCatalyst: -",
    "macOS: -",
    "tvOS: -",
    "visionOS: -"
  ],
  "documentType" : "symbol",
  "framework" : "MetalPerformanceShaders",
  "identifier" : "/documentation/MetalPerformanceShaders/MPSKernelOptions",
  "metadataVersion" : "0.1.0",
  "role" : "Structure",
  "symbol" : {
    "kind" : "Structure",
    "modules" : [
      "Metal Performance Shaders"
    ],
    "preciseIdentifier" : "c:@E@MPSKernelOptions"
  },
  "title" : "MPSKernelOptions"
}
-->

# MPSKernelOptions

The options used when creating a kernel.

```
struct MPSKernelOptions
```

## Overview

The Metal Performance Shaders framework uses the same API validation layer that Metal uses to alert you to API mistakes during development. While this option is turned on in your Xcode scheme, common programming errors will either trigger an assert or send a warning to the debug log. Except in the case of serious errors, little or no output should arrive in the console under standard usage. You can set a kernel’s [`options`](/documentation/MetalPerformanceShaders/MPSKernel/options) parameter to the [`skipAPIValidation`](/documentation/MetalPerformanceShaders/MPSKernelOptions/skipAPIValidation) value to skip most of this checking. This flag may also lead to small reductions in CPU cost.

## Topics

### Constants

[`none`](/documentation/MetalPerformanceShaders/MPSKernelOptions/none)

The default option for the kernel. Kernels created with this option will not skip any API validation and will not use reduced precision.

[`skipAPIValidation`](/documentation/MetalPerformanceShaders/MPSKernelOptions/skipAPIValidation)

A property that directs the kernel to perform or skip argument validation.

[`allowReducedPrecision`](/documentation/MetalPerformanceShaders/MPSKernelOptions/allowReducedPrecision)

When possible, kernels use a higher-precision data representation internally than the destination storage format to avoid excessive accumulation of computational rounding error in the result. This option advises the kernel that the destination storage format already has too much precision for what is ultimately required downstream, and the kernel may use reduced precision internally when it determines that a less precise result would yield better performance. When enabled, the performance win is often small and the precision of the result may vary by hardware and OS.

[`disableInternalTiling`](/documentation/MetalPerformanceShaders/MPSKernelOptions/disableInternalTiling)

Some kernels may automatically split up their work internally into multiple tiles. This improves performance on larger textures and reduces the amount of memory needed by the framework for temporary storage. However, if you are using your own tiling scheme to achieve similar results, your tile sizes and the framework’s choice of tile sizes may interfere with one another, causing the framework to subdivide your tiles for its own use inefficiently. Use this option to force the framework to process your data tile as a single chunk.

[`insertDebugGroups`](/documentation/MetalPerformanceShaders/MPSKernelOptions/insertDebugGroups)

Enables calling kernel encode methods.

### Initializers

[`init(rawValue:)`](/documentation/MetalPerformanceShaders/MPSKernelOptions/init(rawValue:))

### Type Properties

[`verbose`](/documentation/MetalPerformanceShaders/MPSKernelOptions/verbose)



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)