blender patches
This commit is contained in:
120
blender-patches/0005-fix_round_trip_in_Cycles.patch
Normal file
120
blender-patches/0005-fix_round_trip_in_Cycles.patch
Normal file
@@ -0,0 +1,120 @@
|
||||
From: Sergey Sharybin <sergey@blender.org>
|
||||
Date: Wed, 2 Feb 2022 11:17:13 +0100
|
||||
Subject: fix_round_trip_in_Cycles
|
||||
|
||||
There are two things achieved by this change:
|
||||
|
||||
- No possible downcast of size_t to int when calculating motion steps.
|
||||
- Disambiguate call to min() which was for some reason considered
|
||||
ambiguous on 32bit platforms `min(int, unsigned int)`.
|
||||
|
||||
Differential Revision: https://developer.blender.org/D13992
|
||||
---
|
||||
intern/cycles/bvh/embree.cpp | 6 +++---
|
||||
intern/cycles/scene/hair.cpp | 8 ++++----
|
||||
intern/cycles/scene/mesh.cpp | 2 +-
|
||||
intern/cycles/util/math.h | 7 ++++++-
|
||||
4 files changed, 14 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/intern/cycles/bvh/embree.cpp b/intern/cycles/bvh/embree.cpp
|
||||
index 944a84c..386c6f4 100644
|
||||
--- a/intern/cycles/bvh/embree.cpp
|
||||
+++ b/intern/cycles/bvh/embree.cpp
|
||||
@@ -418,7 +418,7 @@ void BVHEmbree::add_instance(Object *ob, int i)
|
||||
assert(instance_bvh != NULL);
|
||||
|
||||
const size_t num_object_motion_steps = ob->use_motion() ? ob->get_motion().size() : 1;
|
||||
- const size_t num_motion_steps = min(num_object_motion_steps, RTC_MAX_TIME_STEP_COUNT);
|
||||
+ const size_t num_motion_steps = min(num_object_motion_steps, (size_t)RTC_MAX_TIME_STEP_COUNT);
|
||||
assert(num_object_motion_steps <= RTC_MAX_TIME_STEP_COUNT);
|
||||
|
||||
RTCGeometry geom_id = rtcNewGeometry(rtc_device, RTC_GEOMETRY_TYPE_INSTANCE);
|
||||
@@ -469,7 +469,7 @@ void BVHEmbree::add_triangles(const Object *ob, const Mesh *mesh, int i)
|
||||
}
|
||||
|
||||
assert(num_motion_steps <= RTC_MAX_TIME_STEP_COUNT);
|
||||
- num_motion_steps = min(num_motion_steps, RTC_MAX_TIME_STEP_COUNT);
|
||||
+ num_motion_steps = min(num_motion_steps, (size_t)RTC_MAX_TIME_STEP_COUNT);
|
||||
|
||||
const size_t num_triangles = mesh->num_triangles();
|
||||
|
||||
@@ -638,7 +638,7 @@ void BVHEmbree::add_curves(const Object *ob, const Hair *hair, int i)
|
||||
}
|
||||
|
||||
assert(num_motion_steps <= RTC_MAX_TIME_STEP_COUNT);
|
||||
- num_motion_steps = min(num_motion_steps, RTC_MAX_TIME_STEP_COUNT);
|
||||
+ num_motion_steps = min(num_motion_steps, (size_t)RTC_MAX_TIME_STEP_COUNT);
|
||||
|
||||
const size_t num_curves = hair->num_curves();
|
||||
size_t num_segments = 0;
|
||||
diff --git a/intern/cycles/scene/hair.cpp b/intern/cycles/scene/hair.cpp
|
||||
index 2951a60..0fd9c70 100644
|
||||
--- a/intern/cycles/scene/hair.cpp
|
||||
+++ b/intern/cycles/scene/hair.cpp
|
||||
@@ -119,7 +119,7 @@ void Hair::Curve::motion_keys(const float3 *curve_keys,
|
||||
{
|
||||
/* Figure out which steps we need to fetch and their interpolation factor. */
|
||||
const size_t max_step = num_steps - 1;
|
||||
- const size_t step = min((int)(time * max_step), max_step - 1);
|
||||
+ const size_t step = std::min((size_t)(time * max_step), max_step - 1);
|
||||
const float t = time * max_step - step;
|
||||
/* Fetch vertex coordinates. */
|
||||
float4 curr_keys[2];
|
||||
@@ -147,7 +147,7 @@ void Hair::Curve::cardinal_motion_keys(const float3 *curve_keys,
|
||||
{
|
||||
/* Figure out which steps we need to fetch and their interpolation factor. */
|
||||
const size_t max_step = num_steps - 1;
|
||||
- const size_t step = min((int)(time * max_step), max_step - 1);
|
||||
+ const size_t step = min((size_t)(time * max_step), max_step - 1);
|
||||
const float t = time * max_step - step;
|
||||
/* Fetch vertex coordinates. */
|
||||
float4 curr_keys[4];
|
||||
@@ -192,7 +192,7 @@ void Hair::Curve::keys_for_step(const float3 *curve_keys,
|
||||
float4 r_keys[2]) const
|
||||
{
|
||||
k0 = max(k0, 0);
|
||||
- k1 = min(k1, num_keys - 1);
|
||||
+ k1 = min(k1, (size_t)(num_keys - 1));
|
||||
const size_t center_step = ((num_steps - 1) / 2);
|
||||
if (step == center_step) {
|
||||
/* Center step: regular key location. */
|
||||
@@ -238,7 +238,7 @@ void Hair::Curve::cardinal_keys_for_step(const float3 *curve_keys,
|
||||
float4 r_keys[4]) const
|
||||
{
|
||||
k0 = max(k0, 0);
|
||||
- k3 = min(k3, num_keys - 1);
|
||||
+ k3 = min(k3, (size_t)(num_keys - 1));
|
||||
const size_t center_step = ((num_steps - 1) / 2);
|
||||
if (step == center_step) {
|
||||
/* Center step: regular key location. */
|
||||
diff --git a/intern/cycles/scene/mesh.cpp b/intern/cycles/scene/mesh.cpp
|
||||
index f47dab3..e6c8d9b 100644
|
||||
--- a/intern/cycles/scene/mesh.cpp
|
||||
+++ b/intern/cycles/scene/mesh.cpp
|
||||
@@ -53,7 +53,7 @@ void Mesh::Triangle::motion_verts(const float3 *verts,
|
||||
{
|
||||
/* Figure out which steps we need to fetch and their interpolation factor. */
|
||||
const size_t max_step = num_steps - 1;
|
||||
- const size_t step = min((int)(time * max_step), max_step - 1);
|
||||
+ const size_t step = min((size_t)(time * max_step), max_step - 1);
|
||||
const float t = time * max_step - step;
|
||||
/* Fetch vertex coordinates. */
|
||||
float3 curr_verts[3];
|
||||
diff --git a/intern/cycles/util/math.h b/intern/cycles/util/math.h
|
||||
index e4c7df6..4e0e97f 100644
|
||||
--- a/intern/cycles/util/math.h
|
||||
+++ b/intern/cycles/util/math.h
|
||||
@@ -122,7 +122,12 @@ ccl_device_inline int min(int a, int b)
|
||||
return (a < b) ? a : b;
|
||||
}
|
||||
|
||||
-ccl_device_inline uint min(uint a, uint b)
|
||||
+ccl_device_inline uint32_t min(uint32_t a, uint32_t b)
|
||||
+{
|
||||
+ return (a < b) ? a : b;
|
||||
+}
|
||||
+
|
||||
+ccl_device_inline uint64_t min(uint64_t a, uint64_t b)
|
||||
{
|
||||
return (a < b) ? a : b;
|
||||
}
|
||||
Reference in New Issue
Block a user