# CreateGraphicsFence(GraphicsFenceType, SynchronisationStageFlags)

> Creates a GraphicsFence.

## Definition

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

```csharp
public static GraphicsFence CreateGraphicsFence(GraphicsFenceType fenceType, SynchronisationStageFlags stage)
```

### Parameters

**** (\[GraphicsFenceType]\(/engine/6000.0/script-reference/unityengine/rendering/graphicsfencetype)): The [GraphicsFenceType](/engine/6000.0/script-reference/unityengine/rendering/graphicsfencetype.md) to create. Currently the only supported value is [GraphicsFenceType.AsyncQueueSynchronisation](/engine/6000.0/script-reference/unityengine/rendering/graphicsfencetype/asyncqueuesynchronisation.md).**** (\[SynchronisationStageFlags]\(/engine/6000.0/script-reference/unityengine/rendering/synchronisationstageflags)): Which [SynchronisationStage](/engine/6000.0/script-reference/unityengine/rendering/synchronisationstage.md) to insert the fence after.

### Returns

| Type                                                                                    | Description                                                                                            |
| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| [GraphicsFence](/engine/6000.0/script-reference/unityengine/rendering/graphicsfence.md) | Returns a new [GraphicsFence](/engine/6000.0/script-reference/unityengine/rendering/graphicsfence.md). |

### Remarks

The GPU passes through the `GraphicsFence` fence after it completes the `Blit`, `Clear`, `Draw`, `Dispatch` or texture copy command you sent before this call. This includes commands from [command buffers](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer.md) that the GPU executes immediately before you create the fence.

You can use the `stage` parameter to insert the [GraphicsFence](/engine/6000.0/script-reference/unityengine/rendering/graphicsfence.md) fence after the end of either vertex or pixel processing. On some platforms, there's a gap between the end of vertex processing and the start of pixel processing in a draw call.

If the previous command was a compute shader dispatch, Unity ignores `stage`.

Some platforms cannot differentiate between the end of vertex processing and the end of pixel processing. On these platforms, you'll get the same results regardless of whether you use [SynchronisationStage.PixelProcessing](/engine/6000.0/script-reference/unityengine/rendering/synchronisationstage/pixelprocessing.md) or [SynchronisationStage.VertexProcessing](/engine/6000.0/script-reference/unityengine/rendering/synchronisationstage/vertexprocessing.md) as the value for `stage`.

If you call `CreateGraphicsFence` on a platform that doesn't support fences, the fence has no function, and the methods [Graphics.WaitOnAsyncGraphicsFence](/engine/6000.0/script-reference/unityengine/graphics/waitonasyncgraphicsfence.md) and [CommandBuffer.WaitOnAsyncGraphicsFence](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/waitonasyncgraphicsfence.md) do nothing. Use [SystemInfo.supportsGraphicsFence](/engine/6000.0/script-reference/unityengine/systeminfo/supportsgraphicsfence.md) to check if a platform supports fences.

Additional Resources: [GraphicsFence](/engine/6000.0/script-reference/unityengine/rendering/graphicsfence.md), [Graphics.WaitOnAsyncGraphicsFence](/engine/6000.0/script-reference/unityengine/graphics/waitonasyncgraphicsfence.md), [CommandBuffer.WaitOnAsyncGraphicsFence](/engine/6000.0/script-reference/unityengine/rendering/commandbuffer/waitonasyncgraphicsfence.md).
