Commits
Chris Jones authored 6746eecb6c3
1 + | /* |
2 + | * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. |
3 + | * Copyright 2007-2008 Red Hat, Inc. |
4 + | * (C) Copyright IBM Corporation 2004 |
5 + | * All Rights Reserved. |
6 + | * |
7 + | * Permission is hereby granted, free of charge, to any person obtaining a |
8 + | * copy of this software and associated documentation files (the "Software"), |
9 + | * to deal in the Software without restriction, including without limitation |
10 + | * on the rights to use, copy, modify, merge, publish, distribute, sub |
11 + | * license, and/or sell copies of the Software, and to permit persons to whom |
12 + | * the Software is furnished to do so, subject to the following conditions: |
13 + | * |
14 + | * The above copyright notice and this permission notice (including the next |
15 + | * paragraph) shall be included in all copies or substantial portions of the |
16 + | * Software. |
17 + | * |
18 + | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
19 + | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
20 + | * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL |
21 + | * THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, |
22 + | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
23 + | * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE |
24 + | * USE OR OTHER DEALINGS IN THE SOFTWARE. |
25 + | */ |
26 + | |
27 + | /** |
28 + | * \file dri_interface.h |
29 + | * |
30 + | * This file contains all the types and functions that define the interface |
31 + | * between a DRI driver and driver loader. Currently, the most common driver |
32 + | * loader is the XFree86 libGL.so. However, other loaders do exist, and in |
33 + | * the future the server-side libglx.a will also be a loader. |
34 + | * |
35 + | * \author Kevin E. Martin <kevin@precisioninsight.com> |
36 + | * \author Ian Romanick <idr@us.ibm.com> |
37 + | * \author Kristian Høgsberg <krh@redhat.com> |
38 + | */ |
39 + | |
40 + | |
41 + | |
42 + | |
43 + | /* For archs with no drm.h */ |
44 + | |
45 + | |
46 + | |
47 + | |
48 + | |
49 + | |
50 + | |
51 + | |
52 + | |
53 + | typedef unsigned int drm_context_t; |
54 + | typedef unsigned int drm_drawable_t; |
55 + | typedef struct drm_clip_rect drm_clip_rect_t; |
56 + | |
57 + | |
58 + | /** |
59 + | * \name DRI interface structures |
60 + | * |
61 + | * The following structures define the interface between the GLX client |
62 + | * side library and the DRI (direct rendering infrastructure). |
63 + | */ |
64 + | /*@{*/ |
65 + | typedef struct __DRIdisplayRec __DRIdisplay; |
66 + | typedef struct __DRIscreenRec __DRIscreen; |
67 + | typedef struct __DRIcontextRec __DRIcontext; |
68 + | typedef struct __DRIdrawableRec __DRIdrawable; |
69 + | typedef struct __DRIconfigRec __DRIconfig; |
70 + | typedef struct __DRIframebufferRec __DRIframebuffer; |
71 + | typedef struct __DRIversionRec __DRIversion; |
72 + | |
73 + | typedef struct __DRIcoreExtensionRec __DRIcoreExtension; |
74 + | typedef struct __DRIextensionRec __DRIextension; |
75 + | typedef struct __DRIcopySubBufferExtensionRec __DRIcopySubBufferExtension; |
76 + | typedef struct __DRIswapControlExtensionRec __DRIswapControlExtension; |
77 + | typedef struct __DRIframeTrackingExtensionRec __DRIframeTrackingExtension; |
78 + | typedef struct __DRImediaStreamCounterExtensionRec __DRImediaStreamCounterExtension; |
79 + | typedef struct __DRItexOffsetExtensionRec __DRItexOffsetExtension; |
80 + | typedef struct __DRItexBufferExtensionRec __DRItexBufferExtension; |
81 + | typedef struct __DRIlegacyExtensionRec __DRIlegacyExtension; |
82 + | typedef struct __DRIswrastExtensionRec __DRIswrastExtension; |
83 + | typedef struct __DRIbufferRec __DRIbuffer; |
84 + | typedef struct __DRIdri2ExtensionRec __DRIdri2Extension; |
85 + | typedef struct __DRIdri2LoaderExtensionRec __DRIdri2LoaderExtension; |
86 + | typedef struct __DRI2flushExtensionRec __DRI2flushExtension; |
87 + | typedef struct __DRI2throttleExtensionRec __DRI2throttleExtension; |
88 + | |
89 + | |
90 + | typedef struct __DRIimageLoaderExtensionRec __DRIimageLoaderExtension; |
91 + | typedef struct __DRIimageDriverExtensionRec __DRIimageDriverExtension; |
92 + | |
93 + | /*@}*/ |
94 + | |
95 + | |
96 + | /** |
97 + | * Extension struct. Drivers 'inherit' from this struct by embedding |
98 + | * it as the first element in the extension struct. |
99 + | * |
100 + | * We never break API in for a DRI extension. If we need to change |
101 + | * the way things work in a non-backwards compatible manner, we |
102 + | * introduce a new extension. During a transition period, we can |
103 + | * leave both the old and the new extension in the driver, which |
104 + | * allows us to move to the new interface without having to update the |
105 + | * loader(s) in lock step. |
106 + | * |
107 + | * However, we can add entry points to an extension over time as long |
108 + | * as we don't break the old ones. As we add entry points to an |
109 + | * extension, we increase the version number. The corresponding |
110 + | * #define can be used to guard code that accesses the new entry |
111 + | * points at compile time and the version field in the extension |
112 + | * struct can be used at run-time to determine how to use the |
113 + | * extension. |
114 + | */ |
115 + | struct __DRIextensionRec { |
116 + | const char *name; |
117 + | int version; |
118 + | }; |
119 + | |
120 + | /** |
121 + | * The first set of extension are the screen extensions, returned by |
122 + | * __DRIcore::getExtensions(). This entry point will return a list of |
123 + | * extensions and the loader can use the ones it knows about by |
124 + | * casting them to more specific extensions and advertising any GLX |
125 + | * extensions the DRI extensions enables. |
126 + | */ |
127 + | |
128 + | /** |
129 + | * Used by drivers to indicate support for setting the read drawable. |
130 + | */ |
131 + | |
132 + | |
133 + | |
134 + | /** |
135 + | * Used by drivers that implement the GLX_MESA_copy_sub_buffer extension. |
136 + | */ |
137 + | |
138 + | |
139 + | struct __DRIcopySubBufferExtensionRec { |
140 + | __DRIextension base; |
141 + | void (*copySubBuffer)(__DRIdrawable *drawable, int x, int y, int w, int h); |
142 + | }; |
143 + | |
144 + | /** |
145 + | * Used by drivers that implement the GLX_SGI_swap_control or |
146 + | * GLX_MESA_swap_control extension. |
147 + | */ |
148 + | |
149 + | |
150 + | struct __DRIswapControlExtensionRec { |
151 + | __DRIextension base; |
152 + | void (*setSwapInterval)(__DRIdrawable *drawable, unsigned int inteval); |
153 + | unsigned int (*getSwapInterval)(__DRIdrawable *drawable); |
154 + | }; |
155 + | |
156 + | /** |
157 + | * Used by drivers that implement the GLX_MESA_swap_frame_usage extension. |
158 + | */ |
159 + | |
160 + | |
161 + | struct __DRIframeTrackingExtensionRec { |
162 + | __DRIextension base; |
163 + | |
164 + | /** |
165 + | * Enable or disable frame usage tracking. |
166 + | * |
167 + | * \since Internal API version 20030317. |
168 + | */ |
169 + | int (*frameTracking)(__DRIdrawable *drawable, GLboolean enable); |
170 + | |
171 + | /** |
172 + | * Retrieve frame usage information. |
173 + | * |
174 + | * \since Internal API version 20030317. |
175 + | */ |
176 + | int (*queryFrameTracking)(__DRIdrawable *drawable, |
177 + | int64_t * sbc, int64_t * missedFrames, |
178 + | float * lastMissedUsage, float * usage); |
179 + | }; |
180 + | |
181 + | |
182 + | /** |
183 + | * Used by drivers that implement the GLX_SGI_video_sync extension. |
184 + | */ |
185 + | |
186 + | |
187 + | struct __DRImediaStreamCounterExtensionRec { |
188 + | __DRIextension base; |
189 + | |
190 + | /** |
191 + | * Wait for the MSC to equal target_msc, or, if that has already passed, |
192 + | * the next time (MSC % divisor) is equal to remainder. If divisor is |
193 + | * zero, the function will return as soon as MSC is greater than or equal |
194 + | * to target_msc. |
195 + | */ |
196 + | int (*waitForMSC)(__DRIdrawable *drawable, |
197 + | int64_t target_msc, int64_t divisor, int64_t remainder, |
198 + | int64_t * msc, int64_t * sbc); |
199 + | |
200 + | /** |
201 + | * Get the number of vertical refreshes since some point in time before |
202 + | * this function was first called (i.e., system start up). |
203 + | */ |
204 + | int (*getDrawableMSC)(__DRIscreen *screen, __DRIdrawable *drawable, |
205 + | int64_t *msc); |
206 + | }; |
207 + | |
208 + | |
209 + | |
210 + | |
211 + | struct __DRItexOffsetExtensionRec { |
212 + | __DRIextension base; |
213 + | |
214 + | /** |
215 + | * Method to override base texture image with a driver specific 'offset'. |
216 + | * The depth passed in allows e.g. to ignore the alpha channel of texture |
217 + | * images where the non-alpha components don't occupy a whole texel. |
218 + | * |
219 + | * For GLX_EXT_texture_from_pixmap with AIGLX. |
220 + | */ |
221 + | void (*setTexOffset)(__DRIcontext *pDRICtx, GLint texname, |
222 + | unsigned long long offset, GLint depth, GLuint pitch); |
223 + | }; |
224 + | |
225 + | |
226 + | /* Valid values for format in the setTexBuffer2 function below. These |
227 + | * values match the GLX tokens for compatibility reasons, but we |
228 + | * define them here since the DRI interface can't depend on GLX. */ |
229 + | |
230 + | |
231 + | |
232 + | |
233 + | |
234 + | |
235 + | struct __DRItexBufferExtensionRec { |
236 + | __DRIextension base; |
237 + | |
238 + | /** |
239 + | * Method to override base texture image with the contents of a |
240 + | * __DRIdrawable. |
241 + | * |
242 + | * For GLX_EXT_texture_from_pixmap with AIGLX. Deprecated in favor of |
243 + | * setTexBuffer2 in version 2 of this interface |
244 + | */ |
245 + | void (*setTexBuffer)(__DRIcontext *pDRICtx, |
246 + | GLint target, |
247 + | __DRIdrawable *pDraw); |
248 + | |
249 + | /** |
250 + | * Method to override base texture image with the contents of a |
251 + | * __DRIdrawable, including the required texture format attribute. |
252 + | * |
253 + | * For GLX_EXT_texture_from_pixmap with AIGLX. |
254 + | */ |
255 + | void (*setTexBuffer2)(__DRIcontext *pDRICtx, |
256 + | GLint target, |
257 + | GLint format, |
258 + | __DRIdrawable *pDraw); |
259 + | /** |
260 + | * Method to release texture buffer in case some special platform |
261 + | * need this. |
262 + | * |
263 + | * For GLX_EXT_texture_from_pixmap with AIGLX. |
264 + | */ |
265 + | void (*releaseTexBuffer)(__DRIcontext *pDRICtx, |
266 + | GLint target, |
267 + | __DRIdrawable *pDraw); |
268 + | }; |
269 + | |
270 + | /** |
271 + | * Used by drivers that implement DRI2 |
272 + | */ |
273 + | |
274 + | |
275 + | |
276 + | /* the drawable should be flushed. */ |
277 + | /* glFlush should be called */ |
278 + | |
279 + | enum __DRI2throttleReason { |
280 + | __DRI2_THROTTLE_SWAPBUFFER, |
281 + | __DRI2_THROTTLE_COPYSUBBUFFER, |
282 + | __DRI2_THROTTLE_FLUSHFRONT |
283 + | }; |
284 + | |
285 + | struct __DRI2flushExtensionRec { |
286 + | __DRIextension base; |
287 + | void (*flush)(__DRIdrawable *drawable); |
288 + | |
289 + | /** |
290 + | * Ask the driver to call getBuffers/getBuffersWithFormat before |
291 + | * it starts rendering again. |
292 + | * |
293 + | * \param drawable the drawable to invalidate |
294 + | * |
295 + | * \since 3 |
296 + | */ |
297 + | void (*invalidate)(__DRIdrawable *drawable); |
298 + | |
299 + | /** |
300 + | * This function reduces the number of flushes in the driver by combining |
301 + | * several operations into one call. |
302 + | * |
303 + | * It can: |
304 + | * - throttle |
305 + | * - flush a drawable |
306 + | * - flush a context |
307 + | * |
308 + | * \param context the context |
309 + | * \param drawable the drawable to flush |
310 + | * \param flags a combination of _DRI2_FLUSH_xxx flags |
311 + | * \param throttle_reason the reason for throttling, 0 = no throttling |
312 + | * |
313 + | * \since 4 |
314 + | */ |
315 + | void (*flush_with_flags)(__DRIcontext *ctx, |
316 + | __DRIdrawable *drawable, |
317 + | unsigned flags, |
318 + | enum __DRI2throttleReason throttle_reason); |
319 + | }; |
320 + | |
321 + | |
322 + | /** |
323 + | * Extension that the driver uses to request |
324 + | * throttle callbacks. |
325 + | */ |
326 + | |
327 + | |
328 + | |
329 + | |
330 + | struct __DRI2throttleExtensionRec { |
331 + | __DRIextension base; |
332 + | void (*throttle)(__DRIcontext *ctx, |
333 + | __DRIdrawable *drawable, |
334 + | enum __DRI2throttleReason reason); |
335 + | }; |
336 + | |
337 + | /*@}*/ |
338 + | |
339 + | /** |
340 + | * The following extensions describe loader features that the DRI |
341 + | * driver can make use of. Some of these are mandatory, such as the |
342 + | * getDrawableInfo extension for DRI and the DRI Loader extensions for |
343 + | * DRI2, while others are optional, and if present allow the driver to |
344 + | * expose certain features. The loader pass in a NULL terminated |
345 + | * array of these extensions to the driver in the createNewScreen |
346 + | * constructor. |
347 + | */ |
348 + | |
349 + | typedef struct __DRIgetDrawableInfoExtensionRec __DRIgetDrawableInfoExtension; |
350 + | typedef struct __DRIsystemTimeExtensionRec __DRIsystemTimeExtension; |
351 + | typedef struct __DRIdamageExtensionRec __DRIdamageExtension; |
352 + | typedef struct __DRIloaderExtensionRec __DRIloaderExtension; |
353 + | typedef struct __DRIswrastLoaderExtensionRec __DRIswrastLoaderExtension; |
354 + | |
355 + | |
356 + | /** |
357 + | * Callback to getDrawableInfo protocol |
358 + | */ |
359 + | |
360 + | |
361 + | struct __DRIgetDrawableInfoExtensionRec { |
362 + | __DRIextension base; |
363 + | |
364 + | /** |
365 + | * This function is used to get information about the position, size, and |
366 + | * clip rects of a drawable. |
367 + | */ |
368 + | GLboolean (* getDrawableInfo) ( __DRIdrawable *drawable, |
369 + | unsigned int * index, unsigned int * stamp, |
370 + | int * x, int * y, int * width, int * height, |
371 + | int * numClipRects, drm_clip_rect_t ** pClipRects, |
372 + | int * backX, int * backY, |
373 + | int * numBackClipRects, drm_clip_rect_t ** pBackClipRects, |
374 + | void *loaderPrivate); |
375 + | }; |
376 + | |
377 + | /** |
378 + | * Callback to get system time for media stream counter extensions. |
379 + | */ |
380 + | |
381 + | |
382 + | struct __DRIsystemTimeExtensionRec { |
383 + | __DRIextension base; |
384 + | |
385 + | /** |
386 + | * Get the 64-bit unadjusted system time (UST). |
387 + | */ |
388 + | int (*getUST)(int64_t * ust); |
389 + | |
390 + | /** |
391 + | * Get the media stream counter (MSC) rate. |
392 + | * |
393 + | * Matching the definition in GLX_OML_sync_control, this function returns |
394 + | * the rate of the "media stream counter". In practical terms, this is |
395 + | * the frame refresh rate of the display. |
396 + | */ |
397 + | GLboolean (*getMSCRate)(__DRIdrawable *draw, |
398 + | int32_t * numerator, int32_t * denominator, |
399 + | void *loaderPrivate); |
400 + | }; |
401 + | |
402 + | /** |
403 + | * Damage reporting |
404 + | */ |
405 + | |
406 + | |
407 + | struct __DRIdamageExtensionRec { |
408 + | __DRIextension base; |
409 + | |
410 + | /** |
411 + | * Reports areas of the given drawable which have been modified by the |
412 + | * driver. |
413 + | * |
414 + | * \param drawable which the drawing was done to. |
415 + | * \param rects rectangles affected, with the drawable origin as the |
416 + | * origin. |
417 + | * \param x X offset of the drawable within the screen (used in the |
418 + | * front_buffer case) |
419 + | * \param y Y offset of the drawable within the screen. |
420 + | * \param front_buffer boolean flag for whether the drawing to the |
421 + | * drawable was actually done directly to the front buffer (instead |
422 + | * of backing storage, for example) |
423 + | * \param loaderPrivate the data passed in at createNewDrawable time |
424 + | */ |
425 + | void (*reportDamage)(__DRIdrawable *draw, |
426 + | int x, int y, |
427 + | drm_clip_rect_t *rects, int num_rects, |
428 + | GLboolean front_buffer, |
429 + | void *loaderPrivate); |
430 + | }; |
431 + | |
432 + | |
433 + | |
434 + | |
435 + | |
436 + | /** |
437 + | * SWRast Loader extension. |
438 + | */ |
439 + | |
440 + | |
441 + | struct __DRIswrastLoaderExtensionRec { |
442 + | __DRIextension base; |
443 + | |
444 + | /* |
445 + | * Drawable position and size |
446 + | */ |
447 + | void (*getDrawableInfo)(__DRIdrawable *drawable, |
448 + | int *x, int *y, int *width, int *height, |
449 + | void *loaderPrivate); |
450 + | |
451 + | /** |
452 + | * Put image to drawable |
453 + | */ |
454 + | void (*putImage)(__DRIdrawable *drawable, int op, |
455 + | int x, int y, int width, int height, |
456 + | char *data, void *loaderPrivate); |
457 + | |
458 + | /** |
459 + | * Get image from readable |
460 + | */ |
461 + | void (*getImage)(__DRIdrawable *readable, |
462 + | int x, int y, int width, int height, |
463 + | char *data, void *loaderPrivate); |
464 + | }; |
465 + | |
466 + | /** |
467 + | * Invalidate loader extension. The presence of this extension |
468 + | * indicates to the DRI driver that the loader will call invalidate in |
469 + | * the __DRI2_FLUSH extension, whenever the needs to query for new |
470 + | * buffers. This means that the DRI driver can drop the polling in |
471 + | * glViewport(). |
472 + | * |
473 + | * The extension doesn't provide any functionality, it's only use to |
474 + | * indicate to the driver that it can use the new semantics. A DRI |
475 + | * driver can use this to switch between the different semantics or |
476 + | * just refuse to initialize if this extension isn't present. |
477 + | */ |
478 + | |
479 + | |
480 + | |
481 + | typedef struct __DRIuseInvalidateExtensionRec __DRIuseInvalidateExtension; |
482 + | struct __DRIuseInvalidateExtensionRec { |
483 + | __DRIextension base; |
484 + | }; |
485 + | |
486 + | /** |
487 + | * The remaining extensions describe driver extensions, immediately |
488 + | * available interfaces provided by the driver. To start using the |
489 + | * driver, dlsym() for the __DRI_DRIVER_EXTENSIONS symbol and look for |
490 + | * the extension you need in the array. |
491 + | */ |
492 + | |
493 + | |
494 + | /** |
495 + | * This symbol replaces the __DRI_DRIVER_EXTENSIONS symbol, and will be |
496 + | * suffixed by "_drivername", allowing multiple drivers to be built into one |
497 + | * library, and also giving the driver the chance to return a variable driver |
498 + | * extensions struct depending on the driver name being loaded or any other |
499 + | * system state. |
500 + | * |
501 + | * The function prototype is: |
502 + | * |
503 + | * const __DRIextension **__driDriverGetExtensions_drivername(void); |
504 + | */ |
505 + | |
506 + | |
507 + | /** |
508 + | * Tokens for __DRIconfig attribs. A number of attributes defined by |
509 + | * GLX or EGL standards are not in the table, as they must be provided |
510 + | * by the loader. For example, FBConfig ID or visual ID, drawable type. |
511 + | */ |
512 + | |
513 + | |
514 + | |
515 + | |
516 + | |
517 + | |
518 + | |
519 + | |
520 + | |
521 + | |
522 + | |
523 + | |
524 + | |
525 + | |
526 + | |
527 + | |
528 + | |
529 + | |
530 + | |
531 + | |
532 + | |
533 + | |
534 + | |
535 + | |
536 + | |
537 + | |
538 + | |
539 + | |
540 + | |
541 + | |
542 + | |
543 + | |
544 + | |
545 + | |
546 + | |
547 + | |
548 + | |
549 + | |
550 + | |
551 + | |
552 + | |
553 + | |
554 + | |
555 + | |
556 + | |
557 + | |
558 + | |
559 + | |
560 + | |
561 + | |
562 + | /* __DRI_ATTRIB_RENDER_TYPE */ |
563 + | |
564 + | |
565 + | |
566 + | |
567 + | |
568 + | |
569 + | /* __DRI_ATTRIB_CONFIG_CAVEAT */ |
570 + | |
571 + | |
572 + | |
573 + | /* __DRI_ATTRIB_TRANSPARENT_TYPE */ |
574 + | |
575 + | |
576 + | |
577 + | /* __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS */ |
578 + | |
579 + | |
580 + | |
581 + | |
582 + | /** |
583 + | * This extension defines the core DRI functionality. |
584 + | */ |
585 + | |
586 + | |
587 + | |
588 + | struct __DRIcoreExtensionRec { |
589 + | __DRIextension base; |
590 + | |
591 + | __DRIscreen *(*createNewScreen)(int screen, int fd, |
592 + | unsigned int sarea_handle, |
593 + | const __DRIextension **extensions, |
594 + | const __DRIconfig ***driverConfigs, |
595 + | void *loaderPrivate); |
596 + | |
597 + | void (*destroyScreen)(__DRIscreen *screen); |
598 + | |
599 + | const __DRIextension **(*getExtensions)(__DRIscreen *screen); |
600 + | |
601 + | int (*getConfigAttrib)(const __DRIconfig *config, |
602 + | unsigned int attrib, |
603 + | unsigned int *value); |
604 + | |
605 + | int (*indexConfigAttrib)(const __DRIconfig *config, int index, |
606 + | unsigned int *attrib, unsigned int *value); |
607 + | |
608 + | __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, |
609 + | const __DRIconfig *config, |
610 + | unsigned int drawable_id, |
611 + | unsigned int head, |
612 + | void *loaderPrivate); |
613 + | |
614 + | void (*destroyDrawable)(__DRIdrawable *drawable); |
615 + | |
616 + | void (*swapBuffers)(__DRIdrawable *drawable); |
617 + | |
618 + | __DRIcontext *(*createNewContext)(__DRIscreen *screen, |
619 + | const __DRIconfig *config, |
620 + | __DRIcontext *shared, |
621 + | void *loaderPrivate); |
622 + | |
623 + | int (*copyContext)(__DRIcontext *dest, |
624 + | __DRIcontext *src, |
625 + | unsigned long mask); |
626 + | |
627 + | void (*destroyContext)(__DRIcontext *context); |
628 + | |
629 + | int (*bindContext)(__DRIcontext *ctx, |
630 + | __DRIdrawable *pdraw, |
631 + | __DRIdrawable *pread); |
632 + | |
633 + | int (*unbindContext)(__DRIcontext *ctx); |
634 + | }; |
635 + | |
636 + | /** |
637 + | * Stored version of some component (i.e., server-side DRI module, kernel-side |
638 + | * DRM, etc.). |
639 + | * |
640 + | * \todo |
641 + | * There are several data structures that explicitly store a major version, |
642 + | * minor version, and patch level. These structures should be modified to |
643 + | * have a \c __DRIversionRec instead. |
644 + | */ |
645 + | struct __DRIversionRec { |
646 + | int major; /**< Major version number. */ |
647 + | int minor; /**< Minor version number. */ |
648 + | int patch; /**< Patch-level. */ |
649 + | }; |
650 + | |
651 + | /** |
652 + | * Framebuffer information record. Used by libGL to communicate information |
653 + | * about the framebuffer to the driver's \c __driCreateNewScreen function. |
654 + | * |
655 + | * In XFree86, most of this information is derrived from data returned by |
656 + | * calling \c XF86DRIGetDeviceInfo. |
657 + | * |
658 + | * \sa XF86DRIGetDeviceInfo __DRIdisplayRec::createNewScreen |
659 + | * __driUtilCreateNewScreen CallCreateNewScreen |
660 + | * |
661 + | * \bug This structure could be better named. |
662 + | */ |
663 + | struct __DRIframebufferRec { |
664 + | unsigned char *base; /**< Framebuffer base address in the CPU's |
665 + | * address space. This value is calculated by |
666 + | * calling \c drmMap on the framebuffer handle |
667 + | * returned by \c XF86DRIGetDeviceInfo (or a |
668 + | * similar function). |
669 + | */ |
670 + | int size; /**< Framebuffer size, in bytes. */ |
671 + | int stride; /**< Number of bytes from one line to the next. */ |
672 + | int width; /**< Pixel width of the framebuffer. */ |
673 + | int height; /**< Pixel height of the framebuffer. */ |
674 + | int dev_priv_size; /**< Size of the driver's dev-priv structure. */ |
675 + | void *dev_priv; /**< Pointer to the driver's dev-priv structure. */ |
676 + | }; |
677 + | |
678 + | |
679 + | /** |
680 + | * This extension provides alternative screen, drawable and context |
681 + | * constructors for legacy DRI functionality. This is used in |
682 + | * conjunction with the core extension. |
683 + | */ |
684 + | |
685 + | |
686 + | |
687 + | struct __DRIlegacyExtensionRec { |
688 + | __DRIextension base; |
689 + | |
690 + | __DRIscreen *(*createNewScreen)(int screen, |
691 + | const __DRIversion *ddx_version, |
692 + | const __DRIversion *dri_version, |
693 + | const __DRIversion *drm_version, |
694 + | const __DRIframebuffer *frame_buffer, |
695 + | void *pSAREA, int fd, |
696 + | const __DRIextension **extensions, |
697 + | const __DRIconfig ***driver_configs, |
698 + | void *loaderPrivate); |
699 + | |
700 + | __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, |
701 + | const __DRIconfig *config, |
702 + | drm_drawable_t hwDrawable, |
703 + | int renderType, const int *attrs, |
704 + | void *loaderPrivate); |
705 + | |
706 + | __DRIcontext *(*createNewContext)(__DRIscreen *screen, |
707 + | const __DRIconfig *config, |
708 + | int render_type, |
709 + | __DRIcontext *shared, |
710 + | drm_context_t hwContext, |
711 + | void *loaderPrivate); |
712 + | }; |
713 + | |
714 + | /** |
715 + | * This extension provides alternative screen, drawable and context |
716 + | * constructors for swrast DRI functionality. This is used in |
717 + | * conjunction with the core extension. |
718 + | */ |
719 + | |
720 + | |
721 + | |
722 + | struct __DRIswrastExtensionRec { |
723 + | __DRIextension base; |
724 + | |
725 + | __DRIscreen *(*createNewScreen)(int screen, |
726 + | const __DRIextension **extensions, |
727 + | const __DRIconfig ***driver_configs, |
728 + | void *loaderPrivate); |
729 + | |
730 + | __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, |
731 + | const __DRIconfig *config, |
732 + | void *loaderPrivate); |
733 + | |
734 + | /* Since version 2 */ |
735 + | __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen, |
736 + | int api, |
737 + | const __DRIconfig *config, |
738 + | __DRIcontext *shared, |
739 + | void *data); |
740 + | |
741 + | /** |
742 + | * Create a context for a particular API with a set of attributes |
743 + | * |
744 + | * \since version 3 |
745 + | * |
746 + | * \sa __DRIdri2ExtensionRec::createContextAttribs |
747 + | */ |
748 + | __DRIcontext *(*createContextAttribs)(__DRIscreen *screen, |
749 + | int api, |
750 + | const __DRIconfig *config, |
751 + | __DRIcontext *shared, |
752 + | unsigned num_attribs, |
753 + | const uint32_t *attribs, |
754 + | unsigned *error, |
755 + | void *loaderPrivate); |
756 + | |
757 + | /** |
758 + | * createNewScreen() with the driver extensions passed in. |
759 + | * |
760 + | * \since version 4 |
761 + | */ |
762 + | __DRIscreen *(*createNewScreen2)(int screen, |
763 + | const __DRIextension **loader_extensions, |
764 + | const __DRIextension **driver_extensions, |
765 + | const __DRIconfig ***driver_configs, |
766 + | void *loaderPrivate); |
767 + | |
768 + | }; |
769 + | |
770 + | /** Common DRI function definitions, shared among DRI2 and Image extensions |
771 + | */ |
772 + | |
773 + | typedef __DRIscreen * |
774 + | (*__DRIcreateNewScreen2Func)(int screen, int fd, |
775 + | const __DRIextension **extensions, |
776 + | const __DRIextension **driver_extensions, |
777 + | const __DRIconfig ***driver_configs, |
778 + | void *loaderPrivate); |
779 + | |
780 + | typedef __DRIdrawable * |
781 + | (*__DRIcreateNewDrawableFunc)(__DRIscreen *screen, |
782 + | const __DRIconfig *config, |
783 + | void *loaderPrivate); |
784 + | |
785 + | typedef __DRIcontext * |
786 + | (*__DRIcreateContextAttribsFunc)(__DRIscreen *screen, |
787 + | int api, |
788 + | const __DRIconfig *config, |
789 + | __DRIcontext *shared, |
790 + | unsigned num_attribs, |
791 + | const uint32_t *attribs, |
792 + | unsigned *error, |
793 + | void *loaderPrivate); |
794 + | |
795 + | typedef unsigned int |
796 + | (*__DRIgetAPIMaskFunc)(__DRIscreen *screen); |
797 + | |
798 + | /** |
799 + | * DRI2 Loader extension. |
800 + | */ |
801 + | |
802 + | |
803 + | |
804 + | |
805 + | |
806 + | |
807 + | |
808 + | |
809 + | |
810 + | /**< Only available with DRI2 1.1 */ |
811 + | |
812 + | |
813 + | /* Inofficial and for internal use. Increase when adding a new buffer token. */ |
814 + | |
815 + | |
816 + | struct __DRIbufferRec { |
817 + | unsigned int attachment; |
818 + | unsigned int name; |
819 + | unsigned int pitch; |
820 + | unsigned int cpp; |
821 + | unsigned int flags; |
822 + | }; |
823 + | |
824 + | |
825 + | |
826 + | struct __DRIdri2LoaderExtensionRec { |
827 + | __DRIextension base; |
828 + | |
829 + | __DRIbuffer *(*getBuffers)(__DRIdrawable *driDrawable, |
830 + | int *width, int *height, |
831 + | unsigned int *attachments, int count, |
832 + | int *out_count, void *loaderPrivate); |
833 + | |
834 + | /** |
835 + | * Flush pending front-buffer rendering |
836 + | * |
837 + | * Any rendering that has been performed to the |
838 + | * \c __DRI_BUFFER_FAKE_FRONT_LEFT will be flushed to the |
839 + | * \c __DRI_BUFFER_FRONT_LEFT. |
840 + | * |
841 + | * \param driDrawable Drawable whose front-buffer is to be flushed |
842 + | * \param loaderPrivate Loader's private data that was previously passed |
843 + | * into __DRIdri2ExtensionRec::createNewDrawable |
844 + | */ |
845 + | void (*flushFrontBuffer)(__DRIdrawable *driDrawable, void *loaderPrivate); |
846 + | |
847 + | |
848 + | /** |
849 + | * Get list of buffers from the server |
850 + | * |
851 + | * Gets a list of buffer for the specified set of attachments. Unlike |
852 + | * \c ::getBuffers, this function takes a list of attachments paired with |
853 + | * opaque \c unsigned \c int value describing the format of the buffer. |
854 + | * It is the responsibility of the caller to know what the service that |
855 + | * allocates the buffers will expect to receive for the format. |
856 + | * |
857 + | * \param driDrawable Drawable whose buffers are being queried. |
858 + | * \param width Output where the width of the buffers is stored. |
859 + | * \param height Output where the height of the buffers is stored. |
860 + | * \param attachments List of pairs of attachment ID and opaque format |
861 + | * requested for the drawable. |
862 + | * \param count Number of attachment / format pairs stored in |
863 + | * \c attachments. |
864 + | * \param loaderPrivate Loader's private data that was previously passed |
865 + | * into __DRIdri2ExtensionRec::createNewDrawable. |
866 + | */ |
867 + | __DRIbuffer *(*getBuffersWithFormat)(__DRIdrawable *driDrawable, |
868 + | int *width, int *height, |
869 + | unsigned int *attachments, int count, |
870 + | int *out_count, void *loaderPrivate); |
871 + | }; |
872 + | |
873 + | /** |
874 + | * This extension provides alternative screen, drawable and context |
875 + | * constructors for DRI2. |
876 + | */ |
877 + | |
878 + | |
879 + | |
880 + | /**< OpenGL compatibility profile */ |
881 + | /**< OpenGL ES 1.x */ |
882 + | /**< OpenGL ES 2.x */ |
883 + | /**< OpenGL 3.2+ core profile */ |
884 + | /**< OpenGL ES 3.x */ |
885 + | |
886 + | |
887 + | |
888 + | |
889 + | |
890 + | /** |
891 + | * \requires __DRI2_ROBUSTNESS. |
892 + | */ |
893 + | |
894 + | |
895 + | |
896 + | |
897 + | |
898 + | /** |
899 + | * \requires __DRI2_ROBUSTNESS. |
900 + | */ |
901 + | |
902 + | |
903 + | /** |
904 + | * \name Context reset strategies. |
905 + | */ |
906 + | /*@{*/ |
907 + | |
908 + | |
909 + | /*@}*/ |
910 + | |
911 + | /** |
912 + | * \name Reasons that __DRIdri2Extension::createContextAttribs might fail |
913 + | */ |
914 + | /*@{*/ |
915 + | /** Success! */ |
916 + | |
917 + | |
918 + | /** Memory allocation failure */ |
919 + | |
920 + | |
921 + | /** Client requested an API (e.g., OpenGL ES 2.0) that the driver can't do. */ |
922 + | |
923 + | |
924 + | /** Client requested an API version that the driver can't do. */ |
925 + | |
926 + | |
927 + | /** Client requested a flag or combination of flags the driver can't do. */ |
928 + | |
929 + | |
930 + | /** Client requested an attribute the driver doesn't understand. */ |
931 + | |
932 + | |
933 + | /** Client requested a flag the driver doesn't understand. */ |
934 + | |
935 + | /*@}*/ |
936 + | |
937 + | struct __DRIdri2ExtensionRec { |
938 + | __DRIextension base; |
939 + | |
940 + | __DRIscreen *(*createNewScreen)(int screen, int fd, |
941 + | const __DRIextension **extensions, |
942 + | const __DRIconfig ***driver_configs, |
943 + | void *loaderPrivate); |
944 + | |
945 + | __DRIcreateNewDrawableFunc createNewDrawable; |
946 + | __DRIcontext *(*createNewContext)(__DRIscreen *screen, |
947 + | const __DRIconfig *config, |
948 + | __DRIcontext *shared, |
949 + | void *loaderPrivate); |
950 + | |
951 + | /* Since version 2 */ |
952 + | __DRIgetAPIMaskFunc getAPIMask; |
953 + | |
954 + | __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen, |
955 + | int api, |
956 + | const __DRIconfig *config, |
957 + | __DRIcontext *shared, |
958 + | void *data); |
959 + | |
960 + | __DRIbuffer *(*allocateBuffer)(__DRIscreen *screen, |
961 + | unsigned int attachment, |
962 + | unsigned int format, |
963 + | int width, |
964 + | int height); |
965 + | void (*releaseBuffer)(__DRIscreen *screen, |
966 + | __DRIbuffer *buffer); |
967 + | |
968 + | /** |
969 + | * Create a context for a particular API with a set of attributes |
970 + | * |
971 + | * \since version 3 |
972 + | * |
973 + | * \sa __DRIswrastExtensionRec::createContextAttribs |
974 + | */ |
975 + | __DRIcreateContextAttribsFunc createContextAttribs; |
976 + | |
977 + | /** |
978 + | * createNewScreen with the driver's extension list passed in. |
979 + | * |
980 + | * \since version 4 |
981 + | */ |
982 + | __DRIcreateNewScreen2Func createNewScreen2; |
983 + | }; |
984 + | |
985 + | |
986 + | /** |
987 + | * This extension provides functionality to enable various EGLImage |
988 + | * extensions. |
989 + | */ |
990 + | |
991 + | |
992 + | |
993 + | /** |
994 + | * These formats correspond to the similarly named MESA_FORMAT_* |
995 + | * tokens, except in the native endian of the CPU. For example, on |
996 + | * little endian __DRI_IMAGE_FORMAT_XRGB8888 corresponds to |
997 + | * MESA_FORMAT_XRGB8888, but MESA_FORMAT_XRGB8888_REV on big endian. |
998 + | * |
999 + | * __DRI_IMAGE_FORMAT_NONE is for images that aren't directly usable |
1000 + | * by the driver (YUV planar formats) but serve as a base image for |
1001 + | * creating sub-images for the different planes within the image. |
1002 + | * |
1003 + | * R8, GR88 and NONE should not be used with createImageFormName or |
1004 + | * createImage, and are returned by query from sub images created with |
1005 + | * createImageFromNames (NONE, see above) and fromPlane (R8 & GR88). |
1006 + | */ |
1007 + | |
1008 + | |
1009 + | |
1010 + | |
1011 + | |
1012 + | /* Since version 5 */ |
1013 + | |
1014 + | |
1015 + | |
1016 + | |
1017 + | |
1018 + | |
1019 + | |
1020 + | |
1021 + | /* Depricated */ |
1022 + | |
1023 + | |
1024 + | |
1025 + | /** |
1026 + | * Four CC formats that matches with WL_DRM_FORMAT_* from wayland_drm.h |
1027 + | * and GBM_FORMAT_* from gbm.h, used with createImageFromNames. |
1028 + | * |
1029 + | * \since 5 |
1030 + | */ |
1031 + | |
1032 + | |
1033 + | |
1034 + | |
1035 + | |
1036 + | |
1037 + | |
1038 + | |
1039 + | |
1040 + | |
1041 + | |
1042 + | |
1043 + | |
1044 + | |
1045 + | |
1046 + | |
1047 + | /** |
1048 + | * Queryable on images created by createImageFromNames. |
1049 + | * |
1050 + | * RGB and RGBA are may be usable directly as images but its still |
1051 + | * recommended to call fromPlanar with plane == 0. |
1052 + | * |
1053 + | * Y_U_V, Y_UV and Y_XUXV all requires call to fromPlanar to create |
1054 + | * usable sub-images, sampling from images return raw YUV data and |
1055 + | * color conversion needs to be done in the shader. |
1056 + | * |
1057 + | * \since 5 |
1058 + | */ |
1059 + | |
1060 + | |
1061 + | |
1062 + | |
1063 + | |
1064 + | |
1065 + | |
1066 + | |
1067 + | /** |
1068 + | * queryImage attributes |
1069 + | */ |
1070 + | |
1071 + | |
1072 + | |
1073 + | |
1074 + | /* available in versions 3+ */ |
1075 + | /* available in versions 4+ */ |
1076 + | |
1077 + | /* available in versions 5+ */ |
1078 + | /* available in versions |
1079 + | * 7+. Each query will return a |
1080 + | * new fd. */ |
1081 + | |
1082 + | enum __DRIYUVColorSpace { |
1083 + | __DRI_YUV_COLOR_SPACE_UNDEFINED = 0, |
1084 + | __DRI_YUV_COLOR_SPACE_ITU_REC601 = 0x327F, |
1085 + | __DRI_YUV_COLOR_SPACE_ITU_REC709 = 0x3280, |
1086 + | __DRI_YUV_COLOR_SPACE_ITU_REC2020 = 0x3281 |
1087 + | }; |
1088 + | |
1089 + | enum __DRISampleRange { |
1090 + | __DRI_YUV_RANGE_UNDEFINED = 0, |
1091 + | __DRI_YUV_FULL_RANGE = 0x3282, |
1092 + | __DRI_YUV_NARROW_RANGE = 0x3283 |
1093 + | }; |
1094 + | |
1095 + | enum __DRIChromaSiting { |
1096 + | __DRI_YUV_CHROMA_SITING_UNDEFINED = 0, |
1097 + | __DRI_YUV_CHROMA_SITING_0 = 0x3284, |
1098 + | __DRI_YUV_CHROMA_SITING_0_5 = 0x3285 |
1099 + | }; |
1100 + | |
1101 + | /** |
1102 + | * \name Reasons that __DRIimageExtensionRec::createImageFromTexture might fail |
1103 + | */ |
1104 + | /*@{*/ |
1105 + | /** Success! */ |
1106 + | |
1107 + | |
1108 + | /** Memory allocation failure */ |
1109 + | |
1110 + | |
1111 + | /** Client requested an invalid attribute for a texture object */ |
1112 + | |
1113 + | |
1114 + | /** Client requested an invalid texture object */ |
1115 + | |
1116 + | /*@}*/ |
1117 + | |
1118 + | typedef struct __DRIimageRec __DRIimage; |
1119 + | typedef struct __DRIimageExtensionRec __DRIimageExtension; |
1120 + | struct __DRIimageExtensionRec { |
1121 + | __DRIextension base; |
1122 + | |
1123 + | __DRIimage *(*createImageFromName)(__DRIscreen *screen, |
1124 + | int width, int height, int format, |
1125 + | int name, int pitch, |
1126 + | void *loaderPrivate); |
1127 + | |
1128 + | __DRIimage *(*createImageFromRenderbuffer)(__DRIcontext *context, |
1129 + | int renderbuffer, |
1130 + | void *loaderPrivate); |
1131 + | |
1132 + | void (*destroyImage)(__DRIimage *image); |
1133 + | |
1134 + | __DRIimage *(*createImage)(__DRIscreen *screen, |
1135 + | int width, int height, int format, |
1136 + | unsigned int use, |
1137 + | void *loaderPrivate); |
1138 + | |
1139 + | GLboolean (*queryImage)(__DRIimage *image, int attrib, int *value); |
1140 + | |
1141 + | /** |
1142 + | * The new __DRIimage will share the content with the old one, see dup(2). |
1143 + | */ |
1144 + | __DRIimage *(*dupImage)(__DRIimage *image, void *loaderPrivate); |
1145 + | |
1146 + | /** |
1147 + | * Validate that a __DRIimage can be used a certain way. |
1148 + | * |
1149 + | * \since 2 |
1150 + | */ |
1151 + | GLboolean (*validateUsage)(__DRIimage *image, unsigned int use); |
1152 + | |
1153 + | /** |
1154 + | * Unlike createImageFromName __DRI_IMAGE_FORMAT is not but instead |
1155 + | * __DRI_IMAGE_FOURCC and strides are in bytes not pixels. Stride is |
1156 + | * also per block and not per pixel (for non-RGB, see gallium blocks). |
1157 + | * |
1158 + | * \since 5 |
1159 + | */ |
1160 + | __DRIimage *(*createImageFromNames)(__DRIscreen *screen, |
1161 + | int width, int height, int fourcc, |
1162 + | int *names, int num_names, |
1163 + | int *strides, int *offsets, |
1164 + | void *loaderPrivate); |
1165 + | |
1166 + | /** |
1167 + | * Create an image out of a sub-region of a parent image. This |
1168 + | * entry point lets us create individual __DRIimages for different |
1169 + | * planes in a planar buffer (typically yuv), for example. While a |
1170 + | * sub-image shares the underlying buffer object with the parent |
1171 + | * image and other sibling sub-images, the life times of parent and |
1172 + | * sub-images are not dependent. Destroying the parent or a |
1173 + | * sub-image doesn't affect other images. The underlying buffer |
1174 + | * object is free when no __DRIimage remains that references it. |
1175 + | * |
1176 + | * Sub-images may overlap, but rendering to overlapping sub-images |
1177 + | * is undefined. |
1178 + | * |
1179 + | * \since 5 |
1180 + | */ |
1181 + | __DRIimage *(*fromPlanar)(__DRIimage *image, int plane, |
1182 + | void *loaderPrivate); |
1183 + | |
1184 + | /** |
1185 + | * Create image from texture. |
1186 + | * |
1187 + | * \since 6 |
1188 + | */ |
1189 + | __DRIimage *(*createImageFromTexture)(__DRIcontext *context, |
1190 + | int target, |
1191 + | unsigned texture, |
1192 + | int depth, |
1193 + | int level, |
1194 + | unsigned *error, |
1195 + | void *loaderPrivate); |
1196 + | /** |
1197 + | * Like createImageFromNames, but takes a prime fd instead. |
1198 + | * |
1199 + | * \since 7 |
1200 + | */ |
1201 + | __DRIimage *(*createImageFromFds)(__DRIscreen *screen, |
1202 + | int width, int height, int fourcc, |
1203 + | int *fds, int num_fds, |
1204 + | int *strides, int *offsets, |
1205 + | void *loaderPrivate); |
1206 + | |
1207 + | /** |
1208 + | * Like createImageFromFds, but takes additional attributes. |
1209 + | * |
1210 + | * For EGL_EXT_image_dma_buf_import. |
1211 + | * |
1212 + | * \since 8 |
1213 + | */ |
1214 + | __DRIimage *(*createImageFromDmaBufs)(__DRIscreen *screen, |
1215 + | int width, int height, int fourcc, |
1216 + | int *fds, int num_fds, |
1217 + | int *strides, int *offsets, |
1218 + | enum __DRIYUVColorSpace color_space, |
1219 + | enum __DRISampleRange sample_range, |
1220 + | enum __DRIChromaSiting horiz_siting, |
1221 + | enum __DRIChromaSiting vert_siting, |
1222 + | unsigned *error, |
1223 + | void *loaderPrivate); |
1224 + | }; |
1225 + | |
1226 + | |
1227 + | /** |
1228 + | * This extension must be implemented by the loader and passed to the |
1229 + | * driver at screen creation time. The EGLImage entry points in the |
1230 + | * various client APIs take opaque EGLImage handles and use this |
1231 + | * extension to map them to a __DRIimage. At version 1, this |
1232 + | * extensions allows mapping EGLImage pointers to __DRIimage pointers, |
1233 + | * but future versions could support other EGLImage-like, opaque types |
1234 + | * with new lookup functions. |
1235 + | */ |
1236 + | |
1237 + | |
1238 + | |
1239 + | typedef struct __DRIimageLookupExtensionRec __DRIimageLookupExtension; |
1240 + | struct __DRIimageLookupExtensionRec { |
1241 + | __DRIextension base; |
1242 + | |
1243 + | __DRIimage *(*lookupEGLImage)(__DRIscreen *screen, void *image, |
1244 + | void *loaderPrivate); |
1245 + | }; |
1246 + | |
1247 + | /** |
1248 + | * This extension allows for common DRI2 options |
1249 + | */ |
1250 + | |
1251 + | |
1252 + | |
1253 + | typedef struct __DRI2configQueryExtensionRec __DRI2configQueryExtension; |
1254 + | struct __DRI2configQueryExtensionRec { |
1255 + | __DRIextension base; |
1256 + | |
1257 + | int (*configQueryb)(__DRIscreen *screen, const char *var, GLboolean *val); |
1258 + | int (*configQueryi)(__DRIscreen *screen, const char *var, GLint *val); |
1259 + | int (*configQueryf)(__DRIscreen *screen, const char *var, GLfloat *val); |
1260 + | }; |
1261 + | |
1262 + | /** |
1263 + | * Robust context driver extension. |
1264 + | * |
1265 + | * Existence of this extension means the driver can accept the |
1266 + | * \c __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS flag and the |
1267 + | * \c __DRI_CTX_ATTRIB_RESET_STRATEGY attribute in |
1268 + | * \c __DRIdri2ExtensionRec::createContextAttribs. |
1269 + | */ |
1270 + | |
1271 + | |
1272 + | |
1273 + | typedef struct __DRIrobustnessExtensionRec __DRIrobustnessExtension; |
1274 + | struct __DRIrobustnessExtensionRec { |
1275 + | __DRIextension base; |
1276 + | }; |
1277 + | |
1278 + | /** |
1279 + | * DRI config options extension. |
1280 + | * |
1281 + | * This extension provides the XML string containing driver options for use by |
1282 + | * the loader in supporting the driconf application. |
1283 + | */ |
1284 + | |
1285 + | |
1286 + | |
1287 + | typedef struct __DRIconfigOptionsExtensionRec { |
1288 + | __DRIextension base; |
1289 + | const char *xml; |
1290 + | } __DRIconfigOptionsExtension; |
1291 + | |
1292 + | /** |
1293 + | * This extension provides a driver vtable to a set of common driver helper |
1294 + | * functions (driCoreExtension, driDRI2Extension) within the driver |
1295 + | * implementation, as opposed to having to pass them through a global |
1296 + | * variable. |
1297 + | * |
1298 + | * It is not intended to be public API to the actual loader, and the vtable |
1299 + | * layout may change at any time. |
1300 + | */ |
1301 + | |
1302 + | |
1303 + | |
1304 + | typedef struct __DRIDriverVtableExtensionRec { |
1305 + | __DRIextension base; |
1306 + | const struct __DriverAPIRec *vtable; |
1307 + | } __DRIDriverVtableExtension; |
1308 + | |
1309 + | /** |
1310 + | * Query renderer driver extension |
1311 + | * |
1312 + | * This allows the window system layer (either EGL or GLX) to query aspects of |
1313 + | * hardware and driver support without creating a context. |
1314 + | */ |
1315 + | |
1316 + | |
1317 + | |
1318 + | |
1319 + | |
1320 + | |
1321 + | |
1322 + | |
1323 + | |
1324 + | |
1325 + | |
1326 + | |
1327 + | |
1328 + | |
1329 + | |
1330 + | typedef struct __DRI2rendererQueryExtensionRec __DRI2rendererQueryExtension; |
1331 + | struct __DRI2rendererQueryExtensionRec { |
1332 + | __DRIextension base; |
1333 + | |
1334 + | int (*queryInteger)(__DRIscreen *screen, int attribute, unsigned int *val); |
1335 + | int (*queryString)(__DRIscreen *screen, int attribute, const char **val); |
1336 + | }; |
1337 + | |
1338 + | /** |
1339 + | * Image Loader extension. Drivers use this to allocate color buffers |
1340 + | */ |
1341 + | |
1342 + | enum __DRIimageBufferMask { |
1343 + | __DRI_IMAGE_BUFFER_BACK = (1 << 0), |
1344 + | __DRI_IMAGE_BUFFER_FRONT = (1 << 1) |
1345 + | }; |
1346 + | |
1347 + | struct __DRIimageList { |
1348 + | uint32_t image_mask; |
1349 + | __DRIimage *back; |
1350 + | __DRIimage *front; |
1351 + | }; |
1352 + | |
1353 + | |
1354 + | |
1355 + | |
1356 + | struct __DRIimageLoaderExtensionRec { |
1357 + | __DRIextension base; |
1358 + | |
1359 + | /** |
1360 + | * Allocate color buffers. |
1361 + | * |
1362 + | * \param driDrawable |
1363 + | * \param width Width of allocated buffers |
1364 + | * \param height Height of allocated buffers |
1365 + | * \param format one of __DRI_IMAGE_FORMAT_* |
1366 + | * \param stamp Address of variable to be updated when |
1367 + | * getBuffers must be called again |
1368 + | * \param loaderPrivate The loaderPrivate for driDrawable |
1369 + | * \param buffer_mask Set of buffers to allocate |
1370 + | * \param buffers Returned buffers |
1371 + | */ |
1372 + | int (*getBuffers)(__DRIdrawable *driDrawable, |
1373 + | unsigned int format, |
1374 + | uint32_t *stamp, |
1375 + | void *loaderPrivate, |
1376 + | uint32_t buffer_mask, |
1377 + | struct __DRIimageList *buffers); |
1378 + | |
1379 + | /** |
1380 + | * Flush pending front-buffer rendering |
1381 + | * |
1382 + | * Any rendering that has been performed to the |
1383 + | * fake front will be flushed to the front |
1384 + | * |
1385 + | * \param driDrawable Drawable whose front-buffer is to be flushed |
1386 + | * \param loaderPrivate Loader's private data that was previously passed |
1387 + | * into __DRIdri2ExtensionRec::createNewDrawable |
1388 + | */ |
1389 + | void (*flushFrontBuffer)(__DRIdrawable *driDrawable, void *loaderPrivate); |
1390 + | }; |
1391 + | |
1392 + | /** |
1393 + | * DRI extension. |
1394 + | */ |
1395 + | |
1396 + | |
1397 + | |
1398 + | |
1399 + | struct __DRIimageDriverExtensionRec { |
1400 + | __DRIextension base; |
1401 + | |
1402 + | /* Common DRI functions, shared with DRI2 */ |
1403 + | __DRIcreateNewScreen2Func createNewScreen2; |
1404 + | __DRIcreateNewDrawableFunc createNewDrawable; |
1405 + | __DRIcreateContextAttribsFunc createContextAttribs; |
1406 + | __DRIgetAPIMaskFunc getAPIMask; |
1407 + | }; |
1408 + | |
1409 + |