Yeah, you're right -- that looks bogus. There's been piles of confusion recently in formats.h about which end things are laid out from; the truth though is obviously in the pack/unpack code and the hardware format documentation.
On Wed, Mar 12, 2014 at 9:12 AM, Francisco Jerez <curroje...@riseup.net> wrote: > Chris Forbes <chr...@ijw.co.nz> writes: > >> If prefer_no_swizzle is set, try: >> - The exact matching format >> - Formats with the required components in the correct order, plus a junk >> component >> - finally, swizzled formats (BGRA etc) >> >> Signed-off-by: Chris Forbes <chr...@ijw.co.nz> >> --- >> src/mesa/main/texformat.c | 35 +++++++++++++++++++++++++++++++---- >> 1 file changed, 31 insertions(+), 4 deletions(-) >> >> diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c >> index 33725dc..7cb42bc 100644 >> --- a/src/mesa/main/texformat.c >> +++ b/src/mesa/main/texformat.c >> @@ -79,11 +79,13 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum >> target, >> } else if (type == GL_UNSIGNED_INT_2_10_10_10_REV) { >> RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UNORM); >> } >> - RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_UNORM); >> - RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); >> - break; >> + /* fallthrough */ >> >> case GL_RGBA8: >> + if (prefer_no_swizzle) { >> + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_UNORM); >> + break; >> + } > > Are you sure this is correct on little endian machines? According to > the docs, MESA_FORMAT_R8G8B8A8_UNORM would end up with the R component > in the most significant byte (highest array index) and the A component > in the least significant byte (lowest array index), which seems like the > opposite of what GL_RGBA8 is specified to be by > ARB_shader_image_load_store. > >> RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_UNORM); >> RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); >> break; >> @@ -100,6 +102,9 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum >> target, >> >> /* deep RGBA formats */ >> case GL_RGB10_A2: >> + if (prefer_no_swizzle) { >> + RETURN_IF_SUPPORTED(MESA_FORMAT_R10G10B10A2_UNORM); >> + } > > This looks correct for any endianness. > >> RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UNORM); >> RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); >> break; >> @@ -119,6 +124,11 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum >> target, >> } >> /* fallthrough */ >> case GL_RGB8: >> + if (prefer_no_swizzle) { >> + RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UNORM8); >> + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8X8_UNORM); >> + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_UNORM); > > The last two seem wrong for LE too. > >> + } >> RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_UNORM8); >> RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8X8_UNORM); >> RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_UNORM); >> @@ -454,10 +464,19 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum >> target, >> break; >> case GL_RGB_SNORM: >> case GL_RGB8_SNORM: >> + if (prefer_no_swizzle) { >> + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8X8_SNORM); >> + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); >> + } > > Same here. > >> RETURN_IF_SUPPORTED(MESA_FORMAT_X8B8G8R8_SNORM); >> - /* FALLTHROUGH */ >> + RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM); >> + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); >> + break; >> case GL_RGBA_SNORM: >> case GL_RGBA8_SNORM: >> + if (prefer_no_swizzle) { >> + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); >> + } > > And here. > >> RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SNORM); >> RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SNORM); >> break; >> @@ -525,11 +544,19 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum >> target, >> >> case GL_SRGB_EXT: >> case GL_SRGB8_EXT: >> + if (prefer_no_swizzle) { >> + /* there is no MESA_FORMAT_RGB_SRGB8 */ >> + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8X8_SRGB); >> + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SRGB); > > And here. > >> + } >> RETURN_IF_SUPPORTED(MESA_FORMAT_BGR_SRGB8); >> RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); >> break; >> case GL_SRGB_ALPHA_EXT: >> case GL_SRGB8_ALPHA8_EXT: >> + if (prefer_no_swizzle) { >> + RETURN_IF_SUPPORTED(MESA_FORMAT_R8G8B8A8_SRGB); >> + } >> RETURN_IF_SUPPORTED(MESA_FORMAT_A8B8G8R8_SRGB); >> RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB); >> break; >> -- >> 1.9.0 >> >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev