Mesa (master): ilo: harware contexts are only for the render ring

Chia-I Wu olv at kemper.freedesktop.org
Tue May 21 04:17:32 UTC 2013


Module: Mesa
Branch: master
Commit: a04d8574c61f286fd9ec51f667648f73e332462f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a04d8574c61f286fd9ec51f667648f73e332462f

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Fri May 17 16:10:11 2013 +0800

ilo: harware contexts are only for the render ring

The hardware context should not be passed for bo execution when the ring is
not the render ring.  Rename hw_ctx to render_ctx for clarity.

---

 src/gallium/drivers/ilo/ilo_3d.c               |    2 +-
 src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c |    2 +-
 src/gallium/drivers/ilo/ilo_cp.c               |   12 ++++++++----
 src/gallium/drivers/ilo/ilo_cp.h               |    2 +-
 src/gallium/drivers/ilo/ilo_transfer.c         |    2 +-
 5 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/ilo/ilo_3d.c b/src/gallium/drivers/ilo/ilo_3d.c
index b802e7f..e03e530 100644
--- a/src/gallium/drivers/ilo/ilo_3d.c
+++ b/src/gallium/drivers/ilo/ilo_3d.c
@@ -250,7 +250,7 @@ ilo_3d_new_cp_batch(struct ilo_3d *hw3d)
    ilo_3d_pipeline_invalidate(hw3d->pipeline,
          ILO_3D_PIPELINE_INVALIDATE_BATCH_BO |
          ILO_3D_PIPELINE_INVALIDATE_STATE_BO);
-   if (!hw3d->cp->hw_ctx) {
+   if (!hw3d->cp->render_ctx) {
       ilo_3d_pipeline_invalidate(hw3d->pipeline,
             ILO_3D_PIPELINE_INVALIDATE_HW);
    }
diff --git a/src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c b/src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c
index 06559b7..2cf78e5 100644
--- a/src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c
+++ b/src/gallium/drivers/ilo/ilo_3d_pipeline_gen7.c
@@ -402,7 +402,7 @@ gen7_pipeline_sol(struct ilo_3d_pipeline *p,
          int base = 0;
 
          /* reset HW write offsets and offset buffer base */
-         if (!p->cp->hw_ctx) {
+         if (!p->cp->render_ctx) {
             ilo_cp_set_one_off_flags(p->cp, INTEL_EXEC_GEN7_SOL_RESET);
             base += p->state.so_num_vertices * stride;
          }
diff --git a/src/gallium/drivers/ilo/ilo_cp.c b/src/gallium/drivers/ilo/ilo_cp.c
index 41473c0..b67c872 100644
--- a/src/gallium/drivers/ilo/ilo_cp.c
+++ b/src/gallium/drivers/ilo/ilo_cp.c
@@ -176,17 +176,21 @@ static int
 ilo_cp_exec_bo(struct ilo_cp *cp)
 {
    const bool do_exec = !(ilo_debug & ILO_DEBUG_NOHW);
+   struct intel_context *ctx;
    unsigned long flags;
    int err;
 
    switch (cp->ring) {
    case ILO_CP_RING_RENDER:
+      ctx = cp->render_ctx;
       flags = INTEL_EXEC_RENDER;
       break;
    case ILO_CP_RING_BLT:
+      ctx = NULL;
       flags = INTEL_EXEC_BLT;
       break;
    default:
+      ctx = NULL;
       flags = 0;
       break;
    }
@@ -194,7 +198,7 @@ ilo_cp_exec_bo(struct ilo_cp *cp)
    flags |= cp->one_off_flags;
 
    if (likely(do_exec))
-      err = cp->bo->exec(cp->bo, cp->used * 4, cp->hw_ctx, flags);
+      err = cp->bo->exec(cp->bo, cp->used * 4, ctx, flags);
    else
       err = 0;
 
@@ -274,8 +278,8 @@ ilo_cp_destroy(struct ilo_cp *cp)
 {
    if (cp->bo)
       cp->bo->unreference(cp->bo);
-   if (cp->hw_ctx)
-      cp->winsys->destroy_context(cp->winsys, cp->hw_ctx);
+   if (cp->render_ctx)
+      cp->winsys->destroy_context(cp->winsys, cp->render_ctx);
 
    FREE(cp->sys);
    FREE(cp);
@@ -294,7 +298,7 @@ ilo_cp_create(struct intel_winsys *winsys, bool direct_map)
       return NULL;
 
    cp->winsys = winsys;
-   cp->hw_ctx = winsys->create_context(winsys);
+   cp->render_ctx = winsys->create_context(winsys);
 
    cp->ring = ILO_CP_RING_RENDER;
    cp->no_implicit_flush = false;
diff --git a/src/gallium/drivers/ilo/ilo_cp.h b/src/gallium/drivers/ilo/ilo_cp.h
index 2ecd832..2e9b0e3 100644
--- a/src/gallium/drivers/ilo/ilo_cp.h
+++ b/src/gallium/drivers/ilo/ilo_cp.h
@@ -56,7 +56,7 @@ typedef void (*ilo_cp_hook_func)(struct ilo_cp *cp, void *data);
  */
 struct ilo_cp {
    struct intel_winsys *winsys;
-   struct intel_context *hw_ctx;
+   struct intel_context *render_ctx;
 
    enum ilo_cp_ring ring;
    bool no_implicit_flush;
diff --git a/src/gallium/drivers/ilo/ilo_transfer.c b/src/gallium/drivers/ilo/ilo_transfer.c
index a3f4953..4d6e326 100644
--- a/src/gallium/drivers/ilo/ilo_transfer.c
+++ b/src/gallium/drivers/ilo/ilo_transfer.c
@@ -76,7 +76,7 @@ is_bo_busy(struct ilo_context *ilo, struct intel_bo *bo, bool *need_flush)
     * without being referenced by ilo->cp->bo.  We have to flush
     * unconditionally, and that is bad.
     */
-   if (ilo->cp->hw_ctx)
+   if (ilo->cp->render_ctx)
       ilo_cp_flush(ilo->cp);
 
    return intel_bo_is_busy(bo);




More information about the mesa-commit mailing list