Lines Matching defs:sBuf

198 slabPoolFromBuf(struct _WsbmSlabBuffer *sBuf)
200 return slabPoolFromPool(sBuf->storage.pool);
450 struct _WsbmSlabBuffer *sBuf;
479 sBuf = slab->buffers;
481 ret = wsbmBufStorageInit(&sBuf->storage, &header->slabPool->pool);
484 sBuf->parent = slab;
485 sBuf->start = i * header->bufSize;
486 sBuf->virtual = (void *)((uint8_t *) slab->kbo->virtual +
487 sBuf->start);
488 wsbmAtomicSet(&sBuf->writers, 0);
489 sBuf->isSlabBuffer = 1;
490 WSBM_COND_INIT(&sBuf->event);
491 WSBMLISTADDTAIL(&sBuf->head, &slab->freeBuffers);
493 sBuf++;
501 sBuf = slab->buffers;
503 if (sBuf->parent == slab) {
504 WSBM_COND_FREE(&sBuf->event);
505 wsbmBufStorageTakedown(&sBuf->storage);
507 sBuf++;
550 struct _WsbmSlabBuffer *sBuf;
556 sBuf = slab->buffers;
558 if (sBuf->parent == slab) {
559 WSBM_COND_FREE(&sBuf->event);
560 wsbmBufStorageTakedown(&sBuf->storage);
562 sBuf++;
575 struct _WsbmSlabBuffer *sBuf;
612 sBuf = WSBMLISTENTRY(list, struct _WsbmSlabBuffer, head);
614 slab = sBuf->parent;
618 ret = wsbmFenceFinish(sBuf->fence, sBuf->fenceType, 0);
625 wsbmFenceSignaled(sBuf->fence, sBuf->fenceType);
633 wsbmFenceUnreference(&sBuf->fence);
635 wsbmSlabFreeBufferLocked(sBuf);
638 } else if (wsbmFenceSignaledCached(sBuf->fence, sBuf->fenceType)) {
639 wsbmFenceUnreference(&sBuf->fence);
641 wsbmSlabFreeBufferLocked(sBuf);
698 struct _WsbmSlabBuffer *sBuf;
714 sBuf = wsbmSlabAllocBuffer(header);
715 return ((sBuf) ? &sBuf->storage : NULL);
723 sBuf = calloc(1, sizeof(*sBuf));
725 if (!sBuf)
737 ret = wsbmBufStorageInit(&sBuf->storage, pool);
741 ret = WSBM_COND_INIT(&sBuf->event);
759 sBuf->kBuf.gpuOffset = arg.rep.gpu_offset;
760 sBuf->kBuf.placement = arg.rep.placement;
761 sBuf->kBuf.handle = arg.rep.handle;
762 sBuf->mapHandle = arg.rep.map_handle;
763 sBuf->requestedSize = size;
765 sBuf->virtual = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED,
766 pool->fd, sBuf->mapHandle);
768 if (sBuf->virtual == MAP_FAILED)
772 wsbmAtomicSet(&sBuf->writers, 0);
773 return &sBuf->storage;
778 arg.handle = sBuf->kBuf.handle;
784 WSBM_COND_FREE(&sBuf->event);
786 wsbmBufStorageTakedown(&sBuf->storage);
788 free(sBuf);
796 struct _WsbmSlabBuffer *sBuf = slabBuffer(buf);
802 if (!sBuf->isSlabBuffer) {
803 struct _WsbmSlabPool *slabPool = slabPoolFromBuf(sBuf);
806 if (sBuf->virtual != NULL) {
807 (void)munmap(sBuf->virtual, sBuf->requestedSize);
808 sBuf->virtual = NULL;
811 arg.handle = sBuf->kBuf.handle;
816 WSBM_COND_FREE(&sBuf->event);
817 wsbmBufStorageTakedown(&sBuf->storage);
818 free(sBuf);
822 slab = sBuf->parent;
830 sBuf->unFenced = 0;
831 wsbmAtomicSet(&sBuf->writers, 0);
832 wsbmAtomicSet(&sBuf->storage.refCount, 1);
834 if (sBuf->fence && !wsbmFenceSignaledCached(sBuf->fence, sBuf->fenceType)) {
835 WSBMLISTADDTAIL(&sBuf->head, &header->delayedBuffers);
838 if (sBuf->fence)
839 wsbmFenceUnreference(&sBuf->fence);
840 wsbmSlabFreeBufferLocked(sBuf);
847 waitIdleLocked(struct _WsbmSlabBuffer *sBuf, int lazy)
849 struct _WsbmBufStorage *storage = &sBuf->storage;
851 while (sBuf->unFenced || sBuf->fence != NULL) {
853 if (sBuf->unFenced)
854 WSBM_COND_WAIT(&sBuf->event, &storage->mutex);
856 if (sBuf->fence != NULL) {
857 if (!wsbmFenceSignaled(sBuf->fence, sBuf->fenceType)) {
859 wsbmFenceReference(sBuf->fence);
862 (void)wsbmFenceFinish(fence, sBuf->fenceType, lazy);
864 if (sBuf->fence == fence)
865 wsbmFenceUnreference(&sBuf->fence);
869 wsbmFenceUnreference(&sBuf->fence);
878 struct _WsbmSlabBuffer *sBuf = slabBuffer(buf);
881 waitIdleLocked(sBuf, lazy);
890 struct _WsbmSlabBuffer *sBuf = slabBuffer(buf);
892 *virtual = sBuf->virtual;
900 struct _WsbmSlabBuffer *sBuf = slabBuffer(buf);
902 if (wsbmAtomicDecZero(&sBuf->writers))
903 WSBM_COND_BROADCAST(&sBuf->event);
909 struct _WsbmSlabBuffer *sBuf = slabBuffer(buf);
916 if (sBuf->unFenced) {
921 if (sBuf->isSlabBuffer)
922 signaled = (sBuf->fence == NULL) ||
923 wsbmFenceSignaledCached(sBuf->fence, sBuf->fenceType);
925 signaled = (sBuf->fence == NULL) ||
926 wsbmFenceSignaled(sBuf->fence, sBuf->fenceType);
930 wsbmFenceUnreference(&sBuf->fence);
931 wsbmAtomicInc(&sBuf->writers);
936 waitIdleLocked(sBuf, 0);
937 wsbmAtomicInc(&sBuf->writers);
952 struct _WsbmSlabBuffer *sBuf = slabBuffer(buf);
954 return sBuf->start;
960 struct _WsbmSlabBuffer *sBuf = slabBuffer(buf);
962 if (!sBuf->isSlabBuffer)
963 return sBuf->requestedSize;
965 return sBuf->parent->header->bufSize;
971 struct _WsbmSlabBuffer *sBuf = slabBuffer(buf);
973 return (sBuf->isSlabBuffer) ? &sBuf->parent->kbo->kBuf : &sBuf->kBuf;
985 struct _WsbmSlabBuffer *sBuf = slabBuffer(buf);
989 if (sBuf->fence)
990 wsbmFenceUnreference(&sBuf->fence);
993 sBuf->fenceType = kBuf->fence_type_mask;
994 if (!wsbmFenceSignaledCached(fence, sBuf->fenceType))
995 sBuf->fence = wsbmFenceReference(fence);
997 sBuf->unFenced = 0;
998 WSBM_COND_BROADCAST(&sBuf->event);
1006 struct _WsbmSlabBuffer *sBuf = slabBuffer(buf);
1009 while (wsbmAtomicRead(&sBuf->writers) != 0) {
1010 WSBM_COND_WAIT(&sBuf->event, &buf->mutex);
1013 sBuf->unFenced = 1;
1021 struct _WsbmSlabBuffer *sBuf = slabBuffer(buf);
1024 if (sBuf->unFenced) {
1025 sBuf->unFenced = 0;
1026 WSBM_COND_BROADCAST(&sBuf->event);
1101 struct _WsbmSlabBuffer *sBuf;
1105 sBuf = WSBMLISTENTRY(list, struct _WsbmSlabBuffer, head);
1107 if (sBuf->fence) {
1108 (void)wsbmFenceFinish(sBuf->fence, sBuf->fenceType, 0);
1109 wsbmFenceUnreference(&sBuf->fence);
1112 wsbmSlabFreeBufferLocked(sBuf);