I had a very brief look at the code, pertially because a tarred up directory isn't the most convenient way to spot what has changed and what is still the same.
A few things I noticed: - markDirty() should probably either be a proper method of the device, or have a prefix - "States" is a pretty generic name, probably want to prefix that as well with something - Why are the state_* functions WINAPI? - "apply" is probably a better name than "func" in StateEntry wrt making clear what it is supposed to do.
I'm still a bit uncertain about having all states together in a single array. And I think a construction like: DWORD stage = (state - STATE_TEXTURESTAGE(0, 0)) / WINED3D_HIGHEST_TEXTURE_STATE; in tex_colorop is quite ugly.