# ShaderStage

> Represents individual GPU shader stages.

## Definition

* **Type:** Enum
* **Namespace:** [UnityEngine.Shaders](/engine/6000.6/script-reference/unityengine/shaders.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public enum ShaderStage
```

## Remarks

This enum is used in various APIs that need to specify a single GPU shader stage. APIs that allow specifying multiple shader stages simultaneously use the [ShaderStageFlags](/engine/6000.6/script-reference/unityengine/shaders/shaderstageflags.md) enum instead.

The traditional graphics shader stages used in rasterization are represented by the following enum values:

* [ShaderStage.Vertex](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/vertex.md)
* [ShaderStage.Fragment](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/fragment.md)
* [ShaderStage.Geometry](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/geometry.md)
* [ShaderStage.Hull](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/hull.md)
* [ShaderStage.Domain](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/domain.md)

The compute shader stage and the ray tracing shader stage are represented as [ShaderStage.Compute](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/compute.md) and [ShaderStage.RayTracing](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/raytracing.md), respectively.

You can also use [ShaderStage.FirstStage](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/firststage.md), [ShaderStage.GraphicsStageCount](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/graphicsstagecount.md), and [ShaderStage.Count](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/count.md) to iterate over shader stages.

Use IsShaderStageEnabled to check if the [ShaderStageFlags](/engine/6000.6/script-reference/unityengine/shaders/shaderstageflags.md) value has the given stage enabled. Use [Utility.ShaderStageToFlags](/engine/6000.6/script-reference/unityengine/shaders/utility/shaderstagetoflags.md) to convert an individual shader stage to [ShaderStageFlags](/engine/6000.6/script-reference/unityengine/shaders/shaderstageflags.md).

Additional Resources: [ShaderStageFlags](/engine/6000.6/script-reference/unityengine/shaders/shaderstageflags.md), [Utility](/engine/6000.6/script-reference/unityengine/shaders/utility.md).

## Examples

```csharp
using UnityEngine;
using UnityEngine.Shaders;

/*
    Attach this script to a GameObject and enter Play mode. "Shader stages: Basic, Tessellation" will be printed in the console.
*/

public class ShaderTypes : MonoBehaviour
{
    void Start()
    {
        ShaderStageFlags stages = (ShaderStageFlags.Graphics & (~ShaderStageFlags.Geometry));
        // Iterate over all possible shader stages and check if the only stages enabled are Vertex, Fragment, Hull, and Domain
        // Log a message if a stage is enabled or disabled incorrectly.
        for (ShaderStage stage = ShaderStage.FirstStage; stage < ShaderStage.Count; ++stage)
        {
            bool shouldBeEnabled = stage < ShaderStage.GraphicsStageCount && stage != ShaderStage.Geometry;
            if (Utility.IsShaderStageEnabled(stages, stage) != shouldBeEnabled)
                Debug.Log("Unexpected stage " + stage + (shouldBeEnabled ? " not enabled" : " enabled"));
        }
        Debug.Log("Shader stages: " + stages);
    }
}
```

## Fields

| Value                                                                                                       | Description                                                       |
| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
| [Compute](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/compute.md)                       | Represents the compute shader stage.                              |
| [Count](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/count.md)                           | Represents the total number of shader stages recognized by Unity. |
| [Domain](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/domain.md)                         | Represents the domain shader stage.                               |
| [FirstStage](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/firststage.md)                 | Represents the first shader stage for iteration.                  |
| [Fragment](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/fragment.md)                     | Represents the fragment shader stage.                             |
| [Geometry](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/geometry.md)                     | Represents the geometry shader stage.                             |
| [GraphicsStageCount](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/graphicsstagecount.md) | Represents the number of shader stages in rasterization graphics. |
| [Hull](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/hull.md)                             | Represents the hull shader stage.                                 |
| [RayTracing](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/raytracing.md)                 | Represents the raytracing shader stage.                           |
| [Vertex](/engine/6000.6/script-reference/unityengine/shaders/shaderstage/vertex.md)                         | Represents the vertex shader stage.                               |
