--- configure.ac | 18 ++++ scons/custom.py | 2 +- scons/llvm.py | 8 +- src/gallium/Makefile.am | 6 ++ src/gallium/SConscript | 3 + 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 ++++++++++++++++++++++++ src/gallium/targets/libgl-gdi/SConscript | 8 +- 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 + 19 files changed, 696 insertions(+), 5 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
diff --git a/configure.ac b/configure.ac index 57330cb..1c8aaaa 100644 --- a/configure.ac +++ b/configure.ac @@ -2191,6 +2191,16 @@ radeon_llvm_check() { fi } +swr_llvm_check() { + gallium_require_llvm $1 + if test ${LLVM_VERSION_INT} -lt 306; then + AC_MSG_ERROR([LLVM version 3.6 or later required when building $1]) + fi + if test "x$enable_gallium_llvm" != "xyes"; then + AC_MSG_ERROR([--enable-gallium-llvm is required when building $1]) + fi +} + dnl Duplicates in GALLIUM_DRIVERS_DIRS are removed by sorting it after this block if test -n "$with_gallium_drivers"; then gallium_drivers=`IFS=', '; echo $with_gallium_drivers` @@ -2263,6 +2273,10 @@ if test -n "$with_gallium_drivers"; then HAVE_GALLIUM_LLVMPIPE=yes fi ;; + xswr) + swr_llvm_check "swr" + HAVE_GALLIUM_SWR=yes + ;; xvc4) HAVE_GALLIUM_VC4=yes gallium_require_drm "vc4" @@ -2352,6 +2366,7 @@ AM_CONDITIONAL(HAVE_GALLIUM_NOUVEAU, test "x$HAVE_GALLIUM_NOUVEAU" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_FREEDRENO, test "x$HAVE_GALLIUM_FREEDRENO" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_SOFTPIPE, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_LLVMPIPE, test "x$HAVE_GALLIUM_LLVMPIPE" = xyes) +AM_CONDITIONAL(HAVE_GALLIUM_SWR, test "x$HAVE_GALLIUM_SWR" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_VC4, test "x$HAVE_GALLIUM_VC4" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_VIRGL, test "x$HAVE_GALLIUM_VIRGL" = xyes) @@ -2461,6 +2476,9 @@ AC_CONFIG_FILES([Makefile src/gallium/drivers/rbug/Makefile src/gallium/drivers/softpipe/Makefile src/gallium/drivers/svga/Makefile + src/gallium/drivers/swr/Makefile + src/gallium/drivers/swr/avx/Makefile + src/gallium/drivers/swr/avx2/Makefile src/gallium/drivers/trace/Makefile src/gallium/drivers/vc4/Makefile src/gallium/drivers/virgl/Makefile diff --git a/scons/custom.py b/scons/custom.py index 043793b..a5a3410 100644 --- a/scons/custom.py +++ b/scons/custom.py @@ -132,7 +132,7 @@ def code_generate(env, script, target, source, command): script_src = env.File(script).srcnode() # This command creates generated code *in the build directory*. - command = command.replace('$SCRIPT', script_src.path) + command = command.replace('$SCRIPT', script_src.rstr()) action = SCons.Action.Action(command, "$CODEGENCOMSTR") code = env.Command(target, source, action) diff --git a/scons/llvm.py b/scons/llvm.py index 1fc8a3f..30742ff 100644 --- a/scons/llvm.py +++ b/scons/llvm.py @@ -98,6 +98,7 @@ def generate(env): print 'scons: LLVM version %s found, but %s is required' % (llvm_version, required_llvm_version) return + env['llvm_includedir'] = os.path.join(llvm_dir, 'include') env.Prepend(CPPPATH = [os.path.join(llvm_dir, 'include')]) env.AppendUnique(CPPDEFINES = [ '__STDC_LIMIT_MACROS', @@ -128,7 +129,8 @@ def generate(env): 'LLVMX86Info', 'LLVMX86AsmPrinter', 'LLVMX86Utils', 'LLVMMCJIT', 'LLVMTarget', 'LLVMExecutionEngine', 'LLVMRuntimeDyld', 'LLVMObject', 'LLVMMCParser', - 'LLVMBitReader', 'LLVMMC', 'LLVMCore', 'LLVMSupport' + 'LLVMBitReader', 'LLVMMC', 'LLVMCore', 'LLVMSupport', + 'LLVMIRReader', 'LLVMAsmParser', 'LLVMX86AsmParser' ]) elif llvm_version >= distutils.version.LooseVersion('3.5'): env.Prepend(LIBS = [ @@ -198,12 +200,14 @@ def generate(env): pass env.MergeFlags(cppflags) + env['llvm_includedir'] = env.backtick('llvm-config --includedir').rstrip() + # Match llvm --fno-rtti flag cxxflags = env.backtick('llvm-config --cxxflags').split() 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/Makefile.am b/src/gallium/Makefile.am index e42a8f1..086e170 100644 --- a/src/gallium/Makefile.am +++ b/src/gallium/Makefile.am @@ -78,6 +78,12 @@ SUBDIRS += drivers/llvmpipe endif endif +if HAVE_GALLIUM_SWR +SUBDIRS += drivers/swr +SUBDIRS += drivers/swr/avx +SUBDIRS += drivers/swr/avx2 +endif + ## vc4/rpi if HAVE_GALLIUM_VC4 SUBDIRS += drivers/vc4 winsys/vc4/drm diff --git a/src/gallium/SConscript b/src/gallium/SConscript index 0c3a374..17a51e7 100644 --- a/src/gallium/SConscript +++ b/src/gallium/SConscript @@ -20,6 +20,9 @@ SConscript([ 'drivers/trace/SConscript', ]) +if env['platform'] != 'windows': + SConscript('drivers/swr/SConscript') + # # Winsys # diff --git a/src/gallium/drivers/swr/.clang-format b/src/gallium/drivers/swr/.clang-format new file mode 100644 index 0000000..0ec65a5 --- /dev/null +++ b/src/gallium/drivers/swr/.clang-format @@ -0,0 +1,64 @@ +--- +Language: Cpp +AccessModifierOffset: -3 +AlignAfterOpenBracket: true +AlignEscapedNewlinesLeft: false +AlignOperands: false +AlignTrailingComments: false +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AlwaysBreakAfterDefinitionReturnType: true +AlwaysBreakTemplateDeclarations: false +AlwaysBreakBeforeMultilineStrings: false +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: true +BinPackParameters: false +BinPackArguments: false +ColumnLimit: 78 +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 3 +DerivePointerAlignment: false +ExperimentalAutoDetectBinPacking: false +IndentCaseLabels: false +IndentWrappedFunctionNames: false +IndentFunctionDeclarationAfterType: false +MaxEmptyLinesToKeep: 2 +KeepEmptyLinesAtTheStartOfBlocks: true +NamespaceIndentation: Inner +ObjCBlockIndentWidth: 3 +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakString: 1000 +PenaltyBreakFirstLessLess: 120 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 0 +PointerAlignment: Right +SpacesBeforeTrailingComments: 1 +Cpp11BracedListStyle: true +Standard: Cpp11 +IndentWidth: 3 +TabWidth: 8 +UseTab: Never +BreakBeforeBraces: Linux +SpacesInParentheses: false +SpacesInSquareBrackets: false +SpacesInAngles: false +SpaceInEmptyParentheses: false +SpacesInCStyleCastParentheses: false +SpaceAfterCStyleCast: false +SpacesInContainerLiterals: true +SpaceBeforeAssignmentOperators: true +ContinuationIndentWidth: 3 +CommentPragmas: '^ IWYU pragma:' +ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] +SpaceBeforeParens: ControlStatements +DisableFormat: false +... + diff --git a/src/gallium/drivers/swr/Automake.inc b/src/gallium/drivers/swr/Automake.inc new file mode 100644 index 0000000..1eff818 --- /dev/null +++ b/src/gallium/drivers/swr/Automake.inc @@ -0,0 +1,30 @@ +# Copyright (C) 2015 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +if HAVE_GALLIUM_SWR + +TARGET_CPPFLAGS += -DGALLIUM_SWR +TARGET_LIB_DEPS += \ + $(top_builddir)/src/gallium/drivers/swr/libmesaswr.la + $(top_builddir)/src/gallium/drivers/swr/avx/libswrAVX.la + $(top_builddir)/src/gallium/drivers/swr/avx2/libswrAVX2.la + +endif diff --git a/src/gallium/drivers/swr/Makefile.am b/src/gallium/drivers/swr/Makefile.am new file mode 100644 index 0000000..f3a4321 --- /dev/null +++ b/src/gallium/drivers/swr/Makefile.am @@ -0,0 +1,37 @@ +# Copyright (C) 2015 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +AUTOMAKE_OPTIONS = subdir-objects + +include Makefile.sources +include $(top_srcdir)/src/gallium/Automake.inc + +AM_CXXFLAGS = \ + $(GALLIUM_DRIVER_CFLAGS) \ + -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS + +noinst_LTLIBRARIES = libmesaswr.la + +libmesaswr_la_SOURCES = $(CXX_SOURCES) + +libmesaswr_la_LDFLAGS = + +EXTRA_DIST = SConscript SConscript-arch Makefile.sources-arch diff --git a/src/gallium/drivers/swr/Makefile.sources b/src/gallium/drivers/swr/Makefile.sources new file mode 100644 index 0000000..4317a85 --- /dev/null +++ b/src/gallium/drivers/swr/Makefile.sources @@ -0,0 +1,23 @@ +# Copyright (C) 2015 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +CXX_SOURCES := \ + swr_loader.cpp diff --git a/src/gallium/drivers/swr/Makefile.sources-arch b/src/gallium/drivers/swr/Makefile.sources-arch new file mode 100644 index 0000000..7ed0faf --- /dev/null +++ b/src/gallium/drivers/swr/Makefile.sources-arch @@ -0,0 +1,111 @@ +# Copyright (C) 2015 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +CXX_SOURCES := \ + swr_clear.cpp \ + swr_context.cpp \ + swr_context.h \ + swr_context_llvm.h \ + swr_draw.cpp \ + swr_public.h \ + swr_resource.h \ + swr_screen.cpp \ + swr_screen.h \ + swr_state.cpp \ + swr_state.h \ + swr_tex_sample.cpp \ + swr_tex_sample.h \ + swr_scratch.h \ + swr_scratch.cpp \ + swr_shader.cpp \ + swr_memory.h \ + swr_fence.h \ + swr_fence.cpp \ + swr_query.h \ + swr_query.cpp + +COMMON_CXX_SOURCES := \ + rasterizer/common/containers.hpp \ + rasterizer/common/formats.cpp \ + rasterizer/common/formats.h \ + rasterizer/common/isa.hpp \ + rasterizer/common/os.h \ + rasterizer/common/rdtsc_buckets.cpp \ + rasterizer/common/rdtsc_buckets.h \ + rasterizer/common/rdtsc_buckets_shared.h \ + rasterizer/common/rdtsc_buckets_shared.h \ + rasterizer/common/simdintrin.h \ + rasterizer/common/swr_assert.cpp \ + rasterizer/common/swr_assert.h + +CORE_CXX_SOURCES := \ + rasterizer/core/api.cpp \ + rasterizer/core/api.h \ + rasterizer/core/arena.cpp \ + rasterizer/core/arena.h \ + rasterizer/core/backend.cpp \ + rasterizer/core/backend.h \ + rasterizer/core/blend.h \ + rasterizer/core/clip.cpp \ + rasterizer/core/clip.h \ + rasterizer/core/context.h \ + rasterizer/core/depthstencil.h \ + rasterizer/core/fifo.hpp \ + rasterizer/core/format_traits.h \ + rasterizer/core/format_types.h \ + rasterizer/core/frontend.cpp \ + rasterizer/core/frontend.h \ + rasterizer/core/knobs.h \ + rasterizer/core/knobs_init.h \ + rasterizer/core/multisample.cpp \ + rasterizer/core/multisample.h \ + rasterizer/core/pa_avx.cpp \ + rasterizer/core/pa.h \ + rasterizer/core/rasterizer.cpp \ + rasterizer/core/rasterizer.h \ + rasterizer/core/rdtsc_core.cpp \ + rasterizer/core/rdtsc_core.h \ + rasterizer/core/state.h \ + rasterizer/core/threads.cpp \ + rasterizer/core/threads.h \ + rasterizer/core/tilemgr.cpp \ + rasterizer/core/tilemgr.h \ + rasterizer/core/utils.cpp \ + rasterizer/core/utils.h + +JITTER_CXX_SOURCES := \ + rasterizer/jitter/blend_jit.cpp \ + rasterizer/jitter/blend_jit.h \ + rasterizer/jitter/builder.cpp \ + rasterizer/jitter/builder.h \ + rasterizer/jitter/builder_misc.cpp \ + rasterizer/jitter/builder_misc.h \ + rasterizer/jitter/fetch_jit.cpp \ + rasterizer/jitter/fetch_jit.h \ + rasterizer/jitter/JitManager.cpp \ + rasterizer/jitter/JitManager.h \ + rasterizer/jitter/streamout_jit.cpp \ + rasterizer/jitter/streamout_jit.h + +MEMORY_CXX_SOURCES := \ + rasterizer/memory/ClearTile.cpp \ + rasterizer/memory/LoadTile.cpp \ + rasterizer/memory/StoreTile.cpp diff --git a/src/gallium/drivers/swr/SConscript b/src/gallium/drivers/swr/SConscript new file mode 100644 index 0000000..b688054 --- /dev/null +++ b/src/gallium/drivers/swr/SConscript @@ -0,0 +1,31 @@ +from sys import executable as python_cmd +import distutils.version +import os.path + +Import('*') + +if not env['llvm']: + print 'warning: LLVM disabled: not building swr' + Return() + +swr_arch = 'avx' +SConscript('SConscript-arch', variant_dir='avx', duplicate=0, exports='swr_arch') +swr_arch = 'avx2' +SConscript('SConscript-arch', variant_dir='avx2', duplicate=0, exports='swr_arch') + +env = env.Clone() + +env.MSVC2013Compat() + +source = env.ParseSourceList('Makefile.sources', [ + 'CXX_SOURCES' +]) + +swr = env.ConvenienceLibrary( + target = 'swr', + source = source, + ) + +env.Alias('swr', swr) + +Export('swr') diff --git a/src/gallium/drivers/swr/SConscript-arch b/src/gallium/drivers/swr/SConscript-arch new file mode 100644 index 0000000..b20a1f8 --- /dev/null +++ b/src/gallium/drivers/swr/SConscript-arch @@ -0,0 +1,117 @@ +from sys import executable as python_cmd +import distutils.version +import os.path + +Import('*') + +if not env['llvm']: + print 'warning: LLVM disabled: not building swr' + Return() + +env = env.Clone() + +env.MSVC2013Compat() + +env.Append(CPPDEFINES = [ + '__STDC_CONSTANT_MACROS', + '__STDC_LIMIT_MACROS', + ]) + +if not env['msvc'] : + env.Append(CCFLAGS = [ + '-std=c++11', + ]) + +env.Prepend(CPPPATH = [ + 'rasterizer', + 'rasterizer/core', + 'rasterizer/jitter', + 'rasterizer/scripts', + 'rasterizer/jitter', + ]) + +env.CodeGenerate( + target = 'rasterizer/scripts/gen_knobs.cpp', + script = 'rasterizer/scripts/gen_knobs.py', + source = [], + command = python_cmd + ' $SCRIPT ' + Dir('rasterizer/scripts').abspath +) + +env.CodeGenerate( + target = 'rasterizer/scripts/gen_knobs.h', + script = 'rasterizer/scripts/gen_knobs.py', + source = [], + command = python_cmd + ' $SCRIPT ' + Dir('rasterizer/scripts').abspath +) + +env.CodeGenerate( + target = 'rasterizer/jitter/state_llvm.h', + script = 'rasterizer/jitter/scripts/gen_llvm_types.py', + source = 'rasterizer/core/state.h', + command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET' +) + +env.CodeGenerate( + target = 'rasterizer/jitter/builder_gen.h', + script = 'rasterizer/jitter/scripts/gen_llvm_ir_macros.py', + source = os.path.join(env['llvm_includedir'], 'llvm/IR/IRBuilder.h'), + command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET --gen_h' +) + +env.CodeGenerate( + target = 'rasterizer/jitter/builder_gen.cpp', + script = 'rasterizer/jitter/scripts/gen_llvm_ir_macros.py', + source = os.path.join(env['llvm_includedir'], 'llvm/IR/IRBuilder.h'), + command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET --gen_cpp' +) + +env.CodeGenerate( + target = 'rasterizer/jitter/builder_x86.h', + script = 'rasterizer/jitter/scripts/gen_llvm_ir_macros.py', + source = '', + command = python_cmd + ' $SCRIPT --output $TARGET --gen_x86_h' +) + +env.CodeGenerate( + target = 'rasterizer/jitter/builder_x86.cpp', + script = 'rasterizer/jitter/scripts/gen_llvm_ir_macros.py', + source = '', + command = python_cmd + ' $SCRIPT --output $TARGET --gen_x86_cpp' +) + +source = [ + 'rasterizer/scripts/gen_knobs.cpp', 'rasterizer/scripts/gen_knobs.h', + 'rasterizer/jitter/builder_gen.cpp', 'rasterizer/jitter/builder_gen.h', + 'rasterizer/jitter/builder_x86.cpp', 'rasterizer/jitter/builder_x86.h', + ] + +source += env.ParseSourceList('../Makefile.sources-arch', [ + 'CXX_SOURCES', + 'COMMON_CXX_SOURCES', + 'CORE_CXX_SOURCES', + 'JITTER_CXX_SOURCES', + 'MEMORY_CXX_SOURCES' +]) + +# remove headers, as scons thinks they are static objects for the .so +source = [x for x in source if not x.endswith(tuple(['.h','.hpp']))] + +env.Prepend(LIBS = [ mesautil, mesa, gallium ]) + +Import('swr_arch') + +if swr_arch == 'avx': + env.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX']) + env.Append(CCFLAGS = ['-march=core-avx-i']) + swrAVX = env.SharedLibrary(target = 'swrAVX', source = source) + env.Alias('swrAVX', swrAVX) + Export('swrAVX') +elif swr_arch == 'avx2': + env.Append(CPPDEFINES = ['KNOB_ARCH=KNOB_ARCH_AVX2']) + env.Append(CCFLAGS = ['-march=core-avx2']) + swrAVX2 = env.SharedLibrary(target = 'swrAVX2', source = source) + env.Alias('swrAVX2', swrAVX2) + Export('swrAVX2') +else: + print "unknown swr architecture" + exit(1) diff --git a/src/gallium/drivers/swr/avx/Makefile.am b/src/gallium/drivers/swr/avx/Makefile.am new file mode 100644 index 0000000..c09fb5a --- /dev/null +++ b/src/gallium/drivers/swr/avx/Makefile.am @@ -0,0 +1,112 @@ +# Copyright (C) 2015 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +AUTOMAKE_OPTIONS = subdir-objects + +include ../Makefile.sources-arch +include $(top_srcdir)/src/gallium/Automake.inc + +VPATH = $(srcdir) $(srcdir)/.. + +AM_CXXFLAGS = \ + $(GALLIUM_DRIVER_CFLAGS) \ + -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS \ + -march=core-avx-i -DKNOB_ARCH=KNOB_ARCH_AVX \ + $(LLVM_CFLAGS) + +lib_LTLIBRARIES = libswrAVX.la + +libswrAVX_la_SOURCES = $(CXX_SOURCES) + +libswrAVX_la_LDFLAGS = + +BUILT_SOURCES = \ + rasterizer/scripts/gen_knobs.cpp \ + rasterizer/scripts/gen_knobs.h \ + rasterizer/jitter/state_llvm.h \ + rasterizer/jitter/builder_gen.h \ + rasterizer/jitter/builder_gen.cpp \ + rasterizer/jitter/builder_x86.h \ + rasterizer/jitter/builder_x86.cpp + +rasterizer/scripts/gen_knobs.cpp rasterizer/scripts/gen_knobs.h: rasterizer/scripts/gen_knobs.py rasterizer/scripts/knob_defs.py rasterizer/scripts/templates/knobs.template + $(PYTHON2) $(PYTHON_FLAGS) \ + $(srcdir)/../rasterizer/scripts/gen_knobs.py \ + rasterizer/scripts + +rasterizer/jitter/state_llvm.h: rasterizer/jitter/scripts/gen_llvm_types.py rasterizer/core/state.h + $(PYTHON2) $(PYTHON_FLAGS) \ + $(srcdir)/../rasterizer/jitter/scripts/gen_llvm_types.py \ + --input $(srcdir)/../rasterizer/core/state.h \ + --output rasterizer/jitter/state_llvm.h + +rasterizer/jitter/builder_gen.h: rasterizer/jitter/scripts/gen_llvm_ir_macros.py $(LLVM_INCLUDEDIR)/llvm/IR/IRBuilder.h + $(PYTHON2) $(PYTHON_FLAGS) \ + $(srcdir)/../rasterizer/jitter/scripts/gen_llvm_ir_macros.py \ + --input $(LLVM_INCLUDEDIR)/llvm/IR/IRBuilder.h \ + --output rasterizer/jitter/builder_gen.h \ + --gen_h + +rasterizer/jitter/builder_gen.cpp: rasterizer/jitter/scripts/gen_llvm_ir_macros.py $(LLVM_INCLUDEDIR)/llvm/IR/IRBuilder.h + $(PYTHON2) $(PYTHON_FLAGS) \ + $(srcdir)/../rasterizer/jitter/scripts/gen_llvm_ir_macros.py \ + --input $(LLVM_INCLUDEDIR)/llvm/IR/IRBuilder.h \ + --output rasterizer/jitter/builder_gen.cpp \ + --gen_cpp + +rasterizer/jitter/builder_x86.h: rasterizer/jitter/scripts/gen_llvm_ir_macros.py + $(PYTHON2) $(PYTHON_FLAGS) \ + $(srcdir)/../rasterizer/jitter/scripts/gen_llvm_ir_macros.py \ + --output rasterizer/jitter/builder_x86.h \ + --gen_x86_h + +rasterizer/jitter/builder_x86.cpp: rasterizer/jitter/scripts/gen_llvm_ir_macros.py + $(PYTHON2) $(PYTHON_FLAGS) \ + $(srcdir)/../rasterizer/jitter/scripts/gen_llvm_ir_macros.py \ + --output rasterizer/jitter/builder_x86.cpp \ + --gen_x86_cpp + +libswrAVX_la_SOURCES += \ + $(COMMON_CXX_SOURCES) \ + $(CORE_CXX_SOURCES) \ + $(JITTER_CXX_SOURCES) \ + $(MEMORY_CXX_SOURCES) \ + rasterizer/scripts/gen_knobs.cpp \ + rasterizer/scripts/gen_knobs.h \ + rasterizer/jitter/builder_gen.cpp \ + rasterizer/jitter/builder_gen.h \ + rasterizer/jitter/builder_x86.cpp \ + rasterizer/jitter/builder_x86.h + +AM_CXXFLAGS += \ + -I$(srcdir)/../rasterizer \ + -I$(srcdir)/../rasterizer/core \ + -I$(srcdir)/../rasterizer/jitter \ + -I$(builddir)/rasterizer/scripts \ + -I$(builddir)/rasterizer/jitter + +libswrAVX_la_LIBADD = \ + $(top_builddir)/src/gallium/auxiliary/libgallium.la \ + $(top_builddir)/src/mesa/libmesagallium.la + +include $(top_srcdir)/install-gallium-links.mk + +EXTRA_DIST = SConscript diff --git a/src/gallium/drivers/swr/avx2/Makefile.am b/src/gallium/drivers/swr/avx2/Makefile.am new file mode 100644 index 0000000..3a63395 --- /dev/null +++ b/src/gallium/drivers/swr/avx2/Makefile.am @@ -0,0 +1,112 @@ +# Copyright (C) 2015 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +AUTOMAKE_OPTIONS = subdir-objects + +include ../Makefile.sources-arch +include $(top_srcdir)/src/gallium/Automake.inc + +VPATH = $(srcdir) $(srcdir)/.. + +AM_CXXFLAGS = \ + $(GALLIUM_DRIVER_CFLAGS) \ + -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS \ + -march=core-avx2 -DKNOB_ARCH=KNOB_ARCH_AVX2 \ + $(LLVM_CFLAGS) + +lib_LTLIBRARIES = libswrAVX2.la + +libswrAVX2_la_SOURCES = $(CXX_SOURCES) + +libswrAVX2_la_LDFLAGS = + +BUILT_SOURCES = \ + rasterizer/scripts/gen_knobs.cpp \ + rasterizer/scripts/gen_knobs.h \ + rasterizer/jitter/state_llvm.h \ + rasterizer/jitter/builder_gen.h \ + rasterizer/jitter/builder_gen.cpp \ + rasterizer/jitter/builder_x86.h \ + rasterizer/jitter/builder_x86.cpp + +rasterizer/scripts/gen_knobs.cpp rasterizer/scripts/gen_knobs.h: rasterizer/scripts/gen_knobs.py rasterizer/scripts/knob_defs.py rasterizer/scripts/templates/knobs.template + $(PYTHON2) $(PYTHON_FLAGS) \ + $(srcdir)/../rasterizer/scripts/gen_knobs.py \ + rasterizer/scripts + +rasterizer/jitter/state_llvm.h: rasterizer/jitter/scripts/gen_llvm_types.py rasterizer/core/state.h + $(PYTHON2) $(PYTHON_FLAGS) \ + $(srcdir)/../rasterizer/jitter/scripts/gen_llvm_types.py \ + --input $(srcdir)/../rasterizer/core/state.h \ + --output rasterizer/jitter/state_llvm.h + +rasterizer/jitter/builder_gen.h: rasterizer/jitter/scripts/gen_llvm_ir_macros.py $(LLVM_INCLUDEDIR)/llvm/IR/IRBuilder.h + $(PYTHON2) $(PYTHON_FLAGS) \ + $(srcdir)/../rasterizer/jitter/scripts/gen_llvm_ir_macros.py \ + --input $(LLVM_INCLUDEDIR)/llvm/IR/IRBuilder.h \ + --output rasterizer/jitter/builder_gen.h \ + --gen_h + +rasterizer/jitter/builder_gen.cpp: rasterizer/jitter/scripts/gen_llvm_ir_macros.py $(LLVM_INCLUDEDIR)/llvm/IR/IRBuilder.h + $(PYTHON2) $(PYTHON_FLAGS) \ + $(srcdir)/../rasterizer/jitter/scripts/gen_llvm_ir_macros.py \ + --input $(LLVM_INCLUDEDIR)/llvm/IR/IRBuilder.h \ + --output rasterizer/jitter/builder_gen.cpp \ + --gen_cpp + +rasterizer/jitter/builder_x86.h: rasterizer/jitter/scripts/gen_llvm_ir_macros.py + $(PYTHON2) $(PYTHON_FLAGS) \ + $(srcdir)/../rasterizer/jitter/scripts/gen_llvm_ir_macros.py \ + --output rasterizer/jitter/builder_x86.h \ + --gen_x86_h + +rasterizer/jitter/builder_x86.cpp: rasterizer/jitter/scripts/gen_llvm_ir_macros.py + $(PYTHON2) $(PYTHON_FLAGS) \ + $(srcdir)/../rasterizer/jitter/scripts/gen_llvm_ir_macros.py \ + --output rasterizer/jitter/builder_x86.cpp \ + --gen_x86_cpp + +libswrAVX2_la_SOURCES += \ + $(COMMON_CXX_SOURCES) \ + $(CORE_CXX_SOURCES) \ + $(JITTER_CXX_SOURCES) \ + $(MEMORY_CXX_SOURCES) \ + rasterizer/scripts/gen_knobs.cpp \ + rasterizer/scripts/gen_knobs.h \ + rasterizer/jitter/builder_gen.cpp \ + rasterizer/jitter/builder_gen.h \ + rasterizer/jitter/builder_x86.cpp \ + rasterizer/jitter/builder_x86.h + +AM_CXXFLAGS += \ + -I$(srcdir)/../rasterizer \ + -I$(srcdir)/../rasterizer/core \ + -I$(srcdir)/../rasterizer/jitter \ + -I$(builddir)/rasterizer/scripts \ + -I$(builddir)/rasterizer/jitter + +libswrAVX2_la_LIBADD = \ + $(top_builddir)/src/gallium/auxiliary/libgallium.la \ + $(top_builddir)/src/mesa/libmesagallium.la + +include $(top_srcdir)/install-gallium-links.mk + +EXTRA_DIST = SConscript diff --git a/src/gallium/targets/libgl-gdi/SConscript b/src/gallium/targets/libgl-gdi/SConscript index 3a63e3e..39ee91b 100644 --- a/src/gallium/targets/libgl-gdi/SConscript +++ b/src/gallium/targets/libgl-gdi/SConscript @@ -27,8 +27,12 @@ if True: drivers += [softpipe] if env['llvm']: - env.Append(CPPDEFINES = 'HAVE_LLVMPIPE') - drivers += [llvmpipe] + if 'swr' in COMMAND_LINE_TARGETS : + env.Append(CPPDEFINES = 'HAVE_SWR') + drivers += [swr] + else: + env.Append(CPPDEFINES = 'HAVE_LLVMPIPE') + drivers += [llvmpipe] if env['gcc'] and env['machine'] != 'x86_64': # DEF parser in certain versions of MinGW is busted, as does not behave as diff --git a/src/gallium/targets/libgl-xlib/Makefile.am b/src/gallium/targets/libgl-xlib/Makefile.am index d99caae..527d01b 100644 --- a/src/gallium/targets/libgl-xlib/Makefile.am +++ b/src/gallium/targets/libgl-xlib/Makefile.am @@ -84,4 +84,9 @@ endif EXTRA_lib@GL_LIB@_la_DEPENDENCIES = libgl-xlib.sym EXTRA_DIST = SConscript libgl-xlib.sym +if HAVE_GALLIUM_SWR +lib@GL_LIB@_la_LIBADD += $(top_builddir)/src/gallium/drivers/swr/libmesaswr.la $(LLVM_LIBS) +AM_CPPFLAGS += -DGALLIUM_SWR +endif + include $(top_srcdir)/install-gallium-links.mk diff --git a/src/gallium/targets/libgl-xlib/SConscript b/src/gallium/targets/libgl-xlib/SConscript index e1c78dd..73c2413 100644 --- a/src/gallium/targets/libgl-xlib/SConscript +++ b/src/gallium/targets/libgl-xlib/SConscript @@ -47,6 +47,10 @@ if env['llvm']: env.Append(CPPDEFINES = ['GALLIUM_LLVMPIPE']) env.Prepend(LIBS = [llvmpipe]) +if env['llvm']: + env.Append(CPPDEFINES = ['GALLIUM_SWR']) + env.Prepend(LIBS = [swr]) + if env['platform'] != 'darwin': env.Append(SHLINKFLAGS = [ # Disallow undefined symbols diff --git a/src/gallium/targets/osmesa/Makefile.am b/src/gallium/targets/osmesa/Makefile.am index 38e515f..5d39486 100644 --- a/src/gallium/targets/osmesa/Makefile.am +++ b/src/gallium/targets/osmesa/Makefile.am @@ -74,6 +74,12 @@ lib@OSMESA_LIB@_la_LDFLAGS += $(LLVM_LDFLAGS) lib@OSMESA_LIB@_la_LIBADD += $(top_builddir)/src/gallium/drivers/llvmpipe/libllvmpipe.la $(LLVM_LIBS) endif +if HAVE_GALLIUM_SWR +AM_CPPFLAGS += -DGALLIUM_SWR +lib@OSMESA_LIB@_la_LDFLAGS += $(LLVM_LDFLAGS) +lib@OSMESA_LIB@_la_LIBADD += $(top_builddir)/src/gallium/drivers/swr/libmesaswr.la $(LLVM_LIBS) +endif + EXTRA_lib@OSMESA_LIB@_la_DEPENDENCIES = osmesa.sym EXTRA_DIST = \ osmesa.sym \ diff --git a/src/gallium/targets/osmesa/SConscript b/src/gallium/targets/osmesa/SConscript index eeaacbc..fb9c879 100644 --- a/src/gallium/targets/osmesa/SConscript +++ b/src/gallium/targets/osmesa/SConscript @@ -29,6 +29,10 @@ if env['llvm']: env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE') env.Prepend(LIBS = [llvmpipe]) +if env['llvm']: + env.Append(CPPDEFINES = ['GALLIUM_SWR']) + env.Prepend(LIBS = [swr]) + if env['platform'] == 'windows': if env['gcc'] and env['machine'] != 'x86_64': sources += ['osmesa.mingw.def'] -- 1.9.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev