aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordan sinclair <dj2@everburning.com>2019-05-21 17:45:13 -0400
committerDavid Neto <dneto@google.com>2019-05-21 14:45:13 -0700
commit9d11af8005f5ae9568391e70ff6a2bb50861b0fe (patch)
tree71307a9b99935b058aea1e9eef32efefe7648c8c
parente5dc020a6f781aaa7c1dd61a59307e51437c114f (diff)
downloadamber-9d11af8005f5ae9568391e70ff6a2bb50861b0fe.tar.gz
Add support for building SwiftShader (#512)
* Build with swiftshader * Roll swiftshader
-rw-r--r--.gitignore1
-rw-r--r--CMakeLists.txt9
-rw-r--r--DEPS5
-rw-r--r--README.md12
-rw-r--r--src/vulkan/find_vulkan.cmake24
-rw-r--r--third_party/CMakeLists.txt87
6 files changed, 125 insertions, 13 deletions
diff --git a/.gitignore b/.gitignore
index 850a919..dc094fe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,7 @@ third_party/lodepng
third_party/shaderc
third_party/spirv-tools
third_party/spirv-headers
+third_party/swiftshader
third_party/vulkan-headers
third_party/vulkan-loader
.vs
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 80a0df7..e066727 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,6 +42,9 @@ option(AMBER_SKIP_SHADERC
option(AMBER_SKIP_SAMPLES
"Skip building sample application" ${AMBER_SKIP_SAMPLES})
option(AMBER_USE_LOCAL_VULKAN "Build with vulkan in third_party" OFF)
+option(AMBER_ENABLE_SWIFTSHADER
+ "Build using SwiftShader" ${AMBER_ENABLE_SWIFTSHADER})
+option(AMBER_USE_LOCAL_VULKAN "Build with vulkan in third_party" OFF)
if (${AMBER_SKIP_SPIRV_TOOLS})
set(AMBER_ENABLE_SPIRV_TOOLS FALSE)
@@ -66,6 +69,11 @@ else()
set(AMBER_ENABLE_SAMPLES TRUE)
endif()
+if (${AMBER_ENABLE_SWIFTSHADER})
+ # Swiftshader requires the loader to be built.
+ set(AMBER_USE_LOCAL_VULKAN TRUE)
+endif()
+
if (${AMBER_USE_LOCAL_VULKAN})
message(STATUS "Using python3")
# vulkan-loaders requires python 3
@@ -76,6 +84,7 @@ message(STATUS "Amber enable SPIRV-Tools: ${AMBER_ENABLE_SPIRV_TOOLS}")
message(STATUS "Amber enable Shaderc: ${AMBER_ENABLE_SHADERC}")
message(STATUS "Amber enable tests: ${AMBER_ENABLE_TESTS}")
message(STATUS "Amber enable samples: ${AMBER_ENABLE_SAMPLES}")
+message(STATUS "Amber enable SwiftShader: ${AMBER_ENABLE_SWIFTSHADER}")
include_directories("${PROJECT_SOURCE_DIR}/include")
include_directories("${PROJECT_SOURCE_DIR}")
diff --git a/DEPS b/DEPS
index 8db61b2..32f3c15 100644
--- a/DEPS
+++ b/DEPS
@@ -4,6 +4,7 @@ vars = {
'google_git': 'https://github.com/google',
'khronos_git': 'https://github.com/KhronosGroup',
'lvandeve_git': 'https://github.com/lvandeve',
+ 'swiftshader_git': 'https://swiftshader.googlesource.com',
'cpplint_revision': '9f41862c0efa7681e2147910d39629c73a2b2702',
'glslang_revision': 'f44b17ee135d5e153ce000e88b806b5377812b11',
@@ -12,6 +13,7 @@ vars = {
'shaderc_revision': '53c776f776821bc037b31b8b3b79db2fa54b4ce7',
'spirv_headers_revision': '03a081524afabdde274d885880c2fef213e46a59',
'spirv_tools_revision': '07f80c4df1b0619ee484c38e79a7ad71f672ca14',
+ 'swiftshader_revision': 'a453ba42f72d0e513ada6bb29409bcde5d298612',
'vulkan_headers_revision': '8e2c4cd554b644592a6d904f2c8000ebbd4aa77f',
'vulkan_loader_revision': '15fa85d92454f7823febeb68b56038d427e2a7a4',
}
@@ -38,6 +40,9 @@ deps = {
'third_party/spirv-tools': vars['khronos_git'] + '/SPIRV-Tools.git@' +
vars['spirv_tools_revision'],
+ 'third_party/swiftshader': vars['swiftshader_git'] + '/SwiftShader.git@' +
+ vars['swiftshader_revision'],
+
'third_party/vulkan-headers': vars['khronos_git'] + '/Vulkan-Headers.git@' +
vars['vulkan_headers_revision'],
diff --git a/README.md b/README.md
index ec8665e..26d04d0 100644
--- a/README.md
+++ b/README.md
@@ -193,3 +193,15 @@ Please see the [CONTRIBUTING](CONTRIBUTING.md) and
[Talvos]: https://talvos.github.io/
[Vulkan-Headers]: https://github.com/KhronosGroup/Vulkan-Headers
[VkRunner]: https://github.com/igalia/vkrunner
+
+### Using SwiftShader as a backend
+
+```
+mkdir out/sw
+cd out/sw
+cmake -GNinja -DAMBER_ENABLE_SWIFTSHADER=TRUE ../..
+ninja
+export VK_ICD_FILENAMES=$PWD/Linux/vk_swiftshader_icd.json
+./amber -d -V # Should see SwiftShader listed as device
+./amber -d ../../tests/cases/clear.vkscript
+```
diff --git a/src/vulkan/find_vulkan.cmake b/src/vulkan/find_vulkan.cmake
index 42e45bd..7097ecf 100644
--- a/src/vulkan/find_vulkan.cmake
+++ b/src/vulkan/find_vulkan.cmake
@@ -19,17 +19,19 @@ set(Vulkan_FOUND FALSE)
set(VULKAN_CTS_HEADER FALSE)
set(VULKAN_LIB "")
-if (${AMBER_USE_LOCAL_VULKAN})
- set(Vulkan_FOUND TRUE)
- set(VulkanHeaders_INCLUDE_DIR
- ${PROJECT_SOURCE_DIR}/third_party/vulkan-headers/include
- CACHE PATH "vk headers dir" FORCE)
- set(VulkanRegistry_DIR
- ${PROJECT_SOURCE_DIR}/third_party/vulkan-headers/registry
- CACHE PATH "vk_registry_dir" FORCE)
- include_directories(BEFORE "${VulkanHeaders_INCLUDE_DIR}")
- set(VULKAN_LIB vulkan)
- message(STATUS "Amber: using local vulkan")
+if (NOT ${Vulkan_FOUND})
+ if (${AMBER_USE_LOCAL_VULKAN})
+ set(Vulkan_FOUND TRUE)
+ set(VulkanHeaders_INCLUDE_DIR
+ ${PROJECT_SOURCE_DIR}/third_party/vulkan-headers/include
+ CACHE PATH "vk headers dir" FORCE)
+ set(VulkanRegistry_DIR
+ ${PROJECT_SOURCE_DIR}/third_party/vulkan-headers/registry
+ CACHE PATH "vk_registry_dir" FORCE)
+ include_directories(BEFORE "${VulkanHeaders_INCLUDE_DIR}")
+ set(VULKAN_LIB vulkan)
+ message(STATUS "Amber: using local vulkan")
+ endif()
endif()
if (NOT ${Vulkan_FOUND})
diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt
index 8b91f6a..256b172 100644
--- a/third_party/CMakeLists.txt
+++ b/third_party/CMakeLists.txt
@@ -146,6 +146,65 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(VULKAN_LOADER_BUILD_FIXES
-Wno-unknown-warning-option
)
+
+ set(SWIFTSHADER_BUILD_FIXES
+ -Wno-cast-align
+ -Wno-cast-qual
+ -Wno-comma
+ -Wno-conditional-uninitialized
+ -Wno-conversion
+ -Wno-covered-switch-default
+ -Wno-deprecated
+ -Wno-disabled-macro-expansion
+ -Wno-documentation-unknown-command
+ -Wno-double-promotion
+ -Wno-error
+ -Wno-exit-time-destructors
+ -Wno-extra-semi
+ -Wno-float-equal
+ -Wno-format-nonliteral
+ -Wno-global-constructors
+ -Wno-gnu-anonymous-struct
+ -Wno-gnu-zero-variadic-macro-arguments
+ -Wno-header-hygiene
+ -Wno-implicit-fallthrough
+ -Wno-inconsistent-missing-destructor-override
+ -Wno-keyword-macro
+ -Wno-missing-field-initializers
+ -Wno-missing-noreturn
+ -Wno-missing-prototypes
+ -Wno-missing-variable-declarations
+ -Wno-nested-anon-types
+ -Wno-newline-eof
+ -Wno-non-virtual-dtor
+ -Wno-old-style-cast
+ -Wno-range-loop-analysis
+ -Wno-redundant-parens
+ -Wno-reserved-id-macro
+ -Wno-return-std-move-in-c++11
+ -Wno-shift-sign-overflow
+ -Wno-sign-conversion
+ -Wno-signed-enum-bitfield
+ -Wno-shadow
+ -Wno-shadow-field
+ -Wno-shadow-field-in-constructor
+ -Wno-shorten-64-to-32
+ -Wno-tautological-unsigned-zero-compare
+ -Wno-undef
+ -Wno-undefined-func-template
+ -Wno-undefined-reinterpret-cast
+ -Wno-used-but-marked-unused
+ -Wno-unused-parameter
+ -Wno-unused-macros
+ -Wno-unused-member-function
+ -Wno-unused-template
+ -Wno-unreachable-code
+ -Wno-unreachable-code-break
+ -Wno-unreachable-code-return
+ -Wno-weak-template-vtables
+ -Wno-weak-vtables
+ -Wno-zero-as-null-pointer-constant
+ )
endif()
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
@@ -166,10 +225,16 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(SPIRV_TOOLS_BUILD_FIXES "")
set(SHADERC_BUILD_FIXES
- -Wno-missing-field-initializers
- -Wno-pedantic)
+ -Wno-missing-field-initializers
+ -Wno-pedantic)
set(VULKAN_LOADER_BUILD_FIXES "")
+
+ set(SWIFTSHADER_BUILD_FIXES
+ -Wno-all
+ -Wno-error
+ -Wno-pedantic
+ )
endif()
if (MSVC)
@@ -250,6 +315,10 @@ if (MSVC)
set(VULKAN_LOADER_BUILD_FIXES
/W3
)
+
+ set(SWIFTSHADER_BUILD_FIXES
+ /W3
+ )
endif()
if (${AMBER_ENABLE_TESTS})
@@ -318,3 +387,17 @@ if (${AMBER_USE_LOCAL_VULKAN})
set(CMAKE_CXX_FLAGS ${CXX_BACK})
endif()
+if (${AMBER_ENABLE_SWIFTSHADER})
+ set(CXX_BACK ${CMAKE_CXX_FLAGS})
+ SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "${SWIFTSHADER_BUILD_FIXES}")
+ STRING(REGEX REPLACE ";" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+
+ set(BUILD_EGL FALSE CACHE BOOL FALSE)
+ set(BUILD_GLESv2 FALSE CACHE BOOL FALSE)
+ set(BUILD_GLES_CM FALSE CACHE BOOL FALSE)
+ set(BUILD_VULKAN TRUE CACHE BOOL TRUE)
+ set(BUILD_SAMPLES FALSE CACHE BOOL FALSE)
+ set(BUILD_TESTS FALSE CACHE BOOL FALSE)
+ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/swiftshader)
+ set(CMAKE_CXX_FLAGS ${CXX_BACK})
+endif()