This patch series adds the OpenSWR driver, a new software rasterizer project by Intel. The goal of this project is to create a high performance, highly scalable renderer targeted towards visualization workloads. For geometry heavy workloads we see a considerable speedup over llvmpipe, which is to be expected as the geometry frontend of llvmpipe is single threaded.
Our rasterizer is x86 specific and requires AVX or AVX2. The driver fits into the gallium framework, and reuses gallivm for doing the TGSI to vectorized llvm-IR conversion of the kernel of the shaders. A longer description of the project can be found in the initial introduction to the mesa-dev mailing list. Since this was written we've worked on more conformance, features, rebasing to Mesa master, cleaning up the build system, and supporting llvm 3.6 through 3.8. https://lists.freedesktop.org/archives/mesa-dev/2015-October/097816.html Tim Rowley (4): OpenSWR driver OpenSWR rasterizer Mesa changes for adding OpenSWR OpenSWR build changes configure.ac | 18 + scons/custom.py | 2 +- scons/llvm.py | 8 +- src/gallium/Makefile.am | 6 + src/gallium/SConscript | 3 + src/gallium/auxiliary/gallivm/lp_bld_flow.h | 7 + src/gallium/auxiliary/gallivm/lp_bld_init.h | 7 + src/gallium/auxiliary/gallivm/lp_bld_sample.h | 6 + src/gallium/auxiliary/gallivm/lp_bld_tgsi.h | 8 + .../auxiliary/target-helpers/inline_sw_helper.h | 13 +- .../target-helpers/inline_wrapper_sw_helper.h | 2 +- src/gallium/auxiliary/util/u_dl.h | 6 + src/gallium/drivers/swr/.clang-format | 64 + src/gallium/drivers/swr/Automake.inc | 30 + src/gallium/drivers/swr/Makefile.am | 37 + src/gallium/drivers/swr/Makefile.sources | 23 + src/gallium/drivers/swr/Makefile.sources-arch | 111 + src/gallium/drivers/swr/SConscript | 31 + src/gallium/drivers/swr/SConscript-arch | 117 + src/gallium/drivers/swr/avx/Makefile.am | 112 + src/gallium/drivers/swr/avx2/Makefile.am | 112 + .../drivers/swr/rasterizer/common/containers.hpp | 208 + .../drivers/swr/rasterizer/common/formats.cpp | 5469 ++++++++++++++++++++ .../drivers/swr/rasterizer/common/formats.h | 251 + src/gallium/drivers/swr/rasterizer/common/isa.hpp | 235 + src/gallium/drivers/swr/rasterizer/common/os.h | 221 + .../swr/rasterizer/common/rdtsc_buckets.cpp | 188 + .../drivers/swr/rasterizer/common/rdtsc_buckets.h | 229 + .../swr/rasterizer/common/rdtsc_buckets_shared.h | 167 + .../drivers/swr/rasterizer/common/simdintrin.h | 787 +++ .../drivers/swr/rasterizer/common/swr_assert.cpp | 238 + .../drivers/swr/rasterizer/common/swr_assert.h | 109 + src/gallium/drivers/swr/rasterizer/core/api.cpp | 1511 ++++++ src/gallium/drivers/swr/rasterizer/core/api.h | 500 ++ src/gallium/drivers/swr/rasterizer/core/arena.cpp | 166 + src/gallium/drivers/swr/rasterizer/core/arena.h | 69 + .../drivers/swr/rasterizer/core/backend.cpp | 1899 +++++++ src/gallium/drivers/swr/rasterizer/core/backend.h | 59 + src/gallium/drivers/swr/rasterizer/core/blend.h | 318 ++ src/gallium/drivers/swr/rasterizer/core/clip.cpp | 201 + src/gallium/drivers/swr/rasterizer/core/clip.h | 868 ++++ src/gallium/drivers/swr/rasterizer/core/context.h | 495 ++ .../drivers/swr/rasterizer/core/depthstencil.h | 245 + src/gallium/drivers/swr/rasterizer/core/fifo.hpp | 136 + .../swr/rasterizer/core/format_conversion.h | 196 + .../drivers/swr/rasterizer/core/format_traits.h | 3548 +++++++++++++ .../drivers/swr/rasterizer/core/format_types.h | 1075 ++++ .../drivers/swr/rasterizer/core/frontend.cpp | 2345 +++++++++ src/gallium/drivers/swr/rasterizer/core/frontend.h | 327 ++ src/gallium/drivers/swr/rasterizer/core/knobs.h | 142 + .../drivers/swr/rasterizer/core/knobs_init.h | 98 + .../drivers/swr/rasterizer/core/multisample.cpp | 51 + .../drivers/swr/rasterizer/core/multisample.h | 620 +++ src/gallium/drivers/swr/rasterizer/core/pa.h | 1208 +++++ src/gallium/drivers/swr/rasterizer/core/pa_avx.cpp | 1177 +++++ .../drivers/swr/rasterizer/core/rasterizer.cpp | 1393 +++++ .../drivers/swr/rasterizer/core/rasterizer.h | 35 + .../drivers/swr/rasterizer/core/rdtsc_core.cpp | 91 + .../drivers/swr/rasterizer/core/rdtsc_core.h | 177 + src/gallium/drivers/swr/rasterizer/core/state.h | 1027 ++++ .../drivers/swr/rasterizer/core/tessellator.h | 88 + .../drivers/swr/rasterizer/core/threads.cpp | 962 ++++ src/gallium/drivers/swr/rasterizer/core/threads.h | 63 + .../drivers/swr/rasterizer/core/tilemgr.cpp | 105 + src/gallium/drivers/swr/rasterizer/core/tilemgr.h | 390 ++ src/gallium/drivers/swr/rasterizer/core/utils.cpp | 148 + src/gallium/drivers/swr/rasterizer/core/utils.h | 831 +++ .../drivers/swr/rasterizer/jitter/JitManager.cpp | 313 ++ .../drivers/swr/rasterizer/jitter/JitManager.h | 186 + .../drivers/swr/rasterizer/jitter/blend_jit.cpp | 772 +++ .../drivers/swr/rasterizer/jitter/blend_jit.h | 93 + .../drivers/swr/rasterizer/jitter/builder.cpp | 71 + .../drivers/swr/rasterizer/jitter/builder.h | 71 + .../drivers/swr/rasterizer/jitter/builder_math.h | 34 + .../drivers/swr/rasterizer/jitter/builder_misc.cpp | 1447 ++++++ .../drivers/swr/rasterizer/jitter/builder_misc.h | 149 + .../drivers/swr/rasterizer/jitter/fetch_jit.cpp | 1431 +++++ .../drivers/swr/rasterizer/jitter/fetch_jit.h | 128 + .../drivers/swr/rasterizer/jitter/jit_api.h | 108 + .../jitter/scripts/gen_llvm_ir_macros.py | 401 ++ .../rasterizer/jitter/scripts/gen_llvm_types.py | 341 ++ .../swr/rasterizer/jitter/streamout_jit.cpp | 357 ++ .../drivers/swr/rasterizer/jitter/streamout_jit.h | 94 + .../drivers/swr/rasterizer/memory/ClearTile.cpp | 287 + .../drivers/swr/rasterizer/memory/Convert.h | 698 +++ .../drivers/swr/rasterizer/memory/LoadTile.cpp | 396 ++ .../drivers/swr/rasterizer/memory/StoreTile.cpp | 1717 ++++++ .../swr/rasterizer/memory/TilingFunctions.h | 581 +++ .../drivers/swr/rasterizer/memory/tilingtraits.h | 263 + .../drivers/swr/rasterizer/scripts/gen_knobs.py | 79 + .../drivers/swr/rasterizer/scripts/knob_defs.py | 226 + .../swr/rasterizer/scripts/mako/__init__.py | 8 + .../swr/rasterizer/scripts/mako/_ast_util.py | 845 +++ .../drivers/swr/rasterizer/scripts/mako/ast.py | 178 + .../drivers/swr/rasterizer/scripts/mako/cache.py | 238 + .../drivers/swr/rasterizer/scripts/mako/cmd.py | 62 + .../drivers/swr/rasterizer/scripts/mako/codegen.py | 1237 +++++ .../drivers/swr/rasterizer/scripts/mako/compat.py | 174 + .../swr/rasterizer/scripts/mako/exceptions.py | 373 ++ .../drivers/swr/rasterizer/scripts/mako/filters.py | 201 + .../drivers/swr/rasterizer/scripts/mako/lexer.py | 441 ++ .../drivers/swr/rasterizer/scripts/mako/lookup.py | 359 ++ .../swr/rasterizer/scripts/mako/parsetree.py | 594 +++ .../drivers/swr/rasterizer/scripts/mako/pygen.py | 299 ++ .../swr/rasterizer/scripts/mako/pyparser.py | 232 + .../drivers/swr/rasterizer/scripts/mako/runtime.py | 878 ++++ .../swr/rasterizer/scripts/mako/template.py | 705 +++ .../drivers/swr/rasterizer/scripts/mako/util.py | 360 ++ .../rasterizer/scripts/templates/knobs.template | 141 + src/gallium/drivers/swr/swr_clear.cpp | 142 + src/gallium/drivers/swr/swr_context.cpp | 407 ++ src/gallium/drivers/swr/swr_context.h | 182 + src/gallium/drivers/swr/swr_context_llvm.h | 124 + src/gallium/drivers/swr/swr_draw.cpp | 271 + src/gallium/drivers/swr/swr_fence.cpp | 143 + src/gallium/drivers/swr/swr_fence.h | 70 + src/gallium/drivers/swr/swr_loader.cpp | 67 + src/gallium/drivers/swr/swr_memory.h | 99 + src/gallium/drivers/swr/swr_public.h | 46 + src/gallium/drivers/swr/swr_query.cpp | 334 ++ src/gallium/drivers/swr/swr_query.h | 46 + src/gallium/drivers/swr/swr_resource.h | 97 + src/gallium/drivers/swr/swr_scratch.cpp | 116 + src/gallium/drivers/swr/swr_scratch.h | 63 + src/gallium/drivers/swr/swr_screen.cpp | 746 +++ src/gallium/drivers/swr/swr_screen.h | 52 + src/gallium/drivers/swr/swr_shader.cpp | 591 +++ src/gallium/drivers/swr/swr_shader.h | 60 + src/gallium/drivers/swr/swr_state.cpp | 1370 +++++ src/gallium/drivers/swr/swr_state.h | 307 ++ src/gallium/drivers/swr/swr_tex_sample.cpp | 338 ++ src/gallium/drivers/swr/swr_tex_sample.h | 47 + src/gallium/targets/libgl-gdi/SConscript | 8 +- src/gallium/targets/libgl-gdi/libgl_gdi.c | 28 +- src/gallium/targets/libgl-xlib/Makefile.am | 5 + src/gallium/targets/libgl-xlib/SConscript | 4 + src/gallium/targets/osmesa/Makefile.am | 6 + src/gallium/targets/osmesa/SConscript | 4 + 138 files changed, 54719 insertions(+), 11 deletions(-) create mode 100644 src/gallium/drivers/swr/.clang-format create mode 100644 src/gallium/drivers/swr/Automake.inc create mode 100644 src/gallium/drivers/swr/Makefile.am create mode 100644 src/gallium/drivers/swr/Makefile.sources create mode 100644 src/gallium/drivers/swr/Makefile.sources-arch create mode 100644 src/gallium/drivers/swr/SConscript create mode 100644 src/gallium/drivers/swr/SConscript-arch create mode 100644 src/gallium/drivers/swr/avx/Makefile.am create mode 100644 src/gallium/drivers/swr/avx2/Makefile.am create mode 100644 src/gallium/drivers/swr/rasterizer/common/containers.hpp create mode 100644 src/gallium/drivers/swr/rasterizer/common/formats.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/common/formats.h create mode 100644 src/gallium/drivers/swr/rasterizer/common/isa.hpp create mode 100644 src/gallium/drivers/swr/rasterizer/common/os.h create mode 100644 src/gallium/drivers/swr/rasterizer/common/rdtsc_buckets.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/common/rdtsc_buckets.h create mode 100644 src/gallium/drivers/swr/rasterizer/common/rdtsc_buckets_shared.h create mode 100644 src/gallium/drivers/swr/rasterizer/common/simdintrin.h create mode 100644 src/gallium/drivers/swr/rasterizer/common/swr_assert.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/common/swr_assert.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/api.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/api.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/arena.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/arena.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/backend.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/backend.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/blend.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/clip.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/clip.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/context.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/depthstencil.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/fifo.hpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/format_conversion.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/format_traits.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/format_types.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/frontend.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/frontend.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/knobs.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/knobs_init.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/multisample.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/multisample.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/pa.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/pa_avx.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/rasterizer.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/rasterizer.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/rdtsc_core.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/rdtsc_core.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/state.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/tessellator.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/threads.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/threads.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/tilemgr.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/tilemgr.h create mode 100644 src/gallium/drivers/swr/rasterizer/core/utils.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/core/utils.h create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/JitManager.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/JitManager.h create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/blend_jit.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/blend_jit.h create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/builder.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/builder.h create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/builder_math.h create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/builder_misc.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/builder_misc.h create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.h create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/jit_api.h create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/scripts/gen_llvm_ir_macros.py create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/scripts/gen_llvm_types.py create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/streamout_jit.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/jitter/streamout_jit.h create mode 100644 src/gallium/drivers/swr/rasterizer/memory/ClearTile.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/memory/Convert.h create mode 100644 src/gallium/drivers/swr/rasterizer/memory/LoadTile.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/memory/StoreTile.cpp create mode 100644 src/gallium/drivers/swr/rasterizer/memory/TilingFunctions.h create mode 100644 src/gallium/drivers/swr/rasterizer/memory/tilingtraits.h create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/gen_knobs.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/knob_defs.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/__init__.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/_ast_util.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/ast.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/cache.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/cmd.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/codegen.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/compat.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/exceptions.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/filters.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/lexer.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/lookup.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/parsetree.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/pygen.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/pyparser.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/runtime.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/template.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/mako/util.py create mode 100644 src/gallium/drivers/swr/rasterizer/scripts/templates/knobs.template create mode 100644 src/gallium/drivers/swr/swr_clear.cpp create mode 100644 src/gallium/drivers/swr/swr_context.cpp create mode 100644 src/gallium/drivers/swr/swr_context.h create mode 100644 src/gallium/drivers/swr/swr_context_llvm.h create mode 100644 src/gallium/drivers/swr/swr_draw.cpp create mode 100644 src/gallium/drivers/swr/swr_fence.cpp create mode 100644 src/gallium/drivers/swr/swr_fence.h create mode 100644 src/gallium/drivers/swr/swr_loader.cpp create mode 100644 src/gallium/drivers/swr/swr_memory.h create mode 100644 src/gallium/drivers/swr/swr_public.h create mode 100644 src/gallium/drivers/swr/swr_query.cpp create mode 100644 src/gallium/drivers/swr/swr_query.h create mode 100644 src/gallium/drivers/swr/swr_resource.h create mode 100644 src/gallium/drivers/swr/swr_scratch.cpp create mode 100644 src/gallium/drivers/swr/swr_scratch.h create mode 100644 src/gallium/drivers/swr/swr_screen.cpp create mode 100644 src/gallium/drivers/swr/swr_screen.h create mode 100644 src/gallium/drivers/swr/swr_shader.cpp create mode 100644 src/gallium/drivers/swr/swr_shader.h create mode 100644 src/gallium/drivers/swr/swr_state.cpp create mode 100644 src/gallium/drivers/swr/swr_state.h create mode 100644 src/gallium/drivers/swr/swr_tex_sample.cpp create mode 100644 src/gallium/drivers/swr/swr_tex_sample.h -- 1.9.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev