Quoting Ville Syrjala (2018-10-22 14:59:26) > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > 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@xxxxxxxxxxxxxxx> > --- > src/sna/sna_video_sprite.c | 52 +++++++++++++++++++++++++++++++++++--- > 1 file changed, 49 insertions(+), 3 deletions(-) > > diff --git a/src/sna/sna_video_sprite.c b/src/sna/sna_video_sprite.c > index 8b7ae8ae9e75..bb7b200b4dcc 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; Ok, making an 8bit value out of whatever input. > +} > + > +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); Makes sense. Reviewed-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx