> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Vue d'ensemble de l'API Direct3D 12 de Sampler Feedback

> Vue d'ensemble de l'API Direct3D 12 de Sampler Feedback

L'ensemble d'API qui prend en charge Sampler Feedback comporte les mêmes API sur XBOX et sur PC Direct3D 12, avec des extensions XBOX pour toutes les fonctionnalités matérielles de la XBOX Series X|S qui dépassent les capacités standard ou qui ne sont pas adoptées sur PC. En particulier, le filtre personnalisé de carte MinMip ne sera pas implémenté dans Direct3D 12 sur PC.

L'ensemble d'API Sampler Feedback fournit les fonctionnalités suivantes.

1. Créer une ressource de carte de rétroaction, avec une disposition de rétroaction MinMip ou MipRegionUsed.
2. Créer un descripteur de vue d'accès non ordonné (UAV) pour une ressource de carte de rétroaction.
3. 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.

Les API d'extension XBOX fournissent les fonctionnalités suivantes.

1. Créer un descripteur de vue de ressource de nuanceur (SRV) pour une carte MinMip.
2. Créer un descripteur d'échantillonneur pour le filtrage de carte MinMip.
3. Créer un descripteur UAV pour une ressource de carte de rétroaction, à l'aide de paramètres de vue supplémentaires.
4. 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.

```cpp theme={null}
typedef struct D3D12_MIP_REGION
{
    UINT Width;
    UINT Height;
    UINT Depth;
} D3D12_MIP_REGION;

typedef struct D3D12_RESOURCE_DESC1
{
    D3D12_RESOURCE_DIMENSION Dimension;
    UINT64 Alignment;
    UINT64 Width;
    UINT Height;
    UINT16 DepthOrArraySize;
    UINT16 MipLevels;
    DXGI_FORMAT Format;
    DXGI_SAMPLE_DESC SampleDesc;
    D3D12_TEXTURE_LAYOUT Layout;
    D3D12_RESOURCE_FLAGS Flags;
    D3D12_MIP_REGION SamplerFeedbackMipRegion;
} D3D12_RESOURCE_DESC1;

D3D12_RESOURCE_ALLOCATION_INFO ID3D12Device8::GetResourceAllocationInfo2(
    UINT visibleMask,
    UINT numResourceDescs,
    _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1* pResourceDescs,
    _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1* pResourceAllocationInfo1);

HRESULT ID3D12Device8::CreateCommittedResource2(
    _In_ const D3D12_HEAP_PROPERTIES* pHeapProperties,
    D3D12_HEAP_FLAGS HeapFlags,
    _In_ const D3D12_RESOURCE_DESC1* pDesc,
    D3D12_RESOURCE_STATES InitialResourceState,
    _In_opt_ const D3D12_CLEAR_VALUE* pOptimizedClearValue,
    _In_opt_ ID3D12ProtectedResourceSession* pProtectedSession,
    _In_ REFIID riidResource, // Expected: ID3D12Resource1*
    _COM_Outptr_ void** ppvResource);

HRESULT ID3D12Device8::CreatePlacedResource1(
    _In_ ID3D12Heap* pHeap,
    UINT64 HeapOffset,
    _In_ const D3D12_RESOURCE_DESC1* pDesc,
    D3D12_RESOURCE_STATES InitialState,
    _In_opt_ const D3D12_CLEAR_VALUE* pOptimizedClearValue,
    _In_ REFIID riid, // Expected: ID3D12Resource*
    _COM_Outptr_ void** ppvResource);

typedef enum DXGI_FORMAT
{
    ...
    DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE = 187,
    DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE  = 188,
    ...
} DXGI_FORMAT;
```

