Home | History | Annotate | Download | only in i965

Lines Matching refs:query

30  * Support for query objects (GL_ARB_occlusion_query, GL_ARB_timer_query,
43 set_query_availability(struct brw_context *brw, struct brw_query_object *query,
47 * query availability for "pipelined" queries.
62 brw_is_query_pipelined(query)) {
65 query->bo, 2 * sizeof(uint64_t),
156 * Wait on the query object's BO and calculate the final result.
160 struct brw_query_object *query)
164 if (query->bo == NULL)
167 brw_bo_map(brw, query->bo, false, "query object");
168 uint64_t *results = query->bo->virtual;
169 switch (query->Base.Target) {
171 /* The query BO contains the starting and ending timestamps.
174 query->Base.Result += 80 * (results[1] - results[0]);
194 * The query BO contains a single timestamp value in results[0].
196 query->Base.Result = 80 * (results[0] & 0xffffffff);
197 query->Base.Result &= (1ull << 36) - 1;
202 * may have added additional samples to our occlusion query value.
204 query->Base.Result += results[1] - results[0];
210 query->Base.Result = true;
225 query->Base.Result = results[1] - results[0];
229 query->Base.Result = (results[1] - results[0]);
241 query->Base.Result /= 4;
245 unreachable("Unrecognized query target in brw_queryobj_get_results()");
247 drm_intel_bo_unmap(query->bo);
249 /* Now that we've processed the data stored in the query's buffer object,
252 drm_intel_bo_unreference(query->bo);
253 query->bo = NULL;
255 query->Base.Ready = true;
262 * recording data for the query.
268 struct brw_query_object *query = (struct brw_query_object *)q;
270 /* Since we're starting a new query, we need to throw away old results. */
271 drm_intel_bo_unreference(query->bo);
272 query->bo = drm_intel_bo_alloc(brw->bufmgr, "query results", 4096, 4096);
275 set_query_availability(brw, query, false);
277 switch (query->Base.Target) {
290 * may implement a query to determine time elapsed at different stages
298 brw_write_timestamp(brw, query->bo, 0);
304 brw_write_depth_count(brw, query->bo, 0);
308 write_primitives_generated(brw, query->bo, query->Base.Stream, 0);
309 if (query->Base.Stream == 0)
314 write_xfb_primitives_written(brw, query->bo, query->Base.Stream, 0);
328 emit_pipeline_stat(brw, query->bo, query->Base.Stream, query->Base.Target, 0);
332 unreachable("Unrecognized query target in brw_begin_query()");
339 * Emits GPU commands to record a final query value, ending any data capturing.
348 struct brw_query_object *query = (struct brw_query_object *)q;
350 switch (query->Base.Target) {
352 brw_write_timestamp(brw, query->bo, 1);
358 brw_write_depth_count(brw, query->bo, 1);
362 write_primitives_generated(brw, query->bo, query->Base.Stream, 1);
363 if (query->Base.Stream == 0)
368 write_xfb_primitives_written(brw, query->bo, query->Base.Stream, 1);
382 emit_pipeline_stat(brw, query->bo,
383 query->Base.Stream, query->Base.Target, 1);
387 unreachable("Unrecognized query target in brw_end_query()");
393 query->flushed = false;
396 set_query_availability(brw, query, true);
400 * Flush the batch if it still references the query object BO.
403 flush_batch_if_needed(struct brw_context *brw, struct brw_query_object *query)
408 query->flushed = query->flushed ||
409 !drm_intel_bo_references(brw->batch.bo, query->bo);
411 if (!query->flushed)
418 * Wait for a query result to become available and return it. This is the
424 struct brw_query_object *query = (struct brw_query_object *)q;
426 /* If the application has requested the query result, but this batch is
430 flush_batch_if_needed(brw, query);
432 gen6_queryobj_get_results(ctx, query);
438 * Checks whether a query result is ready yet. If not, flushes.
444 struct brw_query_object *query = (struct brw_query_object *)q;
446 /* If query->bo is NULL, we've already gathered the results - this is a
449 if (query->bo == NULL)
457 * the async query will return true in finite time.
459 flush_batch_if_needed(brw, query);
461 if (!drm_intel_bo_busy(query->bo)) {
462 gen6_queryobj_get_results(ctx, query);
470 struct brw_query_object *query = (struct brw_query_object *)q;
472 set_query_availability(brw, query, true);
475 /* Initialize Gen6+-specific query object functions. */