diff options
-rw-r--r-- | intern/cycles/app/cycles_cubin_cc.cpp | 18 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_compat_cuda.h | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_paint.h | 1 | ||||
-rw-r--r-- | source/blender/editors/util/ed_util.c | 28 |
4 files changed, 33 insertions, 18 deletions
diff --git a/intern/cycles/app/cycles_cubin_cc.cpp b/intern/cycles/app/cycles_cubin_cc.cpp index c1f3974be6d..73d0cd5130c 100644 --- a/intern/cycles/app/cycles_cubin_cc.cpp +++ b/intern/cycles/app/cycles_cubin_cc.cpp @@ -32,6 +32,15 @@ using std::string; using std::vector; +namespace std { + template<typename T> + std::string to_string(const T &n) { + std::ostringstream s; + s << n; + return s.str(); + } +} + class CompilationSettings { public: @@ -75,7 +84,7 @@ bool compile_cuda(CompilationSettings &settings) for(size_t i = 0; i < settings.defines.size(); i++) { options.push_back("-D" + settings.defines[i]); } - + options.push_back("-D__KERNEL_CUDA_VERSION__=" + std::to_string(cuewNvrtcVersion())); options.push_back("-arch=compute_" + std::to_string(settings.target_arch)); options.push_back("--device-as-default-execution-space"); if(settings.fast_math) @@ -150,9 +159,12 @@ bool link_ptxas(CompilationSettings &settings) " --gpu-name sm_" + std::to_string(settings.target_arch) + " -m" + std::to_string(settings.bits); - if(settings.verbose) + if (settings.verbose) + { ptx += " --verbose"; - + printf(ptx.c_str()); + } + int pxresult = system(ptx.c_str()); if(pxresult) { fprintf(stderr, "Error: ptxas failed (%x)\n\n", pxresult); diff --git a/intern/cycles/kernel/kernel_compat_cuda.h b/intern/cycles/kernel/kernel_compat_cuda.h index 7b66bdc169e..900f7fe6a2c 100644 --- a/intern/cycles/kernel/kernel_compat_cuda.h +++ b/intern/cycles/kernel/kernel_compat_cuda.h @@ -37,8 +37,8 @@ typedef unsigned long long uint64_t; typedef unsigned short half; typedef unsigned long long CUtexObject; -#define FLT_MAX 1.175494350822287507969e-38f -#define FLT_MIN 340282346638528859811704183484516925440.0f +#define FLT_MIN 1.175494350822287507969e-38f +#define FLT_MAX 340282346638528859811704183484516925440.0f __device__ half __float2half(const float f) { diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h index 0d55b65fe65..7fd08ba541f 100644 --- a/source/blender/blenkernel/BKE_paint.h +++ b/source/blender/blenkernel/BKE_paint.h @@ -214,7 +214,6 @@ typedef struct SculptSession { /* Layer brush persistence between strokes */ float (*layer_co)[3]; /* Copy of the mesh vertices' locations */ - struct SculptStroke *stroke; struct StrokeCache *cache; union { diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c index b52cc20f71f..8973c96c438 100644 --- a/source/blender/editors/util/ed_util.c +++ b/source/blender/editors/util/ed_util.c @@ -175,18 +175,22 @@ bool ED_editors_flush_edits(const bContext *C, bool for_render) * objects can exist at the same time */ for (ob = bmain->object.first; ob; ob = ob->id.next) { if (ob->mode & OB_MODE_SCULPT) { - /* flush multires changes (for sculpt) */ - multires_force_update(ob); - has_edited = true; - - if (for_render) { - /* flush changes from dynamic topology sculpt */ - BKE_sculptsession_bm_to_me_for_render(ob); - } - else { - /* Set reorder=false so that saving the file doesn't reorder - * the BMesh's elements */ - BKE_sculptsession_bm_to_me(ob, false); + /* Don't allow flushing while in the middle of a stroke (frees data in use). + * Auto-save prevents this from happening but scripts may cause a flush on saving: T53986. */ + if ((ob->sculpt && ob->sculpt->cache) == 0) { + /* flush multires changes (for sculpt) */ + multires_force_update(ob); + has_edited = true; + + if (for_render) { + /* flush changes from dynamic topology sculpt */ + BKE_sculptsession_bm_to_me_for_render(ob); + } + else { + /* Set reorder=false so that saving the file doesn't reorder + * the BMesh's elements */ + BKE_sculptsession_bm_to_me(ob, false); + } } } else if (ob->mode & OB_MODE_EDIT) { |