mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-05-08 12:48:05 +02:00
util: pattern: Add support to fill_simple_patterns for P01[016] and S01[026]
Adds support to fill_simple_patterns for the P010, P012, and P016 2-plane YUV420 formats, and the S010, S012, and S016 3-plane YUV420 formats. Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
This commit is contained in:
parent
a90a8f51dc
commit
7a62a5bb91
1 changed files with 38 additions and 0 deletions
|
|
@ -2266,6 +2266,36 @@ static void insert_value_yuv_planar_10bpp(const struct util_format_info *info,
|
|||
0xfffff << bit_start);
|
||||
}
|
||||
|
||||
static void insert_value_yuv_planar_16bpp(const struct util_format_info *info,
|
||||
void *planes[3], unsigned int stride,
|
||||
unsigned int x, unsigned int y,
|
||||
const struct color_rgba* color)
|
||||
{
|
||||
struct color_yuv val = MAKE_YUV_601(color->red, color->green, color->blue);
|
||||
const struct util_yuv_info *yuv = &info->yuv;
|
||||
unsigned int cs = yuv->chroma_stride;
|
||||
unsigned int xsub = yuv->xsub;
|
||||
unsigned int ysub = yuv->ysub;
|
||||
unsigned int chroma_offset = y / ysub;
|
||||
unsigned short *y_mem = planes[0] + (y * stride);
|
||||
unsigned short *u_mem = planes[1] + (chroma_offset * (stride * cs / xsub));
|
||||
unsigned short *v_mem = planes[2] + (chroma_offset * (stride * cs / xsub));
|
||||
|
||||
switch(info->format) {
|
||||
case DRM_FORMAT_P010:
|
||||
case DRM_FORMAT_P012:
|
||||
case DRM_FORMAT_P016:
|
||||
v_mem = info->yuv.order & YUV_YCrCb ? u_mem : u_mem + 1;
|
||||
u_mem = info->yuv.order & YUV_YCbCr ? u_mem : u_mem + 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
y_mem[x] = val.y << yuv->shift;
|
||||
u_mem[x/xsub*cs] = val.u << yuv->shift;
|
||||
v_mem[x/xsub*cs] = val.v << yuv->shift;
|
||||
}
|
||||
|
||||
static void insert_value_rgb32(const struct util_format_info *info,
|
||||
void *planes[3], unsigned int stride,
|
||||
|
|
@ -2324,6 +2354,14 @@ static void fill_simple_patterns(const struct util_format_info *info,
|
|||
case DRM_FORMAT_NV30:
|
||||
func_insert_value = &insert_value_yuv_planar_10bpp;
|
||||
break;
|
||||
case DRM_FORMAT_P010:
|
||||
case DRM_FORMAT_P012:
|
||||
case DRM_FORMAT_P016:
|
||||
case DRM_FORMAT_S010:
|
||||
case DRM_FORMAT_S012:
|
||||
case DRM_FORMAT_S016:
|
||||
func_insert_value = &insert_value_yuv_planar_16bpp;
|
||||
break;
|
||||
case DRM_FORMAT_ARGB8888:
|
||||
case DRM_FORMAT_XRGB8888:
|
||||
case DRM_FORMAT_ABGR8888:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue