Mesa (master): st/dri: Make lookup_egl_image a hook

Jakob Bornecrantz wallbraker at kemper.freedesktop.org
Sun Apr 25 23:42:18 UTC 2010


Module: Mesa
Branch: master
Commit: ab12d4f647702f0063c41dd090cef762aa95a0f9
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ab12d4f647702f0063c41dd090cef762aa95a0f9

Author: Jakob Bornecrantz <wallbraker at gmail.com>
Date:   Sat Apr 24 12:35:56 2010 +0100

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

diff --git a/src/gallium/state_trackers/dri/common/dri_screen.h b/src/gallium/state_trackers/dri/common/dri_screen.h
index 8ab7d43..d84ce1b 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 f9295cb..cbcb149 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 7c84fcf..0bf8c83 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 5b28850..3799634 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 */




More information about the mesa-commit mailing list