make shader stateful, and driver runner more RAII