summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-12-06 14:11:05 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2010-12-06 14:21:06 +0000
commitf3a47d7f235d18e4529e3898a48673c7c3cbd489 (patch)
tree0ffeebb59d0c70ff69160c19f9f742e066396685
parent4d48fed9aa0c3c7b84e74b4f72f298f580a8973c (diff)
snb: Cache pixmap binding locations
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/i965_render.c18
-rw-r--r--src/intel.h1
2 files changed, 19 insertions, 0 deletions
diff --git a/src/i965_render.c b/src/i965_render.c
index 6afbc4e6..8574c8e6 100644
--- a/src/i965_render.c
+++ b/src/i965_render.c
@@ -1125,6 +1125,14 @@ i965_set_picture_surface_state(intel_screen_private *intel,
struct brw_surface_state *ss;
int offset;
+ if (is_dst) {
+ if (priv->dst_bound)
+ return priv->dst_bound;
+ } else {
+ if (priv->src_bound)
+ return priv->src_bound;
+ }
+
ss = (struct brw_surface_state *)
(intel->surface_data + intel->surface_used);
@@ -1174,6 +1182,11 @@ i965_set_picture_surface_state(intel_screen_private *intel,
offset = intel->surface_used;
intel->surface_used += sizeof(struct brw_surface_state_padded);
+ if (is_dst)
+ priv->dst_bound = offset;
+ else
+ priv->src_bound = offset;
+
return offset;
}
@@ -1515,6 +1528,8 @@ static Bool i965_composite_check_aperture(ScrnInfoPtr scrn)
static void i965_surface_flush(struct intel_screen_private *intel)
{
+ struct intel_pixmap *priv;
+
drm_intel_bo_subdata(intel->surface_bo,
0, intel->surface_used,
intel->surface_data);
@@ -1531,6 +1546,9 @@ static void i965_surface_flush(struct intel_screen_private *intel)
intel->surface_bo =
drm_intel_bo_alloc(intel->bufmgr, "surface data",
sizeof(intel->surface_data), 4096);
+
+ list_foreach_entry(priv, struct intel_pixmap, &intel->batch_pixmaps, batch)
+ priv->dst_bound = priv->src_bound = 0;
}
Bool
diff --git a/src/intel.h b/src/intel.h
index cabc3164..dc88d747 100644
--- a/src/intel.h
+++ b/src/intel.h
@@ -178,6 +178,7 @@ struct intel_pixmap {
struct list flush, batch, in_flight;
+ uint16_t src_bound, dst_bound;
uint16_t stride;
uint8_t tiling;
int8_t busy :2;