[igt-dev] [PATCH i-g-t] tests/kms_plane_alpha_blend: Fix alpha in coverage-vs-premult-vs-constant

Juha-Pekka Heikkila juhapekka.heikkila at gmail.com
Fri Jun 18 10:26:19 UTC 2021


Have you tried looking if on kernel side in intel_display.c 
icl_set_pipe_chicken(..) those icl related WAs have effect on your crc 
problem. Sound like setting PER_PIXEL_ALPHA_BYPASS_EN and 
PIXEL_ROUNDING_TRUNC_FB_PASSTHRU touch exactly the problem you are 
seeing. Maybe different hw revision behave differently? Try see if 
there's on spec some note for your HW revision for these WAs.

/Juha-Pekka

On 18.6.2021 11.58, Srinivas, Vidya wrote:
> Thank you so much Juha-Pekka.
> 
> https://patchwork.freedesktop.org/patch/436194/?series=90828&rev=2 just removes the DRM_PLANE_TYPE_PRIMARY fb setting from subtest
> That works. Would that be an okay change?
> 
> Because without the commit after PRIMARY and alpha value 0x7e, JSL is failing. If we just don’t do the PRIMARY fb setting at start, test works as is.
> 
> Kindly suggest. Thank you very much once again.
> 
> Regards
> Vidya
> 
> -----Original Message-----
> From: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
> Sent: Friday, June 18, 2021 2:23 PM
> To: Srinivas, Vidya <vidya.srinivas at intel.com>; igt-dev at lists.freedesktop.org
> Cc: Latvala, Petri <petri.latvala at intel.com>; Lin, Charlton <charlton.lin at intel.com>
> Subject: Re: [igt-dev] [PATCH i-g-t] tests/kms_plane_alpha_blend: Fix alpha in coverage-vs-premult-vs-constant
> 
> On 11.6.2021 15.44, Vidya Srinivas wrote:
>> Patch sets alpha to 0x7e for coverage, Pre-multiplied and constant as
>> per the buffer being created initially in prepare_crtc. Patch also add
>> commit after setting fb on primary plane. Without this change CRC
>> mismatch is seen on few Gen11 systems.
>>
>> Signed-off-by: Vidya Srinivas <vidya.srinivas at intel.com>
>> ---
>>    tests/kms_plane_alpha_blend.c | 9 +++++++--
>>    1 file changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/tests/kms_plane_alpha_blend.c
>> b/tests/kms_plane_alpha_blend.c index a37cb27c7d62..d3a73cf43fcd
>> 100644
>> --- a/tests/kms_plane_alpha_blend.c
>> +++ b/tests/kms_plane_alpha_blend.c
>> @@ -448,29 +448,34 @@ static void coverage_premult_constant(data_t *data, enum pipe pipe, igt_plane_t
>>    	igt_crc_t ref_crc = {}, crc = {};
>>    
>>    	/* Set a background color on the primary fb for testing */
>> -	if (plane->type != DRM_PLANE_TYPE_PRIMARY)
>> +	if (plane->type != DRM_PLANE_TYPE_PRIMARY) {
>>    		igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[pipe],
>> DRM_PLANE_TYPE_PRIMARY), &data->gray_fb);
>> +		igt_display_commit2(display, COMMIT_ATOMIC);
> 
> Why this extra commit needed? There's just below commit before crc is started
> 
>> +	}
>>    
>>    	igt_plane_set_prop_enum(plane, IGT_PLANE_PIXEL_BLEND_MODE,
>> "Coverage");
>> +	igt_plane_set_prop_value(plane, IGT_PLANE_ALPHA, 0x7e);
> 
> On this test there's already per pixel alpha, setting plane alpha values so low will probably in this case in final rounding make these planes completely invisible. I'd suspect you can get any image pass crc doing it like this. Likely what you see on screen with these values is just pure grey instead of intended test image.
> 
> 
>>    	igt_plane_set_fb(plane, &data->argb_fb_cov_7e);
>>    	igt_display_commit2(display, COMMIT_ATOMIC);
>>    	igt_pipe_crc_start(data->pipe_crc);
>>    	igt_pipe_crc_get_single(data->pipe_crc, &ref_crc);
>>    
>>    	igt_plane_set_prop_enum(plane, IGT_PLANE_PIXEL_BLEND_MODE,
>> "Pre-multiplied");
>> +	igt_plane_set_prop_value(plane, IGT_PLANE_ALPHA, 0x7e);
>>    	igt_plane_set_fb(plane, &data->argb_fb_7e);
>>    	igt_display_commit2(display, COMMIT_ATOMIC);
>>    	igt_pipe_crc_get_current(display->drm_fd, data->pipe_crc, &crc);
>>    	igt_assert_crc_equal(&ref_crc, &crc);
>>    
>>    	igt_plane_set_prop_enum(plane, IGT_PLANE_PIXEL_BLEND_MODE, "None");
>> -	igt_plane_set_prop_value(plane, IGT_PLANE_ALPHA, 0x7e7e);
>> +	igt_plane_set_prop_value(plane, IGT_PLANE_ALPHA, 0x7e);
>>    	igt_plane_set_fb(plane, &data->argb_fb_cov_7e);
>>    	igt_display_commit2(display, COMMIT_ATOMIC);
>>    	igt_pipe_crc_get_current(display->drm_fd, data->pipe_crc, &crc);
>>    	igt_assert_crc_equal(&ref_crc, &crc);
>>    
>>    	igt_pipe_crc_stop(data->pipe_crc);
>> +
> 
> stray new line
> 
>>    }
>>    
>>    static void run_test_on_pipe_planes(data_t *data, enum pipe pipe,
>> bool blend,
>>
> 



More information about the igt-dev mailing list