#ifndef COMMON_UTILITIES_H_
#define COMMON_UTILITIES_H_
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include <GLSLANG/ShaderLang.h>
#include <math.h>
#include <string>
#include <vector>
#include "angle_gl.h"
#include "common/PackedEnums.h"
#include "common/mathutil.h"
#include "common/platform.h"
namespace sh
{
struct ShaderVariable;
}
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);
int VariableRowCount(GLenum type);
int VariableColumnCount(GLenum type);
bool IsSamplerType(GLenum type);
bool IsSamplerCubeType(GLenum type);
bool IsSamplerYUVType(GLenum type);
bool IsImageType(GLenum type);
bool IsImage2DType(GLenum type);
bool IsAtomicCounterType(GLenum type);
bool IsOpaqueType(GLenum type);
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);
GLenum VariableBoolVectorType(GLenum type);
std::string GetGLSLTypeString(GLenum type);
int AllocateFirstFreeBits(unsigned int *bits, unsigned int allocationSize, unsigned int bitsSize);
std::string ParseResourceName(const std::string &name, std::vector<unsigned int> *outSubscripts);
bool IsBuiltInName(const char *name);
ANGLE_INLINE bool IsBuiltInName(const std::string &name)
{ … }
std::string StripLastArrayIndex(const std::string &name);
bool SamplerNameContainsNonZeroArrayElement(const std::string &name);
IndexRange ComputeIndexRange(DrawElementsType indexType,
const GLvoid *indices,
size_t count,
bool primitiveRestartEnabled);
GLuint GetPrimitiveRestartIndex(DrawElementsType indexType);
template <typename T>
constexpr T GetPrimitiveRestartIndexFromType()
{ … }
static_assert …;
static_assert …;
static_assert …;
bool IsTriangleMode(PrimitiveMode drawMode);
bool IsPolygonMode(PrimitiveMode mode);
namespace priv
{
extern const angle::PackedEnumMap<PrimitiveMode, bool> gLineModes;
}
ANGLE_INLINE bool IsLineMode(PrimitiveMode primitiveMode)
{ … }
bool IsIntegerFormat(GLenum unsizedFormat);
unsigned int ArraySizeProduct(const std::vector<unsigned int> &arraySizes);
unsigned int InnerArraySizeProduct(const std::vector<unsigned int> &arraySizes);
unsigned int OutermostArraySize(const std::vector<unsigned int> &arraySizes);
unsigned int ParseArrayIndex(const std::string &name, size_t *nameLengthWithoutArrayIndexOut);
enum class SamplerFormat : uint8_t
{ … };
struct UniformTypeInfo final : angle::NonCopyable
{ … };
inline constexpr UniformTypeInfo::UniformTypeInfo(GLenum type,
GLenum componentType,
GLenum textureType,
GLenum transposedMatrixType,
GLenum boolVectorType,
SamplerFormat samplerFormat,
int rowCount,
int columnCount,
int componentCount,
size_t componentSize,
size_t internalSize,
size_t externalSize,
bool isSampler,
bool isMatrixType,
bool isImageType)
: … { … }
struct UniformTypeIndex
{ … };
const UniformTypeInfo &GetUniformTypeInfo(GLenum uniformType);
UniformTypeIndex GetUniformTypeIndex(GLenum uniformType);
const UniformTypeInfo &GetUniformTypeInfoFromIndex(UniformTypeIndex index);
const char *GetGenericErrorMessage(GLenum error);
unsigned int ElementTypeSize(GLenum elementType);
bool IsMipmapFiltered(GLenum minFilterMode);
template <typename T>
T GetClampedVertexCount(size_t vertexCount)
{ … }
enum class PipelineType
{ … };
PipelineType GetPipelineType(ShaderType shaderType);
const char *GetDebugMessageSourceString(GLenum source);
const char *GetDebugMessageTypeString(GLenum type);
const char *GetDebugMessageSeverityString(GLenum severity);
enum class SrgbOverride
{ … };
enum class SrgbWriteControlMode
{ … };
enum class YuvSamplingMode
{ … };
ShaderType GetShaderTypeFromBitfield(size_t singleShaderType);
GLbitfield GetBitfieldFromShaderType(ShaderType shaderType);
bool ShaderTypeSupportsTransformFeedback(ShaderType shaderType);
ShaderType GetLastPreFragmentStage(ShaderBitSet shaderTypes);
}
namespace egl
{
static const EGLenum FirstCubeMapTextureTarget = …;
static const EGLenum LastCubeMapTextureTarget = …;
bool IsCubeMapTextureTarget(EGLenum target);
size_t CubeMapTextureTargetToLayerIndex(EGLenum target);
EGLenum LayerIndexToCubeMapTextureTarget(size_t index);
bool IsTextureTarget(EGLenum target);
bool IsRenderbufferTarget(EGLenum target);
bool IsExternalImageTarget(EGLenum target);
const char *GetGenericErrorMessage(EGLint error);
}
namespace egl_gl
{
GLuint EGLClientBufferToGLObjectHandle(EGLClientBuffer buffer);
}
namespace gl_egl
{
EGLenum GLComponentTypeToEGLColorComponentType(GLenum glComponentType);
EGLClientBuffer GLObjectHandleToEGLClientBuffer(GLuint handle);
}
namespace angle
{
template <typename T>
constexpr size_t ConstStrLen(T s)
{ … }
bool IsDrawEntryPoint(EntryPoint entryPoint);
bool IsDispatchEntryPoint(EntryPoint entryPoint);
bool IsClearEntryPoint(EntryPoint entryPoint);
bool IsQueryEntryPoint(EntryPoint entryPoint);
template <typename T>
void FillWithNullptr(T *array)
{ … }
}
void writeFile(const char *path, const void *data, size_t size);
template <typename E>
constexpr typename std::underlying_type<E>::type ToUnderlying(E e) noexcept
{ … }
#endif