static struct vivante_dri_wait * new_wait_info(ClientPtr client, DrawablePtr draw, enum event_type type) { struct vivante_dri_wait *wait = calloc(1, sizeof *wait); if (wait) { wait->drawable_id = draw->id; wait->client = client; wait->type = type; xorg_list_init(&wait->client_list); xorg_list_init(&wait->drawable_list); if (!add_reslist(wait_drawable_restype, draw->id, &wait->drawable_list) || !add_reslist(wait_client_restype, client_id(client), &wait->client_list)) { xorg_list_del(&wait->client_list); xorg_list_del(&wait->drawable_list); free(wait); wait = NULL; } } return wait; }
glamor_pixmap_fbo * glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv, int w, int h, GLenum format, GLint tex, int flag) { glamor_pixmap_fbo *fbo; fbo = calloc(1, sizeof(*fbo)); if (fbo == NULL) return NULL; xorg_list_init(&fbo->list); fbo->tex = tex; fbo->width = w; fbo->height = h; fbo->external = FALSE; fbo->format = format; if (flag == CREATE_PIXMAP_USAGE_SHARED) fbo->external = TRUE; if (flag != GLAMOR_CREATE_FBO_NO_FBO) { if (glamor_pixmap_ensure_fb(glamor_priv, fbo) != 0) { glamor_purge_fbo(glamor_priv, fbo); fbo = NULL; } } return fbo; }
struct armsoc_device *armsoc_device_new(int fd, int (*create_custom_gem)(int fd, struct armsoc_create_gem *create_gem)) { struct armsoc_device *new_dev = malloc(sizeof(*new_dev)); if (!new_dev) return NULL; new_dev->fd = fd; new_dev->create_custom_gem = create_custom_gem; xorg_list_init(&pending_deletions); return new_dev; }
void glamor_init_pixmap_fbo(ScreenPtr screen) { glamor_screen_private *glamor_priv; int i, j, k; glamor_priv = glamor_get_screen_private(screen); for (i = 0; i < CACHE_FORMAT_COUNT; i++) for (j = 0; j < CACHE_BUCKET_WCOUNT; j++) for (k = 0; k < CACHE_BUCKET_HCOUNT; k++) { xorg_list_init(&glamor_priv->fbo_cache[i][j][k]); } glamor_priv->fbo_cache_watermark = 0; }
static DRI2DrawablePtr DRI2AllocateDrawable(DrawablePtr pDraw) { DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen); DRI2DrawablePtr pPriv; CARD64 ust; WindowPtr pWin; PixmapPtr pPixmap; pPriv = malloc(sizeof *pPriv); if (pPriv == NULL) return NULL; pPriv->dri2_screen = ds; pPriv->drawable = pDraw; pPriv->width = pDraw->width; pPriv->height = pDraw->height; pPriv->buffers = NULL; pPriv->bufferCount = 0; pPriv->swapsPending = 0; pPriv->blockedClient = NULL; pPriv->blockedOnMsc = FALSE; pPriv->swap_count = 0; pPriv->target_sbc = -1; pPriv->swap_interval = 1; /* Initialize last swap target from DDX if possible */ if (!ds->GetMSC || !(*ds->GetMSC) (pDraw, &ust, &pPriv->last_swap_target)) pPriv->last_swap_target = 0; pPriv->swap_limit = 1; /* default to double buffering */ pPriv->last_swap_msc = 0; pPriv->last_swap_ust = 0; xorg_list_init(&pPriv->reference_list); pPriv->serialNumber = DRI2DrawableSerial(pDraw); pPriv->needInvalidate = FALSE; if (pDraw->type == DRAWABLE_WINDOW) { pWin = (WindowPtr) pDraw; dixSetPrivate(&pWin->devPrivates, dri2WindowPrivateKey, pPriv); } else { pPixmap = (PixmapPtr) pDraw; dixSetPrivate(&pPixmap->devPrivates, dri2PixmapPrivateKey, pPriv); } return pPriv; }
static Bool add_reslist(RESTYPE type, XID id, struct xorg_list *node) { struct xorg_list *list; void *ptr = NULL; dixLookupResourceByType(&ptr, id, type, NULL, DixWriteAccess); list = ptr; if (!list) { list = malloc(sizeof *list); if (!list) return FALSE; if (!AddResource(id, type, list)) { free(list); return FALSE; } xorg_list_init(list); } xorg_list_add(node, list); return TRUE; }