Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5564 serge 1
Name
2
 
3
    MESA_screen_surface
4
 
5
Name Strings
6
 
7
    EGL_MESA_screen_surface
8
 
9
Contact
10
 
11
    Brian Paul
12
 
13
    To discuss, join the dri-egl@lists.freedesktop.org list.
14
 
15
Status
16
 
17
    Obsolete.
18
 
19
Version
20
 
21
    11 (27 January 2006)
22
 
23
Number
24
 
25
    TBD
26
 
27
Dependencies
28
 
29
    EGL 1.0 or later.
30
 
31
Overview
32
 
33
    EGL 1.1 supports three types of drawing surfaces:
34
      * Window surfaces
35
      * Pixmap surfaces
36
      * Pbuffer surfaces
37
    This extension defines a fourth type of drawing surface:
38
      * Screen surface
39
 
40
    A screen surface is a surface for which the (front) color buffer can
41
    be directly displayed (i.e. scanned out) on a monitor (such as a flat
42
    panel or CRT).  In particular the color buffer memory will be allocated
43
    at a location in VRAM (and in a suitable format) which can be displayed
44
    by the graphics hardware.
45
 
46
    Note that the width and height of the screen surface need not exactly
47
    match the monitor's current resolution.  For example, while the monitor
48
    may be configured to to show 1024x768 pixels, the associated screen
49
    surface may be larger, such as 1200x1000.  The "screen origin" attribute
50
    will specify which region of the screen surface which is visible on the
51
    monitor.  The screen surface can be scrolled by changing this origin.
52
 
53
    This extension also defines functions for controlling the monitor's
54
    display mode (width, height, refresh rate, etc), and specifing which
55
    screen surface is to be displayed on a monitor.
56
 
57
    The new EGLModeMESA type and related functions are very similar to the
58
    EGLConfig type and related functions.  The user may get a list of
59
    supported modes for a screen and specify the mode to be used when
60
    displaying a screen surface.
61
 
62
 
63
Issues
64
 
65
    1. Should EGL_INTERLACE be a supported mode attribute?
66
 
67
       Arguments against:
68
 
69
           No, this should be provided by another extension which would
70
           also provide the mechanisms needed to play back interlaced video
71
           material correctly on hardware that supports it.
72
           This extension should prefer non-interlaced modes. [M. Danzer]
73
 
74
       Arguments for:
75
 
76
           An interlaced display can be of use without considering video
77
           material.  Being able to query whether a screen is operating in
78
           interlaced mode can be used by applications to control their
79
           drawing.  For example: avoid drawing 1-pixel-wide horizontal lines
80
           if screen is interlaced. [B. Paul]
81
 
82
       Resolution: Defer for future extension?
83
 
84
 
85
    2. Should EGL_REFRESH_RATE be a supported mode attribute?
86
 
87
       Arguments for:
88
 
89
           Yes, it's been shown that applications and/or users need to select
90
           modes by this.  [M. Danzer]
91
 
92
           Many examples have been given in which it's desirable to let the
93
           user choose from a variety of refresh rates without having to
94
           restart/reconfigure.  [B. Paul]
95
 
96
       Arguments against:
97
 
98
           TBD.
99
 
100
       Resolution: Yes.
101
 
102
 
103
    3. Exactly how should the list of modes returned by eglChooseConfigMESA
104
       be sorted?
105
 
106
       Current method is described in the text below.  Subject to change.
107
 
108
       Alternately, leave the sorting order undefined so that each
109
       implementation can return the modes in order of "most desirable"
110
       to "least desirable" which may depend on the display technology
111
       (CRT vs LCD, etc) or other factors.
112
 
113
 
114
    4. How should screen blanking be supported?  Note that a screen can be
115
       disabled or turned off by calling eglShowSurface(dpy, scrn,
116
       EGL_NO_SURFACE, EGL_NO_MODE_MESA).  But what about power-save mode?
117
 
118
       I would defer this to other extensions that depend on this one.
119
       I can imagine people wanting different semantics not just in
120
       relation to the power management API being exposed (DPMS or whatever)
121
       but also relating to what events can trigger EGL_CONTEXT_LOST.  Also
122
       I'm not sure whether power management commands are properly operations
123
       on the Display or on a screen surface. [A. Jackson]
124
 
125
 
126
    5. Should the EGL_PHYSICAL_SIZE_EGL query be kept?  The size information
127
       isn't always reliable (consider video projectors) but can still be
128
       used to determine the pixel aspect ratio.
129
 
130
       Resolution: Omit.  The EGL 1.2 specification includes queries for
