diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /gfx/angle/checkout/src/libANGLE/ImageIndex.h | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'gfx/angle/checkout/src/libANGLE/ImageIndex.h')
-rw-r--r-- | gfx/angle/checkout/src/libANGLE/ImageIndex.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/gfx/angle/checkout/src/libANGLE/ImageIndex.h b/gfx/angle/checkout/src/libANGLE/ImageIndex.h new file mode 100644 index 0000000000..4625d310d8 --- /dev/null +++ b/gfx/angle/checkout/src/libANGLE/ImageIndex.h @@ -0,0 +1,133 @@ +// +// Copyright 2014 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. +// + +// ImageIndex.h: A helper struct for indexing into an Image array + +#ifndef LIBANGLE_IMAGE_INDEX_H_ +#define LIBANGLE_IMAGE_INDEX_H_ + +#include "common/PackedEnums.h" +#include "common/mathutil.h" + +#include "angle_gl.h" + +namespace gl +{ + +class ImageIndexIterator; + +class ImageIndex +{ + public: + ImageIndex(); + ImageIndex(const ImageIndex &other); + ImageIndex &operator=(const ImageIndex &other); + + TextureType getType() const { return mType; } + GLint getLevelIndex() const { return mLevelIndex; } + GLint getLayerIndex() const { return mLayerIndex; } + GLint getLayerCount() const { return mLayerCount; } + + bool hasLayer() const; + bool has3DLayer() const; + bool usesTex3D() const; + GLint cubeMapFaceIndex() const; + bool valid() const; + // Note that you cannot use this function when the ImageIndex represents an entire level of cube + // map. + TextureTarget getTarget() const; + + TextureTarget getTargetOrFirstCubeFace() const; + + bool isLayered() const; + bool isEntireLevelCubeMap() const; + + static ImageIndex MakeBuffer(); + static ImageIndex Make2D(GLint levelIndex); + static ImageIndex MakeRectangle(GLint levelIndex); + static ImageIndex MakeCubeMapFace(TextureTarget target, GLint levelIndex); + static ImageIndex Make2DArray(GLint levelIndex, GLint layerIndex = kEntireLevel); + static ImageIndex Make2DArrayRange(GLint levelIndex, GLint layerIndex, GLint layerCount); + static ImageIndex Make3D(GLint levelIndex, GLint layerIndex = kEntireLevel); + static ImageIndex MakeFromTarget(TextureTarget target, GLint levelIndex, GLint depth = 0); + static ImageIndex MakeFromType(TextureType type, + GLint levelIndex, + GLint layerIndex = kEntireLevel, + GLint layerCount = 1); + static ImageIndex Make2DMultisample(); + static ImageIndex Make2DMultisampleArray(GLint layerIndex = kEntireLevel); + static ImageIndex Make2DMultisampleArrayRange(GLint layerIndex, GLint layerCount); + + static constexpr GLint kEntireLevel = static_cast<GLint>(-1); + + bool operator<(const ImageIndex &b) const; + bool operator==(const ImageIndex &b) const; + bool operator!=(const ImageIndex &b) const; + + // Only valid for 3D/Cube textures with layers. + ImageIndexIterator getLayerIterator(GLint layerCount) const; + + private: + friend class ImageIndexIterator; + + ImageIndex(TextureType type, GLint leveIndex, GLint layerIndex, GLint layerCount); + + TextureType mType; + GLint mLevelIndex; + GLint mLayerIndex; + GLint mLayerCount; +}; + +// To be used like this: +// +// ImageIndexIterator it = ...; +// while (it.hasNext()) +// { +// ImageIndex current = it.next(); +// } +class ImageIndexIterator +{ + public: + ImageIndexIterator(const ImageIndexIterator &other); + + static ImageIndexIterator MakeBuffer(); + static ImageIndexIterator Make2D(GLint minMip, GLint maxMip); + static ImageIndexIterator MakeRectangle(GLint minMip, GLint maxMip); + static ImageIndexIterator MakeCube(GLint minMip, GLint maxMip); + static ImageIndexIterator Make3D(GLint minMip, GLint maxMip, GLint minLayer, GLint maxLayer); + static ImageIndexIterator Make2DArray(GLint minMip, GLint maxMip, const GLsizei *layerCounts); + static ImageIndexIterator Make2DMultisample(); + static ImageIndexIterator Make2DMultisampleArray(const GLsizei *layerCounts); + static ImageIndexIterator MakeGeneric(TextureType type, + GLint minMip, + GLint maxMip, + GLint minLayer, + GLint maxLayer); + + ImageIndex next(); + ImageIndex current() const; + bool hasNext() const; + + private: + ImageIndexIterator(TextureType type, + const Range<GLint> &mipRange, + const Range<GLint> &layerRange, + const GLsizei *layerCounts); + + GLint maxLayer() const; + + const Range<GLint> mMipRange; + const Range<GLint> mLayerRange; + const GLsizei *const mLayerCounts; + + ImageIndex mCurrentIndex; +}; + +TextureTarget TextureTypeToTarget(TextureType type, GLint layerIndex); + +} // namespace gl + +#endif // LIBANGLE_IMAGE_INDEX_H_ |