Elizabeth Figura (@zfigura) commented about dlls/d3d9/device.c:
+ return CONTAINING_RECORD( iface, struct d3d9_device, IDirect3DDevice9On12_iface ); +} + +static HRESULT WINAPI d3d9on12_QueryInterface( IDirect3DDevice9On12 *iface, REFIID iid, void **out ) +{ + struct d3d9_device *device = impl_from_IDirect3DDevice9On12(iface); + + TRACE( "iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out ); + + if (IsEqualGUID( iid, &IID_IUnknown ) || + IsEqualGUID( iid, &IID_IDirect3DDevice9On12 )) + { + IDirect3DDevice9On12_AddRef( &device->IDirect3DDevice9On12_iface ); + *out = &device->IDirect3DDevice9On12_iface; + return S_OK; + } Again, QueryInterface() is symmetric. You should be forwarding to d3d9_device_QueryInterface(). Same for AddRef() and Release().
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/4915#note_75679