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 #include #include 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 #include #include @@ -23,6 +22,8 @@ using std::countr_zero; #elif OSL_INTEL_CLASSIC_COMPILER_VERSION +#include + 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); }