[igt-dev] [PATCH 2/4] tests/kms_color: Used debugfs apis for deep-color
Bhanuprakash Modem
bhanuprakash.modem at intel.com
Fri Apr 8 06:51:41 UTC 2022
Instead of parsing the EDID, read from the debugfs to make
sure the connected monitor supports deep-color.
Cc: Uma Shankar <uma.shankar at intel.com>
Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
---
tests/kms_color.c | 6 ++++--
tests/kms_color_helper.c | 46 +++++-----------------------------------
tests/kms_color_helper.h | 2 +-
3 files changed, 10 insertions(+), 44 deletions(-)
diff --git a/tests/kms_color.c b/tests/kms_color.c
index afff1744..08ce6ab2 100644
--- a/tests/kms_color.c
+++ b/tests/kms_color.c
@@ -883,20 +883,22 @@ run_tests_for_pipe(data_t *data, enum pipe p)
"At least GEN 11 is required to validate Deep-color.\n");
for_each_valid_output_on_pipe(&data->display, p, output) {
- drmModeConnector *connector = output->config.connector;
uint64_t max_bpc = get_max_bpc(output);
bool ret;
if (!max_bpc)
continue;
- if (!panel_supports_deep_color(data->drm_fd, connector))
+ if (!panel_supports_deep_color(data->drm_fd, output->name))
continue;
data->color_depth = 10;
data->drm_format = DRM_FORMAT_XRGB2101010;
data->output = output;
igt_output_set_prop_value(output, IGT_CONNECTOR_MAX_BPC, 10);
+ igt_display_commit(&data->display);
+
+ igt_assert_output_bpc_equal(data->drm_fd, p, output->name, 10);
igt_dynamic_f("gamma-%s", output->name) {
ret = test_pipe_gamma(data, primary);
diff --git a/tests/kms_color_helper.c b/tests/kms_color_helper.c
index 3ef124cd..55f3e409 100644
--- a/tests/kms_color_helper.c
+++ b/tests/kms_color_helper.c
@@ -25,49 +25,13 @@
#include "kms_color_helper.h"
bool
-panel_supports_deep_color(int fd, drmModeConnector *connector)
+panel_supports_deep_color(int drm_fd, char *output_name)
{
- uint64_t edid_blob_id;
- uint8_t bit_depth, rev;
- const struct edid *edid;
- bool result;
- drmModePropertyBlobPtr edid_blob = NULL;
-
- igt_assert(kmstest_get_property(fd, connector->connector_id,
- DRM_MODE_OBJECT_CONNECTOR, "EDID", NULL,
- &edid_blob_id, NULL));
- edid_blob = drmModeGetPropertyBlob(fd, edid_blob_id);
- igt_require_f(edid_blob, "EDID blob is NULL\n");
-
- edid = (const struct edid *) edid_blob->data;
- rev = edid->revision;
-
- if (rev >= 4) {
- bit_depth = edid_get_bit_depth_from_vid(edid);
-
- if (bit_depth > 0 && bit_depth < 7)
- igt_info("Max supported bit depth: %d\n", ((bit_depth << 1) + 4));
- else
- igt_info("Max supported bit depth: Undefined\n");
-
- result = (bit_depth >= 3) && (bit_depth < 7);
- } else {
- bit_depth = edid_get_deep_color_from_vsdb(edid);
-
- if (bit_depth & HDMI_VSDB_DC_48BIT)
- igt_info("Max supported bit depth: 16\n");
- else if (bit_depth & HDMI_VSDB_DC_36BIT)
- igt_info("Max supported bit depth: 12\n");
- else if (bit_depth & HDMI_VSDB_DC_30BIT)
- igt_info("Max supported bit depth: 10\n");
- else
- igt_info("Max supported bit depth: Undefined\n");
-
- result = !!(bit_depth & (7 << 4));
- }
- drmModeFreePropertyBlob(edid_blob);
+ unsigned int maximum = igt_get_output_max_bpc(drm_fd, output_name);
+
+ igt_info("Max supported bit depth: %d\n", maximum);
- return result;
+ return maximum >= 10;
}
uint64_t get_max_bpc(igt_output_t *output)
diff --git a/tests/kms_color_helper.h b/tests/kms_color_helper.h
index a6665b1f..cc07f5ee 100644
--- a/tests/kms_color_helper.h
+++ b/tests/kms_color_helper.h
@@ -67,7 +67,7 @@ typedef struct {
color_t coeffs[];
} gamma_lut_t;
-bool panel_supports_deep_color(int fd, drmModeConnector *connector);
+bool panel_supports_deep_color(int fd, char *output_name);
uint64_t get_max_bpc(igt_output_t *output);
void paint_gradient_rectangles(data_t *data,
drmModeModeInfo *mode,
--
2.35.1
More information about the igt-dev
mailing list