Edit

kc3-lang/angle/src/libGLESv2/Caps.h

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2014-07-10 14:05:30
    Hash : 05881a0f
    Message : Add caps for transform feedback limits from table 6.34. BUG=angle:658 Change-Id: Ifd8c620080c8de486ffb7c8f9e985be1aba516c1 Reviewed-on: https://chromium-review.googlesource.com/207376 Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>

  • src/libGLESv2/Caps.h
  • #ifndef LIBGLESV2_CAPS_H
    #define LIBGLESV2_CAPS_H
    
    //
    // 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 "angle_gl.h"
    
    #include <set>
    #include <unordered_map>
    #include <vector>
    #include <string>
    
    namespace gl
    {
    
    typedef std::set<GLuint> SupportedSampleSet;
    
    struct TextureCaps
    {
        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;
    
        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;
    };
    
    class TextureCapsMap
    {
      public:
        typedef std::unordered_map<GLenum, TextureCaps>::const_iterator const_iterator;
    
        void insert(GLenum internalFormat, const TextureCaps &caps);
        void remove(GLenum internalFormat);
    
        const TextureCaps &get(GLenum internalFormat) const;
    
        const_iterator begin() const;
        const_iterator end() const;
    
        size_t size() const;
    
      private:
        typedef std::unordered_map<GLenum, TextureCaps> InternalFormatToCapsMap;
        InternalFormatToCapsMap mCapsMap;
    };
    
    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_rgb8_rgba8
        // GL_EXT_texture_format_BGRA8888
        // 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_EXT_sRGB
        // GL_ANGLE_depth_texture
        // GL_EXT_color_buffer_float
        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_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 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_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_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_ANGLE_timer_query
        bool timerQuery;
    
        // GL_EXT_robustness
        bool robustness;
    
        // GL_EXT_blend_minmax
        bool blendMinMax;
    
        // GL_ANGLE_framebuffer_blit
        bool framebufferBlit;
    
        // GL_ANGLE_framebuffer_multisample
        bool framebufferMultisample;
        GLuint maxSamples;
    
        // 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;
    
        // GL_ANGLE_texture_usage
        bool textureUsage;
    
        // GL_ANGLE_translated_shader_source
        bool translatedShaderSource;
    
        // ES3 Extension support
    
        // GL_EXT_color_buffer_float
        bool colorBufferFloat;
    };
    
    struct Caps
    {
        Caps();
    
        // Table 6.28, implementation dependent values
        GLuint64 maxElementIndex;
        GLuint max3DTextureSize;
        GLuint max2DTextureSize;
        GLuint maxArrayTextureLayers;
        GLfloat maxLODBias;
        GLuint maxCubeMapTextureSize;
        GLuint maxRenderbufferSize;
        GLuint maxDrawBuffers;
        GLuint maxColorAttachments;
        GLuint maxViewportWidth;
        GLuint maxViewportHeight;
        GLfloat minAliasedPointSize;
        GLfloat maxAliasedPointSize;
        GLfloat minAliasedLineWidth;
        GLfloat maxAliasedLineWidth;
    
        // Table 6.29, implementation dependent values (cont.)
        GLuint maxElementsIndices;
        GLuint maxElementsVertices;
        std::vector<GLenum> compressedTextureFormats;
        std::vector<GLenum> programBinaryFormats;
        std::vector<GLenum> shaderBinaryFormats;
        GLuint64 maxServerWaitTimeout;
    
        // Table 6.31, implementation dependent vertex shader limits
        GLuint maxVertexAttributes;
        GLuint maxVertexUniformComponents;
        GLuint maxVertexUniformVectors;
        GLuint maxVertexUniformBlocks;
        GLuint maxVertexOutputComponents;
        GLuint maxVertexTextureImageUnits;
    
        // Table 6.32, implementation dependent fragment shader limits
        GLuint maxFragmentUniformComponents;
        GLuint maxFragmentUniformVectors;
        GLuint maxFragmentUniformBlocks;
        GLuint maxFragmentInputComponents;
        GLuint maxTextureImageUnits;
        GLint minProgramTexelOffset;
        GLint maxProgramTexelOffset;
    
        // Table 6.33, implementation dependent aggregate shader limits
        GLuint maxUniformBufferBindings;
        GLuint64 maxUniformBlockSize;
        GLuint uniformBufferOffsetAlignment;
        GLuint maxCombinedUniformBlocks;
        GLuint64 maxCombinedVertexUniformComponents;
        GLuint64 maxCombinedFragmentUniformComponents;
        GLuint maxVaryingComponents;
        GLuint maxVaryingVectors;
        GLuint maxCombinedTextureImageUnits;
    
        // Table 6.34, implementation dependent transform feedback limits
        GLuint maxTransformFeedbackInterleavedComponents;
        GLuint maxTransformFeedbackSeparateAttributes;
        GLuint maxTransformFeedbackSeparateComponents;
    };
    
    }
    
    #endif // LIBGLESV2_CAPS_H