Ok, I see.
I haven't had problems with my integrated realtek on a old laptop or my desktop, but as I say, I normally use floating mode.
Said that, I recommend you to take a look at this part of the code, since it might be what knik said, which is an incorrect initialization of the waveformat:
https://sourceforge.net/p/psycle/code/HEAD/tree/trunk/psycle/src/psycle/host/AudioDriver.cpp#l74
Ok, I tried your code and it works pretty good.
PrepareWaveFormat(fx,
2, //nChannel
48000, //Sampling Rate
32, //bits
24 //validBits
);
I also tried IsFormatSupported with your code. If i prepare waveformat like this:
PrepareWaveFormat(fx,
2, //nChannel
48000, //Sampling Rate
24, //bits, meaning no byte padding.
24 //validBits
);
The IsFormatSupported method will return "AUDCLNT_E_UNSUPPORTED_FORMAT".
So i can test whether the audio chip needs byte padding by IsFormatSupported.
Then my last question, how can i know whether it needs a bottom-padding or top-padding ?
Is it up to the CPU (x86) or to the audio chip (Realtek)?