droid_create_pbuffer_surface(_EGLDriver *drv, _EGLDisplay *disp,
_EGLConfig *conf, const EGLint *attrib_list)
{
- return NULL;
+ return droid_create_surface(drv, disp, EGL_PBUFFER_BIT, conf,
+ NULL, attrib_list);
}
static EGLBoolean
if (buf->name)
num_buffers++;
+
+ break;
}
- break;
+ /* fall through for pbuffers */
case __DRI_BUFFER_DEPTH:
case __DRI_BUFFER_STENCIL:
case __DRI_BUFFER_ACCUM:
int format_count = 0;
for (j = 0; dri2_dpy->driver_configs[j]; j++) {
+ const EGLint surface_type = EGL_WINDOW_BIT | EGL_PBUFFER_BIT;
struct dri2_egl_config *dri2_conf;
dri2_conf = dri2_add_config(dpy, dri2_dpy->driver_configs[j],
- count + 1, visuals[i].size, EGL_WINDOW_BIT, NULL,
+ count + 1, visuals[i].size, surface_type, NULL,
visuals[i].rgba_masks);
if (dri2_conf) {
dri2_conf->base.NativeVisualID = visuals[i].format;
dri2_conf->base.RenderableType &= ~EGL_OPENGL_BIT;
dri2_conf->base.Conformant &= ~EGL_OPENGL_BIT;
- /* and we want to make sure GL_DRAW_BUFFER is always GL_BACK */
+ /*
+ * We want to make sure GL_DRAW_BUFFER for windows or pbuffers is always
+ * GL_BACK. For EGL configs that do not have a double DRI config, clear
+ * the surface type.
+ *
+ * This is just to be on the safe side. dri2_add_config never sets
+ * EGL_WINDOW_BIT or EGL_PBUFFER_BIT for such configs.
+ */
if (!dri2_conf->dri_double_config)
- dri2_conf->base.SurfaceType &= ~EGL_WINDOW_BIT;
+ dri2_conf->base.SurfaceType = 0;
}
return (count != 0);