All of lore.kernel.org
 help / color / mirror / Atom feed
From: Igor Torrente <igormtorrente@gmail.com>
To: Thomas Zimmermann <tzimmermann@suse.de>,
	rodrigosiqueiramelo@gmail.com, melissa.srw@gmail.com,
	ppaalanen@gmail.com
Cc: hamohammed.sa@gmail.com, airlied@linux.ie,
	tales.aparecida@gmail.com, dri-devel@lists.freedesktop.org,
	leandro.ribeiro@collabora.com, ~lkcamp/patches@lists.sr.ht
Subject: Re: [PATCH v5 8/9] drm: vkms: Adds XRGB_16161616 and ARGB_1616161616 formats
Date: Tue, 10 May 2022 17:32:36 -0300	[thread overview]
Message-ID: <1328f047-205f-114e-e387-8b9697639096@gmail.com> (raw)
In-Reply-To: <9ad6a743-5009-9fa4-b738-d664ec71a8da@suse.de>

Hi Thomas

On 5/7/22 04:32, Thomas Zimmermann wrote:
> Hi
> 
> Am 04.04.22 um 22:45 schrieb Igor Torrente:
>> This will be useful to write tests that depends on these formats.
>>
>> ARGB and XRGB follows the a similar implementation of the former formats.
>> Just adjusting for 16 bits per channel.
>>
>> V3: Adapt the handlers to the new format introduced in patch 7 V3.
>> V5: Minor improvements
>>       Added le16_to_cpu/cpu_to_le16 to the 16 bits color read/writes.
> 
> Is there something we could add to the DRM's format-conversion helpers?

I don't believe there's anything reusable.

Correct if I'm wrong, but from what I understood, these 
format-conversion functions don't seem compatible. The Vkms functions 
are converting to/from an internal format (struct pixel_argb_u16) while 
the functions from `drm_format_helper.c` are converting between two DRM 
formats.

I don't think these vkms format functions are useful to other drivers.

