http://bugs.winehq.org/show_bug.cgi?id=8232
--- Comment #12 from Timo-Heikki Mäkelä imaxfun@gmail.com 2008-03-03 19:50:40 --- (In reply to comment #11)
The problem isn't that it is difficult to implement D3DRM, just a lot of effort. You can see the missing Create function as a failure like this: "Can't enter the car because there is no door". Now when you try to build a door, you'll see that there's no chassis to attach it to. Once you have the chassis you need engines, seats, etc.
I did recognize that. However, I don't see there any reason why one couldn't create just the "chassis" first for adding more stuff piece by piece later.
That initial "chassis" would be this file missing here, Direct3DCreate. It should only be designed general enough to enable adding _any_ desired new "parts" (object types) to a list later. For some known missing "parts" there could already be left a "hole" (stub for new type) in the beginning, but in general enough a design that's not even necessary, because then more new accepted types can always be added to the list later (or 'stubs' for new types until every existing D3DRM function gets modified to accept also the new type).
I don't see any reason why Direct3DCreate couldn't be created even when there are missing parts. Most obviously there will also be D3DRM functions missing and added later, just like now the rest of Wine is missing and being added with new functions. But as all D3DRM functions need to be able to handle any D3DRM object, it will just be necessary to ensure each new function will accept objects of any possible D3DRM type defined in Direct3DCreate as well. And whenever there will be a new type for the objects added in Direct3DRMCreate, then _every_ D3DRM function needs to be checked to be able to handle it.