[go: nahoru, domu]

Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
Jorgemagic committed Aug 27, 2019
2 parents 43e1141 + 7f76560 commit 4af4d94
Show file tree
Hide file tree
Showing 41 changed files with 1,257 additions and 489 deletions.
45 changes: 34 additions & 11 deletions BuildAll.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,31 +39,37 @@ def FindProgramFilesFolder():
programFilesFolder = "C:\Program Files"
return programFilesFolder

def FindVS2017Folder(programFilesFolder):
def FindVS2017OrUpFolder(programFilesFolder, vsVersion, vsName):
tryVswhereLocation = programFilesFolder + "\\Microsoft Visual Studio\\Installer\\vswhere.exe"
if os.path.exists(tryVswhereLocation):
vsLocation = subprocess.check_output([tryVswhereLocation,
"-latest",
"-requires", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
"-property", "installationPath",
"-version", "[15.0,16.0)",
"-version", "[%d.0,%d.0)" % (vsVersion, vsVersion + 1),
"-prerelease"]).decode().split("\r\n")[0]
tryFolder = vsLocation + "\\VC\\Auxiliary\\Build\\"
tryVcvarsall = "VCVARSALL.BAT"
if os.path.exists(tryFolder + tryVcvarsall):
return tryFolder
else:
names = ("Preview", "2017")
names = ("Preview", vsName)
skus = ("Community", "Professional", "Enterprise")
for name in names:
for sku in skus:
tryFolder = programFilesFolder + "\\Microsoft Visual Studio\\%s\\%s\\VC\\Auxiliary\\Build\\" % (name, sku)
tryVcvarsall = "VCVARSALL.BAT"
if os.path.exists(tryFolder + tryVcvarsall):
return tryFolder
LogError("Could NOT find VS2017.\n")
LogError("Could NOT find VS%s.\n" % vsName)
return ""

def FindVS2019Folder(programFilesFolder):
return FindVS2017OrUpFolder(programFilesFolder, 16, "2019")

def FindVS2017Folder(programFilesFolder):
return FindVS2017OrUpFolder(programFilesFolder, 15, "2017")

def FindVS2015Folder(programFilesFolder):
env = os.environ
if "VS140COMNTOOLS" in env:
Expand Down Expand Up @@ -120,13 +126,15 @@ def Execute(self):
buildSys = sys.argv[1]
else:
if hostPlatform == "win":
buildSys = "vs2017"
buildSys = "vs2019"
else:
buildSys = "ninja"
if (argc > 2):
compiler = sys.argv[2]
else:
if buildSys == "vs2017":
if buildSys == "vs2019":
compiler = "vc142"
elif buildSys == "vs2017":
compiler = "vc141"
elif buildSys == "vs2015":
compiler = "vc140"
Expand Down Expand Up @@ -156,18 +164,31 @@ def Execute(self):
batCmd = BatchCommand(hostPlatform)
if hostPlatform == "win":
programFilesFolder = FindProgramFilesFolder()
if (buildSys == "vs2017") or ((buildSys == "ninja") and (compiler == "vc141")):
if (buildSys == "vs2019") or ((buildSys == "ninja") and (compiler == "vc142")):
vsFolder = FindVS2019Folder(programFilesFolder)
elif (buildSys == "vs2017") or ((buildSys == "ninja") and (compiler == "vc141")):
vsFolder = FindVS2017Folder(programFilesFolder)
elif (buildSys == "vs2015") or ((buildSys == "ninja") and (compiler == "vc140")):
vsFolder = FindVS2015Folder(programFilesFolder)
if "x64" == arch:
vcOption = "amd64"
vcArch = "x64"
elif "x86" == arch:
vcOption = "x86"
vcArch = "Win32"
elif "arm64" == arch:
vcOption = "amd64_arm64"
vcArch = "ARM64"
elif "arm" == arch:
vcOption = "amd64_arm"
vcArch = "ARM"
else:
LogError("Unsupported architecture.\n")
vcToolset = ""
if (buildSys == "vs2017") and (compiler == "vc140"):
if (buildSys == "vs2019") and (compiler == "vc141"):
vcOption += " -vcvars_ver=14.1"
vcToolset = "v141,"
elif ((buildSys == "vs2019") or (buildSys == "vs2017")) and (compiler == "vc140"):
vcOption += " -vcvars_ver=14.0"
vcToolset = "v140,"
batCmd.AddCommand("@call \"%sVCVARSALL.BAT\" %s" % (vsFolder, vcOption))
Expand All @@ -179,12 +200,14 @@ def Execute(self):
batCmd.AddCommand("cmake -G Ninja -DCMAKE_BUILD_TYPE=\"%s\" -DSC_ARCH_NAME=\"%s\" ../../" % (configuration, arch))
batCmd.AddCommand("ninja -j%d" % parallel)
else:
if buildSys == "vs2017":
if buildSys == "vs2019":
generator = "\"Visual Studio 16\""
elif buildSys == "vs2017":
generator = "\"Visual Studio 15\""
elif buildSys == "vs2015":
generator = "\"Visual Studio 14\""
batCmd.AddCommand("cmake -G %s -T %shost=x64 -A %s ../../" % (generator, vcToolset, arch))
batCmd.AddCommand("MSBuild ALL_BUILD.vcxproj /nologo /m:%d /v:m /p:Configuration=%s,Platform=%s" % (parallel, configuration, arch))
batCmd.AddCommand("cmake -G %s -T %shost=x64 -A %s ../../" % (generator, vcToolset, vcArch))
batCmd.AddCommand("MSBuild ALL_BUILD.vcxproj /nologo /m:%d /v:m /p:Configuration=%s,Platform=%s" % (parallel, configuration, vcArch))
if batCmd.Execute() != 0:
LogError("Build failed.\n")

