The member list of the block above, without the struct wrapper — shared
with wgpu-shadow.ts's widened ShadowLightUniforms (WP-R1.7), whose
first LIGHT_UNIFORM_BYTES bytes must be this layout exactly: one
string, two structs, so the shadowed and unshadowed variants cannot
disagree about where a light lives.
The member list of the block above, without the struct wrapper — shared with
wgpu-shadow.ts's widenedShadowLightUniforms(WP-R1.7), whose first LIGHT_UNIFORM_BYTES bytes must be this layout exactly: one string, two structs, so the shadowed and unshadowed variants cannot disagree about where a light lives.