---
title: Device inspection
framework: metal
role: collectionGroup
role_heading: API Collection
path: metal/device-inspection
---

# Device inspection

Locate and identify a GPU and the features it supports, and sample its counters.

## Topics

### Checking a GPU device’s feature support

- [supportsFamily(_:)](metal/mtldevice/supportsfamily(_:).md)
- [MTLGPUFamily](metal/mtlgpufamily.md)
- [supportsFeatureSet(_:)](metal/mtldevice/supportsfeatureset(_:).md)
- [MTLFeatureSet](metal/mtlfeatureset.md)

### Checking compute support

- [maxThreadgroupMemoryLength](metal/mtldevice/maxthreadgroupmemorylength.md)
- [maxThreadsPerThreadgroup](metal/mtldevice/maxthreadsperthreadgroup.md)

### Checking render support

- [supportsRaytracing](metal/mtldevice/supportsraytracing.md)
- [supportsPrimitiveMotionBlur](metal/mtldevice/supportsprimitivemotionblur.md)
- [supportsRaytracingFromRender](metal/mtldevice/supportsraytracingfromrender.md)
- [supports32BitMSAA](metal/mtldevice/supports32bitmsaa.md)
- [supportsPullModelInterpolation](metal/mtldevice/supportspullmodelinterpolation.md)
- [supportsShaderBarycentricCoordinates](metal/mtldevice/supportsshaderbarycentriccoordinates.md)
- [supportsVertexAmplificationCount(_:)](metal/mtldevice/supportsvertexamplificationcount(_:).md)
- [areProgrammableSamplePositionsSupported](metal/mtldevice/areprogrammablesamplepositionssupported.md)
- [areRasterOrderGroupsSupported](metal/mtldevice/arerasterordergroupssupported.md)
- [areBarycentricCoordsSupported](metal/mtldevice/arebarycentriccoordssupported.md)

### Checking texture and sampler support

- [supports32BitFloatFiltering](metal/mtldevice/supports32bitfloatfiltering.md)
- [supportsBCTextureCompression](metal/mtldevice/supportsbctexturecompression.md)
- [isDepth24Stencil8PixelFormatSupported](metal/mtldevice/isdepth24stencil8pixelformatsupported.md)
- [supportsQueryTextureLOD](metal/mtldevice/supportsquerytexturelod.md)
- [readWriteTextureSupport](metal/mtldevice/readwritetexturesupport.md)

### Checking function pointer support

- [supportsFunctionPointers](metal/mtldevice/supportsfunctionpointers.md)
- [supportsFunctionPointersFromRender](metal/mtldevice/supportsfunctionpointersfromrender.md)

### Checking a GPU device’s memory

- [currentAllocatedSize](metal/mtldevice/currentallocatedsize.md)
- [recommendedMaxWorkingSetSize](metal/mtldevice/recommendedmaxworkingsetsize.md)
- [hasUnifiedMemory](metal/mtldevice/hasunifiedmemory.md)
- [maxTransferRate](metal/mtldevice/maxtransferrate.md)

### Sampling a GPU device’s counters

- [counterSets](metal/mtldevice/countersets.md)
- [supportsCounterSampling(_:)](metal/mtldevice/supportscountersampling(_:).md)
- [MTLCounterSamplingPoint](metal/mtlcountersamplingpoint.md)
- [makeCounterSampleBuffer(descriptor:)](metal/mtldevice/makecountersamplebuffer(descriptor:).md)

### Sampling GPU and CPU timestamps simultaneously

- [sampleTimestamps()](metal/mtldevice/sampletimestamps().md)

### Identifying a GPU device

- [name](metal/mtldevice/name.md)
- [architecture](metal/mtldevice/architecture.md)
- [MTLArchitecture](metal/mtlarchitecture.md)
- [registryID](metal/mtldevice/registryid.md)
- [location](metal/mtldevice/location.md)
- [MTLDeviceLocation](metal/mtldevicelocation.md)
- [locationNumber](metal/mtldevice/locationnumber.md)
- [isLowPower](metal/mtldevice/islowpower.md)
- [isRemovable](metal/mtldevice/isremovable.md)
- [isHeadless](metal/mtldevice/isheadless.md)
- [peerGroupID](metal/mtldevice/peergroupid.md)
- [peerCount](metal/mtldevice/peercount.md)
- [peerIndex](metal/mtldevice/peerindex.md)

## See Also

### Working with GPU devices

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