It works, technically, since I'm adding WINED3DUSAGE_PRIVATE to the buffer (which maybe should be there anyway). But I understand if it's not acceptable.
I don't think creating a PRIVATE resource from the client thread works, but even if it does, the code isn't thread-safe with this change. We should just handle the case where the buffer hasn't been set and fill things with default values.
I believe GLSL handles this by virtue of just never getting constant_update_mask, but I could be wrong. I remember fixing this but maybe I submitted from the wrong branch...