xf86-video-intel: 4 commits - src/sna/sna_video_sprite.c src/sna/sna_video_textured.c

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Oct 22 16:31:56 UTC 2018


 src/sna/sna_video_sprite.c   |   54 +++++++++++++++++++++++++++++++++++++++----
 src/sna/sna_video_textured.c |    8 +++++-
 2 files changed, 57 insertions(+), 5 deletions(-)

New commits:
commit 0932a6b37ba6d5c9e916a1cb6ab89c3205b81a0c
Author: Ville Syrjälä <ville.syrjala at linux.intel.com>
Date:   Mon Oct 22 16:59:29 2018 +0300

    sna/video/textured: Disable textured Xv for depth 8
    
    We can't output color index formats with the render engine,
    so let's disable the textured Xv adaptor for depth 8.
    
    Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
    Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_video_textured.c b/src/sna/sna_video_textured.c
index dd38d4d4..115cbea4 100644
--- a/src/sna/sna_video_textured.c
+++ b/src/sna/sna_video_textured.c
@@ -354,6 +354,12 @@ void sna_video_textured_setup(struct sna *sna, ScreenPtr screen)
 	struct sna_video *video;
 	int nports, i;
 
+	if (sna->scrn->depth == 8) {
+		xf86DrvMsg(sna->scrn->scrnIndex, X_INFO,
+			   "Textured video not supported in 8bpp mode\n");
+		return;
+	}
+
 	if (!sna->render.video) {
 		xf86DrvMsg(sna->scrn->scrnIndex, X_INFO,
 			   "Textured video not supported on this hardware or backend\n");
commit f09051dfabe3ccaab6b68f1bf324a84c2f2258a3
Author: Ville Syrjälä <ville.syrjala at linux.intel.com>
Date:   Mon Oct 22 16:59:28 2018 +0300

    sna/video/textured: Enable textured Xv wih depth 30
    
    Texured Xv works just fine with depth 30. Allow it.
    
    Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
    Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_video_textured.c b/src/sna/sna_video_textured.c
index a784fe2e..dd38d4d4 100644
--- a/src/sna/sna_video_textured.c
+++ b/src/sna/sna_video_textured.c
@@ -39,7 +39,7 @@
 static Atom xvBrightness, xvContrast, xvSyncToVblank, xvColorspace;
 
 static XvFormatRec Formats[] = {
-	{15}, {16}, {24}
+	{15}, {16}, {24}, {30}
 };
 
 static const XvAttributeRec Attributes[] = {
commit bf4f85a8ba414b66ea98c11b76cb2f1830f9bf26
Author: Ville Syrjälä <ville.syrjala at linux.intel.com>
Date:   Mon Oct 22 16:59:27 2018 +0300

    sna/video/sprite: Allow sprite Xv with depth 8 and depth 30
    
    With the colorkey setup fixed the sprite Xv adaptor works just
    fine with depth 30.
    
    With depth 8 there is one remaining problem with the usage of
    the LUT for gamma vs. C8, but that is purely a kernel issue.
    
    Let's allow both depth 8 and depth 30 with the sprite Xv
    adaptor.
    
    Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
    Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_video_sprite.c b/src/sna/sna_video_sprite.c
index bb7b200b..d3d722d4 100644
--- a/src/sna/sna_video_sprite.c
+++ b/src/sna/sna_video_sprite.c
@@ -72,7 +72,7 @@ struct local_mode_set_plane {
 
 static Atom xvColorKey, xvAlwaysOnTop, xvSyncToVblank, xvColorspace;
 
-static XvFormatRec formats[] = { {15}, {16}, {24} };
+static XvFormatRec formats[] = { {8}, {15}, {16}, {24}, {30} };
 static const XvImageRec images[] = { XVIMAGE_YUY2, XVIMAGE_UYVY,
 				     XVMC_RGB888 };
 static const XvImageRec images_rgb565[] = { XVIMAGE_YUY2, XVIMAGE_UYVY,
commit 35f84efd4a9b448fc00c6328d2d5460a3beb8f75
Author: Ville Syrjälä <ville.syrjala at linux.intel.com>
Date:   Mon Oct 22 16:59:26 2018 +0300

    sna/video/sprite: Fix colorkey setup for depth != 24
    
    Set up the colorkey correctly for depth != 24. For 8bpc we
    need to replicate the same key value into each channel, for
    depth 15/16 we need to mask off the unused low bits in each
    channel, and for depth 30 we just use the 8 msbs of each channel
    as the colorkey register can't hold the full 10 bits.
    
    Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
    Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_video_sprite.c b/src/sna/sna_video_sprite.c
index 8b7ae8ae..bb7b200b 100644
--- a/src/sna/sna_video_sprite.c
+++ b/src/sna/sna_video_sprite.c
@@ -228,6 +228,52 @@ update_dst_box_to_crtc_coords(struct sna *sna, xf86CrtcPtr crtc, BoxPtr dstBox)
 	}
 }
 
+static uint32_t ckey_chan(uint32_t value, int weight)
+{
+	return value << 8 >> weight;
+}
+
+static uint32_t ckey_value_chan(uint32_t value, uint32_t mask,
+				int offset, int weight)
+{
+	return ckey_chan((value & mask) >> offset, weight);
+}
+
+static uint32_t ckey_value(struct sna *sna,
+			   struct sna_video *video)
+{
+	ScrnInfoPtr scrn = sna->scrn;
+	uint32_t r, g ,b;
+
+	if (scrn->depth == 8) {
+		r = g = b = video->color_key & 0xff;
+	} else {
+		r = ckey_value_chan(video->color_key, scrn->mask.red,
+				    scrn->offset.red, scrn->weight.red);
+		g = ckey_value_chan(video->color_key, scrn->mask.green,
+				    scrn->offset.green, scrn->weight.green);
+		b = ckey_value_chan(video->color_key, scrn->mask.blue,
+				    scrn->offset.blue, scrn->weight.blue);
+	}
+
+	return r << 16 | g << 8 | b;
+}
+
+static uint32_t ckey_mask_chan(int weight)
+{
+	return ckey_chan((1 << weight) - 1, weight);
+}
+
+static uint32_t ckey_mask(struct sna *sna)
+{
+	ScrnInfoPtr scrn = sna->scrn;
+	uint32_t r = ckey_mask_chan(scrn->weight.red);
+	uint32_t g = ckey_mask_chan(scrn->weight.green);
+	uint32_t b = ckey_mask_chan(scrn->weight.blue);
+
+	return 0x7 << 24 | r << 16 | g << 8 | b;
+}
+
 static bool
 sna_video_sprite_show(struct sna *sna,
 		      struct sna_video *video,
@@ -260,9 +306,9 @@ sna_video_sprite_show(struct sna *sna,
 		     __FUNCTION__, video->color_key));
 
 		set.plane_id = s.plane_id;
-		set.min_value = video->color_key;
-		set.max_value = video->color_key; /* not used for destkey */
-		set.channel_mask = 0x7 << 24 | 0xff << 16 | 0xff << 8 | 0xff << 0;
+		set.min_value = ckey_value(sna, video);
+		set.max_value = 0; /* not used for destkey */
+		set.channel_mask = ckey_mask(sna);
 		set.flags = 0;
 		if (!video->AlwaysOnTop)
 			set.flags |= 1 << 1; /* COLORKEY_DESTINATION */


More information about the xorg-commit mailing list