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.