131
       the display resolution and pixel aspect ratio.
132
 
133
 
134
    6. Should detailed mode timing information be exposed by this API?
135
 
136
       Probably not.  Instead, offer that information in a layered extension.
137
 
138
 
139
    7. How should the notion of a screen's "native" mode be expressed?
140
       For example, LCD panels have a native resolution and refresh rate
141
       that looks best but other sub-optimal resolutions may be supported.
142
 
143
       The mode attribute EGL_OPTIMAL_MESA will be set for modes which
144
       best match the screen.  [M. Danzer]
145
 
146
 
147
    8. Should eglQueryModeStringMESA() be included?  This function returns
148
       a human-readable string which corresponds to an EGLMode.
149
 
150
       Arguments for:
151
 
152
           A mode name such as "HDTV-720P" might mean more to users than
153
           "1280x720@60Hz" if the later were generated via code.
154
 
155
       Arguments against:
156
 
157
           There's no standard syntax for the strings.  May cause more
158
           trouble than it's worth.
159
 
160
       Postpone for future extension. [A. Jackson]
161
 
162
       Latest discussion leaning toward omitting this function.
163
 
164
 
165
    9. Should we use "Get" or "Query" for functions which return state?
166
       The EGL 1.x specification doesn't seem to be totally consistent
167
       in this regard, but "Query" is used more often.
168
 
169
       Use "Get" for mode-related queries (as for EGLConfigs) but "Query"
170
       for everything else.
171
 
172
 
173
    10. What should be the default size for screen surfaces?
174
 
175
        For Pbuffer surfaces the default width and height are zero.
176
        We'll do the same for screen surfaces.  Since there's no function
177
        to resize surfaces it's useless to have a 0x0 screen, but this isn't
178
        a situation that'll normally be encountered.
179
 
180
 
181
    11. Should there be a function for resizing a screen surface?
182
 
183
        Suppose one wants to change the screen's size in the EGL application.
184
        Also suppose there's a hardware restriction such that only one screen
185
        surface can exist at a time (either for lack of memory or because of
186
        memory layout restrictions).
187
 
188
        The basic idea is that the currently displayed screen surface must
189
        be deallocated before a new one can be created.  Perhaps a resize
190
        function would work better?
191
 
192
 
193
    12. How should sub-pixel LCD color information be made available?
194
        What about the display's gamma value?
195
 
196
        Perhaps expose as additional read-only mode attributes.
197
 
198
        Perhaps postpone for a layered extension.
199
 
200
 
201
    13. What happens if the user attempts to delete a screen surface that
202
        is currently being shown?
203
 
204
        Spec currently says that's illegal and that an error (TBD) will be
205
        generated.
206
 
207
 
208
    14. What if the physical screen size can't be determined?  Should
209
        a query of EGL_PHYSICAL_SIZE_MESA return [0,0]?
210
 
211
        Obsolete: EGL_PHYSICAL_SIZE_MESA not used.
212
 
213
 
214
    15. Suppose the device's number of RAMDACs is different from the
215
        number of output ports.  For example, a graphics card with
216
        two RAMDACs but three ports (VGA, DVI, TV).
217
 
218
        Address this in a follow-on extension. [Matthias Hopf]
219
 
220
 
221
    16. How should we deal with on-the-fly device changes?  For example,
222
        the monitor being unplugged and replaced by another with different
223
        characteristics?
224
 
225
        A HAL event could be received via DBUS in the application [J. Smirl,
226
        A. Jackson].
227
 
228
        Should there be an EGL mechanism for detecting this?  Maybe an
229
        EGL_SCREEN_LOST error (similar to EGL_CONTEXT_LOST) can be recorded
230
        when there's a screen change.  At least then the application can
231
        poll to detect this situation.
232
 
233
        Maybe leave that to a future extension.
234
 
235
        See also the EGL_SCREEN_COUNT_MESA query.
236
 
237
 
238
    17. What if pixel-accurate panning is not supported (see
239
        eglScreenPositionMESA)? [M. Danzer]
240
 
241
        Is this a common problem?  Can we ignore it for now?
242
 
243
 
244
    18. Should eglShowSurfaceMESA be renamed to eglShowScreenSurfaceMESA?
245
 
246
        Probably.
247
 
248
 
249
 
250
New Procedures and Functions
251
 
252
    EGLBoolean eglChooseModeMESA(EGLDisplay dpy, EGLScreenMESA screen,
253
                                 const EGLint *attrib_list,
254
                                 EGLModeMESA *modes, EGLint modes_size,
255
                                 EGLint *num_modes)
