1 <!ELEMENT OpenGLAPI (category?, xi:include?, OpenGLAPI?)+>
2 <!ELEMENT category (type*, enum*, function*)*>
4 <!ELEMENT enum (size*)>
6 <!ELEMENT function (param*, return?, glx?)*>
8 <!ELEMENT return EMPTY>
11 <!ELEMENT xi:include (xi:fallback)?>
13 xmlns:xi CDATA #FIXED "http://www.w3.org/2001/XInclude"
15 parse (xml|text) "xml"
16 encoding CDATA #IMPLIED>
17 <!ELEMENT xi:fallback ANY>
19 xmlns:xi CDATA #FIXED "http://www.w3.org/2001/XInclude">
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
33 value NMTOKEN #REQUIRED>
34 <!ATTLIST function name NMTOKEN #REQUIRED
35 alias NMTOKEN #IMPLIED
36 vectorequiv NMTOKEN #IMPLIED
39 deprecated CDATA "none"
41 desktop (true | false) "true"
42 marshal NMTOKEN #IMPLIED
43 marshal_fail CDATA #IMPLIED>
44 marshal_count CDATA #IMPLIED>
45 <!ATTLIST size name NMTOKEN #REQUIRED
46 count NMTOKEN #IMPLIED
47 mode (get | set) "set">
48 <!ATTLIST param name NMTOKEN #REQUIRED
50 client_only (true | false) "false"
51 count NMTOKEN #IMPLIED
52 counter (true | false) "false"
53 count_scale NMTOKEN "1"
54 output (true | false) "false"
55 padding (true | false) "false"
56 img_width NMTOKEN #IMPLIED
57 img_height NMTOKEN #IMPLIED
58 img_depth NMTOKEN #IMPLIED
59 img_extent NMTOKEN #IMPLIED
60 img_xoff NMTOKEN #IMPLIED
61 img_yoff NMTOKEN #IMPLIED
62 img_zoff NMTOKEN #IMPLIED
63 img_woff NMTOKEN #IMPLIED
64 img_format NMTOKEN #IMPLIED
65 img_type NMTOKEN #IMPLIED
66 img_target NMTOKEN #IMPLIED
67 img_send_null (true | false) "false"
68 img_null_flag (true | false) "false"
69 img_pad_dimensions (true | false) "false"
70 variable_param NMTOKENS #IMPLIED>
71 <!ATTLIST return type CDATA "void">
72 <!ATTLIST glx rop NMTOKEN #IMPLIED
74 vendorpriv NMTOKEN #IMPLIED
75 large (true | false) "false"
76 doubles_in_order (true | false) "false"
77 always_array (true | false) "false"
78 handcode (true | false | client | server) "false"
79 img_reset NMTOKEN #IMPLIED
80 dimensions_in_reply (true | false) "false"
81 ignore (true | false) "false">
84 The various attributes for param and glx have the meanings listed below.
85 When adding new functions, please annote them correctly. In most cases this
86 will just mean adding a '<glx ignore="true"/>' tag.
89 name - name of the parameter
90 type - fully qualified type (e.g., with "const", etc.)
91 client_only - boolean flag set on parameters which are interpreted only
92 by the client and are not present in the protocol encoding (e.g.,
93 the stride parameters to Map1f, etc.)
94 count - for counted arrays (e.g., the 'lists' parameter to glCallLists),
95 the parameter or literal that represents the count. For functions
96 like glVertex3fv it will be a literal, for others it will be one of
98 counter - this parameter is a counter that will be referenced by the
99 'count' attribute in another parameter.
100 count_scale - literal value scale factor for the 'count' attribute.
101 See ProgramParameters4dvNV for an example.
102 output - this parameter is used to store the output of the function.
103 variable_param - name of parameter used to determine the number of
104 elements referenced by this parameter. This should be the name of a
105 single enum parameter. Most of the gl*Parameter[if]v functions use
106 this. Additionally, the enums that can be passed should be properly
108 img_width / img_height / img_depth / img_extent - name of parameters
109 (or hardcoded integer) used for the dimensions of pixel data.
110 img_xoff / img_yoff / img_zoff / img_woff - name of parameters used
111 for x, y, z, and w offsets of pixel data.
112 img_format - name of parameter used as the pixel data format.
113 img_type - name of parameter used as the pixel data type.
114 img_target - name of parameter used as a texture target. Non-texture
115 pixel data should hardcode 0.
116 img_send_null - boolean flag to determine if blank pixel data should
117 be sent when a NULL pointer is passed. This is only used by
118 TexImage1D and TexImage2D.
119 img_null_flag - boolean flag to determine if an extra flag is used to
120 determine if a NULL pixel pointer was passed. This is used by
121 TexSubImage1D, TexSubImage2D, TexImage3D and others.
122 img_pad_dimensions - boolean flag to determine if dimension data and
123 offset data should be padded to the next even number of dimensions.
124 For example, this will insert an empty "height" field after the
125 "width" field in the protocol for TexImage1D.
126 marshal - One of "sync", "async", "draw", or "custom", defaulting to
127 async unless one of the arguments is something we know we can't
128 codegen for. If "sync", we finish any queued glthread work and call
129 the Mesa implementation directly. If "async", we queue the function
130 call to be performed by glthread. If "custom", the prototype will be
131 generated but a custom implementation will be present in marshal.c.
132 If "draw", it will follow the "async" rules except that "indices" are
133 ignored (since they may come from a VBO).
134 marshal_fail - an expression that, if it evaluates true, causes glthread
135 to switch back to the Mesa implementation and call it directly. Used
136 to disable glthread for GL compatibility interactions that we don't
137 want to track state for.
138 marshal_count - same as count, but variable_param is ignored. Used by
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
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).