My render object-to-texture RenderFeature doesn't work?

Hey! I customized a RenderFeature in Unity 2022.3! My requirement is to render a specific level of objects with a specific shader and set the result into a shader global texture! (This is a lot like a Render Object, but the difference is that it can’t render to a texture) Here’s my code and it doesn’t work!

public class Watersurface : ScriptableRendererFeature
{  
    [Serializable]
    public class WaterSurfaceSettings
    {
        public RenderPassEvent passEvent = RenderPassEvent.AfterRenderingOpaques;
        public LayerMask layerMask;
        public Material OverrideMaterial;
    }
    
    public WaterSurfaceSettings settings = new WaterSurfaceSettings();
    class WaterSurfaceRenderPass : ScriptableRenderPass
    {  
        private const string RT = "_WaterSurface";
        private static int WaterSurfaceID = Shader.PropertyToID("_WaterSurface");
        static readonly List<ShaderTagId> ShaderTag = new List<ShaderTagId>();
        private RTHandle waterSurface;
        private int layerMask;
        private Material OverrideMaterial;
        public WaterSurfaceRenderPass (WaterSurfaceSettings settings)
        {
            renderPassEvent = settings.passEvent;
            layerMask = settings.layerMask;
            ShaderTag.Clear();
            ShaderTag.Add(new ShaderTagId("UniversalForward"));
            OverrideMaterial = settings.OverrideMaterial;
            profilingSampler = new ProfilingSampler("WaterSurfaceRenderPass");
        }
        public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
        {
            RenderTextureDescriptor desc = renderingData.cameraData.cameraTargetDescriptor;
            desc.depthBufferBits = 0;
            desc.width = (int)(desc.width * 0.8f);
            desc.height = (int)(desc.height * 0.8f);
            waterSurface = RTHandles.Alloc(desc, name: RT);
            cmd.SetGlobalTexture(WaterSurfaceID,waterSurface);
            
        }
        public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
        {   
            CommandBuffer cmd = CommandBufferPool.Get("DrawWaterSurface");
            using (new ProfilingScope(cmd, profilingSampler))
            {   
                cmd.SetRenderTarget(waterSurface.rt);
                cmd.ClearRenderTarget(true,true,Color.clear);
                var draw = CreateDrawingSettings(ShaderTag, ref renderingData,
                    renderingData.cameraData.defaultOpaqueSortFlags);
                draw.overrideMaterial = OverrideMaterial;
                FilteringSettings filtering = new FilteringSettings(RenderQueueRange.all, layerMask);
                context.DrawRenderers(renderingData.cullResults, ref draw, ref filtering);
            }
            context.ExecuteCommandBuffer(cmd);
            CommandBufferPool.Release(cmd);
            
        }
        public override void OnCameraCleanup(CommandBuffer cmd)
        {
           RTHandles.Release(waterSurface);
        }
        
    }
    WaterSurfaceRenderPass underWaterRenderPass;
    public override void Create()
    {
        underWaterRenderPass = new WaterSurfaceRenderPass(settings);
    }
    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
    {
        renderer.EnqueuePass(underWaterRenderPass);
    }
    
}

For material issues, I’ve tried using URP Lit but that doesn’t work either! I’ve also checked the Layer level carefully! There are objects in the relevant level