256
 
257
    EGLBoolean eglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen,
258
                               EGLModeMESA *modes, EGLint modes_size,
259
                               EGLint *num_modes)
260
 
261
    EGLBoolean eglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode,
262
                                    EGLint attrib, EGLint *value)
263
 
264
 
265
    EGLBoolean eglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens,
266
                                 EGLint screens_size, EGLint *num_screens)
267
 
268
    EGLSurface eglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config,
269
                                          const EGLint *attrib_list)
270
 
271
    EGLBoolean eglShowSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen,
272
                                  EGLSurface surface, EGLModeMESA mode)
273
 
274
    EGLBoolean eglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen,
275
                                     EGLint x, EGLint y)
276
 
277
 
278
    EGLBoolean eglQueryScreenMESA(EGLDisplay dpy, EGLScreenMESA screen,
279
                                  EGLint attrib, EGLint *value);
280
 
281
    EGLBoolean eglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen,
282
                                         EGLSurface *surface)
283
 
284
    EGLBoolean eglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen,
285
                                      EGLModeMESA *mode)
286
 
287
    const char *eglQueryModeStringMESA(EGLDisplay dpy, EGLMode mode);
288
 
289
 
290
New Types
291
 
292
    EGLModeMESA
293
    EGLScreenMESA
294
 
295
New Tokens
296
 
297
    New error codes:
298
 
299
    EGL_BAD_SCREEN_MESA
300
    EGL_BAD_MODE_MESA
301
 
302
    Screen-related tokens:
303
 
304
    EGL_SCREEN_COUNT_MESA
305
    EGL_SCREEN_POSITION_MESA
306
    EGL_SCREEN_BIT_MESA
307
    EGL_SCREEN_POSITION_GRANULARITY_MESA
308
 
309
    Mode-related tokens:
310
 
311
    EGL_MODE_ID_MESA
312
    EGL_REFRESH_RATE_MESA
313
    EGL_INTERLACED_MESA
314
    EGL_OPTIMAL_MESA
315
    EGL_NO_MODE_MESA
316
 
317
 
318
Additions to Chapter X of the EGL 1.1 Specification
319
 
320
    [XXX this all has to be rewritten to fit into the EGL specification
321
    and match the conventions of an EGL extension.  For now, just list
322
    all the functions with brief descriptions.]
323
 
324
 
325
    EGLBoolean eglChooseModeMESA(EGLDisplay dpy, const EGLScreenMESA screen,
326
                                 EGLint *attrib_list, EGLModeMESA *modes,
327
                                 EGLint modes_size, EGLint *num_modes)
328
 
329
    Like eglChooseConfig, returns a list of EGLModes which match the given
330
    attribute list.  This does not set the screen's current display mode.
331
    The attribute list is a list of token/value pairs terminated with
332
    EGL_NONE.  Supported attributes include:
333
 
334
        Name                   Description
335
        ---------------------  ---------------------------------------------
336
        EGL_WIDTH              Mode width (resolution)
337
        EGL_HEIGHT             Mode height (resolution)
338
        EGL_REFRESH_RATE_MESA  The mode's refresh rate, multiplied by 1000
339
        EGL_INTERLACED_MESA    1 indicates an interlaced mode, 0 otherwise
340
        EGL_OPTIMAL_MESA       Set if the most is especially optimal for the
341
                               screen (ex. for particular LCD resolutions)
342
 
343
    Any other token will generate the error EGL_BAD_ATTRIBUTE.
344
 
345
    The list of modes returned by eglChooseModeMESA will be sorted
346
    according to the following criteria.  See the discussion of table 3.3
347
    in the EGL specification for more information.
348
 
349
                                            Selection   Sort   Sort
350
        Attribute            Default        Criteria    Order  Priority
351
        -------------------- -------------- ----------- ------ --------
352
        EGL_OPTIMAL_MESA     EGL_DONT_CARE  Exact       1,0      1
353
        EGL_INTERLACED_MESA  EGL_DONT_CARE  Exact       0,1      2
354
        EGL_REFRESH_RATE     EGL_DONT_CARE  AtLeast     Larger   3
355
        EGL_WIDTH            EGL_DONT_CARE  AtLeast     Larger   4
356
        EGL_HEIGHT           EGL_DONT_CARE  AtLeast     Larger   5
357
        EGL_MODE_ID_MESA     EGL_DONT_CARE  Exact       Smaller  6
358
 
359
 
360
    EGLBoolean eglGetModesMESA(EGLDisplay dpy, EGLScreenMESA screen,
361
                               EGLModeMESA *modes, EGLint modes_size,
362
                               EGLint *num_modes)
