Merge branch 'master' into blender2.8
authorCampbell Barton <ideasman42@gmail.com>
Fri, 18 May 2018 09:02:39 +0000 (11:02 +0200)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 18 May 2018 09:02:39 +0000 (11:02 +0200)
1  2 
intern/clog/clog.c
source/creator/creator_args.c

diff --combined intern/clog/clog.c
index e96cbbe7f141163eca07e2f06353018e178e74c2,2e5201d63b04d9b48da99fd1bb1ea753ccd708e4..d26f054511771d31a5173b2ce2f6a552f0e1ee3b
@@@ -81,6 -81,7 +81,7 @@@ typedef struct CLogContext 
  
        struct {
                void (*fatal_fn)(void *file_handle);
+               void (*backtrace_fn)(void *file_handle);
        } callbacks;
  } CLogContext;
  
@@@ -328,15 -329,23 +329,23 @@@ static CLG_LogType *clg_ctx_type_regist
        return ty;
  }
  
- static void clg_ctx_fatal_action(CLogContext *ctx, FILE *file_handle)
+ static void clg_ctx_fatal_action(CLogContext *ctx)
  {
        if (ctx->callbacks.fatal_fn != NULL) {
-               ctx->callbacks.fatal_fn(file_handle);
+               ctx->callbacks.fatal_fn(ctx->output_file);
        }
-       fflush(file_handle);
+       fflush(ctx->output_file);
        abort();
  }
  
+ static void clg_ctx_backtrace(CLogContext *ctx)
+ {
+       /* Note: we avoid writing fo 'FILE', for backtrace we make an exception,
+        * if necessary we could have a version of the callback that writes to file descriptor all at once. */
+       ctx->callbacks.backtrace_fn(ctx->output_file);
+       fflush(ctx->output_file);
+ }
  /** \} */
  
  /* -------------------------------------------------------------------- */
@@@ -404,13 -413,16 +413,17 @@@ void CLG_log_str
        clg_str_append(&cstr, "\n");
  
        /* could be optional */
 -      write(lg->ctx->output, cstr.data, cstr.len);
 +      int bytes_written = write(lg->ctx->output, cstr.data, cstr.len);
 +      (void)bytes_written;
  
        clg_str_free(&cstr);
  
+       if (lg->ctx->callbacks.backtrace_fn) {
+               clg_ctx_backtrace(lg->ctx);
+       }
        if (severity == CLG_SEVERITY_FATAL) {
-               clg_ctx_fatal_action(lg->ctx, lg->ctx->output_file);
+               clg_ctx_fatal_action(lg->ctx);
        }
  }
  
@@@ -436,13 -448,16 +449,17 @@@ void CLG_logf
        clg_str_append(&cstr, "\n");
  
        /* could be optional */
 -      write(lg->ctx->output, cstr.data, cstr.len);
 +      int bytes_written = write(lg->ctx->output, cstr.data, cstr.len);
 +      (void)bytes_written;
  
        clg_str_free(&cstr);
  
+       if (lg->ctx->callbacks.backtrace_fn) {
+               clg_ctx_backtrace(lg->ctx);
+       }
        if (severity == CLG_SEVERITY_FATAL) {
-               clg_ctx_fatal_action(lg->ctx, lg->ctx->output_file);
+               clg_ctx_fatal_action(lg->ctx);
        }
  }
  
@@@ -472,6 -487,11 +489,11 @@@ static void CLG_ctx_fatal_fn_set(CLogCo
        ctx->callbacks.fatal_fn = fatal_fn;
  }
  
