Actually, I don't think we need to handle anything in the shader for this. Vulkan has the _USCALED/_SSCALED formats (and VK_FORMAT_R8G8B8A8_USCALED in particular) which look like what we want here. That would probably imply introducing WINED3DFMT_R8G8B8A8_USCALED and a few other formats and then distinguishing them from their _UINT/_SINT variant, but that would be a wined3d issue, and probably not a bad thing in any case...
Oh, that's very convenient. Float it is, then :-)