forked from eden-emu/eden
		
	gpu: Move command processing to another thread.
This commit is contained in:
		
							parent
							
								
									1945456cc7
								
							
						
					
					
						commit
						9d1ee628b2
					
				
					 9 changed files with 358 additions and 15 deletions
				
			
		|  | @ -19,6 +19,10 @@ namespace VideoCore { | |||
| class RendererBase; | ||||
| } // namespace VideoCore
 | ||||
| 
 | ||||
| namespace VideoCommon::GPUThread { | ||||
| class ThreadManager; | ||||
| } // namespace VideoCommon::GPUThread
 | ||||
| 
 | ||||
| namespace Tegra { | ||||
| 
 | ||||
| enum class RenderTargetFormat : u32 { | ||||
|  | @ -200,7 +204,7 @@ public: | |||
|             std::array<u32, NUM_REGS> reg_array; | ||||
|         }; | ||||
|     } regs{}; | ||||
|      | ||||
| 
 | ||||
|     /// Push GPU command entries to be processed
 | ||||
|     void PushGPUEntries(Tegra::CommandList&& entries); | ||||
| 
 | ||||
|  | @ -208,6 +212,15 @@ public: | |||
|     void SwapBuffers( | ||||
|         std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer); | ||||
| 
 | ||||
|     /// Notify rasterizer that any caches of the specified region should be flushed to Switch memory
 | ||||
|     void FlushRegion(VAddr addr, u64 size); | ||||
| 
 | ||||
|     /// Notify rasterizer that any caches of the specified region should be invalidated
 | ||||
|     void InvalidateRegion(VAddr addr, u64 size); | ||||
| 
 | ||||
|     /// Notify rasterizer that any caches of the specified region should be flushed and invalidated
 | ||||
|     void FlushAndInvalidateRegion(VAddr addr, u64 size); | ||||
| 
 | ||||
| private: | ||||
|     void ProcessBindMethod(const MethodCall& method_call); | ||||
|     void ProcessSemaphoreTriggerMethod(); | ||||
|  | @ -216,17 +229,18 @@ private: | |||
| 
 | ||||
|     /// Calls a GPU puller method.
 | ||||
|     void CallPullerMethod(const MethodCall& method_call); | ||||
|      | ||||
| 
 | ||||
|     /// Calls a GPU engine method.
 | ||||
|     void CallEngineMethod(const MethodCall& method_call); | ||||
|      | ||||
| 
 | ||||
|     /// Determines where the method should be executed.
 | ||||
|     bool ExecuteMethodOnEngine(const MethodCall& method_call); | ||||
| 
 | ||||
| private: | ||||
|     std::unique_ptr<Tegra::DmaPusher> dma_pusher; | ||||
|     std::unique_ptr<Tegra::MemoryManager> memory_manager; | ||||
|      | ||||
|     std::unique_ptr<VideoCommon::GPUThread::ThreadManager> gpu_thread; | ||||
| 
 | ||||
|     VideoCore::RendererBase& renderer; | ||||
| 
 | ||||
|     /// Mapping of command subchannels to their bound engine ids.
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bunnei
						bunnei