86 lines
2.6 KiB
Diff
86 lines
2.6 KiB
Diff
commit a3c3c1f1437de0186d70de9017a6a8e404ecf482
|
|
Author: Adam Jackson <ajax@redhat.com>
|
|
Date: Tue Apr 14 17:56:29 2009 -0400
|
|
|
|
glx: Make glXGetScreenDriver() work for DRI2
|
|
|
|
diff --git a/src/glx/x11/dri_glx.c b/src/glx/x11/dri_glx.c
|
|
index 3089aa1..87d62ad 100644
|
|
--- a/src/glx/x11/dri_glx.c
|
|
+++ b/src/glx/x11/dri_glx.c
|
|
@@ -40,6 +40,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
#include "glxclient.h"
|
|
#include "glcontextmodes.h"
|
|
#include "xf86dri.h"
|
|
+#include "dri2.h"
|
|
#include "sarea.h"
|
|
#include <dlfcn.h>
|
|
#include <sys/types.h>
|
|
@@ -75,32 +76,45 @@ struct __GLXDRIcontextPrivateRec {
|
|
*/
|
|
static Bool driGetDriverName(Display *dpy, int scrNum, char **driverName)
|
|
{
|
|
- int directCapable;
|
|
- Bool b;
|
|
- int driverMajor, driverMinor, driverPatch;
|
|
+ int directCapable;
|
|
+ Bool b;
|
|
+ int event, error;
|
|
+ int driverMajor, driverMinor, driverPatch;
|
|
|
|
- *driverName = NULL;
|
|
+ *driverName = NULL;
|
|
|
|
- if (!XF86DRIQueryDirectRenderingCapable(dpy, scrNum, &directCapable)) {
|
|
- ErrorMessageF("XF86DRIQueryDirectRenderingCapable failed\n");
|
|
- return False;
|
|
- }
|
|
- if (!directCapable) {
|
|
- ErrorMessageF("XF86DRIQueryDirectRenderingCapable returned false\n");
|
|
- return False;
|
|
- }
|
|
+ if (XF86DRIQueryExtension(dpy, &event, &error)) { /* DRI1 */
|
|
+ if (!XF86DRIQueryDirectRenderingCapable(dpy, scrNum, &directCapable)) {
|
|
+ ErrorMessageF("XF86DRIQueryDirectRenderingCapable failed\n");
|
|
+ return False;
|
|
+ }
|
|
+ if (!directCapable) {
|
|
+ ErrorMessageF("XF86DRIQueryDirectRenderingCapable returned false\n");
|
|
+ return False;
|
|
+ }
|
|
|
|
- b = XF86DRIGetClientDriverName(dpy, scrNum, &driverMajor, &driverMinor,
|
|
- &driverPatch, driverName);
|
|
- if (!b) {
|
|
- ErrorMessageF("Cannot determine driver name for screen %d\n", scrNum);
|
|
- return False;
|
|
- }
|
|
+ b = XF86DRIGetClientDriverName(dpy, scrNum, &driverMajor, &driverMinor,
|
|
+ &driverPatch, driverName);
|
|
+ if (!b) {
|
|
+ ErrorMessageF("Cannot determine driver name for screen %d\n", scrNum);
|
|
+ return False;
|
|
+ }
|
|
+
|
|
+ InfoMessageF("XF86DRIGetClientDriverName: %d.%d.%d %s (screen %d)\n",
|
|
+ driverMajor, driverMinor, driverPatch, *driverName, scrNum);
|
|
+
|
|
+ return True;
|
|
+ } else if (DRI2QueryExtension(dpy, &event, &error)) { /* DRI2 */
|
|
+ char *dev;
|
|
+ Bool ret = DRI2Connect(dpy, RootWindow(dpy, scrNum), driverName, &dev);
|
|
|
|
- InfoMessageF("XF86DRIGetClientDriverName: %d.%d.%d %s (screen %d)\n",
|
|
- driverMajor, driverMinor, driverPatch, *driverName, scrNum);
|
|
+ if (ret)
|
|
+ Xfree(dev);
|
|
+
|
|
+ return ret;
|
|
+ }
|
|
|
|
- return True;
|
|
+ return False;
|
|
}
|
|
|
|
/*
|