diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/raycast/SCsub | 5 | ||||
-rw-r--r-- | modules/raycast/godot_update_embree.py | 222 | ||||
-rw-r--r-- | modules/raycast/lightmap_raycaster_embree.cpp | 11 | ||||
-rw-r--r-- | modules/raycast/lightmap_raycaster_embree.h | 2 | ||||
-rw-r--r-- | modules/raycast/raycast_occlusion_cull.cpp | 12 | ||||
-rw-r--r-- | modules/raycast/raycast_occlusion_cull.h | 2 | ||||
-rw-r--r-- | modules/raycast/static_raycaster_embree.cpp | 9 | ||||
-rw-r--r-- | modules/raycast/static_raycaster_embree.h | 2 |
8 files changed, 93 insertions, 172 deletions
diff --git a/modules/raycast/SCsub b/modules/raycast/SCsub index 209ebab388..f3a8e30763 100644 --- a/modules/raycast/SCsub +++ b/modules/raycast/SCsub @@ -15,10 +15,10 @@ if env["builtin_embree"]: embree_src = [ "common/sys/sysinfo.cpp", "common/sys/alloc.cpp", + "common/sys/estring.cpp", "common/sys/filename.cpp", "common/sys/library.cpp", "common/sys/thread.cpp", - "common/sys/string.cpp", "common/sys/regression.cpp", "common/sys/mutex.cpp", "common/sys/condition.cpp", @@ -36,6 +36,7 @@ if env["builtin_embree"]: "kernels/common/rtcore.cpp", "kernels/common/rtcore_builder.cpp", "kernels/common/scene.cpp", + "kernels/common/scene_verify.cpp", "kernels/common/alloc.cpp", "kernels/common/geometry.cpp", "kernels/common/scene_triangle_mesh.cpp", @@ -56,8 +57,6 @@ if env["builtin_embree"]: "kernels/bvh/bvh_builder_twolevel.cpp", "kernels/bvh/bvh_intersector1_bvh4.cpp", "kernels/bvh/bvh_intersector_hybrid4_bvh4.cpp", - "kernels/bvh/bvh_intersector_stream_bvh4.cpp", - "kernels/bvh/bvh_intersector_stream_filters.cpp", ] thirdparty_sources = [thirdparty_dir + file for file in embree_src] diff --git a/modules/raycast/godot_update_embree.py b/modules/raycast/godot_update_embree.py index f7af937c8b..c179060365 100644 --- a/modules/raycast/godot_update_embree.py +++ b/modules/raycast/godot_update_embree.py @@ -1,6 +1,13 @@ -import glob, os, shutil, subprocess, re +import glob +import os +import re +import shutil +import stat +import subprocess +from types import TracebackType +from typing import Any, Callable, Tuple, Type -git_tag = "v3.13.5" +git_tag = "v4.3.1" include_dirs = [ "common/tasking", @@ -15,7 +22,7 @@ include_dirs = [ "common/simd", "common/simd/arm", "common/simd/wasm", - "include/embree3", + "include/embree4", "kernels/subdiv", "kernels/geometry", ] @@ -23,10 +30,10 @@ include_dirs = [ cpp_files = [ "common/sys/sysinfo.cpp", "common/sys/alloc.cpp", + "common/sys/estring.cpp", "common/sys/filename.cpp", "common/sys/library.cpp", "common/sys/thread.cpp", - "common/sys/string.cpp", "common/sys/regression.cpp", "common/sys/mutex.cpp", "common/sys/condition.cpp", @@ -44,6 +51,7 @@ cpp_files = [ "kernels/common/rtcore.cpp", "kernels/common/rtcore_builder.cpp", "kernels/common/scene.cpp", + "kernels/common/scene_verify.cpp", "kernels/common/alloc.cpp", "kernels/common/geometry.cpp", "kernels/common/scene_triangle_mesh.cpp", @@ -65,26 +73,58 @@ cpp_files = [ "kernels/bvh/bvh_intersector1.cpp", "kernels/bvh/bvh_intersector1_bvh4.cpp", "kernels/bvh/bvh_intersector_hybrid4_bvh4.cpp", - "kernels/bvh/bvh_intersector_stream_bvh4.cpp", - "kernels/bvh/bvh_intersector_stream_filters.cpp", "kernels/bvh/bvh_intersector_hybrid.cpp", - "kernels/bvh/bvh_intersector_stream.cpp", ] -os.chdir("../../thirdparty") +config_files = [ + "kernels/config.h.in", + "kernels/rtcore_config.h.in", +] + +license_file = "LICENSE.txt" + +os.chdir(f"{os.path.dirname(__file__)}/../../thirdparty") dir_name = "embree" if os.path.exists(dir_name): shutil.rmtree(dir_name) +# In case something went wrong and embree-tmp stayed on the system. +if os.path.exists("embree-tmp"): + shutil.rmtree("embree-tmp") + subprocess.run(["git", "clone", "https://github.com/embree/embree.git", "embree-tmp"]) os.chdir("embree-tmp") subprocess.run(["git", "checkout", git_tag]) commit_hash = str(subprocess.check_output(["git", "rev-parse", "HEAD"], universal_newlines=True)).strip() + +def on_rm_error( + function: Callable[..., Any], path: str, excinfo: Tuple[Type[Exception], Exception, TracebackType] +) -> None: + """ + Error handler for `shutil.rmtree()`. + + If the error is due to read-only files, + it will change the file permissions and retry. + """ + os.chmod(path, stat.S_IWRITE) + os.unlink(path) + + +# 3.12 Python and beyond should replace `onerror` with `onexc`. +# We remove the .git directory because it contains +# a lot of read-only files that are problematic on Windows. +shutil.rmtree(".git", onerror=on_rm_error) + all_files = set(cpp_files) +for config_file in config_files: + all_files.add(config_file) + +all_files.add(license_file) + dest_dir = os.path.join("..", dir_name) for include_dir in include_dirs: headers = glob.iglob(os.path.join(include_dir, "*.h")) @@ -105,87 +145,8 @@ with open(os.path.join(dest_dir, "kernels/hash.h"), "w", encoding="utf-8", newli """ ) -with open(os.path.join(dest_dir, "kernels/config.h"), "w", encoding="utf-8", newline="\n") as config_file: - config_file.write( - """// Copyright 2009-2021 Intel Corporation -// SPDX-License-Identifier: Apache-2.0 - -/* #undef EMBREE_RAY_MASK */ -/* #undef EMBREE_STAT_COUNTERS */ -/* #undef EMBREE_BACKFACE_CULLING */ -/* #undef EMBREE_BACKFACE_CULLING_CURVES */ -#define EMBREE_FILTER_FUNCTION -/* #undef EMBREE_IGNORE_INVALID_RAYS */ -#define EMBREE_GEOMETRY_TRIANGLE -/* #undef EMBREE_GEOMETRY_QUAD */ -/* #undef EMBREE_GEOMETRY_CURVE */ -/* #undef EMBREE_GEOMETRY_SUBDIVISION */ -/* #undef EMBREE_GEOMETRY_USER */ -/* #undef EMBREE_GEOMETRY_INSTANCE */ -/* #undef EMBREE_GEOMETRY_GRID */ -/* #undef EMBREE_GEOMETRY_POINT */ -#define EMBREE_RAY_PACKETS -/* #undef EMBREE_COMPACT_POLYS */ - -#define EMBREE_CURVE_SELF_INTERSECTION_AVOIDANCE_FACTOR 2.0 -#define EMBREE_DISC_POINT_SELF_INTERSECTION_AVOIDANCE - -#if defined(EMBREE_GEOMETRY_TRIANGLE) - #define IF_ENABLED_TRIS(x) x -#else - #define IF_ENABLED_TRIS(x) -#endif - -#if defined(EMBREE_GEOMETRY_QUAD) - #define IF_ENABLED_QUADS(x) x -#else - #define IF_ENABLED_QUADS(x) -#endif - -#if defined(EMBREE_GEOMETRY_CURVE) || defined(EMBREE_GEOMETRY_POINT) - #define IF_ENABLED_CURVES_OR_POINTS(x) x -#else - #define IF_ENABLED_CURVES_OR_POINTS(x) -#endif - -#if defined(EMBREE_GEOMETRY_CURVE) - #define IF_ENABLED_CURVES(x) x -#else - #define IF_ENABLED_CURVES(x) -#endif - -#if defined(EMBREE_GEOMETRY_POINT) - #define IF_ENABLED_POINTS(x) x -#else - #define IF_ENABLED_POINTS(x) -#endif - -#if defined(EMBREE_GEOMETRY_SUBDIVISION) - #define IF_ENABLED_SUBDIV(x) x -#else - #define IF_ENABLED_SUBDIV(x) -#endif - -#if defined(EMBREE_GEOMETRY_USER) - #define IF_ENABLED_USER(x) x -#else - #define IF_ENABLED_USER(x) -#endif - -#if defined(EMBREE_GEOMETRY_INSTANCE) - #define IF_ENABLED_INSTANCE(x) x -#else - #define IF_ENABLED_INSTANCE(x) -#endif - -#if defined(EMBREE_GEOMETRY_GRID) - #define IF_ENABLED_GRIDS(x) x -#else - #define IF_ENABLED_GRIDS(x) -#endif -""" - ) - +for config_file in config_files: + os.rename(os.path.join(dest_dir, config_file), os.path.join(dest_dir, config_file[:-3])) with open("CMakeLists.txt", "r", encoding="utf-8") as cmake_file: cmake_content = cmake_file.read() @@ -193,70 +154,25 @@ with open("CMakeLists.txt", "r", encoding="utf-8") as cmake_file: minor_version = int(re.compile(r"EMBREE_VERSION_MINOR\s(\d+)").findall(cmake_content)[0]) patch_version = int(re.compile(r"EMBREE_VERSION_PATCH\s(\d+)").findall(cmake_content)[0]) -with open( - os.path.join(dest_dir, "include/embree3/rtcore_config.h"), "w", encoding="utf-8", newline="\n" -) as config_file: - config_file.write( - f"""// Copyright 2009-2021 Intel Corporation -// SPDX-License-Identifier: Apache-2.0 - -#pragma once +shutil.move(os.path.join(dest_dir, "kernels/rtcore_config.h"), os.path.join(dest_dir, ("include/embree4/"))) -#define RTC_VERSION_MAJOR {major_version} -#define RTC_VERSION_MINOR {minor_version} -#define RTC_VERSION_PATCH {patch_version} -#define RTC_VERSION {major_version}{minor_version:02d}{patch_version:02d} -#define RTC_VERSION_STRING "{major_version}.{minor_version}.{patch_version}" - -#define RTC_MAX_INSTANCE_LEVEL_COUNT 1 - -#define EMBREE_MIN_WIDTH 0 -#define RTC_MIN_WIDTH EMBREE_MIN_WIDTH - -#if !defined(EMBREE_STATIC_LIB) -# define EMBREE_STATIC_LIB -#endif -/* #undef EMBREE_API_NAMESPACE*/ - -#if defined(EMBREE_API_NAMESPACE) -# define RTC_NAMESPACE -# define RTC_NAMESPACE_BEGIN namespace {{ -# define RTC_NAMESPACE_END }} -# define RTC_NAMESPACE_USE using namespace; -# define RTC_API_EXTERN_C -# undef EMBREE_API_NAMESPACE -#else -# define RTC_NAMESPACE_BEGIN -# define RTC_NAMESPACE_END -# define RTC_NAMESPACE_USE -# if defined(__cplusplus) -# define RTC_API_EXTERN_C extern "C" -# else -# define RTC_API_EXTERN_C -# endif -#endif - -#if defined(ISPC) -# define RTC_API_IMPORT extern "C" unmasked -# define RTC_API_EXPORT extern "C" unmasked -#elif defined(EMBREE_STATIC_LIB) -# define RTC_API_IMPORT RTC_API_EXTERN_C -# define RTC_API_EXPORT RTC_API_EXTERN_C -#elif defined(_WIN32) -# define RTC_API_IMPORT RTC_API_EXTERN_C __declspec(dllimport) -# define RTC_API_EXPORT RTC_API_EXTERN_C __declspec(dllexport) -#else -# define RTC_API_IMPORT RTC_API_EXTERN_C -# define RTC_API_EXPORT RTC_API_EXTERN_C __attribute__ ((visibility ("default"))) -#endif - -#if defined(RTC_EXPORT_API) -# define RTC_API RTC_API_EXPORT -#else -# define RTC_API RTC_API_IMPORT -#endif -""" - ) +with open( + os.path.join(dest_dir, "include/embree4/rtcore_config.h"), "r+", encoding="utf-8", newline="\n" +) as rtcore_config: + lines = rtcore_config.readlines() + rtcore_config.seek(0) + for i, line in enumerate(lines): + if line.startswith("#define RTC_VERSION_MAJOR"): + lines[i : i + 5] = [ + f"#define RTC_VERSION_MAJOR {major_version}\n", + f"#define RTC_VERSION_MINOR {minor_version}\n", + f"#define RTC_VERSION_PATCH {patch_version}\n", + f"#define RTC_VERSION {major_version}{minor_version:02d}{patch_version:02d}\n", + f'#define RTC_VERSION_STRING "{major_version}.{minor_version}.{patch_version}"\n', + ] + break + rtcore_config.writelines(lines) + rtcore_config.truncate() os.chdir("..") shutil.rmtree("embree-tmp") @@ -264,4 +180,4 @@ shutil.rmtree("embree-tmp") subprocess.run(["git", "restore", "embree/patches"]) for patch in os.listdir("embree/patches"): - subprocess.run(["git", "apply", "embree/patches/" + patch]) + subprocess.run(["git", "apply", f"embree/patches/{patch}"]) diff --git a/modules/raycast/lightmap_raycaster_embree.cpp b/modules/raycast/lightmap_raycaster_embree.cpp index 2a66c36d53..84d9e19a3f 100644 --- a/modules/raycast/lightmap_raycaster_embree.cpp +++ b/modules/raycast/lightmap_raycaster_embree.cpp @@ -69,11 +69,12 @@ void LightmapRaycasterEmbree::filter_function(const struct RTCFilterFunctionNArg } bool LightmapRaycasterEmbree::intersect(Ray &r_ray) { - RTCIntersectContext context; - - rtcInitIntersectContext(&context); - - rtcIntersect1(embree_scene, &context, (RTCRayHit *)&r_ray); + RTCRayQueryContext context; + rtcInitRayQueryContext(&context); + RTCIntersectArguments args; + rtcInitIntersectArguments(&args); + args.context = &context; + rtcIntersect1(embree_scene, (RTCRayHit *)&r_ray, &args); return r_ray.geomID != RTC_INVALID_GEOMETRY_ID; } diff --git a/modules/raycast/lightmap_raycaster_embree.h b/modules/raycast/lightmap_raycaster_embree.h index d1999e329e..2b4530a368 100644 --- a/modules/raycast/lightmap_raycaster_embree.h +++ b/modules/raycast/lightmap_raycaster_embree.h @@ -37,7 +37,7 @@ #include "core/object/object.h" #include "scene/3d/lightmapper.h" -#include <embree3/rtcore.h> +#include <embree4/rtcore.h> class LightmapRaycasterEmbree : public LightmapRaycaster { GDCLASS(LightmapRaycasterEmbree, LightmapRaycaster); diff --git a/modules/raycast/raycast_occlusion_cull.cpp b/modules/raycast/raycast_occlusion_cull.cpp index 5005000eae..04b2600b53 100644 --- a/modules/raycast/raycast_occlusion_cull.cpp +++ b/modules/raycast/raycast_occlusion_cull.cpp @@ -488,11 +488,13 @@ void RaycastOcclusionCull::Scenario::update() { } void RaycastOcclusionCull::Scenario::_raycast(uint32_t p_idx, const RaycastThreadData *p_raycast_data) const { - RTCIntersectContext ctx; - rtcInitIntersectContext(&ctx); - ctx.flags = RTC_INTERSECT_CONTEXT_FLAG_COHERENT; - - rtcIntersect16((const int *)&p_raycast_data->masks[p_idx * TILE_RAYS], ebr_scene[current_scene_idx], &ctx, &p_raycast_data->rays[p_idx]); + RTCRayQueryContext context; + rtcInitRayQueryContext(&context); + RTCIntersectArguments args; + rtcInitIntersectArguments(&args); + args.flags = RTC_RAY_QUERY_FLAG_COHERENT; + args.context = &context; + rtcIntersect16((const int *)&p_raycast_data->masks[p_idx * TILE_RAYS], ebr_scene[current_scene_idx], &p_raycast_data->rays[p_idx], &args); } void RaycastOcclusionCull::Scenario::raycast(CameraRayTile *r_rays, const uint32_t *p_valid_masks, uint32_t p_tile_count) const { diff --git a/modules/raycast/raycast_occlusion_cull.h b/modules/raycast/raycast_occlusion_cull.h index ab5eb4eaf0..b61730fd78 100644 --- a/modules/raycast/raycast_occlusion_cull.h +++ b/modules/raycast/raycast_occlusion_cull.h @@ -40,7 +40,7 @@ #include "scene/resources/mesh.h" #include "servers/rendering/renderer_scene_occlusion_cull.h" -#include <embree3/rtcore.h> +#include <embree4/rtcore.h> class RaycastOcclusionCull : public RendererSceneOcclusionCull { typedef RTCRayHit16 CameraRayTile; diff --git a/modules/raycast/static_raycaster_embree.cpp b/modules/raycast/static_raycaster_embree.cpp index f9076d30dd..a6ad340397 100644 --- a/modules/raycast/static_raycaster_embree.cpp +++ b/modules/raycast/static_raycaster_embree.cpp @@ -53,9 +53,12 @@ void StaticRaycasterEmbree::free() { } bool StaticRaycasterEmbree::intersect(Ray &r_ray) { - RTCIntersectContext context; - rtcInitIntersectContext(&context); - rtcIntersect1(embree_scene, &context, (RTCRayHit *)&r_ray); + RTCRayQueryContext context; + rtcInitRayQueryContext(&context); + RTCIntersectArguments args; + rtcInitIntersectArguments(&args); + args.context = &context; + rtcIntersect1(embree_scene, (RTCRayHit *)&r_ray, &args); return r_ray.geomID != RTC_INVALID_GEOMETRY_ID; } diff --git a/modules/raycast/static_raycaster_embree.h b/modules/raycast/static_raycaster_embree.h index 24e1c7b92f..3ffab32bad 100644 --- a/modules/raycast/static_raycaster_embree.h +++ b/modules/raycast/static_raycaster_embree.h @@ -35,7 +35,7 @@ #include "core/math/static_raycaster.h" -#include <embree3/rtcore.h> +#include <embree4/rtcore.h> class StaticRaycasterEmbree : public StaticRaycaster { GDCLASS(StaticRaycasterEmbree, StaticRaycaster); |