summaryrefslogtreecommitdiffstats
path: root/gfx/angle/src/libANGLE/renderer/gl/TextureGL.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/angle/src/libANGLE/renderer/gl/TextureGL.h')
-rwxr-xr-xgfx/angle/src/libANGLE/renderer/gl/TextureGL.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/gfx/angle/src/libANGLE/renderer/gl/TextureGL.h b/gfx/angle/src/libANGLE/renderer/gl/TextureGL.h
new file mode 100755
index 000000000..068284c5b
--- /dev/null
+++ b/gfx/angle/src/libANGLE/renderer/gl/TextureGL.h
@@ -0,0 +1,145 @@
+//
+// Copyright 2015 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.
+//
+
+// TextureGL.h: Defines the class interface for TextureGL.
+
+#ifndef LIBANGLE_RENDERER_GL_TEXTUREGL_H_
+#define LIBANGLE_RENDERER_GL_TEXTUREGL_H_
+
+#include "libANGLE/angletypes.h"
+#include "libANGLE/renderer/TextureImpl.h"
+#include "libANGLE/Texture.h"
+
+namespace rx
+{
+
+class BlitGL;
+class FunctionsGL;
+class StateManagerGL;
+struct WorkaroundsGL;
+
+struct LUMAWorkaroundGL
+{
+ bool enabled;
+ GLenum workaroundFormat;
+
+ LUMAWorkaroundGL();
+ LUMAWorkaroundGL(bool enabled, GLenum workaroundFormat);
+};
+
+// Structure containing information about format and workarounds for each mip level of the
+// TextureGL.
+struct LevelInfoGL
+{
+ // Format of the data used in this mip level.
+ GLenum sourceFormat;
+
+ // If this mip level requires sampler-state re-writing so that only a red channel is exposed.
+ bool depthStencilWorkaround;
+
+ // Information about luminance alpha texture workarounds in the core profile.
+ LUMAWorkaroundGL lumaWorkaround;
+
+ LevelInfoGL();
+ LevelInfoGL(GLenum sourceFormat,
+ bool depthStencilWorkaround,
+ const LUMAWorkaroundGL &lumaWorkaround);
+};
+
+class TextureGL : public TextureImpl
+{
+ public:
+ TextureGL(const gl::TextureState &state,
+ const FunctionsGL *functions,
+ const WorkaroundsGL &workarounds,
+ StateManagerGL *stateManager,
+ BlitGL *blitter);
+ ~TextureGL() override;
+
+ gl::Error setImage(GLenum target, size_t level, GLenum internalFormat, const gl::Extents &size, GLenum format, GLenum type,
+ const gl::PixelUnpackState &unpack, const uint8_t *pixels) override;
+ gl::Error setSubImage(GLenum target, size_t level, const gl::Box &area, GLenum format, GLenum type,
+ const gl::PixelUnpackState &unpack, const uint8_t *pixels) override;
+
+ gl::Error setCompressedImage(GLenum target, size_t level, GLenum internalFormat, const gl::Extents &size,
+ const gl::PixelUnpackState &unpack, size_t imageSize, const uint8_t *pixels) override;
+ gl::Error setCompressedSubImage(GLenum target, size_t level, const gl::Box &area, GLenum format,
+ const gl::PixelUnpackState &unpack, size_t imageSize, const uint8_t *pixels) override;
+
+ gl::Error copyImage(GLenum target, size_t level, const gl::Rectangle &sourceArea, GLenum internalFormat,
+ const gl::Framebuffer *source) override;
+ gl::Error copySubImage(GLenum target, size_t level, const gl::Offset &destOffset, const gl::Rectangle &sourceArea,
+ const gl::Framebuffer *source) override;
+
+ gl::Error setStorage(GLenum target, size_t levels, GLenum internalFormat, const gl::Extents &size) override;
+
+ gl::Error setImageExternal(GLenum target,
+ egl::Stream *stream,
+ const egl::Stream::GLTextureDescription &desc) override;
+
+ gl::Error generateMipmap() override;
+
+ void bindTexImage(egl::Surface *surface) override;
+ void releaseTexImage() override;
+
+ gl::Error setEGLImageTarget(GLenum target, egl::Image *image) override;
+
+ GLuint getTextureID() const;
+
+ void setBaseLevel(GLuint) override {}
+
+ void syncState(const gl::Texture::DirtyBits &dirtyBits) override;
+ bool hasAnyDirtyBit() const;
+
+ private:
+ void setImageHelper(GLenum target,
+ size_t level,
+ GLenum internalFormat,
+ const gl::Extents &size,
+ GLenum format,
+ GLenum type,
+ const uint8_t *pixels);
+ void reserveTexImageToBeFilled(GLenum target,
+ size_t level,
+ GLenum internalFormat,
+ const gl::Extents &size,
+ GLenum format,
+ GLenum type);
+ gl::Error setSubImageRowByRowWorkaround(GLenum target,
+ size_t level,
+ const gl::Box &area,
+ GLenum format,
+ GLenum type,
+ const gl::PixelUnpackState &unpack,
+ const uint8_t *pixels);
+
+ gl::Error setSubImagePaddingWorkaround(GLenum target,
+ size_t level,
+ const gl::Box &area,
+ GLenum format,
+ GLenum type,
+ const gl::PixelUnpackState &unpack,
+ const uint8_t *pixels);
+
+ void syncTextureStateSwizzle(const FunctionsGL *functions, GLenum name, GLenum value);
+
+ void setLevelInfo(size_t level, size_t levelCount, const LevelInfoGL &levelInfo);
+
+ const FunctionsGL *mFunctions;
+ const WorkaroundsGL &mWorkarounds;
+ StateManagerGL *mStateManager;
+ BlitGL *mBlitter;
+
+ std::vector<LevelInfoGL> mLevelInfo;
+ gl::Texture::DirtyBits mLocalDirtyBits;
+
+ mutable gl::TextureState mAppliedTextureState;
+ GLuint mTextureID;
+};
+
+}
+
+#endif // LIBANGLE_RENDERER_GL_TEXTUREGL_H_