~ubuntu-branches/ubuntu/precise/xorg-server/precise-updates

« back to all changes in this revision

Viewing changes to hw/kdrive/ephyr/ephyrdriext.c

Tags: 2:1.10.1-2
* Build xserver-xorg-core-udeb on hurd-i386.  Thanks, Samuel Thibault!
* Upload to unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
72
72
 
73
73
static int DRIErrorBase;
74
74
 
75
 
static DISPATCH_PROC(ProcXF86DRIQueryVersion);
76
 
static DISPATCH_PROC(ProcXF86DRIQueryDirectRenderingCapable);
77
 
static DISPATCH_PROC(ProcXF86DRIOpenConnection);
78
 
static DISPATCH_PROC(ProcXF86DRICloseConnection);
79
 
static DISPATCH_PROC(ProcXF86DRIGetClientDriverName);
80
 
static DISPATCH_PROC(ProcXF86DRICreateContext);
81
 
static DISPATCH_PROC(ProcXF86DRIDestroyContext);
82
 
static DISPATCH_PROC(ProcXF86DRICreateDrawable);
83
 
static DISPATCH_PROC(ProcXF86DRIDestroyDrawable);
84
 
static DISPATCH_PROC(ProcXF86DRIGetDrawableInfo);
85
 
static DISPATCH_PROC(ProcXF86DRIGetDeviceInfo);
86
 
static DISPATCH_PROC(ProcXF86DRIDispatch);
87
 
static DISPATCH_PROC(ProcXF86DRIAuthConnection);
88
75
 
89
 
static DISPATCH_PROC(SProcXF86DRIQueryVersion);
90
 
static DISPATCH_PROC(SProcXF86DRIQueryDirectRenderingCapable);
91
 
static DISPATCH_PROC(SProcXF86DRIDispatch);
92
76
 
93
77
static Bool ephyrDRIScreenInit (ScreenPtr a_screen) ;
94
78
static Bool ephyrDRICreateWindow (WindowPtr a_win) ;
119
103
#define GET_EPHYR_DRI_SCREEN_PRIV(screen) ((EphyrDRIScreenPrivPtr) \
120
104
    dixLookupPrivate(&(screen)->devPrivates, ephyrDRIScreenKey))
121
105
 
122
 
 
123
 
Bool
124
 
ephyrDRIExtensionInit (ScreenPtr a_screen)
125
 
{
126
 
    Bool is_ok=FALSE ;
127
 
    ExtensionEntry* extEntry=NULL;
128
 
    EphyrDRIScreenPrivPtr screen_priv=NULL ;
129
 
 
130
 
    EPHYR_LOG ("enter\n") ;
131
 
    if (!hostx_has_dri ()) {
132
 
        EPHYR_LOG ("host does not have DRI extension\n") ;
133
 
        goto out ;
134
 
    }
135
 
    EPHYR_LOG ("host X does have DRI extension\n") ;
136
 
    if (!hostx_has_xshape ()) {
137
 
        EPHYR_LOG ("host does not have XShape extension\n") ;
138
 
        goto out ;
139
 
    }
140
 
    EPHYR_LOG ("host X does have XShape extension\n") ;
141
 
 
142
 
#ifdef XF86DRI_EVENTS
143
 
    EventType = CreateNewResourceType (XF86DRIFreeEvents, "DRIEvents");
144
 
    if (!EventType) {
145
 
        EPHYR_LOG_ERROR ("failed to register DRI event resource type\n") ;
146
 
        goto out ;
147
 
    }
148
 
#endif
149
 
 
150
 
    if ((extEntry = AddExtension(XF86DRINAME,
151
 
                                 XF86DRINumberEvents,
152
 
                                 XF86DRINumberErrors,
153
 
                                 ProcXF86DRIDispatch,
154
 
                                 SProcXF86DRIDispatch,
155
 
                                 NULL,
156
 
                                 StandardMinorOpcode))) {
157
 
        DRIReqCode = (unsigned char)extEntry->base;
158
 
        DRIErrorBase = extEntry->errorBase;
159
 
    } else {
160
 
        EPHYR_LOG_ERROR ("failed to register DRI extension\n") ;
161
 
        goto out ;
162
 
    }
163
 
    screen_priv = calloc(1, sizeof (EphyrDRIScreenPrivRec)) ;
164
 
    if (!screen_priv) {
165
 
        EPHYR_LOG_ERROR ("failed to allocate screen_priv\n") ;
166
 
        goto out ;
167
 
    }
168
 
    dixSetPrivate(&a_screen->devPrivates, ephyrDRIScreenKey, screen_priv);
169
 
 
170
 
    if (!ephyrDRIScreenInit (a_screen)) {
171
 
        EPHYR_LOG_ERROR ("ephyrDRIScreenInit() failed\n") ;
172
 
        goto out ;
173
 
    }
174
 
    EphyrMirrorHostVisuals (a_screen) ;
175
 
    is_ok=TRUE ;
176
 
out:
177
 
    EPHYR_LOG ("leave\n") ;
178
 
    return is_ok ;
179
 
}
180
 
 
181
106
static Bool
182
107
ephyrDRIScreenInit (ScreenPtr a_screen)
183
108
{
1428
1353
        }
