st/mesa: implement blit-based TexImage and TexSubImage
authorMarek Olšák <maraeo@gmail.com>
Thu, 14 Feb 2013 00:03:55 +0000 (01:03 +0100)
committerMarek Olšák <maraeo@gmail.com>
Mon, 18 Feb 2013 16:57:41 +0000 (17:57 +0100)
commit0a1479c829ed34a65e60c6619a8164e1b079aaee
tree35ccf42db1ba7490db4442fc3324ccf93faab30e
parenta6e0ac95716ca933558c70e45798ddc67e6ad5ad
st/mesa: implement blit-based TexImage and TexSubImage

A temporary texture is created such that it matches the format and type
combination and pixels are copied to it using memcpy. Then the blit is used to
copy the temporary texture to the texture image being modified by TexImage or
TexSubImage. The blit takes care of the format and type conversion and
swizzling. The result is a very fast texture upload involving as little CPU
as possible.

This improves performance in apps which upload textures during rendering.
An example is the Wine OpenGL backend for DirectDraw, which I used to test
the game StarCraft. Profiling had shown that TexSubImage was taking 50% of
CPU time without this patch, which was the main motivation for this work, and
now TexSubImage only takes 14% of CPU time. I had to underclock my CPU to see
any difference in the game and this patch does make the game a lot faster
if the CPU is slow (or using the powersave cpufreq profile).

Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/main/texstore.c
src/mesa/main/texstore.h
src/mesa/state_tracker/st_cb_texture.c