2
0

CmD3D11RenderSystem.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include "CmD3D11RenderSystem.h"
  2. #include "CmRenderSystem.h"
  3. #include "CmException.h"
  4. namespace CamelotEngine
  5. {
  6. D3D11Device& D3D11RenderSystem::getPrimaryDevice()
  7. {
  8. CM_EXCEPT(NotImplementedException, "Not implemented");
  9. }
  10. void D3D11RenderSystem::determineFSAASettings(UINT32 fsaa, const String& fsaaHint, DXGI_FORMAT format, DXGI_SAMPLE_DESC* outFSAASettings)
  11. {
  12. CM_EXCEPT(NotImplementedException, "Not implemented");
  13. /*
  14. bool ok = false;
  15. bool qualityHint = fsaaHint.find("Quality") != String::npos;
  16. size_t origFSAA = fsaa;
  17. bool tryCSAA = false;
  18. // NVIDIA, prefer CSAA if available for 8+
  19. // it would be tempting to use getCapabilities()->getVendor() == GPU_NVIDIA but
  20. // if this is the first window, caps will not be initialised yet
  21. if (mActiveD3DDriver->getAdapterIdentifier().VendorId == 0x10DE &&
  22. fsaa >= 8)
  23. {
  24. tryCSAA = true;
  25. }
  26. while (!ok)
  27. {
  28. // Deal with special cases
  29. if (tryCSAA)
  30. {
  31. // see http://developer.nvidia.com/object/coverage-sampled-aa.html
  32. switch(fsaa)
  33. {
  34. case 8:
  35. if (qualityHint)
  36. {
  37. outFSAASettings->Count = 8;
  38. outFSAASettings->Quality = 8;
  39. }
  40. else
  41. {
  42. outFSAASettings->Count = 4;
  43. outFSAASettings->Quality = 8;
  44. }
  45. break;
  46. case 16:
  47. if (qualityHint)
  48. {
  49. outFSAASettings->Count = 8;
  50. outFSAASettings->Quality = 16;
  51. }
  52. else
  53. {
  54. outFSAASettings->Count = 4;
  55. outFSAASettings->Quality = 16;
  56. }
  57. break;
  58. }
  59. }
  60. else // !CSAA
  61. {
  62. outFSAASettings->Count = fsaa == 0 ? 1 : fsaa;
  63. outFSAASettings->Quality = 0;
  64. }
  65. HRESULT hr;
  66. UINT outQuality;
  67. hr = mDevice->CheckMultisampleQualityLevels(
  68. format,
  69. outFSAASettings->Count,
  70. &outQuality);
  71. if (SUCCEEDED(hr) && (!tryCSAA || outQuality > outFSAASettings->Quality))
  72. {
  73. ok = true;
  74. }
  75. else
  76. {
  77. // downgrade
  78. if (tryCSAA && fsaa == 8)
  79. {
  80. // for CSAA, we'll try downgrading with quality mode at all samples.
  81. // then try without quality, then drop CSAA
  82. if (qualityHint)
  83. {
  84. // drop quality first
  85. qualityHint = false;
  86. }
  87. else
  88. {
  89. // drop CSAA entirely
  90. tryCSAA = false;
  91. }
  92. // return to original requested samples
  93. fsaa = static_cast<UINT32>(origFSAA);
  94. }
  95. else
  96. {
  97. // drop samples
  98. --fsaa;
  99. if (fsaa == 1)
  100. {
  101. // ran out of options, no FSAA
  102. fsaa = 0;
  103. ok = true;
  104. }
  105. }
  106. }
  107. } // while !ok
  108. */
  109. }
  110. }