From 819836d240898e8048ddcf9baf25d93235ab2410 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 2 May 2016 22:25:59 +0200 Subject: [PATCH] nv50,nvc0: re-bind old compute state after reading MP perf counters This might be useful to avoid breaking the current compute state when monitoring MP perf counters because we use a compute kernel to read out those counters. This has been initially suggested by Ilia Mirkin. Signed-off-by: Samuel Pitoiset --- src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c | 2 ++ src/gallium/drivers/nouveau/nvc0/nvc0_query_hw_sm.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c b/src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c index 0a73090..bcfba9f 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c @@ -218,6 +218,7 @@ nv50_hw_sm_end_query(struct nv50_context *nv50, struct nv50_hw_query *hq) struct pipe_context *pipe = &nv50->base.pipe; struct nouveau_pushbuf *push = nv50->base.pushbuf; struct nv50_hw_sm_query *hsq = nv50_hw_sm_query(hq); + struct nv50_program *old = nv50->compprog; struct pipe_grid_info info = {}; uint32_t mask; uint32_t input[3]; @@ -271,6 +272,7 @@ nv50_hw_sm_end_query(struct nv50_context *nv50, struct nv50_hw_query *hq) info.pc = 0; info.input = input; pipe->launch_grid(pipe, &info); + pipe->bind_compute_state(pipe, old); nouveau_bufctx_reset(nv50->bufctx_cp, NV50_BIND_CP_QUERY); diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw_sm.c b/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw_sm.c index db36b8a..d7659e2 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw_sm.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw_sm.c @@ -1581,6 +1581,7 @@ nvc0_hw_sm_end_query(struct nvc0_context *nvc0, struct nvc0_hw_query *hq) struct nouveau_pushbuf *push = nvc0->base.pushbuf; const bool is_nve4 = screen->base.class_3d >= NVE4_3D_CLASS; struct nvc0_hw_sm_query *hsq = nvc0_hw_sm_query(hq); + struct nvc0_program *old = nvc0->compprog; struct pipe_grid_info info = {}; uint32_t mask; uint32_t input[3]; @@ -1628,6 +1629,7 @@ nvc0_hw_sm_end_query(struct nvc0_context *nvc0, struct nvc0_hw_query *hq) info.pc = 0; info.input = input; pipe->launch_grid(pipe, &info); + pipe->bind_compute_state(pipe, old); nouveau_bufctx_reset(nvc0->bufctx_cp, NVC0_BIND_CP_QUERY); -- 2.7.4