As chamadas da API D3D12 para limpar ou copiar recursos exigem internamente sincronização para garantir a correção, devido a riscos de leitura após gravação (RAW). Por exemplo, o driver pode optar por executar a limpeza de um destino de renderização usando uma operação Dispatch por questões de eficiência; nesse caso, qualquer trabalho pendente do sombreador de pixel precisa ser liberado, pois o driver não sabe se há desenhos em andamento gravando no destino de renderização em questão. O resultado final é que todo o trabalho de limpeza/cópia será serializado na GPU. O impacto no desempenho de o driver precisar ser conservador pode ser grande, especialmente quando o aplicativo deseja limpar/copiar muitos recursos em sequência.Em muitos casos, a sincronização pode ser omitida com segurança, porque o desenvolvedor do aplicativo sabe que o risco RAW não está presente em seu cenário específico. Nesse caso, o aplicativo pode usar as dicas acima para colocar a lista de comandos em um modo no qual a sincronização não será inserida no fluxo de comandos pelo driver. Chamar a API de dica com um desses sinalizadores no campo feature e um valor diferente de zero no campo value colocará a lista de comandos no ‘modo sem sincronização’ e, inversamente, um valor 0 retornará a lista de comandos à operação normal. As listas de comandos também retornarão à operação normal durante as chamadas a Reset.O driver inserirá a sincronização que normalmente inseriria durante a chamada de limpeza/cópia durante a chamada a DriverHintX, para permitir que o custo seja amortizado em longas sequências de limpezas/cópias.O uso esperado é o seguinte:
pList->DriverHintX(D3D12XBOX_CMDLIST_DRIVER_HINT_DONT_SYNC_ON_CLEAR_OR_COPY, 1); // Driver will synchronize here pList->ClearRenderTargetView(...); pList->ClearRenderTargetView(...); pList->ClearDepthStencilView(...); pList->CopyResource(...); etc pList->DriverHintX(D3D12XBOX_CMDLIST_DRIVER_HINT_DONT_SYNC_ON_CLEAR_OR_COPY, 0); // Driver also synchronize here, safe to use clear/copied resources without hazard