Fix build under OSX with clang. Fixes issue 180.
This commit is contained in:
parent
15f5e19d40
commit
1d8d067caf
7
extern/poshlib/posh.h
vendored
7
extern/poshlib/posh.h
vendored
@ -203,6 +203,9 @@ Metrowerks:
|
|||||||
- __INTEL__ for x86 targets
|
- __INTEL__ for x86 targets
|
||||||
- __POWERPC__
|
- __POWERPC__
|
||||||
|
|
||||||
|
LLVM:
|
||||||
|
- __llvm__
|
||||||
|
- __clang__
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -237,9 +240,9 @@ Metrowerks:
|
|||||||
#if defined __clang__
|
#if defined __clang__
|
||||||
# define POSH_COMPILER_STRING "Clang"
|
# define POSH_COMPILER_STRING "Clang"
|
||||||
# define POSH_COMPILER_CLANG 1
|
# define POSH_COMPILER_CLANG 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#elif defined __GNUC__
|
#if defined __GNUC__ && !defined __clang__
|
||||||
|
|
||||||
# define POSH_COMPILER_STRING "Gnu GCC"
|
# define POSH_COMPILER_STRING "Gnu GCC"
|
||||||
# define POSH_COMPILER_GCC 1
|
# define POSH_COMPILER_GCC 1
|
||||||
#endif
|
#endif
|
||||||
|
@ -486,10 +486,11 @@ namespace
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void printStackTrace(void * trace[], int size, int start=0) {
|
|
||||||
|
static void writeStackTrace(void * trace[], int size, int start, Array<const char *> & lines) {
|
||||||
|
StringBuilder builder(512);
|
||||||
char ** string_array = backtrace_symbols(trace, size);
|
char ** string_array = backtrace_symbols(trace, size);
|
||||||
|
|
||||||
nvDebug( "\nDumping stacktrace:\n" );
|
|
||||||
for(int i = start; i < size-1; i++ ) {
|
for(int i = start; i < size-1; i++ ) {
|
||||||
# if NV_CC_GNUC // defined(HAVE_CXXABI_H)
|
# if NV_CC_GNUC // defined(HAVE_CXXABI_H)
|
||||||
// @@ Write a better parser for the possible formats.
|
// @@ Write a better parser for the possible formats.
|
||||||
@ -510,34 +511,48 @@ namespace
|
|||||||
char * name = abi::__cxa_demangle(begin+1, 0, 0, &stat);
|
char * name = abi::__cxa_demangle(begin+1, 0, 0, &stat);
|
||||||
if (module == NULL) {
|
if (module == NULL) {
|
||||||
if (name == NULL || stat != 0) {
|
if (name == NULL || stat != 0) {
|
||||||
nvDebug( " In: '%s'\n", begin+1 );
|
builder.format(" In: '%s'\n", begin+1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
nvDebug( " In: '%s'\n", name );
|
builder.format(" In: '%s'\n", name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (name == NULL || stat != 0) {
|
if (name == NULL || stat != 0) {
|
||||||
nvDebug( " In: [%s] '%s'\n", module, begin+1 );
|
builder.format(" In: [%s] '%s'\n", module, begin+1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
nvDebug( " In: [%s] '%s'\n", module, name );
|
builder.format(" In: [%s] '%s'\n", module, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(name);
|
free(name);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
nvDebug( " In: '%s'\n", string_array[i] );
|
builder.format(" In: '%s'\n", string_array[i]);
|
||||||
}
|
}
|
||||||
# else
|
# else
|
||||||
nvDebug( " In: '%s'\n", string_array[i] );
|
builder.format(" In: '%s'\n", string_array[i]);
|
||||||
# endif
|
# endif
|
||||||
|
lines.append(builder.release());
|
||||||
}
|
}
|
||||||
nvDebug("\n");
|
|
||||||
|
|
||||||
free(string_array);
|
free(string_array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void printStackTrace(void * trace[], int size, int start=0) {
|
||||||
|
nvDebug( "\nDumping stacktrace:\n" );
|
||||||
|
|
||||||
|
Array<const char *> lines;
|
||||||
|
writeStackTrace(trace, size, 1, lines);
|
||||||
|
|
||||||
|
for (uint i = 0; i < lines.count(); i++) {
|
||||||
|
nvDebug(lines[i]);
|
||||||
|
delete lines[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
nvDebug("\n");
|
||||||
|
}
|
||||||
|
|
||||||
#endif // defined(HAVE_EXECINFO_H)
|
#endif // defined(HAVE_EXECINFO_H)
|
||||||
|
|
||||||
static void * callerAddress(void * secret)
|
static void * callerAddress(void * secret)
|
||||||
@ -818,6 +833,7 @@ int nvAbort(const char * exp, const char * file, int line, const char * func/*=N
|
|||||||
// Abnormal termination. Create mini dump and output call stack.
|
// Abnormal termination. Create mini dump and output call stack.
|
||||||
void debug::terminate(int code)
|
void debug::terminate(int code)
|
||||||
{
|
{
|
||||||
|
#if NV_OS_WIN32
|
||||||
EnterCriticalSection(&s_handler_critical_section);
|
EnterCriticalSection(&s_handler_critical_section);
|
||||||
|
|
||||||
writeMiniDump(NULL);
|
writeMiniDump(NULL);
|
||||||
@ -843,6 +859,7 @@ void debug::terminate(int code)
|
|||||||
}
|
}
|
||||||
|
|
||||||
LeaveCriticalSection(&s_handler_critical_section);
|
LeaveCriticalSection(&s_handler_critical_section);
|
||||||
|
#endif
|
||||||
|
|
||||||
exit(code);
|
exit(code);
|
||||||
}
|
}
|
||||||
@ -908,6 +925,7 @@ void debug::resetAssertHandler()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if NV_OS_WIN32
|
||||||
#if USE_SEPARATE_THREAD
|
#if USE_SEPARATE_THREAD
|
||||||
|
|
||||||
static void initHandlerThread()
|
static void initHandlerThread()
|
||||||
@ -951,7 +969,8 @@ static void shutHandlerThread() {
|
|||||||
// @@ Free stuff. Terminate thread.
|
// @@ Free stuff. Terminate thread.
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif // USE_SEPARATE_THREAD
|
||||||
|
#endif // NV_OS_WIN32
|
||||||
|
|
||||||
|
|
||||||
// Enable signal handler.
|
// Enable signal handler.
|
||||||
|
@ -35,18 +35,25 @@
|
|||||||
// @@ Does this work in msvc-6 and earlier?
|
// @@ Does this work in msvc-6 and earlier?
|
||||||
# define nvDebugBreak() __debugbreak()
|
# define nvDebugBreak() __debugbreak()
|
||||||
//#define nvDebugBreak() __asm { int 3 }
|
//#define nvDebugBreak() __asm { int 3 }
|
||||||
# elif NV_CC_GNUC && NV_CPU_PPC && NV_OS_DARWIN
|
# elif NV_CC_GNUC
|
||||||
|
# define nvDebugBreak() __builtin_trap()
|
||||||
|
# else
|
||||||
|
# error "No nvDebugBreak()!"
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
# elif NV_CC_GNUC || NV_CPU_PPC && NV_OS_DARWIN
|
||||||
// @@ Use __builtin_trap() on GCC
|
// @@ Use __builtin_trap() on GCC
|
||||||
# define nvDebugBreak() __asm__ volatile ("trap");
|
# define nvDebugBreak() __asm__ volatile ("trap")
|
||||||
# elif NV_CC_GNUC && NV_CPU_X86 && NV_OS_DARWIN
|
# elif (NV_CC_GNUC || NV_CPU_X86 || NV_CPU_X86_64) && NV_OS_DARWIN
|
||||||
# define nvDebugBreak() __asm__ volatile ("int3");
|
# define nvDebugBreak() __asm__ volatile ("int3")
|
||||||
# elif NV_CC_GNUC && NV_CPU_X86
|
# elif NV_CC_GNUC || NV_CPU_X86 || NV_CPU_X86_64
|
||||||
# define nvDebugBreak() __asm__ ( "int %0" : :"I"(3) )
|
# define nvDebugBreak() __asm__ ( "int %0" : :"I"(3) )
|
||||||
# else
|
# else
|
||||||
# include <signal.h>
|
# include <signal.h>
|
||||||
# define nvDebugBreak() raise(SIGTRAP);
|
# define nvDebugBreak() raise(SIGTRAP)
|
||||||
// define nvDebugBreak() *((int *)(0)) = 0
|
|
||||||
# endif
|
# endif
|
||||||
|
*/
|
||||||
|
|
||||||
#define nvDebugBreakOnce() \
|
#define nvDebugBreakOnce() \
|
||||||
NV_MULTI_LINE_MACRO_BEGIN \
|
NV_MULTI_LINE_MACRO_BEGIN \
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NV_FASTCALL __attribute__((fastcall))
|
#define NV_FASTCALL __attribute__((fastcall))
|
||||||
#define NV_FORCEINLINE __attribute__((always_inline))
|
#define NV_FORCEINLINE inline __attribute__((always_inline))
|
||||||
#define NV_DEPRECATED __attribute__((deprecated))
|
#define NV_DEPRECATED __attribute__((deprecated))
|
||||||
|
|
||||||
#if __GNUC__ > 2
|
#if __GNUC__ > 2
|
||||||
|
@ -343,10 +343,11 @@ namespace
|
|||||||
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
|
case DXGI_FORMAT_B8G8R8X8_TYPELESS:
|
||||||
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
||||||
return 8*4;
|
return 8*4;
|
||||||
}
|
default:
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
nvUnreachable();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
@ -349,8 +349,8 @@ float nv::averageAngularError(const FloatImage * img0, const FloatImage * img1)
|
|||||||
Vector3 n0 = Vector3(x0[i], y0[i], z0[i]);
|
Vector3 n0 = Vector3(x0[i], y0[i], z0[i]);
|
||||||
Vector3 n1 = Vector3(x1[i], y1[i], z1[i]);
|
Vector3 n1 = Vector3(x1[i], y1[i], z1[i]);
|
||||||
|
|
||||||
n0 = 2 * n0 - Vector3(1);
|
n0 = 2.0f * n0 - Vector3(1);
|
||||||
n1 = 2 * n1 - Vector3(1);
|
n1 = 2.0f * n1 - Vector3(1);
|
||||||
|
|
||||||
n0 = normalizeSafe(n0, Vector3(0), 0.0f);
|
n0 = normalizeSafe(n0, Vector3(0), 0.0f);
|
||||||
n1 = normalizeSafe(n1, Vector3(0), 0.0f);
|
n1 = normalizeSafe(n1, Vector3(0), 0.0f);
|
||||||
@ -387,8 +387,8 @@ float nv::rmsAngularError(const FloatImage * img0, const FloatImage * img1)
|
|||||||
Vector3 n0 = Vector3(x0[i], y0[i], z0[i]);
|
Vector3 n0 = Vector3(x0[i], y0[i], z0[i]);
|
||||||
Vector3 n1 = Vector3(x1[i], y1[i], z1[i]);
|
Vector3 n1 = Vector3(x1[i], y1[i], z1[i]);
|
||||||
|
|
||||||
n0 = 2 * n0 - Vector3(1);
|
n0 = 2.0f * n0 - Vector3(1);
|
||||||
n1 = 2 * n1 - Vector3(1);
|
n1 = 2.0f * n1 - Vector3(1);
|
||||||
|
|
||||||
n0 = normalizeSafe(n0, Vector3(0), 0.0f);
|
n0 = normalizeSafe(n0, Vector3(0), 0.0f);
|
||||||
n1 = normalizeSafe(n1, Vector3(0), 0.0f);
|
n1 = normalizeSafe(n1, Vector3(0), 0.0f);
|
||||||
|
@ -411,8 +411,8 @@ int nv::Fit::compute4Means(int n, const Vector3 *__restrict points, const float
|
|||||||
|
|
||||||
cluster[0] = centroid + mindps * principal;
|
cluster[0] = centroid + mindps * principal;
|
||||||
cluster[1] = centroid + maxdps * principal;
|
cluster[1] = centroid + maxdps * principal;
|
||||||
cluster[2] = (2 * cluster[0] + cluster[1]) / 3;
|
cluster[2] = (2.0f * cluster[0] + cluster[1]) / 3.0f;
|
||||||
cluster[3] = (2 * cluster[1] + cluster[0]) / 3;
|
cluster[3] = (2.0f * cluster[1] + cluster[0]) / 3.0f;
|
||||||
|
|
||||||
// Now we have to iteratively refine the clusters.
|
// Now we have to iteratively refine the clusters.
|
||||||
while (true)
|
while (true)
|
||||||
|
@ -21,7 +21,7 @@ SET(NVTT_SRCS
|
|||||||
CompressionOptions.h CompressionOptions.cpp
|
CompressionOptions.h CompressionOptions.cpp
|
||||||
InputOptions.h InputOptions.cpp
|
InputOptions.h InputOptions.cpp
|
||||||
OutputOptions.h OutputOptions.cpp
|
OutputOptions.h OutputOptions.cpp
|
||||||
TaskDispatcher.h TaskDispatcher.cpp
|
TaskDispatcher.h #TaskDispatcher.cpp
|
||||||
Surface.h Surface.cpp
|
Surface.h Surface.cpp
|
||||||
CubeSurface.h CubeSurface.cpp
|
CubeSurface.h CubeSurface.cpp
|
||||||
cuda/CudaUtils.h cuda/CudaUtils.cpp
|
cuda/CudaUtils.h cuda/CudaUtils.cpp
|
||||||
|
@ -523,6 +523,30 @@ Vector3 CubeSurface::Private::applyCosinePowerFilter(const Vector3 & filterDir,
|
|||||||
int x0 = 0, x1 = L;
|
int x0 = 0, x1 = L;
|
||||||
int y0 = 0, y1 = L;
|
int y0 = 0, y1 = L;
|
||||||
|
|
||||||
|
if (false) {
|
||||||
|
// New approach?
|
||||||
|
|
||||||
|
// For each face, we are looking for 4 planes that bound the cone.
|
||||||
|
|
||||||
|
// All planes go through the origin.
|
||||||
|
// Plane fully determined by its normal.
|
||||||
|
// We only care about planes aligned to one axis. So, for the XY face, we have 4 planes:
|
||||||
|
|
||||||
|
// Plane goes through origin.
|
||||||
|
// Plane normal is unit length.
|
||||||
|
|
||||||
|
// Plane must be tangent to cone ->
|
||||||
|
// angle between plane normal and cone axis is 90 - cone angle & 90 + cone angle
|
||||||
|
// dot(N, D) == cos(90 - cone angle)
|
||||||
|
// dot(N, D) == cos(90 + cone angle)
|
||||||
|
|
||||||
|
// Plane must contain face UV axis
|
||||||
|
|
||||||
|
// Find the 4 planes and how they intersect the unit face, which gives us (u0,v0, u1,v1).
|
||||||
|
|
||||||
|
// Expand uv coordinates, clamp to
|
||||||
|
}
|
||||||
|
|
||||||
// @@ Ugh. This is wrong, or only right when filterDir is aligned to one axis.
|
// @@ Ugh. This is wrong, or only right when filterDir is aligned to one axis.
|
||||||
if (false) {
|
if (false) {
|
||||||
// uv coordinates corresponding to filterDir.
|
// uv coordinates corresponding to filterDir.
|
||||||
|
@ -83,7 +83,7 @@ inline static void findMinMaxColorsBox(const Vector3 * block, uint num, Vector3
|
|||||||
|
|
||||||
inline static void selectDiagonal(const Vector3 * block, uint num, Vector3 * restrict maxColor, Vector3 * restrict minColor)
|
inline static void selectDiagonal(const Vector3 * block, uint num, Vector3 * restrict maxColor, Vector3 * restrict minColor)
|
||||||
{
|
{
|
||||||
Vector3 center = (*maxColor + *minColor) * 0.5;
|
Vector3 center = (*maxColor + *minColor) * 0.5f;
|
||||||
|
|
||||||
Vector2 covariance = Vector2(0.0f);
|
Vector2 covariance = Vector2(0.0f);
|
||||||
for (uint i = 0; i < num; i++)
|
for (uint i = 0; i < num; i++)
|
||||||
@ -714,8 +714,8 @@ void QuickCompress::compressDXT5(const ColorBlock & rgba, BlockDXT5 * dxtBlock,
|
|||||||
|
|
||||||
void QuickCompress::outputBlock4(const ColorSet & set, const Vector3 & start, const Vector3 & end, BlockDXT1 * block)
|
void QuickCompress::outputBlock4(const ColorSet & set, const Vector3 & start, const Vector3 & end, BlockDXT1 * block)
|
||||||
{
|
{
|
||||||
Vector3 minColor = start * 255;
|
Vector3 minColor = start * 255.0f;
|
||||||
Vector3 maxColor = end * 255;
|
Vector3 maxColor = end * 255.0f;
|
||||||
uint16 color0 = roundAndExpand(&maxColor);
|
uint16 color0 = roundAndExpand(&maxColor);
|
||||||
uint16 color1 = roundAndExpand(&minColor);
|
uint16 color1 = roundAndExpand(&minColor);
|
||||||
|
|
||||||
@ -727,15 +727,15 @@ void QuickCompress::outputBlock4(const ColorSet & set, const Vector3 & start, co
|
|||||||
|
|
||||||
block->col0 = Color16(color0);
|
block->col0 = Color16(color0);
|
||||||
block->col1 = Color16(color1);
|
block->col1 = Color16(color1);
|
||||||
block->indices = computeIndices4(set, maxColor / 255, minColor / 255);
|
block->indices = computeIndices4(set, maxColor / 255.0f, minColor / 255.0f);
|
||||||
|
|
||||||
//optimizeEndPoints4(set, block);
|
//optimizeEndPoints4(set, block);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickCompress::outputBlock3(const ColorSet & set, const Vector3 & start, const Vector3 & end, BlockDXT1 * block)
|
void QuickCompress::outputBlock3(const ColorSet & set, const Vector3 & start, const Vector3 & end, BlockDXT1 * block)
|
||||||
{
|
{
|
||||||
Vector3 minColor = start * 255;
|
Vector3 minColor = start * 255.0f;
|
||||||
Vector3 maxColor = end * 255;
|
Vector3 maxColor = end * 255.0f;
|
||||||
uint16 color0 = roundAndExpand(&minColor);
|
uint16 color0 = roundAndExpand(&minColor);
|
||||||
uint16 color1 = roundAndExpand(&maxColor);
|
uint16 color1 = roundAndExpand(&maxColor);
|
||||||
|
|
||||||
@ -747,7 +747,7 @@ void QuickCompress::outputBlock3(const ColorSet & set, const Vector3 & start, co
|
|||||||
|
|
||||||
block->col0 = Color16(color0);
|
block->col0 = Color16(color0);
|
||||||
block->col1 = Color16(color1);
|
block->col1 = Color16(color1);
|
||||||
block->indices = computeIndices3(set, maxColor / 255, minColor / 255);
|
block->indices = computeIndices3(set, maxColor / 255.0f, minColor / 255.0f);
|
||||||
|
|
||||||
//optimizeEndPoints3(set, block);
|
//optimizeEndPoints3(set, block);
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include <nvcore/TextWriter.h>
|
#include <nvcore/TextWriter.h>
|
||||||
#include <nvcore/FileSystem.h>
|
#include <nvcore/FileSystem.h>
|
||||||
#include <nvcore/Timer.h>
|
#include <nvcore/Timer.h>
|
||||||
|
#include <nvcore/Array.inl>
|
||||||
|
|
||||||
#include <stdlib.h> // free
|
#include <stdlib.h> // free
|
||||||
#include <string.h> // memcpy
|
#include <string.h> // memcpy
|
||||||
|
@ -105,6 +105,7 @@ GLuint createTexture(nv::DirectDrawSurface & dds)
|
|||||||
else {
|
else {
|
||||||
// Add support for cubemaps.
|
// Add support for cubemaps.
|
||||||
}
|
}
|
||||||
|
return tex;
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawQuad()
|
void drawQuad()
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <nvcore/Ptr.h>
|
#include <nvcore/Ptr.h>
|
||||||
#include <nvcore/StrLib.h>
|
#include <nvcore/StrLib.h>
|
||||||
#include <nvcore/StdStream.h>
|
#include <nvcore/StdStream.h>
|
||||||
|
#include <nvcore/Array.inl>
|
||||||
|
|
||||||
#include <nvimage/Image.h>
|
#include <nvimage/Image.h>
|
||||||
#include <nvimage/ImageIO.h>
|
#include <nvimage/ImageIO.h>
|
||||||
|
Loading…
Reference in New Issue
Block a user