summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/Caps.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/Caps.cpp')
-rw-r--r--src/3rdparty/angle/src/libANGLE/Caps.cpp1213
1 files changed, 0 insertions, 1213 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/Caps.cpp b/src/3rdparty/angle/src/libANGLE/Caps.cpp
deleted file mode 100644
index 44da2bbe27..0000000000
--- a/src/3rdparty/angle/src/libANGLE/Caps.cpp
+++ /dev/null
@@ -1,1213 +0,0 @@
-//
-// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-#include "libANGLE/Caps.h"
-
-#include "common/debug.h"
-#include "common/angleutils.h"
-
-#include "libANGLE/formatutils.h"
-
-#include "angle_gl.h"
-
-#include <algorithm>
-#include <sstream>
-
-static void InsertExtensionString(const std::string &extension, bool supported, std::vector<std::string> *extensionVector)
-{
- if (supported)
- {
- extensionVector->push_back(extension);
- }
-}
-
-namespace gl
-{
-
-TextureCaps::TextureCaps()
- : texturable(false),
- filterable(false),
- renderable(false),
- sampleCounts()
-{
-}
-
-TextureCaps::TextureCaps(const TextureCaps &other) = default;
-
-TextureCaps::~TextureCaps() = default;
-
-GLuint TextureCaps::getMaxSamples() const
-{
- return !sampleCounts.empty() ? *sampleCounts.rbegin() : 0;
-}
-
-GLuint TextureCaps::getNearestSamples(GLuint requestedSamples) const
-{
- if (requestedSamples == 0)
- {
- return 0;
- }
-
- for (SupportedSampleSet::const_iterator i = sampleCounts.begin(); i != sampleCounts.end(); i++)
- {
- GLuint samples = *i;
- if (samples >= requestedSamples)
- {
- return samples;
- }
- }
-
- return 0;
-}
-
-TextureCaps GenerateMinimumTextureCaps(GLenum sizedInternalFormat,
- const Version &clientVersion,
- const Extensions &extensions)
-{
- TextureCaps caps;
-
- const InternalFormat &internalFormatInfo = GetSizedInternalFormatInfo(sizedInternalFormat);
- caps.texturable = internalFormatInfo.textureSupport(clientVersion, extensions);
- caps.renderable = internalFormatInfo.renderSupport(clientVersion, extensions);
- caps.filterable = internalFormatInfo.filterSupport(clientVersion, extensions);
-
- caps.sampleCounts.insert(0);
- if (internalFormatInfo.isRequiredRenderbufferFormat(clientVersion))
- {
- if ((clientVersion.major >= 3 && clientVersion.minor >= 1) ||
- (clientVersion.major >= 3 && internalFormatInfo.componentType != GL_UNSIGNED_INT &&
- internalFormatInfo.componentType != GL_INT))
- {
- caps.sampleCounts.insert(4);
- }
- }
-
- return caps;
-}
-
-TextureCapsMap::TextureCapsMap()
-{
-}
-
-TextureCapsMap::~TextureCapsMap()
-{
-}
-
-void TextureCapsMap::insert(GLenum internalFormat, const TextureCaps &caps)
-{
- angle::Format::ID formatID = angle::Format::InternalFormatToID(internalFormat);
- get(formatID) = caps;
-}
-
-void TextureCapsMap::clear()
-{
- mFormatData.fill(TextureCaps());
-}
-
-const TextureCaps &TextureCapsMap::get(GLenum internalFormat) const
-{
- angle::Format::ID formatID = angle::Format::InternalFormatToID(internalFormat);
- return get(formatID);
-}
-
-const TextureCaps &TextureCapsMap::get(angle::Format::ID formatID) const
-{
- return mFormatData[static_cast<size_t>(formatID)];
-}
-
-TextureCaps &TextureCapsMap::get(angle::Format::ID formatID)
-{
- return mFormatData[static_cast<size_t>(formatID)];
-}
-
-void TextureCapsMap::set(angle::Format::ID formatID, const TextureCaps &caps)
-{
- get(formatID) = caps;
-}
-
-void InitMinimumTextureCapsMap(const Version &clientVersion,
- const Extensions &extensions,
- TextureCapsMap *capsMap)
-{
- for (GLenum internalFormat : GetAllSizedInternalFormats())
- {
- capsMap->insert(internalFormat,
- GenerateMinimumTextureCaps(internalFormat, clientVersion, extensions));
- }
-}
-
-Extensions::Extensions()
- : elementIndexUint(false),
- packedDepthStencil(false),
- getProgramBinary(false),
- rgb8rgba8(false),
- textureFormatBGRA8888(false),
- readFormatBGRA(false),
- pixelBufferObject(false),
- mapBuffer(false),
- mapBufferRange(false),
- colorBufferHalfFloat(false),
- textureHalfFloat(false),
- textureHalfFloatLinear(false),
- textureFloat(false),
- textureFloatLinear(false),
- textureRG(false),
- textureCompressionDXT1(false),
- textureCompressionDXT3(false),
- textureCompressionDXT5(false),
- textureCompressionS3TCsRGB(false),
- textureCompressionASTCHDR(false),
- textureCompressionASTCLDR(false),
- compressedETC1RGB8Texture(false),
- sRGB(false),
- depthTextures(false),
- depth32(false),
- textureStorage(false),
- textureNPOT(false),
- drawBuffers(false),
- textureFilterAnisotropic(false),
- maxTextureAnisotropy(0.0f),
- occlusionQueryBoolean(false),
- fence(false),
- disjointTimerQuery(false),
- queryCounterBitsTimeElapsed(0),
- queryCounterBitsTimestamp(0),
- robustness(false),
- robustBufferAccessBehavior(false),
- blendMinMax(false),
- framebufferBlit(false),
- framebufferMultisample(false),
- instancedArrays(false),
- packReverseRowOrder(false),
- standardDerivatives(false),
- shaderTextureLOD(false),
- fragDepth(false),
- multiview(false),
- maxViews(1u),
- textureUsage(false),
- translatedShaderSource(false),
- fboRenderMipmap(false),
- discardFramebuffer(false),
- debugMarker(false),
- eglImage(false),
- eglImageExternal(false),
- eglImageExternalEssl3(false),
- eglStreamConsumerExternal(false),
- unpackSubimage(false),
- packSubimage(false),
- vertexArrayObject(false),
- debug(false),
- maxDebugMessageLength(0),
- maxDebugLoggedMessages(0),
- maxDebugGroupStackDepth(0),
- maxLabelLength(0),
- noError(false),
- lossyETCDecode(false),
- bindUniformLocation(false),
- syncQuery(false),
- copyTexture(false),
- copyCompressedTexture(false),
- webglCompatibility(false),
- requestExtension(false),
- bindGeneratesResource(false),
- robustClientMemory(false),
- textureSRGBDecode(false),
- sRGBWriteControl(false),
- colorBufferFloatRGB(false),
- colorBufferFloatRGBA(false),
- colorBufferFloat(false),
- multisampleCompatibility(false),
- framebufferMixedSamples(false),
- textureNorm16(false),
- pathRendering(false),
- surfacelessContext(false),
- clientArrays(false),
- robustResourceInitialization(false),
- programCacheControl(false),
- textureRectangle(false),
- geometryShader(false),
- maxGeometryOutputVertices(0),
- maxGeometryShaderInvocations(0)
-{
-}
-
-std::vector<std::string> Extensions::getStrings() const
-{
- std::vector<std::string> extensionStrings;
-
- for (const auto &extensionInfo : GetExtensionInfoMap())
- {
- if (this->*(extensionInfo.second.ExtensionsMember))
- {
- extensionStrings.push_back(extensionInfo.first);
- }
- }
-
- return extensionStrings;
-}
-
-Limitations::Limitations()
- : noFrontFacingSupport(false),
- noSampleAlphaToCoverageSupport(false),
- attributeZeroRequiresZeroDivisorInEXT(false),
- noSeparateStencilRefsAndMasks(false),
- shadersRequireIndexedLoopValidation(false),
- noSimultaneousConstantColorAndAlphaBlendFunc(false)
-{
-}
-
-static bool GetFormatSupportBase(const TextureCapsMap &textureCaps,
- const GLenum *requiredFormats,
- size_t requiredFormatsSize,
- bool requiresTexturing,
- bool requiresFiltering,
- bool requiresRendering)
-{
- for (size_t i = 0; i < requiredFormatsSize; i++)
- {
- const TextureCaps &cap = textureCaps.get(requiredFormats[i]);
-
- if (requiresTexturing && !cap.texturable)
- {
- return false;
- }
-
- if (requiresFiltering && !cap.filterable)
- {
- return false;
- }
-
- if (requiresRendering && !cap.renderable)
- {
- return false;
- }
- }
-
- 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
-static bool DeterminePackedDepthStencilSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_DEPTH24_STENCIL8,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, false, false, true);
-}
-
-// Checks for GL_OES_rgb8_rgba8 support
-static bool DetermineRGB8AndRGBA8TextureSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_RGB8, GL_RGBA8,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, true, true);
-}
-
-// Checks for GL_EXT_texture_format_BGRA8888 support
-static bool DetermineBGRA8TextureSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_BGRA8_EXT,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, true, true);
-}
-
-// Checks for GL_OES_color_buffer_half_float support
-static bool DetermineColorBufferHalfFloatSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_RGBA16F, GL_RGB16F, GL_RG16F, GL_R16F,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, false, true);
-}
-
-// Checks for GL_OES_texture_half_float support
-static bool DetermineHalfFloatTextureSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_RGB16F, GL_RGBA16F,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, false, false);
-}
-
-// Checks for GL_OES_texture_half_float_linear support
-static bool DetermineHalfFloatTextureFilteringSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_RGB16F, GL_RGBA16F,
- };
-
- return DetermineHalfFloatTextureSupport(textureCaps) &&
- GetFormatSupport(textureCaps, requiredFormats, true, true, false);
-}
-
-// Checks for GL_OES_texture_float support
-static bool DetermineFloatTextureSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_RGB32F, GL_RGBA32F,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, false, false);
-}
-
-// Checks for GL_OES_texture_float_linear support
-static bool DetermineFloatTextureFilteringSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_RGB32F, GL_RGBA32F,
- };
-
- return DetermineFloatTextureSupport(textureCaps) &&
- GetFormatSupport(textureCaps, requiredFormats, true, true, false);
-}
-
-// 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)
-{
- if (checkHalfFloatFormats && !DetermineRGHalfFloatTextureSupport(textureCaps))
- {
- return false;
- }
-
- if (checkFloatFormats && !DetermineRGFloatTextureSupport(textureCaps))
- {
- return false;
- }
-
- constexpr GLenum requiredFormats[] = {
- GL_R8, GL_RG8,
- };
- return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
-}
-
-// Check for GL_EXT_texture_compression_dxt1
-static bool DetermineDXT1TextureSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
-}
-
-// Check for GL_ANGLE_texture_compression_dxt3
-static bool DetermineDXT3TextureSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
-}
-
-// Check for GL_ANGLE_texture_compression_dxt5
-static bool DetermineDXT5TextureSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
-}
-
-// Check for GL_EXT_texture_compression_s3tc_srgb
-static bool DetermineS3TCsRGBTextureSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_COMPRESSED_SRGB_S3TC_DXT1_EXT, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,
- GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
-}
-
-// Check for GL_KHR_texture_compression_astc_hdr and GL_KHR_texture_compression_astc_ldr
-static bool DetermineASTCTextureSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_COMPRESSED_RGBA_ASTC_4x4_KHR, GL_COMPRESSED_RGBA_ASTC_5x4_KHR,
- GL_COMPRESSED_RGBA_ASTC_5x5_KHR, GL_COMPRESSED_RGBA_ASTC_6x5_KHR,
- GL_COMPRESSED_RGBA_ASTC_6x6_KHR, GL_COMPRESSED_RGBA_ASTC_8x5_KHR,
- GL_COMPRESSED_RGBA_ASTC_8x6_KHR, GL_COMPRESSED_RGBA_ASTC_8x8_KHR,
- GL_COMPRESSED_RGBA_ASTC_10x5_KHR, GL_COMPRESSED_RGBA_ASTC_10x6_KHR,
- GL_COMPRESSED_RGBA_ASTC_10x8_KHR, GL_COMPRESSED_RGBA_ASTC_10x10_KHR,
- GL_COMPRESSED_RGBA_ASTC_12x10_KHR, GL_COMPRESSED_RGBA_ASTC_12x12_KHR,
- GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,
- GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
- GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
- GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
- GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
- GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
- GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
-}
-
-// Check for GL_ETC1_RGB8_OES
-static bool DetermineETC1RGB8TextureSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_ETC1_RGB8_OES,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, true, false);
-}
-
-// Check for GL_ANGLE_texture_compression_dxt5
-static bool DetermineSRGBTextureSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFilterFormats[] = {
- GL_SRGB8, GL_SRGB8_ALPHA8,
- };
-
- constexpr GLenum requiredRenderFormats[] = {
- GL_SRGB8_ALPHA8,
- };
-
- return GetFormatSupport(textureCaps, requiredFilterFormats, true, true, false) &&
- GetFormatSupport(textureCaps, requiredRenderFormats, true, false, true);
-}
-
-// Check for GL_ANGLE_depth_texture
-static bool DetermineDepthTextureSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT32_OES, GL_DEPTH24_STENCIL8_OES,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, true, true);
-}
-
-// Check for GL_OES_depth32
-static bool DetermineDepth32Support(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_DEPTH_COMPONENT32_OES,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, false, false, true);
-}
-
-// Check for GL_CHROMIUM_color_buffer_float_rgb
-static bool DetermineColorBufferFloatRGBSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_RGB32F,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, false, true);
-}
-
-// Check for GL_CHROMIUM_color_buffer_float_rgba
-static bool DetermineColorBufferFloatRGBASupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_RGBA32F,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, false, true);
-}
-
-// Check for GL_EXT_color_buffer_float
-static bool DetermineColorBufferFloatSupport(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFormats[] = {
- GL_R16F, GL_RG16F, GL_RGBA16F, GL_R32F, GL_RG32F, GL_RGBA32F, GL_R11F_G11F_B10F,
- };
-
- return GetFormatSupport(textureCaps, requiredFormats, true, false, true);
-}
-
-// Check for GL_EXT_texture_norm16
-static bool DetermineTextureNorm16Support(const TextureCapsMap &textureCaps)
-{
- constexpr GLenum requiredFilterFormats[] = {
- GL_R16_EXT, GL_RG16_EXT, GL_RGB16_EXT, GL_RGBA16_EXT,
- GL_R16_SNORM_EXT, GL_RG16_SNORM_EXT, GL_RGB16_SNORM_EXT, GL_RGBA16_SNORM_EXT,
- };
-
- constexpr GLenum requiredRenderFormats[] = {
- GL_R16_EXT, GL_RG16_EXT, GL_RGBA16_EXT,
- };
-
- return GetFormatSupport(textureCaps, requiredFilterFormats, true, true, false) &&
- GetFormatSupport(textureCaps, requiredRenderFormats, true, false, true);
-}
-
-void Extensions::setTextureExtensionSupport(const TextureCapsMap &textureCaps)
-{
- packedDepthStencil = DeterminePackedDepthStencilSupport(textureCaps);
- rgb8rgba8 = DetermineRGB8AndRGBA8TextureSupport(textureCaps);
- textureFormatBGRA8888 = DetermineBGRA8TextureSupport(textureCaps);
- colorBufferHalfFloat = DetermineColorBufferHalfFloatSupport(textureCaps);
- textureHalfFloat = DetermineHalfFloatTextureSupport(textureCaps);
- textureHalfFloatLinear = DetermineHalfFloatTextureFilteringSupport(textureCaps);
- textureFloat = DetermineFloatTextureSupport(textureCaps);
- textureFloatLinear = DetermineFloatTextureFilteringSupport(textureCaps);
- textureRG = DetermineRGTextureSupport(textureCaps, textureHalfFloat, textureFloat);
- textureCompressionDXT1 = DetermineDXT1TextureSupport(textureCaps);
- textureCompressionDXT3 = DetermineDXT3TextureSupport(textureCaps);
- textureCompressionDXT5 = DetermineDXT5TextureSupport(textureCaps);
- textureCompressionS3TCsRGB = DetermineS3TCsRGBTextureSupport(textureCaps);
- textureCompressionASTCHDR = DetermineASTCTextureSupport(textureCaps);
- textureCompressionASTCLDR = textureCompressionASTCHDR;
- compressedETC1RGB8Texture = DetermineETC1RGB8TextureSupport(textureCaps);
- sRGB = DetermineSRGBTextureSupport(textureCaps);
- depthTextures = DetermineDepthTextureSupport(textureCaps);
- depth32 = DetermineDepth32Support(textureCaps);
- colorBufferFloatRGB = DetermineColorBufferFloatRGBSupport(textureCaps);
- colorBufferFloatRGBA = DetermineColorBufferFloatRGBASupport(textureCaps);
- colorBufferFloat = DetermineColorBufferFloatSupport(textureCaps);
- textureNorm16 = DetermineTextureNorm16Support(textureCaps);
-}
-
-const ExtensionInfoMap &GetExtensionInfoMap()
-{
- auto buildExtensionInfoMap = []() {
- auto enableableExtension = [](ExtensionInfo::ExtensionBool member) {
- ExtensionInfo info;
- info.Requestable = true;
- info.ExtensionsMember = member;
- return info;
- };
-
- auto esOnlyExtension = [](ExtensionInfo::ExtensionBool member) {
- ExtensionInfo info;
- info.ExtensionsMember = member;
- return info;
- };
-
- // clang-format off
- ExtensionInfoMap map;
- map["GL_OES_element_index_uint"] = enableableExtension(&Extensions::elementIndexUint);
- map["GL_OES_packed_depth_stencil"] = esOnlyExtension(&Extensions::packedDepthStencil);
- map["GL_OES_get_program_binary"] = enableableExtension(&Extensions::getProgramBinary);
- map["GL_OES_rgb8_rgba8"] = enableableExtension(&Extensions::rgb8rgba8);
- map["GL_EXT_texture_format_BGRA8888"] = enableableExtension(&Extensions::textureFormatBGRA8888);
- map["GL_EXT_read_format_bgra"] = esOnlyExtension(&Extensions::readFormatBGRA);
- map["GL_NV_pixel_buffer_object"] = enableableExtension(&Extensions::pixelBufferObject);
- map["GL_OES_mapbuffer"] = enableableExtension(&Extensions::mapBuffer);
- map["GL_EXT_map_buffer_range"] = enableableExtension(&Extensions::mapBufferRange);
- map["GL_EXT_color_buffer_half_float"] = enableableExtension(&Extensions::colorBufferHalfFloat);
- map["GL_OES_texture_half_float"] = enableableExtension(&Extensions::textureHalfFloat);
- map["GL_OES_texture_half_float_linear"] = enableableExtension(&Extensions::textureHalfFloatLinear);
- map["GL_OES_texture_float"] = enableableExtension(&Extensions::textureFloat);
- map["GL_OES_texture_float_linear"] = enableableExtension(&Extensions::textureFloatLinear);
- map["GL_EXT_texture_rg"] = enableableExtension(&Extensions::textureRG);
- map["GL_EXT_texture_compression_dxt1"] = enableableExtension(&Extensions::textureCompressionDXT1);
- map["GL_ANGLE_texture_compression_dxt3"] = enableableExtension(&Extensions::textureCompressionDXT3);
- map["GL_ANGLE_texture_compression_dxt5"] = enableableExtension(&Extensions::textureCompressionDXT5);
- map["GL_EXT_texture_compression_s3tc_srgb"] = enableableExtension(&Extensions::textureCompressionS3TCsRGB);
- map["GL_KHR_texture_compression_astc_hdr"] = enableableExtension(&Extensions::textureCompressionASTCHDR);
- map["GL_KHR_texture_compression_astc_ldr"] = enableableExtension(&Extensions::textureCompressionASTCLDR);
- map["GL_OES_compressed_ETC1_RGB8_texture"] = enableableExtension(&Extensions::compressedETC1RGB8Texture);
- map["GL_EXT_sRGB"] = enableableExtension(&Extensions::sRGB);
- map["GL_ANGLE_depth_texture"] = esOnlyExtension(&Extensions::depthTextures);
- map["GL_OES_depth32"] = esOnlyExtension(&Extensions::depth32);
- map["GL_EXT_texture_storage"] = esOnlyExtension(&Extensions::textureStorage);
- map["GL_OES_texture_npot"] = enableableExtension(&Extensions::textureNPOT);
- map["GL_EXT_draw_buffers"] = enableableExtension(&Extensions::drawBuffers);
- map["GL_EXT_texture_filter_anisotropic"] = enableableExtension(&Extensions::textureFilterAnisotropic);
- map["GL_EXT_occlusion_query_boolean"] = enableableExtension(&Extensions::occlusionQueryBoolean);
- map["GL_NV_fence"] = esOnlyExtension(&Extensions::fence);
- map["GL_EXT_disjoint_timer_query"] = enableableExtension(&Extensions::disjointTimerQuery);
- map["GL_EXT_robustness"] = esOnlyExtension(&Extensions::robustness);
- map["GL_KHR_robust_buffer_access_behavior"] = esOnlyExtension(&Extensions::robustBufferAccessBehavior);
- map["GL_EXT_blend_minmax"] = enableableExtension(&Extensions::blendMinMax);
- map["GL_ANGLE_framebuffer_blit"] = enableableExtension(&Extensions::framebufferBlit);
- map["GL_ANGLE_framebuffer_multisample"] = enableableExtension(&Extensions::framebufferMultisample);
- map["GL_ANGLE_instanced_arrays"] = enableableExtension(&Extensions::instancedArrays);
- map["GL_ANGLE_pack_reverse_row_order"] = enableableExtension(&Extensions::packReverseRowOrder);
- map["GL_OES_standard_derivatives"] = enableableExtension(&Extensions::standardDerivatives);
- map["GL_EXT_shader_texture_lod"] = enableableExtension(&Extensions::shaderTextureLOD);
- map["GL_EXT_frag_depth"] = enableableExtension(&Extensions::fragDepth);
- map["GL_ANGLE_multiview"] = enableableExtension(&Extensions::multiview);
- map["GL_ANGLE_texture_usage"] = enableableExtension(&Extensions::textureUsage);
- map["GL_ANGLE_translated_shader_source"] = esOnlyExtension(&Extensions::translatedShaderSource);
- map["GL_OES_fbo_render_mipmap"] = enableableExtension(&Extensions::fboRenderMipmap);
- map["GL_EXT_discard_framebuffer"] = esOnlyExtension(&Extensions::discardFramebuffer);
- map["GL_EXT_debug_marker"] = esOnlyExtension(&Extensions::debugMarker);
- map["GL_OES_EGL_image"] = esOnlyExtension(&Extensions::eglImage);
- map["GL_OES_EGL_image_external"] = esOnlyExtension(&Extensions::eglImageExternal);
- map["GL_OES_EGL_image_external_essl3"] = esOnlyExtension(&Extensions::eglImageExternalEssl3);
- map["GL_NV_EGL_stream_consumer_external"] = esOnlyExtension(&Extensions::eglStreamConsumerExternal);
- map["GL_EXT_unpack_subimage"] = enableableExtension(&Extensions::unpackSubimage);
- map["GL_NV_pack_subimage"] = enableableExtension(&Extensions::packSubimage);
- map["GL_EXT_color_buffer_float"] = enableableExtension(&Extensions::colorBufferFloat);
- map["GL_OES_vertex_array_object"] = esOnlyExtension(&Extensions::vertexArrayObject);
- map["GL_KHR_debug"] = esOnlyExtension(&Extensions::debug);
- // TODO(jmadill): Enable this when complete.
- //map["GL_KHR_no_error"] = esOnlyExtension(&Extensions::noError);
- map["GL_ANGLE_lossy_etc_decode"] = enableableExtension(&Extensions::lossyETCDecode);
- map["GL_CHROMIUM_bind_uniform_location"] = esOnlyExtension(&Extensions::bindUniformLocation);
- map["GL_CHROMIUM_sync_query"] = enableableExtension(&Extensions::syncQuery);
- map["GL_CHROMIUM_copy_texture"] = esOnlyExtension(&Extensions::copyTexture);
- map["GL_CHROMIUM_copy_compressed_texture"] = esOnlyExtension(&Extensions::copyCompressedTexture);
- map["GL_ANGLE_webgl_compatibility"] = esOnlyExtension(&Extensions::webglCompatibility);
- map["GL_ANGLE_request_extension"] = esOnlyExtension(&Extensions::requestExtension);
- map["GL_CHROMIUM_bind_generates_resource"] = esOnlyExtension(&Extensions::bindGeneratesResource);
- map["GL_ANGLE_robust_client_memory"] = esOnlyExtension(&Extensions::robustClientMemory);
- map["GL_EXT_texture_sRGB_decode"] = esOnlyExtension(&Extensions::textureSRGBDecode);
- map["GL_EXT_sRGB_write_control"] = esOnlyExtension(&Extensions::sRGBWriteControl);
- map["GL_CHROMIUM_color_buffer_float_rgb"] = enableableExtension(&Extensions::colorBufferFloatRGB);
- map["GL_CHROMIUM_color_buffer_float_rgba"] = enableableExtension(&Extensions::colorBufferFloatRGBA);
- map["GL_EXT_multisample_compatibility"] = esOnlyExtension(&Extensions::multisampleCompatibility);
- map["GL_CHROMIUM_framebuffer_mixed_samples"] = esOnlyExtension(&Extensions::framebufferMixedSamples);
- map["GL_EXT_texture_norm16"] = esOnlyExtension(&Extensions::textureNorm16);
- map["GL_CHROMIUM_path_rendering"] = esOnlyExtension(&Extensions::pathRendering);
- map["GL_OES_surfaceless_context"] = esOnlyExtension(&Extensions::surfacelessContext);
- map["GL_ANGLE_client_arrays"] = esOnlyExtension(&Extensions::clientArrays);
- map["GL_ANGLE_robust_resource_initialization"] = esOnlyExtension(&Extensions::robustResourceInitialization);
- map["GL_ANGLE_program_cache_control"] = esOnlyExtension(&Extensions::programCacheControl);
- map["GL_ANGLE_texture_rectangle"] = enableableExtension(&Extensions::textureRectangle);
- map["GL_EXT_geometry_shader"] = enableableExtension(&Extensions::geometryShader);
- // clang-format on
-
- return map;
- };
-
- static const ExtensionInfoMap extensionInfo = buildExtensionInfoMap();
- return extensionInfo;
-}
-
-TypePrecision::TypePrecision() : range({{0, 0}}), precision(0)
-{
-}
-
-TypePrecision::TypePrecision(const TypePrecision &other) = default;
-
-void TypePrecision::setIEEEFloat()
-{
- range = {{127, 127}};
- precision = 23;
-}
-
-void TypePrecision::setTwosComplementInt(unsigned int bits)
-{
- range = {{static_cast<GLint>(bits) - 1, static_cast<GLint>(bits) - 2}};
- precision = 0;
-}
-
-void TypePrecision::setSimulatedFloat(unsigned int r, unsigned int p)
-{
- range = {{static_cast<GLint>(r), static_cast<GLint>(r)}};
- precision = static_cast<GLint>(p);
-}
-
-void TypePrecision::setSimulatedInt(unsigned int r)
-{
- range = {{static_cast<GLint>(r), static_cast<GLint>(r)}};
- precision = 0;
-}
-
-void TypePrecision::get(GLint *returnRange, GLint *returnPrecision) const
-{
- std::copy(range.begin(), range.end(), returnRange);
- *returnPrecision = precision;
-}
-
-Caps::Caps()
- : maxElementIndex(0),
- max3DTextureSize(0),
- max2DTextureSize(0),
- maxRectangleTextureSize(0),
- maxArrayTextureLayers(0),
- maxLODBias(0),
- maxCubeMapTextureSize(0),
- maxRenderbufferSize(0),
- minAliasedPointSize(0),
- maxAliasedPointSize(0),
- minAliasedLineWidth(0),
- maxAliasedLineWidth(0),
-
- // Table 20.40
- maxDrawBuffers(0),
- maxFramebufferWidth(0),
- maxFramebufferHeight(0),
- maxFramebufferSamples(0),
- maxColorAttachments(0),
- maxViewportWidth(0),
- maxViewportHeight(0),
- maxSampleMaskWords(0),
- maxColorTextureSamples(0),
- maxDepthTextureSamples(0),
- maxIntegerSamples(0),
- maxServerWaitTimeout(0),
-
- // Table 20.41
- maxVertexAttribRelativeOffset(0),
- maxVertexAttribBindings(0),
- maxVertexAttribStride(0),
- maxElementsIndices(0),
- maxElementsVertices(0),
-
- // Table 20.43
- maxVertexAttributes(0),
- maxVertexUniformComponents(0),
- maxVertexUniformVectors(0),
- maxVertexUniformBlocks(0),
- maxVertexOutputComponents(0),
- maxVertexTextureImageUnits(0),
- maxVertexAtomicCounterBuffers(0),
- maxVertexAtomicCounters(0),
- maxVertexImageUniforms(0),
- maxVertexShaderStorageBlocks(0),
-
- // Table 20.44
- maxFragmentUniformComponents(0),
- maxFragmentUniformVectors(0),
- maxFragmentUniformBlocks(0),
- maxFragmentInputComponents(0),
- maxTextureImageUnits(0),
- maxFragmentAtomicCounterBuffers(0),
- maxFragmentAtomicCounters(0),
- maxFragmentImageUniforms(0),
- maxFragmentShaderStorageBlocks(0),
- minProgramTextureGatherOffset(0),
- maxProgramTextureGatherOffset(0),
- minProgramTexelOffset(0),
- maxProgramTexelOffset(0),
-
- // Table 20.45
- maxComputeWorkGroupInvocations(0),
- maxComputeUniformBlocks(0),
- maxComputeTextureImageUnits(0),
- maxComputeSharedMemorySize(0),
- maxComputeUniformComponents(0),
- maxComputeAtomicCounterBuffers(0),
- maxComputeAtomicCounters(0),
- maxComputeImageUniforms(0),
- maxCombinedComputeUniformComponents(0),
- maxComputeShaderStorageBlocks(0),
-
- // Table 20.46
- maxUniformBufferBindings(0),
- maxUniformBlockSize(0),
- uniformBufferOffsetAlignment(0),
- maxCombinedUniformBlocks(0),
- maxCombinedVertexUniformComponents(0),
- maxCombinedFragmentUniformComponents(0),
- maxVaryingComponents(0),
- maxVaryingVectors(0),
- maxCombinedTextureImageUnits(0),
- maxCombinedShaderOutputResources(0),
-
- // Table 20.47
- maxUniformLocations(0),
- maxAtomicCounterBufferBindings(0),
- maxAtomicCounterBufferSize(0),
- maxCombinedAtomicCounterBuffers(0),
- maxCombinedAtomicCounters(0),
- maxImageUnits(0),
- maxCombinedImageUniforms(0),
- maxShaderStorageBufferBindings(0),
- maxShaderStorageBlockSize(0),
- maxCombinedShaderStorageBlocks(0),
- shaderStorageBufferOffsetAlignment(0),
-
- // Table 20.48
- maxTransformFeedbackInterleavedComponents(0),
- maxTransformFeedbackSeparateAttributes(0),
- maxTransformFeedbackSeparateComponents(0),
-
- // Table 20.49
- maxSamples(0)
-{
- for (size_t i = 0; i < 3; ++i)
- {
- maxComputeWorkGroupCount[i] = 0;
- maxComputeWorkGroupSize[i] = 0;
- }
-}
-
-Caps::Caps(const Caps &other) = default;
-Caps::~Caps() = default;
-
-Caps GenerateMinimumCaps(const Version &clientVersion, const Extensions &extensions)
-{
- Caps caps;
-
- if (clientVersion >= Version(2, 0))
- {
- // Table 6.18
- caps.max2DTextureSize = 64;
- caps.maxCubeMapTextureSize = 16;
- caps.maxViewportWidth = caps.max2DTextureSize;
- caps.maxViewportHeight = caps.max2DTextureSize;
- caps.minAliasedPointSize = 1;
- caps.maxAliasedPointSize = 1;
- caps.minAliasedLineWidth = 1;
- caps.maxAliasedLineWidth = 1;
-
- // Table 6.19
- caps.vertexHighpFloat.setSimulatedFloat(62, 16);
- caps.vertexMediumpFloat.setSimulatedFloat(14, 10);
- caps.vertexLowpFloat.setSimulatedFloat(1, 8);
- caps.vertexHighpInt.setSimulatedInt(16);
- caps.vertexMediumpInt.setSimulatedInt(10);
- caps.vertexLowpInt.setSimulatedInt(8);
- caps.fragmentHighpFloat.setSimulatedFloat(62, 16);
- caps.fragmentMediumpFloat.setSimulatedFloat(14, 10);
- caps.fragmentLowpFloat.setSimulatedFloat(1, 8);
- caps.fragmentHighpInt.setSimulatedInt(16);
- caps.fragmentMediumpInt.setSimulatedInt(10);
- caps.fragmentLowpInt.setSimulatedInt(8);
-
- // Table 6.20
- caps.maxVertexAttributes = 8;
- caps.maxVertexUniformVectors = 128;
- caps.maxVaryingVectors = 8;
- caps.maxCombinedTextureImageUnits = 8;
- caps.maxTextureImageUnits = 8;
- caps.maxFragmentUniformVectors = 16;
- caps.maxRenderbufferSize = 1;
- }
-
- if (clientVersion >= Version(3, 0))
- {
- // Table 6.28
- caps.maxElementIndex = (1 << 24) - 1;
- caps.max3DTextureSize = 256;
- caps.max2DTextureSize = 2048;
- caps.maxArrayTextureLayers = 256;
- caps.maxLODBias = 2.0f;
- caps.maxCubeMapTextureSize = 2048;
- caps.maxRenderbufferSize = 2048;
- caps.maxDrawBuffers = 4;
- caps.maxColorAttachments = 4;
- caps.maxViewportWidth = caps.max2DTextureSize;
- caps.maxViewportHeight = caps.max2DTextureSize;
-
- // Table 6.29
- caps.compressedTextureFormats.push_back(GL_COMPRESSED_R11_EAC);
- caps.compressedTextureFormats.push_back(GL_COMPRESSED_SIGNED_R11_EAC);
- caps.compressedTextureFormats.push_back(GL_COMPRESSED_RG11_EAC);
- caps.compressedTextureFormats.push_back(GL_COMPRESSED_SIGNED_RG11_EAC);
- caps.compressedTextureFormats.push_back(GL_COMPRESSED_RGB8_ETC2);
- caps.compressedTextureFormats.push_back(GL_COMPRESSED_SRGB8_ETC2);
- caps.compressedTextureFormats.push_back(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2);
- caps.compressedTextureFormats.push_back(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2);
- caps.compressedTextureFormats.push_back(GL_COMPRESSED_RGBA8_ETC2_EAC);
- caps.compressedTextureFormats.push_back(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC);
- caps.vertexHighpFloat.setIEEEFloat();
- caps.vertexHighpInt.setTwosComplementInt(32);
- caps.vertexMediumpInt.setTwosComplementInt(16);
- caps.vertexLowpInt.setTwosComplementInt(8);
- caps.fragmentHighpFloat.setIEEEFloat();
- caps.fragmentHighpInt.setSimulatedInt(32);
- caps.fragmentMediumpInt.setTwosComplementInt(16);
- caps.fragmentLowpInt.setTwosComplementInt(8);
- caps.maxServerWaitTimeout = 0;
-
- // Table 6.31
- caps.maxVertexAttributes = 16;
- caps.maxVertexUniformComponents = 1024;
- caps.maxVertexUniformVectors = 256;
- caps.maxVertexUniformBlocks = 12;
- caps.maxVertexOutputComponents = 64;
- caps.maxVertexTextureImageUnits = 16;
-
- // Table 6.32
- caps.maxFragmentUniformComponents = 896;
- caps.maxFragmentUniformVectors = 224;
- caps.maxFragmentUniformBlocks = 12;
- caps.maxFragmentInputComponents = 60;
- caps.maxTextureImageUnits = 16;
- caps.minProgramTexelOffset = -8;
- caps.maxProgramTexelOffset = 7;
-
- // Table 6.33
- caps.maxUniformBufferBindings = 24;
- caps.maxUniformBlockSize = 16384;
- caps.uniformBufferOffsetAlignment = 256;
- caps.maxCombinedUniformBlocks = 24;
- caps.maxCombinedVertexUniformComponents =
- caps.maxVertexUniformBlocks * (caps.maxUniformBlockSize / 4) +
- caps.maxVertexUniformComponents;
- caps.maxCombinedFragmentUniformComponents =
- caps.maxFragmentUniformBlocks * (caps.maxUniformBlockSize / 4) +
- caps.maxFragmentUniformComponents;
- caps.maxVaryingComponents = 60;
- caps.maxVaryingVectors = 15;
- caps.maxCombinedTextureImageUnits = 32;
-
- // Table 6.34
- caps.maxTransformFeedbackInterleavedComponents = 64;
- caps.maxTransformFeedbackSeparateAttributes = 4;
- caps.maxTransformFeedbackSeparateComponents = 4;
-
- // Table 3.35
- caps.maxSamples = 4;
- }
-
- if (clientVersion >= Version(3, 1))
- {
- // Table 20.40
- caps.maxFramebufferWidth = 2048;
- caps.maxFramebufferHeight = 2048;
- caps.maxFramebufferSamples = 4;
- caps.maxSampleMaskWords = 1;
- caps.maxColorTextureSamples = 1;
- caps.maxDepthTextureSamples = 1;
- caps.maxIntegerSamples = 1;
-
- // Table 20.41
- caps.maxVertexAttribRelativeOffset = 2047;
- caps.maxVertexAttribBindings = 16;
- caps.maxVertexAttribStride = 2048;
-
- // Table 20.43
- caps.maxVertexAtomicCounterBuffers = 0;
- caps.maxVertexAtomicCounters = 0;
- caps.maxVertexImageUniforms = 0;
- caps.maxVertexShaderStorageBlocks = 0;
-
- // Table 20.44
- caps.maxFragmentUniformComponents = 1024;
- caps.maxFragmentUniformVectors = 256;
- caps.maxFragmentAtomicCounterBuffers = 0;
- caps.maxFragmentAtomicCounters = 0;
- caps.maxFragmentImageUniforms = 0;
- caps.maxFragmentShaderStorageBlocks = 0;
- caps.minProgramTextureGatherOffset = 0;
- caps.maxProgramTextureGatherOffset = 0;
-
- // Table 20.45
- caps.maxComputeWorkGroupCount = {{65535, 65535, 65535}};
- caps.maxComputeWorkGroupSize = {{128, 128, 64}};
- caps.maxComputeWorkGroupInvocations = 12;
- caps.maxComputeUniformBlocks = 12;
- caps.maxComputeTextureImageUnits = 16;
- caps.maxComputeSharedMemorySize = 16384;
- caps.maxComputeUniformComponents = 1024;
- caps.maxComputeAtomicCounterBuffers = 1;
- caps.maxComputeAtomicCounters = 8;
- caps.maxComputeImageUniforms = 4;
- caps.maxCombinedComputeUniformComponents =
- caps.maxComputeUniformBlocks * static_cast<GLuint>(caps.maxUniformBlockSize / 4) +
- caps.maxComputeUniformComponents;
- caps.maxComputeShaderStorageBlocks = 4;
-
- // Table 20.46
- caps.maxUniformBufferBindings = 36;
- caps.maxCombinedFragmentUniformComponents =
- caps.maxFragmentUniformBlocks * (caps.maxUniformBlockSize / 4) +
- caps.maxFragmentUniformComponents;
- caps.maxCombinedTextureImageUnits = 48;
- caps.maxCombinedShaderOutputResources = 4;
-
- // Table 20.47
- caps.maxUniformLocations = 1024;
- caps.maxAtomicCounterBufferBindings = 1;
- caps.maxAtomicCounterBufferSize = 32;
- caps.maxCombinedAtomicCounterBuffers = 1;
- caps.maxCombinedAtomicCounters = 8;
- caps.maxImageUnits = 4;
- caps.maxCombinedImageUniforms = 4;
- caps.maxShaderStorageBufferBindings = 4;
- caps.maxShaderStorageBlockSize = 1 << 27;
- caps.maxCombinedShaderStorageBlocks = 4;
- caps.shaderStorageBufferOffsetAlignment = 256;
- }
-
- if (extensions.textureRectangle)
- {
- caps.maxRectangleTextureSize = 64;
- }
-
- return caps;
-}
-}
-
-namespace egl
-{
-
-Caps::Caps()
- : textureNPOT(false)
-{
-}
-
-DisplayExtensions::DisplayExtensions()
- : createContextRobustness(false),
- d3dShareHandleClientBuffer(false),
- d3dTextureClientBuffer(false),
- surfaceD3DTexture2DShareHandle(false),
- querySurfacePointer(false),
- windowFixedSize(false),
- keyedMutex(false),
- surfaceOrientation(false),
- postSubBuffer(false),
- createContext(false),
- deviceQuery(false),
- image(false),
- imageBase(false),
- imagePixmap(false),
- glTexture2DImage(false),
- glTextureCubemapImage(false),
- glTexture3DImage(false),
- glRenderbufferImage(false),
- getAllProcAddresses(false),
- flexibleSurfaceCompatibility(false),
- directComposition(false),
- createContextNoError(false),
- stream(false),
- streamConsumerGLTexture(false),
- streamConsumerGLTextureYUV(false),
- streamProducerD3DTextureNV12(false),
- createContextWebGLCompatibility(false),
- createContextBindGeneratesResource(false),
- getSyncValues(false),
- swapBuffersWithDamage(false),
- pixelFormatFloat(false),
- surfacelessContext(false),
- displayTextureShareGroup(false),
- createContextClientArrays(false),
- programCacheControl(false),
- robustResourceInitialization(false)
-{
-}
-
-std::vector<std::string> DisplayExtensions::getStrings() const
-{
- std::vector<std::string> extensionStrings;
-
- // clang-format off
- // | Extension name | Supported flag | Output vector |
- InsertExtensionString("EGL_EXT_create_context_robustness", createContextRobustness, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_d3d_share_handle_client_buffer", d3dShareHandleClientBuffer, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_d3d_texture_client_buffer", d3dTextureClientBuffer, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_surface_d3d_texture_2d_share_handle", surfaceD3DTexture2DShareHandle, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_query_surface_pointer", querySurfacePointer, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_window_fixed_size", windowFixedSize, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_keyed_mutex", keyedMutex, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_surface_orientation", surfaceOrientation, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_direct_composition", directComposition, &extensionStrings);
- InsertExtensionString("EGL_NV_post_sub_buffer", postSubBuffer, &extensionStrings);
- InsertExtensionString("EGL_KHR_create_context", createContext, &extensionStrings);
- InsertExtensionString("EGL_EXT_device_query", deviceQuery, &extensionStrings);
- InsertExtensionString("EGL_KHR_image", image, &extensionStrings);
- InsertExtensionString("EGL_KHR_image_base", imageBase, &extensionStrings);
- InsertExtensionString("EGL_KHR_image_pixmap", imagePixmap, &extensionStrings);
- InsertExtensionString("EGL_KHR_gl_texture_2D_image", glTexture2DImage, &extensionStrings);
- InsertExtensionString("EGL_KHR_gl_texture_cubemap_image", glTextureCubemapImage, &extensionStrings);
- InsertExtensionString("EGL_KHR_gl_texture_3D_image", glTexture3DImage, &extensionStrings);
- InsertExtensionString("EGL_KHR_gl_renderbuffer_image", glRenderbufferImage, &extensionStrings);
- InsertExtensionString("EGL_KHR_get_all_proc_addresses", getAllProcAddresses, &extensionStrings);
- InsertExtensionString("EGL_KHR_stream", stream, &extensionStrings);
- InsertExtensionString("EGL_KHR_stream_consumer_gltexture", streamConsumerGLTexture, &extensionStrings);
- InsertExtensionString("EGL_NV_stream_consumer_gltexture_yuv", streamConsumerGLTextureYUV, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_flexible_surface_compatibility", flexibleSurfaceCompatibility, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_stream_producer_d3d_texture_nv12", streamProducerD3DTextureNV12, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_create_context_webgl_compatibility", createContextWebGLCompatibility, &extensionStrings);
- InsertExtensionString("EGL_CHROMIUM_create_context_bind_generates_resource", createContextBindGeneratesResource, &extensionStrings);
- InsertExtensionString("EGL_CHROMIUM_sync_control", getSyncValues, &extensionStrings);
- InsertExtensionString("EGL_EXT_swap_buffers_with_damage", swapBuffersWithDamage, &extensionStrings);
- InsertExtensionString("EGL_EXT_pixel_format_float", pixelFormatFloat, &extensionStrings);
- InsertExtensionString("EGL_KHR_surfaceless_context", surfacelessContext, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_display_texture_share_group", displayTextureShareGroup, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_create_context_client_arrays", createContextClientArrays, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_program_cache_control", programCacheControl, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_robust_resource_initialization", robustResourceInitialization, &extensionStrings);
- // TODO(jmadill): Enable this when complete.
- //InsertExtensionString("KHR_create_context_no_error", createContextNoError, &extensionStrings);
- // clang-format on
-
- return extensionStrings;
-}
-
-DeviceExtensions::DeviceExtensions()
- : deviceD3D(false)
-{
-}
-
-std::vector<std::string> DeviceExtensions::getStrings() const
-{
- std::vector<std::string> extensionStrings;
-
- // | Extension name | Supported flag | Output vector |
- InsertExtensionString("EGL_ANGLE_device_d3d", deviceD3D, &extensionStrings);
-
- return extensionStrings;
-}
-
-ClientExtensions::ClientExtensions()
- : clientExtensions(false),
- platformBase(false),
- platformDevice(false),
- platformANGLE(false),
- platformANGLED3D(false),
- platformANGLEOpenGL(false),
- platformANGLEVulkan(false),
- deviceCreation(false),
- deviceCreationD3D11(false),
- x11Visual(false),
- experimentalPresentPath(false),
- clientGetAllProcAddresses(false)
-{
-}
-
-ClientExtensions::ClientExtensions(const ClientExtensions &other) = default;
-
-std::vector<std::string> ClientExtensions::getStrings() const
-{
- std::vector<std::string> extensionStrings;
-
- // clang-format off
- // | Extension name | Supported flag | Output vector |
- InsertExtensionString("EGL_EXT_client_extensions", clientExtensions, &extensionStrings);
- InsertExtensionString("EGL_EXT_platform_base", platformBase, &extensionStrings);
- InsertExtensionString("EGL_EXT_platform_device", platformDevice, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_platform_angle", platformANGLE, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_platform_angle_d3d", platformANGLED3D, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_platform_angle_opengl", platformANGLEOpenGL, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_platform_angle_null", platformANGLENULL, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_platform_angle_vulkan", platformANGLEVulkan, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_device_creation", deviceCreation, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_device_creation_d3d11", deviceCreationD3D11, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_x11_visual", x11Visual, &extensionStrings);
- InsertExtensionString("EGL_ANGLE_experimental_present_path", experimentalPresentPath, &extensionStrings);
- InsertExtensionString("EGL_KHR_client_get_all_proc_addresses", clientGetAllProcAddresses, &extensionStrings);
- // clang-format on
-
- return extensionStrings;
-}
-
-} // namespace egl