2018년 09월 13일 17:49에 Marek Szyprowski 이(가) 쓴 글:
> 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).

Right, this is why I commented like below before,
 "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."

As you can see, only Y(luma) size limit will be provided to user space, and I'm 
saying about CbCr(chroma) size limit.
Anyway, this is a trivial thing. 16 pixels limit for CbCr would be no problem 
although really a little bit memory is wasted.

Thanks,
Inki Dae

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

Reply via email to