[Mesa-dev] [PATCH 1/3] gallium/scons: OpenSWR Windows support
Jose Fonseca
jfonseca at vmware.com
Tue Nov 8 22:16:48 UTC 2016
On 07/11/16 22:32, George Kyriazis wrote:
> - Added code to create screen and handle swaps in libgl_gdi.c
> - Added call to swr SConscript
> - included llvm 3.9 support for scons (windows swr only support 3.9 and
> later)
> - include -DHAVE_SWR to subdirs that need it
>
> To buils SWR on windows, use "scons swr libgl-gdi"
> ---
> scons/llvm.py | 21 +++++++++++++++++++--
> src/gallium/SConscript | 1 +
> src/gallium/targets/libgl-gdi/SConscript | 4 ++++
> src/gallium/targets/libgl-gdi/libgl_gdi.c | 28 +++++++++++++++++++++++-----
> src/gallium/targets/libgl-xlib/SConscript | 4 ++++
> src/gallium/targets/osmesa/SConscript | 4 ++++
> 6 files changed, 55 insertions(+), 7 deletions(-)
>
> diff --git a/scons/llvm.py b/scons/llvm.py
> index 1fc8a3f..977e47a 100644
> --- a/scons/llvm.py
> +++ b/scons/llvm.py
> @@ -106,7 +106,24 @@ def generate(env):
> ])
> env.Prepend(LIBPATH = [os.path.join(llvm_dir, 'lib')])
> # LIBS should match the output of `llvm-config --libs engine mcjit bitwriter x86asmprinter`
> - if llvm_version >= distutils.version.LooseVersion('3.7'):
> + if llvm_version >= distutils.version.LooseVersion('3.9'):
> + env.Prepend(LIBS = [
> + 'LLVMX86Disassembler', 'LLVMX86AsmParser',
> + 'LLVMX86CodeGen', 'LLVMSelectionDAG', 'LLVMAsmPrinter',
> + 'LLVMDebugInfoCodeView', 'LLVMCodeGen',
> + 'LLVMScalarOpts', 'LLVMInstCombine',
> + 'LLVMInstrumentation', 'LLVMTransformUtils',
> + 'LLVMBitWriter', 'LLVMX86Desc',
> + 'LLVMMCDisassembler', 'LLVMX86Info',
> + 'LLVMX86AsmPrinter', 'LLVMX86Utils',
> + 'LLVMMCJIT', 'LLVMExecutionEngine', 'LLVMTarget',
> + 'LLVMAnalysis', 'LLVMProfileData',
> + 'LLVMRuntimeDyld', 'LLVMObject', 'LLVMMCParser',
> + 'LLVMBitReader', 'LLVMMC', 'LLVMCore',
> + 'LLVMSupport',
> + 'LLVMIRReader', 'LLVMASMParser'
> + ])
> + elif llvm_version >= distutils.version.LooseVersion('3.7'):
> env.Prepend(LIBS = [
> 'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser',
> 'LLVMX86CodeGen', 'LLVMSelectionDAG', 'LLVMAsmPrinter',
> @@ -203,7 +220,7 @@ def generate(env):
> if '-fno-rtti' in cxxflags:
> env.Append(CXXFLAGS = ['-fno-rtti'])
>
> - components = ['engine', 'mcjit', 'bitwriter', 'x86asmprinter', 'mcdisassembler']
> + components = ['engine', 'mcjit', 'bitwriter', 'x86asmprinter', 'mcdisassembler', 'irreader']
>
> env.ParseConfig('llvm-config --libs ' + ' '.join(components))
> env.ParseConfig('llvm-config --ldflags')
> diff --git a/src/gallium/SConscript b/src/gallium/SConscript
> index f98268f..9273db7 100644
> --- a/src/gallium/SConscript
> +++ b/src/gallium/SConscript
> @@ -18,6 +18,7 @@ SConscript([
> 'drivers/softpipe/SConscript',
> 'drivers/svga/SConscript',
> 'drivers/trace/SConscript',
> + 'drivers/swr/SConscript',
> ])
>
> #
> diff --git a/src/gallium/targets/libgl-gdi/SConscript b/src/gallium/targets/libgl-gdi/SConscript
> index 2a52363..ef8050b 100644
> --- a/src/gallium/targets/libgl-gdi/SConscript
> +++ b/src/gallium/targets/libgl-gdi/SConscript
> @@ -30,6 +30,10 @@ if env['llvm']:
> env.Append(CPPDEFINES = 'HAVE_LLVMPIPE')
> drivers += [llvmpipe]
>
> + if 'swr' in COMMAND_LINE_TARGETS :
> + env.Append(CPPDEFINES = 'HAVE_SWR')
> + drivers += [swr]
> +
> if env['gcc'] and env['machine'] != 'x86_64':
> # DEF parser in certain versions of MinGW is busted, as does not behave as
> # MSVC. mingw-w64 works fine.
> diff --git a/src/gallium/targets/libgl-gdi/libgl_gdi.c b/src/gallium/targets/libgl-gdi/libgl_gdi.c
> index 922c186..12576db 100644
> --- a/src/gallium/targets/libgl-gdi/libgl_gdi.c
> +++ b/src/gallium/targets/libgl-gdi/libgl_gdi.c
> @@ -51,9 +51,12 @@
> #include "llvmpipe/lp_public.h"
> #endif
>
> +#ifdef HAVE_SWR
> +#include "swr/swr_public.h"
> +#endif
>
> static boolean use_llvmpipe = FALSE;
> -
> +static boolean use_swr = FALSE;
>
> static struct pipe_screen *
> gdi_screen_create(void)
> @@ -69,6 +72,8 @@ gdi_screen_create(void)
>
> #ifdef HAVE_LLVMPIPE
> default_driver = "llvmpipe";
> +#elif HAVE_SWR
> + default_driver = "swr";
> #else
> default_driver = "softpipe";
> #endif
> @@ -78,15 +83,21 @@ gdi_screen_create(void)
> #ifdef HAVE_LLVMPIPE
> if (strcmp(driver, "llvmpipe") == 0) {
> screen = llvmpipe_create_screen( winsys );
> + if (screen)
> + use_llvmpipe = TRUE;
> + }
> +#endif
> +#ifdef HAVE_SWR
> + if (strcmp(driver, "swr") == 0) {
> + screen = swr_create_screen( winsys );
> + if (screen)
> + use_swr = TRUE;
> }
> -#else
> - (void) driver;
> #endif
> + (void) driver;
>
> if (screen == NULL) {
> screen = softpipe_create_screen( winsys );
> - } else {
> - use_llvmpipe = TRUE;
> }
>
> if(!screen)
> @@ -128,6 +139,13 @@ gdi_present(struct pipe_screen *screen,
> }
> #endif
>
> +#ifdef HAVE_SWR
> + if (use_swr) {
> + swr_gdi_swap(screen, res, hDC);
> + return;
> + }
> +#endif
> +
> winsys = softpipe_screen(screen)->winsys,
> dt = softpipe_resource(res)->dt,
> gdi_sw_display(winsys, dt, hDC);
> diff --git a/src/gallium/targets/libgl-xlib/SConscript b/src/gallium/targets/libgl-xlib/SConscript
> index 0a4f31b..43b433b 100644
> --- a/src/gallium/targets/libgl-xlib/SConscript
> +++ b/src/gallium/targets/libgl-xlib/SConscript
> @@ -48,6 +48,10 @@ if env['llvm']:
> env.Append(CPPDEFINES = ['GALLIUM_LLVMPIPE'])
> env.Prepend(LIBS = [llvmpipe])
>
> + if 'swr' in COMMAND_LINE_TARGETS :
> + env.Append(CPPDEFINES = 'HAVE_SWR')
> + env.Prepend(LIBS = [swr])
> +
COMMAND_LINE_TARGETS is not a good way IMHO. It makes no sense that
the behavior of libgl-xlib varies depending whether we also build
another target.
Instead you should define a SCons variable, e.g., swr.
scons swr=1 libgl-xlib
> if env['platform'] != 'darwin':
> # Disallow undefined symbols, except with Address Sanitizer, since libasan
> # is not linked on shared libs, as it should be LD_PRELOAD'ed instead
> diff --git a/src/gallium/targets/osmesa/SConscript b/src/gallium/targets/osmesa/SConscript
> index 7a2a00c..ede2782 100644
> --- a/src/gallium/targets/osmesa/SConscript
> +++ b/src/gallium/targets/osmesa/SConscript
> @@ -30,6 +30,10 @@ if env['llvm']:
> env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE')
> env.Prepend(LIBS = [llvmpipe])
>
> + if 'swr' in COMMAND_LINE_TARGETS :
> + env.Append(CPPDEFINES = 'HAVE_SWR')
> + env.Prepend(LIBS = [swr])
> +
> if env['platform'] == 'windows':
> if env['gcc'] and env['machine'] != 'x86_64':
> sources += ['osmesa.mingw.def']
>
Jose
More information about the mesa-dev
mailing list