Hash :
ab2bfa81
Author :
Date :
2019-01-15T19:06:47
Enable Chromium clang style plugin for libANGLE. This fixes a few style warnings: * auto should not deduce to raw pointer type * inlined virtual methods are not allowed * non-trivial constructors and destructors should be explicit * inlined non-trivial constructors should not be in-class * missing override keywords Bug: angleproject:3069 Change-Id: I3b3e55683691da3ebf6da06a5d3c729c71b6ee53 Reviewed-on: https://chromium-review.googlesource.com/c/1407640 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
//
// Copyright 2016 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.
//
// Format:
// A universal description of typed GPU storage. Across multiple
// renderer back-ends, there are common formats and some distinct
// permutations, this enum encapsulates them all. Formats apply to
// textures, but could also apply to any typed data.
#ifndef LIBANGLE_RENDERER_FORMAT_H_
#define LIBANGLE_RENDERER_FORMAT_H_
#include "libANGLE/renderer/FormatID_autogen.h"
#include "libANGLE/renderer/renderer_utils.h"
namespace angle
{
enum class FormatID;
extern const Format gFormatInfoTable[];
struct Format final : private angle::NonCopyable
{
inline constexpr Format(FormatID id,
GLenum glFormat,
GLenum fboFormat,
rx::MipGenerationFunction mipGen,
const rx::FastCopyFunctionMap &fastCopyFunctions,
rx::PixelReadFunction colorRead,
rx::PixelWriteFunction colorWrite,
GLenum componentType,
GLuint redBits,
GLuint greenBits,
GLuint blueBits,
GLuint alphaBits,
GLuint luminanceBits,
GLuint depthBits,
GLuint stencilBits,
GLuint pixelBytes,
GLuint componentAlignmentMask,
bool isBlock,
bool isFixed);
static const Format &Get(FormatID id) { return gFormatInfoTable[static_cast<int>(id)]; }
static FormatID InternalFormatToID(GLenum internalFormat);
constexpr bool hasDepthOrStencilBits() const;
constexpr bool isLUMA() const;
constexpr GLuint channelCount() const;
constexpr bool isInt() const;
constexpr bool isUint() const;
constexpr bool isSnorm() const;
constexpr bool isUnorm() const;
constexpr bool isFloat() const;
bool operator==(const Format &other) const { return this->id == other.id; }
FormatID id;
// The closest matching GL internal format for the storage this format uses. Note that this
// may be a different internal format than the one this ANGLE format is used for.
GLenum glInternalFormat;
// The format we should report to the GL layer when querying implementation formats from a FBO.
// This might not be the same as the glInternalFormat, since some DXGI formats don't have
// matching GL format enums, like BGRA4, BGR5A1 and B5G6R6.
GLenum fboImplementationInternalFormat;
rx::MipGenerationFunction mipGenerationFunction;
rx::PixelReadFunction pixelReadFunction;
rx::PixelWriteFunction pixelWriteFunction;
// A map from a gl::FormatType to a fast pixel copy function for this format.
const rx::FastCopyFunctionMap &fastCopyFunctions;
GLenum componentType;
GLuint redBits;
GLuint greenBits;
GLuint blueBits;
GLuint alphaBits;
GLuint luminanceBits;
GLuint depthBits;
GLuint stencilBits;
GLuint pixelBytes;
// For 1-byte components, is MAX_UINT. For 2-byte, is 0x1. For 4-byte, is 0x3. For all others,
// 0x0.
GLuint componentAlignmentMask;
bool isBlock;
bool isFixed;
};
constexpr Format::Format(FormatID id,
GLenum glFormat,
GLenum fboFormat,
rx::MipGenerationFunction mipGen,
const rx::FastCopyFunctionMap &fastCopyFunctions,
rx::PixelReadFunction colorRead,
rx::PixelWriteFunction colorWrite,
GLenum componentType,
GLuint redBits,
GLuint greenBits,
GLuint blueBits,
GLuint alphaBits,
GLuint luminanceBits,
GLuint depthBits,
GLuint stencilBits,
GLuint pixelBytes,
GLuint componentAlignmentMask,
bool isBlock,
bool isFixed)
: id(id),
glInternalFormat(glFormat),
fboImplementationInternalFormat(fboFormat),
mipGenerationFunction(mipGen),
pixelReadFunction(colorRead),
pixelWriteFunction(colorWrite),
fastCopyFunctions(fastCopyFunctions),
componentType(componentType),
redBits(redBits),
greenBits(greenBits),
blueBits(blueBits),
alphaBits(alphaBits),
luminanceBits(luminanceBits),
depthBits(depthBits),
stencilBits(stencilBits),
pixelBytes(pixelBytes),
componentAlignmentMask(componentAlignmentMask),
isBlock(isBlock),
isFixed(isFixed)
{}
constexpr bool Format::hasDepthOrStencilBits() const
{
return depthBits > 0 || stencilBits > 0;
}
constexpr bool Format::isLUMA() const
{
// There's no format with G or B without R
ASSERT(redBits > 0 || (greenBits == 0 && blueBits == 0));
return redBits == 0 && (luminanceBits > 0 || alphaBits > 0);
}
constexpr GLuint Format::channelCount() const
{
return (redBits > 0) + (greenBits > 0) + (blueBits > 0) + (alphaBits > 0) +
(luminanceBits > 0) + (depthBits > 0) + (stencilBits > 0);
}
constexpr bool Format::isInt() const
{
return componentType == GL_INT;
}
constexpr bool Format::isUint() const
{
return componentType == GL_UNSIGNED_INT;
}
constexpr bool Format::isSnorm() const
{
return componentType == GL_SIGNED_NORMALIZED;
}
constexpr bool Format::isUnorm() const
{
return componentType == GL_UNSIGNED_NORMALIZED;
}
constexpr bool Format::isFloat() const
{
return componentType == GL_FLOAT;
}
} // namespace angle
#endif // LIBANGLE_RENDERER_FORMAT_H_