[igt-dev] [v2] tests/kms_color: Fix CRC mismatch issues with ctm test
Shankar, Uma
uma.shankar at intel.com
Mon Mar 25 10:40:18 UTC 2019
>-----Original Message-----
>From: Landwerlin, Lionel G
>Sent: Monday, March 25, 2019 3:46 PM
>To: Shankar, Uma <uma.shankar at intel.com>; igt-dev at lists.freedesktop.org
>Cc: Syrjala, Ville <ville.syrjala at intel.com>; Lankhorst, Maarten
><maarten.lankhorst at intel.com>
>Subject: Re: [igt-dev] [v2] tests/kms_color: Fix CRC mismatch issues with ctm test
>
>On 25/03/2019 06:36, Shankar, Uma wrote:
>>
>>> -----Original Message-----
>>> From: Landwerlin, Lionel G
>>> Sent: Monday, March 25, 2019 7:11 AM
>>> To: Shankar, Uma <uma.shankar at intel.com>;
>>> igt-dev at lists.freedesktop.org
>>> Cc: Syrjala, Ville <ville.syrjala at intel.com>; Lankhorst, Maarten
>>> <maarten.lankhorst at intel.com>
>>> Subject: Re: [igt-dev] [v2] tests/kms_color: Fix CRC mismatch issues
>>> with ctm test
>>>
>>> When degamma & gamma LUTs are disabled & CTM is enabled, i915
>>> programs a linear table in the degamma/gamma LUTs :
>>>
>>> https://cgit.freedesktop.org/drm/drm-
>>> intel/tree/drivers/gpu/drm/i915/intel_color.c#n463
>>> https://cgit.freedesktop.org/drm/drm-
>>> intel/tree/drivers/gpu/drm/i915/intel_color.c#n495
>>>
>>> All the values programmed are in u16 range which is also what
>>> userspace can program (this applies to BDW/SKL/KBL).
>>> What is it that the kernel is able to program but not userspace?
>> Hi Lionel,
>> Issue is with representing 1.0 which needs a 3.16 kind of
>> representation. So directly doing it in Kernel to program linear luts using below:
>> for (i = 0; i < lut_size; i++) {
>> u32 v = (i * (1 << 16)) / (lut_size - 1);
>> I915_WRITE(PRE_CSC_GAMC_DATA(pipe), v);
>> }
>> takes care of the corner case. The ABI is getting extended and we will
>> need higher precision luts, but for now due to lack of it, putting the same to be
>done in driver.
>>
>> Regards,
>> Uma Shankar
>
>
>Hi Uma,
>
>This is for GLK right?
>What about the failures on KBL/SKL?
>
>There the hardware doesn't have fixed point values.
On Gen9, it uses bdw_load_gamma_lut function. For all values its good, but when
it comes to programming GCMAX, ABI fells short:
I915_WRITE(PREC_PAL_GC_MAX(pipe, 0), (1 << 16) - 1);
I915_WRITE(PREC_PAL_GC_MAX(pipe, 1), (1 << 16) - 1);
I915_WRITE(PREC_PAL_GC_MAX(pipe, 2), (1 << 16) - 1);
This expects input in U1.16 format. This may be the reason we are seeing this issue on
Gen9 as well.
Regards,
Uma Shankar
>Thanks,
>
>-Lionel
>
>
>>
>>> -Lionel
>>>
>>> On 24/03/2019 17:55, Uma Shankar wrote:
>>>> Due to Gamma/Degamma limitation with precision (lack of exact 1.0
>>>> representation) due to ABI restriction, applying linear gamma
>>>> affects crc. This patch fixes the same by making ctm tests
>>>> independant of gamma/degamma.
>>>>
>>>> v2: Disable degamma/gamma programming for ctm max test as it leads
>>>> to crc mimsmatch. Limiting it to this test case alone as other tests
>>>> need it to be enabled, hence not touching those scenarios.
>>>>
>>>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108147
>>>> Signed-off-by: Uma Shankar <uma.shankar at intel.com>
>>>> ---
>>>> tests/kms_color.c | 16 ++++++++++++++--
>>>> 1 file changed, 14 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/tests/kms_color.c b/tests/kms_color.c index
>>>> decf3c2..93560d4 100644
>>>> --- a/tests/kms_color.c
>>>> +++ b/tests/kms_color.c
>>>> @@ -696,8 +696,15 @@ static bool test_pipe_ctm(data_t *data,
>>>> igt_assert(fb_modeset_id);
>>>> igt_plane_set_fb(primary, &fb_modeset);
>>>>
>>>> - set_degamma(data, primary->pipe, degamma_linear);
>>>> - set_gamma(data, primary->pipe, gamma_linear);
>>>> + /*
>>>> + * Don't program LUT's for max CTM cases as limitation of
>>>> + * representing 1.0 due to ABI limits causes crc mismatch
>>>> + */
>>>> + if (memcmp(before, after, sizeof(color_t)))
>>>> + set_degamma(data, primary->pipe, degamma_linear);
>>>> + set_gamma(data, primary->pipe, gamma_linear);
>>>> + }
>>>> +
>>>> disable_ctm(primary->pipe);
>>>> igt_display_commit(&data->display);
>>>>
>>>> @@ -1005,6 +1012,11 @@ run_tests_for_pipe(data_t *data, enum pipe p)
>>>> * produce with an 8 bits per color framebuffer. */
>>>> igt_require(!IS_CHERRYVIEW(data->devid));
>>>>
>>>> + /* Disable and let default luts be applied by kernel */
>>>> + disable_degamma(primary->pipe);
>>>> + disable_gamma(primary->pipe);
>>>> + igt_display_commit(&data->display);
>>>> +
>>>> igt_assert(test_pipe_ctm(data, primary, red_green_blue,
>>>> full_rgb, ctm));
>>>> }
>
More information about the igt-dev
mailing list