> -----Original Message----- > From: Jose Fonseca [mailto:jfons...@vmware.com] > Sent: Tuesday, November 8, 2016 4:17 PM > To: Kyriazis, George <george.kyria...@intel.com>; mesa- > d...@lists.freedesktop.org > Subject: Re: [Mesa-dev] [PATCH 1/3] gallium/scons: OpenSWR Windows > support > > 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 > Yes, I see. The reason why 'swr' was added as a command-line target was that there are 2 additional libraries that are generated here, swrAVX.dll and swrAVX2.dll, which can viewed as 'targets'. I can switch to using a variable, though.
Thanks, George > > > 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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev