Syntaxe
Paramètres
pOutputSyncTarget _In_opt_Type : IDXGIOutput* Interface de sortie d’adaptateur qui identifie l’écran dont la fréquence d’actualisation et la synchronisation doivent servir de base de synchronisation pour la planification des trames. Pour utiliser l’adaptateur par défaut, passez null. LengthInMicroseconds _In_
Type : UINT Durée de l’intervalle de trame, en microsecondes. La durée définit la fréquence à laquelle les trames seront présentées pour l’affichage. PeriodInIntervals _In_
Type : UINT Période de la trame, en intervalles. La période définit le nombre d’intervalles entre l’origine d’une trame et le moment où elle est présentée pour l’affichage. La période est basée sur la profondeur souhaitée du pipeline de trames : c’est-à-dire de combien le rendu CPU est autorisé à prendre de l’avance sur l’affichage des trames. Flags _In_
Type : D3D12XBOX_FRAME_INTERVAL_FLAGS Indicateurs utilisés pour fournir un contrôle supplémentaire sur l’intervalle établi. En fonctionnement normal, cet indicateur doit toujours être défini sur D3D12XBOX_FRAME_INTERVAL_FLAG_NONE. Pour la prise en charge de plus de 60 FPS, l’indicateur D3D12XBOX_FRAME_INTERVAL_FLAG_60FPS_PLUS peut être utilisé.
Valeur de retour
Type : HRESULT Code de réussite ou d’erreur HRESULT. Renvoie S_FALSE pour indiquer que l’appel a réussi mais que le nouvel intervalle de trame n’est pas encore en vigueur. Il prendra effet lors du prochain appel à ScheduleFrameEventX, dont le Type doit être D3D12XBOX_FRAME_EVENT_ORIGIN. Renvoie E_INVALIDARG en cas de valeurs d’intervalle, de période ou d’indicateur non prises en charge.Remarques
La durée de l’intervalle de trame détermine la fréquence de présentation et spécifie la cadence à laquelle les trames seront rendues et envoyées à l’écran. Les durées d’intervalle les plus courantes incluent les définitions de préprocesseur suivantes :D3D12XBOX_FRAME_INTERVAL_FLAG_60FPS_PLUS. Pour plus de détails, consultez D3D12XBOX_FRAME_INTERVAL_FLAGS.
Les durées d’intervalle de trame sont établies comme des multiples entiers de l’intervalle d’actualisation de l’écran et sont alignées sur les limites de vblank. C’est pourquoi la durée en microsecondes n’est pas une directive stricte qui établit le temps exact entre les intervalles ; il s’agit plutôt d’une valeur qui communique la durée d’intervalle souhaitée. Lorsqu’elle se situe dans un certain seuil, elle est mappée au multiple le plus proche de la fréquence d’actualisation de l’écran. Par exemple, une durée de trame définie de 33 333 microsecondes peut en réalité produire une durée d’intervalle de 33 367 microsecondes si la fréquence d’actualisation de l’écran est de 29,97 Hz au lieu de 30 Hz.
Cependant, l’intervalle défini sera utilisé comme base pour la planification des événements de trame (voir ScheduleFrameEventX), où le décalage en microsecondes est exprimé en fonction de la durée fournie à SetFrameIntervalX, et non de la valeur à laquelle cette durée a été mappée en interne. Par exemple, un décalage d’heure d’origine planifié de 16 666 microsecondes utilisé avec une durée d’intervalle définie de 33 333 microsecondes sera converti en interne en un décalage réel de 16 684 microsecondes lorsque la fréquence d’actualisation de l’écran est de 29,97 Hz ; cela préserve l’intention de planifier l’origine au milieu de la trame.
La période de la trame (en intervalles) établit la durée maximale d’une trame entre son origine et son affichage, et elle peut être définie sur une valeur comprise entre 1 et 4 inclus. Cette période est basée sur le chevauchement attendu du rendu CPU et GPU, et elle contrôle le moment où le CPU doit être limité en fonction du nombre de trames en cours. Une période de 1 indique qu’une trame sera démarrée et terminée dans le même intervalle ; cela ne prendra pas plus de LengthInMicroseconds. Une période de n indique qu’une trame sera démarrée sur un intervalle de trame et terminée n - 1 intervalles plus tard. En termes de latence, une trame sera généralement maintenue à moins de PeriodInIntervals x LengthInMicroseconds microsecondes de latence entre son démarrage et le moment où elle atteint l’écran, en supposant qu’aucun vblank n’est manqué.
La durée d’un intervalle de trame et sa période servent à établir une échéance d’affichage pour une trame. Si la trame n’est pas terminée et présentée pour l’affichage avant la fin de l’intervalle situé PeriodInIntervals - 1 intervalles après son origine, la trame suivante sera limitée et ne pourra pas commencer tant que la trame manquée n’aura pas été présentée et basculée vers l’écran. Cela permet d’éviter l’introduction d’intervalles de latence supplémentaires en cas de vblanks manqués ; lorsqu’une trame manque son échéance de présentation, elle est généralement retenue pour l’affichage jusqu’au prochain vblank auquel elle est prête (pour éviter le déchirement). Retarder du même délai le démarrage CPU de la trame suivante empêche l’échantillonnage trop précoce des entrées et préserve les garanties de latence établies par l’intervalle et la période de trame définis.
Les paramètres initiaux de l’intervalle de trame sont appliqués lors de la première planification de l’événement d’origine de trame. Les mises à jour ultérieures sont mises en pipeline avec la présentation, de sorte que les modifications apportées au cours d’un intervalle sont appliquées lorsque la prochaine trame présentée est basculée vers l’écran.
