Lines Matching refs:pPriv

155 dri2WakeAll(ClientPtr client, DRI2DrawablePtr pPriv, enum DRI2WakeType t)
159 if (!pPriv->blocked[t])
162 count = ClientSignalAll(client, dri2WakeClient, Wake(pPriv, t));
163 pPriv->blocked[t] -= count;
168 dri2Sleep(ClientPtr client, DRI2DrawablePtr pPriv, enum DRI2WakeType t)
170 if (ClientSleep(client, dri2WakeClient, Wake(pPriv, t))) {
171 pPriv->blocked[t]++;
235 DRI2DrawablePtr pPriv;
240 pPriv = malloc(sizeof *pPriv);
241 if (pPriv == NULL)
244 pPriv->dri2_screen = ds;
245 pPriv->drawable = pDraw;
246 pPriv->width = pDraw->width;
247 pPriv->height = pDraw->height;
248 pPriv->buffers = NULL;
249 pPriv->bufferCount = 0;
250 pPriv->swapsPending = 0;
251 pPriv->swap_count = 0;
252 pPriv->target_sbc = -1;
253 pPriv->swap_interval = 1;
255 if (!ds->GetMSC || !(*ds->GetMSC) (pDraw, &ust, &pPriv->last_swap_target))
256 pPriv->last_swap_target = 0;
258 memset(pPriv->blocked, 0, sizeof(pPriv->blocked));
259 pPriv->swap_limit = 1; /* default to double buffering */
260 pPriv->last_swap_msc = 0;
261 pPriv->last_swap_ust = 0;
262 xorg_list_init(&pPriv->reference_list);
263 pPriv->needInvalidate = FALSE;
264 pPriv->redirectpixmap = NULL;
265 pPriv->prime_secondary_pixmap = NULL;
268 dixSetPrivate(&pWin->devPrivates, dri2WindowPrivateKey, pPriv);
272 dixSetPrivate(&pPixmap->devPrivates, dri2PixmapPrivateKey, pPriv);
275 return pPriv;
281 DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
284 if (!pPriv)
287 ds = pPriv->dri2_screen;
292 pPriv->swap_limit = swap_limit;
295 if (pPriv->swapsPending >= pPriv->swap_limit)
298 dri2WakeAll(CLIENT_SIGNAL_ANY, pPriv, WAKE_SWAP);
311 DRI2LookupDrawableRef(DRI2DrawablePtr pPriv, XID id)
315 xorg_list_for_each_entry(ref, &pPriv->reference_list, link) {
324 DRI2AddDrawableRef(DRI2DrawablePtr pPriv, XID id, XID dri2_id,
333 if (!AddResource(dri2_id, dri2DrawableRes, pPriv)) {
337 if (!DRI2LookupDrawableRef(pPriv, id))
338 if (!AddResource(id, dri2DrawableRes, pPriv)) {
348 xorg_list_add(&ref->link, &pPriv->reference_list);
358 DRI2DrawablePtr pPriv;
368 pPriv = DRI2GetDrawable(pDraw);
369 if (pPriv == NULL)
370 pPriv = DRI2AllocateDrawable(pDraw);
371 if (pPriv == NULL)
374 pPriv->prime_id = dri2_client->prime_id;
377 rc = DRI2AddDrawableRef(pPriv, id, dri2_id, invalidate, priv);
397 DRI2DrawablePtr pPriv = p;
404 xorg_list_for_each_entry_safe(ref, next, &pPriv->reference_list, link) {
409 if (!DRI2LookupDrawableRef(pPriv, ref->id))
422 if (!xorg_list_is_empty(&pPriv->reference_list))
425 pDraw = pPriv->drawable;
435 if (pPriv->prime_secondary_pixmap) {
436 (*pPriv->prime_secondary_pixmap->primary_pixmap->drawable.pScreen->DestroyPixmap)(pPriv->prime_secondary_pixmap->primary_pixmap);
437 (*pPriv->prime_secondary_pixmap->drawable.pScreen->DestroyPixmap)(pPriv->prime_secondary_pixmap);
440 if (pPriv->buffers != NULL) {
441 for (i = 0; i < pPriv->bufferCount; i++)
442 destroy_buffer(pDraw, pPriv->buffers[i], pPriv->prime_id);
444 free(pPriv->buffers);
447 if (pPriv->redirectpixmap) {
448 (*pDraw->pScreen->ReplaceScanoutPixmap)(pDraw, pPriv->redirectpixmap, FALSE);
449 (*pDraw->pScreen->DestroyPixmap)(pPriv->redirectpixmap);
452 dri2WakeAll(CLIENT_SIGNAL_ANY, pPriv, WAKE_SWAP);
453 dri2WakeAll(CLIENT_SIGNAL_ANY, pPriv, WAKE_MSC);
454 dri2WakeAll(CLIENT_SIGNAL_ANY, pPriv, WAKE_SBC);
456 free(pPriv);
489 find_attachment(DRI2DrawablePtr pPriv, unsigned attachment)
493 if (pPriv->buffers == NULL) {
497 for (i = 0; i < pPriv->bufferCount; i++) {
498 if ((pPriv->buffers[i] != NULL)
499 && (pPriv->buffers[i]->attachment == attachment)) {
509 DRI2DrawablePtr pPriv,
513 int old_buf = find_attachment(pPriv, attachment);
517 || !dimensions_match || (pPriv->buffers[old_buf]->format != format)) {
523 *buffer = pPriv->buffers[old_buf];
528 pPriv->buffers[old_buf] = NULL;
534 update_dri2_drawable_buffers(DRI2DrawablePtr pPriv, DrawablePtr pDraw,
540 if (pPriv->buffers != NULL) {
541 for (i = 0; i < pPriv->bufferCount; i++) {
542 if (pPriv->buffers[i] != NULL) {
543 destroy_buffer(pDraw, pPriv->buffers[i], pPriv->prime_id);
547 free(pPriv->buffers);
550 pPriv->buffers = buffers;
551 pPriv->bufferCount = out_count;
552 pPriv->width = pDraw->width;
553 pPriv->height = pDraw->height;
554 *width = pPriv->width;
555 *height = pPriv->height;
563 DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
574 if (!pPriv) {
581 ds = DRI2GetScreenPrime(pDraw->pScreen, pPriv->prime_id);
583 dimensions_match = (pDraw->width == pPriv->width)
584 && (pDraw->height == pPriv->height);
594 if (allocate_or_reuse_buffer(pDraw, ds, pPriv, attachment,
629 if (allocate_or_reuse_buffer(pDraw, ds, pPriv, DRI2BufferFrontLeft,
640 if (allocate_or_reuse_buffer(pDraw, ds, pPriv, DRI2BufferFakeFrontLeft,
654 update_dri2_drawable_buffers(pPriv, pDraw, buffers, *out_count, width,
667 box.x2 = pPriv->width;
668 box.y2 = pPriv->height;
675 pPriv->needInvalidate = TRUE;
677 return pPriv->buffers;
693 update_dri2_drawable_buffers(pPriv, pDraw, buffers, *out_count, width,
718 DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
721 if (!pPriv || !pPriv->needInvalidate)
724 pPriv->needInvalidate = FALSE;
726 xorg_list_for_each_entry(ref, &pPriv->reference_list, link)
740 DRI2DrawablePtr pPriv;
742 pPriv = DRI2GetDrawable(pDraw);
743 if (pPriv == NULL)
747 if (pPriv->swapsPending >= pPriv->swap_limit) {
748 if (dri2Sleep(client, pPriv, WAKE_SWAP)) {
761 DRI2DrawablePtr pPriv;
763 pPriv = DRI2GetDrawable(pDraw);
764 if (pPriv == NULL)
767 dri2Sleep(client, pPriv, WAKE_MSC);
820 DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
833 if (pPriv->redirectpixmap &&
834 pPriv->redirectpixmap->drawable.width == pDraw->width &&
835 pPriv->redirectpixmap->drawable.height == pDraw->height &&
836 pPriv->redirectpixmap->drawable.depth == pDraw->depth) {
837 mpix = pPriv->redirectpixmap;
850 pPriv->redirectpixmap = mpix;
854 } else if (pPriv->redirectpixmap) {
855 (*primary->ReplaceScanoutPixmap)(pDraw, pPriv->redirectpixmap, FALSE);
856 (*primary->DestroyPixmap)(pPriv->redirectpixmap);
857 pPriv->redirectpixmap = NULL;
861 secondary = GetScreenPrime(pDraw->pScreen, pPriv->prime_id);
864 if (pPriv->prime_secondary_pixmap) {
865 if (pPriv->prime_secondary_pixmap->primary_pixmap == mpix)
866 return &pPriv->prime_secondary_pixmap->drawable;
868 PixmapUnshareSecondaryPixmap(pPriv->prime_secondary_pixmap);
869 (*pPriv->prime_secondary_pixmap->primary_pixmap->drawable.pScreen->DestroyPixmap)(pPriv->prime_secondary_pixmap->primary_pixmap);
870 (*secondary->DestroyPixmap)(pPriv->prime_secondary_pixmap);
871 pPriv->prime_secondary_pixmap = NULL;
879 pPriv->prime_secondary_pixmap = spix;
892 DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
896 primeScreen = GetScreenPrime(pDraw->pScreen, pPriv->prime_id);
905 if (pPriv->prime_id) {
924 DRI2DrawablePtr pPriv;
928 pPriv = DRI2GetDrawable(pDraw);
929 if (pPriv == NULL)
934 for (i = 0; i < pPriv->bufferCount; i++) {
935 if (pPriv->buffers[i]->attachment == dest)
936 pDestBuffer = (DRI2BufferPtr) pPriv->buffers[i];
937 if (pPriv->buffers[i]->attachment == src)
938 pSrcBuffer = (DRI2BufferPtr) pPriv->buffers[i];
992 DRI2DrawablePtr pPriv;
994 pPriv = DRI2GetDrawable(pDraw);
995 if (pPriv == NULL)
999 frame, pPriv->swap_count);
1001 dri2WakeAll(client, pPriv, WAKE_MSC);
1009 DRI2DrawablePtr pPriv;
1011 pPriv = DRI2GetDrawable(pDraw);
1012 if (pPriv == NULL) {
1026 if (pPriv->target_sbc != -1 && pPriv->target_sbc <= pPriv->swap_count) {
1027 if (dri2WakeAll(client, pPriv, WAKE_SBC)) {
1029 frame, pPriv->swap_count);
1030 pPriv->target_sbc = -1;
1034 dri2WakeAll(CLIENT_SIGNAL_ANY, pPriv, WAKE_SWAP);
1043 DRI2DrawablePtr pPriv;
1048 pPriv = DRI2GetDrawable(pDraw);
1049 if (pPriv == NULL) {
1055 pPriv->swapsPending--;
1056 pPriv->swap_count++;
1068 swap_complete(client, swap_data, type, ust, frame, pPriv->swap_count);
1070 pPriv->last_swap_msc = frame;
1071 pPriv->last_swap_ust = ust;
1079 DRI2DrawablePtr pPriv = DRI2GetDrawable(pDrawable);
1083 if (pPriv && pPriv->swapsPending) {
1084 if (dri2Sleep(client, pPriv, WAKE_SWAP)) {
1103 DRI2DrawablePtr pPriv;
1108 pPriv = DRI2GetDrawable(pDraw);
1109 if (pPriv == NULL) {
1121 *swap_target = pPriv->swap_count + pPriv->swapsPending + 1;
1123 for (i = 0; i < pPriv->bufferCount; i++) {
1124 if (pPriv->buffers[i]->attachment == DRI2BufferFrontLeft)
1125 pDestBuffer = (DRI2BufferPtr) pPriv->buffers[i];
1126 if (pPriv->buffers[i]->attachment == DRI2BufferBackLeft)
1127 pSrcBuffer = (DRI2BufferPtr) pPriv->buffers[i];
1136 if (!ds->ScheduleSwap || !pPriv->swap_interval || pPriv->prime_id) {
1146 pPriv->swapsPending++;
1168 pPriv->last_swap_target = 0;
1170 if (current_msc < pPriv->last_swap_target)
1171 pPriv->last_swap_target = current_msc;
1180 target_msc = pPriv->last_swap_target + pPriv->swap_interval;
1184 pPriv->swapsPending++;
1188 pPriv->swapsPending--; /* didn't schedule */
1194 pPriv->last_swap_target = target_msc;
1205 DRI2DrawablePtr pPriv = DRI2GetDrawable(pDrawable);
1207 if (pPriv == NULL) {
1214 pPriv->swap_interval = interval;
1222 DRI2DrawablePtr pPriv;
1225 pPriv = DRI2GetDrawable(pDraw);
1226 if (pPriv == NULL) {
1235 *sbc = pPriv->swap_count;
1248 *sbc = pPriv->swap_count;
1258 DRI2DrawablePtr pPriv;
1261 pPriv = DRI2GetDrawable(pDraw);
1262 if (pPriv == NULL)
1283 DRI2DrawablePtr pPriv;
1285 pPriv = DRI2GetDrawable(pDraw);
1286 if (pPriv == NULL)
1289 if (pPriv->target_sbc != -1) /* already in use */
1296 target_sbc = pPriv->swap_count + pPriv->swapsPending;
1302 if (pPriv->swap_count >= target_sbc) {
1303 ProcDRI2WaitMSCReply(client, pPriv->last_swap_ust,
1304 pPriv->last_swap_msc, pPriv->swap_count);
1308 if (!dri2Sleep(client, pPriv, WAKE_SBC))
1311 pPriv->target_sbc = target_sbc;