15bd8deadSopenharmony_ciXXX - Not complete yet!!!
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ciName
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ci    SGIX_pixel_tiles
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ciName Strings
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ci    GL_SGIX_pixel_tiles
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ciVersion
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ci    $Date: 1995/07/27 17:34:55 $ $Revision: 1.3 $
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ciNumber
165bd8deadSopenharmony_ci
175bd8deadSopenharmony_ci    46
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ciDependencies
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ci    EXT_texture3D affects the definition of this extension
225bd8deadSopenharmony_ci    EXT_subtexture affects the definition of this extension
235bd8deadSopenharmony_ci    EXT_convolution is required
245bd8deadSopenharmony_ci    EXT_texture4D affects the definition of this extension
255bd8deadSopenharmony_ci
265bd8deadSopenharmony_ciOverview
275bd8deadSopenharmony_ci
285bd8deadSopenharmony_ci    This extension deals with the interaction of existing GL functions that
295bd8deadSopenharmony_ci    read pixels from memory, applications that use grids of tiles of pixels, 
305bd8deadSopenharmony_ci    and convolution.
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ci    Applications that deal with large multi-dimensional images sometimes
335bd8deadSopenharmony_ci    break the image into a grid of rectangular tiles of pixels. Such an
345bd8deadSopenharmony_ci    approach can help control memory use and expedite roaming through an 
355bd8deadSopenharmony_ci    image that is large with respect to the available memory. 
365bd8deadSopenharmony_ci
375bd8deadSopenharmony_ci    GL functions that cause pixels to be read from memory (e.g., DrawPixels 
385bd8deadSopenharmony_ci    and TexImage2D) assume the pixels are stored as a single series of rows
395bd8deadSopenharmony_ci    of pixels. The grid of tiles is essentially a sequence of the structures
405bd8deadSopenharmony_ci    that the pixel reading functions assume. When an application that uses
415bd8deadSopenharmony_ci    tiling uses a GL function such as DrawPixels, it must iterate
425bd8deadSopenharmony_ci    through the tiles, either coalescing the tiles into a single tile in
435bd8deadSopenharmony_ci    preparation for a single GL call or calling the GL function for each tile.
445bd8deadSopenharmony_ci
455bd8deadSopenharmony_ci    The convolution operation imposes strict ordering on the way pixels
465bd8deadSopenharmony_ci    in a subimage that crosses tile boundaries must be transferred: the rows 
475bd8deadSopenharmony_ci    of pixels transferred must span the entire subimage. Applications 
485bd8deadSopenharmony_ci    that use tiles of pixels and convolution must copy the subimage to be 
495bd8deadSopenharmony_ci    transferred from the grid of tiles to a contiguous region, then pass the
505bd8deadSopenharmony_ci    now-contiguous rows of pixels to the convolution function. If the
515bd8deadSopenharmony_ci    coalescing of tiles is not needed for some other reason or is not a 
525bd8deadSopenharmony_ci    side effect of some necessary operation, it is just redundant movement 
535bd8deadSopenharmony_ci    of the pixels.
545bd8deadSopenharmony_ci
555bd8deadSopenharmony_ci    This extension seeks to eliminate the extra copy of data by extending the 
565bd8deadSopenharmony_ci    existing GL functions to accept, as a source of pixels in memory, a 
575bd8deadSopenharmony_ci    grid of tiles of pixels in addition to the current sequence of rows 
585bd8deadSopenharmony_ci    of pixels.
595bd8deadSopenharmony_ci
605bd8deadSopenharmony_ci    
615bd8deadSopenharmony_ciIssues
625bd8deadSopenharmony_ci
635bd8deadSopenharmony_ci    * This extension is currently defined for 1 to 4 dimensions. Convolution 
645bd8deadSopenharmony_ci      is the driving force for this extension, yet is defined for only 1 and 
655bd8deadSopenharmony_ci      2 dimensions. Should we remove support in this extension for 3 and 4
665bd8deadSopenharmony_ci      dimensions (until it exists in a convolution extension)? Should we
675bd8deadSopenharmony_ci      consider confining the extension to only 2 dimensions?
685bd8deadSopenharmony_ci
695bd8deadSopenharmony_ci    * We anticipate accelerators for moving pixels around in various
705bd8deadSopenharmony_ci      implementations. What is the right way to communicate information
715bd8deadSopenharmony_ci      between an application and the underlying acceleration
725bd8deadSopenharmony_ci      code/hardware? We believe that memory alignment will be important, 
735bd8deadSopenharmony_ci      as will some sort of caching. What else should be considered?
745bd8deadSopenharmony_ci      Are there better ways to express the information?
755bd8deadSopenharmony_ci
765bd8deadSopenharmony_ci    * gluScaleImage, gluBuild1DMipmaps, and gluBuild2DMipmaps could be
775bd8deadSopenharmony_ci      handled similarly in an associated extension. Should this happen?
785bd8deadSopenharmony_ci
795bd8deadSopenharmony_ci    * Should EXT_color_table affect this extension? It does have some
805bd8deadSopenharmony_ci      DrawPixel-like semantics.
815bd8deadSopenharmony_ci
825bd8deadSopenharmony_ciReasoning
835bd8deadSopenharmony_ci
845bd8deadSopenharmony_ci    * It is desirable to try to accelerate the GL pixel transfer operations 
855bd8deadSopenharmony_ci      with special hardware or highly optimized code. Imaging applications 
865bd8deadSopenharmony_ci      tend to lose the intended benefit of these optimizations in cases where 
875bd8deadSopenharmony_ci      tiles of pixels are used; significant amounts of time are spent 
885bd8deadSopenharmony_ci      repackaging data to correspond to the GL model and comply with the 
895bd8deadSopenharmony_ci      constraints of convolution. Since support for imaging applications was 
905bd8deadSopenharmony_ci      a primary impetus for the convolution extension, it seems appropriate 
915bd8deadSopenharmony_ci      to extend the model of pixel storage to also support imaging 
925bd8deadSopenharmony_ci      applications.
935bd8deadSopenharmony_ci
945bd8deadSopenharmony_ci    * For symmetry in the GL interface it would be reasonable to have 
955bd8deadSopenharmony_ci      this extension cover the storage layout of both source and destination
965bd8deadSopenharmony_ci      pixels. The assymmetry exists because we are only concerned with 
975bd8deadSopenharmony_ci      sources that will be undergoing convolution. A tiled destination 
985bd8deadSopenharmony_ci      that results from convolution can be filled tile by tile.
995bd8deadSopenharmony_ci    
1005bd8deadSopenharmony_ci    * All the state in this extension is located in the client side. This
1015bd8deadSopenharmony_ci      helps constrain the scope of the extension. No GLX protocol or server
1025bd8deadSopenharmony_ci      side changes need to be made.
1035bd8deadSopenharmony_ci
1045bd8deadSopenharmony_ciNew Procedures and Functions
1055bd8deadSopenharmony_ci
1065bd8deadSopenharmony_ci    None
1075bd8deadSopenharmony_ci
1085bd8deadSopenharmony_ciNew Tokens
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ci    Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,
1115bd8deadSopenharmony_ci    GetFloatv, and GetDoublev:
1125bd8deadSopenharmony_ci
1135bd8deadSopenharmony_ci        PIXEL_TILE_BEST_ALIGNMENT_SGIX
1145bd8deadSopenharmony_ci        PIXEL_TILE_CACHE_INCREMENT_SGIX
1155bd8deadSopenharmony_ci
1165bd8deadSopenharmony_ci    Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,
1175bd8deadSopenharmony_ci    GetFloatv, GetDoublev, PixelStoref, and PixelStorei:
1185bd8deadSopenharmony_ci
1195bd8deadSopenharmony_ci        PIXEL_TILE_WIDTH_SGIX
1205bd8deadSopenharmony_ci        PIXEL_TILE_HEIGHT_SGIX
1215bd8deadSopenharmony_ci        PIXEL_TILE_GRID_WIDTH_SGIX
1225bd8deadSopenharmony_ci        PIXEL_TILE_GRID_HEIGHT_SGIX
1235bd8deadSopenharmony_ci        PIXEL_TILE_GRID_DEPTH_SGIX
1245bd8deadSopenharmony_ci        PIXEL_TILE_CACHE_SIZE_SGIX
1255bd8deadSopenharmony_ci
1265bd8deadSopenharmony_ciAdditions to Chapter 2 of the 1.0 Specification (OpenGL Operation)
1275bd8deadSopenharmony_ci
1285bd8deadSopenharmony_ci    None
1295bd8deadSopenharmony_ci
1305bd8deadSopenharmony_ciAdditions to Chapter 3 of the 1.0 Specification (Rasterization)
1315bd8deadSopenharmony_ci
1325bd8deadSopenharmony_ci    The pixel storage modes are augmented to support 3D and 4D image formats 
1335bd8deadSopenharmony_ci    in memory as well as this extension. Table 3.1 is replaced with the table 
1345bd8deadSopenharmony_ci    below:
1355bd8deadSopenharmony_ci
1365bd8deadSopenharmony_ci        Parameter Name               Type        Initial Value   Valid Range
1375bd8deadSopenharmony_ci        --------------               ----        -------------   -----------
1385bd8deadSopenharmony_ci        UNPACK_SWAP_BYTES            boolean     FALSE           TRUE/FALSE
1395bd8deadSopenharmony_ci        UNPACK_LSB_FIRST             boolean     FALSE           TRUE/FALSE
1405bd8deadSopenharmony_ci        UNPACK_ROW_LENGTH            integer     0               [0, infinity]
1415bd8deadSopenharmony_ci        UNPACK_SKIP_ROWS             integer     0               [0, infinity]
1425bd8deadSopenharmony_ci        UNPACK_SKIP_PIXELS           integer     0               [0, infinity]
1435bd8deadSopenharmony_ci        UNPACK_ALIGNMENT             integer     4               1, 2, 4, 8
1445bd8deadSopenharmony_ci        UNPACK_IMAGE_HEIGHT_EXT      integer     0               [0, infinity]
1455bd8deadSopenharmony_ci        UNPACK_SKIP_IMAGES_EXT       integer     0               [0, infinity]
1465bd8deadSopenharmony_ci        UNPACK_IMAGE_DEPTH_SGIS      integer     0               [0, infinity]
1475bd8deadSopenharmony_ci        UNPACK_SKIP_VOLUMES_SGIS     integer     0               [0, infinity]
1485bd8deadSopenharmony_ci        PIXEL_TILE_WIDTH_SGIX        integer     0               [0, infinity]
1495bd8deadSopenharmony_ci        PIXEL_TILE_HEIGHT_SGIX       integer     0               [0, infinity]
1505bd8deadSopenharmony_ci        PIXEL_TILE_GRID_WIDTH_SGIX   integer     0               [0, infinity]
1515bd8deadSopenharmony_ci        PIXEL_TILE_GRID_HEIGHT_SGIX  integer     0               [0, infinity]
1525bd8deadSopenharmony_ci        PIXEL_TILE_GRID_DEPTH_SGIX   integer     0               [0, infinity]
1535bd8deadSopenharmony_ci        PIXEL_TILE_CACHE_SIZE_SGIX   integer     impl. dep.      [0, infinity]
1545bd8deadSopenharmony_ci
1555bd8deadSopenharmony_ci        Table 3.1: PixelStore parameters pertaining to one or more of
1565bd8deadSopenharmony_ci        DrawPixels, TexImage1D, TexImage2D, TexImage3DEXT, TexImage4DSGIS,
1575bd8deadSopenharmony_ci        TexSubImage1DEXT, TexSubImage2DEXT, TexSubImage3DEXT, and
1585bd8deadSopenharmony_ci        TexSubImage4DSGIS.
1595bd8deadSopenharmony_ci
1605bd8deadSopenharmony_ci    Section 3.6.3, starting with the third paragraph in the UNPACKING
1615bd8deadSopenharmony_ci    section and continuing to the paragraph beginning with "Calling 
1625bd8deadSopenharmony_ci    DrawPixels with a type of BITMAP" is changed to read:
1635bd8deadSopenharmony_ci
1645bd8deadSopenharmony_ci    Groups held in memory as the source for a transfer operation can
1655bd8deadSopenharmony_ci    be in one of two formats: as groups arranged in a single rectangle, or 
1665bd8deadSopenharmony_ci    as groups arranged in a grid of rectangles (or tiles). The method of
1675bd8deadSopenharmony_ci    storage is indicated by the state of PIXEL_TILE_GRID_WIDTH_SGIX. If 
1685bd8deadSopenharmony_ci    PIXEL_TILE_GRID_WIDTH_SGIX is greater than 0, the image is contained in 
1695bd8deadSopenharmony_ci    a grid of tiles. If less than or equal to 0, the source is a single 
1705bd8deadSopenharmony_ci    rectangle.
1715bd8deadSopenharmony_ci
1725bd8deadSopenharmony_ci    UNPACKING A SINGLE RECTANGLE
1735bd8deadSopenharmony_ci    ============================
1745bd8deadSopenharmony_ci
1755bd8deadSopenharmony_ci    When groups in memory are treated as being arranged in a rectangle, the
1765bd8deadSopenharmony_ci    rectangle consists of a series of rows, with the first element of the
1775bd8deadSopenharmony_ci    first group of the first row pointed to by the pointer passed to
1785bd8deadSopenharmony_ci    DrawPixels. If the value of UNPACK_ROW_LENGTH is not positive, then the
1795bd8deadSopenharmony_ci    number of groups in a row is width; otherwise the number of groups is
1805bd8deadSopenharmony_ci    UNPACK_ROW_LENGTH. If the first element of a row is at location p in 
1815bd8deadSopenharmony_ci    memory, then the location of the first element of the Nth row is obtained
1825bd8deadSopenharmony_ci    by skipping
1835bd8deadSopenharmony_ci
1845bd8deadSopenharmony_ci                              p + Nk
1855bd8deadSopenharmony_ci
1865bd8deadSopenharmony_ci    where N is the row number (counting from zero) and k is defined as
1875bd8deadSopenharmony_ci
1885bd8deadSopenharmony_ci                             / nl                   s>=a,
1895bd8deadSopenharmony_ci                        k = <
1905bd8deadSopenharmony_ci                             \ a/s ceiling(snl/a)   s<a
1915bd8deadSopenharmony_ci
1925bd8deadSopenharmony_ci    where n is the number of elements in a group, l is the number of groups 
1935bd8deadSopenharmony_ci    in the row, a is the value of UNPACK_ALIGNMENT, and s is the size, in
1945bd8deadSopenharmony_ci    units of GL ubytes, of an element. If the number of bits per element
1955bd8deadSopenharmony_ci    is not 1, 2, 4, or 8 times the number of bits in a GL ubyte, then 
1965bd8deadSopenharmony_ci    k = nl for all values of a.
1975bd8deadSopenharmony_ci
1985bd8deadSopenharmony_ci    There is a mechanism for selecting a subrectangle of groups from a 
1995bd8deadSopenharmony_ci    larger containing rectangle. This mechanism relies on three integer
2005bd8deadSopenharmony_ci    parameters: UNPACK_ROW_LENGTH, UNPACK_SKIP_ROWS, and UNPACK_SKIP_PIXELS.
2015bd8deadSopenharmony_ci    Before obtaining the first group from memory, the pointer supplied to 
2025bd8deadSopenharmony_ci    DrawPixels is effectively advanced by (UNPACK_SKIP_PIXELS)n + 
2035bd8deadSopenharmony_ci    (UNPACK_SKIP_ROWS)k elements. Then width groups are obtained from 
2045bd8deadSopenharmony_ci    contiguous elements in memory (without advancing the pointer), after
2055bd8deadSopenharmony_ci    which the pointer is advanced by k elements. height sets of width groups
2065bd8deadSopenharmony_ci    of values are obtained this way. See Figure 3.8.
2075bd8deadSopenharmony_ci
2085bd8deadSopenharmony_ci
2095bd8deadSopenharmony_ci    UNPACKING PIXEL TILES
2105bd8deadSopenharmony_ci    =====================
2115bd8deadSopenharmony_ci
2125bd8deadSopenharmony_ci                    |<- TW ->|
2135bd8deadSopenharmony_ci                    |<---------- Grid Width ----------->|
2145bd8deadSopenharmony_ci
2155bd8deadSopenharmony_ci            --  --  +--------+--------+--------+--------+
2165bd8deadSopenharmony_ci            G       |        |        |        |        |
2175bd8deadSopenharmony_ci            r   TH  |      +-+--------+--------+--+     |
2185bd8deadSopenharmony_ci            i       |t8    | |t9      |t10     |t11     |
2195bd8deadSopenharmony_ci            d   --  +------+-+--------+--------+--+-----+
2205bd8deadSopenharmony_ci                    |      | |        |        |  |     |
2215bd8deadSopenharmony_ci            H       |      | |        |        |  |     |
2225bd8deadSopenharmony_ci            e       |t4    | |t5      |t6      |t7|     |
2235bd8deadSopenharmony_ci            i       +------+-+--------+--------+--+-----+
2245bd8deadSopenharmony_ci            g       |      | |        |        |  |     |
2255bd8deadSopenharmony_ci            h   --  |<-SP->+-+--------+--------+--+     |
2265bd8deadSopenharmony_ci            t   SR  |t0      |t1      |t2      |t3      |
2275bd8deadSopenharmony_ci            --  --  +--------+--------+--------+--------+
2285bd8deadSopenharmony_ci
2295bd8deadSopenharmony_ci      Figure 3.8.a???. Selecting a subimage from a tiled image source.
2305bd8deadSopenharmony_ci                  TW -> PIXEL_TILE_WIDTH_SGIX
2315bd8deadSopenharmony_ci                  TH -> PIXEL_TILE_HEIGHT_SGIX
2325bd8deadSopenharmony_ci                  SR -> UNPACK_SKIP_ROWS
2335bd8deadSopenharmony_ci                  SP -> UNPACK_SKIP_PIXELS
2345bd8deadSopenharmony_ci                  Grid Width  -> PIXEL_TILE_GRID_WIDTH_SGIX
2355bd8deadSopenharmony_ci                  Grid Height -> PIXEL_TILE_GRID_HEIGHT_SGIX
2365bd8deadSopenharmony_ci
2375bd8deadSopenharmony_ci
2385bd8deadSopenharmony_ci    When groups are held in memory as a grid of tiles, the image rectangle 
2395bd8deadSopenharmony_ci    consists of a series of rows of rectangular tiles. See Figure 3.8.a???. 
2405bd8deadSopenharmony_ci    Each tile consists of a series of tile rows. A row of the image will
2415bd8deadSopenharmony_ci    cross all tiles in a row of the grid. Unlike the single rectangle 
2425bd8deadSopenharmony_ci    method for holding groups in memory, the number of groups in a row of 
2435bd8deadSopenharmony_ci    the tiled image is defined as PIXEL_TILE_WIDTH_SGIX * 
2445bd8deadSopenharmony_ci    PIXEL_TILE_GRID_WIDTH_SGIX, where PIXEL_TILE_WIDTH_SGIX is the number
2455bd8deadSopenharmony_ci    of groups in a row of a single tile and PIXEL_TILE_GRID_WIDTH_SGIX is
2465bd8deadSopenharmony_ci    the number of tiles in the width of the image. UNPACK_ROW_LENGTH is 
2475bd8deadSopenharmony_ci    ignored when using pixel tiles.
2485bd8deadSopenharmony_ci
2495bd8deadSopenharmony_ci    Groups are arranged within a single tile exactly as described above for
2505bd8deadSopenharmony_ci    groups arranged in a single rectangle. The computation of the 
2515bd8deadSopenharmony_ci    starting address of a row within a tile is also the same. The method
2525bd8deadSopenharmony_ci    for computing the starting address of a row in the image is to first 
2535bd8deadSopenharmony_ci    establish the row of tiles in the grid containing the row of groups in 
2545bd8deadSopenharmony_ci    the image, then to locate the address of the row within the tile. The 
2555bd8deadSopenharmony_ci    index of the first tile that contains the row can be computed as:
2565bd8deadSopenharmony_ci
2575bd8deadSopenharmony_ci                             index = n * floor(r/h)
2585bd8deadSopenharmony_ci
2595bd8deadSopenharmony_ci    where index is the (0-based) index of the tile, n is the number of tiles
2605bd8deadSopenharmony_ci    across the image, PIXEL_TILE_GRID_WIDTH_SGIX, r is the (0-based) group
2615bd8deadSopenharmony_ci    row number, and h is the number of rows per tile, PIXEL_TILE_HEIGHT_SGIX.
2625bd8deadSopenharmony_ci    The starting address within each of the tiles in the row across the 
2635bd8deadSopenharmony_ci    image is computed as defined in the simple rectangle case, but using a 
2645bd8deadSopenharmony_ci    row number that is the original row number modulo the number of rows 
2655bd8deadSopenharmony_ci    per tile, PIXEL_TILE_HEIGHT_SGIX.
2665bd8deadSopenharmony_ci    
2675bd8deadSopenharmony_ci    That groups are being held in memory as a grid of tiles is indicated 
2685bd8deadSopenharmony_ci    by PIXEL_TILE_GRID_WIDTH_SGIX containing a value greater than 0.
2695bd8deadSopenharmony_ci    The <pixels> parameter of DrawPixels, TexImage1D, TexImage2D, 
2705bd8deadSopenharmony_ci    TexImage3DEXT, TexImage4DSGIS, TexSubImage1DEXT, TexSubImage2DEXT, 
2715bd8deadSopenharmony_ci    TexSubImage3DEXT, or TexSubImage4DSGIS is a pointer to a vector of 
2725bd8deadSopenharmony_ci    starting addresses for each of the tiles. 
2735bd8deadSopenharmony_ci
2745bd8deadSopenharmony_ci    When transferring a subimage from the grid of tiles, a complete row of
2755bd8deadSopenharmony_ci    groups crossing the entire subimage is transferred before the first
2765bd8deadSopenharmony_ci    group of the next subimage row is transferred. Thus, for a subimage that
2775bd8deadSopenharmony_ci    crosses tiles, the sequence of groups transferred will be 
2785bd8deadSopenharmony_ci    indistinguishable from the sequence that would have occurred had the 
2795bd8deadSopenharmony_ci    subimage been taken from a simple rectangular image. 
2805bd8deadSopenharmony_ci 
2815bd8deadSopenharmony_ci    For 1-dimensional transfers, such as those of TexImage1D, and
2825bd8deadSopenharmony_ci    TexSubImage1DEXT, PIXEL_TILE_GRID_WIDTH_SGIX must be set to a non-zero
2835bd8deadSopenharmony_ci    positive value indicating pixel tiles are being used and
2845bd8deadSopenharmony_ci    PIXEL_TILE_WIDTH_SGIX must be set to a positive value indicating the 
2855bd8deadSopenharmony_ci    tile width.
2865bd8deadSopenharmony_ci
2875bd8deadSopenharmony_ci    For 2-dimensional transfers, such as those of DrawPixels, TexImage2D, and
2885bd8deadSopenharmony_ci    TexSubImage2DEXT, PIXEL_TILE_GRID_WIDTH_SGIX must be set to a non-zero
2895bd8deadSopenharmony_ci    positive value indicating both that pixel tiles are being used and the 
2905bd8deadSopenharmony_ci    number of tiles in width of the image. PIXEL_TILE_WIDTH_SGIX and 
2915bd8deadSopenharmony_ci    PIXEL_TILE_HEIGHT_SGIX must be set to positive values indicating 
2925bd8deadSopenharmony_ci    the tile width and height (in groups), respectively.
2935bd8deadSopenharmony_ci
2945bd8deadSopenharmony_ci    3-dimensional transfers, such as those of TexImage3DEXT and 
2955bd8deadSopenharmony_ci    TexSubImage3DEXT, additionally require the specification of a 
2965bd8deadSopenharmony_ci    positive value for PIXEL_TILE_GRID_HEIGHT_SGIX. The value of 
2975bd8deadSopenharmony_ci    UNPACK_IMAGE_HEIGHT_EXT is ignored. A 3-dimensional space is stored as
2985bd8deadSopenharmony_ci    a series of 2-dimensional images. The index of the first tile in the
2995bd8deadSopenharmony_ci    Nth image is N * PIXEL_TILE_GRID_WIDTH_SGIX * 
3005bd8deadSopenharmony_ci    PIXEL_TILE_GRID_HEIGHT_SGIX.
3015bd8deadSopenharmony_ci
3025bd8deadSopenharmony_ci    4-dimensional transfers, such as those of  TexImage4DSGIS and
3035bd8deadSopenharmony_ci    TexSubImage4DSGIS, additionally require the specification of a 
3045bd8deadSopenharmony_ci    positive value for PIXEL_TILE_GRID_DEPTH_SGIX. The value of 
3055bd8deadSopenharmony_ci    UNPACK_IMAGE_DEPTH_SGIS is ignored. The 4-dimensional space is stored as
3065bd8deadSopenharmony_ci    a series of 3-dimensional volumes. The index of the first tile in the
3075bd8deadSopenharmony_ci    Nth volume is N * PIXEL_TILE_GRID_WIDTH_SGIX * 
3085bd8deadSopenharmony_ci    PIXEL_TILE_GRID_HEIGHT_SGIX * PIXEL_TILE_GRID_DEPTH_SGIX.
3095bd8deadSopenharmony_ci
3105bd8deadSopenharmony_ci    Some implementation-dependent pixel storage state is included to help
3115bd8deadSopenharmony_ci    accelerate pixel transfers. PIXEL_TILE_BEST_ALIGNMENT_SGIX provides
3125bd8deadSopenharmony_ci    the optimal memory alignment for the starting address of pixel tiles. 
3135bd8deadSopenharmony_ci    Anticipated acceleration schemes depend on the caching of information
3145bd8deadSopenharmony_ci    from previous transfers to try to accelerate new transfers. The
3155bd8deadSopenharmony_ci    particular resource needed to accelerate the transfer (e.g., locked
3165bd8deadSopenharmony_ci    user memory) may be limited or particularly valuable to a user.
3175bd8deadSopenharmony_ci    Two pixel store values, PIXEL_TILE_CACHE_INCREMENT_SGIX and 
3185bd8deadSopenharmony_ci    PIXEL_TILE_CACHE_SIZE_SGIX, are provided to give the user some control
3195bd8deadSopenharmony_ci    over the amount of the resource in use. PIXEL_TILE_CACHE_SIZE_SGIX is
3205bd8deadSopenharmony_ci    a variable that indicates the current amount of the caching resource in 
3215bd8deadSopenharmony_ci    use. It is settable to some set of discrete values. If the user attempts 
3225bd8deadSopenharmony_ci    to set PIXEL_TILE_CACHE_SIZE_SGIX to some value that is not in the set, 
3235bd8deadSopenharmony_ci    the variable will actually be set to the nearest acceptable value. Setting
3245bd8deadSopenharmony_ci    the variable to 0 will turn any caching off and release the resource.
3255bd8deadSopenharmony_ci    PIXEL_TILE_CACHE_INCREMENT_SGIX is a gettable value that indicates the
3265bd8deadSopenharmony_ci    approximate change in cache size from the current value to the next 
3275bd8deadSopenharmony_ci    larger acceptable value.    
3285bd8deadSopenharmony_ci
3295bd8deadSopenharmony_ci    BITMAP
3305bd8deadSopenharmony_ci    ======
3315bd8deadSopenharmony_ci
3325bd8deadSopenharmony_ciAdditions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations
3335bd8deadSopenharmony_ciand the Framebuffer)
3345bd8deadSopenharmony_ci
3355bd8deadSopenharmony_ci    None
3365bd8deadSopenharmony_ci
3375bd8deadSopenharmony_ciAdditions to Chapter 5 of the 1.0 Specification (Special Functions)
3385bd8deadSopenharmony_ci
3395bd8deadSopenharmony_ci    None
3405bd8deadSopenharmony_ci
3415bd8deadSopenharmony_ciAdditions to Chapter 6 of the 1.0 Specification (State and State Requests)
3425bd8deadSopenharmony_ci
3435bd8deadSopenharmony_ci    None
3445bd8deadSopenharmony_ci
3455bd8deadSopenharmony_ciAdditions to the GLX Specification
3465bd8deadSopenharmony_ci
3475bd8deadSopenharmony_ci    None
3485bd8deadSopenharmony_ci
3495bd8deadSopenharmony_ciDependencies on EXT_texture3D
3505bd8deadSopenharmony_ci
3515bd8deadSopenharmony_ci    If EXT_texture3D is not supported, this extension does not support 3
3525bd8deadSopenharmony_ci    and 4 dimensions, all discussion of 3 and 4 dimensions is void, references
3535bd8deadSopenharmony_ci    to the function TexImage3DEXT are removed, and the following tokens are 
3545bd8deadSopenharmony_ci    no longer defined:
3555bd8deadSopenharmony_ci
3565bd8deadSopenharmony_ci        PIXEL_TILE_GRID_HEIGHT_SGIX
3575bd8deadSopenharmony_ci        PIXEL_TILE_GRID_DEPTH_SGIX
3585bd8deadSopenharmony_ci
3595bd8deadSopenharmony_ciDependencies on EXT_subtexture
3605bd8deadSopenharmony_ci
3615bd8deadSopenharmony_ci    If EXT_subtexture is not supported, references to TexSubImage1DEXT, 
3625bd8deadSopenharmony_ci    TexSubImage2DEXT, and TexSubImage3DEXT are removed from this extension.
3635bd8deadSopenharmony_ci
3645bd8deadSopenharmony_ciDependencies on EXT_convolution
3655bd8deadSopenharmony_ci
3665bd8deadSopenharmony_ci    This extension requires EXT_convolution. If the EXT_convolution is
3675bd8deadSopenharmony_ci    not supported, this extension is unnecessary.
3685bd8deadSopenharmony_ci
3695bd8deadSopenharmony_ciDependencies on EXT_texture4D
3705bd8deadSopenharmony_ci
3715bd8deadSopenharmony_ci    If EXT_texture4D is not supported, this extension does not support 4
3725bd8deadSopenharmony_ci    dimensions, all discussion of 4 dimensions is void, references to the
3735bd8deadSopenharmony_ci    functions TexImage4DSGIS and TexSubImage4DSGIS are removed, and the 
3745bd8deadSopenharmony_ci    following token is no longer defined:
3755bd8deadSopenharmony_ci
3765bd8deadSopenharmony_ci        PIXEL_TILE_GRID_DEPTH_SGIX
3775bd8deadSopenharmony_ci
3785bd8deadSopenharmony_ciGLX Protocol
3795bd8deadSopenharmony_ci
3805bd8deadSopenharmony_ci    None
3815bd8deadSopenharmony_ci
3825bd8deadSopenharmony_ciErrors
3835bd8deadSopenharmony_ci
3845bd8deadSopenharmony_ci    GL_INVALID_OPERATION is generated by DrawPixels, TexImage1D, TexImage2D, 
3855bd8deadSopenharmony_ci    TexImage3DEXT, TexImage4DSGIS, TexSubImage1DEXT, TexSubImage2DEXT, 
3865bd8deadSopenharmony_ci    TexSubImage3DEXT, or TexSubImage4DSGIS if the groups are to be read from
3875bd8deadSopenharmony_ci    pixel tiles and the specified size of the grid of pixel tiles is 
3885bd8deadSopenharmony_ci    insufficient to hold the specified subimage.
3895bd8deadSopenharmony_ci
3905bd8deadSopenharmony_ciNew State
3915bd8deadSopenharmony_ci
3925bd8deadSopenharmony_ci    Get Value                           Get Command     Type    Value   Attrib
3935bd8deadSopenharmony_ci    ---------                           -----------     ----    ------- ------
3945bd8deadSopenharmony_ci    PIXEL_TILE_WIDTH_SGIX		GetIntegerv     Z+      0       client
3955bd8deadSopenharmony_ci    PIXEL_TILE_HEIGHT_SGIX		GetIntegerv     Z+      0       client
3965bd8deadSopenharmony_ci    PIXEL_TILE_GRID_WIDTH_SGIX		GetIntegerv     Z+      0       client
3975bd8deadSopenharmony_ci    PIXEL_TILE_GRID_HEIGHT_SGIX		GetIntegerv     Z+      0       client
3985bd8deadSopenharmony_ci    PIXEL_TILE_GRID_DEPTH_SGIX		GetIntegerv     Z+      0       client
3995bd8deadSopenharmony_ci 
4005bd8deadSopenharmony_ciNew Implementation Dependent State
4015bd8deadSopenharmony_ci
4025bd8deadSopenharmony_ci    Get Value                           Get Command     Type    Attrib
4035bd8deadSopenharmony_ci    ---------                           -----------     ----    ------
4045bd8deadSopenharmony_ci    PIXEL_TILE_BEST_ALIGNMENT_SGIX      GetIntegerv     Z+      client
4055bd8deadSopenharmony_ci    PIXEL_TILE_CACHE_INCREMENT_SGIX     GetIntegerv     Z+      client
4065bd8deadSopenharmony_ci    PIXEL_TILE_CACHE_SIZE_SGIX          GetIntegerv     Z+      client
4075bd8deadSopenharmony_ci
4085bd8deadSopenharmony_ci
409