Chris Forbes <chr...@ijw.co.nz> writes: > Actually, after poking around a bit more, I think this is correct... > > As of Brian's commit 657436da7ee, the packed formats are described as > being laid out from the LSB. This is consistent with this patch, with > the pack/unpack code, and the hardware documentation: > > mesa: update packed format layout comments > > Update the comments for the packed formats to accurately reflect the > layout of the bits in the pixel. For example, for the packed format > MESA_FORMAT_R8G8B8A8, R is in the least significant position while A > is in the most-significant position of the 32-bit word. > > Unfortunately the example higher up of how a type-P format is laid out > is still backwards, which adds to the confusion. >
Oh... That's right... But doesn't that mean that your choice is backwards on BE machines? > -- Chris > > On Wed, Mar 12, 2014 at 12:36 PM, Chris Forbes <chr...@ijw.co.nz> wrote: >> 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
pgpEj0s7fecIT.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev