[Intel-gfx] [PATCH] lib/igt_kms: Library changes to add Render Compression Tests

Mayuresh Gharpure mayuresh.s.gharpure at intel.com
Tue May 26 05:30:49 PDT 2015


The lib changes ensure the following:
1) Get the value of rc property during igt_display_init
2) Set the value of rc property during do_display_commit
3) Add supporting method to set rc property from kms_test

Signed-off-by: Mayuresh Gharpure <mayuresh.s.gharpure at intel.com>
---
 lib/igt_kms.c | 40 ++++++++++++++++++++++++++++++++++++++++
 lib/igt_kms.h | 13 +++++++++++++
 2 files changed, 53 insertions(+)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index f5670e0..df33727 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -1059,6 +1059,13 @@ void igt_display_init(igt_display_t *display, int drm_fd)
 					   &prop_value,
 					   NULL);
 			plane->rotation = (igt_rotation_t)prop_value;
+
+			get_plane_property(display->drm_fd, drm_plane->plane_id,
+					   "render compression",
+					   &plane->rc_property,
+					   &prop_value,
+					   NULL);
+			plane->rc_value = (igt_rc_t)prop_value;
 		}
 
 		if (display->has_universal_planes) {
@@ -1397,6 +1404,14 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
 		CHECK_RETURN(ret, fail_on_error);
 	}
 
+	if (plane->rc_changed) {
+		ret = igt_plane_set_property(plane, plane->rc_property,
+				       plane->rc_value);
+
+		plane->rc_changed = false;
+		CHECK_RETURN(ret, fail_on_error);
+	}
+
 	return 0;
 }
 
@@ -1903,6 +1918,18 @@ static const char *rotation_name(igt_rotation_t rotation)
 	}
 }
 
+static const char *rc_name(igt_rc_t compression)
+{
+	switch (compression) {
+	case IGT_COMP_NONE:
+		return "Not compression capable";
+	case IGT_COMP_RENDER:
+		return "Only render decompression";
+	default:
+		igt_assert(0);
+	}
+
+}
 void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
 {
 	igt_pipe_t *pipe = plane->pipe;
@@ -1917,6 +1944,19 @@ void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation)
 	plane->rotation_changed = true;
 }
 
+void igt_plane_set_render_compression(igt_plane_t *plane, igt_rc_t compression)
+{
+	igt_pipe_t *pipe = plane->pipe;
+	igt_display_t *display = pipe->display;
+
+	LOG(display, "%s.%d: plane_set_rc: %s \n",
+	kmstest_pipe_name(pipe->pipe),
+	plane->index, rc_name(compression));
+
+	plane->rc_value = compression;
+
+	plane->rc_changed = true;
+}
 /**
  * igt_crtc_set_background:
  * @pipe: pipe pointer to which background color to be set
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 09c08aa..3dbb3d6 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -170,6 +170,13 @@ typedef enum {
 	IGT_ROTATION_270 = 1 << 3,
 } igt_rotation_t;
 
+typedef enum {
+	/* this maps to the kernel API */
+	IGT_COMP_NONE   = 0,
+	IGT_COMP_RENDER  = 1,
+} igt_rc_t;
+
+
 typedef struct {
 	/*< private >*/
 	igt_pipe_t *pipe;
@@ -183,6 +190,7 @@ typedef struct {
 	unsigned int panning_changed  : 1;
 	unsigned int rotation_changed : 1;
 	unsigned int size_changed     : 1;
+	unsigned int rc_changed       : 1;
 	/*
 	 * drm_plane can be NULL for primary and cursor planes (when not
 	 * using the atomic modeset API)
@@ -192,6 +200,8 @@ typedef struct {
 
 	uint32_t rotation_property;
 
+	uint32_t rc_property;
+
 	/* position within pipe_src_w x pipe_src_h */
 	int crtc_x, crtc_y;
 	/* size within pipe_src_w x pipe_src_h */
@@ -199,6 +209,8 @@ typedef struct {
 	/* panning offset within the fb */
 	unsigned int pan_x, pan_y;
 	igt_rotation_t rotation;
+
+	igt_rc_t rc_value;
 } igt_plane_t;
 
 struct igt_pipe {
@@ -259,6 +271,7 @@ void igt_plane_set_position(igt_plane_t *plane, int x, int y);
 void igt_plane_set_size(igt_plane_t *plane, int w, int h);
 void igt_plane_set_panning(igt_plane_t *plane, int x, int y);
 void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation);
+void igt_plane_set_render_compression(igt_plane_t *plane, igt_rc_t compression);
 void igt_crtc_set_background(igt_pipe_t *pipe, uint64_t background);
 void igt_fb_set_position(struct igt_fb *fb, igt_plane_t *plane,
 	uint32_t x, uint32_t y);
-- 
1.9.1



More information about the Intel-gfx mailing list