summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/egl
diff options
context:
space:
mode:
authorJakob Bornecrantz <[email protected]>2010-06-28 20:59:09 +0200
committerJakob Bornecrantz <[email protected]>2010-06-28 21:14:45 +0200
commita01e0afd9fc0d647081c6903baa1a7ba505c4b05 (patch)
tree7e04eb2b4e87137455920f6131b064dc87056e14 /src/gallium/state_trackers/egl
parent250b92f3bb4fc4a53f3150b0e8ff1e121a5adbc7 (diff)
parent9ca563a9a8573bf79821abc75ccf0fdade19c8a9 (diff)
Merge branch 'gallium-drm-driver-drescriptor'
Conflicts: src/gallium/state_trackers/egl/x11/native_dri2.c src/gallium/state_trackers/egl/x11/native_x11.c src/gallium/state_trackers/egl/x11/native_x11.h src/gallium/state_trackers/xorg/xorg_driver.c src/gallium/winsys/radeon/drm/radeon_drm.c
Diffstat (limited to 'src/gallium/state_trackers/egl')
-rw-r--r--src/gallium/state_trackers/egl/kms/native_kms.c41
-rw-r--r--src/gallium/state_trackers/egl/kms/native_kms.h2
-rw-r--r--src/gallium/state_trackers/egl/x11/native_dri2.c15
-rw-r--r--src/gallium/state_trackers/egl/x11/native_x11.c30
-rw-r--r--src/gallium/state_trackers/egl/x11/native_x11.h4
5 files changed, 24 insertions, 68 deletions
diff --git a/src/gallium/state_trackers/egl/kms/native_kms.c b/src/gallium/state_trackers/egl/kms/native_kms.c
index f90b8714c99..09a08f32b3c 100644
--- a/src/gallium/state_trackers/egl/kms/native_kms.c
+++ b/src/gallium/state_trackers/egl/kms/native_kms.c
@@ -33,6 +33,7 @@
#include "egllog.h"
#include "native_kms.h"
+#include "state_tracker/drm_driver.h"
static boolean
kms_surface_validate(struct native_surface *nsurf, uint attachment_mask,
@@ -657,8 +658,6 @@ kms_display_destroy(struct native_display *ndpy)
if (kdpy->fd >= 0)
drmClose(kdpy->fd);
- if (kdpy->api && kdpy->api->destroy)
- kdpy->api->destroy(kdpy->api);
FREE(kdpy);
}
@@ -674,7 +673,7 @@ kms_display_init_screen(struct native_display *ndpy)
fd = kdpy->fd;
if (fd >= 0) {
drmVersionPtr version = drmGetVersion(fd);
- if (!version || strcmp(version->name, kdpy->api->driver_name)) {
+ if (!version || strcmp(version->name, driver_descriptor.driver_name)) {
if (version) {
_eglLog(_EGL_WARNING, "unknown driver name %s", version->name);
drmFreeVersion(version);
@@ -689,7 +688,7 @@ kms_display_init_screen(struct native_display *ndpy)
drmFreeVersion(version);
}
else {
- fd = drmOpen(kdpy->api->driver_name, NULL);
+ fd = drmOpen(driver_descriptor.driver_name, NULL);
}
if (fd < 0) {
@@ -704,7 +703,7 @@ kms_display_init_screen(struct native_display *ndpy)
}
#endif
- kdpy->base.screen = kdpy->api->create_screen(kdpy->api, fd);
+ kdpy->base.screen = driver_descriptor.create_screen(fd);
if (!kdpy->base.screen) {
_eglLog(_EGL_WARNING, "failed to create DRM screen");
drmClose(fd);
@@ -724,8 +723,7 @@ static struct native_display_modeset kms_display_modeset = {
};
static struct native_display *
-kms_create_display(int fd, struct native_event_handler *event_handler,
- struct drm_api *api)
+kms_create_display(int fd, struct native_event_handler *event_handler)
{
struct kms_display *kdpy;
@@ -734,14 +732,6 @@ kms_create_display(int fd, struct native_event_handler *event_handler,
return NULL;
kdpy->event_handler = event_handler;
-
- kdpy->api = api;
- if (!kdpy->api) {
- _eglLog(_EGL_WARNING, "failed to create DRM API");
- FREE(kdpy);
- return NULL;
- }
-
kdpy->fd = fd;
if (!kms_display_init_screen(&kdpy->base)) {
kms_display_destroy(&kdpy->base);
@@ -790,21 +780,13 @@ native_get_probe_result(struct native_probe *nprobe)
return NATIVE_PROBE_UNKNOWN;
}
-/* the api is destroyed with the native display */
-static struct drm_api *drm_api;
-
const char *
native_get_name(void)
{
static char kms_name[32];
- if (!drm_api)
- drm_api = drm_api_create();
- if (drm_api)
- util_snprintf(kms_name, sizeof(kms_name), "KMS/%s", drm_api->name);
- else
- util_snprintf(kms_name, sizeof(kms_name), "KMS");
+ util_snprintf(kms_name, sizeof(kms_name), "KMS/%s", driver_descriptor.name);
return kms_name;
}
@@ -815,15 +797,8 @@ native_create_display(void *dpy, struct native_event_handler *event_handler)
struct native_display *ndpy = NULL;
int fd;
- if (!drm_api)
- drm_api = drm_api_create();
-
- if (drm_api) {
- /* well, this makes fd 0 being ignored */
- fd = (dpy != EGL_DEFAULT_DISPLAY) ?
- (int) pointer_to_intptr((void *) dpy) : -1;
- ndpy = kms_create_display(fd, event_handler, drm_api);
- }
+ fd = (dpy != EGL_DEFAULT_DISPLAY) ? (int) pointer_to_intptr((void *) dpy) : -1;
+ ndpy = kms_create_display(fd, event_handler);
return ndpy;
}
diff --git a/src/gallium/state_trackers/egl/kms/native_kms.h b/src/gallium/state_trackers/egl/kms/native_kms.h
index d69c8d38c83..14cf5a641a8 100644
--- a/src/gallium/state_trackers/egl/kms/native_kms.h
+++ b/src/gallium/state_trackers/egl/kms/native_kms.h
@@ -32,7 +32,6 @@
#include "pipe/p_compiler.h"
#include "util/u_format.h"
#include "pipe/p_state.h"
-#include "state_tracker/drm_api.h"
#include "common/native.h"
#include "common/native_helper.h"
@@ -53,7 +52,6 @@ struct kms_display {
struct native_event_handler *event_handler;
int fd;
- struct drm_api *api;
drmModeResPtr resources;
struct kms_config *config;
diff --git a/src/gallium/state_trackers/egl/x11/native_dri2.c b/src/gallium/state_trackers/egl/x11/native_dri2.c
index e90c33b824d..7464354fe61 100644
--- a/src/gallium/state_trackers/egl/x11/native_dri2.c
+++ b/src/gallium/state_trackers/egl/x11/native_dri2.c
@@ -32,7 +32,7 @@
#include "pipe/p_screen.h"
#include "pipe/p_context.h"
#include "pipe/p_state.h"
-#include "state_tracker/drm_api.h"
+#include "state_tracker/drm_driver.h"
#include "egllog.h"
#include "native_x11.h"
@@ -50,7 +50,6 @@ struct dri2_display {
struct native_event_handler *event_handler;
- struct drm_api *api;
struct x11_screen *xscr;
int xscr_number;
const char *dri_driver;
@@ -662,8 +661,6 @@ dri2_display_destroy(struct native_display *ndpy)
x11_screen_destroy(dri2dpy->xscr);
if (dri2dpy->own_dpy)
XCloseDisplay(dri2dpy->dpy);
- if (dri2dpy->api && dri2dpy->api->destroy)
- dri2dpy->api->destroy(dri2dpy->api);
FREE(dri2dpy);
}
@@ -695,7 +692,7 @@ static boolean
dri2_display_init_screen(struct native_display *ndpy)
{
struct dri2_display *dri2dpy = dri2_display(ndpy);
- const char *driver = dri2dpy->api->name;
+ const char *driver = driver_descriptor.name;
int fd;
if (!x11_screen_support(dri2dpy->xscr, X11_SCREEN_EXTENSION_DRI2) ||
@@ -709,7 +706,7 @@ dri2_display_init_screen(struct native_display *ndpy)
if (!dri2dpy->dri_driver || !driver ||
strcmp(dri2dpy->dri_driver, driver) != 0) {
_eglLog(_EGL_WARNING, "Driver mismatch: %s != %s",
- dri2dpy->dri_driver, dri2dpy->api->name);
+ dri2dpy->dri_driver, driver);
return FALSE;
}
@@ -718,7 +715,7 @@ dri2_display_init_screen(struct native_display *ndpy)
if (fd < 0)
return FALSE;
- dri2dpy->base.screen = dri2dpy->api->create_screen(dri2dpy->api, fd);
+ dri2dpy->base.screen = driver_descriptor.create_screen(fd);
if (!dri2dpy->base.screen) {
_eglLog(_EGL_WARNING, "failed to create DRM screen");
return FALSE;
@@ -742,8 +739,7 @@ dri2_display_hash_table_compare(void *key1, void *key2)
struct native_display *
x11_create_dri2_display(Display *dpy,
- struct native_event_handler *event_handler,
- struct drm_api *api)
+ struct native_event_handler *event_handler)
{
struct dri2_display *dri2dpy;
@@ -752,7 +748,6 @@ x11_create_dri2_display(Display *dpy,
return NULL;
dri2dpy->event_handler = event_handler;
- dri2dpy->api = api;
dri2dpy->dpy = dpy;
if (!dri2dpy->dpy) {
diff --git a/src/gallium/state_trackers/egl/x11/native_x11.c b/src/gallium/state_trackers/egl/x11/native_x11.c
index bfa12b26a77..6f1e5998732 100644
--- a/src/gallium/state_trackers/egl/x11/native_x11.c
+++ b/src/gallium/state_trackers/egl/x11/native_x11.c
@@ -27,15 +27,14 @@
#include "util/u_debug.h"
#include "util/u_memory.h"
#include "util/u_string.h"
-#include "state_tracker/drm_api.h"
#include "egllog.h"
#include "native_x11.h"
#include "x11_screen.h"
-#define X11_PROBE_MAGIC 0x11980BE /* "X11PROBE" */
+#include "state_tracker/drm_driver.h"
-static struct drm_api *api;
+#define X11_PROBE_MAGIC 0x11980BE /* "X11PROBE" */
static void
x11_probe_destroy(struct native_probe *nprobe)
@@ -96,15 +95,12 @@ native_get_probe_result(struct native_probe *nprobe)
if (!nprobe || nprobe->magic != X11_PROBE_MAGIC)
return NATIVE_PROBE_UNKNOWN;
- if (!api)
- api = drm_api_create();
-
/* this is a software driver */
- if (!api)
+ if (!driver_descriptor.create_screen)
return NATIVE_PROBE_SUPPORTED;
/* the display does not support DRI2 or the driver mismatches */
- if (!nprobe->data || strcmp(api->name, (const char *) nprobe->data) != 0)
+ if (!nprobe->data || strcmp(driver_descriptor.name, (const char *) nprobe->data) != 0)
return NATIVE_PROBE_FALLBACK;
return NATIVE_PROBE_EXACT;
@@ -115,13 +111,7 @@ native_get_name(void)
{
static char x11_name[32];
- if (!api)
- api = drm_api_create();
-
- if (api)
- util_snprintf(x11_name, sizeof(x11_name), "X11/%s", api->name);
- else
- util_snprintf(x11_name, sizeof(x11_name), "X11");
+ util_snprintf(x11_name, sizeof(x11_name), "X11/%s", driver_descriptor.name);
return x11_name;
}
@@ -132,12 +122,12 @@ native_create_display(void *dpy, struct native_event_handler *event_handler)
struct native_display *ndpy = NULL;
boolean force_sw;
- if (!api)
- api = drm_api_create();
-
force_sw = debug_get_bool_option("EGL_SOFTWARE", FALSE);
- if (api && !force_sw) {
- ndpy = x11_create_dri2_display((Display *) dpy, event_handler, api);
+ if (!driver_descriptor.create_screen)
+ force_sw = TRUE;
+
+ if (!force_sw) {
+ ndpy = x11_create_dri2_display((Display *) dpy, event_handler);
}
if (!ndpy) {
diff --git a/src/gallium/state_trackers/egl/x11/native_x11.h b/src/gallium/state_trackers/egl/x11/native_x11.h
index f1fea7f3de4..a1c32c3455a 100644
--- a/src/gallium/state_trackers/egl/x11/native_x11.h
+++ b/src/gallium/state_trackers/egl/x11/native_x11.h
@@ -26,7 +26,6 @@
#ifndef _NATIVE_X11_H_
#define _NATIVE_X11_H_
-#include "state_tracker/drm_api.h"
#include "common/native.h"
struct native_display *
@@ -35,7 +34,6 @@ x11_create_ximage_display(Display *dpy,
struct native_display *
x11_create_dri2_display(Display *dpy,
- struct native_event_handler *event_handler,
- struct drm_api *api);
+ struct native_event_handler *event_handler);
#endif /* _NATIVE_X11_H_ */