[Mesa-dev] [PATCH 0/4] OpenSWR driver addition
Tim Rowley
timothy.o.rowley at intel.com
Thu Feb 18 01:53:41 UTC 2016
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
More information about the mesa-dev
mailing list