Version: 2021.3
ShaderLab command: Stencil
ShaderLab command: GrabPass

ShaderLab command: UsePass

The UsePass command inserts a named Pass from another ShaderA program that runs on the GPU. More info
See in Glossary
object. You can use this command to reduce code duplication in shader source files.

For information on adding a name to a Pass in ShaderLabUnity’s language for defining the structure of Shader objects. More info
See in Glossary
code, see ShaderLab: adding a name to a Pass.

Render pipeline compatibility

Feature name Built-in Render PipelineA series of operations that take the contents of a Scene, and displays them on a screen. Unity lets you choose from pre-built render pipelines, or write your own. More info
See in Glossary
Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP
UsePass Yes Yes Yes Yes

Usage

Signature Function
UsePass "Shader object name/PASS NAME IN UPPERCASE" Inserts the named Pass from the named Shader object.

If the named Shader object contains more than one SubShader, Unity iterates over the SubShaders until it finds the first supported SubShader that contains a Pass with the given name. For information on how Unity determines whether a SubShader is supported, see Shader objects introduction.

If the SubShader contains more than one Pass with the same name, Unity returns the last Pass it finds.

If Unity does not find a matching Pass, it shows the error shader.

Examples

This example code creates a Shader objectAn instance of the Shader class, a Shader object is container for shader programs and GPU instructions, and information that tells Unity how to use them. Use them with materials to determine the appearance of your scene. More info
See in Glossary
called NamedPass, which contains a Pass called ExampleNamedPass.

Shader "Examples/ContainsNamedPass"
{
    SubShader
    {
        Pass
        {    
              Name "ExampleNamedPass"
            
              // The rest of the Pass contents go here.
        }
    }
}

This example code creates a Shader object called UseNamedPass, which uses the named Pass from the example code above.

Shader "Examples/UsesNamedPass"
{
    SubShader
    {
        UsePass "Examples/ContainsNamedPass/EXAMPLENAMEDPASS"
    }
}
ShaderLab command: Stencil
ShaderLab command: GrabPass