0033-egl-wayland-expose-EXT_yuv_surface-support.patch 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. From ae4a6061fefd930234998c6d81942edeecafbd10 Mon Sep 17 00:00:00 2001
  2. From: Frank Binns <frank.binns@imgtec.com>
  3. Date: Thu, 11 Jan 2018 09:38:47 +0000
  4. Subject: [PATCH] egl/wayland: expose EXT_yuv_surface support
  5. This adds support for YUYV configs.
  6. ---
  7. src/egl/drivers/dri2/egl_dri2.c | 1 +
  8. src/egl/drivers/dri2/platform_wayland.c | 15 ++++++++++++++-
  9. 2 files changed, 15 insertions(+), 1 deletion(-)
  10. diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
  11. index ee3bcda..d511d73 100644
  12. --- a/src/egl/drivers/dri2/egl_dri2.c
  13. +++ b/src/egl/drivers/dri2/egl_dri2.c
  14. @@ -2769,6 +2769,7 @@ static const struct wl_drm_components_descriptor {
  15. { __DRI_IMAGE_COMPONENTS_Y_U_V, EGL_TEXTURE_Y_U_V_WL, 3 },
  16. { __DRI_IMAGE_COMPONENTS_Y_UV, EGL_TEXTURE_Y_UV_WL, 2 },
  17. { __DRI_IMAGE_COMPONENTS_Y_XUXV, EGL_TEXTURE_Y_XUXV_WL, 2 },
  18. + { __DRI_IMAGE_COMPONENTS_EXTERNAL, EGL_TEXTURE_EXTERNAL_WL, 1 },
  19. };
  20. static _EGLImage *
  21. diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
  22. index a096d95..72456d5 100644
  23. --- a/src/egl/drivers/dri2/platform_wayland.c
  24. +++ b/src/egl/drivers/dri2/platform_wayland.c
  25. @@ -135,6 +135,13 @@ static const struct dri2_wl_visual {
  26. { 11, 5, 0, -1 },
  27. { 5, 6, 5, 0 },
  28. },
  29. + {
  30. + "YUYV",
  31. + WL_DRM_FORMAT_YUYV, WL_SHM_FORMAT_YUYV,
  32. + __DRI_IMAGE_FORMAT_YUYV, __DRI_IMAGE_FORMAT_NONE, 32,
  33. + { -1, -1, -1, -1 },
  34. + { 0, 0, 0, 0 },
  35. + },
  36. };
  37. static_assert(ARRAY_SIZE(dri2_wl_visuals) <= EGL_DRI2_MAX_FORMATS,
  38. @@ -958,6 +965,7 @@ dri2_wl_get_capability(void *loaderPrivate, enum dri_loader_cap cap)
  39. {
  40. switch (cap) {
  41. case DRI_LOADER_CAP_FP16:
  42. + case DRI_LOADER_CAP_YUV_SURFACE_IMG:
  43. return 1;
  44. default:
  45. return 0;
  46. @@ -1552,6 +1560,7 @@ dri2_wl_add_configs_for_visuals(_EGLDisplay *disp)
  47. struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
  48. unsigned int format_count[ARRAY_SIZE(dri2_wl_visuals)] = { 0 };
  49. unsigned int count = 0;
  50. + EGLint surface_type;
  51. bool assigned;
  52. for (unsigned i = 0; dri2_dpy->driver_configs[i]; i++) {
  53. @@ -1563,8 +1572,12 @@ dri2_wl_add_configs_for_visuals(_EGLDisplay *disp)
  54. if (!BITSET_TEST(dri2_dpy->formats, j))
  55. continue;
  56. + surface_type = EGL_WINDOW_BIT;
  57. + if (dri2_wl_visuals[j].wl_drm_format != WL_DRM_FORMAT_YUYV)
  58. + surface_type |= EGL_PBUFFER_BIT;
  59. +
  60. dri2_conf = dri2_add_config(disp, dri2_dpy->driver_configs[i],
  61. - count + 1, EGL_WINDOW_BIT | EGL_PBUFFER_BIT, NULL, dri2_wl_visuals[j].rgba_shifts, dri2_wl_visuals[j].rgba_sizes);
  62. + count + 1, surface_type, NULL, dri2_wl_visuals[j].rgba_shifts, dri2_wl_visuals[j].rgba_sizes);
  63. if (dri2_conf) {
  64. if (dri2_conf->base.ConfigID == count + 1)
  65. count++;