URP shaders and CPU rendering cost

Unity SRP Batcher: How It Works and How to Check Compatibility

Check your shaders and renderers, understand batch breaks, and verify the CPU work the SRP Batcher is intended to reduce.

Alexandr RiceFollow on X Updated October 4, 20266 min readUnity 6

Screenshots: Unity 6000.0.62f1 · URP 17.0.4 · macOS Metal. A small demonstration scene illustrates the controls and rendering mechanisms. Editor timings are not device benchmarks. Click any screenshot to enlarge it.

SRP Batcher reduces CPU setup work for compatible draws

Unity's Scriptable Render Pipeline Batcher keeps material data persistent and processes compatible rendering submissions efficiently. Its purpose is to reduce CPU overhead. It does not combine all participating meshes into one draw call, so unchanged draw-call counts do not by themselves indicate failure.

Unlike automatic GPU instancing, compatible content can use different materials with the same shader variant. The methods have different requirements and optimize different submission work. Read Unity's SRP Batcher explanation for the mechanism.

SRP Batcher belongs to Scriptable Render Pipelines such as URP and HDRP, rather than the Built-in Render Pipeline. The steps here use Unity 6.0 with URP 17.0.4. Check the equivalent settings for another pipeline and version.

Step 1: check the active pipeline asset

Identify the URP asset used by the active Quality Level, including any override in Project Settings > Quality, rather than editing an unused asset in the Project window. Select that asset and inspect its Rendering section.

The selected Tutorial URP asset shows its Rendering and Quality sections. SRP Batcher is an advanced property and is not exposed in this default Inspector view.

When the control is hidden, open the section's More (⋮) menu and select Advanced Properties. Then check SRP Batcher. Unity documents both enabling the batcher and showing advanced URP properties.

Keep the initial configuration for your baseline. If you compare the option on and off later, remember that the asset affects every renderer using it. A global switch can change unrelated parts of the scene, so start by inspecting one suspicious shader or renderer when possible.

Step 2: check both shader and renderer compatibility

Select the shader asset used by a candidate material and inspect its SRP Batcher status. In the demonstration, Unity's imported URP Lit shader reports compatible. Check the shader actually used in the selected rendering event, including its pass and variant.

The native URP Lit shader Inspector reports SRP Batcher compatible. This verifies the shader status; a renderer using the shader can still be excluded by its runtime setup.

For a hand-written shader, Unity requires its built-in engine properties in UnityPerDraw and its material properties in UnityPerMaterial. Use the pipeline's supported shader conventions and includes. This illustrative fragment groups ordinary material values; it is not a complete shader:

CBUFFER_START(UnityPerMaterial)
    float4 _BaseColor;
    float _Smoothness;
CBUFFER_END

Keep texture and sampler declarations outside that constant buffer. Maintain a consistent material layout across passes. After editing, compile the shader and inspect the status again instead of assuming that adding the buffer name fixed every requirement.

Compatibility also depends on the renderer. Unity's documented path supports suitable mesh and skinned-mesh content, but excludes renderers using MaterialPropertyBlock. Check scripts as well as asset Inspectors; runtime property overrides may not be obvious from the material alone. See shader and GameObject compatibility.

Property blocks can be useful in a deliberate instancing workflow, but that does not make them free for SRP Batcher content. Review the API limitations before replacing material ownership patterns.

Step 3: inspect actual SRP batches and their boundaries

Open Window > Analysis > Frame Debugger and enable it for the relevant camera or target. Select an SRP Batch event. Read its Draw Calls field and shader information, then inspect adjacent events to understand the boundaries.

One SRP Batch event contains 54 Draw Calls in the demonstration's Edit Mode capture. The batch groups compatible submission work; it does not merge the scene into one draw.

Read Batch cause as an explanation of why the selected event could not join the previous SRP event. A boundary can arise from a different shader variant or incompatible content. The first event also has a boundary by definition; its cause is not automatically a defect to fix.

Compare the active keywords and passes before merging materials or disabling features. A shader's total number of possible variants is different from the sequence of active variants in this frame. Reduce needless variation only when the desired visual behavior remains clear.

The repeated cubes appear in a separate instanced event, with 50 instances and an SRP incompatibility batch cause. This demonstrates a different rendering path coexisting with the compatible SRP Batch.

The instanced event is useful context, not a verdict that instancing is faster. It proves that the selected cubes used that mechanism. The event information reference explains the fields; use the instancing guide to compare that workflow deliberately.

Step 4: compare CPU rendering cost on the target device

Disable Frame Debugger, connect the Profiler to a representative Player and record the same route. Keep camera, quality settings, materials, coverage and instance counts fixed. Investigate CPU work involved in preparing and submitting rendering, alongside GPU timing where supported and visual output.

CPU Usage and Hierarchy details show the measured thread work for a selected frame. This screenshot uses Editor Play Mode; its EditorLoop cost must not be presented as the Player's rendering performance.

If you compare SRP Batcher enabled and disabled, record that as the sole intended variable and repeat both runs. A small difference within ordinary variation is inconclusive. Avoid collecting one frame from an empty view and another from a busy view.

Draw-call counts may remain similar because this mechanism targets CPU setup rather than mesh merging. Compare the intended cost instead of requiring a lower counter. If GPU shading dominates, further batch work may not improve total frame time. The diagnosis workflow helps choose the next experiment.

Common SRP Batcher problems

SymptomInspectFocused action
SRP Batcher control is missingActive pipeline asset and advanced properties.Expose the Rendering section's advanced controls.
Custom shader is incompatibleMaterial and engine constant buffers across its passes.Fix the layout, compile and recheck the shader status.
Shader is compatible, renderer is excludedRuntime MaterialPropertyBlock use and renderer type.Review that renderer's data path before changing the whole asset.
Many small SRP batchesActive variants, keywords, passes and ordering.Remove an unnecessary split while preserving the intended visuals.
Draw count did not fallCPU preparation cost and actual SRP events.Judge the mechanism by timing, not a mesh-merging expectation.

Use draw calls and batching to distinguish the other submission methods and their trade-offs.

Frequently asked questions

What does SRP Batcher do in Unity?

It reduces CPU overhead for preparing and submitting compatible rendering work by keeping material data persistent and processing suitable draws efficiently. Draw calls remain separate.

Can SRP Batcher use different materials?

Yes. Compatible materials using the same shader variant can participate in an SRP batch. Sharing one exact material is not the same requirement as automatic GPU instancing.

Why does MaterialPropertyBlock break SRP Batcher compatibility?

Unity's SRP Batcher compatibility rules exclude renderers using MaterialPropertyBlock. Inspect runtime code as well as the shader; a compatible shader does not guarantee that every renderer uses the batcher.

Does SRP Batcher work in the Built-in Render Pipeline?

No. It belongs to Scriptable Render Pipelines such as URP and HDRP. This guide's asset and Inspector steps use Unity 6.0 with URP 17.0.4.

Should I disable SRP Batcher to enable GPU instancing?

Only consider that as a controlled comparison with a representative workload. Disabling it in a pipeline asset affects the renderers using that asset. First verify the selected path and compare a narrower experiment where possible.

Sources and version notes

Official Unity 6.0 documentation, checked October 4, 2026. Match the documentation version to your project.

Continue the investigation · A 7 Wolves tool

Investigate the shader workload behind the batches

GPUSight connects shader and material groups to scene contributors and provides static shader-source and variant investigation. Source complexity indicators are heuristics; Frame Debugger and target-device profiling remain the checks for the active path and its cost.

Explore GPUSight