mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-05-08 11:38:13 +02:00
modetest: util: Add support for P01[026] and S01[026] formats
Adds support for buffer allocation in the P010, P012, and P016 2-plane YUV420 10, 12, and 16 bit formats, and the S010, S012, and S016 3-plane YUV420 formats of the same bit depths. As all the pattern generation uses 8bit values, store a shift value for each format to denote how the 8 bit value needs to be altered to store in a 16bit word. Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
This commit is contained in:
parent
dd49ca7602
commit
aab9e6ae73
3 changed files with 28 additions and 1 deletions
|
|
@ -186,6 +186,12 @@ bo_create(int fd, unsigned int format,
|
|||
case DRM_FORMAT_VYUY:
|
||||
case DRM_FORMAT_YUYV:
|
||||
case DRM_FORMAT_YVYU:
|
||||
case DRM_FORMAT_P010:
|
||||
case DRM_FORMAT_P012:
|
||||
case DRM_FORMAT_P016:
|
||||
case DRM_FORMAT_S010:
|
||||
case DRM_FORMAT_S012:
|
||||
case DRM_FORMAT_S016:
|
||||
bpp = 16;
|
||||
break;
|
||||
|
||||
|
|
@ -231,6 +237,9 @@ bo_create(int fd, unsigned int format,
|
|||
case DRM_FORMAT_NV15:
|
||||
case DRM_FORMAT_YUV420:
|
||||
case DRM_FORMAT_YVU420:
|
||||
case DRM_FORMAT_S010:
|
||||
case DRM_FORMAT_S012:
|
||||
case DRM_FORMAT_S016:
|
||||
is_planar = true;
|
||||
xsub = 2;
|
||||
ysub = 2;
|
||||
|
|
@ -241,6 +250,9 @@ bo_create(int fd, unsigned int format,
|
|||
case DRM_FORMAT_NV20:
|
||||
case DRM_FORMAT_YUV422:
|
||||
case DRM_FORMAT_YVU422:
|
||||
case DRM_FORMAT_P010:
|
||||
case DRM_FORMAT_P012:
|
||||
case DRM_FORMAT_P016:
|
||||
is_planar = true;
|
||||
xsub = 2;
|
||||
ysub = 1;
|
||||
|
|
@ -303,6 +315,9 @@ bo_create(int fd, unsigned int format,
|
|||
case DRM_FORMAT_NV42:
|
||||
case DRM_FORMAT_NV20:
|
||||
case DRM_FORMAT_NV30:
|
||||
case DRM_FORMAT_P010:
|
||||
case DRM_FORMAT_P012:
|
||||
case DRM_FORMAT_P016:
|
||||
offsets[0] = 0;
|
||||
handles[0] = bo->handle;
|
||||
pitches[0] = bo->pitch;
|
||||
|
|
@ -320,6 +335,9 @@ bo_create(int fd, unsigned int format,
|
|||
case DRM_FORMAT_YVU422:
|
||||
case DRM_FORMAT_YUV444:
|
||||
case DRM_FORMAT_YVU444:
|
||||
case DRM_FORMAT_S010:
|
||||
case DRM_FORMAT_S012:
|
||||
case DRM_FORMAT_S016:
|
||||
offsets[0] = 0;
|
||||
handles[0] = bo->handle;
|
||||
pitches[0] = bo->pitch;
|
||||
|
|
|
|||
|
|
@ -36,7 +36,9 @@
|
|||
.rgb = { { (rl), (ro) }, { (gl), (go) }, { (bl), (bo) }, { (al), (ao) } }
|
||||
|
||||
#define MAKE_YUV_INFO(order, xsub, ysub, chroma_stride) \
|
||||
.yuv = { (order), (xsub), (ysub), (chroma_stride) }
|
||||
.yuv = { (order), (xsub), (ysub), (chroma_stride), 0 }
|
||||
#define MAKE_YUV_INFO_SHIFT(order, xsub, ysub, chroma_stride, shift) \
|
||||
.yuv = { (order), (xsub), (ysub), (chroma_stride), (shift) }
|
||||
|
||||
static const struct util_format_info format_info[] = {
|
||||
/* Indexed */
|
||||
|
|
@ -59,6 +61,9 @@ static const struct util_format_info format_info[] = {
|
|||
{ DRM_FORMAT_NV15, "NV15", MAKE_YUV_INFO(YUV_YCbCr, 2, 2, 2) },
|
||||
{ DRM_FORMAT_NV20, "NV20", MAKE_YUV_INFO(YUV_YCbCr, 2, 1, 2) },
|
||||
{ DRM_FORMAT_NV30, "NV30", MAKE_YUV_INFO(YUV_YCbCr, 1, 1, 2) },
|
||||
{ DRM_FORMAT_P010, "P010", MAKE_YUV_INFO_SHIFT(YUV_YCbCr, 2, 2, 2, 8) },
|
||||
{ DRM_FORMAT_P012, "P012", MAKE_YUV_INFO_SHIFT(YUV_YCbCr, 2, 2, 2, 8) },
|
||||
{ DRM_FORMAT_P016, "P016", MAKE_YUV_INFO_SHIFT(YUV_YCbCr, 2, 2, 2, 8) },
|
||||
/* YUV planar */
|
||||
{ DRM_FORMAT_YUV420, "YU12", MAKE_YUV_INFO(YUV_YCbCr, 2, 2, 1) },
|
||||
{ DRM_FORMAT_YVU420, "YV12", MAKE_YUV_INFO(YUV_YCrCb, 2, 2, 1) },
|
||||
|
|
@ -66,6 +71,9 @@ static const struct util_format_info format_info[] = {
|
|||
{ DRM_FORMAT_YVU422, "YV16", MAKE_YUV_INFO(YUV_YCrCb, 2, 1, 1) },
|
||||
{ DRM_FORMAT_YUV444, "YU24", MAKE_YUV_INFO(YUV_YCbCr, 1, 1, 1) },
|
||||
{ DRM_FORMAT_YVU444, "YV24", MAKE_YUV_INFO(YUV_YCrCb, 1, 1, 1) },
|
||||
{ DRM_FORMAT_S010, "S010", MAKE_YUV_INFO_SHIFT(YUV_YCbCr, 2, 2, 1, 2) },
|
||||
{ DRM_FORMAT_S012, "S012", MAKE_YUV_INFO_SHIFT(YUV_YCbCr, 2, 2, 1, 4) },
|
||||
{ DRM_FORMAT_S016, "S016", MAKE_YUV_INFO_SHIFT(YUV_YCbCr, 2, 2, 1, 8) },
|
||||
/* RGB8 */
|
||||
{ DRM_FORMAT_RGB332, "RGB8", MAKE_RGB_INFO(3, 5, 3, 2, 2, 0, 0, 0) },
|
||||
{ DRM_FORMAT_BGR233, "BGR8", MAKE_RGB_INFO(3, 0, 3, 3, 2, 6, 0, 0) },
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ struct util_yuv_info {
|
|||
unsigned int xsub;
|
||||
unsigned int ysub;
|
||||
unsigned int chroma_stride;
|
||||
unsigned int shift;
|
||||
};
|
||||
|
||||
struct util_format_info {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue