Como economizar energia com o controle VSync
Para economizar energia em um computador, o driver de exibição no modo kernel pode reduzir o número de interrupções de atualização do monitor VSync que ocorrem.
Processadores e plataformas mais recentes geralmente funcionam com o sistema operacional para conservar energia quando o sistema de computador está ocioso. No entanto, a atividade periódica do sistema, como o disparo de interrupções, causa o pico de uso de energia e pode impedir que o sistema de computador entre em estados transitórios de sono que conservariam energia.
A partir do Windows Vista com o Service Pack 1 (SP1) e o Windows Server 2008, o sistema operacional pode desativar a contagem periódica de interrupção VSync quando a tela não estiver sendo atualizada de novos elementos gráficos ou atividades do mouse. Controlando o intervalo de interrupção VSync, o driver pode economizar energia significativa.
Você pode aproveitar esse recurso recriando drivers WDDM (Windows Display Driver Model) usando o Windows Server 2008 ou versões posteriores do WDK (Windows Driver Kit).
Alterações de driver do Windows Vista com SP1 para controle VSync
Para que os drivers aproveitem esse recurso, eles devem dar suporte ao membro VSyncPowerSaveAware na estrutura DXGK_VIDSCHCAPS introduzida no Windows Vista com O SP1. Os drivers existentes que seguem o WDDM devem ser recompilados com o membro VSyncPowerSaveAware usando o Windows Server 2008 ou versões posteriores do WDK.
Um sistema Windows Vista com SP1 ou posterior com um driver que segue o WDDM e que dá suporte a esse recurso desativará o recurso de contagem da interrupção VSync se nenhuma atividade de GPU ocorrer por 10 períodos contínuos de 1/Vsync, em que o VSync é a taxa de atualização do monitor. Se a taxa VSync for de 60 hertz (Hz), a interrupção VSync ocorrerá uma vez a cada 16 milissegundos. Assim, na ausência de uma atualização de tela, a interrupção VSync é desativada após 160 milissegundos. Se a atividade de GPU for retomada, a interrupção do VSync será ativada novamente para atualizar a tela.
Display-Only requisitos de VSync para versões Windows 8 e posteriores
Em Windows 8 e versões posteriores do sistema operacional Windows, é opcional que um KMDOD (driver somente de exibição) no modo kernel dê suporte à funcionalidade VSync, da seguinte maneira:
O driver somente exibição dá suporte ao controle VSync
Se o KMDOD der suporte ao recurso de controle VSync, ele deverá implementar as funções DxgkDdiControlInterrupt e DxgkDdiGetScanLine e deve fornecer ponteiros de função válidos para ambas as funções na estrutura KMDDOD_INITIALIZATION_DATA .
Nesse caso, o KMDOD também deve implementar as funções DxgkDdiInterruptRoutine e DxgkDdiDpcRoutine para relatar interrupções VSync ao sistema operacional.
Além disso, os valores dos membros PixelRate, hSyncFreq e vSyncFreq da estrutura DISPLAYCONFIG_VIDEO_SIGNAL_INFO não podem ser D3DKMDT_FREQUENCY_NOTSPECIFIED.
O driver somente exibição não dá suporte ao controle VSync
Se o KMDOD não der suporte ao recurso de controle VSync, ele não deverá implementar as funções DxgkDdiControlInterrupt ou DxgkDdiGetScanLine e não deve fornecer ponteiros de função válidos para nenhuma dessas funções na estrutura KMDDOD_INITIALIZATION_DATA .
Nesse caso, o subsistema de kernel de elementos gráficos do Microsoft DirectX simula valores de interrupções VSync e linhas de verificação com base no modo atual e na hora do último VSync simulado.
Além disso, os valores dos membros PixelRate, hSyncFreq e vSyncFreq da estrutura DISPLAYCONFIG_VIDEO_SIGNAL_INFO devem ser definidos como D3DKMDT_FREQUENCY_NOTSPECIFIED.
Se essas condições não forem atendidas, o subsistema de kernel de elementos gráficos DirectX não carregará o KMDOD.
Controle do Registro
Para o Windows Vista com SP1 e versões posteriores dos sistemas operacionais Windows, o tempo limite de ociosidade do VSync padrão é de 10 períodos VSync. Opcionalmente, para fins de teste, o tempo limite pode ser controlado usando as configurações do Registro.
Importante
Para evitar problemas de compatibilidade do aplicativo, não altere a configuração padrão do Registro em drivers de produção.
Caminho da Chave:
RTL_REGISTRY_CONTROL\GraphicsDrivers\Scheduler
Caminho Completo:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Scheduler]
Valor da chave:
VsyncIdleTimeout
Valuetype:
REG_DWORD
Valor:
10 = padrão
Valor:
0 = desabilitar o controle VSync (produz o mesmo comportamento que o Windows Vista)