A lot of code in WineD3D avoids the getters and setters, and just accesses the implementation structure. While any object oriented programmer screams when doing that, we need it for performance reasons. Currently we spend 10 to 20 per cent of the CPU time spent in WineD3D just in surface::GetContainer and its callees, if we'd use Getters and Setters everywhere then goodbye performance(I want to replace GetContainer somewhen).
So inline it... imho the performance argument is a bad reason to abandon maintainability.
Your codebase is constantly getting more complex, and now you're having threading issues, which will only get more important with multi-core and other such things becoming standard. Meanwhile graphics cards are getting a lot more powerful - I solved the performance problem 2 weeks ago w/ a GeForce 8800 GT.
As for the "object oriented programmer" - I would hope every programmer thinks in terms of objects, even when writing C code. The GLSL backend wouldn't be available today if the shader compiler was still a big series of if statements.
Ivan