363
 
364
    Like eglGetConfigs, returns a list of all modes supported by the
365
    given screen.  The returned modes will be sorted in the same manner
366
    as for eglChooseModeMESA().
367
 
368
 
369
 
370
    EGLBoolean eglGetModeAttribMESA(EGLDisplay dpy, EGLModeMESA mode,
371
                                    EGLint attrib, EGLint *value)
372
 
373
    Used to query mode attributes.  The following attributes are supported:
374
 
375
        Name                   Return value description
376
        ---------------------  ----------------------------------------------
377
        EGL_OPTIMAL_MESA       1 indicates an optimal mode, 0 otherwise
378
        EGL_INTERLACED_MESA    1 indicates an interlaced mode, 0 otherwise
379
        EGL_REFRESH_RATE_MESA  The mode's refresh rate, multiplied by 1000
380
        EGL_WIDTH              Mode width (resolution)
381
        EGL_HEIGHT             Mode height (resolution)
382
        EGL_MODE_ID_MESA       A unique small integer identifier for the mode
383
 
384
    Any other token will generate the error EGL_BAD_ATTRIBUTE.
385
 
386
 
387
 
388
    EGLBoolean eglGetScreensMESA(EGLDisplay dpy, EGLScreenMESA *screens,
389
                                 EGLint screens_size, EGLint *num_screens)
390
 
391
    This function returns an array of all available screen handles.
392
     is the maximum number of screens to return in the
393
     array.   will return the number of screen handles
394
    placed in the array, even if  is NULL.
395
 
396
    The number of screens and the availability of each may change over
397
    time (hot-plugging).  Screen handles will not be reused.  When a
398
    screen handle becomes invalid, function calls which reference an
399
    invalid handle will generate EGL_BAD_SCREEN_MESA.
400
 
401
    The first screen handle returned will be considered to be the primary
402
    one.
403
 
404
 
405
 
406
    EGLSurface eglCreateScreenSurfaceMESA(EGLDisplay dpy, EGLConfig config,
407
                                          const EGLint *attrib_list)
408
 
409
    Create a surface that can be displayed on a screen.   is
410
    an array of token/value pairs terminated with EGL_NONE.  Valid tokens
411
    include:
412
 
413
        Name              Description
414
        ----------------  --------------------------------
415
        EGL_WIDTH         desired surface width in pixels
416
        EGL_HEIGHT        desired surface height in pixels
417
 
418
    Any other token will generate the error EGL_BAD_ATTRIBUTE.
419
    The default width and height are zero.
420
 
421
 
422
 
423
    EGLBoolean eglShowSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen,
424
                                  EGLSurface surface, EGLModeMESA mode)
425
 
