0067-egl_dri2-set-pbuffer-config-attribs-to-0-for-non-pbu.patch 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. From 8dd3c5e884c1ff76bcc67759dd3f6f8559096859 Mon Sep 17 00:00:00 2001
  2. From: Frank Binns <frank.binns@imgtec.com>
  3. Date: Wed, 4 Jun 2014 13:43:03 +0100
  4. Subject: [PATCH] egl_dri2: set pbuffer config attribs to 0 for non-pbuffer
  5. configs
  6. If the EGL_PBUFFER_BIT isn't set in the surface type, don't set the
  7. EGL_MAX_PBUFFER_WIDTH, EGL_MAX_PBUFFER_HEIGHT and
  8. EGL_MAX_PBUFFER_PIXELS attributes to non-zero values when adding an
  9. EGL config. If the EGL_PBUFFER_BIT is set, don't override non-zero
  10. values from the DRI config.
  11. ---
  12. src/egl/drivers/dri2/egl_dri2.c | 20 ++++++++++++++++++--
  13. 1 file changed, 18 insertions(+), 2 deletions(-)
  14. diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
  15. index 56b5175..1b10c2e 100644
  16. --- a/src/egl/drivers/dri2/egl_dri2.c
  17. +++ b/src/egl/drivers/dri2/egl_dri2.c
  18. @@ -407,6 +407,7 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id,
  19. struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
  20. _EGLConfig base;
  21. unsigned int attrib, value, double_buffer;
  22. + unsigned int pbuffer_width = 0, pbuffer_height = 0, pbuffer_pixels = 0;
  23. bool srgb = false;
  24. EGLint key, bind_to_texture_rgb, bind_to_texture_rgba;
  25. int dri_shifts[4] = { -1, -1, -1, -1 };
  26. @@ -530,11 +531,17 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id,
  27. break;
  28. case __DRI_ATTRIB_MAX_PBUFFER_WIDTH:
  29. - base.MaxPbufferWidth = _EGL_MAX_PBUFFER_WIDTH;
  30. + pbuffer_width = (value != 0) ? value : _EGL_MAX_PBUFFER_WIDTH;
  31. break;
  32. +
  33. case __DRI_ATTRIB_MAX_PBUFFER_HEIGHT:
  34. - base.MaxPbufferHeight = _EGL_MAX_PBUFFER_HEIGHT;
  35. + pbuffer_height = (value != 0) ? value : _EGL_MAX_PBUFFER_HEIGHT;
  36. + break;
  37. +
  38. + case __DRI_ATTRIB_MAX_PBUFFER_PIXELS:
  39. + pbuffer_pixels = value;
  40. break;
  41. +
  42. case __DRI_ATTRIB_MUTABLE_RENDER_BUFFER:
  43. if (disp->Extensions.KHR_mutable_render_buffer)
  44. surface_type |= EGL_MUTABLE_RENDER_BUFFER_BIT_KHR;
  45. @@ -614,6 +621,15 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id,
  46. }
  47. }
  48. + if (surface_type & EGL_PBUFFER_BIT) {
  49. + if (pbuffer_pixels == 0)
  50. + pbuffer_pixels = pbuffer_width * pbuffer_height;
  51. +
  52. + base.MaxPbufferWidth = pbuffer_width;
  53. + base.MaxPbufferHeight = pbuffer_height;
  54. + base.MaxPbufferPixels = pbuffer_pixels;
  55. + }
  56. +
  57. if (attr_list)
  58. for (int i = 0; attr_list[i] != EGL_NONE; i += 2)
  59. _eglSetConfigKey(&base, attr_list[i], attr_list[i+1]);