Commit ba29fa47 by Jamie Madill Committed by Commit Bot

Reduce binary size with format enum arrays.

Apparently using std::vector::push_back causes heavy inlining in MSVS. This refactor (no functionality change) reduces the binary size from ~10kb for all the gl::Determine* functions plus the holding function (setTextureExtensionSupport) to about 1.4k. The visible size of my compiled 32-bit Release libGLESv2.dll went from 4648 to 4642 kb. Note that using PoD arrays was sinificantly better than using vectors with initializer lists (size was ~4kb instead vs 1.4kb). BUG=angleproject:2022 Change-Id: I5b7efd41455d5ee35afc699bafef31ce8367934e Reviewed-on: https://chromium-review.googlesource.com/493890Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 193c0950
...@@ -244,10 +244,14 @@ Limitations::Limitations() ...@@ -244,10 +244,14 @@ Limitations::Limitations()
{ {
} }
static bool GetFormatSupport(const TextureCapsMap &textureCaps, const std::vector<GLenum> &requiredFormats, static bool GetFormatSupportBase(const TextureCapsMap &textureCaps,
bool requiresTexturing, bool requiresFiltering, bool requiresRendering) const GLenum *requiredFormats,
size_t requiredFormatsSize,
bool requiresTexturing,
bool requiresFiltering,
bool requiresRendering)
{ {
for (size_t i = 0; i < requiredFormats.size(); i++) for (size_t i = 0; i < requiredFormatsSize; i++)
{ {
const TextureCaps &cap = textureCaps.get(requiredFormats[i]); const TextureCaps &cap = textureCaps.get(requiredFormats[i]);
...@@ -270,11 +274,23 @@ static bool GetFormatSupport(const TextureCapsMap &textureCaps, const std::vecto ...@@ -270,11 +274,23 @@ static bool GetFormatSupport(const TextureCapsMap &textureCaps, const std::vecto
return true; return true;
} }
template <size_t N>
static bool GetFormatSupport(const TextureCapsMap &textureCaps,
const GLenum (&requiredFormats)[N],
bool requiresTexturing,
bool requiresFiltering,
bool requiresRendering)
{
return GetFormatSupportBase(textureCaps, requiredFormats, N, requiresTexturing,
requiresFiltering, requiresRendering);
}
// Check for GL_OES_packed_depth_stencil // Check for GL_OES_packed_depth_stencil
static bool DeterminePackedDepthStencilSupport(const TextureCapsMap &textureCaps) static bool DeterminePackedDepthStencilSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_DEPTH24_STENCIL8); GL_DEPTH24_STENCIL8,
};
return GetFormatSupport(textureCaps, requiredFormats, false, false, true); return GetFormatSupport(textureCaps, requiredFormats, false, false, true);
} }
...@@ -282,9 +298,9 @@ static bool DeterminePackedDepthStencilSupport(const TextureCapsMap &textureCaps ...@@ -282,9 +298,9 @@ static bool DeterminePackedDepthStencilSupport(const TextureCapsMap &textureCaps
// Checks for GL_OES_rgb8_rgba8 support // Checks for GL_OES_rgb8_rgba8 support
static bool DetermineRGB8AndRGBA8TextureSupport(const TextureCapsMap &textureCaps) static bool DetermineRGB8AndRGBA8TextureSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_RGB8); GL_RGB8, GL_RGBA8,
requiredFormats.push_back(GL_RGBA8); };
return GetFormatSupport(textureCaps, requiredFormats, true, true, true); return GetFormatSupport(textureCaps, requiredFormats, true, true, true);
} }
...@@ -292,8 +308,9 @@ static bool DetermineRGB8AndRGBA8TextureSupport(const TextureCapsMap &textureCap ...@@ -292,8 +308,9 @@ static bool DetermineRGB8AndRGBA8TextureSupport(const TextureCapsMap &textureCap
// Checks for GL_EXT_texture_format_BGRA8888 support // Checks for GL_EXT_texture_format_BGRA8888 support
static bool DetermineBGRA8TextureSupport(const TextureCapsMap &textureCaps) static bool DetermineBGRA8TextureSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_BGRA8_EXT); GL_BGRA8_EXT,
};
return GetFormatSupport(textureCaps, requiredFormats, true, true, true); return GetFormatSupport(textureCaps, requiredFormats, true, true, true);
} }
...@@ -301,11 +318,9 @@ static bool DetermineBGRA8TextureSupport(const TextureCapsMap &textureCaps) ...@@ -301,11 +318,9 @@ static bool DetermineBGRA8TextureSupport(const TextureCapsMap &textureCaps)
// Checks for GL_OES_color_buffer_half_float support // Checks for GL_OES_color_buffer_half_float support
static bool DetermineColorBufferHalfFloatSupport(const TextureCapsMap &textureCaps) static bool DetermineColorBufferHalfFloatSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_RGBA16F); GL_RGBA16F, GL_RGB16F, GL_RG16F, GL_R16F,
requiredFormats.push_back(GL_RGB16F); };
requiredFormats.push_back(GL_RG16F);
requiredFormats.push_back(GL_R16F);
return GetFormatSupport(textureCaps, requiredFormats, true, false, true); return GetFormatSupport(textureCaps, requiredFormats, true, false, true);
} }
...@@ -313,9 +328,9 @@ static bool DetermineColorBufferHalfFloatSupport(const TextureCapsMap &textureCa ...@@ -313,9 +328,9 @@ static bool DetermineColorBufferHalfFloatSupport(const TextureCapsMap &textureCa
// Checks for GL_OES_texture_half_float support // Checks for GL_OES_texture_half_float support
static bool DetermineHalfFloatTextureSupport(const TextureCapsMap &textureCaps) static bool DetermineHalfFloatTextureSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_RGB16F); GL_RGB16F, GL_RGBA16F,
requiredFormats.push_back(GL_RGBA16F); };
return GetFormatSupport(textureCaps, requiredFormats, true, false, true); return GetFormatSupport(textureCaps, requiredFormats, true, false, true);
} }
...@@ -323,9 +338,9 @@ static bool DetermineHalfFloatTextureSupport(const TextureCapsMap &textureCaps) ...@@ -323,9 +338,9 @@ static bool DetermineHalfFloatTextureSupport(const TextureCapsMap &textureCaps)
// Checks for GL_OES_texture_half_float_linear support // Checks for GL_OES_texture_half_float_linear support
static bool DetermineHalfFloatTextureFilteringSupport(const TextureCapsMap &textureCaps) static bool DetermineHalfFloatTextureFilteringSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_RGB16F); GL_RGB16F, GL_RGBA16F,
requiredFormats.push_back(GL_RGBA16F); };
return DetermineHalfFloatTextureSupport(textureCaps) && return DetermineHalfFloatTextureSupport(textureCaps) &&
GetFormatSupport(textureCaps, requiredFormats, true, true, false); GetFormatSupport(textureCaps, requiredFormats, true, true, false);
...@@ -334,9 +349,9 @@ static bool DetermineHalfFloatTextureFilteringSupport(const TextureCapsMap &text ...@@ -334,9 +349,9 @@ static bool DetermineHalfFloatTextureFilteringSupport(const TextureCapsMap &text
// Checks for GL_OES_texture_float support // Checks for GL_OES_texture_float support
static bool DetermineFloatTextureSupport(const TextureCapsMap &textureCaps) static bool DetermineFloatTextureSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_RGB32F); GL_RGB32F, GL_RGBA32F,
requiredFormats.push_back(GL_RGBA32F); };
return GetFormatSupport(textureCaps, requiredFormats, true, false, true); return GetFormatSupport(textureCaps, requiredFormats, true, false, true);
} }
...@@ -344,40 +359,55 @@ static bool DetermineFloatTextureSupport(const TextureCapsMap &textureCaps) ...@@ -344,40 +359,55 @@ static bool DetermineFloatTextureSupport(const TextureCapsMap &textureCaps)
// Checks for GL_OES_texture_float_linear support // Checks for GL_OES_texture_float_linear support
static bool DetermineFloatTextureFilteringSupport(const TextureCapsMap &textureCaps) static bool DetermineFloatTextureFilteringSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_RGB32F); GL_RGB32F, GL_RGBA32F,
requiredFormats.push_back(GL_RGBA32F); };
return DetermineFloatTextureSupport(textureCaps) && return DetermineFloatTextureSupport(textureCaps) &&
GetFormatSupport(textureCaps, requiredFormats, true, true, false); GetFormatSupport(textureCaps, requiredFormats, true, true, false);
} }
// Checks for GL_EXT_texture_rg support // Checks for GL_EXT_texture_rg support
static bool DetermineRGHalfFloatTextureSupport(const TextureCapsMap &textureCaps)
{
constexpr GLenum requiredFormats[] = {
GL_R16F, GL_RG16F,
};
return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
}
static bool DetermineRGFloatTextureSupport(const TextureCapsMap &textureCaps)
{
constexpr GLenum requiredFormats[] = {
GL_R32F, GL_RG32F,
};
return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
}
static bool DetermineRGTextureSupport(const TextureCapsMap &textureCaps, bool checkHalfFloatFormats, bool checkFloatFormats) static bool DetermineRGTextureSupport(const TextureCapsMap &textureCaps, bool checkHalfFloatFormats, bool checkFloatFormats)
{ {
std::vector<GLenum> requiredFormats; if (checkHalfFloatFormats && !DetermineRGHalfFloatTextureSupport(textureCaps))
requiredFormats.push_back(GL_R8);
requiredFormats.push_back(GL_RG8);
if (checkHalfFloatFormats)
{ {
requiredFormats.push_back(GL_R16F); return false;
requiredFormats.push_back(GL_RG16F);
} }
if (checkFloatFormats)
if (checkFloatFormats && !DetermineRGFloatTextureSupport(textureCaps))
{ {
requiredFormats.push_back(GL_R32F); return false;
requiredFormats.push_back(GL_RG32F);
} }
constexpr GLenum requiredFormats[] = {
GL_R8, GL_RG8,
};
return GetFormatSupport(textureCaps, requiredFormats, true, true, false); return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
} }
// Check for GL_EXT_texture_compression_dxt1 // Check for GL_EXT_texture_compression_dxt1
static bool DetermineDXT1TextureSupport(const TextureCapsMap &textureCaps) static bool DetermineDXT1TextureSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_COMPRESSED_RGB_S3TC_DXT1_EXT); GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
requiredFormats.push_back(GL_COMPRESSED_RGBA_S3TC_DXT1_EXT); };
return GetFormatSupport(textureCaps, requiredFormats, true, true, false); return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
} }
...@@ -385,8 +415,9 @@ static bool DetermineDXT1TextureSupport(const TextureCapsMap &textureCaps) ...@@ -385,8 +415,9 @@ static bool DetermineDXT1TextureSupport(const TextureCapsMap &textureCaps)
// Check for GL_ANGLE_texture_compression_dxt3 // Check for GL_ANGLE_texture_compression_dxt3
static bool DetermineDXT3TextureSupport(const TextureCapsMap &textureCaps) static bool DetermineDXT3TextureSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE); GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE,
};
return GetFormatSupport(textureCaps, requiredFormats, true, true, false); return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
} }
...@@ -394,8 +425,9 @@ static bool DetermineDXT3TextureSupport(const TextureCapsMap &textureCaps) ...@@ -394,8 +425,9 @@ static bool DetermineDXT3TextureSupport(const TextureCapsMap &textureCaps)
// Check for GL_ANGLE_texture_compression_dxt5 // Check for GL_ANGLE_texture_compression_dxt5
static bool DetermineDXT5TextureSupport(const TextureCapsMap &textureCaps) static bool DetermineDXT5TextureSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE); GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE,
};
return GetFormatSupport(textureCaps, requiredFormats, true, true, false); return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
} }
...@@ -403,11 +435,10 @@ static bool DetermineDXT5TextureSupport(const TextureCapsMap &textureCaps) ...@@ -403,11 +435,10 @@ static bool DetermineDXT5TextureSupport(const TextureCapsMap &textureCaps)
// Check for GL_EXT_texture_compression_s3tc_srgb // Check for GL_EXT_texture_compression_s3tc_srgb
static bool DetermineS3TCsRGBTextureSupport(const TextureCapsMap &textureCaps) static bool DetermineS3TCsRGBTextureSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_COMPRESSED_SRGB_S3TC_DXT1_EXT); GL_COMPRESSED_SRGB_S3TC_DXT1_EXT, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,
requiredFormats.push_back(GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT); GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,
requiredFormats.push_back(GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT); };
requiredFormats.push_back(GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT);
return GetFormatSupport(textureCaps, requiredFormats, true, true, false); return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
} }
...@@ -415,35 +446,22 @@ static bool DetermineS3TCsRGBTextureSupport(const TextureCapsMap &textureCaps) ...@@ -415,35 +446,22 @@ static bool DetermineS3TCsRGBTextureSupport(const TextureCapsMap &textureCaps)
// Check for GL_KHR_texture_compression_astc_hdr and GL_KHR_texture_compression_astc_ldr // Check for GL_KHR_texture_compression_astc_hdr and GL_KHR_texture_compression_astc_ldr
static bool DetermineASTCTextureSupport(const TextureCapsMap &textureCaps) static bool DetermineASTCTextureSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_4x4_KHR); GL_COMPRESSED_RGBA_ASTC_4x4_KHR, GL_COMPRESSED_RGBA_ASTC_5x4_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_5x4_KHR); GL_COMPRESSED_RGBA_ASTC_5x5_KHR, GL_COMPRESSED_RGBA_ASTC_6x5_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_5x5_KHR); GL_COMPRESSED_RGBA_ASTC_6x6_KHR, GL_COMPRESSED_RGBA_ASTC_8x5_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_6x5_KHR); GL_COMPRESSED_RGBA_ASTC_8x6_KHR, GL_COMPRESSED_RGBA_ASTC_8x8_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_6x6_KHR); GL_COMPRESSED_RGBA_ASTC_10x5_KHR, GL_COMPRESSED_RGBA_ASTC_10x6_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_8x5_KHR); GL_COMPRESSED_RGBA_ASTC_10x8_KHR, GL_COMPRESSED_RGBA_ASTC_10x10_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_8x6_KHR); GL_COMPRESSED_RGBA_ASTC_12x10_KHR, GL_COMPRESSED_RGBA_ASTC_12x12_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_8x8_KHR); GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_10x5_KHR); GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_10x6_KHR); GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_10x8_KHR); GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_10x10_KHR); GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_12x10_KHR); GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
requiredFormats.push_back(GL_COMPRESSED_RGBA_ASTC_12x12_KHR); GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR); };
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR);
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR);
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR);
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR);
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR);
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR);
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR);
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR);
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR);
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR);
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR);
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR);
requiredFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR);
return GetFormatSupport(textureCaps, requiredFormats, true, true, false); return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
} }
...@@ -451,8 +469,9 @@ static bool DetermineASTCTextureSupport(const TextureCapsMap &textureCaps) ...@@ -451,8 +469,9 @@ static bool DetermineASTCTextureSupport(const TextureCapsMap &textureCaps)
// Check for GL_ETC1_RGB8_OES // Check for GL_ETC1_RGB8_OES
static bool DetermineETC1RGB8TextureSupport(const TextureCapsMap &textureCaps) static bool DetermineETC1RGB8TextureSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_ETC1_RGB8_OES); GL_ETC1_RGB8_OES,
};
return GetFormatSupport(textureCaps, requiredFormats, true, true, false); return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
} }
...@@ -460,12 +479,13 @@ static bool DetermineETC1RGB8TextureSupport(const TextureCapsMap &textureCaps) ...@@ -460,12 +479,13 @@ static bool DetermineETC1RGB8TextureSupport(const TextureCapsMap &textureCaps)
// Check for GL_ANGLE_texture_compression_dxt5 // Check for GL_ANGLE_texture_compression_dxt5
static bool DetermineSRGBTextureSupport(const TextureCapsMap &textureCaps) static bool DetermineSRGBTextureSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFilterFormats; constexpr GLenum requiredFilterFormats[] = {
requiredFilterFormats.push_back(GL_SRGB8); GL_SRGB8, GL_SRGB8_ALPHA8,
requiredFilterFormats.push_back(GL_SRGB8_ALPHA8); };
std::vector<GLenum> requiredRenderFormats; constexpr GLenum requiredRenderFormats[] = {
requiredRenderFormats.push_back(GL_SRGB8_ALPHA8); GL_SRGB8_ALPHA8,
};
return GetFormatSupport(textureCaps, requiredFilterFormats, true, true, false) && return GetFormatSupport(textureCaps, requiredFilterFormats, true, true, false) &&
GetFormatSupport(textureCaps, requiredRenderFormats, true, false, true); GetFormatSupport(textureCaps, requiredRenderFormats, true, false, true);
...@@ -474,10 +494,9 @@ static bool DetermineSRGBTextureSupport(const TextureCapsMap &textureCaps) ...@@ -474,10 +494,9 @@ static bool DetermineSRGBTextureSupport(const TextureCapsMap &textureCaps)
// Check for GL_ANGLE_depth_texture // Check for GL_ANGLE_depth_texture
static bool DetermineDepthTextureSupport(const TextureCapsMap &textureCaps) static bool DetermineDepthTextureSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_DEPTH_COMPONENT16); GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT32_OES, GL_DEPTH24_STENCIL8_OES,
requiredFormats.push_back(GL_DEPTH_COMPONENT32_OES); };
requiredFormats.push_back(GL_DEPTH24_STENCIL8_OES);
return GetFormatSupport(textureCaps, requiredFormats, true, true, true); return GetFormatSupport(textureCaps, requiredFormats, true, true, true);
} }
...@@ -485,8 +504,9 @@ static bool DetermineDepthTextureSupport(const TextureCapsMap &textureCaps) ...@@ -485,8 +504,9 @@ static bool DetermineDepthTextureSupport(const TextureCapsMap &textureCaps)
// Check for GL_OES_depth32 // Check for GL_OES_depth32
static bool DetermineDepth32Support(const TextureCapsMap &textureCaps) static bool DetermineDepth32Support(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_DEPTH_COMPONENT32_OES); GL_DEPTH_COMPONENT32_OES,
};
return GetFormatSupport(textureCaps, requiredFormats, false, false, true); return GetFormatSupport(textureCaps, requiredFormats, false, false, true);
} }
...@@ -494,14 +514,9 @@ static bool DetermineDepth32Support(const TextureCapsMap &textureCaps) ...@@ -494,14 +514,9 @@ static bool DetermineDepth32Support(const TextureCapsMap &textureCaps)
// Check for GL_EXT_color_buffer_float // Check for GL_EXT_color_buffer_float
static bool DetermineColorBufferFloatSupport(const TextureCapsMap &textureCaps) static bool DetermineColorBufferFloatSupport(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFormats; constexpr GLenum requiredFormats[] = {
requiredFormats.push_back(GL_R16F); GL_R16F, GL_RG16F, GL_RGBA16F, GL_R32F, GL_RG32F, GL_RGBA32F, GL_R11F_G11F_B10F,
requiredFormats.push_back(GL_RG16F); };
requiredFormats.push_back(GL_RGBA16F);
requiredFormats.push_back(GL_R32F);
requiredFormats.push_back(GL_RG32F);
requiredFormats.push_back(GL_RGBA32F);
requiredFormats.push_back(GL_R11F_G11F_B10F);
return GetFormatSupport(textureCaps, requiredFormats, true, false, true); return GetFormatSupport(textureCaps, requiredFormats, true, false, true);
} }
...@@ -509,20 +524,14 @@ static bool DetermineColorBufferFloatSupport(const TextureCapsMap &textureCaps) ...@@ -509,20 +524,14 @@ static bool DetermineColorBufferFloatSupport(const TextureCapsMap &textureCaps)
// Check for GL_EXT_texture_norm16 // Check for GL_EXT_texture_norm16
static bool DetermineTextureNorm16Support(const TextureCapsMap &textureCaps) static bool DetermineTextureNorm16Support(const TextureCapsMap &textureCaps)
{ {
std::vector<GLenum> requiredFilterFormats; constexpr GLenum requiredFilterFormats[] = {
requiredFilterFormats.push_back(GL_R16_EXT); GL_R16_EXT, GL_RG16_EXT, GL_RGB16_EXT, GL_RGBA16_EXT,
requiredFilterFormats.push_back(GL_RG16_EXT); GL_R16_SNORM_EXT, GL_RG16_SNORM_EXT, GL_RGB16_SNORM_EXT, GL_RGBA16_SNORM_EXT,
requiredFilterFormats.push_back(GL_RGB16_EXT); };
requiredFilterFormats.push_back(GL_RGBA16_EXT);
requiredFilterFormats.push_back(GL_R16_SNORM_EXT); constexpr GLenum requiredRenderFormats[] = {
requiredFilterFormats.push_back(GL_RG16_SNORM_EXT); GL_R16_EXT, GL_RG16_EXT, GL_RGBA16_EXT,
requiredFilterFormats.push_back(GL_RGB16_SNORM_EXT); };
requiredFilterFormats.push_back(GL_RGBA16_SNORM_EXT);
std::vector<GLenum> requiredRenderFormats;
requiredFilterFormats.push_back(GL_R16_EXT);
requiredFilterFormats.push_back(GL_RG16_EXT);
requiredFilterFormats.push_back(GL_RGBA16_EXT);
return GetFormatSupport(textureCaps, requiredFilterFormats, true, true, false) && return GetFormatSupport(textureCaps, requiredFilterFormats, true, true, false) &&
GetFormatSupport(textureCaps, requiredRenderFormats, true, false, true); GetFormatSupport(textureCaps, requiredRenderFormats, true, false, true);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment