7 GLX_MESA_query_renderer
11 Ian Romanick
<ian.d.romanick@intel.com
>
19 Shipping as of Mesa
10.0
23 Version 8, 14-February
-2014
33 GLX_ARB_create_context and GLX_ARB_create_context_profile are required.
35 This extension interacts with GLX_EXT_create_context_es2_profile and
36 GLX_EXT_create_context_es_profile.
40 In many situations
, applications want to detect characteristics of a
41 rendering device before creating a context
for that device. Information
42 gathered at this stage may guide choices the application makes about
43 color depth
, number of samples per
-pixel
, texture quality
, and so on.
44 In addition
, versions of supported APIs and implementation API
45 preference may also guide start
-up decisions made by the application.
46 For example
, one implementation may prefer vertex data be supplied using
47 methods only available
in a compatibility profile
, but another
48 implementation may only support the desired version
in a core profile.
50 There are also cases where more than one renderer may be available per
51 display. For example
, there is typically a hardware implementation and
52 a software based implementation. There are cases where an application
53 may want to pick one over the other. One such situation is when the
54 software implementation supports more features than the hardware
55 implementation. Another situation is when a particular version of the
56 hardware implementation is blacklisted due to known bugs.
58 This extension provides a mechanism
for the application to query all of
59 the available renderers
for a particular display and screen. In
60 addition
, this extension provides a mechanism
for applications to create
61 contexts with respect to a specific renderer.
63 New Procedures and Functions
65 Bool glXQueryRendererIntegerMESA
(Display
*dpy
, int screen
,
66 int renderer
, int attribute
,
68 Bool glXQueryCurrentRendererIntegerMESA
(int attribute
, unsigned int
*value
);
70 const char
*glXQueryRendererStringMESA
(Display
*dpy
, int screen
,
71 int renderer
, int attribute
);
73 const char
*glXQueryCurrentRendererStringMESA
(int attribute
);
77 Accepted as an
<attribute
> in glXQueryRendererIntegerMESA and
78 glXQueryCurrentRendererIntegerMESA
:
80 GLX_RENDERER_VENDOR_ID_MESA
0x8183
81 GLX_RENDERER_DEVICE_ID_MESA
0x8184
82 GLX_RENDERER_VERSION_MESA
0x8185
83 GLX_RENDERER_ACCELERATED_MESA
0x8186
84 GLX_RENDERER_VIDEO_MEMORY_MESA
0x8187
85 GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA
0x8188
86 GLX_RENDERER_PREFERRED_PROFILE_MESA
0x8189
87 GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA
0x818A
88 GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA
0x818B
89 GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA
0x818C
90 GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA
0x818D
92 Accepted as an
<attribute
> in glXQueryRendererStringMESA and
93 glXQueryCurrentRendererStringMESA
:
95 GLX_RENDERER_VENDOR_ID_MESA
96 GLX_RENDERER_DEVICE_ID_MESA
98 Accepted as an attribute name
in <*attrib_list
> in
99 glXCreateContextAttribsARB
:
101 GLX_RENDERER_ID_MESA
0x818E
103 Additions to the OpenGL
/ WGL Specifications
105 None. This specification is written
for GLX.
107 Additions to the GLX
1.4 Specification
109 [Add the following to Section X.Y.Z of the GLX Specification
]
111 To obtain information about the available renderers
for a particular
114 Bool glXQueryRendererIntegerMESA
(Display
*dpy
, int screen
, int renderer
,
115 int attribute
, unsigned int
*value
);
117 can be used. The value
for <attribute
> will be returned
in one or more
118 integers specified by
<value
>. The values
, data sizes
, and descriptions
119 of each renderer attribute are listed
in the table below.
121 GLX renderer attribute number description
123 ---------------------- --------- -----------
124 GLX_RENDERER_VENDOR_ID_MESA
1 PCI ID of the device vendor
125 GLX_RENDERER_DEVICE_ID_MESA
1 PCI ID of the device
126 GLX_RENDERER_VERSION_MESA
3 Major
, minor
, and patch level of
127 the renderer implementation
128 GLX_RENDERER_ACCELERATED_MESA
1 Boolean indicating whether or
129 not the renderer is hardware
131 GLX_RENDERER_VIDEO_MEMORY_MESA
1 Number of megabytes of video
132 memory available to the renderer
133 GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA
134 1 Boolean indicating whether or
135 not the renderer uses a unified
136 memory architecture or has
137 separate "on
-card" and GART
139 GLX_RENDERER_PREFERRED_PROFILE_MESA
140 1 Bitmask of the preferred context
141 profile
for this renderer. This
142 value is suitable to be supplied
144 GLX_CONTEXT_PROFILE_MASK_ARB
146 glXCreateContextAttribsARB
147 GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA
148 2 Maximum core profile major and
149 minor version supported by the
151 GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA
152 2 Maximum compatibility profile
153 major and minor version
154 supported by the renderer
155 GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA
156 2 Maximum OpenGL ES
1.x
157 major and minor version
158 supported by the renderer
159 GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA
160 2 Maximum OpenGL ES
2.x or
3.x
161 major and minor version
162 supported by the renderer
164 In the table
, boolean attributes will have either the value
0 or
1.
166 GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA
,
167 GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA
,
168 GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA
, and
169 GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA each
return <0, 0> in
170 *value
if no version of that profile is supported.
172 GLX_RENDERER_VENDOR_ID_MESA and GLX_RENDERER_DEVICE_ID_MESA may
return
173 0xFFFFFFFF if the device does not have a PCI ID
(because it is not a PCI
174 device
) or
if the PCI ID is not available. In this
case the application
175 should rely on the string query instead.
177 If
<attribute
> is not a recognized value
, False is returned
, but no GLX
178 error is generated. Otherwise
, True is returned.
180 String versions of some attributes may also be queried using
182 const char
*glXQueryRendererStringMESA
(Display
*dpy
, int screen
,
183 int renderer
, int attribute
);
185 The value
for <attribute
> will be returned
in one or more
186 integers specified by
<value
>. The values
, data sizes
, and descriptions
187 of each renderer attribute are listed
in the table below.
189 GLX renderer attribute description
190 ---------------------- -----------
191 GLX_RENDERER_VENDOR_ID_MESA
Name of the renderer provider. This may
192 differ from the vendor name of the
194 GLX_RENDERER_DEVICE_ID_MESA
Name of the renderer. This may differ from
195 the name of the underlying hardware
(e.g.
,
196 for a software renderer
).
198 If
<attribute
> is not a recognized value
, NULL is returned
, but no GLX
201 The string returned
for GLX_RENDERER_VENDOR_ID_MESA will have the same
202 format as the string that would be returned by glGetString of GL_VENDOR.
203 It may
, however
, have a different value.
205 The string returned
for GLX_RENDERER_DEVICE_ID_MESA will have the same
206 format as the string that would be returned by glGetString of GL_RENDERER.
207 It may
, however
, have a different value.
210 [Add to section section
3.3.7 "Rendering Contexts"
]
212 The attribute name GLX_RENDERER_ID_MESA specified the index of the render
213 against which the context should be created. The default value of
214 GLX_RENDERER_ID_MESA is
0.
217 [Add to list of errors
for glXCreateContextAttribsARB
in section section
218 3.3.7 "Rendering Contexts"
]
220 * If the value of GLX_RENDERER_ID_MESA specifies a non
-existent
221 renderer
, BadMatch is generated.
223 Dependencies on GLX_EXT_create_context_es_profile and
224 GLX_EXT_create_context_es2_profile
226 If neither extension is supported
, remove all mention of
227 GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA from the spec.
229 If GLX_EXT_create_context_es_profile is not supported
, remove all mention of
230 GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA from the spec.
234 1) How should the difference between on
-card and GART memory be exposed?
238 2) How should memory limitations of unified memory architecture
(UMA
)
241 UNRESOLVED. Some hardware has different per
-process and global
242 limits
for memory that can be accessed within a single draw call.
244 3) How should the renderer's API preference be advertised?
246 UNRESOLVED. The common
case for desktop renderers is to prefer
247 either core or compatibility. However
, some renderers may actually
248 prefer an ES context. This leaves the application
in a tough spot
249 if it can only support core or compatibility and the renderer says it
252 4) Should OpenGL ES
2.0 and OpenGL ES
3.0 be treated separately?
254 RESOLVED. No. OpenGL ES
3.0 is backwards compatible with OpenGL ES
255 2.0. Applications can detect OpenGL ES
3.0 support by querying
256 GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA.
258 5) How can applications tell the difference between different hardware
259 renderers
for the same device? For example
, whether the renderer is the
260 open
-source driver or the closed
-source driver.
262 RESOLVED. Assuming this extension is ever implemented outside Mesa
,
263 applications can query GLX_RENDERER_VENDOR_ID_MESA from
264 glXQueryRendererStringMESA. This will almost certainly
return
265 different strings
for open
-source and closed
-source drivers.
267 6) What is the value of GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA
for
270 UNRESOLVED. Video
(display
) memory and texture memory is not unified
271 for software implementations
, so it seems reasonable
for this to be
274 7) How does an application determine the number of available renderers?
278 8) What happens
if a fbconfig is used to create context on a renderer
279 that cannot support it? For example
, if a multisampled config is used
280 with a software renderer that does not support multisampling.
282 RESOLVED. The language
for glXCreateContextAttribsARB already covers
283 this
case. Context creation will fail
, and BadMatch is generated.
285 9) In addition to being able to query the supported versions
, should
286 applications also be able to query the supported extensions?
288 RESOLVED. No. Desktop OpenGL core profiles and OpenGL ES
3.0 have
289 moved away from the monolithic string returned by glGetString of
290 GL_EXTENSIONS. Providing the newer indexed query would require adding
291 a lot of extra infrastructure
, and it would probably provide little
292 benefit to applications.
294 10) What combination of values
for GLX_RENDERER_PREFERRED_PROFILE_MESA
,
295 GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA
, and
296 GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA should be returned
297 for a renderer that only supports OpenGL
3.1 without the
298 GL_ARB_compatibility extension?
300 RESOLVED. The renderer will
return GLX_CONTEXT_CORE_PROFILE_BIT_ARB
301 for GLX_RENDERER_PREFERRED_PROFILE_MESA.
303 Further
, the renderer will
return <3,0> for
304 GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA because OpenGL
305 3.1 without GL_ARB_compatibility is not backwards compatible with
306 previous versions of OpenGL. The render will
return <3,1> for
307 GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA indicating that support
308 for OpenGL
3.1 is available.
310 Even though there is no OpenGL
3.1 core profile
, the values
311 returned
for GLX_RENDERER_PREFERRED_PROFILE_MESA and
312 GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA can be supplied
313 with the GLX_CONTEXT_PROFILE_MASK_ARB and
314 GLX_CONTEXT_
{MAJOR
,MINOR
}_VERSION_ARB attributes of
315 glXCreateContextAttribsARB without error. If the requested
316 OpenGL version is less than
3.2, the
317 GLX_CONTEXT_PROFILE_MASK_ARB attribute is ignored by
318 glXCreateContextAttribsARB.
320 11) How can application learn about multi
-GPU
(e.g.
, SLI
, CrossFireX
,
321 etc.
) configurations?
323 UNRESOLVED. Based on ISV feedback
, this is important information to
324 provide to the application. Given the variety of possible hardware
325 configurations
(e.g.
, Hybrid CrossFireX
) and different rendering
326 modes
(e.g.
, split
-frame rendering vs. alternate
-frame rendering
),
327 it's not clear how this information can be communicated.
329 It is likely that this will be left to a layered extension.
331 12) Should capability queries similar to those
in
332 GL_ARB_internalformat_query or GL_ARB_internalformat_query2 be added?
334 RESOLVED. No. With the possible exception of the texture size
335 queries
, it seems unlikely that applications would ever use this
336 information before creating a context.
338 13) Existing GL extensions
(e.g.
, GL_ATI_meminfo and
339 GL_NVX_gpu_memory_info
) allow easy queries after context creation. With
340 this extension it is a bit of a pain
for a portable application to query
341 the information after context creation.
343 RESOLVED. Add versions of the queries that implicitly take the
344 display
, screen
, and renderer from the currently bound context.
346 14) Why not
make the queries from issue
#13 GL functions (instead of GLX)?
348 RESOLVED. It is fairly compelling
for the post
-creation queries to
349 just use glGetInteger and glGetString. However
, the GL enums and
350 the GLX enums would have different names and would almost certainly
351 have different values. It seems like this would cause more problems
354 15) Should the string queries be required to
return the same values as
355 glGetString
(GL_VENDOR
) and glGetString
(GL_RENDERER
)?
357 UNRESOLVED. This may be useful
for applications that already
do
358 device detection based on these strings.
360 16) What
type should the value parameter of glXQueryRendererIntegerMESA
361 and glXQueryCurrentRendererIntegerMESA be?
363 UNRESOLVED. Other similar GLX query functions just use int or
364 unsigned int
, so that's what this extension uses
for now. However
,
365 an expeclitly sized value
, such as uint32_t or uint64_t
, seems
368 17) What about SoCs and other systems that don't have PCI?
370 RESOLVED. The GLX_RENDERER_VENDOR_ID_MESA and
371 GLX_RENDERER_DEVICE_ID_MESA integer queries may
return 0xFFFFFFFF if a
372 PCI ID either does not exist or is not available. Implementations
373 should
make every attempt to
return as much information as is
374 possible. For example
, if the implementation is running on a non
-PCI
375 SoC with a Qualcomm GPU
, GLX_RENDERER_VENDOR_ID_MESA should
return
376 0x5143, but GLX_RENDERER_DEVICE_ID_MESA will
return 0xFFFFFFFF.
380 Version 1, 2012/08/27 - Initial version
382 Version 2, 2012/09/04 - Specify behavior of implementations that
383 do not support certain profiles.
384 Change wording of issue
#8 to be more
386 Make some wording changes to issue
#10 to
387 clarify the resolution a bit.
389 Version 3, 2012/09/23 - Add issue
#11 regarding multi-GPU systems.
391 Version 4, 2013/02/01 - Add issue
#12 regarding texture / renderbuffer
394 Version 5, 2013/02/14 - Add issues
#13 and #14 regarding simpler queires
395 after the context is created and made current.
396 Add issue
#15 regarding the string query.
397 Add issue
#16 regarding the value type returned
398 by the Integer functions.
400 Version 6, 2013/10/25 - Fix a typo. Update the list of functions to
401 which the new enums can be passed. The "Current"
402 versions were previously missing.
404 Version 7, 2013/11/07 - Fix a couple more typos. Add issue
#17 regarding
405 the PCI queries on systems that don't have PCI.
407 Version 8, 2014/02/14 - Fix a couple typos. GLX_RENDER_ID_MESA should
408 read GLX_RENDERER_ID_MESA. The VENDOR
/DEVICE_ID
409 example given
in issue
#17 should be 0x5143 and
410 0xFFFFFFFF respectively.