For `u_matambientalpha`, that's why it's `a_color0` - which is a vec4.  So in all cases `ambient` is a vec4.  It's used here:

```
WRITE(p, "  lowp vec4 lightSum0 = u_ambient * %s + vec4(u_matemissive, 0.0);\n", ambient);
```

I'm not sure which way is right for things that don't match sw... we need tests.  I've been having trouble getting them to work sanely...

-[Unknown]