Home | History | Annotate | Download | only in src

Lines Matching refs:vBuf

123     struct _WsbmUserBuffer *vBuf = userBuf(buf);
125 while (vBuf->unFenced || vBuf->fence != NULL) {
126 if (vBuf->unFenced)
127 WSBM_COND_WAIT(&vBuf->event, &buf->mutex);
129 if (vBuf->fence != NULL) {
130 if (!wsbmFenceSignaled(vBuf->fence, vBuf->kBuf.fence_type_mask)) {
132 wsbmFenceReference(vBuf->fence);
135 (void)wsbmFenceFinish(fence, vBuf->kBuf.fence_type_mask,
139 if (vBuf->fence == fence)
140 wsbmFenceUnreference(&vBuf->fence);
144 wsbmFenceUnreference(&vBuf->fence);
163 struct _WsbmUserBuffer *vBuf;
172 vBuf = WSBMLISTENTRY(list, struct _WsbmUserBuffer, lru);
173 p = userPool(vBuf);
175 WSBM_MUTEX_LOCK(&vBuf->buf.mutex);
178 vBuf->sysmem = malloc(vBuf->size + WSBM_USER_ALIGN_ADD);
180 if (!vBuf->sysmem) {
185 (void)wsbmFenceFinish(vBuf->fence, vBuf->kBuf.fence_type_mask, 0);
186 wsbmFenceUnreference(&vBuf->fence);
188 memcpy(WSBM_USER_ALIGN_SYSMEM(vBuf->sysmem), vBuf->map, vBuf->size);
189 WSBMLISTDELINIT(&vBuf->lru);
190 vBuf->kBuf.placement = WSBM_PL_FLAG_SYSTEM;
191 vBuf->map = WSBM_USER_ALIGN_SYSMEM(vBuf->sysmem);
199 WSBM_MUTEX_UNLOCK(&vBuf->buf.mutex);
208 struct _WsbmUserBuffer *vBuf = calloc(1, sizeof(*vBuf));
210 if (!vBuf)
213 wsbmBufStorageInit(&vBuf->buf, pool);
214 vBuf->sysmem = NULL;
215 vBuf->proposedPlacement = placement;
216 vBuf->size = size;
217 vBuf->alignment = alignment;
219 WSBMINITLISTHEAD(&vBuf->lru);
220 WSBMINITLISTHEAD(&vBuf->delayed);
224 vBuf->node = wsbmMMSearchFree(&p->agpMM, size, alignment, 1);
225 if (vBuf->node)
226 vBuf->node = wsbmMMGetBlock(vBuf->node, size, alignment);
228 if (vBuf->node) {
229 vBuf->kBuf.placement = WSBM_PL_FLAG_TT;
230 vBuf->kBuf.gpuOffset = p->agpOffset + vBuf->node->start;
231 vBuf->map = (void *)(p->agpMap + vBuf->node->start);
232 WSBMLISTADDTAIL(&vBuf->lru, &p->agpLRU);
238 vBuf->node = wsbmMMSearchFree(&p->vramMM, size, alignment, 1);
239 if (vBuf->node)
240 vBuf->node = wsbmMMGetBlock(vBuf->node, size, alignment);
242 if (vBuf->node) {
243 vBuf->kBuf.placement = WSBM_PL_FLAG_VRAM;
244 vBuf->kBuf.gpuOffset = p->vramOffset + vBuf->node->start;
245 vBuf->map = (void *)(p->vramMap + vBuf->node->start);
246 WSBMLISTADDTAIL(&vBuf->lru, &p->vramLRU);
257 vBuf->sysmem = malloc(size + WSBM_USER_ALIGN_ADD);
258 vBuf->kBuf.placement = WSBM_PL_FLAG_SYSTEM;
259 vBuf->map = WSBM_USER_ALIGN_SYSMEM(vBuf->sysmem);
264 if (vBuf->sysmem != NULL
265 || (!(vBuf->kBuf.placement & WSBM_PL_FLAG_SYSTEM)))
266 return &vBuf->buf;
268 free(vBuf);
276 struct _WsbmUserBuffer *vBuf = userBuf(buf);
277 struct _WsbmUserPool *p = userPool(vBuf);
282 while (wsbmAtomicRead(&vBuf->writers) != 0)
283 WSBM_COND_WAIT(&vBuf->event, &buf->mutex);
285 vBuf->unFenced = 1;
288 WSBMLISTDELINIT(&vBuf->lru);
290 vBuf->proposedPlacement =
291 (vBuf->proposedPlacement | set_flags) & ~clr_flags;
293 if ((vBuf->proposedPlacement & vBuf->kBuf.placement & WSBM_PL_MASK_MEM) ==
294 vBuf->kBuf.placement) {
304 if (!(vBuf->kBuf.placement & WSBM_PL_FLAG_SYSTEM)) {
308 WSBMLISTADDTAIL(&tmpLRU, &vBuf->lru);
314 if (vBuf->proposedPlacement & WSBM_PL_FLAG_TT) {
316 vBuf->node =
317 wsbmMMSearchFree(&p->agpMM, vBuf->size, vBuf->alignment, 1);
318 if (vBuf->node)
319 vBuf->node =
320 wsbmMMGetBlock(vBuf->node, vBuf->size, vBuf->alignment);
322 if (vBuf->node) {
323 vBuf->kBuf.placement = WSBM_PL_FLAG_TT;
324 vBuf->kBuf.gpuOffset = p->agpOffset + vBuf->node->start;
325 vBuf->map = (void *)(p->agpMap + vBuf->node->start);
326 memcpy(vBuf->map, WSBM_USER_ALIGN_SYSMEM(vBuf->sysmem),
327 vBuf->size);
328 free(vBuf->sysmem);
334 if (vBuf->proposedPlacement & WSBM_PL_FLAG_VRAM) {
336 vBuf->node =
337 wsbmMMSearchFree(&p->vramMM, vBuf->size, vBuf->alignment, 1);
338 if (vBuf->node)
339 vBuf->node =
340 wsbmMMGetBlock(vBuf->node, vBuf->size, vBuf->alignment);
342 if (!err && vBuf->node) {
343 vBuf->kBuf.placement = WSBM_PL_FLAG_VRAM;
344 vBuf->kBuf.gpuOffset = p->vramOffset + vBuf->node->start;
345 vBuf->map = (void *)(p->vramMap + vBuf->node->start);
346 memcpy(vBuf->map, WSBM_USER_ALIGN_SYSMEM(vBuf->sysmem),
347 vBuf->size);
348 free(vBuf->sysmem);
354 if (vBuf->proposedPlacement & WSBM_PL_FLAG_SYSTEM)
360 vBuf->newFenceType = p->fenceTypes(set_flags);
370 struct _WsbmUserBuffer *vBuf = userBuf(buf);
374 vBuf->unFenced = 0;
381 struct _WsbmUserBuffer *vBuf;
393 vBuf = WSBMLISTENTRY(list, struct _WsbmUserBuffer, delayed);
395 if (!vBuf->fence
396 || wsbmFenceSignaled(vBuf->fence, vBuf->kBuf.fence_type_mask)) {
397 if (vBuf->fence)
398 wsbmFenceUnreference(&vBuf->fence);
400 WSBMLISTDEL(&vBuf->delayed);
401 WSBMLISTDEL(&vBuf->lru);
403 if ((vBuf->kBuf.placement & WSBM_PL_FLAG_SYSTEM) == 0)
404 wsbmMMPutBlock(vBuf->node);
406 free(vBuf->sysmem);
408 free(vBuf);
419 struct _WsbmUserBuffer *vBuf = userBuf(*buf);
420 struct _WsbmUserPool *p = userPool(vBuf);
424 WSBM_MUTEX_LOCK(&vBuf->buf.mutex);
425 if ((vBuf->fence
426 && !wsbmFenceSignaled(vBuf->fence, vBuf->kBuf.fence_type_mask))) {
428 WSBMLISTADDTAIL(&vBuf->delayed, &p->delayed);
430 WSBM_MUTEX_UNLOCK(&vBuf->buf.mutex);
434 if (vBuf->fence)
435 wsbmFenceUnreference(&vBuf->fence);
438 WSBMLISTDEL(&vBuf->lru);
441 if (!(vBuf->kBuf.placement & WSBM_PL_FLAG_SYSTEM))
442 wsbmMMPutBlock(vBuf->node);
444 free(vBuf->sysmem);
446 free(vBuf);
453 struct _WsbmUserBuffer *vBuf = userBuf(buf);
455 *virtual = vBuf->map;
468 struct _WsbmUserBuffer *vBuf = userBuf(buf);
470 if (wsbmAtomicDecZero(&vBuf->writers))
471 WSBM_COND_BROADCAST(&vBuf->event);
478 struct _WsbmUserBuffer *vBuf = userBuf(buf);
484 if (vBuf->unFenced) {
490 if ((vBuf->fence == NULL) ||
491 wsbmFenceSignaled(vBuf->fence, vBuf->kBuf.fence_type_mask)) {
492 wsbmFenceUnreference(&vBuf->fence);
493 wsbmAtomicInc(&vBuf->writers);
500 wsbmAtomicInc(&vBuf->writers);
527 struct _WsbmUserBuffer *vBuf = userBuf(buf);
528 struct _WsbmUserPool *p = userPool(vBuf);
532 if (vBuf->fence)
533 wsbmFenceUnreference(&vBuf->fence);
535 vBuf->fence = wsbmFenceReference(fence);
536 vBuf->unFenced = 0;
537 vBuf->kBuf.fence_type_mask = vBuf->newFenceType;
539 WSBM_COND_BROADCAST(&vBuf->event);
541 if (vBuf->kBuf.placement & WSBM_PL_FLAG_VRAM)
542 WSBMLISTADDTAIL(&vBuf->lru, &p->vramLRU);
543 else if (vBuf->kBuf.placement & WSBM_PL_FLAG_TT)
544 WSBMLISTADDTAIL(&vBuf->lru, &p->agpLRU);
552 struct _WsbmUserBuffer *vBuf = userBuf(buf);
553 struct _WsbmUserPool *p = userPool(vBuf);
557 if (!vBuf->unFenced)
560 vBuf->unFenced = 0;
561 WSBM_COND_BROADCAST(&vBuf->event);
563 if (vBuf->kBuf.placement & WSBM_PL_FLAG_VRAM)
564 WSBMLISTADDTAIL(&vBuf->lru, &p->vramLRU);
565 else if (vBuf->kBuf.placement & WSBM_PL_FLAG_TT)
566 WSBMLISTADDTAIL(&vBuf->lru, &p->agpLRU);
577 struct _WsbmUserBuffer *vBuf = userBuf(buf);
579 return &vBuf->kBuf;