The ioctl SNDCTL_DSP_GETPLAYVOL gets the volume of the given device, see:
This ioctl works on clone devices (e.g. /dev/dsp, /dev/dsp0, /dev/dsp0) but returns EINVAL for vchan devices (e.g. /dev/dsp0.vp0).
It seems to me that this ioctl should work on vchans as well, for example, to query the volume on virtual channels.
It might be that VCHANs, when created need to set the software PCM volume flag.
Can you investigate?