Variante de format cible de rendu 16 bpp16bpp Render Target Format Variant

Affecte aux pixels le format DXGI_FORMAT_B5G6R5_UNORM pour toutes les cibles de rendu et toutes les mémoires tampons d'arrière-plan.Sets the pixel format to DXGI_FORMAT_B5G6R5_UNORM for all render targets and back buffers.

InterprétationInterpretation

Une cible de rendu ou une mémoire tampon d'arrière-plan utilise généralement un format 32 bpp (32 bits par pixel), tel que B8G8R8A8_UNORM.A render target or back buffer typically uses a 32bpp (32 bits per pixel) format such as B8G8R8A8_UNORM. Les formats 32 bpp peuvent consommer beaucoup de bande passante de mémoire.32bpp formats can consume a lot of memory bandwidth. Comme B5G6R5_UNORM est un format 16 bpp dont la taille représente la moitié de celle des formats 32 bpp, son utilisation peut soulager la bande passante de mémoire, mais au détriment de la fidélité des couleurs.Because the B5G6R5_UNORM format is a 16bpp format that's half the size of 32bpp formats, using it can relieve pressure on memory bandwidth, but at the cost of reduced color fidelity.

Si cette variante donne lieu à un net gain de performances, cela indique probablement que votre application consomme trop de bande passante de mémoire.If this variant shows a large performance gain, it likely indicates that your app consumes too much memory bandwidth. Les gains de performances peuvent être particulièrement prononcés quand le frame profilé pâtit d'un grand nombre de superpositions ou contient beaucoup de simulations de transparence.Performance gains can be especially pronounced when the profiled frame suffers from a significant amount of overdraw or contains a lot of alpha-blending.

Si les types de scènes affichées par votre application ne nécessitent pas une reproduction haute fidélité des couleurs, n'exigent pas la présence d'un canal alpha dans la cible de rendu et ne contiennent pas souvent de dégradés lisses (qui sont sensibles aux effets de traîne en cas de fidélité des couleurs réduite), utilisez une cible de rendu au format 16 bpp pour réduire l'utilisation de bande passante de mémoire.If the kinds of scenes that are rendered by your app don't require high-fidelity color reproduction, don't require the render target to have an alpha channel, and don't often contain smooth gradients—which are susceptible to banding artifacts under reduced color fidelity—consider using a 16bpp render target format to reduce memory bandwidth usage.

Si les scènes affichées dans votre application nécessitent une reproduction haute fidélité des couleurs ou un canal alpha ou si les dégradés lisses sont courants, envisagez d'autres stratégies pour réduire l'utilisation de bande passante de mémoire (par exemple, en réduisant le nombre de superpositions ou les simulations de transparence, en réduisant les dimensions du tampon de trame ou en faisant en sorte que les ressources de texture consomment moins de bande passante de mémoire en activant la compression ou en réduisant leurs dimensions).If the scenes that are rendered in your app require high-fidelity color reproduction or an alpha channel, or smooth gradients are common, consider other strategies to reduce memory bandwidth usage—for example, reducing the amount of overdraw or alpha-blending, reducing the dimensions of the framebuffer, or modifying texture resources to consume less memory bandwidth by enabling compression or reducing their dimensions. Comme toujours, vous devez réfléchir aux avantages et aux inconvénients qui accompagnent ces optimisations de qualité d'image.As usual, you have to consider the image quality trade-offs that come with any of these optimizations.

