MCPcopy Create free account
hub / github.com/blender/cycles / oneapi_load_kernels

Function oneapi_load_kernels

src/kernel/device/oneapi/kernel.cpp:239–327  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

237}
238
239bool oneapi_load_kernels(SyclQueue *queue_,
240 const uint kernel_features,
241 bool use_hardware_raytracing)
242{
243 assert(queue_);
244 sycl::queue *queue = reinterpret_cast<sycl::queue *>(queue_);
245
246# ifdef WITH_EMBREE_GPU
247 /* For best performance, we always JIT compile the kernels that are using Embree. */
248 if (use_hardware_raytracing) {
249 try {
250 sycl::kernel_bundle<sycl::bundle_state::input> all_kernels_bundle =
251 sycl::get_kernel_bundle<sycl::bundle_state::input>(queue->get_context(),
252 {queue->get_device()});
253
254 for (const sycl::kernel_id &kernel_id : all_kernels_bundle.get_kernel_ids()) {
255 const std::string &kernel_name = kernel_id.get_name();
256
257 if (!oneapi_kernel_is_required_for_features(kernel_name, kernel_features) ||
258 !(oneapi_kernel_has_intersections(kernel_name) &&
259 oneapi_kernel_is_compatible_with_hardware_raytracing(kernel_name)))
260 {
261 continue;
262 }
263
264 sycl::kernel_bundle<sycl::bundle_state::input> one_kernel_bundle_input =
265 sycl::get_kernel_bundle<sycl::bundle_state::input>(
266 queue->get_context(), {queue->get_device()}, {kernel_id});
267
268 const RTCFeatureFlags embree_features = oneapi_embree_features_from_kernel_features(
269 kernel_features);
270 one_kernel_bundle_input
271 .set_specialization_constant<ONEAPIKernelContext::oneapi_embree_features>(
272 embree_features);
273 sycl::build(one_kernel_bundle_input);
274 }
275 }
276 catch (const sycl::exception &e) {
277 if (s_error_cb) {
278 s_error_cb(e.what(), s_error_user_ptr);
279 }
280 return false;
281 }
282 }
283# endif
284
285 try {
286 sycl::kernel_bundle<sycl::bundle_state::input> all_kernels_bundle =
287 sycl::get_kernel_bundle<sycl::bundle_state::input>(queue->get_context(),
288 {queue->get_device()});
289
290 for (const sycl::kernel_id &kernel_id : all_kernels_bundle.get_kernel_ids()) {
291 const std::string &kernel_name = kernel_id.get_name();
292
293 /* In case HWRT is on, compilation of kernels using Embree is already handled in previous
294 * block. */
295 if (!oneapi_kernel_is_required_for_features(kernel_name, kernel_features) ||
296 (use_hardware_raytracing && oneapi_kernel_has_intersections(kernel_name) &&

Callers 1

load_kernelsMethod · 0.85

Tested by

no test coverage detected