xf86-video-intel: 3 commits - src/sna/sna_io.c src/sna/sna_trapezoids.c
Chris Wilson
ickle at kemper.freedesktop.org
Fri Apr 6 01:45:27 PDT 2012
src/sna/sna_io.c | 2 -
src/sna/sna_trapezoids.c | 65 +++++++++++++++++++++++------------------------
2 files changed, 34 insertions(+), 33 deletions(-)
New commits:
commit 999aa210ff87919945c673bdd34bae76ac097681
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Apr 6 09:24:36 2012 +0100
sna: Use a sentinel value to prevent accessing beyond the end of the y_buckets
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c
index 9000f82..dbf581e 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -650,12 +650,13 @@ polygon_init(struct polygon *polygon,
goto bail_no_mem;
}
- if (num_buckets > ARRAY_SIZE(polygon->y_buckets_embedded)) {
- polygon->y_buckets = malloc(num_buckets*sizeof(struct edge *));
+ if (num_buckets >= ARRAY_SIZE(polygon->y_buckets_embedded)) {
+ polygon->y_buckets = malloc((1+num_buckets)*sizeof(struct edge *));
if (unlikely(NULL == polygon->y_buckets))
goto bail_no_mem;
}
memset(polygon->y_buckets, 0, num_buckets * sizeof(struct edge *));
+ polygon->y_buckets[num_buckets] = (void *)-1;
polygon->ymin = ymin;
polygon->ymax = ymax;
@@ -1363,7 +1364,7 @@ tor_render(struct sna *sna,
if (active->head.next == &active->tail) {
active->min_height = INT_MAX;
active->is_vertical = 1;
- for (; j < h && !polygon->y_buckets[j]; j++)
+ for (; !polygon->y_buckets[j]; j++)
;
__DBG(("%s: no new edges and no exisiting edges, skipping, %d -> %d\n",
__FUNCTION__, i, j));
@@ -1386,8 +1387,7 @@ tor_render(struct sna *sna,
assert(active->is_vertical);
nonzero_row(active, coverages);
- while (j < h &&
- polygon->y_buckets[j] == NULL &&
+ while (polygon->y_buckets[j] == NULL &&
active->min_height >= 2*FAST_SAMPLES_Y)
{
active->min_height -= FAST_SAMPLES_Y;
@@ -1713,6 +1713,9 @@ tor_inplace(struct tor *converter, PixmapPtr scratch, int mono, uint8_t *buf)
__DBG(("%s: mono=%d, buf=%d\n", __FUNCTION__, mono, buf));
assert(!mono);
+ assert(converter->ymin == 0);
+ assert(converter->xmin == 0);
+ assert(scratch->drawable.depth == 8);
/* Render each pixel row. */
for (i = 0; i < h; i = j) {
@@ -1727,7 +1730,7 @@ tor_inplace(struct tor *converter, PixmapPtr scratch, int mono, uint8_t *buf)
if (active->head.next == &active->tail) {
active->min_height = INT_MAX;
active->is_vertical = 1;
- for (; j < h && !polygon->y_buckets[j]; j++)
+ for (; !polygon->y_buckets[j]; j++)
;
__DBG(("%s: no new edges and no exisiting edges, skipping, %d -> %d\n",
__FUNCTION__, i, j));
@@ -1754,8 +1757,7 @@ tor_inplace(struct tor *converter, PixmapPtr scratch, int mono, uint8_t *buf)
if (row != ptr)
memcpy(row, ptr, width);
- while (j < h &&
- polygon->y_buckets[j] == NULL &&
+ while (polygon->y_buckets[j] == NULL &&
active->min_height >= 2*FAST_SAMPLES_Y)
{
active->min_height -= FAST_SAMPLES_Y;
commit 1ae6328c57eb496072f0d0e27440f5d0901633b0
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Apr 6 09:12:08 2012 +0100
sna: Remove redundant check from tor_inplace()
We only execute full-steps for vertical edges so we do not need the
second check.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c
index 2b4b2db..9000f82 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -1383,22 +1383,21 @@ tor_render(struct sna *sna,
active->min_height,
active->is_vertical));
if (do_full_step) {
+ assert(active->is_vertical);
nonzero_row(active, coverages);
- if (active->is_vertical) {
- while (j < h &&
- polygon->y_buckets[j] == NULL &&
- active->min_height >= 2*FAST_SAMPLES_Y)
- {
- active->min_height -= FAST_SAMPLES_Y;
- j++;
- }
- if (j != i + 1)
- step_edges(active, j - (i + 1));
-
- __DBG(("%s: vertical edges, full step (%d, %d)\n",
- __FUNCTION__, i, j));
+ while (j < h &&
+ polygon->y_buckets[j] == NULL &&
+ active->min_height >= 2*FAST_SAMPLES_Y)
+ {
+ active->min_height -= FAST_SAMPLES_Y;
+ j++;
}
+ if (j != i + 1)
+ step_edges(active, j - (i + 1));
+
+ __DBG(("%s: vertical edges, full step (%d, %d)\n",
+ __FUNCTION__, i, j));
} else {
grid_scaled_y_t suby;
@@ -1748,27 +1747,27 @@ tor_inplace(struct tor *converter, PixmapPtr scratch, int mono, uint8_t *buf)
active->min_height,
active->is_vertical));
if (do_full_step) {
+ assert(active->is_vertical);
+
memset(ptr, 0, width);
inplace_row(active, ptr, width);
if (row != ptr)
memcpy(row, ptr, width);
- if (active->is_vertical) {
- while (j < h &&
- polygon->y_buckets[j] == NULL &&
- active->min_height >= 2*FAST_SAMPLES_Y)
- {
- active->min_height -= FAST_SAMPLES_Y;
- row += stride;
- memcpy(row, ptr, width);
- j++;
- }
- if (j != i + 1)
- step_edges(active, j - (i + 1));
-
- __DBG(("%s: vertical edges, full step (%d, %d)\n",
- __FUNCTION__, i, j));
+ while (j < h &&
+ polygon->y_buckets[j] == NULL &&
+ active->min_height >= 2*FAST_SAMPLES_Y)
+ {
+ active->min_height -= FAST_SAMPLES_Y;
+ row += stride;
+ memcpy(row, ptr, width);
+ j++;
}
+ if (j != i + 1)
+ step_edges(active, j - (i + 1));
+
+ __DBG(("%s: vertical edges, full step (%d, %d)\n",
+ __FUNCTION__, i, j));
} else {
grid_scaled_y_t suby;
int min = width, max = 0;
commit 51b9202d27db3d98c6d82ba224bd8eb218533dd9
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Apr 4 11:13:27 2012 +0100
sna: Only engage the GPU detiler for multiple rows
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_io.c b/src/sna/sna_io.c
index 4f5a634..02a5c75 100644
--- a/src/sna/sna_io.c
+++ b/src/sna/sna_io.c
@@ -178,7 +178,7 @@ fallback:
}
if (kgem_bo_is_mappable(kgem, src_bo)) {
/* Is it worth detiling? */
- if ((extents.y2 - extents.y1) * src_bo->pitch < 4096)
+ if ((extents.y2 - extents.y1 - 1) * src_bo->pitch < 4096)
goto fallback;
}
More information about the xorg-commit
mailing list