This patch adds a new Cycles device with similar functionality to the existing GPU devices. Kernel compilation and runtime interaction happen via oneAPI DPC++ compiler and SYCL API. This implementation is primarly focusing on Intel® Arc™ GPUs and other future Intel GPUs. The first supported drivers are 101.1660 on Windows and 22.10.22597 on Linux. The necessary tools for compilation are: - A SYCL compiler such as oneAPI DPC++ compiler or https://github.com/intel/llvm - Intel® oneAPI Level Zero which is used for low level device queries: https://github.com/oneapi-src/level-zero - To optionally generate prebuilt graphics binaries: Intel® Graphics Compiler All are included in Linux precompiled libraries on svn: https://svn.blender.org/svnroot/bf-blender/trunk/lib The same goes for Windows precompiled binaries but for the graphics compiler, available as "Intel® Graphics Offline Compiler for OpenCL™ Code" from https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html, for which path can be set as OCLOC_INSTALL_DIR. Being based on the open SYCL standard, this implementation could also be extended to run on other compatible non-Intel hardware in the future. Reviewed By: sergey, brecht Differential Revision: https://developer.blender.org/D15254 Co-authored-by: Nikita Sirgienko <nikita.sirgienko@intel.com> Co-authored-by: Stefan Werner <stefan.werner@intel.com>
48 lines
1.3 KiB
C
48 lines
1.3 KiB
C
/* SPDX-License-Identifier: Apache-2.0
|
|
* Copyright 2021-2022 Intel Corporation */
|
|
|
|
#pragma once
|
|
|
|
#include "kernel/integrator/state.h"
|
|
#include "kernel/types.h"
|
|
#include "kernel/util/profiling.h"
|
|
|
|
CCL_NAMESPACE_BEGIN
|
|
|
|
/* NOTE(@nsirgien): With SYCL we can't declare __constant__ global variable, which will be
|
|
* accessible from device code, like it has been done for Cycles CUDA backend. So, the backend will
|
|
* allocate this "constant" memory regions and store pointers to them in oneAPI context class */
|
|
|
|
struct IntegratorStateGPU;
|
|
struct IntegratorQueueCounter;
|
|
|
|
typedef struct KernelGlobalsGPU {
|
|
|
|
#define KERNEL_DATA_ARRAY(type, name) const type *__##name = nullptr;
|
|
#include "kernel/data_arrays.h"
|
|
#undef KERNEL_DATA_ARRAY
|
|
IntegratorStateGPU *integrator_state;
|
|
const KernelData *__data;
|
|
#ifdef WITH_ONEAPI_SYCL_HOST_ENABLED
|
|
size_t nd_item_local_id_0;
|
|
size_t nd_item_local_range_0;
|
|
size_t nd_item_group_0;
|
|
size_t nd_item_group_range_0;
|
|
|
|
size_t nd_item_global_id_0;
|
|
size_t nd_item_global_range_0;
|
|
#endif
|
|
} KernelGlobalsGPU;
|
|
|
|
typedef ccl_global KernelGlobalsGPU *ccl_restrict KernelGlobals;
|
|
|
|
#define kernel_data (*(__data))
|
|
#define kernel_integrator_state (*(integrator_state))
|
|
|
|
/* data lookup defines */
|
|
|
|
#define kernel_data_fetch(name, index) __##name[index]
|
|
#define kernel_data_array(name) __##name
|
|
|
|
CCL_NAMESPACE_END
|