mirror of
				https://github.com/godotengine/godot.git
				synced 2025-11-03 23:21:15 +00:00 
			
		
		
		
	Since Embree v3.13.0 supports AARCH64, switch back to the official repo instead of using Embree-aarch64. `thirdparty/embree/patches/godot-changes.patch` should now contain an accurate diff of the changes done to the library.
		
			
				
	
	
		
			84 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright 2009-2021 Intel Corporation
 | 
						|
// SPDX-License-Identifier: Apache-2.0
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include "instance.h"
 | 
						|
#include "../common/ray.h"
 | 
						|
#include "../common/point_query.h"
 | 
						|
 | 
						|
namespace embree
 | 
						|
{
 | 
						|
  namespace isa
 | 
						|
  {
 | 
						|
    struct InstanceIntersector1
 | 
						|
    {
 | 
						|
      typedef InstancePrimitive Primitive;
 | 
						|
 | 
						|
      struct Precalculations {
 | 
						|
        __forceinline Precalculations (const Ray& ray, const void *ptr) {}
 | 
						|
      };
 | 
						|
      
 | 
						|
      static void intersect(const Precalculations& pre, RayHit& ray, IntersectContext* context, const Primitive& prim);
 | 
						|
      static bool occluded(const Precalculations& pre, Ray& ray, IntersectContext* context, const Primitive& prim);
 | 
						|
      static bool pointQuery(PointQuery* query, PointQueryContext* context, const Primitive& prim);
 | 
						|
    };
 | 
						|
 | 
						|
    struct InstanceIntersector1MB
 | 
						|
    {
 | 
						|
      typedef InstancePrimitive Primitive;
 | 
						|
 | 
						|
      struct Precalculations {
 | 
						|
        __forceinline Precalculations (const Ray& ray, const void *ptr) {}
 | 
						|
      };
 | 
						|
      
 | 
						|
      static void intersect(const Precalculations& pre, RayHit& ray, IntersectContext* context, const Primitive& prim);
 | 
						|
      static bool occluded(const Precalculations& pre, Ray& ray, IntersectContext* context, const Primitive& prim);
 | 
						|
      static bool pointQuery(PointQuery* query, PointQueryContext* context, const Primitive& prim);
 | 
						|
    };
 | 
						|
 | 
						|
    template<int K>
 | 
						|
      struct InstanceIntersectorK
 | 
						|
    {
 | 
						|
      typedef InstancePrimitive Primitive;
 | 
						|
      
 | 
						|
      struct Precalculations {
 | 
						|
        __forceinline Precalculations (const vbool<K>& valid, const RayK<K>& ray) {}
 | 
						|
      };
 | 
						|
      
 | 
						|
      static void intersect(const vbool<K>& valid_i, const Precalculations& pre, RayHitK<K>& ray, IntersectContext* context, const Primitive& prim);
 | 
						|
      static vbool<K> occluded(const vbool<K>& valid_i, const Precalculations& pre, RayK<K>& ray, IntersectContext* context, const Primitive& prim);
 | 
						|
 | 
						|
      static __forceinline void intersect(Precalculations& pre, RayHitK<K>& ray, size_t k, IntersectContext* context, const Primitive& prim) {
 | 
						|
        intersect(vbool<K>(1<<int(k)),pre,ray,context,prim);
 | 
						|
      }
 | 
						|
      
 | 
						|
      static __forceinline bool occluded(Precalculations& pre, RayK<K>& ray, size_t k, IntersectContext* context, const Primitive& prim) {
 | 
						|
        occluded(vbool<K>(1<<int(k)),pre,ray,context,prim);
 | 
						|
        return ray.tfar[k] < 0.0f; 
 | 
						|
      }
 | 
						|
    };
 | 
						|
 | 
						|
    template<int K>
 | 
						|
      struct InstanceIntersectorKMB
 | 
						|
    {
 | 
						|
      typedef InstancePrimitive Primitive;
 | 
						|
      
 | 
						|
      struct Precalculations {
 | 
						|
        __forceinline Precalculations (const vbool<K>& valid, const RayK<K>& ray) {}
 | 
						|
      };
 | 
						|
      
 | 
						|
      static void intersect(const vbool<K>& valid_i, const Precalculations& pre, RayHitK<K>& ray, IntersectContext* context, const Primitive& prim);
 | 
						|
      static vbool<K> occluded(const vbool<K>& valid_i, const Precalculations& pre, RayK<K>& ray, IntersectContext* context, const Primitive& prim);
 | 
						|
 | 
						|
      static __forceinline void intersect(Precalculations& pre, RayHitK<K>& ray, size_t k, IntersectContext* context, const Primitive& prim) {
 | 
						|
        intersect(vbool<K>(1<<int(k)),pre,ray,context,prim);
 | 
						|
      }
 | 
						|
      
 | 
						|
      static __forceinline bool occluded(Precalculations& pre, RayK<K>& ray, size_t k, IntersectContext* context, const Primitive& prim) {
 | 
						|
        occluded(vbool<K>(1<<int(k)),pre,ray,context,prim);
 | 
						|
        return ray.tfar[k] < 0.0f; 
 | 
						|
      }
 | 
						|
    };
 | 
						|
  }
 | 
						|
}
 |