Lines Matching refs:query
140 struct gfx10_sh_query *query = (struct gfx10_sh_query *)rquery;
141 gfx10_release_query_buffers(sctx, query->first, query->last);
142 FREE(query);
147 struct gfx10_sh_query *query = (struct gfx10_sh_query *)rquery;
149 gfx10_release_query_buffers(sctx, query->first, query->last);
150 query->first = query->last = NULL;
155 query->first = list_last_entry(&sctx->shader_query_buffers, struct gfx10_sh_query_buffer, list);
156 query->first_begin = query->first->head;
159 query->first->refcount++;
166 struct gfx10_sh_query *query = (struct gfx10_sh_query *)rquery;
168 if (unlikely(!query->first))
171 query->last = list_last_entry(&sctx->shader_query_buffers, struct gfx10_sh_query_buffer, list);
172 query->last_end = query->last->head;
175 if (query->last_end != 0) {
176 uint64_t fence_va = query->last->buf->gpu_address;
177 fence_va += query->last_end - sizeof(struct gfx10_sh_query_buffer_mem);
180 EOP_INT_SEL_NONE, EOP_DATA_SEL_VALUE_32BIT, query->last->buf, fence_va,
199 static void gfx10_sh_query_add_result(struct gfx10_sh_query *query,
205 switch (query->b.type) {
207 result->u64 += qmem->stream[query->stream].emitted_primitives & mask;
210 result->u64 += qmem->stream[query->stream].generated_primitives & mask;
214 qmem->stream[query->stream].emitted_primitives & mask;
216 qmem->stream[query->stream].generated_primitives & mask;
219 result->b |= qmem->stream[query->stream].emitted_primitives !=
220 qmem->stream[query->stream].generated_primitives;
236 struct gfx10_sh_query *query = (struct gfx10_sh_query *)rquery;
238 util_query_clear_result(result, query->b.type);
240 if (unlikely(!query->first))
242 assert(query->last);
244 for (struct gfx10_sh_query_buffer *qbuf = query->last;;
259 if (qbuf == query->first)
260 results_begin = query->first_begin;
261 if (qbuf == query->last)
262 results_end = query->last_end;
268 gfx10_sh_query_add_result(query, qmem, result);
271 if (qbuf == query->first)
284 struct gfx10_sh_query *query = (struct gfx10_sh_query *)rquery;
295 if (query->first != query->last) {
313 switch (query->b.type) {
315 consts.offset = 4 * sizeof(uint64_t) * query->stream + 2 * sizeof(uint64_t);
319 consts.offset = 4 * sizeof(uint64_t) * query->stream + 3 * sizeof(uint64_t);
323 consts.offset = sizeof(uint32_t) * (4 * index + query->stream);
327 consts.offset = 4 * sizeof(uint64_t) * query->stream;
335 unreachable("bad query type");
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;
379 if (qbuf != query->first)
381 if (qbuf != query->last)
384 if (qbuf == query->last) {
412 if (qbuf == query->last)
432 struct gfx10_sh_query *query = CALLOC_STRUCT(gfx10_sh_query);
433 if (unlikely(!query))
436 query->b.ops = &gfx10_sh_query_ops;
437 query->b.type = query_type;
438 query->stream = index;
440 return (struct pipe_query *)query;