Cycles: attempt to fix internal compile error with some visual studio builds
This commit is contained in:
@@ -13,9 +13,10 @@ if(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WIN32 AND MSVC)
|
if(WIN32 AND MSVC)
|
||||||
set(CYCLES_SSE2_KERNEL_FLAGS "/arch:SSE2 -D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc")
|
set(CYCLES_SSE2_KERNEL_FLAGS "/arch:SSE2 -D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc /Ox /GS-")
|
||||||
set(CYCLES_SSE3_KERNEL_FLAGS "/arch:SSE2 -D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc")
|
# there is no /arch:SSE3, but intrinsics are available anyway
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast -D_CRT_SECURE_NO_WARNINGS /EHsc")
|
set(CYCLES_SSE3_KERNEL_FLAGS "/arch:SSE2 -D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc /Ox /GS-")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast -D_CRT_SECURE_NO_WARNINGS /EHsc /Ox /GS-")
|
||||||
elseif(CMAKE_COMPILER_IS_GNUCC)
|
elseif(CMAKE_COMPILER_IS_GNUCC)
|
||||||
set(CYCLES_SSE2_KERNEL_FLAGS "-ffast-math -msse -msse2 -mfpmath=sse")
|
set(CYCLES_SSE2_KERNEL_FLAGS "-ffast-math -msse -msse2 -mfpmath=sse")
|
||||||
set(CYCLES_SSE3_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -mfpmath=sse")
|
set(CYCLES_SSE3_KERNEL_FLAGS "-ffast-math -msse -msse2 -msse3 -mssse3 -mfpmath=sse")
|
||||||
|
@@ -79,11 +79,12 @@ if env['WITH_BF_RAYOPTIMIZATION']:
|
|||||||
sse3_cxxflags = Split(env['CXXFLAGS'])
|
sse3_cxxflags = Split(env['CXXFLAGS'])
|
||||||
|
|
||||||
if env['OURPLATFORM'] == 'win32-vc':
|
if env['OURPLATFORM'] == 'win32-vc':
|
||||||
sse2_cxxflags.append('/arch:SSE2 -D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc'.split())
|
sse2_cxxflags.append('/arch:SSE /arch:SSE2 -D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc /Ox /Gs-'.split())
|
||||||
sse3_cxxflags.append('/arch:SSE2 -D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc'.split())
|
# there is no /arch:SSE3, but intrinsics are available anyway
|
||||||
|
sse3_cxxflags.append('/arch:SSE /arch:SSE2 -D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc /Ox /Gs-'.split())
|
||||||
elif env['OURPLATFORM'] == 'win64-vc':
|
elif env['OURPLATFORM'] == 'win64-vc':
|
||||||
sse2_cxxflags.append('-D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc'.split())
|
sse2_cxxflags.append('-D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc /Ox /Gs-'.split())
|
||||||
sse3_cxxflags.append('-D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc'.split())
|
sse3_cxxflags.append('-D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc /Ox /Gs-'.split())
|
||||||
else:
|
else:
|
||||||
sse2_cxxflags.append('-ffast-math -msse -msse2 -mfpmath=sse'.split())
|
sse2_cxxflags.append('-ffast-math -msse -msse2 -mfpmath=sse'.split())
|
||||||
sse3_cxxflags.append('-ffast-math -msse -msse2 -msse3 -mssse3 -mfpmath=sse'.split())
|
sse3_cxxflags.append('-ffast-math -msse -msse2 -msse3 -mssse3 -mfpmath=sse'.split())
|
||||||
|
@@ -579,6 +579,7 @@ void RegularBVH::pack_nodes(const array<int>& prims, const BVHNode *root)
|
|||||||
int nextNodeIdx = 0;
|
int nextNodeIdx = 0;
|
||||||
|
|
||||||
vector<BVHStackEntry> stack;
|
vector<BVHStackEntry> stack;
|
||||||
|
stack.reserve(BVHParams::MAX_DEPTH*2);
|
||||||
stack.push_back(BVHStackEntry(root, nextNodeIdx++));
|
stack.push_back(BVHStackEntry(root, nextNodeIdx++));
|
||||||
|
|
||||||
while(stack.size()) {
|
while(stack.size()) {
|
||||||
@@ -776,6 +777,7 @@ void QBVH::pack_nodes(const array<int>& prims, const BVHNode *root)
|
|||||||
int nextNodeIdx = 0;
|
int nextNodeIdx = 0;
|
||||||
|
|
||||||
vector<BVHStackEntry> stack;
|
vector<BVHStackEntry> stack;
|
||||||
|
stack.reserve(BVHParams::MAX_DEPTH*2);
|
||||||
stack.push_back(BVHStackEntry(root, nextNodeIdx++));
|
stack.push_back(BVHStackEntry(root, nextNodeIdx++));
|
||||||
|
|
||||||
while(stack.size()) {
|
while(stack.size()) {
|
||||||
|
@@ -37,7 +37,7 @@ __device_inline int cmj_fast_mod_pow2(int a, int b)
|
|||||||
/* a must be > 0 and b must be > 1 */
|
/* a must be > 0 and b must be > 1 */
|
||||||
__device_inline int cmj_fast_div_pow2(int a, int b)
|
__device_inline int cmj_fast_div_pow2(int a, int b)
|
||||||
{
|
{
|
||||||
#ifdef __KERNEL_SSE2__
|
#if defined(__KERNEL_SSE2__) && !defined(_MSC_VER)
|
||||||
return a >> __builtin_ctz(b);
|
return a >> __builtin_ctz(b);
|
||||||
#else
|
#else
|
||||||
return a/b;
|
return a/b;
|
||||||
@@ -46,7 +46,7 @@ __device_inline int cmj_fast_div_pow2(int a, int b)
|
|||||||
|
|
||||||
__device_inline uint cmj_w_mask(uint w)
|
__device_inline uint cmj_w_mask(uint w)
|
||||||
{
|
{
|
||||||
#ifdef __KERNEL_SSE2__
|
#if defined(__KERNEL_SSE2__) && !defined(_MSC_VER)
|
||||||
return ((1 << (32 - __builtin_clz(w))) - 1);
|
return ((1 << (32 - __builtin_clz(w))) - 1);
|
||||||
#else
|
#else
|
||||||
w |= w >> 1;
|
w |= w >> 1;
|
||||||
|
@@ -165,7 +165,7 @@ __device_inline float clamp(float a, float mn, float mx)
|
|||||||
|
|
||||||
__device_inline int float_to_int(float f)
|
__device_inline int float_to_int(float f)
|
||||||
{
|
{
|
||||||
#ifdef __KERNEL_SSE2__
|
#if defined(__KERNEL_SSE2__) && !defined(_MSC_VER)
|
||||||
return _mm_cvtt_ss2si(_mm_load_ss(&f));
|
return _mm_cvtt_ss2si(_mm_load_ss(&f));
|
||||||
#else
|
#else
|
||||||
return (int)f;
|
return (int)f;
|
||||||
|
@@ -23,11 +23,6 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
// Needed for _BistScanForward and _BitScanReverse on MSVC 2012
|
|
||||||
# if defined(_MSC_VER) && _MSC_VER >= 1700
|
|
||||||
# include <intrin.h>
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Qualifiers for kernel code shared by CPU and GPU */
|
/* Qualifiers for kernel code shared by CPU and GPU */
|
||||||
@@ -511,26 +506,6 @@ template<size_t i0, size_t i1, size_t i2, size_t i3> __device_inline const __m12
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__KERNEL_SSE2__) && defined(_MSC_VER)
|
|
||||||
|
|
||||||
/* count zeros from start or end of integer bits */
|
|
||||||
|
|
||||||
__device_inline uint32_t __builtin_ctz(uint32_t i)
|
|
||||||
{
|
|
||||||
unsigned long r = 0;
|
|
||||||
_BitScanForward(&r, i);
|
|
||||||
return (uint32_t)r;
|
|
||||||
}
|
|
||||||
|
|
||||||
__device_inline uint32_t __builtin_clz(uint32_t i)
|
|
||||||
{
|
|
||||||
unsigned long r = 0;
|
|
||||||
_BitScanReverse(&r, i);
|
|
||||||
return (uint32_t)r;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CCL_NAMESPACE_END
|
CCL_NAMESPACE_END
|
||||||
|
|
||||||
#endif /* __UTIL_TYPES_H__ */
|
#endif /* __UTIL_TYPES_H__ */
|
||||||
|
Reference in New Issue
Block a user