| 
									
										
										
										
											2017-04-22 23:44:34 -05:00
										 |  |  | // Copyright 2017 Dolphin Emulator Project
 | 
					
						
							|  |  |  | // Licensed under GPLv2+
 | 
					
						
							|  |  |  | // Refer to the license.txt file included.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-21 20:22:45 +10:00
										 |  |  | #include <memory>
 | 
					
						
							| 
									
										
										
										
											2017-08-23 21:46:23 -05:00
										 |  |  | #include <vector>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-22 23:44:34 -05:00
										 |  |  | #include "Common/CommonTypes.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-21 20:22:45 +10:00
										 |  |  | #include "VideoCommon/AbstractFramebuffer.h"
 | 
					
						
							| 
									
										
										
										
											2017-10-22 00:49:40 +10:00
										 |  |  | #include "VideoCommon/AbstractStagingTexture.h"
 | 
					
						
							| 
									
										
										
										
											2017-04-22 23:44:34 -05:00
										 |  |  | #include "VideoCommon/AbstractTexture.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace SW | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | class SWTexture final : public AbstractTexture | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |   explicit SWTexture(const TextureConfig& tex_config); | 
					
						
							|  |  |  |   ~SWTexture() = default; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-30 21:51:42 +10:00
										 |  |  |   void CopyRectangleFromTexture(const AbstractTexture* src, | 
					
						
							|  |  |  |                                 const MathUtil::Rectangle<int>& src_rect, u32 src_layer, | 
					
						
							|  |  |  |                                 u32 src_level, const MathUtil::Rectangle<int>& dst_rect, | 
					
						
							|  |  |  |                                 u32 dst_layer, u32 dst_level) override; | 
					
						
							|  |  |  |   void ScaleRectangleFromTexture(const AbstractTexture* source, | 
					
						
							|  |  |  |                                  const MathUtil::Rectangle<int>& srcrect, | 
					
						
							|  |  |  |                                  const MathUtil::Rectangle<int>& dstrect) override; | 
					
						
							| 
									
										
										
										
											2018-01-21 15:03:06 +10:00
										 |  |  |   void ResolveFromTexture(const AbstractTexture* src, const MathUtil::Rectangle<int>& rect, | 
					
						
							|  |  |  |                           u32 layer, u32 level) override; | 
					
						
							| 
									
										
										
										
											2017-04-22 23:44:34 -05:00
										 |  |  |   void Load(u32 level, u32 width, u32 height, u32 row_length, const u8* buffer, | 
					
						
							|  |  |  |             size_t buffer_size) override; | 
					
						
							| 
									
										
										
										
											2017-08-23 21:46:23 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   const u8* GetData() const; | 
					
						
							|  |  |  |   u8* GetData(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  |   std::vector<u8> m_data; | 
					
						
							| 
									
										
										
										
											2017-04-22 23:44:34 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-22 00:49:40 +10:00
										 |  |  | class SWStagingTexture final : public AbstractStagingTexture | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |   explicit SWStagingTexture(StagingTextureType type, const TextureConfig& config); | 
					
						
							|  |  |  |   ~SWStagingTexture(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   void CopyFromTexture(const AbstractTexture* src, const MathUtil::Rectangle<int>& src_rect, | 
					
						
							|  |  |  |                        u32 src_layer, u32 src_level, | 
					
						
							|  |  |  |                        const MathUtil::Rectangle<int>& dst_rect) override; | 
					
						
							|  |  |  |   void CopyToTexture(const MathUtil::Rectangle<int>& src_rect, AbstractTexture* dst, | 
					
						
							|  |  |  |                      const MathUtil::Rectangle<int>& dst_rect, u32 dst_layer, | 
					
						
							|  |  |  |                      u32 dst_level) override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   bool Map() override; | 
					
						
							|  |  |  |   void Unmap() override; | 
					
						
							|  |  |  |   void Flush() override; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  |   std::vector<u8> m_data; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-21 20:22:45 +10:00
										 |  |  | class SWFramebuffer final : public AbstractFramebuffer | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |   explicit SWFramebuffer(AbstractTextureFormat color_format, AbstractTextureFormat depth_format, | 
					
						
							|  |  |  |                          u32 width, u32 height, u32 layers, u32 samples); | 
					
						
							|  |  |  |   ~SWFramebuffer() override = default; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   static std::unique_ptr<SWFramebuffer> Create(const SWTexture* color_attachment, | 
					
						
							|  |  |  |                                                const SWTexture* depth_attachment); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-22 23:44:34 -05:00
										 |  |  | }  // namespace SW
 |