gallium: drm api compat helper
authorJakob Bornecrantz <jakob@vmware.com>
Tue, 1 Jun 2010 03:00:02 +0000 (04:00 +0100)
committerJakob Bornecrantz <jakob@vmware.com>
Sun, 6 Jun 2010 11:29:28 +0000 (12:29 +0100)
This is temporary untill all drivers have moved
to the new drm driver descriptor interface.

src/gallium/auxiliary/target-helpers/drm_api_compat.h [new file with mode: 0644]

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 (file)
index 0000000..324c6f2
--- /dev/null
@@ -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