If all tests are added first and the implementation step-by-step afterwards, unimplemented functions can interfere with implemented functions - sometimes in non-trivial ways, for example in the lock incompatibilities test, a lock operation that was expected to fail (due to a lock incompatibility) might now succeed because a previous lock operation wasn't implemented yet.
You can use `wine_todo` for that. Also, it certainly makes sense to skip the rest of a test if at any point you receive `E_NOTIMPL` and there is no reasonable way to recover a testable state from that.
All locking functions also essentially use the same machinery (d3d12_surface_buffer_map/d3d12_surface_buffer_unmap), so all of the actual locking logic would be added along with the first lock function implemented anyway.
Sure, but still the individual commits become smaller and I don't have to read everything again each time I come back to this MR. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/11420#note_148820