Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. Name
  2.  
  3.     MESA_query_renderer
  4.  
  5. Name Strings
  6.  
  7.     GLX_MESA_query_renderer
  8.  
  9. Contact
  10.  
  11.     Ian Romanick <ian.d.romanick@intel.com>
  12.  
  13. IP Status
  14.  
  15.     No known IP claims.
  16.  
  17. Status
  18.  
  19.     Shipping as of Mesa 10.0
  20.  
  21. Version
  22.  
  23.     Version 8, 14-February-2014
  24.  
  25. Number
  26.  
  27.     TBD.
  28.  
  29. Dependencies
  30.  
  31.     GLX 1.4 is required.
  32.  
  33.     GLX_ARB_create_context and GLX_ARB_create_context_profile are required.
  34.  
  35.     This extension interacts with GLX_EXT_create_context_es2_profile and
  36.     GLX_EXT_create_context_es_profile.
  37.  
  38. Overview
  39.  
  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.
  49.  
  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.
  57.  
  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.
  62.  
  63. New Procedures and Functions
  64.  
  65.     Bool glXQueryRendererIntegerMESA(Display *dpy, int screen,
  66.                                      int renderer, int attribute,
  67.                                      unsigned int *value);
  68.     Bool glXQueryCurrentRendererIntegerMESA(int attribute, unsigned int *value);
  69.  
  70.     const char *glXQueryRendererStringMESA(Display *dpy, int screen,
  71.                                            int renderer, int attribute);
  72.  
  73.     const char *glXQueryCurrentRendererStringMESA(int attribute);
  74.  
  75. New Tokens
  76.  
  77.     Accepted as an <attribute> in glXQueryRendererIntegerMESA and
  78.     glXQueryCurrentRendererIntegerMESA:
  79.  
  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
  91.  
  92.     Accepted as an <attribute> in glXQueryRendererStringMESA and
  93.     glXQueryCurrentRendererStringMESA:
  94.  
  95.         GLX_RENDERER_VENDOR_ID_MESA
  96.         GLX_RENDERER_DEVICE_ID_MESA
  97.  
  98.     Accepted as an attribute name in <*attrib_list> in
  99.     glXCreateContextAttribsARB:
  100.  
  101.         GLX_RENDERER_ID_MESA                             0x818E
  102.  
  103. Additions to the OpenGL / WGL Specifications
  104.  
  105.     None. This specification is written for GLX.
  106.  
  107. Additions to the GLX 1.4 Specification
  108.  
  109.     [Add the following to Section X.Y.Z of the GLX Specification]
  110.  
  111.     To obtain information about the available renderers for a particular
  112.     display and screen,
  113.  
  114.         Bool glXQueryRendererIntegerMESA(Display *dpy, int screen, int renderer,
  115.                                          int attribute, unsigned int *value);
  116.  
  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.
  120.  
  121.     GLX renderer attribute         number     description
  122.                                   of values
  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
  130.                                               accelerated
  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
  138.                                               memory.
  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
  143.                                               with the
  144.                                               GLX_CONTEXT_PROFILE_MASK_ARB
  145.                                               attribute to
  146.                                               glXCreateContextAttribsARB
  147.     GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA
  148.                                   2           Maximum core profile major and
  149.                                               minor version supported by the
  150.                                               renderer
  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
  163.  
  164.     In the table, boolean attributes will have either the value 0 or 1.
  165.  
  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.
  171.  
  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.
  176.  
  177.     If <attribute> is not a recognized value, False is returned, but no GLX
  178.     error is generated.  Otherwise, True is returned.
  179.  
  180.     String versions of some attributes may also be queried using
  181.  
  182.         const char *glXQueryRendererStringMESA(Display *dpy, int screen,
  183.                                                int renderer, int attribute);
  184.  
  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.
  188.  
  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
  193.                                   underlying hardware.
  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).
  197.  
  198.     If <attribute> is not a recognized value, NULL is returned, but no GLX
  199.     error is generated.
  200.  
  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.
  204.  
  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.
  208.  
  209.  
  210.     [Add to section section 3.3.7 "Rendering Contexts"]
  211.  
  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.
  215.  
  216.  
  217.     [Add to list of errors for glXCreateContextAttribsARB in section section
  218.     3.3.7 "Rendering Contexts"]
  219.  
  220.       * If the value of GLX_RENDERER_ID_MESA specifies a non-existent
  221.         renderer, BadMatch is generated.
  222.  
  223. Dependencies on GLX_EXT_create_context_es_profile and
  224. GLX_EXT_create_context_es2_profile
  225.  
  226.     If neither extension is supported, remove all mention of
  227.     GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA from the spec.
  228.  
  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.
  231.  
  232. Issues
  233.  
  234.     1) How should the difference between on-card and GART memory be exposed?
  235.  
  236.         UNRESOLVED.
  237.  
  238.     2) How should memory limitations of unified memory architecture (UMA)
  239.     systems be exposed?
  240.  
  241.         UNRESOLVED.  Some hardware has different per-process and global
  242.         limits for memory that can be accessed within a single draw call.
  243.  
  244.     3) How should the renderer's API preference be advertised?
  245.  
  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
  250.         wants ES.
  251.  
  252.     4) Should OpenGL ES 2.0 and OpenGL ES 3.0 be treated separately?
  253.  
  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.
  257.  
  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.
  261.  
  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.
  266.  
  267.     6) What is the value of GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA for
  268.     software renderers?
  269.  
  270.         UNRESOLVED.  Video (display) memory and texture memory is not unified
  271.         for software implementations, so it seems reasonable for this to be
  272.         False.
  273.  
  274.     7) How does an application determine the number of available renderers?
  275.  
  276.         UNRESOLVED.
  277.  
  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.
  281.  
  282.         RESOLVED.  The language for glXCreateContextAttribsARB already covers
  283.         this case.  Context creation will fail, and BadMatch is generated.
  284.  
  285.     9) In addition to being able to query the supported versions, should
  286.     applications also be able to query the supported extensions?
  287.  
  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.
  293.  
  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?
  299.  
  300.         RESOLVED.  The renderer will return GLX_CONTEXT_CORE_PROFILE_BIT_ARB
  301.         for GLX_RENDERER_PREFERRED_PROFILE_MESA.
  302.  
  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.
  309.  
  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.
  319.  
  320.     11) How can application learn about multi-GPU (e.g., SLI, CrossFireX,
  321.     etc.) configurations?
  322.  
  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.
  328.  
  329.         It is likely that this will be left to a layered extension.
  330.  
  331.     12) Should capability queries similar to those in
  332.     GL_ARB_internalformat_query or GL_ARB_internalformat_query2 be added?
  333.  
  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.
  337.  
  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.
  342.  
  343.         RESOLVED.  Add versions of the queries that implicitly take the
  344.         display, screen, and renderer from the currently bound context.
  345.  
  346.     14) Why not make the queries from issue #13 GL functions (instead of GLX)?
  347.  
  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
  352.         than it would solve.
  353.  
  354.     15) Should the string queries be required to return the same values as
  355.     glGetString(GL_VENDOR) and glGetString(GL_RENDERER)?
  356.  
  357.         UNRESOLVED.  This may be useful for applications that already do
  358.         device detection based on these strings.
  359.  
  360.     16) What type should the value parameter of glXQueryRendererIntegerMESA
  361.         and glXQueryCurrentRendererIntegerMESA be?
  362.  
  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
  366.         preferable.
  367.  
  368.     17) What about SoCs and other systems that don't have PCI?
  369.  
  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.
  377.  
  378. Revision History
  379.  
  380.     Version 1, 2012/08/27 - Initial version
  381.  
  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
  385.                             clear.
  386.                             Make some wording changes to issue #10 to
  387.                             clarify the resolution a bit.
  388.  
  389.     Version 3, 2012/09/23 - Add issue #11 regarding multi-GPU systems.
  390.  
  391.     Version 4, 2013/02/01 - Add issue #12 regarding texture / renderbuffer
  392.                             format queries.
  393.  
  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.
  399.  
  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.
  403.  
  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.
  406.  
  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.
  411.