1<!ELEMENT OpenGLAPI (category?, xi:include?, OpenGLAPI?)+> 2<!ELEMENT category (type*, enum*, function*)*> 3<!ELEMENT type EMPTY> 4<!ELEMENT enum (size*)> 5<!ELEMENT size EMPTY> 6<!ELEMENT function (param*, return?, glx?)*> 7<!ELEMENT param EMPTY> 8<!ELEMENT return EMPTY> 9<!ELEMENT glx EMPTY> 10 11<!ELEMENT xi:include (xi:fallback)?> 12<!ATTLIST xi:include 13 xmlns:xi CDATA #FIXED "http://www.w3.org/2001/XInclude" 14 href CDATA #REQUIRED 15 parse (xml|text) "xml" 16 encoding CDATA #IMPLIED> 17<!ELEMENT xi:fallback ANY> 18<!ATTLIST xi:fallback 19 xmlns:xi CDATA #FIXED "http://www.w3.org/2001/XInclude"> 20 21 22<!ATTLIST category name NMTOKEN #REQUIRED 23 number NMTOKEN #IMPLIED 24 window_system NMTOKEN #IMPLIED> 25<!ATTLIST type name NMTOKEN #REQUIRED 26 size NMTOKEN #REQUIRED 27 float (true | false) "false" 28 unsigned (true | false) "false" 29 pointer (true | false) "false" 30 glx_name NMTOKEN #IMPLIED> 31<!ATTLIST enum name NMTOKEN #REQUIRED 32 count CDATA #IMPLIED 33 value NMTOKEN #REQUIRED> 34<!ATTLIST function name NMTOKEN #REQUIRED 35 alias NMTOKEN #IMPLIED 36 vectorequiv NMTOKEN #IMPLIED 37 es1 CDATA "none" 38 es2 CDATA "none" 39 deprecated CDATA "none" 40 exec NMTOKEN #IMPLIED 41 desktop (true | false) "true" 42 marshal NMTOKEN #IMPLIED 43 marshal_sync CDATA #IMPLIED> 44 marshal_count CDATA #IMPLIED> 45 marshal_call_after CDATA #IMPLIED> 46<!ATTLIST size name NMTOKEN #REQUIRED 47 count NMTOKEN #IMPLIED 48 mode (get | set) "set"> 49<!ATTLIST param name NMTOKEN #REQUIRED 50 type CDATA #REQUIRED 51 client_only (true | false) "false" 52 count NMTOKEN #IMPLIED 53 counter (true | false) "false" 54 count_scale NMTOKEN "1" 55 output (true | false) "false" 56 padding (true | false) "false" 57 img_width NMTOKEN #IMPLIED 58 img_height NMTOKEN #IMPLIED 59 img_depth NMTOKEN #IMPLIED 60 img_extent NMTOKEN #IMPLIED 61 img_xoff NMTOKEN #IMPLIED 62 img_yoff NMTOKEN #IMPLIED 63 img_zoff NMTOKEN #IMPLIED 64 img_woff NMTOKEN #IMPLIED 65 img_format NMTOKEN #IMPLIED 66 img_type NMTOKEN #IMPLIED 67 img_target NMTOKEN #IMPLIED 68 img_send_null (true | false) "false" 69 img_null_flag (true | false) "false" 70 img_pad_dimensions (true | false) "false" 71 variable_param NMTOKENS #IMPLIED> 72<!ATTLIST return type CDATA "void"> 73<!ATTLIST glx rop NMTOKEN #IMPLIED 74 sop NMTOKEN #IMPLIED 75 vendorpriv NMTOKEN #IMPLIED 76 large (true | false) "false" 77 doubles_in_order (true | false) "false" 78 always_array (true | false) "false" 79 handcode (true | false | client | server) "false" 80 img_reset NMTOKEN #IMPLIED 81 dimensions_in_reply (true | false) "false" 82 ignore (true | false) "false"> 83 84<!-- 85The various attributes for param and glx have the meanings listed below. 86When adding new functions, please annote them correctly. In most cases this 87will just mean adding a '<glx ignore="true"/>' tag. 88 89param: 90 name - name of the parameter 91 type - fully qualified type (e.g., with "const", etc.) 92 client_only - boolean flag set on parameters which are interpreted only 93 by the client and are not present in the protocol encoding (e.g., 94 the stride parameters to Map1f, etc.) 95 count - for counted arrays (e.g., the 'lists' parameter to glCallLists), 96 the parameter or literal that represents the count. For functions 97 like glVertex3fv it will be a literal, for others it will be one of 98 the parameters. 99 counter - this parameter is a counter that will be referenced by the 100 'count' attribute in another parameter. 101 count_scale - literal value scale factor for the 'count' attribute. 102 See ProgramParameters4dvNV for an example. 103 output - this parameter is used to store the output of the function. 104 variable_param - name of parameter used to determine the number of 105 elements referenced by this parameter. This should be the name of a 106 single enum parameter. Most of the gl*Parameter[if]v functions use 107 this. Additionally, the enums that can be passed should be properly 108 annotated. 109 img_width / img_height / img_depth / img_extent - name of parameters 110 (or hardcoded integer) used for the dimensions of pixel data. 111 img_xoff / img_yoff / img_zoff / img_woff - name of parameters used 112 for x, y, z, and w offsets of pixel data. 113 img_format - name of parameter used as the pixel data format. 114 img_type - name of parameter used as the pixel data type. 115 img_target - name of parameter used as a texture target. Non-texture 116 pixel data should hardcode 0. 117 img_send_null - boolean flag to determine if blank pixel data should 118 be sent when a NULL pointer is passed. This is only used by 119 TexImage1D and TexImage2D. 120 img_null_flag - boolean flag to determine if an extra flag is used to 121 determine if a NULL pixel pointer was passed. This is used by 122 TexSubImage1D, TexSubImage2D, TexImage3D and others. 123 img_pad_dimensions - boolean flag to determine if dimension data and 124 offset data should be padded to the next even number of dimensions. 125 For example, this will insert an empty "height" field after the 126 "width" field in the protocol for TexImage1D. 127 marshal - One of "sync", "async", "draw", or "custom", defaulting to 128 async unless one of the arguments is something we know we can't 129 codegen for. If "sync", we finish any queued glthread work and call 130 the Mesa implementation directly. If "async", we queue the function 131 call to be performed by glthread. If "custom", the prototype will be 132 generated but a custom implementation will be present in marshal.c. 133 If "draw", it will follow the "async" rules except that "indices" are 134 ignored (since they may come from a VBO). 135 marshal_sync - an expression that, if it evaluates true, causes glthread 136 to sync and execute the call directly. 137 marshal_count - same as count, but variable_param is ignored. Used by 138 glthread. 139 marshal_call_after - insert the string at the end of the marshal function 140 141glx: 142 rop - Opcode value for "render" commands 143 sop - Opcode value for "single" commands 144 vendorpriv - Opcode value for vendor private (or vendor private with 145 reply) commands 146 large - set to "true" of the render command can use RenderLarge protocol. 147 doubles_in_order - older commands always put GLdouble data at the 148 start of the render packet. Newer commands (e.g., 149 ProgramEnvParameter4dvARB) put the in the order that they appear 150 in the parameter list. 151 always_array - some single commands take reply data as an array or as 152 return value data (e.g., glGetLightfv). Other single commands take 153 reply data only as an array (e.g., glGetClipPlane). 154 handcode - some functions are just too complicated to generate 155 (e.g., glSeperableFilter2D) or operate only on client-side data 156 (e.g., glVertexPointer) and must be handcoded. 157 ignore - some functions have an entry in the dispatch table, but aren't 158 suitable for protocol implementation (e.g., glLockArraysEXT). This 159 also applies to functions that don't have any GLX protocol specified 160 (e.g., glGetFogFuncSGIS). 161--> 162