Ghost Context Refactor
[blender-staging.git] / source / creator / creator.c
index b42c5333d114f8d739d0ae46ca6b99d980bf4e80..12ae5c502e4f2344df3d0e696f7f2ad6f164ca9b 100644 (file)
@@ -41,6 +41,9 @@
 #endif
 
 #ifdef WIN32
+#  if defined(_MSC_VER) && _MSC_VER >= 1800 && defined(_M_X64)
+#    include <math.h> /* needed for _set_FMA3_enable */
+#  endif
 #  include <windows.h>
 #  include "utfconv.h"
 #endif
 #  include "libmv-capi.h"
 #endif
 
+#ifdef WITH_CYCLES_LOGGING
+#  include "CCL_api.h"
+#endif
+
 /* from buildinfo.c */
 #ifdef BUILD_DATE
 extern char build_date[];
@@ -305,6 +312,9 @@ static int print_help(int UNUSED(argc), const char **UNUSED(argv), void *data)
        BLI_argsPrintArgDoc(ba, "--debug-handlers");
 #ifdef WITH_LIBMV
        BLI_argsPrintArgDoc(ba, "--debug-libmv");
+#endif
+#ifdef WITH_CYCLES_LOGGING
+       BLI_argsPrintArgDoc(ba, "--debug-cycles");
 #endif
        BLI_argsPrintArgDoc(ba, "--debug-memory");
        BLI_argsPrintArgDoc(ba, "--debug-jobs");
@@ -447,6 +457,15 @@ static int debug_mode_libmv(int UNUSED(argc), const char **UNUSED(argv), void *U
 }
 #endif
 
+#ifdef WITH_CYCLES_LOGGING
+static int debug_mode_cycles(int UNUSED(argc), const char **UNUSED(argv),
+                             void *UNUSED(data))
+{
+       CCL_start_debug_logging();
+       return 0;
+}
+#endif
+
 static int debug_mode_memory(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data))
 {
        MEM_set_memory_debug();
@@ -535,7 +554,7 @@ static void blender_crash_handler_backtrace(FILE *fp)
        SymInitialize(process, NULL, true);
 
        nframes = CaptureStackBackTrace(0, SIZE, stack, NULL);
-       symbolinfo = MEM_callocN(sizeof(SYMBOL_INFO) + MAXSYMBOL * sizeof( char ), "crash Symbol table");
+       symbolinfo = MEM_callocN(sizeof(SYMBOL_INFO) + MAXSYMBOL * sizeof(char), "crash Symbol table");
        symbolinfo->MaxNameLen = MAXSYMBOL - 1;
        symbolinfo->SizeOfStruct = sizeof(SYMBOL_INFO);
 
@@ -814,6 +833,9 @@ static int set_engine(int argc, const char **argv, void *data)
                                if (BLI_findstring(&R_engines, argv[1], offsetof(RenderEngineType, idname))) {
                                        BLI_strncpy_utf8(rd->engine, argv[1], sizeof(rd->engine));
                                }
+                               else {
+                                       printf("\nError: engine not found '%s'\n", argv[1]);
+                               }
                        }
                        else {
                                printf("\nError: no blend loaded. order the arguments so '-E  / --engine ' is after a blend is loaded.\n");
@@ -881,6 +903,8 @@ static int set_verbosity(int argc, const char **argv, void *UNUSED(data))
 
 #ifdef WITH_LIBMV
                libmv_setLoggingVerbosity(level);
+#elif defined(WITH_CYCLES_LOGGING)
+               CCL_logging_verbosity_set(level);
 #else
                (void)level;
 #endif
@@ -1412,6 +1436,9 @@ static void setupArguments(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
 
 #ifdef WITH_LIBMV
        BLI_argsAdd(ba, 1, NULL, "--debug-libmv", "\n\tEnable debug messages from libmv library", debug_mode_libmv, NULL);
+#endif
+#ifdef WITH_CYCLES_LOGGING
+       BLI_argsAdd(ba, 1, NULL, "--debug-cycles", "\n\tEnable debug messages from Cycles", debug_mode_cycles, NULL);
 #endif
        BLI_argsAdd(ba, 1, NULL, "--debug-memory", "\n\tEnable fully guarded memory allocation and debugging", debug_mode_memory, NULL);
 
@@ -1501,7 +1528,13 @@ int main(
        bArgs *ba;
 #endif
 
-#ifdef WIN32 /* Win32 Unicode Args */
+#ifdef WIN32
+       /* FMA3 support in the 2013 CRT is broken on Vista and Windows 7 RTM (fixed in SP1). Just disable it. */
+#  if defined(_MSC_VER) && _MSC_VER >= 1800 && defined(_M_X64)
+       _set_FMA3_enable(0);
+#  endif
+
+       /* Win32 Unicode Args */
        /* NOTE: cannot use guardedalloc malloc here, as it's not yet initialized
         *       (it depends on the args passed in, which is what we're getting here!)
         */
@@ -1571,24 +1604,11 @@ int main(
 
 #ifdef WITH_LIBMV
        libmv_initLogging(argv[0]);
+#elif defined(WITH_CYCLES_LOGGING)
+       CCL_init_logging(argv[0]);
 #endif
 
        setCallbacks();
-#if defined(__APPLE__) && !defined(WITH_PYTHON_MODULE)
-       /* patch to ignore argument finder gives us (pid?) */
-       if (argc == 2 && strncmp(argv[1], "-psn_", 5) == 0) {
-               extern int GHOST_HACK_getFirstFile(char buf[]);
-               static char firstfilebuf[512];
-
-               argc = 1;
-
-               if (GHOST_HACK_getFirstFile(firstfilebuf)) {
-                       argc = 2;
-                       argv[1] = firstfilebuf;
-               }
-       }
-
-#endif
 
 #ifdef __FreeBSD__
        fpsetmask(0);