#ifndef LIBANGLE_RENDERER_RENDERER_UTILS_H_
#define LIBANGLE_RENDERER_RENDERER_UTILS_H_
#include <cstdint>
#include <limits>
#include <map>
#include "GLSLANG/ShaderLang.h"
#include "common/angleutils.h"
#include "common/utilities.h"
#include "libANGLE/ImageIndex.h"
#include "libANGLE/angletypes.h"
namespace angle
{
struct FeatureSetBase;
struct Format;
struct ImageLoadContext;
enum class FormatID;
}
namespace gl
{
struct FormatType;
struct InternalFormat;
class ProgramExecutable;
class State;
}
namespace egl
{
class AttributeMap;
struct DisplayState;
}
namespace rx
{
class ContextImpl;
enum class SurfaceRotation
{ … };
bool IsRotatedAspectRatio(SurfaceRotation rotation);
SpecConstUsageBits;
void RotateRectangle(const SurfaceRotation rotation,
const bool flipY,
const int framebufferWidth,
const int framebufferHeight,
const gl::Rectangle &incoming,
gl::Rectangle *outgoing);
MipGenerationFunction;
PixelReadFunction;
PixelWriteFunction;
FastCopyFunction;
class FastCopyFunctionMap
{ … };
struct PackPixelsParams
{ … };
void PackPixels(const PackPixelsParams ¶ms,
const angle::Format &sourceFormat,
int inputPitch,
const uint8_t *source,
uint8_t *destination);
angle::Result GetPackPixelsParams(const gl::InternalFormat &sizedFormatInfo,
GLuint outputPitch,
const gl::PixelPackState &packState,
gl::Buffer *packBuffer,
const gl::Rectangle &area,
const gl::Rectangle &clippedArea,
rx::PackPixelsParams *paramsOut,
GLuint *skipBytesOut);
InitializeTextureDataFunction;
LoadImageFunction;
struct LoadImageFunctionInfo
{ … };
LoadFunctionMap;
bool ShouldUseDebugLayers(const egl::AttributeMap &attribs);
void CopyImageCHROMIUM(const uint8_t *sourceData,
size_t sourceRowPitch,
size_t sourcePixelBytes,
size_t sourceDepthPitch,
PixelReadFunction pixelReadFunction,
uint8_t *destData,
size_t destRowPitch,
size_t destPixelBytes,
size_t destDepthPitch,
PixelWriteFunction pixelWriteFunction,
GLenum destUnsizedFormat,
GLenum destComponentType,
size_t width,
size_t height,
size_t depth,
bool unpackFlipY,
bool unpackPremultiplyAlpha,
bool unpackUnmultiplyAlpha);
class MultisampleTextureInitializer
{ … };
class IncompleteTextureSet final : angle::NonCopyable
{ … };
template <int cols, int rows>
struct SetFloatUniformMatrixGLSL
{ … };
template <int cols, int rows>
struct SetFloatUniformMatrixHLSL
{ … };
void GetMatrixUniform(GLenum type, GLfloat *dataOut, const GLfloat *source, bool transpose);
template <typename NonFloatT>
void GetMatrixUniform(GLenum type, NonFloatT *dataOut, const NonFloatT *source, bool transpose);
const angle::Format &GetFormatFromFormatType(GLenum format, GLenum type);
angle::Result ComputeStartVertex(ContextImpl *contextImpl,
const gl::IndexRange &indexRange,
GLint baseVertex,
GLint *firstVertexOut);
angle::Result GetVertexRangeInfo(const gl::Context *context,
GLint firstVertex,
GLsizei vertexOrIndexCount,
gl::DrawElementsType indexTypeOrInvalid,
const void *indices,
GLint baseVertex,
GLint *startVertexOut,
size_t *vertexCountOut);
gl::Rectangle ClipRectToScissor(const gl::State &glState, const gl::Rectangle &rect, bool invertY);
void ApplyFeatureOverrides(angle::FeatureSetBase *features,
const angle::FeatureOverrides &overrides);
template <typename In>
uint32_t LineLoopRestartIndexCountHelper(GLsizei indexCount, const uint8_t *srcPtr)
{ … }
inline uint32_t GetLineLoopWithRestartIndexCount(gl::DrawElementsType glIndexType,
GLsizei indexCount,
const uint8_t *srcPtr)
{ … }
template <typename In, typename Out>
void CopyLineLoopIndicesWithRestart(GLsizei indexCount, const uint8_t *srcPtr, uint8_t *outPtr)
{ … }
void GetSamplePosition(GLsizei sampleCount, size_t index, GLfloat *xy);
angle::Result MultiDrawArraysGeneral(ContextImpl *contextImpl,
const gl::Context *context,
gl::PrimitiveMode mode,
const GLint *firsts,
const GLsizei *counts,
GLsizei drawcount);
angle::Result MultiDrawArraysIndirectGeneral(ContextImpl *contextImpl,
const gl::Context *context,
gl::PrimitiveMode mode,
const void *indirect,
GLsizei drawcount,
GLsizei stride);
angle::Result MultiDrawArraysInstancedGeneral(ContextImpl *contextImpl,
const gl::Context *context,
gl::PrimitiveMode mode,
const GLint *firsts,
const GLsizei *counts,
const GLsizei *instanceCounts,
GLsizei drawcount);
angle::Result MultiDrawElementsGeneral(ContextImpl *contextImpl,
const gl::Context *context,
gl::PrimitiveMode mode,
const GLsizei *counts,
gl::DrawElementsType type,
const GLvoid *const *indices,
GLsizei drawcount);
angle::Result MultiDrawElementsIndirectGeneral(ContextImpl *contextImpl,
const gl::Context *context,
gl::PrimitiveMode mode,
gl::DrawElementsType type,
const void *indirect,
GLsizei drawcount,
GLsizei stride);
angle::Result MultiDrawElementsInstancedGeneral(ContextImpl *contextImpl,
const gl::Context *context,
gl::PrimitiveMode mode,
const GLsizei *counts,
gl::DrawElementsType type,
const GLvoid *const *indices,
const GLsizei *instanceCounts,
GLsizei drawcount);
angle::Result MultiDrawArraysInstancedBaseInstanceGeneral(ContextImpl *contextImpl,
const gl::Context *context,
gl::PrimitiveMode mode,
const GLint *firsts,
const GLsizei *counts,
const GLsizei *instanceCounts,
const GLuint *baseInstances,
GLsizei drawcount);
angle::Result MultiDrawElementsInstancedBaseVertexBaseInstanceGeneral(ContextImpl *contextImpl,
const gl::Context *context,
gl::PrimitiveMode mode,
const GLsizei *counts,
gl::DrawElementsType type,
const GLvoid *const *indices,
const GLsizei *instanceCounts,
const GLint *baseVertices,
const GLuint *baseInstances,
GLsizei drawcount);
class ResetBaseVertexBaseInstance : angle::NonCopyable
{ … };
angle::FormatID ConvertToSRGB(angle::FormatID formatID);
angle::FormatID ConvertToLinear(angle::FormatID formatID);
bool IsOverridableLinearFormat(angle::FormatID formatID);
template <bool swizzledLuma = true>
const gl::ColorGeneric AdjustBorderColor(const angle::ColorGeneric &borderColorGeneric,
const angle::Format &format,
bool stencilMode);
template <typename LargerInt>
GLint LimitToInt(const LargerInt physicalDeviceValue)
{ … }
bool TextureHasAnyRedefinedLevels(const gl::CubeFaceArray<gl::TexLevelMask> &redefinedLevels);
bool IsTextureLevelRedefined(const gl::CubeFaceArray<gl::TexLevelMask> &redefinedLevels,
gl::TextureType textureType,
gl::LevelIndex level);
enum class TextureLevelDefinition
{ … };
enum class TextureLevelAllocation
{ … };
bool TextureRedefineLevel(const TextureLevelAllocation levelAllocation,
const TextureLevelDefinition levelDefinition,
bool immutableFormat,
uint32_t levelCount,
const uint32_t layerIndex,
const gl::ImageIndex &index,
gl::LevelIndex imageFirstAllocatedLevel,
gl::CubeFaceArray<gl::TexLevelMask> *redefinedLevels);
void TextureRedefineGenerateMipmapLevels(gl::LevelIndex baseLevel,
gl::LevelIndex maxLevel,
gl::LevelIndex firstGeneratedLevel,
gl::CubeFaceArray<gl::TexLevelMask> *redefinedLevels);
enum class ImageMipLevels
{ … };
enum class PipelineType
{ … };
inline size_t PackSampleCount(int32_t sampleCount)
{ … }
}
#define ANGLE_SET_DRAW_ID_UNIFORM_0(drawID) …
#define ANGLE_SET_DRAW_ID_UNIFORM_1(drawID) …
#define ANGLE_SET_DRAW_ID_UNIFORM(cond) …
#define ANGLE_SET_BASE_VERTEX_UNIFORM_0(baseVertex) …
#define ANGLE_SET_BASE_VERTEX_UNIFORM_1(baseVertex) …
#define ANGLE_SET_BASE_VERTEX_UNIFORM(cond) …
#define ANGLE_SET_BASE_INSTANCE_UNIFORM_0(baseInstance) …
#define ANGLE_SET_BASE_INSTANCE_UNIFORM_1(baseInstance) …
#define ANGLE_SET_BASE_INSTANCE_UNIFORM(cond) …
#define ANGLE_NOOP_DRAW_ …
#define ANGLE_NOOP_DRAW_INSTANCED …
#define ANGLE_NOOP_DRAW(_instanced) …
#define ANGLE_MARK_TRANSFORM_FEEDBACK_USAGE_ …
#define ANGLE_MARK_TRANSFORM_FEEDBACK_USAGE_INSTANCED …
#define ANGLE_MARK_TRANSFORM_FEEDBACK_USAGE(instanced) …
#endif