# Structured

> GraphicsBuffer can be used as a structured buffer.

## Definition

* **Type:** Field
* **Namespace:** [UnityEngine](/engine/6000.0/script-reference/unityengine.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
Structured = 16
```

### Remarks

In HLSL shaders, this maps to `StructuredBuffer<T>` or `RWStructuredBuffer<T>`.

When you construct a GraphicsBuffer of this type, the value of stride must match the stride of the corresponding `StructuredBuffer` struct type in your HLSL code.

The value of stride must also be a multiple of 4, and less than 2048.

To meet requirements on some platforms and avoid performance issues, stride should be a multiple of 16. Use float4 and float4x4 variables to create a multiple of 16, and put smaller variables inside them. Avoid the use of 'padding' variables to create a multiple of 16, for example using a float3 variable to pad a struct containing a single float, because some data types may be different sizes on different platforms.

If you use a mix of variable sizes, the data layout of a shader's structured buffer may be different depending on the graphics API. This means [ComputeShader.SetBuffer](/engine/6000.0/script-reference/unityengine/computeshader/setbuffer.md) or [Material.SetBuffer](/engine/6000.0/script-reference/unityengine/material/setbuffer.md) might overwrite data or set variables to the wrong values. See [Writing shaders for different graphics APIs](/engine/6000.0/manual/materials-and-shaders/shaders/writing-custom/shader-writing/sl/writing-shader-writing-shader-programs-hlsl/sl-platform-differences.md) for more information.

See Microsoft's HLSL documentation on [StructuredBuffer](https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/sm5-object-structuredbuffer) and [RWStructuredBuffer](https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/sm5-object-rwstructuredbuffer).

DirectX 11 does not allow [GraphicsBuffer.Target.Index](/engine/6000.0/script-reference/unityengine/graphicsbuffer/target/index.md) or ::Vertex buffers to also be Structured. For compute shader mesh data access with DirectX 11 compatibility, it is best to use [GraphicsBuffer.Target.Raw](/engine/6000.0/script-reference/unityengine/graphicsbuffer/target/raw.md).

Additional Resources: [GraphicsBuffer](/engine/6000.0/script-reference/unityengine/graphicsbuffer.md), [ComputeShader](/engine/6000.0/script-reference/unityengine/computeshader.md), [Material.SetBuffer](/engine/6000.0/script-reference/unityengine/material/setbuffer.md).
