> ## 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 prenant en charge Sampler Feedback comprend les mêmes API sur XBOX et sur Direct3D 12 pour PC, avec des extensions XBOX pour toutes les fonctionnalités matérielles de XBOX Series X|S qui dépassent les capacités standard ou qui ne sont pas adoptées sur PC. En particulier, le filtre de carte MinMip personnalisé ne sera pas implémenté dans Direct3D 12 pour PC.

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

1. Créer une ressource de carte de feedback, avec une disposition de feedback MinMip ou MipRegionUsed.
2. Créer un descripteur de vue d'accès non ordonné (UAV) pour une ressource de carte de feedback.
3. Copier des données d'une ressource de carte de feedback vers un UAV standard (ou inversement), pour la relecture 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 shader (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 feedback, à l'aide de paramètres de vue supplémentaires.
4. Permettre la création de ressources de carte de feedback, et l'accès direct du CPU/GPU à ces ressources, sans utiliser les abstractions de format et de disposition des ressources de feedback de l'ensemble d'API standard.

### Nouvelles méthodes ID3D12Device8 pour les ressources et les vues de carte de feedback

Avec l'API Direct3D 12 standard, les cartes de feedback sont créées à l'aide d'une abstraction. Les ressources ont des dimensions logiques et un type de carte de feedback 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 feedback propres au matériel.  Cependant, sur le GPU XBOX Series X|S, les cartes de feedback utilisent toujours le format R8\_UINT en interne, et les dimensions physiques de la carte de feedback se calculent simplement en divisant les dimensions de la texture en mosaïque par les dimensions de la région de mip du 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 manière similaire aux API existantes `CreateCommittedResource` et `CreatePlacedResource`, avec en plus la possibilité de créer des ressources de carte de feedback. Une structure D3D12\_RESOURCE\_DESC1 utilisée pour créer des ressources de carte de feedback 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. Les dimensions de SamplerFeedbackMipRegion doivent chacune être une puissance de deux.

Par exemple, pour créer une carte de feedback 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 feedback couvre une tuile de 64 Ko dans le 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 feedback 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 à partir des descriptions de ressources D3D12\_RESOURCE\_DESC1 fournies en entrée. Ces informations sont nécessaires pour créer des cartes de feedback 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 le sampler feedback, à partir d'une ressource ciblée et d'une ressource de feedback. 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 feedback en tableau. Cette API garantit que les dimensions de la carte de feedback respectent les exigences matérielles de fraction en puissance de deux pour la collecte du sampler feedback sur 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 shader 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 feedback, cette API combine les attributs de la ressource ciblée (largeur, hauteur, niveaux de mip) avec ceux de la ressource de carte MinMip (largeur, hauteur, format) pour produire un descripteur de ressource liée.

La ressource de carte MinMip doit présenter les caractéristiques suivantes :

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

Il est recommandé que les ressources de carte MinMip aient le mode 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 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 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 feedback, avec une ressource de texture R8\_UINT standard comme source ou destination, respectivement.

### Nouveaux objets et méthodes HLSL (High-Level Shader Language)

Le modèle de shader HLSL 6.5 a introduit de nouveaux objets d'API pour les cartes de feedback : 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 à toutes les étapes de shader, mais certaines méthodes sont réservées aux pixel shaders, de façon similaire aux restrictions existantes de certaines méthodes de Texture2D et Texture2DArray.

Les méthodes de ces nouveaux objets incluent `WriteSamplerFeedback*`, `WriteSamplerFeedbackBias*`, `WriteSamplerFeedbackLevelZero`, `WriteSamplerFeedbackGrad*` et `WriteSamplerFeedbackLevel`.

Le prototype de fonction d'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 le feedback. Si le paramètre *SampledTexture* ne correspond pas à la ressource utilisée lors de la création de l'UAV de feedback, le comportement est indéfini sur certaines plateformes. Sur le GPU 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 feedback contient toutes les informations nécessaires pour effectuer le sampler feedback.

## Voir aussi

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

[Vue d'ensemble de Sampler Feedback (préversion)](/fr/build/core-features/graphics/newfeatures/sfs/sf-overview)


## Related topics

- [Vue d'ensemble de l'API du pipeline Mesh Shader](/fr/build/core-features/graphics/newfeatures/ms/ms-api-design.md)
- [Vue d'ensemble de DirectStorage](/fr/build/console-features/storage/directstorage/directstorage-overview.md)
- [Vue d'ensemble de l'API d'éclairage](/fr/build/core-features/common/lighting/gc-lighting-toc.md)
- [Vue d'ensemble de l'API C/C++ de Party](/fr/services/playfab/multiplayer/networking/reference/party_members.md)
- [Vue d'ensemble de l'API Multiplayer Manager](/fr/services/xbox-services/multiplayer/mpm/concepts/live-multiplayer-manager-api-overview.md)
