mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-11-23 18:24:13 +08:00
d058ce7e88
Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com> Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10990>
67 lines
2.7 KiB
ReStructuredText
67 lines
2.7 KiB
ReStructuredText
Formats in gallium
|
|
==================
|
|
|
|
Gallium format names mostly follow D3D10 conventions, with some extensions.
|
|
|
|
Format names like XnYnZnWn have the X component in the lowest-address n bits
|
|
and the W component in the highest-address n bits; for B8G8R8A8, byte 0 is
|
|
blue and byte 3 is alpha. Note that platform endianness is not considered
|
|
in this definition. In C::
|
|
|
|
struct x8y8z8w8 { uint8_t x, y, z, w; };
|
|
|
|
Format aliases like XYZWstrq are (s+t+r+q)-bit integers in host endianness,
|
|
with the X component in the s least-significant bits of the integer. In C::
|
|
|
|
uint32_t xyzw8888 = (x << 0) | (y << 8) | (z << 16) | (w << 24);
|
|
|
|
Format suffixes affect the interpretation of the channel:
|
|
|
|
- ``SINT``: N bit signed integer [-2^(N-1) ... 2^(N-1) - 1]
|
|
- ``SNORM``: N bit signed integer normalized to [-1 ... 1]
|
|
- ``SSCALED``: N bit signed integer [-2^(N-1) ... 2^(N-1) - 1]
|
|
- ``FIXED``: Signed fixed point integer, (N/2 - 1) bits of mantissa
|
|
- ``FLOAT``: N bit IEEE754 float
|
|
- ``NORM``: Normalized integers, signed or unsigned per channel
|
|
- ``UINT``: N bit unsigned integer [0 ... 2^N - 1]
|
|
- ``UNORM``: N bit unsigned integer normalized to [0 ... 1]
|
|
- ``USCALED``: N bit unsigned integer [0 ... 2^N - 1]
|
|
|
|
The difference between ``SINT`` and ``SSCALED`` is that the former are pure
|
|
integers in shaders, while the latter are floats; likewise for ``UINT`` versus
|
|
``USCALED``.
|
|
|
|
There are two exceptions for ``FLOAT``. ``R9G9B9E5_FLOAT`` is nine bits
|
|
each of red green and blue mantissa, with a shared five bit exponent.
|
|
``R11G11B10_FLOAT`` is five bits of exponent and five or six bits of mantissa
|
|
for each color channel.
|
|
|
|
For the ``NORM`` suffix, the signedness of each channel is indicated with an
|
|
S or U after the number of channel bits, as in ``R5SG5SB6U_NORM``.
|
|
|
|
The ``SRGB`` suffix is like ``UNORM`` in range, but in the sRGB colorspace.
|
|
|
|
Compressed formats are named first by the compression format string (``DXT1``,
|
|
``ETC1``, etc), followed by a format-specific subtype. Refer to the
|
|
appropriate compression spec for details.
|
|
|
|
Formats used in video playback are named by their FOURCC code.
|
|
|
|
Format names with an embedded underscore are subsampled. ``R8G8_B8G8`` is a
|
|
single 32-bit block of two pixels, where the R and B values are repeated in
|
|
both pixels.
|
|
|
|
Index buffers do not have a natural format in Gallium structures. For purposes
|
|
of ``is_format_supported`` queries, the formats ``R8_UINT``, ``R16_UINT``, and
|
|
``R32_UINT`` are used with ``PIPE_BIND_INDEX_BUFFER`` for 8-bit, 16-bit, and
|
|
32-bit index buffers respectively.
|
|
|
|
References
|
|
----------
|
|
|
|
DirectX Graphics Infrastructure documentation on DXGI_FORMAT enum:
|
|
http://msdn.microsoft.com/en-us/library/windows/desktop/bb173059%28v=vs.85%29.aspx
|
|
|
|
FOURCC codes for YUV formats:
|
|
http://www.fourcc.org/yuv.php
|