Sdílet prostřednictvím


0x/2x/4x MSAA Variants

Přepsání více ukázky proti aliasy (MSAA) nastavení ve všech vykreslení cílů a odkládací řetězců.

Výklad

Více ukázky proti aliasy zvyšuje vizuální kvalitu odebráním vzorků na více místech každý pixel; vyšší úrovně MSAA provést další ukázky a bez MSAA, je pouze jeden vzorek odebrán z centra pixel.Povolení MSAA ve vaší aplikaci obvykle má mírné ale pozorovatelné náklady v vykreslování výkon, ale v rámci určitých zátěží nebo na určité pracují grafikou, může být obsahovalo s téměř žádný vliv.

Pokud vaše aplikace již má MSAA povoleno, menší variant MSAA naznačují MSAA stávající, vyšší úrovně vznikly náklady na relativní výkonu.Zejména 0 x MSAA varianta určuje relativní výkon aplikace bez MSAA.

Pokud vaše aplikace ještě nemá povoleno MSAA, 2 x MSAA a 4 x MSAA variant označit relativní náročnosti navštěvují ve vaší aplikaci.Když náklady přijatelně nízké, zvažte povolení MSAA pro zlepšení kvality obrázku své aplikace.

[!POZNÁMKA]

Hardware nepodporuje plně MSAA pro všechny formáty.Pokud některá z těchto variant dojde k omezení hardwaru, který nelze fungoval kolem, jeho sloupec v tabulce souhrnu výkonu je prázdné a chybovou zprávu, je vytvořen.

Poznámky

Tyto variant přepsat argumenty ukázky počet a ukázky kvalitě na volání ID3DDevice::CreateTexture2D vytvořte vykreslení cíle.Konkrétně tyto parametry přepsány při:

  • D3D11_TEXTURE2D_DESC Předaný objekt pDesc popisuje cíl vykreslení, která je:

    • Člen BindFlags má příznak D3D11_BIND_TARGET nebo nastaven příznak D3D11_BIND_DEPTH_STENCIL.

    • Člen využití je nastavena na D3D11_USAGE_DEFAULT.

    • Člen CPUAccessFlags je nastaven na hodnotu 0.

    • Člen MipLevels je nastavena na hodnotu 1.

  • Zařízení podporuje počet vzorků požadovaný (0, 2 nebo 4) a ukázky kvality (0) pro požadovaný vykreslení cílový formát (D3D11_TEXTURE2D_DESC::Format člen), jak je stanoven ID3D11Device::CheckMultisampleQualityLevels.

Má-li člen D3D11_TEXTURE2D_DESC::BindFlags nastaveny příznaky D3D_BIND_SHADER_RESOUCE nebo D3D11_BIND_UNORDERED_ACCESS, jsou vytvářeny dvě verze na strukturu povrchu; první má tyto příznaky vymazat pro použití jako cíl vykreslení, a druhá bez MSAA struktury, který má tyto příznaky ponechán beze změny fungovat jako vyřešení vyrovnávací paměti pro první verzi.To je nezbytné, protože pomocí MSAA struktury jako prostředek shader nebo neuspořádaný přístup je pravděpodobně platný – například shader, který funguje v něm by generovat nesprávné výsledky, protože jeho očekávali bez MSAA struktury.Pokud varianta vytvořil struktury sekundární bez MSAA, pak vždy, když je cíl vykreslení MSAA zrušeno nastavení z kontextu zařízení, jeho obsah jsou přeložit na jiný MSAA struktury.Stejně tak vždy, když MSAA vykreslení cíl by měla být vázána jako prostředek shader nebo se používá v zobrazení neuspořádaný přístup, struktury přeložit bez MSAA je vázán místo toho.

Tyto variant také přepsat nastavení MSAA na všechny záměny řetězce vytvořené pomocí IDXGIFactory::CreateSwapChain, IDXGIFactory2::CreateSwapChainForHwnd, IDXGIFactory2::CreateSwapChainForCoreWindow, IDXGIFactory2::CreateSwapChainForComposition, a ID3D11CreateDeviceAndSwapChain.

Tyto změny projeví je, že všechny vykreslování se provádí k vykreslení cíli MSAA, ale pokud vaše aplikace používá jednu z těchto vykreslit cíle nebo vyrovnávací paměť odkládacího souboru řetězci jako zobrazení zdrojů shader nebo neuspořádaný přístup k zobrazení a potom data odebírá z vyřešit, bez MSAA kopii cíl vykreslení.

Omezení a

V Direct3D11 jsou omezeny více než bez MSAA textury MSAA textury.Můžete například nelze volat ID3D11DeviceContext::UpdateSubresource na MSAA struktury a volání ID3D11DeviceContext::CopySubresourceRegion se nezdaří, pokud počet vzorků a ukázky kvalitu zdroj a cíl prostředku se neshodují, které může dojít, pokud tato varianta přepíše nastavení MSAA jeden prostředek, ale ne na druhou.

Zjistí-li přehrávání těchto typů je v konfliktu, nezáleží na nejlepší úsilí k replikaci o záměrné chování, ale nemusí být možné přesně odpovídat jeho výsledky.Přestože je běžné pro tuto položku za účelem ovlivnit výkon těchto variant tak, aby špatně rozpozná jejich dopad, je možné – například při řízení toku v shaderu pixel je dáno přesném obsahu struktury – vzhledem k tomu, že replikované struktury nemusí mít identické obsah.

Příklad

Tyto variant lze reprodukovat pro vykreslení cíle vytvořené pomocí ID3D11Device::CreateTexture2D pomocí kódu nějak takto:

D3D11_TEXTURE2D_DESC target_description;
target_description.BindFlags = D3D11_BIND_RENDER_TARGET;
target_description.SampleDesc.Count = 4; // 4x MSAA, can be 2 or 0 instead
target_description.SampleDesc.Quality = 0;
d3d_device->CreateTexture2D(&target_description, nullptr, &render_target);

Nebo u řetězců odkládacího souboru vytvořeny pomocí IDXGISwapChain::CreateSwapChain nebo D3D11CreateDeviceAndSwapChain pomocí kódu nějak takto:

DXGI_SWAP_CHAIN_DESC chain_description;
chain_description.SampleDesc.Count = 4; // 4x MSAA, can be 2 or 0 instead
chain_description.SampleDesc.Quality = 0;

// Call IDXGISwapChain::CreateSwapChain or D3D11CreateDeviceAndSwapChain, etc.