summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmil Velikov <[email protected]>2014-05-18 00:20:47 +0100
committerEmil Velikov <[email protected]>2014-06-19 12:40:01 +0100
commit86c30c6c5b0d06b36b369c29a0a9264a2d1819d9 (patch)
treec00412ee96f20d424f38400b75154b2c408e9fa9
parent573b55e302dcf47ed6c2fe327ce720d72118921b (diff)
target-helpers: add dd_configuration(), dd_driver_name()
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 <[email protected]>
-rw-r--r--src/gallium/auxiliary/target-helpers/inline_drm_helper.h78
-rw-r--r--src/gallium/include/state_tracker/drm_driver.h4
2 files changed, 82 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/target-helpers/inline_drm_helper.h b/src/gallium/auxiliary/target-helpers/inline_drm_helper.h
index e039a8254d4..a03db3a5920 100644
--- a/src/gallium/auxiliary/target-helpers/inline_drm_helper.h
+++ b/src/gallium/auxiliary/target-helpers/inline_drm_helper.h
@@ -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 */
diff --git a/src/gallium/include/state_tracker/drm_driver.h b/src/gallium/include/state_tracker/drm_driver.h
index ea076850447..740c4bbe1a6 100644
--- a/src/gallium/include/state_tracker/drm_driver.h
+++ b/src/gallium/include/state_tracker/drm_driver.h
@@ -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