#include "CmD3D11RenderSystem.h" #include "CmRenderSystem.h" #include "CmException.h" namespace CamelotEngine { D3D11Device& D3D11RenderSystem::getPrimaryDevice() { CM_EXCEPT(NotImplementedException, "Not implemented"); } void D3D11RenderSystem::determineFSAASettings(UINT32 fsaa, const String& fsaaHint, DXGI_FORMAT format, DXGI_SAMPLE_DESC* outFSAASettings) { CM_EXCEPT(NotImplementedException, "Not implemented"); /* bool ok = false; bool qualityHint = fsaaHint.find("Quality") != String::npos; size_t origFSAA = fsaa; bool tryCSAA = false; // NVIDIA, prefer CSAA if available for 8+ // it would be tempting to use getCapabilities()->getVendor() == GPU_NVIDIA but // if this is the first window, caps will not be initialised yet if (mActiveD3DDriver->getAdapterIdentifier().VendorId == 0x10DE && fsaa >= 8) { tryCSAA = true; } while (!ok) { // Deal with special cases if (tryCSAA) { // see http://developer.nvidia.com/object/coverage-sampled-aa.html switch(fsaa) { case 8: if (qualityHint) { outFSAASettings->Count = 8; outFSAASettings->Quality = 8; } else { outFSAASettings->Count = 4; outFSAASettings->Quality = 8; } break; case 16: if (qualityHint) { outFSAASettings->Count = 8; outFSAASettings->Quality = 16; } else { outFSAASettings->Count = 4; outFSAASettings->Quality = 16; } break; } } else // !CSAA { outFSAASettings->Count = fsaa == 0 ? 1 : fsaa; outFSAASettings->Quality = 0; } HRESULT hr; UINT outQuality; hr = mDevice->CheckMultisampleQualityLevels( format, outFSAASettings->Count, &outQuality); if (SUCCEEDED(hr) && (!tryCSAA || outQuality > outFSAASettings->Quality)) { ok = true; } else { // downgrade if (tryCSAA && fsaa == 8) { // for CSAA, we'll try downgrading with quality mode at all samples. // then try without quality, then drop CSAA if (qualityHint) { // drop quality first qualityHint = false; } else { // drop CSAA entirely tryCSAA = false; } // return to original requested samples fsaa = static_cast(origFSAA); } else { // drop samples --fsaa; if (fsaa == 1) { // ran out of options, no FSAA fsaa = 0; ok = true; } } } } // while !ok */ } }