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

Function oneapi_enqueue_kernel

src/kernel/device/oneapi/kernel.cpp:329–753  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

327}
328
329bool oneapi_enqueue_kernel(KernelContext *kernel_context,
330 const int kernel,
331 const size_t global_size,
332 const size_t local_size,
333 const uint kernel_features,
334 bool use_hardware_raytracing,
335 void **args)
336{
337 bool success = true;
338 ::DeviceKernel device_kernel = (::DeviceKernel)kernel;
339 KernelGlobalsGPU *kg = (KernelGlobalsGPU *)kernel_context->kernel_globals;
340 sycl::queue *queue = reinterpret_cast<sycl::queue *>(kernel_context->queue);
341 assert(queue);
342 if (!queue) {
343 return false;
344 }
345
346 /* Let the compiler throw an error if there are any kernels missing in this implementation. */
347# if defined(_WIN32)
348# pragma warning(error : 4062)
349# elif defined(__GNUC__)
350# pragma GCC diagnostic push
351# pragma GCC diagnostic error "-Wswitch"
352# endif
353
354 int max_shaders = 0;
355
356 if (device_kernel == DEVICE_KERNEL_INTEGRATOR_SORT_BUCKET_PASS ||
357 device_kernel == DEVICE_KERNEL_INTEGRATOR_SORT_WRITE_PASS)
358 {
359 max_shaders = (kernel_context->scene_max_shaders);
360 }
361
362 try {
363 queue->submit([&](sycl::handler &cgh) {
364# ifdef WITH_EMBREE_GPU
365 /* Spec says it has no effect if the called kernel doesn't support the below specialization
366 * constant but it can still trigger a recompilation, so we set it only if needed. */
367 if (device_kernel_has_intersection(device_kernel)) {
368 const RTCFeatureFlags embree_features = use_hardware_raytracing ?
369 oneapi_embree_features_from_kernel_features(
370 kernel_features) :
371 RTC_FEATURE_FLAG_NONE;
372 cgh.set_specialization_constant<ONEAPIKernelContext::oneapi_embree_features>(
373 embree_features);
374 }
375# else
376 (void)kernel_features;
377# endif
378 switch (device_kernel) {
379 case DEVICE_KERNEL_INTEGRATOR_RESET: {
380 oneapi_call(kg, cgh, global_size, local_size, args, oneapi_kernel_integrator_reset);
381 break;
382 }
383 case DEVICE_KERNEL_INTEGRATOR_INIT_FROM_CAMERA: {
384 oneapi_call(
385 kg, cgh, global_size, local_size, args, oneapi_kernel_integrator_init_from_camera);
386 break;

Callers 1

enqueue_kernelMethod · 0.85

Tested by

no test coverage detected