OSDN Git Service

nv50,nvc0: re-bind old compute state after reading MP perf counters
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 2 May 2016 20:25:59 +0000 (22:25 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 2 May 2016 20:30:48 +0000 (22:30 +0200)
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 <samuel.pitoiset@gmail.com>
src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c
src/gallium/drivers/nouveau/nvc0/nvc0_query_hw_sm.c

index 0a73090..bcfba9f 100644 (file)
@@ -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);
 
index db36b8a..d7659e2 100644 (file)
@@ -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);