In HLSL, #include
directives are a type of preprocessor directive. They instruct the compiler to include the contents of one HLSL file inside another. The file that they include is called an include file.
In Unity, regular #include
directives work the same as in standard HLSL. For more information on regular #include
directives, see the HLSL documentation: include Directive.
Unity also provides an additional, Unity-specific #include_with_pragmas
directive. The #include_with_pragmas
directive works the same as a regular #include
directive, but it also allows you to use #pragma
directives in the include file. This means that the #include_with_pragmas
directive allows you to share #pragma
directives between multiple files.
Note: To use #include_with_pragmas
directives, you must enable the Caching Shader Preprocessor.
This example demonstrates how to use the Unity-specific #include_with_pragmas
directive to enable a common workflow improvement: the ability to toggle shader debugging on and off for multiple shaders, without needing to edit every shader source file every time.
The following line demonstrates the contents of the include file. It contains a single pragma directive that enables shader debugging:
// Comment out the following line to disable shader debugging
#pragma enable_d3d11_debug_symbols
In each shader that you want to debug, add an #include_with_pragmas
directive that points to the include file. Put the directive near the other #pragma
directives, like this:
// Example pragma directives
#pragma target 4.0
#pragma vertex vert
#pragma fragment frag
// Replace path-to-include-file with the path to the include file
#include_with_pragmas "path-to-include-file"
// The rest of the HLSL code goes here
Now, when you want to toggle shader debugging on and off for all shaders that use the include file, you only need to change a single line in the include file. When Unity recompiles the shaders, it includes the amended line.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.