DirectSound Hardware Acceleration in 64-Bit Versions of Windows XP
In Windows Me/98 and in 32-bit versions of Windows 2000, Windows XP, and Windows Server 2003, if an audio device has the hardware features needed to support DirectSound hardware acceleration, then both WavePci and WaveCyclic miniport drivers can provide hardware-accelerated pins for use by DirectSound output streams. The same is true of WaveCyclic miniport drivers in 64-bit versions of Windows XP and Windows Server 2003.
In 64-bit versions of Windows XP and Windows Server 2003, the WavePci port driver enables a WavePci miniport driver to provide DirectSound hardware acceleration only if the audio device's DMA engine can address all locations in physical memory. The port driver permits hardware acceleration under either of the following conditions:
The device generates 64-bit DMA addresses.
The device generates 32-bit DMA addresses and all physical memory addresses are in the 4-gigabyte address range, 0 to 0xFFFFFFFF.
When the adapter driver creates the WavePci port object and calls IPort::Init (see Subdevice Creation), the port driver calls the miniport driver's IMiniportWavePci::Init method. In order to make DirectSound hardware acceleration available to clients, the miniport driver must call the IPortWavePci::NewMasterDmaChannel method before returning from the IMiniportWavePci::Init call. During the call to NewMasterDmaChannel, the port driver determines whether the audio device has the DMA addressing capabilities required for hardware acceleration. Acceleration is disabled if the WavePci device can address only 32 bits and any portion of physical memory lies outside the device's 4-gigabyte address range.
In 64-bit versions of Windows XP and Windows Server 2003, a WavePci miniport driver can provide hardware acceleration only if it calls the IPortWavePci::NewMasterDmaChannel method to create a new DMA channel object. If the driver calls PcNewDmaChannel instead, hardware acceleration is automatically disabled.
The preceding restriction does not apply to WaveCyclic miniport drivers in 64-bit versions of Windows XP and Windows Server 2003. It also does not apply to WavePci or WaveCyclic miniport drivers in any 32-bit versions of Windows.
Although use of the PcNewDmaChannel function does not disable hardware acceleration in 32-bit versions of Windows, driver writers should consider PcNewDmaChannel to be obsolete. For all new audio drivers, use one of the following IPortWaveXxx::NewXxxDmaChannel methods in place of PcNewDmaChannel: