---
title: "makeSurfaceShader(descriptor:)"
framework: realitykit
role: symbol
role_heading: Instance Method
path: "realitykit/lowlevelrendercontext/makesurfaceshader(descriptor:)-9kdy6"
---

# makeSurfaceShader(descriptor:)

Asynchronously creates a custom surface shader from a user-authored Metal function descriptor.

## Declaration

```swift
nonisolated(nonsending) func makeSurfaceShader(descriptor: LowLevelMaterialResource.SurfaceShader.Descriptor) async throws -> sending LowLevelMaterialResource.SurfaceShader
```

## Parameters

- `descriptor`: The Metal function name, library, and optional constant values.

## Return Value

Return Value A compiled LowLevelMaterialResource.SurfaceShader.

## Discussion

Discussion note: An error if the specified Metal function cannot be found or compiled.

## See Also

### Creating surface shaders

- [makeSurfaceShader(descriptor:)](realitykit/lowlevelrendercontext/makesurfaceshader(descriptor:)-66tq8.md)
- [makeSimpleSurfaceShader(descriptor:)](realitykit/lowlevelrendercontext/makesimplesurfaceshader(descriptor:)-74vhb.md)
- [makeSimpleSurfaceShader(descriptor:)](realitykit/lowlevelrendercontext/makesimplesurfaceshader(descriptor:)-14ppx.md)
