How do you calculate unity_WorldToLight/_LightMatrix0 for directional light in C#

I need to calculate the world-to-light matrix (the shader properties unity_WorldToLight/_LightMatrix0) for a light in C#. There is no accessor on the light for this, and it is only passed into shaders. I figure it is just an ortho projection matrix for the light, but my math is failing me. Anyone know how to calculate this?

Matrix4x4 modelView = Matrix4x4.LookAt(m_Light.transform.position, m_Light.transform.position + m_Light.transform.forward, m_Light.transform.up);

            float cookieSize = m_WorldSize;
            Matrix4x4 newModel = new Matrix4x4();
            Matrix4x4.Inverse3DAffine(modelView, ref newModel);
            Matrix4x4 worldToLight = GL.GetGPUProjectionMatrix(Matrix4x4.Ortho(-cookieSize, cookieSize, -cookieSize, cookieSize, 0.1f, cookieSize), false) * newModel;

Is close (scale/scroll/shear/etc is all correct), but the texture is offset from where is compared to the standard unity version…