From: Ville Syrjälä ville.syrjala@linux.intel.com
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com --- tests/modetest/buffers.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/tests/modetest/buffers.c b/tests/modetest/buffers.c index 5086381..6b117b4 100644 --- a/tests/modetest/buffers.c +++ b/tests/modetest/buffers.c @@ -601,7 +601,7 @@ fill_smpte(const struct format_info *info, void *planes[3], unsigned int width, #define BLUE 0
static void -make_pwetty(void *data, int width, int height, int stride) +make_pwetty(void *data, int width, int height, int stride, int rgb16) { #ifdef HAVE_CAIRO cairo_surface_t *surface; @@ -609,7 +609,7 @@ make_pwetty(void *data, int width, int height, int stride) int x, y;
surface = cairo_image_surface_create_for_data(data, - CAIRO_FORMAT_ARGB32, + rgb16 ? CAIRO_FORMAT_RGB16_565 : CAIRO_FORMAT_ARGB32, width, height, stride); cr = cairo_create(surface); @@ -716,6 +716,7 @@ static void fill_tiles_rgb16(const struct rgb_info *rgb, unsigned char *mem, unsigned int width, unsigned int height, unsigned int stride) { + unsigned char *mem_base = mem; unsigned int x, y;
for (y = 0; y < height; ++y) { @@ -732,6 +733,8 @@ fill_tiles_rgb16(const struct rgb_info *rgb, unsigned char *mem, } mem += stride; } + + make_pwetty(mem_base, width, height, stride, 1); }
static void @@ -777,7 +780,7 @@ fill_tiles_rgb32(const struct rgb_info *rgb, unsigned char *mem, mem += stride; }
- make_pwetty(mem_base, width, height, stride); + make_pwetty(mem_base, width, height, stride, 0); }
static void
From: Ville Syrjälä ville.syrjala@linux.intel.com
libkms only has the xrgb8888 format, so we're overallocating the bo by quite a lot in some cases. But we still need to get the pitch from the libkms since it's the driver that decides how to align it.
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com --- tests/modetest/buffers.c | 34 ++++++++++------------------------ 1 file changed, 10 insertions(+), 24 deletions(-)
diff --git a/tests/modetest/buffers.c b/tests/modetest/buffers.c index 6b117b4..7f534a1 100644 --- a/tests/modetest/buffers.c +++ b/tests/modetest/buffers.c @@ -948,9 +948,9 @@ create_test_buffer(struct kms_driver *kms, unsigned int format, case DRM_FORMAT_VYUY: case DRM_FORMAT_YUYV: case DRM_FORMAT_YVYU: - pitches[0] = width * 2; offsets[0] = 0; kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]); + kms_bo_get_prop(bo, KMS_PITCH, &pitches[0]);
planes[0] = virtual; break; @@ -959,11 +959,11 @@ create_test_buffer(struct kms_driver *kms, unsigned int format, case DRM_FORMAT_NV21: case DRM_FORMAT_NV16: case DRM_FORMAT_NV61: - pitches[0] = width; offsets[0] = 0; kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]); - pitches[1] = width; - offsets[1] = width * height; + kms_bo_get_prop(bo, KMS_PITCH, &pitches[0]); + pitches[1] = pitches[0]; + offsets[1] = pitches[0] * height; kms_bo_get_prop(bo, KMS_HANDLE, &handles[1]);
planes[0] = virtual; @@ -971,14 +971,14 @@ create_test_buffer(struct kms_driver *kms, unsigned int format, break;
case DRM_FORMAT_YVU420: - pitches[0] = width; offsets[0] = 0; kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]); - pitches[1] = width / 2; - offsets[1] = width * height; + kms_bo_get_prop(bo, KMS_PITCH, &pitches[0]); + pitches[1] = pitches[0] / 2; + offsets[1] = pitches[0] * height; kms_bo_get_prop(bo, KMS_HANDLE, &handles[1]); - pitches[2] = width / 2; - offsets[2] = offsets[1] + (width * height) / 4; + pitches[2] = pitches[1]; + offsets[2] = offsets[1] + pitches[1] * height / 2; kms_bo_get_prop(bo, KMS_HANDLE, &handles[2]);
planes[0] = virtual; @@ -989,29 +989,15 @@ create_test_buffer(struct kms_driver *kms, unsigned int format, case DRM_FORMAT_RGB565: case DRM_FORMAT_ARGB1555: case DRM_FORMAT_XRGB1555: - pitches[0] = width * 2; - offsets[0] = 0; - kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]); - - planes[0] = virtual; - break; - case DRM_FORMAT_BGR888: case DRM_FORMAT_RGB888: - pitches[0] = width * 3; - offsets[0] = 0; - kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]); - - planes[0] = virtual; - break; - case DRM_FORMAT_ARGB8888: case DRM_FORMAT_BGRA8888: case DRM_FORMAT_XRGB8888: case DRM_FORMAT_BGRX8888: - pitches[0] = width * 4; offsets[0] = 0; kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]); + kms_bo_get_prop(bo, KMS_PITCH, &pitches[0]);
planes[0] = virtual; break;
On Wednesday 17 April 2013 22:18:02 ville.syrjala@linux.intel.com wrote:
From: Ville Syrjälä ville.syrjala@linux.intel.com
libkms only has the xrgb8888 format, so we're overallocating the bo by quite a lot in some cases. But we still need to get the pitch from the libkms since it's the driver that decides how to align it.
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com
Acked-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
tests/modetest/buffers.c | 34 ++++++++++------------------------ 1 file changed, 10 insertions(+), 24 deletions(-)
diff --git a/tests/modetest/buffers.c b/tests/modetest/buffers.c index 6b117b4..7f534a1 100644 --- a/tests/modetest/buffers.c +++ b/tests/modetest/buffers.c @@ -948,9 +948,9 @@ create_test_buffer(struct kms_driver *kms, unsigned int format, case DRM_FORMAT_VYUY: case DRM_FORMAT_YUYV: case DRM_FORMAT_YVYU:
offsets[0] = 0; kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]);pitches[0] = width * 2;
kms_bo_get_prop(bo, KMS_PITCH, &pitches[0]);
planes[0] = virtual; break;
@@ -959,11 +959,11 @@ create_test_buffer(struct kms_driver *kms, unsigned int format, case DRM_FORMAT_NV21: case DRM_FORMAT_NV16: case DRM_FORMAT_NV61:
offsets[0] = 0; kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]);pitches[0] = width;
pitches[1] = width;
offsets[1] = width * height;
kms_bo_get_prop(bo, KMS_PITCH, &pitches[0]);
pitches[1] = pitches[0];
offsets[1] = pitches[0] * height;
kms_bo_get_prop(bo, KMS_HANDLE, &handles[1]);
planes[0] = virtual;
@@ -971,14 +971,14 @@ create_test_buffer(struct kms_driver *kms, unsigned int format, break;
case DRM_FORMAT_YVU420:
offsets[0] = 0; kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]);pitches[0] = width;
pitches[1] = width / 2;
offsets[1] = width * height;
kms_bo_get_prop(bo, KMS_PITCH, &pitches[0]);
pitches[1] = pitches[0] / 2;
kms_bo_get_prop(bo, KMS_HANDLE, &handles[1]);offsets[1] = pitches[0] * height;
pitches[2] = width / 2;
offsets[2] = offsets[1] + (width * height) / 4;
pitches[2] = pitches[1];
offsets[2] = offsets[1] + pitches[1] * height / 2;
kms_bo_get_prop(bo, KMS_HANDLE, &handles[2]);
planes[0] = virtual;
@@ -989,29 +989,15 @@ create_test_buffer(struct kms_driver *kms, unsigned int format, case DRM_FORMAT_RGB565: case DRM_FORMAT_ARGB1555: case DRM_FORMAT_XRGB1555:
pitches[0] = width * 2;
offsets[0] = 0;
kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]);
planes[0] = virtual;
break;
- case DRM_FORMAT_BGR888: case DRM_FORMAT_RGB888:
pitches[0] = width * 3;
offsets[0] = 0;
kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]);
planes[0] = virtual;
break;
- case DRM_FORMAT_ARGB8888: case DRM_FORMAT_BGRA8888: case DRM_FORMAT_XRGB8888: case DRM_FORMAT_BGRX8888:
offsets[0] = 0; kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]);pitches[0] = width * 4;
kms_bo_get_prop(bo, KMS_PITCH, &pitches[0]);
planes[0] = virtual; break;
From: Ville Syrjälä ville.syrjala@linux.intel.com
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com --- tests/modetest/buffers.c | 120 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 115 insertions(+), 5 deletions(-)
diff --git a/tests/modetest/buffers.c b/tests/modetest/buffers.c index 7f534a1..3b1685c 100644 --- a/tests/modetest/buffers.c +++ b/tests/modetest/buffers.c @@ -102,17 +102,44 @@ static const struct format_info format_info[] = { /* YUV planar */ { DRM_FORMAT_YVU420, "YV12", MAKE_YUV_INFO(YUV_YCrCb, 2, 2, 1) }, /* RGB16 */ + { DRM_FORMAT_ARGB4444, "AR12", MAKE_RGB_INFO(4, 8, 4, 4, 4, 0, 4, 12) }, + { DRM_FORMAT_XRGB4444, "XR12", MAKE_RGB_INFO(4, 8, 4, 4, 4, 0, 0, 0) }, + { DRM_FORMAT_ABGR4444, "AB12", MAKE_RGB_INFO(4, 0, 4, 4, 4, 8, 4, 12) }, + { DRM_FORMAT_XBGR4444, "XB12", MAKE_RGB_INFO(4, 0, 4, 4, 4, 8, 0, 0) }, + { DRM_FORMAT_RGBA4444, "RA12", MAKE_RGB_INFO(4, 12, 4, 8, 4, 4, 4, 0) }, + { DRM_FORMAT_RGBX4444, "RX12", MAKE_RGB_INFO(4, 12, 4, 8, 4, 4, 0, 0) }, + { DRM_FORMAT_BGRA4444, "BA12", MAKE_RGB_INFO(4, 4, 4, 8, 4, 12, 4, 0) }, + { DRM_FORMAT_BGRX4444, "BX12", MAKE_RGB_INFO(4, 4, 4, 8, 4, 12, 0, 0) }, { DRM_FORMAT_ARGB1555, "AR15", MAKE_RGB_INFO(5, 10, 5, 5, 5, 0, 1, 15) }, { DRM_FORMAT_XRGB1555, "XR15", MAKE_RGB_INFO(5, 10, 5, 5, 5, 0, 0, 0) }, + { DRM_FORMAT_ABGR1555, "AB15", MAKE_RGB_INFO(5, 0, 5, 5, 5, 10, 1, 15) }, + { DRM_FORMAT_XBGR1555, "XB15", MAKE_RGB_INFO(5, 0, 5, 5, 5, 10, 0, 0) }, + { DRM_FORMAT_RGBA5551, "RA15", MAKE_RGB_INFO(5, 11, 5, 6, 5, 1, 1, 0) }, + { DRM_FORMAT_RGBX5551, "RX15", MAKE_RGB_INFO(5, 11, 5, 6, 5, 1, 0, 0) }, + { DRM_FORMAT_BGRA5551, "BA15", MAKE_RGB_INFO(5, 1, 5, 6, 5, 11, 1, 0) }, + { DRM_FORMAT_BGRX5551, "BX15", MAKE_RGB_INFO(5, 1, 5, 6, 5, 11, 0, 0) }, { DRM_FORMAT_RGB565, "RG16", MAKE_RGB_INFO(5, 11, 6, 5, 5, 0, 0, 0) }, + { DRM_FORMAT_BGR565, "BG16", MAKE_RGB_INFO(5, 0, 6, 5, 5, 11, 0, 0) }, /* RGB24 */ { DRM_FORMAT_BGR888, "BG24", MAKE_RGB_INFO(8, 0, 8, 8, 8, 16, 0, 0) }, { DRM_FORMAT_RGB888, "RG24", MAKE_RGB_INFO(8, 16, 8, 8, 8, 0, 0, 0) }, /* RGB32 */ { DRM_FORMAT_ARGB8888, "AR24", MAKE_RGB_INFO(8, 16, 8, 8, 8, 0, 8, 24) }, - { DRM_FORMAT_BGRA8888, "BA24", MAKE_RGB_INFO(8, 8, 8, 16, 8, 24, 8, 0) }, { DRM_FORMAT_XRGB8888, "XR24", MAKE_RGB_INFO(8, 16, 8, 8, 8, 0, 0, 0) }, + { DRM_FORMAT_ABGR8888, "AB24", MAKE_RGB_INFO(8, 0, 8, 8, 8, 16, 8, 24) }, + { DRM_FORMAT_XBGR8888, "XB24", MAKE_RGB_INFO(8, 0, 8, 8, 8, 16, 0, 0) }, + { DRM_FORMAT_RGBA8888, "RA24", MAKE_RGB_INFO(8, 24, 8, 16, 8, 8, 8, 0) }, + { DRM_FORMAT_RGBX8888, "RX24", MAKE_RGB_INFO(8, 24, 8, 16, 8, 8, 0, 0) }, + { DRM_FORMAT_BGRA8888, "BA24", MAKE_RGB_INFO(8, 8, 8, 16, 8, 24, 8, 0) }, { DRM_FORMAT_BGRX8888, "BX24", MAKE_RGB_INFO(8, 8, 8, 16, 8, 24, 0, 0) }, + { DRM_FORMAT_ARGB2101010, "AR30", MAKE_RGB_INFO(10, 20, 10, 10, 10, 0, 2, 30) }, + { DRM_FORMAT_XRGB2101010, "XR30", MAKE_RGB_INFO(10, 20, 10, 10, 10, 0, 0, 0) }, + { DRM_FORMAT_ABGR2101010, "AB30", MAKE_RGB_INFO(10, 0, 10, 10, 10, 20, 2, 30) }, + { DRM_FORMAT_XBGR2101010, "XB30", MAKE_RGB_INFO(10, 0, 10, 10, 10, 20, 0, 0) }, + { DRM_FORMAT_RGBA1010102, "RA30", MAKE_RGB_INFO(10, 22, 10, 12, 10, 2, 2, 0) }, + { DRM_FORMAT_RGBX1010102, "RX30", MAKE_RGB_INFO(10, 22, 10, 12, 10, 2, 0, 0) }, + { DRM_FORMAT_BGRA1010102, "BA30", MAKE_RGB_INFO(10, 2, 10, 12, 10, 22, 2, 0) }, + { DRM_FORMAT_BGRX1010102, "BX30", MAKE_RGB_INFO(10, 2, 10, 12, 10, 22, 0, 0) }, };
unsigned int format_fourcc(const char *name) @@ -577,19 +604,47 @@ fill_smpte(const struct format_info *info, void *planes[3], unsigned int width, return fill_smpte_yuv_planar(&info->yuv, planes[0], planes[1], planes[2], width, height, stride);
+ case DRM_FORMAT_ARGB4444: + case DRM_FORMAT_XRGB4444: + case DRM_FORMAT_ABGR4444: + case DRM_FORMAT_XBGR4444: + case DRM_FORMAT_RGBA4444: + case DRM_FORMAT_RGBX4444: + case DRM_FORMAT_BGRA4444: + case DRM_FORMAT_BGRX4444: case DRM_FORMAT_RGB565: + case DRM_FORMAT_BGR565: case DRM_FORMAT_ARGB1555: case DRM_FORMAT_XRGB1555: + case DRM_FORMAT_ABGR1555: + case DRM_FORMAT_XBGR1555: + case DRM_FORMAT_RGBA5551: + case DRM_FORMAT_RGBX5551: + case DRM_FORMAT_BGRA5551: + case DRM_FORMAT_BGRX5551: return fill_smpte_rgb16(&info->rgb, planes[0], width, height, stride); + case DRM_FORMAT_BGR888: case DRM_FORMAT_RGB888: return fill_smpte_rgb24(&info->rgb, planes[0], width, height, stride); case DRM_FORMAT_ARGB8888: - case DRM_FORMAT_BGRA8888: case DRM_FORMAT_XRGB8888: + case DRM_FORMAT_ABGR8888: + case DRM_FORMAT_XBGR8888: + case DRM_FORMAT_RGBA8888: + case DRM_FORMAT_RGBX8888: + case DRM_FORMAT_BGRA8888: case DRM_FORMAT_BGRX8888: + case DRM_FORMAT_ARGB2101010: + case DRM_FORMAT_XRGB2101010: + case DRM_FORMAT_ABGR2101010: + case DRM_FORMAT_XBGR2101010: + case DRM_FORMAT_RGBA1010102: + case DRM_FORMAT_RGBX1010102: + case DRM_FORMAT_BGRA1010102: + case DRM_FORMAT_BGRX1010102: return fill_smpte_rgb32(&info->rgb, planes[0], width, height, stride); } @@ -810,19 +865,47 @@ fill_tiles(const struct format_info *info, void *planes[3], unsigned int width, return fill_tiles_yuv_planar(&info->yuv, planes[0], planes[1], planes[2], width, height, stride);
+ case DRM_FORMAT_ARGB4444: + case DRM_FORMAT_XRGB4444: + case DRM_FORMAT_ABGR4444: + case DRM_FORMAT_XBGR4444: + case DRM_FORMAT_RGBA4444: + case DRM_FORMAT_RGBX4444: + case DRM_FORMAT_BGRA4444: + case DRM_FORMAT_BGRX4444: case DRM_FORMAT_RGB565: + case DRM_FORMAT_BGR565: case DRM_FORMAT_ARGB1555: case DRM_FORMAT_XRGB1555: + case DRM_FORMAT_ABGR1555: + case DRM_FORMAT_XBGR1555: + case DRM_FORMAT_RGBA5551: + case DRM_FORMAT_RGBX5551: + case DRM_FORMAT_BGRA5551: + case DRM_FORMAT_BGRX5551: return fill_tiles_rgb16(&info->rgb, planes[0], width, height, stride); + case DRM_FORMAT_BGR888: case DRM_FORMAT_RGB888: return fill_tiles_rgb24(&info->rgb, planes[0], width, height, stride); case DRM_FORMAT_ARGB8888: - case DRM_FORMAT_BGRA8888: case DRM_FORMAT_XRGB8888: + case DRM_FORMAT_ABGR8888: + case DRM_FORMAT_XBGR8888: + case DRM_FORMAT_RGBA8888: + case DRM_FORMAT_RGBX8888: + case DRM_FORMAT_BGRA8888: case DRM_FORMAT_BGRX8888: + case DRM_FORMAT_ARGB2101010: + case DRM_FORMAT_XRGB2101010: + case DRM_FORMAT_ABGR2101010: + case DRM_FORMAT_XBGR2101010: + case DRM_FORMAT_RGBA1010102: + case DRM_FORMAT_RGBX1010102: + case DRM_FORMAT_BGRA1010102: + case DRM_FORMAT_BGRX1010102: return fill_tiles_rgb32(&info->rgb, planes[0], width, height, stride); } @@ -986,15 +1069,42 @@ create_test_buffer(struct kms_driver *kms, unsigned int format, planes[2] = virtual + offsets[2]; break;
- case DRM_FORMAT_RGB565: + case DRM_FORMAT_ARGB4444: + case DRM_FORMAT_XRGB4444: + case DRM_FORMAT_ABGR4444: + case DRM_FORMAT_XBGR4444: + case DRM_FORMAT_RGBA4444: + case DRM_FORMAT_RGBX4444: + case DRM_FORMAT_BGRA4444: + case DRM_FORMAT_BGRX4444: case DRM_FORMAT_ARGB1555: case DRM_FORMAT_XRGB1555: + case DRM_FORMAT_ABGR1555: + case DRM_FORMAT_XBGR1555: + case DRM_FORMAT_RGBA5551: + case DRM_FORMAT_RGBX5551: + case DRM_FORMAT_BGRA5551: + case DRM_FORMAT_BGRX5551: + case DRM_FORMAT_RGB565: + case DRM_FORMAT_BGR565: case DRM_FORMAT_BGR888: case DRM_FORMAT_RGB888: case DRM_FORMAT_ARGB8888: - case DRM_FORMAT_BGRA8888: case DRM_FORMAT_XRGB8888: + case DRM_FORMAT_ABGR8888: + case DRM_FORMAT_XBGR8888: + case DRM_FORMAT_RGBA8888: + case DRM_FORMAT_RGBX8888: + case DRM_FORMAT_BGRA8888: case DRM_FORMAT_BGRX8888: + case DRM_FORMAT_ARGB2101010: + case DRM_FORMAT_XRGB2101010: + case DRM_FORMAT_ABGR2101010: + case DRM_FORMAT_XBGR2101010: + case DRM_FORMAT_RGBA1010102: + case DRM_FORMAT_RGBX1010102: + case DRM_FORMAT_BGRA1010102: + case DRM_FORMAT_BGRX1010102: offsets[0] = 0; kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]); kms_bo_get_prop(bo, KMS_PITCH, &pitches[0]);
On Wednesday 17 April 2013 22:18:03 ville.syrjala@linux.intel.com wrote:
From: Ville Syrjälä ville.syrjala@linux.intel.com
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com
Acked-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
tests/modetest/buffers.c | 120 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 115 insertions(+), 5 deletions(-)
diff --git a/tests/modetest/buffers.c b/tests/modetest/buffers.c index 7f534a1..3b1685c 100644 --- a/tests/modetest/buffers.c +++ b/tests/modetest/buffers.c @@ -102,17 +102,44 @@ static const struct format_info format_info[] = { /* YUV planar */ { DRM_FORMAT_YVU420, "YV12", MAKE_YUV_INFO(YUV_YCrCb, 2, 2, 1) }, /* RGB16 */
- { DRM_FORMAT_ARGB4444, "AR12", MAKE_RGB_INFO(4, 8, 4, 4, 4, 0, 4, 12) },
- { DRM_FORMAT_XRGB4444, "XR12", MAKE_RGB_INFO(4, 8, 4, 4, 4, 0, 0, 0) },
- { DRM_FORMAT_ABGR4444, "AB12", MAKE_RGB_INFO(4, 0, 4, 4, 4, 8, 4, 12) },
- { DRM_FORMAT_XBGR4444, "XB12", MAKE_RGB_INFO(4, 0, 4, 4, 4, 8, 0, 0) },
- { DRM_FORMAT_RGBA4444, "RA12", MAKE_RGB_INFO(4, 12, 4, 8, 4, 4, 4, 0) },
- { DRM_FORMAT_RGBX4444, "RX12", MAKE_RGB_INFO(4, 12, 4, 8, 4, 4, 0, 0) },
- { DRM_FORMAT_BGRA4444, "BA12", MAKE_RGB_INFO(4, 4, 4, 8, 4, 12, 4, 0) },
- { DRM_FORMAT_BGRX4444, "BX12", MAKE_RGB_INFO(4, 4, 4, 8, 4, 12, 0, 0) }, { DRM_FORMAT_ARGB1555, "AR15", MAKE_RGB_INFO(5, 10, 5, 5, 5, 0, 1, 15) }, { DRM_FORMAT_XRGB1555, "XR15", MAKE_RGB_INFO(5, 10, 5, 5, 5, 0, 0, 0) },
- { DRM_FORMAT_ABGR1555, "AB15", MAKE_RGB_INFO(5, 0, 5, 5, 5, 10, 1, 15) },
- { DRM_FORMAT_XBGR1555, "XB15", MAKE_RGB_INFO(5, 0, 5, 5, 5, 10, 0, 0) },
- { DRM_FORMAT_RGBA5551, "RA15", MAKE_RGB_INFO(5, 11, 5, 6, 5, 1, 1, 0) },
- { DRM_FORMAT_RGBX5551, "RX15", MAKE_RGB_INFO(5, 11, 5, 6, 5, 1, 0, 0) },
- { DRM_FORMAT_BGRA5551, "BA15", MAKE_RGB_INFO(5, 1, 5, 6, 5, 11, 1, 0) },
- { DRM_FORMAT_BGRX5551, "BX15", MAKE_RGB_INFO(5, 1, 5, 6, 5, 11, 0, 0) }, { DRM_FORMAT_RGB565, "RG16", MAKE_RGB_INFO(5, 11, 6, 5, 5, 0, 0, 0) },
- { DRM_FORMAT_BGR565, "BG16", MAKE_RGB_INFO(5, 0, 6, 5, 5, 11, 0, 0) }, /* RGB24 */ { DRM_FORMAT_BGR888, "BG24", MAKE_RGB_INFO(8, 0, 8, 8, 8, 16, 0, 0) }, { DRM_FORMAT_RGB888, "RG24", MAKE_RGB_INFO(8, 16, 8, 8, 8, 0, 0, 0) }, /* RGB32 */ { DRM_FORMAT_ARGB8888, "AR24", MAKE_RGB_INFO(8, 16, 8, 8, 8, 0, 8, 24) },
- { DRM_FORMAT_BGRA8888, "BA24", MAKE_RGB_INFO(8, 8, 8, 16, 8, 24, 8, 0) }, { DRM_FORMAT_XRGB8888, "XR24", MAKE_RGB_INFO(8, 16, 8, 8, 8, 0, 0, 0) },
- { DRM_FORMAT_ABGR8888, "AB24", MAKE_RGB_INFO(8, 0, 8, 8, 8, 16, 8, 24) },
- { DRM_FORMAT_XBGR8888, "XB24", MAKE_RGB_INFO(8, 0, 8, 8, 8, 16, 0, 0) },
- { DRM_FORMAT_RGBA8888, "RA24", MAKE_RGB_INFO(8, 24, 8, 16, 8, 8, 8, 0) },
- { DRM_FORMAT_RGBX8888, "RX24", MAKE_RGB_INFO(8, 24, 8, 16, 8, 8, 0, 0) },
- { DRM_FORMAT_BGRA8888, "BA24", MAKE_RGB_INFO(8, 8, 8, 16, 8, 24, 8, 0) }, { DRM_FORMAT_BGRX8888, "BX24", MAKE_RGB_INFO(8, 8, 8, 16, 8, 24, 0, 0) },
- { DRM_FORMAT_ARGB2101010, "AR30", MAKE_RGB_INFO(10, 20, 10, 10, 10, 0, 2,
- }, + { DRM_FORMAT_XRGB2101010, "XR30", MAKE_RGB_INFO(10, 20, 10, 10,
10, 0, 0, 0) }, + { DRM_FORMAT_ABGR2101010, "AB30", MAKE_RGB_INFO(10, 0, 10, 10, 10, 20, 2, 30) }, + { DRM_FORMAT_XBGR2101010, "XB30", MAKE_RGB_INFO(10, 0, 10, 10, 10, 20, 0, 0) }, + { DRM_FORMAT_RGBA1010102, "RA30", MAKE_RGB_INFO(10, 22, 10, 12, 10, 2, 2, 0) }, + { DRM_FORMAT_RGBX1010102, "RX30", MAKE_RGB_INFO(10, 22, 10, 12, 10, 2, 0, 0) }, + { DRM_FORMAT_BGRA1010102, "BA30", MAKE_RGB_INFO(10, 2, 10, 12, 10,
22,
2, 0) }, + { DRM_FORMAT_BGRX1010102, "BX30", MAKE_RGB_INFO(10, 2, 10, 12, 10, 22, 0, 0) }, };
unsigned int format_fourcc(const char *name) @@ -577,19 +604,47 @@ fill_smpte(const struct format_info *info, void *planes[3], unsigned int width, return fill_smpte_yuv_planar(&info->yuv, planes[0], planes[1], planes[2], width, height, stride);
- case DRM_FORMAT_ARGB4444:
- case DRM_FORMAT_XRGB4444:
- case DRM_FORMAT_ABGR4444:
- case DRM_FORMAT_XBGR4444:
- case DRM_FORMAT_RGBA4444:
- case DRM_FORMAT_RGBX4444:
- case DRM_FORMAT_BGRA4444:
- case DRM_FORMAT_BGRX4444: case DRM_FORMAT_RGB565:
- case DRM_FORMAT_BGR565: case DRM_FORMAT_ARGB1555: case DRM_FORMAT_XRGB1555:
- case DRM_FORMAT_ABGR1555:
- case DRM_FORMAT_XBGR1555:
- case DRM_FORMAT_RGBA5551:
- case DRM_FORMAT_RGBX5551:
- case DRM_FORMAT_BGRA5551:
- case DRM_FORMAT_BGRX5551: return fill_smpte_rgb16(&info->rgb, planes[0], width, height, stride);
- case DRM_FORMAT_BGR888: case DRM_FORMAT_RGB888: return fill_smpte_rgb24(&info->rgb, planes[0], width, height, stride); case DRM_FORMAT_ARGB8888:
- case DRM_FORMAT_BGRA8888: case DRM_FORMAT_XRGB8888:
- case DRM_FORMAT_ABGR8888:
- case DRM_FORMAT_XBGR8888:
- case DRM_FORMAT_RGBA8888:
- case DRM_FORMAT_RGBX8888:
- case DRM_FORMAT_BGRA8888: case DRM_FORMAT_BGRX8888:
- case DRM_FORMAT_ARGB2101010:
- case DRM_FORMAT_XRGB2101010:
- case DRM_FORMAT_ABGR2101010:
- case DRM_FORMAT_XBGR2101010:
- case DRM_FORMAT_RGBA1010102:
- case DRM_FORMAT_RGBX1010102:
- case DRM_FORMAT_BGRA1010102:
- case DRM_FORMAT_BGRX1010102: return fill_smpte_rgb32(&info->rgb, planes[0], width, height, stride); }
@@ -810,19 +865,47 @@ fill_tiles(const struct format_info *info, void *planes[3], unsigned int width, return fill_tiles_yuv_planar(&info->yuv, planes[0], planes[1], planes[2], width, height, stride);
- case DRM_FORMAT_ARGB4444:
- case DRM_FORMAT_XRGB4444:
- case DRM_FORMAT_ABGR4444:
- case DRM_FORMAT_XBGR4444:
- case DRM_FORMAT_RGBA4444:
- case DRM_FORMAT_RGBX4444:
- case DRM_FORMAT_BGRA4444:
- case DRM_FORMAT_BGRX4444: case DRM_FORMAT_RGB565:
- case DRM_FORMAT_BGR565: case DRM_FORMAT_ARGB1555: case DRM_FORMAT_XRGB1555:
- case DRM_FORMAT_ABGR1555:
- case DRM_FORMAT_XBGR1555:
- case DRM_FORMAT_RGBA5551:
- case DRM_FORMAT_RGBX5551:
- case DRM_FORMAT_BGRA5551:
- case DRM_FORMAT_BGRX5551: return fill_tiles_rgb16(&info->rgb, planes[0], width, height, stride);
- case DRM_FORMAT_BGR888: case DRM_FORMAT_RGB888: return fill_tiles_rgb24(&info->rgb, planes[0], width, height, stride); case DRM_FORMAT_ARGB8888:
- case DRM_FORMAT_BGRA8888: case DRM_FORMAT_XRGB8888:
- case DRM_FORMAT_ABGR8888:
- case DRM_FORMAT_XBGR8888:
- case DRM_FORMAT_RGBA8888:
- case DRM_FORMAT_RGBX8888:
- case DRM_FORMAT_BGRA8888: case DRM_FORMAT_BGRX8888:
- case DRM_FORMAT_ARGB2101010:
- case DRM_FORMAT_XRGB2101010:
- case DRM_FORMAT_ABGR2101010:
- case DRM_FORMAT_XBGR2101010:
- case DRM_FORMAT_RGBA1010102:
- case DRM_FORMAT_RGBX1010102:
- case DRM_FORMAT_BGRA1010102:
- case DRM_FORMAT_BGRX1010102: return fill_tiles_rgb32(&info->rgb, planes[0], width, height, stride); }
@@ -986,15 +1069,42 @@ create_test_buffer(struct kms_driver *kms, unsigned int format, planes[2] = virtual + offsets[2]; break;
- case DRM_FORMAT_RGB565:
- case DRM_FORMAT_ARGB4444:
- case DRM_FORMAT_XRGB4444:
- case DRM_FORMAT_ABGR4444:
- case DRM_FORMAT_XBGR4444:
- case DRM_FORMAT_RGBA4444:
- case DRM_FORMAT_RGBX4444:
- case DRM_FORMAT_BGRA4444:
- case DRM_FORMAT_BGRX4444: case DRM_FORMAT_ARGB1555: case DRM_FORMAT_XRGB1555:
- case DRM_FORMAT_ABGR1555:
- case DRM_FORMAT_XBGR1555:
- case DRM_FORMAT_RGBA5551:
- case DRM_FORMAT_RGBX5551:
- case DRM_FORMAT_BGRA5551:
- case DRM_FORMAT_BGRX5551:
- case DRM_FORMAT_RGB565:
- case DRM_FORMAT_BGR565: case DRM_FORMAT_BGR888: case DRM_FORMAT_RGB888: case DRM_FORMAT_ARGB8888:
- case DRM_FORMAT_BGRA8888: case DRM_FORMAT_XRGB8888:
- case DRM_FORMAT_ABGR8888:
- case DRM_FORMAT_XBGR8888:
- case DRM_FORMAT_RGBA8888:
- case DRM_FORMAT_RGBX8888:
- case DRM_FORMAT_BGRA8888: case DRM_FORMAT_BGRX8888:
- case DRM_FORMAT_ARGB2101010:
- case DRM_FORMAT_XRGB2101010:
- case DRM_FORMAT_ABGR2101010:
- case DRM_FORMAT_XBGR2101010:
- case DRM_FORMAT_RGBA1010102:
- case DRM_FORMAT_RGBX1010102:
- case DRM_FORMAT_BGRA1010102:
- case DRM_FORMAT_BGRX1010102: offsets[0] = 0; kms_bo_get_prop(bo, KMS_HANDLE, &handles[0]); kms_bo_get_prop(bo, KMS_PITCH, &pitches[0]);
From: Ville Syrjälä ville.syrjala@linux.intel.com
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com --- tests/modetest/modetest.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index c91bb9d..27cd2ce 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -429,7 +429,7 @@ static void dump_planes(void) }
printf("Planes:\n"); - printf("id\tcrtc\tfb\tCRTC x,y\tx,y\tgamma size\n"); + printf("id\tcrtc\tfb\tCRTC x,y\tx,y\tgamma size\tpossible crtcs\n"); for (i = 0; i < plane_resources->count_planes; i++) { ovr = drmModeGetPlane(fd, plane_resources->planes[i]); if (!ovr) { @@ -438,10 +438,10 @@ static void dump_planes(void) continue; }
- printf("%d\t%d\t%d\t%d,%d\t\t%d,%d\t%d\n", + printf("%d\t%d\t%d\t%d,%d\t\t%d,%d\t%-8d\t0x%08x\n", ovr->plane_id, ovr->crtc_id, ovr->fb_id, ovr->crtc_x, ovr->crtc_y, ovr->x, ovr->y, - ovr->gamma_size); + ovr->gamma_size, ovr->possible_crtcs);
if (!ovr->count_formats) continue;
On Wednesday 17 April 2013 22:18:04 ville.syrjala@linux.intel.com wrote:
From: Ville Syrjälä ville.syrjala@linux.intel.com
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com
Acked-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
tests/modetest/modetest.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index c91bb9d..27cd2ce 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -429,7 +429,7 @@ static void dump_planes(void) }
printf("Planes:\n");
- printf("id\tcrtc\tfb\tCRTC x,y\tx,y\tgamma size\n");
- printf("id\tcrtc\tfb\tCRTC x,y\tx,y\tgamma size\tpossible crtcs\n"); for (i = 0; i < plane_resources->count_planes; i++) { ovr = drmModeGetPlane(fd, plane_resources->planes[i]); if (!ovr) {
@@ -438,10 +438,10 @@ static void dump_planes(void) continue; }
printf("%d\t%d\t%d\t%d,%d\t\t%d,%d\t%d\n",
printf("%d\t%d\t%d\t%d,%d\t\t%d,%d\t%-8d\t0x%08x\n", ovr->plane_id, ovr->crtc_id, ovr->fb_id, ovr->crtc_x, ovr->crtc_y, ovr->x, ovr->y,
ovr->gamma_size);
ovr->gamma_size, ovr->possible_crtcs);
if (!ovr->count_formats) continue;
From: Ville Syrjälä ville.syrjala@linux.intel.com
Spelling out eDP or DP make for a ridicilously long string which plays havoc with formatting. Just say eDP or DP.
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com --- tests/modetest/modetest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index 27cd2ce..8afd2b1 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -106,11 +106,11 @@ struct type_name connector_type_names[] = { { DRM_MODE_CONNECTOR_LVDS, "LVDS" }, { DRM_MODE_CONNECTOR_Component, "component" }, { DRM_MODE_CONNECTOR_9PinDIN, "9-pin DIN" }, - { DRM_MODE_CONNECTOR_DisplayPort, "displayport" }, + { DRM_MODE_CONNECTOR_DisplayPort, "DP" }, { DRM_MODE_CONNECTOR_HDMIA, "HDMI-A" }, { DRM_MODE_CONNECTOR_HDMIB, "HDMI-B" }, { DRM_MODE_CONNECTOR_TV, "TV" }, - { DRM_MODE_CONNECTOR_eDP, "embedded displayport" }, + { DRM_MODE_CONNECTOR_eDP, "eDP" }, };
type_name_fn(connector_type)
On Wednesday 17 April 2013 22:18:05 ville.syrjala@linux.intel.com wrote:
From: Ville Syrjälä ville.syrjala@linux.intel.com
Spelling out eDP or DP make for a ridicilously long string which plays havoc with formatting. Just say eDP or DP.
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com
Acked-by: Laurent Pinchart laurent.pinchart@ideasonboard.com
tests/modetest/modetest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index 27cd2ce..8afd2b1 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -106,11 +106,11 @@ struct type_name connector_type_names[] = { { DRM_MODE_CONNECTOR_LVDS, "LVDS" }, { DRM_MODE_CONNECTOR_Component, "component" }, { DRM_MODE_CONNECTOR_9PinDIN, "9-pin DIN" },
- { DRM_MODE_CONNECTOR_DisplayPort, "displayport" },
- { DRM_MODE_CONNECTOR_DisplayPort, "DP" }, { DRM_MODE_CONNECTOR_HDMIA, "HDMI-A" }, { DRM_MODE_CONNECTOR_HDMIB, "HDMI-B" }, { DRM_MODE_CONNECTOR_TV, "TV" },
- { DRM_MODE_CONNECTOR_eDP, "embedded displayport" },
- { DRM_MODE_CONNECTOR_eDP, "eDP" },
};
type_name_fn(connector_type)
Hi Ville,
Thank you for the patch.
On Wednesday 17 April 2013 22:18:01 ville.syrjala@linux.intel.com wrote:
From: Ville Syrjälä ville.syrjala@linux.intel.com
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com
tests/modetest/buffers.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/tests/modetest/buffers.c b/tests/modetest/buffers.c index 5086381..6b117b4 100644 --- a/tests/modetest/buffers.c +++ b/tests/modetest/buffers.c @@ -601,7 +601,7 @@ fill_smpte(const struct format_info *info, void *planes[3], unsigned int width, #define BLUE 0
static void -make_pwetty(void *data, int width, int height, int stride) +make_pwetty(void *data, int width, int height, int stride, int rgb16)
What about passing the format 4cc instead ?
{ #ifdef HAVE_CAIRO cairo_surface_t *surface; @@ -609,7 +609,7 @@ make_pwetty(void *data, int width, int height, int stride) int x, y;
surface = cairo_image_surface_create_for_data(data,
CAIRO_FORMAT_ARGB32,
rgb16 ? CAIRO_FORMAT_RGB16_565 :
CAIRO_FORMAT_ARGB32,
width, height, stride);
cr = cairo_create(surface); @@ -716,6 +716,7 @@ static void fill_tiles_rgb16(const struct rgb_info *rgb, unsigned char *mem, unsigned int width, unsigned int height, unsigned int stride) {
unsigned char *mem_base = mem; unsigned int x, y;
for (y = 0; y < height; ++y) {
@@ -732,6 +733,8 @@ fill_tiles_rgb16(const struct rgb_info *rgb, unsigned char *mem, } mem += stride; }
- make_pwetty(mem_base, width, height, stride, 1);
}
static void @@ -777,7 +780,7 @@ fill_tiles_rgb32(const struct rgb_info *rgb, unsigned char *mem, mem += stride; }
- make_pwetty(mem_base, width, height, stride);
- make_pwetty(mem_base, width, height, stride, 0);
}
static void
On Thu, Apr 18, 2013 at 03:43:23PM +0200, Laurent Pinchart wrote:
Hi Ville,
Thank you for the patch.
On Wednesday 17 April 2013 22:18:01 ville.syrjala@linux.intel.com wrote:
From: Ville Syrjälä ville.syrjala@linux.intel.com
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com
tests/modetest/buffers.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/tests/modetest/buffers.c b/tests/modetest/buffers.c index 5086381..6b117b4 100644 --- a/tests/modetest/buffers.c +++ b/tests/modetest/buffers.c @@ -601,7 +601,7 @@ fill_smpte(const struct format_info *info, void *planes[3], unsigned int width, #define BLUE 0
static void -make_pwetty(void *data, int width, int height, int stride) +make_pwetty(void *data, int width, int height, int stride, int rgb16)
What about passing the format 4cc instead ?
It's a bit more work since I need to pass the whole format_info down from fill_tiles(). But I can make a v2 with that change.
{ #ifdef HAVE_CAIRO cairo_surface_t *surface; @@ -609,7 +609,7 @@ make_pwetty(void *data, int width, int height, int stride) int x, y;
surface = cairo_image_surface_create_for_data(data,
CAIRO_FORMAT_ARGB32,
rgb16 ? CAIRO_FORMAT_RGB16_565 :
CAIRO_FORMAT_ARGB32,
width, height, stride);
cr = cairo_create(surface); @@ -716,6 +716,7 @@ static void fill_tiles_rgb16(const struct rgb_info *rgb, unsigned char *mem, unsigned int width, unsigned int height, unsigned int stride) {
unsigned char *mem_base = mem; unsigned int x, y;
for (y = 0; y < height; ++y) {
@@ -732,6 +733,8 @@ fill_tiles_rgb16(const struct rgb_info *rgb, unsigned char *mem, } mem += stride; }
- make_pwetty(mem_base, width, height, stride, 1);
}
static void @@ -777,7 +780,7 @@ fill_tiles_rgb32(const struct rgb_info *rgb, unsigned char *mem, mem += stride; }
- make_pwetty(mem_base, width, height, stride);
- make_pwetty(mem_base, width, height, stride, 0);
}
static void
-- Regards,
Laurent Pinchart
On Thursday 18 April 2013 17:06:57 Ville Syrjälä wrote:
On Thu, Apr 18, 2013 at 03:43:23PM +0200, Laurent Pinchart wrote:
On Wednesday 17 April 2013 22:18:01 ville.syrjala@linux.intel.com wrote:
From: Ville Syrjälä ville.syrjala@linux.intel.com
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com
tests/modetest/buffers.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/tests/modetest/buffers.c b/tests/modetest/buffers.c index 5086381..6b117b4 100644 --- a/tests/modetest/buffers.c +++ b/tests/modetest/buffers.c @@ -601,7 +601,7 @@ fill_smpte(const struct format_info *info, void *planes[3], unsigned int width, #define BLUE 0
static void
-make_pwetty(void *data, int width, int height, int stride) +make_pwetty(void *data, int width, int height, int stride, int rgb16)
What about passing the format 4cc instead ?
It's a bit more work since I need to pass the whole format_info down from fill_tiles(). But I can make a v2 with that change.
It was just an idea to make the code more future-proof, in case we decide to make 24-bit formats pwetty at some point. Maybe a bpp value would be a good compromise ?
On Thu, Apr 18, 2013 at 04:19:30PM +0200, Laurent Pinchart wrote:
On Thursday 18 April 2013 17:06:57 Ville Syrjälä wrote:
On Thu, Apr 18, 2013 at 03:43:23PM +0200, Laurent Pinchart wrote:
On Wednesday 17 April 2013 22:18:01 ville.syrjala@linux.intel.com wrote:
From: Ville Syrjälä ville.syrjala@linux.intel.com
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com
tests/modetest/buffers.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/tests/modetest/buffers.c b/tests/modetest/buffers.c index 5086381..6b117b4 100644 --- a/tests/modetest/buffers.c +++ b/tests/modetest/buffers.c @@ -601,7 +601,7 @@ fill_smpte(const struct format_info *info, void *planes[3], unsigned int width, #define BLUE 0
static void
-make_pwetty(void *data, int width, int height, int stride) +make_pwetty(void *data, int width, int height, int stride, int rgb16)
What about passing the format 4cc instead ?
It's a bit more work since I need to pass the whole format_info down from fill_tiles(). But I can make a v2 with that change.
It was just an idea to make the code more future-proof, in case we decide to make 24-bit formats pwetty at some point. Maybe a bpp value would be a good compromise ?
I already implemented your original idea. Just doing a quick test now.
It's a better idea anyway since we can then check that the color channels match what we're rendering. My original code just assumed that it can render RGB565 into an XRGB1555 buffer for example. That produces some rather ugly results in reality, so it's better to limit it to the formats where the size/location of RGB channels match. The order or RGB channels doesn't actually matter since the source color is always white or black.
dri-devel@lists.freedesktop.org