---
title: Resource creation
framework: metal
role: collectionGroup
role_heading: API Collection
path: metal/resource-creation
---

# Resource creation

Load assets with input/output queues and make various resource instances, such as buffers, textures, acceleration structures, and memory heaps.

## Topics

### Working with resource heaps

- [makeHeap(descriptor:)](metal/mtldevice/makeheap(descriptor:).md)
- [heapBufferSizeAndAlign(length:options:)](metal/mtldevice/heapbuffersizeandalign(length:options:).md)
- [heapTextureSizeAndAlign(descriptor:)](metal/mtldevice/heaptexturesizeandalign(descriptor:).md)
- [heapAccelerationStructureSizeAndAlign(size:)](metal/mtldevice/heapaccelerationstructuresizeandalign(size:).md)
- [heapAccelerationStructureSizeAndAlign(descriptor:)](metal/mtldevice/heapaccelerationstructuresizeandalign(descriptor:).md)
- [MTLSizeAndAlign](metal/mtlsizeandalign.md)

### Creating buffers

- [maxBufferLength](metal/mtldevice/maxbufferlength.md)
- [makeBuffer(length:options:)](metal/mtldevice/makebuffer(length:options:).md)
- [makeBuffer(bytes:length:options:)](metal/mtldevice/makebuffer(bytes:length:options:).md)
- [makeBuffer(bytesNoCopy:length:options:deallocator:)](metal/mtldevice/makebuffer(bytesnocopy:length:options:deallocator:).md)

### Creating textures

- [makeTexture(descriptor:)](metal/mtldevice/maketexture(descriptor:).md)
- [makeTexture(descriptor:iosurface:plane:)](metal/mtldevice/maketexture(descriptor:iosurface:plane:).md)
- [makeSharedTexture(descriptor:)](metal/mtldevice/makesharedtexture(descriptor:).md)
- [makeSharedTexture(handle:)](metal/mtldevice/makesharedtexture(handle:).md)
- [minimumLinearTextureAlignment(for:)](metal/mtldevice/minimumlineartexturealignment(for:).md)
- [minimumTextureBufferAlignment(for:)](metal/mtldevice/minimumtexturebufferalignment(for:).md)

### Creating samplers

- [supportsTextureSampleCount(_:)](metal/mtldevice/supportstexturesamplecount(_:).md)
- [makeSamplerState(descriptor:)](metal/mtldevice/makesamplerstate(descriptor:).md)
- [getDefaultSamplePositions(sampleCount:)](metal/mtldevice/getdefaultsamplepositions(samplecount:).md)

### Working with sparse textures

- [sparseTileSize(textureType:pixelFormat:sampleCount:sparsePageSize:)](metal/mtldevice/sparsetilesize(texturetype:pixelformat:samplecount:sparsepagesize:).md)
- [sparseTileSize(with:pixelFormat:sampleCount:)](metal/mtldevice/sparsetilesize(with:pixelformat:samplecount:).md)
- [sparseTileSizeInBytes(sparsePageSize:)](metal/mtldevice/sparsetilesizeinbytes(sparsepagesize:).md)
- [sparseTileSizeInBytes](metal/mtldevice/sparsetilesizeinbytes.md)
- [convertSparsePixelRegions(_:toTileRegions:withTileSize:alignmentMode:numRegions:)](metal/mtldevice/convertsparsepixelregions(_:totileregions:withtilesize:alignmentmode:numregions:).md)
- [convertSparseTileRegions(_:toPixelRegions:withTileSize:numRegions:)](metal/mtldevice/convertsparsetileregions(_:topixelregions:withtilesize:numregions:).md)
- [MTLSparsePageSize](metal/mtlsparsepagesize.md)
- [MTLSparseTextureRegionAlignmentMode](metal/mtlsparsetextureregionalignmentmode.md)

### Creating acceleration structures for ray tracing

- [makeAccelerationStructure(descriptor:)](metal/mtldevice/makeaccelerationstructure(descriptor:).md)
- [makeAccelerationStructure(size:)](metal/mtldevice/makeaccelerationstructure(size:).md)
- [accelerationStructureSizes(descriptor:)](metal/mtldevice/accelerationstructuresizes(descriptor:).md)
- [MTLAccelerationStructureSizes](metal/mtlaccelerationstructuresizes.md)

### Creating argument buffer encoders

- [argumentBuffersSupport](metal/mtldevice/argumentbufferssupport.md)
- [maxArgumentBufferSamplerCount](metal/mtldevice/maxargumentbuffersamplercount.md)
- [makeArgumentEncoder(arguments:)](metal/mtldevice/makeargumentencoder(arguments:).md)
- [makeArgumentEncoder(bufferBinding:)](metal/mtldevice/makeargumentencoder(bufferbinding:).md)

### Creating fences and events

- [makeFence()](metal/mtldevice/makefence().md)
- [makeEvent()](metal/mtldevice/makeevent().md)
- [makeSharedEvent()](metal/mtldevice/makesharedevent().md)
- [makeSharedEvent(handle:)](metal/mtldevice/makesharedevent(handle:).md)

### Creating rasterization rate maps

- [supportsRasterizationRateMap(layerCount:)](metal/mtldevice/supportsrasterizationratemap(layercount:).md)
- [makeRasterizationRateMap(descriptor:)](metal/mtldevice/makerasterizationratemap(descriptor:).md)

## See Also

### Working with GPU devices

- [Device inspection](metal/device-inspection.md)
- [Work submission](metal/work-submission.md)
- [Pipeline state creation](metal/pipeline-state-creation.md)
- [Shader library and archive creation](metal/shader-library-and-archive-creation.md)
