[PATCH 3/3] DRI2: defer swap if relevant CRTC is in DMPS off state

Ilija Hadzic ilijahadzic at gmail.com
Fri Dec 14 09:03:27 PST 2012


On Fri, Dec 14, 2012 at 4:55 AM, Michel Dänzer <michel at daenzer.net> wrote:
>> +    /*
>> +     * CRTC is in DPMS off state, fallback to blit, but pace the
>> +     * application at the rate that roughly approximates the
>> +     * nominal frame rate of the relevant CRTC
>> +     */
>> +    if (!radeon_crtc_is_enabled(crtc)) {
>> +     TimerSet(NULL, 0, nominal_vblank_period, radeon_dri2_deferred_swap,
>> +              swap_info);
>> +     *target_msc = 0;
>> +     return TRUE;
>> +    }
>
> This will always wait for (at least) nominal_vblank_period milliseconds
> before performing the swap, but a significant part of that (or even more
> time) might have passed already since the last swap of the drawable. You
> could keep track of the previous swap time (from the event tv_(u)sec
> values or GetTimeInMillis()) in a drawable private and only wait for the
> amount of time actually necessary.
>
>

I guess you mean CRTC private. There is no drawable private and such information
would not be per-drawable anyway (it would be per-CRTC).

Regarding taking target_msc into account, I agree, but I have a
question: is setting
target_msc to zero (to return it to the caller) acceptable action ? As
far as I can tell,
it should be fine: if schedule_swap resets target_msc, in the next
call the caller
"resynchronizes"  (i.e. if I return zero in current call, it will
typically be 1 in the next call).
Also, resetting target_msc was what the original code was doing, but I
just want to make
sure that I am not missing something.

thanks,

Ilija


More information about the xorg-driver-ati mailing list