// Copyright 2017 Dolphin Emulator Project // Licensed under GPLv2+ // Refer to the license.txt file included. #pragma once #include "Common/CommonTypes.h" #include "VideoCommon/AbstractStagingTexture.h" #include "VideoCommon/AbstractTexture.h" class D3DTexture2D; namespace DX11 { class DXTexture final : public AbstractTexture { public: explicit DXTexture(const TextureConfig& tex_config); ~DXTexture(); void CopyRectangleFromTexture(const AbstractTexture* src, const MathUtil::Rectangle& src_rect, u32 src_layer, u32 src_level, const MathUtil::Rectangle& dst_rect, u32 dst_layer, u32 dst_level) override; void ScaleRectangleFromTexture(const AbstractTexture* source, const MathUtil::Rectangle& srcrect, const MathUtil::Rectangle& dstrect) override; void Load(u32 level, u32 width, u32 height, u32 row_length, const u8* buffer, size_t buffer_size) override; D3DTexture2D* GetRawTexIdentifier() const; private: D3DTexture2D* m_texture; }; class DXStagingTexture final : public AbstractStagingTexture { public: DXStagingTexture() = delete; ~DXStagingTexture(); void CopyFromTexture(const AbstractTexture* src, const MathUtil::Rectangle& src_rect, u32 src_layer, u32 src_level, const MathUtil::Rectangle& dst_rect) override; void CopyToTexture(const MathUtil::Rectangle& src_rect, AbstractTexture* dst, const MathUtil::Rectangle& dst_rect, u32 dst_layer, u32 dst_level) override; bool Map() override; void Unmap() override; void Flush() override; static std::unique_ptr Create(StagingTextureType type, const TextureConfig& config); private: DXStagingTexture(StagingTextureType type, const TextureConfig& config, ID3D11Texture2D* tex); ID3D11Texture2D* m_tex = nullptr; }; } // namespace DX11