- Créer une ressource de carte de rétroaction, avec une disposition de rétroaction MinMip ou MipRegionUsed.
- Créer un descripteur de vue d’accès non ordonné (UAV) pour une ressource de carte de rétroaction.
- Copier des données d’une ressource de carte de rétroaction vers un UAV standard (ou inversement), pour la relecture par le CPU/GPU des données de Sampler Feedback.
- Créer un descripteur de vue de ressource de nuanceur (SRV) pour une carte MinMip.
- Créer un descripteur d’échantillonneur pour le filtrage de carte MinMip.
- Créer un descripteur UAV pour une ressource de carte de rétroaction, à l’aide de paramètres de vue supplémentaires.
- Permettre la création de ressources de carte de rétroaction et l’accès direct du CPU/GPU à ces ressources, sans utiliser les abstractions de format et de disposition des ressources de rétroaction de l’ensemble d’API standard.
Nouvelles méthodes ID3D12Device8 pour les ressources et les vues de carte de rétroaction
Avec l’API Direct3D 12 standard, les cartes de rétroaction sont créées au moyen d’une abstraction. Les ressources ont des dimensions logiques et un type de carte de rétroaction connus du titre, mais les dimensions physiques et le format matériel ne sont connus que du pilote. Cette abstraction permet de prendre en charge divers encodages de cartes de rétroaction propres au matériel. Toutefois, sur le GPU de la XBOX Series X|S, les cartes de rétroaction utilisent toujours le format R8_UINT en interne, et les dimensions physiques de la carte de rétroaction se calculent simplement en divisant les dimensions de la texture en mosaïque par les dimensions de la région de mip de Sampler Feedback.CreateCommittedResource2 et CreatePlacedResource1 créent des ressources Direct3D 12 de façon semblable aux API existantes CreateCommittedResource et CreatePlacedResource, avec en plus la possibilité de créer des ressources de carte de rétroaction. Une structure D3D12_RESOURCE_DESC1 utilisée pour créer des ressources de carte de rétroaction doit spécifier DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE ou DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE pour le format, ainsi que D3D12_TEXTURE_LAYOUT_UNKNOWN pour la disposition. Les champs Width, Height, DepthOrArraySize et MipLevel doivent correspondre aux valeurs de la texture en mosaïque ciblée. Chacune des dimensions de SamplerFeedbackMipRegion doit être une puissance de deux.
Par exemple, pour créer une carte de rétroaction MinMip pour une texture BC1_UNORM de 4096 × 4096 avec mipmaps, en utilisant une région de mip de 512 × 256 (pour qu’un texel de rétroaction couvre une tuile de 64 Ko au mip 0), la description de ressource serait configurée ainsi.
GetResourceAllocationInfo2 renvoie la taille et l’alignement des ressources d’après les descriptions de ressources D3D12_RESOURCE_DESC1 fournies en entrée. Ces renseignements sont nécessaires pour créer des cartes de rétroaction placées sur un ID3D12Heap.
CreateSamplerFeedbackUnorderedAccessView et CreateSamplerFeedbackUnorderedAccessViewX créent un descripteur UAV pour Sampler Feedback, à partir d’une ressource ciblée et d’une ressource de rétroaction. L’API d’extension accepte également une description d’UAV facultative pour prendre en charge les vues de sous-ressources d’une ressource de texture de tableau de rétroaction. Cette API garantit que les dimensions de la carte de rétroaction respectent les exigences matérielles de fraction en puissance de deux pour la collecte de Sampler Feedback par rapport à la ressource ciblée.
Nouvelles méthodes d’extension ID3D12Device8 pour les vues et les échantillonneurs de carte MinMip
CreateMinMipShaderResourceViewX est une API d’extension XBOX qui crée une vue de ressource de nuanceur de carte MinMip à partir d’une ressource ciblée (ou de sa description) combinée à une ressource MinMip. Comme pour la création d’un UAV de carte de rétroaction, cette API combine des attributs de la ressource ciblée (largeur, hauteur, niveaux de mip) avec des attributs de la ressource de carte MinMip (largeur, hauteur, format) pour produire un descripteur de ressource lié.
La ressource de carte MinMip doit avoir les caractéristiques suivantes :
- Des dimensions qui sont une fraction en puissance de deux des dimensions de la ressource ciblée
- Un format R8_UINT
- Un nombre de MipLevels égal à 1
ID3D12Device::CreateSamplerX en renseignant les nouveaux champs et indicateurs de la structure D3D12XBOX_SAMPLER_DESC. Les pentes et les décalages du filtre peuvent être spécifiés à l’aide des valeurs des énumérations D3D12XBOX_MINMIP_FILTER_SLOPE et D3D12XBOX_MINMIP_FILTER_OFFSET.
Nouveau comportement de la méthode ID3D12GraphicsCommandList1::ResolveSubresourceRegion
ResolveSubresourceRegion a été améliorée pour copier des données vers ou depuis une ressource de rétroaction, avec une ressource de texture R8_UINT standard comme source ou destination, respectivement.
Nouveaux objets et nouvelles méthodes du langage de nuanceur de haut niveau (HLSL)
Le modèle de nuanceur HLSL 6.5 a introduit de nouveaux objets d’API pour les cartes de rétroaction : FeedbackTexture2D et FeedbackTexture2DArray. Il s’agit de ressources en écriture seule qui se lient aux registres UAV (u#) en HLSL. Ces nouveaux objets sont utilisables dans toutes les étapes de nuanceur, mais certaines méthodes seraient limitées aux nuanceurs de pixels seulement, comme c’est déjà le cas pour certaines méthodes de Texture2D et de Texture2DArray. Les méthodes de ces nouveaux objets comprennentWriteSamplerFeedback*, WriteSamplerFeedbackBias*, WriteSamplerFeedbackLevelZero, WriteSamplerFeedbackGrad* et WriteSamplerFeedbackLevel.
Un prototype de fonction pour une variante de FeedbackTexture2D::WriteSamplerFeedback ressemble à l’exemple de code suivant.
