@ -19,7 +19,7 @@ namespace VideoCommon::GPUThread {
/// Runs the GPU thread
/// Runs the GPU thread
static void RunThread ( Core : : System & system , VideoCore : : RendererBase & renderer ,
static void RunThread ( Core : : System & system , VideoCore : : RendererBase & renderer ,
Core : : Frontend : : GraphicsContext & context , Tegra : : DmaPusher & dma_pusher ,
Core : : Frontend : : GraphicsContext & context , Tegra : : DmaPusher & dma_pusher ,
SynchState & state , Tegra : : CDmaPusher & cdma_pusher ) {
SynchState & state ) {
std : : string name = " yuzu:GPU " ;
std : : string name = " yuzu:GPU " ;
MicroProfileOnThreadCreate ( name . c_str ( ) ) ;
MicroProfileOnThreadCreate ( name . c_str ( ) ) ;
SCOPE_EXIT ( { MicroProfileOnThreadExit ( ) ; } ) ;
SCOPE_EXIT ( { MicroProfileOnThreadExit ( ) ; } ) ;
@ -46,9 +46,6 @@ static void RunThread(Core::System& system, VideoCore::RendererBase& renderer,
if ( auto * submit_list = std : : get_if < SubmitListCommand > ( & next . data ) ) {
if ( auto * submit_list = std : : get_if < SubmitListCommand > ( & next . data ) ) {
dma_pusher . Push ( std : : move ( submit_list - > entries ) ) ;
dma_pusher . Push ( std : : move ( submit_list - > entries ) ) ;
dma_pusher . DispatchCalls ( ) ;
dma_pusher . DispatchCalls ( ) ;
} else if ( auto * command_list = std : : get_if < SubmitChCommandEntries > ( & next . data ) ) {
// NVDEC
cdma_pusher . ProcessEntries ( std : : move ( command_list - > entries ) ) ;
} else if ( const auto * data = std : : get_if < SwapBuffersCommand > ( & next . data ) ) {
} else if ( const auto * data = std : : get_if < SwapBuffersCommand > ( & next . data ) ) {
renderer . SwapBuffers ( data - > framebuffer ? & * data - > framebuffer : nullptr ) ;
renderer . SwapBuffers ( data - > framebuffer ? & * data - > framebuffer : nullptr ) ;
} else if ( std : : holds_alternative < OnCommandListEndCommand > ( next . data ) ) {
} else if ( std : : holds_alternative < OnCommandListEndCommand > ( next . data ) ) {
@ -83,20 +80,16 @@ ThreadManager::~ThreadManager() {
void ThreadManager : : StartThread ( VideoCore : : RendererBase & renderer ,
void ThreadManager : : StartThread ( VideoCore : : RendererBase & renderer ,
Core : : Frontend : : GraphicsContext & context ,
Core : : Frontend : : GraphicsContext & context ,
Tegra : : DmaPusher & dma_pusher , Tegra : : CDmaPusher & cdma_pusher ) {
Tegra : : DmaPusher & dma_pusher ) {
rasterizer = renderer . ReadRasterizer ( ) ;
rasterizer = renderer . ReadRasterizer ( ) ;
thread = std : : thread ( RunThread , std : : ref ( system ) , std : : ref ( renderer ) , std : : ref ( context ) ,
thread = std : : thread ( RunThread , std : : ref ( system ) , std : : ref ( renderer ) , std : : ref ( context ) ,
std : : ref ( dma_pusher ) , std : : ref ( state ) , std : : ref ( cdma_pusher ) );
std : : ref ( dma_pusher ) , std : : ref ( state ) );
}
}
void ThreadManager : : SubmitList ( Tegra : : CommandList & & entries ) {
void ThreadManager : : SubmitList ( Tegra : : CommandList & & entries ) {
PushCommand ( SubmitListCommand ( std : : move ( entries ) ) ) ;
PushCommand ( SubmitListCommand ( std : : move ( entries ) ) ) ;
}
}
void ThreadManager : : SubmitCommandBuffer ( Tegra : : ChCommandHeaderList & & entries ) {
PushCommand ( SubmitChCommandEntries ( std : : move ( entries ) ) ) ;
}
void ThreadManager : : SwapBuffers ( const Tegra : : FramebufferConfig * framebuffer ) {
void ThreadManager : : SwapBuffers ( const Tegra : : FramebufferConfig * framebuffer ) {
PushCommand ( SwapBuffersCommand ( framebuffer ? std : : make_optional ( * framebuffer ) : std : : nullopt ) ) ;
PushCommand ( SwapBuffersCommand ( framebuffer ? std : : make_optional ( * framebuffer ) : std : : nullopt ) ) ;
}
}