From a25d5dfccc8a63e7eab0673f31bacc3a985299b2 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Wed, 8 Mar 2017 19:13:51 +0200 Subject: kmstest: Add support for cached buffers Signed-off-by: Laurent Pinchart --- utils/kmstest.cpp | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) (limited to 'utils') diff --git a/utils/kmstest.cpp b/utils/kmstest.cpp index e412f90..d649938 100644 --- a/utils/kmstest.cpp +++ b/utils/kmstest.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include @@ -49,6 +50,7 @@ struct OutputInfo static bool s_use_dmt; static bool s_use_cea; static unsigned s_num_buffers = 1; +static bool s_cached_buffers; static bool s_flip_mode; static bool s_flip_sync; static bool s_cvt; @@ -82,7 +84,7 @@ static void get_connector(ResourceManager& resman, OutputInfo& output, const str output.mode = output.connector->get_default_mode(); } -static void get_default_crtc(Card& card, OutputInfo& output) +static void get_default_crtc(OmapCard& card, OutputInfo& output) { Crtc* crtc = output.connector->get_current_crtc(); @@ -103,7 +105,7 @@ static void get_default_crtc(Card& card, OutputInfo& output) EXIT("Could not find available crtc"); } -static void parse_crtc(Card& card, const string& crtc_str, OutputInfo& output) +static void parse_crtc(OmapCard& card, const string& crtc_str, OutputInfo& output) { // @12:1920x1200i@60 // @12:33000000,800/210/30/16/-,480/22/13/10/-,i @@ -228,7 +230,7 @@ static void parse_crtc(Card& card, const string& crtc_str, OutputInfo& output) } } -static void parse_plane(Card& card, const string& plane_str, const OutputInfo& output, PlaneInfo& pinfo) +static void parse_plane(OmapCard& card, const string& plane_str, const OutputInfo& output, PlaneInfo& pinfo) { // 3:400,400-400x400 const regex plane_re("(?:(@?)(\\d+):)?" // 3: @@ -288,17 +290,17 @@ static void parse_plane(Card& card, const string& plane_str, const OutputInfo& o pinfo.y = output.mode.vdisplay / 2 - pinfo.h / 2; } -static vector get_default_fb(Card& card, unsigned width, unsigned height) +static vector get_default_fb(OmapCard& card, unsigned width, unsigned height) { vector v; for (unsigned i = 0; i < s_num_buffers; ++i) - v.push_back(new DumbFramebuffer(card, width, height, PixelFormat::XRGB8888)); + v.push_back(new OmapFramebuffer(card, width, height, PixelFormat::XRGB8888, s_cached_buffers)); return v; } -static vector parse_fb(Card& card, const string& fb_str, unsigned def_w, unsigned def_h) +static vector parse_fb(OmapCard& card, const string& fb_str, unsigned def_w, unsigned def_h) { unsigned w = def_w; unsigned h = def_h; @@ -326,7 +328,7 @@ static vector parse_fb(Card& card, const string& fb_str, uns vector v; for (unsigned i = 0; i < s_num_buffers; ++i) - v.push_back(new DumbFramebuffer(card, w, h, format)); + v.push_back(new OmapFramebuffer(card, w, h, format, s_cached_buffers)); return v; } @@ -358,6 +360,7 @@ static const char* usage_str = " -f, --fb=FB FB is [x][-][<4cc>]\n" " -v, --view=VIEW VIEW is ,-x\n" " --dmt Search for the given mode from DMT tables\n" + " --cached Map framebuffers cached\n" " --cea Search for the given mode from CEA tables\n" " --cvt=CVT Create videomode with CVT. CVT is 'v1', 'v2' or 'v2o'\n" " --flip[=max] Do page flipping for each output with an optional maximum flips count\n" @@ -468,6 +471,10 @@ static vector parse_cmdline(int argc, char **argv) exit(-1); } }), + Option("|cached", []() + { + s_cached_buffers = true; + }), Option("h|help", [&]() { usage(); @@ -485,7 +492,7 @@ static vector parse_cmdline(int argc, char **argv) return args; } -static vector setups_to_outputs(Card& card, ResourceManager& resman, const vector& output_args) +static vector setups_to_outputs(OmapCard& card, ResourceManager& resman, const vector& output_args) { vector outputs; @@ -683,7 +690,7 @@ static void draw_test_patterns(const vector& outputs) } } -static void set_crtcs_n_planes_legacy(Card& card, const vector& outputs) +static void set_crtcs_n_planes_legacy(OmapCard& card, const vector& outputs) { // Disable unused crtcs for (Crtc* crtc : card.get_crtcs()) { @@ -717,7 +724,7 @@ static void set_crtcs_n_planes_legacy(Card& card, const vector& outp } } -static void set_crtcs_n_planes_atomic(Card& card, const vector& outputs) +static void set_crtcs_n_planes_atomic(OmapCard& card, const vector& outputs) { int r; @@ -818,7 +825,7 @@ static void set_crtcs_n_planes_atomic(Card& card, const vector& outp EXIT("Atomic commit failed: %d\n", r); } -static void set_crtcs_n_planes(Card& card, const vector& outputs) +static void set_crtcs_n_planes(OmapCard& card, const vector& outputs) { if (card.has_atomic()) set_crtcs_n_planes_atomic(card, outputs); @@ -831,7 +838,7 @@ static bool max_flips_reached; class FlipState : private PageFlipHandlerBase { public: - FlipState(Card& card, const string& name, vector outputs) + FlipState(OmapCard& card, const string& name, vector outputs) : m_card(card), m_name(name), m_outputs(outputs) { } @@ -953,7 +960,7 @@ private: } } - Card& m_card; + OmapCard& m_card; string m_name; vector m_outputs; unsigned m_frame_num; @@ -966,7 +973,7 @@ private: static const unsigned bar_speed = 8; }; -static void main_flip(Card& card, const vector& outputs) +static void main_flip(OmapCard& card, const vector& outputs) { fd_set fds; @@ -1020,7 +1027,7 @@ int main(int argc, char **argv) { vector output_args = parse_cmdline(argc, argv); - Card card(s_device_path); + OmapCard card(s_device_path); if (!card.has_atomic() && s_flip_sync) EXIT("Synchronized flipping requires atomic modesetting"); -- cgit v1.2.3