[PATCH i-g-t v4 5/7] benchmarks/kms_fb_stress: Don't paint the FB's if the format is not supported by Pixman
Arthur Grillo
arthurgrillo at riseup.net
Mon Apr 22 22:05:44 UTC 2024
On 19/04/24 12:00, Kamil Konieczny wrote:
> Hi Arthur,
> On 2024-04-11 at 15:51:15 -0300, Arthur Grillo wrote:
>> Pixman requires strides to be divisible by sizeof(uint32_t).
>> So, don't paint the FB's if the stride is not.
>
> Why are you limiting stress to pixman? What about an option for
Actually I'm not. I do the stress, I just don't paint the FB's, due to
the pixman limitation.
Best Regards,
~Arthur Grillo
> non-dword aligned stress benchmark? Btw most hardware use dword
> or qword alignment.
>
>>
>> Signed-off-by: Arthur Grillo <arthurgrillo at riseup.net>
>> ---
>> benchmarks/kms_fb_stress.c | 62 +++++++++++++++++++++++++++++++++++-----------
>> 1 file changed, 48 insertions(+), 14 deletions(-)
>>
>> diff --git a/benchmarks/kms_fb_stress.c b/benchmarks/kms_fb_stress.c
>> index 76e82e0d76ea..bb85dfb18d2b 100644
>> --- a/benchmarks/kms_fb_stress.c
>> +++ b/benchmarks/kms_fb_stress.c
>> @@ -46,26 +46,60 @@ static void plane_setup(struct plane_t *plane, int index)
>> igt_plane_set_fb(plane->base, &plane->fbs[index]);
>> }
>>
>> +static bool have_supported_pixman_stride(int fd, struct plane_t *plane) {
>> + unsigned stride;
>> +
>> + igt_calc_fb_size(fd, plane->rect.width, plane->rect.height,
>> + plane->format, DRM_FORMAT_MOD_LINEAR,
>> + NULL, &stride);
>> +
>> + return stride % sizeof(uint32_t) == 0;
>
> I do not see int this function pixman related ioctl, all you
> do is checking stride is dword aligned, imho it would be better
> to rename this function, like has_stride_dw_aligned (you are
> free to find out better name).
>
>> +}
>> +
>> static void gen_fbs(struct data_t *data)
>> {
>> struct kms_t *kms = &data->kms;
>> drmModeModeInfo *mode = igt_output_get_mode(data->wb_output);
>>
>> for (int i = 0; i < NUM_FBS; i++) {
>> - igt_create_color_fb(data->fd, kms->primary.rect.width, kms->primary.rect.height,
>> - kms->primary.format, DRM_FORMAT_MOD_LINEAR,
>> - !i, i, i,
>> - &kms->primary.fbs[i]);
>> -
>> - igt_create_color_fb(data->fd, kms->overlay_a.rect.width, kms->overlay_a.rect.height,
>> - kms->overlay_a.format, DRM_FORMAT_MOD_LINEAR,
>> - i, !i, i,
>> - &kms->overlay_a.fbs[i]);
>> -
>> - igt_create_color_fb(data->fd, kms->overlay_b.rect.width, kms->overlay_b.rect.height,
>> - kms->overlay_b.format, DRM_FORMAT_MOD_LINEAR,
>> - i, i, !i,
>> - &kms->overlay_b.fbs[i]);
>> + if (have_supported_pixman_stride(data->fd, &kms->primary)) {
>> + igt_create_color_fb(data->fd,
>> + kms->primary.rect.width, kms->primary.rect.height,
>> + kms->primary.format, DRM_FORMAT_MOD_LINEAR,
>> + !i, i, i,
>> + &kms->primary.fbs[i]);
>> + } else {
>> + igt_create_fb(data->fd,
>> + kms->primary.rect.width, kms->primary.rect.height,
>> + kms->primary.format, DRM_FORMAT_MOD_LINEAR,
>> + &kms->primary.fbs[i]);
>> + }
>> +
>> + if (have_supported_pixman_stride(data->fd, &kms->overlay_a)) {
>> + igt_create_color_fb(data->fd,
>> + kms->overlay_a.rect.width, kms->overlay_a.rect.height,
>> + kms->overlay_a.format, DRM_FORMAT_MOD_LINEAR,
>> + i, !i, i,
>> + &kms->overlay_a.fbs[i]);
>> + } else {
>> + igt_create_fb(data->fd,
>> + kms->overlay_a.rect.width, kms->overlay_a.rect.height,
>> + kms->overlay_a.format, DRM_FORMAT_MOD_LINEAR,
>> + &kms->overlay_a.fbs[i]);
>> + }
>
> It looks like repeating code, maybe create a function?
>
> Regards,
> Kamil
>
>> +
>> + if (have_supported_pixman_stride(data->fd, &kms->overlay_b)) {
>> + igt_create_color_fb(data->fd,
>> + kms->overlay_b.rect.width, kms->overlay_b.rect.height,
>> + kms->overlay_b.format, DRM_FORMAT_MOD_LINEAR,
>> + i, i, !i,
>> + &kms->overlay_b.fbs[i]);
>> + } else {
>> + igt_create_fb(data->fd,
>> + kms->overlay_b.rect.width, kms->overlay_b.rect.height,
>> + kms->overlay_b.format, DRM_FORMAT_MOD_LINEAR,
>> + &kms->overlay_b.fbs[i]);
>> + }
>>
>> kms->writeback.rect.width = mode->hdisplay;
>> kms->writeback.rect.height = mode->vdisplay;
>>
>> --
>> 2.44.0
>>
More information about the igt-dev
mailing list