Quick answer: Use builder.UseColorBuffer to declare the pass writes the active color buffer. RenderGraph culls passes with no observed outputs.

URP 17 + RenderGraph. You add a custom Renderer Feature pass. Frame Debugger doesn’t show your draws. Pass got culled because RenderGraph saw no consumers of its output.

The Symptom

RecordRenderGraph runs (you can see logs), but Execute never fires. Output texture isn’t written.

The Fix

override public void RecordRenderGraph(RenderGraph rg,
                                          ContextContainer ctx) {
    var data = ctx.Get<UniversalResourceData>();

    using (var builder = rg.AddRasterRenderPass<PassData>(
                "OutlinePass", out var p)) {
        builder.UseTextureFragment(data.activeColorTexture, 0);
        builder.AllowPassCulling(false);   // belt & braces
        builder.SetRenderFunc(static (PassData p, RasterGraphContext ctx) => {
            ctx.cmd.DrawProcedural(Matrix4x4.identity, p.material, 0,
                                MeshTopology.Triangles, 3);
        });
    }
}

UseTextureFragment tells the graph the pass writes that color attachment; the optimizer keeps it. AllowPassCulling(false) is a hatchet for cases where you can’t express the dep cleanly.

Verifying

Open Render Graph Viewer. Pass listed, not culled, output declared. Frame Debugger shows the DrawProcedural draw call.

“Declare outputs. Pass survives. Draws happen.”

Related Issues

For URP decal on skinned, see URP decal. For shader keyword strip, see keyword strip.

Declare output. Pass kept. Draw runs.