target-helpers: add dd_configuration(), dd_driver_name()
authorEmil Velikov <emil.l.velikov@gmail.com>
Sat, 17 May 2014 23:20:47 +0000 (00:20 +0100)
committerEmil Velikov <emil.l.velikov@gmail.com>
Thu, 19 Jun 2014 11:40:01 +0000 (12:40 +0100)
Add a couple of helpers to be used by the dri targets when
built with static pipe-drivers. Both functions provide
functionality required by the dri state-tracker.

With this patch ilo, nouveau and r300 gain support for
throttle dri configuration.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
src/gallium/auxiliary/target-helpers/inline_drm_helper.h
src/gallium/include/state_tracker/drm_driver.h

index e039a8254d4def38525a1d29ddda0ab4cf3cdf16..a03db3a59202b0c90aae84ebb43662e1585493f4 100644 (file)
@@ -203,4 +203,82 @@ dd_create_screen(int fd)
       return NULL;
 }
 
+inline const char *
+dd_driver_name(void)
+{
+   return driver_name;
+}
+
+static const struct drm_conf_ret throttle_ret = {
+   .type = DRM_CONF_INT,
+   .val.val_int = 2,
+};
+
+static const struct drm_conf_ret share_fd_ret = {
+   .type = DRM_CONF_BOOL,
+   .val.val_int = true,
+};
+
+static const struct drm_conf_ret *
+configuration_query(enum drm_conf conf)
+{
+   switch (conf) {
+   case DRM_CONF_THROTTLE:
+      return &throttle_ret;
+   case DRM_CONF_SHARE_FD:
+      return &share_fd_ret;
+   default:
+      break;
+   }
+   return NULL;
+}
+
+inline const struct drm_conf_ret *
+dd_configuration(enum drm_conf conf)
+{
+   if (!driver_name)
+      return NULL;
+
+#if defined(GALLIUM_I915)
+   if (strcmp(driver_name, "i915") == 0)
+      return NULL;
+   else
+#endif
+#if defined(GALLIUM_ILO)
+   if (strcmp(driver_name, "i965") == 0)
+      return configuration_query(conf);
+   else
+#endif
+#if defined(GALLIUM_NOUVEAU)
+   if (strcmp(driver_name, "nouveau") == 0)
+      return configuration_query(conf);
+   else
+#endif
+#if defined(GALLIUM_R300)
+   if (strcmp(driver_name, "r300") == 0)
+      return configuration_query(conf);
+   else
+#endif
+#if defined(GALLIUM_R600)
+   if (strcmp(driver_name, "r600") == 0)
+      return configuration_query(conf);
+   else
+#endif
+#if defined(GALLIUM_RADEONSI)
+   if (strcmp(driver_name, "radeonsi") == 0)
+      return configuration_query(conf);
+   else
+#endif
+#if defined(GALLIUM_VMWGFX)
+   if (strcmp(driver_name, "vmwgfx") == 0)
+      return configuration_query(conf);
+   else
+#endif
+#if defined(GALLIUM_FREEDRENO)
+   if ((strcmp(driver_name, "kgsl") == 0) || (strcmp(driver_name, "msm") == 0))
+      return NULL;
+   else
+#endif
+      return NULL;
+}
 #endif /* INLINE_DRM_HELPER_H */
index ea076850447bd89cde42da0c23866c9126f7b940..740c4bbe1a664b8f27e86675b86181a23ae63b22 100644 (file)
@@ -119,4 +119,8 @@ struct drm_driver_descriptor driver_descriptor = {             \
 
 extern struct pipe_screen *dd_create_screen(int fd);
 
+extern const char *dd_driver_name(void);
+
+extern const struct drm_conf_ret *dd_configuration(enum drm_conf conf);
+
 #endif