nvc0: move HW queries to nvc0_query_hw.c/h files
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
@@ -152,6 +152,8 @@ NVC0_C_SOURCES := \
|
||||
nvc0/nvc0_program.h \
|
||||
nvc0/nvc0_query.c \
|
||||
nvc0/nvc0_query.h \
|
||||
nvc0/nvc0_query_hw.c \
|
||||
nvc0/nvc0_query_hw.h \
|
||||
nvc0/nvc0_query_sw.c \
|
||||
nvc0/nvc0_query_sw.h \
|
||||
nvc0/nvc0_resource.c \
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,9 +4,6 @@
|
||||
#include "pipe/p_context.h"
|
||||
|
||||
#include "nouveau_context.h"
|
||||
#include "nouveau_mm.h"
|
||||
|
||||
#define NVC0_QUERY_TFB_BUFFER_OFFSET (PIPE_QUERY_TYPES + 0)
|
||||
|
||||
struct nvc0_context;
|
||||
struct nvc0_query;
|
||||
@@ -21,20 +18,8 @@ struct nvc0_query_funcs {
|
||||
|
||||
struct nvc0_query {
|
||||
const struct nvc0_query_funcs *funcs;
|
||||
uint32_t *data;
|
||||
uint16_t type;
|
||||
uint16_t index;
|
||||
int8_t ctr[4];
|
||||
uint32_t sequence;
|
||||
struct nouveau_bo *bo;
|
||||
uint32_t base;
|
||||
uint32_t offset; /* base + i * rotate */
|
||||
uint8_t state;
|
||||
boolean is64bit;
|
||||
uint8_t rotate;
|
||||
int nesting; /* only used for occlusion queries */
|
||||
struct nouveau_mm_allocation *mm;
|
||||
struct nouveau_fence *fence;
|
||||
};
|
||||
|
||||
static inline struct nvc0_query *
|
||||
@@ -49,106 +34,6 @@ nvc0_query(struct pipe_query *pipe)
|
||||
#define NVC0_QUERY_MP_COUNTER_GROUP 0
|
||||
#define NVC0_SW_QUERY_DRV_STAT_GROUP 1
|
||||
|
||||
/*
|
||||
* Performance counter queries:
|
||||
*/
|
||||
#define NVE4_HW_SM_QUERY(i) (PIPE_QUERY_DRIVER_SPECIFIC + (i))
|
||||
#define NVE4_HW_SM_QUERY_LAST NVE4_HW_SM_QUERY(NVE4_HW_SM_QUERY_COUNT - 1)
|
||||
enum nve4_pm_queries
|
||||
{
|
||||
NVE4_HW_SM_QUERY_ACTIVE_CYCLES = 0,
|
||||
NVE4_HW_SM_QUERY_ACTIVE_WARPS,
|
||||
NVE4_HW_SM_QUERY_ATOM_COUNT,
|
||||
NVE4_HW_SM_QUERY_BRANCH,
|
||||
NVE4_HW_SM_QUERY_DIVERGENT_BRANCH,
|
||||
NVE4_HW_SM_QUERY_GLD_REQUEST,
|
||||
NVE4_HW_SM_QUERY_GLD_MEM_DIV_REPLAY,
|
||||
NVE4_HW_SM_QUERY_GST_TRANSACTIONS,
|
||||
NVE4_HW_SM_QUERY_GST_MEM_DIV_REPLAY,
|
||||
NVE4_HW_SM_QUERY_GRED_COUNT,
|
||||
NVE4_HW_SM_QUERY_GST_REQUEST,
|
||||
NVE4_HW_SM_QUERY_INST_EXECUTED,
|
||||
NVE4_HW_SM_QUERY_INST_ISSUED,
|
||||
NVE4_HW_SM_QUERY_INST_ISSUED1,
|
||||
NVE4_HW_SM_QUERY_INST_ISSUED2,
|
||||
NVE4_HW_SM_QUERY_L1_GLD_HIT,
|
||||
NVE4_HW_SM_QUERY_L1_GLD_MISS,
|
||||
NVE4_HW_SM_QUERY_L1_LOCAL_LD_HIT,
|
||||
NVE4_HW_SM_QUERY_L1_LOCAL_LD_MISS,
|
||||
NVE4_HW_SM_QUERY_L1_LOCAL_ST_HIT,
|
||||
NVE4_HW_SM_QUERY_L1_LOCAL_ST_MISS,
|
||||
NVE4_HW_SM_QUERY_L1_SHARED_LD_TRANSACTIONS,
|
||||
NVE4_HW_SM_QUERY_L1_SHARED_ST_TRANSACTIONS,
|
||||
NVE4_HW_SM_QUERY_LOCAL_LD,
|
||||
NVE4_HW_SM_QUERY_LOCAL_LD_TRANSACTIONS,
|
||||
NVE4_HW_SM_QUERY_LOCAL_ST,
|
||||
NVE4_HW_SM_QUERY_LOCAL_ST_TRANSACTIONS,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_0,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_1,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_2,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_3,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_4,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_5,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_6,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_7,
|
||||
NVE4_HW_SM_QUERY_SHARED_LD,
|
||||
NVE4_HW_SM_QUERY_SHARED_LD_REPLAY,
|
||||
NVE4_HW_SM_QUERY_SHARED_ST,
|
||||
NVE4_HW_SM_QUERY_SHARED_ST_REPLAY,
|
||||
NVE4_HW_SM_QUERY_SM_CTA_LAUNCHED,
|
||||
NVE4_HW_SM_QUERY_THREADS_LAUNCHED,
|
||||
NVE4_HW_SM_QUERY_UNCACHED_GLD_TRANSACTIONS,
|
||||
NVE4_HW_SM_QUERY_WARPS_LAUNCHED,
|
||||
NVE4_HW_SM_QUERY_METRIC_IPC,
|
||||
NVE4_HW_SM_QUERY_METRIC_IPAC,
|
||||
NVE4_HW_SM_QUERY_METRIC_IPEC,
|
||||
NVE4_HW_SM_QUERY_METRIC_MP_OCCUPANCY,
|
||||
NVE4_HW_SM_QUERY_METRIC_MP_EFFICIENCY,
|
||||
NVE4_HW_SM_QUERY_METRIC_INST_REPLAY_OHEAD,
|
||||
NVE4_HW_SM_QUERY_COUNT
|
||||
};
|
||||
|
||||
#define NVC0_HW_SM_QUERY(i) (PIPE_QUERY_DRIVER_SPECIFIC + 2048 + (i))
|
||||
#define NVC0_HW_SM_QUERY_LAST NVC0_HW_SM_QUERY(NVC0_HW_SM_QUERY_COUNT - 1)
|
||||
enum nvc0_pm_queries
|
||||
{
|
||||
NVC0_HW_SM_QUERY_ACTIVE_CYCLES = 0,
|
||||
NVC0_HW_SM_QUERY_ACTIVE_WARPS,
|
||||
NVC0_HW_SM_QUERY_ATOM_COUNT,
|
||||
NVC0_HW_SM_QUERY_BRANCH,
|
||||
NVC0_HW_SM_QUERY_DIVERGENT_BRANCH,
|
||||
NVC0_HW_SM_QUERY_GLD_REQUEST,
|
||||
NVC0_HW_SM_QUERY_GRED_COUNT,
|
||||
NVC0_HW_SM_QUERY_GST_REQUEST,
|
||||
NVC0_HW_SM_QUERY_INST_EXECUTED,
|
||||
NVC0_HW_SM_QUERY_INST_ISSUED1_0,
|
||||
NVC0_HW_SM_QUERY_INST_ISSUED1_1,
|
||||
NVC0_HW_SM_QUERY_INST_ISSUED2_0,
|
||||
NVC0_HW_SM_QUERY_INST_ISSUED2_1,
|
||||
NVC0_HW_SM_QUERY_LOCAL_LD,
|
||||
NVC0_HW_SM_QUERY_LOCAL_ST,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_0,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_1,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_2,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_3,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_4,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_5,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_6,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_7,
|
||||
NVC0_HW_SM_QUERY_SHARED_LD,
|
||||
NVC0_HW_SM_QUERY_SHARED_ST,
|
||||
NVC0_HW_SM_QUERY_THREADS_LAUNCHED,
|
||||
NVC0_HW_SM_QUERY_TH_INST_EXECUTED_0,
|
||||
NVC0_HW_SM_QUERY_TH_INST_EXECUTED_1,
|
||||
NVC0_HW_SM_QUERY_TH_INST_EXECUTED_2,
|
||||
NVC0_HW_SM_QUERY_TH_INST_EXECUTED_3,
|
||||
NVC0_HW_SM_QUERY_WARPS_LAUNCHED,
|
||||
NVC0_HW_SM_QUERY_COUNT
|
||||
};
|
||||
|
||||
void nvc0_init_query_functions(struct nvc0_context *);
|
||||
void nvc0_query_pushbuf_submit(struct nouveau_pushbuf *, struct nvc0_query *,
|
||||
unsigned);
|
||||
void nvc0_query_fifo_wait(struct nouveau_pushbuf *, struct nvc0_query *);
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,138 @@
|
||||
#ifndef __NVC0_QUERY_HW_H__
|
||||
#define __NVC0_QUERY_HW_H__
|
||||
|
||||
#include "nouveau_fence.h"
|
||||
#include "nouveau_mm.h"
|
||||
|
||||
#include "nvc0_query.h"
|
||||
|
||||
#define NVC0_HW_QUERY_TFB_BUFFER_OFFSET (PIPE_QUERY_TYPES + 0)
|
||||
|
||||
struct nvc0_hw_query {
|
||||
struct nvc0_query base;
|
||||
uint32_t *data;
|
||||
int8_t ctr[4];
|
||||
uint32_t sequence;
|
||||
struct nouveau_bo *bo;
|
||||
uint32_t base_offset;
|
||||
uint32_t offset; /* base_offset + i * rotate */
|
||||
uint8_t state;
|
||||
boolean is64bit;
|
||||
uint8_t rotate;
|
||||
int nesting; /* only used for occlusion queries */
|
||||
struct nouveau_mm_allocation *mm;
|
||||
struct nouveau_fence *fence;
|
||||
};
|
||||
|
||||
static inline struct nvc0_hw_query *
|
||||
nvc0_hw_query(struct nvc0_query *q)
|
||||
{
|
||||
return (struct nvc0_hw_query *)q;
|
||||
}
|
||||
|
||||
/*
|
||||
* Performance counter queries:
|
||||
*/
|
||||
#define NVE4_HW_SM_QUERY(i) (PIPE_QUERY_DRIVER_SPECIFIC + (i))
|
||||
#define NVE4_HW_SM_QUERY_LAST NVE4_HW_SM_QUERY(NVE4_HW_SM_QUERY_COUNT - 1)
|
||||
enum nve4_pm_queries
|
||||
{
|
||||
NVE4_HW_SM_QUERY_ACTIVE_CYCLES = 0,
|
||||
NVE4_HW_SM_QUERY_ACTIVE_WARPS,
|
||||
NVE4_HW_SM_QUERY_ATOM_COUNT,
|
||||
NVE4_HW_SM_QUERY_BRANCH,
|
||||
NVE4_HW_SM_QUERY_DIVERGENT_BRANCH,
|
||||
NVE4_HW_SM_QUERY_GLD_REQUEST,
|
||||
NVE4_HW_SM_QUERY_GLD_MEM_DIV_REPLAY,
|
||||
NVE4_HW_SM_QUERY_GST_TRANSACTIONS,
|
||||
NVE4_HW_SM_QUERY_GST_MEM_DIV_REPLAY,
|
||||
NVE4_HW_SM_QUERY_GRED_COUNT,
|
||||
NVE4_HW_SM_QUERY_GST_REQUEST,
|
||||
NVE4_HW_SM_QUERY_INST_EXECUTED,
|
||||
NVE4_HW_SM_QUERY_INST_ISSUED,
|
||||
NVE4_HW_SM_QUERY_INST_ISSUED1,
|
||||
NVE4_HW_SM_QUERY_INST_ISSUED2,
|
||||
NVE4_HW_SM_QUERY_L1_GLD_HIT,
|
||||
NVE4_HW_SM_QUERY_L1_GLD_MISS,
|
||||
NVE4_HW_SM_QUERY_L1_LOCAL_LD_HIT,
|
||||
NVE4_HW_SM_QUERY_L1_LOCAL_LD_MISS,
|
||||
NVE4_HW_SM_QUERY_L1_LOCAL_ST_HIT,
|
||||
NVE4_HW_SM_QUERY_L1_LOCAL_ST_MISS,
|
||||
NVE4_HW_SM_QUERY_L1_SHARED_LD_TRANSACTIONS,
|
||||
NVE4_HW_SM_QUERY_L1_SHARED_ST_TRANSACTIONS,
|
||||
NVE4_HW_SM_QUERY_LOCAL_LD,
|
||||
NVE4_HW_SM_QUERY_LOCAL_LD_TRANSACTIONS,
|
||||
NVE4_HW_SM_QUERY_LOCAL_ST,
|
||||
NVE4_HW_SM_QUERY_LOCAL_ST_TRANSACTIONS,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_0,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_1,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_2,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_3,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_4,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_5,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_6,
|
||||
NVE4_HW_SM_QUERY_PROF_TRIGGER_7,
|
||||
NVE4_HW_SM_QUERY_SHARED_LD,
|
||||
NVE4_HW_SM_QUERY_SHARED_LD_REPLAY,
|
||||
NVE4_HW_SM_QUERY_SHARED_ST,
|
||||
NVE4_HW_SM_QUERY_SHARED_ST_REPLAY,
|
||||
NVE4_HW_SM_QUERY_SM_CTA_LAUNCHED,
|
||||
NVE4_HW_SM_QUERY_THREADS_LAUNCHED,
|
||||
NVE4_HW_SM_QUERY_UNCACHED_GLD_TRANSACTIONS,
|
||||
NVE4_HW_SM_QUERY_WARPS_LAUNCHED,
|
||||
NVE4_HW_SM_QUERY_METRIC_IPC,
|
||||
NVE4_HW_SM_QUERY_METRIC_IPAC,
|
||||
NVE4_HW_SM_QUERY_METRIC_IPEC,
|
||||
NVE4_HW_SM_QUERY_METRIC_MP_OCCUPANCY,
|
||||
NVE4_HW_SM_QUERY_METRIC_MP_EFFICIENCY,
|
||||
NVE4_HW_SM_QUERY_METRIC_INST_REPLAY_OHEAD,
|
||||
NVE4_HW_SM_QUERY_COUNT
|
||||
};
|
||||
|
||||
#define NVC0_HW_SM_QUERY(i) (PIPE_QUERY_DRIVER_SPECIFIC + 2048 + (i))
|
||||
#define NVC0_HW_SM_QUERY_LAST NVC0_HW_SM_QUERY(NVC0_HW_SM_QUERY_COUNT - 1)
|
||||
enum nvc0_pm_queries
|
||||
{
|
||||
NVC0_HW_SM_QUERY_ACTIVE_CYCLES = 0,
|
||||
NVC0_HW_SM_QUERY_ACTIVE_WARPS,
|
||||
NVC0_HW_SM_QUERY_ATOM_COUNT,
|
||||
NVC0_HW_SM_QUERY_BRANCH,
|
||||
NVC0_HW_SM_QUERY_DIVERGENT_BRANCH,
|
||||
NVC0_HW_SM_QUERY_GLD_REQUEST,
|
||||
NVC0_HW_SM_QUERY_GRED_COUNT,
|
||||
NVC0_HW_SM_QUERY_GST_REQUEST,
|
||||
NVC0_HW_SM_QUERY_INST_EXECUTED,
|
||||
NVC0_HW_SM_QUERY_INST_ISSUED1_0,
|
||||
NVC0_HW_SM_QUERY_INST_ISSUED1_1,
|
||||
NVC0_HW_SM_QUERY_INST_ISSUED2_0,
|
||||
NVC0_HW_SM_QUERY_INST_ISSUED2_1,
|
||||
NVC0_HW_SM_QUERY_LOCAL_LD,
|
||||
NVC0_HW_SM_QUERY_LOCAL_ST,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_0,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_1,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_2,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_3,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_4,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_5,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_6,
|
||||
NVC0_HW_SM_QUERY_PROF_TRIGGER_7,
|
||||
NVC0_HW_SM_QUERY_SHARED_LD,
|
||||
NVC0_HW_SM_QUERY_SHARED_ST,
|
||||
NVC0_HW_SM_QUERY_THREADS_LAUNCHED,
|
||||
NVC0_HW_SM_QUERY_TH_INST_EXECUTED_0,
|
||||
NVC0_HW_SM_QUERY_TH_INST_EXECUTED_1,
|
||||
NVC0_HW_SM_QUERY_TH_INST_EXECUTED_2,
|
||||
NVC0_HW_SM_QUERY_TH_INST_EXECUTED_3,
|
||||
NVC0_HW_SM_QUERY_WARPS_LAUNCHED,
|
||||
NVC0_HW_SM_QUERY_COUNT
|
||||
};
|
||||
|
||||
struct nvc0_query *
|
||||
nvc0_hw_create_query(struct nvc0_context *, unsigned, unsigned);
|
||||
void
|
||||
nvc0_hw_query_pushbuf_submit(struct nouveau_pushbuf *, struct nvc0_query *,
|
||||
unsigned);
|
||||
void
|
||||
nvc0_hw_query_fifo_wait(struct nouveau_pushbuf *, struct nvc0_query *);
|
||||
|
||||
#endif
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "util/u_inlines.h"
|
||||
|
||||
#include "nvc0/nvc0_context.h"
|
||||
#include "nvc0/nvc0_query_hw.h"
|
||||
|
||||
static inline void
|
||||
nvc0_program_update_context_state(struct nvc0_context *nvc0,
|
||||
@@ -272,14 +273,14 @@ nvc0_tfb_validate(struct nvc0_context *nvc0)
|
||||
continue;
|
||||
|
||||
if (!targ->clean)
|
||||
nvc0_query_fifo_wait(push, nvc0_query(targ->pq));
|
||||
nvc0_hw_query_fifo_wait(push, nvc0_query(targ->pq));
|
||||
BEGIN_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 5);
|
||||
PUSH_DATA (push, 1);
|
||||
PUSH_DATAh(push, buf->address + targ->pipe.buffer_offset);
|
||||
PUSH_DATA (push, buf->address + targ->pipe.buffer_offset);
|
||||
PUSH_DATA (push, targ->pipe.buffer_size);
|
||||
if (!targ->clean) {
|
||||
nvc0_query_pushbuf_submit(push, nvc0_query(targ->pq), 0x4);
|
||||
nvc0_hw_query_pushbuf_submit(push, nvc0_query(targ->pq), 0x4);
|
||||
} else {
|
||||
PUSH_DATA(push, 0); /* TFB_BUFFER_OFFSET */
|
||||
targ->clean = false;
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
#include "nvc0/nvc0_stateobj.h"
|
||||
#include "nvc0/nvc0_context.h"
|
||||
#include "nvc0/nvc0_query_hw.h"
|
||||
|
||||
#include "nvc0/nvc0_3d.xml.h"
|
||||
#include "nv50/nv50_texture.xml.h"
|
||||
@@ -1070,7 +1071,7 @@ nvc0_so_target_create(struct pipe_context *pipe,
|
||||
if (!targ)
|
||||
return NULL;
|
||||
|
||||
targ->pq = pipe->create_query(pipe, NVC0_QUERY_TFB_BUFFER_OFFSET, 0);
|
||||
targ->pq = pipe->create_query(pipe, NVC0_HW_QUERY_TFB_BUFFER_OFFSET, 0);
|
||||
if (!targ->pq) {
|
||||
FREE(targ);
|
||||
return NULL;
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "translate/translate.h"
|
||||
|
||||
#include "nvc0/nvc0_context.h"
|
||||
#include "nvc0/nvc0_query_hw.h"
|
||||
#include "nvc0/nvc0_resource.h"
|
||||
|
||||
#include "nvc0/nvc0_3d.xml.h"
|
||||
@@ -775,7 +776,7 @@ nvc0_draw_stream_output(struct nvc0_context *nvc0,
|
||||
res->status &= ~NOUVEAU_BUFFER_STATUS_GPU_WRITING;
|
||||
PUSH_SPACE(push, 2);
|
||||
IMMED_NVC0(push, NVC0_3D(SERIALIZE), 0);
|
||||
nvc0_query_fifo_wait(push, nvc0_query(so->pq));
|
||||
nvc0_hw_query_fifo_wait(push, nvc0_query(so->pq));
|
||||
if (nvc0->screen->eng3d->oclass < GM107_3D_CLASS)
|
||||
IMMED_NVC0(push, NVC0_3D(VERTEX_ARRAY_FLUSH), 0);
|
||||
|
||||
@@ -791,7 +792,7 @@ nvc0_draw_stream_output(struct nvc0_context *nvc0,
|
||||
BEGIN_NVC0(push, NVC0_3D(DRAW_TFB_STRIDE), 1);
|
||||
PUSH_DATA (push, so->stride);
|
||||
BEGIN_NVC0(push, NVC0_3D(DRAW_TFB_BYTES), 1);
|
||||
nvc0_query_pushbuf_submit(push, nvc0_query(so->pq), 0x4);
|
||||
nvc0_hw_query_pushbuf_submit(push, nvc0_query(so->pq), 0x4);
|
||||
IMMED_NVC0(push, NVC0_3D(VERTEX_END_GL), 0);
|
||||
|
||||
mode |= NVC0_3D_VERTEX_BEGIN_GL_INSTANCE_NEXT;
|
||||
|
||||
Reference in New Issue
Block a user