dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH libdrm 0/2] Print plane modifiers in modeprint
@ 2017-11-19  9:49 Wladimir J. van der Laan
  2017-11-19  9:49 ` [PATCH libdrm 1/2] tests/modeprint: Print plane and other object properties Wladimir J. van der Laan
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Wladimir J. van der Laan @ 2017-11-19  9:49 UTC (permalink / raw)
  To: dri-devel; +Cc: Alex Deucher, Wladimir J. van der Laan, Emil Velikov

This patch series adds support for printing the properties of all DRM mode
objects. This is subsequently used to parse the IN_FORMATS blob to be able to
print the available modifiers and their formats.

Wladimir J. van der Laan (2):
  tests/modeprint: Print plane and other object properties
  tests/modeprint: Print details for IN_FORMATS blob

 tests/modeprint/modeprint.c | 122 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 118 insertions(+), 4 deletions(-)

-- 
2.7.4

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH libdrm 1/2] tests/modeprint: Print plane and other object properties
  2017-11-19  9:49 [PATCH libdrm 0/2] Print plane modifiers in modeprint Wladimir J. van der Laan
@ 2017-11-19  9:49 ` Wladimir J. van der Laan
  2017-11-19  9:49 ` [PATCH libdrm 2/2] tests/modeprint: Print details for IN_FORMATS blob Wladimir J. van der Laan
  2017-11-20 11:36 ` [PATCH libdrm 0/2] Print plane modifiers in modeprint Emil Velikov
  2 siblings, 0 replies; 4+ messages in thread
From: Wladimir J. van der Laan @ 2017-11-19  9:49 UTC (permalink / raw)
  To: dri-devel; +Cc: Alex Deucher, Wladimir J. van der Laan, Emil Velikov

Make it possible to print plane properties, and the properties of other
DRM mode objects, if available.

Signed-off-by: Wladimir J. van der Laan <laanwj@gmail.com>
---
 tests/modeprint/modeprint.c | 100 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 96 insertions(+), 4 deletions(-)

diff --git a/tests/modeprint/modeprint.c b/tests/modeprint/modeprint.c
index 0d85410..42c0a1b 100644
--- a/tests/modeprint/modeprint.c
+++ b/tests/modeprint/modeprint.c
@@ -52,6 +52,7 @@ int full_modes;
 int encoders;
 int crtcs;
 int fbs;
+int planes;
 char *module_name;
 
 static const char* getConnectionText(drmModeConnection conn)
@@ -92,7 +93,7 @@ static int printMode(struct drm_mode_modeinfo *mode)
 	return 0;
 }
 
