This enables us to check for overlay planes which are located 'below' the primary plane.
Since the alpha value only has an effect when creating surfaces with an alpha-pixelformat this doesn't affect the regular XRGB8888 primary surface.
Signed-off-by: Tobias Jakobi tjakobi@math.uni-bielefeld.de --- tests/modetest/buffers.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/tests/modetest/buffers.c b/tests/modetest/buffers.c index 7e214e8..30ac033 100644 --- a/tests/modetest/buffers.c +++ b/tests/modetest/buffers.c @@ -423,13 +423,13 @@ fill_smpte_rgb16(const struct rgb_info *rgb, unsigned char *mem, MAKE_RGBA(rgb, 0, 0, 192, 255), /* blue */ }; const uint16_t colors_middle[] = { - MAKE_RGBA(rgb, 0, 0, 192, 255), /* blue */ - MAKE_RGBA(rgb, 19, 19, 19, 255), /* black */ - MAKE_RGBA(rgb, 192, 0, 192, 255), /* magenta */ - MAKE_RGBA(rgb, 19, 19, 19, 255), /* black */ - MAKE_RGBA(rgb, 0, 192, 192, 255), /* cyan */ - MAKE_RGBA(rgb, 19, 19, 19, 255), /* black */ - MAKE_RGBA(rgb, 192, 192, 192, 255), /* grey */ + MAKE_RGBA(rgb, 0, 0, 192, 127), /* blue */ + MAKE_RGBA(rgb, 19, 19, 19, 127), /* black */ + MAKE_RGBA(rgb, 192, 0, 192, 127), /* magenta */ + MAKE_RGBA(rgb, 19, 19, 19, 127), /* black */ + MAKE_RGBA(rgb, 0, 192, 192, 127), /* cyan */ + MAKE_RGBA(rgb, 19, 19, 19, 127), /* black */ + MAKE_RGBA(rgb, 192, 192, 192, 127), /* grey */ }; const uint16_t colors_bottom[] = { MAKE_RGBA(rgb, 0, 33, 76, 255), /* in-phase */ @@ -547,13 +547,13 @@ fill_smpte_rgb32(const struct rgb_info *rgb, unsigned char *mem, MAKE_RGBA(rgb, 0, 0, 192, 255), /* blue */ }; const uint32_t colors_middle[] = { - MAKE_RGBA(rgb, 0, 0, 192, 255), /* blue */ - MAKE_RGBA(rgb, 19, 19, 19, 255), /* black */ - MAKE_RGBA(rgb, 192, 0, 192, 255), /* magenta */ - MAKE_RGBA(rgb, 19, 19, 19, 255), /* black */ - MAKE_RGBA(rgb, 0, 192, 192, 255), /* cyan */ - MAKE_RGBA(rgb, 19, 19, 19, 255), /* black */ - MAKE_RGBA(rgb, 192, 192, 192, 255), /* grey */ + MAKE_RGBA(rgb, 0, 0, 192, 127), /* blue */ + MAKE_RGBA(rgb, 19, 19, 19, 127), /* black */ + MAKE_RGBA(rgb, 192, 0, 192, 127), /* magenta */ + MAKE_RGBA(rgb, 19, 19, 19, 127), /* black */ + MAKE_RGBA(rgb, 0, 192, 192, 127), /* cyan */ + MAKE_RGBA(rgb, 19, 19, 19, 127), /* black */ + MAKE_RGBA(rgb, 192, 192, 192, 127), /* grey */ }; const uint32_t colors_bottom[] = { MAKE_RGBA(rgb, 0, 33, 76, 255), /* in-phase */
Don't assume that a plane supports any kind of pixelformat but do a check first.
Signed-off-by: Tobias Jakobi tjakobi@math.uni-bielefeld.de --- tests/modetest/modetest.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index 7f0c1cc..f5f00ba 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -969,6 +969,22 @@ page_flip_handler(int fd, unsigned int frame, } }
+static bool format_support(const drmModePlanePtr ovr, uint32_t fmt) +{ + unsigned int i; + bool ret = false; + + for (i = 0; i < ovr->count_formats; ++i) { + if (ovr->formats[i] != fmt) + continue; + + ret = true; + break; + } + + return ret; +} + static int set_plane(struct device *dev, struct plane_arg *p) { drmModePlane *ovr; @@ -999,7 +1015,7 @@ static int set_plane(struct device *dev, struct plane_arg *p)
for (i = 0; i < dev->resources->plane_res->count_planes && !plane_id; i++) { ovr = dev->resources->planes[i].plane; - if (!ovr) + if (!ovr || !format_support(ovr, p->fourcc)) continue;
if ((ovr->possible_crtcs & (1 << pipe)) && !ovr->crtc_id)
dri-devel@lists.freedesktop.org