Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/device/opencl/opencl_split.cpp
| Show First 20 Lines • Show All 117 Lines • ▼ Show 20 Lines | #undef KERNEL_TEX | ||||
| /* Allocate buffer for kernel globals */ | /* Allocate buffer for kernel globals */ | ||||
| device_memory kgbuffer; | device_memory kgbuffer; | ||||
| kgbuffer.resize(sizeof(KernelGlobals)); | kgbuffer.resize(sizeof(KernelGlobals)); | ||||
| mem_alloc("kernel_globals", kgbuffer, MEM_READ_WRITE); | mem_alloc("kernel_globals", kgbuffer, MEM_READ_WRITE); | ||||
| /* Keep rendering tiles until done. */ | /* Keep rendering tiles until done. */ | ||||
| while(task->acquire_tile(this, tile)) { | while(task->acquire_tile(this, tile)) { | ||||
| if(tile.task == RenderTile::PATH_TRACE) { | |||||
| assert(tile.task == RenderTile::PATH_TRACE); | |||||
| split_kernel->path_trace(task, | split_kernel->path_trace(task, | ||||
| tile, | tile, | ||||
| kgbuffer, | kgbuffer, | ||||
| *const_mem_map["__data"]); | *const_mem_map["__data"]); | ||||
| /* Complete kernel execution before release tile. */ | /* Complete kernel execution before release tile. */ | ||||
| /* This helps in multi-device render; | /* This helps in multi-device render; | ||||
| * The device that reaches the critical-section function | * The device that reaches the critical-section function | ||||
| * release_tile waits (stalling other devices from entering | * release_tile waits (stalling other devices from entering | ||||
| * release_tile) for all kernels to complete. If device1 (a | * release_tile) for all kernels to complete. If device1 (a | ||||
| * slow-render device) reaches release_tile first then it would | * slow-render device) reaches release_tile first then it would | ||||
| * stall device2 (a fast-render device) from proceeding to render | * stall device2 (a fast-render device) from proceeding to render | ||||
| * next tile. | * next tile. | ||||
| */ | */ | ||||
| clFinish(cqCommandQueue); | clFinish(cqCommandQueue); | ||||
| } | |||||
| else if(tile.task == RenderTile::DENOISE) { | |||||
| tile.sample = tile.start_sample + tile.num_samples; | |||||
| denoise(tile, *task); | |||||
| task->update_progress(&tile, tile.w*tile.h); | |||||
| } | |||||
| task->release_tile(tile); | task->release_tile(tile); | ||||
| } | } | ||||
| mem_free(kgbuffer); | mem_free(kgbuffer); | ||||
| } | } | ||||
| } | } | ||||
| bool is_split_kernel() { | |||||
brecht: `{` on new line. | |||||
| return true; | |||||
| } | |||||
| protected: | protected: | ||||
| /* ** Those guys are for workign around some compiler-specific bugs ** */ | /* ** Those guys are for workign around some compiler-specific bugs ** */ | ||||
| string build_options_for_base_program( | string build_options_for_base_program( | ||||
| const DeviceRequestedFeatures& requested_features) | const DeviceRequestedFeatures& requested_features) | ||||
| { | { | ||||
| return requested_features.get_build_options(); | return requested_features.get_build_options(); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 224 Lines • Show Last 20 Lines | |||||
{ on new line.