426
    This function causes a screen to show the given surface (or more
427
    precisely, the surface's front color buffer) with the given mode.
428
 
429
    If the surface is in any way incompatible with the mode, the error
430
    EGL_BAD_MATCH will be generated, EGL_FALSE will be returned, and the
431
    previous screen state will remain in effect.  This might occur when
432
    the bandwidth of the video-out subsystem is exceeded, or if the mode
433
    specifies a width or height that's greater than the width or height
434
    of the surface.
435
 
436
    To disable a screen, the values EGL_NO_SURFACE and EGL_NO_MODE_MESA
437
    be passed as the  and  parameters.
438
 
439
    The values of EGL_SCREEN_POSITION_MESA are clamped to the new valid
440
    range computed from the screen size and surface size.  If the new
441
    surface is EGL_NO_SURFACE, EGL_SCREEN_POSITION_MESA is set to [0, 0].
442
 
443
 
444
    Attempting to delete a screen surface which is currently being
445
    displayed will result in the error EGL_BAD_ACCESS being generated.
446
 
447
 
448
 
449
    EGLBoolean eglScreenPositionMESA(EGLDisplay dpy, EGLScreenMESA screen,
450
                                     EGLint x, EGLint y)
451
 
452
    Specifies the origin of the screen's view into the surface, if the
453
    surface is larger than the screen.  Valid values for x and y are
454
    [0, surfaceWidth - screenWidth] and [0, surfaceHeight - screenHeight],
455
    respectively.
456
 
457
    The x and y values are also constrained to be integer multiples of the
458
    EGL_SCREEN_POSITION_GRANULARITY_MESA values.
459
 
460
 
461
 
462
 
463
    EGLBoolean eglQueryScreenMESA(EGLDisplay dpy, EGLScreenMESA screen,
464
                                  EGLint attrib, EGLint *value);
465
 
466
    Used to query screen attributes.   may be one of the following:
467
 
468
        Name                      Return value description
469
        ------------------------  ---------------------------------------------
470
        EGL_SCREEN_POSITION_MESA  x, y position of the screen's origin with
471
                                  respect to the surface.  If no surface is
472
                                  attached to the screen, [0, 0] is returned.
473
        EGL_SCREEN_POSITION_GRANULARITY_MESA
474
                                  Returns the granularity, in pixels, for
475
                                  which the screen position is constrained.
476
 
477
    Any other token will generate the error EGL_BAD_ATTRIBUTE.
478
 
479
 
480
 
481
 
482
    EGLBoolean eglQueryScreenSurfaceMESA(EGLDisplay dpy, EGLScreenMESA screen,
483
                                         EGLSurface *surface)
484
 
485
    Returns the surface currently displayed on the given screen.  
486
    may be EGL_NO_SURFACE if the screen isn't currently showing any surface.
487
 
488
 
489
 
490
 
491
    EGLBoolean eglQueryScreenModeMESA(EGLDisplay dpy, EGLScreenMESA screen,
492
                                      EGLModeMESA *mode)
493
 
494
    Returns the given screen's current display mode.  The mode may be
495
    EGL_NO_MODE_MESA if the screen is currently disabled.
496
 
497
 
498
 
499
    const char *eglQueryModeStringMESA(EGLDisplay dpy, EGLModeMESA mode);
500
 
501
    Returns a human-readable string for the given mode.  The string is a
502
    zero-terminated C string which the user should not attempt to free.
503
    There is no standard syntax for mode strings.  Applications should
504
    not directly rely on mode strings.
505
 
506
 
507
 
508
Version History
509
 
510
    1. 15 March 2005 - BrianP
511
        Initial version
512
 
513
    2. 16 March 2005 - BrianP
514
        Removed EGL_DEPTH_MESA
515
        Added EGL_PHYSICAL_WIDTH_MESA, EGL_PHYSICAL_HEIGHT_MESA queries
516
        Added EGL_OPTIMAL_MESA for width/height/refresh rate selection
517
        Added possible eglQueryModeStringMESA() function
518
        More details of the new functions explained.
519
 
520
    3. 18 March 2005 - BrianP
521
        Added screen_number to eglChooseModeMESA().
522
        Fix off by one mistake in value range for ORIGIN attributes
523
        Added Issues section
524
 
525
    4. 21 March 2005 - BrianP
526
        Removed eglScreenAttribsMESA().
527
        Added eglScreenPositionMESA() to set screen origin.
528
        Replaced EGL_SCREEN_X/Y_OFFSET_MESA with EGL_SCREEN_POSITION_MESA.
529
        Replaced EGL_PHYSICAL_WIDTH/HEIGHT_MESA with EGL_PHYSICAL_SIZE_MESA.
530
        Use EGL_OPTIMAL_MESA as a new mode attribute. (Michel Danzer)
531
        Added a few more issues.
532
 
533
    5. 6 April 2005 - BrianP
534
        More language for eglGetModeStringMESA().
535
        Added issues 10, 11, 12, 13, 14.
536
        Updated issue 3 discussion about mode sorting.
537
 
538
    6. 22 April 2005 - BrianP
539
        Fixed "LDC" typo.
540
        Added issues 15, 16.
541
        Changed dependency on EGL 1.1 to EGL 1.0
542
        s/EGL_NUM_SCREENS_MESA/EGL_SCREEN_COUNT_MESA/
543
        Added eglQueryDisplayMESA() to New Functions section.
544
        Clarified language for the EGL_SCREEN_COUNT_MESA query.
545
 
546
    7. 29 April 2005 - BrianP
547
        Added EGLScreenMESA type and eglGetScreensMESA() function. [J. Smirl].
548
        Replaced EGLint screen_number parameters with EGLScreenMESA screen.
549
        Added issue 17 (pixel-accurate panning)
550
 
551
    8. 2 May 2005 - BrianP
552
        Removed eglQueryDisplayMESA.
553
        Fixed a few more EGLint -> EGLScreenMESA changes.
554
 
555
    9. 20 May 2005 - BrianP
556
        Fixed a few typos.
557
        Updated some open issues text.
558
 
559
    10. 10 August 2005 - BrianP
560
        Added EGL_SCREEN_POSITION_GRANULARITY_MESA.
561
 
562
    11. 27 January 2006 - BrianP
563
        EGL_PHYSICAL_SIZE_MESA removed since EGL 1.2 has a similar feature.
564