You can easily put one light source per model, but not more.
SGL can only register one source.
The way around this would be to not use SGL, or maybe it's possible to use offsets, but I don't know.
I might compute lights offline for static lights, which should allow much better colors.
Maybe you could then use the SCU DSP to calculate the additions/substraction on top of static lights, but I think it would be slow.
I already tried with colors, it's super easy.
For this demo, I'm using "semi white", but you can put any color you want.
It's already using the 2 CPUs. As soon as you call slPutPolygon, it will look to see if the slave is busy, and if not it will transfer the command so that the slave handles everything.
I know for you, the easy way right now is use the SGL. For 1 Light Dynamic the SGL is very well implemented.
But my questions was for this data extract from
https://segaretro.org/Sega_Saturn/Technical_specifications#Graphics, for the theoretical maximum capacity for SS in this type of process:
DSP geometry processing: 188 MIPS (million instructions per second)
Fixed-point operations: 114 MOPS (million operations per second)
Additions: 85 million adds/sec
Multiplications: 85 million multiplies/sec
16-bit divisions: 5 million divides/sec
Geometry calculations: 114 MOPS fixed-point calculations
Vertex transformations: 2,400,000 vertices/sec
Polygon transformations: 1,800,000 polygons/sec
T&L flat lighting: 800,000 polygons/sec
T&L Gouraud lighting: 700,000 polygons/sec
Polygon rendering performance: Lighting
800,000 polygons/s: Flat shading, 32-pixel polygons
500,000 polygons/s: Flat shading, 50-pixel polygons
200,000 polygons/s: Gouraud shading, 32-pixel polygons
Texture mapping performance: Lighting
300,000 polygons/s: 32-texel textures
200,000 polygons/s: 70-texel textures
140,000 polygons/s: Gouraud shading, 32-texel textures