summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Bornecrantz <wallbraker@gmail.com>2010-04-24 12:35:56 +0100
committerJakob Bornecrantz <wallbraker@gmail.com>2010-04-26 00:40:17 +0100
commitab12d4f647702f0063c41dd090cef762aa95a0f9 (patch)
treefea3d2e536d69a5aa5cd551772f79313c559d214
parent0c572c6828b6a338b07a6860280b3a314a81662e (diff)
st/dri: Make lookup_egl_image a hook
-rw-r--r--src/gallium/state_trackers/dri/common/dri_screen.h5
-rw-r--r--src/gallium/state_trackers/dri/common/dri_st_api.c12
-rw-r--r--src/gallium/state_trackers/dri/drm/dri2.c3
-rw-r--r--src/gallium/state_trackers/dri/drm/dri2.h3
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 */