<!--
{
  "availability" : [
    "iOS: 13.0.0 -",
    "iPadOS: 13.0.0 -",
    "macCatalyst: 13.4.0 -",
    "macOS: 10.15.4 -",
    "tvOS: 16.0.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Metal",
  "identifier" : "/documentation/Metal/MTLRasterizationRateMap",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "Metal"
    ],
    "preciseIdentifier" : "c:objc(pl)MTLRasterizationRateMap"
  },
  "title" : "MTLRasterizationRateMap"
}
-->

# MTLRasterizationRateMap

A compiled read-only instance that determines how to apply variable rasterization rates when rendering.

```
protocol MTLRasterizationRateMap : NSObjectProtocol, Sendable
```

## Overview

Use a rasterization rate map to reduce rendering quality in less-important or less-sampled regions of the render target, such as areas affected by blur effects or a far-away cascade of a shadow map.

By default, a render pass doesn’t have a rasterization rate map, and the viewport coordinate system maps exactly to physical pixels in the targeted textures. If you apply a rasterization rate map to a render pass, the viewport coordinate system becomes a logical coordinate system, and the rate map describes how to map logical coordinates to physical pixels in the render pass’s targets. You can specify different rasterization rates in different regions of the logical coordinate system. When you do, those logical units map to fewer physical pixels, which means you can use smaller render targets and render fewer pixels, saving both memory and processing time. For more information, see [Rendering at different rasterization rates](/documentation/Metal/rendering-at-different-rasterization-rates).

Don’t implement this protocol yourself; instead, create an [`MTLRasterizationRateMapDescriptor`](/documentation/Metal/MTLRasterizationRateMapDescriptor) instance, configure it, and then call the [`makeRasterizationRateMap(descriptor:)`](/documentation/Metal/MTLDevice/makeRasterizationRateMap(descriptor:)) on a device instance.

To apply a rasterization rate map to a render pass, set the render pass descriptor’s [`rasterizationRateMap`](/documentation/Metal/MTLRenderPassDescriptor/rasterizationRateMap) property.

### Configuring the rate map

A rasterization rate map specifies the size of the viewport coordinate space in logical units and one or more *layer maps*. A layer map partitions the viewport coordinate space into a 2D grid of cells and defines the rasterization rate for each cell. If you aren’t using layered rendering, provide a single layer map; otherwise, provide one layer map for each layer. For more information about layered rendering, see [Rendering to multiple texture slices in a draw command](/documentation/Metal/rendering-to-multiple-texture-slices-in-a-draw-command).

You can query the physical size requirements for each layer in the render pass by calling the [`physicalSize(layer:)`](/documentation/Metal/MTLRasterizationRateMap/physicalSize(layer:)) method. Your render targets need to be at least this large.

## Topics

### Identifying the rate map

[`device`](/documentation/Metal/MTLRasterizationRateMap/device)

The device object that created the rate map.

[`label`](/documentation/Metal/MTLRasterizationRateMap/label)

A string that identifies the rate map.

### Inspecting geometric and rendering properties

[`layerCount`](/documentation/Metal/MTLRasterizationRateMap/layerCount)

The number of layers in the rate map.

[`screenSize`](/documentation/Metal/MTLRasterizationRateMap/screenSize)

The logical size, in pixels, of the viewport coordinate system.

[`physicalSize(layer:)`](/documentation/Metal/MTLRasterizationRateMap/physicalSize(layer:))

Returns the dimensions, in pixels, of the area in the render target affected by the rasterization rate map.

[`physicalGranularity`](/documentation/Metal/MTLRasterizationRateMap/physicalGranularity)

The granularity, in physical pixels, at which the rasterization rate varies.

### Converting between viewport and physical coordinates

[`physicalCoordinates(screenCoordinates:layer:)`](/documentation/Metal/MTLRasterizationRateMap/physicalCoordinates(screenCoordinates:layer:))

Converts a point in logical viewport coordinates to the corresponding physical coordinates in a render layer.

[`screenCoordinates(physicalCoordinates:layer:)`](/documentation/Metal/MTLRasterizationRateMap/screenCoordinates(physicalCoordinates:layer:))

Converts a point in physical coordinates inside a layer to its corresponding logical viewport coordinates.

### Obtaining coordinate transformation data

[`parameterDataSizeAndAlign`](/documentation/Metal/MTLRasterizationRateMap/parameterDataSizeAndAlign)

The size and alignment requirements to contain the coordinate transformation information in this rate map.

[`copyParameterData(buffer:offset:)`](/documentation/Metal/MTLRasterizationRateMap/copyParameterData(buffer:offset:))

Copies the parameter data into the provided buffer.



---

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)