They serve different purposes. The reference driver is for doing things that the hardware doesn't support yet, but will in the future. It is not meant to be fast, is for development use, and implements everything. The software driver is for when you need Dx on a platform that doesn't support hardware acceleration. It is meant to be fast, is for deployment, and may or may not implement features.