XXX - Not complete. Name SGIX_datapipe Name Strings GL_SGIX_datapipe Version $Date: 1998/04/21 03:52:00 $ $Revision: 1.2 $ Number 152 Dependencies None Overview This extension introduces a new source and destination for OpenGL commands which currently write to and read from the application address space. The extension consists of two parts. The first is an infrastructure which allows the input/output of OpenGL commands to be redirected to storage media or address spaces other than normal application memory. This infrastructure can be used to encapsulate transfers from different or special storage media such as locked memory pools, memories which may have a special attachment to the graphics accelerator, etc. In all cases the storage medium is considered to be part of the client address space of the application/context. The extension does not provide mechanisms to move data into these special storage media other than OpenGL commands which return data to the application address space. The extension allows for the possibility that not all OpenGL commands may support transfers to and from each address space by grouping commands into classes Geometry, Image, and Attribute in which each class either completely supports or does not support such transfers. The second part of the extension is more specific to the ISD proposed datapipe mechanisms. This part provides one or more datapipe 'heads' as part of the client state of a rendering context. These heads may be selected as the current 'address space' from or to which data is transferred during the execution of OpenGL commands. Issues * Too general? * Asynchronous support? New Procedures and Functions void AddressSpace(enum space, bitfield mask); int DataPipe(enum space); New Tokens Accepted by the parameters of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev: ADDRESS_SPACE 0x???? ADDRESS_CLASSES 0x???? DATAPIPE_MAX 0x???? Accepted by the parameter of AddressSpace: MEMORY 0x???? Accepted by the parameter of AddressSpace and the parameter of DataPipe: DATAPIPE_0 0x???? DATAPIPE_1 0x???? DATAPIPE_2 0x???? DATAPIPE_3 0x???? Accepted by the parameter of AddressSpace: GEOMETRY_BIT 0x1 IMAGE_BIT 0x2 Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) None Additions to Chapter 3 of the 1.0 Specification (Rasterization) None Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations and the Frame buffer) Additions to Chapter 5 of the 1.0 Specification (Special Functions) Address Spaces Many OpenGL commands read data or return data to client memory. The AddressSpace command selects the current address space to or from which data is transferred for a subset of OpenGL commands which take client memory pointers as parameters. Commands which are not part of the subset which are interepreted specially continue to transfer data to and from normal client memory. The address space is an abstraction for alternate storage mediums. The subset of commands whose address pointers receive special interpretation are split into a set of classes as follows: GEOMETRY Color*v Normal*v TexCoord*v EdgeFlag*v Vertex*v Index*v RasterPos*v Rect*v EvalCoord*v LoadMatrix* MultMatrix* ColorPointerEXT EdgeFlagPointerEXT IndexPointerEXT NormalPointerEXT TexCoordPointerEXT VertexPointerEXT SpriteParameter[fi]vSGIX ReferencePlaneSGIX IMAGE Bitmap TexImage* PixelMap*v ReadPixels DrawPixels GetTexImage TexSubImage* ConvolutionFilter*EXT SeparableFilter2DEXT GetHistogramEXT ColorTableSGI The set of commands which continue to operate from normal client memory are as follows: CallLists ClipPlane Fog*v Light*v LightModel*v Material*v PolygonStipple TexParameter*v TexEnv*v TexGen*v FeedbackBuffer SelectBuffer Map* GetBooleanv GetClipPlane GetDoublev GetFloatv GetIntegerv GetLight*v GetMap*v GetMaterial*v GetPixelMap*v GetPolygonStipple GetTexEnv*v GetTexGen*v GetTexParameter*v GetTexLevelParameter*v ConvolutionParameter*vEXT GetConvolutionFilter*EXT GetConvolutionParameter*vEXT GetSeparableFilterEXT GetHistogramParameter*vEXT GetMinmaxEXT GetMinmaxParameter*vEXT DetailTexFuncSGIS GetDetailTexFuncSGIS SharpenTexFuncSGIS GetSharpenTexFuncSGIS GetPointervEXT AreTexturesResidentEXT DeleteTexturesEXT GenTexturesEXT PrioritizeTexturesEXT ColorTableParameter[fi]vSGI GetColorTableSGI GetColorTableParameter[fi]vSGI GetTexFilterFuncSGIS TexFilterFuncSGIS PointParameterfvSGIS FogFuncSGIS InstrumentsBufferSGIX PollInstrumentsSGIX DeformationMap3dSGIX GetListParameter[fi]vSGIX ListParameter[fi]vSGIX The list of classes are specified as a bitmask parameter . All commands in a class must be supported. Only the classes specified in the parameter receive special interpretation, the remaining commands continue to use client memory. All commands may be switched back to client memory operation using MEMORY as the parameter. The current address space and class mask may be queried using GetIntegerv with the parameter set to ADDRESS_SPACE. The list of supported classes for a given address space can be determined using GetIntegerv with the parameter set to the address space to be queried. Per-Address Space Client State A separate instance of client state is maintained for each address space for the following state: VERTEX_ARRAY_POINTER_EXT NORMAL_ARRAY_POINTER_EXT COLOR_ARRAY_POINTER_EXT INDEX_ARRAY_POINTER_EXT TEXTURE_COORD_ARRAY_POINTER_EXT EDGE_FLAG_ARRAY_POINTER_EXT Datapipes An OpenGL context can participate in a datapipe connection by binding the OpenGL datapipe head to a datapipe connection. Each OpenGL context supports one or more datapipe heads. A handle to a datapipe head can be obtained using the command Datapipe with the parameter set to one of DATAPIPE_0 through DATAPIPE_3. Datapipe client transfer parameters are specified using OpenGL commands such as PixelStore or glVertexPointerEXT. The OpenGL side of the transfer is completely specified by issuing the OpenGL command which normal causes data transfer, i.e., TexImage2D, but in the case of datapipes the actual data transfer is not initiated until the datapipe transfer command has been issued. If the address space corresponding to the datapipe head is not currently active, then any data transfers using the datapipe head are ignored. When a rendering context is not active, datapipe transfers using that context are ignored. Once a datapipe transfer has been initiated, it will immediately follow all OpenGL commands which preceeded it and it will be followed by OpenGL commands which are issued after the datapipe transfer has been initiated. Said another way, the act of initiating the datapipe transfer is the point at which the OpenGL command is introduced in the OpenGL command stream. One the datapipe transfer has been initiated, the Finish command will block until all OpenGL rendering including the results of the datapipe transfer have completed. If Finish is called before the datapipe transfer is initiated then it as if Finish has been issued but the OpenGL command had not been issued before it. Additions to Chapter 6 of the 1.0 Specification (State and State Requests) None. Additions to the GLX Specification Errors XXX - not complete yet INVALID_OPERATION if the parameter of AddressSpace is not one of MEMORY, DATAPIPE_0, DATAPIPE_1, DATAPIPE_2, or DATAPIPE_3. INVALID_OPERATION if the parameter of AddressSpace includes a class which is not supported for the specified INVALID_VALUE if any bit other than GEOMETRY_BIT or IMAGE_BIT are set in the parameter of AddressSpace. New State XXX - not complete yet None. New Implementation Dependent State XXX - not complete yet None.