i965/gen6: Move the clip VP to state streaming.
authorEric Anholt <eric@anholt.net>
Fri, 22 Apr 2011 20:20:08 +0000 (13:20 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 29 Apr 2011 22:25:41 +0000 (15:25 -0700)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_state_dump.c
src/mesa/drivers/dri/i965/brw_vtbl.c
src/mesa/drivers/dri/i965/gen6_viewport_state.c

index d9b755ba19ba7aafd02409fd4c5efa27121dcb3e..b6cd058d5c2c68595775f79e0e297a236c4be8f3 100644 (file)
@@ -658,7 +658,11 @@ struct brw_context
 
       drm_intel_bo *prog_bo;
       drm_intel_bo *state_bo;
-      drm_intel_bo *vp_bo;
+
+      /* As of gen6, this is the offset in the batch to the CLIP VP,
+       * instead of vp_bo.
+       */
+      uint32_t vp_offset;
    } clip;
 
 
index ec1e84a983f6f70793e14833a89b85716db3daa8..03e03e30e79eed6811107dba83a99b41849f20e4 100644 (file)
@@ -233,23 +233,21 @@ static void dump_sf_viewport_state(struct brw_context *brw)
 
 static void dump_clip_viewport_state(struct brw_context *brw)
 {
+   struct intel_context *intel = &brw->intel;
    const char *name = "CLIP VP";
    struct brw_clipper_viewport *vp;
    uint32_t vp_off;
 
-   if (brw->clip.vp_bo == NULL)
-      return;
-
-   drm_intel_bo_map(brw->clip.vp_bo, GL_FALSE);
+   drm_intel_bo_map(intel->batch.bo, GL_FALSE);
 
-   vp = brw->clip.vp_bo->virtual;
-   vp_off = brw->clip.vp_bo->offset;
+   vp = intel->batch.bo->virtual + brw->clip.vp_offset;
+   vp_off = intel->batch.bo->offset + brw->clip.vp_offset;
 
    state_out(name, vp, vp_off, 0, "xmin = %f\n", vp->xmin);
    state_out(name, vp, vp_off, 1, "xmax = %f\n", vp->xmax);
    state_out(name, vp, vp_off, 2, "ymin = %f\n", vp->ymin);
    state_out(name, vp, vp_off, 3, "ymax = %f\n", vp->ymax);
-   drm_intel_bo_unmap(brw->clip.vp_bo);
+   drm_intel_bo_unmap(intel->batch.bo);
 }
 
 static void dump_cc_viewport_state(struct brw_context *brw)
index 4961b0449dfb194db45995e1c739e9e33340592e..b4d5a99c173744672e98f8d655b36bf407a8b17b 100644 (file)
@@ -83,7 +83,6 @@ static void brw_destroy_context( struct intel_context *intel )
    dri_bo_release(&brw->gs.state_bo);
    dri_bo_release(&brw->clip.prog_bo);
    dri_bo_release(&brw->clip.state_bo);
-   dri_bo_release(&brw->clip.vp_bo);
    dri_bo_release(&brw->sf.prog_bo);
    dri_bo_release(&brw->sf.state_bo);
    dri_bo_release(&brw->sf.vp_bo);
index cd7d209e3eadb74c795dbbc77750a16985cdbf7b..6512123201b889f62b04a507b72d0b18c1a15ed3 100644 (file)
 static void
 prepare_clip_vp(struct brw_context *brw)
 {
-   struct brw_clipper_viewport vp;
+   struct brw_clipper_viewport *vp;
 
-   vp.xmin = -1.0;
-   vp.xmax = 1.0;
-   vp.ymin = -1.0;
-   vp.ymax = 1.0;
+   vp = brw_state_batch(brw, sizeof(*vp), 32, &brw->clip.vp_offset);
 
-   drm_intel_bo_unreference(brw->clip.vp_bo);
-   brw->clip.vp_bo = brw_cache_data(&brw->cache, BRW_CLIP_VP,
-                                   &vp, sizeof(vp));
+   vp->xmin = -1.0;
+   vp->xmax = 1.0;
+   vp->ymin = -1.0;
+   vp->ymax = 1.0;
+
+   brw->state.dirty.cache |= CACHE_NEW_CLIP_VP;
 }
 
 const struct brw_tracked_state gen6_clip_vp = {
    .dirty = {
-      .mesa = _NEW_VIEWPORT, /* XXX: not really, but we need nonzero */
-      .brw = 0,
+      .mesa = 0,
+      .brw = BRW_NEW_BATCH,
       .cache = 0,
    },
    .prepare = prepare_clip_vp,
@@ -107,7 +107,6 @@ const struct brw_tracked_state gen6_sf_vp = {
 
 static void prepare_viewport_state_pointers(struct brw_context *brw)
 {
-   brw_add_validated_bo(brw, brw->clip.vp_bo);
    brw_add_validated_bo(brw, brw->sf.vp_bo);
    brw_add_validated_bo(brw, brw->cc.vp_bo);
 }
@@ -121,7 +120,8 @@ static void upload_viewport_state_pointers(struct brw_context *brw)
             GEN6_CC_VIEWPORT_MODIFY |
             GEN6_SF_VIEWPORT_MODIFY |
             GEN6_CLIP_VIEWPORT_MODIFY);
-   OUT_RELOC(brw->clip.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
+   OUT_RELOC(intel->batch.bo, I915_GEM_DOMAIN_INSTRUCTION, 0,
+            brw->clip.vp_offset);
    OUT_RELOC(brw->sf.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
    OUT_RELOC(brw->cc.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
    ADVANCE_BATCH();