[Mesa-dev] [PATCH 2/3] targets/egl: add passthrough pipe pipe_radeon
Benjamin Franzke
benjaminfranzke at googlemail.com
Sun Aug 22 09:24:11 PDT 2010
load pipe_r300 or pipe_r600 depending on the chip_id
needed for st/egl/kms which requests a "radeon" pipe
for both: r300 and r600 cards
---
src/gallium/targets/egl/Makefile | 15 ++++++++++++++-
src/gallium/targets/egl/pipe_radeon.c | 24 ++++++++++++++++++++++++
2 files changed, 38 insertions(+), 1 deletions(-)
create mode 100644 src/gallium/targets/egl/pipe_radeon.c
diff --git a/src/gallium/targets/egl/Makefile b/src/gallium/targets/egl/Makefile
index 636fceb..625c1be 100644
--- a/src/gallium/targets/egl/Makefile
+++ b/src/gallium/targets/egl/Makefile
@@ -97,6 +97,16 @@ r300_LIBS := \
$(TOP)/src/gallium/winsys/radeon/drm/libradeonwinsys.a \
$(TOP)/src/gallium/drivers/r300/libr300.a
+# radeon pipe driver (r300 + r600)
+radeon_CPPFLAGS := \
+ -I$(TOP)/src/gallium/state_trackers/egl \
+ -I$(TOP)/src/egl/main \
+ $(LIBDRM_CFLAGS)
+radeon_SYS := $(LIBDRM_LIB)
+radeon_LIBS := \
+ egl.o \
+ $(TOP)/src/gallium/state_trackers/egl/libegl.a
+
# vmwgfx pipe driver
vmwgfx_CPPFLAGS :=
vmwgfx_SYS :=
@@ -151,7 +161,7 @@ ifneq ($(findstring nouveau/drm,$(GALLIUM_WINSYS_DIRS)),)
OUTPUTS += nouveau
endif
ifneq ($(findstring radeon/drm,$(GALLIUM_WINSYS_DIRS)),)
-OUTPUTS += r300
+OUTPUTS += r300 radeon
endif
ifneq ($(findstring svga/drm,$(GALLIUM_WINSYS_DIRS)),)
OUTPUTS += vmwgfx
@@ -191,6 +201,9 @@ $(OUTPUT_PATH)/$(PIPE_PREFIX)nouveau.so: pipe_nouveau.o $(nouveau_LIBS)
$(OUTPUT_PATH)/$(PIPE_PREFIX)r300.so: pipe_r300.o $(r300_LIBS)
$(call mklib,r300)
+$(OUTPUT_PATH)/$(PIPE_PREFIX)radeon.so: pipe_radeon.o $(radeon_LIBS)
+ $(call mklib,radeon)
+
$(OUTPUT_PATH)/$(PIPE_PREFIX)vmwgfx.so: pipe_vmwgfx.o $(vmwgfx_LIBS)
$(call mklib,vmwgfx)
diff --git a/src/gallium/targets/egl/pipe_radeon.c b/src/gallium/targets/egl/pipe_radeon.c
new file mode 100644
index 0000000..6b802de
--- /dev/null
+++ b/src/gallium/targets/egl/pipe_radeon.c
@@ -0,0 +1,24 @@
+#include <xf86drm.h>
+#include <radeon_drm.h>
+
+#include "egldriver.h"
+#include "common/egl_g3d.h"
+
+#include "radeon/drm/radeon_drm.h"
+
+static struct pipe_screen *
+create_screen(int fd)
+{
+ int chip_id;
+
+ struct drm_radeon_info info = { .value = (unsigned long) &chip_id };
+
+ if (drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, sizeof(info)) != 0)
+ return NULL;
+
+ return egl_g3d_driver(_eglMain(NULL))->loader->create_drm_screen(
+ is_r3xx(chip_id) ? "r300" : "r600", fd);
+}
+
+PUBLIC
+DRM_DRIVER_DESCRIPTOR("radeon", "radeon", create_screen)
--
1.7.1
More information about the mesa-dev
mailing list