The API documentation doesn't say anything about an application releasing the d3d surface, There is a test for that somewhere in dlls/d3d9/tests/device.c (or some other test file in there).
but the documentation in the code seems to indicate that the gl texture needs to remain when the surface is deleted - I did nothing to change this. But IWineD3DSurfaceImpl_Release will destroy the gl texture of a surface when the surface is destroyed.
Also, if the gl surface still knows the texture, the following could cause an issue: SetCursorProperties(cursorSurface, ...); <render some stuff> LockRect(cursorSurface, ...); <write some thing into the surface> UnlockRect(cursorSurface); PreLoad(cursorSurface); The PreLoad will then change the cursor without SetCursorProperties beeing called. This should not happen. I tested that with some hacky test. Unfortunately this cannot be automated in the visual tests because cursors do not show up in screenshots. This is my hacky cursor test app: http://stud4.tuwien.ac.at/~e0526822/visual.c The successor of that file without the cursor tests is now in dlls/d3d9/tests/visual.c. I think this visual.c version is not the version I used for checking later surface changes.