| 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 <pname> parameters of GetBooleanv, GetIntegerv, | 
 |     GetFloatv, and GetDoublev: | 
 |  | 
 | 	ADDRESS_SPACE		0x???? | 
 | 	ADDRESS_CLASSES		0x???? | 
 | 	DATAPIPE_MAX		0x???? | 
 |  | 
 |     Accepted by the <space> parameter of AddressSpace: | 
 |  | 
 | 	MEMORY			0x???? | 
 |      | 
 |     Accepted by the <space> parameter of AddressSpace and the | 
 |     <space> parameter of DataPipe: | 
 |  | 
 | 	DATAPIPE_0			0x???? | 
 | 	DATAPIPE_1			0x???? | 
 | 	DATAPIPE_2			0x???? | 
 | 	DATAPIPE_3			0x???? | 
 |  | 
 |     Accepted by the <mask> 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 <mask>.  All | 
 |     commands in a class must be supported. Only the classes specified in | 
 |     the <mask> 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 <space> parameter. | 
 |  | 
 |     The current address space and class mask may be queried using GetIntegerv | 
 |     with the <pname> parameter set to ADDRESS_SPACE. | 
 |  | 
 |     The list of supported classes for a given address space can be determined | 
 |     using GetIntegerv with the <pname> 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 <space> 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 <space> parameter of AddressSpace is not one of | 
 |     MEMORY, DATAPIPE_0, DATAPIPE_1, DATAPIPE_2, or DATAPIPE_3. | 
 |  | 
 |     INVALID_OPERATION if the <mask> parameter of AddressSpace includes a | 
 |     class which is not supported for the specified <space> | 
 |  | 
 |     INVALID_VALUE if any bit other than GEOMETRY_BIT or IMAGE_BIT | 
 |     are set in the <mask> parameter of AddressSpace. | 
 |  | 
 | New State | 
 |  | 
 |     XXX - not complete yet | 
 |     None. | 
 |  | 
 | New Implementation Dependent State | 
 |  | 
 |     XXX - not complete yet | 
 |     None. |