<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Calibri Light";
        panose-1:2 15 3 2 2 2 4 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">When we tried to enable EGL on our project, we found that there was no pbuffer support for drm platform. I got some help from Alan and Kristian. Thank you so much! I studied
 platform_drm.c and compared it to other platforms’ code. Finally I was able to create this patch to enable pbuffer for drm platform. Our QA team has run full cycle testing and didn’t find any regression.  I wonder if anybody could review this patch to see
 if we could submit it to mesa.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">Thanks<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">Ying<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">--- mesa-10.5.5.orig/src/egl/drivers/dri2/egl_dri2.c              2015-05-11 12:10:59.000000000 -0700<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+++ mesa-10.5.5/src/egl/drivers/dri2/egl_dri2.c   2015-05-26 04:06:16.353346946 -0700<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">@@ -869,6 +869,10 @@ dri2_create_context(_EGLDriver *drv, _EG<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">        */<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">       if (conf->SurfaceType & EGL_WINDOW_BIT)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">          dri2_ctx->base.WindowRenderBuffer = EGL_BACK_BUFFER;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+      if (conf->SurfaceType & EGL_PBUFFER_BIT)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+              dri2_ctx->base.WindowRenderBuffer = EGL_BACK_BUFFER;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    else<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">       dri_config = NULL;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">diff -rupN mesa-10.5.5.orig/src/egl/drivers/dri2/platform_drm.c mesa-10.5.5/src/egl/drivers/dri2/platform_drm.c<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">--- mesa-10.5.5.orig/src/egl/drivers/dri2/platform_drm.c    2015-05-11 12:10:59.000000000 -0700<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+++ mesa-10.5.5/src/egl/drivers/dri2/platform_drm.c         2015-05-26 04:04:25.293346505 -0700<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">@@ -122,6 +122,8 @@ dri2_drm_create_surface(_EGLDriver *drv,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">       dri2_surf->base.Height = surf->base.height;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">       surf->dri_private = dri2_surf;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">       break;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+   case EGL_PBUFFER_BIT:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+      break;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    default:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">       goto cleanup_surf;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">@@ -130,7 +132,7 @@ dri2_drm_create_surface(_EGLDriver *drv,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">       dri2_surf->dri_drawable =<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">          (*dri2_dpy->dri2->createNewDrawable) (dri2_dpy->dri_screen,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">                                                dri2_conf->dri_double_config,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">-                                               dri2_surf->gbm_surf);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+                                               dri2_surf);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    } else {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">       assert(dri2_dpy->swrast != NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">@@ -153,6 +155,15 @@ dri2_drm_create_surface(_EGLDriver *drv,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    return NULL;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+static inline _EGLSurface *<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+dri2_drm_create_pbuffer_surface(_EGLDriver *drv, _EGLDisplay *disp,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+                                     _EGLConfig *conf,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+                                     const EGLint *attrib_list)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+   return dri2_drm_create_surface(drv, disp, EGL_PBUFFER_BIT, conf,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+                                  NULL, attrib_list);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">static _EGLSurface *<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">dri2_drm_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">                                _EGLConfig *conf, void *native_window,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">@@ -575,7 +586,7 @@ static struct dri2_egl_display_vtbl dri2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    .authenticate = dri2_drm_authenticate,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    .create_window_surface = dri2_drm_create_window_surface,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    .create_pixmap_surface = dri2_drm_create_pixmap_surface,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">-   .create_pbuffer_surface = dri2_fallback_create_pbuffer_surface,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+   .create_pbuffer_surface = dri2_drm_create_pbuffer_surface,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    .destroy_surface = dri2_drm_destroy_surface,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    .create_image = dri2_drm_create_image_khr,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    .swap_interval = dri2_fallback_swap_interval,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">@@ -596,6 +607,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EG<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    struct gbm_device *gbm;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    int fd = -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    int i;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+   EGLint surface_type;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    loader_set_logger(_eglLog);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">@@ -691,8 +703,9 @@ dri2_initialize_drm(_EGLDriver *drv, _EG<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">       attr_list[1] = format;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">       attr_list[2] = EGL_NONE;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+      surface_type =  EGL_WINDOW_BIT | EGL_PBUFFER_BIT;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">       dri2_add_config(disp, dri2_dpy->driver_configs[i],<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">-                      i + 1, EGL_WINDOW_BIT, attr_list, NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">+                      i + 1, surface_type, attr_list, NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif">    disp->Extensions.KHR_image_pixmap = EGL_TRUE;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Calibri Light",sans-serif"><o:p> </o:p></span></p>
</div>
</body>
</html>