Lines Matching refs:qbuf

37    struct gfx10_sh_query_buffer *qbuf =
39 qbuf->head += sizeof(struct gfx10_sh_query_buffer_mem);
47 struct gfx10_sh_query_buffer *qbuf = first;
49 first = list_entry(qbuf->list.next, struct gfx10_sh_query_buffer, list);
53 qbuf->refcount--;
54 if (qbuf->refcount)
57 if (qbuf->list.next == &sctx->shader_query_buffers)
59 if (qbuf->list.prev == &sctx->shader_query_buffers)
62 list_del(&qbuf->list);
63 si_resource_reference(&qbuf->buf, NULL);
64 FREE(qbuf);
73 struct gfx10_sh_query_buffer *qbuf = NULL;
76 qbuf = list_last_entry(&sctx->shader_query_buffers, struct gfx10_sh_query_buffer, list);
77 if (qbuf->head + sizeof(struct gfx10_sh_query_buffer_mem) <= qbuf->buf->b.b.width0)
80 qbuf = list_first_entry(&sctx->shader_query_buffers, struct gfx10_sh_query_buffer, list);
81 if (!qbuf->refcount &&
82 !si_cs_is_buffer_referenced(sctx, qbuf->buf->buf, RADEON_USAGE_READWRITE) &&
83 sctx->ws->buffer_wait(sctx->ws, qbuf->buf->buf, 0, RADEON_USAGE_READWRITE)) {
85 list_del(&qbuf->list);
87 qbuf = NULL;
91 if (!qbuf) {
92 qbuf = CALLOC_STRUCT(gfx10_sh_query_buffer);
93 if (unlikely(!qbuf))
99 qbuf->buf = si_resource(pipe_buffer_create(&screen->b, 0, PIPE_USAGE_STAGING, buf_size));
100 if (unlikely(!qbuf->buf)) {
101 FREE(qbuf);
111 uint64_t *results = sctx->ws->buffer_map(sctx->ws, qbuf->buf->buf, NULL,
115 for (unsigned i = 0, e = qbuf->buf->b.b.width0 / sizeof(struct gfx10_sh_query_buffer_mem); i < e;
122 list_addtail(&qbuf->list, &sctx->shader_query_buffers);
123 qbuf->head = 0;
124 qbuf->refcount = sctx->num_active_shader_queries;
128 sbuf.buffer = &qbuf->buf->b.b;
129 sbuf.buffer_offset = qbuf->head;
244 for (struct gfx10_sh_query_buffer *qbuf = query->last;;
245 qbuf = list_entry(qbuf->list.prev, struct gfx10_sh_query_buffer, list)) {
250 map = sctx->ws->buffer_map(sctx->ws, qbuf->buf->buf, NULL, usage);
252 map = si_buffer_map(sctx, qbuf->buf, usage);
258 unsigned results_end = qbuf->head;
259 if (qbuf == query->first)
261 if (qbuf == query->last)
271 if (qbuf == query->first)
366 struct gfx10_sh_query_buffer *qbuf = query->first;
368 unsigned begin = qbuf == query->first ? query->first_begin : 0;
369 unsigned end = qbuf == query->last ? query->last_end : qbuf->buf->b.b.width0;
373 ssbo[0].buffer = &qbuf->buf->b.b;
379 if (qbuf != query->first)
381 if (qbuf != query->last)
384 if (qbuf == query->last) {
399 va = qbuf->buf->gpu_address;
412 if (qbuf == query->last)
414 qbuf = list_entry(qbuf->list.next, struct gfx10_sh_query_buffer, list);
455 struct gfx10_sh_query_buffer *qbuf =
457 list_del(&qbuf->list);
459 assert(!qbuf->refcount);
460 si_resource_reference(&qbuf->buf, NULL);
461 FREE(qbuf);