From de10d383d029c8559522f731e04572dc997a0dbc Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Thu, 29 Aug 2013 17:26:16 -0400 Subject: [PATCH] freedreno: pipe loader for either kgsl or msm The downstream android kernel driver is "kgsl", the upstream drm/kms driver is called "msm". Since libdrm_freedreno handles the differences between the two, we need to load the same thing for either device. Signed-off-by: Rob Clark --- src/gallium/targets/dri-freedreno/Makefile.am | 27 ++++++++++++------- .../dri-freedreno/{target.c => target-kgsl.c} | 0 .../targets/dri-freedreno/target-msm.c | 20 ++++++++++++++ src/gallium/targets/egl-static/egl_pipe.c | 2 +- 4 files changed, 39 insertions(+), 10 deletions(-) rename src/gallium/targets/dri-freedreno/{target.c => target-kgsl.c} (100%) create mode 100644 src/gallium/targets/dri-freedreno/target-msm.c diff --git a/src/gallium/targets/dri-freedreno/Makefile.am b/src/gallium/targets/dri-freedreno/Makefile.am index cfa1f37fd37..615ae6f2de8 100644 --- a/src/gallium/targets/dri-freedreno/Makefile.am +++ b/src/gallium/targets/dri-freedreno/Makefile.am @@ -37,18 +37,16 @@ AM_CPPFLAGS = \ -DGALLIUM_NOOP dridir = $(DRI_DRIVER_INSTALL_DIR) -dri_LTLIBRARIES = kgsl_dri.la +dri_LTLIBRARIES = kgsl_dri.la msm_dri.la -nodist_EXTRA_kgsl_dri_la_SOURCES = dummy.cpp -kgsl_dri_la_SOURCES = \ - target.c \ +COMMON_SOURCES = \ $(top_srcdir)/src/mesa/drivers/dri/common/utils.c \ $(top_srcdir)/src/mesa/drivers/dri/common/dri_util.c \ $(top_srcdir)/src/mesa/drivers/dri/common/xmlconfig.c -kgsl_dri_la_LDFLAGS = -module -avoid-version -shared -no-undefined +COMMON_LDFLAGS = -module -avoid-version -shared -no-undefined -kgsl_dri_la_LIBADD = \ +COMMON_LIBADD = \ $(top_builddir)/src/mesa/libmesagallium.la \ $(top_builddir)/src/gallium/auxiliary/libgallium.la \ $(top_builddir)/src/gallium/state_trackers/dri/drm/libdridrm.la \ @@ -62,12 +60,23 @@ kgsl_dri_la_LIBADD = \ $(FREEDRENO_LIBS) if HAVE_MESA_LLVM -kgsl_dri_la_LDFLAGS += $(LLVM_LDFLAGS) -kgsl_dri_la_LIBADD += $(LLVM_LIBS) +COMMON_LDFLAGS += $(LLVM_LDFLAGS) +COMMON_LIBADD += $(LLVM_LIBS) endif +nodist_EXTRA_kgsl_dri_la_SOURCES = dummy.cpp +kgsl_dri_la_SOURCES = target-kgsl.c $(COMMON_SOURCES) +kgsl_dri_la_LDFLAGS = $(COMMON_LDFLAGS) +kgsl_dri_la_LIBADD = $(COMMON_LIBADD) + +nodist_EXTRA_msm_dri_la_SOURCES = dummy.cpp +msm_dri_la_SOURCES = target-msm.c $(COMMON_SOURCES) +msm_dri_la_LDFLAGS = $(COMMON_LDFLAGS) +msm_dri_la_LIBADD = $(COMMON_LIBADD) + # Provide compatibility with scripts for the old Mesa build system for # a while by putting a link to the driver into /lib of the build tree. -all-local: kgsl_dri.la +all-local: kgsl_dri.la msm_dri.la $(MKDIR_P) $(top_builddir)/$(LIB_DIR)/gallium ln -f .libs/kgsl_dri.so $(top_builddir)/$(LIB_DIR)/gallium/kgsl_dri.so + ln -f .libs/msm_dri.so $(top_builddir)/$(LIB_DIR)/gallium/msm_dri.so diff --git a/src/gallium/targets/dri-freedreno/target.c b/src/gallium/targets/dri-freedreno/target-kgsl.c similarity index 100% rename from src/gallium/targets/dri-freedreno/target.c rename to src/gallium/targets/dri-freedreno/target-kgsl.c diff --git a/src/gallium/targets/dri-freedreno/target-msm.c b/src/gallium/targets/dri-freedreno/target-msm.c new file mode 100644 index 00000000000..4a6299becb9 --- /dev/null +++ b/src/gallium/targets/dri-freedreno/target-msm.c @@ -0,0 +1,20 @@ + +#include "target-helpers/inline_debug_helper.h" +#include "state_tracker/drm_driver.h" +#include "freedreno/drm/freedreno_drm_public.h" + +static struct pipe_screen * +create_screen(int fd) +{ + struct pipe_screen *screen; + + screen = fd_drm_screen_create(fd); + if (!screen) + return NULL; + + screen = debug_screen_wrap(screen); + + return screen; +} + +DRM_DRIVER_DESCRIPTOR("freedreno", "msm", create_screen, NULL) diff --git a/src/gallium/targets/egl-static/egl_pipe.c b/src/gallium/targets/egl-static/egl_pipe.c index 57a3233530f..e5100c173e6 100644 --- a/src/gallium/targets/egl-static/egl_pipe.c +++ b/src/gallium/targets/egl-static/egl_pipe.c @@ -241,7 +241,7 @@ egl_pipe_create_drm_screen(const char *name, int fd) return pipe_radeonsi_create_screen(fd); else if (strcmp(name, "vmwgfx") == 0) return pipe_vmwgfx_create_screen(fd); - else if (strcmp(name, "kgsl") == 0) + else if ((strcmp(name, "kgsl") == 0) || (strcmp(name, "msm") == 0)) return pipe_freedreno_create_screen(fd); else return NULL; -- 2.30.2