#include "libANGLE/Texture.h"
#include "common/mathutil.h"
#include "common/utilities.h"
#include "libANGLE/Config.h"
#include "libANGLE/Context.h"
#include "libANGLE/Image.h"
#include "libANGLE/State.h"
#include "libANGLE/Surface.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/renderer/ContextImpl.h"
#include "libANGLE/renderer/GLImplFactory.h"
#include "libANGLE/renderer/TextureImpl.h"
namespace gl
{
namespace
{
constexpr angle::SubjectIndex kBufferSubjectIndex = …;
static_assert …;
static_assert …;
bool IsPointSampled(const SamplerState &samplerState)
{ … }
size_t GetImageDescIndex(TextureTarget target, size_t level)
{ … }
InitState DetermineInitState(const Context *context, Buffer *unpackBuffer, const uint8_t *pixels)
{ … }
}
GLenum ConvertToNearestFilterMode(GLenum filterMode)
{ … }
GLenum ConvertToNearestMipFilterMode(GLenum filterMode)
{ … }
bool IsMipmapSupported(const TextureType &type)
{ … }
SwizzleState::SwizzleState()
: … { … }
SwizzleState::SwizzleState(GLenum red, GLenum green, GLenum blue, GLenum alpha)
: … { … }
bool SwizzleState::swizzleRequired() const
{ … }
bool SwizzleState::operator==(const SwizzleState &other) const
{ … }
bool SwizzleState::operator!=(const SwizzleState &other) const
{ … }
TextureState::TextureState(TextureType type)
: … { … }
TextureState::~TextureState() { … }
bool TextureState::swizzleRequired() const
{ … }
GLuint TextureState::getEffectiveBaseLevel() const
{ … }
GLuint TextureState::getEffectiveMaxLevel() const
{ … }
GLuint TextureState::getMipmapMaxLevel() const
{ … }
bool TextureState::setBaseLevel(GLuint baseLevel)
{ … }
bool TextureState::setMaxLevel(GLuint maxLevel)
{ … }
bool TextureState::isCubeComplete() const
{ … }
const ImageDesc &TextureState::getBaseLevelDesc() const
{ … }
const ImageDesc &TextureState::getLevelZeroDesc() const
{ … }
void TextureState::setCrop(const Rectangle &rect)
{ … }
const Rectangle &TextureState::getCrop() const
{ … }
void TextureState::setGenerateMipmapHint(GLenum hint)
{ … }
GLenum TextureState::getGenerateMipmapHint() const
{ … }
SamplerFormat TextureState::computeRequiredSamplerFormat(const SamplerState &samplerState) const
{ … }
bool TextureState::computeSamplerCompleteness(const SamplerState &samplerState,
const State &state) const
{ … }
bool TextureState::computeSamplerCompletenessForCopyImage(const SamplerState &samplerState,
const State &state) const
{ … }
bool TextureState::computeMipmapCompleteness() const
{ … }
bool TextureState::computeLevelCompleteness(TextureTarget target, size_t level) const
{ … }
TextureTarget TextureState::getBaseImageTarget() const
{ … }
GLuint TextureState::getEnabledLevelCount() const
{ … }
ImageDesc::ImageDesc()
: … { … }
ImageDesc::ImageDesc(const Extents &size, const Format &format, const InitState initState)
: … { … }
ImageDesc::ImageDesc(const Extents &size,
const Format &format,
const GLsizei samples,
const bool fixedSampleLocations,
const InitState initState)
: … { … }
GLint ImageDesc::getMemorySize() const
{ … }
const ImageDesc &TextureState::getImageDesc(TextureTarget target, size_t level) const
{ … }
void TextureState::setImageDesc(TextureTarget target, size_t level, const ImageDesc &desc)
{ … }
const ImageDesc &TextureState::getImageDesc(const ImageIndex &imageIndex) const
{ … }
void TextureState::setImageDescChain(GLuint baseLevel,
GLuint maxLevel,
Extents baseSize,
const Format &format,
InitState initState)
{ … }
void TextureState::setImageDescChainMultisample(Extents baseSize,
const Format &format,
GLsizei samples,
bool fixedSampleLocations,
InitState initState)
{ … }
void TextureState::clearImageDesc(TextureTarget target, size_t level)
{ … }
void TextureState::clearImageDescs()
{ … }
TextureBufferContentsObservers::TextureBufferContentsObservers(Texture *texture) : … { … }
void TextureBufferContentsObservers::enableForBuffer(Buffer *buffer)
{ … }
void TextureBufferContentsObservers::disableForBuffer(Buffer *buffer)
{ … }
Texture::Texture(rx::GLImplFactory *factory, TextureID id, TextureType type)
: … { … }
void Texture::onDestroy(const Context *context)
{ … }
Texture::~Texture()
{ … }
angle::Result Texture::setLabel(const Context *context, const std::string &label)
{ … }
const std::string &Texture::getLabel() const
{ … }
void Texture::setSwizzleRed(const Context *context, GLenum swizzleRed)
{ … }
GLenum Texture::getSwizzleRed() const
{ … }
void Texture::setSwizzleGreen(const Context *context, GLenum swizzleGreen)
{ … }
GLenum Texture::getSwizzleGreen() const
{ … }
void Texture::setSwizzleBlue(const Context *context, GLenum swizzleBlue)
{ … }
GLenum Texture::getSwizzleBlue() const
{ … }
void Texture::setSwizzleAlpha(const Context *context, GLenum swizzleAlpha)
{ … }
GLenum Texture::getSwizzleAlpha() const
{ … }
void Texture::setMinFilter(const Context *context, GLenum minFilter)
{ … }
GLenum Texture::getMinFilter() const
{ … }
void Texture::setMagFilter(const Context *context, GLenum magFilter)
{ … }
GLenum Texture::getMagFilter() const
{ … }
void Texture::setWrapS(const Context *context, GLenum wrapS)
{ … }
GLenum Texture::getWrapS() const
{ … }
void Texture::setWrapT(const Context *context, GLenum wrapT)
{ … }
GLenum Texture::getWrapT() const
{ … }
void Texture::setWrapR(const Context *context, GLenum wrapR)
{ … }
GLenum Texture::getWrapR() const
{ … }
void Texture::setMaxAnisotropy(const Context *context, float maxAnisotropy)
{ … }
float Texture::getMaxAnisotropy() const
{ … }
void Texture::setMinLod(const Context *context, GLfloat minLod)
{ … }
GLfloat Texture::getMinLod() const
{ … }
void Texture::setMaxLod(const Context *context, GLfloat maxLod)
{ … }
GLfloat Texture::getMaxLod() const
{ … }
void Texture::setCompareMode(const Context *context, GLenum compareMode)
{ … }
GLenum Texture::getCompareMode() const
{ … }
void Texture::setCompareFunc(const Context *context, GLenum compareFunc)
{ … }
GLenum Texture::getCompareFunc() const
{ … }
void Texture::setSRGBDecode(const Context *context, GLenum sRGBDecode)
{ … }
GLenum Texture::getSRGBDecode() const
{ … }
void Texture::setSRGBOverride(const Context *context, GLenum sRGBOverride)
{ … }
GLenum Texture::getSRGBOverride() const
{ … }
const SamplerState &Texture::getSamplerState() const
{ … }
angle::Result Texture::setBaseLevel(const Context *context, GLuint baseLevel)
{ … }
GLuint Texture::getBaseLevel() const
{ … }
void Texture::setMaxLevel(const Context *context, GLuint maxLevel)
{ … }
GLuint Texture::getMaxLevel() const
{ … }
void Texture::setDepthStencilTextureMode(const Context *context, GLenum mode)
{ … }
GLenum Texture::getDepthStencilTextureMode() const
{ … }
bool Texture::getImmutableFormat() const
{ … }
GLuint Texture::getImmutableLevels() const
{ … }
void Texture::setUsage(const Context *context, GLenum usage)
{ … }
GLenum Texture::getUsage() const
{ … }
void Texture::setProtectedContent(Context *context, bool hasProtectedContent)
{ … }
bool Texture::hasProtectedContent() const
{ … }
void Texture::setRenderabilityValidation(Context *context, bool renderabilityValidation)
{ … }
void Texture::setTilingMode(Context *context, GLenum tilingMode)
{ … }
GLenum Texture::getTilingMode() const
{ … }
const TextureState &Texture::getTextureState() const
{ … }
const Extents &Texture::getExtents(TextureTarget target, size_t level) const
{ … }
size_t Texture::getWidth(TextureTarget target, size_t level) const
{ … }
size_t Texture::getHeight(TextureTarget target, size_t level) const
{ … }
size_t Texture::getDepth(TextureTarget target, size_t level) const
{ … }
const Format &Texture::getFormat(TextureTarget target, size_t level) const
{ … }
GLsizei Texture::getSamples(TextureTarget target, size_t level) const
{ … }
bool Texture::getFixedSampleLocations(TextureTarget target, size_t level) const
{ … }
GLuint Texture::getMipmapMaxLevel() const
{ … }
bool Texture::isMipmapComplete() const
{ … }
GLuint Texture::getFoveatedFeatureBits() const
{ … }
void Texture::setFoveatedFeatureBits(const GLuint features)
{ … }
bool Texture::isFoveationEnabled() const
{ … }
GLuint Texture::getSupportedFoveationFeatures() const
{ … }
GLfloat Texture::getMinPixelDensity() const
{ … }
void Texture::setMinPixelDensity(const GLfloat density)
{ … }
void Texture::setFocalPoint(uint32_t layer,
uint32_t focalPointIndex,
float focalX,
float focalY,
float gainX,
float gainY,
float foveaArea)
{ … }
const FocalPoint &Texture::getFocalPoint(uint32_t layer, uint32_t focalPoint) const
{ … }
egl::Surface *Texture::getBoundSurface() const
{ … }
egl::Stream *Texture::getBoundStream() const
{ … }
GLint Texture::getMemorySize() const
{ … }
GLint Texture::getLevelMemorySize(TextureTarget target, GLint level) const
{ … }
void Texture::signalDirtyStorage(InitState initState)
{ … }
void Texture::signalDirtyState(size_t dirtyBit)
{ … }
angle::Result Texture::setImage(Context *context,
const PixelUnpackState &unpackState,
Buffer *unpackBuffer,
TextureTarget target,
GLint level,
GLenum internalFormat,
const Extents &size,
GLenum format,
GLenum type,
const uint8_t *pixels)
{ … }
angle::Result Texture::setSubImage(Context *context,
const PixelUnpackState &unpackState,
Buffer *unpackBuffer,
TextureTarget target,
GLint level,
const Box &area,
GLenum format,
GLenum type,
const uint8_t *pixels)
{ … }
angle::Result Texture::setCompressedImage(Context *context,
const PixelUnpackState &unpackState,
TextureTarget target,
GLint level,
GLenum internalFormat,
const Extents &size,
size_t imageSize,
const uint8_t *pixels)
{ … }
angle::Result Texture::setCompressedSubImage(const Context *context,
const PixelUnpackState &unpackState,
TextureTarget target,
GLint level,
const Box &area,
GLenum format,
size_t imageSize,
const uint8_t *pixels)
{ … }
angle::Result Texture::copyImage(Context *context,
TextureTarget target,
GLint level,
const Rectangle &sourceArea,
GLenum internalFormat,
Framebuffer *source)
{ … }
angle::Result Texture::copySubImage(Context *context,
const ImageIndex &index,
const Offset &destOffset,
const Rectangle &sourceArea,
Framebuffer *source)
{ … }
angle::Result Texture::copyRenderbufferSubData(Context *context,
const gl::Renderbuffer *srcBuffer,
GLint srcLevel,
GLint srcX,
GLint srcY,
GLint srcZ,
GLint dstLevel,
GLint dstX,
GLint dstY,
GLint dstZ,
GLsizei srcWidth,
GLsizei srcHeight,
GLsizei srcDepth)
{ … }
angle::Result Texture::copyTextureSubData(Context *context,
const gl::Texture *srcTexture,
GLint srcLevel,
GLint srcX,
GLint srcY,
GLint srcZ,
GLint dstLevel,
GLint dstX,
GLint dstY,
GLint dstZ,
GLsizei srcWidth,
GLsizei srcHeight,
GLsizei srcDepth)
{ … }
angle::Result Texture::copyTexture(Context *context,
TextureTarget target,
GLint level,
GLenum internalFormat,
GLenum type,
GLint sourceLevel,
bool unpackFlipY,
bool unpackPremultiplyAlpha,
bool unpackUnmultiplyAlpha,
Texture *source)
{ … }
angle::Result Texture::copySubTexture(const Context *context,
TextureTarget target,
GLint level,
const Offset &destOffset,
GLint sourceLevel,
const Box &sourceBox,
bool unpackFlipY,
bool unpackPremultiplyAlpha,
bool unpackUnmultiplyAlpha,
Texture *source)
{ … }
angle::Result Texture::copyCompressedTexture(Context *context, const Texture *source)
{ … }
angle::Result Texture::setStorage(Context *context,
TextureType type,
GLsizei levels,
GLenum internalFormat,
const Extents &size)
{ … }
angle::Result Texture::setImageExternal(Context *context,
TextureTarget target,
GLint level,
GLenum internalFormat,
const Extents &size,
GLenum format,
GLenum type)
{ … }
angle::Result Texture::setStorageMultisample(Context *context,
TextureType type,
GLsizei samplesIn,
GLint internalFormat,
const Extents &size,
bool fixedSampleLocations)
{ … }
angle::Result Texture::setStorageExternalMemory(Context *context,
TextureType type,
GLsizei levels,
GLenum internalFormat,
const Extents &size,
MemoryObject *memoryObject,
GLuint64 offset,
GLbitfield createFlags,
GLbitfield usageFlags,
const void *imageCreateInfoPNext)
{ … }
angle::Result Texture::generateMipmap(Context *context)
{ … }
angle::Result Texture::clearImage(Context *context,
GLint level,
GLenum format,
GLenum type,
const uint8_t *data)
{ … }
angle::Result Texture::clearSubImage(Context *context,
GLint level,
const Box &area,
GLenum format,
GLenum type,
const uint8_t *data)
{ … }
angle::Result Texture::bindTexImageFromSurface(Context *context, egl::Surface *surface)
{ … }
angle::Result Texture::releaseTexImageFromSurface(const Context *context)
{ … }
void Texture::bindStream(egl::Stream *stream)
{ … }
void Texture::releaseStream()
{ … }
angle::Result Texture::acquireImageFromStream(const Context *context,
const egl::Stream::GLTextureDescription &desc)
{ … }
angle::Result Texture::releaseImageFromStream(const Context *context)
{ … }
angle::Result Texture::releaseTexImageInternal(Context *context)
{ … }
angle::Result Texture::setEGLImageTargetImpl(Context *context,
TextureType type,
GLuint levels,
egl::Image *imageTarget)
{ … }
angle::Result Texture::setEGLImageTarget(Context *context,
TextureType type,
egl::Image *imageTarget)
{ … }
angle::Result Texture::setStorageEGLImageTarget(Context *context,
TextureType type,
egl::Image *imageTarget,
const GLint *attrib_list)
{ … }
Extents Texture::getAttachmentSize(const ImageIndex &imageIndex) const
{ … }
Format Texture::getAttachmentFormat(GLenum , const ImageIndex &imageIndex) const
{ … }
GLsizei Texture::getAttachmentSamples(const ImageIndex &imageIndex) const
{ … }
bool Texture::isRenderable(const Context *context,
GLenum binding,
const ImageIndex &imageIndex) const
{ … }
bool Texture::getAttachmentFixedSampleLocations(const ImageIndex &imageIndex) const
{ … }
void Texture::setBorderColor(const Context *context, const ColorGeneric &color)
{ … }
const ColorGeneric &Texture::getBorderColor() const
{ … }
GLint Texture::getRequiredTextureImageUnits(const Context *context) const
{ … }
void Texture::setCrop(const Rectangle &rect)
{ … }
const Rectangle &Texture::getCrop() const
{ … }
void Texture::setGenerateMipmapHint(GLenum hint)
{ … }
GLenum Texture::getGenerateMipmapHint() const
{ … }
angle::Result Texture::setBuffer(const gl::Context *context,
gl::Buffer *buffer,
GLenum internalFormat)
{ … }
angle::Result Texture::setBufferRange(const gl::Context *context,
gl::Buffer *buffer,
GLenum internalFormat,
GLintptr offset,
GLsizeiptr size)
{ … }
const OffsetBindingPointer<Buffer> &Texture::getBuffer() const
{ … }
void Texture::onAttach(const Context *context, rx::UniqueSerial framebufferSerial)
{ … }
void Texture::onDetach(const Context *context, rx::UniqueSerial framebufferSerial)
{ … }
GLuint Texture::getId() const
{ … }
GLuint Texture::getNativeID() const
{ … }
angle::Result Texture::syncState(const Context *context, Command source)
{ … }
rx::FramebufferAttachmentObjectImpl *Texture::getAttachmentImpl() const
{ … }
bool Texture::isSamplerComplete(const Context *context, const Sampler *optionalSampler)
{ … }
bool Texture::isSamplerCompleteForCopyImage(const Context *context,
const Sampler *optionalSampler) const
{ … }
Texture::SamplerCompletenessCache::SamplerCompletenessCache()
: … { … }
void Texture::invalidateCompletenessCache() const
{ … }
angle::Result Texture::ensureInitialized(const Context *context)
{ … }
InitState Texture::initState(GLenum , const ImageIndex &imageIndex) const
{ … }
void Texture::setInitState(GLenum binding, const ImageIndex &imageIndex, InitState initState)
{ … }
void Texture::setInitState(InitState initState)
{ … }
bool Texture::doesSubImageNeedInit(const Context *context,
const ImageIndex &imageIndex,
const Box &area) const
{ … }
angle::Result Texture::ensureSubImageInitialized(const Context *context,
const ImageIndex &imageIndex,
const Box &area)
{ … }
angle::Result Texture::handleMipmapGenerationHint(Context *context, int level)
{ … }
void Texture::onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message)
{ … }
void Texture::onBufferContentsChange()
{ … }
void Texture::onBindToMSRTTFramebuffer()
{ … }
GLenum Texture::getImplementationColorReadFormat(const Context *context) const
{ … }
GLenum Texture::getImplementationColorReadType(const Context *context) const
{ … }
angle::Result Texture::getTexImage(const Context *context,
const PixelPackState &packState,
Buffer *packBuffer,
TextureTarget target,
GLint level,
GLenum format,
GLenum type,
void *pixels)
{ … }
angle::Result Texture::getCompressedTexImage(const Context *context,
const PixelPackState &packState,
Buffer *packBuffer,
TextureTarget target,
GLint level,
void *pixels)
{ … }
void Texture::onBindAsImageTexture()
{ … }
}