PackageRequirements block in ShaderLab reference
Explore the PackageRequirements block in ShaderLab to specify required packages for a subshader or shader pass.
Read time 3 minutesLast updated 22 days ago
To specify package requirements for a SubShader or a Pass, you use the block. ShaderLab supports a single block per SubShader or Pass, but each block can specify multiple package requirements.
PackageRequirementsPackageRequirementsRender pipeline compatibility
Feature name | Universal Render Pipeline (URP) | High Definition Render Pipeline (HDRP) | Custom SRP | Built-in Render Pipeline |
|---|---|---|---|---|
| ShaderLab: PackageRequirements block | Yes | Yes | Yes | Yes |
Syntax
Signature | Function |
|---|---|
| Defines the package requirements for the Pass or SubShader. |
There are multiple ways to declare package requirements. Each one provides a different behavior. They are:
- "<package name>": Specifies that the SubShader or Pass works with any version of the package.
- "<package name>": "<version restrictions>": Specifies that the SubShader or Pass only works with a subset of package versions.
- "<package name>": "unity=<version restrictions>": Specifies that the SubShader or Pass only works with a subset of Unity versions and requires a package with the given name.
- "unity":"<version restrictions>": Specifies that the SubShader or Pass only works with a subset of Unity versions.
Version syntax
In ShaderLab's package requirements, a version uses the or format. If you only use , Unity uses for the . Package versions can also include a or a postfix where is equivalent to . Preview versions come before non-preview versions, so comes after but before .
major.minormajor.minor.patchmajor.minor0patch-preview-preview.n-preview-preview.01.2.3-preview.41.2.21.2.3There are multiple ways to specify a version range. Each one provides a different behavior. They are:
- <version>: Includes the version you enter and all versions after that. For example, includes all versions starting with
1.2.3;1.2.3 - [<version>]: Specifies the exact version. For example, only includes version
[1.2.3];1.2.3 - [<version1>,<version2>]: Specifies a range between <version1> and <version2>. Using square brackets and round brackets causes the range to include or exclude to version respectively. The opening bracket affects <version1> and the closing bracket affects <version2>. Example: includes all versions from 1.2.3 to 2.3.3.
[1.2.3,2.3.4)
You can also specify sets of version ranges for a single package. To create a set of version ranges from individual ranges, use a semicolon as a separator. For example, includes versions from 2.0.0 to 3.4.5, version 3.7.0, and version 4.0.0 and above.
[2.0,3.4.5];[3.7];4.0When you set the versions for a package, be aware of the following:
- Versions, version ranges, and sets of version ranges cannot contain any extra characters.
- Version ranges cannot be empty.
- Sets of version ranges cannot have intersections.
- Package requirements are sensitive to whitespace.
If the syntax does not adhere to the above, the version restriction is invalid. For more information, refer to Set a shader to require a package.