I really don't like the "retry without WINED3D_BIND_SHADER_RESOURCE" logic, but I couldn't think of anything nicer.
I don't know about nicer, but we do have wined3d_check_device_format(), and we already use that for a fairly similar purpose in ddraw_surface_create().