static HRESULT WINAPI directx8_QueryInterface(IDirectX8 *iface, REFIID riid, void **ppv)
@@ -237,9 +440,11 @@ static HRESULT WINAPI directx8_DirectPlayAddressCreate(IDirectX8 *iface, DirectP

 static HRESULT WINAPI directx8_Direct3DCreate(IDirectX8 *iface, Direct3D8 **ret)
 {
-    FIXME("(%p): stub!\n", ret);
+    HRESULT res = direct3d8_create(ret);

-    return E_NOTIMPL;
+    TRACE("(%p) -> (%x)\n", ret, res);
+
+    return res;
 }

That's an unusual way to arrange things. Why don't you return as "return direct3d8_create();" ?