Ticket #7655: patch_nvidia_accel.diff

File patch_nvidia_accel.diff, 2.4 KB (added by ttcoder, 8 years ago)

Do not override create_display_modes() *3-sections* guesstimate with our own (more limited) 1-section EDID guesstimate :-)

  • ProposeDisplayMode.c

     
    193193       note:
    194194       allowing 2 pixels more for horizontal display for the 1366 mode, since multiples of 8
    195195       are required for the CRTCs horizontal timing programming) */
    196     if (si->ps.crtc1_screen.have_native_edid) {
    197         if ((target->timing.h_display - 2) > si->ps.crtc1_screen.timing.h_display
    198             || target->timing.v_display > si->ps.crtc1_screen.timing.v_display) {
    199             LOG(4, ("PROPOSEMODE: screen at crtc1 can't display requested resolution, aborted.\n"));
    200             return B_ERROR;
    201         }
    202     }
    203     if (si->ps.crtc2_screen.have_native_edid) {
    204         if ((target->timing.h_display - 2) > si->ps.crtc2_screen.timing.h_display
    205             || target->timing.v_display > si->ps.crtc2_screen.timing.v_display) {
    206             LOG(4, ("PROPOSEMODE: screen at crtc2 can't display requested resolution, aborted.\n"));
    207             return B_ERROR;
    208         }
    209     }
     196// Do NOT second-guess the proposed target->timing.{h,v}_display values
     197// based on our crtc1_screen.timing value, since the latter is based on our
     198// one-section interpretation of the EDID data and thus is not as complete
     199// as the value calculated by the caller, which takes all 3 EDID sections
     200// into account.
     201// Indeed, in some cases (certain display monitors) we end up breaking the hard work
     202// done by Axel in create_propose_mode.cpp ;-) by cancelling out the extra digging
     203// for modes that he has implemented there...
     204//  if (si->ps.crtc1_screen.have_native_edid) {
     205//      if ((target->timing.h_display - 2) > si->ps.crtc1_screen.timing.h_display
     206//          || target->timing.v_display > si->ps.crtc1_screen.timing.v_display) {
     207//          LOG(4, ("PROPOSEMODE: screen at crtc1 can't display requested resolution, aborted.\n"));
     208//          return B_ERROR;
     209//      }
     210//  }
     211//  if (si->ps.crtc2_screen.have_native_edid) {
     212//      if ((target->timing.h_display - 2) > si->ps.crtc2_screen.timing.h_display
     213//          || target->timing.v_display > si->ps.crtc2_screen.timing.v_display) {
     214//          LOG(4, ("PROPOSEMODE: screen at crtc2 can't display requested resolution, aborted.\n"));
     215//          return B_ERROR;
     216//      }
     217//  }
    210218
    211219    /* validate display vs. virtual */
    212220    if (target->timing.h_display > target->virtual_width || want_same_width)
    213221        target->virtual_width = target->timing.h_display;
    214222    if (target->timing.v_display > target->virtual_height || want_same_height)