blob: 62c8f4b4767e249d6e067750592b7fcf9a472e5a [file] [log] [blame]
XXX - Not complete.
Name
SGIX_slim
Name Strings
GL_SGIX_slim
Version
$Date: 1998/08/03 19:03:02 $ $Revision: 1.11 $
Number
???
Dependencies
This extension depends on the ycrcbformat, and subsample extensions.
Overview
This extension defines a mechanism to draw and read SLIM (Rice)
compressed images. SLIM is a lossless compression technique
derived from a scheme developed by Robert F. Rice, Pen-Shu Yeh,
and Warner Miller. The scheme works well on data (images)
composed of relatively small integers, 8-12 bits. The specifics
of the algorithm used in OpenGL are not included in this spec.
If the extension were made public we would have to include such
a specification. SLIM supports 8, 10, and 12 bit components,
one to four components per pixel, and two alternative component
samplings beyond uniform (422 and 4224). NOTE: that for
compatibility reasons the older Rice format images will also be
supported.
The specification of color space and component subsampling is
accomplished through the subsample and ycrcbformat extensions.
SLIM compression is specified through the <type> parameter to
DrawPixels, ReadPixels. Six data types are supported,
corresponding to unsigned 8 and 10 bit components, and signed
12 bit components (SLIM8U_SGIX, SLIM10U_SGIX, SLIM12S_SGIX, and
RICE8U_SGIX, RICE10U_SGIX, RICE12S_SGIX). PixelStore
parameters are used to specify and query compressed image
size.
Issues
- The SLIM/RICE compression/decompression algorithm is not
defined/described in this extension.
- Rice now shows up explicitly as an input <type> is that a
problem? This is a person (Robert Rice).
- Do we really need a header to store the image size? Could
this be passed as a separate parameter?
A: We looked into passing the sizes as pixel storage
parameters, but ran into problems with the async extension.
If the size is GL state, it's difficult to come up with an
implementation-friendly spec for when the state is updated.
Also it's difficult to allow more than one asynchronous read
outstanding in this case. Putting the data in a header has
the advantage that it keeps the length associated with
the image data automatically.
New Procedures and
Functions
None.
New Tokens
Accepted by the <pname> parameter of PixelStoref, PixelStorei,
GetBooleanv, GetIntegerv, GetFloatv and GetDoublev:
PACK_MAX_COMPRESSED_SIZE_SGIX 0x831B
Accepted by the <type> parameter of all routines which take
one or two dimensional color pixel data from client memory or
write it to client memory including DrawPixels, ReadPixels,
TexImage2D, GetTexImage2D, GetHistogramEXT, GetMinmaxEXT,
ConvolutionFilter2DEXT, and ColorTableSGI:
SLIM8U_SGIX 0x831D
SLIM10U_SGIX 0x831E
SLIM12S_SGIX 0x831F
RICE8U_SGIX
RICE10U_SGIX
RICE12S_SGIX
Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation)
None.
Additions to Chapter 3 of the 1.1 Specification (Rasterization)
3.6.3 Rasterization of Pixel Rectangles
The SLIM/RICE <type>s are added to Table 3.4:
<type> Parameter Corresponding Special
Token Value GL Data Type Interpretation
---------------- ------------- --------------
UNSIGNED_BYTE ubyte No
BYTE byte No
UNSIGNED_SHORT ushort No
SHORT short No
UNSIGNED_INT uint No
INT int No
FLOAT float No
BITMAP ubyte Yes
UNSIGNED_BYTE_3_3_2_EXT ubyte Yes
UNSIGNED_SHORT_4_4_4_4_EXT ushort Yes
UNSIGNED_SHORT_5_5_5_1_EXT ushort Yes
UNSIGNED_INT_8_8_8_8_EXT uint Yes
UNSIGNED_INT_10_10_10_2_EXT uint Yes
SLIM8U_SGIX float Yes
SLIM10U_SGIX float Yes
SLIM12S_SGIX float Yes
RICE8U_SGIX float Yes
RICE10U_SGIX float Yes
RICE12S_SGIX float Yes
<Before the Unpacking section>
Decompression
This step only applies if the <type> parameter to DrawPixels
is set to one of SLIM8U_SGIX, SLIM10U_SGIX, SLIM12S_SGIX,
RICE8U_SGIX, RICE10U_SGIX, or RICE12S_SGIX. These types
indicate that the image is compressed using SLIM or Rice
compression, respectively. The images are stored as a header
containing a GLsizei value giving the length of compressed
image in bytes followed by the compressed image data. For
correct operation, the data pointer passed to DrawPixels must
obey any alignment restrictions imposed by the host
architecture on the GLsizei data type. If the data is not
correctly aligned, the results are undefined. (This
restriction is analogous to the restriction tacitly placed on
the image pointer passed to DrawPixels when the type is INT.
The GL implementation must be able to dereference the pointer
as a GLint value without getting a bus error.) If the width
or height argument is zero, the data pointer is not
dereferenced and so a NULL pointer may be passed in.
The compressed byte stream is passed to the GL and interpreted
as defined by the <type>, and <format> parameters to
DrawPixels, and the UNPACK_SAMPLING_SGIX parameter to
PixelStore. The width of the image represented by the byte
stream is determined by UNPACK_ROW_LENGTH, if it is positive,
and the <width> parameter to DrawPixels, otherwise. The
height of the image represented by the byte stream is
determined by UNPACK_IMAGE_HEIGHT_EXT, if it is positive, and
the <height> parameter to DrawPixels, otherwise.
?? since we don't support subimage should the UNPACK parameters
be ignored??
If the PixelStore parameters UNPACK_ROW_LENGTH,
UNPACK_SKIP_ROWS, and UNPACK_SKIP_PIXELS, and the DrawPixel
parameters <width> and <height> indicate that a sub-image is to
be drawn an error INVALID_OPERATION is issued.
The output of the decompression algorithm is a sequence of
unsigned bytes or signed shorts corresponding to an
uncompressed image. The downstream GL mechanisms should proceed
as if the PixelStore parameters UNPACK_ROW_LENGTH,
UNPACK_SKIP_ROWS, and UNPACK_SKIP_PIXELS are all equal to zero.
The components of a SLIM/RICE image are mapped to GL <types> that do
not have special interpretation, FLOAT.
The pixel storage parameters UNPACK_SWAP_BYTES,
UNPACK_LSB_FIRST, and UNPACK_ALIGNMENT are ignored for
compressed images.
Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations
and the Frame Buffer)
4.3.2 Reading Pixels
The following entries are added to Table 4.5:
Parameter Name Type Initial Value Valid Range
-------------- ---- ------------- -----------
PACK_MAX_COMPRESSED_SIZE_SGIX integer 0 [0,inf)
The following needs to be added to the end of the "Final
Conversion" subsection: If the <type> parameter to ReadPixels
is one of SLIM8U_SGIX, SLIM10U_SGIX, SLIM12S_SGIX, RICE8U_SGIX,
RICE10U_SGIX, or RICE12S_SGIX the components are converted to
UNSIGNED_BYTE and SIGNED_SHORT as appropriate.
???
<Before the section "Placement in Client Memory">
Compression
This step only applies if the <type> parameter to ReadPixels is
set to one of SLIM8U_SGIX, SLIM10U_SGIX, SLIM12S_SGIX,
RICE8U_SGIX, RICE10U_SGIX, or RICE12S_SGIX. The pixel stream
being read is compressed as defined by the <type> and <format>
parameters to ReadPixels, and the PACK_SAMPLING_SGIX parameter
to PixelStore. The output of this step is a byte stream of
compressed image data.
Placement in Client Memory, Uncompressed Images
If the <type> parameter to ReadPixels is not one of SLIM/RICE* then
the pixels of the image are transferred to host memory as
described in this section. etc...
Placement in Client Memory, Compressed Images
This step only applies if the <type> parameter to ReadPixels
is set to one of SLIM8U_SGIX, SLIM10U_SGIX, SLIM12S_SGIX,
RICE8U_SGIX, RICE10U_SGIX, or RICE12S_SGIX. The compressor
places a header containing the size in bytes of the compressed
image stored as a GLsizei value at the location *data in host
memory. As in the DrawPixels case, the data pointer must obey
system requirements for the alignment of GLsizei values. The
byte stream of compressed image data is placed in host memory
starting immediately after the header. Up to
PACK_MAX_COMPRESSED_SIZE_SGIX bytes are written. If the value
of PACK_MAX_COMPRESSED_SIZE_SGIX is greater than zero and the
compressed size is greater than the value of
PACK_MAX_COMPRESSED_SIZE_SGIX, the error INVALID_OPERATION is
generated. If this occurs, the contents of the first
PACK_MAX_COMPRESSED_SIZE_SGIX bytes after the <data> pointer
are undefined, but bytes outside this range are guaranteed to
be left unchanged.
The pixel pack parameters PACK_SWAP_BYTES, PACK_LSB_FIRST,
PACK_ROW_LENGTH, PACK_SKIP_ROWS, PACK_SKIP_PIXELS, and
PACK_ALIGNMENT are not considered when reading back compressed
images.
Additions to Chapter 5 of the 1.1 Specification (Special Functions)
None.
Additions to Chapter 6 of the 1.1 Specification (State and State Requests)
XXX
Additions to the GLX Specification
Errors
INVALID_VALUE is generated if the pname argument to
PixelStorei or PixelStoref is PACK_MAX_COMPRESSED_SIZE_SGIX
and the value of pname is less than zero.
INVALID_OPERATION is generated if the compressed data
requested by a ReadPixels or GetTexImage will occupy more than
PACK_MAX_COMPRESSED_SIZE_SGIX bytes.
INVALID_ENUM is generated if the type argument for a pixel
command specifies a slim type but the format argument
specifies color index, stencil index, or depth values.
INVALID_ENUM is generated if the type argument for a pixel
command which deals with images of greater than two dimensions
specifies a slim type.
New State
Get Value Get Command Type Initial Value Attribute
--------- ----------- ---- ------------- ---------
PACK_MAX_COMPRESSED_SIZE_SGIX GetIntegerv Z+ 0 client
New Implementation Dependent State
None.