[Mesa-dev] [PATCH 00/29] Use a master format convert function

Iago Toral Quiroga itoral at igalia.com
Tue Nov 18 01:23:41 PST 2014

This is the second of two series of patches to address:

This series is based on the previous series we sent for review: Auto-generate
pack/unpack functions. To ease review and testing, the combined series are
available here:


The goal of this second series is to provide a master convert function
(_mesa_format_convert) that can handle almost all kinds of color format
conversions. To achieve this, this master convert function will operate using
the auto-generated pack/unpack functions as well as _mesa_swizzle_and_convert
(for array types).

This is based on initial work by Jason Ekstrand.

Tested on i965, classic swrast and gallium (llvmpipe, nouveau, radeon) without
regressions. We also get the following new piglit passes:

spec/!OpenGL 1.1/teximage-colors GL_RGB16_SNORM/Exact upload-download of GL_RGB16_SNORM
spec/!OpenGL 1.1/teximage-colors GL_RGB8_SNORM/Exact upload-download of GL_RGB8_SNORM
spec/ARB_copy_image/arb_copy_image-formats/Source: GL_RGB16_SNORM/Destination: GL_RGB16_SNORM
spec/ARB_copy_image/arb_copy_image-formats/Source: GL_ALPHA12/Destination: GL_ALPHA12
spec/ARB_copy_image/arb_copy_image-formats/Source: GL_RGB8I/Destination: GL_RGB8_SNORM
spec/ARB_copy_image/arb_copy_image-formats/Source: GL_RGB16UI/Destination: GL_RGB16_SNORM
spec/ARB_copy_image/arb_copy_image-formats/Source: GL_RGB8_SNORM/Destination: GL_RGB8_SNORM
spec/ARB_copy_image/arb_copy_image-formats/Source: GL_RGB8UI/Destination: GL_RGB8_SNORM
spec/ARB_copy_image/arb_copy_image-formats/Source: GL_RGB16/Destination: GL_RGB16_SNORM
spec/ARB_copy_image/arb_copy_image-formats/Source: GL_RGB8/Destination: GL_RGB8_SNORM
spec/ARB_copy_image/arb_copy_image-formats/Source: GL_INTENSITY12/Destination: GL_INTENSITY12
spec/ARB_copy_image/arb_copy_image-formats/Source: GL_LUMINANCE12/Destination: GL_LUMINANCE12
spec/ARB_copy_image/arb_copy_image-formats/Source: GL_LUMINANCE12_ALPHA12/Destination: GL_LUMINANCE12_ALPHA12
spec/ARB_copy_image/arb_copy_image-formats/Source: GL_RGB16I/Destination: GL_RGB16_SNORM

Just like in the previous series, for software drivers we worked with a
significant subset of piglit tests selected with this filter:
-t format -t color -t tex -t image -t swizzle -t clamp -t rgb -t lum -t pix
-t fbo -t frame

This series removes >3000 SLOC and together with the autogen pack/unpack series
it removes >10000 SLOC (although we would be auto-generating a good chunk of

Although there are no piglit regressions and we even get some new passes,
there are thousands of format conversion combinations and piglit does not cover
every single one, so there is room for some regressions but hopefully not 
major ones. One thing we could not test is big-endian, so that's something that
should be reviewed with extra care.

Patch summary:
  * Patches 1-6, 12 implement the master convert function (_mesa_format_convert)
  * Patches 7-11 mostly add helpers that will be used by callers of
  * Patches 13-17 use _mesa_format_convert in the implementation of
    glTex(Sub)Image, glDrawPixels, glGetTex(Sub)Image and glReadPixels.
  * Patches 18-29 remove a bunch of code that becomes obsolete after
    introducing _mesa_format_convert

Eduardo Lima Mitev (1):
  mesa: Replace _mesa_unpack_bitmap with _mesa_unpack_image()

Iago Toral Quiroga (24):
  mesa: Set normalized=true for float array formats.
  mesa: Do not assert on integer<->non-integer direct pack/unpack fast
  mesa: Expose compute_component_mapping as
  mesa: Consider internal base format in _mesa_format_convert
  mesa: Avoid pack/unpack fast paths if base internal format != base
  mesa: Add helper to convert a GL format and type to a mesa (array)
  mesa: Add _mesa_swap2_copy and _mesa_swap4_copy
  mesa: Add RGBA to Luminance conversion helpers
  mesa: Add helpers to extract GL_COLOR_INDEX to RGBA float/ubyte
  mesa: Fix RGBA8888_UINT direct unpack path in _mesa_format_convert.
  mesa: Use _mesa_format_convert to implement texstore_rgba.
  mesa: use _mesa_format_convert to implement glReadPixels.
  mesa: Let _mesa_get_format_base_format also handle mesa_array_format
  mesa: Unify rebase logic for glReadPixels and glGetTexImage.
  mesa: Remove _mesa_unpack_color_span_uint
  mesa: Remove _mesa_make_temp_ubyte_image
  mesa: Remove _mesa_make_temp_float_image
  mesa: Remove _mesa_unpack_color_span_ubyte
  mesa: Remove (signed) integer pack and span functions.
  swrast: Replace _mesa_unpack_color_span_float with
  mesa: Remove _mesa_unpack_color_span_float
  mesa: Replace _mesa_pack_rgba_span_float with _mesa_format_convert
  mesa: Remove _mesa_pack_rgba_span_float and tmp_pack.h
  mesa: Remove _mesa_(un)pack_index_span

Jason Ekstrand (1):
  mesa: Add an implementation of a master convert function.

Samuel Iglesias Gonsalvez (3):
  mesa/pack: use _mesa_format_from_format_and_type in
  mesa: use master conversion function to implement
  mesa: Remove _mesa_pack_int_rgba_row() and auxiliary functions

 src/mesa/main/dlist.c                  |   14 +-
 src/mesa/main/format_info.py           |    3 +-
 src/mesa/main/format_pack.c.mako       |  121 --
 src/mesa/main/format_pack.h            |    4 -
 src/mesa/main/format_utils.c           |  641 ++++++
 src/mesa/main/format_utils.h           |   13 +
 src/mesa/main/formats.c                |  354 +++-
 src/mesa/main/formats.h                |   20 +-
 src/mesa/main/image.c                  |   25 +-
 src/mesa/main/image.h                  |   10 +-
 src/mesa/main/pack.c                   | 3493 +++-----------------------------
 src/mesa/main/pack.h                   |   89 +-
 src/mesa/main/pack_tmp.h               |  196 --
 src/mesa/main/readpix.c                |  308 +--
 src/mesa/main/texcompress_bptc.c       |   39 +-
 src/mesa/main/texcompress_fxt1.c       |   34 +-
 src/mesa/main/texcompress_rgtc.c       |   80 +-
 src/mesa/main/texcompress_s3tc.c       |   68 +-
 src/mesa/main/texgetimage.c            |  257 +--
 src/mesa/main/texstore.c               | 1137 +----------
 src/mesa/main/texstore.h               |   19 -
 src/mesa/state_tracker/st_cb_texture.c |   14 +-
 src/mesa/swrast/s_drawpix.c            |   39 +-
 23 files changed, 1923 insertions(+), 5055 deletions(-)
 delete mode 100644 src/mesa/main/pack_tmp.h


More information about the mesa-dev mailing list