+ static void CLG_ctx_backtrace_fn_set(CLogContext *ctx, void (*backtrace_fn)(void *file_handle))
+ {
+       ctx->callbacks.backtrace_fn = backtrace_fn;
+ }
  static void clg_ctx_type_filter_append(CLG_IDFilter **flt_list, const char *type_match, int type_match_len)
  {
        if (type_match_len == 0) {
@@@ -569,6 -589,11 +591,11 @@@ void CLG_fatal_fn_set(void (*fatal_fn)(
        CLG_ctx_fatal_fn_set(g_ctx, fatal_fn);
  }
  
+ void CLG_backtrace_fn_set(void (*fatal_fn)(void *file_handle))
+ {
+       CLG_ctx_backtrace_fn_set(g_ctx, fatal_fn);
+ }
  void CLG_type_filter_exclude(const char *type_match, int type_match_len)
  {
        CLG_ctx_type_filter_exclude(g_ctx, type_match, type_match_len);
index 30513bd7986922b59342dd909223d970ccaec391,4b5038d89dfe757eb2429ac8b789c67a769af592..2840252acb9f4425f6aeb194966ffc88cd0dbeb3
@@@ -59,6 -59,8 +59,6 @@@
  #include "BKE_sound.h"
  #include "BKE_image.h"
  
 -#include "DEG_depsgraph.h"
 -
  #ifdef WITH_FFMPEG
  #include "IMB_imbuf.h"
  #endif
  
  #include "WM_api.h"
  
 -#include "GPU_basic_shader.h"
  #include "GPU_draw.h"
 -#include "GPU_extensions.h"
 -
 -/* for passing information between creator and gameengine */
 -#ifdef WITH_GAMEENGINE
 -#  include "BL_System.h"
 -#else /* dummy */
 -#  define SYS_SystemHandle int
 -#endif
  
  #ifdef WITH_LIBMV
  #  include "libmv-capi.h"
  #  include "CCL_api.h"
  #endif
  
 +#include "DEG_depsgraph.h"
 +#include "DEG_depsgraph_build.h"
 +#include "DEG_depsgraph_debug.h"
 +
  #include "creator_intern.h"  /* own include */
  
  
@@@ -423,6 -430,7 +423,6 @@@ static void arg_py_context_restore
  
  /** \} */
  
 -
  /* -------------------------------------------------------------------- */
  
  /** \name Handle Argument Callbacks
@@@ -504,6 -512,11 +504,6 @@@ static int arg_handle_print_help(int UN
        BLI_argsPrintArgDoc(ba, "--start-console");
        BLI_argsPrintArgDoc(ba, "--no-native-pixels");
  
 -
 -      printf("\n");
 -      printf("Game Engine Specific Options:\n");
 -      BLI_argsPrintArgDoc(ba, "-g");
 -
        printf("\n");
        printf("Python Options:\n");
        BLI_argsPrintArgDoc(ba, "--enable-autoexec");
        BLI_argsPrintArgDoc(ba, "--log");
        BLI_argsPrintArgDoc(ba, "--log-level");
        BLI_argsPrintArgDoc(ba, "--log-show-basename");
+       BLI_argsPrintArgDoc(ba, "--log-show-backtrace");
        BLI_argsPrintArgDoc(ba, "--log-file");
  
        printf("\n");
        BLI_argsPrintArgDoc(ba, "--debug-depsgraph-no-threads");
  
        BLI_argsPrintArgDoc(ba, "--debug-gpumem");
 +      BLI_argsPrintArgDoc(ba, "--debug-gpu-shaders");
        BLI_argsPrintArgDoc(ba, "--debug-wm");
        BLI_argsPrintArgDoc(ba, "--debug-all");
        BLI_argsPrintArgDoc(ba, "--debug-io");
        BLI_argsPrintArgDoc(ba, "--env-system-scripts");
        BLI_argsPrintArgDoc(ba, "--env-system-python");
        printf("\n");
 -      BLI_argsPrintArgDoc(ba, "-nojoystick");
 -      BLI_argsPrintArgDoc(ba, "-noglsl");
        BLI_argsPrintArgDoc(ba, "-noaudio");
        BLI_argsPrintArgDoc(ba, "-setaudio");
  
  
        printf("\n");
        printf("Experimental Features:\n");
 -      BLI_argsPrintArgDoc(ba, "--enable-new-depsgraph");
 -      BLI_argsPrintArgDoc(ba, "--enable-new-basic-shader-glsl");
 +      BLI_argsPrintArgDoc(ba, "--enable-copy-on-write");
  
        /* Other options _must_ be last (anything not handled will show here) */
        printf("\n");
@@@ -733,6 -749,17 +734,17 @@@ static int arg_handle_log_show_basename
        return 0;
  }
  
+ static const char arg_handle_log_show_backtrace_set_doc[] =
+ "\n\tShow a back trace for each log message (debug builds only)."
+ ;
+ static int arg_handle_log_show_backtrace_set(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data))
+ {
+       /* Ensure types don't become incompatible. */
+       void (*fn)(FILE *fp) = BLI_system_backtrace;
+       CLG_backtrace_fn_set((void (*)(void *))fn);
+       return 0;
+ }
  static const char arg_handle_log_file_set_doc[] =
  "<filename>\n"
  "\n"
@@@ -846,7 -873,7 +858,7 @@@ static const char arg_handle_debug_mode
  static const char arg_handle_debug_mode_generic_set_doc_handlers[] =
  "\n\tEnable debug messages for event handling.";
  static const char arg_handle_debug_mode_generic_set_doc_wm[] =
 -"\n\tEnable debug messages for the window manager, also prints every operator call.";
 +"\n\tEnable debug messages for the window manager, shows all operators in search, shows keymap errors.";
  static const char arg_handle_debug_mode_generic_set_doc_jobs[] =
  "\n\tEnable time profiling for background jobs.";
  static const char arg_handle_debug_mode_generic_set_doc_gpu[] =
@@@ -1115,6 -1142,36 +1127,6 @@@ static int arg_handle_register_extensio
        return 0;
  }
  
 -static const char arg_handle_joystick_disable_doc[] =
 -"\n\tDisable joystick support."
 -;
 -static int arg_handle_joystick_disable(int UNUSED(argc), const char **UNUSED(argv), void *data)
 -{
 -#ifndef WITH_GAMEENGINE
 -      (void)data;
 -#else
 -      SYS_SystemHandle *syshandle = data;
 -
 -      /**
 -       * don't initialize joysticks if user doesn't want to use joysticks
 -       * failed joystick initialization delays over 5 seconds, before game engine start
 -       */
 -      SYS_WriteCommandLineInt(*syshandle, "nojoystick", 1);
 -      if (G.debug & G_DEBUG) printf("disabling nojoystick\n");
 -#endif
 -
 -      return 0;
 -}
 -
 -static const char arg_handle_glsl_disable_doc[] =
 -"\n\tDisable GLSL shading."
 -;
 -static int arg_handle_glsl_disable(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data))
 -{
 -      GPU_extensions_disable();
 -      return 0;
 -}
 -
  static const char arg_handle_audio_disable_doc[] =
  "\n\tForce sound system to None."
  ;
