Home | History | Annotate | Download | only in dri2

Lines Matching refs:dri2_surf

82    struct dri2_egl_surface *dri2_surf = data;
86 if (dri2_surf->wl_drm_buffer[i] == buffer)
95 dri2_surf->wl_buffer_lock[i] = 0;
106 struct dri2_egl_surface *dri2_surf = data;
108 dri2_egl_display(dri2_surf->base.Resource.Display);
110 (*dri2_dpy->flush->invalidate)(dri2_surf->dri_drawable);
123 struct dri2_egl_surface *dri2_surf;
128 dri2_surf = malloc(sizeof *dri2_surf);
129 if (!dri2_surf) {
134 if (!_eglInitSurface(&dri2_surf->base, disp, type, conf, attrib_list))
138 dri2_surf->wl_drm_buffer[i] = NULL;
139 dri2_surf->wl_buffer_lock[i] = 0;
143 dri2_surf->dri_buffers[i] = NULL;
145 dri2_surf->pending_buffer = NULL;
146 dri2_surf->third_buffer = NULL;
147 dri2_surf->frame_callback = NULL;
148 dri2_surf->pending_buffer_callback = NULL;
151 dri2_surf->format = WL_DRM_FORMAT_XRGB8888;
153 dri2_surf->format = WL_DRM_FORMAT_ARGB8888;
157 dri2_surf->wl_win = (struct wl_egl_window *) window;
159 dri2_surf->wl_win->private = dri2_surf;
160 dri2_surf->wl_win->resize_callback = resize_callback;
162 dri2_surf->base.Width = -1;
163 dri2_surf->base.Height = -1;
169 dri2_surf->dri_drawable =
174 dri2_surf);
175 if (dri2_surf->dri_drawable == NULL) {
180 return &dri2_surf->base;
183 dri2_dpy->core->destroyDrawable(dri2_surf->dri_drawable);
185 free(dri2_surf);
209 struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf);
217 (*dri2_dpy->core->destroyDrawable)(dri2_surf->dri_drawable);
220 if (dri2_surf->wl_drm_buffer[i])
221 wl_buffer_destroy(dri2_surf->wl_drm_buffer[i]);
224 if (dri2_surf->dri_buffers[i])
226 dri2_surf->dri_buffers[i]);
228 if (dri2_surf->third_buffer) {
230 dri2_surf->third_buffer);
233 if (dri2_surf->frame_callback)
234 wl_callback_destroy(dri2_surf->frame_callback);
236 if (dri2_surf->pending_buffer_callback)
237 wl_callback_destroy(dri2_surf->pending_buffer_callback);
240 if (dri2_surf->base.Type == EGL_WINDOW_BIT) {
241 dri2_surf->wl_win->private = NULL;
242 dri2_surf->wl_win->resize_callback = NULL;
251 wayland_create_buffer(struct dri2_egl_surface *dri2_surf,
255 dri2_egl_display(dri2_surf->base.Resource.Display);
259 dri2_surf->base.Width, dri2_surf->base.Height,
260 buffer->pitch, dri2_surf->format);
261 wl_buffer_add_listener(buf, &wl_buffer_listener, dri2_surf);
267 dri2_process_back_buffer(struct dri2_egl_surface *dri2_surf, unsigned format)
270 dri2_egl_display(dri2_surf->base.Resource.Display);
274 switch (dri2_surf->base.Type) {
277 if (dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT] != NULL)
279 dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT] =
282 dri2_surf->base.Width, dri2_surf->base.Height);
293 struct dri2_egl_surface *dri2_surf = data;
295 dri2_egl_display(dri2_surf->base.Resource.Display);
298 if (!dri2_surf->pending_buffer)
302 dri2_surf->pending_buffer);
303 dri2_surf->pending_buffer = NULL;
306 dri2_surf->pending_buffer_callback = NULL;
314 dri2_release_buffers(struct dri2_egl_surface *dri2_surf)
317 dri2_egl_display(dri2_surf->base.Resource.Display);
321 if (dri2_surf->third_buffer) {
323 dri2_surf->third_buffer);
324 dri2_surf->third_buffer = NULL;
328 if (dri2_surf->dri_buffers[i]) {
331 if (dri2_surf->pending_buffer)
333 dri2_surf->pending_buffer = dri2_surf->dri_buffers[i];
336 &release_buffer_listener, dri2_surf);
339 dri2_surf->pending_buffer_callback = callback;
343 dri2_surf->dri_buffers[i]);
346 dri2_surf->dri_buffers[i] = NULL;
360 destroy_third_buffer(struct dri2_egl_surface *dri2_surf)
363 dri2_egl_display(dri2_surf->base.Resource.Display);
365 if (dri2_surf->third_buffer == NULL)
369 dri2_surf->third_buffer);
370 dri2_surf->third_buffer = NULL;
372 if (dri2_surf->wl_drm_buffer[WL_BUFFER_THIRD])
373 wl_buffer_destroy(dri2_surf->wl_drm_buffer[WL_BUFFER_THIRD]);
374 dri2_surf->wl_drm_buffer[WL_BUFFER_THIRD] = NULL;
375 dri2_surf->wl_buffer_lock[WL_BUFFER_THIRD] = 0;
379 swap_wl_buffers(struct dri2_egl_surface *dri2_surf,
384 tmp = dri2_surf->wl_buffer_lock[a];
385 dri2_surf->wl_buffer_lock[a] = dri2_surf->wl_buffer_lock[b];
386 dri2_surf->wl_buffer_lock[b] = tmp;
388 pointer_swap((const void **) &dri2_surf->wl_drm_buffer[a],
389 (const void **) &dri2_surf->wl_drm_buffer[b]);
393 swap_back_and_third(struct dri2_egl_surface *dri2_surf)
395 if (dri2_surf->wl_buffer_lock[WL_BUFFER_THIRD])
396 destroy_third_buffer(dri2_surf);
398 pointer_swap((const void **) &dri2_surf->dri_buffers[__DRI_BUFFER_BACK_LEFT],
399 (const void **) &dri2_surf->third_buffer);
401 swap_wl_buffers(dri2_surf, WL_BUFFER_BACK, WL_BUFFER_THIRD);
405 dri2_prior_buffer_creation(struct dri2_egl_surface *dri2_surf,
410 if (dri2_surf->wl_buffer_lock[WL_BUFFER_BACK])
411 swap_back_and_third(dri2_surf);
412 else if (dri2_surf->third_buffer)
413 destroy_third_buffer(dri2_surf);
427 struct dri2_egl_surface *dri2_surf = loaderPrivate;
429 dri2_egl_display(dri2_surf->base.Resource.Display);
435 if (dri2_surf->base.Type == EGL_WINDOW_BIT &&
436 (dri2_surf->base.Width != dri2_surf->wl_win->width ||
437 dri2_surf->base.Height != dri2_surf->wl_win->height)) {
439 dri2_release_buffers(dri2_surf);
441 dri2_surf->base.Width = dri2_surf->wl_win->width;
442 dri2_surf->base.Height = dri2_surf->wl_win->height;
443 dri2_surf->dx = dri2_surf->wl_win->dx;
444 dri2_surf->dy = dri2_surf->wl_win->dy;
447 if (dri2_surf->wl_drm_buffer[i])
448 wl_buffer_destroy(dri2_surf->wl_drm_buffer[i]);
449 dri2_surf->wl_drm_buffer[i] = NULL;
450 dri2_surf->wl_buffer_lock[i] = 0;
454 dri2_surf->buffer_count = 0;
457 assert(dri2_surf->buffer_count < 5);
459 dri2_prior_buffer_creation(dri2_surf, attachments[i]);
461 if (dri2_surf->dri_buffers[attachments[i]] == NULL) {
463 dri2_surf->dri_buffers[attachments[i]] =
466 dri2_surf->base.Width, dri2_surf->base.Height);
468 if (!dri2_surf->dri_buffers[attachments[i]])
472 dri2_process_back_buffer(dri2_surf, attachments[i+1]);
475 memcpy(&dri2_surf->buffers[dri2_surf->buffer_count],
476 dri2_surf->dri_buffers[attachments[i]],
479 dri2_surf->buffer_count++;
482 assert(dri2_surf->dri_buffers[__DRI_BUFFER_BACK_LEFT]);
484 *out_count = dri2_surf->buffer_count;
485 if (dri2_surf->buffer_count == 0)
488 *width = dri2_surf->base.Width;
489 *height = dri2_surf->base.Height;
491 return dri2_surf->buffers;
536 struct dri2_egl_surface *dri2_surf = loaderPrivate;
538 dri2WaitGL(dri2_surf);
547 struct dri2_egl_surface *dri2_surf = data;
549 dri2_surf->frame_callback = NULL;
564 struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw);
568 while (dri2_surf->frame_callback && ret != -1)
573 dri2_surf->frame_callback = wl_surface_frame(dri2_surf->wl_win->surface);
574 wl_callback_add_listener(dri2_surf->frame_callback,
575 dri2_surf);
576 wl_proxy_set_queue((struct wl_proxy *) dri2_surf->frame_callback,
579 if (dri2_surf->base.Type == EGL_WINDOW_BIT) {
581 (const void **) &dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT],
582 (const void **) &dri2_surf->dri_buffers[__DRI_BUFFER_BACK_LEFT]);
584 dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT]->attachment =
586 dri2_surf->dri_buffers[__DRI_BUFFER_BACK_LEFT]->attachment =
589 swap_wl_buffers(dri2_surf, WL_BUFFER_FRONT, WL_BUFFER_BACK);
591 if (!dri2_surf->wl_drm_buffer[WL_BUFFER_FRONT])
592 dri2_surf->wl_drm_buffer[WL_BUFFER_FRONT] =
593 wayland_create_buffer(dri2_surf,
594 dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT]);
596 wl_surface_attach(dri2_surf->wl_win->surface,
597 dri2_surf->wl_drm_buffer[WL_BUFFER_FRONT],
598 dri2_surf->dx, dri2_surf->dy);
599 dri2_surf->wl_buffer_lock[WL_BUFFER_FRONT] = 1;
601 dri2_surf->wl_win->attached_width = dri2_surf->base.Width;
602 dri2_surf->wl_win->attached_height = dri2_surf->base.Height;
604 dri2_surf->dx = 0;
605 dri2_surf->dy = 0;
607 wl_surface_damage(dri2_surf->wl_win->surface, 0, 0,
608 dri2_surf->base.Width, dri2_surf->base.Height);
610 wl_surface_commit(dri2_surf->wl_win->surface);
616 if (ctx && ctx->DrawSurface == &dri2_surf->base)
620 (*dri2_dpy->flush->flush)(dri2_surf->dri_drawable);
621 (*dri2_dpy->flush->invalidate)(dri2_surf->dri_drawable);