mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-03 16:39:01 -06:00 
			
		
		
		
	General: Correct rebase, sync gpu and context management.
This commit is contained in:
		@@ -284,6 +284,12 @@ public:
 | 
			
		||||
    /// core timing events.
 | 
			
		||||
    virtual void Start() = 0;
 | 
			
		||||
 | 
			
		||||
    /// Obtain the CPU Context
 | 
			
		||||
    virtual void ObtainContext() = 0;
 | 
			
		||||
 | 
			
		||||
    /// Release the CPU Context
 | 
			
		||||
    virtual void ReleaseContext() = 0;
 | 
			
		||||
 | 
			
		||||
    /// Push GPU command entries to be processed
 | 
			
		||||
    virtual void PushGPUEntries(Tegra::CommandList&& entries) = 0;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,10 +19,17 @@ GPUAsynch::GPUAsynch(Core::System& system, std::unique_ptr<VideoCore::RendererBa
 | 
			
		||||
GPUAsynch::~GPUAsynch() = default;
 | 
			
		||||
 | 
			
		||||
void GPUAsynch::Start() {
 | 
			
		||||
    cpu_context->MakeCurrent();
 | 
			
		||||
    gpu_thread.StartThread(*renderer, *gpu_context, *dma_pusher);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GPUAsynch::ObtainContext() {
 | 
			
		||||
    cpu_context->MakeCurrent();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GPUAsynch::ReleaseContext() {
 | 
			
		||||
    cpu_context->DoneCurrent();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GPUAsynch::PushGPUEntries(Tegra::CommandList&& entries) {
 | 
			
		||||
    gpu_thread.SubmitList(std::move(entries));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,8 @@ public:
 | 
			
		||||
    ~GPUAsynch() override;
 | 
			
		||||
 | 
			
		||||
    void Start() override;
 | 
			
		||||
    void ObtainContext() override;
 | 
			
		||||
    void ReleaseContext() override;
 | 
			
		||||
    void PushGPUEntries(Tegra::CommandList&& entries) override;
 | 
			
		||||
    void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override;
 | 
			
		||||
    void FlushRegion(VAddr addr, u64 size) override;
 | 
			
		||||
 
 | 
			
		||||
@@ -13,10 +13,16 @@ GPUSynch::GPUSynch(Core::System& system, std::unique_ptr<VideoCore::RendererBase
 | 
			
		||||
 | 
			
		||||
GPUSynch::~GPUSynch() = default;
 | 
			
		||||
 | 
			
		||||
void GPUSynch::Start() {
 | 
			
		||||
void GPUSynch::Start() {}
 | 
			
		||||
 | 
			
		||||
void GPUSynch::ObtainContext() {
 | 
			
		||||
    context->MakeCurrent();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GPUSynch::ReleaseContext() {
 | 
			
		||||
    context->DoneCurrent();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GPUSynch::PushGPUEntries(Tegra::CommandList&& entries) {
 | 
			
		||||
    dma_pusher->Push(std::move(entries));
 | 
			
		||||
    dma_pusher->DispatchCalls();
 | 
			
		||||
 
 | 
			
		||||
@@ -24,6 +24,8 @@ public:
 | 
			
		||||
    ~GPUSynch() override;
 | 
			
		||||
 | 
			
		||||
    void Start() override;
 | 
			
		||||
    void ObtainContext() override;
 | 
			
		||||
    void ReleaseContext() override;
 | 
			
		||||
    void PushGPUEntries(Tegra::CommandList&& entries) override;
 | 
			
		||||
    void SwapBuffers(const Tegra::FramebufferConfig* framebuffer) override;
 | 
			
		||||
    void FlushRegion(VAddr addr, u64 size) override;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user