2 * Copyright (c) 2017 Etnaviv Project
3 * Copyright (C) 2017 Zodiac Inflight Innovations
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sub license,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial portions
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
25 * Rob Clark <robclark@freedesktop.org>
26 * Christian Gmeiner <christian.gmeiner@gmail.com>
29 #ifndef H_ETNAVIV_QUERY_HW
30 #define H_ETNAVIV_QUERY_HW
32 #include "etnaviv_query.h"
34 struct etna_acc_query
;
36 struct etna_acc_sample_provider
{
37 bool (*supports
)(unsigned query_type
);
38 struct etna_acc_query
* (*allocate
)(struct etna_context
*ctx
, unsigned query_type
);
40 void (*resume
)(struct etna_acc_query
*aq
, struct etna_context
*ctx
);
41 void (*suspend
)(struct etna_acc_query
*aq
, struct etna_context
*ctx
);
43 bool (*result
)(struct etna_acc_query
*aq
, void *buf
,
44 union pipe_query_result
*result
);
47 struct etna_acc_query
{
48 struct etna_query base
;
50 struct pipe_resource
*prsc
;
51 unsigned samples
; /* number of samples stored in resource */
52 unsigned no_wait_cnt
; /* see etna_hw_get_query_result() */
53 struct list_head node
; /* list-node in ctx->active_hw_queries */
55 const struct etna_acc_sample_provider
*provider
;
58 static inline struct etna_acc_query
*
59 etna_acc_query(struct etna_query
*q
)
61 return (struct etna_acc_query
*)q
;
65 etna_acc_create_query(struct etna_context
*ctx
, unsigned query_type
);
68 etna_acc_query_suspend(struct etna_acc_query
*aq
, struct etna_context
*ctx
)
70 const struct etna_acc_sample_provider
*p
= aq
->provider
;
77 etna_acc_query_resume(struct etna_acc_query
*aq
, struct etna_context
*ctx
)
79 const struct etna_acc_sample_provider
*p
= aq
->provider
;