| 
									
										
										
										
											2013-04-17 23:29:41 -04:00
										 |  |  | // Copyright 2013 Dolphin Emulator Project
 | 
					
						
							|  |  |  | // Licensed under GPLv2
 | 
					
						
							|  |  |  | // Refer to the license.txt file included.
 | 
					
						
							| 
									
										
										
										
											2011-03-08 23:25:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef _PSTEXTUREENCODER_H
 | 
					
						
							|  |  |  | #define _PSTEXTUREENCODER_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "TextureEncoder.h"
 | 
					
						
							| 
									
										
										
										
											2011-06-11 19:37:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct ID3D11Texture2D; | 
					
						
							|  |  |  | struct ID3D11RenderTargetView; | 
					
						
							|  |  |  | struct ID3D11Buffer; | 
					
						
							|  |  |  | struct ID3D11InputLayout; | 
					
						
							|  |  |  | struct ID3D11VertexShader; | 
					
						
							|  |  |  | struct ID3D11PixelShader; | 
					
						
							|  |  |  | struct ID3D11ClassLinkage; | 
					
						
							|  |  |  | struct ID3D11ClassInstance; | 
					
						
							|  |  |  | struct ID3D11BlendState; | 
					
						
							|  |  |  | struct ID3D11DepthStencilState; | 
					
						
							|  |  |  | struct ID3D11RasterizerState; | 
					
						
							|  |  |  | struct ID3D11SamplerState; | 
					
						
							| 
									
										
										
										
											2011-03-08 23:25:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace DX11 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PSTextureEncoder : public TextureEncoder | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-06-11 19:37:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-08 23:25:37 +00:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2011-06-11 19:37:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-08 23:25:37 +00:00
										 |  |  | 	PSTextureEncoder(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-11 19:37:21 +00:00
										 |  |  | 	void Init(); | 
					
						
							|  |  |  | 	void Shutdown(); | 
					
						
							| 
									
										
										
										
											2011-03-08 23:25:37 +00:00
										 |  |  | 	size_t Encode(u8* dst, unsigned int dstFormat, | 
					
						
							|  |  |  | 		unsigned int srcFormat, const EFBRectangle& srcRect, bool isIntensity, | 
					
						
							|  |  |  | 		bool scaleByHalf); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2011-06-11 19:37:21 +00:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2011-03-08 23:25:37 +00:00
										 |  |  | 	bool m_ready; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-11 19:37:21 +00:00
										 |  |  | 	ID3D11Texture2D* m_out; | 
					
						
							| 
									
										
										
										
											2011-03-08 23:25:37 +00:00
										 |  |  | 	ID3D11RenderTargetView* m_outRTV; | 
					
						
							| 
									
										
										
										
											2011-06-11 19:37:21 +00:00
										 |  |  | 	ID3D11Texture2D* m_outStage; | 
					
						
							|  |  |  | 	ID3D11Buffer* m_encodeParams; | 
					
						
							|  |  |  | 	ID3D11Buffer* m_quad; | 
					
						
							|  |  |  | 	ID3D11VertexShader* m_vShader; | 
					
						
							|  |  |  | 	ID3D11InputLayout* m_quadLayout; | 
					
						
							|  |  |  | 	ID3D11BlendState* m_efbEncodeBlendState; | 
					
						
							| 
									
										
										
										
											2011-03-08 23:25:37 +00:00
										 |  |  | 	ID3D11DepthStencilState* m_efbEncodeDepthState; | 
					
						
							|  |  |  | 	ID3D11RasterizerState* m_efbEncodeRastState; | 
					
						
							|  |  |  | 	ID3D11SamplerState* m_efbSampler; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Stuff only used in static-linking mode (SM4.0-compatible)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	bool InitStaticMode(); | 
					
						
							|  |  |  | 	bool SetStaticShader(unsigned int dstFormat, unsigned int srcFormat, | 
					
						
							|  |  |  | 		bool isIntensity, bool scaleByHalf); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	typedef unsigned int ComboKey; // Key for a shader combination
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ComboKey MakeComboKey(unsigned int dstFormat, unsigned int srcFormat, | 
					
						
							|  |  |  | 		bool isIntensity, bool scaleByHalf) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return (dstFormat << 4) | (srcFormat << 2) | (isIntensity ? (1<<1) : 0) | 
					
						
							|  |  |  | 			| (scaleByHalf ? (1<<0) : 0); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-11 19:37:21 +00:00
										 |  |  | 	typedef std::map<ComboKey, ID3D11PixelShader*> ComboMap; | 
					
						
							| 
									
										
										
										
											2011-03-08 23:25:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	ComboMap m_staticShaders; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Stuff only used for dynamic-linking mode (SM5.0+, available as soon as
 | 
					
						
							|  |  |  | 	// Microsoft fixes their bloody HLSL compiler)
 | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	bool InitDynamicMode(); | 
					
						
							|  |  |  | 	bool SetDynamicShader(unsigned int dstFormat, unsigned int srcFormat, | 
					
						
							|  |  |  | 		bool isIntensity, bool scaleByHalf); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-11 19:37:21 +00:00
										 |  |  | 	ID3D11PixelShader* m_dynamicShader; | 
					
						
							| 
									
										
										
										
											2011-03-08 23:25:37 +00:00
										 |  |  | 	ID3D11ClassLinkage* m_classLinkage; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Interface slots
 | 
					
						
							|  |  |  | 	UINT m_fetchSlot; | 
					
						
							|  |  |  | 	UINT m_scaledFetchSlot; | 
					
						
							|  |  |  | 	UINT m_intensitySlot; | 
					
						
							|  |  |  | 	UINT m_generatorSlot; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Class instances
 | 
					
						
							|  |  |  | 	// Fetch: 0 is RGB, 1 is RGBA, 2 is RGB565, 3 is Z
 | 
					
						
							|  |  |  | 	ID3D11ClassInstance* m_fetchClass[4]; | 
					
						
							|  |  |  | 	// ScaledFetch: 0 is off, 1 is on
 | 
					
						
							|  |  |  | 	ID3D11ClassInstance* m_scaledFetchClass[2]; | 
					
						
							|  |  |  | 	// Intensity: 0 is off, 1 is on
 | 
					
						
							|  |  |  | 	ID3D11ClassInstance* m_intensityClass[2]; | 
					
						
							|  |  |  | 	// Generator: one for each dst format, 16 total
 | 
					
						
							|  |  |  | 	ID3D11ClassInstance* m_generatorClass[16]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	std::vector<ID3D11ClassInstance*> m_linkageArray; | 
					
						
							| 
									
										
										
										
											2011-06-11 19:37:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-08 23:25:37 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |