| // |
| // 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. |
| // |
| |
| // TextureStorage.h: Defines the abstract rx::TextureStorage class. |
| |
| #ifndef LIBANGLE_RENDERER_D3D_TEXTURESTORAGE_H_ |
| #define LIBANGLE_RENDERER_D3D_TEXTURESTORAGE_H_ |
| |
| #include "common/debug.h" |
| #include "libANGLE/angletypes.h" |
| |
| #include <GLES2/gl2.h> |
| #include <stdint.h> |
| |
| namespace gl |
| { |
| class Context; |
| class ImageIndex; |
| struct Box; |
| struct PixelUnpackState; |
| } // namespace gl |
| |
| namespace angle |
| { |
| class Subject; |
| } // namespace angle |
| |
| namespace rx |
| { |
| class SwapChainD3D; |
| class RenderTargetD3D; |
| class ImageD3D; |
| |
| // Dirty bit messages from TextureStorage |
| constexpr size_t kTextureStorageObserverMessageIndex = 0; |
| |
| class TextureStorage : public angle::Subject |
| { |
| public: |
| TextureStorage() {} |
| ~TextureStorage() override {} |
| |
| virtual angle::Result onDestroy(const gl::Context *context); |
| |
| virtual int getTopLevel() const = 0; |
| virtual bool isRenderTarget() const = 0; |
| virtual bool isManaged() const = 0; |
| virtual bool supportsNativeMipmapFunction() const = 0; |
| virtual int getLevelCount() const = 0; |
| |
| virtual angle::Result getRenderTarget(const gl::Context *context, |
| const gl::ImageIndex &index, |
| GLsizei samples, |
| RenderTargetD3D **outRT) = 0; |
| virtual angle::Result generateMipmap(const gl::Context *context, |
| const gl::ImageIndex &sourceIndex, |
| const gl::ImageIndex &destIndex) = 0; |
| |
| virtual angle::Result copyToStorage(const gl::Context *context, |
| TextureStorage *destStorage) = 0; |
| virtual angle::Result setData(const gl::Context *context, |
| const gl::ImageIndex &index, |
| ImageD3D *image, |
| const gl::Box *destBox, |
| GLenum type, |
| const gl::PixelUnpackState &unpack, |
| const uint8_t *pixelData) = 0; |
| |
| // This is a no-op for most implementations of TextureStorage. Some (e.g. TextureStorage11_2D) |
| // might override it. |
| virtual angle::Result useLevelZeroWorkaroundTexture(const gl::Context *context, |
| bool useLevelZeroTexture); |
| |
| virtual void invalidateTextures() {} |
| |
| // RenderToTexture methods |
| virtual angle::Result releaseMultisampledTexStorageForLevel(size_t level); |
| virtual angle::Result resolveTexture(const gl::Context *context); |
| virtual GLsizei getRenderToTextureSamples() const; |
| |
| protected: |
| const angle::Subject *mSubject; |
| }; |
| |
| inline angle::Result TextureStorage::onDestroy(const gl::Context *context) |
| { |
| return angle::Result::Continue; |
| } |
| |
| inline angle::Result TextureStorage::useLevelZeroWorkaroundTexture(const gl::Context *context, |
| bool useLevelZeroTexture) |
| { |
| return angle::Result::Continue; |
| } |
| |
| inline angle::Result TextureStorage::releaseMultisampledTexStorageForLevel(size_t level) |
| { |
| return angle::Result::Continue; |
| } |
| |
| inline angle::Result TextureStorage::resolveTexture(const gl::Context *context) |
| { |
| return angle::Result::Continue; |
| } |
| |
| inline GLsizei TextureStorage::getRenderToTextureSamples() const |
| { |
| return 0; |
| } |
| |
| using TexStoragePointer = angle::UniqueObjectPointer<TextureStorage, gl::Context>; |
| |
| } // namespace rx |
| |
| #endif // LIBANGLE_RENDERER_D3D_TEXTURESTORAGE_H_ |