[Mesa-dev] [PATCH 10/23] target-helpers: add dd_create_screen() helper

Emil Velikov emil.l.velikov at gmail.com
Sun May 18 00:07:32 PDT 2014


Will be used by gallium targets that statically link the
pipe-drivers in the final library. Provides identical
functionality to device_descriptor.create_screan.

Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
 .../auxiliary/target-helpers/inline_drm_helper.h   | 218 +++++++++++++++++++++
 src/gallium/include/state_tracker/drm_driver.h     |   2 +
 2 files changed, 220 insertions(+)
 create mode 100644 src/gallium/auxiliary/target-helpers/inline_drm_helper.h

diff --git a/src/gallium/auxiliary/target-helpers/inline_drm_helper.h b/src/gallium/auxiliary/target-helpers/inline_drm_helper.h
new file mode 100644
index 0000000..bfcf9fe
--- /dev/null
+++ b/src/gallium/auxiliary/target-helpers/inline_drm_helper.h
@@ -0,0 +1,218 @@
+#ifndef INLINE_DRM_HELPER_H
+#define INLINE_DRM_HELPER_H
+
+#include "state_tracker/drm_driver.h"
+#include "target-helpers/inline_debug_helper.h"
+#include "loader.h"
+
+#if GALLIUM_I915
+#include "target-helpers/inline_wrapper_sw_helper.h"
+#include "i915/drm/i915_drm_public.h"
+#include "i915/i915_public.h"
+#endif
+
+#if GALLIUM_ILO
+#include "intel/intel_winsys.h"
+#include "ilo/ilo_public.h"
+#endif
+
+#if GALLIUM_NOUVEAU
+#include "nouveau/drm/nouveau_drm_public.h"
+#endif
+
+#if GALLIUM_R300
+#include "radeon/drm/radeon_winsys.h"
+#include "radeon/drm/radeon_drm_public.h"
+#include "r300/r300_public.h"
+#endif
+
+#if GALLIUM_R600
+#include "radeon/drm/radeon_winsys.h"
+#include "radeon/drm/radeon_drm_public.h"
+#include "r600/r600_public.h"
+#endif
+
+#if GALLIUM_RADEONSI
+#include "radeon/drm/radeon_winsys.h"
+#include "radeon/drm/radeon_drm_public.h"
+#include "radeonsi/si_public.h"
+#endif
+
+#if GALLIUM_VMWGFX
+#include "target-helpers/inline_wrapper_sw_helper.h"
+#include "svga/drm/svga_drm_public.h"
+#include "svga/svga_public.h"
+#endif
+
+#if GALLIUM_FREEDRENO
+#include "freedreno/drm/freedreno_drm_public.h"
+#endif
+
+static char* driver_name = NULL;
+
+/* XXX: Do we need to teardown the winsys if screen_create() fails ? */
+
+#if defined(GALLIUM_I915)
+static struct pipe_screen *
+pipe_i915_create_screen(int fd)
+{
+   struct i915_winsys *iws;
+   struct pipe_screen *screen;
+
+   iws = i915_drm_winsys_create(fd);
+   if (!iws)
+      return NULL;
+
+   return i915_screen_create(iws);
+   if (screen) {
+      return sw_screen_wrap(screen);
+      /* sw_screen_wrap returns original screen on failure */
+      return debug_screen_wrap(screen);
+   }
+   return screen;
+}
+#endif
+
+#if defined(GALLIUM_ILO)
+static struct pipe_screen *
+pipe_ilo_create_screen(int fd)
+{
+   struct intel_winsys *iws;
+   struct pipe_screen *screen;
+
+   iws = intel_winsys_create_for_fd(fd);
+   if (!iws)
+      return NULL;
+
+   return ilo_screen_create(iws);
+   return screen ? debug_screen_wrap(screen) : NULL;
+}
+#endif
+
+#if defined(GALLIUM_NOUVEAU)
+static struct pipe_screen *
+pipe_nouveau_create_screen(int fd)
+{
+   struct pipe_screen *screen;
+
+   return nouveau_drm_screen_create(fd);
+   return screen ? debug_screen_wrap(screen) : NULL;
+}
+#endif
+
+#if defined(GALLIUM_R300)
+static struct pipe_screen *
+pipe_r300_create_screen(int fd)
+{
+   struct radeon_winsys *sws;
+
+   sws = radeon_drm_winsys_create(fd, r300_screen_create);
+   return sws ? debug_screen_wrap(sws->screen) : NULL;
+}
+#endif
+
+#if defined(GALLIUM_R600)
+static struct pipe_screen *
+pipe_r600_create_screen(int fd)
+{
+   struct radeon_winsys *rw;
+
+   rw = radeon_drm_winsys_create(fd, r600_screen_create);
+   return rw ? debug_screen_wrap(rw->screen) : NULL;
+}
+#endif
+
+#if defined(GALLIUM_RADEONSI)
+static struct pipe_screen *
+pipe_radeonsi_create_screen(int fd)
+{
+   struct radeon_winsys *rw;
+
+   rw = radeon_drm_winsys_create(fd, radeonsi_screen_create);
+   return rw ? debug_screen_wrap(rw->screen) : NULL;
+}
+#endif
+
+#if defined(GALLIUM_VMWGFX)
+static struct pipe_screen *
+pipe_vmwgfx_create_screen(int fd)
+{
+   struct svga_winsys_screen *sws;
+   struct pipe_screen *screen;
+
+   sws = svga_drm_winsys_screen_create(fd);
+   if (!sws)
+      return NULL;
+
+   return svga_screen_create(sws);
+   if (screen) {
+      return sw_screen_wrap(screen);
+      /* sw_screen_wrap returns original screen on failure */
+      return debug_screen_wrap(screen);
+   }
+   return screen;
+}
+#endif
+
+#if defined(GALLIUM_FREEDRENO)
+static struct pipe_screen *
+pipe_freedreno_create_screen(int fd)
+{
+   struct pipe_screen *screen;
+
+   return fd_drm_screen_create(fd);
+   return screen ? debug_screen_wrap(screen) : NULL;
+}
+#endif
+
+struct pipe_screen *
+dd_create_screen(int fd)
+{
+   driver_name = loader_get_driver_for_fd(fd, _LOADER_GALLIUM);
+   if (!driver_name)
+      return NULL;
+
+#if defined(GALLIUM_I915)
+   if (strcmp(driver_name, "i915") == 0)
+      return pipe_i915_create_screen(fd);
+   else
+#endif
+#if defined(GALLIUM_ILO)
+   if (strcmp(driver_name, "i965") == 0)
+      return pipe_ilo_create_screen(fd);
+   else
+#endif
+#if defined(GALLIUM_NOUVEAU)
+   if (strcmp(driver_name, "nouveau") == 0)
+      return pipe_nouveau_create_screen(fd);
+   else
+#endif
+#if defined(GALLIUM_R300)
+   if (strcmp(driver_name, "r300") == 0)
+      return pipe_r300_create_screen(fd);
+   else
+#endif
+#if defined(GALLIUM_R600)
+   if (strcmp(driver_name, "r600") == 0)
+      return pipe_r600_create_screen(fd);
+   else
+#endif
+#if defined(GALLIUM_RADEONSI)
+   if (strcmp(driver_name, "radeonsi") == 0)
+      return pipe_radeonsi_create_screen(fd);
+   else
+#endif
+#if defined(GALLIUM_VMWGFX)
+   if (strcmp(driver_name, "vmwgfx") == 0)
+      return pipe_vmwgfx_create_screen(fd);
+   else
+#endif
+#if defined(GALLIUM_FREEDRENO)
+   if ((strcmp(driver_name, "kgsl") == 0) || (strcmp(driver_name, "msm") == 0))
+      return pipe_freedreno_create_screen(fd);
+   else
+#endif
+      return NULL;
+}
+
+#endif /* INLINE_DRM_HELPER_H */
diff --git a/src/gallium/include/state_tracker/drm_driver.h b/src/gallium/include/state_tracker/drm_driver.h
index 959a762..ea07685 100644
--- a/src/gallium/include/state_tracker/drm_driver.h
+++ b/src/gallium/include/state_tracker/drm_driver.h
@@ -117,4 +117,6 @@ struct drm_driver_descriptor driver_descriptor = {             \
    .configuration = (conf),				       \
 };
 
+extern struct pipe_screen *dd_create_screen(int fd);
+
 #endif
-- 
1.9.2



More information about the mesa-dev mailing list