diff options
author | Jakob Bornecrantz <wallbraker@gmail.com> | 2010-04-24 12:35:56 +0100 |
---|---|---|
committer | Jakob Bornecrantz <wallbraker@gmail.com> | 2010-04-26 00:40:17 +0100 |
commit | ab12d4f647702f0063c41dd090cef762aa95a0f9 (patch) | |
tree | fea3d2e536d69a5aa5cd551772f79313c559d214 | |
parent | 0c572c6828b6a338b07a6860280b3a314a81662e (diff) |
st/dri: Make lookup_egl_image a hook
-rw-r--r-- | src/gallium/state_trackers/dri/common/dri_screen.h | 5 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/common/dri_st_api.c | 12 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/drm/dri2.c | 3 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/drm/dri2.h | 3 |
4 files changed, 13 insertions, 10 deletions
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 */ |