diff options
author | Cooper Yuan <cooperyuan@gmail.com> | 2009-09-23 19:11:21 -0400 |
---|---|---|
committer | Cooper Yuan <cooperyuan@gmail.com> | 2009-09-23 19:11:21 -0400 |
commit | 8838756524a1d5e7254b25eaa62f19e3bcf3e641 (patch) | |
tree | a939d9fed56189165aea11c9fc58096db33d456b | |
parent | 443c4952b5c4d0c37c15fe2f0ba76fb23ada057a (diff) |
xvmc: link to auxiliary library and refine context creating
-rw-r--r-- | src/gallium/winsys/g3dvl/radeon/Makefile | 2 | ||||
-rw-r--r-- | src/gallium/winsys/g3dvl/radeon/radeon_vl.c | 97 | ||||
-rw-r--r-- | src/gallium/winsys/g3dvl/radeon/radeon_vl.h | 14 |
3 files changed, 53 insertions, 60 deletions
diff --git a/src/gallium/winsys/g3dvl/radeon/Makefile b/src/gallium/winsys/g3dvl/radeon/Makefile index 1a94b29f4..2ad5f035c 100644 --- a/src/gallium/winsys/g3dvl/radeon/Makefile +++ b/src/gallium/winsys/g3dvl/radeon/Makefile @@ -29,7 +29,7 @@ LDFLAGS += -L${DRIDIR}/lib \ -L${GALLIUMDIR}/auxiliary/util \ -L${GALLIUMDIR}/drivers/r300 -LIBS += -ldriclient -lradeonwinsys -ldrm_radeon -lr300 -ldrm -ldraw -ltgsi -ltranslate -lrtasm -lcso_cache -lm +LIBS += -ldriclient -lauxutil -lradeonwinsys -ldrm_radeon -lr300 -ldrm -ldraw -ltgsi -ltranslate -lrtasm -lcso_cache -lm ############################################# diff --git a/src/gallium/winsys/g3dvl/radeon/radeon_vl.c b/src/gallium/winsys/g3dvl/radeon/radeon_vl.c index 0eabafa00..44060ef62 100644 --- a/src/gallium/winsys/g3dvl/radeon/radeon_vl.c +++ b/src/gallium/winsys/g3dvl/radeon/radeon_vl.c @@ -40,7 +40,7 @@ #include "r300_screen.h" #include "radeon_vl.h" - +#if 0 static int radeon_vl_context_create(dri_context_t *dri_context) { dri_screen_t *dri_screen; @@ -122,83 +122,80 @@ static void radeon_vl_screen_destroy(dri_screen_t *dri_screen) FREE(rvl_screen); } - +#endif /* * The following 4 functions are exported to xvmc. */ -int bind_pipe_drawable(struct pipe_context *pipe, Drawable drawable) +int bind_pipe_drawable(struct pipe_context *p_context, Drawable drawable) { - struct radeon_vl_context *rvl_ctx; - dri_drawable_t *dri_drawable; + struct radeon_vl_context *rvl_ctx; - assert(pipe); + assert(p_context); - rvl_ctx = pipe->priv; - - radeon_vl_context_bind(rvl_ctx, dri_drawable); + rvl_ctx = p_context->priv; + rvl_ctx->drawable = drawable; + rvl_ctx->drawable_bound = 1; return 0; } -int unbind_pipe_drawable(struct pipe_context *pipe) +int unbind_pipe_drawable(struct pipe_context *p_context) { - assert (pipe); + struct radeon_vl_context *rvl_ctx; + assert (p_context); - radeon_vl_context_unbind(pipe->priv); + rvl_ctx = p_context->priv; + rvl_ctx->drawable_bound = 0; return 0; } struct pipe_context* create_pipe_context(Display *display, int screen) { - dri_screen_t *dri_screen; - dri_framebuffer_t dri_framebuf; - dri_context_t *dri_context; - struct radeon_vl_context *rvl_ctx; - char *driverName = "/dev/dri/card0"; - char *deviceName; - int drmFD; + struct radeon_vl_context *rvl_ctx; + struct r300_winsys *r300; + struct radeon_winsys *p_winsys; + struct pipe_screen *p_screen; + struct pipe_context *p_context; + int drmFD; assert(display); -/* - if (!DRI2Connect(display, RootWindow(display, screen), - &driverName, &deviceName)) - { - return NULL; - } -*/ - drmFD = open("/dev/dri/card0", O_RDWR ); - radeon_vl_screen_create(display, screen, drmFD); - radeon_vl_context_create(dri_context); + /* just a temp code, should use dri2 client interface */ + drmFD = open("/dev/dri/card0", O_RDWR); - rvl_ctx = dri_context->private; -} + /* create radeon pipe_screen */ + p_winsys = radeon_pipe_winsys(drmFD); + r300 = radeon_create_r300_winsys(drmFD, p_winsys); + p_screen = r300_create_screen(r300); -int destroy_pipe_context(struct pipe_context *pipe) -{ - struct pipe_screen *screen; - struct pipe_winsys *winsys; - struct nouveau_context_vl *rvl_ctx; - dri_screen_t *dri_screen; - dri_context_t *dri_context; + /* create radeon pipe_context */ + p_context = r300_create_context(p_screen, (struct r300_winsys*)p_screen->winsys); - assert(pipe); + /* create radeon_vl_context*/ + rvl_ctx = calloc(1, sizeof(struct radeon_vl_context)); + rvl_ctx->display = display; + rvl_ctx->screen = screen; - screen = pipe->screen; - winsys = pipe->winsys; - rvl_ctx = pipe->priv; + p_context->priv = rvl_ctx; - dri_screen = dri_context->dri_screen; + return rvl_ctx; +} + +int destroy_pipe_context(struct pipe_context *p_context) +{ + struct pipe_screen *p_screen; + struct pipe_winsys *p_winsys; + + assert(p_context); - pipe->destroy(pipe); - screen->destroy(screen); - FREE(winsys); + p_screen = p_context->screen; + p_winsys = p_context->winsys; - radeon_vl_context_destroy(dri_context); - radeon_vl_screen_destroy(dri_screen); - driDestroyContext(dri_context); - driDestroyScreen(dri_screen); + free(p_context->priv); + p_context->destroy(p_context); + p_screen->destroy(p_screen); + free(p_winsys); return 0; } diff --git a/src/gallium/winsys/g3dvl/radeon/radeon_vl.h b/src/gallium/winsys/g3dvl/radeon/radeon_vl.h index c02ebd3e1..c331b5e12 100644 --- a/src/gallium/winsys/g3dvl/radeon/radeon_vl.h +++ b/src/gallium/winsys/g3dvl/radeon/radeon_vl.h @@ -31,19 +31,15 @@ struct radeon_vl_context { - struct pipe_context base; - struct radeon_vl_screen *rvl_screen; - dri_context_t *dri_context; - dri_drawable_t *dri_drawable; - unsigned int last_stamp; - drm_context_t drm_context; - drmLock drm_lock; + Display *display; + int screen; + Drawable drawable; + int drawable_bound; }; struct radeon_vl_screen { struct pipe_screen base; - dri_screen_t *dri_screen; }; -#endif //__RADEON_CONTEXT_VL_H__
\ No newline at end of file +#endif //__RADEON_CONTEXT_VL_H__ |