About GPU Instancing

Hello there!

I started an implementation of GPU instancing for grass rendering in my project. I read that max instance is 1023 for RenderMeshInstanced, yet I saw that max instance per draw call is around 400-600 in the frame debugger. I have attached screenshots and my code sample. What could be the reason?

Another question: Should I disable Graphics.RenderMeshInstanced for the objects that are not visible to the camera (behind the camera) manually?

        private void Awake()
        {
            _grassMesh = grassPrefab.transform.GetChild(0).GetComponent<MeshFilter>().sharedMesh;
            _grassMat = grassPrefab.transform.GetChild(0).GetComponent<MeshRenderer>().sharedMaterial;
            _grassRenderParams = new RenderParams(_grassMat);

            _grassBatches.Add(new List<Matrix4x4>());
            var addedMatrices = 0;

            for (var i = 0; i < 200; i++)
            {
                for (var j = 0; j < 200; j++)
                {
                    var localPos = new Vector3(i * 0.5f, 0, j * 0.5f);
                    var worldPos = transform.TransformPoint(localPos);
                    var rot = new Vector3(0, Random.Range(0, 360f), 0);

                    var scaleX = Random.Range(0.8f, 1.3f);
                    var scaleY = Random.Range(0.5f, 1.3f);
                    var scaleZ = scaleX;

                    var scale = new Vector3(scaleX, scaleY, scaleZ);
                    
                    if (addedMatrices < 1000)
                    {
                        _grassBatches[^1].Add(Matrix4x4.TRS(worldPos, Quaternion.Euler(rot), scale));
                        addedMatrices++;
                    }
                    else
                    {
                        _grassBatches.Add(new List<Matrix4x4>());
                        addedMatrices = 0;
                    }
                }
            }
        }

        private void Update()
        {
            RenderBatches();
        }

        private void RenderBatches()
        {
            foreach (var grassBatch in _grassBatches)
            {
                Graphics.RenderMeshInstanced(_grassRenderParams, _grassMesh,0, grassBatch);
            }
        }


Best regards.