// Copyright 2009-2021 Intel Corporation // SPDX-License-Identifier: Apache-2.0 #pragma once #include "../sys/alloc.h" #include "emath.h" #if defined(EMBREE_SYCL_SUPPORT) && defined(__SYCL_DEVICE_ONLY__) # include "vec3ba_sycl.h" #else #include "../simd/sse.h" namespace embree { //////////////////////////////////////////////////////////////////////////////// /// SSE Vec3ba Type //////////////////////////////////////////////////////////////////////////////// struct __aligned(16) Vec3ba { … }; //////////////////////////////////////////////////////////////////////////////// /// Unary Operators //////////////////////////////////////////////////////////////////////////////// __forceinline Vec3ba operator !( const Vec3ba& a ) { … } //////////////////////////////////////////////////////////////////////////////// /// Binary Operators //////////////////////////////////////////////////////////////////////////////// __forceinline Vec3ba operator &( const Vec3ba& a, const Vec3ba& b ) { … } __forceinline Vec3ba operator |( const Vec3ba& a, const Vec3ba& b ) { … } __forceinline Vec3ba operator ^( const Vec3ba& a, const Vec3ba& b ) { … } //////////////////////////////////////////////////////////////////////////////// /// Assignment Operators //////////////////////////////////////////////////////////////////////////////// __forceinline Vec3ba& operator &=( Vec3ba& a, const Vec3ba& b ) { … } __forceinline Vec3ba& operator |=( Vec3ba& a, const Vec3ba& b ) { … } __forceinline Vec3ba& operator ^=( Vec3ba& a, const Vec3ba& b ) { … } //////////////////////////////////////////////////////////////////////////////// /// Comparison Operators + Select //////////////////////////////////////////////////////////////////////////////// __forceinline bool operator ==( const Vec3ba& a, const Vec3ba& b ) { … } __forceinline bool operator !=( const Vec3ba& a, const Vec3ba& b ) { … } __forceinline bool operator < ( const Vec3ba& a, const Vec3ba& b ) { … } //////////////////////////////////////////////////////////////////////////////// /// Reduction Operations //////////////////////////////////////////////////////////////////////////////// __forceinline bool reduce_and( const Vec3ba& a ) { … } __forceinline bool reduce_or ( const Vec3ba& a ) { … } __forceinline bool all ( const Vec3ba& b ) { … } __forceinline bool any ( const Vec3ba& b ) { … } __forceinline bool none ( const Vec3ba& b ) { … } __forceinline size_t movemask(const Vec3ba& a) { … } //////////////////////////////////////////////////////////////////////////////// /// Output Operators //////////////////////////////////////////////////////////////////////////////// __forceinline embree_ostream operator<<(embree_ostream cout, const Vec3ba& a) { … } } #endif