IMHO this whole discussion of being compliant to DX9 or not is largely irrlevant. As far as I know no hardware was every released that completely supported a DX release.
For example EMBM (Perturbed UV) has been available for a long time and was released with DX6 but it took ages before NVIDIA adopted it (GF4 IIRC) so does that mean that the GF1/2/3 were not compliant ? As far as I know most companies call their product compliant if they have a driver that supports the API. If some caps or texture formats are missing they don't really care.
All we really need to worry about is compliance to PS and VS versions. And that would be the basic versions not the elemts that can be capped. Is R300 PS2.0 and VS2.0 ? Yes, do they support every feature available ? Probably not. Is NV30 PS2.0 and VS3.0 ? Yes, do they support every feature available ? Again probabaly not.
There is a whole washlist of elements that can be capped in DX9 and Displacement Mapping, NPatches and a lot of other things are on this list.
In the end the standard VS and PS levels are what you should worry about since thats what most games will end up supporting. NV30 supports some elements that extend PS and VS to a level somewhere between 2.0 and 3.0, but unfortunatly they do not match 3.0 which means that NV30 will be stuck in the 2.0 path - if games ever support 2.0 and 3.0 paths.
with DX8.1 we got 1.0, 1.1,1.2,1.3 and 1.4 versions an it was a mess, this time MS opted for 2 levels 2.0 and 3.0 and there are caps which can stretch from 2.0 almost all the way to 3.0. You could say that 3.0 is equivalent to a fully capped 2.0 with some extra extensions (like dynamic branching in the PS).
But anyway you can safely ignore the whole compliance talk since AFAIK there won't be hardware that completely supports all caps of a new DX release. R300 (NV30) is probabaly not even "completely" DX8 compliant since they do not expose any HOS caps (RT and other patches).
And IMHO Displacement Mapping runs the risk of being another EMBM... something really kewl and powerfull but held back by awfull naming. VS3.0 displacement mapping is where things get interesting since its really is a vertex texturing capability where a complete dependent read can be executed from the VS, essentially its like being able to access "any" value inside a texture map from the VS. As long as we keep calling this "displacement mapping" developers will incorrectly assume that this is all you can do with it, just like they assumed that all EMBM was just bumpmapping while it was a full dependent texture read. Anyway enough ranting about poor API functionality naming strategies
K-