rendering-in-cgi/Framework/external/embree/tutorials/common/device_default.h
2024-04-23 10:14:24 +02:00

53 lines
1.4 KiB
C++

// Copyright 2009-2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
#pragma once
#if defined(EMBREE_SYCL_SUPPORT)
// If we use the internal clang frontend of the dpc++ compiler directly __INTEL_LLVM_COMPILER is not set.
// I think doing this is fine because normal clang can not compile dpcpp/sycl code anyway.
#if defined(__WIN32__) and defined(__clang__) and !defined(__INTEL_LLVM_COMPILER)
#define __INTEL_LLVM_COMPILER
#endif
#endif
#if defined(EMBREE_SYCL_TUTORIAL)
# define __SYCL_USE_NON_VARIADIC_SPIRV_OCL_PRINTF__
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
# pragma clang diagnostic ignored "-W#pragma-messages"
# include <sycl/sycl.hpp>
# pragma clang diagnostic pop
#else
# if !defined(SYCL_EXTERNAL)
# define SYCL_EXTERNAL
# endif
#endif
/* include embree API */
#include "../../include/embree4/rtcore.h"
RTC_NAMESPACE_USE
#include "../../kernels/config.h"
namespace embree
{
#if defined(EMBREE_SYCL_TUTORIAL) && defined(EMBREE_SYCL_SUPPORT)
extern sycl::queue *global_gpu_queue;
extern sycl::context *global_gpu_context;
extern sycl::device *global_gpu_device;
/* returns function pointer to be usable in SYCL kernel */
template<auto F>
inline decltype(F) getFunctionPointer() {
return rtcGetSYCLDeviceFunctionPointer<F>(*global_gpu_queue);
}
#define GET_FUNCTION_POINTER(f) getFunctionPointer<f>()
#else
#define GET_FUNCTION_POINTER(f) f
#endif
}