summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/testpat.cpp40
1 files changed, 39 insertions, 1 deletions
diff --git a/tests/testpat.cpp b/tests/testpat.cpp
index a6c4bf9..b2d7b12 100644
--- a/tests/testpat.cpp
+++ b/tests/testpat.cpp
@@ -4,6 +4,7 @@
#include <set>
#include "kms++.h"
+#include "modedb.h"
#include "test.h"
#include "opts.h"
@@ -35,6 +36,9 @@ struct OutputInfo
vector<PlaneInfo> planes;
};
+static bool s_use_dmt;
+static bool s_use_cea;
+
static set<Crtc*> s_used_crtcs;
static set<Plane*> s_used_planes;
@@ -153,7 +157,31 @@ static void parse_crtc(Card& card, const string& crtc_str, OutputInfo& output)
bool ilace = sm[5].matched ? true : false;
unsigned refresh = sm[6].matched ? stoul(sm[6]) : 0;
- output.mode = output.connector->get_mode(w, h, refresh, ilace);
+ bool found_mode = false;
+
+ try {
+ output.mode = output.connector->get_mode(w, h, refresh, ilace);
+ found_mode = true;
+ } catch (exception& e) { }
+
+ if (!found_mode && s_use_dmt) {
+ try {
+ output.mode = find_dmt(w, h, refresh, ilace);
+ found_mode = true;
+ printf("Found mode from DMT\n");
+ } catch (exception& e) { }
+ }
+
+ if (!found_mode && s_use_cea) {
+ try {
+ output.mode = find_cea(w, h, refresh, ilace);
+ found_mode = true;
+ printf("Found mode from CEA\n");
+ } catch (exception& e) { }
+ }
+
+ if (!found_mode)
+ throw invalid_argument("Mode not found");
}
static void parse_plane(Card& card, const string& plane_str, const OutputInfo& output, PlaneInfo& pinfo)
@@ -258,6 +286,8 @@ static const char* usage_str =
" -r, --crtc=CRTC CRTC is [<crtc>:]<w>x<h>[@<Hz>]\n"
" -p, --plane=PLANE PLANE is [<plane>:][<x>,<y>-]<w>x<h>\n"
" -f, --fb=FB FB is [<w>x<h>][-][<4cc>]\n"
+ " --dmt Search for the given mode from DMT tables\n"
+ " --cea Search for the given mode from CEA tables\n"
"\n"
"<connector>, <crtc> and <plane> can be given by id (<id>) or index (@<idx>).\n"
"<connector> can also be given by name.\n"
@@ -327,6 +357,14 @@ static vector<Arg> parse_cmdline(int argc, char **argv)
{
args.push_back(Arg { ObjectType::Framebuffer, s });
}),
+ Option("|dmt", []()
+ {
+ s_use_dmt = true;
+ }),
+ Option("|cea", []()
+ {
+ s_use_cea = true;
+ }),
Option("h|help", [&]()
{
usage();