1429
1354
    }
1430
1355
}
 
1356
 
 
1357
Bool
 
1358
ephyrDRIExtensionInit (ScreenPtr a_screen)
 
1359
{
 
1360
    Bool is_ok=FALSE ;
 
1361
    ExtensionEntry* extEntry=NULL;
 
1362
    EphyrDRIScreenPrivPtr screen_priv=NULL ;
 
1363
 
 
1364
    EPHYR_LOG ("enter\n") ;
 
1365
    if (!hostx_has_dri ()) {
 
1366
        EPHYR_LOG ("host does not have DRI extension\n") ;
 
1367
        goto out ;
 
1368
    }
 
1369
    EPHYR_LOG ("host X does have DRI extension\n") ;
 
1370
    if (!hostx_has_xshape ()) {
 
1371
        EPHYR_LOG ("host does not have XShape extension\n") ;
 
1372
        goto out ;
 
1373
    }
 
1374
    EPHYR_LOG ("host X does have XShape extension\n") ;
 
1375
 
 
1376
#ifdef XF86DRI_EVENTS
 
1377
    EventType = CreateNewResourceType (XF86DRIFreeEvents, "DRIEvents");
 
1378
    if (!EventType) {
 
1379
        EPHYR_LOG_ERROR ("failed to register DRI event resource type\n") ;
 
1380
        goto out ;
 
1381
    }
 
1382
#endif
 
1383
 
 
1384
    if ((extEntry = AddExtension(XF86DRINAME,
 
1385
                                 XF86DRINumberEvents,
 
1386
                                 XF86DRINumberErrors,
 
1387
                                 ProcXF86DRIDispatch,
 
1388
                                 SProcXF86DRIDispatch,
 
1389
                                 NULL,
 
1390
                                 StandardMinorOpcode))) {
 
1391
        DRIReqCode = (unsigned char)extEntry->base;
 
1392
        DRIErrorBase = extEntry->errorBase;
 
1393
    } else {
 
1394
        EPHYR_LOG_ERROR ("failed to register DRI extension\n") ;
 
1395
        goto out ;
 
1396
    }
 
1397
    screen_priv = calloc(1, sizeof (EphyrDRIScreenPrivRec)) ;
 
1398
    if (!screen_priv) {
 
1399
        EPHYR_LOG_ERROR ("failed to allocate screen_priv\n") ;
 
1400
        goto out ;
 
1401
    }
 
1402
    dixSetPrivate(&a_screen->devPrivates, ephyrDRIScreenKey, screen_priv);
 
1403
 
 
1404
    if (!ephyrDRIScreenInit (a_screen)) {
 
1405
        EPHYR_LOG_ERROR ("ephyrDRIScreenInit() failed\n") ;
 
1406
        goto out ;
 
1407
    }
 
1408
    EphyrMirrorHostVisuals (a_screen) ;
 
1409
    is_ok=TRUE ;
 
1410
out:
 
1411
    EPHYR_LOG ("leave\n") ;
 
1412
    return is_ok ;
 
1413
}