Only the most recent version of an interface needs to be implemented. Other versions are handled by having thunks convert their parameters and call the root version.
Not all interface versions have thunks. Some versions could be combined
because their parameters were compatible. For example if a structure
changes but the structure has a
dwSize field, methods using that
structure are compatible, as long as the implementation remembers to take the
dwSize into account.
Interface thunks for Direct3D are more complicated since the paradigm changed between versions.