Merge branch 'blender-v4.4-release'

This commit is contained in:
Sean Kim
2025-02-11 14:10:10 -08:00
4 changed files with 57 additions and 10 deletions

View File

@@ -114,6 +114,22 @@ struct BVHMetalBuildThrottler {
}
} g_bvh_build_throttler;
/* macOS 15.2 and 15.3 has a bug in the dynamic BVH refitting which leads to missing geometry
* during render. The issue is fixed in the macOS 15.4, until then disable refitting even for
* the viewport.
* Note that dynamic BVH is still used on the scene level to speed up updates of instances and
* such. #132782. */
static bool support_refit_blas()
{
if (@available(macos 15.4, *)) {
return true;
}
if (@available(macos 15.2, *)) {
return false;
}
return true;
}
BVHMetal::BVHMetal(const BVHParams &params_,
const vector<Geometry *> &geometry_,
const vector<Object *> &objects_,
@@ -167,7 +183,7 @@ bool BVHMetal::build_BLAS_mesh(Progress &progress,
"Building mesh BLAS | %7d tris | %s", (int)mesh->num_triangles(), geom->name.c_str());
/*------------------------------------------------*/
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC);
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC) || !support_refit_blas();
const array<float3> &verts = mesh->get_verts();
const array<int> &tris = mesh->get_triangles();
@@ -388,7 +404,7 @@ bool BVHMetal::build_BLAS_hair(Progress &progress,
"Building hair BLAS | %7d curves | %s", (int)hair->num_curves(), geom->name.c_str());
/*------------------------------------------------*/
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC);
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC) || !support_refit_blas();
size_t num_motion_steps = 1;
Attribute *motion_keys = hair->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
@@ -732,7 +748,7 @@ bool BVHMetal::build_BLAS_pointcloud(Progress &progress,
const float3 *points = pointcloud->get_points().data();
const float *radius = pointcloud->get_radius().data();
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC);
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC) || !support_refit_blas();
size_t num_motion_steps = 1;
Attribute *motion_keys = pointcloud->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
@@ -1045,7 +1061,7 @@ bool BVHMetal::build_TLAS(Progress &progress,
BVH_status("Building TLAS | %7d instances", (int)num_instances);
/*------------------------------------------------*/
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC);
const bool use_fast_trace_bvh = (params.bvh_type == BVH_TYPE_STATIC) || !support_refit_blas();
NSMutableArray *all_blas = [NSMutableArray array];
unordered_map<const BVHMetal *, int> instance_mapping;
@@ -1324,6 +1340,10 @@ bool BVHMetal::build(Progress &progress,
}
}
if (!support_refit_blas()) {
refit = false;
}
@autoreleasepool {
if (!params.top_level) {
return build_BLAS(progress, mtl_device, queue, refit);

View File

@@ -699,13 +699,14 @@ static void rna_Object_closest_point_on_mesh(Object *ob,
copy_v3_v3(r_normal, nearest.no);
*r_index = mesh_corner_tri_to_face_index(mesh_eval, nearest.index);
}
else {
*r_success = false;
zero_v3(r_location);
zero_v3(r_normal);
*r_index = -1;
}
}
*r_success = false;
zero_v3(r_location);
zero_v3(r_normal);
*r_index = -1;
}
static bool rna_Object_is_modified(Object *ob, Scene *scene, int settings)

View File

@@ -358,6 +358,11 @@ add_blender_test(
--run-all-tests
)
add_blender_test(
object_api
--python ${TEST_PYTHON_DIR}/bl_object.py
)
# ------------------------------------------------------------------------------
# MODIFIERS TESTS
add_blender_test(

21
tests/python/bl_object.py Normal file
View File

@@ -0,0 +1,21 @@
import unittest
import bpy
from mathutils import Vector
class TestObjectApi(unittest.TestCase):
def test_closest_point_on_mesh_of_default_cube(self):
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=False)
bpy.ops.outliner.orphans_purge()
bpy.ops.mesh.primitive_cube_add()
ret_val = bpy.context.scene.objects[0].closest_point_on_mesh(Vector((0.0, 0.0, 2.0)))
self.assertTrue(ret_val[0])
self.assertEqual(ret_val[1], Vector((0.0, 0.0, 1.0)))
if __name__ == '__main__':
import sys
sys.argv = [__file__] + (sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else [])
unittest.main()