Browse Source

st/egl: Move the copy context to the native display structure

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
Thomas Hellstrom 14 years ago
parent
commit
d1e4117355

+ 0
- 3
src/gallium/state_trackers/egl/common/egl_g3d.c View File

@@ -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;

+ 0
- 1
src/gallium/state_trackers/egl/common/egl_g3d.h View File

@@ -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 {

+ 6
- 9
src/gallium/state_trackers/egl/common/egl_g3d_api.c View File

@@ -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);

+ 28
- 0
src/gallium/state_trackers/egl/common/native.h View File

@@ -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;


+ 1
- 2
src/gallium/state_trackers/egl/drm/native_drm.c View File

@@ -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);

+ 1
- 1
src/gallium/state_trackers/egl/fbdev/native_fbdev.c View File

@@ -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);
}

+ 1
- 1
src/gallium/state_trackers/egl/gdi/native_gdi.c View File

@@ -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);
}

+ 1
- 2
src/gallium/state_trackers/egl/wayland/native_wayland.c View File

@@ -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);
}

+ 1
- 1
src/gallium/state_trackers/egl/x11/native_ximage.c View File

@@ -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)

Loading…
Cancel
Save