# ExecuteCommandBuffer(CommandBuffer)

> Schedules the execution of a custom graphics Command Buffer.

## Definition

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

```csharp
public void ExecuteCommandBuffer(CommandBuffer commandBuffer)
```

### Parameters

**** (\[CommandBuffer]\(/engine/6000.7/script-reference/unityengine/rendering/commandbuffer)): Specifies the Command Buffer to execute.

### Remarks

During the call to [ScriptableRenderContext.ExecuteCommandBuffer](/engine/6000.7/script-reference/unityengine/rendering/scriptablerendercontext/executecommandbuffer.md), [ScriptableRenderContext](/engine/6000.7/script-reference/unityengine/rendering/scriptablerendercontext.md) registers the commandBuffer parameter into its own internal list of commands to execute. The actual execution of these commands (including the commands stored in the custom commandBuffer) happens during [ScriptableRenderContext.Submit](/engine/6000.7/script-reference/unityengine/rendering/scriptablerendercontext/submit.md).

Make sure that you call ExecuteCommandBuffer before other ScriptableRenderContext methods (such as DrawRenderers, DrawShadows) if your draw calls depend on a state of the pipeline that you specify in a CommandBuffer. The code sample below illustrates a case when commands are submitted in an incorrect order ; followed by a case that behaves as expected:

```csharp
using UnityEngine;
using UnityEngine.Rendering;

internal class ExecuteCommandBufferExample
{
    // TODO: replace with actual settings
    ScriptableRenderContext scriptableRenderContext;
    DrawingSettings drawingSettings;
    CullingResults cullingResults = new CullingResults();
    FilteringSettings filteringSettings = new FilteringSettings();

    Matrix4x4 myViewMatrix = Matrix4x4.Scale(new Vector3(2f, 2f, 2f));

    public void DrawRenderersExampleIncorrect()
    {
        CommandBuffer myCommandBuffer = new CommandBuffer();

        myCommandBuffer.SetViewMatrix(myViewMatrix);

        scriptableRenderContext.DrawRenderers(cullingResults, ref drawingSettings, ref filteringSettings);
        // NO! When scriptableRenderContext submits the DrawRenderers command, it will not know about myViewMatrix :(

        scriptableRenderContext.ExecuteCommandBuffer(myCommandBuffer);
        myCommandBuffer.Clear();
    }

    public void DrawRenderersExampleBetter()
    {
        CommandBuffer myCommandBuffer = new CommandBuffer();

        myCommandBuffer.SetViewMatrix(myViewMatrix);

        scriptableRenderContext.ExecuteCommandBuffer(myCommandBuffer);
        myCommandBuffer.Clear();

        scriptableRenderContext.DrawRenderers(cullingResults, ref drawingSettings, ref filteringSettings);
        // OK! During next scriptableRenderContext.Submit() call, scriptableRenderContext will set myViewMatrix *before* drawing the renderers.
    }
}
```

Additional Resources: [CommandBuffer](/engine/6000.7/script-reference/unityengine/rendering/commandbuffer.md).