-static int printProperty(int fd, drmModeResPtr res, drmModePropertyPtr props, uint64_t value)
+static int printProperty(int fd, drmModePropertyPtr props, uint64_t value)
 {
 	const char *name = NULL;
 	int j;
@@ -141,6 +142,25 @@ static int printProperty(int fd, drmModeResPtr res, drmModePropertyPtr props, ui
 	return 0;
 }
 
+static int printObjectProps(int fd, uint32_t object_id, uint32_t object_type)
+{
+	uint32_t i;
+
+	drmModeObjectPropertiesPtr props = drmModeObjectGetProperties(fd, object_id, object_type);
+	if (props) {
+		for (i = 0; i < props->count_props; i++) {
+			drmModePropertyPtr prop = drmModeGetProperty(fd, props->props[i]);
+			if (prop) {
+				printProperty(fd, prop, props->prop_values[i]);
+				drmModeFreeProperty(prop);
+			}
+		}
+		drmModeFreeObjectProperties(props);
+	}
+
+	return 0;
+}
+
 static const char * const output_names[] = { "None",
 					     "VGA",
 					     "DVI-I",
@@ -204,7 +224,7 @@ static int printConnector(int fd, drmModeResPtr res, drmModeConnectorPtr connect
 		for (i = 0; i < connector->count_props; i++) {
 			props = drmModeGetProperty(fd, connector->props[i]);
 			if (props) {
-				printProperty(fd, res, props, connector->prop_values[i]);
+				printProperty(fd, props, connector->prop_values[i]);
 				drmModeFreeProperty(props);
 			}
 		}
@@ -221,6 +241,11 @@ static int printEncoder(int fd, drmModeResPtr res, drmModeEncoderPtr encoder, ui
 	printf("\ttype   :%d\n", encoder->encoder_type);
 	printf("\tpossible_crtcs  :0x%x\n", encoder->possible_crtcs);
 	printf("\tpossible_clones :0x%x\n", encoder->possible_clones);
+
+	if (full_props) {
+		printObjectProps(fd, encoder->crtc_id, DRM_MODE_OBJECT_ENCODER);
+	}
+
 	return 0;
 }
 
@@ -235,6 +260,10 @@ static int printCrtc(int fd, drmModeResPtr res, drmModeCrtcPtr crtc, uint32_t id
 	printf("\tmode           : %p\n", &crtc->mode);
 	printf("\tgamma size     : %d\n", crtc->gamma_size);
 
+	if (full_props) {
+		printObjectProps(fd, crtc->crtc_id, DRM_MODE_OBJECT_CRTC);
+	}
+
 	return 0;
 }
 
@@ -249,16 +278,50 @@ static int printFrameBuffer(int fd, drmModeResPtr res, drmModeFBPtr fb)
 	printf("\tdepth     : %i\n", fb->depth);
 	printf("\tbuffer_id : %i\n", fb->handle);
 
+	if (full_props) {
+		printObjectProps(fd, fb->fb_id, DRM_MODE_OBJECT_FB);
+	}
+
+	return 0;
+}
+
+static int printPlane(int fd, drmModePlanePtr plane)
+{
+	uint32_t i;
+
+	printf("Plane\n");
+	printf("\tcount_formats  : %i\n", plane->count_formats);
+	if (plane->count_formats) {
+		printf("\tformats        :");
+		for (i = 0; i < plane->count_formats; i++)
+			printf(" %c%c%c%c", plane->formats[i] >> 24, plane->formats[i] >> 16, plane->formats[i] >> 8, plane->formats[i] >> 0);
+		printf("\n");
+	}
+	printf("\tplane_id       : %i\n", plane->plane_id);
+	printf("\tcrtc_id        : %i\n", plane->crtc_id);
+	printf("\tfb_id          : %i\n", plane->fb_id);;
+	printf("\tcrtc_x         : %i\n", plane->crtc_x);
+	printf("\tcrtc_y         : %i\n", plane->crtc_y);
+	printf("\tx              : %i\n", plane->x);
+	printf("\ty              : %i\n", plane->y);
+	printf("\tpossible_crtcs : 0x%x\n", plane->possible_crtcs);
+	printf("\tgamma_size     : %i\n", plane->gamma_size);
+
+	if (full_props) {
+		printObjectProps(fd, plane->plane_id, DRM_MODE_OBJECT_PLANE);
+	}
+
 	return 0;
 }
 
-static int printRes(int fd, drmModeResPtr res)
+static int printRes(int fd, drmModeResPtr res, drmModePlaneResPtr pres)
 {
 	int i;
 	drmModeFBPtr fb;
 	drmModeCrtcPtr crtc;
 	drmModeEncoderPtr encoder;
 	drmModeConnectorPtr connector;
+	drmModePlanePtr plane;
 
 	printf("Resources\n\n");
 
@@ -266,6 +329,7 @@ static int printRes(int fd, drmModeResPtr res)
 	printf("count_encoders   : %i\n", res->count_encoders);
 	printf("count_crtcs      : %i\n", res->count_crtcs);
 	printf("count_fbs        : %i\n", res->count_fbs);
+	printf("count_planes     : %i\n", pres->count_planes);
 
 	printf("\n");
 
@@ -325,6 +389,19 @@ static int printRes(int fd, drmModeResPtr res)
 		}
 	}
 
+	if (planes) {
+		for (i = 0; i < (int)pres->count_planes; i++) {
+			plane = drmModeGetPlane(fd, pres->planes[i]);
+
+			if (!plane)
+				printf("Could not get plane %i\n", pres->planes[i]);
+			else {
+				printPlane(fd, plane);
+				drmModeFreePlane(plane);
+			}
+		}
+	}
+
 	return 0;
 }
 
@@ -338,6 +415,7 @@ static void args(int argc, char **argv)
 	crtcs = 0;
 	modes = 0;
 	encoders = 0;
+	planes = 0;
 	full_modes = 0;
 	full_props = 0;
 	connectors = 0;
