1Name 2 3 EXT_libglvnd 4 5Name Strings 6 7 GLX_EXT_libglvnd 8 9Contact 10 11 Kyle Brenneman, NVIDIA, kbrenneman at nvidia.com 12 13Contributors 14 15 Kyle Brenneman 16 Adam Jackson 17 Andy Ritger 18 Robert Morell 19 Arthur Huillet 20 Martin Peres 21 22Status 23 24 Complete 25 26Version 27 28 Last Modified Date: March 8, 2016 29 Revision: 1 30 31Number 32 33 OpenGL Extension #482 34 35Dependencies 36 37 GLX version 1.3 is required. 38 39 This specification is written against the wording of the GLX 1.4 40 Specification. 41 42Overview 43 44 This extension allows the vendor-neutral GLX client library, 45 libglvnd, to determine which vendor-specific driver is needed to 46 support a given GLX drawable or X11 screen. 47 48 This GLX extension is not intended to be used directly by 49 applications. Instead, it is intended to be used by the GLX client 50 library. 51 52IP Status 53 54 No known IP claims. 55 56New Procedures and Functions 57 58 None 59 60New Types 61 62 None 63 64New Tokens 65 66 Accepted by the <name> parameter of glXQueryServerString: 67 68 GLX_VENDOR_NAMES_EXT 0x20F6 69 70Additions to Chapter 3 of the GLX 1.4 Specification 71(Functions and Errors) 72 73 [Modify Section 3.3.2, GLX Versioning] 74 75 [Replace the 2nd sentence of the 5th paragraph with the following] 76 77 "The possible values for <name> and the format of the strings is the 78 same as for glXGetClientString. <name> may also be 79 GLX_VENDOR_NAMES_EXT." 80 81 [Add the following paragraph to the end of the section] 82 83 "If <name> is GLX_VENDOR_NAMES_EXT, then the returned string is a 84 space-separated sequence of vendor names. The names are in order of 85 preference, with the most preferred vendor first." 86 87 88 [Modify Section 3.3.6, Querying Attributes] 89 90 [Replace the 2nd sentence of the 1st paragraph with the following] 91 92 "<attribute> must be set to one of GLX_WIDTH, GLX_HEIGHT, 93 GLX_PRESERVED_CONTENTS, GLX_LARGEST_PBUFFER, GLX_FBCONFIG_ID, or 94 GLX_SCREEN" 95 96 [Add the following paragraph just before the last of the section] 97 98 "If <attribute> is GLX_SCREEN, then <value> will be the screen 99 number that the drawable was created on." 100 101GLX Protocol 102 103 This extension does not add any new requests. The 104 GLX_VENDOR_NAMES_EXT enum is used with the existing 105 glXQueryServerString request, and GLX_SCREEN is added to the 106 attributes in the glXGetDrawableAttributes reply. 107 108Errors 109 110 None 111 112Issues 113 1) Should GLX_VENDOR_NAMES_EXT contain a single vendor name or a 114 list of names? 115 116 RESOLVED: Allow a list of names. 117 118 Allowing multiple names would allow for multiple client-side 119 vendor libraries that work with a single server-side driver. 120 With only a single name, selecting between multiple client 121 drivers would require some form of additional configuration. 122 123 For example, some vendors may have both a proprietary 124 client-side vendor library and an open source vendor library 125 that work with the same server-side driver. In that case, the 126 server would return the names for both of the vendor libraries. 127 The client would then try loading each vendor library as 128 described below in Issue 3. 129 130 2) What order should the vendor names be returned in? 131 132 RESOLVED: If there are multiple vendor names, then the client 133 should use the names earlier in the list in preference to names 134 later in the list. 135 136 Specifically, the GLX client library will try to load and use 137 each vendor name, in the order that the server lists them. It 138 will stop when it finds the first vendor that works. 139 140 3) How are vendor names defined and interpreted? 141 142 RESOLVED: The vendor names for a screen are defined based on the 143 server's GLX implementation. Typically, a server will simply 144 send the name of the driver that controls the screen. 145 146 The GLX client library is responsible for translating the vendor 147 name to a vendor library name. The details of the translation 148 are part of the interface between the vendor library and the GLX 149 client library, and so are not defined in this specification. 150 151 4) Does the vendor name list need a new enum? Could it be appended 152 to the GLX_VENDOR string instead? 153 154 RESOLVED: Use a new enum. The vendor-specific part of the 155 GLX_VENDOR string is by definition arbitrary, even if in 156 practice every most if not all GLX implementatinos leave it 157 blank. 158 159 In addition, using a new enum also makes parsing the string much 160 easier. The client can simply pass the unmodified string to 161 strtok or strtok_r. 162 163 5) Do we need to define the interaction with GLX_SGIX_pbuffer? 164 165 RESOLVED. No. Any client or server that implements this 166 extension will already support GLX 1.3, so using 167 glXQueryDrawable to look up a screen number is sufficient. 168 169 There's no harm if a server includes a GLX_SCREEN attribute in 170 its GetDrawableAttributesSGIX reply, so a server is still free 171 to use the same codepath for GetDrawableAttributesSGIX and 172 glXGetDrawableAttributes. 173 174 6) Do we want to add GLX_SCREEN to the list of fbconfig attributes 175 as well? 176 177 RESOLVED: No. Adding GLX_SCREEN to glXGetFBConfigAttrib would be 178 redundant, because a client can already find the screen number 179 for a GLXFBConfig using glXGetVisualFromFBConfig and indirectly 180 using glXGetFBConfigs. 181 182Revision History 183 184 1. 8 March 2016 185 - Initial draft. 186 187