2
0
Эх сурвалжийг харах

D3D11: Texture format caps.

Branimir Karadžić 10 жил өмнө
parent
commit
441e674459

+ 29 - 2
src/renderer_d3d11.cpp

@@ -201,7 +201,8 @@ namespace bgfx
 		{ DXGI_FORMAT_UNKNOWN,            DXGI_FORMAT_UNKNOWN,               DXGI_FORMAT_UNKNOWN           }, // PTC22
 		{ 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           }, // PTC24
 		{ DXGI_FORMAT_UNKNOWN,            DXGI_FORMAT_UNKNOWN,               DXGI_FORMAT_UNKNOWN           }, // Unknown
 		{ DXGI_FORMAT_UNKNOWN,            DXGI_FORMAT_UNKNOWN,               DXGI_FORMAT_UNKNOWN           }, // Unknown
-		{ DXGI_FORMAT_R1_UNORM,           DXGI_FORMAT_R1_UNORM,              DXGI_FORMAT_UNKNOWN           }, // R1
+		{ DXGI_FORMAT_UNKNOWN,            DXGI_FORMAT_UNKNOWN,               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_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_UNORM,          DXGI_FORMAT_R16_UNORM,             DXGI_FORMAT_UNKNOWN           }, // R16
 		{ DXGI_FORMAT_R16_FLOAT,          DXGI_FORMAT_R16_FLOAT,             DXGI_FORMAT_UNKNOWN           }, // R16F
 		{ DXGI_FORMAT_R16_FLOAT,          DXGI_FORMAT_R16_FLOAT,             DXGI_FORMAT_UNKNOWN           }, // R16F
@@ -728,7 +729,33 @@ namespace bgfx
 
 
 			for (uint32_t ii = 0; ii < TextureFormat::Count; ++ii)
 			for (uint32_t ii = 0; ii < TextureFormat::Count; ++ii)
 			{
 			{
-				g_caps.formats[ii] = DXGI_FORMAT_UNKNOWN == s_textureFormat[ii].m_fmt ? 0 : 1;
+				uint8_t support = BGFX_CAPS_FORMAT_TEXTURE_NONE;
+
+				if (DXGI_FORMAT_UNKNOWN != s_textureFormat[ii].m_fmt)
+				{
+					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_TEXTURE3D
+							| 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
+							;
+				}
+
+				g_caps.formats[ii] = support;
 			}
 			}
 
 
 			// Init reserved part of view name.
 			// Init reserved part of view name.