Edit

kc3-lang/angle/src/common/utilities.h

Branch :

  • Show log

    Commit

  • Author : jchen10
    Date : 2017-05-08 11:01:20
    Hash : 4cdac9eb
    Message : ES31: Add atomic counter for GLSL parsing This makes shader compiler support the new basic type 'atomic_uint' and validate its layout qualifiers properly. BUG=angleproject:1729 TEST=angle_unittests:AtomicCounterTest angle_deqp_gles31_tests:dEQP-GLES31.functional.atomic_counter.layout.invalid* angle_deqp_gles31_tests:dEQP-GLES31.functional.debug.negative_coverage.*.atomic* Change-Id: Ia237eadf6ea72314f436a0abbb93a05598e71eba Reviewed-on: https://chromium-review.googlesource.com/500088 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • src/common/utilities.h
  • //
    // Copyright (c) 2002-2013 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.
    //
    
    // utilities.h: Conversion functions and other utility routines.
    
    #ifndef COMMON_UTILITIES_H_
    #define COMMON_UTILITIES_H_
    
    #include <EGL/egl.h>
    #include <EGL/eglext.h>
    
    #include "angle_gl.h"
    #include <string>
    #include <math.h>
    
    #include "common/mathutil.h"
    
    namespace gl
    {
    
    int VariableComponentCount(GLenum type);
    GLenum VariableComponentType(GLenum type);
    size_t VariableComponentSize(GLenum type);
    size_t VariableInternalSize(GLenum type);
    size_t VariableExternalSize(GLenum type);
    GLenum VariableBoolVectorType(GLenum type);
    int VariableRowCount(GLenum type);
    int VariableColumnCount(GLenum type);
    bool IsSamplerType(GLenum type);
    bool IsImageType(GLenum type);
    bool IsAtomicCounterType(GLenum type);
    bool IsOpaqueType(GLenum type);
    GLenum SamplerTypeToTextureType(GLenum samplerType);
    bool IsMatrixType(GLenum type);
    GLenum TransposeMatrixType(GLenum type);
    int VariableRegisterCount(GLenum type);
    int MatrixRegisterCount(GLenum type, bool isRowMajorMatrix);
    int MatrixComponentCount(GLenum type, bool isRowMajorMatrix);
    int VariableSortOrder(GLenum type);
    
    int AllocateFirstFreeBits(unsigned int *bits, unsigned int allocationSize, unsigned int bitsSize);
    
    static const GLenum FirstCubeMapTextureTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X;
    static const GLenum LastCubeMapTextureTarget = GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;
    bool IsCubeMapTextureTarget(GLenum target);
    size_t CubeMapTextureTargetToLayerIndex(GLenum target);
    GLenum LayerIndexToCubeMapTextureTarget(size_t index);
    
    // Parse the base resource name and array index.  Returns the base name of the resource.
    // outSubscript is set to GL_INVALID_INDEX if the provided name is not an array or the array index
    // is invalid.
    std::string ParseResourceName(const std::string &name, size_t *outSubscript);
    
    // Find the range of index values in the provided indices pointer.  Primitive restart indices are
    // only counted in the range if primitive restart is disabled.
    IndexRange ComputeIndexRange(GLenum indexType,
                                 const GLvoid *indices,
                                 size_t count,
                                 bool primitiveRestartEnabled);
    
    // Get the primitive restart index value for the given index type.
    GLuint GetPrimitiveRestartIndex(GLenum indexType);
    
    bool IsTriangleMode(GLenum drawMode);
    bool IsIntegerFormat(GLenum unsizedFormat);
    
    // [OpenGL ES 3.0.2] Section 2.3.1 page 14
    // Data Conversion For State-Setting Commands
    // Floating-point values are rounded to the nearest integer, instead of truncated, as done by static_cast.
    template <typename outT> outT iround(GLfloat value) { return static_cast<outT>(value > 0.0f ? floor(value + 0.5f) : ceil(value - 0.5f)); }
    template <typename outT> outT uiround(GLfloat value) { return static_cast<outT>(value + 0.5f); }
    
    // Helper for converting arbitrary GL types to other GL types used in queries and state setting
    template <typename ParamType>
    GLuint ConvertToGLuint(ParamType param)
    {
        return static_cast<GLuint>(param);
    }
    template <>
    GLuint ConvertToGLuint(GLfloat param);
    
    template <typename ParamType>
    GLint ConvertToGLint(ParamType param)
    {
        return static_cast<GLint>(param);
    }
    template <>
    GLint ConvertToGLint(GLfloat param);
    
    // Same conversion as uint
    template <typename ParamType>
    GLenum ConvertToGLenum(ParamType param)
    {
        return static_cast<GLenum>(ConvertToGLuint(param));
    }
    
    template <typename ParamType>
    GLfloat ConvertToGLfloat(ParamType param)
    {
        return static_cast<GLfloat>(param);
    }
    
    template <typename ParamType>
    ParamType ConvertFromGLfloat(GLfloat param)
    {
        return static_cast<ParamType>(param);
    }
    template <>
    GLint ConvertFromGLfloat(GLfloat param);
    template <>
    GLuint ConvertFromGLfloat(GLfloat param);
    
    template <typename ParamType>
    ParamType ConvertFromGLenum(GLenum param)
    {
        return static_cast<ParamType>(param);
    }
    
    template <typename ParamType>
    ParamType ConvertFromGLuint(GLuint param)
    {
        return static_cast<ParamType>(param);
    }
    
    template <typename ParamType>
    ParamType ConvertFromGLint(GLint param)
    {
        return static_cast<ParamType>(param);
    }
    
    template <typename ParamType>
    ParamType ConvertFromGLboolean(GLboolean param)
    {
        return static_cast<ParamType>(param ? GL_TRUE : GL_FALSE);
    }
    
    template <typename ParamType>
    ParamType ConvertFromGLint64(GLint64 param)
    {
        return clampCast<ParamType>(param);
    }
    
    unsigned int ParseAndStripArrayIndex(std::string *name);
    
    }  // namespace gl
    
    namespace egl
    {
    static const EGLenum FirstCubeMapTextureTarget = EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR;
    static const EGLenum LastCubeMapTextureTarget = EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR;
    bool IsCubeMapTextureTarget(EGLenum target);
    size_t CubeMapTextureTargetToLayerIndex(EGLenum target);
    EGLenum LayerIndexToCubeMapTextureTarget(size_t index);
    bool IsTextureTarget(EGLenum target);
    bool IsRenderbufferTarget(EGLenum target);
    }
    
    namespace egl_gl
    {
    GLenum EGLCubeMapTargetToGLCubeMapTarget(EGLenum eglTarget);
    GLenum EGLImageTargetToGLTextureTarget(EGLenum eglTarget);
    GLuint EGLClientBufferToGLObjectHandle(EGLClientBuffer buffer);
    }
    
    namespace gl_egl
    {
    EGLenum GLComponentTypeToEGLColorComponentType(GLenum glComponentType);
    }  // namespace gl_egl
    
    #if !defined(ANGLE_ENABLE_WINDOWS_STORE)
    std::string getTempPath();
    void writeFile(const char* path, const void* data, size_t size);
    #endif
    
    #if defined (ANGLE_PLATFORM_WINDOWS)
    void ScheduleYield();
    #endif
    
    #endif  // COMMON_UTILITIES_H_