D3D12_RESOURCE_DESC structure (d3d12.h)
Décrit une ressource, telle qu’une texture. Cette structure est largement utilisée.
Syntaxe
typedef struct D3D12_RESOURCE_DESC {
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_RESOURCE_DESC;
Membres
Dimension
Un membre de D3D12_RESOURCE_DIMENSION, en spécifiant les dimensions de la ressource (par exemple, D3D12_RESOURCE_DIMENSION_TEXTURE1D), ou s’il s’agit d’une mémoire tampon ((D3D12_RESOURCE_DIMENSION_BUFFER).
Alignment
Spécifie l’alignement.
Width
Spécifie la largeur de la ressource.
Height
Spécifie la hauteur de la ressource.
DepthOrArraySize
Spécifie la profondeur de la ressource, si elle est 3D, ou la taille du tableau s’il s’agit d’un tableau de ressources 1D ou 2D.
MipLevels
Spécifie le nombre de niveaux MIP.
Format
Spécifie un membre de DXGI_FORMAT.
SampleDesc
Spécifie une structure DXGI_SAMPLE_DESC .
Layout
Spécifie un membre de D3D12_TEXTURE_LAYOUT.
Flags
Indicateurs OR au niveau du bit, en tant que constantes d’énumération D3D12_RESOURCE_FLAGS .
Remarques
Utilisez cette structure avec :
- ID3D12Resource ::GetDesc
- ID3D12Device ::GetResourceAllocationInfo
- ID3D12Device ::CreateCommittedResource
- ID3D12Device ::CreatePlacedResource
- ID3D12Device ::CreateReservedResource
- ID3D12Device ::GetCopyableFootprints
- Pour un certain nombre de fonctions d’assistance, reportez-vous à Structures et fonctions d’assistance pour D3D12.
Deux ressources courantes sont les mémoires tampons et les textures, qui utilisent toutes deux cette structure, mais avec des utilisations très différentes des champs.
Tampons
Les mémoires tampons sont une région de mémoire contiguë. La largeur peut être comprise entre 1 et le champ MaxGPUVirtualAddressBitsPerResource de D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT pour les ressources réservées ou le champ MaxGPUVirtualAddressBitsPerProcess pour les ressources validées . Toutefois, l’épuisement de l’espace d’adressage virtuel GPU, du budget de résidence de la mémoire (voir IDXGIAdapter3 ::QueryVideoMemoryInfo) et ou de la mémoire système peut facilement se produire en premier.L’alignement doit être de 64 Ko (D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT) ou 0, soit 64 Ko.
Height, DepthOrArraySize et MipLevels doivent être 1.
Le format doit être DXGI_FORMAT_UNKNOWN.
SampleDesc.Count doit être 1 et Quality doit être 0.
La disposition doit être D3D12_TEXTURE_LAYOUT_ROW_MAJOR, car les dispositions de mémoire tampon sont comprises par les applications et les données de texture principales de ligne sont généralement marshalées via des mémoires tampons.
Les indicateurs doivent toujours être remplis avec précision par les applications pour les mémoires tampons, avec des exceptions mineures. Toutefois, les applications peuvent utiliser la plus grande quantité de prise en charge des fonctionnalités sans se soucier de l’impact sur l’efficacité des mémoires tampons. Le champ indicateurs est destiné à contrôler les propriétés liées aux textures.
Textures
Les textures sont une disposition multidimensionnelle de texels dans une région contiguë de mémoire, fortement optimisée pour optimiser la bande passante pour le rendu et l’échantillonnage. Les tailles de texture sont difficiles à prédire et varient d’un adaptateur à l’autre. Les applications doivent utiliser ID3D12Device ::GetResourceAllocationInfo pour comprendre avec précision leur taille.TEXTURE1D, TEXTURE2D et TEXTURE3D ne sont pas pris en charge de manière orthogonale sur tous les formats. Consultez l’utilisation des D3D12_FORMAT_SUPPORT1_TEXTURE1D, D3D12_FORMAT_SUPPORT1_TEXTURE2D et D3D12_FORMAT_SUPPORT1_TEXTURE3D dans D3D12_FORMAT_SUPPORT1.
Width, Height et DepthOrArraySize doivent être compris entre 1 et la dimension maximale prise en charge pour le niveau de caractéristique et la dimension de texture particuliers. Toutefois, l’épuisement de l’espace d’adressage virtuel GPU, du budget de résidence de la mémoire (voir IDXGIAdapter3 ::QueryVideoMemoryInfo) et ou de la mémoire système peut facilement se produire en premier. Pour les formats compressés, ces dimensions sont logiques. Par exemple :
- Pour TEXTURE1D :
- La largeur doit être inférieure ou égale à D3D10_REQ_TEXTURE1D_U_DIMENSION sur les niveaux de fonctionnalités inférieurs à 11_0 et D3D11_REQ_TEXTURE1D_U_DIMENSION au niveau de fonctionnalité 11_0 ou supérieur.
- La hauteur doit être égale à 1.
- DepthOrArraySize est interprété comme une taille de tableau et doit être inférieur ou égal à D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION sur les niveaux de fonctionnalité inférieurs à 11_0 et D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION sur les niveaux de fonctionnalité 11_0 ou supérieur.
- Pour TEXTURE2D :
- La largeur et la hauteur doivent être inférieures ou égales à D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION sur les niveaux de fonctionnalités inférieurs à 11_0 et D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION ou 11_0 ou supérieur.
- DepthOrArraySize est interprété comme une taille de tableau et doit être inférieur ou égal à D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION sur les niveaux de fonctionnalité inférieurs à 11_0 et D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION sur les niveaux de fonctionnalité 11_0 ou supérieur.
- Pour TEXTURE3D :
- Width et Height et DepthOrArraySize doivent être inférieurs ou égaux à D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION sur les niveaux de fonctionnalité inférieurs à 11_0 et D3D11_REQ_TEXTURE2D_U_V_OR_W_DIMENSION au niveau de fonctionnalité 11_0 ou supérieur.
- DepthOrArraySize est interprété comme profondeur.
Alignement
L’alignement peut être de 0, 4 Ko, 64 Ko ou 4 Mo.Si l’alignement est défini sur 0, le runtime utilise 4 Mo pour les textures MSAA et 64 Ko pour tout le reste. L’application peut choisir des alignements plus petits que ces valeurs par défaut pour deux types de texture lorsque la texture est petite. Les textures avec une disposition UNKNOWN et MSAA peuvent être créées avec un alignement de 64 Ko (si elles passent la restriction de petite taille décrite ci-dessous).
Les textures avec disposition UNKNOWN sans MSAA et sans indicateur de cible de rendu ni d’indicateur de gabarit de profondeur peuvent être créées avec un alignement de 4 Ko (là encore, en passant la restriction de petite taille).
Les applications peuvent créer des ressources alignées plus petites lorsque la taille estimée du niveau mip le plus détaillé est un total de la restriction d’alignement plus grande ou moins. Le runtime utilise un mécanisme indépendant de l’architecture d’estimation de la taille, qui imite la façon dont les ressources en mosaïques standard swizzle et D3D12 sont dimensionnées. Toutefois, les tailles de vignettes seront de la plus petite restriction d’alignement pour ces calculs. À l’aide de la texture non-render-target et non depth-stencil comme exemple, le runtime suppose des formes de vignette quasi équilatérales de 4 Ko, et calcule le nombre de vignettes nécessaires pour le niveau mip le plus détaillé. Si le nombre de vignettes est égal ou inférieur à 16, l’application peut créer une ressource alignée de 4 Ko. Ainsi, un tableau tex2d à mipped de n’importe quelle taille de tableau et n’importe quel nombre de niveaux de mip peut être de 4 Ko, tant que la largeur et la hauteur sont suffisamment petites pour le format particulier et MSAA.
MipLevels
MipLevels peut être égal à 0 ou 1 aux niveaux de mip maximum pris en charge par les dimensions Width, Height et DepthOrArraySize . Lorsque 0 est utilisé, l’API calcule automatiquement les niveaux de mip maximum pris en charge et l’utilise. Toutefois, certaines propriétés de ressource et de tas excluent les niveaux mip, de sorte que l’application doit spécifier la valeur 1.Reportez-vous au champ D3D12_FORMAT_SUPPORT1_MIP de D3D12_FORMAT_SUPPORT1 pour connaître les restrictions par format. Les ressources MSAA, les textures avec D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER et les tas avec D3D12_HEAP_FLAG_ALLOW_DISPLAY empêchent tous les niveaux de mip.
Format
Le format doit être un format valide pris en charge au niveau des fonctionnalités de l’appareil.SampleDesc
Un SampleDesc.Count supérieur à 1 et/ou une qualité non nulle ne sont pris en charge que pour TEXTURE2D et lorsque D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ou D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL sont définis.Les éléments suivants ne sont pas pris en charge :
- D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,
- D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS,
- D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS,
- D3D12_HEAP_FLAG_ALLOW_DISPLAY
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | d3d12.h |
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour