Lines Matching refs:chain

140 	struct sna_dri2_event *chain;
196 struct sna_dri2_event *chain;
373 assert(priv->chain == NULL || priv->chain->chained);
374 return priv->chain;
1543 priv->chain = NULL;
1652 assert(priv->chain != NULL);
1656 if (priv->chain != info) {
1657 struct sna_dri2_event *chain = priv->chain;
1658 while (chain->chain != info) {
1659 assert(chain->chained);
1660 chain = chain->chain;
1662 assert(chain != info);
1663 assert(info->chain != chain);
1664 chain->chain = info->chain;
1668 priv->chain = info->chain;
1669 if (priv->chain == NULL) {
1784 struct sna_dri2_event *info, *chain;
1810 assert(priv->chain != info);
1813 if (priv->chain == NULL) {
1814 priv->chain = info;
1818 chain = priv->chain;
1819 while (chain->chain != NULL)
1820 chain = chain->chain;
1822 assert(chain != info);
1823 chain->chain = info;
1841 if (priv->chain) {
1842 struct sna_dri2_event *info, *chain;
1844 DBG(("%s: freeing chain\n", __FUNCTION__));
1846 chain = priv->chain;
1847 while ((info = chain)) {
1875 chain = info->chain;
1876 info->chain = NULL;
1883 priv->chain = NULL;
2498 static void chain_swap(struct sna_dri2_event *chain)
2501 __FUNCTION__, (long)chain->draw->id, chain->queued, chain->type));
2503 if (chain->queued) /* too early! */
2506 if (chain->draw == NULL) {
2507 sna_dri2_event_free(chain);
2511 assert(chain == dri2_chain(chain->draw));
2512 assert(chain->signal);
2514 switch (chain->type) {
2517 if (can_xchg(chain->sna, chain->draw, chain->front, chain->back)) {
2518 sna_dri2_xchg(chain->draw, chain->front, chain->back);
2519 } else if (can_xchg_crtc(chain->sna, chain->draw, chain->crtc,
2520 chain->front, chain->back)) {
2521 sna_dri2_xchg_crtc(chain->sna, chain->draw, chain->crtc,
2522 chain->front, chain->back);
2524 __sna_dri2_copy_event(chain, chain->sync | DRI2_BO);
2526 assert(get_private(chain->back)->bo != get_private(chain->front)->bo);
2533 if ((chain->type == SWAP_COMPLETE &&
2534 !swap_limit(chain->draw, 2 + !chain->sync) &&
2535 !chain->sync) ||
2536 !sna_next_vblank(chain)) {
2538 frame_swap_complete(chain, DRI2_BLIT_COMPLETE);
2539 sna_dri2_event_free(chain);
2719 if (info->chain) {
2720 DBG(("%s: continuing chain\n", __FUNCTION__));
2721 assert(info->chain != info);
2724 chain_swap(info->chain);
2737 struct sna_dri2_event *chain = dri2_chain(info->draw);
2743 __FUNCTION__, sync, chain != info, info->pipe));
2744 assert(chain);
2750 if (chain == info) {
2751 DBG(("%s: no pending blit, starting chain\n", __FUNCTION__));
2775 get_private(chain->front)->bo->handle, chain->front->name, get_private(chain->front)->bo->active_scanout,
2776 get_private(chain->back)->bo->handle, chain->back->name, get_private(chain->back)->bo->active_scanout));
2778 if (chain->type == SWAP_COMPLETE && chain->front == info->front) {
2779 assert(chain->draw == info->draw);
2780 assert(chain->client == info->client);
2781 assert(chain->event_complete == info->event_complete);
2782 assert(chain->event_data == info->event_data);
2783 assert(chain->queued);
2785 if ((!sync || !chain->sync) && chain->pending.bo) {
2786 bool signal = chain->signal;
2789 assert(chain->draw);
2790 chain->signal = true;
2791 frame_swap_complete(chain, DRI2_EXCHANGE_COMPLETE);
2792 chain->signal = signal;
2794 assert(chain->pending.bo->active_scanout > 0);
2795 chain->pending.bo->active_scanout--;
2797 sna_dri2_cache_bo(chain->sna, chain->draw,
2798 chain->pending.bo,
2799 chain->pending.name,
2800 chain->pending.size,
2801 chain->pending.flags);
2802 chain->pending.bo = NULL;
2805 if (chain->pending.bo == NULL && swap_limit(info->draw, 2 + !sync)) {
2808 get_private(chain->front)->bo->handle,
2809 get_private(chain->back)->bo->handle));
2810 chain->pending.bo = ref(get_private(info->back)->bo);
2811 chain->pending.size = get_private(info->back)->size;
2812 chain->pending.name = info->back->name;
2813 chain->pending.flags = info->back->flags;
2814 chain->sync = sync;
2818 chain->pending.bo->active_scanout++;
2878 struct sna_dri2_event *chain = sna->dri2.flip_pending;
2880 assert(chain->type == FLIP);
2882 __FUNCTION__, chain->type, chain->draw == NULL, chain->draw ? chain->draw->id : 0));
2885 if (chain->draw == NULL) {
2886 sna_dri2_event_free(chain);
2890 assert(chain == dri2_chain(chain->draw));
2891 assert(!chain->queued);
2893 if (can_flip(sna, chain->draw, chain->front, chain->back, chain->crtc) &&
2894 sna_dri2_flip(chain)) {
2898 __sna_dri2_copy_event(chain, DRI2_SYNC);
2901 chain->type = SWAP_COMPLETE;
2902 assert(chain->signal);
2903 if (sna_next_vblank(chain))
2908 frame_swap_complete(chain, DRI2_BLIT_COMPLETE);
2909 sna_dri2_event_free(chain);
2950 DBG(("%s: flip chain complete\n", __FUNCTION__));
2952 if (flip->chain) {
2954 chain_swap(flip->chain);
3135 DBG(("%s: executing xchg of pending flip: flip_continue=%d, keepalive=%d, chain?=%d\n", __FUNCTION__, info->flip_continue, info->keepalive, current_msc < *target_msc));