summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Bornecrantz <jakob@vmware.com>2010-06-01 04:00:02 +0100
committerJakob Bornecrantz <jakob@vmware.com>2010-06-06 12:29:28 +0100
commite72b15aa47c24b920c708e1dc47f69a070d50d51 (patch)
tree9e1ec6023a3d6c97ed9281ecde52828a38a1e431
parentf9d9574913c5edb92191ac3f5e8d011452427852 (diff)
gallium: drm api compat helper
This is temporary untill all drivers have moved to the new drm driver descriptor interface.
-rw-r--r--src/gallium/auxiliary/target-helpers/drm_api_compat.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/target-helpers/drm_api_compat.h b/src/gallium/auxiliary/target-helpers/drm_api_compat.h
new file mode 100644
index 00000000000..324c6f2ba94
--- /dev/null
+++ b/src/gallium/auxiliary/target-helpers/drm_api_compat.h
@@ -0,0 +1,46 @@
+/*
+ * This file contain a small backwards compatible shim between
+ * the old depricated drm_api and the drm_driver interface.
+ */
+
+#ifndef DRM_API_COMPAT_H
+#define DRM_API_COMPAT_H
+
+#ifdef _DRM_API_H_
+#error "Included drm_api.h before drm_api_compat.h"
+#endif
+
+#include "state_tracker/drm_driver.h"
+
+/*
+ * XXX Hack, can't include both drm_api and drm_driver. Due to name
+ * collition of winsys_handle, just use a define to rename it.
+ */
+#define winsys_handle HACK_winsys_handle
+#include "state_tracker/drm_api.h"
+#undef winsys_handle
+
+static INLINE struct pipe_screen *
+drm_api_compat_create_screen(int fd)
+{
+ static struct drm_api *api;
+ if (!api)
+ api = drm_api_create();
+
+ if (!api)
+ return NULL;
+
+ return api->create_screen(api, fd);
+}
+
+/**
+ * Instanciate a drm_driver descriptor.
+ */
+#define DRM_API_COMPAT_STRUCT(name_str, driver_name_str) \
+struct drm_driver_descriptor driver_descriptor = { \
+ .name = name_str, \
+ .driver_name = driver_name_str, \
+ .create_screen = drm_api_compat_create_screen, \
+};
+
+#endif