From ab12d4f647702f0063c41dd090cef762aa95a0f9 Mon Sep 17 00:00:00 2001 From: Jakob Bornecrantz Date: Sat, 24 Apr 2010 12:35:56 +0100 Subject: st/dri: Make lookup_egl_image a hook --- src/gallium/state_trackers/dri/common/dri_screen.h | 5 +++++ src/gallium/state_trackers/dri/common/dri_st_api.c | 12 ++++++------ src/gallium/state_trackers/dri/drm/dri2.c | 3 ++- src/gallium/state_trackers/dri/drm/dri2.h | 3 --- 4 files changed, 13 insertions(+), 10 deletions(-) (limited to 'src/gallium') diff --git a/src/gallium/state_trackers/dri/common/dri_screen.h b/src/gallium/state_trackers/dri/common/dri_screen.h index 8ab7d43919..d84ce1bf48 100644 --- a/src/gallium/state_trackers/dri/common/dri_screen.h +++ b/src/gallium/state_trackers/dri/common/dri_screen.h @@ -41,6 +41,8 @@ #include "state_tracker/st_api.h" #include "state_tracker/drm_api.h" +struct dri_context; + struct dri_screen { /* dri */ @@ -55,6 +57,9 @@ struct dri_screen int fd; drmLock *drmLock; + /* hooks filled in by dri1, dri2 & drisw */ + __DRIimage * (*lookup_egl_image)(struct dri_context *ctx, void *handle); + /* gallium */ struct drm_api *api; struct pipe_winsys *pipe_winsys; diff --git a/src/gallium/state_trackers/dri/common/dri_st_api.c b/src/gallium/state_trackers/dri/common/dri_st_api.c index f9295cb4ca..cbcb149b0a 100644 --- a/src/gallium/state_trackers/dri/common/dri_st_api.c +++ b/src/gallium/state_trackers/dri/common/dri_st_api.c @@ -229,15 +229,15 @@ static boolean dri_st_manager_get_egl_image(struct st_manager *smapi, struct st_egl_image *stimg) { + struct dri_context *ctx = + (struct dri_context *)stimg->stctxi->st_manager_private; + struct dri_screen *screen = dri_screen(ctx->sPriv); __DRIimage *img = NULL; -#ifndef __NOT_HAVE_DRM_H - if (!__dri1_api_hooks) { - struct dri_context *ctx = (struct dri_context *) - stimg->stctxi->st_manager_private; - img = dri2_lookup_egl_image(ctx, stimg->egl_image); + if (screen->lookup_egl_image) { + img = screen->lookup_egl_image(ctx, stimg->egl_image); } -#endif + if (!img) return FALSE; diff --git a/src/gallium/state_trackers/dri/drm/dri2.c b/src/gallium/state_trackers/dri/drm/dri2.c index 7c84fcfd72..0bf8c83f21 100644 --- a/src/gallium/state_trackers/dri/drm/dri2.c +++ b/src/gallium/state_trackers/dri/drm/dri2.c @@ -373,7 +373,7 @@ dri2_flush_frontbuffer(struct dri_drawable *drawable, } } -__DRIimage * +static __DRIimage * dri2_lookup_egl_image(struct dri_context *ctx, void *handle) { __DRIimageLookupExtension *loader = ctx->sPriv->dri2.image; @@ -512,6 +512,7 @@ dri2_init_screen(__DRIscreen * sPriv) screen->api = drm_api_create(); screen->sPriv = sPriv; screen->fd = sPriv->fd; + screen->lookup_egl_image = dri2_lookup_egl_image; sPriv->private = (void *)screen; sPriv->extensions = dri_screen_extensions; diff --git a/src/gallium/state_trackers/dri/drm/dri2.h b/src/gallium/state_trackers/dri/drm/dri2.h index 5b28850000..379963431f 100644 --- a/src/gallium/state_trackers/dri/drm/dri2.h +++ b/src/gallium/state_trackers/dri/drm/dri2.h @@ -43,7 +43,4 @@ dri2_allocate_textures(struct dri_drawable *drawable, const enum st_attachment_type *statts, unsigned count); -__DRIimage * -dri2_lookup_egl_image(struct dri_context *ctx, void *handle); - #endif /* DRI2_H */ -- cgit v1.2.3