Si vous jugez qu'une mémoire tampon d'arrière-plan de 16 bpp profiterait à votre application mais qu'elle fait partie de votre chaîne de permutation, vous devez prendre des mesures supplémentaires, car DXGI_FORMAT_B5G6R5_UNORM n'est pas un format de mémoire tampon d'arrière-plan pris en charge pour les chaînes de permutation créées à l'aide de D3D11CreateDeviceAndSwapChain ou IDXGIFactory::CreateSwapChain.If your app would benefit from switching to a 16bpp back buffer but it's a part of your swap chain, you have to take additional steps because DXGI_FORMAT_B5G6R5_UNORM is not a supported back buffer format for swap chains created by using D3D11CreateDeviceAndSwapChain or IDXGIFactory::CreateSwapChain. Au lieu de cela, vous devez créer une cible de rendu au format B5G6R5_UNORM à l'aide de CreateTexture2D et axer le rendu sur cette cible.Instead, you have to create a B5G6R5_UNORM format render target by using CreateTexture2D and render to that instead. Ensuite, avant d'appeler Present dans votre chaîne de permutation, copiez la cible de rendu dans la mémoire tampon d'arrière-plan de la chaîne de permutation en traçant une quadravision en plein écran avec la cible de rendu comme texte source.Then, before you call Present on your swap chain, copy the render target onto the swap-chain backbuffer by drawing a full-screen quad with the render target as your source texture. Bien qu'il s'agisse d'une mesure supplémentaire appelée à consommer de la bande passante de mémoire, la plupart des opérations de rendu consommeront moins de bande passante, car elles affectent la cible de rendu 16 bpp ; si, en copiant la cible de rendu dans la mémoire tampon de la chaîne de permutation, il y a plus de bande passante épargnée que consommée, les performances de rendu s'en trouvent améliorées.Although this is an extra step that will consume some memory bandwidth, most rendering operations will consume less bandwidth because they affect the 16bpp render target; if this saves more bandwidth than is consumed by copying the render target to the swap-chain backbuffer, then rendering performance is improved.

Les architectures GPU qui utilisent des techniques de rendu en mosaïque peuvent profiter considérablement de l'utilisation d'un format de tampon de trame de 16 bpp sur le plan des performances, car une plus grande partie du tampon de trame peut tenir dans le cache de tampon de trame local de chaque mosaïque.GPU architectures that use tiled rendering techniques can see significant performance benefits by using a 16bpp framebuffer format because a larger portion of the framebuffer can fit in each tile's local framebuffer cache. Les architectures de rendu en mosaïque sont parfois rencontrées dans les GPU des combinés mobiles et des tablettes ; elles sont peu courantes en dehors de cette niche.Tiled rendering architectures are sometimes found in GPUs in mobile handsets and tablet computers; they rarely appear outside of this niche.

NotesRemarks

Le format cible de rendu est réinitialisé en DXGI_FORMAT_B5G6R5_UNORM à chaque appel à ID3D11Device::CreateTexture2D, qui est chargé de créer une cible de rendu.The render target format is reset to DXGI_FORMAT_B5G6R5_UNORM on every call to ID3D11Device::CreateTexture2D that creates a render target. Plus précisément, le format est substitué quand l'objet D3D11_TEXTURE2D_DESC passé dans pDesc décrit une cible de rendu ; à savoir :Specifically, the format is overridden when the D3D11_TEXTURE2D_DESC object passed in pDesc describes a render target; that is:

  • L'indicateur D3D11_BIND_REDNER_TARGET est défini pour le membre BindFlags.The BindFlags member has the D3D11_BIND_REDNER_TARGET flag set.

  • L'indicateur D3D11_BIND_DEPTH_STENCIL est effacé pour le membre BindFlags.The BindFlags member has the D3D11_BIND_DEPTH_STENCIL flag cleared.

  • Le membre Usage a la valeur D3D11_USAGE_DEFAULT.The Usage member is set to D3D11_USAGE_DEFAULT.

Restrictions et limitationsRestrictions and limitations

Sachant que le format B5G6R5 n'a pas de canal alpha, le contenu alpha n'est pas conservé par cette variante.Because the B5G6R5 format doesn't have an alpha channel, alpha content is not preserved by this variant. Si le rendu de votre application nécessite la présence d'un canal alpha dans votre cible de rendu, il vous suffit de passer au format B5G6R5.If your app's rendering requires an alpha channel in your render target, you can't just switch to the B5G6R5 format.

ExempleExample

Le Format cible de rendu 16 BPP variante peut être reproduite pour les cibles de rendu créées à l’aide de CreateTexture2D à l’aide de code similaire à celui-ci :The 16bpp Render Target Format variant can be reproduced for render targets created by using CreateTexture2D by using code like this:

D3D11_TEXTURE2D_DESC target_description;  

target_description.BindFlags = D3D11_BIND_RENDER_TARGET;  
target_description.Format = DXGI_FORMAT_B5G6R5_UNORM;  
d3d_device->CreateTexture2D(&target_description, nullptr, &render_target);