diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-03-18 21:06:21 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-03-18 21:06:21 +0300 |
commit | a29186efb414cec130dbfe4f81173b64d37ad10a (patch) | |
tree | cb7b98c42f938050a87ddb141f8f3e1197a25f9c /intern | |
parent | b29790a953ff0f31c431daaaa2864e48bd38e94c (diff) | |
parent | 01df4818a6e1d3b93517e48a617310481abd9339 (diff) |
Merge branch 'blender2.7'
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/blender/blender_curves.cpp | 28 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_compat_opencl.h | 6 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_emission.h | 2 | ||||
-rw-r--r-- | intern/cycles/render/curves.h | 2 | ||||
-rw-r--r-- | intern/cycles/render/light.cpp | 4 | ||||
-rw-r--r-- | intern/cycles/render/light.h | 2 |
6 files changed, 15 insertions, 29 deletions
diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp index 183376db4c1..602e63a3e47 100644 --- a/intern/cycles/blender/blender_curves.cpp +++ b/intern/cycles/blender/blender_curves.cpp @@ -250,7 +250,7 @@ static bool ObtainCacheParticleUV(Mesh *mesh, BL::Mesh::uv_layers_iterator l; b_mesh->uv_layers.begin(l); - float3 uv = make_float3(0.0f, 0.0f, 0.0f); + float2 uv = make_float2(0.0f, 0.0f); if(b_mesh->uv_layers.length()) b_psys.uv_on_emitter(psmd, *b_pa, pa_no, uv_num, &uv.x); CData->curve_uv.push_back_slow(uv); @@ -752,45 +752,29 @@ static void ExportCurveSegmentsMotion(Mesh *mesh, ParticleCurveData *CData, int static void ExportCurveTriangleUV(ParticleCurveData *CData, int vert_offset, int resol, - float3 *uvdata) + float2 *uvdata) { if(uvdata == NULL) return; - - float time = 0.0f; - float prevtime = 0.0f; - int vertexindex = vert_offset; for(int sys = 0; sys < CData->psys_firstcurve.size(); sys++) { for(int curve = CData->psys_firstcurve[sys]; curve < CData->psys_firstcurve[sys] + CData->psys_curvenum[sys]; curve++) { for(int curvekey = CData->curve_firstkey[curve]; curvekey < CData->curve_firstkey[curve] + CData->curve_keynum[curve] - 1; curvekey++) { - const float curve_time = CData->curvekey_time[curvekey]; - const float curve_length = CData->curve_length[curve]; - time = (curve_length > 0.0f) ? curve_time / curve_length : 0.0f; - for(int section = 0; section < resol; section++) { uvdata[vertexindex] = CData->curve_uv[curve]; - uvdata[vertexindex].z = prevtime; vertexindex++; uvdata[vertexindex] = CData->curve_uv[curve]; - uvdata[vertexindex].z = time; vertexindex++; uvdata[vertexindex] = CData->curve_uv[curve]; - uvdata[vertexindex].z = prevtime; vertexindex++; uvdata[vertexindex] = CData->curve_uv[curve]; - uvdata[vertexindex].z = time; vertexindex++; uvdata[vertexindex] = CData->curve_uv[curve]; - uvdata[vertexindex].z = prevtime; vertexindex++; uvdata[vertexindex] = CData->curve_uv[curve]; - uvdata[vertexindex].z = time; vertexindex++; } - - prevtime = time; } } } @@ -1063,9 +1047,9 @@ void BlenderSync::sync_curves(Mesh *mesh, if(active_render) attr_uv = mesh->attributes.add(std, name); else - attr_uv = mesh->attributes.add(name, TypeDesc::TypePoint, ATTR_ELEMENT_CORNER); + attr_uv = mesh->attributes.add(name, TypeFloat2, ATTR_ELEMENT_CORNER); - float3 *uv = attr_uv->data_float3(); + float2 *uv = attr_uv->data_float2(); ExportCurveTriangleUV(&CData, tri_num * 3, used_res, uv); } @@ -1073,9 +1057,9 @@ void BlenderSync::sync_curves(Mesh *mesh, if(active_render) attr_uv = mesh->curve_attributes.add(std, name); else - attr_uv = mesh->curve_attributes.add(name, TypeDesc::TypePoint, ATTR_ELEMENT_CURVE); + attr_uv = mesh->curve_attributes.add(name, TypeFloat2, ATTR_ELEMENT_CURVE); - float3 *uv = attr_uv->data_float3(); + float2 *uv = attr_uv->data_float2(); if(uv) { size_t i = 0; diff --git a/intern/cycles/kernel/kernel_compat_opencl.h b/intern/cycles/kernel/kernel_compat_opencl.h index 3bf8cdebf4a..d3d0934a626 100644 --- a/intern/cycles/kernel/kernel_compat_opencl.h +++ b/intern/cycles/kernel/kernel_compat_opencl.h @@ -125,7 +125,9 @@ #define fmodf(x, y) fmod((float)(x), (float)(y)) #define sinhf(x) sinh(((float)(x))) -#if !(defined(__KERNEL_OPENCL_AMD__) || defined(__KERNEL_OPENCL_INTEL_CPU__)) +/* Use native functions with possibly lower precision for performance, + * no issues found so far. */ +#if 1 # define sinf(x) native_sin(((float)(x))) # define cosf(x) native_cos(((float)(x))) # define tanf(x) native_tan(((float)(x))) @@ -140,7 +142,7 @@ # define expf(x) exp(((float)(x))) # define sqrtf(x) sqrt(((float)(x))) # define logf(x) log(((float)(x))) -# define rcp(x) recip(x)) +# define rcp(x) recip(x) #endif /* data lookup defines */ diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h index 9c47d1ca7be..80bb8d48caf 100644 --- a/intern/cycles/kernel/kernel_emission.h +++ b/intern/cycles/kernel/kernel_emission.h @@ -318,7 +318,7 @@ ccl_device_noinline float3 indirect_background(KernelGlobals *kg, # endif path_state_modify_bounce(state, true); - shader_eval_surface(kg, emission_sd, state, PATH_RAY_EMISSION); + shader_eval_surface(kg, emission_sd, state, state->flag | PATH_RAY_EMISSION); path_state_modify_bounce(state, false); L = shader_background_eval(emission_sd); diff --git a/intern/cycles/render/curves.h b/intern/cycles/render/curves.h index cf75751c58f..9db411bc04b 100644 --- a/intern/cycles/render/curves.h +++ b/intern/cycles/render/curves.h @@ -75,7 +75,7 @@ public: array<int> curve_firstkey; array<int> curve_keynum; array<float> curve_length; - array<float3> curve_uv; + array<float2> curve_uv; array<float3> curve_vcol; array<float3> curvekey_co; diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp index ac41fce96d7..56d60adf71d 100644 --- a/intern/cycles/render/light.cpp +++ b/intern/cycles/render/light.cpp @@ -192,7 +192,7 @@ bool LightManager::has_background_light(Scene *scene) return false; } -void LightManager::disable_ineffective_light(Device * /*device*/, Scene *scene) +void LightManager::disable_ineffective_light(Scene *scene) { /* Make all lights enabled by default, and perform some preliminary checks * needed for finer-tuning of settings (for example, check whether we've @@ -880,7 +880,7 @@ void LightManager::device_update(Device *device, DeviceScene *dscene, Scene *sce use_light_visibility = false; - disable_ineffective_light(device, scene); + disable_ineffective_light(scene); device_update_points(device, dscene, scene); if(progress.get_cancel()) return; diff --git a/intern/cycles/render/light.h b/intern/cycles/render/light.h index b7f3a047ad7..a627ec9bdc3 100644 --- a/intern/cycles/render/light.h +++ b/intern/cycles/render/light.h @@ -110,7 +110,7 @@ protected: * which doesn't contribute to the scene or which is only used for MIS * and scene doesn't need MIS. */ - void disable_ineffective_light(Device *device, Scene *scene); + void disable_ineffective_light(Scene *scene); void device_update_points(Device *device, DeviceScene *dscene, |