@@@ -1192,8 -1249,10 +1204,8 @@@ static int arg_handle_engine_set(int ar
                else {
                        Scene *scene = CTX_data_scene(C);
                        if (scene) {
 -                              RenderData *rd = &scene->r;
 -
                                if (BLI_findstring(&R_engines, argv[1], offsetof(RenderEngineType, idname))) {
 -                                      BLI_strncpy_utf8(rd->engine, argv[1], sizeof(rd->engine));
 +                                      BLI_strncpy_utf8(scene->r.engine, argv[1], sizeof(scene->r.engine));
                                }
                                else {
                                        printf("\nError: engine not found '%s'\n", argv[1]);
@@@ -1220,7 -1279,7 +1232,7 @@@ static const char arg_handle_image_type
  "\tValid options are 'TGA' 'RAWTGA' 'JPEG' 'IRIS' 'IRIZ' 'AVIRAW' 'AVIJPEG' 'PNG' 'BMP'\n"
  "\n"
  "\tFormats that can be compiled into Blender, not available on all systems: 'HDR' 'TIFF' 'EXR' 'MULTILAYER'\n"
 -"\t'MPEG' 'FRAMESERVER' 'CINEON' 'DPX' 'DDS' 'JP2'"
 +"\t'MPEG' 'CINEON' 'DPX' 'DDS' 'JP2'"
  ;
  static int arg_handle_image_type_set(int argc, const char **argv, void *data)
  {
@@@ -1276,13 -1335,23 +1288,13 @@@ static int arg_handle_threads_set(int a
        }
  }
  
 -static const char arg_handle_depsgraph_use_new_doc[] =
 -"\n\tUse new dependency graph."
 -;
 -static int arg_handle_depsgraph_use_new(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data))
 -{
 -      printf("Using new dependency graph.\n");
 -      DEG_depsgraph_switch_to_new();
 -      return 0;
 -}
 -
 -static const char arg_handle_basic_shader_glsl_use_new_doc[] =
 -"\n\tUse new GLSL basic shader."
 +static const char arg_handle_use_copy_on_write_doc[] =
 +"\n\tUse new dependency graph"
  ;
 -static int arg_handle_basic_shader_glsl_use_new(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data))
 +static int arg_handle_use_copy_on_write(int UNUSED(argc), const char **UNUSED(argv), void *UNUSED(data))
  {
 -      printf("Using new GLSL basic shader.\n");
 -      GPU_basic_shader_use_glsl_set(true);
 +      printf("Using copy on write. This is highly EXPERIMENTAL!\n");
 +      DEG_depsgraph_enable_copy_on_write();
        return 0;
  }
  
@@@ -1348,6 -1417,76 +1360,6 @@@ static int arg_handle_extension_set(in
        }
  }
  
 -static const char arg_handle_ge_parameters_set_doc[] =
 -"Game Engine specific options\n"
 -"\n"
 -"\t'fixedtime'\n"
 -"\t\tRun on 50 hertz without dropping frames.\n"
 -"\t'vertexarrays'\n"
 -"\t\tUse Vertex Arrays for rendering (usually faster).\n"
 -"\t'nomipmap'\n"
 -"\t\tNo Texture Mipmapping.\n"
 -"\t'linearmipmap'\n"
 -"\t\tLinear Texture Mipmapping instead of Nearest (default)."
 -;
 -static int arg_handle_ge_parameters_set(int argc, const char **argv, void *data)
 -{
 -      int a = 0;
 -#ifdef WITH_GAMEENGINE
 -      SYS_SystemHandle syshandle = *(SYS_SystemHandle *)data;
 -#else
 -      (void)data;
 -#endif
 -
 -      /**
 -       * gameengine parameters are automatically put into system
 -       * -g [paramname = value]
 -       * -g [boolparamname]
 -       * example:
 -       * -g novertexarrays
 -       * -g maxvertexarraysize = 512
 -       */
 -
 -      if (argc >= 1) {
 -              const char *paramname = argv[a];
 -              /* check for single value versus assignment */
 -              if (a + 1 < argc && (*(argv[a + 1]) == '=')) {
 -                      a++;
 -                      if (a + 1 < argc) {
 -                              a++;
 -                              /* assignment */
 -#ifdef WITH_GAMEENGINE
 -                              SYS_WriteCommandLineString(syshandle, paramname, argv[a]);
 -#endif
 -                      }
 -                      else {
 -                              printf("Error: argument assignment (%s) without value.\n", paramname);
 -                              return 0;
 -                      }
 -                      /* name arg eaten */
 -
 -              }
 -              else {
 -#ifdef WITH_GAMEENGINE
 -                      SYS_WriteCommandLineInt(syshandle, argv[a], 1);
 -#endif
 -                      /* doMipMap */
 -                      if (STREQ(argv[a], "nomipmap")) {
 -                              GPU_set_mipmap(0); //doMipMap = 0;
 -                      }
 -                      /* linearMipMap */
 -                      if (STREQ(argv[a], "linearmipmap")) {
 -                              GPU_set_mipmap(1);
 -                              GPU_set_linear_mipmap(1); //linearMipMap = 1;
 -                      }
 -
 -
 -              } /* if (*(argv[a + 1]) == '=') */
 -      }
 -
 -      return a;
 -}
 -
  static const char arg_handle_render_frame_doc[] =
  "<frame>\n"
  "\tRender frame <frame> and save it.\n"
@@@ -1381,6 -1520,7 +1393,6 @@@ static int arg_handle_render_frame(int 
                        re = RE_NewSceneRender(scene);
                        BLI_threaded_malloc_begin();
                        BKE_reports_init(&reports, RPT_STORE);
 -
                        RE_SetReports(re, &reports);
                        for (int i = 0; i < frames_range_len; i++) {
                                /* We could pass in frame ranges,
@@@ -1789,7 -1929,7 +1801,7 @@@ static int arg_handle_load_file(int UNU
  }
  
  
 -void main_args_setup(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
 +void main_args_setup(bContext *C, bArgs *ba)
  {
  
  #define CB(a) a##_doc, a
        BLI_argsAdd(ba, 1, NULL, "--log", CB(arg_handle_log_set), ba);
        BLI_argsAdd(ba, 1, NULL, "--log-level", CB(arg_handle_log_level_set), ba);
        BLI_argsAdd(ba, 1, NULL, "--log-show-basename", CB(arg_handle_log_show_basename_set), ba);
+       BLI_argsAdd(ba, 1, NULL, "--log-show-backtrace", CB(arg_handle_log_show_backtrace_set), ba);
        BLI_argsAdd(ba, 1, NULL, "--log-file", CB(arg_handle_log_file_set), ba);
  
        BLI_argsAdd(ba, 1, "-d", "--debug", CB(arg_handle_debug_mode_set), ba);
                    CB_EX(arg_handle_debug_mode_generic_set, depsgraph_pretty), (void *)G_DEBUG_DEPSGRAPH_PRETTY);
        BLI_argsAdd(ba, 1, NULL, "--debug-gpumem",
                    CB_EX(arg_handle_debug_mode_generic_set, gpumem), (void *)G_DEBUG_GPU_MEM);
 +      BLI_argsAdd(ba, 1, NULL, "--debug-gpu-shaders",
 +                  CB_EX(arg_handle_debug_mode_generic_set, gpumem), (void *)G_DEBUG_GPU_SHADERS);
  
 -      BLI_argsAdd(ba, 1, NULL, "--enable-new-depsgraph", CB(arg_handle_depsgraph_use_new), NULL);
 -      BLI_argsAdd(ba, 1, NULL, "--enable-new-basic-shader-glsl", CB(arg_handle_basic_shader_glsl_use_new), NULL);
 +      BLI_argsAdd(ba, 1, NULL, "--enable-copy-on-write", CB(arg_handle_use_copy_on_write), NULL);
  
        BLI_argsAdd(ba, 1, NULL, "--verbose", CB(arg_handle_verbosity_set), NULL);
  
        BLI_argsAdd(ba, 2, NULL, "--no-native-pixels", CB(arg_handle_native_pixels_set), ba);
  
        /* third pass: disabling things and forcing settings */
 -      BLI_argsAddCase(ba, 3, "-nojoystick", 1, NULL, 0, CB(arg_handle_joystick_disable), syshandle);
 -      BLI_argsAddCase(ba, 3, "-noglsl", 1, NULL, 0, CB(arg_handle_glsl_disable), NULL);
        BLI_argsAddCase(ba, 3, "-noaudio", 1, NULL, 0, CB(arg_handle_audio_disable), NULL);
        BLI_argsAddCase(ba, 3, "-setaudio", 1, NULL, 0, CB(arg_handle_audio_set), NULL);
  
        /* fourth pass: processing arguments */
 -      BLI_argsAdd(ba, 4, "-g", NULL, CB(arg_handle_ge_parameters_set), syshandle);
        BLI_argsAdd(ba, 4, "-f", "--render-frame", CB(arg_handle_render_frame), C);
        BLI_argsAdd(ba, 4, "-a", "--render-anim", CB(arg_handle_render_animation), C);
        BLI_argsAdd(ba, 4, "-S", "--scene", CB(arg_handle_scene_set), C);