[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