# Synchronizing shader code and C#

Unity can generate HLSL code based on C# structs to synchronize data and constants between shaders and C#. In Unity, the process of generating the HLSL code from C# code is called generating shader includes. When Unity generates shader includes, it parses all the C# files in the project and, for every file that contains a struct with a GenerateHLSL attribute, generates corresponding HLSL code. It places this HLSL code in a file with the same name as the origin, but uses the `.cs.hlsl` file extension.

## Generating shader includes

To generate an HLSL equivalent for a C# struct:

1. Add the GenerateHLSL attribute to the struct. To do this, above the line that declares the struct, add `[GenerateHLSL(PackingRules.Exact, false)]`. For an example on how to do this, see the sample code below. For more information about the GenerateHLSL attribute, see the [API documentation](../api/UnityEngine.Rendering.GenerateHLSL.html).
2. In the Unity Editor, go to **Edit** > **Render Pipeline** > **Generate Shader Includes**.

The following code example is from the High Definition Render Pipeline (HDRP). It shows an extract of the C# representation of a directional light. The original file is `LightDefinition.cs`. When Unity generates the HLSL shader code, it places it in a new file called `LightDefinition.cs.hlsl`.


```
// LightDefinition.cs

[GenerateHLSL(PackingRules.Exact, false)]
struct DirectionalLightData
{
        public Vector3 positionRWS;
        public uint lightLayers;
        public float lightDimmer;
        public float volumetricLightDimmer;   // Replaces 'lightDimer'
        public Vector3 forward;
        public Vector4 surfaceTextureScaleOffset;
};
```

```
// LightDefinition.cs.hlsl

// Generated from UnityEngine.Rendering.HighDefinition.DirectionalLightData
// PackingRules = Exact
struct DirectionalLightData
{
    float3 positionRWS;
    uint lightLayers;
    float lightDimmer;
    float volumetricLightDimmer;
    float3 forward;
    float4 surfaceTextureScaleOffset;
};
```