From 7ef86551b5ff6172240e586a3b696d2504772f09 Mon Sep 17 00:00:00 2001 From: Melissa Goad Date: Wed, 26 Apr 2017 20:26:47 -0500 Subject: [PATCH] Add VBLANK interrupt for nvidia cards --- src/vid_nv_riva128.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/vid_nv_riva128.c b/src/vid_nv_riva128.c index 4372d50aa..698e3317c 100644 --- a/src/vid_nv_riva128.c +++ b/src/vid_nv_riva128.c @@ -216,7 +216,6 @@ typedef struct riva128_t int mtime, mfreq; int nvtime, nvfreq; - } riva128_t; //Internally, the RIVA 128 operates in a weird 38-bit color depth, with 10 bits for RGB, and 8 bits for alpha, according to envytools. @@ -2052,6 +2051,14 @@ static void riva128_nvclk_poll(void *p) riva128->nvtime += cpuclock / riva128->nvfreq; } +static void riva128_vblank_poll(void *p) +{ + riva128_t *riva128 = (riva128_t *)p; + svga_t *svga = &riva128->svga; + + if(svga->vc == svga->dispend) riva128_pmc_interrupt(24, riva128); +} + static uint8_t riva128_rma_in(uint16_t addr, void *p) { riva128_t *riva128 = (riva128_t *)p; @@ -2851,6 +2858,7 @@ static void *riva128_init() timer_add(riva128_mclk_poll, &riva128->mtime, TIMER_ALWAYS_ENABLED, riva128); timer_add(riva128_nvclk_poll, &riva128->nvtime, TIMER_ALWAYS_ENABLED, riva128); + timer_add(riva128_vblank_poll, &riva128->svga.vidtime, TIMER_ALWAYS_ENABLED, riva128); return riva128; } @@ -3156,6 +3164,7 @@ static void *rivatnt_init() timer_add(riva128_mclk_poll, &riva128->mtime, TIMER_ALWAYS_ENABLED, riva128); timer_add(riva128_nvclk_poll, &riva128->nvtime, TIMER_ALWAYS_ENABLED, riva128); + timer_add(riva128_vblank_poll, &riva128->svga.vidtime, TIMER_ALWAYS_ENABLED, riva128); return riva128; } @@ -3387,6 +3396,7 @@ static void *rivatnt2_init() timer_add(riva128_mclk_poll, &riva128->mtime, TIMER_ALWAYS_ENABLED, riva128); timer_add(riva128_nvclk_poll, &riva128->nvtime, TIMER_ALWAYS_ENABLED, riva128); + timer_add(riva128_vblank_poll, &riva128->svga.vidtime, TIMER_ALWAYS_ENABLED, riva128); return riva128; }