xf86-video-intel: src/sna/gen2_render.c src/sna/gen3_render.c src/sna/gen4_render.c src/sna/gen5_render.c src/sna/gen6_render.c src/sna/gen7_render.c src/sna/sna_render_inline.h
Chris Wilson
ickle at kemper.freedesktop.org
Thu Nov 1 02:37:33 PDT 2012
src/sna/gen2_render.c | 6 ++----
src/sna/gen3_render.c | 6 ++----
src/sna/gen4_render.c | 6 ++----
src/sna/gen5_render.c | 6 ++----
src/sna/gen6_render.c | 8 ++------
src/sna/gen7_render.c | 8 ++------
src/sna/sna_render_inline.h | 19 +++++++++++++++++++
7 files changed, 31 insertions(+), 28 deletions(-)
New commits:
commit 72bcd8f85c98502b13a67d9c606371afe513584c
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Thu Nov 1 09:30:18 2012 +0000
sna: Try to reduce ping-pong migration for intermixed render/legacy code paths
References: https://bugs.freedesktop.org/show_bug.cgi?id=56591
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen2_render.c b/src/sna/gen2_render.c
index 5012662..024b107 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -1614,7 +1614,6 @@ gen2_composite_fallback(struct sna *sna,
PicturePtr mask,
PicturePtr dst)
{
- struct sna_pixmap *priv;
PixmapPtr src_pixmap;
PixmapPtr mask_pixmap;
PixmapPtr dst_pixmap;
@@ -1653,8 +1652,7 @@ gen2_composite_fallback(struct sna *sna,
}
/* If anything is on the GPU, push everything out to the GPU */
- priv = sna_pixmap(dst_pixmap);
- if (priv && priv->gpu_damage && !priv->clear) {
+ if (dst_use_gpu(dst_pixmap)) {
DBG(("%s: dst is already on the GPU, try to use GPU\n",
__FUNCTION__));
return false;
@@ -1689,7 +1687,7 @@ gen2_composite_fallback(struct sna *sna,
if (too_large(dst_pixmap->drawable.width,
dst_pixmap->drawable.height) &&
- (priv == NULL || DAMAGE_IS_ALL(priv->cpu_damage))) {
+ dst_is_cpu(dst_pixmap)) {
DBG(("%s: dst is on the CPU and too large\n", __FUNCTION__));
return true;
}
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index 7c303f4..232d33f 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2641,7 +2641,6 @@ gen3_composite_fallback(struct sna *sna,
PicturePtr mask,
PicturePtr dst)
{
- struct sna_pixmap *priv;
PixmapPtr src_pixmap;
PixmapPtr mask_pixmap;
PixmapPtr dst_pixmap;
@@ -2690,8 +2689,7 @@ gen3_composite_fallback(struct sna *sna,
}
/* If anything is on the GPU, push everything out to the GPU */
- priv = sna_pixmap(dst_pixmap);
- if (priv && priv->gpu_damage && !priv->clear) {
+ if (dst_use_gpu(dst_pixmap)) {
DBG(("%s: dst is already on the GPU, try to use GPU\n",
__FUNCTION__));
return false;
@@ -2726,7 +2724,7 @@ gen3_composite_fallback(struct sna *sna,
if (too_large(dst_pixmap->drawable.width,
dst_pixmap->drawable.height) &&
- (priv == NULL || DAMAGE_IS_ALL(priv->cpu_damage))) {
+ dst_is_cpu(dst_pixmap)) {
DBG(("%s: dst is on the CPU and too large\n", __FUNCTION__));
return true;
}
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 8dc25d5..292018f 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2119,7 +2119,6 @@ gen4_composite_fallback(struct sna *sna,
PicturePtr mask,
PicturePtr dst)
{
- struct sna_pixmap *priv;
PixmapPtr src_pixmap;
PixmapPtr mask_pixmap;
PixmapPtr dst_pixmap;
@@ -2158,8 +2157,7 @@ gen4_composite_fallback(struct sna *sna,
}
/* If anything is on the GPU, push everything out to the GPU */
- priv = sna_pixmap(dst_pixmap);
- if (priv && priv->gpu_damage && !priv->clear) {
+ if (dst_use_gpu(dst_pixmap)) {
DBG(("%s: dst is already on the GPU, try to use GPU\n",
__FUNCTION__));
return false;
@@ -2194,7 +2192,7 @@ gen4_composite_fallback(struct sna *sna,
if (too_large(dst_pixmap->drawable.width,
dst_pixmap->drawable.height) &&
- (priv == NULL || DAMAGE_IS_ALL(priv->cpu_damage))) {
+ dst_is_cpu(dst_pixmap)) {
DBG(("%s: dst is on the CPU and too large\n", __FUNCTION__));
return true;
}
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 5d55937..79431c4 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2130,7 +2130,6 @@ gen5_composite_fallback(struct sna *sna,
PicturePtr mask,
PicturePtr dst)
{
- struct sna_pixmap *priv;
PixmapPtr src_pixmap;
PixmapPtr mask_pixmap;
PixmapPtr dst_pixmap;
@@ -2169,8 +2168,7 @@ gen5_composite_fallback(struct sna *sna,
}
/* If anything is on the GPU, push everything out to the GPU */
- priv = sna_pixmap(dst_pixmap);
- if (priv && priv->gpu_damage && !priv->clear) {
+ if (dst_use_gpu(dst_pixmap)) {
DBG(("%s: dst is already on the GPU, try to use GPU\n",
__FUNCTION__));
return false;
@@ -2205,7 +2203,7 @@ gen5_composite_fallback(struct sna *sna,
if (too_large(dst_pixmap->drawable.width,
dst_pixmap->drawable.height) &&
- (priv == NULL || DAMAGE_IS_ALL(priv->cpu_damage))) {
+ dst_is_cpu(dst_pixmap)) {
DBG(("%s: dst is on the CPU and too large\n", __FUNCTION__));
return true;
}
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index fd7f295..a248749 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2487,7 +2487,6 @@ gen6_composite_fallback(struct sna *sna,
PicturePtr mask,
PicturePtr dst)
{
- struct sna_pixmap *priv;
PixmapPtr src_pixmap;
PixmapPtr mask_pixmap;
PixmapPtr dst_pixmap;
@@ -2526,10 +2525,7 @@ gen6_composite_fallback(struct sna *sna,
}
/* If anything is on the GPU, push everything out to the GPU */
- priv = sna_pixmap(dst_pixmap);
- if (priv &&
- ((priv->gpu_damage && !priv->clear) ||
- (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo)))) {
+ if (dst_use_gpu(dst_pixmap)) {
DBG(("%s: dst is already on the GPU, try to use GPU\n",
__FUNCTION__));
return false;
@@ -2564,7 +2560,7 @@ gen6_composite_fallback(struct sna *sna,
if (too_large(dst_pixmap->drawable.width,
dst_pixmap->drawable.height) &&
- (priv == NULL || DAMAGE_IS_ALL(priv->cpu_damage))) {
+ dst_is_cpu(dst_pixmap)) {
DBG(("%s: dst is on the CPU and too large\n", __FUNCTION__));
return true;
}
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index c3639f6..888c707 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2604,7 +2604,6 @@ gen7_composite_fallback(struct sna *sna,
PicturePtr mask,
PicturePtr dst)
{
- struct sna_pixmap *priv;
PixmapPtr src_pixmap;
PixmapPtr mask_pixmap;
PixmapPtr dst_pixmap;
@@ -2643,10 +2642,7 @@ gen7_composite_fallback(struct sna *sna,
}
/* If anything is on the GPU, push everything out to the GPU */
- priv = sna_pixmap(dst_pixmap);
- if (priv &&
- ((priv->gpu_damage && !priv->clear) ||
- (priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo)))) {
+ if (dst_use_gpu(dst_pixmap)) {
DBG(("%s: dst is already on the GPU, try to use GPU\n",
__FUNCTION__));
return false;
@@ -2681,7 +2677,7 @@ gen7_composite_fallback(struct sna *sna,
if (too_large(dst_pixmap->drawable.width,
dst_pixmap->drawable.height) &&
- (priv == NULL || DAMAGE_IS_ALL(priv->cpu_damage))) {
+ dst_is_cpu(dst_pixmap)) {
DBG(("%s: dst is on the CPU and too large\n", __FUNCTION__));
return true;
}
diff --git a/src/sna/sna_render_inline.h b/src/sna/sna_render_inline.h
index 750faf5..2468b89 100644
--- a/src/sna/sna_render_inline.h
+++ b/src/sna/sna_render_inline.h
@@ -220,4 +220,23 @@ color_convert(uint32_t pixel,
return pixel;
}
+inline static bool dst_use_gpu(PixmapPtr pixmap)
+{
+ struct sna_pixmap *priv = sna_pixmap(pixmap);
+ if (priv == NULL)
+ return false;
+
+ if (priv->gpu_damage && !priv->clear &&
+ (!priv->cpu || !priv->cpu_damage || kgem_bo_is_busy(priv->gpu_bo)))
+ return true;
+
+ return priv->cpu_bo && kgem_bo_is_busy(priv->cpu_bo);
+}
+
+inline static bool dst_is_cpu(PixmapPtr pixmap)
+{
+ struct sna_pixmap *priv = sna_pixmap(pixmap);
+ return priv == NULL || DAMAGE_IS_ALL(priv->cpu_damage);
+}
+
#endif /* SNA_RENDER_INLINE_H */
More information about the xorg-commit
mailing list