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