[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