diff --git a/src/i830_display.c b/src/i830_display.c index 50fbc4d..1d1ad18 100644 --- a/src/i830_display.c +++ b/src/i830_display.c @@ -1123,7 +1123,8 @@ i830_update_dsparb(ScrnInfoPtr pScrn) xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn); I830Ptr pI830 = I830PTR(pScrn); int total_hdisplay = 0, planea_hdisplay = 0, planeb_hdisplay = 0; - int fifo_entries = 0, planea_entries = 0, planeb_entries = 0, i; + int fifo_entries = 0, planea_entries = 0, planeb_entries = 0, + planec_entries = 0, i; if ((INREG(DSPACNTR) & DISPLAY_PLANE_ENABLE) && (INREG(DSPBCNTR) & DISPLAY_PLANE_ENABLE)) @@ -1133,18 +1134,22 @@ i830_update_dsparb(ScrnInfoPtr pScrn) /* * FIFO entries will be split based on programmed modes */ - if (IS_I965GM(pI830)) + if (IS_I965GM(pI830) || IS_I945GM(pI830)) { fifo_entries = 127; - else if (IS_I9XX(pI830)) + planec_entries = 40; + } else if (IS_I9XX(pI830)) { fifo_entries = 95; - else if (IS_MOBILE(pI830)) { + planec_entries = 30; + } else if (IS_MOBILE(pI830)) { fifo_entries = 255; + planec_entries = 96; } else { - /* The 845/865 only have a AEND field. Though the field size would + /* The 845/865 only have a AEND field. Though the field size would * allow 128 entries, the 865 rendered the cursor wrong then. * The BIOS set it up for 96. */ - fifo_entries = 95; + fifo_entries = 95; + planec_entries = 30; } for (i = 0; i < xf86_config->num_crtc; i++) { @@ -1159,6 +1164,7 @@ i830_update_dsparb(ScrnInfoPtr pScrn) } } + fifo_entries -= planec_entries; planea_entries = fifo_entries * planea_hdisplay / total_hdisplay; planeb_entries = fifo_entries * planeb_hdisplay / total_hdisplay;