summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/gen6_viewport_state.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2011-04-22 13:25:24 -0700
committerEric Anholt <eric@anholt.net>2011-04-29 15:25:45 -0700
commit8d2047ca7e8a533e1853a2ba51cd1bd6e52ae4a3 (patch)
tree65624afbadf8fb95f8edfd37b8f3a13adf6ab63b /src/mesa/drivers/dri/i965/gen6_viewport_state.c
parent3628e123f13a480abfad8e8af9f875e3d8eeb5a6 (diff)
downloadexternal_mesa3d-8d2047ca7e8a533e1853a2ba51cd1bd6e52ae4a3.zip
external_mesa3d-8d2047ca7e8a533e1853a2ba51cd1bd6e52ae4a3.tar.gz
external_mesa3d-8d2047ca7e8a533e1853a2ba51cd1bd6e52ae4a3.tar.bz2
i965/gen6: Move the SF VP to state streaming.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Diffstat (limited to 'src/mesa/drivers/dri/i965/gen6_viewport_state.c')
-rw-r--r--src/mesa/drivers/dri/i965/gen6_viewport_state.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/src/mesa/drivers/dri/i965/gen6_viewport_state.c b/src/mesa/drivers/dri/i965/gen6_viewport_state.c
index 6512123..32fdd95 100644
--- a/src/mesa/drivers/dri/i965/gen6_viewport_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_viewport_state.c
@@ -67,12 +67,13 @@ prepare_sf_vp(struct brw_context *brw)
{
struct gl_context *ctx = &brw->intel.ctx;
const GLfloat depth_scale = 1.0F / ctx->DrawBuffer->_DepthMaxF;
- struct brw_sf_viewport sfv;
+ struct brw_sf_viewport *sfv;
GLfloat y_scale, y_bias;
const GLboolean render_to_fbo = (ctx->DrawBuffer->Name != 0);
const GLfloat *v = ctx->Viewport._WindowMap.m;
- memset(&sfv, 0, sizeof(sfv));
+ sfv = brw_state_batch(brw, sizeof(*sfv), 32, &brw->sf.vp_offset);
+ memset(sfv, 0, sizeof(*sfv));
/* _NEW_BUFFERS */
if (render_to_fbo) {
@@ -84,22 +85,20 @@ prepare_sf_vp(struct brw_context *brw)
}
/* _NEW_VIEWPORT */
- sfv.viewport.m00 = v[MAT_SX];
- sfv.viewport.m11 = v[MAT_SY] * y_scale;
- sfv.viewport.m22 = v[MAT_SZ] * depth_scale;
- sfv.viewport.m30 = v[MAT_TX];
- sfv.viewport.m31 = v[MAT_TY] * y_scale + y_bias;
- sfv.viewport.m32 = v[MAT_TZ] * depth_scale;
-
- drm_intel_bo_unreference(brw->sf.vp_bo);
- brw->sf.vp_bo = brw_cache_data(&brw->cache, BRW_SF_VP,
- &sfv, sizeof(sfv));
+ sfv->viewport.m00 = v[MAT_SX];
+ sfv->viewport.m11 = v[MAT_SY] * y_scale;
+ sfv->viewport.m22 = v[MAT_SZ] * depth_scale;
+ sfv->viewport.m30 = v[MAT_TX];
+ sfv->viewport.m31 = v[MAT_TY] * y_scale + y_bias;
+ sfv->viewport.m32 = v[MAT_TZ] * depth_scale;
+
+ brw->state.dirty.cache |= CACHE_NEW_SF_VP;
}
const struct brw_tracked_state gen6_sf_vp = {
.dirty = {
.mesa = _NEW_VIEWPORT | _NEW_BUFFERS,
- .brw = 0,
+ .brw = BRW_NEW_BATCH,
.cache = 0,
},
.prepare = prepare_sf_vp,
@@ -107,7 +106,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->sf.vp_bo);
brw_add_validated_bo(brw, brw->cc.vp_bo);
}
@@ -122,7 +120,8 @@ static void upload_viewport_state_pointers(struct brw_context *brw)
GEN6_CLIP_VIEWPORT_MODIFY);
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(intel->batch.bo, I915_GEM_DOMAIN_INSTRUCTION, 0,
+ brw->sf.vp_offset);
OUT_RELOC(brw->cc.vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
ADVANCE_BATCH();
}