Hi Inki,

On 2018-09-13 10:23, Inki Dae wrote:
> 2018년 09월 13일 17:03에 Marek Szyprowski 이(가) 쓴 글:
>> On 2018-09-13 07:14, Inki Dae wrote:
>>> 2018년 09월 12일 15:59에 Andrzej Pietrasiewicz 이(가) 쓴 글:
>>>> W dniu 12.09.2018 o 01:54, Inki Dae pisze:
>>>>> Hi Marek and Andrzej,
>>>>>
>>>>> 2018년 08월 10일 22:29에 Marek Szyprowski 이(가) 쓴 글:
>>>>>> From: Andrzej Pietrasiewicz <andrze...@samsung.com>
>>>>>>
>>>>>> Add support for 16x16 tiled formats: NV12/NV21, YUYV and YUV420.
>>>> <snip>
>>>>
>>>>>> -static u32 scaler_get_format(u32 drm_fmt)
>>>>>> +struct scaler_format {
>>>>>> +        u32     drm_fmt;
>>>>>> +        u32     internal_fmt;
>>>>>> +        u32     chroma_tile_w;
>>>>>> +        u32     chroma_tile_h;
>>>>>> +};
>>>>>> +
>>>>>> +static const struct scaler_format scaler_formats[] = {
>>>>>> +        { DRM_FORMAT_NV12, SCALER_YUV420_2P_UV, 8, 8 },
>>>>>> +        { DRM_FORMAT_NV21, SCALER_YUV420_2P_VU, 8, 8 },
>>>>>> +        { DRM_FORMAT_YUV420, SCALER_YUV420_3P, 8, 8 },
>>>>>> +        { DRM_FORMAT_YUYV, SCALER_YUV422_1P_YUYV, 16, 16 },
>>>>>> +        { DRM_FORMAT_UYVY, SCALER_YUV422_1P_UYVY, 16, 16 },
>>>>>> +        { DRM_FORMAT_YVYU, SCALER_YUV422_1P_YVYU, 16, 16 },
>>>>>> +        { DRM_FORMAT_NV16, SCALER_YUV422_2P_UV, 8, 16 },
>>>>>> +        { DRM_FORMAT_NV61, SCALER_YUV422_2P_VU, 8, 16 },
>>>>>> +        { DRM_FORMAT_YUV422, SCALER_YUV422_3P, 8, 16 },
>>>>>> +        { DRM_FORMAT_NV24, SCALER_YUV444_2P_UV, 16, 16 },
>>>>>> +        { DRM_FORMAT_NV42, SCALER_YUV444_2P_VU, 16, 16 },
>>>>>> +        { DRM_FORMAT_YUV444, SCALER_YUV444_3P, 16, 16 },
>>>>>> +        { DRM_FORMAT_RGB565, SCALER_RGB_565, 0, 0 },
>>>>>> +        { DRM_FORMAT_XRGB1555, SCALER_ARGB1555, 0, 0 },
>>>>>> +        { DRM_FORMAT_ARGB1555, SCALER_ARGB1555, 0, 0 },
>>>>>> +        { DRM_FORMAT_XRGB4444, SCALER_ARGB4444, 0, 0 },
>>>>>> +        { DRM_FORMAT_ARGB4444, SCALER_ARGB4444, 0, 0 },
>>>>>> +        { DRM_FORMAT_XRGB8888, SCALER_ARGB8888, 0, 0 },
>>>>>> +        { DRM_FORMAT_ARGB8888, SCALER_ARGB8888, 0, 0 },
>>>>>> +        { DRM_FORMAT_RGBX8888, SCALER_RGBA8888, 0, 0 },
>>>>>> +        { DRM_FORMAT_RGBA8888, SCALER_RGBA8888, 0, 0 },
>>>>> Seems the tile size of each format you declared above is wrong.
>>>>> According to data sheet for Exynos5420/5422/5433, each plane has 
>>>>> different tile size.
>>>>> I.e., SACLE_YUV420_2P_UV/VU has two planes, and Y plane has 16 x 16 tile 
>>>>> size but U and V plane have 8 x 8 tile size each other.
>>>>>
>>>>> However, above declaration has only one tile size
>>>> true, but the members of struct scaler_format are called
>>>>
>>>> _____chroma_____tile_w/h
>>>>
>>>>> and it means that each plane has always same tile size.
>>>> this conclusion is not justified
>>>>
>>>>> And also RGB formats have 16 x 16 tile size in tile mode but you declared 
>>>>> it as 0.
>>>> The data sheet says, that all formats have the same Y/RGB tile size
>>>> and it is always 16x16. That is why only chroma tile size is remembered,
>>>> because only chroma tile size can be different between formats.
>>> Ok, chroma_tile_h/w are used to calculate only the position of the chroma 
>>> buffer.
>>>
>>> By the way, user space would want to know the size limit in tiled mode so 
>>> that they can allocate each buffer for Y(luma) and CbCr(chroma).
>>> However, below code would provide Y/RGB tile size limit - 16 - to user 
>>> space,
>>> static const struct drm_exynos_ipp_limit scaler_5420_tile_limits[] = {
>>>            { IPP_SIZE_LIMIT(BUFFER, .h = { 16, SZ_8K }, .v = { 16, SZ_8K 
>>> })},
>>>            { IPP_SIZE_LIMIT(AREA, .h.align = 16, .v.align = 16) },
>>>
>>> It would mean that user space will allocate 16 pixels aligned buffer even 
>>> for chroma but the actual size limit of it would be 8 pixels in case of 
>>> SCALE_YUV420_WP_UV/VU foramt.
>>> Is there some code I'm missing?
>> Userspace knows everything needed to allocate proper buffers. Those
> How does user space know everything? Actually, the size of each plane in 
> tiled mode would depend on Hardware, Scaler device in our case. Is there 
> something user space can know it explictly? Or you mean they can know it 
> implictly?

The size of each plane depends on the selected pixel format only. If you 
select DRM_FORMAT_NV12 + DRM_FORMAT_MOD_SAMSUNG_16_16_TILE modifier, 
then this unambiguously defines buffer size for each plane. Hardware has 
nothing to change here. Userspace can even query if given IPP module 
supports such pixel+modifier combo and get alignment requirements for it.

>> limits describes size of the image buffers in pixels. The size of each
>> plane (luma or chroma if exists for given format) in bytes directly
>> comes out of the selected pixel format (fourcc).
> fourcc would say the size not considered for the Hardware limit.

Alignment can be queried by userspace via get EXYNOS_IPP_GET_LIMITS 
ioctl. It provides limits for given pixel format + tile modifier combo, 
although in case of Exynos Scaler, the alignment requirements are simple 
result of the tiled format definition (tiled formats are typically 
defined only for width/height matching multiples of single tile size).

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to