`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.

```cpp theme={null}
D3D12_RESOURCE_DESC1 MinMipFeedbackDesc = 
{
    D3D12_RESOURCE_DIMENSION_TEXTURE2D,          // Dimension.
    0,                                           // Alignment.
    4096,                                        // Width (of paired tiled texture).
    4096,                                        // Height (of paired tiled texture).
    1,                                           // DepthOrArraySize (of the MinMip feedback map).
    12,                                          // MipLevels (of paired tiled texture).
    DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE, // Format (of MinMip feedback map).
    { 1, 0 },                                    // SampleDesc.
    D3D12_TEXTURE_LAYOUT_UNKNOWN,                // Layout.
    D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS,  // Flags.
    { 512, 256, 1 }                              // SamplerFeedbackMipRegion (to define the size of the feedback map).
};
```

La carte de rétroaction MinMip obtenue aurait des dimensions physiques de 8 × 16, avec un niveau de mip, le format R8\_UINT et une disposition de texture D3D12XBOX\_TEXTURE\_LAYOUT\_SWIZZLE\_MODE\_256B\_S.

`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.

```cpp theme={null}
void ID3D12Device8::CreateSamplerFeedbackUnorderedAccessView(
    _In_opt_ ID3D12Resource* pTargetedResource,
    _In_opt_ ID3D12Resource* pFeedbackResource,
    _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);

void ID3D12Device8::CreateSamplerFeedbackUnorderedAccessViewX(
    _In_opt_ ID3D12Resource* pTargetedResource,
    _In_opt_ ID3D12Resource* pFeedbackResource,
    _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC* pDesc,
    _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
```

