This makes it usable also for native helpers. Also add inline functions to access the context and to uninit the native display structure. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>tags/android-x86-2.2-r2
@@ -455,9 +455,6 @@ egl_g3d_terminate(_EGLDriver *drv, _EGLDisplay *dpy) | |||
_eglReleaseDisplayResources(drv, dpy); | |||
if (gdpy->pipe) | |||
gdpy->pipe->destroy(gdpy->pipe); | |||
if (dpy->Configs) { | |||
_eglDestroyArray(dpy->Configs, egl_g3d_free_config); | |||
dpy->Configs = NULL; |
@@ -56,7 +56,6 @@ struct egl_g3d_display { | |||
const struct egl_g3d_loader *loader; | |||
struct st_manager *smapi; | |||
struct pipe_context *pipe; | |||
}; | |||
struct egl_g3d_context { |
@@ -640,6 +640,7 @@ egl_g3d_copy_buffers(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, | |||
_EGLContext *ctx = _eglGetCurrentContext(); | |||
struct native_surface *nsurf; | |||
struct pipe_resource *ptex; | |||
struct pipe_context *pipe; | |||
if (!gsurf->render_texture) | |||
return EGL_TRUE; | |||
@@ -655,22 +656,18 @@ egl_g3d_copy_buffers(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, | |||
PIPE_FLUSH_RENDER_CACHE | PIPE_FLUSH_FRAME, NULL); | |||
} | |||
/* create a pipe context to copy surfaces */ | |||
if (!gdpy->pipe) { | |||
gdpy->pipe = | |||
gdpy->native->screen->context_create(gdpy->native->screen, NULL); | |||
if (!gdpy->pipe) | |||
return EGL_FALSE; | |||
} | |||
pipe = ndpy_get_copy_context(gdpy->native); | |||
if (!pipe) | |||
return EGL_FALSE; | |||
ptex = get_pipe_resource(gdpy->native, nsurf, NATIVE_ATTACHMENT_FRONT_LEFT); | |||
if (ptex) { | |||
struct pipe_box src_box; | |||
u_box_origin_2d(ptex->width0, ptex->height0, &src_box); | |||
gdpy->pipe->resource_copy_region(gdpy->pipe, ptex, 0, 0, 0, 0, | |||
pipe->resource_copy_region(pipe, ptex, 0, 0, 0, 0, | |||
gsurf->render_texture, 0, &src_box); | |||
gdpy->pipe->flush(gdpy->pipe, PIPE_FLUSH_RENDER_CACHE, NULL); | |||
pipe->flush(pipe, PIPE_FLUSH_RENDER_CACHE, NULL); | |||
nsurf->present(nsurf, NATIVE_ATTACHMENT_FRONT_LEFT, FALSE, 0); | |||
pipe_resource_reference(&ptex, NULL); |
@@ -141,6 +141,11 @@ struct native_display { | |||
*/ | |||
struct pipe_screen *screen; | |||
/** | |||
* Context used for copy operations. | |||
*/ | |||
struct pipe_context *pipe; | |||
/** | |||
* Available for caller's use. | |||
*/ | |||
@@ -223,6 +228,29 @@ native_attachment_mask_test(uint mask, enum native_attachment att) | |||
return !!(mask & (1 << att)); | |||
} | |||
/** | |||
* Get the display copy context | |||
*/ | |||
static INLINE struct pipe_context * | |||
ndpy_get_copy_context(struct native_display *ndpy) | |||
{ | |||
if (!ndpy->pipe) | |||
ndpy->pipe = ndpy->screen->context_create(ndpy->screen, NULL); | |||
return ndpy->pipe; | |||
} | |||
/** | |||
* Free display screen and context resources | |||
*/ | |||
static INLINE void | |||
ndpy_uninit(struct native_display *ndpy) | |||
{ | |||
if (ndpy->pipe) | |||
ndpy->pipe->destroy(ndpy->pipe); | |||
if (ndpy->screen) | |||
ndpy->screen->destroy(ndpy->screen); | |||
} | |||
struct native_platform { | |||
const char *name; | |||
@@ -124,8 +124,7 @@ drm_display_destroy(struct native_display *ndpy) | |||
drm_display_fini_modeset(&drmdpy->base); | |||
if (drmdpy->base.screen) | |||
drmdpy->base.screen->destroy(drmdpy->base.screen); | |||
ndpy_uninit(ndpy); | |||
if (drmdpy->fd >= 0) | |||
close(drmdpy->fd); |
@@ -320,7 +320,7 @@ fbdev_display_destroy(struct native_display *ndpy) | |||
{ | |||
struct fbdev_display *fbdpy = fbdev_display(ndpy); | |||
fbdpy->base.screen->destroy(fbdpy->base.screen); | |||
ndpy_uninit(&fbdpy->base); | |||
close(fbdpy->fd); | |||
FREE(fbdpy); | |||
} |
@@ -363,7 +363,7 @@ gdi_display_destroy(struct native_display *ndpy) | |||
if (gdpy->configs) | |||
FREE(gdpy->configs); | |||
gdpy->base.screen->destroy(gdpy->base.screen); | |||
ndpy_uninit(ndpy); | |||
FREE(gdpy); | |||
} |
@@ -137,8 +137,7 @@ wayland_display_destroy(struct native_display *ndpy) | |||
if (display->config) | |||
FREE(display->config); | |||
if (display->base.screen) | |||
display->base.screen->destroy(display->base.screen); | |||
ndpy_uninit(ndpy); | |||
FREE(display); | |||
} |
@@ -476,7 +476,7 @@ ximage_display_destroy(struct native_display *ndpy) | |||
if (xdpy->configs) | |||
FREE(xdpy->configs); | |||
xdpy->base.screen->destroy(xdpy->base.screen); | |||
ndpy_uninit(ndpy); | |||
x11_screen_destroy(xdpy->xscr); | |||
if (xdpy->own_dpy) |