mirror of
https://github.com/Redot-Engine/redot-engine.git
synced 2025-12-06 07:17:42 -05:00
embree: Update to 4.3.1
This commit is contained in:
committed by
Jakub Marcowski
parent
d2f9245ddc
commit
c43eab55a4
@@ -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]
|
||||
|
||||
@@ -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])
|
||||
|
||||
shutil.move(os.path.join(dest_dir, "kernels/rtcore_config.h"), os.path.join(dest_dir, ("include/embree4/")))
|
||||
|
||||
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
|
||||
|
||||
#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
|
||||
"""
|
||||
)
|
||||
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}"])
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user