If the student isn't grant-funded, then yes, the prof isn't expected to pay them anything: the department will cover their tuition, and they'll work as a TA to earn their stipend. But at R1 universities it's nowadays expected that profs will fund at least a substantial proportion of their PhD students each year on RAships paid out of grant money.
The difference is not always obvious from the student perspective, though: when departments say they guarantee funding for 3 years, they just mean that somehow the student will be funded each year, not that the department will pick up the funding each year. The goal is to get the profs to pay for as much as possible out of grants, with departmental internal funding as a backstop.
It sounds very similar to Bio with the exception that the department typically has money for their students coming in(the best schools have training grants from NIH which cover incoming students). Tuition is always covered and is only up to the PI to pay when the student's departmental money runs out, but in practice, the dept. picks it up if the student TAs.
At good schools, students are encouraged (and in some cases, mandated) to submit a grant to NIH which covers their tuition/stipend and provides some travel money for conferences. That grant is really difficult to get, so most 3-6th year students are covered under their PIs grant, or they teach to cover tuition.
ALso, and I think this may apply to CS people, there are dissertation grants which give a small amount of cash (when I applied it was ~$15k) to improve a dissertation project.
NSF has some really nice programs out there. I've been funded by them on 2 different occasions and I really like what they support.