Decrease Number of Temp Registers in Cg


My Cg fragment program uses to much temporary registers. What can I do to decrese the number used?


Use algebra to simplify the operations you’re performing, rearrange the code so that the registers that are required can be reused later (instead of requiring new ones), things like that?

It would probably help more if you were a little more specific (ie, showed us your program?) about what you’re trying to solve here.

thanks very much for the fast reply!

how can i control to re-use temporary registers later? whats the trick?

f.e. the number of temp registers is inreased by 6, if i just perform the following:

float4 val1,val2;
float4 temp = val1-val2;
float res = temp.x + temp.y + temp.z + temp.w;

how can i sum up the values of a vector in a efficient way?


That code snippet doesn’t help to explain your issue (e.g. what is in val1 and val2?)

“how can i sum up the values of a vector in a efficient way?”
Easy: float res = dot(temp, float4(1.0));

of course ^^
sorry to post this stupid question!

but what about re-using the temp registers?

We don’t get anywhere if you don’t post your shader code.
If you can’t or don’t want to, start with a smaller piece of your shader which works, run it through the Cg compiler and look at the assembly output.
It counts the number of registers used, IIRC.
Then add stuff to your shader, look again, continue until it breaks.
Now look at what code can be eliminated or refactured or otherwise cleaned.
If that all doesn’t lead to a successful compilation, try using a newer Cg compiler if available.
If that still doesn’thelp, your shader might just be too complicated for today’s hardware.

i see,
i did some refacturing in the way, you proposed and finally got the program running.
the program is a little big, so i didnt want to post it.
thank you very much.