@@ -376,12 +454,16 @@ static void args(int argc, char **argv)
 		} else if (strcmp(argv[i], "-encoders") == 0) {
 			encoders = 1;
 			defaults = 0;
+		} else if (strcmp(argv[i], "-planes") == 0) {
+			planes = 1;
+			defaults = 0;
 		} else if (strcmp(argv[i], "-v") == 0) {
 			fbs = 1;
 			edid = 1;
 			crtcs = 1;
 			modes = 1;
 			encoders = 1;
+			planes = 1;
 			full_modes = 1;
 			full_props = 1;
 			connectors = 1;
@@ -397,6 +479,7 @@ static void args(int argc, char **argv)
 		crtcs = 1;
 		modes = 1;
 		encoders = 1;
+		planes = 1;
 		full_modes = 0;
 		full_props = 0;
 		connectors = 1;
@@ -407,6 +490,7 @@ int main(int argc, char **argv)
 {
 	int fd;
 	drmModeResPtr res;
+	drmModePlaneResPtr pres;
 
 	if (argc == 1) {
 		printf("Please add modulename as first argument\n");
@@ -430,9 +514,17 @@ int main(int argc, char **argv)
 		drmClose(fd);
 		return 1;
 	}
+	pres = drmModeGetPlaneResources(fd);
+	if (pres == 0) {
+		printf("Failed to get plane resources from card\n");
+		drmModeFreeResources(res);
+		drmClose(fd);
+		return 1;
+	}
 
-	printRes(fd, res);
+	printRes(fd, res, pres);
 
+	drmModeFreePlaneResources(pres);
 	drmModeFreeResources(res);
 
 	printf("Ok\n");
-- 
2.7.4

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

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH libdrm 2/2] tests/modeprint: Print details for IN_FORMATS blob
  2017-11-19  9:49 [PATCH libdrm 0/2] Print plane modifiers in modeprint Wladimir J. van der Laan
  2017-11-19  9:49 ` [PATCH libdrm 1/2] tests/modeprint: Print plane and other object properties Wladimir J. van der Laan
@ 2017-11-19  9:49 ` Wladimir J. van der Laan
  2017-11-20 11:36 ` [PATCH libdrm 0/2] Print plane modifiers in modeprint Emil Velikov
  2 siblings, 0 replies; 4+ messages in thread
From: Wladimir J. van der Laan @ 2017-11-19  9:49 UTC (permalink / raw)
  To: dri-devel; +Cc: Alex Deucher, Wladimir J. van der Laan, Emil Velikov

Pretty-print formats and modifiers in IN_FORMATS blob.

Signed-off-by: Wladimir J. van der Laan <laanwj@gmail.com>
---
 tests/modeprint/modeprint.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/tests/modeprint/modeprint.c b/tests/modeprint/modeprint.c
index 42c0a1b..ce84279 100644
--- a/tests/modeprint/modeprint.c
+++ b/tests/modeprint/modeprint.c
@@ -93,6 +93,28 @@ static int printMode(struct drm_mode_modeinfo *mode)
 	return 0;
 }
 
+static int printBlob(const char *name, void *data, uint32_t length)
+{
+	if (!strcmp(name, "IN_FORMATS")) {
+		struct drm_format_modifier_blob *m = data;
+		uint32_t *fmts = (uint32_t *)(((char *)data) + m->formats_offset);
+		struct drm_format_modifier *mod = (struct drm_format_modifier *)(((char *)data) + m->modifiers_offset);
+		int i,j,k;
+		printf("\tmodifiers    :\n");
+		for (j = 0; j < (int)m->count_modifiers; j++) {
+			printf("\t\t0x%016" PRIx64, mod[j].modifier);
+			for (i = 0; i < 64 && (i + mod[j].offset) < (int)m->count_formats; i++) {
+				if (mod[j].formats & (1<<i)) {
+					k = i + mod[j].offset;
+					printf(" %c%c%c%c", fmts[k] >> 24, fmts[k] >> 16, fmts[k] >> 8, fmts[k] >> 0);
+				}
+			}
+			printf("\n");
+		}
+	}
+	return 0;
+}
+
 static int printProperty(int fd, drmModePropertyPtr props, uint64_t value)
 {
 	const char *name = NULL;
@@ -120,6 +142,7 @@ static int printProperty(int fd, drmModePropertyPtr props, uint64_t value)
 		blob = drmModeGetPropertyBlob(fd, value);
 		if (blob) {
 			printf("blob is %d length, %08X\n", blob->length, *(uint32_t *)blob->data);
+			printBlob(props->name, blob->data, blob->length);
 			drmModeFreePropertyBlob(blob);
 		} else {
 			printf("error getting blob %" PRIu64 "\n", value);
-- 
2.7.4

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

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH libdrm 0/2] Print plane modifiers in modeprint
  2017-11-19  9:49 [PATCH libdrm 0/2] Print plane modifiers in modeprint Wladimir J. van der Laan
  2017-11-19  9:49 ` [PATCH libdrm 1/2] tests/modeprint: Print plane and other object properties Wladimir J. van der Laan
  2017-11-19  9:49 ` [PATCH libdrm 2/2] tests/modeprint: Print details for IN_FORMATS blob Wladimir J. van der Laan
@ 2017-11-20 11:36 ` Emil Velikov
  2 siblings, 0 replies; 4+ messages in thread
From: Emil Velikov @ 2017-11-20 11:36 UTC (permalink / raw)
  To: Wladimir J. van der Laan; +Cc: Alex Deucher, ML dri-devel

On 19 November 2017 at 09:49, Wladimir J. van der Laan <laanwj@gmail.com> wrote:
> This patch series adds support for printing the properties of all DRM mode
> objects. This is subsequently used to parse the IN_FORMATS blob to be able to
> print the available modifiers and their formats.
>
> Wladimir J. van der Laan (2):
>   tests/modeprint: Print plane and other object properties
>   tests/modeprint: Print details for IN_FORMATS blob
>
Series looks good.
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>

Crazy idea:
Worth folding modeprint and modetest into a single binary?
There seems to be a lot of duplicated functionality across the two.

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-11-20 11:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-19  9:49 [PATCH libdrm 0/2] Print plane modifiers in modeprint Wladimir J. van der Laan
2017-11-19  9:49 ` [PATCH libdrm 1/2] tests/modeprint: Print plane and other object properties Wladimir J. van der Laan
2017-11-19  9:49 ` [PATCH libdrm 2/2] tests/modeprint: Print details for IN_FORMATS blob Wladimir J. van der Laan
2017-11-20 11:36 ` [PATCH libdrm 0/2] Print plane modifiers in modeprint Emil Velikov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).