// // Copyright 2002 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.
constexpr bool ShPixelLocalStorageTypeUsesImages(ShPixelLocalStorageType type)
{ return type == ShPixelLocalStorageType::ImageStoreR32PackedFormats ||
type == ShPixelLocalStorageType::ImageStoreNativeFormats;
}
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(unsignedint *bits, unsignedint allocationSize, unsignedint bitsSize);
// Parse the base resource name and array indices. Returns the base name of the resource. // If the provided name doesn't index an array, the outSubscripts vector will be empty. // If the provided name indexes an array, the outSubscripts vector will contain indices with // outermost array indices in the back. If an array index is invalid, GL_INVALID_INDEX is added to // outSubscripts.
std::string ParseResourceName(const std::string &name, std::vector<unsignedint> *outSubscripts);
// 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(DrawElementsType indexType, const GLvoid *indices,
size_t count, bool primitiveRestartEnabled);
// Get the primitive restart index value for the given index type.
GLuint GetPrimitiveRestartIndex(DrawElementsType indexType);
// Get the primitive restart index value with the given C++ type. template <typename T>
constexpr T GetPrimitiveRestartIndexFromType()
{ return std::numeric_limits<T>::max();
}
static_assert(GetPrimitiveRestartIndexFromType<uint8_t>() == 0xFF, "verify restart index for uint8_t values");
static_assert(GetPrimitiveRestartIndexFromType<uint16_t>() == 0xFFFF, "verify restart index for uint8_t values");
static_assert(GetPrimitiveRestartIndexFromType<uint32_t>() == 0xFFFFFFFF, "verify restart index for uint8_t values");
// Returns the product of the sizes in the vector, or 1 if the vector is empty. Doesn't currently // perform overflow checks. unsignedint ArraySizeProduct(const std::vector<unsignedint> &arraySizes); // Returns the product of the sizes in the vector except for the outermost dimension, or 1 if the // vector is empty. unsignedint InnerArraySizeProduct(const std::vector<unsignedint> &arraySizes); // Returns the outermost array dimension, or 1 if the vector is empty. unsignedint OutermostArraySize(const std::vector<unsignedint> &arraySizes);
// Return the array index at the end of name, and write the length of name before the final array // index into nameLengthWithoutArrayIndexOut. In case name doesn't include an array index, return // GL_INVALID_INDEX and write the length of the original string. unsignedint ParseArrayIndex(const std::string &name, size_t *nameLengthWithoutArrayIndexOut);
// For use with KHR_debug. constchar *GetDebugMessageSourceString(GLenum source); constchar *GetDebugMessageTypeString(GLenum type); constchar *GetDebugMessageSeverityString(GLenum severity);
// For use with EXT_texture_format_sRGB_override and EXT_texture_sRGB_decode // A texture may be forced to decode to a nonlinear colorspace, to a linear colorspace, or to the // default colorspace of its current format. // // Default corresponds to "the texture should use the imageview that corresponds to its format" // Linear corresponds to "the texture has sRGB decoding disabled by extension, and should use a // linear imageview even if it is in a nonlinear format" NonLinear corresponds to "the texture has // sRGB override enabled by extension, and should use a nonlinear imageview even if it is in a // linear format" enumclass SrgbOverride
{ Default = 0,
SRGB,
Linear
};
// For use with EXT_sRGB_write_control // A render target may be forced to convert to a linear colorspace, or may be allowed to do whatever // colorspace conversion is appropriate for its format. There is no option to force linear->sRGB, it // can only convert from sRGB->linear enumclass SrgbWriteControlMode
{ Default = 0,
Linear = 1
};
// For use with EXT_YUV_target // A sampler of external YUV textures may either implicitly perform RGB conversion (regular // samplerExternalOES) or skip the conversion and sample raw YUV values (__samplerExternal2DY2Y). enumclass YuvSamplingMode
{ Default = 0,
Y2Y = 1
};
ShaderType GetShaderTypeFromBitfield(size_t singleShaderType);
GLbitfield GetBitfieldFromShaderType(ShaderType shaderType); bool ShaderTypeSupportsTransformFeedback(ShaderType shaderType); // Given a set of shader stages, returns the last vertex processing stage. This is the stage that // interfaces the fragment shader.
ShaderType GetLastPreFragmentStage(ShaderBitSet shaderTypes);
// Get the underlying type. Useful for indexing into arrays with enum values by avoiding the clutter // of the extraneous static_cast<>() calls. // https://stackoverflow.com/a/8357462 template <typename E>
constexpr typename std::underlying_type<E>::type ToUnderlying(E e) noexcept
{ returnstatic_cast<typename std::underlying_type<E>::type>(e);
}
#endif// COMMON_UTILITIES_H_
Messung V0.5
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.