diff options
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/Caps.h')
-rw-r--r-- | src/3rdparty/angle/src/libANGLE/Caps.h | 758 |
1 files changed, 0 insertions, 758 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/Caps.h b/src/3rdparty/angle/src/libANGLE/Caps.h deleted file mode 100644 index 64bdf97112..0000000000 --- a/src/3rdparty/angle/src/libANGLE/Caps.h +++ /dev/null @@ -1,758 +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. -// - -#ifndef LIBANGLE_CAPS_H_ -#define LIBANGLE_CAPS_H_ - -#include "angle_gl.h" -#include "libANGLE/Version.h" -#include "libANGLE/angletypes.h" -#include "libANGLE/renderer/Format.h" - -#include <map> -#include <set> -#include <string> -#include <vector> -#include <array> - -namespace gl -{ - -struct Extensions; - -typedef std::set<GLuint> SupportedSampleSet; - -struct TextureCaps -{ - TextureCaps(); - TextureCaps(const TextureCaps &other); - ~TextureCaps(); - - // Supports for basic texturing: glTexImage, glTexSubImage, etc - bool texturable; - - // Support for linear or anisotropic filtering - bool filterable; - - // Support for being used as a framebuffer attachment or renderbuffer format - bool renderable; - - // Set of supported sample counts, only guaranteed to be valid in ES3. - SupportedSampleSet sampleCounts; - - // Get the maximum number of samples supported - GLuint getMaxSamples() const; - - // Get the number of supported samples that is at least as many as requested. Returns 0 if - // there are no sample counts available - GLuint getNearestSamples(GLuint requestedSamples) const; -}; - -TextureCaps GenerateMinimumTextureCaps(GLenum internalFormat, - const Version &clientVersion, - const Extensions &extensions); - -class TextureCapsMap final : angle::NonCopyable -{ - public: - TextureCapsMap(); - ~TextureCapsMap(); - - // These methods are deprecated. Please use angle::Format for new features. - void insert(GLenum internalFormat, const TextureCaps &caps); - const TextureCaps &get(GLenum internalFormat) const; - - void clear(); - - // Prefer using angle::Format methods. - const TextureCaps &get(angle::Format::ID formatID) const; - void set(angle::Format::ID formatID, const TextureCaps &caps); - - private: - TextureCaps &get(angle::Format::ID formatID); - - // Indexed by angle::Format::ID - std::array<TextureCaps, angle::kNumANGLEFormats> mFormatData; -}; - -void InitMinimumTextureCapsMap(const Version &clientVersion, - const Extensions &extensions, - TextureCapsMap *capsMap); - -struct Extensions -{ - Extensions(); - - // Generate a vector of supported extension strings - std::vector<std::string> getStrings() const; - - // Set all texture related extension support based on the supported textures. - // Determines support for: - // GL_OES_packed_depth_stencil - // GL_OES_rgb8_rgba8 - // GL_EXT_texture_format_BGRA8888 - // GL_EXT_color_buffer_half_float, - // GL_OES_texture_half_float, GL_OES_texture_half_float_linear - // GL_OES_texture_float, GL_OES_texture_float_linear - // GL_EXT_texture_rg - // GL_EXT_texture_compression_dxt1, GL_ANGLE_texture_compression_dxt3, - // GL_ANGLE_texture_compression_dxt5 - // GL_KHR_texture_compression_astc_hdr, GL_KHR_texture_compression_astc_ldr - // GL_OES_compressed_ETC1_RGB8_texture - // GL_EXT_sRGB - // GL_ANGLE_depth_texture, GL_OES_depth32 - // GL_EXT_color_buffer_float - // GL_EXT_texture_norm16 - void setTextureExtensionSupport(const TextureCapsMap &textureCaps); - - // ES2 Extension support - - // GL_OES_element_index_uint - bool elementIndexUint; - - // GL_OES_packed_depth_stencil - bool packedDepthStencil; - - // GL_OES_get_program_binary - bool getProgramBinary; - - // GL_OES_rgb8_rgba8 - // Implies that TextureCaps for GL_RGB8 and GL_RGBA8 exist - bool rgb8rgba8; - - // GL_EXT_texture_format_BGRA8888 - // Implies that TextureCaps for GL_BGRA8 exist - bool textureFormatBGRA8888; - - // GL_EXT_read_format_bgra - bool readFormatBGRA; - - // GL_NV_pixel_buffer_object - bool pixelBufferObject; - - // GL_OES_mapbuffer and GL_EXT_map_buffer_range - bool mapBuffer; - bool mapBufferRange; - - // GL_EXT_color_buffer_half_float - // Together with GL_OES_texture_half_float in a GLES 2.0 context, implies that half-float - // textures are renderable. - bool colorBufferHalfFloat; - - // GL_OES_texture_half_float and GL_OES_texture_half_float_linear - // Implies that TextureCaps for GL_RGB16F, GL_RGBA16F, GL_ALPHA32F_EXT, GL_LUMINANCE32F_EXT and - // GL_LUMINANCE_ALPHA32F_EXT exist - bool textureHalfFloat; - bool textureHalfFloatLinear; - - // GL_OES_texture_float and GL_OES_texture_float_linear - // Implies that TextureCaps for GL_RGB32F, GL_RGBA32F, GL_ALPHA16F_EXT, GL_LUMINANCE16F_EXT and - // GL_LUMINANCE_ALPHA16F_EXT exist - bool textureFloat; - bool textureFloatLinear; - - // GL_EXT_texture_rg - // Implies that TextureCaps for GL_R8, GL_RG8 (and floating point R/RG texture formats if floating point extensions - // are also present) exist - bool textureRG; - - // GL_EXT_texture_compression_dxt1, GL_ANGLE_texture_compression_dxt3 and GL_ANGLE_texture_compression_dxt5 - // Implies that TextureCaps exist for GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT - // GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE and GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE - bool textureCompressionDXT1; - bool textureCompressionDXT3; - bool textureCompressionDXT5; - - // GL_EXT_texture_compression_s3tc_srgb - // Implies that TextureCaps exist for GL_COMPRESSED_SRGB_S3TC_DXT1_EXT, - // GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, and - // GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT - bool textureCompressionS3TCsRGB; - - // GL_KHR_texture_compression_astc_hdr - bool textureCompressionASTCHDR; - - // GL_KHR_texture_compression_astc_ldr - bool textureCompressionASTCLDR; - - // GL_OES_compressed_ETC1_RGB8_texture - // Implies that TextureCaps for GL_ETC1_RGB8_OES exist - bool compressedETC1RGB8Texture; - - // GL_EXT_sRGB - // Implies that TextureCaps for GL_SRGB8_ALPHA8 and GL_SRGB8 exist - // TODO: Don't advertise this extension in ES3 - bool sRGB; - - // GL_ANGLE_depth_texture - bool depthTextures; - - // GL_OES_depth32 - // Allows DEPTH_COMPONENT32_OES as a valid Renderbuffer format. - bool depth32; - - // GL_EXT_texture_storage - bool textureStorage; - - // GL_OES_texture_npot - bool textureNPOT; - - // GL_EXT_draw_buffers - bool drawBuffers; - - // GL_EXT_texture_filter_anisotropic - bool textureFilterAnisotropic; - GLfloat maxTextureAnisotropy; - - // GL_EXT_occlusion_query_boolean - bool occlusionQueryBoolean; - - // GL_NV_fence - bool fence; - - // GL_EXT_disjoint_timer_query - bool disjointTimerQuery; - GLuint queryCounterBitsTimeElapsed; - GLuint queryCounterBitsTimestamp; - - // GL_EXT_robustness - bool robustness; - - // GL_KHR_robust_buffer_access_behavior - bool robustBufferAccessBehavior; - - // GL_EXT_blend_minmax - bool blendMinMax; - - // GL_ANGLE_framebuffer_blit - bool framebufferBlit; - - // GL_ANGLE_framebuffer_multisample - bool framebufferMultisample; - - // GL_ANGLE_instanced_arrays - bool instancedArrays; - - // GL_ANGLE_pack_reverse_row_order - bool packReverseRowOrder; - - // GL_OES_standard_derivatives - bool standardDerivatives; - - // GL_EXT_shader_texture_lod - bool shaderTextureLOD; - - // GL_EXT_frag_depth - bool fragDepth; - - // ANGLE_multiview - bool multiview; - GLuint maxViews; - - // GL_ANGLE_texture_usage - bool textureUsage; - - // GL_ANGLE_translated_shader_source - bool translatedShaderSource; - - // GL_OES_fbo_render_mipmap - bool fboRenderMipmap; - - // GL_EXT_discard_framebuffer - bool discardFramebuffer; - - // EXT_debug_marker - bool debugMarker; - - // GL_OES_EGL_image - bool eglImage; - - // GL_OES_EGL_image_external - bool eglImageExternal; - - // GL_OES_EGL_image_external_essl3 - bool eglImageExternalEssl3; - - // NV_EGL_stream_consumer_external - bool eglStreamConsumerExternal; - - // EXT_unpack_subimage - bool unpackSubimage; - - // NV_pack_subimage - bool packSubimage; - - // GL_OES_vertex_array_object - bool vertexArrayObject; - - // GL_KHR_debug - bool debug; - GLuint maxDebugMessageLength; - GLuint maxDebugLoggedMessages; - GLuint maxDebugGroupStackDepth; - GLuint maxLabelLength; - - // KHR_no_error - bool noError; - - // GL_ANGLE_lossy_etc_decode - bool lossyETCDecode; - - // GL_CHROMIUM_bind_uniform_location - bool bindUniformLocation; - - // GL_CHROMIUM_sync_query - bool syncQuery; - - // GL_CHROMIUM_copy_texture - bool copyTexture; - - // GL_CHROMIUM_copy_compressed_texture - bool copyCompressedTexture; - - // GL_ANGLE_webgl_compatibility - bool webglCompatibility; - - // GL_ANGLE_request_extension - bool requestExtension; - - // GL_CHROMIUM_bind_generates_resource - bool bindGeneratesResource; - - // GL_ANGLE_robust_client_memory - bool robustClientMemory; - - // GL_EXT_texture_sRGB_decode - bool textureSRGBDecode; - - // GL_EXT_sRGB_write_control - bool sRGBWriteControl; - - // GL_CHROMIUM_color_buffer_float_rgb - bool colorBufferFloatRGB; - - // GL_CHROMIUM_color_buffer_float_rgba - bool colorBufferFloatRGBA; - - // ES3 Extension support - - // GL_EXT_color_buffer_float - bool colorBufferFloat; - - // GL_EXT_multisample_compatibility. - // written against ES 3.1 but can apply to earlier versions. - bool multisampleCompatibility; - - // GL_CHROMIUM_framebuffer_mixed_samples - bool framebufferMixedSamples; - - // GL_EXT_texture_norm16 - // written against ES 3.1 but can apply to ES 3.0 as well. - bool textureNorm16; - - // GL_CHROMIUM_path_rendering - bool pathRendering; - - // GL_OES_surfaceless_context - bool surfacelessContext; - - // GL_ANGLE_client_arrays - bool clientArrays; - - // GL_ANGLE_robust_resource_initialization - bool robustResourceInitialization; - - // GL_ANGLE_program_cache_control - bool programCacheControl; - - // GL_ANGLE_texture_rectangle - bool textureRectangle; - - // GL_EXT_geometry_shader - bool geometryShader; - // GL_EXT_geometry_shader (May 31, 2016) Table 20.43gs: Implementation dependent geometry shader - // limits - // TODO(jiawei.shao@intel.com): add all implementation dependent geometry shader limits. - GLuint maxGeometryOutputVertices; - GLuint maxGeometryShaderInvocations; -}; - -struct ExtensionInfo -{ - // If this extension can be enabled with glRequestExtension (GL_ANGLE_request_extension) - bool Requestable = false; - - // Pointer to a boolean member of the Extensions struct - typedef bool(Extensions::*ExtensionBool); - ExtensionBool ExtensionsMember = nullptr; -}; - -using ExtensionInfoMap = std::map<std::string, ExtensionInfo>; -const ExtensionInfoMap &GetExtensionInfoMap(); - -struct Limitations -{ - Limitations(); - - // Renderer doesn't support gl_FrontFacing in fragment shaders - bool noFrontFacingSupport; - - // Renderer doesn't support GL_SAMPLE_ALPHA_TO_COVERAGE - bool noSampleAlphaToCoverageSupport; - - // In glVertexAttribDivisorANGLE, attribute zero must have a zero divisor - bool attributeZeroRequiresZeroDivisorInEXT; - - // Unable to support different values for front and back faces for stencil refs and masks - bool noSeparateStencilRefsAndMasks; - - // Renderer doesn't support non-constant indexing loops in fragment shader - bool shadersRequireIndexedLoopValidation; - - // Renderer doesn't support Simultaneous use of GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA - // and GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR blend functions. - bool noSimultaneousConstantColorAndAlphaBlendFunc; -}; - -struct TypePrecision -{ - TypePrecision(); - TypePrecision(const TypePrecision &other); - - void setIEEEFloat(); - void setTwosComplementInt(unsigned int bits); - void setSimulatedFloat(unsigned int range, unsigned int precision); - void setSimulatedInt(unsigned int range); - - void get(GLint *returnRange, GLint *returnPrecision) const; - - std::array<GLint, 2> range; - GLint precision; -}; - -struct Caps -{ - Caps(); - Caps(const Caps &other); - ~Caps(); - - // ES 3.1 (April 29, 2015) 20.39: implementation dependent values - GLuint64 maxElementIndex; - GLuint max3DTextureSize; - GLuint max2DTextureSize; - GLuint maxRectangleTextureSize; - GLuint maxArrayTextureLayers; - GLfloat maxLODBias; - GLuint maxCubeMapTextureSize; - GLuint maxRenderbufferSize; - GLfloat minAliasedPointSize; - GLfloat maxAliasedPointSize; - GLfloat minAliasedLineWidth; - GLfloat maxAliasedLineWidth; - - // ES 3.1 (April 29, 2015) 20.40: implementation dependent values (cont.) - GLuint maxDrawBuffers; - GLuint maxFramebufferWidth; - GLuint maxFramebufferHeight; - GLuint maxFramebufferSamples; - GLuint maxColorAttachments; - GLuint maxViewportWidth; - GLuint maxViewportHeight; - GLuint maxSampleMaskWords; - GLuint maxColorTextureSamples; - GLuint maxDepthTextureSamples; - GLuint maxIntegerSamples; - GLuint64 maxServerWaitTimeout; - - // ES 3.1 (April 29, 2015) Table 20.41: Implementation dependent values (cont.) - GLint maxVertexAttribRelativeOffset; - GLuint maxVertexAttribBindings; - GLint maxVertexAttribStride; - GLuint maxElementsIndices; - GLuint maxElementsVertices; - std::vector<GLenum> compressedTextureFormats; - std::vector<GLenum> programBinaryFormats; - std::vector<GLenum> shaderBinaryFormats; - TypePrecision vertexHighpFloat; - TypePrecision vertexMediumpFloat; - TypePrecision vertexLowpFloat; - TypePrecision vertexHighpInt; - TypePrecision vertexMediumpInt; - TypePrecision vertexLowpInt; - TypePrecision fragmentHighpFloat; - TypePrecision fragmentMediumpFloat; - TypePrecision fragmentLowpFloat; - TypePrecision fragmentHighpInt; - TypePrecision fragmentMediumpInt; - TypePrecision fragmentLowpInt; - - // ES 3.1 (April 29, 2015) Table 20.43: Implementation dependent Vertex shader limits - GLuint maxVertexAttributes; - GLuint maxVertexUniformComponents; - GLuint maxVertexUniformVectors; - GLuint maxVertexUniformBlocks; - GLuint maxVertexOutputComponents; - GLuint maxVertexTextureImageUnits; - GLuint maxVertexAtomicCounterBuffers; - GLuint maxVertexAtomicCounters; - GLuint maxVertexImageUniforms; - GLuint maxVertexShaderStorageBlocks; - - // ES 3.1 (April 29, 2015) Table 20.44: Implementation dependent Fragment shader limits - GLuint maxFragmentUniformComponents; - GLuint maxFragmentUniformVectors; - GLuint maxFragmentUniformBlocks; - GLuint maxFragmentInputComponents; - GLuint maxTextureImageUnits; - GLuint maxFragmentAtomicCounterBuffers; - GLuint maxFragmentAtomicCounters; - GLuint maxFragmentImageUniforms; - GLuint maxFragmentShaderStorageBlocks; - GLint minProgramTextureGatherOffset; - GLuint maxProgramTextureGatherOffset; - GLint minProgramTexelOffset; - GLint maxProgramTexelOffset; - - // ES 3.1 (April 29, 2015) Table 20.45: implementation dependent compute shader limits - std::array<GLuint, 3> maxComputeWorkGroupCount; - std::array<GLuint, 3> maxComputeWorkGroupSize; - GLuint maxComputeWorkGroupInvocations; - GLuint maxComputeUniformBlocks; - GLuint maxComputeTextureImageUnits; - GLuint maxComputeSharedMemorySize; - GLuint maxComputeUniformComponents; - GLuint maxComputeAtomicCounterBuffers; - GLuint maxComputeAtomicCounters; - GLuint maxComputeImageUniforms; - GLuint maxCombinedComputeUniformComponents; - GLuint maxComputeShaderStorageBlocks; - - // ES 3.1 (April 29, 2015) Table 20.46: implementation dependent aggregate shader limits - GLuint maxUniformBufferBindings; - GLuint64 maxUniformBlockSize; - GLuint uniformBufferOffsetAlignment; - GLuint maxCombinedUniformBlocks; - GLuint64 maxCombinedVertexUniformComponents; - GLuint64 maxCombinedFragmentUniformComponents; - GLuint maxVaryingComponents; - GLuint maxVaryingVectors; - GLuint maxCombinedTextureImageUnits; - GLuint maxCombinedShaderOutputResources; - - // ES 3.1 (April 29, 2015) Table 20.47: implementation dependent aggregate shader limits (cont.) - GLuint maxUniformLocations; - GLuint maxAtomicCounterBufferBindings; - GLuint maxAtomicCounterBufferSize; - GLuint maxCombinedAtomicCounterBuffers; - GLuint maxCombinedAtomicCounters; - GLuint maxImageUnits; - GLuint maxCombinedImageUniforms; - GLuint maxShaderStorageBufferBindings; - GLuint64 maxShaderStorageBlockSize; - GLuint maxCombinedShaderStorageBlocks; - GLuint shaderStorageBufferOffsetAlignment; - - // ES 3.1 (April 29, 2015) Table 20.48: implementation dependent transform feedback limits - GLuint maxTransformFeedbackInterleavedComponents; - GLuint maxTransformFeedbackSeparateAttributes; - GLuint maxTransformFeedbackSeparateComponents; - - // ES 3.1 (April 29, 2015) Table 20.49: Framebuffer Dependent Values - GLuint maxSamples; -}; - -Caps GenerateMinimumCaps(const Version &clientVersion, const Extensions &extensions); -} - -namespace egl -{ - -struct Caps -{ - Caps(); - - // Support for NPOT surfaces - bool textureNPOT; -}; - -struct DisplayExtensions -{ - DisplayExtensions(); - - // Generate a vector of supported extension strings - std::vector<std::string> getStrings() const; - - // EGL_EXT_create_context_robustness - bool createContextRobustness; - - // EGL_ANGLE_d3d_share_handle_client_buffer - bool d3dShareHandleClientBuffer; - - // EGL_ANGLE_d3d_texture_client_buffer - bool d3dTextureClientBuffer; - - // EGL_ANGLE_surface_d3d_texture_2d_share_handle - bool surfaceD3DTexture2DShareHandle; - - // EGL_ANGLE_query_surface_pointer - bool querySurfacePointer; - - // EGL_ANGLE_window_fixed_size - bool windowFixedSize; - - // EGL_ANGLE_keyed_mutex - bool keyedMutex; - - // EGL_ANGLE_surface_orientation - bool surfaceOrientation; - - // EGL_NV_post_sub_buffer - bool postSubBuffer; - - // EGL_KHR_create_context - bool createContext; - - // EGL_EXT_device_query - bool deviceQuery; - - // EGL_KHR_image - bool image; - - // EGL_KHR_image_base - bool imageBase; - - // EGL_KHR_image_pixmap - bool imagePixmap; - - // EGL_KHR_gl_texture_2D_image - bool glTexture2DImage; - - // EGL_KHR_gl_texture_cubemap_image - bool glTextureCubemapImage; - - // EGL_KHR_gl_texture_3D_image - bool glTexture3DImage; - - // EGL_KHR_gl_renderbuffer_image - bool glRenderbufferImage; - - // EGL_KHR_get_all_proc_addresses - bool getAllProcAddresses; - - // EGL_ANGLE_flexible_surface_compatibility - bool flexibleSurfaceCompatibility; - - // EGL_ANGLE_direct_composition - bool directComposition; - - // KHR_create_context_no_error - bool createContextNoError; - - // EGL_KHR_stream - bool stream; - - // EGL_KHR_stream_consumer_gltexture - bool streamConsumerGLTexture; - - // EGL_NV_stream_consumer_gltexture_yuv - bool streamConsumerGLTextureYUV; - - // EGL_ANGLE_stream_producer_d3d_texture_nv12 - bool streamProducerD3DTextureNV12; - - // EGL_ANGLE_create_context_webgl_compatibility - bool createContextWebGLCompatibility; - - // EGL_CHROMIUM_create_context_bind_generates_resource - bool createContextBindGeneratesResource; - - // EGL_CHROMIUM_get_sync_values - bool getSyncValues; - - // EGL_EXT_swap_buffers_with_damage - bool swapBuffersWithDamage; - - // EGL_EXT_pixel_format_float - bool pixelFormatFloat; - - // EGL_KHR_surfaceless_context - bool surfacelessContext; - - // EGL_ANGLE_display_texture_share_group - bool displayTextureShareGroup; - - // EGL_ANGLE_create_context_client_arrays - bool createContextClientArrays; - - // EGL_ANGLE_program_cache_control - bool programCacheControl; - - // EGL_ANGLE_robust_resource_initialization - bool robustResourceInitialization; -}; - -struct DeviceExtensions -{ - DeviceExtensions(); - - // Generate a vector of supported extension strings - std::vector<std::string> getStrings() const; - - // EGL_ANGLE_device_d3d - bool deviceD3D; -}; - -struct ClientExtensions -{ - ClientExtensions(); - ClientExtensions(const ClientExtensions &other); - - // Generate a vector of supported extension strings - std::vector<std::string> getStrings() const; - - // EGL_EXT_client_extensions - bool clientExtensions; - - // EGL_EXT_platform_base - bool platformBase; - - // EGL_EXT_platform_device - bool platformDevice; - - // EGL_ANGLE_platform_angle - bool platformANGLE; - - // EGL_ANGLE_platform_angle_d3d - bool platformANGLED3D; - - // EGL_ANGLE_platform_angle_opengl - bool platformANGLEOpenGL; - - // EGL_ANGLE_platform_angle_null - bool platformANGLENULL; - - // EGL_ANGLE_platform_angle_vulkan - bool platformANGLEVulkan; - - // EGL_ANGLE_device_creation - bool deviceCreation; - - // EGL_ANGLE_device_creation_d3d11 - bool deviceCreationD3D11; - - // EGL_ANGLE_x11_visual - bool x11Visual; - - // EGL_ANGLE_experimental_present_path - bool experimentalPresentPath; - - // EGL_KHR_client_get_all_proc_addresses - bool clientGetAllProcAddresses; -}; - -} // namespace egl - -#endif // LIBANGLE_CAPS_H_ |