소스 검색

Respect MSAA reset flags passed during init. Issue #1376.

Branimir Karadžić 7 년 전
부모
커밋
c2c7b99707
3개의 변경된 파일17개의 추가작업 그리고 14개의 파일을 삭제
  1. 8 6
      src/renderer_d3d11.cpp
  2. 7 6
      src/renderer_d3d12.cpp
  3. 2 2
      src/renderer_d3d9.cpp

+ 8 - 6
src/renderer_d3d11.cpp

@@ -1005,8 +1005,10 @@ namespace bgfx { namespace d3d11
 					m_scd.width  = _init.resolution.width;
 					m_scd.height = _init.resolution.height;
 					m_scd.format  = DXGI_FORMAT_R8G8B8A8_UNORM;
-					m_scd.sampleDesc.Count   = 1;
-					m_scd.sampleDesc.Quality = 0;
+
+					updateMsaa(m_scd.format);
+					m_scd.sampleDesc  = s_msaa[(_init.resolution.reset&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT];
+
 					m_scd.bufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
 					m_scd.bufferCount = m_swapBufferCount;
 					m_scd.scaling = 0 == g_platformData.ndt
@@ -1504,7 +1506,7 @@ namespace bgfx { namespace d3d11
 				}
 
 				//
-				updateMsaa();
+				updateMsaa(m_scd.format);
 				postReset();
 			}
 
@@ -2236,13 +2238,13 @@ namespace bgfx { namespace d3d11
 			m_deviceCtx->CSSetSamplers(0, BGFX_MAX_COMPUTE_BINDINGS, s_zero.m_sampler);
 		}
 
-		void updateMsaa()
+		void updateMsaa(DXGI_FORMAT _format) const
 		{
 			for (uint32_t ii = 1, last = 0; ii < BX_COUNTOF(s_msaa); ++ii)
 			{
 				uint32_t msaa = s_checkMsaa[ii];
 				uint32_t quality = 0;
-				HRESULT hr = m_device->CheckMultisampleQualityLevels(m_scd.format, msaa, &quality);
+				HRESULT hr = m_device->CheckMultisampleQualityLevels(_format, msaa, &quality);
 
 				if (SUCCEEDED(hr)
 				&&  0 < quality)
@@ -2362,7 +2364,7 @@ namespace bgfx { namespace d3d11
 					}
 					else
 					{
-						updateMsaa();
+						updateMsaa(m_scd.format);
 						m_scd.sampleDesc = s_msaa[(m_resolution.reset&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT];
 
 						DX_RELEASE(m_swapChain, 0);

+ 7 - 6
src/renderer_d3d12.cpp

@@ -847,14 +847,15 @@ namespace bgfx { namespace d3d12
 
 			if (NULL == g_platformData.backBuffer)
 			{
-				updateMsaa();
-
 				bx::memSet(&m_scd, 0, sizeof(m_scd) );
 				m_scd.width  = _init.resolution.width;
 				m_scd.height = _init.resolution.height;
 				m_scd.format = DXGI_FORMAT_R8G8B8A8_UNORM;
 				m_scd.stereo  = false;
-				m_scd.sampleDesc  = s_msaa[(_init.resolution.reset&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT];
+
+				updateMsaa(m_scd.format);
+				m_scd.sampleDesc = s_msaa[(_init.resolution.reset&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT];
+
 				m_scd.bufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
 				m_scd.bufferCount = bx::uint32_min(BX_COUNTOF(m_backBufferColor), 4);
 				m_scd.scaling = 0 == g_platformData.ndt
@@ -1976,7 +1977,7 @@ namespace bgfx { namespace d3d12
 			m_samplerAllocator.reset();
 		}
 
-		void updateMsaa()
+		void updateMsaa(DXGI_FORMAT _format) const
 		{
 			for (uint32_t ii = 1, last = 0; ii < BX_COUNTOF(s_msaa); ++ii)
 			{
@@ -1984,7 +1985,7 @@ namespace bgfx { namespace d3d12
 
 				D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS data;
 				bx::memSet(&data, 0, sizeof(msaa) );
-				data.Format = m_scd.format;
+				data.Format = _format;
 				data.SampleCount = msaa;
 				data.Flags = D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE;
 				HRESULT hr = m_device->CheckFeatureSupport(D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS, &data, sizeof(data) );
@@ -2093,7 +2094,7 @@ namespace bgfx { namespace d3d12
 				}
 				else
 				{
-					updateMsaa();
+					updateMsaa(m_scd.format);
 					m_scd.sampleDesc = s_msaa[(m_resolution.reset&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT];
 
 					DX_RELEASE(m_swapChain, 0);

+ 2 - 2
src/renderer_d3d9.cpp

@@ -1964,7 +1964,7 @@ namespace bgfx { namespace d3d9
 					}
 					else
 					{
-						color = toRgba8(_clear.m_index[0], _clear.m_index[1], _clear.m_index[2], _clear.m_index[3]);
+						color = D3DCOLOR_RGBA(_clear.m_index[0], _clear.m_index[1], _clear.m_index[2], _clear.m_index[3]);
 					}
 
 					flags |= D3DCLEAR_TARGET;
@@ -4074,7 +4074,7 @@ namespace bgfx { namespace d3d9
 							&&  blendFactor != draw.m_rgba)
 							{
 								const uint32_t rgba = draw.m_rgba;
-								D3DCOLOR color = toRgba8(
+								D3DCOLOR color = D3DCOLOR_RGBA(
 									   rgba>>24
 									, (rgba>>16)&0xff
 									, (rgba>> 8)&0xff