Home | History | Annotate | Download | only in dri2

Lines Matching refs:dri2_surf

91    struct dri2_egl_surface *dri2_surf = data;
94 for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); ++i)
95 if (dri2_surf->color_buffers[i].wl_buffer == buffer)
98 if (i == ARRAY_SIZE(dri2_surf->color_buffers)) {
103 dri2_surf->color_buffers[i].locked = 0;
113 struct dri2_egl_surface *dri2_surf = data;
115 dri2_egl_display(dri2_surf->base.Resource.Display);
117 dri2_dpy->flush->invalidate(dri2_surf->dri_drawable);
123 struct dri2_egl_surface *dri2_surf = data;
124 dri2_surf->wl_win = NULL;
139 struct dri2_egl_surface *dri2_surf;
142 dri2_surf = calloc(1, sizeof *dri2_surf);
143 if (!dri2_surf) {
148 if (!_eglInitSurface(&dri2_surf->base, disp, EGL_WINDOW_BIT, conf, attrib_list))
153 dri2_surf->format = WL_DRM_FORMAT_RGB565;
155 dri2_surf->format = WL_DRM_FORMAT_XRGB8888;
157 dri2_surf->format = WL_DRM_FORMAT_ARGB8888;
160 dri2_surf->format = WL_SHM_FORMAT_RGB565;
162 dri2_surf->format = WL_SHM_FORMAT_XRGB8888;
164 dri2_surf->format = WL_SHM_FORMAT_ARGB8888;
172 dri2_surf->wl_win = window;
174 dri2_surf->wl_win->private = dri2_surf;
175 dri2_surf->wl_win->destroy_window_callback = destroy_window_callback;
177 dri2_surf->base.Width = -1;
178 dri2_surf->base.Height = -1;
181 dri2_surf->base.GLColorspace);
184 dri2_surf->wl_win->resize_callback = resize_callback;
191 dri2_surf->dri_drawable = (*createNewDrawable)(dri2_dpy->dri_screen, config,
192 dri2_surf);
193 if (dri2_surf->dri_drawable == NULL) {
198 dri2_wl_swap_interval(drv, disp, &dri2_surf->base,
201 return &dri2_surf->base;
204 free(dri2_surf);
232 struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf);
237 dri2_dpy->core->destroyDrawable(dri2_surf->dri_drawable);
239 for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++) {
240 if (dri2_surf->color_buffers[i].wl_buffer)
241 wl_buffer_destroy(dri2_surf->color_buffers[i].wl_buffer);
242 if (dri2_surf->color_buffers[i].dri_image)
243 dri2_dpy->image->destroyImage(dri2_surf->color_buffers[i].dri_image);
244 if (dri2_surf->color_buffers[i].linear_copy)
245 dri2_dpy->image->destroyImage(dri2_surf->color_buffers[i].linear_copy);
246 if (dri2_surf->color_buffers[i].data)
247 munmap(dri2_surf->color_buffers[i].data,
248 dri2_surf->color_buffers[i].data_size);
253 if (dri2_surf->dri_buffers[i] &&
254 dri2_surf->dri_buffers[i]->attachment != __DRI_BUFFER_BACK_LEFT)
256 dri2_surf->dri_buffers[i]);
259 if (dri2_surf->throttle_callback)
260 wl_callback_destroy(dri2_surf->throttle_callback);
262 if (dri2_surf->wl_win) {
263 dri2_surf->wl_win->private = NULL;
264 dri2_surf->wl_win->resize_callback = NULL;
265 dri2_surf->wl_win->destroy_window_callback = NULL;
274 dri2_wl_release_buffers(struct dri2_egl_surface *dri2_surf)
277 dri2_egl_display(dri2_surf->base.Resource.Display);
280 for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++) {
281 if (dri2_surf->color_buffers[i].wl_buffer &&
282 !dri2_surf->color_buffers[i].locked)
283 wl_buffer_destroy(dri2_surf->color_buffers[i].wl_buffer);
284 if (dri2_surf->color_buffers[i].dri_image)
285 dri2_dpy->image->destroyImage(dri2_surf->color_buffers[i].dri_image);
286 if (dri2_surf->color_buffers[i].linear_copy)
287 dri2_dpy->image->destroyImage(dri2_surf->color_buffers[i].linear_copy);
288 if (dri2_surf->color_buffers[i].data)
289 munmap(dri2_surf->color_buffers[i].data,
290 dri2_surf->color_buffers[i].data_size);
292 dri2_surf->color_buffers[i].wl_buffer = NULL;
293 dri2_surf->color_buffers[i].dri_image = NULL;
294 dri2_surf->color_buffers[i].linear_copy = NULL;
295 dri2_surf->color_buffers[i].data = NULL;
296 dri2_surf->color_buffers[i].locked = 0;
301 if (dri2_surf->dri_buffers[i] &&
302 dri2_surf->dri_buffers[i]->attachment != __DRI_BUFFER_BACK_LEFT)
304 dri2_surf->dri_buffers[i]);
309 get_back_bo(struct dri2_egl_surface *dri2_surf)
312 dri2_egl_display(dri2_surf->base.Resource.Display);
320 switch (dri2_surf->format) {
338 if (dri2_surf->back == NULL) {
339 for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++) {
342 if (dri2_surf->color_buffers[i].locked)
344 if (dri2_surf->back == NULL)
345 dri2_surf->back = &dri2_surf->color_buffers[i];
346 else if (dri2_surf->back->dri_image == NULL)
347 dri2_surf->back = &dri2_surf->color_buffers[i];
351 if (dri2_surf->back == NULL)
357 dri2_surf->back->linear_copy == NULL) {
358 dri2_surf->back->linear_copy =
360 dri2_surf->base.Width,
361 dri2_surf->base.Height,
366 if (dri2_surf->back->linear_copy == NULL)
370 if (dri2_surf->back->dri_image == NULL) {
371 dri2_surf->back->dri_image =
373 dri2_surf->base.Width,
374 dri2_surf->base.Height,
379 dri2_surf->back->age = 0;
381 if (dri2_surf->back->dri_image == NULL)
384 dri2_surf->back->locked = 1;
391 back_bo_to_dri_buffer(struct dri2_egl_surface *dri2_surf, __DRIbuffer *buffer)
394 dri2_egl_display(dri2_surf->base.Resource.Display);
398 image = dri2_surf->back->dri_image;
411 get_aux_bo(struct dri2_egl_surface *dri2_surf,
415 dri2_egl_display(dri2_surf->base.Resource.Display);
416 __DRIbuffer *b = dri2_surf->dri_buffers[attachment];
421 dri2_surf->base.Width,
422 dri2_surf->base.Height);
423 dri2_surf->dri_buffers[attachment] = b;
434 update_buffers(struct dri2_egl_surface *dri2_surf)
437 dri2_egl_display(dri2_surf->base.Resource.Display);
440 if (dri2_surf->base.Width != dri2_surf->wl_win->width ||
441 dri2_surf->base.Height != dri2_surf->wl_win->height) {
443 dri2_wl_release_buffers(dri2_surf);
445 dri2_surf->base.Width = dri2_surf->wl_win->width;
446 dri2_surf->base.Height = dri2_surf->wl_win->height;
447 dri2_surf->dx = dri2_surf->wl_win->dx;
448 dri2_surf->dy = dri2_surf->wl_win->dy;
451 if (get_back_bo(dri2_surf) < 0) {
459 for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++) {
460 if (!dri2_surf->color_buffers[i].locked &&
461 dri2_surf->color_buffers[i].wl_buffer) {
462 wl_buffer_destroy(dri2_surf->color_buffers[i].wl_buffer);
463 dri2_dpy->image->destroyImage(dri2_surf->color_buffers[i].dri_image);
465 dri2_dpy->image->destroyImage(dri2_surf->color_buffers[i].linear_copy);
466 dri2_surf->color_buffers[i].wl_buffer = NULL;
467 dri2_surf->color_buffers[i].dri_image = NULL;
468 dri2_surf->color_buffers[i].linear_copy = NULL;
481 struct dri2_egl_surface *dri2_surf = loaderPrivate;
484 if (update_buffers(dri2_surf) < 0)
490 back_bo_to_dri_buffer(dri2_surf, &dri2_surf->buffers[j]);
493 if (get_aux_bo(dri2_surf, attachments[i], attachments[i + 1],
494 &dri2_surf->buffers[j]) < 0) {
506 *width = dri2_surf->base.Width;
507 *height = dri2_surf->base.Height;
509 return dri2_surf->buffers;
518 struct dri2_egl_surface *dri2_surf = loaderPrivate;
525 dri2_surf->format) {
568 struct dri2_egl_surface *dri2_surf = loaderPrivate;
570 if (update_buffers(dri2_surf) < 0)
574 buffers->back = dri2_surf->back->dri_image;
606 struct dri2_egl_surface *dri2_surf = data;
608 dri2_surf->throttle_callback = NULL;
617 create_wl_buffer(struct dri2_egl_surface *dri2_surf)
620 dri2_egl_display(dri2_surf->base.Resource.Display);
624 if (dri2_surf->current->wl_buffer != NULL)
628 image = dri2_surf->current->linear_copy;
630 image = dri2_surf->current->dri_image;
636 dri2_surf->current->wl_buffer =
639 dri2_surf->base.Width,
640 dri2_surf->base.Height,
641 dri2_surf->format,
650 dri2_surf->current->wl_buffer =
653 dri2_surf->base.Width,
654 dri2_surf->base.Height,
656 dri2_surf->format);
659 wl_proxy_set_queue((struct wl_proxy *) dri2_surf->current->wl_buffer,
661 wl_buffer_add_listener(dri2_surf->current->wl_buffer,
662 &wl_buffer_listener, dri2_surf);
666 try_damage_buffer(struct dri2_egl_surface *dri2_surf,
672 if (wl_proxy_get_version((struct wl_proxy *) dri2_surf->wl_win->surface)
679 wl_surface_damage_buffer(dri2_surf->wl_win->surface,
681 dri2_surf->base.Height - rect[1] - rect[3],
697 struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw);
700 while (dri2_surf->throttle_callback != NULL)
705 for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++)
706 if (dri2_surf->color_buffers[i].age > 0)
707 dri2_surf->color_buffers[i].age++;
711 if (get_back_bo(dri2_surf) < 0) {
717 dri2_surf->throttle_callback =
718 wl_surface_frame(dri2_surf->wl_win->surface);
719 wl_callback_add_listener(dri2_surf->throttle_callback,
720 &throttle_listener, dri2_surf);
721 wl_proxy_set_queue((struct wl_proxy *) dri2_surf->throttle_callback,
725 dri2_surf->back->age = 1;
726 dri2_surf->current = dri2_surf->back;
727 dri2_surf->back = NULL;
729 create_wl_buffer(dri2_surf);
731 wl_surface_attach(dri2_surf->wl_win->surface,
732 dri2_surf->current->wl_buffer,
733 dri2_surf->dx, dri2_surf->dy);
735 dri2_surf->wl_win->attached_width = dri2_surf->base.Width;
736 dri2_surf->wl_win->attached_height = dri2_surf->base.Height;
738 dri2_surf->dx = 0;
739 dri2_surf->dy = 0;
744 if (!n_rects || !try_damage_buffer(dri2_surf, rects, n_rects))
745 wl_surface_damage(dri2_surf->wl_win->surface,
752 dri2_surf->current->linear_copy,
753 dri2_surf->current->dri_image,
754 0, 0, dri2_surf->base.Width,
755 dri2_surf->base.Height,
756 0, 0, dri2_surf->base.Width,
757 dri2_surf->base.Height, 0);
761 dri2_dpy->flush->invalidate(dri2_surf->dri_drawable);
763 wl_surface_commit(dri2_surf->wl_win->surface);
769 if (dri2_surf->throttle_callback == NULL) {
770 dri2_surf->throttle_callback = wl_display_sync(dri2_dpy->wl_dpy_wrapper);
771 wl_callback_add_listener(dri2_surf->throttle_callback,
772 &throttle_listener, dri2_surf);
784 struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surface);
786 if (get_back_bo(dri2_surf) < 0) {
791 return dri2_surf->back->age;
1448 swrast_update_buffers(struct dri2_egl_surface *dri2_surf)
1451 dri2_egl_display(dri2_surf->base.Resource.Display);
1455 if (dri2_surf->back)
1458 if (dri2_surf->base.Width != dri2_surf->wl_win->width ||
1459 dri2_surf->base.Height != dri2_surf->wl_win->height) {
1461 dri2_wl_release_buffers(dri2_surf);
1463 dri2_surf->base.Width = dri2_surf->wl_win->width;
1464 dri2_surf->base.Height = dri2_surf->wl_win->height;
1465 dri2_surf->dx = dri2_surf->wl_win->dx;
1466 dri2_surf->dy = dri2_surf->wl_win->dy;
1467 dri2_surf->current = NULL;
1476 for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++) {
1477 if (!dri2_surf->color_buffers[i].locked &&
1478 dri2_surf->color_buffers[i].wl_buffer) {
1479 dri2_surf->back = &dri2_surf->color_buffers[i];
1485 if (!dri2_surf->back) {
1486 for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++) {
1487 if (!dri2_surf->color_buffers[i].locked) {
1488 dri2_surf->back = &dri2_surf->color_buffers[i];
1490 dri2_surf->format,
1491 dri2_surf->base.Width,
1492 dri2_surf->base.Height,
1493 &dri2_surf->back->data,
1494 &dri2_surf->back->data_size,
1495 &dri2_surf->back->wl_buffer)) {
1499 wl_proxy_set_queue((struct wl_proxy *) dri2_surf->back->wl_buffer,
1501 wl_buffer_add_listener(dri2_surf->back->wl_buffer,
1502 &wl_buffer_listener, dri2_surf);
1508 if (!dri2_surf->back) {
1513 dri2_surf->back->locked = 1;
1518 for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++) {
1519 if (!dri2_surf->color_buffers[i].locked &&
1520 dri2_surf->color_buffers[i].wl_buffer) {
1521 wl_buffer_destroy(dri2_surf->color_buffers[i].wl_buffer);
1522 munmap(dri2_surf->color_buffers[i].data,
1523 dri2_surf->color_buffers[i].data_size);
1524 dri2_surf->color_buffers[i].wl_buffer = NULL;
1525 dri2_surf->color_buffers[i].data = NULL;
1533 dri2_wl_swrast_get_frontbuffer_data(struct dri2_egl_surface *dri2_surf)
1536 if (!dri2_surf->current)
1539 return dri2_surf->current->data;
1543 dri2_wl_swrast_get_backbuffer_data(struct dri2_egl_surface *dri2_surf)
1545 assert(dri2_surf->back);
1546 return dri2_surf->back->data;
1550 dri2_wl_swrast_commit_backbuffer(struct dri2_egl_surface *dri2_surf)
1552 struct dri2_egl_display *dri2_dpy = dri2_egl_display(dri2_surf->base.Resource.Display);
1554 while (dri2_surf->throttle_callback != NULL)
1559 if (dri2_surf->base.SwapInterval > 0) {
1560 dri2_surf->throttle_callback =
1561 wl_surface_frame(dri2_surf->wl_win->surface);
1562 wl_callback_add_listener(dri2_surf->throttle_callback,
1563 &throttle_listener, dri2_surf);
1564 wl_proxy_set_queue((struct wl_proxy *) dri2_surf->throttle_callback,
1568 dri2_surf->current = dri2_surf->back;
1569 dri2_surf->back = NULL;
1571 wl_surface_attach(dri2_surf->wl_win->surface,
1572 dri2_surf->current->wl_buffer,
1573 dri2_surf->dx, dri2_surf->dy);
1575 dri2_surf->wl_win->attached_width = dri2_surf->base.Width;
1576 dri2_surf->wl_win->attached_height = dri2_surf->base.Height;
1578 dri2_surf->dx = 0;
1579 dri2_surf->dy = 0;
1581 wl_surface_damage(dri2_surf->wl_win->surface,
1583 wl_surface_commit(dri2_surf->wl_win->surface);
1589 if (dri2_surf->throttle_callback == NULL) {
1590 dri2_surf->throttle_callback = wl_display_sync(dri2_dpy->wl_dpy_wrapper);
1591 wl_callback_add_listener(dri2_surf->throttle_callback,
1592 &throttle_listener, dri2_surf);
1603 struct dri2_egl_surface *dri2_surf = loaderPrivate;
1605 (void) swrast_update_buffers(dri2_surf);
1608 *w = dri2_surf->base.Width;
1609 *h = dri2_surf->base.Height;
1617 struct dri2_egl_surface *dri2_surf = loaderPrivate;
1618 int copy_width = dri2_wl_swrast_get_stride_for_format(dri2_surf->format, w);
1619 int x_offset = dri2_wl_swrast_get_stride_for_format(dri2_surf->format, x);
1620 int src_stride = dri2_wl_swrast_get_stride_for_format(dri2_surf->format, dri2_surf->base.Width);
1624 src = dri2_wl_swrast_get_frontbuffer_data(dri2_surf);
1639 if (h > dri2_surf->base.Height-y)
1640 h = dri2_surf->base.Height-y;
1654 struct dri2_egl_surface *dri2_surf = loaderPrivate;
1655 int copy_width = dri2_wl_swrast_get_stride_for_format(dri2_surf->format, w);
1656 int dst_stride = dri2_wl_swrast_get_stride_for_format(dri2_surf->format, dri2_surf->base.Width);
1657 int x_offset = dri2_wl_swrast_get_stride_for_format(dri2_surf->format, x);
1662 (void) swrast_update_buffers(dri2_surf);
1663 dst = dri2_wl_swrast_get_backbuffer_data(dri2_surf);
1668 dri2_surf->base.Width, dri2_surf->base.Height,
1679 if (h > dri2_surf->base.Height-y)
1680 h = dri2_surf->base.Height-y;
1687 dri2_wl_swrast_commit_backbuffer(dri2_surf);
1695 struct dri2_egl_surface *dri2_surf = loaderPrivate;
1698 stride = dri2_wl_swrast_get_stride_for_format(dri2_surf->format, w);
1707 struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw);
1709 dri2_dpy->core->swapBuffers(dri2_surf->dri_drawable);