@@ -343,8 +343,6 @@ void CGLContext::RenderGeometry()
343343
344344int CGLContext::GsIntHandler (int cause)
345345{
346- int ret = 0 ;
347-
348346 uint32_t csr = *(volatile uint32_t *)GS::ControlRegs::csr;
349347 // is this a signal interrupt?
350348 if (csr & 1 ) {
@@ -369,8 +367,6 @@ int CGLContext::GsIntHandler(int cause)
369367 *(volatile uint64_t *)GS::ControlRegs::siglblid = sigLblId;
370368 // clear the exception and wait for the next
371369 *(volatile unsigned int *)GS::ControlRegs::csr = 1 ;
372-
373- ret = -1 ; // don't call other handlers
374370 }
375371 }
376372 // is this a vsync interrupt?
@@ -380,20 +376,9 @@ int CGLContext::GsIntHandler(int cause)
380376 *(volatile unsigned int *)GS::ControlRegs::csr = 8 ;
381377 }
382378
383- // I'm not entirely sure why this is necessary, but if I don't do
384- // it then framing out can cause the display thread to lock (I've
385- // only verified it frozen waiting on pglFinishRenderingGeometry().)
386- // The GS manual says that a second "signal" event occuring before
387- // the first is cleared causes the gs to stop drawing, and the second
388- // interrupt will not be raised until that interrupt (signal) is masked
389- // and then unmasked. Could something similar be true for gs events/
390- // interrupts in general? This needs to be here, not in the vsync branch.
391- if (ret == -1 ) {
392- *(volatile unsigned int *)GS::ControlRegs::imr = 0x7f00 ;
393- *(volatile unsigned int *)GS::ControlRegs::imr = 0x7600 ;
394- }
379+ ExitHandler ();
395380
396- return ret ;
381+ return 0 ;
397382}
398383
399384void CGLContext::FinishRenderingGeometry (bool forceImmediateStop)
0 commit comments