Xext: fix up wrong conditions for negative sync transitions.

If the counter had a value higher than the trigger value for a negative
transition, the trigger value did not get set.

The correct sequence of checks is:
if (positive transition)
   if (counter value < trigger value)
      set up trigger
if (negative transition)
   if (counter value > trigger value)
      set up trigger

Red Hat Bug 501601 <https://bugzilla.redhat.com/show_bug.cgi?id=501601>

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2009-08-13 16:37:00 +10:00
parent a3e50b0574
commit db568f9eab

View File

@ -962,28 +962,24 @@ SyncComputeBracketValues(SyncCounter *pCounter, Bool startOver)
pnewltval = &psci->bracket_less; pnewltval = &psci->bracket_less;
} }
} }
else if ( (pTrigger->test_type == XSyncPositiveTransition && else if (pTrigger->test_type == XSyncNegativeTransition &&
ct != XSyncCounterNeverIncreases) ct != XSyncCounterNeverIncreases)
||
(pTrigger->test_type == XSyncNegativeTransition &&
ct != XSyncCounterNeverDecreases)
)
{ {
if (XSyncValueLessThan(pCounter->value, pTrigger->test_value)) if (XSyncValueGreaterThan(pCounter->value, pTrigger->test_value) &&
XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less))
{ {
if (XSyncValueLessThan(pTrigger->test_value, psci->bracket_less = pTrigger->test_value;
psci->bracket_greater)) pnewltval = &psci->bracket_less;
{ }
psci->bracket_greater = pTrigger->test_value; }
pnewgtval = &psci->bracket_greater; else if (pTrigger->test_type == XSyncPositiveTransition &&
} ct != XSyncCounterNeverDecreases)
else {
if (XSyncValueGreaterThan(pTrigger->test_value, if (XSyncValueLessThan(pCounter->value, pTrigger->test_value) &&
psci->bracket_less)) XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater))
{ {
psci->bracket_less = pTrigger->test_value; psci->bracket_greater = pTrigger->test_value;
pnewltval = &psci->bracket_less; pnewgtval = &psci->bracket_greater;
}
} }
} }
} /* end for each trigger */ } /* end for each trigger */