114 lines
4.0 KiB
Diff
114 lines
4.0 KiB
Diff
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
index d527232..5ad6eaa 100644
|
|
--- a/CMakeLists.txt
|
|
+++ b/CMakeLists.txt
|
|
@@ -99,6 +99,11 @@ set (OSL_PTX_INSTALL_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/ptx"
|
|
CACHE STRING "Directory where OptiX PTX files will be installed")
|
|
set (CMAKE_DEBUG_POSTFIX "" CACHE STRING "Library naming postfix for Debug builds (e.g., '_debug')")
|
|
|
|
+set (USE_OIIO_STATIC ON CACHE BOOL "If OIIO is built static")
|
|
+if (USE_OIIO_STATIC)
|
|
+ add_definitions ("-DOIIO_STATIC_BUILD=1")
|
|
+ add_definitions ("-DOIIO_STATIC_DEFINE=1")
|
|
+endif ()
|
|
|
|
set (OSL_NO_DEFAULT_TEXTURESYSTEM OFF CACHE BOOL "Do not use create a raw OIIO::TextureSystem")
|
|
if (OSL_NO_DEFAULT_TEXTURESYSTEM)
|
|
diff --git a/src/cmake/externalpackages.cmake b/src/cmake/externalpackages.cmake
|
|
index a7e098b..dad11d0 100644
|
|
--- a/src/cmake/externalpackages.cmake
|
|
+++ b/src/cmake/externalpackages.cmake
|
|
@@ -77,6 +77,7 @@ link_directories ("${Boost_LIBRARY_DIRS}")
|
|
|
|
|
|
checked_find_package (ZLIB REQUIRED) # Needed by several packages
|
|
+checked_find_package (PNG REQUIRED) # Needed since OIIO needs it
|
|
|
|
# IlmBase & OpenEXR
|
|
checked_find_package (OpenEXR REQUIRED
|
|
diff --git a/src/liboslcomp/oslcomp.cpp b/src/liboslcomp/oslcomp.cpp
|
|
index 8c2e77b..211b8a7 100644
|
|
--- a/src/liboslcomp/oslcomp.cpp
|
|
+++ b/src/liboslcomp/oslcomp.cpp
|
|
@@ -21,6 +21,13 @@
|
|
#if !defined(__STDC_CONSTANT_MACROS)
|
|
# define __STDC_CONSTANT_MACROS 1
|
|
#endif
|
|
+
|
|
+// clang uses CALLBACK in its templates which causes issues if it is already defined
|
|
+#ifdef _WIN32 && defined(CALLBACK)
|
|
+# undef CALLBACK
|
|
+#endif
|
|
+
|
|
+//
|
|
#include <clang/Basic/TargetInfo.h>
|
|
#include <clang/Frontend/CompilerInstance.h>
|
|
#include <clang/Frontend/TextDiagnosticPrinter.h>
|
|
diff --git a/src/liboslexec/llvm_instance.cpp b/src/liboslexec/llvm_instance.cpp
|
|
index 8f52546..8c2d0c7 100644
|
|
--- a/src/liboslexec/llvm_instance.cpp
|
|
+++ b/src/liboslexec/llvm_instance.cpp
|
|
@@ -1363,6 +1363,10 @@ BackendLLVM::run()
|
|
#ifdef OSL_LLVM_NO_BITCODE
|
|
OSL_ASSERT(!use_rs_bitcode());
|
|
ll.module(ll.new_module("llvm_ops"));
|
|
+ if (use_optix()) {
|
|
+ ll.module()->setDataLayout("e-i64:64-i128:128-v16:16-v32:32-n16:32:64");
|
|
+ ll.module()->setTargetTriple("nvptx64-nvidia-cuda");
|
|
+ }
|
|
#else
|
|
if (!use_optix()) {
|
|
if (use_rs_bitcode()) {
|
|
diff --git a/src/liboslexec/shadingsys.cpp b/src/liboslexec/shadingsys.cpp
|
|
index 46e4529..8e86486 100644
|
|
--- a/src/liboslexec/shadingsys.cpp
|
|
+++ b/src/liboslexec/shadingsys.cpp
|
|
@@ -2121,6 +2121,11 @@ ShadingSystemImpl::getattribute(ShaderGroup* group, string_view name,
|
|
return true;
|
|
}
|
|
|
|
+ if (name == "groupdata_size" && type == TypeDesc::TypeInt) {
|
|
+ *(int*)val = (int)group->m_llvm_groupdata_size;
|
|
+ return true;
|
|
+ }
|
|
+
|
|
return false;
|
|
}
|
|
|
|
diff --git a/src/liboslexec/CMakeLists.txt b/src/liboslexec/CMakeLists.txt
|
|
index 6bb0d175..19f13513 100644
|
|
--- a/src/liboslexec/CMakeLists.txt
|
|
+++ b/src/liboslexec/CMakeLists.txt
|
|
@@ -148,7 +148,9 @@ file (GLOB exec_headers "*.h")
|
|
file (GLOB compiler_headers "../liboslcomp/*.h")
|
|
|
|
FLEX_BISON ( osolex.l osogram.y oso lib_src exec_headers )
|
|
-FLEX_BISON ( ../liboslcomp/osllex.l ../liboslcomp/oslgram.y osl lib_src compiler_headers )
|
|
+if (BUILD_SHARED_LIBS)
|
|
+ FLEX_BISON ( ../liboslcomp/osllex.l ../liboslcomp/oslgram.y osl lib_src compiler_headers )
|
|
+endif()
|
|
|
|
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS" )
|
|
|
|
diff --git a/src/include/OSL/mask.h b/src/include/OSL/mask.h
|
|
index 24197af..b9275f6 100644
|
|
--- a/src/include/OSL/mask.h
|
|
+++ b/src/include/OSL/mask.h
|
|
@@ -4,7 +4,6 @@
|
|
|
|
#pragma once
|
|
|
|
-#include <immintrin.h>
|
|
#include <type_traits>
|
|
|
|
#include <OSL/oslconfig.h>
|
|
@@ -23,6 +22,8 @@ using std::countr_zero;
|
|
|
|
#elif OSL_INTEL_CLASSIC_COMPILER_VERSION
|
|
|
|
+#include <immintrin.h>
|
|
+
|
|
OSL_FORCEINLINE int popcount(uint32_t x) noexcept { return _mm_popcnt_u32(x);}
|
|
OSL_FORCEINLINE int popcount(uint64_t x) noexcept { return _mm_popcnt_u64(x); }
|
|
OSL_FORCEINLINE int countr_zero(uint32_t x) noexcept { return _bit_scan_forward(x); }
|