1XXX - Not complete. 2 3Name 4 5 SGIX_datapipe 6 7Name Strings 8 9 GL_SGIX_datapipe 10 11Version 12 13 $Date: 1998/04/21 03:52:00 $ $Revision: 1.2 $ 14 15Number 16 17 152 18 19Dependencies 20 21 None 22 23Overview 24 25 This extension introduces a new source and destination for OpenGL 26 commands which currently write to and read from the application address 27 space. The extension consists of two parts. The first is an 28 infrastructure which allows the input/output of OpenGL commands to be 29 redirected to storage media or address spaces other than normal 30 application memory. This infrastructure can be used to encapsulate 31 transfers from different or special storage media such as locked memory 32 pools, memories which may have a special attachment to the graphics 33 accelerator, etc. In all cases the storage medium is considered to be 34 part of the client address space of the application/context. The 35 extension does not provide mechanisms to move data into these special 36 storage media other than OpenGL commands which return data to the 37 application address space. The extension allows for the possibility 38 that not all OpenGL commands may support transfers to and from each 39 address space by grouping commands into classes Geometry, Image, and 40 Attribute in which each class either completely supports or does not 41 support such transfers. 42 43 The second part of the extension is more specific to the ISD proposed 44 datapipe mechanisms. This part provides one or more datapipe 'heads' 45 as part of the client state of a rendering context. These heads may 46 be selected as the current 'address space' from or to which data 47 is transferred during the execution of OpenGL commands. 48 49Issues 50 51 * Too general? 52 53 * Asynchronous support? 54 55 56New Procedures and Functions 57 58 void AddressSpace(enum space, bitfield mask); 59 int DataPipe(enum space); 60 61New Tokens 62 63 Accepted by the <pname> parameters of GetBooleanv, GetIntegerv, 64 GetFloatv, and GetDoublev: 65 66 ADDRESS_SPACE 0x???? 67 ADDRESS_CLASSES 0x???? 68 DATAPIPE_MAX 0x???? 69 70 Accepted by the <space> parameter of AddressSpace: 71 72 MEMORY 0x???? 73 74 Accepted by the <space> parameter of AddressSpace and the 75 <space> parameter of DataPipe: 76 77 DATAPIPE_0 0x???? 78 DATAPIPE_1 0x???? 79 DATAPIPE_2 0x???? 80 DATAPIPE_3 0x???? 81 82 Accepted by the <mask> parameter of AddressSpace: 83 84 GEOMETRY_BIT 0x1 85 IMAGE_BIT 0x2 86 87Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) 88 89 None 90 91Additions to Chapter 3 of the 1.0 Specification (Rasterization) 92 93 None 94 95Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations 96and the Frame buffer) 97 98Additions to Chapter 5 of the 1.0 Specification (Special Functions) 99 100 Address Spaces 101 102 Many OpenGL commands read data or return data to client memory. The 103 AddressSpace command selects the current address space to or from which 104 data is transferred for a subset of OpenGL commands which take 105 client memory pointers as parameters. Commands which are not part 106 of the subset which are interepreted specially continue to transfer 107 data to and from normal client memory. The address space is an 108 abstraction for alternate storage mediums. The subset of commands whose 109 address pointers receive special interpretation are split into a 110 set of classes as follows: 111 112 GEOMETRY 113 114 Color*v 115 Normal*v 116 TexCoord*v 117 EdgeFlag*v 118 Vertex*v 119 Index*v 120 RasterPos*v 121 Rect*v 122 EvalCoord*v 123 LoadMatrix* 124 MultMatrix* 125 126 ColorPointerEXT 127 EdgeFlagPointerEXT 128 IndexPointerEXT 129 NormalPointerEXT 130 TexCoordPointerEXT 131 VertexPointerEXT 132 133 SpriteParameter[fi]vSGIX 134 135 ReferencePlaneSGIX 136 137 IMAGE 138 139 Bitmap 140 TexImage* 141 PixelMap*v 142 ReadPixels 143 DrawPixels 144 GetTexImage 145 TexSubImage* 146 ConvolutionFilter*EXT 147 SeparableFilter2DEXT 148 GetHistogramEXT 149 ColorTableSGI 150 151 The set of commands which continue to operate from normal client memory are 152 as follows: 153 154 CallLists 155 ClipPlane 156 Fog*v 157 Light*v 158 LightModel*v 159 Material*v 160 PolygonStipple 161 TexParameter*v 162 TexEnv*v 163 TexGen*v 164 FeedbackBuffer 165 SelectBuffer 166 Map* 167 168 GetBooleanv 169 GetClipPlane 170 GetDoublev 171 GetFloatv 172 GetIntegerv 173 GetLight*v 174 GetMap*v 175 GetMaterial*v 176 GetPixelMap*v 177 GetPolygonStipple 178 GetTexEnv*v 179 GetTexGen*v 180 GetTexParameter*v 181 GetTexLevelParameter*v 182 183 ConvolutionParameter*vEXT 184 GetConvolutionFilter*EXT 185 GetConvolutionParameter*vEXT 186 GetSeparableFilterEXT 187 188 GetHistogramParameter*vEXT 189 GetMinmaxEXT 190 GetMinmaxParameter*vEXT 191 192 DetailTexFuncSGIS 193 GetDetailTexFuncSGIS 194 SharpenTexFuncSGIS 195 GetSharpenTexFuncSGIS 196 197 GetPointervEXT 198 199 AreTexturesResidentEXT 200 DeleteTexturesEXT 201 GenTexturesEXT 202 PrioritizeTexturesEXT 203 204 ColorTableParameter[fi]vSGI 205 GetColorTableSGI 206 GetColorTableParameter[fi]vSGI 207 208 GetTexFilterFuncSGIS 209 TexFilterFuncSGIS 210 211 PointParameterfvSGIS 212 FogFuncSGIS 213 214 InstrumentsBufferSGIX 215 PollInstrumentsSGIX 216 217 DeformationMap3dSGIX 218 219 GetListParameter[fi]vSGIX 220 ListParameter[fi]vSGIX 221 222 The list of classes are specified as a bitmask parameter <mask>. All 223 commands in a class must be supported. Only the classes specified in 224 the <mask> parameter receive special interpretation, the remaining 225 commands continue to use client memory. All commands may be switched 226 back to client memory operation using MEMORY as the <space> parameter. 227 228 The current address space and class mask may be queried using GetIntegerv 229 with the <pname> parameter set to ADDRESS_SPACE. 230 231 The list of supported classes for a given address space can be determined 232 using GetIntegerv with the <pname> parameter set to the address space 233 to be queried. 234 235 Per-Address Space Client State 236 237 A separate instance of client state is maintained for each address 238 space for the following state: 239 240 VERTEX_ARRAY_POINTER_EXT 241 NORMAL_ARRAY_POINTER_EXT 242 COLOR_ARRAY_POINTER_EXT 243 INDEX_ARRAY_POINTER_EXT 244 TEXTURE_COORD_ARRAY_POINTER_EXT 245 EDGE_FLAG_ARRAY_POINTER_EXT 246 247 248 Datapipes 249 250 An OpenGL context can participate in a datapipe connection by 251 binding the OpenGL datapipe head to a datapipe connection. Each 252 OpenGL context supports one or more datapipe heads. A handle to 253 a datapipe head can be obtained using the command Datapipe with 254 the <space> parameter set to one of DATAPIPE_0 through DATAPIPE_3. 255 256 Datapipe client transfer parameters are specified using OpenGL commands 257 such as PixelStore or glVertexPointerEXT. The OpenGL side of the 258 transfer is completely specified by issuing the OpenGL command 259 which normal causes data transfer, i.e., TexImage2D, but in the 260 case of datapipes the actual data transfer is not initiated until 261 the datapipe transfer command has been issued. 262 263 If the address space corresponding to the datapipe head is not 264 currently active, then any data transfers using the datapipe head 265 are ignored. When a rendering context is not active, datapipe 266 transfers using that context are ignored. 267 268 Once a datapipe transfer has been initiated, it will immediately 269 follow all OpenGL commands which preceeded it and it will 270 be followed by OpenGL commands which are issued after the 271 datapipe transfer has been initiated. Said another way, the 272 act of initiating the datapipe transfer is the point at which 273 the OpenGL command is introduced in the OpenGL command stream. 274 One the datapipe transfer has been initiated, the Finish command 275 will block until all OpenGL rendering including the results of 276 the datapipe transfer have completed. If Finish is called before 277 the datapipe transfer is initiated then it as if Finish has been 278 issued but the OpenGL command had not been issued before it. 279 280Additions to Chapter 6 of the 1.0 Specification (State and State Requests) 281 282 None. 283 284Additions to the GLX Specification 285 286 287Errors 288 289 XXX - not complete yet 290 INVALID_OPERATION if the <space> parameter of AddressSpace is not one of 291 MEMORY, DATAPIPE_0, DATAPIPE_1, DATAPIPE_2, or DATAPIPE_3. 292 293 INVALID_OPERATION if the <mask> parameter of AddressSpace includes a 294 class which is not supported for the specified <space> 295 296 INVALID_VALUE if any bit other than GEOMETRY_BIT or IMAGE_BIT 297 are set in the <mask> parameter of AddressSpace. 298 299New State 300 301 XXX - not complete yet 302 None. 303 304New Implementation Dependent State 305 306 XXX - not complete yet 307 None. 308