If the user supplies a pixel format of GL_RGB + GL_UNSIGNED_SHORT_5_6_5 and specifies a generic unsized GL_RGB internal format, match that to a texture format of MESA_FORMAT_B5G6R5 if supported by the hardware.
Noticed while playing with mesa-demos/teximage: TexImage(RGB/565 256 x 256): 79.8 images/sec, 10.0 MB/sec TexSubImage(RGB/565 256 x 256): 3804.9 images/sec, 475.6 MB/sec GetTexImage(RGB/565 256 x 256): 99.5 images/sec, 12.4 MB/sec becomes TexImage(RGB/565 256 x 256): 3439.1 images/sec, 429.9 MB/sec TexSubImage(RGB/565 256 x 256): 3744.1 images/sec, 468.0 MB/sec GetTexImage(RGB/565 256 x 256): 4713.5 images/sec, 589.2 MB/sec on a puny Baytrail which is still far from what it is capable of. The reason for the disparity is that the teximage demo uses a busy texture which is performs an accelerated pixel conversion from the user's B5G6R5 into the native X8B8G8R8 (on the TexSubImage path). After the patch, no conversion is required allowing use of the blitter and memcpy fast paths everywhere. Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu> Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> --- src/mesa/main/texformat.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c index baa3988f0a..133dd439dd 100644 --- a/src/mesa/main/texformat.c +++ b/src/mesa/main/texformat.c @@ -116,6 +116,8 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, case GL_RGB: if (type == GL_UNSIGNED_INT_2_10_10_10_REV) { RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UNORM); + } else if (type == GL_UNSIGNED_SHORT_5_6_5) { + RETURN_IF_SUPPORTED(MESA_FORMAT_B5G6R5_UNORM); } /* fallthrough */ case GL_RGB8: -- 2.13.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev