Module: Mesa Branch: master Commit: 9285ed98f7557722fbb94f47c5bc138ef5dd9c70 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9285ed98f7557722fbb94f47c5bc138ef5dd9c70
Author: Roland Scheidegger <[email protected]> Date: Tue Oct 27 05:34:00 2015 +0100 llvmpipe: add cache for compressed textures compressed textures are very slow because decoding is rather complex (and because there's no jit code code to decode them too for non-technical reasons). Thus, add some texture cache which holds a couple of decoded blocks. Right now this handles only s3tc format albeit it could be extended to work with other formats rather trivially as long as the result of decode fits into 32bit per texel (ideally, rgtc actually would decode to more than 8 bits per channel, but even then making it work for it shouldn't be too difficult). This can improve performance noticeably but don't expect wonders (uncompressed is unsurprisingly still faster). It's also possible it might be slower in some cases (using nearest filtering for example or if there's otherwise not many cache hits, the cache is only direct mapped which isn't great). Also, actual decode of a block relies on util code, thus even though always full blocks are decoded it is done texel by texel - this could obviously benefit greatly from simd-optimized code decoding full blocks at once... Note the cache is per (raster) thread, and currently only used for fragment shaders. Reviewed-by: Jose Fonseca <[email protected]> --- src/gallium/auxiliary/Makefile.sources | 2 + src/gallium/auxiliary/draw/draw_llvm.c | 5 +- src/gallium/auxiliary/gallivm/lp_bld_format.c | 56 +++ src/gallium/auxiliary/gallivm/lp_bld_format.h | 56 ++- src/gallium/auxiliary/gallivm/lp_bld_format_aos.c | 31 +- .../auxiliary/gallivm/lp_bld_format_cached.c | 374 ++++++++++++++++++++ src/gallium/auxiliary/gallivm/lp_bld_format_soa.c | 37 +- src/gallium/auxiliary/gallivm/lp_bld_sample.h | 13 + src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c | 6 +- src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c | 42 +++ src/gallium/auxiliary/gallivm/lp_bld_tgsi.h | 2 + src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 5 + src/gallium/drivers/llvmpipe/lp_jit.c | 3 + src/gallium/drivers/llvmpipe/lp_jit.h | 8 +- src/gallium/drivers/llvmpipe/lp_rast.c | 44 ++- src/gallium/drivers/llvmpipe/lp_state_fs.c | 4 +- src/gallium/drivers/llvmpipe/lp_test_format.c | 36 +- src/gallium/drivers/llvmpipe/lp_tex_sample.c | 19 + src/gallium/drivers/llvmpipe/lp_tex_sample.h | 5 +- 19 files changed, 730 insertions(+), 18 deletions(-) Diff: http://cgit.freedesktop.org/mesa/mesa/diff/?id=9285ed98f7557722fbb94f47c5bc138ef5dd9c70 _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
