# ShaderLab language reference

> Reference for ShaderLab.

Find the blocks, directives, and commands you need to write a shader in ShaderLab.

| **Page**                                                                                                                           | **Description**                                                                                                                     |
| ---------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| [Shader](/engine/6000.0/manual/materials-and-shaders/shaders/reference/sl-reference/sl-shader-object.md)                           | Explore the `Shader` block in ShaderLab to create a shader, and add material properties, custom editors and a fallback shader.      |
| [SubShader](/engine/6000.0/manual/materials-and-shaders/shaders/reference/sl-reference/sl-sub-shader-object.md)                    | Explore the `SubShader` block in ShaderLab to create a subshader, and add LOD values, tags, or a `UsePass` or `GrabPass` directive. |
| [Pass](/engine/6000.0/manual/materials-and-shaders/shaders/reference/sl-reference/sl-sub-shader-pass.md)                           | Explore the `Pass` block in ShaderLab to create a shader pass, and add a name, tags, and shader code blocks.                        |
| [GPU render state commands](/engine/6000.0/manual/materials-and-shaders/shaders/reference/sl-reference/sl-commands.md)             | Find the commands in ShaderLab you need to change the render state on the GPU, such as `Blend`, `Cull` and `ZWrite`.                |
| [PackageRequirements block](/engine/6000.0/manual/materials-and-shaders/shaders/reference/sl-reference/sl-package-requirements.md) | Explore the `PackageRequirements` block in ShaderLab to specify required packages for a subshader or shader pass.                   |
