# ShaderStageFlags

> Represents one or several GPU shader stages.

## Definition

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

```csharp
[Flags]
public enum ShaderStageFlags
```

## Remarks

This enum is used in various APIs that allow specifying multiple GPU shader stages simultaneuously. APIs that need to specify individual shader stages use the [ShaderStage](/engine/6000.5/script-reference/unityengine/shaders/shaderstage.md) enum instead.

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

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

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

In addition to that, the following enum values can be used for convenient representation of common shader stage combinations:

* [ShaderStageFlags.Basic](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/basic.md) has [ShaderStageFlags.Vertex](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/vertex.md) and [ShaderStageFlags.Fragment](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/fragment.md) enabled
* [ShaderStageFlags.Tessellation](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/tessellation.md) has [ShaderStageFlags.Hull](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/hull.md) and [ShaderStageFlags.Domain](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/domain.md) enabled
* [ShaderStageFlags.Graphics](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/graphics.md) has [ShaderStageFlags.Basic](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/basic.md), [ShaderStageFlags.Tessellation](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/tessellation.md), and [ShaderStageFlags.Geometry](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/geometry.md) enabled
* [ShaderStageFlags.Any](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/any.md) has all possible shader stages enabled

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

Additional Resources: [ShaderStage](/engine/6000.5/script-reference/unityengine/shaders/shaderstage.md), [Utility](/engine/6000.5/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                                                                            |
| ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| [Any](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/any.md)                   | Specifies that all shader stages are enabled.                                          |
| [Basic](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/basic.md)               | Specifies that vertex and fragment shader stages are enabled.                          |
| [Compute](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/compute.md)           | Specifies that compute shader stage is enabled.                                        |
| [Domain](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/domain.md)             | Specifies that domain shader stage is enabled.                                         |
| [Fragment](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/fragment.md)         | Specifies that fragment shader stage is enabled.                                       |
| [Geometry](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/geometry.md)         | Specifies that geometry shader stage is enabled.                                       |
| [Graphics](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/graphics.md)         | Specifies that vertex, fragment, geometry, hull, and domain shader stages are enabled. |
| [Hull](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/hull.md)                 | Specifies that hull shader stage is enabled.                                           |
| [None](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/none.md)                 | Specifies that no shader stages are enabled.                                           |
| [RayTracing](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/raytracing.md)     | Specifies that ray tracing shader stage is enabled.                                    |
| [Tessellation](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/tessellation.md) | Specifies that hull and domain shader stages are enabled.                              |
| [Vertex](/engine/6000.5/script-reference/unityengine/shaders/shaderstageflags/vertex.md)             | Specifies that vertex shader stage is enabled.                                         |
