Home | History | Annotate | Download | only in drm

Lines Matching refs:cbuf

550    struct virgl_drm_cmd_buf *cbuf;
552 cbuf = CALLOC_STRUCT(virgl_drm_cmd_buf);
553 if (!cbuf)
556 cbuf->ws = qws;
558 cbuf->nres = 512;
559 cbuf->res_bo = CALLOC(cbuf->nres, sizeof(struct virgl_hw_buf*));
560 if (!cbuf->res_bo) {
561 FREE(cbuf);
564 cbuf->res_hlist = MALLOC(cbuf->nres * sizeof(uint32_t));
565 if (!cbuf->res_hlist) {
566 FREE(cbuf->res_bo);
567 FREE(cbuf);
571 cbuf->base.buf = cbuf->buf;
572 return &cbuf->base;
577 struct virgl_drm_cmd_buf *cbuf = virgl_drm_cmd_buf(_cbuf);
579 FREE(cbuf->res_hlist);
580 FREE(cbuf->res_bo);
581 FREE(cbuf);
585 static boolean virgl_drm_lookup_res(struct virgl_drm_cmd_buf *cbuf,
588 unsigned hash = res->res_handle & (sizeof(cbuf->is_handle_added)-1);
591 if (cbuf->is_handle_added[hash]) {
592 i = cbuf->reloc_indices_hashlist[hash];
593 if (cbuf->res_bo[i] == res)
596 for (i = 0; i < cbuf->cres; i++) {
597 if (cbuf->res_bo[i] == res) {
598 cbuf->reloc_indices_hashlist[hash] = i;
607 struct virgl_drm_cmd_buf *cbuf,
610 unsigned hash = res->res_handle & (sizeof(cbuf->is_handle_added)-1);
612 if (cbuf->cres > cbuf->nres) {
617 cbuf->res_bo[cbuf->cres] = NULL;
618 virgl_drm_resource_reference(qdws, &cbuf->res_bo[cbuf->cres], res);
619 cbuf->res_hlist[cbuf->cres] = res->bo_handle;
620 cbuf->is_handle_added[hash] = TRUE;
622 cbuf->reloc_indices_hashlist[hash] = cbuf->cres;
624 cbuf->cres++;
628 struct virgl_drm_cmd_buf *cbuf)
632 for (i = 0; i < cbuf->cres; i++) {
633 p_atomic_dec(&cbuf->res_bo[i]->num_cs_references);
634 virgl_drm_resource_reference(qdws, &cbuf->res_bo[i], NULL);
636 cbuf->cres = 0;
644 struct virgl_drm_cmd_buf *cbuf = virgl_drm_cmd_buf(_cbuf);
645 boolean already_in_list = virgl_drm_lookup_res(cbuf, res);
648 cbuf->base.buf[cbuf->base.cdw++] = res->res_handle;
651 virgl_drm_add_res(qdws, cbuf, res);
668 struct virgl_drm_cmd_buf *cbuf = virgl_drm_cmd_buf(_cbuf);
672 if (cbuf->base.cdw == 0)
676 eb.command = (unsigned long)(void*)cbuf->buf;
677 eb.size = cbuf->base.cdw * 4;
678 eb.num_bo_handles = cbuf->cres;
679 eb.bo_handles = (unsigned long)(void *)cbuf->res_hlist;
684 cbuf->base.cdw = 0;
686 virgl_drm_release_all_res(qdws, cbuf);
688 memset(cbuf->is_handle_added, 0, sizeof(cbuf->is_handle_added));