• Ville Syrjälä's avatar
    drm/i915: Add support for CHV pipe B sprite CSC · 6ca2aeb2
    Ville Syrjälä authored
    CHV has a programmable CSC unit on the pipe B sprites. Program the unit
    appropriately for BT.601 limited range YCbCr to full range RGB color
    conversion. This matches the programming we currently do for sprites
    on the other pipes and on other platforms.
    
    It seems the CSC only works when the input data is YCbCr. For RGB
    pixel formats it doesn't matter what we program into the CSC registers.
    Doesn't make much sense to me especially since the register names give
    the impression that RGB input data would also work. But that's how
    it behaves here.
    
    In the review discussions there's been some nice math to explain the
    values obtained here. First about the YCbCr->RGB matrix:
    
    "I had the RGB->YCbCr matrix, inverted it and the values came out. But they
    should match the wikipedia article. Also keep in mind that the coefficients
    are in .12 in fixed point format, hence we need a 1<<12 factor. So let's
    try it:
    
    Kb=.114
    Kr=.299
    (1<<12) * 255/219 ~= 4769
    -(1<<12) * 255/112*(1-Kb)*Kb/(1-Kb-Kr) ~= -1605
    -(1<<12) * 255/112*(1-Kr)*Kr/(1-Kb-Kr) ~= -3330
    (1<<12) * 255/112*(1-Kr) ~= 6537
    (1<<12) * 255/112*(1-Kb) ~= 8263
    
    "Looks like the same values to me."
    
    And then about the limits used for clamping:
    
    "> where did you get these min/max?
    
    "The hardware apparently deals in 10bit values, so we need to multiply everything
    by 4 when we start with the 8bit min/max values.
    
    Y = [16:235] * 4 = [64:940]
    CbCr = ([16:240] - 128) * 4 = [-112:112] * 4 = [-448:448]
    
    "The -128 being the -0.5 bias that the hardware already applied before
    the data entered the CSC unit."
    
    Raw data is also supplied in 10bpc in the registers.
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Reviewed-by Rodrigo Vivi <rodrigo.vivi@intel.com>
    [danvet: Copypaste explanations&math from the review discussion.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    6ca2aeb2
intel_sprite.c 47.1 KB