mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-19 14:30:39 +02:00
pipebuffer: Dump debugging info for fenced buffer list.
This commit is contained in:
parent
46728037a0
commit
7c12e1aa53
3 changed files with 100 additions and 9 deletions
|
|
@ -74,8 +74,12 @@ struct fenced_buffer_list
|
|||
struct pipe_winsys *winsys;
|
||||
|
||||
size_t numDelayed;
|
||||
|
||||
struct list_head delayed;
|
||||
|
||||
#ifdef DEBUG
|
||||
size_t numUnfenced;
|
||||
struct list_head unfenced;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -122,8 +126,11 @@ _fenced_buffer_add(struct fenced_buffer *fenced_buf)
|
|||
assert(fenced_buf->flags & PIPE_BUFFER_USAGE_GPU_READ_WRITE);
|
||||
assert(fenced_buf->fence);
|
||||
|
||||
assert(!fenced_buf->head.prev);
|
||||
assert(!fenced_buf->head.next);
|
||||
#ifdef DEBUG
|
||||
LIST_DEL(&fenced_buf->head);
|
||||
assert(fenced_list->numUnfenced);
|
||||
--fenced_list->numUnfenced;
|
||||
#endif
|
||||
LIST_ADDTAIL(&fenced_buf->head, &fenced_list->delayed);
|
||||
++fenced_list->numDelayed;
|
||||
}
|
||||
|
|
@ -135,8 +142,19 @@ _fenced_buffer_add(struct fenced_buffer *fenced_buf)
|
|||
static INLINE void
|
||||
_fenced_buffer_destroy(struct fenced_buffer *fenced_buf)
|
||||
{
|
||||
struct fenced_buffer_list *fenced_list = fenced_buf->list;
|
||||
|
||||
assert(!fenced_buf->base.base.refcount);
|
||||
assert(!fenced_buf->fence);
|
||||
#ifdef DEBUG
|
||||
assert(fenced_buf->head.prev);
|
||||
assert(fenced_buf->head.next);
|
||||
LIST_DEL(&fenced_buf->head);
|
||||
assert(fenced_list->numUnfenced);
|
||||
--fenced_list->numUnfenced;
|
||||
#else
|
||||
(void)fenced_list;
|
||||
#endif
|
||||
pb_reference(&fenced_buf->buffer, NULL);
|
||||
FREE(fenced_buf);
|
||||
}
|
||||
|
|
@ -156,15 +174,16 @@ _fenced_buffer_remove(struct fenced_buffer_list *fenced_list,
|
|||
|
||||
assert(fenced_buf->head.prev);
|
||||
assert(fenced_buf->head.next);
|
||||
LIST_DEL(&fenced_buf->head);
|
||||
#ifdef DEBUG
|
||||
fenced_buf->head.prev = NULL;
|
||||
fenced_buf->head.next = NULL;
|
||||
#endif
|
||||
|
||||
LIST_DEL(&fenced_buf->head);
|
||||
assert(fenced_list->numDelayed);
|
||||
--fenced_list->numDelayed;
|
||||
|
||||
#ifdef DEBUG
|
||||
LIST_ADDTAIL(&fenced_buf->head, &fenced_list->unfenced);
|
||||
++fenced_list->numUnfenced;
|
||||
#endif
|
||||
|
||||
if(!fenced_buf->base.base.refcount)
|
||||
_fenced_buffer_destroy(fenced_buf);
|
||||
}
|
||||
|
|
@ -358,6 +377,13 @@ fenced_buffer_create(struct fenced_buffer_list *fenced_list,
|
|||
buf->buffer = buffer;
|
||||
buf->list = fenced_list;
|
||||
|
||||
#ifdef DEBUG
|
||||
pipe_mutex_lock(fenced_list->mutex);
|
||||
LIST_ADDTAIL(&buf->head, &fenced_list->unfenced);
|
||||
++fenced_list->numUnfenced;
|
||||
pipe_mutex_unlock(fenced_list->mutex);
|
||||
#endif
|
||||
|
||||
return &buf->base;
|
||||
}
|
||||
|
||||
|
|
@ -420,9 +446,13 @@ fenced_buffer_list_create(struct pipe_winsys *winsys)
|
|||
fenced_list->winsys = winsys;
|
||||
|
||||
LIST_INITHEAD(&fenced_list->delayed);
|
||||
|
||||
fenced_list->numDelayed = 0;
|
||||
|
||||
#ifdef DEBUG
|
||||
LIST_INITHEAD(&fenced_list->unfenced);
|
||||
fenced_list->numUnfenced = 0;
|
||||
#endif
|
||||
|
||||
pipe_mutex_init(fenced_list->mutex);
|
||||
|
||||
return fenced_list;
|
||||
|
|
@ -439,6 +469,52 @@ fenced_buffer_list_check_free(struct fenced_buffer_list *fenced_list,
|
|||
}
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
void
|
||||
fenced_buffer_list_dump(struct fenced_buffer_list *fenced_list)
|
||||
{
|
||||
struct pipe_winsys *winsys = fenced_list->winsys;
|
||||
struct list_head *curr, *next;
|
||||
struct fenced_buffer *fenced_buf;
|
||||
struct pipe_fence_handle *prev_fence = NULL;
|
||||
|
||||
pipe_mutex_lock(fenced_list->mutex);
|
||||
|
||||
debug_printf("%10s %7s %10s %s\n",
|
||||
"buffer", "refcount", "fence", "signalled");
|
||||
|
||||
curr = fenced_list->unfenced.next;
|
||||
next = curr->next;
|
||||
while(curr != &fenced_list->unfenced) {
|
||||
fenced_buf = LIST_ENTRY(struct fenced_buffer, curr, head);
|
||||
assert(!fenced_buf->fence);
|
||||
debug_printf("%10p %7u\n",
|
||||
fenced_buf,
|
||||
fenced_buf->base.base.refcount);
|
||||
curr = next;
|
||||
next = curr->next;
|
||||
}
|
||||
|
||||
curr = fenced_list->delayed.next;
|
||||
next = curr->next;
|
||||
while(curr != &fenced_list->delayed) {
|
||||
int signaled;
|
||||
fenced_buf = LIST_ENTRY(struct fenced_buffer, curr, head);
|
||||
signaled = winsys->fence_signalled(winsys, fenced_buf->fence, 0);
|
||||
debug_printf("%10p %7u %10p %s\n",
|
||||
fenced_buf,
|
||||
fenced_buf->base.base.refcount,
|
||||
fenced_buf->fence,
|
||||
signaled == 0 ? "y" : "n");
|
||||
curr = next;
|
||||
next = curr->next;
|
||||
}
|
||||
|
||||
pipe_mutex_unlock(fenced_list->mutex);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void
|
||||
fenced_buffer_list_destroy(struct fenced_buffer_list *fenced_list)
|
||||
{
|
||||
|
|
@ -454,6 +530,10 @@ fenced_buffer_list_destroy(struct fenced_buffer_list *fenced_list)
|
|||
pipe_mutex_lock(fenced_list->mutex);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
//assert(!fenced_list->numUnfenced);
|
||||
#endif
|
||||
|
||||
pipe_mutex_unlock(fenced_list->mutex);
|
||||
|
||||
FREE(fenced_list);
|
||||
|
|
|
|||
|
|
@ -94,6 +94,13 @@ void
|
|||
fenced_buffer_list_check_free(struct fenced_buffer_list *fenced_list,
|
||||
int wait);
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
void
|
||||
fenced_buffer_list_dump(struct fenced_buffer_list *fenced_list);
|
||||
#endif
|
||||
|
||||
|
||||
void
|
||||
fenced_buffer_list_destroy(struct fenced_buffer_list *fenced_list);
|
||||
|
||||
|
|
|
|||
|
|
@ -79,6 +79,10 @@ fenced_bufmgr_create_buffer(struct pb_manager *mgr,
|
|||
|
||||
buf = fenced_mgr->provider->create_buffer(fenced_mgr->provider, size, desc);
|
||||
if(!buf) {
|
||||
#if 0
|
||||
fenced_buffer_list_dump(fenced_mgr->fenced_list);
|
||||
#endif
|
||||
|
||||
/* give up */
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue