For the geometry you'd do basically the same thing but on the CPU and just update a vertex buffer every frame.
You'd probably do some cute register combiner trick for the texturing. You can kinda think of register combiner stages as pixel shader instructions. And in hardware of the time they're the same thing. On GeForce 3, loading a pixel shader is just blitting the register combiner hardware config registers all at once. GeForce 2 could have had a shader model version 0.5 or something with only four instructions if they wanted to expose it in the API like that.
You'd probably do some cute register combiner trick for the texturing. You can kinda think of register combiner stages as pixel shader instructions. And in hardware of the time they're the same thing. On GeForce 3, loading a pixel shader is just blitting the register combiner hardware config registers all at once. GeForce 2 could have had a shader model version 0.5 or something with only four instructions if they wanted to expose it in the API like that.