summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-02-08 13:15:46 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2012-02-08 13:15:46 +0000
commit4d8369f8e60fd4f5a0ef49f3e9866ea5ecb21927 (patch)
tree27e98c84e1231f8f46819e93c53735c3185a39c3
parent8634d461bd9e5a3d3f75b0efc11db87b8d3e1245 (diff)
sna/gen2+: Force upload rather than perform source transformations on the CPU
If both the source and destination is on the CPU, then the thinking was it would be quicker to operate on those on the CPU rather than copy both to the GPU and then perform the operation. This turns out to be a false assumption if transformation is involved -- something to be reconsidered if pixman should ever be improved. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/gen2_render.c8
-rw-r--r--src/sna/gen3_render.c8
-rw-r--r--src/sna/gen4_render.c8
-rw-r--r--src/sna/gen5_render.c8
-rw-r--r--src/sna/gen6_render.c8
-rw-r--r--src/sna/gen7_render.c8
6 files changed, 42 insertions, 6 deletions
diff --git a/src/sna/gen2_render.c b/src/sna/gen2_render.c
index ed48ce6d..64b4e7c1 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -1507,9 +1507,15 @@ has_alphamap(PicturePtr p)
}
static bool
+untransformed(PicturePtr p)
+{
+ return !p->transform || pixman_transform_is_int_translate(p->transform);
+}
+
+static bool
need_upload(PicturePtr p)
{
- return p->pDrawable && unattached(p->pDrawable);
+ return p->pDrawable && unattached(p->pDrawable) && untransformed(p);
}
static bool
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index fc006ac4..97e5839d 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -2419,9 +2419,15 @@ has_alphamap(PicturePtr p)
}
static bool
+untransformed(PicturePtr p)
+{
+ return !p->transform || pixman_transform_is_int_translate(p->transform);
+}
+
+static bool
need_upload(PicturePtr p)
{
- return p->pDrawable && unattached(p->pDrawable);
+ return p->pDrawable && unattached(p->pDrawable) && untransformed(p);
}
static bool
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 62465383..6e7d4be6 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -2016,9 +2016,15 @@ has_alphamap(PicturePtr p)
}
static bool
+untransformed(PicturePtr p)
+{
+ return !p->transform || pixman_transform_is_int_translate(p->transform);
+}
+
+static bool
need_upload(PicturePtr p)
{
- return p->pDrawable && unattached(p->pDrawable);
+ return p->pDrawable && unattached(p->pDrawable) && untransformed(p);
}
static bool
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index b9c7a92a..7ac993cd 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -2044,9 +2044,15 @@ has_alphamap(PicturePtr p)
}
static bool
+untransformed(PicturePtr p)
+{
+ return !p->transform || pixman_transform_is_int_translate(p->transform);
+}
+
+static bool
need_upload(PicturePtr p)
{
- return p->pDrawable && unattached(p->pDrawable);
+ return p->pDrawable && unattached(p->pDrawable) && untransformed(p);
}
static bool
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 17789e96..1476ff7f 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -2325,9 +2325,15 @@ has_alphamap(PicturePtr p)
}
static bool
+untransformed(PicturePtr p)
+{
+ return !p->transform || pixman_transform_is_int_translate(p->transform);
+}
+
+static bool
need_upload(PicturePtr p)
{
- return p->pDrawable && unattached(p->pDrawable);
+ return p->pDrawable && unattached(p->pDrawable) && untransformed(p);
}
static bool
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 97574054..5740a421 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2329,9 +2329,15 @@ has_alphamap(PicturePtr p)
}
static bool
+untransformed(PicturePtr p)
+{
+ return !p->transform || pixman_transform_is_int_translate(p->transform);
+}
+
+static bool
need_upload(PicturePtr p)
{
- return p->pDrawable && unattached(p->pDrawable);
+ return p->pDrawable && unattached(p->pDrawable) && untransformed(p);
}
static bool