xf86-video-intel: 5 commits - src/i965_render.c src/intel_video.c src/sna/sna_accel.c src/sna/sna_blt.c src/sna/sna_tiling.c src/sna/sna_trapezoids.c
Chris Wilson
ickle at kemper.freedesktop.org
Fri Oct 14 04:31:50 PDT 2011
src/i965_render.c | 1 -
src/intel_video.c | 13 +++++++------
src/sna/sna_accel.c | 15 +++++++--------
src/sna/sna_blt.c | 28 ++++++++++++++++++++++++++++
src/sna/sna_tiling.c | 19 +++++++++++++++++++
src/sna/sna_trapezoids.c | 8 +++++---
6 files changed, 66 insertions(+), 18 deletions(-)
New commits:
commit 33f17b996dd0fcbb8e07875770e11571380d6509
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Oct 14 12:01:34 2011 +0100
Remove a couple of trivial compile warnings for unused variables
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/i965_render.c b/src/i965_render.c
index bc0bd93..825fc13 100644
--- a/src/i965_render.c
+++ b/src/i965_render.c
@@ -182,7 +182,6 @@ i965_check_composite(int op,
int width, int height)
{
ScrnInfoPtr scrn = xf86Screens[dest_picture->pDrawable->pScreen->myNum];
- intel_screen_private *intel = intel_get_screen_private(scrn);
/* Check for unsupported compositing operations. */
if (op >= sizeof(i965_blend_op) / sizeof(i965_blend_op[0])) {
diff --git a/src/intel_video.c b/src/intel_video.c
index a35445d..d1d6126 100644
--- a/src/intel_video.c
+++ b/src/intel_video.c
@@ -210,14 +210,13 @@ static Bool intel_has_overlay(intel_screen_private *intel)
gp.value = &has_overlay;
ret = drmCommandWriteRead(intel->drmSubFD, DRM_I915_GETPARAM, &gp, sizeof(gp));
- return !! has_overlay;
+ return ret == 0 && !! has_overlay;
}
-static void intel_overlay_update_attrs(intel_screen_private *intel)
+static Bool intel_overlay_update_attrs(intel_screen_private *intel)
{
intel_adaptor_private *adaptor_priv = intel_get_adaptor_private(intel);
struct drm_intel_overlay_attrs attrs;
- int ret;
attrs.flags = I915_OVERLAY_UPDATE_ATTRS;
attrs.brightness = adaptor_priv->brightness;
@@ -231,8 +230,8 @@ static void intel_overlay_update_attrs(intel_screen_private *intel)
attrs.gamma4 = adaptor_priv->gamma4;
attrs.gamma5 = adaptor_priv->gamma5;
- ret = drmCommandWriteRead(intel->drmSubFD, DRM_I915_OVERLAY_ATTRS,
- &attrs, sizeof(attrs));
+ return drmCommandWriteRead(intel->drmSubFD, DRM_I915_OVERLAY_ATTRS,
+ &attrs, sizeof(attrs)) == 0;
}
static void intel_overlay_off(intel_screen_private *intel)
@@ -244,6 +243,7 @@ static void intel_overlay_off(intel_screen_private *intel)
ret = drmCommandWrite(intel->drmSubFD, DRM_I915_OVERLAY_PUT_IMAGE,
&request, sizeof(request));
+ (void) ret;
}
static Bool
@@ -713,7 +713,8 @@ I830SetPortAttributeOverlay(ScrnInfoPtr scrn,
OVERLAY_DEBUG("GAMMA\n");
}
- intel_overlay_update_attrs(intel);
+ if (!intel_overlay_update_attrs(intel))
+ return BadValue;
if (attribute == xvColorKey)
REGION_EMPTY(scrn->pScreen, &adaptor_priv->clip);
commit e5e27528ffeb74f404823c678e04e847cf2109aa
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Oct 14 11:51:44 2011 +0100
sna/blt: Add a pair of operator reductions for opaque fills
Extend the coverage of the BLT for a couple more composite operations,
though they be relatively infrequent.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_blt.c b/src/sna/sna_blt.c
index 1375a7a..9d84747 100644
--- a/src/sna/sna_blt.c
+++ b/src/sna/sna_blt.c
@@ -580,6 +580,20 @@ pixel_is_opaque(uint32_t pixel, uint32_t format)
}
static Bool
+pixel_is_white(uint32_t pixel, uint32_t format)
+{
+ switch (PICT_FORMAT_TYPE(format)) {
+ case PICT_TYPE_A:
+ case PICT_TYPE_ARGB:
+ case PICT_TYPE_ABGR:
+ case PICT_TYPE_BGRA:
+ return pixel == ((1 << PICT_FORMAT_BPP(format)) - 1);
+ default:
+ return FALSE;
+ }
+}
+
+static Bool
is_opaque_solid(PicturePtr picture)
{
if (picture->pSourcePict) {
@@ -589,6 +603,16 @@ is_opaque_solid(PicturePtr picture)
return pixel_is_opaque(get_pixel(picture), picture->format);
}
+static Bool
+is_white(PicturePtr picture)
+{
+ if (picture->pSourcePict) {
+ PictSolidFill *fill = (PictSolidFill *) picture->pSourcePict;
+ return fill->color == 0xffffffff;
+ } else
+ return pixel_is_white(get_pixel(picture), picture->format);
+}
+
fastcall
static void blt_fill_composite(struct sna *sna,
const struct sna_composite_op *op,
@@ -1096,6 +1120,10 @@ sna_blt_composite(struct sna *sna,
if (is_solid(src)) {
if (op == PictOpOver && is_opaque_solid(src))
op = PictOpSrc;
+ if (op == PictOpAdd && is_white(src))
+ op = PictOpSrc;
+ if (op == PictOpOutReverse && is_opaque_solid(src))
+ return prepare_blt_clear(sna, tmp);
if (op != PictOpSrc) {
DBG(("%s: unsuported op [%d] for blitting\n",
commit 3f5289b29962c3e5d94deb30782a156292d20053
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Oct 14 11:31:46 2011 +0100
sna/trapezoids: Fallback if the composite operation is not supported
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 b0331cb..1549ef5 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -2641,7 +2641,7 @@ mono_trapezoids_span_converter(CARD8 op, PicturePtr src, PicturePtr dst,
}
memset(&mono.op, 0, sizeof(mono.op));
- if (mono.sna->render.composite(mono.sna, op, src, NULL, dst,
+ if (!mono.sna->render.composite(mono.sna, op, src, NULL, dst,
src_x + mono.clip.extents.x1 - dst_x - dx,
src_y + mono.clip.extents.y1 - dst_y - dy,
0, 0,
@@ -2649,9 +2649,11 @@ mono_trapezoids_span_converter(CARD8 op, PicturePtr src, PicturePtr dst,
mono.clip.extents.x2 - mono.clip.extents.x1,
mono.clip.extents.y2 - mono.clip.extents.y1,
&mono.op)) {
- mono_render(&mono);
- mono.op.done(mono.sna, &mono.op);
+ mono_fini(&mono);
+ return false;
}
+ mono_render(&mono);
+ mono.op.done(mono.sna, &mono.op);
mono_fini(&mono);
if (!operator_is_bounded(op)) {
commit 3d79264ef8a8be225d9b13efd14f37a7478e6b1b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Oct 14 11:31:00 2011 +0100
sna/tiling: Hook up composite_box
Now used for spans and so triggering death by NULL function pointer on
older chipsets.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_tiling.c b/src/sna/sna_tiling.c
index 80989d8..295936b 100644
--- a/src/sna/sna_tiling.c
+++ b/src/sna/sna_tiling.c
@@ -95,6 +95,24 @@ sna_tiling_composite_blt(struct sna *sna,
(void)sna;
}
+fastcall static void
+sna_tiling_composite_box(struct sna *sna,
+ const struct sna_composite_op *op,
+ const BoxRec *box)
+{
+ struct sna_composite_rectangles r;
+
+ r.dst.x = box->x1;
+ r.dst.y = box->y1;
+ r.mask = r.src = r.dst;
+
+ r.width = box->x2 - box->x1;
+ r.height = box->y2 - box->y1;
+
+ sna_tiling_composite_add_rect(op->u.priv, &r);
+ (void)sna;
+}
+
static void
sna_tiling_composite_boxes(struct sna *sna,
const struct sna_composite_op *op,
@@ -258,6 +276,7 @@ sna_tiling_composite(uint32_t op,
tile->rect_size = ARRAY_SIZE(tile->rects_embedded);
tmp->blt = sna_tiling_composite_blt;
+ tmp->box = sna_tiling_composite_box;
tmp->boxes = sna_tiling_composite_boxes;
tmp->done = sna_tiling_composite_done;
commit f5f3135e3cc1f4740508773cfefca0954aed2fd3
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Fri Oct 14 10:40:39 2011 +0100
sna: Ensure that the scanout is flushed before we sleep
So that we do not see any delayed rendering on i965+.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 1073757..963ff9b 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -3793,7 +3793,7 @@ static Bool sna_accel_do_expire(struct sna *sna) { return sna->kgem.need_expire;
static void _sna_accel_disarm_timer(struct sna *sna, int id) { }
#endif
-static void sna_accel_flush(struct sna *sna)
+static bool sna_accel_flush(struct sna *sna)
{
struct sna_pixmap *priv = sna_accel_scanout(sna);
bool nothing_to_do =
@@ -3802,13 +3802,12 @@ static void sna_accel_flush(struct sna *sna)
DBG(("%s (time=%ld), nothing_to_do=%d\n",
__FUNCTION__, (long)GetTimeInMillis(), nothing_to_do));
- if (nothing_to_do) {
+ if (nothing_to_do)
_sna_accel_disarm_timer(sna, FLUSH_TIMER);
- return;
- }
-
- sna_pixmap_move_to_gpu(priv->pixmap);
+ else
+ sna_pixmap_move_to_gpu(priv->pixmap);
kgem_bo_flush(&sna->kgem, priv->gpu_bo);
+ return !nothing_to_do;
}
static void sna_accel_expire(struct sna *sna)
@@ -3955,8 +3954,8 @@ static void sna_accel_throttle(struct sna *sna)
void sna_accel_block_handler(struct sna *sna)
{
if (sna_accel_do_flush(sna)) {
- sna_accel_flush(sna);
- sna_accel_throttle(sna);
+ if (sna_accel_flush(sna))
+ sna_accel_throttle(sna);
}
if (sna_accel_do_expire(sna))
More information about the xorg-commit
mailing list