Explorar el Código

D3D11: Handle CheckFeatureSupport gracefully,

Branimir Karadžić hace 10 años
padre
commit
d67a940802
Se han modificado 1 ficheros con 26 adiciones y 20 borrados
  1. 26 20
      src/renderer_d3d11.cpp

+ 26 - 20
src/renderer_d3d11.cpp

@@ -201,8 +201,7 @@ namespace bgfx
 		{ DXGI_FORMAT_UNKNOWN,            DXGI_FORMAT_UNKNOWN,               DXGI_FORMAT_UNKNOWN           }, // PTC22
 		{ DXGI_FORMAT_UNKNOWN,            DXGI_FORMAT_UNKNOWN,               DXGI_FORMAT_UNKNOWN           }, // PTC24
 		{ DXGI_FORMAT_UNKNOWN,            DXGI_FORMAT_UNKNOWN,               DXGI_FORMAT_UNKNOWN           }, // Unknown
-		{ DXGI_FORMAT_UNKNOWN,            DXGI_FORMAT_UNKNOWN,               DXGI_FORMAT_UNKNOWN           }, // R1
-//		{ DXGI_FORMAT_R1_UNORM,           DXGI_FORMAT_R1_UNORM,              DXGI_FORMAT_UNKNOWN           }, // R1
+		{ DXGI_FORMAT_R1_UNORM,           DXGI_FORMAT_R1_UNORM,              DXGI_FORMAT_UNKNOWN           }, // R1
 		{ DXGI_FORMAT_R8_UNORM,           DXGI_FORMAT_R8_UNORM,              DXGI_FORMAT_UNKNOWN           }, // R8
 		{ DXGI_FORMAT_R16_UNORM,          DXGI_FORMAT_R16_UNORM,             DXGI_FORMAT_UNKNOWN           }, // R16
 		{ DXGI_FORMAT_R16_FLOAT,          DXGI_FORMAT_R16_FLOAT,             DXGI_FORMAT_UNKNOWN           }, // R16F
@@ -735,24 +734,31 @@ namespace bgfx
 				{
 					D3D11_FEATURE_DATA_FORMAT_SUPPORT data; // D3D11_FEATURE_DATA_FORMAT_SUPPORT2
 					data.InFormat = s_textureFormat[ii].m_fmt;
-					DX_CHECK(m_device->CheckFeatureSupport(D3D11_FEATURE_FORMAT_SUPPORT, &data, sizeof(data) ) );
-					support |= 0 != (data.OutFormatSupport & (0
-							| D3D11_FORMAT_SUPPORT_TEXTURE2D
-							| D3D11_FORMAT_SUPPORT_TEXTURE3D
-							| D3D11_FORMAT_SUPPORT_TEXTURECUBE
-							) )
-							? BGFX_CAPS_FORMAT_TEXTURE_COLOR
-							: BGFX_CAPS_FORMAT_TEXTURE_NONE
-							;
-
-					support |= 0 != (data.OutFormatSupport & (0
-							| D3D11_FORMAT_SUPPORT_BUFFER
-							| D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER
-							| D3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER
-							) )
-							? BGFX_CAPS_FORMAT_TEXTURE_VERTEX
-							: BGFX_CAPS_FORMAT_TEXTURE_NONE
-							;
+					HRESULT hr = m_device->CheckFeatureSupport(D3D11_FEATURE_FORMAT_SUPPORT, &data, sizeof(data) );
+					if (SUCCEEDED(hr) )
+					{
+						support |= 0 != (data.OutFormatSupport & (0
+								| D3D11_FORMAT_SUPPORT_TEXTURE2D
+								| D3D11_FORMAT_SUPPORT_TEXTURE3D
+								| D3D11_FORMAT_SUPPORT_TEXTURECUBE
+								) )
+								? BGFX_CAPS_FORMAT_TEXTURE_COLOR
+								: BGFX_CAPS_FORMAT_TEXTURE_NONE
+								;
+
+						support |= 0 != (data.OutFormatSupport & (0
+								| D3D11_FORMAT_SUPPORT_BUFFER
+								| D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER
+								| D3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER
+								) )
+								? BGFX_CAPS_FORMAT_TEXTURE_VERTEX
+								: BGFX_CAPS_FORMAT_TEXTURE_NONE
+								;
+					}
+					else
+					{
+						BX_TRACE("CheckFeatureSupport failed with %x for format %s.", hr, getName(TextureFormat::Enum(ii) ) );
+					}
 				}
 
 				g_caps.formats[ii] = support;