Skip to content

Commit b563b96

Browse files
GL backend: fixed issue in 16-bit texture format support detection
1 parent 7af00f9 commit b563b96

File tree

1 file changed

+107
-107
lines changed

1 file changed

+107
-107
lines changed

Graphics/GraphicsEngineOpenGL/src/RenderDeviceGLImpl.cpp

+107-107
Original file line numberDiff line numberDiff line change
@@ -897,12 +897,12 @@ void RenderDeviceGLImpl::InitAdapterInfo()
897897
void RenderDeviceGLImpl::FlagSupportedTexFormats()
898898
{
899899
const auto& DeviceInfo = GetDeviceInfo();
900-
bool bGL33OrAbove = DeviceInfo.Type == RENDER_DEVICE_TYPE_GL && DeviceInfo.APIVersion >= Version{4, 3};
900+
const auto bGL33OrAbove = DeviceInfo.Type == RENDER_DEVICE_TYPE_GL && DeviceInfo.APIVersion >= Version{3, 3};
901901

902-
bool bRGTC = CheckExtension("GL_ARB_texture_compression_rgtc");
903-
bool bBPTC = CheckExtension("GL_ARB_texture_compression_bptc");
904-
bool bS3TC = CheckExtension("GL_EXT_texture_compression_s3tc");
905-
bool bTexNorm16 = CheckExtension("GL_EXT_texture_norm16"); // Only for ES3.1+
902+
const bool bRGTC = CheckExtension("GL_ARB_texture_compression_rgtc");
903+
const bool bBPTC = CheckExtension("GL_ARB_texture_compression_bptc");
904+
const bool bS3TC = CheckExtension("GL_EXT_texture_compression_s3tc");
905+
const bool bTexNorm16 = CheckExtension("GL_EXT_texture_norm16"); // Only for ES3.1+
906906

907907
#define FLAG_FORMAT(Fmt, IsSupported) \
908908
m_TextureFormatsInfo[Fmt].Supported = IsSupported
@@ -911,109 +911,109 @@ void RenderDeviceGLImpl::FlagSupportedTexFormats()
911911
// Note that GLES2.0 does not specify any required formats
912912

913913
// clang-format off
914-
FLAG_FORMAT(TEX_FORMAT_RGBA32_TYPELESS, true );
915-
FLAG_FORMAT(TEX_FORMAT_RGBA32_FLOAT, true );
916-
FLAG_FORMAT(TEX_FORMAT_RGBA32_UINT, true );
917-
FLAG_FORMAT(TEX_FORMAT_RGBA32_SINT, true );
918-
FLAG_FORMAT(TEX_FORMAT_RGB32_TYPELESS, true );
919-
FLAG_FORMAT(TEX_FORMAT_RGB32_FLOAT, true );
920-
FLAG_FORMAT(TEX_FORMAT_RGB32_UINT, true );
921-
FLAG_FORMAT(TEX_FORMAT_RGB32_SINT, true );
922-
FLAG_FORMAT(TEX_FORMAT_RGBA16_TYPELESS, true );
923-
FLAG_FORMAT(TEX_FORMAT_RGBA16_FLOAT, true );
924-
FLAG_FORMAT(TEX_FORMAT_RGBA16_UNORM, bGL33OrAbove || bTexNorm16 );
925-
FLAG_FORMAT(TEX_FORMAT_RGBA16_UINT, true );
926-
FLAG_FORMAT(TEX_FORMAT_RGBA16_SNORM, bGL33OrAbove || bTexNorm16 );
927-
FLAG_FORMAT(TEX_FORMAT_RGBA16_SINT, true );
928-
FLAG_FORMAT(TEX_FORMAT_RG32_TYPELESS, true );
929-
FLAG_FORMAT(TEX_FORMAT_RG32_FLOAT, true );
930-
FLAG_FORMAT(TEX_FORMAT_RG32_UINT, true );
931-
FLAG_FORMAT(TEX_FORMAT_RG32_SINT, true );
932-
FLAG_FORMAT(TEX_FORMAT_R32G8X24_TYPELESS, true );
933-
FLAG_FORMAT(TEX_FORMAT_D32_FLOAT_S8X24_UINT, true );
934-
FLAG_FORMAT(TEX_FORMAT_R32_FLOAT_X8X24_TYPELESS, true );
935-
FLAG_FORMAT(TEX_FORMAT_X32_TYPELESS_G8X24_UINT, false );
936-
FLAG_FORMAT(TEX_FORMAT_RGB10A2_TYPELESS, true );
937-
FLAG_FORMAT(TEX_FORMAT_RGB10A2_UNORM, true );
938-
FLAG_FORMAT(TEX_FORMAT_RGB10A2_UINT, true );
939-
FLAG_FORMAT(TEX_FORMAT_R11G11B10_FLOAT, true );
940-
FLAG_FORMAT(TEX_FORMAT_RGBA8_TYPELESS, true );
941-
FLAG_FORMAT(TEX_FORMAT_RGBA8_UNORM, true );
942-
FLAG_FORMAT(TEX_FORMAT_RGBA8_UNORM_SRGB, true );
943-
FLAG_FORMAT(TEX_FORMAT_RGBA8_UINT, true );
944-
FLAG_FORMAT(TEX_FORMAT_RGBA8_SNORM, true );
945-
FLAG_FORMAT(TEX_FORMAT_RGBA8_SINT, true );
946-
FLAG_FORMAT(TEX_FORMAT_RG16_TYPELESS, true );
947-
FLAG_FORMAT(TEX_FORMAT_RG16_FLOAT, true );
948-
FLAG_FORMAT(TEX_FORMAT_RG16_UNORM, bGL33OrAbove || bTexNorm16 );
949-
FLAG_FORMAT(TEX_FORMAT_RG16_UINT, true );
950-
FLAG_FORMAT(TEX_FORMAT_RG16_SNORM, bGL33OrAbove || bTexNorm16 );
951-
FLAG_FORMAT(TEX_FORMAT_RG16_SINT, true );
952-
FLAG_FORMAT(TEX_FORMAT_R32_TYPELESS, true );
953-
FLAG_FORMAT(TEX_FORMAT_D32_FLOAT, true );
954-
FLAG_FORMAT(TEX_FORMAT_R32_FLOAT, true );
955-
FLAG_FORMAT(TEX_FORMAT_R32_UINT, true );
956-
FLAG_FORMAT(TEX_FORMAT_R32_SINT, true );
957-
FLAG_FORMAT(TEX_FORMAT_R24G8_TYPELESS, true );
958-
FLAG_FORMAT(TEX_FORMAT_D24_UNORM_S8_UINT, true );
959-
FLAG_FORMAT(TEX_FORMAT_R24_UNORM_X8_TYPELESS, true );
960-
FLAG_FORMAT(TEX_FORMAT_X24_TYPELESS_G8_UINT, false );
961-
FLAG_FORMAT(TEX_FORMAT_RG8_TYPELESS, true );
962-
FLAG_FORMAT(TEX_FORMAT_RG8_UNORM, true );
963-
FLAG_FORMAT(TEX_FORMAT_RG8_UINT, true );
964-
FLAG_FORMAT(TEX_FORMAT_RG8_SNORM, true );
965-
FLAG_FORMAT(TEX_FORMAT_RG8_SINT, true );
966-
FLAG_FORMAT(TEX_FORMAT_R16_TYPELESS, true );
967-
FLAG_FORMAT(TEX_FORMAT_R16_FLOAT, true );
968-
FLAG_FORMAT(TEX_FORMAT_D16_UNORM, true );
969-
FLAG_FORMAT(TEX_FORMAT_R16_UNORM, bGL33OrAbove || bTexNorm16 );
970-
FLAG_FORMAT(TEX_FORMAT_R16_UINT, true );
971-
FLAG_FORMAT(TEX_FORMAT_R16_SNORM, bGL33OrAbove || bTexNorm16 );
972-
FLAG_FORMAT(TEX_FORMAT_R16_SINT, true );
973-
FLAG_FORMAT(TEX_FORMAT_R8_TYPELESS, true );
974-
FLAG_FORMAT(TEX_FORMAT_R8_UNORM, true );
975-
FLAG_FORMAT(TEX_FORMAT_R8_UINT, true );
976-
FLAG_FORMAT(TEX_FORMAT_R8_SNORM, true );
977-
FLAG_FORMAT(TEX_FORMAT_R8_SINT, true );
978-
FLAG_FORMAT(TEX_FORMAT_A8_UNORM, false ); // Not supported in OpenGL
979-
FLAG_FORMAT(TEX_FORMAT_R1_UNORM, false ); // Not supported in OpenGL
980-
FLAG_FORMAT(TEX_FORMAT_RGB9E5_SHAREDEXP, true );
981-
FLAG_FORMAT(TEX_FORMAT_RG8_B8G8_UNORM, false ); // Not supported in OpenGL
982-
FLAG_FORMAT(TEX_FORMAT_G8R8_G8B8_UNORM, false ); // Not supported in OpenGL
983-
984-
FLAG_FORMAT(TEX_FORMAT_BC1_TYPELESS, bS3TC );
985-
FLAG_FORMAT(TEX_FORMAT_BC1_UNORM, bS3TC );
986-
FLAG_FORMAT(TEX_FORMAT_BC1_UNORM_SRGB, bS3TC );
987-
FLAG_FORMAT(TEX_FORMAT_BC2_TYPELESS, bS3TC );
988-
FLAG_FORMAT(TEX_FORMAT_BC2_UNORM, bS3TC );
989-
FLAG_FORMAT(TEX_FORMAT_BC2_UNORM_SRGB, bS3TC );
990-
FLAG_FORMAT(TEX_FORMAT_BC3_TYPELESS, bS3TC );
991-
FLAG_FORMAT(TEX_FORMAT_BC3_UNORM, bS3TC );
992-
FLAG_FORMAT(TEX_FORMAT_BC3_UNORM_SRGB, bS3TC );
993-
994-
FLAG_FORMAT(TEX_FORMAT_BC4_TYPELESS, bRGTC );
995-
FLAG_FORMAT(TEX_FORMAT_BC4_UNORM, bRGTC );
996-
FLAG_FORMAT(TEX_FORMAT_BC4_SNORM, bRGTC );
997-
FLAG_FORMAT(TEX_FORMAT_BC5_TYPELESS, bRGTC );
998-
FLAG_FORMAT(TEX_FORMAT_BC5_UNORM, bRGTC );
999-
FLAG_FORMAT(TEX_FORMAT_BC5_SNORM, bRGTC );
1000-
1001-
FLAG_FORMAT(TEX_FORMAT_B5G6R5_UNORM, false ); // Not supported in OpenGL
1002-
FLAG_FORMAT(TEX_FORMAT_B5G5R5A1_UNORM, false ); // Not supported in OpenGL
1003-
FLAG_FORMAT(TEX_FORMAT_BGRA8_UNORM, false ); // Not supported in OpenGL
1004-
FLAG_FORMAT(TEX_FORMAT_BGRX8_UNORM, false ); // Not supported in OpenGL
1005-
FLAG_FORMAT(TEX_FORMAT_R10G10B10_XR_BIAS_A2_UNORM, false ); // Not supported in OpenGL
1006-
FLAG_FORMAT(TEX_FORMAT_BGRA8_TYPELESS, false ); // Not supported in OpenGL
1007-
FLAG_FORMAT(TEX_FORMAT_BGRA8_UNORM_SRGB, false ); // Not supported in OpenGL
1008-
FLAG_FORMAT(TEX_FORMAT_BGRX8_TYPELESS, false ); // Not supported in OpenGL
1009-
FLAG_FORMAT(TEX_FORMAT_BGRX8_UNORM_SRGB, false ); // Not supported in OpenGL
914+
FLAG_FORMAT(TEX_FORMAT_RGBA32_TYPELESS, true);
915+
FLAG_FORMAT(TEX_FORMAT_RGBA32_FLOAT, true);
916+
FLAG_FORMAT(TEX_FORMAT_RGBA32_UINT, true);
917+
FLAG_FORMAT(TEX_FORMAT_RGBA32_SINT, true);
918+
FLAG_FORMAT(TEX_FORMAT_RGB32_TYPELESS, true);
919+
FLAG_FORMAT(TEX_FORMAT_RGB32_FLOAT, true);
920+
FLAG_FORMAT(TEX_FORMAT_RGB32_UINT, true);
921+
FLAG_FORMAT(TEX_FORMAT_RGB32_SINT, true);
922+
FLAG_FORMAT(TEX_FORMAT_RGBA16_TYPELESS, true);
923+
FLAG_FORMAT(TEX_FORMAT_RGBA16_FLOAT, true);
924+
FLAG_FORMAT(TEX_FORMAT_RGBA16_UNORM, bGL33OrAbove || bTexNorm16);
925+
FLAG_FORMAT(TEX_FORMAT_RGBA16_UINT, true);
926+
FLAG_FORMAT(TEX_FORMAT_RGBA16_SNORM, bGL33OrAbove || bTexNorm16);
927+
FLAG_FORMAT(TEX_FORMAT_RGBA16_SINT, true);
928+
FLAG_FORMAT(TEX_FORMAT_RG32_TYPELESS, true);
929+
FLAG_FORMAT(TEX_FORMAT_RG32_FLOAT, true);
930+
FLAG_FORMAT(TEX_FORMAT_RG32_UINT, true);
931+
FLAG_FORMAT(TEX_FORMAT_RG32_SINT, true);
932+
FLAG_FORMAT(TEX_FORMAT_R32G8X24_TYPELESS, true);
933+
FLAG_FORMAT(TEX_FORMAT_D32_FLOAT_S8X24_UINT, true);
934+
FLAG_FORMAT(TEX_FORMAT_R32_FLOAT_X8X24_TYPELESS, true);
935+
FLAG_FORMAT(TEX_FORMAT_X32_TYPELESS_G8X24_UINT, false);
936+
FLAG_FORMAT(TEX_FORMAT_RGB10A2_TYPELESS, true);
937+
FLAG_FORMAT(TEX_FORMAT_RGB10A2_UNORM, true);
938+
FLAG_FORMAT(TEX_FORMAT_RGB10A2_UINT, true);
939+
FLAG_FORMAT(TEX_FORMAT_R11G11B10_FLOAT, true);
940+
FLAG_FORMAT(TEX_FORMAT_RGBA8_TYPELESS, true);
941+
FLAG_FORMAT(TEX_FORMAT_RGBA8_UNORM, true);
942+
FLAG_FORMAT(TEX_FORMAT_RGBA8_UNORM_SRGB, true);
943+
FLAG_FORMAT(TEX_FORMAT_RGBA8_UINT, true);
944+
FLAG_FORMAT(TEX_FORMAT_RGBA8_SNORM, true);
945+
FLAG_FORMAT(TEX_FORMAT_RGBA8_SINT, true);
946+
FLAG_FORMAT(TEX_FORMAT_RG16_TYPELESS, true);
947+
FLAG_FORMAT(TEX_FORMAT_RG16_FLOAT, true);
948+
FLAG_FORMAT(TEX_FORMAT_RG16_UNORM, bGL33OrAbove || bTexNorm16);
949+
FLAG_FORMAT(TEX_FORMAT_RG16_UINT, true);
950+
FLAG_FORMAT(TEX_FORMAT_RG16_SNORM, bGL33OrAbove || bTexNorm16);
951+
FLAG_FORMAT(TEX_FORMAT_RG16_SINT, true);
952+
FLAG_FORMAT(TEX_FORMAT_R32_TYPELESS, true);
953+
FLAG_FORMAT(TEX_FORMAT_D32_FLOAT, true);
954+
FLAG_FORMAT(TEX_FORMAT_R32_FLOAT, true);
955+
FLAG_FORMAT(TEX_FORMAT_R32_UINT, true);
956+
FLAG_FORMAT(TEX_FORMAT_R32_SINT, true);
957+
FLAG_FORMAT(TEX_FORMAT_R24G8_TYPELESS, true);
958+
FLAG_FORMAT(TEX_FORMAT_D24_UNORM_S8_UINT, true);
959+
FLAG_FORMAT(TEX_FORMAT_R24_UNORM_X8_TYPELESS, true);
960+
FLAG_FORMAT(TEX_FORMAT_X24_TYPELESS_G8_UINT, false);
961+
FLAG_FORMAT(TEX_FORMAT_RG8_TYPELESS, true);
962+
FLAG_FORMAT(TEX_FORMAT_RG8_UNORM, true);
963+
FLAG_FORMAT(TEX_FORMAT_RG8_UINT, true);
964+
FLAG_FORMAT(TEX_FORMAT_RG8_SNORM, true);
965+
FLAG_FORMAT(TEX_FORMAT_RG8_SINT, true);
966+
FLAG_FORMAT(TEX_FORMAT_R16_TYPELESS, true);
967+
FLAG_FORMAT(TEX_FORMAT_R16_FLOAT, true);
968+
FLAG_FORMAT(TEX_FORMAT_D16_UNORM, true);
969+
FLAG_FORMAT(TEX_FORMAT_R16_UNORM, bGL33OrAbove || bTexNorm16);
970+
FLAG_FORMAT(TEX_FORMAT_R16_UINT, true);
971+
FLAG_FORMAT(TEX_FORMAT_R16_SNORM, bGL33OrAbove || bTexNorm16);
972+
FLAG_FORMAT(TEX_FORMAT_R16_SINT, true);
973+
FLAG_FORMAT(TEX_FORMAT_R8_TYPELESS, true);
974+
FLAG_FORMAT(TEX_FORMAT_R8_UNORM, true);
975+
FLAG_FORMAT(TEX_FORMAT_R8_UINT, true);
976+
FLAG_FORMAT(TEX_FORMAT_R8_SNORM, true);
977+
FLAG_FORMAT(TEX_FORMAT_R8_SINT, true);
978+
FLAG_FORMAT(TEX_FORMAT_A8_UNORM, false); // Not supported in OpenGL
979+
FLAG_FORMAT(TEX_FORMAT_R1_UNORM, false); // Not supported in OpenGL
980+
FLAG_FORMAT(TEX_FORMAT_RGB9E5_SHAREDEXP, true);
981+
FLAG_FORMAT(TEX_FORMAT_RG8_B8G8_UNORM, false); // Not supported in OpenGL
982+
FLAG_FORMAT(TEX_FORMAT_G8R8_G8B8_UNORM, false); // Not supported in OpenGL
983+
984+
FLAG_FORMAT(TEX_FORMAT_BC1_TYPELESS, bS3TC);
985+
FLAG_FORMAT(TEX_FORMAT_BC1_UNORM, bS3TC);
986+
FLAG_FORMAT(TEX_FORMAT_BC1_UNORM_SRGB, bS3TC);
987+
FLAG_FORMAT(TEX_FORMAT_BC2_TYPELESS, bS3TC);
988+
FLAG_FORMAT(TEX_FORMAT_BC2_UNORM, bS3TC);
989+
FLAG_FORMAT(TEX_FORMAT_BC2_UNORM_SRGB, bS3TC);
990+
FLAG_FORMAT(TEX_FORMAT_BC3_TYPELESS, bS3TC);
991+
FLAG_FORMAT(TEX_FORMAT_BC3_UNORM, bS3TC);
992+
FLAG_FORMAT(TEX_FORMAT_BC3_UNORM_SRGB, bS3TC);
993+
994+
FLAG_FORMAT(TEX_FORMAT_BC4_TYPELESS, bRGTC);
995+
FLAG_FORMAT(TEX_FORMAT_BC4_UNORM, bRGTC);
996+
FLAG_FORMAT(TEX_FORMAT_BC4_SNORM, bRGTC);
997+
FLAG_FORMAT(TEX_FORMAT_BC5_TYPELESS, bRGTC);
998+
FLAG_FORMAT(TEX_FORMAT_BC5_UNORM, bRGTC);
999+
FLAG_FORMAT(TEX_FORMAT_BC5_SNORM, bRGTC);
1000+
1001+
FLAG_FORMAT(TEX_FORMAT_B5G6R5_UNORM, false); // Not supported in OpenGL
1002+
FLAG_FORMAT(TEX_FORMAT_B5G5R5A1_UNORM, false); // Not supported in OpenGL
1003+
FLAG_FORMAT(TEX_FORMAT_BGRA8_UNORM, false); // Not supported in OpenGL
1004+
FLAG_FORMAT(TEX_FORMAT_BGRX8_UNORM, false); // Not supported in OpenGL
1005+
FLAG_FORMAT(TEX_FORMAT_R10G10B10_XR_BIAS_A2_UNORM, false); // Not supported in OpenGL
1006+
FLAG_FORMAT(TEX_FORMAT_BGRA8_TYPELESS, false); // Not supported in OpenGL
1007+
FLAG_FORMAT(TEX_FORMAT_BGRA8_UNORM_SRGB, false); // Not supported in OpenGL
1008+
FLAG_FORMAT(TEX_FORMAT_BGRX8_TYPELESS, false); // Not supported in OpenGL
1009+
FLAG_FORMAT(TEX_FORMAT_BGRX8_UNORM_SRGB, false); // Not supported in OpenGL
10101010

1011-
FLAG_FORMAT(TEX_FORMAT_BC6H_TYPELESS, bBPTC );
1012-
FLAG_FORMAT(TEX_FORMAT_BC6H_UF16, bBPTC );
1013-
FLAG_FORMAT(TEX_FORMAT_BC6H_SF16, bBPTC );
1014-
FLAG_FORMAT(TEX_FORMAT_BC7_TYPELESS, bBPTC );
1015-
FLAG_FORMAT(TEX_FORMAT_BC7_UNORM, bBPTC );
1016-
FLAG_FORMAT(TEX_FORMAT_BC7_UNORM_SRGB, bBPTC );
1011+
FLAG_FORMAT(TEX_FORMAT_BC6H_TYPELESS, bBPTC);
1012+
FLAG_FORMAT(TEX_FORMAT_BC6H_UF16, bBPTC);
1013+
FLAG_FORMAT(TEX_FORMAT_BC6H_SF16, bBPTC);
1014+
FLAG_FORMAT(TEX_FORMAT_BC7_TYPELESS, bBPTC);
1015+
FLAG_FORMAT(TEX_FORMAT_BC7_UNORM, bBPTC);
1016+
FLAG_FORMAT(TEX_FORMAT_BC7_UNORM_SRGB, bBPTC);
10171017
// clang-format on
10181018

10191019
#ifdef DILIGENT_DEBUG

0 commit comments

Comments
 (0)