`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

```cpp theme={null}
void ID3D12Device8::CreateMinMipShaderResourceViewX(
    _In_opt_ ID3D12Resource* pTargetedResource,
    _In_opt_ const D3D12_RESOURCE_DESC* pTargetedResourceDesc,
    _In_opt_ ID3D12Resource* pMinMipResource,
    _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC* pDesc,
    _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
```

`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 :

1. Des dimensions qui sont une fraction en puissance de deux des dimensions de la ressource ciblée
2. Un format R8\_UINT
3. Un nombre de MipLevels égal à 1

Il est recommandé que les ressources de carte MinMip aient un mode de swizzle D3D12XBOX\_TEXTURE\_LAYOUT\_SWIZZLE\_MODE\_256B\_S, car ces ressources sont censées être petites.

```cpp theme={null}
typedef enum D3D12XBOX_SAMPLER_FLAGS : UINT
{
    ...
    D3D12XBOX_SAMPLER_FLAG_ENABLE_MINMIP_FILTER = 0x0100
} D3D12XBOX_SAMPLER_FLAGS;

typedef enum D3D12XBOX_MINMIP_FILTER_SLOPE : UINT
{
    D3D12XBOX_MINMIP_FILTER_SLOPE_2_5 = 0,
    D3D12XBOX_MINMIP_FILTER_SLOPE_3   = 1,
    D3D12XBOX_MINMIP_FILTER_SLOPE_4   = 2,
    D3D12XBOX_MINMIP_FILTER_SLOPE_5   = 3,
    D3D12XBOX_MINMIP_FILTER_SLOPE_8   = 4,
    D3D12XBOX_MINMIP_FILTER_SLOPE_16  = 5,
    D3D12XBOX_MINMIP_FILTER_SLOPE_32  = 6,
    D3D12XBOX_MINMIP_FILTER_SLOPE_64  = 7
} D3D12XBOX_MINMIP_FILTER_SLOPE;

typedef enum D3D12XBOX_MINMIP_FILTER_OFFSET : UINT
{
    D3D12XBOX_MINMIP_FILTER_OFFSET_1_4    = 0,
    D3D12XBOX_MINMIP_FILTER_OFFSET_1_8    = 1,
    D3D12XBOX_MINMIP_FILTER_OFFSET_1_16   = 2,
    D3D12XBOX_MINMIP_FILTER_OFFSET_1_32   = 3,
    D3D12XBOX_MINMIP_FILTER_OFFSET_1_64   = 4,
    D3D12XBOX_MINMIP_FILTER_OFFSET_1_128  = 5
} D3D12XBOX_MINMIP_FILTER_OFFSET;

typedef struct D3D12XBOX_SAMPLER_DESC
{
    D3D12XBOX_SAMPLER_FLAGS Flags;

    ...

    D3D12XBOX_MINMIP_FILTER_SLOPE MinMipSlopeU;
    D3D12XBOX_MINMIP_FILTER_OFFSET MinMipOffsetU;
    D3D12XBOX_MINMIP_FILTER_SLOPE MinMipSlopeVOrW;
    D3D12XBOX_MINMIP_FILTER_OFFSET MinMipOffsetVOrW;
} D3D12XBOX_SAMPLER_DESC;
```

Pour créer un descripteur d'échantillonneur permettant d'échantillonner à partir d'une carte MinMip, utilisez l'API d'extension XBOX existante `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

```cpp theme={null}
typedef enum D3D12_RESOLVE_MODE
{
    ...
    D3D12_RESOLVE_MODE_ENCODE_SAMPLER_FEEDBACK = 4,
    D3D12_RESOLVE_MODE_DECODE_SAMPLER_FEEDBACK = 5
} D3D12_RESOLVE_MODE;

void ID3D12GraphicsCommandList1::ResolveSubresourceRegion( 
    _In_ ID3D12Resource* pDstResource,
    _In_ UINT DstSubresource,
    _In_ UINT DstX,
    _In_ UINT DstY,
    _In_ ID3D12Resource* pSrcResource,
    _In_ UINT SrcSubresource,
    _In_opt_ D3D12_RECT* pSrcRect,
    _In_ DXGI_FORMAT Format,
    _In_ D3D12_RESOLVE_MODE ResolveMode);
```

La méthode `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 comprennent `WriteSamplerFeedback*`, `WriteSamplerFeedbackBias*`, `WriteSamplerFeedbackLevelZero`, `WriteSamplerFeedbackGrad*` et `WriteSamplerFeedbackLevel`.

Un prototype de fonction pour une variante de `FeedbackTexture2D::WriteSamplerFeedback` ressemble à l'exemple de code suivant.

```cpp theme={null}
void FeedbackTexture2D::WriteSamplerFeedback(
    in Texture2D SampledTexture,
    in SamplerState S,
    in float2 Location);
```

Le paramètre *SampledTexture* indique la texture pour laquelle générer la rétroaction. Si le paramètre *SampledTexture* ne correspond pas à la ressource utilisée lors de la création de l'UAV de rétroaction, le comportement est indéfini sur certaines plateformes. Sur le GPU de la XBOX Series X|S, le paramètre *SampledTexture* doit être présent, mais il est ignoré. Le descripteur UAV de ressource liée pour la carte de rétroaction contient tous les renseignements nécessaires pour effectuer Sampler Feedback.

## Voir aussi

[Conception matérielle du GPU pour Sampler Feedback](/fr-CA/build/core-features/graphics/newfeatures/sfs/sf-gpu-design)

[Vue d'ensemble de Sampler Feedback (aperçu)](/fr-CA/build/core-features/graphics/newfeatures/sfs/sf-overview)


## Related topics

- [Répertoire des rubriques NDA : liens actifs vers Microsoft Learn](/fr-CA/nda/nda-topic-directory.md)
- [Vue d'ensemble de l'API C Services - PFLocalization.h](/fr/services/playfab/api-references/c/pflocalization/pflocalization_members.md)
- [Vue d'ensemble de l'API C Services - PFLeaderboards.h](/fr/services/playfab/api-references/c/pfleaderboards/pfleaderboards_members.md)
- [Vue d'ensemble de l'API C Services - PFStatistics.h](/fr-CA/services/playfab/api-references/c/pfstatistics/pfstatistics_members.md)
- [Vue d'ensemble de l'API C Services - PFPlatformSpecific.h](/fr-CA/services/playfab/api-references/c/pfplatformspecific/pfplatformspecific_members.md)
