xf86-video-intel: src/sna/kgem.c src/sna/sna_blt.c src/sna/sna.h src/sna/sna_io.c
Chris Wilson
ickle at kemper.freedesktop.org
Mon Oct 3 00:56:57 PDT 2011
src/sna/kgem.c | 1 +
src/sna/sna.h | 4 ++++
src/sna/sna_blt.c | 7 +++++++
src/sna/sna_io.c | 2 ++
4 files changed, 14 insertions(+)
New commits:
commit 413c9f7111c605a3842d4d0a85f8cf01470e5faa
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Oct 3 00:24:50 2011 +0100
sna/blt: Suppress repeated SETUP_BLT
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index c31e71f..fb24563 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -92,6 +92,7 @@ static void kgem_sna_reset(struct kgem *kgem)
struct sna *sna = container_of(kgem, struct sna, kgem);
sna->render.reset(sna);
+ sna->blt_state.fill_bo = 0;
}
static void kgem_sna_flush(struct kgem *kgem)
diff --git a/src/sna/sna.h b/src/sna/sna.h
index 091fed5..189e3d4 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -234,6 +234,10 @@ struct sna {
void *WakeupData;
CloseScreenProcPtr CloseScreen;
+ struct {
+ uint32_t fill_bo;
+ uint32_t fill_pixel;
+ } blt_state;
union {
struct gen2_render_state gen2;
struct gen3_render_state gen3;
diff --git a/src/sna/sna_blt.c b/src/sna/sna_blt.c
index aff8fac..d82f845 100644
--- a/src/sna/sna_blt.c
+++ b/src/sna/sna_blt.c
@@ -149,6 +149,8 @@ static bool sna_blt_fill_init(struct sna *sna,
_kgem_set_mode(kgem, KGEM_BLT);
}
+ if (sna->blt_state.fill_bo != bo->handle ||
+ sna->blt_state.fill_pixel != pixel)
{
uint32_t *b = kgem->batch + kgem->nbatch;
b[0] = blt->cmd;
@@ -165,6 +167,9 @@ static bool sna_blt_fill_init(struct sna *sna,
b[7] = 0;
b[8] = 0;
kgem->nbatch += 9;
+
+ sna->blt_state.fill_bo = bo->handle;
+ sna->blt_state.fill_pixel = pixel;
}
return TRUE;
@@ -260,6 +265,7 @@ static Bool sna_blt_copy_init(struct sna *sna,
if (!kgem_check_bo_fenced(kgem, src, dst, NULL))
_kgem_submit(kgem);
+ sna->blt_state.fill_bo = 0;
return TRUE;
}
@@ -1273,6 +1279,7 @@ Bool sna_blt_fill_boxes(struct sna *sna, uint8_t alu,
} while (nbox);
_kgem_set_mode(kgem, KGEM_BLT);
+ sna->blt_state.fill_bo = 0;
return TRUE;
}
diff --git a/src/sna/sna_io.c b/src/sna/sna_io.c
index 649a359..321247a 100644
--- a/src/sna/sna_io.c
+++ b/src/sna/sna_io.c
@@ -234,6 +234,7 @@ void sna_read_boxes(struct sna *sna,
} while (--nbox);
assert(src - (char *)ptr == dst_bo->size);
kgem_bo_destroy(kgem, dst_bo);
+ sna->blt_state.fill_bo = 0;
}
static void write_boxes_inplace(struct kgem *kgem,
@@ -401,6 +402,7 @@ void sna_write_boxes(struct sna *sna,
} while (nbox);
_kgem_set_mode(kgem, KGEM_BLT);
+ sna->blt_state.fill_bo = 0;
}
struct kgem_bo *sna_replace(struct sna *sna,
More information about the xorg-commit
mailing list