dfb2fe3c749cd7060f59f61e024d8db34a253c7e
[mesa.git] / src / gallium / drivers / nouveau / nvc0 / nvc0_query.h
1 #ifndef __NVC0_QUERY_H__
2 #define __NVC0_QUERY_H__
3
4 #include "pipe/p_context.h"
5
6 #include "nouveau_context.h"
7 #include "nouveau_mm.h"
8
9 #define NVC0_QUERY_TFB_BUFFER_OFFSET (PIPE_QUERY_TYPES + 0)
10
11 struct nvc0_context;
12 struct nvc0_query;
13
14 struct nvc0_query_funcs {
15 void (*destroy_query)(struct nvc0_context *, struct nvc0_query *);
16 boolean (*begin_query)(struct nvc0_context *, struct nvc0_query *);
17 void (*end_query)(struct nvc0_context *, struct nvc0_query *);
18 boolean (*get_query_result)(struct nvc0_context *, struct nvc0_query *,
19 boolean, union pipe_query_result *);
20 };
21
22 struct nvc0_query {
23 const struct nvc0_query_funcs *funcs;
24 uint32_t *data;
25 uint16_t type;
26 uint16_t index;
27 int8_t ctr[4];
28 uint32_t sequence;
29 struct nouveau_bo *bo;
30 uint32_t base;
31 uint32_t offset; /* base + i * rotate */
32 uint8_t state;
33 boolean is64bit;
34 uint8_t rotate;
35 int nesting; /* only used for occlusion queries */
36 struct nouveau_mm_allocation *mm;
37 struct nouveau_fence *fence;
38 };
39
40 static inline struct nvc0_query *
41 nvc0_query(struct pipe_query *pipe)
42 {
43 return (struct nvc0_query *)pipe;
44 }
45
46 /*
47 * Driver queries groups:
48 */
49 #define NVC0_QUERY_MP_COUNTER_GROUP 0
50 #define NVC0_SW_QUERY_DRV_STAT_GROUP 1
51
52 /*
53 * Performance counter queries:
54 */
55 #define NVE4_HW_SM_QUERY(i) (PIPE_QUERY_DRIVER_SPECIFIC + (i))
56 #define NVE4_HW_SM_QUERY_LAST NVE4_HW_SM_QUERY(NVE4_HW_SM_QUERY_COUNT - 1)
57 enum nve4_pm_queries
58 {
59 NVE4_HW_SM_QUERY_ACTIVE_CYCLES = 0,
60 NVE4_HW_SM_QUERY_ACTIVE_WARPS,
61 NVE4_HW_SM_QUERY_ATOM_COUNT,
62 NVE4_HW_SM_QUERY_BRANCH,
63 NVE4_HW_SM_QUERY_DIVERGENT_BRANCH,
64 NVE4_HW_SM_QUERY_GLD_REQUEST,
65 NVE4_HW_SM_QUERY_GLD_MEM_DIV_REPLAY,
66 NVE4_HW_SM_QUERY_GST_TRANSACTIONS,
67 NVE4_HW_SM_QUERY_GST_MEM_DIV_REPLAY,
68 NVE4_HW_SM_QUERY_GRED_COUNT,
69 NVE4_HW_SM_QUERY_GST_REQUEST,
70 NVE4_HW_SM_QUERY_INST_EXECUTED,
71 NVE4_HW_SM_QUERY_INST_ISSUED,
72 NVE4_HW_SM_QUERY_INST_ISSUED1,
73 NVE4_HW_SM_QUERY_INST_ISSUED2,
74 NVE4_HW_SM_QUERY_L1_GLD_HIT,
75 NVE4_HW_SM_QUERY_L1_GLD_MISS,
76 NVE4_HW_SM_QUERY_L1_LOCAL_LD_HIT,
77 NVE4_HW_SM_QUERY_L1_LOCAL_LD_MISS,
78 NVE4_HW_SM_QUERY_L1_LOCAL_ST_HIT,
79 NVE4_HW_SM_QUERY_L1_LOCAL_ST_MISS,
80 NVE4_HW_SM_QUERY_L1_SHARED_LD_TRANSACTIONS,
81 NVE4_HW_SM_QUERY_L1_SHARED_ST_TRANSACTIONS,
82 NVE4_HW_SM_QUERY_LOCAL_LD,
83 NVE4_HW_SM_QUERY_LOCAL_LD_TRANSACTIONS,
84 NVE4_HW_SM_QUERY_LOCAL_ST,
85 NVE4_HW_SM_QUERY_LOCAL_ST_TRANSACTIONS,
86 NVE4_HW_SM_QUERY_PROF_TRIGGER_0,
87 NVE4_HW_SM_QUERY_PROF_TRIGGER_1,
88 NVE4_HW_SM_QUERY_PROF_TRIGGER_2,
89 NVE4_HW_SM_QUERY_PROF_TRIGGER_3,
90 NVE4_HW_SM_QUERY_PROF_TRIGGER_4,
91 NVE4_HW_SM_QUERY_PROF_TRIGGER_5,
92 NVE4_HW_SM_QUERY_PROF_TRIGGER_6,
93 NVE4_HW_SM_QUERY_PROF_TRIGGER_7,
94 NVE4_HW_SM_QUERY_SHARED_LD,
95 NVE4_HW_SM_QUERY_SHARED_LD_REPLAY,
96 NVE4_HW_SM_QUERY_SHARED_ST,
97 NVE4_HW_SM_QUERY_SHARED_ST_REPLAY,
98 NVE4_HW_SM_QUERY_SM_CTA_LAUNCHED,
99 NVE4_HW_SM_QUERY_THREADS_LAUNCHED,
100 NVE4_HW_SM_QUERY_UNCACHED_GLD_TRANSACTIONS,
101 NVE4_HW_SM_QUERY_WARPS_LAUNCHED,
102 NVE4_HW_SM_QUERY_METRIC_IPC,
103 NVE4_HW_SM_QUERY_METRIC_IPAC,
104 NVE4_HW_SM_QUERY_METRIC_IPEC,
105 NVE4_HW_SM_QUERY_METRIC_MP_OCCUPANCY,
106 NVE4_HW_SM_QUERY_METRIC_MP_EFFICIENCY,
107 NVE4_HW_SM_QUERY_METRIC_INST_REPLAY_OHEAD,
108 NVE4_HW_SM_QUERY_COUNT
109 };
110
111 #define NVC0_HW_SM_QUERY(i) (PIPE_QUERY_DRIVER_SPECIFIC + 2048 + (i))
112 #define NVC0_HW_SM_QUERY_LAST NVC0_HW_SM_QUERY(NVC0_HW_SM_QUERY_COUNT - 1)
113 enum nvc0_pm_queries
114 {
115 NVC0_HW_SM_QUERY_ACTIVE_CYCLES = 0,
116 NVC0_HW_SM_QUERY_ACTIVE_WARPS,
117 NVC0_HW_SM_QUERY_ATOM_COUNT,
118 NVC0_HW_SM_QUERY_BRANCH,
119 NVC0_HW_SM_QUERY_DIVERGENT_BRANCH,
120 NVC0_HW_SM_QUERY_GLD_REQUEST,
121 NVC0_HW_SM_QUERY_GRED_COUNT,
122 NVC0_HW_SM_QUERY_GST_REQUEST,
123 NVC0_HW_SM_QUERY_INST_EXECUTED,
124 NVC0_HW_SM_QUERY_INST_ISSUED1_0,
125 NVC0_HW_SM_QUERY_INST_ISSUED1_1,
126 NVC0_HW_SM_QUERY_INST_ISSUED2_0,
127 NVC0_HW_SM_QUERY_INST_ISSUED2_1,
128 NVC0_HW_SM_QUERY_LOCAL_LD,
129 NVC0_HW_SM_QUERY_LOCAL_ST,
130 NVC0_HW_SM_QUERY_PROF_TRIGGER_0,
131 NVC0_HW_SM_QUERY_PROF_TRIGGER_1,
132 NVC0_HW_SM_QUERY_PROF_TRIGGER_2,
133 NVC0_HW_SM_QUERY_PROF_TRIGGER_3,
134 NVC0_HW_SM_QUERY_PROF_TRIGGER_4,
135 NVC0_HW_SM_QUERY_PROF_TRIGGER_5,
136 NVC0_HW_SM_QUERY_PROF_TRIGGER_6,
137 NVC0_HW_SM_QUERY_PROF_TRIGGER_7,
138 NVC0_HW_SM_QUERY_SHARED_LD,
139 NVC0_HW_SM_QUERY_SHARED_ST,
140 NVC0_HW_SM_QUERY_THREADS_LAUNCHED,
141 NVC0_HW_SM_QUERY_TH_INST_EXECUTED_0,
142 NVC0_HW_SM_QUERY_TH_INST_EXECUTED_1,
143 NVC0_HW_SM_QUERY_TH_INST_EXECUTED_2,
144 NVC0_HW_SM_QUERY_TH_INST_EXECUTED_3,
145 NVC0_HW_SM_QUERY_WARPS_LAUNCHED,
146 NVC0_HW_SM_QUERY_COUNT
147 };
148
149 void nvc0_init_query_functions(struct nvc0_context *);
150 void nvc0_query_pushbuf_submit(struct nouveau_pushbuf *, struct nvc0_query *,
151 unsigned);
152 void nvc0_query_fifo_wait(struct nouveau_pushbuf *, struct nvc0_query *);
153
154 #endif