Expand Down
24 changes: 24 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ if((CMAKE_C_COMPILER_ID MATCHES GNU) OR (CMAKE_C_COMPILER_ID MATCHES Clang))
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1z")
endif()

set(Python_ADDITIONAL_VERSIONS 3.5 3.6 3.7)

# DirectXShaderCompiler requires it
add_definitions(-D_ITERATOR_DEBUG_LEVEL=0)
# Handle a compiling issue of SPIR-V
Expand All @@ -49,6 +51,28 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
endforeach()
endif()

if(WIN32)
if(MSVC AND (CMAKE_GENERATOR MATCHES "^Visual Studio"))
if((CMAKE_GENERATOR_PLATFORM STREQUAL "x64") OR (CMAKE_GENERATOR MATCHES "Win64"))
set(SC_ARCH_NAME "x64")
elseif((CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64") OR (CMAKE_GENERATOR MATCHES "ARM64"))
set(SC_ARCH_NAME "arm64")
elseif((CMAKE_GENERATOR_PLATFORM STREQUAL "ARM") OR (CMAKE_GENERATOR MATCHES "ARM"))
set(SC_ARCH_NAME "arm")
else()
set(SC_ARCH_NAME "x86")
endif()
endif()
else()
if(NOT SC_ARCH_NAME)
if((CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64") OR (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64"))
set(SC_ARCH_NAME "x64")
else()
set(SC_ARCH_NAME "x86")
endif()
endif()
endif()

add_subdirectory(Source)
add_subdirectory(External)

Expand Down
52 changes: 37 additions & 15 deletions External/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

find_program(git_executable NAMES git git.exe git.cmd)
if(NOT git_executable)
message(FATAL_ERROR "Failed to find git.")
endif()

set(cxxopts_REV "3f2d70530219e09fe7e563f86126b0d3b228a60d")
set(googletest_REV "440527a61e1c91188195f7de212c63c77e8f0a45")
set(SPIRV_Headers_REV "bbf63435c37aafac5d1cdfc287401d87cd3ca364")
set(SPIRV_Tools_REV "c512c6864080ff617afb422a3d04dd902809a6cf")
set(DirectXShaderCompiler_REV "ac18ec5819a79966b0061794f7ae6bdf4556e728")
set(SPIRV_Cross_REV "f734d78c1536b9c786bd54ab6a30caa4f8cb0bff")
set(SPIRV_Headers_REV "4b0985f29277a81f5ce88feb0502cc44d6d5e7c3")
set(SPIRV_Tools_REV "e935dac9ef8a01fdb6d0a4b7898563e6f62d1081")
set(DirectXShaderCompiler_REV "2dec1cd0df488988f27c5ce790d9025efe582908")
set(SPIRV_Cross_REV "cb686a5dba9a7086a778fe21900383beed9ea5d3")

function(UpdateExternalLib name url rev)
set(need_checkout FALSE)
set(external_folder "${SC_ROOT_DIR}/External")
set(external_lib_folder "${external_folder}/${name}")
if(EXISTS ${external_lib_folder})
message(STATUS "Updating ${name} to revision ${rev}...")
execute_process(COMMAND "git" "fetch" "origin" WORKING_DIRECTORY "${external_lib_folder}")
execute_process(COMMAND "git" "rev-parse" "HEAD" WORKING_DIRECTORY "${external_lib_folder}" OUTPUT_VARIABLE head_rev)
execute_process(COMMAND "${git_executable}" "fetch" "origin" WORKING_DIRECTORY "${external_lib_folder}")
execute_process(COMMAND "${git_executable}" "rev-parse" "HEAD" WORKING_DIRECTORY "${external_lib_folder}" OUTPUT_VARIABLE head_rev)
string(STRIP ${head_rev} head_rev)
if (${head_rev} STREQUAL ${rev})
set(need_checkout FALSE)
Expand All @@ -24,12 +29,12 @@ function(UpdateExternalLib name url rev)
endif()
else()
message(STATUS "Cloning ${name} revision...")
execute_process(COMMAND "git" "clone" ${url} "-n" WORKING_DIRECTORY "${external_folder}")
execute_process(COMMAND "${git_executable}" "clone" ${url} "-n" WORKING_DIRECTORY "${external_folder}")
set(need_checkout TRUE)
endif()
if(need_checkout)
message(STATUS "Checking out to revision ${rev}...")
execute_process(COMMAND "git" "checkout" "-q" ${rev} WORKING_DIRECTORY "${external_lib_folder}")
execute_process(COMMAND "${git_executable}" "checkout" "-q" ${rev} WORKING_DIRECTORY "${external_lib_folder}")
endif()
endfunction()

Expand Down Expand Up @@ -59,13 +64,16 @@ set(SPIRV_SKIP_EXECUTABLES ON CACHE BOOL "" FORCE)
set(SPIRV_TOOLS_EXTRA_DEFINITIONS /D_ITERATOR_DEBUG_LEVEL=0)
add_subdirectory(SPIRV-Tools EXCLUDE_FROM_ALL)
foreach(target
"core_tables" "enum_string_mapping" "extinst_tables"
"spirv-tools-pkg-config" "spirv-tools-shared-pkg-config"
"spirv-tools-build-version" "spirv-tools-debuginfo" "spirv-tools-header-DebugInfo" "spirv-tools-spv-amd-gcn-shader"
"spirv-tools-spv-amd-shader-ballot" "spirv-tools-spv-amd-shader-explicit-vertex-parameter" "spirv-tools-spv-amd-shader-trinary-minmax"
"spirv-tools-build-version" "spirv-tools-header-DebugInfo"
"SPIRV-Tools-link" "SPIRV-Tools-shared"
"spirv-tools-vimsyntax")
"spirv-tools-vimsyntax" "spv-tools-debuginfo" "spv-tools-spv-amd-gs" "spv-tools-spv-amd-sb" "spv-tools-spv-amd-sevp" "spv-tools-spv-amd-stm")
get_target_property(vsFolder ${target} FOLDER)
set_target_properties(${target} PROPERTIES FOLDER "External/SPIRV-Tools/%{vsFolder}")
if(NOT vsFolder)
set(vsFolder "")
endif()
set_target_properties(${target} PROPERTIES FOLDER "External/SPIRV-Tools/${vsFolder}")
endforeach()

set(ENABLE_SPIRV_CODEGEN ON CACHE BOOL "" FORCE)
Expand All @@ -88,7 +96,15 @@ set(LLVM_DEFAULT_TARGET_TRIPLE "dxil-ms-dx" CACHE STRING "" FORCE)
set(CLANG_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(LLVM_REQUIRES_RTTI ON CACHE BOOL "" FORCE)
set(CLANG_CL OFF CACHE BOOL "" FORCE)
set(DXC_BUILD_ARCH "x64" CACHE STRING "" FORCE) # TODO: Support more architectures
if(SC_ARCH_NAME STREQUAL "x86")
set(DXC_BUILD_ARCH "Win32" CACHE STRING "" FORCE)
elseif(SC_ARCH_NAME STREQUAL "arm")
set(DXC_BUILD_ARCH "ARM" CACHE STRING "" FORCE)
elseif(SC_ARCH_NAME STREQUAL "arm64")
set(DXC_BUILD_ARCH "ARM64" CACHE STRING "" FORCE)
else()
set(DXC_BUILD_ARCH "${SC_ARCH_NAME}" CACHE STRING "" FORCE)
endif()
set(SPIRV_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(SPIRV_SKIP_EXECUTABLES ON CACHE BOOL "" FORCE)
set(SPIRV_SKIP_TESTS ON CACHE BOOL "" FORCE)
Expand All @@ -111,15 +127,21 @@ foreach(target
"LLVMTransformUtils" "LLVMVectorize"
"ClangDriverOptions" "DxcEtw" "intrinsics_gen" "TablegenHLSLOptions"
"clang-tblgen" "GIT_COMMIT_INFO_ALWAYS_REBUILD" "llvm-tblgen")
get_target_property(vsFolder ${target} FOLDER)
get_target_property(vsFolder ${target} FOLDER)
if(NOT vsFolder)
set(vsFolder "")
endif()
set_target_properties(${target} PROPERTIES FOLDER "External/DirectXShaderCompiler/${vsFolder}")
endforeach()
if(WIN32)
foreach(target
"dndxc" "dxa" "dxl" "dxopt" "dxr" "dxv"
"d3dcompiler_dxc_bridge" "dxlib_sample" "dxrfallbackcompiler"
"dxexp")
"dxexp" "LLVMDxilDia")
get_target_property(vsFolder ${target} FOLDER)
if(NOT vsFolder)
set(vsFolder "")
endif()
set_target_properties(${target} PROPERTIES FOLDER "External/DirectXShaderCompiler/${vsFolder}")
endforeach()
endif()
Expand Down
90 changes: 74 additions & 16 deletions Include/ShaderConductor/ShaderConductor.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,6 @@
#pragma once

#include <functional>
#include <string>
#include <vector>

#if defined(__clang__)
#define SC_SYMBOL_EXPORT __attribute__((__visibility__("default")))
Expand Down Expand Up @@ -76,54 +74,114 @@ namespace ShaderConductor
Hlsl,
Glsl,
Essl,
Msl,
Msl_macOS,
Msl_iOS,

NumShadingLanguages,
};

struct MacroDefine
{
std::string name;
std::string value;
const char* name;
const char* value;
};

class SC_API Blob
{
public:
virtual ~Blob();

virtual const void* Data() const = 0;
virtual uint32_t Size() const = 0;
};

SC_API Blob* CreateBlob(const void* data, uint32_t size);
SC_API void DestroyBlob(Blob* blob);

class SC_API Compiler
{
public:
struct ShaderModel
{
uint8_t major_ver : 6;
uint8_t minor_ver : 2;

uint32_t FullVersion() const noexcept
{
return (major_ver << 2) | minor_ver;
}

bool operator<(const ShaderModel& other) const noexcept
{
return this->FullVersion() < other.FullVersion();
}
bool operator==(const ShaderModel& other) const noexcept
{
return this->FullVersion() == other.FullVersion();
}
bool operator>(const ShaderModel& other) const noexcept
{
return other < *this;
}
bool operator<=(const ShaderModel& other) const noexcept
{
return (*this < other) || (*this == other);
}
bool operator>=(const ShaderModel& other) const noexcept
{
return (*this > other) || (*this == other);
}
};

struct SourceDesc
{
std::string source;
std::string fileName;
std::string entryPoint;
const char* source;
const char* fileName;
const char* entryPoint;
ShaderStage stage;
std::vector<MacroDefine> defines;
std::function<std::string(const std::string& includeName)> loadIncludeCallback;
const MacroDefine* defines;
uint32_t numDefines;
std::function<Blob*(const char* includeName)> loadIncludeCallback;
};

struct Options
{
bool packMatricesInRowMajor = true; // Experimental: Decide how a matrix get packed
bool enable16bitTypes = false; // Enable 16-bit types, such as half, uint16_t. Requires shader model 6.2+
bool enableDebugInfo = false; // Embed debug info into the binary
bool disableOptimizations = false; // Force to turn off optimizations. Ignore optimizationLevel below.

int optimizationLevel = 3; // 0 to 3, no optimization to most optimization
ShaderModel shaderModel = { 6, 0 };
};

struct TargetDesc
{
ShadingLanguage language;
std::string version;
const char* version;
};

struct ResultDesc
{
std::vector<uint8_t> target;
Blob* target;
bool isText;

std::string errorWarningMsg;
Blob* errorWarningMsg;
bool hasError;
};

struct DisassembleDesc
{
ShadingLanguage language;
std::vector<uint8_t> binary;
uint8_t* binary;
uint32_t binarySize;
};

public:
static ResultDesc Compile(SourceDesc source, TargetDesc target);
static ResultDesc Disassemble(DisassembleDesc source);
static ResultDesc Compile(const SourceDesc& source, const Options& options, const TargetDesc& target);
static void Compile(const SourceDesc& source, const Options& options, const TargetDesc* targets, uint32_t numTargets,
ResultDesc* results);
static ResultDesc Disassemble(const DisassembleDesc& source);
};
} // namespace ShaderConductor

Expand Down
Loading

0 comments on commit 4af4d94

Please sign in to comment.