| // |
| // Copyright (c) 2012 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. |
| // |
| |
| // Image11.h: Defines the rx::Image11 class, which acts as the interface to |
| // the actual underlying resources of a Texture |
| |
| #ifndef LIBANGLE_RENDERER_D3D_D3D11_IMAGE11_H_ |
| #define LIBANGLE_RENDERER_D3D_D3D11_IMAGE11_H_ |
| |
| #include "common/debug.h" |
| #include "libANGLE/ImageIndex.h" |
| #include "libANGLE/renderer/d3d/ImageD3D.h" |
| #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h" |
| |
| namespace gl |
| { |
| class Framebuffer; |
| } |
| |
| namespace rx |
| { |
| class Renderer11; |
| class TextureHelper11; |
| class TextureStorage11; |
| struct Renderer11DeviceCaps; |
| |
| class Image11 : public ImageD3D |
| { |
| public: |
| Image11(Renderer11 *renderer); |
| virtual ~Image11(); |
| |
| static gl::Error GenerateMipmap(const gl::Context *context, |
| Image11 *dest, |
| Image11 *src, |
| const Renderer11DeviceCaps &rendererCaps); |
| static gl::Error CopyImage(const gl::Context *context, |
| Image11 *dest, |
| Image11 *source, |
| const gl::Rectangle &sourceRect, |
| const gl::Offset &destOffset, |
| bool unpackFlipY, |
| bool unpackPremultiplyAlpha, |
| bool unpackUnmultiplyAlpha, |
| const Renderer11DeviceCaps &rendererCaps); |
| |
| virtual bool isDirty() const; |
| |
| gl::Error copyToStorage(const gl::Context *context, |
| TextureStorage *storage, |
| const gl::ImageIndex &index, |
| const gl::Box ®ion) override; |
| |
| bool redefine(GLenum target, GLenum internalformat, const gl::Extents &size, bool forceRelease) override; |
| |
| DXGI_FORMAT getDXGIFormat() const; |
| |
| gl::Error loadData(const gl::Context *context, |
| const gl::Box &area, |
| const gl::PixelUnpackState &unpack, |
| GLenum type, |
| const void *input, |
| bool applySkipImages) override; |
| gl::Error loadCompressedData(const gl::Context *context, |
| const gl::Box &area, |
| const void *input) override; |
| |
| gl::Error copyFromTexStorage(const gl::Context *context, |
| const gl::ImageIndex &imageIndex, |
| TextureStorage *source) override; |
| gl::Error copyFromFramebuffer(const gl::Context *context, |
| const gl::Offset &destOffset, |
| const gl::Rectangle &sourceArea, |
| const gl::Framebuffer *source) override; |
| |
| gl::Error recoverFromAssociatedStorage(const gl::Context *context); |
| void verifyAssociatedStorageValid(TextureStorage11 *textureStorage) const; |
| void disassociateStorage(); |
| |
| protected: |
| gl::Error map(const gl::Context *context, D3D11_MAP mapType, D3D11_MAPPED_SUBRESOURCE *map); |
| void unmap(); |
| |
| private: |
| gl::Error copyWithoutConversion(const gl::Offset &destOffset, |
| const gl::Box &sourceArea, |
| const TextureHelper11 &textureHelper, |
| UINT sourceSubResource); |
| |
| gl::Error getStagingTexture(const TextureHelper11 **outStagingTexture, |
| unsigned int *outSubresourceIndex); |
| gl::Error createStagingTexture(); |
| void releaseStagingTexture(); |
| |
| Renderer11 *mRenderer; |
| |
| DXGI_FORMAT mDXGIFormat; |
| TextureHelper11 mStagingTexture; |
| unsigned int mStagingSubresource; |
| |
| bool mRecoverFromStorage; |
| TextureStorage11 *mAssociatedStorage; |
| gl::ImageIndex mAssociatedImageIndex; |
| unsigned int mRecoveredFromStorageCount; |
| }; |
| |
| } |
| |
| #endif // LIBANGLE_RENDERER_D3D_D3D11_IMAGE11_H_ |