From 1ed503a856d9753a813951796bc6ba56c42ecd28 Mon Sep 17 00:00:00 2001
From: marha
-The Gallium llvmpipe driver is a software rasterizer that uses LLVM to
-do runtime code generation.
-Shaders, point/line/triangle rasterization and vertex processing are
-implemented with LLVM IR which is translated to x86 or x86-64 machine
-code.
-Also, the driver is multithreaded to take advantage of multiple CPU cores
-(up to 8 at this time).
-It's the fastest software rasterizer for Mesa.
-
- Support for sse2 is strongly encouraged. Support for ssse3, and sse4.1 will
- yield the most efficient code. The less features the CPU has the more
- likely is that you ran into underperforming, buggy, or incomplete code.
-
- See /proc/cpuinfo to know what your CPU supports.
-
- NOTE: LLVM 2.8 and earlier will not work on systems that support the
- Intel AVX extensions (e.g. Sandybridge). LLVM's code generator will
- fail when trying to emit AVX instructions. This was fixed in LLVM 2.9.
-
- For Linux, on a recent Debian based distribution do:
- Introduction
-
-Requirements
-
-
-
- aptitude install llvm-dev
-
- For a RPM-based distribution do:
-
- yum install llvm-devel -- -
- For Windows download pre-built MSVC 9.0 or MinGW binaries from - http://people.freedesktop.org/~jrfonseca/llvm/ and set the LLVM environment - variable to the extracted path. -
- -- For MSVC there are two set of binaries: llvm-x.x-msvc32mt.7z and - llvm-x.x-msvc32mtd.7z . -
- -- You have to set the LLVM=/path/to/llvm-x.x-msvc32mtd env var when passing - debug=yes to scons, and LLVM=/path/to/llvm-x.x-msvc32mt when building with - debug=no. This is necessary as LLVM builds as static library so the chosen - MS CRT must match. -
- - -- scons build=debug libgl-xlib -- -Alternatively, you can build it with GNU make, if you prefer, by invoking it as - -
- make linux-llvm -- -but the rest of these instructions assume that scons is used. - -For windows is everything the except except the winsys: - -
- scons build=debug libgl-gdi -- - -
- build/foo/gallium/targets/libgl-xlib/libGL.so --or -
- lib/gallium/libGL.so -- -To use it set the LD_LIBRARY_PATH environment variable accordingly. - -For performance evaluation pass debug=no to scons, and use the corresponding -lib directory without the "-debug" suffix. - -On Windows, building will create a drop-in alternative for opengl32.dll. To use -it put it in the same directory as the application. It can also be used by -replacing the native ICD driver, but it's quite an advanced usage, so if you -need to ask, don't even try it. - - -
- scons build=profile- -This will ensure that frame pointers are used both in C and JIT functions, and -that no tail call optimizations are done by gcc. - -To better profile JIT code you'll need to build LLVM with oprofile integration. - --
- ./configure \ - --prefix=$install_dir \ - --enable-optimized \ - --disable-profiling \ - --enable-targets=host-only \ - --with-oprofile - - make -C "$build_dir" - make -C "$build_dir" install - - find "$install_dir/lib" -iname '*.a' -print0 | xargs -0 strip --strip-debug -- -The you should define - -
- export LLVM=/path/to/llvm-2.6-profile -- -and rebuild. - - -
-Building will also create several unit tests in -build/linux-???-debug/gallium/drivers/llvmpipe: -
- - --Some of this tests can output results and benchmarks to a tab-separated-file -for posterior analysis, e.g.: -
-- build/linux-x86_64-debug/gallium/drivers/llvmpipe/lp_test_blend -o blend.tsv -- - -
+The Gallium llvmpipe driver is a software rasterizer that uses LLVM to +do runtime code generation. +Shaders, point/line/triangle rasterization and vertex processing are +implemented with LLVM IR which is translated to x86 or x86-64 machine +code. +Also, the driver is multithreaded to take advantage of multiple CPU cores +(up to 8 at this time). +It's the fastest software rasterizer for Mesa. +
+ + +An x86 or amd64 processor; 64-bit mode recommended.
+ Support for SSE2 is strongly encouraged. Support for SSSE3 and SSE4.1 will + yield the most efficient code. The fewer features the CPU has the more + likely is that you run into underperforming, buggy, or incomplete code. + ++ See /proc/cpuinfo to know what your CPU supports. +
+LLVM: version 2.9 recommended; 2.6 or later required.
+ NOTE: LLVM 2.8 and earlier will not work on systems that support the + Intel AVX extensions (e.g. Sandybridge). LLVM's code generator will + fail when trying to emit AVX instructions. This was fixed in LLVM 2.9. + ++ For Linux, on a recent Debian based distribution do: +
++ aptitude install llvm-dev ++ For a RPM-based distribution do: + +
+ yum install llvm-devel ++ +
+ For Windows you will need to build LLVM from source with MSVC or MINGW + (either natively or through cross compilers) and CMake, and set the LLVM + environment variable to the directory you installed it to. + + LLVM will be statically linked, so when building on MSVC it needs to be + built with a matching CRT as Mesa, and you'll need to pass + -DLLVM_USE_CRT_RELEASE=MTd for debug and checked builds, + -DLLVM_USE_CRT_RELEASE=MTd for profile and release builds. + + You can build only the x86 target by passing -DLLVM_TARGETS_TO_BUILD=X86 + to cmake. +
+scons (optional)
++ scons build=debug libgl-xlib ++ +Alternatively, you can build it with GNU make, if you prefer, by invoking it as + +
+ make linux-llvm ++ +but the rest of these instructions assume that scons is used. + +For Windows the procedure is similar except the target: + +
+ scons build=debug libgl-gdi ++ + +
+ build/foo/gallium/targets/libgl-xlib/libGL.so ++or +
+ lib/gallium/libGL.so ++ +To use it set the LD_LIBRARY_PATH environment variable accordingly. + +For performance evaluation pass debug=no to scons, and use the corresponding +lib directory without the "-debug" suffix. + +On Windows, building will create a drop-in alternative for opengl32.dll. To use +it put it in the same directory as the application. It can also be used by +replacing the native ICD driver, but it's quite an advanced usage, so if you +need to ask, don't even try it. + + +
+ scons build=profile+ +This will ensure that frame pointers are used both in C and JIT functions, and +that no tail call optimizations are done by gcc. + +To better profile JIT code you'll need to build LLVM with oprofile integration. + ++
+ ./configure \ + --prefix=$install_dir \ + --enable-optimized \ + --disable-profiling \ + --enable-targets=host-only \ + --with-oprofile + + make -C "$build_dir" + make -C "$build_dir" install + + find "$install_dir/lib" -iname '*.a' -print0 | xargs -0 strip --strip-debug ++ +The you should define + +
+ export LLVM=/path/to/llvm-2.6-profile ++ +and rebuild. + + +
+Building will also create several unit tests in +build/linux-???-debug/gallium/drivers/llvmpipe: +
+ + ++Some of this tests can output results and benchmarks to a tab-separated-file +for posterior analysis, e.g.: +
++ build/linux-x86_64-debug/gallium/drivers/llvmpipe/lp_test_blend -o blend.tsv ++ + +