[Mesa-dev] [PATCH v3] mesa/formats: refactor by removing compressed formats
Chad Versace
chad.versace at intel.com
Fri Aug 21 14:34:12 PDT 2015
On Wed 19 Aug 2015, Nanley Chery wrote:
> From: Nanley Chery <nanley.g.chery at intel.com>
>
> All compressed formats return GL_FALSE and there isn't any evidence to
> support that this behaviour would change. Remove all switch cases for
> compressed formats.
>
> v2. Since the exhaustive switch is removed, add a gtest to ensure
> all formats are handled.
> v3. Ensure that GL_NO_ERROR is set before returning.
>
> Cc: Brian Paul <brianp at vmware.com>
> Cc: Chad Versace <chad.versace at intel.com>
> Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
> ---
> src/mesa/drivers/dri/i915/intel_pixel_read.c | 2 +-
> src/mesa/drivers/dri/i915/intel_tex_image.c | 2 +-
> src/mesa/main/formats.c | 58 ++++++----------------------
> src/mesa/main/formats.h | 2 +-
> src/mesa/main/readpix.c | 2 +-
> src/mesa/main/tests/mesa_formats.cpp | 7 +++-
> src/mesa/main/texgetimage.c | 2 +-
> src/mesa/main/texstore.c | 2 +-
> src/mesa/state_tracker/st_cb_readpixels.c | 2 +-
> src/mesa/state_tracker/st_cb_texture.c | 6 +--
> src/mesa/state_tracker/st_format.c | 2 +-
> src/mesa/swrast/s_drawpix.c | 2 +-
> 12 files changed, 29 insertions(+), 60 deletions(-)
>
> diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c
> index e58b917..1f221f1 100644
> --- a/src/mesa/main/formats.c
> +++ b/src/mesa/main/formats.c
> @@ -1432,15 +1432,19 @@ _mesa_uncompressed_format_to_type_and_comps(mesa_format format,
> GLboolean
> _mesa_format_matches_format_and_type(mesa_format mesa_format,
> GLenum format, GLenum type,
> - GLboolean swapBytes)
> + GLboolean swapBytes, GLenum *error)
The parameter alignment looks wrong here. Maybe it's just my email app,
though.
Please document the function's error behavior: what errors does it and
emit and when.
> {
> const GLboolean littleEndian = _mesa_little_endian();
> + if (error)
> + *error = GL_NO_ERROR;
>
> /* Note: When reading a GL format/type combination, the format lists channel
> * assignments from most significant channel in the type to least
> * significant. A type with _REV indicates that the assignments are
> * swapped, so they are listed from least significant to most significant.
> *
> + * Compressed formats will fall through and return GL_FALSE.
> + *
> * For sanity, please keep this switch statement ordered the same as the
> * enums in formats.h.
> */
> @@ -2024,8 +1983,13 @@ _mesa_format_matches_format_and_type(mesa_format mesa_format,
> case MESA_FORMAT_B8G8R8X8_SRGB:
> case MESA_FORMAT_X8R8G8B8_SRGB:
> return GL_FALSE;
> + default:
> + if (!_mesa_is_format_compressed(format)) {
> + assert(0);
> + if (error)
> + *error = GL_INVALID_ENUM;
> + }
> }
The pattern in the default case...
if (!stuff) {
assert(0);
if (error)
*error = GL_INVALID_ENUM;
}
would be better phrased as this equivalent code:
assert(stuff);
if (error)
*error = GL_INVALID_ENUM;
> -
> return GL_FALSE;
> }
>
> diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h
> index e08247e..0634b78 100644
> --- a/src/mesa/main/formats.h
> +++ b/src/mesa/main/formats.h
> @@ -675,7 +675,7 @@ _mesa_format_has_color_component(mesa_format format, int component);
> GLboolean
> _mesa_format_matches_format_and_type(mesa_format mesa_format,
> GLenum format, GLenum type,
> - GLboolean swapBytes);
> + GLboolean swapBytes, GLenum *error);
>
> #ifdef __cplusplus
> }
> diff --git a/src/mesa/main/tests/mesa_formats.cpp b/src/mesa/main/tests/mesa_formats.cpp
> index 7bf9147..dfc7d0e 100644
> --- a/src/mesa/main/tests/mesa_formats.cpp
> +++ b/src/mesa/main/tests/mesa_formats.cpp
> @@ -49,11 +49,16 @@ TEST(MesaFormatsTest, FormatTypeAndComps)
> */
> if (!_mesa_is_format_compressed(f)) {
> GLenum datatype = 0;
> + GLenum error = 0;
> GLuint comps = 0;
> - _mesa_uncompressed_format_to_type_and_comps(f, &datatype, &comps);
>
> /* If the datatype is zero, the format was not handled */
> + _mesa_uncompressed_format_to_type_and_comps(f, &datatype, &comps);
> ASSERT_NE(datatype, (GLenum)0);
> +
> + /* If the error is INVALID_ENUM, the format was not handled */
> + _mesa_format_matches_format_and_type(f, f, datatype, GL_FALSE, &error);
> + ASSERT_NE(error, (GLenum)GL_INVALID_ENUM);
Two comments on the new check:
- It is more robust to check that no error was returned
rather than checking that a specific error was not returned. That
is, this is more robust:
ASSERT_EQ(error, (GLenum)GL_NO_ERROR)
- One of the first two arguments to
_mesa_uncompressed_format_to_type_and_comps() is wrong. The patch
passes the same value for each argument, but parameters have
different types.
> 2.5.0
Git 2.5.0? Are you building Git from source? Fedora 22 is still shipping
git-2.4.3.
More information about the mesa-dev
mailing list