summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCooper Yuan <cooperyuan@gmail.com>2009-09-21 16:38:50 +0800
committerCooper Yuan <cooperyuan@gmail.com>2009-09-21 16:38:50 +0800
commit3d97911277a764936252af0275e239bfef3848e7 (patch)
tree3c92baf71ee28f0a627b9eb3359367fe9a6dd02b
parentc77966af19fcf5c7887a2cde0420dd5af86733d3 (diff)
xvmc: move context and screen management to radeon_vl.c
-rw-r--r--src/gallium/winsys/g3dvl/radeon/Makefile5
-rw-r--r--src/gallium/winsys/g3dvl/radeon/radeon_vl.c126
-rw-r--r--src/gallium/winsys/g3dvl/radeon/radeon_vl.h6
3 files changed, 48 insertions, 89 deletions
diff --git a/src/gallium/winsys/g3dvl/radeon/Makefile b/src/gallium/winsys/g3dvl/radeon/Makefile
index 464a751b5..ff7546219 100644
--- a/src/gallium/winsys/g3dvl/radeon/Makefile
+++ b/src/gallium/winsys/g3dvl/radeon/Makefile
@@ -14,7 +14,8 @@ CFLAGS += -g -Wall -Werror=implicit-function-declaration -fPIC \
-I${DRMDIR}/include/nouveau \
-I${GALLIUMDIR}/drivers \
-I${GALLIUMDIR}/auxiliary \
- -I${DRIDIR}/include
+ -I${DRIDIR}/include \
+ -I${GALLIUMDIR}/drivers/r300
LDFLAGS += -L${DRMDIR}/lib \
-L${DRIDIR}/lib \
@@ -26,7 +27,7 @@ LDFLAGS += -L${DRMDIR}/lib \
-L${GALLIUMDIR}/auxiliary/cso_cache \
-L${GALLIUMDIR}/drivers/r300
-LIBS += -lradeondrm -ldriclient -ldrm_nouveau -ldrm -lradeon -ldraw -ltgsi -ltranslate -lrtasm -lcso_cache -lm
+LIBS += -lradeondrm -ldriclient -ldrm -lradeon -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 acca20c8b..63cc98a94 100644
--- a/src/gallium/winsys/g3dvl/radeon/radeon_vl.c
+++ b/src/gallium/winsys/g3dvl/radeon/radeon_vl.c
@@ -28,95 +28,57 @@
#include <pipe/p_context.h>
#include <pipe/p_screen.h>
#include <util/u_memory.h>
-#include <common/nouveau_dri.h>
-#include <common/nouveau_local.h>
-#include <common/nouveau_winsys_pipe.h>
-#include "radeon_vl.h"
+#include "radeon_drm.h"
-static int radeon_check_dri_drm_ddx(dri_version_t *dri, dri_version_t *drm, dri_version_t *ddx)
-{
- static const dri_version_t ddx_expected = {0, 0, NOUVEAU_DRM_HEADER_PATCHLEVEL};
- static const dri_version_t dri_expected = {4, 0, 0};
- static const dri_version_t drm_expected = {0, 0, NOUVEAU_DRM_HEADER_PATCHLEVEL};
-
- assert(dri);
- assert(drm);
- assert(ddx);
-
- if (dri->major != dri_expected.major || dri->minor < dri_expected.minor)
- {
- NOUVEAU_ERR("Unexpected DRI version.\n");
- return 1;
- }
- if (drm->major != drm_expected.major || drm->minor < drm_expected.minor)
- {
- NOUVEAU_ERR("Unexpected DRM version.\n");
- return 1;
- }
- if (ddx->major != ddx_expected.major || ddx->minor < ddx_expected.minor)
- {
- NOUVEAU_ERR("Unexpected DDX version.\n");
- return 1;
- }
-
- return 0;
-}
+#include "radeon_vl.h"
static int radeon_vl_context_create(dri_context_t *dri_context)
{
- dri_screen_t *dri_screen;
- struct radeon_vl_screen *rvl_screen;
- struct radeon_vl_context *rvl_ctx;
-
- assert (dri_context);
+ dri_screen_t *dri_screen;
+ struct radeon_vl_screen *rvl_screen;
+ struct radeon_vl_context *rvl_ctx;
- dri_screen = dri_context->dri_screen;
- rvl_screen = dri_screen->private;
- rvl_ctx = CALLOC_STRUCT(nouveau_context_vl);
+ assert (dri_context);
- if (!rvl_ctx)
- return 1;
+ dri_screen = dri_context->dri_screen;
+ rvl_screen = dri_screen->private;
+ rvl_ctx = CALLOC_STRUCT(radeon_vl_context);
- if (nouveau_context_init(&nv_screen->base, dri_context->drm_context,
- (drmLock*)&dri_screen->sarea->lock, NULL, &rvl_ctx->base))
- {
- FREE(rvl_ctx);
- return 1;
- }
+ if (!rvl_ctx)
+ return 1;
- dri_context->private = (void*)rvl_ctx
- rvl_ctx->dri_context = dri_context;
- rvl_ctx->nv_screen = rvl_screen;
+ /* create a r300 pipe_context. */
+ //r300_create_context(screen, (struct r300_winsys*)screen->winsys);
- rvl_ctx->base.nvc->pctx[rvl_ctx->base.pctx_id]->priv = rvl_ctx;
+ dri_context->private = (void*)rvl_ctx;
+ rvl_ctx->dri_context = dri_context;
+ rvl_ctx->rvl_screen = rvl_screen;
- return 0;
+ return 0;
}
static void radeon_vl_context_destroy(dri_context_t *dri_context)
{
- struct radeon_vl_context *rvl_ctx = dri_context->private;
-
- assert(dri_context);
+ struct radeon_vl_context *rvl_ctx = dri_context->private;
- nouveau_context_cleanup(&nv->base);
+ assert(dri_context);
- FREE(nv);
+ FREE(rvl_ctx);
}
static int radeon_vl_context_bind(struct radeon_vl_context *rvl_ctx, dri_drawable_t *dri_drawable)
{
- assert(rvl_ctx);
- assert(dri_drawable);
+ assert(rvl_ctx);
+ assert(dri_drawable);
- if (rvl_ctx->dri_drawable != dri_drawable)
- {
- rvl_ctx->dri_drawable = dri_drawable;
- dri_drawable->private = rvl_ctx;
- }
+ if (rvl_ctx->dri_drawable != dri_drawable)
+ {
+ rvl_ctx->dri_drawable = dri_drawable;
+ dri_drawable->private = rvl_ctx;
+ }
- return 0;
+ return 0;
}
static int radeon_vl_context_unbind(struct radeon_vl_context *rvl_ctx)
@@ -130,38 +92,36 @@ static int radeon_vl_context_unbind(struct radeon_vl_context *rvl_ctx)
static int radeon_vl_screen_create(dri_screen_t *dri_screen, dri_framebuffer_t *dri_framebuf)
{
- struct nouveau_dri *nv_dri = dri_framebuf->private;
- struct nouveau_screen_vl *nv_screen;
+ struct radeon_vl_screen *rvl_screen;
+ struct radeon_winsys *winsys;
+ struct r300_winsys *r300;
assert(dri_screen);
assert(dri_framebuf);
- if (nouveau_check_dri_drm_ddx(&dri_screen->dri, &dri_screen->drm, &dri_screen->ddx))
- return 1;
-
- nv_screen = CALLOC_STRUCT(nouveau_screen_vl);
+ rvl_screen = CALLOC_STRUCT(radeon_vl_screen);
- if (!nv_screen)
+ if (!rvl_screen)
return 1;
- if (nouveau_screen_init(nv_dri, dri_screen->fd, &nv_screen->base))
- {
- FREE(nv_screen);
- return 1;
- }
+ winsys = radeon_pipe_winsys(dri_screen->fd);
+ r300 = radeon_create_r300_winsys(dri_screen->fd, winsys);
+ r300_create_screen(r300);
+
+ rvl_screen->dri_screen = dri_screen;
+ dri_screen->private = (void*)rvl_screen;
- nv_screen->dri_screen = dri_screen;
- dri_screen->private = (void*)nv_screen;
+ FREE(winsys);
return 0;
}
static void radeon_vl_screen_destroy(dri_screen_t *dri_screen)
{
- struct nouveau_screen_vl *nv_screen = dri_screen->private;
+ struct nouveau_screen_vl *rvl_screen = dri_screen->private;
- radeon_screen_cleanup(&nv_screen->base);
- FREE(nv_screen);
+ radeon_screen_cleanup(&rvl_screen->base);
+ FREE(rvl_screen);
}
/*
diff --git a/src/gallium/winsys/g3dvl/radeon/radeon_vl.h b/src/gallium/winsys/g3dvl/radeon/radeon_vl.h
index 69f148f66..c02ebd3e1 100644
--- a/src/gallium/winsys/g3dvl/radeon/radeon_vl.h
+++ b/src/gallium/winsys/g3dvl/radeon/radeon_vl.h
@@ -28,12 +28,10 @@
#define __RADEON_VL_H__
#include <driclient.h>
-#include <nouveau/radeon_winsys.h>
-#include <common/radeon_context.h>
struct radeon_vl_context
{
- struct radeon_context base;
+ struct pipe_context base;
struct radeon_vl_screen *rvl_screen;
dri_context_t *dri_context;
dri_drawable_t *dri_drawable;
@@ -44,7 +42,7 @@ struct radeon_vl_context
struct radeon_vl_screen
{
- struct radeon_screen base;
+ struct pipe_screen base;
dri_screen_t *dri_screen;
};