> 
> Best regards
> Thomas
> 	
>>
>> Signed-off-by: Igor Torrente <igormtorrente@gmail.com>
>> ---
>>    drivers/gpu/drm/vkms/vkms_formats.c   | 77 +++++++++++++++++++++++++++
>>    drivers/gpu/drm/vkms/vkms_plane.c     |  5 +-
>>    drivers/gpu/drm/vkms/vkms_writeback.c |  2 +
>>    3 files changed, 83 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/vkms/vkms_formats.c b/drivers/gpu/drm/vkms/vkms_formats.c
>> index 931a61405d6a..8d913fa7dbde 100644
>> --- a/drivers/gpu/drm/vkms/vkms_formats.c
>> +++ b/drivers/gpu/drm/vkms/vkms_formats.c
>> @@ -78,6 +78,41 @@ static void XRGB8888_to_argb_u16(struct line_buffer *stage_buffer,
>>    	}
>>    }
>>    
>> +static void ARGB16161616_to_argb_u16(struct line_buffer *stage_buffer,
>> +				     const struct vkms_frame_info *frame_info,
>> +				     int y)
>> +{
>> +	struct pixel_argb_u16 *out_pixels = stage_buffer->pixels;
>> +	u16 *src_pixels = get_packed_src_addr(frame_info, y);
>> +	int x, x_limit = min_t(size_t, drm_rect_width(&frame_info->dst),
>> +			       stage_buffer->n_pixels);
>> +
>> +	for (x = 0; x < x_limit; x++, src_pixels += 4) {
>> +		out_pixels[x].a = le16_to_cpu(src_pixels[3]);
>> +		out_pixels[x].r = le16_to_cpu(src_pixels[2]);
>> +		out_pixels[x].g = le16_to_cpu(src_pixels[1]);
>> +		out_pixels[x].b = le16_to_cpu(src_pixels[0]);
>> +	}
>> +}
>> +
>> +static void XRGB16161616_to_argb_u16(struct line_buffer *stage_buffer,
>> +				     const struct vkms_frame_info *frame_info,
>> +				     int y)
>> +{
>> +	struct pixel_argb_u16 *out_pixels = stage_buffer->pixels;
>> +	u16 *src_pixels = get_packed_src_addr(frame_info, y);
>> +	int x, x_limit = min_t(size_t, drm_rect_width(&frame_info->dst),
>> +			       stage_buffer->n_pixels);
>> +
>> +	for (x = 0; x < x_limit; x++, src_pixels += 4) {
>> +		out_pixels[x].a = (u16)0xffff;
>> +		out_pixels[x].r = le16_to_cpu(src_pixels[2]);
>> +		out_pixels[x].g = le16_to_cpu(src_pixels[1]);
>> +		out_pixels[x].b = le16_to_cpu(src_pixels[0]);
>> +	}
>> +}
>> +
>> +
>>    /*
>>     * The following  functions take an line of argb_u16 pixels from the
>>     * src_buffer, convert them to a specific format, and store them in the
>> @@ -130,12 +165,50 @@ static void argb_u16_to_XRGB8888(struct vkms_frame_info *frame_info,
>>    	}
>>    }
>>    
>> +static void argb_u16_to_ARGB16161616(struct vkms_frame_info *frame_info,
>> +				     const struct line_buffer *src_buffer, int y)
>> +{
>> +	int x, x_dst = frame_info->dst.x1;
>> +	u16 *dst_pixels = packed_pixels_addr(frame_info, x_dst, y);
>> +	struct pixel_argb_u16 *in_pixels = src_buffer->pixels;
>> +	int x_limit = min_t(size_t, drm_rect_width(&frame_info->dst),
>> +			    src_buffer->n_pixels);
>> +
>> +	for (x = 0; x < x_limit; x++, dst_pixels += 4) {
>> +		dst_pixels[3] = cpu_to_le16(in_pixels[x].a);
>> +		dst_pixels[2] = cpu_to_le16(in_pixels[x].r);
>> +		dst_pixels[1] = cpu_to_le16(in_pixels[x].g);
>> +		dst_pixels[0] = cpu_to_le16(in_pixels[x].b);
>> +	}
>> +}
>> +
>> +static void argb_u16_to_XRGB16161616(struct vkms_frame_info *frame_info,
>> +				     const struct line_buffer *src_buffer, int y)
>> +{
>> +	int x, x_dst = frame_info->dst.x1;
>> +	u16 *dst_pixels = packed_pixels_addr(frame_info, x_dst, y);
>> +	struct pixel_argb_u16 *in_pixels = src_buffer->pixels;
>> +	int x_limit = min_t(size_t, drm_rect_width(&frame_info->dst),
>> +			    src_buffer->n_pixels);
>> +
>> +	for (x = 0; x < x_limit; x++, dst_pixels += 4) {
>> +		dst_pixels[3] = (u8)0xffff;
>> +		dst_pixels[2] = cpu_to_le16(in_pixels[x].r);
>> +		dst_pixels[1] = cpu_to_le16(in_pixels[x].g);
>> +		dst_pixels[0] = cpu_to_le16(in_pixels[x].b);
>> +	}
>> +}
>> +
>>    plane_format_transform_func get_plane_fmt_transform_function(u32 format)
>>    {
>>    	if (format == DRM_FORMAT_ARGB8888)
>>    		return &ARGB8888_to_argb_u16;
>>    	else if (format == DRM_FORMAT_XRGB8888)
>>    		return &XRGB8888_to_argb_u16;
>> +	else if (format == DRM_FORMAT_ARGB16161616)
>> +		return &ARGB16161616_to_argb_u16;
>> +	else if (format == DRM_FORMAT_XRGB16161616)
>> +		return &XRGB16161616_to_argb_u16;
>>    	else
>>    		return NULL;
>>    }
>> @@ -146,6 +219,10 @@ wb_format_transform_func get_wb_fmt_transform_function(u32 format)
>>    		return &argb_u16_to_ARGB8888;
>>    	else if (format == DRM_FORMAT_XRGB8888)
>>    		return &argb_u16_to_XRGB8888;
>> +	else if (format == DRM_FORMAT_ARGB16161616)
>> +		return &argb_u16_to_ARGB16161616;
>> +	else if (format == DRM_FORMAT_XRGB16161616)
>> +		return &argb_u16_to_XRGB16161616;
>>    	else
>>    		return NULL;
>>    }
>> diff --git a/drivers/gpu/drm/vkms/vkms_plane.c b/drivers/gpu/drm/vkms/vkms_plane.c
>> index 798243837fd0..60054a85204a 100644
>> --- a/drivers/gpu/drm/vkms/vkms_plane.c
>> +++ b/drivers/gpu/drm/vkms/vkms_plane.c
>> @@ -14,11 +14,14 @@
>>    
>>    static const u32 vkms_formats[] = {
>>    	DRM_FORMAT_XRGB8888,
>> +	DRM_FORMAT_XRGB16161616
>>    };
>>    
>>    static const u32 vkms_plane_formats[] = {
>>    	DRM_FORMAT_ARGB8888,
>> -	DRM_FORMAT_XRGB8888
>> +	DRM_FORMAT_XRGB8888,
>> +	DRM_FORMAT_XRGB16161616,
>> +	DRM_FORMAT_ARGB16161616
>>    };
>>    
>>    static struct drm_plane_state *
>> diff --git a/drivers/gpu/drm/vkms/vkms_writeback.c b/drivers/gpu/drm/vkms/vkms_writeback.c
>> index 97f71e784bbf..cb63a5da9af1 100644
>> --- a/drivers/gpu/drm/vkms/vkms_writeback.c
>> +++ b/drivers/gpu/drm/vkms/vkms_writeback.c
>> @@ -15,6 +15,8 @@
>>    
>>    static const u32 vkms_wb_formats[] = {
>>    	DRM_FORMAT_XRGB8888,
>> +	DRM_FORMAT_XRGB16161616,
>> +	DRM_FORMAT_ARGB16161616
>>    };
>>    
>>    static const struct drm_connector_funcs vkms_wb_connector_funcs = {
> 

  reply	other threads:[~2022-05-10 20:32 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-04 20:45 [PATCH v5 0/9] Add new formats support to vkms Igor Torrente
2022-04-04 20:45 ` [PATCH v5 1/9] drm: vkms: Alloc the compose frame using vzalloc Igor Torrente
2022-04-05 14:05   ` André Almeida
2022-04-05 19:03     ` Igor Torrente
2022-04-04 20:45 ` [PATCH v5 2/9] drm: vkms: Replace hardcoded value of `vkms_composer.map` to DRM_FORMAT_MAX_PLANES Igor Torrente
2022-04-04 20:45 ` [PATCH v5 3/9] drm: vkms: Rename `vkms_composer` to `vkms_frame_info` Igor Torrente
2022-04-04 20:45 ` [PATCH v5 4/9] drm: drm_atomic_helper: Add a new helper to deal with the writeback connector validation Igor Torrente
2022-04-05 14:21   ` André Almeida
2022-04-05 19:05     ` Igor Torrente
2022-04-04 20:45 ` [PATCH v5 5/9] drm: vkms: Add fb information to `vkms_writeback_job` Igor Torrente
2022-04-20 11:23   ` Pekka Paalanen
2022-04-23 15:12     ` Igor Torrente
2022-04-25  7:56       ` Pekka Paalanen
2022-04-26  0:56         ` Igor Torrente
2022-04-26  7:09           ` Pekka Paalanen
2022-04-27  0:43             ` Igor Torrente
2022-04-27  7:31               ` Pekka Paalanen
2022-04-04 20:45 ` [PATCH v5 6/9] drm: vkms: Refactor the plane composer to accept new formats Igor Torrente
2022-04-20 12:36   ` Pekka Paalanen
2022-04-23 16:04     ` Igor Torrente
2022-04-23 18:53       ` Igor Torrente
2022-04-25  8:10         ` Pekka Paalanen
2022-04-26  1:54           ` Igor Torrente
2022-04-27  1:03             ` Igor Torrente
2022-04-27  1:22               ` Igor Torrente
2022-04-27  7:43                 ` Pekka Paalanen
2022-04-28  0:44                   ` Igor Torrente
2022-04-29 12:31                     ` Pekka Paalanen
2022-04-04 20:45 ` [PATCH v5 7/9] drm: vkms: Supports to the case where primary plane doesn't match the CRTC Igor Torrente
2022-04-20 13:13   ` Pekka Paalanen
2022-04-24  0:41     ` Igor Torrente
2022-04-04 20:45 ` [PATCH v5 8/9] drm: vkms: Adds XRGB_16161616 and ARGB_1616161616 formats Igor Torrente
2022-04-20 13:19   ` Pekka Paalanen
2022-05-07  7:32   ` Thomas Zimmermann
2022-05-10 20:32     ` Igor Torrente [this message]
2022-04-04 20:45 ` [PATCH v5 9/9] drm: vkms: Add support to the RGB565 format Igor Torrente
2022-04-21 10:58   ` Pekka Paalanen
2022-04-27  0:53     ` Igor Torrente
2022-04-27  7:55       ` Pekka Paalanen
2022-05-06 23:05         ` Igor Torrente
2022-05-09  7:53           ` Pekka Paalanen
2022-05-10 19:24             ` Igor Torrente
2022-06-13  9:52 ` [PATCH v5 0/9] Add new formats support to vkms Melissa Wen
2022-06-13 20:26   ` Igor Torrente

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1328f047-205f-114e-e387-8b9697639096@gmail.com \
    --to=igormtorrente@gmail.com \
    --cc=airlied@linux.ie \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=hamohammed.sa@gmail.com \
    --cc=leandro.ribeiro@collabora.com \
    --cc=melissa.srw@gmail.com \
    --cc=ppaalanen@gmail.com \
    --cc=rodrigosiqueiramelo@gmail.com \
    --cc=tales.aparecida@gmail.com \
    --cc=tzimmermann@suse.de \
    --cc=~lkcamp/patches@lists.sr.ht \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.