Edit

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

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2015-10-08 12:58:45
    Hash : 4a3c2341
    Message : Program: Clean up UBO info gathering. The data size & block member info was getting messy, so clean up how we query this from the Impl layer. Also remove the register information from gl::UniformBlock, moving it into the D3D-only world. BUG=angleproject:1172 Change-Id: I40af658ebbd6b7c1a4251906a387ebcbb621cf77 Reviewed-on: https://chromium-review.googlesource.com/304150 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Tryjob-Request: Jamie Madill <jmadill@chromium.org> Tested-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);
    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 uniform name and array index.  Returns the base name of the uniform. outSubscript is
    // set to GL_INVALID_INDEX if the provided name is not an array or the array index is invalid.
    std::string ParseUniformName(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);
    
    // [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); }
    
    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);
    }
    
    #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_