summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCooper Yuan <cooperyuan@gmail.com>2009-09-23 19:11:21 -0400
committerCooper Yuan <cooperyuan@gmail.com>2009-09-23 19:11:21 -0400
commit8838756524a1d5e7254b25eaa62f19e3bcf3e641 (patch)
treea939d9fed56189165aea11c9fc58096db33d456b
parent443c4952b5c4d0c37c15fe2f0ba76fb23ada057a (diff)
xvmc: link to auxiliary library and refine context creating
-rw-r--r--src/gallium/winsys/g3dvl/radeon/Makefile2
-rw-r--r--src/gallium/winsys/g3dvl/radeon/radeon_vl.c97
-rw-r--r--src/gallium/winsys/g3dvl/radeon/radeon_vl.h14
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__